diff --git a/.env.development b/.env.development index e9224a19de305318f0f6e7b2bb169a9006e5547a..08ed73986d37ccf001ad99151f47556fe3cbf8ca 100644 --- a/.env.development +++ b/.env.development @@ -1,6 +1,6 @@ # 环境变量 (命名必须以 VITE_ 开头) # 接口前缀 -VITE_API_PREFIX = '/api' +VITE_API_PREFIX = '/dev-api' # 接口地址 VITE_API_BASE_URL = 'http://localhost:8000' @@ -12,4 +12,10 @@ VITE_API_WS_URL = 'ws://localhost:8000' VITE_BASE = '/' # 是否开启开发者工具 -VITE_OPEN_DEVTOOLS = false \ No newline at end of file +VITE_OPEN_DEVTOOLS = false + +# 应用配置面板 +VITE_APP_SETTING = true + +# 客户端ID +VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a' \ No newline at end of file diff --git a/.env.production b/.env.production index 7236d2e1ce73c35f38b3942b3053e504421c606d..debf235197cae333d005eab7bfe30a31e53b3feb 100644 --- a/.env.production +++ b/.env.production @@ -8,4 +8,10 @@ VITE_API_BASE_URL = 'https://api.continew.top' VITE_API_WS_URL = 'wss://api.continew.top' # 地址前缀 -VITE_BASE = '/' \ No newline at end of file +VITE_BASE = '/' + +# 应用配置面板 +VITE_APP_SETTING = true + +# 客户端ID +VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a' \ No newline at end of file diff --git a/.env.test b/.env.test index 3660da199574c56f01e0a567f18b28e8d1c884f3..03671398cae0135c58e9ebeccde576984d8d0b5f 100644 --- a/.env.test +++ b/.env.test @@ -4,7 +4,7 @@ VITE_BUILD_MOCK = true # 接口前缀 -VITE_API_PREFIX = '/api' +VITE_API_PREFIX = '/test-api' # 接口地址 VITE_API_BASE_URL = 'http://localhost:8000' @@ -13,4 +13,10 @@ VITE_API_BASE_URL = 'http://localhost:8000' VITE_BASE = '/test' # 是否开启开发者工具 -VITE_OPEN_DEVTOOLS = true \ No newline at end of file +VITE_OPEN_DEVTOOLS = true + +# 应用配置面板 +VITE_APP_SETTING = false + +# 客户端ID +VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a' diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 7de2269c9e1a9a0e626dcecd5aa9747ecb9c4aa6..397146c83d3536e80e682625ec1d7752ba1db2db 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,5 +1,5 @@ name: "\U0001F41E Bug 报告" -description: Create a report to help us improve +description: 在使用 xxx 功能时出现异常 title: "[Bug] " labels: ["bug"] body: @@ -7,6 +7,30 @@ body: attributes: value: | 感谢您使用 ContiNew Admin!请您花些时间填写这份 Bug 报告。 + - type: checkboxes + id: checkboxes + attributes: + label: 请您确认 + description: 在提交 Bug 之前,请确认执行过以下操作。 + options: + - label: 重启项目和 IDE 后,仍然能够复现此问题 + required: true + - label: 查阅过 [使用指南](https://continew.top/admin/frontend/structure.html) 和 [常见问题](https://continew.top/admin/faq.html) ,仍无解决方法 + required: true + - label: 根据报错信息(自行翻译英文)百度或 Google 后,仍无法解决 + required: true + - label: 尝试了最新 dev 分支代码(演示环境),仍有相同问题 + required: true + - label: 搜索了项目 Issues,没有其他人提交过类似的 Bug(如果对应 Bug 尚未解决,您可以先订阅关注该 Issue,为了方便后来者查找问题解决方法,请避免创建重复的 Issue) + required: true + - label: 确认不是 gi-demo 前端模板相关的组件问题,例如:GiTable、GiForm、基础布局和配置等(如有此类组件相关的问题,请提交至 [gi-demo](https://gitee.com/lin0716/gi-demo) 或对应组件仓库) + required: true + - label: 阅读了源码并在 IDE 中进行断点调试 + required: false + - label: 是否愿意为您提出的 Bug 提交 PR? + required: false + validations: + required: true - type: textarea id: bug-description attributes: @@ -19,7 +43,7 @@ body: id: reproduction attributes: label: 复现步骤 - description: 条理清晰的步骤或演示视频可以帮助快速定位问题。 + description: 条理清晰的步骤及图片或演示视频可以帮助快速定位问题。 placeholder: 例如:1、xxx; 2、xxx; validations: required: true @@ -34,12 +58,12 @@ body: - type: textarea id: environment-info attributes: - label: 环境信息 - description: | - examples: - - **ContiNew Admin version(s)**: v3.0.1 - value: "ContiNew Admin version(s):" - render: markdown + label: 版本信息 + description: 请务必填写版本信息(项目启动后在控制台可以查看到),否则视为无效问题。 + value: | + NPM 版本: + PNPM 版本: + ContiNew Admin 版本: validations: required: true - type: textarea @@ -47,15 +71,3 @@ body: attributes: label: 额外补充 description: 添加您的完整报错信息或屏幕截图,以及一切能帮助定位问题的信息。 - - type: checkboxes - id: checkboxes - attributes: - label: 确认 - description: 在提交 issue 之前,请确保执行过以下操作。 - options: - - label: 阅读[文档](https://continew.top/admin/other/faq.html) - required: true - - label: 根据报错信息百度或 Google 一下 - required: true - - label: 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue) - required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index ee3efb5ea83e0f00458e7acee1dac430b41588e5..a4d962b87f57247dbfdb06b5dce0910009e04d76 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,5 +1,5 @@ name: "\U0001F680 新 Feature 建议" -description: Suggest an idea for this project +description: 我希望增加 xxx 功能;现有的 xxx 功能不好用... title: "[Feature] " labels: ["feature"] body: @@ -7,6 +7,26 @@ body: attributes: value: | 感谢您使用 ContiNew Admin!请您花些时间填写这份 Feature 调查。 + - type: checkboxes + id: checkboxes + attributes: + label: 请您确认 + description: 在提交 Feature 之前,请确认执行过以下操作。 + options: + - label: 尝试了最新 dev 分支代码(演示环境),仍没有该功能 + required: true + - label: 查阅过 [使用指南](https://continew.top/admin/frontend/structure.html) 和 [常见问题](https://continew.top/admin/faq.html) ,仍然认为很有必要 + required: true + - label: 查阅过 [需求墙](https://continew.top/admin/other/feature.html),仍没有该功能计划 + required: true + - label: 搜索了项目 Issues,没有其他人提交过类似的 Feature(如果对应 Feature 尚未实现,您可以先订阅关注该 Issue,为了方便后来者查找问题解决方法,请避免创建重复的 Issue) + required: true + - label: 确认不是基础组件类需求,例如:GiTable、GiForm、基础布局、纯前端组件(锁屏、引导)等(如有此类组件相关的需求,请提交至 [gi-demo](https://gitee.com/lin0716/gi-demo) 或对应组件仓库) + required: true + - label: 是否愿意为您提出的 Feature 提交 PR? + required: false + validations: + required: true - type: textarea id: feature-description attributes: @@ -32,15 +52,3 @@ body: attributes: label: 额外补充 description: 添加您在其他框架或场景遇见的效果截图或链接,以及一切能帮助理解 Feature 的信息。 - - type: checkboxes - id: checkboxes - attributes: - label: 确认 - description: 在提交 issue 之前,请确保执行过以下操作。 - options: - - label: 阅读[文档](https://continew.top/admin/intro/require.html) - required: true - - label: 搜索是否有其他人提交过类似的 issue,如果对应 issue 尚未解决,您可以先订阅关注该 issue(为了方便后来者查找问题解决方法,请尽量避免创建重复的 issue) - required: true - - label: 您是否愿意为您提出的 Feature 提交 PR? - required: false \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1024d2fd44145e60f6da18638eef9761c44f7949..50e3979f6aaf216aa39cbffefa10a22bf35ec0f2 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -17,8 +17,7 @@ jobs: # 2、安装 PNPM - name: Setup PNPM uses: pnpm/action-setup@v2 - with: - version: latest + with: { version: 9 } # 3、安装 Node 环境 - name: Setup Node uses: actions/setup-node@v3 diff --git a/.gitignore b/.gitignore index a9769116629983f10935a9fb5653d2b2d85a3fef..f721f6af05c6d861fc12a6307494b145f4dad9fb 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,13 @@ coverage # Editor directories and files # .vscode/* +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json !.vscode/extensions.json +!.vscode/*.code-snippets + .idea *.suo *.ntvs* diff --git a/.image/qrcode.jpg b/.image/qrcode.jpg index 280387c53fbf9df71d6c54ba4b96bc7ded00c4f5..d95a7aa9e2e26e6f8cdd38189021be04b276db3e 100644 Binary files a/.image/qrcode.jpg and b/.image/qrcode.jpg differ diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f55cb7fbcca10536d3b00a573a14d3581182668..80bf2a734f92fb172ac03a3bd2562c7dcd6df74e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,134 @@ +## [v3.6.0](https://github.com/continew-org/continew-admin-ui/compare/v3.5.0...v3.6.0) (2025-04-13) + +### ✨ 新特性 + +* 添加字典和菜单缓存清除功能 ([13a7262](https://github.com/continew-org/continew-admin-ui/commit/13a7262172d3e48cb26989b7dfa5b453664f5dde)) +- 新增短信配置 (GitHub#54@luoqiz) ([bb1a66f](https://github.com/continew-org/continew-admin-ui/commit/bb1a66f74073303df37c241e82366ff044f10660)) ([470b0d5](https://github.com/continew-org/continew-admin-ui/commit/470b0d56f93dbb8a2117f4da507861f102a937a3)) +- 优化 GiTable(同步 GiDemo 更新) ([eaabe47](https://github.com/continew-org/continew-admin-ui/commit/eaabe47546db19ba602a7a959e5a98fe2119c4cb)) ([7d4beb0](https://github.com/continew-org/continew-admin-ui/commit/7d4beb028321766af0fff3c85c72f220b1467fd5)) ([cb297d2](https://github.com/continew-org/continew-admin-ui/commit/cb297d2b9f932e23a923d029c916fe0992234328)) +- 增强列设置功能 (Gitee#52@ki1373639299) ([11d5457](https://github.com/continew-org/continew-admin-ui/commit/11d54572e934197d333feaa33579c773ebcf0c1a)) +- 为定时任务添加内置 Cron 表达式(优化了用户输入体验,提供了常用的定时任务执行周期模板) ([1be5d97](https://github.com/continew-org/continew-admin-ui/commit/1be5d97fa22010e039cdff35810eae80e4d8e18c)) +- 为 dayjs 添加中文语言包,以支持中文显示 ([e1fe183](https://github.com/continew-org/continew-admin-ui/commit/e1fe1835899275dfbdedb21597154cb79b2d5ff8)) +- 新增折叠侧边栏功能,并使用 GiPageLayout 优化用户、角色、字典管理 ([32c6c16](https://github.com/continew-org/continew-admin-ui/commit/32c6c1636202a9c38cc68b093eafc0d9b3786157)) +- 重构个人消息中心,支持展示个人公告,并优化相关地址 ([89d0d9e](https://github.com/continew-org/continew-admin-ui/commit/89d0d9ebb1d8aae705baf4f1805a1d3fb0cff5cc)) +- add collapse mask and remove animation (GitHub#58@ppxb) ([576faac](https://github.com/continew-org/continew-admin-ui/commit/576faac21bf731461bc596513f34d64b13ed9377)) + +### 💎 功能优化 + +- 添加文件路径和md5值 (GitHub#52luoqiz) ([30821b5](https://github.com/continew-org/continew-admin-ui/commit/30821b551ca21c6bd13b2e1e0efdefd098ded099)) +- 优化角色权限节点关联及独立切换效果 ([657c83b](https://github.com/continew-org/continew-admin-ui/commit/657c83bf19b7d2997ddaf7466203441d56041765)) +- 优化表单组件的字数限制逻辑 ([348c497](https://github.com/continew-org/continew-admin-ui/commit/348c49787618fabd23a040c77c4db53e4301bc61)) +- 优化 GiForm、GiEditTable(同步 GiDemo 更新) ([436cc6b](https://github.com/continew-org/continew-admin-ui/commit/436cc6bdfc2d4389b60181cadf6faf3c5a49cf7c)) +- 优化字典项颜色选择功能 ([2af9195](https://github.com/continew-org/continew-admin-ui/commit/2af9195081dd183a9548c6e77f9405f499b49ae1)) +- 适配后端权限码调整 ([b135b49](https://github.com/continew-org/continew-admin-ui/commit/b135b49a8796d54f861ca411b0e0428fe0ce11b4)) +- 优化 HTTP 错误提示显示时长 ([4b1486a](https://github.com/continew-org/continew-admin-ui/commit/4b1486a158866cfb76eed1c6d48e8b505ac9b95f)) +- 使用 GiPageLayout 组件替换 gi_table_page 样式 ([db79f8c](https://github.com/continew-org/continew-admin-ui/commit/db79f8c15fb206e7df059147d181b30339a84599)) +- 优化是否默认操作禁用逻辑 ([ec43ba4](https://github.com/continew-org/continew-admin-ui/commit/ec43ba4c8fd39ddae440447f0fc5ae1cb76c694b)) +- 修改头像接口调整为 Patch 请求方式 (Gitee#56@httpsjt) ([40280da](https://github.com/continew-org/continew-admin-ui/commit/40280da314710e2b7f17d7bc5d66cded0048d507)) +- 优化 GiPageLayout 组件布局 header 移动端适配 ([0c77f52](https://github.com/continew-org/continew-admin-ui/commit/0c77f52edaec02fae4aea5f43b9f34722358ae8f)) +- 重构系统配置布局,融合存储、短信、终端等配置 ([f77f714](https://github.com/continew-org/continew-admin-ui/commit/f77f714bc099bb503f8ca9c60d749b42697d32d3)) +- 移除终端部分配置字段 ([987dddf](https://github.com/continew-org/continew-admin-ui/commit/987dddf55af3c0d5e3cb25209fdafa3ea6baec79)) +- 适配后端删除接口重构,由 URL 传参重构为请求体传参 ([62a4f5f](https://github.com/continew-org/continew-admin-ui/commit/62a4f5faf46c5304504b659ad83bb15087a7680c)) + +- 调整表单项在不同屏幕下的布局方式 ([11800f0](https://github.com/continew-org/continew-admin-ui/commit/11800f02eec85d640229a87babf4a53b25041d60)) +- 去除字典管理误输入的特殊字符 ([53d0fb9](https://github.com/continew-org/continew-admin-ui/commit/53d0fb91cb4d20159250f630569810c56b8b8dc9)) +- 优化用户管理查询表单 ([4b073ef](https://github.com/continew-org/continew-admin-ui/commit/4b073ef5aab24cbb3afc4c340730cdbc6c803c95)) +- 优化消息页面移动端样式 ([0289b6b](https://github.com/continew-org/continew-admin-ui/commit/0289b6b25de67ed4f940f4fb669226e2c4ae40f3)) +- 修复消息列表列定义拼写错误 ([25bec61](https://github.com/continew-org/continew-admin-ui/commit/25bec617c071caf78c8e7279971322d44de5f3d1)) +- vite代理调整 ([9f5845e](https://github.com/continew-org/continew-admin-ui/commit/9f5845e3b34801cca0fd83bc7e6c7b5bc57c361e)) +- 将硬编码的 API 接口文档地址替换为环境变量 ([55e36d3](https://github.com/continew-org/continew-admin-ui/commit/55e36d345996b2a5f44ef8d04bb7a5b6e1ef8ad3)) +- 优化通知公告跳转消息中心的方式 (Gitee#57@ki1373639299) ([e8bbfcc](https://github.com/continew-org/continew-admin-ui/commit/e8bbfcc402d4a61e51a99245ac72761101257b00)) +- change tab pane style (GitHub#58@ppxb) ([3159e2c](https://github.com/continew-org/continew-admin-ui/commit/3159e2ce04c61e44d6c52795ebc40e59ca599f7d)) +- 调整默认布局为混合布局 ([8ad0886](https://github.com/continew-org/continew-admin-ui/commit/8ad088615ffd5eb85a872da4757231d7a31230c2)) + +### 🐛 问题修复 + +- 还原深浅主题切换 ([be7c310](https://github.com/continew-org/continew-admin-ui/commit/be7c310f72d714c18d35d3866850ed0be7928558)) +- 修复账号登录记住我不起作用 (GitHub#51@Acyco) ([7bb46a4](https://github.com/continew-org/continew-admin-ui/commit/7bb46a424c6870fe8d673e26ceafb39f88ac53a7)) +- 添加快速操作权限控制 ([6e9884e](https://github.com/continew-org/continew-admin-ui/commit/6e9884eabcca0119d8b0c2374859c12ed1af25a8)) +- 修复导出文件后台抛出异常仍继续下载文件,不进行通知提示 (GitHub#53@Acyco) ([0f8c9ae](https://github.com/continew-org/continew-admin-ui/commit/0f8c9aec2503dcbe1828ab9b54ab07e31baee45e)) +- 修复客户端添加表单布局 ([43b9793](https://github.com/continew-org/continew-admin-ui/commit/43b9793d0e1a489306b8daf3ff51b31f1ee995fc)) +- 修复菜单栏上方的系统名称包含 j、g 等,字母底部显示不全的问题 ([f0ba88e](https://github.com/continew-org/continew-admin-ui/commit/f0ba88eb54a20b3e39e302662d83ab60b6f3e337)) +- 菜单类型添加权限标识字段 ([4bd083e](https://github.com/continew-org/continew-admin-ui/commit/4bd083eb91f8ad05b1b41d22f289f50dc35cf3af)) +- 修复清空最后一页数据后列表空白,分页条消失的问题 ([4a3b5f7](https://github.com/continew-org/continew-admin-ui/commit/4a3b5f7eda6f659d4b9f57658b97c2588db6347a)) +- 修复角色权限禁用逻辑 ([c0623ab](https://github.com/continew-org/continew-admin-ui/commit/c0623abba813f12117add08a908e40f5c4f541d1)) +- pnpm v10 approve-builds issue (GitHub#58@ppxb) ([b944a73](https://github.com/continew-org/continew-admin-ui/commit/b944a73cecd2ae64605077cebd284dc6443f89a4)) +- blocks missing gap (GitHub#58@ppxb) ([c457883](https://github.com/continew-org/continew-admin-ui/commit/c457883ac17d95d8f6906dcc9a3036ae37be636a)) +- double click search inpurt cause error issue (GitHub#59@ppxb) ([8e6dd50](https://github.com/continew-org/continew-admin-ui/commit/8e6dd50f2f6305de1b25523e8d7b7936917ac780)) +- 修复文件管理数量刷新问题 ([de44df6](https://github.com/continew-org/continew-admin-ui/commit/de44df6a5c84e90a5cfebf447ad21ca47c3a805e)) + +### 📦 依赖升级 + +- Arco Design Vue 2.56.0 => 2.57.0 ([bf3fa91](https://github.com/continew-org/continew-admin-ui/commit/bf3fa919fe0da2701bafa30724a9cc2f83fc5087)) + +## [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) ### ✨ 新特性 diff --git a/README.md b/README.md index 8992859324ce03a66015e829f4e3ecd846cc5954..97e7e437d0d38d2d65b657a7484fcff983417db5 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,41 @@ # ContiNew Admin UI - -License + +Release + + +Vue - -Release + +Arco Design Vue - -GitHub stars + +TypeScript - -GitHub forks + +Vite - -Gitee stars +
+
+License - -Gitee forks + +GitHub Stars - -Release + +GitHub Forks - -Release + +Gitee Stars - -Release + +Gitee Forks - -Release + +GitCode Stars -📚 [在线文档](https://continew.top) | 🚀 [演示地址](https://admin.continew.top)(账号/密码:admin/admin123) +📚 [在线文档](https://continew.top) | 🚀 [演示地址](https://continew.top/admin/guide/demo.html) ## 简介 @@ -69,7 +73,7 @@ ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后 ## 为什么选我们? > [!TIP] -> 更为完整的图文描述请查阅[《在线文档》](https://continew.top/admin/intro/why.html)。 +> 更为完整的图文描述请查阅[《在线文档》](https://continew.top/admin/guide/why-choose-us.html)。 1.**甄选技术栈:** ContiNew(Continue New) 项目致力于持续迭代优化,让技术不掉队。在技术选型时,进行深度广泛地调研,从流行度、成熟度和发展潜力等多方面甄选技术栈。 @@ -79,7 +83,7 @@ ContiNew Admin(Continue New Admin)持续迭代优化的前后端分离中后 ```java @Tag(name = "部门管理 API") @RestController -@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.ADD, Api.UPDATE, Api.DELETE, Api.EXPORT}) +@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.EXPORT}) public class DeptController extends BaseController {} ``` @@ -108,42 +112,32 @@ public class DeptController extends BaseController [!TIP] -> 更多功能和优化正在赶来💦,最新项目计划、进展请进群或关注 [任务清单](https://continew.top/admin/intro/require.html#任务清单) 和 [更新日志](https://continew.top/admin/other/changelog.html)。 +> 更多功能和优化正在赶来💦,最新项目计划、进展请进群或关注 [需求墙](https://continew.top/admin/other/feature.html) 和 [更新日志](https://continew.top/admin/other/changelog.html)。 - 仪表盘:提供工作台、分析页,工作台提供功能快捷导航入口、最新公告、动态;分析页提供全面数据可视化能力 - 个人中心:支持基础信息修改、密码修改、邮箱绑定、手机号绑定(并提供行为验证码、短信限流等安全处理)、第三方账号绑定/解绑、头像裁剪上传 -- 消息中心:提供站内信消息统一查看、标记已读、全部已读、删除等功能(目前仅支持系统通知消息) +- 消息中心:提供站内信消息统一查看、标记已读、全部已读、删除等功能(目前仅支持系统通知消息)、提供个人公告查看 - 用户管理:管理系统用户,包含新增、修改、删除、导入、导出、重置密码、分配角色等功能 - - 角色管理:管理系统用户的功能权限及数据权限,包含新增、修改、删除、分配角色等功能 - - 菜单管理:管理系统菜单及按钮权限,支持多级菜单,动态路由,包含新增、修改、删除等功能 - - 部门管理:管理系统组织架构,包含新增、修改、删除、导出等功能,以树形列表进行展示 - -- 字典管理:管理系统公用数据字典,例如:消息类型。支持字典标签背景色和排序等配置 - - 通知公告:管理系统公告,支持设置公告的生效时间、终止时间、通知范围(所有人、指定用户) - - 文件管理:管理系统文件,支持上传、下载、预览(目前支持图片、音视频、PDF、Word、Excel、PPT)、重命名、切换视图(列表、网格)等功能 - -- 存储管理:管理文件存储配置,支持本地存储、兼容 S3 协议存储 - +- 字典管理:管理系统公用数据字典,例如:消息类型。支持字典标签背景色和排序等配置 - 系统配置: - - 基础配置:提供修改系统标题、Logo、favicon、版权信息等基础配置功能,以方便用户系统与其自身品牌形象保持一致 - - 邮件配置:提供系统发件箱配置,也支持通过配置文件指定 + - 网站配置:提供修改系统标题、Logo、favicon、版权信息等基础配置功能,以方便用户系统与其自身品牌形象保持一致 - 安全配置:提供密码策略修改,支持丰富的密码策略设定,包括但不限于 `密码有效期`、`密码重复次数`、`密码错误锁定账号次数、时间` 等 - + - 登录配置:提供验证码开关等登录相关配置 + - 邮件配置:提供系统发件箱配置,也支持通过配置文件指定 + - 短信配置:提供系统短信服务配置,也支持通过配置文件指定 + - 存储配置:管理文件存储配置,支持本地存储、兼容 S3 协议对象存储 + - 客户端配置:多客户端(PC端、小程序端等)认证管理,可设置不同的 token 有效期 - 在线用户:管理当前登录用户,可一键踢除下线 - - 日志管理:管理系统登录日志、操作日志,支持查看日志详情,包含请求头、响应头等报文信息 - +- 短信日志:管理系统短信发送日志,支持删除、导出 - 任务管理:管理系统定时任务,包含新增、修改、删除、执行功能,支持 Cron(可配置式生成 Cron 表达式) 和固定频率 - - 任务日志:管理定时任务执行日志,包含停止、重试指定批次,查询集群各节点的详细输出日志等功能 - - 应用管理:管理第三方系统应用 AK、SK,包含新增、修改、删除、查看密钥、重置密钥等功能,支持设置密钥有效期 - - 代码生成:提供根据数据库表自动生成相应的前后端 CRUD 代码的功能,支持同步最新表结构及代码生成预览 ## 系统截图 @@ -215,7 +209,7 @@ public class DeptController extends BaseController **Note** -> 更详细的流程,请查看在线文档[《快速开始》](https://continew.top/admin/intro/quick-start.html#%E5%89%8D%E7%AB%AF)。 +> 更详细的流程,请查看在线文档[《快速开始》](https://continew.top/admin/guide/quick-start.html)。 ``` # 1.克隆本项目 @@ -320,7 +314,7 @@ continew-admin-ui ContiNew Admin 致力于提供开箱即用,持续舒适的开发体验。作为一个开源项目,Creator 的初心是希望 ContiNew Admin 依托开源协作模式,提升技术透明度、放大集体智慧、共创优秀实践,源源不断地为企业级项目开发提供助力。 -我们非常欢迎广大社区用户为 ContiNew Admin **贡献(开发,测试、文档、答疑等)** 或优化代码,欢迎各位感兴趣的小伙伴儿,[添加微信](https://continew.top/support.html) 讨论或认领任务。 +我们非常欢迎广大社区用户为 ContiNew Admin **贡献(开发,测试、文档、答疑等)** 或优化代码,欢迎各位感兴趣的小伙伴儿,[添加微信](https://continew.top/discussion.html) 讨论或认领任务。 ### 分支说明 @@ -352,22 +346,11 @@ ContiNew Admin 的分支目前分为下个大版本的开发分支和上个大 ## 反馈交流 -欢迎各位小伙伴儿扫描下方二维码加好友,备注 `cnadmin`,拉你进群,探讨技术、提提需求~ - -加入交流群后,你将会: - -- 第一时间收到框架动态 -- 第一时间收到框架更新通知 -- 第一时间收到框架 Bug 通知 -- 和众多大佬互相 (huá shuǐ) 交流 (mō yú) +欢迎各位小伙伴儿扫描下方二维码加入项目交流群,与项目维护团队及其他大佬用户实时交流讨论。
- 二维码 + 二维码
-
-无加群意愿 -如无加群意愿,欢迎在 Issues 中反馈交流~ 🍻 -
## 鸣谢 diff --git a/config/plugins/app-info.ts b/config/plugins/app-info.ts index 810c49c6db11ce3e24b95842a657e54d7e6876df..5c0859a60c4fad6a46c445211cfaf33fcfe06fba 100644 --- a/config/plugins/app-info.ts +++ b/config/plugins/app-info.ts @@ -11,7 +11,7 @@ export default function appInfo(): Plugin { // eslint-disable-next-line no-console console.log( boxen( - `${bold(green(`${bgGreen('ContiNew Admin v3.4.0')}`))}\n${cyan('在线文档:')}${underline('https://continew.top')}\n${cyan('常见问题:')}${underline('https://continew.top/faq.html')}\n${cyan('持续迭代优化的前后端分离中后台管理系统框架。')}`, + `${bold(green(`${bgGreen('ContiNew Admin v3.7.0-SNAPSHOT')}`))}\n${cyan('在线文档:')}${underline('https://continew.top')}\n${cyan('常见问题:')}${underline('https://continew.top/admin/faq.html')}\n${cyan('持续迭代优化的前后端分离中后台管理系统框架。')}`, { padding: 1, margin: 1, diff --git a/index.html b/index.html index f1a99bd75ab37706368ec461f1b36e52a0c19d80..bde92830c5c3fa493dad8b7123653b8033cc1d19 100644 --- a/index.html +++ b/index.html @@ -21,5 +21,14 @@ + diff --git a/package.json b/package.json index 42f3b0801b0fa0ecb8b0b5f59035ea1f006f2c00..b46b7b7ec32bf27bb706d8b3594866c9fc4994fa 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,10 @@ { "name": "continew-admin-ui", "type": "module", - "version": "3.4.0", + "version": "3.7.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", @@ -32,6 +33,7 @@ "cron-parser": "^4.9.0", "crypto-js": "^4.2.0", "dayjs": "^1.11.4", + "default-passive-events": "^2.0.0", "echarts": "^5.4.2", "jsencrypt": "^3.3.2", "lint-staged": "^15.2.10", @@ -55,16 +57,18 @@ "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": "^2.31.6" }, "devDependencies": { "@antfu/eslint-config": "^2.16.3", - "@arco-design/web-vue": "^2.56.0", + "@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.0.4", + "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^3.1.0", "@vue/tsconfig": "^0.1.3", "boxen": "^7.1.1", @@ -83,6 +87,18 @@ "vite-plugin-svg-icons": "^2.0.1", "vue-tsc": "2.0.19" }, + "pnpm": { + "onlyBuiltDependencies": [ + "@vue-office/docx", + "@vue-office/excel", + "@vue-office/pdf", + "core-js", + "es5-ext", + "esbuild", + "vue-demi", + "vue-echarts" + ] + }, "simple-git-hooks": { "pre-commit": "pnpm lint-staged" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9de94bad0ae96329c7672210b5984f4c953dd061..3a16049f2671fcfd5e7382f35e1f646d2dfb3618 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: version: 0.4.0 '@arco-themes/vue-gi-demo': specifier: ^0.0.51 - version: 0.0.51(@arco-design/web-vue@2.56.0(vue@3.5.12(typescript@5.0.4))) + version: 0.0.51(@arco-design/web-vue@2.57.0(vue@3.5.12(typescript@5.0.4))) '@codemirror/lang-javascript': specifier: ^6.2.1 version: 6.2.2 @@ -65,6 +65,9 @@ importers: dayjs: specifier: ^1.11.4 version: 1.11.11 + default-passive-events: + specifier: ^2.0.0 + version: 2.0.0 echarts: specifier: ^5.4.2 version: 5.5.0 @@ -134,6 +137,9 @@ importers: vue-router: specifier: ^4.3.3 version: 4.3.3(vue@3.5.12(typescript@5.0.4)) + vue3-tree-org: + specifier: ^4.2.2 + version: 4.2.2(vue@3.5.12(typescript@5.0.4)) xe-utils: specifier: ^3.5.7 version: 3.5.26 @@ -145,11 +151,14 @@ importers: specifier: ^2.16.3 version: 2.18.1(@vue/compiler-sfc@3.5.12)(eslint@9.3.0)(typescript@5.0.4) '@arco-design/web-vue': - specifier: ^2.56.0 - version: 2.56.0(vue@3.5.12(typescript@5.0.4)) + specifier: ^2.57.0 + version: 2.57.0(vue@3.5.12(typescript@5.0.4)) '@types/crypto-js': specifier: ^4.2.2 version: 4.2.2 + '@types/lodash-es': + specifier: ^4.17.12 + version: 4.17.12 '@types/node': specifier: ^20.2.5 version: 20.12.12 @@ -157,8 +166,8 @@ importers: specifier: ^6.3.0 version: 6.3.0 '@vitejs/plugin-vue': - specifier: ^5.0.4 - version: 5.0.4(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(terser@5.31.0))(vue@3.5.12(typescript@5.0.4)) + specifier: ^5.2.1 + version: 5.2.1(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(terser@5.31.0))(vue@3.5.12(typescript@5.0.4)) '@vitejs/plugin-vue-jsx': specifier: ^3.1.0 version: 3.1.0(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(terser@5.31.0))(vue@3.5.12(typescript@5.0.4)) @@ -275,8 +284,8 @@ packages: '@arco-design/color@0.4.0': resolution: {integrity: sha512-s7p9MSwJgHeL8DwcATaXvWT3m2SigKpxx4JA1BGPHL4gfvaQsmQfrLBDpjOJFJuJ2jG2dMt3R3P8Pm9E65q18g==} - '@arco-design/web-vue@2.56.0': - resolution: {integrity: sha512-LsrTE1vL54a/DVQCZ4c2F5LDA1r2mcWF2AHrM+fKEi5hzE63/awZVIOQ6P8yGaYRAP9eqUNj60uNI1Jz0UvGlA==} + '@arco-design/web-vue@2.57.0': + resolution: {integrity: sha512-R5YReC3C2sG3Jv0+YuR3B7kzkq2KdhhQNCGXD8T11xAoa0zMt6SWTP1xJQOdZcM9du+q3z6tk5mRvh4qkieRJw==} peerDependencies: vue: ^3.1.0 @@ -807,55 +816,46 @@ packages: resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.17.2': resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.17.2': resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.17.2': resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.17.2': resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.17.2': resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.17.2': resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.17.2': resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.17.2': resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} @@ -1155,6 +1155,12 @@ packages: '@types/linkify-it@3.0.5': resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.13': + resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + '@types/markdown-it@13.0.9': resolution: {integrity: sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw==} @@ -1254,21 +1260,21 @@ packages: vite: ^4.0.0 || ^5.0.0 vue: ^3.0.0 - '@vitejs/plugin-vue@5.0.4': - resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + '@vitejs/plugin-vue@5.2.1': + resolution: {integrity: sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - vite: ^5.0.0 + vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 - '@volar/language-core@2.2.4': - resolution: {integrity: sha512-7As47GndxGxsqqYnbreLrfB5NDUeQioPM2LJKUuB4/34c0NpEJ2byVl3c9KYdjIdiEstWZ9JLtLKNTaPWb5jtA==} + '@volar/language-core@2.2.5': + resolution: {integrity: sha512-2htyAuxRrAgETmFeUhT4XLELk3LiEcqoW/B8YUXMF6BrGWLMwIR09MFaZYvrA2UhbdAeSyeQ726HaWSWkexUcQ==} - '@volar/source-map@2.2.4': - resolution: {integrity: sha512-m92FLpR9vB1YEZfiZ+bfgpLrToL/DNkOrorWVep3pffHrwwI4Tx2oIQN+sqHJfKkiT5N3J1owC+8crhAEinfjg==} + '@volar/source-map@2.2.5': + resolution: {integrity: sha512-wrOEIiZNf4E+PWB0AxyM4tfhkfldPsb3bxg8N6FHrxJH2ohar7aGu48e98bp3pR9HUA7P/pR9VrLmkTrgCCnWQ==} - '@volar/typescript@2.2.4': - resolution: {integrity: sha512-uAQC53tgEbHO62G8NXMfmBrJAlP2QJ9WxVEEQqqK3I6VSy8frL5LbH3hAWODxiwMWixv74wJLWlKbWXOgdIoRQ==} + '@volar/typescript@2.2.5': + resolution: {integrity: sha512-eSV/n75+ppfEVugMC/salZsI44nXDPAyL6+iTYCNLtiLHGJsnMv9GwiDMujrvAUj/aLQyqRJgYtXRoxop2clCw==} '@vue-office/docx@1.6.0': resolution: {integrity: sha512-OKEapOPq223uszA8mRSOWPhdfBchJa6sIqP46eMrMMe5RSUrG9m3QE/o0JBIaMgxDrtNd7aI9CvF2kDvb7G2hw==} @@ -1455,6 +1461,7 @@ packages: acorn-import-assertions@1.9.0: resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + deprecated: package has been renamed to acorn-import-attributes peerDependencies: acorn: ^8 @@ -1829,6 +1836,9 @@ packages: core-js-compat@3.37.1: resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + core-js@3.40.0: + resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -1895,6 +1905,9 @@ packages: dayjs@1.11.11: resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + de-indent@1.0.2: resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} @@ -1951,6 +1964,9 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} + default-passive-events@2.0.0: + resolution: {integrity: sha512-eMtt76GpDVngZQ3ocgvRcNCklUMwID1PaNbCNxfpDXuiOXttSh0HzBbda1HU9SIUsDc02vb7g9+3I5tlqe/qMQ==} + define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} @@ -4615,6 +4631,11 @@ packages: peerDependencies: typescript: '*' + vue3-tree-org@4.2.2: + resolution: {integrity: sha512-AG2SykyD6dw0jIyqBm8iuF9j9GWli6KrwudxR1RjULCCBTDFsoNm7MmP/weKT7wowN/sPk+e2RsnvEJMw2OJMw==} + peerDependencies: + vue: ^3.0.0 + vue@3.5.12: resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} peerDependencies: @@ -4797,21 +4818,21 @@ snapshots: dependencies: color: 3.2.1 - '@arco-design/web-vue@2.56.0(vue@3.5.12(typescript@5.0.4))': + '@arco-design/web-vue@2.57.0(vue@3.5.12(typescript@5.0.4))': dependencies: '@arco-design/color': 0.4.0 b-tween: 0.3.3 b-validate: 1.5.3 compute-scroll-into-view: 1.0.20 - dayjs: 1.11.11 + dayjs: 1.11.13 number-precision: 1.6.0 resize-observer-polyfill: 1.5.1 scroll-into-view-if-needed: 2.2.31 vue: 3.5.12(typescript@5.0.4) - '@arco-themes/vue-gi-demo@0.0.51(@arco-design/web-vue@2.56.0(vue@3.5.12(typescript@5.0.4)))': + '@arco-themes/vue-gi-demo@0.0.51(@arco-design/web-vue@2.57.0(vue@3.5.12(typescript@5.0.4)))': dependencies: - '@arco-design/web-vue': 2.56.0(vue@3.5.12(typescript@5.0.4)) + '@arco-design/web-vue': 2.57.0(vue@3.5.12(typescript@5.0.4)) '@babel/code-frame@7.24.2': dependencies: @@ -5703,6 +5724,12 @@ snapshots: '@types/linkify-it@3.0.5': {} + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.13 + + '@types/lodash@4.17.13': {} + '@types/markdown-it@13.0.9': dependencies: '@types/linkify-it': 3.0.5 @@ -5827,22 +5854,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.0.4(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(terser@5.31.0))(vue@3.5.12(typescript@5.0.4))': + '@vitejs/plugin-vue@5.2.1(vite@5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(terser@5.31.0))(vue@3.5.12(typescript@5.0.4))': dependencies: vite: 5.2.11(@types/node@20.12.12)(less@4.2.0)(sass@1.77.2)(terser@5.31.0) vue: 3.5.12(typescript@5.0.4) - '@volar/language-core@2.2.4': + '@volar/language-core@2.2.5': dependencies: - '@volar/source-map': 2.2.4 + '@volar/source-map': 2.2.5 - '@volar/source-map@2.2.4': + '@volar/source-map@2.2.5': dependencies: muggle-string: 0.4.1 - '@volar/typescript@2.2.4': + '@volar/typescript@2.2.5': dependencies: - '@volar/language-core': 2.2.4 + '@volar/language-core': 2.2.5 path-browserify: 1.0.1 '@vue-office/docx@1.6.0(vue-demi@0.14.10(vue@3.5.12(typescript@5.0.4)))(vue@3.5.12(typescript@5.0.4))': @@ -5903,7 +5930,7 @@ snapshots: '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-dom@3.4.27': dependencies: @@ -5917,7 +5944,7 @@ snapshots: '@vue/compiler-sfc@3.4.27': dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.26.1 '@vue/compiler-core': 3.4.27 '@vue/compiler-dom': 3.4.27 '@vue/compiler-ssr': 3.4.27 @@ -5925,7 +5952,7 @@ snapshots: estree-walker: 2.0.2 magic-string: 0.30.10 postcss: 8.4.38 - source-map-js: 1.2.0 + source-map-js: 1.2.1 '@vue/compiler-sfc@3.5.12': dependencies: @@ -5978,9 +6005,9 @@ snapshots: '@vue/language-core@2.0.19(typescript@5.0.4)': dependencies: - '@volar/language-core': 2.2.4 - '@vue/compiler-dom': 3.4.27 - '@vue/shared': 3.4.27 + '@volar/language-core': 2.2.5 + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 computeds: 0.0.1 minimatch: 9.0.4 path-browserify: 1.0.1 @@ -6571,6 +6598,8 @@ snapshots: dependencies: browserslist: 4.23.0 + core-js@3.40.0: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -6650,6 +6679,8 @@ snapshots: dayjs@1.11.11: {} + dayjs@1.11.13: {} + de-indent@1.0.2: {} debug@2.6.9: @@ -6681,6 +6712,8 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 + default-passive-events@2.0.0: {} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 @@ -9597,11 +9630,16 @@ snapshots: vue-tsc@2.0.19(typescript@5.0.4): dependencies: - '@volar/typescript': 2.2.4 + '@volar/typescript': 2.2.5 '@vue/language-core': 2.0.19(typescript@5.0.4) semver: 7.6.2 typescript: 5.0.4 + vue3-tree-org@4.2.2(vue@3.5.12(typescript@5.0.4)): + dependencies: + core-js: 3.40.0 + vue: 3.5.12(typescript@5.0.4) + vue@3.5.12(typescript@5.0.4): dependencies: '@vue/compiler-dom': 3.5.12 diff --git a/src/apis/auth/index.ts b/src/apis/auth/index.ts index 61f09c9dadf124a2304eb06092f18b641a592586..6b7cd93b67e109eead6b2f7a8c1ec56944cf5fbf 100644 --- a/src/apis/auth/index.ts +++ b/src/apis/auth/index.ts @@ -7,27 +7,27 @@ const BASE_URL = '/auth' /** @desc 账号登录 */ export function accountLogin(req: T.AccountLoginReq) { - return http.post(`${BASE_URL}/account`, req) + return http.post(`${BASE_URL}/login`, req) } /** @desc 手机号登录 */ export function phoneLogin(req: T.PhoneLoginReq) { - return http.post(`${BASE_URL}/phone`, req) + return http.post(`${BASE_URL}/login`, req) } /** @desc 邮箱登录 */ export function emailLogin(req: T.EmailLoginReq) { - return http.post(`${BASE_URL}/email`, req) + return http.post(`${BASE_URL}/login`, req) } /** @desc 三方账号登录 */ -export function socialLogin(source: string, req: any) { - return http.post(`/oauth/${source}`, req) +export function socialLogin(req: any) { + return http.post(`${BASE_URL}/login`, req) } /** @desc 三方账号登录授权 */ export function socialAuth(source: string) { - return http.get(`/oauth/${source}`) + return http.get(`${BASE_URL}/${source}`) } /** @desc 退出登录 */ @@ -42,5 +42,5 @@ export const getUserInfo = () => { /** @desc 获取路由信息 */ export const getUserRoute = () => { - return http.get(`${BASE_URL}/route`) + return http.get(`${BASE_URL}/user/route`) } diff --git a/src/apis/auth/type.ts b/src/apis/auth/type.ts index 578010cd7a02962e1871588fe9bf4c01b22a688c..36b187d4799e60f7bd9c94edf403e48f38415d47 100644 --- a/src/apis/auth/type.ts +++ b/src/apis/auth/type.ts @@ -41,8 +41,24 @@ export interface RouteItem { 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 { +export interface AccountLoginReq extends AuthReq { username: string password: string captcha: string @@ -50,23 +66,23 @@ export interface AccountLoginReq { } /** 手机号登录请求参数 */ -export interface PhoneLoginReq { +export interface PhoneLoginReq extends AuthReq { phone: string captcha: string } /** 邮箱登录请求参数 */ -export interface EmailLoginReq { +export interface EmailLoginReq extends AuthReq { email: string captcha: string } -// 登录响应类型 +/** 登录响应类型 */ export interface LoginResp { token: string } -// 第三方登录授权类型 +/** 第三方登录授权类型 */ export interface SocialAuthAuthorizeResp { authorizeUrl: string } diff --git a/src/apis/code/generator.ts b/src/apis/code/generator.ts index 06147f8aea7c7ec5e8c6d7bdb1d45922d0142d15..ab4fd18741e0876becdc30c8c0dae53edbf2d67f 100644 --- a/src/apis/code/generator.ts +++ b/src/apis/code/generator.ts @@ -27,19 +27,27 @@ export function saveGenConfig(tableName: string, req: T.GeneratorConfigResp) { } /** @desc 生成预览 */ -export function genPreview(tableName: string) { - return http.get(`${BASE_URL}/preview/${tableName}`) +export function genPreview(tableNames: Array) { + return http.get(`${BASE_URL}/preview/${tableNames}`) } /** @desc 生成代码 */ -export function generate(tableNames: Array) { +export function downloadCode(tableNames: Array) { return http.requestNative({ - url: `${BASE_URL}/${tableNames}`, + url: `${BASE_URL}/${tableNames}/download`, method: 'post', responseType: 'blob', }) } +/** @desc 生成代码 */ +export function generateCode(tableNames: Array) { + return http.requestNative({ + url: `${BASE_URL}/${tableNames}`, + method: 'post', + }) +} + /** @desc 查询字典列表 */ export function listFieldConfigDict() { return http.get(`${BASE_URL}/dict`) diff --git a/src/apis/common/common.ts b/src/apis/common/common.ts index 0c588df21eb134a02c26c7e8000a65fe39c99e0c..004abbc6514457fdd063ea064fab432176d536c8 100644 --- a/src/apis/common/common.ts +++ b/src/apis/common/common.ts @@ -5,7 +5,7 @@ import type { LabelValueState } from '@/types/global' const BASE_URL = '/common' /** @desc 查询部门树 */ -export function listDeptTree(query: { description: string }) { +export function listDeptTree(query: { description: string | unknown }) { return http.get(`${BASE_URL}/tree/dept`, query) } diff --git a/src/apis/common/type.ts b/src/apis/common/type.ts index 90f23cc8b99283b3855d8aec8c25a8a04d130163..7d5db76c99a9420dd2b60d2b21768341c87a6ca9 100644 --- a/src/apis/common/type.ts +++ b/src/apis/common/type.ts @@ -3,6 +3,7 @@ export interface ImageCaptchaResp { uuid: string img: string expireTime: number + isEnabled: boolean } /** 仪表盘公告类型 */ diff --git a/src/apis/open/app.ts b/src/apis/open/app.ts index a5ec5fbce1b2401b5efa735a075409bcb8b955af..9e76d4feafd2cc1d109de1e9891068de882ceb20 100644 --- a/src/apis/open/app.ts +++ b/src/apis/open/app.ts @@ -27,7 +27,7 @@ export function updateApp(data: any, id: string) { /** @desc 删除应用 */ export function deleteApp(id: string) { - return http.del(`${BASE_URL}/${id}`) + return http.del(`${BASE_URL}`, { ids: [id] }) } /** @desc 导出应用 */ diff --git a/src/apis/schedule/type.ts b/src/apis/schedule/type.ts index 57acbafd8272eadcac85f0b838bddc5fdda0a5b5..63cd4d2eab05bdccfcfa7d188dea69f19a0e010a 100644 --- a/src/apis/schedule/type.ts +++ b/src/apis/schedule/type.ts @@ -5,7 +5,7 @@ export interface JobResp { jobName: string description?: string triggerType: number - triggerInterval: string | number + triggerInterval: string executorType: number taskType: number executorInfo: string diff --git a/src/apis/system/client.ts b/src/apis/system/client.ts new file mode 100644 index 0000000000000000000000000000000000000000..5be551651b1c3580d988babf8443b9d9c424713f --- /dev/null +++ b/src/apis/system/client.ts @@ -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>(`${BASE_URL}`, query) +} + +/** @desc 查询客户端详情 */ +export function getClient(id: string) { + return http.get(`${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(id: string) { + return http.del(`${BASE_URL}`, { ids: [id] }) +} diff --git a/src/apis/system/dept.ts b/src/apis/system/dept.ts index 807ec2736ef6fb30696cb35a4740b45674158138..616773de66af1b5493e923b7e7cb4df229754faa 100644 --- a/src/apis/system/dept.ts +++ b/src/apis/system/dept.ts @@ -27,10 +27,10 @@ export function updateDept(data: any, id: string) { /** @desc 删除部门 */ export function deleteDept(id: string) { - return http.del(`${BASE_URL}/${id}`) + return http.del(`${BASE_URL}`, { ids: [id] }) } /** @desc 导出部门 */ export function exportDept(query: T.DeptQuery) { - return http.download(`${BASE_URL}/export`, query) + return http.download(`${BASE_URL}/export`, query) } diff --git a/src/apis/system/dict.ts b/src/apis/system/dict.ts index 3960ac2aa6dd2590f7ec33069e724a89f5968d97..47592b2bc356917e8dc8a65c2976e14386a1efce 100644 --- a/src/apis/system/dict.ts +++ b/src/apis/system/dict.ts @@ -27,7 +27,12 @@ export function updateDict(data: any, id: string) { /** @desc 删除字典 */ export function deleteDict(id: string) { - return http.del(`${BASE_URL}/${id}`) + return http.del(`${BASE_URL}`, { ids: [id] }) +} + +/** @desc 清除字典缓存 */ +export function clearDictCache(code: string) { + return http.del(`${BASE_URL}/cache/${code}`) } /** @desc 查询字典项列表 */ @@ -52,5 +57,5 @@ export function updateDictItem(data: any, id: string) { /** @desc 删除字典项 */ export function deleteDictItem(id: string) { - return http.del(`${BASE_URL}/item/${id}`) + return http.del(`${BASE_URL}/item`, { ids: [id] }) } diff --git a/src/apis/system/file.ts b/src/apis/system/file.ts index d34a7639298ad2ca5cb08989b6799b994085adb8..3f174a5203d02e8ee90adb54e28ea26cf2a7d6f0 100644 --- a/src/apis/system/file.ts +++ b/src/apis/system/file.ts @@ -5,6 +5,11 @@ export type * from './type' const BASE_URL = '/system/file' +/** @desc 上传文件 */ +export function uploadFile(data: FormData) { + return http.post(`${BASE_URL}/upload`, data) +} + /** @desc 查询文件列表 */ export function listFile(query: T.FilePageQuery) { return http.get>(`${BASE_URL}`, query) @@ -16,11 +21,26 @@ export function updateFile(data: any, id: string) { } /** @desc 删除文件 */ -export function deleteFile(ids: string | Array) { - return http.del(`${BASE_URL}/${ids}`) +export function deleteFile(ids: string[]) { + return http.del(`${BASE_URL}`, { ids }) } /** @desc 查询文件资源统计统计 */ export function getFileStatistics() { return http.get(`${BASE_URL}/statistics`) } + +/** @desc 根据sha256检测文件是否已经在服务器存在 */ +export function checkFile(sha256: string) { + return http.get(`${BASE_URL}/check`, { fileHash: sha256 }) +} + +/** @desc 创建文件夹 */ +export function createDir(parentPath: string, name: string) { + return http.post(`${BASE_URL}/dir`, { parentPath, originalName: name }) +} + +/** @desc 查询文件夹大小 */ +export function calcDirSize(id: string) { + return http.get(`${BASE_URL}/dir/${id}/size`) +} diff --git a/src/apis/system/index.ts b/src/apis/system/index.ts index bbf216dc927c3c5cf049799750e4d0eab59f2acb..2d38bc1d7bc1cd6e62b50abf43f1f20c5ef2dc06 100644 --- a/src/apis/system/index.ts +++ b/src/apis/system/index.ts @@ -7,5 +7,8 @@ export * from './dict' export * from './file' export * from './storage' export * from './option' -export * from './user-center' +export * from './smsConfig' +export * from './smsLog' export * from './message' +export * from './user-profile' +export * from './user-message' diff --git a/src/apis/system/menu.ts b/src/apis/system/menu.ts index 29b95401dc7aeb441e6d69c2dc3de9b17200ba35..e5634855e836014ce7f77a05bd89fd14e9082639 100644 --- a/src/apis/system/menu.ts +++ b/src/apis/system/menu.ts @@ -6,7 +6,7 @@ export type * from './type' const BASE_URL = '/system/menu' /** @desc 查询菜单列表 */ -export function listMenu(query: T.MenuQuery) { +export function listMenu(query?: T.MenuQuery) { return http.get(`${BASE_URL}/tree`, query) } @@ -27,5 +27,10 @@ export function updateMenu(data: any, id: string) { /** @desc 删除菜单 */ export function deleteMenu(id: string) { - return http.del(`${BASE_URL}/${id}`) + return http.del(`${BASE_URL}`, { ids: [id] }) +} + +/** @desc 清除菜单缓存 */ +export function clearMenuCache() { + return http.del(`${BASE_URL}/cache`) } diff --git a/src/apis/system/message.ts b/src/apis/system/message.ts index 0152a3ea4ad2a7d7b045e9d07079c91d8a3bf853..e6efb9034243bb24cbf051f48bca41f044203082 100644 --- a/src/apis/system/message.ts +++ b/src/apis/system/message.ts @@ -11,13 +11,18 @@ export function listMessage(query: T.MessagePageQuery) { } /** @desc 删除消息 */ -export function deleteMessage(ids: string | Array) { - return http.del(`${BASE_URL}/${ids}`) +export function deleteMessage(ids: Array) { + return http.del(`${BASE_URL}`, { ids }) } /** @desc 标记已读 */ -export function readMessage(ids?: string | Array) { - return http.patch(`${BASE_URL}/read`, ids) +export function readMessage(ids: Array) { + return http.patch(`${BASE_URL}/read`, { ids }) +} + +/** @desc 全部已读 */ +export function readAllMessage() { + return http.patch(`${BASE_URL}/readAll`) } /** @desc 查询未读消息数量 */ diff --git a/src/apis/system/notice.ts b/src/apis/system/notice.ts index cb100af725ae5af3d0e315cfbeb96bdcfa551267..994cc18d4b6ddea59a3bba6d79910d50fc89adf6 100644 --- a/src/apis/system/notice.ts +++ b/src/apis/system/notice.ts @@ -26,6 +26,6 @@ export function updateNotice(data: any, id: string) { } /** @desc 删除公告 */ -export function deleteNotice(ids: string | Array) { - return http.del(`${BASE_URL}/${ids}`) +export function deleteNotice(id: string) { + return http.del(`${BASE_URL}`, { ids: [id] }) } diff --git a/src/apis/system/role.ts b/src/apis/system/role.ts index 2b40920aade19af2321cc60847ee70b2002826ab..eaacadeda7b491bf2e6e17c38e948119cddf88e3 100644 --- a/src/apis/system/role.ts +++ b/src/apis/system/role.ts @@ -6,8 +6,8 @@ export type * from './type' const BASE_URL = '/system/role' /** @desc 查询角色列表 */ -export function listRole(query: T.RolePageQuery) { - return http.get>(`${BASE_URL}`, query) +export function listRole(query: T.RoleQuery) { + return http.get(`${BASE_URL}/list`, query) } /** @desc 查询角色详情 */ @@ -26,16 +26,31 @@ export function updateRole(data: any, id: string) { } /** @desc 删除角色 */ -export function deleteRole(ids: string | Array) { - return http.del(`${BASE_URL}/${ids}`) +export function deleteRole(id: string) { + return http.del(`${BASE_URL}`, { ids: [id] }) +} + +/** @desc 修改角色权限 */ +export function updateRolePermission(id: string, data: any) { + return http.put(`${BASE_URL}/${id}/permission`, data) } /** @desc 查询角色关联用户 */ -export function listRoleUsers(id: string) { - return http.get(`${BASE_URL}/${id}/user`) +export function listRoleUser(id: string, query: T.RoleUserPageQuery) { + return http.get>(`${BASE_URL}/${id}/user`, query) } /** @desc 分配角色给用户 */ export function assignToUsers(id: string, userIds: Array) { return http.post(`${BASE_URL}/${id}/user`, userIds) } + +/** @desc 取消分配角色给用户 */ +export function unassignFromUsers(userRoleIds: Array) { + return http.del(`${BASE_URL}/user`, userRoleIds) +} + +/** @desc 查询角色关联用户 ID */ +export function listRoleUserId(id: string) { + return http.get(`${BASE_URL}/${id}/user/id`) +} diff --git a/src/apis/system/smsConfig.ts b/src/apis/system/smsConfig.ts new file mode 100644 index 0000000000000000000000000000000000000000..3da508f6098dc0cacf42a2df06725e2db1bdeaf1 --- /dev/null +++ b/src/apis/system/smsConfig.ts @@ -0,0 +1,36 @@ +import type * as T from './type' +import http from '@/utils/http' + +export type * from './type' + +const BASE_URL = '/system/smsConfig' + +/** @desc 查询短信配置列表 */ +export function listSmsConfig(query: T.SmsConfigPageQuery) { + return http.get>(`${BASE_URL}`, query) +} + +/** @desc 查询短信配置详情 */ +export function getSmsConfig(id: string) { + return http.get(`${BASE_URL}/${id}`) +} + +/** @desc 新增短信配置 */ +export function addSmsConfig(data: any) { + return http.post(`${BASE_URL}`, data) +} + +/** @desc 修改短信配置 */ +export function updateSmsConfig(data: any, id: string) { + return http.put(`${BASE_URL}/${id}`, data) +} + +/** @desc 删除短信配置 */ +export function deleteSmsConfig(id: string) { + return http.del(`${BASE_URL}`, { ids: [id] }) +} + +/** @desc 设置默认配置 */ +export function setDefaultSmsConfig(id: string) { + return http.put(`${BASE_URL}/${id}/default`) +} diff --git a/src/apis/system/smsLog.ts b/src/apis/system/smsLog.ts new file mode 100644 index 0000000000000000000000000000000000000000..62e63ba248daf0f5518b1a28cc26008b601298de --- /dev/null +++ b/src/apis/system/smsLog.ts @@ -0,0 +1,26 @@ +import type * as T from './type' +import http from '@/utils/http' + +export type * from './type' + +const BASE_URL = '/system/smsLog' + +/** @desc 查询短信日志列表 */ +export function listSmsLog(query: T.SmsLogPageQuery) { + return http.get>(`${BASE_URL}`, query) +} + +/** @desc 查询短信日志详情 */ +export function getSmsLog(id: string) { + return http.get(`${BASE_URL}/${id}`) +} + +/** @desc 删除短信日志 */ +export function deleteSmsLog(id: string) { + return http.del(`${BASE_URL}`, { ids: [id] }) +} + +/** @desc 导出短信日志 */ +export function exportSmsLog(query: T.SmsLogQuery) { + return http.download(`${BASE_URL}/export`, query) +} diff --git a/src/apis/system/storage.ts b/src/apis/system/storage.ts index 6336a5529f86d41e1000f1255bbf79ea3b9949b8..22ab7681fd488e471d9e8301d0f4534ba7c0d919 100644 --- a/src/apis/system/storage.ts +++ b/src/apis/system/storage.ts @@ -6,8 +6,8 @@ export type * from './type' const BASE_URL = '/system/storage' /** @desc 查询存储列表 */ -export function listStorage(query: T.StoragePageQuery) { - return http.get>(`${BASE_URL}`, query) +export function listStorage(query: T.StorageQuery) { + return http.get(`${BASE_URL}/list`, query) } /** @desc 查询存储详情 */ @@ -27,5 +27,15 @@ export function updateStorage(data: any, id: string) { /** @desc 删除存储 */ export function deleteStorage(id: string) { - return http.del(`${BASE_URL}/${id}`) + return http.del(`${BASE_URL}`, { ids: [id] }) +} + +/** @desc 修改存储状态 */ +export function updateStorageStatus(data: any, id: string) { + return http.put(`${BASE_URL}/${id}/status`, data) +} + +/** @desc 设置默认存储 */ +export function setDefaultStorage(id: string) { + return http.put(`${BASE_URL}/${id}/default`) } diff --git a/src/apis/system/type.ts b/src/apis/system/type.ts index c5fb7a6870428658c5d42b2debfc8ef1a455ca25..d1845e0a358e21dbc46536da7998cf5c499de150 100644 --- a/src/apis/system/type.ts +++ b/src/apis/system/type.ts @@ -1,4 +1,4 @@ -/** 系统用户类型 */ +/** 用户类型 */ export interface UserResp { id: string username: string @@ -20,11 +20,9 @@ export interface UserResp { roleNames: Array disabled: boolean } - export type UserDetailResp = UserResp & { pwdResetTime?: string } - export interface UserImportResp { importKey: string totalRows: number @@ -33,7 +31,6 @@ export interface UserImportResp { duplicateEmailRows: number duplicatePhoneRows: number } - export interface UserQuery { description?: string status?: number @@ -41,11 +38,11 @@ export interface UserQuery { deptId?: string sort: Array userIds?: Array + roleId?: string } - export interface UserPageQuery extends UserQuery, PageQuery {} -/** 系统角色类型 */ +/** 角色类型 */ export interface RoleResp { id: string name: string @@ -60,22 +57,37 @@ export interface RoleResp { updateTime: string disabled: boolean } - export type RoleDetailResp = RoleResp & { menuIds: Array deptIds: Array menuCheckStrictly: boolean deptCheckStrictly: boolean } - +export interface RoleUserResp { + id: string + username: string + nickname: string + gender: number + description: string + status: 1 | 2 + isSystem?: boolean + deptId: string + deptName: string + roleIds: Array + roleNames: Array + disabled: boolean +} export interface RoleQuery { description?: string sort: Array } +export interface RoleUserQuery { + description?: string + sort: Array +} +export interface RoleUserPageQuery extends RoleUserQuery, PageQuery {} -export interface RolePageQuery extends RoleQuery, PageQuery {} - -/** 系统菜单类型 */ +/** 菜单类型 */ export interface MenuResp { id: string title: string @@ -98,13 +110,12 @@ export interface MenuResp { updateTime: string children: MenuResp[] } - export interface MenuQuery { title?: string status?: number } -/** 系统部门类型 */ +/** 部门类型 */ export interface DeptResp { id: string name: string @@ -119,13 +130,12 @@ export interface DeptResp { parentId: string children: DeptResp[] } - export interface DeptQuery { description?: string status?: number } -/** 系统字典类型 */ +/** 字典类型 */ export interface DictResp { id: string name: string @@ -137,12 +147,10 @@ export interface DictResp { updateUserString: string updateTime: string } - export interface DictQuery { description?: string sort: Array } - export interface DictItemResp { id: string label: string @@ -157,18 +165,16 @@ export interface DictItemResp { updateUserString: string updateTime: string } - export interface DictItemQuery { description?: string status?: number sort: Array dictId: string } - export interface DictItemPageQuery extends DictItemQuery, PageQuery { } -/** 系统公告类型 */ +/** 公告类型 */ export interface NoticeResp { id?: string title?: string @@ -184,23 +190,29 @@ export interface NoticeResp { updateUserString?: string updateTime?: string } - export interface NoticeQuery { title?: string type?: string sort: Array } - export interface NoticePageQuery extends NoticeQuery, PageQuery { } -/** 系统文件类型 */ +/** 文件类型 */ export interface FileItem { id: string name: string + originalName: string size: number url: string + parentPath: string + path: string + sha256: string + contentType: string + metadata: string thumbnailSize: number + thumbnailName: string + thumbnailMetadata: string thumbnailUrl: string extension: string type: number @@ -208,10 +220,9 @@ export interface FileItem { storageName: string createUserString: string createTime: string - updateUserString: string - updateTime: string + updateUserString?: string + updateTime?: string } - /** 文件资源统计信息 */ export interface FileStatisticsResp { type: string @@ -220,17 +231,20 @@ export interface FileStatisticsResp { unit: string data: Array } - +/** 文件夹计算大小信息 */ +export interface FileDirCalcSizeResp { + size: number +} export interface FileQuery { - name?: string + originalName?: string type?: string + parentPath?: string sort: Array } - export interface FilePageQuery extends FileQuery, PageQuery { } -/** 系统存储类型 */ +/** 存储类型 */ export interface StorageResp { id: string name: string @@ -250,15 +264,50 @@ export interface StorageResp { updateUserString: string updateTime: string } - export interface StorageQuery { description?: string - status?: number + type?: number sort: Array } -export interface StoragePageQuery extends StorageQuery, PageQuery { +/** 客户端类型 */ +export interface ClientResp { + id: string + clientId: string + clientType: string + authType: string + activeTimeout: string + timeout: string + status: string + createUser: string + createTime: string + updateUser: string + updateTime: string + createUserString: string + updateUserString: string } +export interface ClientDetailResp { + id: string + clientId: string + clientType: string + authType: string + activeTimeout: string + timeout: string + status: string + createUser: string + createTime: string + updateUser: string + updateTime: string + createUserString: string + updateUserString: string +} +export interface ClientQuery { + clientType: string + authType: string[] + status: string + sort: Array +} +export interface ClientPageQuery extends ClientQuery, PageQuery {} /** 系统参数类型 */ export interface OptionResp { @@ -293,6 +342,18 @@ export interface SiteConfig { SITE_BEIAN: OptionResp } +/** 安全配置类型 */ +export interface SecurityConfig { + PASSWORD_ERROR_LOCK_COUNT: OptionResp + PASSWORD_ERROR_LOCK_MINUTES: OptionResp + PASSWORD_EXPIRATION_DAYS: OptionResp + PASSWORD_EXPIRATION_WARNING_DAYS: OptionResp + PASSWORD_REPETITION_TIMES: OptionResp + PASSWORD_MIN_LENGTH: OptionResp + PASSWORD_ALLOW_CONTAIN_USERNAME: OptionResp + PASSWORD_REQUIRE_SYMBOLS: OptionResp +} + /** 邮箱配置类型 */ export interface MailConfig { MAIL_PROTOCOL: OptionResp @@ -304,17 +365,65 @@ export interface MailConfig { MAIL_SSL_PORT: OptionResp } -/** 安全配置类型 */ -export interface SecurityConfig { - PASSWORD_ERROR_LOCK_COUNT: OptionResp - PASSWORD_ERROR_LOCK_MINUTES: OptionResp - PASSWORD_EXPIRATION_DAYS: OptionResp - PASSWORD_EXPIRATION_WARNING_DAYS: OptionResp - PASSWORD_REPETITION_TIMES: OptionResp - PASSWORD_MIN_LENGTH: OptionResp - PASSWORD_ALLOW_CONTAIN_USERNAME: OptionResp - PASSWORD_REQUIRE_SYMBOLS: OptionResp +/** 登录配置类型 */ +export interface LoginConfig { + LOGIN_CAPTCHA_ENABLED: OptionResp +} + +/** 短信配置类型 */ +export interface SmsConfigResp { + id: string + name: string + supplier: string + accessKey: string + secretKey: string + signature: string + templateId: string + weight: string + retryInterval: string + maxRetries: string + maximum: string + supplierConfig: string + status: number + isDefault: boolean + createUser: string + createTime: string + updateUser: string + updateTime: string + createUserString: string + updateUserString: string + disabled: boolean +} +export interface SmsConfigQuery { + name: string | undefined + supplier: string | undefined + accessKey: string | undefined + sort: Array +} +export interface SmsConfigPageQuery extends SmsConfigQuery, PageQuery {} + +/** 短信日志类型 */ +export interface SmsLogResp { + id: string + configId: string + phone: string + params: string + status: number + resMsg: string + createUser: string + createTime: string + updateUser: string + updateTime: string + createUserString: string + updateUserString: string +} +export interface SmsLogQuery { + configId: string | undefined + phone: string | undefined + status: number | undefined + sort: Array } +export interface SmsLogPageQuery extends SmsLogQuery, PageQuery {} /** 绑定三方账号信息 */ export interface BindSocialAccountRes { diff --git a/src/apis/system/user-message.ts b/src/apis/system/user-message.ts new file mode 100644 index 0000000000000000000000000000000000000000..64f9d5fd0883b4529ef84f21362a7307de593e2a --- /dev/null +++ b/src/apis/system/user-message.ts @@ -0,0 +1,14 @@ +import type * as T from './type' +import http from '@/utils/http' + +const BASE_URL = '/user/message' + +/** @desc 分页查询用户公告 */ +export function listUserNotice(query: T.NoticePageQuery) { + return http.get>(`${BASE_URL}/notice`, query) +} + +/** @desc 获取用户公告详情 */ +export function getUserNotice(id: number) { + return http.get(`${BASE_URL}/notice/${id}`) +} diff --git a/src/apis/system/user-center.ts b/src/apis/system/user-profile.ts similarity index 86% rename from src/apis/system/user-center.ts rename to src/apis/system/user-profile.ts index a80e08470e89fa4ea797476184e6c51c69884fc9..822e75330fc8951116d164e34bcd4dfe6fb4ca36 100644 --- a/src/apis/system/user-center.ts +++ b/src/apis/system/user-profile.ts @@ -1,11 +1,11 @@ -import type * as System from './type' +import type * as T from './type' import http from '@/utils/http' -const BASE_URL = '/system/user' +const BASE_URL = '/user/profile' /** @desc 上传头像 */ export function uploadAvatar(data: FormData) { - return http.post(`${BASE_URL}/avatar`, data) + return http.patch(`${BASE_URL}/avatar`, data) } /** @desc 修改用户基本信息 */ @@ -30,7 +30,7 @@ export function updateUserEmail(data: { email: string, captcha: string, oldPassw /** @desc 获取绑定的三方账号 */ export function listUserSocial() { - return http.get(`${BASE_URL}/social`) + return http.get(`${BASE_URL}/social`) } /** @desc 绑定三方账号 */ diff --git a/src/apis/system/user.ts b/src/apis/system/user.ts index a7eaf75320215d24e48ee8cb393529214dc2bbcc..2f6637c26adeaa162efcb1746ea12ddd35625cc9 100644 --- a/src/apis/system/user.ts +++ b/src/apis/system/user.ts @@ -1,8 +1,6 @@ import type * as T from './type' import http from '@/utils/http' -export type * from './type' - const BASE_URL = '/system/user' /** @desc 查询用户列表 */ @@ -31,8 +29,8 @@ export function updateUser(data: any, id: string) { } /** @desc 删除用户 */ -export function deleteUser(ids: string | Array) { - return http.del(`${BASE_URL}/${ids}`) +export function deleteUser(id: string) { + return http.del(`${BASE_URL}`, { ids: [id] }) } /** @desc 导出用户 */ diff --git a/src/assets/icons/select.svg b/src/assets/icons/select.svg new file mode 100644 index 0000000000000000000000000000000000000000..6eac52e85233967e5bf9b4d6b93ddd35ea201594 --- /dev/null +++ b/src/assets/icons/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/icons/shortcut-enter.svg b/src/assets/icons/shortcut-enter.svg new file mode 100644 index 0000000000000000000000000000000000000000..c7818e36d0a743c4440e79f115a1d5c608e713bc --- /dev/null +++ b/src/assets/icons/shortcut-enter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue index dff1f892ae87ce1c18e8bb0f560450771f4539e4..fccf84b1645586b3eda7d94dc6654d09df6ee008 100644 --- a/src/components/Breadcrumb/index.vue +++ b/src/components/Breadcrumb/index.vue @@ -1,14 +1,17 @@ @@ -20,6 +23,7 @@ import { useRouteStore } from '@/stores' const route = useRoute() const router = useRouter() const { routes } = useRouteStore() +const attrs = useAttrs() let home: RouteLocationMatched | null = null const getHome = () => { @@ -59,6 +63,27 @@ function handleLink(item: RouteLocationMatched) { + diff --git a/src/components/GiEditTable/GiEditTable.vue b/src/components/GiEditTable/GiEditTable.vue index 49dfcf437b7b8f85fe314a297c442441963de408..ba47481571592997d80c36f32bc297756eb187ec 100644 --- a/src/components/GiEditTable/GiEditTable.vue +++ b/src/components/GiEditTable/GiEditTable.vue @@ -1,12 +1,16 @@