first commit
21
.env.development
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# 环境变量 (命名必须以 VITE_ 开头)
|
||||||
|
# 接口前缀
|
||||||
|
VITE_API_PREFIX = '/dev-api'
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
VITE_API_BASE_URL = 'http://localhost:6609'
|
||||||
|
|
||||||
|
# 接口地址 (WebSocket)
|
||||||
|
VITE_API_WS_URL = 'ws://localhost:6609'
|
||||||
|
|
||||||
|
# 地址前缀
|
||||||
|
VITE_BASE = '/'
|
||||||
|
|
||||||
|
# 是否开启开发者工具
|
||||||
|
VITE_OPEN_DEVTOOLS = false
|
||||||
|
|
||||||
|
# 应用配置面板
|
||||||
|
VITE_APP_SETTING = true
|
||||||
|
|
||||||
|
# 终端ID
|
||||||
|
VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
|
||||||
17
.env.production
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# 环境变量 (命名必须以 VITE_ 开头)
|
||||||
|
|
||||||
|
# 是否在打包时启用 Mock
|
||||||
|
VITE_BUILD_MOCK = false
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
VITE_API_BASE_URL = 'https://api.continew.top'
|
||||||
|
VITE_API_WS_URL = 'wss://api.continew.top'
|
||||||
|
|
||||||
|
# 地址前缀
|
||||||
|
VITE_BASE = '/'
|
||||||
|
|
||||||
|
# 应用配置面板
|
||||||
|
VITE_APP_SETTING = true
|
||||||
|
|
||||||
|
# 终端ID
|
||||||
|
VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
|
||||||
22
.env.test
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# 环境变量 (命名必须以 VITE_ 开头)
|
||||||
|
|
||||||
|
# 是否在打包时启用 Mock
|
||||||
|
VITE_BUILD_MOCK = true
|
||||||
|
|
||||||
|
# 接口前缀
|
||||||
|
VITE_API_PREFIX = '/test-api'
|
||||||
|
|
||||||
|
# 接口地址
|
||||||
|
VITE_API_BASE_URL = 'http://localhost:6609'
|
||||||
|
|
||||||
|
# 地址前缀
|
||||||
|
VITE_BASE = '/test'
|
||||||
|
|
||||||
|
# 是否开启开发者工具
|
||||||
|
VITE_OPEN_DEVTOOLS = true
|
||||||
|
|
||||||
|
# 应用配置面板
|
||||||
|
VITE_APP_SETTING = false
|
||||||
|
|
||||||
|
# 终端ID
|
||||||
|
VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
|
||||||
5
.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
.idea/
|
||||||
|
*.zip
|
||||||
|
package-lock.json
|
||||||
BIN
.image/qrcode.jpg
Normal file
|
After Width: | Height: | Size: 84 KiB |
BIN
.image/screenshot/000登录页面-H5.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
.image/screenshot/000登录页面.png
Normal file
|
After Width: | Height: | Size: 211 KiB |
BIN
.image/screenshot/001仪表盘.png
Normal file
|
After Width: | Height: | Size: 248 KiB |
BIN
.image/screenshot/002分析页.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
.image/screenshot/010个人中心.png
Normal file
|
After Width: | Height: | Size: 125 KiB |
BIN
.image/screenshot/011安全设置-修改邮箱.png
Normal file
|
After Width: | Height: | Size: 250 KiB |
BIN
.image/screenshot/012安全设置-修改邮箱-邮箱验证码.png
Normal file
|
After Width: | Height: | Size: 48 KiB |
BIN
.image/screenshot/013消息中心.png
Normal file
|
After Width: | Height: | Size: 57 KiB |
BIN
.image/screenshot/020系统管理-用户管理-列表.png
Normal file
|
After Width: | Height: | Size: 105 KiB |
BIN
.image/screenshot/021系统管理-用户管理-新增.png
Normal file
|
After Width: | Height: | Size: 108 KiB |
BIN
.image/screenshot/025系统管理-角色管理-列表.png
Normal file
|
After Width: | Height: | Size: 80 KiB |
BIN
.image/screenshot/026系统管理-角色管理-新增.png
Normal file
|
After Width: | Height: | Size: 95 KiB |
BIN
.image/screenshot/027系统管理-角色管理-分配.png
Normal file
|
After Width: | Height: | Size: 106 KiB |
BIN
.image/screenshot/030系统管理-菜单管理-列表.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
BIN
.image/screenshot/031系统管理-菜单管理-新增.png
Normal file
|
After Width: | Height: | Size: 183 KiB |
BIN
.image/screenshot/035系统管理-部门管理-列表.png
Normal file
|
After Width: | Height: | Size: 100 KiB |
BIN
.image/screenshot/036系统管理-部门管理-新增.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
.image/screenshot/040系统管理-字典管理-列表.png
Normal file
|
After Width: | Height: | Size: 88 KiB |
BIN
.image/screenshot/041系统管理-字典项管理.png
Normal file
|
After Width: | Height: | Size: 130 KiB |
BIN
.image/screenshot/045系统管理-公告管理-列表.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
.image/screenshot/046系统管理-公告管理-修改.png
Normal file
|
After Width: | Height: | Size: 168 KiB |
BIN
.image/screenshot/050系统管理-文件管理-列表-1.png
Normal file
|
After Width: | Height: | Size: 322 KiB |
BIN
.image/screenshot/051系统管理-文件管理-列表-2.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
.image/screenshot/052系统管理-文件管理-查看文档.png
Normal file
|
After Width: | Height: | Size: 244 KiB |
BIN
.image/screenshot/055系统管理-存储管理-列表.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
.image/screenshot/056系统管理-存储管理-新增.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
BIN
.image/screenshot/060系统管理-系统配置.png
Normal file
|
After Width: | Height: | Size: 90 KiB |
BIN
.image/screenshot/061系统管理-安全配置.png
Normal file
|
After Width: | Height: | Size: 96 KiB |
BIN
.image/screenshot/100系统监控-在线用户.png
Normal file
|
After Width: | Height: | Size: 122 KiB |
BIN
.image/screenshot/101系统监控-系统日志-登录日志.png
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
.image/screenshot/102系统监控-系统日志-操作日志.png
Normal file
|
After Width: | Height: | Size: 139 KiB |
BIN
.image/screenshot/103系统监控-系统日志-操作日志-详情.png
Normal file
|
After Width: | Height: | Size: 161 KiB |
BIN
.image/screenshot/150任务调度-任务管理-列表.png
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
.image/screenshot/151任务调度-任务管理-新增.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
.image/screenshot/155任务调度-任务日志-列表.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
.image/screenshot/156任务调度-任务日志-详情.png
Normal file
|
After Width: | Height: | Size: 145 KiB |
BIN
.image/screenshot/200能力开放-应用管理-列表.png
Normal file
|
After Width: | Height: | Size: 66 KiB |
BIN
.image/screenshot/201能力开放-应用管理-新增.png
Normal file
|
After Width: | Height: | Size: 77 KiB |
BIN
.image/screenshot/300系统工具-代码生成-列表.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
.image/screenshot/301系统工具-代码生成-配置.png
Normal file
|
After Width: | Height: | Size: 131 KiB |
BIN
.image/screenshot/302系统工具-代码生成-预览.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
296
CHANGELOG.md
Normal file
@@ -0,0 +1,296 @@
|
|||||||
|
## [v3.5.0](https://github.com/continew-org/continew-admin-ui/compare/v3.4.1...v3.5.0) (2025-03-05)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 新增应用配置开关属性,迁移主题配置至 `src/config/setting.ts`,新增色弱模式与哀悼模式 ([Gitee#40](https://gitee.com/continew/continew-admin-ui/pulls/40)) ([f64a716](https://github.com/continew-org/continew-admin-ui/commit/f64a7163e5f40da0e838f1ff0659042f874183a0)) ([22fb597](https://github.com/continew-org/continew-admin-ui/commit/22fb597ac863f095c74fb9a24febf7490f1d2e07))
|
||||||
|
* 【generator】代码生成、预览支持批量 ([f292db5](https://github.com/continew-org/continew-admin-ui/commit/f292db55af7c7ee21949c7109537a96dbf6443cc))
|
||||||
|
* 路由菜单组件路径新增下拉选择 ([Gitee#41](https://gitee.com/continew/continew-admin-ui/pulls/41)) ([438c2af](https://github.com/continew-org/continew-admin-ui/commit/438c2af4a656b37a61cc5b102f9aab87b14bb6bd))
|
||||||
|
* 🔥新增终端管理 ([Gitee#43](https://gitee.com/continew/continew-admin-ui/pulls/43)) ([bc3a5cf](https://github.com/continew-org/continew-admin-ui/commit/bc3a5cff910e8f136151a49ccc34fbbf75d7d642)) ([6ff3072](https://github.com/continew-org/continew-admin-ui/commit/6ff307251fd1fcd69347d300533f1c5724add29f)) ([dc6e0a4](https://github.com/continew-org/continew-admin-ui/commit/dc6e0a4ff6d44ed2f7eca6adbc775f728e6ea3b7))
|
||||||
|
* 🔥新增分割面板组件(左树右表) ([Gitee#44](https://gitee.com/continew/continew-admin-ui/pulls/44)) ([b98febc](https://github.com/continew-org/continew-admin-ui/commit/b98febcff5e3ecece213ab1689e5d1c03d4ab6b9)) ([8c55504](https://github.com/continew-org/continew-admin-ui/commit/8c55504bf8e94ab27dddeef81dbc834eb91289a9)) ([046f1f7](https://github.com/continew-org/continew-admin-ui/commit/046f1f7492a13b7a018fc6e05581b3e5bc37a96d)) ([28ac501](https://github.com/continew-org/continew-admin-ui/commit/28ac501f4af419e3de198d04b081a9d82f396997)) ([5ab7cdd](https://github.com/continew-org/continew-admin-ui/commit/5ab7cdd1e0781ba2af363d0739e48a92ea7ce9ba))
|
||||||
|
* 部门管理新增组织架构视图 ([Gitee#45](https://gitee.com/continew/continew-admin-ui/pulls/45)) ([4b61e40](https://github.com/continew-org/continew-admin-ui/commit/4b61e4027e770b63e6301335d5add390d9afef50))
|
||||||
|
* 【generator】源项目内生成代码 ([GitHub#44](https://github.com/continew-org/continew-admin-ui/pull/44)) ([14cc54d](https://github.com/continew-org/continew-admin-ui/commit/14cc54d97f9958fd6f3d60739fe46523a2a837d2))
|
||||||
|
* 新增左树右表布局组件GiLeftRightPane封装,分割面板组件GiSplitPaneButton封装,以及代码优化(同步 GiDemo 更新) ([ccfec21](https://github.com/continew-org/continew-admin-ui/commit/ccfec2155f4a27452f090e14c172e05984ad7423))
|
||||||
|
* add search component ([GitHub#49](https://github.com/continew-org/continew-admin-ui/pull/49)) ([21d0b1e](https://github.com/continew-org/continew-admin-ui/commit/21d0b1e3fb78fa94469d3a01dd921e68b02f22a1)) ([b04a85f](https://github.com/continew-org/continew-admin-ui/commit/b04a85fbc5c80f095c20216455182170e2f495af))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 优化菜单表单布局 ([84be614](https://github.com/continew-org/continew-admin-ui/commit/84be614d4c6e640d1c18faecda6c405e2356d082))
|
||||||
|
- http util and route store ([GitHub#43](https://github.com/continew-org/continew-admin-ui/pull/43)) ([d3aeca8](https://github.com/continew-org/continew-admin-ui/commit/d3aeca81d850d4d13af7fec3c6a7a4690068200c))
|
||||||
|
- 优化字典操作按钮显示逻辑 ([113c6e3](https://github.com/continew-org/continew-admin-ui/commit/113c6e3a718f50ad5195846d4e0cc44a81950982))
|
||||||
|
- 重命名表格样式(同步 GiDemo 更新) ([df73245](https://github.com/continew-org/continew-admin-ui/commit/df732455d0a79eac6ecdee7eda4c85b16065bb7f))
|
||||||
|
- GiForm 新增 show 属性配置,优先级比 hide 高(同步 GiDemo 更新) ([6595a77](https://github.com/continew-org/continew-admin-ui/commit/6595a77317ee922d60354a004d45e7c27f08789d))
|
||||||
|
- 🔥使用左树右表重构角色管理,角色详情增加用户管理,功能权限扁平化 ([cfa20ac](https://github.com/continew-org/continew-admin-ui/commit/cfa20ac765eb5638f1687ede91a8efb78d6a5d99)) ([bc063e6](https://github.com/continew-org/continew-admin-ui/commit/bc063e624c7fd15657354df9c2eafdea1012ebd0))
|
||||||
|
- 优化树列表更多按钮样式(PR by 番茄大佬) ([3b1f1aa](https://github.com/continew-org/continew-admin-ui/commit/3b1f1aaee47083f84f41557a00364d94c964b44e))
|
||||||
|
- 🔥优化系统配置 ([fbec732](https://github.com/continew-org/continew-admin-ui/commit/fbec7321079717cda709230e1be145131e922466))
|
||||||
|
- 🔥优化 GiForm(同步 GiDemo 更新) ([47769f9](https://github.com/continew-org/continew-admin-ui/commit/47769f9ad84d66c53787f1d307aafc0f938a7b33)) ([d1e5ecf](https://github.com/continew-org/continew-admin-ui/commit/d1e5ecf81d7122ccd0eceb162578ebddc4105b72))
|
||||||
|
- 完善部分输入表单项字符长度限制 ([e8249bc](https://github.com/continew-org/continew-admin-ui/commit/e8249bc4d2343078849d7f22b9d1f67629c5ec08))
|
||||||
|
- 🔥重构存储管理页面,分页列表 => 无分页卡片 ([25da301](https://github.com/continew-org/continew-admin-ui/commit/25da3019a3d9e7e5fd733dbb340b80f67da31ba9))
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 🔥修复 AccountLogin 组件多次初始化的问题(图形验证码接口被调用 2 次) ([6b4f0d1](https://github.com/continew-org/continew-admin-ui/commit/6b4f0d1e99ffd6f53201eea412b6cb42ab7d0b84))
|
||||||
|
- 修复 GiTable 插槽类型不完全问题(同步 GiDemo 更新) ([4b5536a](https://github.com/continew-org/continew-admin-ui/commit/4b5536a0b2d1c100785ca9fef3a51f0c8d632efb))
|
||||||
|
- 【schedule】修复无法打开 CRON 生成器的问题 ([7f503f3](https://github.com/continew-org/continew-admin-ui/commit/7f503f3af35a34f0e097031961cf39787a7c1faf))
|
||||||
|
- 消除面包屑组件的控制台警告(同步 GiDemo 更新) ([53fd8a4](https://github.com/continew-org/continew-admin-ui/commit/53fd8a465a1dfd89fdf856ab2f17e8ada790fbd8))
|
||||||
|
- 🔥验证码过期时间对比改为服务器时间 ([GitHub#39](https://github.com/continew-org/continew-admin-ui/pull/39)) ([f157130](https://github.com/continew-org/continew-admin-ui/commit/f157130b2340fd963249192e0873b4fcd3038d33))
|
||||||
|
- divider background in dark mode ([GitHub#40](https://github.com/continew-org/continew-admin-ui/pull/40)) ([eb48157](https://github.com/continew-org/continew-admin-ui/commit/eb481572adcd786072b0e33aa42dcb743788296c))
|
||||||
|
- 🔥修复文件无法直接下载问题 ([91092f1](https://github.com/continew-org/continew-admin-ui/commit/91092f1cf3355da69ada5fd5edd2a17b6c747d1e))
|
||||||
|
- dark toggle and usedict with fix dict can't persist ([GitHub#47](https://github.com/continew-org/continew-admin-ui/pull/47)) ([1c743fb](https://github.com/continew-org/continew-admin-ui/commit/1c743fb0978d470b014f9ec6e5986e82888a8950)) ([00b47da](https://github.com/continew-org/continew-admin-ui/commit/00b47dae6fece3b4ec1ae46a7a084d32d83838e0))
|
||||||
|
- 修复Sass的@import规则已弃用警告问题 ([Gitee#47](https://gitee.com/continew/continew-admin-ui/pulls/47)) ([d28b92e](https://github.com/continew-org/continew-admin-ui/commit/d28b92ee898beb89e380c6f61b5d2e822ac0ea89))
|
||||||
|
|
||||||
|
## [v3.4.1](https://github.com/continew-org/continew-admin-ui/compare/v3.4.0...v3.4.1) (2024-12-08)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 标签页新增重新加载、关闭左侧操作 ([b030921](https://github.com/continew-org/continew-admin-ui/commit/b030921189e9093f07369cebebdfa8b12b3fb153))
|
||||||
|
* 新增关于项目菜单(该菜单从动态路由调整为静态,且不再需要鉴权) ([7fa4297](https://github.com/continew-org/continew-admin-ui/commit/7fa42975cfa32e1fb8eeca26e3a06be2e10d2aa3)) ([2191335](https://github.com/continew-org/continew-admin-ui/commit/21913350e7d8dfd0a06464efcf27d2d234270ab0))
|
||||||
|
* GiForm 支持 label 自定义渲染,以及插槽自定义渲染(同步 GiDemo 更新) ([c2463fc](https://github.com/continew-org/continew-admin-ui/commit/c2463fc4502acbd9274f1080f86a74ca43951927))
|
||||||
|
* 新增验证码配置开关 ([4cd892e](https://github.com/continew-org/continew-admin-ui/commit/4cd892e288c08b04f038bf6034c14ec022c0e919)) ([51a2168](https://github.com/continew-org/continew-admin-ui/commit/51a21688223346877f00f5142e277682e5774158)) (Gitee#37@@aiming317)
|
||||||
|
* 面包屑新增过渡动画效果(同步 GiDemo 更新) ([abacb26](https://github.com/continew-org/continew-admin-ui/commit/abacb267aaf96516480255f509b07b32d44abd27))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 拆分并调整路由守卫,优化顶部进度条展示 ([e8941ad](https://github.com/continew-org/continew-admin-ui/commit/e8941adde4c5156bbe7f2d95f013add353aee61b))
|
||||||
|
- 移除部分异步组件加载 ([61ef692](https://github.com/continew-org/continew-admin-ui/commit/61ef692c8398b4f352f52f11a82d64dd9f7fa8e3))
|
||||||
|
- 重构系统配置页面 ([930227e](https://github.com/continew-org/continew-admin-ui/commit/930227ea0cc6f17545841a5548a91202fa0bc2a1))
|
||||||
|
- useForm => useResetReactive(同步 GiDemo 更新) ([6c45483](https://github.com/continew-org/continew-admin-ui/commit/6c45483fae53677c57b9dc0c6a1e4c42b659d151)) ([7fe3ffe](https://github.com/continew-org/continew-admin-ui/commit/7fe3ffe9dab318d744d2dd8d7d1e793efdbc97d1))
|
||||||
|
- 优化搜索输入框 input => input-search ([7402de5](https://github.com/continew-org/continew-admin-ui/commit/7402de5695140b5d4a6228fd37ef23c793c8e5e7))
|
||||||
|
- 优化系统日志、系统配置标签样式 ([b82ca81](https://github.com/continew-org/continew-admin-ui/commit/b82ca81b79b56bfa728b7c467d151724b43792b2))
|
||||||
|
- 调整 eslint.config.js ([99f8edb](https://github.com/continew-org/continew-admin-ui/commit/99f8edb7295f913e36cd28c41ac4a6b536c982d9))
|
||||||
|
- 角色功能权限第三级扁平化处理 ([43dd512](https://github.com/continew-org/continew-admin-ui/commit/43dd512b8a359d794a2ad48dd4e05c22f7223391)) (Gitee#38@kiki1373639299)
|
||||||
|
- 优化路由守卫代码(同步 GiDemo 更新) ([7c509fa](https://github.com/continew-org/continew-admin-ui/commit/7c509fa7372de5bf60895bc5e5b66cc6355c8d97))
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 修复 GiCellTags 组件的空数据问题 ([068d959](https://github.com/continew-org/continew-admin-ui/commit/068d959d0380f85053d6f001621990309c904519)) (Gitee#35@CoderZone)
|
||||||
|
- 修复快捷操作代码生成链接错误 ([246d638](https://github.com/continew-org/continew-admin-ui/commit/246d638a8f66bd5a98091bd12cc78f4a2083dd04))
|
||||||
|
- 修复行为验证码接口重复请求问题 ([be4356f](https://github.com/continew-org/continew-admin-ui/commit/be4356fa041108c46eade7e1f81897346338026b))
|
||||||
|
- 修复用户选择器超级管理员回显异常的问题 ([3f871e1](https://github.com/continew-org/continew-admin-ui/commit/3f871e102acee6481bfe3fb095279063713fe6e5)) (Gitee#36@kiki1373639299)
|
||||||
|
|
||||||
|
## [v3.4.0](https://github.com/continew-org/continew-admin-ui/compare/v3.3.0...v3.4.0) (2024-11-18)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 新增全局水印配置 支持开启全局水印,支持设置水印信息(不设置则默认显示昵称+用户名) ([8d8d79e](https://github.com/continew-org/continew-admin-ui/commit/8d8d79e5686a7b87bf6d5b28983585bcc4ccd897)) (Gitee#19)
|
||||||
|
* 支持可视化生成 Cron 表达式 ([adcb9fe](https://github.com/continew-org/continew-admin-ui/commit/adcb9fed2a5388a1e86f6e86119f361e73d5d15f)) ([33020be](https://github.com/continew-org/continew-admin-ui/commit/33020beb36d22b34bb7ca7ae2d7f59272192211f)) ([6fde089](https://github.com/continew-org/continew-admin-ui/commit/6fde089ba62ea3b8659a872fa149bd517b7ab205)) ([921950b](https://github.com/continew-org/continew-admin-ui/commit/921950b7508befffe6d7414ff6d308340cb1004b)) (Gitee#23、24)
|
||||||
|
* 新增分析页(拆分仪表盘路由为工作台和分析页) ([2e15cf2](https://github.com/continew-org/continew-admin-ui/commit/2e15cf2d48a8359b4e8455539da8149758db2db9)) ([455f269](https://github.com/continew-org/continew-admin-ui/commit/455f2695c836559f4f1d23d59b2b862691af1c8a)) ([8a3f456](https://github.com/continew-org/continew-admin-ui/commit/8a3f456e547b57c3405dac52c8bb40b20df79a94)) ([6e39681](https://github.com/continew-org/continew-admin-ui/commit/6e39681f960ff271e6df01a129bbc7ff211799bd)) ([abb6d59](https://github.com/continew-org/continew-admin-ui/commit/abb6d59783645785ac5611523329ad36a9b6631b)) ([798dda9](https://github.com/continew-org/continew-admin-ui/commit/798dda94407c8d6d106fa72621e09ee01c110dd1))
|
||||||
|
* 重构工作台 ([7970940](https://github.com/continew-org/continew-admin-ui/commit/7970940f50791d81b793ceaebaaf9a68bc5d8e30)) ([b13f2ca](https://github.com/continew-org/continew-admin-ui/commit/b13f2ca91da004cb993a04fcb9f87004bb02b5c3)) ([fd1dfcf](https://github.com/continew-org/continew-admin-ui/commit/fd1dfcf3f484db0362dae58f6272b11573452451))
|
||||||
|
* 使用 vue-office 重构文件预览(移除KKFileView) ([51aceac](https://github.com/continew-org/continew-admin-ui/commit/51aceac988fcdc4a5795bd8cc8dffd7dcc7f7c39)) (Gitee#25)
|
||||||
|
* 公告支持设置通知范围,新增用户选择器组件 ([354b6bc](https://github.com/continew-org/continew-admin-ui/commit/354b6bc6d57c43951db512e9599549d32cdedc9c)) ([5ade6bc](https://github.com/continew-org/continew-admin-ui/commit/5ade6bcecf8c89ebc4260e7292cbbdfc5ac30fec)) ([233bd62](https://github.com/continew-org/continew-admin-ui/commit/233bd62babe6660193835b6bb30ae7d169b032ba)) ([84148b6](https://github.com/continew-org/continew-admin-ui/commit/84148b6a68d0701efc6efb900d1da4d7a6b49bd8)) ([5de731d](https://github.com/continew-org/continew-admin-ui/commit/5de731dab48eb38ca3430a6bcfd807ab36c17a7b)) (GitCode#1)
|
||||||
|
* 角色管理增加分配角色功能 ([2f30df5](https://github.com/continew-org/continew-admin-ui/commit/2f30df528caaca664db24ddb80dd4dbb8a378b43)) ([449e512](https://github.com/continew-org/continew-admin-ui/commit/449e5128d74569cd74d0779a17cbcaf1d8390fe6)) (GitHub#33)
|
||||||
|
* 调整默认头像规则,由基于性别的固定头像调整为基于昵称展示(背景颜色基于昵称计算随机) ([00c909e](https://github.com/continew-org/continew-admin-ui/commit/00c909e6f1e1767e69024620e99f71f98f2cf474))
|
||||||
|
* 新增能力开放模块应用管理功能 ([26291a1](https://github.com/continew-org/continew-admin-ui/commit/26291a1e444e3d63a5532e25bcaa4ea6a3d17125)) ([2b7c099](https://github.com/continew-org/continew-admin-ui/commit/2b7c09966fc3f8b059c4f587845149f5b1ea14c7)) (Gitee#27)
|
||||||
|
* 新增 GiEditTable 编辑表格组件(同步 GiDemo 更新) ([b46235b](https://github.com/continew-org/continew-admin-ui/commit/b46235b7ede5991d3582e68db9ab65515867798e))
|
||||||
|
* GiTable 表格组件插槽支持插槽类型提示(同步 GiDemo 更新) ([88864d8](https://github.com/continew-org/continew-admin-ui/commit/88864d8c5df55941a50ef23ac2c3d1030b61b47f))
|
||||||
|
* tab栏增加右键菜单 Closes #IA5RD4 ([169a304](https://github.com/continew-org/continew-admin-ui/commit/169a3049c479bd001e5cb5cff4eb20010e3c66ad)) (Gitee#31)
|
||||||
|
* 用户管理新增分配角色功能 ([3b74b5c](https://github.com/continew-org/continew-admin-ui/commit/3b74b5c7bfc9617f55565800349f4be51712e805))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 完善部分限制字数输入框的限制提示 ([bb246f4](https://github.com/continew-org/continew-admin-ui/commit/bb246f45289f8899ebd5d2dfe1d5bc3be5ba880a))
|
||||||
|
- 优化公告相关样式 ([5ebdaa0](https://github.com/continew-org/continew-admin-ui/commit/5ebdaa045391c14fbc3456d18f5f1320123e5032)) ([33bf31b](https://github.com/continew-org/continew-admin-ui/commit/33bf31b048638b5a64a7acc3d8eb1e790cd38fa2))
|
||||||
|
- 重构部门管理、菜单管理树列表过滤(前端过滤) ([d881b93](https://github.com/continew-org/continew-admin-ui/commit/d881b93c7814d6cd92fb81717ab690dd1ac8c732))
|
||||||
|
- 优化表格工具栏样式 ([ff87940](https://github.com/continew-org/continew-admin-ui/commit/ff879405d76e91c2985536540ff49081e5e631b4))
|
||||||
|
- 重构用户管理搜索栏(支持多条件展开及折叠) ([50a6d17](https://github.com/continew-org/continew-admin-ui/commit/50a6d17516ab214d2b198b57c4b014360bc596ed)) ([84ad0d5](https://github.com/continew-org/continew-admin-ui/commit/84ad0d55b025fa96c2d83d732b87a496273abe1c))
|
||||||
|
- 优化表格 slot 命名 ([6a77168](https://github.com/continew-org/continew-admin-ui/commit/6a771686454917324604b1b456a27a96227229ed))
|
||||||
|
- 优化部分代码 ([1382346](https://github.com/continew-org/continew-admin-ui/commit/13823461d2d0175be1ed37f0a4a5f40f7c055160)) ([f650a6f](https://github.com/continew-org/continew-admin-ui/commit/f650a6f3aedd529e1c7e27fec50cfcca580918fe)) ([ce09f73](https://github.com/continew-org/continew-admin-ui/commit/ce09f737c3f8e8c8e0bcd834c8fbef0cc664be65)) ([4edbe54](https://github.com/continew-org/continew-admin-ui/commit/4edbe54fe37f49fda0b4a5eed16916db02742c43)) ([0bd0ff5](https://github.com/continew-org/continew-admin-ui/commit/0bd0ff5e21c11af30c5188d45ce4896faaebcf0c))
|
||||||
|
- 调整新增字典按钮位置 ([47a5c44](https://github.com/continew-org/continew-admin-ui/commit/47a5c448895cd5bc793c0f6c9baf5cf15c3c1297))
|
||||||
|
- 调整字典的操作菜单弹出方式,由右键弹出调整为点击更多按钮弹出 ([e29cf88](https://github.com/continew-org/continew-admin-ui/commit/e29cf88d1c7ea8115819eb528cbeb9c4e5a6d6ba)) ([795932e](https://github.com/continew-org/continew-admin-ui/commit/795932e440737e060c536726d0d3e81f89966ab1))
|
||||||
|
- 优化 GiForm 组件代码(同步 GiDemo 更新) ([ad31d9f](https://github.com/continew-org/continew-admin-ui/commit/ad31d9f2ffe9372f6bc5108b305086a700ca61de)) ([ae08678](https://github.com/continew-org/continew-admin-ui/commit/ae08678fa103850ba63d3bfeb70033e9f0f4c5ff))
|
||||||
|
- 优化部分链接样式 ([c6daf41](https://github.com/continew-org/continew-admin-ui/commit/c6daf41a2e418454b873c67252eed2f808b68bd3))
|
||||||
|
- GiForm 组件替换为 Grid 布局(同步 GiDemo 更新) ([4b90247](https://github.com/continew-org/continew-admin-ui/commit/4b902475dd5e1894329ca00d2d50f12e304856c0))
|
||||||
|
- 默认选中第一个字典 ([34d4faa](https://github.com/continew-org/continew-admin-ui/commit/34d4faa0903288aa7e71604f832cd1a04864790c))
|
||||||
|
- 调整 eslint.config.js,优化代码格式 ([9e5dff1](https://github.com/continew-org/continew-admin-ui/commit/9e5dff144b31d39f479bd7d377338323c8551ffb))
|
||||||
|
- 优化导入用户部分界面及接口路径 ([881c7e7](https://github.com/continew-org/continew-admin-ui/commit/881c7e720e5a753115a4121276333ff121a8d741))
|
||||||
|
- 文件管理、分析页、代码生成等部分组件调整为异步加载 ([2caedd1](https://github.com/continew-org/continew-admin-ui/commit/2caedd165f55b577c921a6527132666e2c9a48a0)) (Gitee#29)
|
||||||
|
- 重构代码生成列表 ([293718f](https://github.com/continew-org/continew-admin-ui/commit/293718f670d3e214acced99db2eaf48b35856e45))
|
||||||
|
- 调整 html lang="en" 为 zh-CN ([cefb954](https://github.com/continew-org/continew-admin-ui/commit/cefb95479113a1cace7f075d2045048d84716780)) (Gitee#33)
|
||||||
|
- 调整查询系统配置参数接口地址 ([0116432](https://github.com/continew-org/continew-admin-ui/commit/011643226cbc88651665c01b2a7b84d58f2f1176))
|
||||||
|
- 进度条由请求时调整为切换路由显示 ([f702e03](https://github.com/continew-org/continew-admin-ui/commit/f702e03124199b004fe77b7c1c34f01f711b1ed5))
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 消除控制台 Sass 警告 ([e2fe1ab](https://github.com/continew-org/continew-admin-ui/commit/e2fe1ab814e80da4bf641710826ec062c0168392)) (Gitee#20)
|
||||||
|
- 修复定时任务不显示堆栈异常的情况 ([44ef909](https://github.com/continew-org/continew-admin-ui/commit/44ef90917f28217ae1db151bbfa46380d1d1fd34)) (Gitee#22)
|
||||||
|
- 在useTable选项中将paginationOption设置为可选 ([07294cc](https://github.com/continew-org/continew-admin-ui/commit/07294cce14c5a77de1b4e7f9a40f25951978bc97)) (Gitee#22)
|
||||||
|
- 修复tab页只剩一个的时候无法关闭的问题 ([0594ae9](https://github.com/continew-org/continew-admin-ui/commit/0594ae91c74fbc19c0bd7ccd2ad6f7f67597d32a))
|
||||||
|
- 修复系统名太长会使菜单栏右侧黑边过长的问题 ([d1d29df](https://github.com/continew-org/continew-admin-ui/commit/d1d29dfce64abeee08ac924e64ec38950ccd0da6))
|
||||||
|
- 固定vue-tsc版本,避免typescript5.0.4版本冲突 ([2648497](https://github.com/continew-org/continew-admin-ui/commit/2648497f2acc90c76f4246b5c7e249b8277559e7)) (GitHub#28)
|
||||||
|
- 修复主页公告弹窗MD显示 ([40bfcd5](https://github.com/continew-org/continew-admin-ui/commit/40bfcd5f0d6a8019b2ded0730145d944970cb314)) (GitHub#29)
|
||||||
|
- 修复搜索图标不生效,并支持模糊搜索 ([6e9b322](https://github.com/continew-org/continew-admin-ui/commit/6e9b32295dc8270e18716b6d7918fe20b6d40d06)) (GitHub#30)
|
||||||
|
- 修复选择上级菜单过滤失效的问题 ([777f371](https://github.com/continew-org/continew-admin-ui/commit/777f371ffcf763b5f5a958a9e7fad1bd2737d275))
|
||||||
|
- 修复了开发环境下,点击使用了GiTable菜单自动刷新页面的问题 ([20bbf6c](https://github.com/continew-org/continew-admin-ui/commit/20bbf6c6af8c755af84806c675e40951a55fb6a9)) (Gitee#26)
|
||||||
|
- 修复获取短信、邮箱验证码缺失行为验证码参数错误 ([1cb0172](https://github.com/continew-org/continew-admin-ui/commit/1cb01720589cba3f8944eebb35457d30ee4658f8))
|
||||||
|
- 修复浏览器控制台报错 ([880fb1d](https://github.com/continew-org/continew-admin-ui/commit/880fb1d55d3a7e91f54dd9840f26f0e4c44fbc06))
|
||||||
|
- 优化部分表格列宽度样式 ([b908f14](https://github.com/continew-org/continew-admin-ui/commit/b908f14b33c1578ac6da88fb6c74b762b4197664))
|
||||||
|
- 修复公告显示及详情页跳转错误 ([6b265f7](https://github.com/continew-org/continew-admin-ui/commit/6b265f74bba52647470bd63f7c82968f2d988c41))
|
||||||
|
- 还原滚动条样式 ([8568ac1](https://github.com/continew-org/continew-admin-ui/commit/8568ac1a2ea2e7e8287ee04d6f7361c54b578d96))
|
||||||
|
- 补充重构邮箱登录后遗漏的行为验证码 ([2735dcf](https://github.com/continew-org/continew-admin-ui/commit/2735dcf93921c738ee8ffb375d37b2d81ae5121f))
|
||||||
|
|
||||||
|
## [v3.3.0](https://github.com/continew-org/continew-admin-ui/compare/v3.2.0...v3.3.0) (2024-09-09)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* GiForm 新增年\月\季度\周\范围、颜色选择器支持 ([ad53e1d](https://github.com/continew-org/continew-admin-ui/commit/ad53e1d419d8012fbeedc3f26943d3b36b133ee3))
|
||||||
|
* GiTag 组件功能扩展,提供 color 属性,用于自定义颜色 ([050a171](https://github.com/continew-org/continew-admin-ui/commit/050a171e91ae8f62aeb17d108ccb4a3c7c49eb4b))
|
||||||
|
* 代码生成字段配置列表支持拖拽排序 ([fcbc3eb](https://github.com/continew-org/continew-admin-ui/commit/fcbc3ebbff5cdbb555e594d73c94dce643c8e8ec))
|
||||||
|
* 代码生成字段配置支持选择关联字典 ([6574181](https://github.com/continew-org/continew-admin-ui/commit/65741811103a848a38f0f637df02fb677b82f205))
|
||||||
|
* 代码生成字段配置支持自定义名称、类型 ([b29960f](https://github.com/continew-org/continew-admin-ui/commit/b29960f3f534b3a83f62ec7c64f6302a1daf52bf))
|
||||||
|
* 修改角色功能权限、数据权限支持衔接新增角色时的父子联动 ([5cfb0d7](https://github.com/continew-org/continew-admin-ui/commit/5cfb0d795a000393514109fdf057ce0c654dc0a9)) ([0f35d29](https://github.com/continew-org/continew-admin-ui/commit/0f35d292addd7498bcdeca432b3ae0591b613c30))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 适配后端接口响应 code 数据类型变动 ([f321030](https://github.com/continew-org/continew-admin-ui/commit/f321030c4c8b4f4493388fc73152a56f31bb2a6d))
|
||||||
|
- 使用分步表单重构新增角色交互 (Gitee#18) ([fe25e1c](https://github.com/continew-org/continew-admin-ui/commit/fe25e1c698078a7ba609b24c730d00029429014c)) ([80de5b0](https://github.com/continew-org/continew-admin-ui/commit/80de5b0e5e13a5ad1a1cf816bbbc223a9d392e74))
|
||||||
|
- 优化 apis 导入,随着模块和接口的增加,方便维护 ([8a80db0](https://github.com/continew-org/continew-admin-ui/commit/8a80db0f92a2c271594c8027559591f40c27f39b))
|
||||||
|
- 优化 GiForm 组件代码 ([948158f](https://github.com/continew-org/continew-admin-ui/commit/948158f1fa65fe92bc3040fb0b70550a6ecefa0f))
|
||||||
|
- 优化部分代码 ([cb03111](https://github.com/continew-org/continew-admin-ui/commit/cb03111c22164365f2e5198d5162bff172492ffe))
|
||||||
|
- 消除搜索框歧义,明确可输入项 ([ab7ef15](https://github.com/continew-org/continew-admin-ui/commit/ab7ef153abe510aa1d32b27de2d630426d369d94))
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 修复 Mix 布局下面包屑显示不全的问题 ([917cd43](https://github.com/continew-org/continew-admin-ui/commit/917cd43a0866a90b81b5af0d11ecc1c457b01f6b))
|
||||||
|
- 修复用户管理,字典管理上一下二布局影响table表格溢出不显示问题 ([23ca50c](https://github.com/continew-org/continew-admin-ui/commit/23ca50c99dad206a97058006b071d1e921fca225))
|
||||||
|
- 修复切换 tab 页签后参数丢失的问题 ([13181bb](https://github.com/continew-org/continew-admin-ui/commit/13181bbb8980eab8c1acc2da01d6027818e05c82))
|
||||||
|
- 修复侧边栏宽度塌陷错误 ([1b01ced](https://github.com/continew-org/continew-admin-ui/commit/1b01cedae9f30e69fa7393e89223d382ca01a306))
|
||||||
|
- 修复修改密码后不弹出跳转提示的问题 ([3f41306](https://github.com/continew-org/continew-admin-ui/commit/3f4130615498b2aa863f75577597b9a6500a192b))
|
||||||
|
- 修复用户管理列设置未能正确禁用列的问题 ([eec9610](https://github.com/continew-org/continew-admin-ui/commit/eec9610e7004bc18dbc96dcf401d8d47ef275ce5))
|
||||||
|
|
||||||
|
## [v3.2.0](https://github.com/continew-org/continew-admin-ui/compare/v3.1.0...v3.2.0) (2024-08-05)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 新增用户批量导入功能 (GitHub#23) ([f72b4b8](https://github.com/continew-org/continew-admin-ui/commit/f72b4b8d563acd6d2829018be0d079a835911f18))
|
||||||
|
* 新增任务调度模块 SnailJob(灵活,可靠和快速的分布式任务重试和分布式任务调度平台) (Gitee#13) ([e8c1d4b](https://github.com/continew-org/continew-admin-ui/commit/e8c1d4b69b10a53f4adfaf8a2fd4b8280de965c7)) ([d7fc693](https://github.com/continew-org/continew-admin-ui/commit/d7fc693650259d8ad50aaf69504b991343f4694b)) ([edadea9](https://github.com/continew-org/continew-admin-ui/commit/edadea91edc74a7f95b67e7401aa7efb439f6ffd)) ([0a596f3](https://github.com/continew-org/continew-admin-ui/commit/0a596f3fdccc9fcecdb3d550889cb006450b30a3)) ([ff405d1](https://github.com/continew-org/continew-admin-ui/commit/ff405d12ab441f64c29b986fccb91caf727a5811))
|
||||||
|
* 系统配置-基础配置 logo 及 favicon 改为 base64 存储 (Gitee#16) ([881c1ee](https://github.com/continew-org/continew-admin-ui/commit/881c1ee1e41805d5728648b1a72e50480199216b))
|
||||||
|
* 新增支持 KKFileView 文件预览功能,需要自行部署文件预览服务器 (Gitee#17) ([99fa570](https://github.com/continew-org/continew-admin-ui/commit/99fa5709ee03a6f368c8297a7306c02872adfcb2))
|
||||||
|
* 新增单页面通知公告编辑与查看 ([90693cb](https://github.com/continew-org/continew-admin-ui/commit/90693cb25d061af9d15b4579cf82db80a38cfc40))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 优化部分代码格式 ([ed085c9](https://github.com/continew-org/continew-admin-ui/commit/ed085c92bdbf61bae6334ceaee4a3b7e5c605065))
|
||||||
|
- 优化部分命名 ([805ae65](https://github.com/continew-org/continew-admin-ui/commit/805ae65556e7969cd0a1ac0ddee24b9a2c0be0ff))
|
||||||
|
- 移除滚动条样式 ([b154375](https://github.com/continew-org/continew-admin-ui/commit/b15437537b0b8948e6ede22830852cd3eb778e84))
|
||||||
|
- 回退用户管理部门树组件(此树查询不应该校验功能权限) ([ee6a6e4](https://github.com/continew-org/continew-admin-ui/commit/ee6a6e437d8f0806137ab49252c8d6f34337d3cd))
|
||||||
|
- 优化子路由设置 ([f54caed](https://github.com/continew-org/continew-admin-ui/commit/f54caed4da38dc329c52e3e07419fca31f56bee7))
|
||||||
|
- 路由切换时检测前端版本更新(原为定时器检测) ([5fdfada](https://github.com/continew-org/continew-admin-ui/commit/5fdfada11d6813ae2728797e0c5ef81387c39c6d))
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 修复部分路由错误 ([92e773e](https://github.com/continew-org/continew-admin-ui/commit/92e773e621657946aab3a9149208139d98cac996))
|
||||||
|
- 修复通知公告重叠问题 ([3364cb1](https://github.com/continew-org/continew-admin-ui/commit/3364cb185855541246a93f8663efe197597df170))
|
||||||
|
- 解决代码生成页面丢失目录层级问题 (Gitee#12) ([fe08683](https://github.com/continew-org/continew-admin-ui/commit/fe086830dd6a50a0bbf7d1d59563b85a3bfa401c))
|
||||||
|
- 修复表格固定操作列滚动时的错位样式问题 (Gitee#14) ([ce297c0](https://github.com/continew-org/continew-admin-ui/commit/ce297c0904f00ef6f93a9772b149f817a91a3f2a))
|
||||||
|
- 修复文件管理没有文件时控制台报错 ([bad6e30](https://github.com/continew-org/continew-admin-ui/commit/bad6e30e4133507cd6e44de9f525c25d3ebc1adb))
|
||||||
|
|
||||||
|
## [v3.1.0](https://github.com/continew-org/continew-admin-ui/compare/v3.0.1...v3.1.0) (2024-06-16)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 系统配置新增安全设置功能 ([395a564](https://github.com/continew-org/continew-admin-ui/commit/395a5642afbe3bac8b6b3f161949264a874033ba))
|
||||||
|
* useTable 支持 “无分页” 列表 ([1421412](https://github.com/continew-org/continew-admin-ui/commit/1421412d678c926868b06ae8adeba292f390d3b1))
|
||||||
|
* 图片文件支持缩略图 (GitHub#17) ([c82dc90](https://github.com/continew-org/continew-admin-ui/commit/c82dc9083bf7dbb9cccdd7c4daff6fe743eb9a0c))
|
||||||
|
* 在线用户增加最后活跃时间显示 ([fff4de5](https://github.com/continew-org/continew-admin-ui/commit/fff4de56f30d3e3f777bd45b2f77be61bba3a555)) ([4eef0db](https://github.com/continew-org/continew-admin-ui/commit/4eef0db9f93cb73e10113c8f69ad547f502db621))
|
||||||
|
* 新增行为验证码,行为验证码重新上线 (Gitee#7) ([778b3c6](https://github.com/continew-org/continew-admin-ui/commit/778b3c677fee14071d49355980936b52d16a7313))
|
||||||
|
* 新增消息中心 ([fdd4b9a](https://github.com/continew-org/continew-admin-ui/commit/fdd4b9a4dfcb600e8455c5c402fc6f818b6f1507))
|
||||||
|
* 新增 WebSocket 消息通知 (GitHub#20) ([adc6f64](https://github.com/continew-org/continew-admin-ui/commit/adc6f643b3ba481313b3f23e876eb4836d8753b4)) ([56b1fdd](https://github.com/continew-org/continew-admin-ui/commit/56b1fdd75521b08334b25e2d03f7cbcfe2014360)) ([c104ba5](https://github.com/continew-org/continew-admin-ui/commit/c104ba5445f1c990b08ec5fd3a8cf1d783d65c76))
|
||||||
|
* 新增邮件配置 (Gitee#8) ([1ebfd11](https://github.com/continew-org/continew-admin-ui/commit/1ebfd115eb4f488a7a9464415ce061f9ad36eca0)) ([45cbabf](https://github.com/continew-org/continew-admin-ui/commit/45cbabf54503210305f7e74382fa7c4d702c359c)) ([66f89b4](https://github.com/continew-org/continew-admin-ui/commit/66f89b44d897b7e6874b9882e8708cadf5ab60aa)) ([6e520a3](https://github.com/continew-org/continew-admin-ui/commit/6e520a30720c418b7484f37c1736f189613e83ce))
|
||||||
|
* 文件管理增加复制文件 URL 按钮 ([5c6d311](https://github.com/continew-org/continew-admin-ui/commit/5c6d3119eb4aab0f679aaeadcead7f96f6f1ea22))
|
||||||
|
* 新增版权条显示配置 ([0f3d927](https://gitee.com/continew/continew-admin-ui/commit/0f3d927f9894e296e5dde83feb1738206c44b5b1)) ([d7e29e2](https://gitee.com/continew/continew-admin-ui/commit/d7e29e238ee31301807275be1147824295995650))
|
||||||
|
* 新增密码过期修改页面逻辑 ([921d9c6](https://github.com/continew-org/continew-admin-ui/commit/921d9c63e955711473e1c911f59da4711cdc1197))
|
||||||
|
* 新增前端简略版本更新提示 ([03d05e1](https://github.com/continew-org/continew-admin-ui/commit/03d05e1821a0360afa724d86ce34a51aedb9c07e))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 路由多级缓存调整为扁平化方案 ([5f3dd93](https://github.com/continew-org/continew-admin-ui/commit/5f3dd93376ed62c803d6e26965f43812c86abee8))
|
||||||
|
- 优化 ESLint 配置并更正问题代码(eslint src --fix) ([5d9fedc](https://github.com/continew-org/continew-admin-ui/commit/5d9fedc35406e00d88d8921ffe04b99a7c49cb8e))
|
||||||
|
- 代码生成预览调整为以文件树结构形式显示 (Gitee#5) ([c9198b3](https://github.com/continew-org/continew-admin-ui/commit/c9198b315c25cb3e8fd7f769b543e98e131f878c))
|
||||||
|
- 优化公告和字典项响应式窗口效果 ([4c2f36f](https://github.com/continew-org/continew-admin-ui/commit/4c2f36fe6b5254a613cabd686501e891cd8c7d1c))
|
||||||
|
- 优化个人中心部分代码 ([eb11cae](https://github.com/continew-org/continew-admin-ui/commit/eb11cae635ff4a0661603509cec4e85a462f5a63))
|
||||||
|
- 更换 ESLint 配置为 @antfu/eslint-config ([bfc8e42](https://github.com/continew-org/continew-admin-ui/commit/bfc8e42bad6777243fdca9bf37b0d95a92c75159))
|
||||||
|
- 代码生成预览样式调整 (Gitee#6) ([fe656af](https://github.com/continew-org/continew-admin-ui/commit/fe656af1aa1afbc290cf6a6121347106adf5df60)) ([cc0840e](https://github.com/continew-org/continew-admin-ui/commit/cc0840e2ae7f25f25432c6a01781ac1a8112eea7))
|
||||||
|
- 启动项目时,控制台增加应用信息打印 ([52e7682](https://github.com/continew-org/continew-admin-ui/commit/52e7682a4786ae6e3fae49dcbd8ee473f30d2cb5))
|
||||||
|
- 优化部分弹框响应式效果 ([c1c5f7f](https://github.com/continew-org/continew-admin-ui/commit/c1c5f7f632827286982fdc0b9235cb115298e541))
|
||||||
|
- 优化文件管理部分显示效果 ([7a2c66e](https://github.com/continew-org/continew-admin-ui/commit/7a2c66e6463eb50d8c7bee0dcd21c396fe642ceb))
|
||||||
|
- 优化重置路由实现 ([7c1106e](https://github.com/continew-org/continew-admin-ui/commit/7c1106e8c26d3dc3c2ecee93f9f98bc56a171720))
|
||||||
|
- 优化 copy 组件使用 ([c369b88](https://github.com/continew-org/continew-admin-ui/commit/c369b88185c85bb7782383617fd6debf1f6c16d9)) ([a8b5d97](https://github.com/continew-org/continew-admin-ui/commit/a8b5d97bfa0ed256205284deb7364bf50e18927a))
|
||||||
|
- 优化用户角色名称展示 ([d4b9057](https://github.com/continew-org/continew-admin-ui/commit/d4b9057554f7bbe58d45429529d7279182100616))
|
||||||
|
- 优化删除弹窗按钮样式 ([c2806c4](https://github.com/continew-org/continew-admin-ui/commit/c2806c469695adbe3ef1950957a33d48059c6cb6))
|
||||||
|
- 优化表格页面样式及表格纵向滚动条 ([861f620](https://github.com/continew-org/continew-admin-ui/commit/861f6203cc0ebcdd7087434c9d8bafccf4360812))
|
||||||
|
- 重构字典管理(左树右表) ([a175120](https://github.com/continew-org/continew-admin-ui/commit/a175120d699f5da099e7f027a6c5f0fba26705d8)) ([aac5899](https://github.com/continew-org/continew-admin-ui/commit/aac5899fe0a01fe0e91ffc1904c94ac9ecaa4885))
|
||||||
|
- 重构用户管理部门树,支持部门管理 ([ca05fab](https://github.com/continew-org/continew-admin-ui/commit/ca05fabdec277965057f7901317edefca74cb258)) ([1be08f1](https://github.com/continew-org/continew-admin-ui/commit/1be08f10010654dc675d67b792f1fc870df5961e)) ([f8ded4b](https://github.com/continew-org/continew-admin-ui/commit/f8ded4b491a22369d43ff3e76f75c771130c4f1c))
|
||||||
|
- 优化表格列表显示 ([ed7be3e](https://github.com/continew-org/continew-admin-ui/commit/ed7be3ef25a91d66bcd33bae6176ecb81c85ec44))
|
||||||
|
- 优化文件管理分页 ([00da9ac](https://github.com/continew-org/continew-admin-ui/commit/00da9acdd09e4f2f8233ec22ae37408f9a027674))
|
||||||
|
- 优化系统配置加载与切换问题 ([605ac4d](https://github.com/continew-org/continew-admin-ui/commit/605ac4d0865e2b7471583f3e0b5a14993bf25104))
|
||||||
|
- 优化全局 loading 及 empty 配置 ([7e329fc](https://github.com/continew-org/continew-admin-ui/commit/7e329fcffacc58cb626b3b7a71a53d8decc170f7))
|
||||||
|
- 适配系统参数 API 新的使用方式 ([1909b6e](https://github.com/continew-org/continew-admin-ui/commit/1909b6e907f8d8dd00d8e59eff8c2125914cad3f))
|
||||||
|
- 存储管理S3存储配置填充默认域名 (GitHub#21) ([5897bde](https://github.com/continew-org/continew-admin-ui/commit/5897bde0c45dd61a94ac9bcf85b55f12a7fe5133))
|
||||||
|
- 优化个人中心部分默认显示效果 ([f2206b7](https://github.com/continew-org/continew-admin-ui/commit/f2206b78012d594010bc6cee47a95a9ebab1ad1b))
|
||||||
|
- 调整对话框默认可拖拽,表格默认可调整列宽 ([5581d3f](https://github.com/continew-org/continew-admin-ui/commit/5581d3fd8910997d61ca6e281cec50caef264ca3))
|
||||||
|
- 目录下仅有一个菜单时平铺展示 ([dc4ae0f](https://github.com/continew-org/continew-admin-ui/commit/dc4ae0fb34a940030f4fc1841ede3557ccccb58c))
|
||||||
|
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 修复用户列表禁用列错误 ([1e5a50c](https://github.com/continew-org/continew-admin-ui/commit/1e5a50c37bc8dbc18d917e523b0a215a510f57db))
|
||||||
|
- 修复菜单管理列表滚动问题 ([5101dd1](https://github.com/continew-org/continew-admin-ui/commit/5101dd12d9769d8927afb40619fb68d696c22a82))
|
||||||
|
- 修复打包部署后或 preview 模式下,布局切换及页签显示异常 ([68d8f0f](https://github.com/continew-org/continew-admin-ui/commit/68d8f0f5b36be162a0c64d500d845388c239c4a7))
|
||||||
|
- 修复文件管理图表加载错误 ([d1af509](https://github.com/continew-org/continew-admin-ui/commit/d1af509a1aaa7d1a6982f3dcdadb7202b71b9475))
|
||||||
|
- 字典编码不允许修改 ([0a6cd6e](https://github.com/continew-org/continew-admin-ui/commit/0a6cd6ef989309a450a810852cbd74e35ed29b6a))
|
||||||
|
- 修复字典重复请求问题 ([6705027](https://github.com/continew-org/continew-admin-ui/commit/6705027273e098cde57792743c3a0bdacb559449)) ([30222b0](https://github.com/continew-org/continew-admin-ui/commit/30222b08ab6539552f3679f4cb9442f477f4df55))
|
||||||
|
- 代码生成配置表单校验错误自动跳转回错误 tab ([a015d9f](https://github.com/continew-org/continew-admin-ui/commit/a015d9f843cb72aeb99674a271914044a4e00794))
|
||||||
|
- 修复文件管理左侧‘全部’查询问题 ([d6c5b89](https://github.com/continew-org/continew-admin-ui/commit/d6c5b8988c84d6d33474d51162bad12973b86c91))
|
||||||
|
- 修复导出报 400 的问题 ([377a1ff](https://github.com/continew-org/continew-admin-ui/commit/377a1ff1b74fa357545c3298e5b9c480b0f3f0d3))
|
||||||
|
- 修复用户管理排序参数错误 ([bcbe106](https://github.com/continew-org/continew-admin-ui/commit/bcbe10660fbfdab5a7c7b17c9353aba3adc12638))
|
||||||
|
- 修复初始值使用错误 ([fd55ad4](https://github.com/continew-org/continew-admin-ui/commit/fd55ad422888f74ea2deda679172db0cff923c9f))
|
||||||
|
- 修复第三方登录错误 ([a775b86](https://github.com/continew-org/continew-admin-ui/commit/a775b86e2e0973a16e6b9a1945acbd904773b876))
|
||||||
|
- 修复验证码长度限制错误 ([8702be4](https://github.com/continew-org/continew-admin-ui/commit/8702be45ed64dde39f443c2e5570fd2474821e6b))
|
||||||
|
|
||||||
|
## [v3.0.1](https://github.com/continew-org/continew-admin-ui/compare/v3.0.0...v3.0.1) (2024-05-03)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 新增表格全屏、尺寸工具 ([b8a84a3](https://github.com/continew-org/continew-admin-ui/commit/b8a84a3a0890d4f6d0e39ecbe50c4f645bd0f106))
|
||||||
|
* 新增验证码超时显示效果,超时后显示已过期请刷新 (GitHub#14) ([f99c8f1](https://github.com/continew-org/continew-admin-ui/commit/f99c8f1b5a521f987b2822352f976fb0b1dc93b3))
|
||||||
|
* 文件管理增加资源统计,统计总存储量、各类型文件存储占用 (GitHub#15) ([c70d1ad](https://github.com/continew-org/continew-admin-ui/commit/c70d1adbf922d28853bf4e6cf8cc4e14ad5b0ac7))
|
||||||
|
|
||||||
|
### 💎 功能优化
|
||||||
|
|
||||||
|
- 统一性别约束/统一上级部门为必填 ([5264cf2](https://github.com/continew-org/continew-admin-ui/commit/5264cf226fa3acd1398d9309e6a97d4d45b64850))
|
||||||
|
- 一级部门不能修改上级部门 ([b2a1658](https://github.com/continew-org/continew-admin-ui/commit/b2a1658e3730078cf2fbeb3032c23c0922544594))
|
||||||
|
- 优化根据选中部门查询用户的点击效果 ([ca25285](https://github.com/continew-org/continew-admin-ui/commit/ca252852373840b000c1f65ab925d18335a71fcb)) ([99c37d7](https://github.com/continew-org/continew-admin-ui/commit/99c37d7de4a245836f89c29cf4b638032efae31f))
|
||||||
|
- 登录页面,H5 端排版更换 ([05ab89d](https://github.com/continew-org/continew-admin-ui/commit/05ab89d03fe6401994698ad9ecdeb8540ec49553))
|
||||||
|
- 优化 queryForm 的 Query 类型使用 ([5b71369](https://github.com/continew-org/continew-admin-ui/commit/5b713692516db586f2d401a163192c62a963137a))
|
||||||
|
|
||||||
|
|
||||||
|
### 🐛 问题修复
|
||||||
|
|
||||||
|
- 修复 Markdown 样式加载错误,改为全局统一加载 (GitHub#9) ([64648d0](https://github.com/continew-org/continew-admin-ui/commit/64648d0c1d897d6e426199e7924ede9dfb40e8b8))
|
||||||
|
- 修复由于文件组件名称错误导致的侧边栏筛选功能失效 ([81dbea8](https://github.com/continew-org/continew-admin-ui/commit/81dbea879377054e3646c2d07b51c3352501bbce))
|
||||||
|
- 修复文件管理数据不刷新和批量操作选中问题 (GitHub#13) ([724f60e](https://github.com/continew-org/continew-admin-ui/commit/724f60eaf6b076cfb165ca0b1028c461146495ad))
|
||||||
|
- 修复文件重命名时不能回显原值的问题 ([3dfa97e](https://github.com/continew-org/continew-admin-ui/commit/3dfa97e785acb42edd3798117f7e8eea326b4b64))
|
||||||
|
- 修复修改公告时保存按钮点击无效的问题 ([c0a5c2d](https://github.com/continew-org/continew-admin-ui/commit/c0a5c2dffe50905b8610fbd066b8eecd5a4cbe89))
|
||||||
|
- 修复账号管理、安全设置路由处理错误 ([c0c5ba8](https://github.com/continew-org/continew-admin-ui/commit/c0c5ba8efdab009e7e38ad9a8f68a655aba28718))
|
||||||
|
- 修复首页卡片显示问题 ([39465dc](https://github.com/continew-org/continew-admin-ui/commit/39465dcaa38c9d79c820583a1dd82978e5588dec))
|
||||||
|
- 修复 H5 下登录页面错位显示 ([9d570a8](https://github.com/continew-org/continew-admin-ui/commit/9d570a808ce1a15a1513eac0e9ec355d683febef))
|
||||||
|
|
||||||
|
## v3.0.0 (2024-04-27)
|
||||||
|
|
||||||
|
### ✨ 新特性
|
||||||
|
|
||||||
|
* 基于 Gi-Demo 前端模板开发的全新 3.0 前端,重新定义新 UI,提供更为舒适的前端开发体验
|
||||||
|
- 个人中心:支持基础信息修改、安全设置(密码修改、邮箱绑定、手机号绑定(并提供行为验证码、短信限流等安全处理)、第三方账号绑定/解绑)、头像裁剪上传等能力
|
||||||
|
- 用户管理:提供系统用户的新增维护,支持禁用登录及重置指定用户密码
|
||||||
|
- 角色管理:对权限与菜单进行分配,可根据部门设置角色的数据权限
|
||||||
|
- 菜单管理:已实现菜单动态路由,后端可配置化,支持多级菜单
|
||||||
|
- 部门管理:可配置系统组织架构,以树形表格展示
|
||||||
|
- 公告管理:提供公告的发布、查看和删除等功能。管理员可以在后台发布公告,并可以设置公告的生效时间、终止时间,以 markdown-it 为内核渲染 Markdown 格式内容显示
|
||||||
|
- 消息管理:提供消息查看、标记已读、全部已读、删除等功能(适配对接导航栏站内信功能)(v3.1 重构,v2.5 版可用)
|
||||||
|
- 字典管理:提供对系统公用数据字典的维护,例如:公告类型,支持字典标签背景色和排序等配置
|
||||||
|
- 文件管理:提供文件上传、下载、预览(目前支持图片、音视频)、重命名、切换视图(列表、网格)等功能
|
||||||
|
- 存储管理:提供文件存储库新增、编辑、删除等功能,支持本地存储、兼容 S3 协议存储
|
||||||
|
- 系统配置:提供修改系统标题、Logo、favicon 等基础配置功能,以方便用户系统与其自身品牌形象保持一致(v3.1 支持邮件配置)
|
||||||
|
- 代码生成:提供根据数据库表自动生成相应的前后端 CRUD 代码的功能
|
||||||
|
- 在线用户:管理当前登录用户,可一键踢下线
|
||||||
|
- 系统日志:提供登录日志、操作日志管理功能,可查看指定日志的详细请求及响应信息
|
||||||
|
|
||||||
202
LICENSE
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"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.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"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.
|
||||||
|
|
||||||
|
"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).
|
||||||
|
|
||||||
|
"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.
|
||||||
|
|
||||||
|
"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."
|
||||||
|
|
||||||
|
"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.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. 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.
|
||||||
|
|
||||||
|
3. Grant of Patent License. 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.
|
||||||
|
|
||||||
|
4. Redistribution. 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:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) 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
|
||||||
|
|
||||||
|
(d) 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.
|
||||||
|
|
||||||
|
5. Submission of Contributions. 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.
|
||||||
|
|
||||||
|
6. Trademarks. 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.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. 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.
|
||||||
|
|
||||||
|
8. Limitation of Liability. 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.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. 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.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Copyright (c) 2022-present Charles7c Authors. All Rights Reserved.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
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.
|
||||||
386
README.md
Normal file
@@ -0,0 +1,386 @@
|
|||||||
|
# ContiNew Admin UI
|
||||||
|
|
||||||
|
<a href="https://github.com/continew-org/continew-admin-ui" title="Release" target="_blank">
|
||||||
|
<img src="https://img.shields.io/badge/SNAPSHOT-v3.6.0-%23ff3f59.svg" alt="Release" />
|
||||||
|
</a>
|
||||||
|
<a href="https://vuejs.org/" title="Vue" target="_blank">
|
||||||
|
<img src="https://img.shields.io/badge/Vue-3.5.4-%236CB52D.svg?logo=Vue.js" alt="Vue" />
|
||||||
|
</a>
|
||||||
|
<a href="https://arco.design/vue/docs/start" title="Arco Design Vue" target="_blank">
|
||||||
|
<img src="https://img.shields.io/badge/Arco Design Vue-2.57.0-%236CB52D.svg" alt="Arco Design Vue" />
|
||||||
|
</a>
|
||||||
|
<a href="https://ts.nodejs.cn/" title="TypeScript" target="_blank">
|
||||||
|
<img src="https://img.shields.io/badge/TypeScript-5.0.4-%236CB52D.svg?logo=TypeScript&logoColor=FFF" alt="TypeScript" />
|
||||||
|
</a>
|
||||||
|
<a href="https://vite.dev/" title="Vite" target="_blank">
|
||||||
|
<img src="https://img.shields.io/badge/Vite-5.1.5-%236CB52D.svg?logo=Vite&logoColor=FFF" alt="Vite" />
|
||||||
|
</a>
|
||||||
|
<br />
|
||||||
|
<a href="https://github.com/continew-org/continew-admin-ui/blob/dev/LICENSE" title="License" target="_blank">
|
||||||
|
<img src="https://img.shields.io/badge/License-Apache--2.0-blue.svg" alt="License" />
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/continew-org/continew-admin" title="GitHub Stars" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/stars/continew-org/continew-admin?style=social" alt="GitHub Stars" />
|
||||||
|
</a>
|
||||||
|
<a href="https://github.com/continew-org/continew-admin" title="GitHub Forks" target="_blank">
|
||||||
|
<img src="https://img.shields.io/github/forks/continew-org/continew-admin?style=social" alt="GitHub Forks" />
|
||||||
|
</a>
|
||||||
|
<a href="https://gitee.com/continew/continew-admin" title="Gitee Stars" target="_blank">
|
||||||
|
<img src="https://gitee.com/continew/continew-admin/badge/star.svg?theme=dark" alt="Gitee Stars" />
|
||||||
|
</a>
|
||||||
|
<a href="https://gitee.com/continew/continew-admin" title="Gitee Forks" target="_blank">
|
||||||
|
<img src="https://gitee.com/continew/continew-admin/badge/fork.svg?theme=dark" alt="Gitee Forks" />
|
||||||
|
</a>
|
||||||
|
<a href="https://gitcode.com/continew/continew-admin" title="GitCode Stars" target="_blank">
|
||||||
|
<img src="https://gitcode.com/continew/continew-admin/star/badge.svg" alt="GitCode Stars" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
📚 [在线文档](https://continew.top) | 🚀 [演示地址](https://admin.continew.top)(账号/密码:admin/admin123)
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
全新 3.0 版本,基于 Gi Demo 前端模板开发的 ContiNew Admin 前端适配项目。
|
||||||
|
|
||||||
|
ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后台管理系统框架。开箱即用,重视每一处代码规范,重视每一种解决方案细节,持续提供舒适的前、后端开发体验。
|
||||||
|
|
||||||
|
当前采用的技术栈:Spring Boot3(Java17)、Vue3 & Arco Design & TS & Vite、Sa-Token、MyBatis Plus、Redisson、JetCache、JustAuth、Crane4j、EasyExcel、Liquibase、Hutool 等。
|
||||||
|
|
||||||
|
## 项目源码
|
||||||
|
|
||||||
|
| | 前端 | 后端 |
|
||||||
|
| :------ | :----------------------------------------------------------- | :----------------------------------------------------------- |
|
||||||
|
| Gitee | [continew/continew-admin-ui](https://gitee.com/continew/continew-admin-ui) | [continew/continew-admin](https://gitee.com/continew/continew-admin) |
|
||||||
|
| GitCode | [continew/continew-admin-ui](https://gitcode.com/continew/continew-admin-ui) | [continew/continew-admin](https://gitcode.com/continew/continew-admin) |
|
||||||
|
| GitHub | [continew-org/continew-admin-ui](https://github.com/continew-org/continew-admin-ui) | [continew-org/continew-admin](https://github.com/continew-org/continew-admin) |
|
||||||
|
|
||||||
|
## 项目起源
|
||||||
|
|
||||||
|
我热衷于做数据归档,归档后的数据可以提高学习/工作效率,为记忆“减负”,在持续的数据归档中,优质的“沉淀”会带来非匀速、跨越式的学习/工作体验。**数据归档是一件需要持续去做的事情**。
|
||||||
|
|
||||||
|
从接触程序代码的第一天,我的程序数据归档也随之开始了,刷过的算法题、笔记、对接各种组件的配置文件,甚至于一些亮眼的样式设计、“如诗”的代码片段。这些数据的沉淀丰富了我的解决方案,提高了我的编程效率,逐渐为各种场景落实成了一个个雏形程序。再后来,我意识到,我归档的这些雏形程序,有一个更为妥贴的名称:**程序框架/脚手架**。
|
||||||
|
|
||||||
|
技术的发展,导致这些雏形程序的生命周期很是短暂,它们有别于我归档的其他数据,有时由于工作的原因,没有时间很好的去沉淀它们,在使用时变得越来越不顺手。所以,某段时间,我放弃了维护,而是去采用一些更为成熟的框架。
|
||||||
|
|
||||||
|
不过,在陆续几年使用了一些成熟框架后,我前后遇到了一些困难:
|
||||||
|
|
||||||
|
1. 代码洁癖想要找到一个**扩展性佳,代码规范良好,开发体验舒适**的框架很不容易,总是差些什么
|
||||||
|
2. 项目上手困难或是基础版功能不全,需要的全在专业版,亦或者代码阅读性差,文档收费
|
||||||
|
3. 部分解决方案缺失,已有解决方案也过于偏向样板化,无法形成良好的逻辑闭环
|
||||||
|
4. 好不容易找到一些相较合适的,没过多久,部分作者可能暂时没法对外发“电”了,随着了解深入,很多 Bug 或新技术趋势还是需要自己研究解决
|
||||||
|
|
||||||
|
在工作中,很多想法/设计受限于客户需求、开发工期,必须优先以交付为导向,但一些优秀的实践需要花时间持续进行沉淀,只要我没跳出这个圈子,我还是需要一直去做好程序归档。“种一棵树最好的时间是十年前,其次是现在”,最终,我选择在业余时间更加正视这件事,从头归档沉淀,从添加每一个依赖开始,我希望它能持续的迭代优化、演进,所以我把它命名为 **ContiNew(Continue New)**。并且这次我选择了开源,我希望它不仅仅能吸收我的需求和沉淀,而是依托开源协作模式,及时发现更多的问题,接受更多的可能性,沉淀更优秀的思考,设计。
|
||||||
|
|
||||||
|
## 为什么选我们?
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> 更为完整的图文描述请查阅[《在线文档》](https://continew.top/admin/intro/why.html)。
|
||||||
|
|
||||||
|
1.**甄选技术栈:** ContiNew(Continue New) 项目致力于持续迭代优化,让技术不掉队。在技术选型时,进行深度广泛地调研,从流行度、成熟度和发展潜力等多方面甄选技术栈。
|
||||||
|
|
||||||
|
2.**Starter 组件:** 从 v2.1.0 版本开始,抽取并封装后端基础组件及各框架集成配置到 ContiNew Starter 项目,且 **[已发布至 Maven 中央仓库](https://central.sonatype.com/search?q=continew-starter&namespace=top.continew)**,可在你的任意项目中直接引入所需依赖使用。即使你不用脚手架项目,难道能让你搭项目框架更快、更爽、更省力的 Starter 也要 Say No 吗?
|
||||||
|
|
||||||
|
3.**CRUD 套件:** 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,且 API 支持按实际所需开放或扩展。
|
||||||
|
```java
|
||||||
|
@Tag(name = "部门管理 API")
|
||||||
|
@RestController
|
||||||
|
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.DETAIL, Api.ADD, Api.UPDATE, Api.DELETE, Api.EXPORT})
|
||||||
|
public class DeptController extends BaseController<DeptService, DeptResp, DeptDetailResp, DeptQuery, DeptReq> {}
|
||||||
|
```
|
||||||
|
|
||||||
|
4.**代码生成器:** 提供代码生成器,已配套前、后端代码生成模板,数据表设计完之后,简单配置一下即可生成前、后端 80% 的代码,包含 CRUD API、权限控制、参数校验、接口文档等内容。如果业务不复杂,也可能就是 95% 的代码。
|
||||||
|
|
||||||
|
5.**改善开发体验:** 持续优化及适配能改善开发体验的组件。
|
||||||
|
- 适配 ContiNew Starter 组件,针对多数框架进行了深度封装的 starter,改善你在开发每个 Spring Boot Web 项目的体验。
|
||||||
|
- 适配 Crane4j 数据填充组件,减少因为一个用户名而产生的联表回填;
|
||||||
|
- 适配 P6Spy SQL 性能分析组件,开发期间方便监控 SQL 执行;
|
||||||
|
- 适配 TLog 链路追踪组件,方便在杂乱的日志文件中追踪你某次请求的日志记录;
|
||||||
|
- 适配 JetCache 缓存框架(比 Spring Cache 更强大易用),通过注解声明即可快速实现方法级缓存,极大改善编码式缓存体验,且支持灵活的二级缓存配置、分布式自动刷新等能力;
|
||||||
|
- 前端适配 Vue Devtools(Vue 官方提供的调试浏览器插件),极大提高 Vue 开发及调试效率
|
||||||
|
|
||||||
|
6.**Almost最佳后端规范:** 后端严格遵循阿里巴巴 Java 编码规范,注释覆盖率 > 45%,接口参数示例 100%,代码分层使用体验佳,变量、方法命名清晰统一,前端代码也使用严格的 ESLint、StyleLint 等检查。良好的设计,代码复用率极高!写代码时,让你有一种无需多写,理应如此的感觉。我是代码洁癖,我实际写的时候很清楚这到底是不是乱吹。
|
||||||
|
|
||||||
|
7.**卓越工程:** 后端采用模块化工程结构,并适配了统一项目版本号、编译项目自动代码格式化、代码混淆等插件,提供了自定义打包部署结构配置(配置文件、三方依赖和主程序分离),提供全套环境及应用的 Docker Compose 部署脚本。为了减少您开发新项目时的改造耗时,项目品牌配置持续进行深度聚合,简单的配置和结构修改即可快速开始独属于你的新项目。
|
||||||
|
|
||||||
|
8.**业务脚手架:** 有颜有料,不止是说说而已,持续打磨 UI 设计与色彩主题。提供基于 RBAC 的权限控制、通用数据权限,包含丰富的通用业务功能:第三方登录,邮箱、短信(生产级炸弹漏洞处理方案),个人中心、用户管理、角色管理、部门管理、系统配置(基础站点配置、邮件配置、安全配置)、系统日志、消息中心、通知公告等,设计用心,逻辑合理闭环。
|
||||||
|
> 一个好的脚手架项目,不仅仅是提供一系列组件集成与配置,也不仅仅是封装一堆好用的工具,还更应该提供一系列通用基础业务解决方案及设计,为初创团队项目减负。
|
||||||
|
|
||||||
|
9.**质量与安全:** CI 已集成 Sonar、Codacy,Push 即扫描代码质量,定期扫描 CVE 漏洞,及时解决潜在问题。封装数据库字段加密、JSON 脱敏、XSS 过滤等工具,提供诸多安全解决方案。
|
||||||
|
|
||||||
|
由于篇幅有限,且项目正处于高速发展期,更多功能正在陆续上线(敬请关注仓库或群内动态)。另外像最基本的统一异常、错误处理,基础线程池等配置就不在此赘述,细节优化详情请 clone 代码查看。
|
||||||
|
> Talk is cheap, show the code.
|
||||||
|
|
||||||
|
## 系统功能
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> 更多功能和优化正在赶来💦,最新项目计划、进展请进群或关注 [需求墙](https://continew.top/require.html) 和 [更新日志](https://continew.top/admin/other/changelog.html)。
|
||||||
|
|
||||||
|
- 仪表盘:提供工作台、分析页,工作台提供功能快捷导航入口、最新公告、动态;分析页提供全面数据可视化能力
|
||||||
|
- 个人中心:支持基础信息修改、密码修改、邮箱绑定、手机号绑定(并提供行为验证码、短信限流等安全处理)、第三方账号绑定/解绑、头像裁剪上传
|
||||||
|
- 消息中心:提供站内信消息统一查看、标记已读、全部已读、删除等功能(目前仅支持系统通知消息)
|
||||||
|
- 用户管理:管理系统用户,包含新增、修改、删除、导入、导出、重置密码、分配角色等功能
|
||||||
|
|
||||||
|
- 角色管理:管理系统用户的功能权限及数据权限,包含新增、修改、删除、分配角色等功能
|
||||||
|
|
||||||
|
- 菜单管理:管理系统菜单及按钮权限,支持多级菜单,动态路由,包含新增、修改、删除等功能
|
||||||
|
|
||||||
|
- 部门管理:管理系统组织架构,包含新增、修改、删除、导出等功能,以树形列表进行展示
|
||||||
|
|
||||||
|
- 字典管理:管理系统公用数据字典,例如:消息类型。支持字典标签背景色和排序等配置
|
||||||
|
|
||||||
|
- 通知公告:管理系统公告,支持设置公告的生效时间、终止时间、通知范围(所有人、指定用户)
|
||||||
|
|
||||||
|
- 文件管理:管理系统文件,支持上传、下载、预览(目前支持图片、音视频、PDF、Word、Excel、PPT)、重命名、切换视图(列表、网格)等功能
|
||||||
|
|
||||||
|
- 存储管理:管理文件存储配置,支持本地存储、兼容 S3 协议对象存储
|
||||||
|
|
||||||
|
- 终端管理:多端认证管理,可设置不同的 token 有效期
|
||||||
|
|
||||||
|
- 系统配置:
|
||||||
|
- 基础配置:提供修改系统标题、Logo、favicon、版权信息等基础配置功能,以方便用户系统与其自身品牌形象保持一致
|
||||||
|
- 邮件配置:提供系统发件箱配置,也支持通过配置文件指定
|
||||||
|
- 安全配置:提供密码策略修改,支持丰富的密码策略设定,包括但不限于 `密码有效期`、`密码重复次数`、`密码错误锁定账号次数、时间` 等
|
||||||
|
|
||||||
|
- 在线用户:管理当前登录用户,可一键踢除下线
|
||||||
|
|
||||||
|
- 日志管理:管理系统登录日志、操作日志,支持查看日志详情,包含请求头、响应头等报文信息
|
||||||
|
|
||||||
|
- 任务管理:管理系统定时任务,包含新增、修改、删除、执行功能,支持 Cron(可配置式生成 Cron 表达式) 和固定频率
|
||||||
|
|
||||||
|
- 任务日志:管理定时任务执行日志,包含停止、重试指定批次,查询集群各节点的详细输出日志等功能
|
||||||
|
|
||||||
|
- 应用管理:管理第三方系统应用 AK、SK,包含新增、修改、删除、查看密钥、重置密钥等功能,支持设置密钥有效期
|
||||||
|
|
||||||
|
- 代码生成:提供根据数据库表自动生成相应的前后端 CRUD 代码的功能,支持同步最新表结构及代码生成预览
|
||||||
|
|
||||||
|
## 系统截图
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> 受篇幅长度及功能更新频率影响,下方仅为系统 **部分** 功能于 **2024年11月18日** 进行的截图,更多新增功能及细节请登录演示环境或 clone 代码到本地启动查看。
|
||||||
|
|
||||||
|
<table border="1" cellpadding="1" cellspacing="1" style="width: 500px">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/000登录页面.png" alt="登录页面" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/000登录页面-H5.png" alt="登录页面-H5" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/001仪表盘.png" alt="仪表盘" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/002分析页.png" alt="分析页" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/010个人中心.png" alt="个人中心" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/013消息中心.png" alt="消息中心" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/011安全设置-修改邮箱.png" alt="安全设置-修改邮箱" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/012安全设置-修改邮箱-邮箱验证码.png" alt="安全设置-修改邮箱-邮箱验证码" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/060系统管理-系统配置.png" alt="系统管理-系统配置" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/061系统管理-安全配置.png" alt="系统管理-安全配置" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/020系统管理-用户管理-列表.png" alt="系统管理-用户管理-列表" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/021系统管理-用户管理-新增.png" alt="系统管理-用户管理-新增" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/025系统管理-角色管理-列表.png" alt="系统管理-角色管理-列表" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/026系统管理-角色管理-新增.png" alt="系统管理-角色管理-新增" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/030系统管理-菜单管理-列表.png" alt="系统管理-菜单管理-列表" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/031系统管理-菜单管理-新增.png" alt="系统管理-菜单管理-新增" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/045系统管理-公告管理-列表.png" alt="系统管理-公告管理-列表" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/046系统管理-公告管理-修改.png" alt="系统管理-公告管理-修改" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/040系统管理-字典管理-列表.png" alt="系统管理-字典管理-列表" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/041系统管理-字典项管理.png" alt="系统管理-字典项管理" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/051系统管理-文件管理-列表-2.png" alt="系统管理-文件管理-列表-2" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/052系统管理-文件管理-查看文档.png" alt="系统管理-文件管理-查看文档" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/301系统工具-代码生成-配置.png" alt="系统工具-代码生成-配置" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/302系统工具-代码生成-预览.png" alt="系统工具-代码生成-预览" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/100系统监控-在线用户.png" alt="系统监控-在线用户" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/101系统监控-系统日志-登录日志.png" alt="系统监控-系统日志-登录日志" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><img src=".image/screenshot/102系统监控-系统日志-操作日志.png" alt="系统监控-系统日志-操作日志" width="1920" /></td>
|
||||||
|
<td><img src=".image/screenshot/103系统监控-系统日志-操作日志-详情.png" alt="系统监控-系统日志-操作日志-详情" width="1920" /></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
> 更详细的流程,请查看在线文档[《快速开始》](https://continew.top/admin/intro/quick-start.html#%E5%89%8D%E7%AB%AF)。
|
||||||
|
|
||||||
|
```
|
||||||
|
# 1.克隆本项目
|
||||||
|
git clone https://github.com/charles7c/continew-admin-ui.git
|
||||||
|
git clone https://gitee.com/continew/continew-admin-ui.git
|
||||||
|
|
||||||
|
# 2.在 IDE(Visual Studio Code/WebStorm)中打开前端项目 continew-admin-ui
|
||||||
|
|
||||||
|
# 3.安装 pnpm
|
||||||
|
npm install -g pnpm
|
||||||
|
|
||||||
|
# 4.安装依赖
|
||||||
|
pnpm i
|
||||||
|
|
||||||
|
# 5.启动程序
|
||||||
|
# 5.1 启动成功:访问 http://localhost:5173/
|
||||||
|
pnpm dev
|
||||||
|
```
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
continew-admin-ui
|
||||||
|
├─ config # Vite 插件配置
|
||||||
|
├─ public # 公共静态资源(favicon.ico、logo.svg)
|
||||||
|
├─ src
|
||||||
|
│ ├─ apis # 请求接口
|
||||||
|
│ │ ├─ auth # 认证模块
|
||||||
|
│ │ ├─ code # 代码生成模块
|
||||||
|
│ │ ├─ common # 公共模块
|
||||||
|
│ │ ├─ monitor # 系统监控模块
|
||||||
|
│ │ ├─ open # 能力开放模块
|
||||||
|
│ │ ├─ schedule # 任务调度模块
|
||||||
|
│ │ └─ system # 系统管理模块
|
||||||
|
│ ├─ assets # 静态资源
|
||||||
|
│ │ ├─ icons # 图标资源
|
||||||
|
│ │ ├─ images # 图片资源
|
||||||
|
│ │ └─ fonts # 字体资源
|
||||||
|
│ ├─ components # 通用业务组件
|
||||||
|
│ ├─ config # 全局配置(包含 echarts 主题)
|
||||||
|
│ │ └─ settings.json # 配置文件
|
||||||
|
│ ├─ directives # 指令集(如需,可自行补充)
|
||||||
|
│ ├─ hooks # 全局 hooks
|
||||||
|
│ ├─ layout # 布局
|
||||||
|
│ ├─ mock # 模拟数据
|
||||||
|
│ ├─ router # 路由配置
|
||||||
|
│ ├─ stores # 状态管理中心
|
||||||
|
│ ├─ types # TypeScript 类型
|
||||||
|
│ ├─ utils # 工具库(mock 全局开启/关闭)
|
||||||
|
│ ├─ views # 页面
|
||||||
|
│ │ ├─ code # 代码生成
|
||||||
|
│ │ │ └─ generator # 代码生成
|
||||||
|
│ │ ├─ dashboard # 仪表盘
|
||||||
|
│ │ │ ├─ analysis # 分析页
|
||||||
|
│ │ │ └─ workplace # 工作台
|
||||||
|
│ │ ├─ default # 默认页面
|
||||||
|
│ │ ├─ login # 登录模块
|
||||||
|
│ │ ├─ monitor # 系统监控
|
||||||
|
│ │ │ ├─ log # 系统日志
|
||||||
|
│ │ │ │ ├─ login # 登录日志
|
||||||
|
│ │ │ │ └─ operation # 操作日志
|
||||||
|
│ │ │ └─ online # 在线用户
|
||||||
|
│ │ ├─ open # 能力开放
|
||||||
|
│ │ │ └─ user # 应用管理
|
||||||
|
│ │ ├─ setting # 设置
|
||||||
|
│ │ │ ├─ profile # 个人中心
|
||||||
|
│ │ │ └─ message # 消息中心
|
||||||
|
│ │ └─ system # 系统管理
|
||||||
|
│ │ ├─ config # 系统配置
|
||||||
|
│ │ ├─ dept # 部门管理
|
||||||
|
│ │ ├─ dict # 字典管理
|
||||||
|
│ │ ├─ file # 文件管理
|
||||||
|
│ │ ├─ menu # 菜单管理
|
||||||
|
│ │ ├─ notice # 通知公告
|
||||||
|
│ │ ├─ role # 角色管理
|
||||||
|
│ │ ├─ storage # 存储管理
|
||||||
|
│ │ └─ user # 用户管理
|
||||||
|
│ ├─ App.vue
|
||||||
|
│ └─ main.ts
|
||||||
|
├─ .env.development # 开发环境配置
|
||||||
|
├─ .env.production # 生产环境配置
|
||||||
|
├─ .env.test # 测试环境配置
|
||||||
|
├─ eslint.config.js # ESLint 配置
|
||||||
|
├─ index.html
|
||||||
|
├─ package.json
|
||||||
|
├─ package-lock.json
|
||||||
|
├─ pnpm-lock.yaml
|
||||||
|
├─ tsconfig.json
|
||||||
|
├─ vite.config.ts
|
||||||
|
├─ .gitignore(Git 忽略文件相关配置文件)
|
||||||
|
├─ .github(GitHub 相关配置目录,实际开发时直接删除)
|
||||||
|
├─ .idea
|
||||||
|
│ └─ icon.png(IDEA 项目图标,实际开发时直接删除)
|
||||||
|
├─ .image(截图目录,实际开发时直接删除)
|
||||||
|
├─ .vscode(VSCode 配置目录)
|
||||||
|
├─ LICENSE(开源协议文件)
|
||||||
|
├─ CHANGELOG.md(更新日志文件,实际开发时直接删除)
|
||||||
|
└─ README.md(项目 README 文件,实际开发时替换为真实内容)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 贡献指南
|
||||||
|
|
||||||
|
ContiNew Admin 致力于提供开箱即用,持续舒适的开发体验。作为一个开源项目,Creator 的初心是希望 ContiNew Admin 依托开源协作模式,提升技术透明度、放大集体智慧、共创优秀实践,源源不断地为企业级项目开发提供助力。
|
||||||
|
|
||||||
|
我们非常欢迎广大社区用户为 ContiNew Admin **贡献(开发,测试、文档、答疑等)** 或优化代码,欢迎各位感兴趣的小伙伴儿,[添加微信](https://continew.top/support.html) 讨论或认领任务。
|
||||||
|
|
||||||
|
### 分支说明
|
||||||
|
|
||||||
|
ContiNew Admin 的分支目前分为下个大版本的开发分支和上个大版本的维护分支,PR 前请注意对应分支是否处于维护状态,版本支持情况请查看 [更新日志/版本支持](https://continew.top/admin/other/changelog.html#%E7%89%88%E6%9C%AC%E6%94%AF%E6%8C%81)。
|
||||||
|
|
||||||
|
| 分支 | 说明 |
|
||||||
|
| ----- | ------------------------------------------------------------ |
|
||||||
|
| dev | 开发分支,默认为下个大版本的 SNAPSHOT 版本,接受新功能或新功能优化 PR |
|
||||||
|
| x.x.x | 维护分支,在 vx.x.x 版本维护期终止前(一般为下个大版本发布前),用于修复上个版本的 Bug,只接受已有功能修复,不接受新功能 PR |
|
||||||
|
|
||||||
|
### 贡献代码
|
||||||
|
|
||||||
|
如果您想提交新功能或优化现有代码,可以按照以下步骤操作:
|
||||||
|
|
||||||
|
1. 首先,在 Gitee 或 GitHub 上将项目 fork 到您自己的仓库
|
||||||
|
2. 然后,将 fork 过来的项目(即您的项目)克隆到本地
|
||||||
|
3. 切换到当前仍在维护的分支(请务必充分了解分支使用说明,可进群联系维护者确认)
|
||||||
|
4. 开始修改代码,修改完成后,将代码 commit 并 push 到您的远程仓库
|
||||||
|
5. 在 Gitee 或 GitHub 上新建 pull request(pr),选择好源和目标,按模板要求填写说明信息后提交即可(多多参考 [已批准合并的 pr 记录](https://github.com/Charles7c/continew-admin-ui/pulls?q=is%3Apr+is%3Amerged),会大大增加批准合并率)
|
||||||
|
6. 最后,耐心等待维护者合并您的请求即可
|
||||||
|
|
||||||
|
请记住,如果您有任何疑问或需要帮助,我们将随时提供支持。
|
||||||
|
|
||||||
|
> [!IMPORTANT]
|
||||||
|
> 欢迎大家为 ContiNew Admin 贡献代码,我们非常感谢您的支持!为了更好地管理项目,维护者有一些要求:
|
||||||
|
>
|
||||||
|
> 1. 请确保代码、配置文件的结构和命名规范良好,完善的代码注释
|
||||||
|
> 2. 在提交代码前,请按照 [Angular 提交规范](https://github.com/conventional-changelog/conventional-changelog/tree/master/packages/conventional-changelog-angular) 编写 commit 的 message
|
||||||
|
|
||||||
|
## 反馈交流
|
||||||
|
|
||||||
|
欢迎各位小伙伴儿扫描下方二维码加入项目交流群,与项目维护团队及其他大佬用户实时交流讨论。
|
||||||
|
|
||||||
|
<div align="left">
|
||||||
|
<img src=".image/qrcode.jpg" alt="二维码" height="230px" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## 鸣谢
|
||||||
|
|
||||||
|
### 鸣谢
|
||||||
|
|
||||||
|
感谢参与贡献的每一位小伙伴🥰
|
||||||
|
|
||||||
|
<a href="https://github.com/Charles7c/continew-admin/graphs/contributors">
|
||||||
|
<img src="https://contrib.rocks/image?repo=Charles7c/continew-admin" />
|
||||||
|
</a>
|
||||||
|
|
||||||
|
### 特别鸣谢
|
||||||
|
|
||||||
|
- 感谢 <a href="https://www.jetbrains.com/" target="_blank">JetBrains</a> 提供的 <a href="https://jb.gg/OpenSourceSupport" target="_blank">非商业开源软件开发授权</a>
|
||||||
|
- 感谢 [Gi Demo ](https://gitee.com/lin0716/gi-demo) 开箱即用的 Vue 中后台管理系统前端模板
|
||||||
|
- 感谢项目使用或未使用到的每一款开源组件,致敬各位开源先驱 :fire:
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
- 遵循 <a href="https://github.com/Charles7c/continew-admin-ui/blob/dev/LICENSE" target="_blank">Apache-2.0</a> 开源许可协议
|
||||||
|
- Copyright © 2022-present <a href="https://blog.charles7c.top" target="_blank">Charles7c</a>
|
||||||
25
config/plugins/app-info.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import boxen from 'boxen'
|
||||||
|
import picocolors from 'picocolors'
|
||||||
|
import type { Plugin } from 'vite'
|
||||||
|
|
||||||
|
export default function appInfo(): Plugin {
|
||||||
|
return {
|
||||||
|
name: 'appInfo',
|
||||||
|
apply: 'serve',
|
||||||
|
async buildStart() {
|
||||||
|
const { bold, green, cyan, bgGreen, underline } = picocolors
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log(
|
||||||
|
boxen(
|
||||||
|
`${bold(green(`${bgGreen('ContiNew Admin v3.6.0-SNAPSHOT')}`))}\n${cyan('在线文档:')}${underline('https://continew.top')}\n${cyan('常见问题:')}${underline('https://continew.top/faq.html')}\n${cyan('持续迭代优化的前后端分离中后台管理系统框架。')}`,
|
||||||
|
{
|
||||||
|
padding: 1,
|
||||||
|
margin: 1,
|
||||||
|
borderStyle: 'double',
|
||||||
|
textAlignment: 'center',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
12
config/plugins/auto-import.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import autoImport from 'unplugin-auto-import/vite'
|
||||||
|
|
||||||
|
export default function createAutoImport() {
|
||||||
|
return autoImport({
|
||||||
|
// 自动导入 vue 相关函数
|
||||||
|
imports: ['vue', 'vue-router', {
|
||||||
|
// vue 3.5.x
|
||||||
|
vue: ['useTemplateRef', 'onWatcherCleanup', 'useId'],
|
||||||
|
}],
|
||||||
|
dts: './src/types/auto-imports.d.ts',
|
||||||
|
})
|
||||||
|
}
|
||||||
11
config/plugins/components.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import components from 'unplugin-vue-components/vite'
|
||||||
|
|
||||||
|
export default function createComponents() {
|
||||||
|
return components({
|
||||||
|
// 指定组件位置,默认是 src/components 自动导入自定义组件
|
||||||
|
dirs: ['src/components'],
|
||||||
|
extensions: ['vue', 'tsx'],
|
||||||
|
// 配置文件生成位置
|
||||||
|
dts: './src/types/components.d.ts',
|
||||||
|
})
|
||||||
|
}
|
||||||
6
config/plugins/devtools.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import VueDevTools from 'vite-plugin-vue-devtools'
|
||||||
|
|
||||||
|
export default function createDevtools(env) {
|
||||||
|
const { VITE_OPEN_DEVTOOLS } = env
|
||||||
|
return VITE_OPEN_DEVTOOLS === 'true' && VueDevTools()
|
||||||
|
}
|
||||||
20
config/plugins/index.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import type { PluginOption } from 'vite'
|
||||||
|
import vue from '@vitejs/plugin-vue'
|
||||||
|
import vueJsx from '@vitejs/plugin-vue-jsx'
|
||||||
|
|
||||||
|
import appInfo from './app-info'
|
||||||
|
import createDevtools from './devtools'
|
||||||
|
import createAutoImport from './auto-import'
|
||||||
|
import createComponents from './components'
|
||||||
|
import createSvgIcon from './svg-icon'
|
||||||
|
import createMock from './mock'
|
||||||
|
|
||||||
|
export default function createVitePlugins(viteEnv, isBuild = false) {
|
||||||
|
const vitePlugins: (PluginOption | PluginOption[])[] = [appInfo(), vue(), vueJsx()]
|
||||||
|
vitePlugins.push(createDevtools(viteEnv))
|
||||||
|
vitePlugins.push(createAutoImport())
|
||||||
|
vitePlugins.push(createComponents())
|
||||||
|
vitePlugins.push(createSvgIcon(isBuild))
|
||||||
|
vitePlugins.push(createMock(viteEnv, isBuild))
|
||||||
|
return vitePlugins
|
||||||
|
}
|
||||||
17
config/plugins/mock.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { viteMockServe } from 'vite-plugin-mock'
|
||||||
|
|
||||||
|
export default function createMock(env, isBuild) {
|
||||||
|
const { VITE_BUILD_MOCK } = env
|
||||||
|
return viteMockServe({
|
||||||
|
mockPath: 'src/mock', // 目录位置
|
||||||
|
logger: !isBuild, // 是否在控制台显示请求日志
|
||||||
|
supportTs: true, // 是否读取 ts 文件模块
|
||||||
|
localEnabled: true, // 设置是否启用本地mock文件
|
||||||
|
prodEnabled: isBuild && VITE_BUILD_MOCK === 'true', // 设置打包是否启用mock功能
|
||||||
|
// 这样可以控制关闭mock的时候不让mock打包到最终代码内
|
||||||
|
injectCode: `
|
||||||
|
import { setupProdMockServer } from '../src/mock/index';
|
||||||
|
setupProdMockServer();
|
||||||
|
`,
|
||||||
|
})
|
||||||
|
}
|
||||||
13
config/plugins/svg-icon.ts
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import path from 'node:path'
|
||||||
|
import process from 'node:process'
|
||||||
|
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
|
||||||
|
|
||||||
|
export default function createSvgIcon(isBuild) {
|
||||||
|
return createSvgIconsPlugin({
|
||||||
|
// 指定需要缓存的图标文件夹
|
||||||
|
iconDirs: [path.resolve(process.cwd(), 'src/assets/icons')],
|
||||||
|
// 指定 symbolId 格式
|
||||||
|
symbolId: 'icon-[dir]-[name]',
|
||||||
|
svgoOptions: isBuild,
|
||||||
|
})
|
||||||
|
}
|
||||||
48
eslint.config.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import antfu from '@antfu/eslint-config'
|
||||||
|
|
||||||
|
// https://github.com/antfu/eslint-config
|
||||||
|
export default antfu(
|
||||||
|
{
|
||||||
|
vue: {
|
||||||
|
overrides: {
|
||||||
|
'vue/block-order': ['error', {
|
||||||
|
order: [['script', 'template'], 'style'],
|
||||||
|
}], // 强制组件顶级元素的顺序
|
||||||
|
'vue/define-macros-order': ['error', {
|
||||||
|
order: ['defineOptions', 'defineModel', 'defineProps', 'defineEmits', 'defineSlots'],
|
||||||
|
defineExposeLast: true,
|
||||||
|
}], // 强制执行定义限制和定义弹出编译器宏的顺序
|
||||||
|
'vue/singleline-html-element-content-newline': 'off', // 要求在单行元素的内容前后换行
|
||||||
|
'vue/html-self-closing': ['off', {
|
||||||
|
html: {
|
||||||
|
void: 'never',
|
||||||
|
normal: 'always',
|
||||||
|
component: 'never',
|
||||||
|
},
|
||||||
|
}], // 强制自结束样式
|
||||||
|
'vue/custom-event-name-casing': ['error', 'kebab-case'], // 对自定义事件名称强制使用特定大小写
|
||||||
|
},
|
||||||
|
},
|
||||||
|
typescript: true,
|
||||||
|
ignores: [
|
||||||
|
'**/*.md',
|
||||||
|
'.github',
|
||||||
|
'.image',
|
||||||
|
'src/types/shims-vue.d.ts',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
rules: {
|
||||||
|
'curly': ['off', 'all'], // 对所有控制语句强制使用一致的大括号样式
|
||||||
|
'no-new': 'off', // 不允许在赋值或比较之外使用 new 运算符
|
||||||
|
// 'no-console': 'error', // 禁止使用 console
|
||||||
|
'style/arrow-parens': ['error', 'always'], // 箭头函数参数需要括号
|
||||||
|
'style/brace-style': ['error', '1tbs', { allowSingleLine: true }], // 对块执行一致的大括号样式
|
||||||
|
'regexp/no-unused-capturing-group': 'off',
|
||||||
|
'regexp/no-super-linear-backtracking': 'off',
|
||||||
|
'node/prefer-global/process': 'off',
|
||||||
|
'antfu/top-level-function': 'off',
|
||||||
|
'antfu/if-newline': 'off',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
34
index.html
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="zh-CN">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico" />
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" />
|
||||||
|
<link rel="stylesheet" href="/static/css/loading.css" type="text/css" />
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app">
|
||||||
|
<section class="init-box">
|
||||||
|
<div class="init-loading">
|
||||||
|
<div class="init-loading-rect"></div>
|
||||||
|
<div class="init-loading-rect"></div>
|
||||||
|
<div class="init-loading-rect"></div>
|
||||||
|
<div class="init-loading-rect"></div>
|
||||||
|
<div class="init-loading-rect"></div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<script type="module" src="/src/main.ts"></script>
|
||||||
|
<script>
|
||||||
|
var _hmt = _hmt || [];
|
||||||
|
(function() {
|
||||||
|
var hm = document.createElement("script");
|
||||||
|
hm.src = "https://hm.baidu.com/hm.js?be968d539e394cf45975b5117965eb10";
|
||||||
|
var s = document.getElementsByTagName("script")[0];
|
||||||
|
s.parentNode.insertBefore(hm, s);
|
||||||
|
})();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
99
package.json
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
{
|
||||||
|
"name": "ysoft-ui",
|
||||||
|
"type": "module",
|
||||||
|
"version": "3.6.0-SNAPSHOT",
|
||||||
|
"private": "true",
|
||||||
|
"scripts": {
|
||||||
|
"bootstrap": "pnpm install --registry=https://registry.npmmirror.com",
|
||||||
|
"dev": "vite --host",
|
||||||
|
"build": "vue-tsc --noEmit && vite build",
|
||||||
|
"build:test": "vue-tsc --noEmit && vite build --mode test",
|
||||||
|
"preview": "vite preview --port 5050",
|
||||||
|
"typecheck": "vue-tsc --noEmit",
|
||||||
|
"lint": "eslint .",
|
||||||
|
"lint:fix": "eslint . --fix"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@amap/amap-jsapi-loader": "^1.0.1",
|
||||||
|
"@arco-design/color": "^0.4.0",
|
||||||
|
"@arco-themes/vue-gi-demo": "^0.0.51",
|
||||||
|
"@codemirror/lang-javascript": "^6.2.1",
|
||||||
|
"@codemirror/lang-vue": "^0.1.2",
|
||||||
|
"@codemirror/theme-one-dark": "^6.1.2",
|
||||||
|
"@ddietr/codemirror-themes": "^1.4.2",
|
||||||
|
"@vue-office/docx": "1.6.0",
|
||||||
|
"@vue-office/excel": "1.7.1",
|
||||||
|
"@vue-office/pdf": "1.6.4",
|
||||||
|
"@vueuse/components": "^10.5.0",
|
||||||
|
"@vueuse/core": "^10.5.0",
|
||||||
|
"aieditor": "^1.0.13",
|
||||||
|
"animate.css": "^4.1.1",
|
||||||
|
"ant-design-vue": "^4.2.6",
|
||||||
|
"axios": "^0.27.2",
|
||||||
|
"codemirror": "^6.0.1",
|
||||||
|
"cron-parser": "^4.9.0",
|
||||||
|
"crypto-js": "^4.2.0",
|
||||||
|
"dayjs": "^1.11.4",
|
||||||
|
"echarts": "^5.4.2",
|
||||||
|
"flv.js": "^1.6.2",
|
||||||
|
"hls.js": "^1.6.15",
|
||||||
|
"jsencrypt": "^3.3.2",
|
||||||
|
"lint-staged": "^15.2.10",
|
||||||
|
"lodash-es": "^4.17.21",
|
||||||
|
"mitt": "^3.0.0",
|
||||||
|
"mockjs": "^1.1.0",
|
||||||
|
"nprogress": "^0.2.0",
|
||||||
|
"pinia": "^2.0.16",
|
||||||
|
"pinia-plugin-persistedstate": "^3.1.0",
|
||||||
|
"qs": "^6.11.2",
|
||||||
|
"query-string": "^9.0.0",
|
||||||
|
"v-viewer": "^3.0.10",
|
||||||
|
"viewerjs": "^1.11.6",
|
||||||
|
"vite-plugin-vue-devtools": "^7.0.27",
|
||||||
|
"vue": "^3.5.4",
|
||||||
|
"vue-codemirror6": "^1.1.27",
|
||||||
|
"vue-color-kit": "^1.0.5",
|
||||||
|
"vue-cropper": "^1.1.1",
|
||||||
|
"vue-demi": "^0.14.10",
|
||||||
|
"vue-draggable-plus": "^0.3.5",
|
||||||
|
"vue-echarts": "^6.5.5",
|
||||||
|
"vue-json-pretty": "^2.4.0",
|
||||||
|
"vue-router": "^4.3.3",
|
||||||
|
"vue3-tree-org": "^4.2.2",
|
||||||
|
"xe-utils": "^3.5.7",
|
||||||
|
"xgplayer": "^3.0.23",
|
||||||
|
"xgplayer-flv": "^3.0.23"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@antfu/eslint-config": "^2.16.3",
|
||||||
|
"@arco-design/web-vue": "^2.57.0",
|
||||||
|
"@types/crypto-js": "^4.2.2",
|
||||||
|
"@types/lodash-es": "^4.17.12",
|
||||||
|
"@types/node": "^20.2.5",
|
||||||
|
"@types/query-string": "^6.3.0",
|
||||||
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
|
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
||||||
|
"@vue/tsconfig": "^0.1.3",
|
||||||
|
"boxen": "^7.1.1",
|
||||||
|
"eslint": "^9.0.0",
|
||||||
|
"less": "^4.1.3",
|
||||||
|
"less-loader": "^11.0.0",
|
||||||
|
"picocolors": "^1.0.0",
|
||||||
|
"sass": "^1.62.1",
|
||||||
|
"sass-loader": "^13.2.2",
|
||||||
|
"typescript": "~5.0.4",
|
||||||
|
"unplugin-auto-import": "^0.16.4",
|
||||||
|
"unplugin-vue-components": "^0.25.1",
|
||||||
|
"vite": "^5.1.5",
|
||||||
|
"vite-plugin-mock": "^2.9.8",
|
||||||
|
"vite-plugin-style-import": "^2.0.0",
|
||||||
|
"vite-plugin-svg-icons": "^2.0.1",
|
||||||
|
"vue-tsc": "2.0.19"
|
||||||
|
},
|
||||||
|
"simple-git-hooks": {
|
||||||
|
"pre-commit": "pnpm lint-staged"
|
||||||
|
},
|
||||||
|
"lint-staged": {
|
||||||
|
"*": "eslint --fix"
|
||||||
|
}
|
||||||
|
}
|
||||||
9795
pnpm-lock.yaml
generated
Normal file
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 66 KiB |
9
public/logo.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<svg width="33" height="33" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 174.8 204">
|
||||||
|
<path fill="#307AF2" d="M86.7,0l88,51v.2l-16.3,9.4v-.2L86.7,18.9Zm71.8,143.5,16.3,9.4v.2L86.8,204h0l-16.3-9.4,16.3-9.4h0l71.7-41.5v-.2Z"/>
|
||||||
|
<path fill="#12D2AC" d="M16.3,143.5v.2L58,167.8l-16.3,9.4L0,153.1v-.2Z"/>
|
||||||
|
<path fill="#12D2AC" d="M104.1,93,15.9,143.8l-.2-.1V124.9l.2.1L87.7,83.6,104.1,93Z"/>
|
||||||
|
<path fill="#0057FE" d="M88.1,0,.1,51v.2l16.3,9.4v-.2L88.1,18.9Z"/>
|
||||||
|
<path fill="#307AF2" d="M.1,50.9.2,152.6l.2.1,16.3-9.4-.2-.1-.1-82.9L.1,50.9Z"/>
|
||||||
|
<path fill="#0057FE" d="M174.7,50.9l-.1,101.7-.2.1-16.3-9.4.2-.1.1-82.9Z"/>
|
||||||
|
<path fill="#12D2AC" d="M41.7,158.5l16.1,9.4,100.6-58.7V90.4Z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 683 B |
49
public/static/css/loading.css
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
body {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.init-box {
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.init-loading {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.init-loading-rect {
|
||||||
|
background-color: #007aff;
|
||||||
|
height: 100%;
|
||||||
|
width: 15%;
|
||||||
|
animation: init-wave 1.2s infinite ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.init-loading-rect:nth-child(1) {
|
||||||
|
animation-delay: -1.2s;
|
||||||
|
}
|
||||||
|
.init-loading-rect:nth-child(2) {
|
||||||
|
animation-delay: -1.1s;
|
||||||
|
}
|
||||||
|
.init-loading-rect:nth-child(3) {
|
||||||
|
animation-delay: -1s;
|
||||||
|
}
|
||||||
|
.init-loading-rect:nth-child(4) {
|
||||||
|
animation-delay: -0.9s;
|
||||||
|
}
|
||||||
|
.init-loading-rect:nth-child(5) {
|
||||||
|
animation-delay: -0.8s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes init-wave {
|
||||||
|
0%,
|
||||||
|
40%,
|
||||||
|
100% {
|
||||||
|
transform: scaleY(0.4);
|
||||||
|
}
|
||||||
|
20% {
|
||||||
|
transform: scaleY(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/static/images/loading.gif
Normal file
|
After Width: | Height: | Size: 26 KiB |
42
src/App.vue
Normal file
9
src/apis/area/index.ts
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
/** @desc 获取地区列表 */
|
||||||
|
export const getAreaList = (params: { type: 'province' | 'city' | 'area', code?: string }) => {
|
||||||
|
return http.get<T.AreaItem>('/area/list', params)
|
||||||
|
}
|
||||||
5
src/apis/area/type.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
export interface AreaItem {
|
||||||
|
label: string
|
||||||
|
code: string
|
||||||
|
children?: AreaItem[]
|
||||||
|
}
|
||||||
46
src/apis/auth/index.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/auth'
|
||||||
|
|
||||||
|
/** @desc 账号登录 */
|
||||||
|
export function accountLogin(req: T.AccountLoginReq) {
|
||||||
|
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 手机号登录 */
|
||||||
|
export function phoneLogin(req: T.PhoneLoginReq) {
|
||||||
|
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 邮箱登录 */
|
||||||
|
export function emailLogin(req: T.EmailLoginReq) {
|
||||||
|
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 三方账号登录 */
|
||||||
|
export function socialLogin(req: any) {
|
||||||
|
return http.post<T.LoginResp>(`${BASE_URL}/login`, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 三方账号登录授权 */
|
||||||
|
export function socialAuth(source: string) {
|
||||||
|
return http.get<T.SocialAuthAuthorizeResp>(`${BASE_URL}/${source}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 退出登录 */
|
||||||
|
export function logout() {
|
||||||
|
return http.post(`${BASE_URL}/logout`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 获取用户信息 */
|
||||||
|
export const getUserInfo = () => {
|
||||||
|
return http.get<T.UserInfo>(`${BASE_URL}/user/info`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 获取路由信息 */
|
||||||
|
export const getUserRoute = () => {
|
||||||
|
return http.get<T.RouteItem[]>(`${BASE_URL}/user/route`)
|
||||||
|
}
|
||||||
88
src/apis/auth/type.ts
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/** 用户类型 */
|
||||||
|
export interface UserInfo {
|
||||||
|
id: string
|
||||||
|
username: string
|
||||||
|
nickname: string
|
||||||
|
gender: 0 | 1 | 2
|
||||||
|
email: string
|
||||||
|
phone: string
|
||||||
|
avatar: string
|
||||||
|
pwdResetTime: string
|
||||||
|
pwdExpired: boolean
|
||||||
|
registrationDate: string
|
||||||
|
deptName: string
|
||||||
|
roles: string[]
|
||||||
|
permissions: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 路由类型 */
|
||||||
|
export interface RouteItem {
|
||||||
|
id: string
|
||||||
|
title: string
|
||||||
|
parentId: string
|
||||||
|
type: 1 | 2 | 3
|
||||||
|
path: string
|
||||||
|
name: string
|
||||||
|
component: string
|
||||||
|
redirect: string
|
||||||
|
icon: string
|
||||||
|
isExternal: boolean
|
||||||
|
isHidden: boolean
|
||||||
|
isCache: boolean
|
||||||
|
permission: string
|
||||||
|
roles: string[]
|
||||||
|
sort: number
|
||||||
|
status: 0 | 1
|
||||||
|
children: RouteItem[]
|
||||||
|
activeMenu: string
|
||||||
|
alwaysShow: boolean
|
||||||
|
breadcrumb: boolean
|
||||||
|
showInTabs: boolean
|
||||||
|
affix: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 认证类型 */
|
||||||
|
export type AuthType = 'ACCOUNT' | 'PHONE' | 'EMAIL' | 'SOCIAL'
|
||||||
|
|
||||||
|
export const AuthTypeConstants = {
|
||||||
|
ACCOUNT: 'ACCOUNT',
|
||||||
|
PHONE: 'PHONE',
|
||||||
|
EMAIL: 'EMAIL',
|
||||||
|
SOCIAL: 'SOCIAL',
|
||||||
|
} as const
|
||||||
|
|
||||||
|
/** 基础认证请求接口 */
|
||||||
|
export interface AuthReq {
|
||||||
|
clientId?: string
|
||||||
|
authType?: AuthType
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 账号登录请求参数 */
|
||||||
|
export interface AccountLoginReq extends AuthReq {
|
||||||
|
username: string
|
||||||
|
password: string
|
||||||
|
captcha: string
|
||||||
|
uuid: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 手机号登录请求参数 */
|
||||||
|
export interface PhoneLoginReq extends AuthReq {
|
||||||
|
phone: string
|
||||||
|
captcha: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 邮箱登录请求参数 */
|
||||||
|
export interface EmailLoginReq extends AuthReq {
|
||||||
|
email: string
|
||||||
|
captcha: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 登录响应类型 */
|
||||||
|
export interface LoginResp {
|
||||||
|
token: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 第三方登录授权类型 */
|
||||||
|
export interface SocialAuthAuthorizeResp {
|
||||||
|
authorizeUrl: string
|
||||||
|
}
|
||||||
54
src/apis/code/generator.ts
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
import type { LabelValueState } from '@/types/global'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/code/generator'
|
||||||
|
|
||||||
|
/** @desc 查询代码生成列表 */
|
||||||
|
export function listGenConfig(query: T.GenConfigPageQuery) {
|
||||||
|
return http.get<PageRes<T.GenConfigResp[]>>(`${BASE_URL}/config`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询生成配置信息 */
|
||||||
|
export function getGenConfig(tableName: string) {
|
||||||
|
return http.get<T.GenConfigResp>(`${BASE_URL}/config/${tableName}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询字段配置列表 */
|
||||||
|
export function listFieldConfig(tableName: string, requireSync: boolean) {
|
||||||
|
return http.get<T.FieldConfigResp[]>(`${BASE_URL}/field/${tableName}?requireSync=${requireSync}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 保存配置信息 */
|
||||||
|
export function saveGenConfig(tableName: string, req: T.GeneratorConfigResp) {
|
||||||
|
return http.post(`${BASE_URL}/config/${tableName}`, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 生成预览 */
|
||||||
|
export function genPreview(tableNames: Array<string>) {
|
||||||
|
return http.get<T.GeneratePreviewResp[]>(`${BASE_URL}/preview/${tableNames}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 生成代码 */
|
||||||
|
export function downloadCode(tableNames: Array<string>) {
|
||||||
|
return http.requestNative({
|
||||||
|
url: `${BASE_URL}/${tableNames}/download`,
|
||||||
|
method: 'post',
|
||||||
|
responseType: 'blob',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 生成代码 */
|
||||||
|
export function generateCode(tableNames: Array<string>) {
|
||||||
|
return http.requestNative({
|
||||||
|
url: `${BASE_URL}/${tableNames}`,
|
||||||
|
method: 'post',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询字典列表 */
|
||||||
|
export function listFieldConfigDict() {
|
||||||
|
return http.get<LabelValueState[]>(`${BASE_URL}/dict`)
|
||||||
|
}
|
||||||
1
src/apis/code/index.ts
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export * from './generator'
|
||||||
45
src/apis/code/type.ts
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
/** 工具代码生成类型 */
|
||||||
|
export interface GenConfigResp {
|
||||||
|
tableName: string
|
||||||
|
comment: string
|
||||||
|
moduleName: string
|
||||||
|
packageName: string
|
||||||
|
businessName: string
|
||||||
|
author: string
|
||||||
|
tablePrefix: string
|
||||||
|
isOverride: boolean
|
||||||
|
createTime?: string
|
||||||
|
updateTime?: string
|
||||||
|
classNamePrefix?: string
|
||||||
|
}
|
||||||
|
export interface GenConfigQuery {
|
||||||
|
tableName?: string
|
||||||
|
}
|
||||||
|
export interface GenConfigPageQuery extends PageQuery, GenConfigQuery {}
|
||||||
|
|
||||||
|
export interface FieldConfigResp {
|
||||||
|
tableName: string
|
||||||
|
columnName: string
|
||||||
|
columnType: string
|
||||||
|
fieldName: string
|
||||||
|
fieldType: string
|
||||||
|
fieldSort: number
|
||||||
|
comment: string
|
||||||
|
isRequired: boolean
|
||||||
|
showInList: boolean
|
||||||
|
showInForm: boolean
|
||||||
|
showInQuery: boolean
|
||||||
|
formType: string
|
||||||
|
queryType: string
|
||||||
|
dictCode: string
|
||||||
|
createTime?: string
|
||||||
|
}
|
||||||
|
export interface GeneratorConfigResp {
|
||||||
|
genConfig: GenConfigResp
|
||||||
|
fieldConfigs: FieldConfigResp[]
|
||||||
|
}
|
||||||
|
export interface GeneratePreviewResp {
|
||||||
|
path: string
|
||||||
|
fileName: string
|
||||||
|
content: string
|
||||||
|
}
|
||||||
31
src/apis/common/captcha.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/captcha'
|
||||||
|
|
||||||
|
/** @desc 获取图片验证码 */
|
||||||
|
export function getImageCaptcha() {
|
||||||
|
return http.get<T.ImageCaptchaResp>(`${BASE_URL}/image`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 获取短信验证码 */
|
||||||
|
export function getSmsCaptcha(phone: string, captchaReq: T.BehaviorCaptchaReq) {
|
||||||
|
return http.get<boolean>(`${BASE_URL}/sms?phone=${phone}&captchaVerification=${encodeURIComponent(captchaReq.captchaVerification || '')}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 获取邮箱验证码 */
|
||||||
|
export function getEmailCaptcha(email: string, captchaReq: T.BehaviorCaptchaReq) {
|
||||||
|
return http.get<boolean>(`${BASE_URL}/mail?email=${email}&captchaVerification=${encodeURIComponent(captchaReq.captchaVerification || '')}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 获取行为验证码 */
|
||||||
|
export function getBehaviorCaptcha(req: any) {
|
||||||
|
return http.get<T.BehaviorCaptchaResp>(`${BASE_URL}/behavior`, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 校验行为验证码 */
|
||||||
|
export function checkBehaviorCaptcha(req: any) {
|
||||||
|
return http.post<T.CheckBehaviorCaptchaResp>(`${BASE_URL}/behavior`, req)
|
||||||
|
}
|
||||||
65
src/apis/common/common.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import type { TreeNodeData } from '@arco-design/web-vue'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
import type { LabelValueState } from '@/types/global'
|
||||||
|
|
||||||
|
const BASE_URL = '/common'
|
||||||
|
|
||||||
|
/** @desc 查询部门树 */
|
||||||
|
export function listDeptTree(query: { description: string | unknown }) {
|
||||||
|
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/dept`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询部门树 */
|
||||||
|
export function listBranchTree(query: { description: string | unknown }) {
|
||||||
|
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/branch`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询空间树 */
|
||||||
|
export function listSpaceTree(query: { description: string | unknown }) {
|
||||||
|
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/space`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询空间树 */
|
||||||
|
export function listPointTree(query: { description: string | unknown }) {
|
||||||
|
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/point`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询菜单树 */
|
||||||
|
export function listMenuTree(query: { description: string }) {
|
||||||
|
return http.get<TreeNodeData[]>(`${BASE_URL}/tree/menu`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询用户列表 */
|
||||||
|
export function listUserDict(query?: { status: number }) {
|
||||||
|
return http.get<LabelValueState[]>(`${BASE_URL}/dict/user`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询角色列表 */
|
||||||
|
export function listRoleDict(query?: { name: string, status: number }) {
|
||||||
|
return http.get<LabelValueState[]>(`${BASE_URL}/dict/role`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询字典列表 */
|
||||||
|
export function listCommonDict(code: string) {
|
||||||
|
return http.get<LabelValueState[]>(`${BASE_URL}/dict/${code}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询系统配置参数 */
|
||||||
|
export function listSiteOptionDict() {
|
||||||
|
return http.get<LabelValueState[]>(`${BASE_URL}/dict/option/site`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 上传文件 */
|
||||||
|
export function uploadFile(data: FormData) {
|
||||||
|
return http.post(`${BASE_URL}/file`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 上传文件 */
|
||||||
|
export function updateUpload(data: object) {
|
||||||
|
return http.post(`${BASE_URL}/updateUpload`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 上传人像 */
|
||||||
|
export function faceUpload(data: object) {
|
||||||
|
return http.post(`${BASE_URL}/faceUpload`, data)
|
||||||
|
}
|
||||||
51
src/apis/common/dashboard.ts
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/dashboard'
|
||||||
|
|
||||||
|
/** @desc 查询公告列表 */
|
||||||
|
export function listDashboardNotice() {
|
||||||
|
return http.get<T.DashboardNoticeResp[]>(`${BASE_URL}/notice`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询 PV 总览 */
|
||||||
|
export function getDashboardOverviewPv() {
|
||||||
|
return http.get<T.DashboardOverviewCommonResp>(`${BASE_URL}/analysis/overview/pv`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询 IP 总览 */
|
||||||
|
export function getDashboardOverviewIp() {
|
||||||
|
return http.get<T.DashboardOverviewCommonResp>(`${BASE_URL}/analysis/overview/ip`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询地域分析 */
|
||||||
|
export function getAnalysisGeo() {
|
||||||
|
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/geo`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询访问趋势 */
|
||||||
|
export function getDashboardAccessTrend(days: number) {
|
||||||
|
return http.get<T.DashboardAccessTrendResp[]>(`${BASE_URL}/access/trend/${days}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询访问时段分析 */
|
||||||
|
export function getAnalysisTimeslot() {
|
||||||
|
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/timeslot`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询模块分析 */
|
||||||
|
export function getAnalysisModule() {
|
||||||
|
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/module`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询终端分析 */
|
||||||
|
export function getAnalysisOs() {
|
||||||
|
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/os`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询浏览器分析 */
|
||||||
|
export function getAnalysisBrowser() {
|
||||||
|
return http.get<T.DashboardChartCommonResp[]>(`${BASE_URL}/analysis/browser`)
|
||||||
|
}
|
||||||
3
src/apis/common/index.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
export * from './common'
|
||||||
|
export * from './captcha'
|
||||||
|
export * from './dashboard'
|
||||||
59
src/apis/common/type.ts
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/** 图形验证码类型 */
|
||||||
|
export interface ImageCaptchaResp {
|
||||||
|
uuid: string
|
||||||
|
img: string
|
||||||
|
expireTime: number
|
||||||
|
isEnabled: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 仪表盘公告类型 */
|
||||||
|
export interface DashboardNoticeResp {
|
||||||
|
id: number
|
||||||
|
title: string
|
||||||
|
type: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 仪表盘访问趋势类型 */
|
||||||
|
export interface DashboardAccessTrendResp {
|
||||||
|
date: string
|
||||||
|
pvCount: number
|
||||||
|
ipCount: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 仪表盘通用总览类型 */
|
||||||
|
export interface DashboardOverviewCommonResp {
|
||||||
|
total: number
|
||||||
|
today: number
|
||||||
|
growth: number
|
||||||
|
dataList: DashboardChartCommonResp[]
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 仪表盘通用图表类型 */
|
||||||
|
export interface DashboardChartCommonResp {
|
||||||
|
name: string
|
||||||
|
value: number
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 行为验证码类型 */
|
||||||
|
export interface BehaviorCaptchaResp {
|
||||||
|
originalImageBase64: string
|
||||||
|
point: {
|
||||||
|
x: number
|
||||||
|
y: number
|
||||||
|
}
|
||||||
|
jigsawImageBase64: string
|
||||||
|
token: string
|
||||||
|
secretKey: string
|
||||||
|
wordList: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface BehaviorCaptchaReq {
|
||||||
|
captchaType?: string
|
||||||
|
captchaVerification?: string
|
||||||
|
clientUid?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CheckBehaviorCaptchaResp {
|
||||||
|
repCode: string
|
||||||
|
repMsg: string
|
||||||
|
}
|
||||||
15
src/apis/index.ts
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
export * from './area'
|
||||||
|
export * from './auth'
|
||||||
|
export * from './common'
|
||||||
|
export * from './monitor'
|
||||||
|
export * from './system'
|
||||||
|
export * from './code'
|
||||||
|
export * from './schedule'
|
||||||
|
|
||||||
|
export * from './area/type'
|
||||||
|
export * from './auth/type'
|
||||||
|
export * from './common/type'
|
||||||
|
export * from './monitor/type'
|
||||||
|
export * from './system/type'
|
||||||
|
export * from './code/type'
|
||||||
|
export * from './schedule/type'
|
||||||
2
src/apis/monitor/index.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export * from './online'
|
||||||
|
export * from './log'
|
||||||
26
src/apis/monitor/log.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/log'
|
||||||
|
|
||||||
|
/** @desc 查询日志列表 */
|
||||||
|
export function listLog(query: T.LogPageQuery) {
|
||||||
|
return http.get<PageRes<T.LogResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询日志详情 */
|
||||||
|
export function getLog(id: string) {
|
||||||
|
return http.get<T.LogDetailResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出登录日志 */
|
||||||
|
export function exportLoginLog(query: T.LogQuery) {
|
||||||
|
return http.download<any>(`${BASE_URL}/export/login`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出操作日志 */
|
||||||
|
export function exportOperationLog(query: T.LogQuery) {
|
||||||
|
return http.download<any>(`${BASE_URL}/export/operation`, query)
|
||||||
|
}
|
||||||
16
src/apis/monitor/online.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/monitor/online'
|
||||||
|
|
||||||
|
/** @desc 查询在线用户列表 */
|
||||||
|
export function listOnlineUser(query: T.OnlineUserPageQuery) {
|
||||||
|
return http.get<PageRes<T.OnlineUserResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 强退在线用户 */
|
||||||
|
export function kickout(token: string) {
|
||||||
|
return http.del(`${BASE_URL}/${token}`)
|
||||||
|
}
|
||||||
57
src/apis/monitor/type.ts
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/** 在线用户类型 */
|
||||||
|
export interface OnlineUserResp {
|
||||||
|
id: string
|
||||||
|
description: string
|
||||||
|
module: string
|
||||||
|
timeTaken: number
|
||||||
|
ip: string
|
||||||
|
address: string
|
||||||
|
browser: string
|
||||||
|
os: string
|
||||||
|
status: number
|
||||||
|
errorMsg: string
|
||||||
|
createUserString: string
|
||||||
|
createTime: string
|
||||||
|
}
|
||||||
|
export interface OnlineUserQuery {
|
||||||
|
nickname?: string
|
||||||
|
loginTime?: string
|
||||||
|
sort: Array<string>
|
||||||
|
}
|
||||||
|
export interface OnlineUserPageQuery extends OnlineUserQuery, PageQuery {}
|
||||||
|
|
||||||
|
/** 系统日志类型 */
|
||||||
|
export interface LogResp {
|
||||||
|
id: string
|
||||||
|
description: string
|
||||||
|
module: string
|
||||||
|
timeTaken: number
|
||||||
|
ip: string
|
||||||
|
address: string
|
||||||
|
browser: string
|
||||||
|
os: string
|
||||||
|
status: number
|
||||||
|
errorMsg: string
|
||||||
|
createUserString: string
|
||||||
|
createTime: string
|
||||||
|
}
|
||||||
|
export interface LogDetailResp extends LogResp {
|
||||||
|
traceId: string
|
||||||
|
requestUrl: string
|
||||||
|
requestMethod: string
|
||||||
|
requestHeaders: string
|
||||||
|
requestBody: string
|
||||||
|
statusCode: number
|
||||||
|
responseHeaders: string
|
||||||
|
responseBody: string
|
||||||
|
}
|
||||||
|
export interface LogQuery {
|
||||||
|
description?: string
|
||||||
|
module?: string
|
||||||
|
ip?: string
|
||||||
|
createUserString?: string
|
||||||
|
createTime: Array<string>
|
||||||
|
status?: number
|
||||||
|
sort: Array<string>
|
||||||
|
}
|
||||||
|
export interface LogPageQuery extends LogQuery, PageQuery {}
|
||||||
46
src/apis/open/app.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/open/app'
|
||||||
|
|
||||||
|
/** @desc 查询应用列表 */
|
||||||
|
export function listApp(query: T.AppPageQuery) {
|
||||||
|
return http.get<PageRes<T.AppResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询应用详情 */
|
||||||
|
export function getApp(id: string) {
|
||||||
|
return http.get<T.AppResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增应用 */
|
||||||
|
export function addApp(data: any) {
|
||||||
|
return http.post(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改应用 */
|
||||||
|
export function updateApp(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除应用 */
|
||||||
|
export function deleteApp(id: string) {
|
||||||
|
return http.del(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出应用 */
|
||||||
|
export function exportApp(query: T.AppQuery) {
|
||||||
|
return http.download(`${BASE_URL}/export`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 获取密钥 */
|
||||||
|
export function getAppSecret(id: string) {
|
||||||
|
return http.get(`${BASE_URL}/${id}/secret`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 重置密钥 */
|
||||||
|
export function resetAppSecret(id: string) {
|
||||||
|
return http.patch(`${BASE_URL}/${id}/secret`)
|
||||||
|
}
|
||||||
21
src/apis/open/type.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/** 应用类型 */
|
||||||
|
export interface AppResp {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
accessKey: string
|
||||||
|
secretKey: string
|
||||||
|
expireTime: string
|
||||||
|
description: string
|
||||||
|
status: 1 | 2
|
||||||
|
createUserString: string
|
||||||
|
createTime: string
|
||||||
|
updateUserString: string
|
||||||
|
updateTime: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AppQuery {
|
||||||
|
description?: string
|
||||||
|
sort: Array<string>
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface AppPageQuery extends AppQuery, PageQuery {}
|
||||||
2
src/apis/schedule/index.ts
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
export * from '../schedule/job'
|
||||||
|
export * from '../schedule/log'
|
||||||
41
src/apis/schedule/job.ts
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/schedule/job'
|
||||||
|
|
||||||
|
/** @desc 查询任务组列表 */
|
||||||
|
export function listGroup() {
|
||||||
|
return http.get(`${BASE_URL}/group`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询任务列表 */
|
||||||
|
export function listJob(query: T.JobPageQuery) {
|
||||||
|
return http.get<PageRes<T.JobResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增任务 */
|
||||||
|
export function addJob(data: any) {
|
||||||
|
return http.post(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改任务 */
|
||||||
|
export function updateJob(data: any, id: number) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改任务状态 */
|
||||||
|
export function updateJobStatus(data: any, id: number) {
|
||||||
|
return http.patch(`${BASE_URL}/${id}/status`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除任务 */
|
||||||
|
export function deleteJob(id: number) {
|
||||||
|
return http.del(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 执行任务 */
|
||||||
|
export function triggerJob(id: number) {
|
||||||
|
return http.post(`${BASE_URL}/trigger/${id}`)
|
||||||
|
}
|
||||||
36
src/apis/schedule/log.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/schedule/log'
|
||||||
|
|
||||||
|
/** @desc 查询任务日志列表 */
|
||||||
|
export function listJobLog(query: T.JobLogPageQuery) {
|
||||||
|
return http.get<PageRes<T.JobLogResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询任务日志详情 */
|
||||||
|
export function getJobLogDetail(id: number) {
|
||||||
|
return http.get<boolean>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 停止任务 */
|
||||||
|
export function stopJob(id: number) {
|
||||||
|
return http.post(`${BASE_URL}/stop/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 重试任务 */
|
||||||
|
export function retryJob(id: number) {
|
||||||
|
return http.post(`${BASE_URL}/retry/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询任务实例列表 */
|
||||||
|
export function listJobInstance(query: T.JobInstanceQuery) {
|
||||||
|
return http.get<T.JobInstanceResp[]>(`${BASE_URL}/instance`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询任务实例日志列表 */
|
||||||
|
export function listJobInstanceLog(query: T.JobInstanceLogQuery) {
|
||||||
|
return http.get<T.JobInstanceLogResp>(`${BASE_URL}/instance/log`, query)
|
||||||
|
}
|
||||||
85
src/apis/schedule/type.ts
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/** 任务类型 */
|
||||||
|
export interface JobResp {
|
||||||
|
id: number
|
||||||
|
groupName: string
|
||||||
|
jobName: string
|
||||||
|
description?: string
|
||||||
|
triggerType: number
|
||||||
|
triggerInterval: string | number
|
||||||
|
executorType: number
|
||||||
|
taskType: number
|
||||||
|
executorInfo: string
|
||||||
|
argsStr?: string
|
||||||
|
argsType?: string
|
||||||
|
routeKey: number
|
||||||
|
blockStrategy: number
|
||||||
|
executorTimeout: number
|
||||||
|
maxRetryTimes: number
|
||||||
|
retryInterval: number
|
||||||
|
parallelNum: number
|
||||||
|
jobStatus: number
|
||||||
|
nextTriggerAt?: Date
|
||||||
|
createDt?: Date
|
||||||
|
updateDt?: Date
|
||||||
|
}
|
||||||
|
export interface JobQuery {
|
||||||
|
groupName: string
|
||||||
|
jobName?: string
|
||||||
|
jobStatus?: number
|
||||||
|
}
|
||||||
|
export interface JobPageQuery extends JobQuery, PageQuery {}
|
||||||
|
|
||||||
|
/** 任务日志类型 */
|
||||||
|
export interface JobLogResp {
|
||||||
|
id: number
|
||||||
|
groupName: string
|
||||||
|
jobName: string
|
||||||
|
jobId: number
|
||||||
|
taskBatchStatus: number
|
||||||
|
operationReason: number
|
||||||
|
executorType: number
|
||||||
|
executorInfo: string
|
||||||
|
executionAt: string
|
||||||
|
createDt: string
|
||||||
|
}
|
||||||
|
export interface JobLogQuery {
|
||||||
|
jobId?: number
|
||||||
|
groupName?: string
|
||||||
|
jobName?: string
|
||||||
|
taskBatchStatus?: number
|
||||||
|
datetimeRange?: Array<string>
|
||||||
|
}
|
||||||
|
export interface JobLogPageQuery extends JobLogQuery, PageQuery {}
|
||||||
|
|
||||||
|
/** 任务实例类型 */
|
||||||
|
export interface JobInstanceResp {
|
||||||
|
id: number
|
||||||
|
groupName: string
|
||||||
|
jobId: number
|
||||||
|
taskBatchId: number
|
||||||
|
taskStatus: number
|
||||||
|
retryCount: number
|
||||||
|
resultMessage: string
|
||||||
|
clientInfo: string
|
||||||
|
}
|
||||||
|
export interface JobInstanceQuery {
|
||||||
|
jobId?: string | number
|
||||||
|
taskBatchId?: number | string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 任务实例日志类型 */
|
||||||
|
export interface JobInstanceLogResp {
|
||||||
|
id: number
|
||||||
|
message: any[]
|
||||||
|
finished: number
|
||||||
|
fromIndex: number
|
||||||
|
nextStartId: number
|
||||||
|
}
|
||||||
|
export interface JobInstanceLogQuery {
|
||||||
|
taskBatchId: number
|
||||||
|
jobId: number
|
||||||
|
taskId: number
|
||||||
|
startId: number
|
||||||
|
fromIndex: number
|
||||||
|
size: number
|
||||||
|
}
|
||||||
62
src/apis/sysPeople/branch.ts
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
const BASE_URL = '/sysPeople/branch'
|
||||||
|
|
||||||
|
export interface BranchResp {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
leader: string
|
||||||
|
phone: string
|
||||||
|
parentId: string
|
||||||
|
ancestors: string
|
||||||
|
spaceId: string
|
||||||
|
remark: string
|
||||||
|
createBy: string
|
||||||
|
createTime: string
|
||||||
|
updateBy: string
|
||||||
|
updateTime: string
|
||||||
|
deptId: string
|
||||||
|
level: string
|
||||||
|
deptCode: string
|
||||||
|
ruleId: string
|
||||||
|
ladderRuleId: string
|
||||||
|
isExamine: string
|
||||||
|
createUserString: string
|
||||||
|
updateUserString: string
|
||||||
|
disabled: boolean
|
||||||
|
children: BranchResp[]
|
||||||
|
}
|
||||||
|
export interface BranchQuery {
|
||||||
|
name: string
|
||||||
|
leader: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询部门管理列表 */
|
||||||
|
export function listBranch(query: BranchQuery) {
|
||||||
|
return http.get<BranchResp[]>(`${BASE_URL}/tree`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询部门管理详情 */
|
||||||
|
export function getBranch(id: string) {
|
||||||
|
return http.get<BranchResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增部门管理 */
|
||||||
|
export function addBranch(data: any) {
|
||||||
|
return http.post(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改部门管理 */
|
||||||
|
export function updateBranch(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除部门管理 */
|
||||||
|
export function deleteBranch(id: string) {
|
||||||
|
return http.del(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出部门管理 */
|
||||||
|
export function exportBranch(query: BranchQuery) {
|
||||||
|
return http.download(`${BASE_URL}/export`, query)
|
||||||
|
}
|
||||||
172
src/apis/sysPeople/people.ts
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
import http from '@/utils/http'
|
||||||
|
import type {LabelValueState} from "@/types/global";
|
||||||
|
|
||||||
|
const BASE_URL = '/sysPeople/people'
|
||||||
|
|
||||||
|
export type * from '../system/type'
|
||||||
|
|
||||||
|
export interface PeopleResp {
|
||||||
|
id: string
|
||||||
|
name: string
|
||||||
|
phone: string
|
||||||
|
sex: number
|
||||||
|
avatar: string
|
||||||
|
branchId: number
|
||||||
|
branchName: string
|
||||||
|
position: string
|
||||||
|
idcard: string
|
||||||
|
carNo: string
|
||||||
|
doorNo: string
|
||||||
|
guid: string
|
||||||
|
faceGuid: string
|
||||||
|
userId: number
|
||||||
|
userName: string
|
||||||
|
remark: string
|
||||||
|
createBy: string
|
||||||
|
createTime: string
|
||||||
|
updateBy: string
|
||||||
|
updateTime: string
|
||||||
|
gh: string
|
||||||
|
fingerprint: string
|
||||||
|
joinTime: string
|
||||||
|
down: number
|
||||||
|
delFlag: string
|
||||||
|
openid: string
|
||||||
|
createUserString: string
|
||||||
|
updateUserString: string
|
||||||
|
disabled: boolean
|
||||||
|
xfFlag: string
|
||||||
|
czje: string
|
||||||
|
btje: string
|
||||||
|
isConsume: number
|
||||||
|
freeze: number
|
||||||
|
xfje: string
|
||||||
|
xfcs: string
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PeopleDepositImportResp {
|
||||||
|
importKey: string
|
||||||
|
totalRows: number
|
||||||
|
validRows: number
|
||||||
|
duplicateUserRows: number
|
||||||
|
unEnabledRows: number
|
||||||
|
}
|
||||||
|
|
||||||
|
type Long = number
|
||||||
|
|
||||||
|
export interface PeopleQuery {
|
||||||
|
name: string | undefined
|
||||||
|
branchId: string | undefined
|
||||||
|
ids: Array<Long> | undefined
|
||||||
|
branchParentId: string | undefined
|
||||||
|
sort: Array<string>
|
||||||
|
}
|
||||||
|
export interface PeoplePageQuery extends PeopleQuery, PageQuery {}
|
||||||
|
|
||||||
|
/** @desc 查询人员管理列表 */
|
||||||
|
export function listPeople(query: PeoplePageQuery) {
|
||||||
|
return http.get<PageRes<PeopleResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询人员消费列表 */
|
||||||
|
export function pageConsume(query: PeoplePageQuery) {
|
||||||
|
return http.get<PageRes<PeopleResp[]>>(`${BASE_URL}/pageConsume`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询人员名称下拉数据 */
|
||||||
|
export function getPeopleNameList(query: PeopleQuery) {
|
||||||
|
return http.get(`${BASE_URL}/getPeopleNameList`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询人员管理详情 */
|
||||||
|
export function getPeople(id: string) {
|
||||||
|
return http.get<PeopleResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增人员管理 */
|
||||||
|
export function addPeople(data: any) {
|
||||||
|
return http.post(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改人员管理 */
|
||||||
|
export function updatePeople(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除人员管理 */
|
||||||
|
export function deletePeople(ids: Long | Array<Long>) {
|
||||||
|
return http.del(`${BASE_URL}/${ids}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出人员管理 */
|
||||||
|
export function exportPeople(query: PeopleQuery) {
|
||||||
|
return http.download(`${BASE_URL}/export`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出模板 */
|
||||||
|
export function exportTemplate() {
|
||||||
|
return http.download(`${BASE_URL}/import/template`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 解析用户导入数据 */
|
||||||
|
export function parseImportUser(data: FormData) {
|
||||||
|
return http.post(`${BASE_URL}/import/parse`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导入用户 */
|
||||||
|
export function importPeople(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/import`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function downPeople(ids: Long | Array<Long>) {
|
||||||
|
return http.get(`${BASE_URL}/down/${ids}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出消费人员充值 */
|
||||||
|
export function exportConsumePeople(query: PeopleQuery) {
|
||||||
|
return http.download(`${BASE_URL}/exportConsume`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 下载人员充值导入模板 */
|
||||||
|
export function downloadConsumeImportTemplate() {
|
||||||
|
return http.download(`${BASE_URL}/import/template`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 解析人员充值导入数据 */
|
||||||
|
export function parseConsumeImportUser(data: FormData) {
|
||||||
|
return http.post(`${BASE_URL}/consume/import/parse`, data)
|
||||||
|
}
|
||||||
|
/** @desc 导入人员充值 */
|
||||||
|
export function importConsumeUser(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/consume/import`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 退款人员 */
|
||||||
|
export function refundPeople(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/refund`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 充值人员 */
|
||||||
|
export function depositPeople(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/deposit`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 补贴人员 */
|
||||||
|
export function subsidyPeople(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/subsidy`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 补贴人员 */
|
||||||
|
export function freeze(ids: Long[]) {
|
||||||
|
return http.post(`${BASE_URL}/freeze`, ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 补贴人员 */
|
||||||
|
export function unFreeze(ids: Long[]) {
|
||||||
|
return http.post(`${BASE_URL}/unFreeze`, ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 补贴人员 */
|
||||||
|
export function resetMoney(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/resetMoney`, data)
|
||||||
|
}
|
||||||
31
src/apis/system/client.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/client'
|
||||||
|
|
||||||
|
/** @desc 查询终端列表 */
|
||||||
|
export function listClient(query: T.ClientPageQuery) {
|
||||||
|
return http.get<PageRes<T.ClientResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询终端详情 */
|
||||||
|
export function getClient(id: string) {
|
||||||
|
return http.get<T.ClientDetailResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增终端 */
|
||||||
|
export function addClient(data: any) {
|
||||||
|
return http.post(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改终端 */
|
||||||
|
export function updateClient(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除终端 */
|
||||||
|
export function deleteClient(ids: string | Array<string>) {
|
||||||
|
return http.del(`${BASE_URL}/${ids}`)
|
||||||
|
}
|
||||||
36
src/apis/system/dept.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/dept'
|
||||||
|
|
||||||
|
/** @desc 查询部门列表 */
|
||||||
|
export function listDept(query: T.DeptQuery) {
|
||||||
|
return http.get<T.DeptResp[]>(`${BASE_URL}/tree`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询部门详情 */
|
||||||
|
export function getDept(id: string) {
|
||||||
|
return http.get<T.DeptResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增部门 */
|
||||||
|
export function addDept(data: any) {
|
||||||
|
return http.post<boolean>(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改部门 */
|
||||||
|
export function updateDept(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除部门 */
|
||||||
|
export function deleteDept(id: string) {
|
||||||
|
return http.del(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 导出部门 */
|
||||||
|
export function exportDept(query: T.DeptQuery) {
|
||||||
|
return http.download(`${BASE_URL}/export`, query)
|
||||||
|
}
|
||||||
61
src/apis/system/dict.ts
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/dict'
|
||||||
|
|
||||||
|
/** @desc 查询字典列表 */
|
||||||
|
export function listDict(query?: T.DictQuery) {
|
||||||
|
return http.get<T.DictResp[]>(`${BASE_URL}/list`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询字典详情 */
|
||||||
|
export function getDict(id: string) {
|
||||||
|
return http.get<T.DictResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增字典 */
|
||||||
|
export function addDict(data: any) {
|
||||||
|
return http.post(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改字典 */
|
||||||
|
export function updateDict(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除字典 */
|
||||||
|
export function deleteDict(id: string) {
|
||||||
|
return http.del(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 清除字典缓存 */
|
||||||
|
export function clearDictCache(code: string) {
|
||||||
|
return http.del(`${BASE_URL}/cache/${code}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询字典项列表 */
|
||||||
|
export function listDictItem(query: T.DictItemPageQuery) {
|
||||||
|
return http.get<PageRes<T.DictItemResp[]>>(`${BASE_URL}/item`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询字典项详情 */
|
||||||
|
export function getDictItem(id: string) {
|
||||||
|
return http.get<T.DictItemResp>(`${BASE_URL}/item/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增字典项 */
|
||||||
|
export function addDictItem(data: any) {
|
||||||
|
return http.post(`${BASE_URL}/item`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改字典项 */
|
||||||
|
export function updateDictItem(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/item/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除字典项 */
|
||||||
|
export function deleteDictItem(id: string) {
|
||||||
|
return http.del(`${BASE_URL}/item/${id}`)
|
||||||
|
}
|
||||||
31
src/apis/system/file.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/file'
|
||||||
|
|
||||||
|
/** @desc 查询文件列表 */
|
||||||
|
export function listFile(query: T.FilePageQuery) {
|
||||||
|
return http.get<PageRes<T.FileItem[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改文件 */
|
||||||
|
export function updateFile(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除文件 */
|
||||||
|
export function deleteFile(ids: string | Array<string>) {
|
||||||
|
return http.del(`${BASE_URL}/${ids}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除文件 */
|
||||||
|
export function deleteByUrl(url: string) {
|
||||||
|
return http.del(`${BASE_URL}/deleteByUrl`, { url: url })
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询文件资源统计统计 */
|
||||||
|
export function getFileStatistics() {
|
||||||
|
return http.get<T.FileStatisticsResp>(`${BASE_URL}/statistics`)
|
||||||
|
}
|
||||||
11
src/apis/system/index.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export * from './user'
|
||||||
|
export * from './role'
|
||||||
|
export * from './menu'
|
||||||
|
export * from './dept'
|
||||||
|
export * from './notice'
|
||||||
|
export * from './dict'
|
||||||
|
export * from './file'
|
||||||
|
export * from './storage'
|
||||||
|
export * from './option'
|
||||||
|
export * from './user-center'
|
||||||
|
export * from './message'
|
||||||
36
src/apis/system/menu.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/menu'
|
||||||
|
|
||||||
|
/** @desc 查询菜单列表 */
|
||||||
|
export function listMenu(query?: T.MenuQuery) {
|
||||||
|
return http.get<T.MenuResp[]>(`${BASE_URL}/tree`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询菜单详情 */
|
||||||
|
export function getMenu(id: string) {
|
||||||
|
return http.get<T.MenuResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增菜单 */
|
||||||
|
export function addMenu(data: any) {
|
||||||
|
return http.post<boolean>(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改菜单 */
|
||||||
|
export function updateMenu(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除菜单 */
|
||||||
|
export function deleteMenu(id: string) {
|
||||||
|
return http.del(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 清除菜单缓存 */
|
||||||
|
export function clearMenuCache() {
|
||||||
|
return http.del(`${BASE_URL}/cache`)
|
||||||
|
}
|
||||||
26
src/apis/system/message.ts
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/message'
|
||||||
|
|
||||||
|
/** @desc 查询消息列表 */
|
||||||
|
export function listMessage(query: T.MessagePageQuery) {
|
||||||
|
return http.get<PageRes<T.MessageResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除消息 */
|
||||||
|
export function deleteMessage(ids: string | Array<string>) {
|
||||||
|
return http.del(`${BASE_URL}/${ids}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 标记已读 */
|
||||||
|
export function readMessage(ids?: string | Array<string>) {
|
||||||
|
return http.patch(`${BASE_URL}/read`, ids)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询未读消息数量 */
|
||||||
|
export function getUnreadMessageCount() {
|
||||||
|
return http.get(`${BASE_URL}/unread`)
|
||||||
|
}
|
||||||
31
src/apis/system/notice.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/notice'
|
||||||
|
|
||||||
|
/** @desc 查询公告列表 */
|
||||||
|
export function listNotice(query: T.NoticePageQuery) {
|
||||||
|
return http.get<PageRes<T.NoticeResp[]>>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 查询公告详情 */
|
||||||
|
export function getNotice(id: string) {
|
||||||
|
return http.get<T.NoticeResp>(`${BASE_URL}/${id}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 新增公告 */
|
||||||
|
export function addNotice(data: any) {
|
||||||
|
return http.post(BASE_URL, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改公告 */
|
||||||
|
export function updateNotice(data: any, id: string) {
|
||||||
|
return http.put(`${BASE_URL}/${id}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 删除公告 */
|
||||||
|
export function deleteNotice(ids: string | Array<number>) {
|
||||||
|
return http.del(`${BASE_URL}/${ids}`)
|
||||||
|
}
|
||||||
21
src/apis/system/option.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import type * as T from './type'
|
||||||
|
import http from '@/utils/http'
|
||||||
|
|
||||||
|
export type * from './type'
|
||||||
|
|
||||||
|
const BASE_URL = '/system/option'
|
||||||
|
|
||||||
|
/** @desc 查询参数列表 */
|
||||||
|
export function listOption(query: T.OptionQuery) {
|
||||||
|
return http.get<T.OptionResp[]>(`${BASE_URL}`, query)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 修改参数 */
|
||||||
|
export function updateOption(data: any) {
|
||||||
|
return http.put(`${BASE_URL}`, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @desc 重置参数 */
|
||||||
|
export function resetOptionValue(query: T.OptionQuery) {
|
||||||
|
return http.patch(`${BASE_URL}/value`, query)
|
||||||
|
}
|
||||||