From 1b8f3d77d25b3123a7326c7d94b8e89f031d2146 Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Tue, 3 Mar 2026 20:52:58 +0800
Subject: [PATCH 01/16] refactor
---
.auto-import.json | 1 +
AI_CONTEXT.md | 12 +-
src/{app => }/api/core/base.ts | 0
src/{app => }/api/core/dict-api.ts | 0
src/{app => }/api/core/download.ts | 0
src/{app => }/api/member/index.ts | 0
src/{app => }/api/member/level/index.ts | 2 +-
.../api/member/level/level-model.d.ts | 0
src/{app => }/api/member/points/index.ts | 2 +-
.../api/member/points/points-model.d.ts | 0
src/{app => }/api/member/tag/index.ts | 2 +-
src/{app => }/api/member/tag/tag-model.d.ts | 0
src/{app => }/api/member/user/index.ts | 2 +-
src/{app => }/api/member/user/user-model.d.ts | 0
src/{app => }/api/monitor/logs/index.ts | 0
.../api/monitor/logs/logs-model.d.ts | 0
src/{app => }/api/monitor/logs/logs.ts | 2 +-
src/{app => }/api/monitor/redis/index.ts | 0
.../api/monitor/redis/redis-model.d.ts | 0
src/{app => }/api/monitor/redis/redis.ts | 0
src/{app => }/api/monitor/server/index.ts | 0
.../api/monitor/server/server-model.d.ts | 0
src/{app => }/api/monitor/server/server.ts | 0
src/{app => }/api/request.ts | 0
.../api/setting/config/config-model.d.ts | 0
src/{app => }/api/setting/config/config.ts | 0
src/{app => }/api/setting/config/index.ts | 0
.../api/setting/dept/dept-model.d.ts | 0
src/{app => }/api/setting/dept/dept.ts | 2 +-
src/{app => }/api/setting/dept/index.ts | 0
.../api/setting/dict/dict-item-model.d.ts | 0
src/{app => }/api/setting/dict/dict-item.ts | 2 +-
.../api/setting/dict/dict-model.d.ts | 0
src/{app => }/api/setting/dict/dict.ts | 2 +-
src/{app => }/api/setting/dict/index.ts | 0
src/{app => }/api/setting/gateway/index.ts | 2 +-
src/{app => }/api/setting/gateway/model.d.ts | 0
src/{app => }/api/setting/message/index.ts | 2 +-
src/{app => }/api/setting/message/model.d.ts | 0
src/{app => }/api/setting/notice/index.ts | 2 +-
src/{app => }/api/setting/notice/model.d.ts | 0
src/{app => }/api/setting/post/index.ts | 0
.../api/setting/post/post-model.d.ts | 0
src/{app => }/api/setting/post/post.ts | 2 +-
src/{app => }/api/system/auth/auth-model.d.ts | 0
src/{app => }/api/system/auth/auth.ts | 4 +-
src/{app => }/api/system/auth/index.ts | 0
src/{app => }/api/system/index.ts | 0
src/{app => }/api/system/menu/index.ts | 0
src/{app => }/api/system/menu/menu-model.d.ts | 0
src/{app => }/api/system/menu/menu.ts | 2 +-
src/{app => }/api/system/profile/index.ts | 0
src/{app => }/api/system/profile/model.d.ts | 0
src/{app => }/api/system/role/index.ts | 0
src/{app => }/api/system/role/role-model.d.ts | 0
src/{app => }/api/system/role/role.ts | 2 +-
src/{app => }/api/system/rule/index.ts | 0
src/{app => }/api/system/rule/rule-model.d.ts | 0
src/{app => }/api/system/rule/rule.ts | 2 +-
src/{app => }/api/system/user/index.ts | 0
src/{app => }/api/system/user/user-model.d.ts | 0
src/{app => }/api/system/user/user.ts | 2 +-
.../api/tools/crontab/crontab-model.d.ts | 0
src/{app => }/api/tools/crontab/crontab.ts | 2 +-
src/{app => }/api/tools/crontab/index.ts | 0
src/{app => }/api/tools/delegation/index.ts | 0
src/{app => }/api/tools/delegation/model.d.ts | 0
src/{app => }/api/tools/features/index.ts | 2 +-
src/{app => }/api/tools/features/model.d.ts | 0
.../api/tools/files/files-model.d.ts | 0
src/{app => }/api/tools/files/files.ts | 45 +-
src/{app => }/api/tools/files/index.ts | 0
src/{app => }/api/tools/generator/index.ts | 0
src/{app => }/api/tools/generator/model.d.ts | 0
src/{app => }/api/tools/module/index.ts | 2 +-
src/{app => }/api/tools/module/model.d.ts | 0
.../api/tools/plugin-develop/index.ts | 4 +-
.../api/tools/plugin-develop/model.ts | 0
src/{app => }/api/tools/recycle/index.ts | 0
.../api/tools/recycle/recycle-bin-model.d.ts | 0
src/{app => }/api/tools/recycle/recycle.ts | 2 +-
src/{app => }/api/tools/terminal/index.ts | 4 +-
src/{app => }/api/tools/terminal/model.d.ts | 0
src/{app => }/api/web/index.ts | 0
src/{app => }/api/web/link/index.ts | 2 +-
src/{app => }/api/web/link/link-model.d.ts | 0
src/{app => }/api/web/menu/index.ts | 2 +-
src/{app => }/api/web/menu/menu-model.d.ts | 0
.../views/tools/plugin => apps}/.gitignore | 0
src/{features => apps}/demo/api/auth.ts | 12 +-
src/{features => apps}/demo/api/dictApi.ts | 0
.../demo/api/hello_world.ts | 2 +-
.../demo/api/system-manage.ts | 0
.../demo}/assets/images/3d/icon1.webp | Bin
.../demo}/assets/images/3d/icon2.webp | Bin
.../demo}/assets/images/3d/icon3.webp | Bin
.../demo}/assets/images/3d/icon4.webp | Bin
.../demo}/assets/images/3d/icon5.webp | Bin
.../demo}/assets/images/3d/icon6.webp | Bin
.../demo}/assets/images/3d/icon7.webp | Bin
.../demo}/assets/images/3d/icon8.webp | Bin
.../demo}/assets/images/avatar/avatar.webp | Bin
.../demo}/assets/images/avatar/avatar1.webp | Bin
.../demo}/assets/images/avatar/avatar10.webp | Bin
.../demo}/assets/images/avatar/avatar2.webp | Bin
.../demo}/assets/images/avatar/avatar3.webp | Bin
.../demo}/assets/images/avatar/avatar4.webp | Bin
.../demo}/assets/images/avatar/avatar5.webp | Bin
.../demo}/assets/images/avatar/avatar6.webp | Bin
.../demo}/assets/images/avatar/avatar7.webp | Bin
.../demo}/assets/images/avatar/avatar8.webp | Bin
.../demo}/assets/images/avatar/avatar9.webp | Bin
.../demo}/assets/images/ceremony/hb.png | Bin
.../demo}/assets/images/ceremony/sd.png | Bin
.../demo}/assets/images/ceremony/xc.png | Bin
.../demo}/assets/images/ceremony/yd.png | Bin
.../demo}/assets/images/common/logo.webp | Bin
.../demo}/assets/images/cover/img1.webp | Bin
.../demo}/assets/images/cover/img10.webp | Bin
.../demo}/assets/images/cover/img2.webp | Bin
.../demo}/assets/images/cover/img3.webp | Bin
.../demo}/assets/images/cover/img4.webp | Bin
.../demo}/assets/images/cover/img5.webp | Bin
.../demo}/assets/images/cover/img6.webp | Bin
.../demo}/assets/images/cover/img7.webp | Bin
.../demo}/assets/images/cover/img8.webp | Bin
.../demo}/assets/images/cover/img9.webp | Bin
.../demo}/assets/images/draw/draw1.png | Bin
.../demo}/assets/images/favicon.ico | Bin
.../demo}/assets/images/lock/bg_dark.webp | Bin
.../demo}/assets/images/lock/bg_light.webp | Bin
.../demo}/assets/images/login/lf_icon2.webp | Bin
.../demo}/assets/images/safeguard/server.png | Bin
.../settings/menu_layouts/dual_column.png | Bin
.../settings/menu_layouts/horizontal.png | Bin
.../images/settings/menu_layouts/mixed.png | Bin
.../images/settings/menu_layouts/vertical.png | Bin
.../images/settings/menu_styles/dark.png | Bin
.../images/settings/menu_styles/design.png | Bin
.../images/settings/menu_styles/light.png | Bin
.../images/settings/theme_styles/dark.png | Bin
.../images/settings/theme_styles/light.png | Bin
.../images/settings/theme_styles/system.png | Bin
.../demo}/assets/images/svg/403.svg | 0
.../demo}/assets/images/svg/404.svg | 0
.../demo}/assets/images/svg/500.svg | 0
.../demo}/assets/images/svg/login_icon.svg | 0
.../demo}/assets/images/user/avatar.webp | Bin
.../demo}/assets/images/user/bg.webp | Bin
.../demo/assets/styles/core/app.scss | 0
.../demo/assets/styles/core/dark.scss | 0
.../demo/assets/styles/core/el-dark.scss | 0
.../demo/assets/styles/core/el-light.scss | 0
.../demo/assets/styles/core/el-ui.scss | 0
.../demo/assets/styles/core/md.scss | 0
.../demo/assets/styles/core/mixin.scss | 0
.../demo/assets/styles/core/reset.scss | 0
.../assets/styles/core/router-transition.scss | 0
.../demo/assets/styles/core/tailwind.css | 0
.../assets/styles/core/theme-animation.scss | 0
.../demo/assets/styles/core/theme-change.scss | 0
.../assets/styles/custom/one-dark-pro.scss | 0
.../demo/assets/styles/index.scss | 0
src/{app => apps/demo}/assets/svg/loading.ts | 0
src/{features => apps}/demo/lang/en/demo.json | 0
.../demo/lang/zh-cn/demo.json | 0
.../demo/mock/json/chinaMap.json | 0
.../demo/mock/temp/articleList.ts | 0
.../demo/mock/temp/commentDetail.ts | 0
.../demo/mock/temp/commentList.ts | 0
.../demo/mock/temp/formData.ts | 0
.../demo/mock/upgrade/changeLog.ts | 0
src/{features => apps}/demo/routes/article.ts | 0
.../demo/routes/dashboard.ts | 0
.../demo/routes/examples.ts | 0
.../demo/routes/exception.ts | 0
src/{features => apps}/demo/routes/help.ts | 0
src/{features => apps}/demo/routes/index.ts | 0
src/{features => apps}/demo/routes/result.ts | 0
.../demo/routes/safeguard.ts | 0
src/{features => apps}/demo/routes/system.ts | 0
.../demo/routes/template.ts | 0
src/{features => apps}/demo/routes/widgets.ts | 0
.../demo/views/article/comment/index.vue | 100 +--
.../demo/views/article/detail/index.vue | 0
.../demo/views/article/list/index.vue | 2 +-
.../demo/views/article/publish/index.vue | 2 +-
.../views/auth/forget-password/index.vue | 0
.../demo/views/auth/login/index.vue | 2 +-
.../demo}/views/auth/login/style.css | 0
.../demo}/views/auth/register/index.vue | 0
.../demo/views/change/log/index.vue | 2 +-
.../demo/views/dashboard/analysis}/index.vue | 0
.../modules/customer-satisfaction.vue | 0
.../modules/sales-mapping-by-country.vue | 0
.../analysis}/modules/target-vs-reality.vue | 0
.../analysis}/modules/today-sales.vue | 0
.../analysis}/modules/top-products.vue | 0
.../analysis}/modules/total-revenue.vue | 0
.../analysis}/modules/visitor-insights.vue | 0
.../modules/volume-service-level.vue | 0
.../demo/views/dashboard/console}/index.vue | 0
.../console}/modules/about-project.vue | 0
.../console}/modules/active-user.vue | 0
.../dashboard/console}/modules/card-list.vue | 0
.../console}/modules/dynamic-stats.vue | 0
.../dashboard/console}/modules/new-user.vue | 12 +-
.../console}/modules/sales-overview.vue | 0
.../dashboard/console}/modules/todo-list.vue | 0
.../demo}/views/dashboard/ecommerce/index.vue | 0
.../ecommerce/modules/annual-sales.vue | 0
.../dashboard/ecommerce/modules/banner.vue | 0
.../modules/cart-conversion-rate.vue | 0
.../ecommerce/modules/hot-commodity.vue | 0
.../ecommerce/modules/hot-products-list.vue | 12 +-
.../ecommerce/modules/product-sales.vue | 0
.../ecommerce/modules/recent-transaction.vue | 0
.../modules/sales-classification.vue | 0
.../ecommerce/modules/sales-growth.vue | 0
.../ecommerce/modules/sales-trend.vue | 0
.../ecommerce/modules/total-order-volume.vue | 0
.../ecommerce/modules/total-products.vue | 0
.../ecommerce/modules/transaction-list.vue | 0
.../demo/views/examples/forms/index.vue | 0
.../demo/views/examples/forms/search-bar.vue | 0
.../examples/permission/button-auth/index.vue | 0
.../permission/page-visibility/index.vue | 0
.../examples/permission/switch-role/index.vue | 2 +-
.../demo/views/examples/socket-chat/index.vue | 0
.../demo/views/examples/tables/basic.vue | 2 +-
.../demo/views/examples/tables/index.vue | 4 +-
.../demo/views/examples/tables/tree.vue | 2 +-
.../demo/views/examples/tabs/index.vue | 0
.../demo}/views/exception/403/index.vue | 0
.../demo}/views/exception/404/index.vue | 0
.../demo}/views/exception/500/index.vue | 0
.../demo/views/index/index.vue | 0
.../demo/views/index/style.scss | 0
.../demo/views/outside/Iframe.vue | 0
.../demo/views/result/fail/index.vue | 0
.../demo/views/result/success/index.vue | 0
.../demo/views/safeguard/server/index.vue | 0
.../demo/views/system/menu/index.vue | 2 +-
.../views/system/menu/modules/menu-dialog.vue | 0
.../demo/views/system/nested/menu1/index.vue | 0
.../demo/views/system/nested/menu2/index.vue | 0
.../demo/views/system/nested/menu3/index.vue | 0
.../system/nested/menu3/menu3-2/index.vue | 0
.../demo/views/system/role/index.vue | 2 +-
.../system/role/modules/role-edit-dialog.vue | 0
.../role/modules/role-permission-dialog.vue | 0
.../views/system/role/modules/role-search.vue | 0
.../demo/views/system/user-center/index.vue | 0
.../demo/views/system/user/index.vue | 4 +-
.../views/system/user/modules/user-dialog.vue | 2 +-
.../views/system/user/modules/user-search.vue | 0
.../demo/views/template/banners/index.vue | 0
.../demo/views/template/calendar/index.vue | 0
.../demo/views/template/cards/index.vue | 0
.../demo/views/template/charts/index.vue | 0
.../demo/views/template/chat/index.vue | 22 +-
.../demo/views/template/map/index.vue | 0
.../demo/views/template/pricing/index.vue | 0
.../demo/views/widgets/context-menu/index.vue | 0
.../demo/views/widgets/count-to/index.vue | 0
.../demo/views/widgets/drag/index.vue | 0
.../demo/views/widgets/excel/index.vue | 0
.../demo/views/widgets/fireworks/index.vue | 0
.../demo/views/widgets/icon/index.vue | 0
.../demo/views/widgets/image-crop/index.vue | 0
.../demo/views/widgets/qrcode/index.vue | 0
.../demo/views/widgets/text-scroll/index.vue | 0
.../demo/views/widgets/video/index.vue | 0
.../demo/views/widgets/wang-editor/index.vue | 0
.../demo/views/widgets/watermark/index.vue | 0
.../demo => }/assets/images/3d/icon1.webp | Bin
.../demo => }/assets/images/3d/icon2.webp | Bin
.../demo => }/assets/images/3d/icon3.webp | Bin
.../demo => }/assets/images/3d/icon4.webp | Bin
.../demo => }/assets/images/3d/icon5.webp | Bin
.../demo => }/assets/images/3d/icon6.webp | Bin
.../demo => }/assets/images/3d/icon7.webp | Bin
.../demo => }/assets/images/3d/icon8.webp | Bin
.../assets/images/avatar/avatar.webp | Bin
.../assets/images/avatar/avatar1.webp | Bin
.../assets/images/avatar/avatar10.webp | Bin
.../assets/images/avatar/avatar2.webp | Bin
.../assets/images/avatar/avatar3.webp | Bin
.../assets/images/avatar/avatar4.webp | Bin
.../assets/images/avatar/avatar5.webp | Bin
.../assets/images/avatar/avatar6.webp | Bin
.../assets/images/avatar/avatar7.webp | Bin
.../assets/images/avatar/avatar8.webp | Bin
.../assets/images/avatar/avatar9.webp | Bin
.../demo => }/assets/images/ceremony/hb.png | Bin
.../demo => }/assets/images/ceremony/sd.png | Bin
.../demo => }/assets/images/ceremony/xc.png | Bin
.../demo => }/assets/images/ceremony/yd.png | Bin
.../demo => }/assets/images/common/logo.webp | Bin
.../demo => }/assets/images/cover/img1.webp | Bin
.../demo => }/assets/images/cover/img10.webp | Bin
.../demo => }/assets/images/cover/img2.webp | Bin
.../demo => }/assets/images/cover/img3.webp | Bin
.../demo => }/assets/images/cover/img4.webp | Bin
.../demo => }/assets/images/cover/img5.webp | Bin
.../demo => }/assets/images/cover/img6.webp | Bin
.../demo => }/assets/images/cover/img7.webp | Bin
.../demo => }/assets/images/cover/img8.webp | Bin
.../demo => }/assets/images/cover/img9.webp | Bin
.../demo => }/assets/images/draw/draw1.png | Bin
.../demo => }/assets/images/favicon.ico | Bin
.../demo => }/assets/images/lock/bg_dark.webp | Bin
.../assets/images/lock/bg_light.webp | Bin
.../assets/images/login/lf_icon2.webp | Bin
.../assets/images/safeguard/server.png | Bin
.../settings/menu_layouts/dual_column.png | Bin
.../settings/menu_layouts/horizontal.png | Bin
.../images/settings/menu_layouts/mixed.png | Bin
.../images/settings/menu_layouts/vertical.png | Bin
.../images/settings/menu_styles/dark.png | Bin
.../images/settings/menu_styles/design.png | Bin
.../images/settings/menu_styles/light.png | Bin
.../images/settings/theme_styles/dark.png | Bin
.../images/settings/theme_styles/light.png | Bin
.../images/settings/theme_styles/system.png | Bin
.../demo => }/assets/images/svg/403.svg | 0
.../demo => }/assets/images/svg/404.svg | 0
.../demo => }/assets/images/svg/500.svg | 0
.../assets/images/svg/login_icon.svg | 0
src/{app => }/assets/images/tools/auth.png | Bin
.../demo => }/assets/images/user/avatar.webp | Bin
.../demo => }/assets/images/user/bg.webp | Bin
src/{features/demo => }/assets/svg/loading.ts | 0
.../business/comment-widget/index.vue | 2 +-
.../core/layouts/art-chat-window/index.vue | 340 +++++----
.../layouts/art-fireworks-effect/index.vue | 6 +-
.../core/layouts/art-header-bar/index.vue | 2 +-
.../art-menus/art-sidebar-menu/index.vue | 2 +-
.../core/layouts/art-notification/index.vue | 642 ++++++++--------
.../composables/useSettingsConfig.ts | 2 +-
.../composables/useSettingsHandlers.ts | 2 +-
.../composables/useSettingsPanel.ts | 2 +-
.../composables/useSettingsState.ts | 2 +-
.../widget/MenuStyleSettings.vue | 2 +-
.../widget/SettingActions.vue | 2 +-
.../core/tables/art-table-header/index.vue | 2 +-
.../core/views/login/AuthTopBar.vue | 2 +-
src/components/form/components/avatar.vue | 2 +-
src/components/form/components/upload.vue | 690 +++++++++---------
src/components/terminal/index.vue | 4 +-
src/config/index.ts | 2 +-
src/config/setting.ts | 2 +-
src/{app => }/enums/appEnum.ts | 0
src/{app => }/enums/dict-enum.ts | 0
src/{app => }/enums/formEnum.ts | 0
src/{app => }/enums/index.ts | 0
src/{app => }/enums/terminal-enum.ts | 0
src/hooks/core/useTheme.ts | 2 +-
src/locales/index.ts | 24 +-
.../lang/en/member/member.user.json | 0
.../lang/en/monitor/logs.login.json | 0
.../lang/en/monitor/logs.operate.json | 0
.../lang/en/monitor/monitor.redis.json | 0
.../lang/en/monitor/monitor.server.json | 0
.../lang/en/setting/setting.config.json | 0
.../lang/en/setting/setting.dept.json | 0
.../lang/en/setting/setting.dict.item.json | 0
.../lang/en/setting/setting.dict.json | 0
.../en/setting/setting.gateway.limiter.json | 0
.../lang/en/setting/setting.message.json | 0
.../lang/en/setting/setting.notice.json | 0
.../lang/en/setting/setting.post.json | 0
.../lang/en/system/system.menu.json | 0
.../lang/en/system/system.role.json | 0
.../lang/en/system/system.user.center.json | 0
.../lang/en/system/system.user.json | 0
.../lang/en/tools/tools.crontab.json | 0
.../lang/en/tools/tools.crontab.log.json | 0
.../lang/en/tools/tools.delegation.json | 0
.../lang/en/tools/tools.features.json | 0
.../lang/en/tools/tools.files.json | 0
.../lang/en/tools/tools.generator.code.json | 0
.../lang/en/tools/tools.plugin.develop.json | 0
.../lang/en/tools/tools.recycle.json | 0
.../lang/en/tools/tools.terminal.json | 0
.../lang/en/web/web.link.json | 0
.../lang/en/web/web.menu.json | 0
.../lang/zh-cn/member/member.level.json | 0
.../lang/zh-cn/member/member.points.json | 0
.../lang/zh-cn/member/member.tag.json | 0
.../lang/zh-cn/member/member.user.json | 0
.../lang/zh-cn/monitor/logs.login.json | 0
.../lang/zh-cn/monitor/logs.operate.json | 0
.../lang/zh-cn/monitor/monitor.redis.json | 0
.../lang/zh-cn/monitor/monitor.server.json | 0
.../lang/zh-cn/setting/setting.config.json | 0
.../lang/zh-cn/setting/setting.dept.json | 0
.../lang/zh-cn/setting/setting.dict.item.json | 0
.../lang/zh-cn/setting/setting.dict.json | 0
.../setting/setting.gateway.blacklist.json | 0
.../setting/setting.gateway.limiter.json | 0
.../lang/zh-cn/setting/setting.message.json | 0
.../lang/zh-cn/setting/setting.notice.json | 0
.../lang/zh-cn/setting/setting.post.json | 0
.../lang/zh-cn/system/system.menu.json | 0
.../lang/zh-cn/system/system.role.json | 0
.../lang/zh-cn/system/system.user.center.json | 0
.../lang/zh-cn/system/system.user.json | 0
.../lang/zh-cn/tools/tools.crontab.json | 0
.../lang/zh-cn/tools/tools.crontab.log.json | 0
.../lang/zh-cn/tools/tools.delegation.json | 0
.../lang/zh-cn/tools/tools.features.json | 0
.../lang/zh-cn/tools/tools.files.json | 0
.../zh-cn/tools/tools.generator.code.json | 0
.../zh-cn/tools/tools.plugin.develop.json | 0
.../lang/zh-cn/tools/tools.recycle.json | 0
.../lang/zh-cn/tools/tools.terminal.json | 0
.../lang/zh-cn/web/web.link.json | 0
.../lang/zh-cn/web/web.menu.json | 0
...eModuleScanner.ts => AppsModuleScanner.ts} | 36 +-
...ureRouteManager.ts => AppsRouteManager.ts} | 20 +-
src/router/core/ComponentLoader.ts | 40 +-
src/router/core/MenuProcessor.ts | 2 +-
src/router/core/index.ts | 4 +-
src/router/guards/beforeEach.ts | 2 +-
src/router/routes/staticRoutes.ts | 18 +-
src/store/modules/notify.ts | 2 +-
src/store/modules/setting.ts | 2 +-
src/store/modules/table.ts | 2 +-
src/store/modules/terminal.ts | 8 +-
src/store/modules/user.ts | 2 +-
src/types/config/index.ts | 2 +-
src/types/store/index.ts | 2 +-
src/utils/sys/upgrade.ts | 2 +-
src/utils/ui/animation.ts | 2 +-
src/utils/ui/loading.ts | 2 +-
src/utils/url/index.ts | 2 +-
.../views/auth/forget-password/index.vue | 0
src/{app => }/views/auth/login/index.vue | 6 +-
.../demo => }/views/auth/login/style.css | 0
.../demo => }/views/auth/register/index.vue | 0
.../dashboard/analytics}/index.vue | 0
.../modules/customer-satisfaction.vue | 0
.../modules/sales-mapping-by-country.vue | 0
.../analytics}/modules/target-vs-reality.vue | 0
.../analytics}/modules/today-sales.vue | 0
.../analytics}/modules/top-products.vue | 0
.../analytics}/modules/total-revenue.vue | 0
.../analytics}/modules/visitor-insights.vue | 0
.../modules/volume-service-level.vue | 0
.../views/dashboard/ecommerce/index.vue | 0
.../ecommerce/modules/annual-sales.vue | 0
.../dashboard/ecommerce/modules/banner.vue | 0
.../modules/cart-conversion-rate.vue | 0
.../ecommerce/modules/hot-commodity.vue | 0
.../ecommerce/modules/hot-products-list.vue | 12 +-
.../ecommerce/modules/product-sales.vue | 0
.../ecommerce/modules/recent-transaction.vue | 0
.../modules/sales-classification.vue | 0
.../ecommerce/modules/sales-growth.vue | 0
.../ecommerce/modules/sales-trend.vue | 0
.../ecommerce/modules/total-order-volume.vue | 0
.../ecommerce/modules/total-products.vue | 0
.../ecommerce/modules/transaction-list.vue | 0
.../dashboard/workspace}/index.vue | 0
.../workspace}/modules/about-project.vue | 0
.../workspace}/modules/active-user.vue | 0
.../workspace}/modules/card-list.vue | 0
.../workspace}/modules/dynamic-stats.vue | 0
.../dashboard/workspace}/modules/new-user.vue | 12 +-
.../workspace}/modules/sales-overview.vue | 0
.../workspace}/modules/todo-list.vue | 0
src/{app => }/views/dev/index.vue | 0
.../demo => }/views/exception/403/index.vue | 0
.../demo => }/views/exception/404/index.vue | 0
.../demo => }/views/exception/500/index.vue | 0
src/{app => }/views/member/level/index.vue | 0
.../views/member/level/schemas/index.tsx | 4 +-
src/{app => }/views/member/points/index.vue | 0
.../views/member/points/schemas/index.tsx | 4 +-
src/{app => }/views/member/tag/index.vue | 0
.../views/member/tag/schemas/index.tsx | 4 +-
.../user/components/adjust-points-modal.vue | 2 +-
.../user/components/assign-tag-modal.vue | 2 +-
.../user/components/reset-password-modal.vue | 2 +-
src/{app => }/views/member/user/index.vue | 0
.../views/member/user/schemas/index.tsx | 4 +-
.../views/monitor/logs/login/index.vue | 0
.../monitor/logs/login/schemas/index.tsx | 4 +-
.../views/monitor/logs/operate/index.vue | 0
.../monitor/logs/operate/schemas/index.tsx | 6 +-
src/{app => }/views/monitor/redis/index.vue | 2 +-
src/{app => }/views/monitor/server/index.vue | 2 +-
src/{app => }/views/setting/config/index.vue | 0
.../views/setting/config/modules/email.vue | 2 +-
.../views/setting/config/modules/site.vue | 4 +-
.../views/setting/config/modules/sms.vue | 4 +-
.../config/modules/upload-ext-drawer.vue | 2 +-
.../views/setting/config/modules/upload.vue | 4 +-
.../views/setting/config/schemas/index.tsx | 0
src/{app => }/views/setting/dept/index.vue | 0
.../views/setting/dept/schemas/index.tsx | 4 +-
.../views/setting/dict-item/index.vue | 0
.../views/setting/dict-item/schemas/index.tsx | 4 +-
.../views/setting/dict/dict-item-wrap.vue | 0
src/{app => }/views/setting/dict/index.vue | 0
.../views/setting/dict/schemas/index.tsx | 4 +-
.../views/setting/gateway/blacklist/index.vue | 0
.../gateway/blacklist/schemas/index.tsx | 4 +-
.../views/setting/gateway/limiter/index.vue | 0
.../setting/gateway/limiter/schemas/index.tsx | 4 +-
src/{app => }/views/setting/message/index.vue | 0
.../views/setting/message/modules/detail.vue | 0
.../views/setting/message/modules/form.vue | 4 +-
.../views/setting/message/schemas/index.tsx | 4 +-
src/{app => }/views/setting/notice/index.vue | 2 +-
.../views/setting/notice/schemas/index.tsx | 4 +-
src/{app => }/views/setting/post/index.vue | 0
.../views/setting/post/schemas/index.tsx | 6 +-
src/{app => }/views/system/menu/index.vue | 0
.../views/system/menu/initerface-list.vue | 4 +-
.../views/system/menu/schemas/index.tsx | 4 +-
src/{app => }/views/system/role/add-user.vue | 2 +-
src/{app => }/views/system/role/auth-menu.vue | 6 +-
.../views/system/role/data-scope.vue | 4 +-
src/{app => }/views/system/role/index.vue | 0
.../views/system/role/schemas/index.tsx | 4 +-
src/{app => }/views/system/role/user-role.vue | 2 +-
.../views/system/user-center/index.vue | 6 +-
.../system/user-center/schemas/index.tsx | 4 +-
.../views/system/user/grant-role.vue | 2 +-
src/{app => }/views/system/user/index.vue | 0
.../views/system/user/online-user-detail.vue | 2 +-
.../views/system/user/online-user-list.vue | 2 +-
.../views/system/user/schemas/index.tsx | 4 +-
.../views/tools/crontab-log/index.vue | 0
.../views/tools/crontab-log/schemas/index.tsx | 4 +-
src/{app => }/views/tools/crontab/index.vue | 2 +-
.../views/tools/crontab/logs-wrap.vue | 0
.../views/tools/crontab/schemas/index.tsx | 4 +-
.../views/tools/delegation/authorization.vue | 2 +-
.../views/tools/delegation/index.vue | 4 +-
.../views/tools/features/components/index.ts | 0
.../features/components/module-detail.vue | 0
.../tools/features/components/module-list.vue | 0
.../features/components/table-header.vue | 0
.../tools/features/components/upgrade-log.vue | 0
src/{app => }/views/tools/features/index.vue | 2 +-
src/{app => }/views/tools/features/store.ts | 0
src/{app => }/views/tools/files/index.vue | 2 +-
.../views/tools/files/schemas/index.tsx | 4 +-
.../generator/components/basic-settings.vue | 2 +-
.../generator/components/code-preview.vue | 2 +-
.../generator/components/field-settings.vue | 0
.../generator/components/generate-config.vue | 0
.../generator/components/import-table.vue | 2 +-
.../components/relation-settings.vue | 0
.../views/tools/generator/generator.vue | 2 +-
src/{app => }/views/tools/generator/index.vue | 2 +-
.../views/tools/generator/schemas/index.tsx | 4 +-
.../tools/plugin}/.gitignore | 0
.../views/tools/plugin/develop/index.vue | 2 +-
.../tools/plugin/develop/schemas/index.tsx | 2 +-
src/{app => }/views/tools/recycle/index.vue | 4 +-
.../views/tools/recycle/schemas/index.tsx | 6 +-
src/{app => }/views/web/link/index.vue | 0
.../views/web/link/schemas/index.tsx | 4 +-
src/{app => }/views/web/menu/index.vue | 0
.../views/web/menu/schemas/index.tsx | 4 +-
tsconfig.json | 10 +-
vite.config.ts | 8 +-
571 files changed, 1234 insertions(+), 1200 deletions(-)
rename src/{app => }/api/core/base.ts (100%)
rename src/{app => }/api/core/dict-api.ts (100%)
rename src/{app => }/api/core/download.ts (100%)
rename src/{app => }/api/member/index.ts (100%)
rename src/{app => }/api/member/level/index.ts (94%)
rename src/{app => }/api/member/level/level-model.d.ts (100%)
rename src/{app => }/api/member/points/index.ts (95%)
rename src/{app => }/api/member/points/points-model.d.ts (100%)
rename src/{app => }/api/member/tag/index.ts (94%)
rename src/{app => }/api/member/tag/tag-model.d.ts (100%)
rename src/{app => }/api/member/user/index.ts (96%)
rename src/{app => }/api/member/user/user-model.d.ts (100%)
rename src/{app => }/api/monitor/logs/index.ts (100%)
rename src/{app => }/api/monitor/logs/logs-model.d.ts (100%)
rename src/{app => }/api/monitor/logs/logs.ts (91%)
rename src/{app => }/api/monitor/redis/index.ts (100%)
rename src/{app => }/api/monitor/redis/redis-model.d.ts (100%)
rename src/{app => }/api/monitor/redis/redis.ts (100%)
rename src/{app => }/api/monitor/server/index.ts (100%)
rename src/{app => }/api/monitor/server/server-model.d.ts (100%)
rename src/{app => }/api/monitor/server/server.ts (100%)
rename src/{app => }/api/request.ts (100%)
rename src/{app => }/api/setting/config/config-model.d.ts (100%)
rename src/{app => }/api/setting/config/config.ts (100%)
rename src/{app => }/api/setting/config/index.ts (100%)
rename src/{app => }/api/setting/dept/dept-model.d.ts (100%)
rename src/{app => }/api/setting/dept/dept.ts (89%)
rename src/{app => }/api/setting/dept/index.ts (100%)
rename src/{app => }/api/setting/dict/dict-item-model.d.ts (100%)
rename src/{app => }/api/setting/dict/dict-item.ts (81%)
rename src/{app => }/api/setting/dict/dict-model.d.ts (100%)
rename src/{app => }/api/setting/dict/dict.ts (93%)
rename src/{app => }/api/setting/dict/index.ts (100%)
rename src/{app => }/api/setting/gateway/index.ts (88%)
rename src/{app => }/api/setting/gateway/model.d.ts (100%)
rename src/{app => }/api/setting/message/index.ts (94%)
rename src/{app => }/api/setting/message/model.d.ts (100%)
rename src/{app => }/api/setting/notice/index.ts (88%)
rename src/{app => }/api/setting/notice/model.d.ts (100%)
rename src/{app => }/api/setting/post/index.ts (100%)
rename src/{app => }/api/setting/post/post-model.d.ts (100%)
rename src/{app => }/api/setting/post/post.ts (79%)
rename src/{app => }/api/system/auth/auth-model.d.ts (100%)
rename src/{app => }/api/system/auth/auth.ts (94%)
rename src/{app => }/api/system/auth/index.ts (100%)
rename src/{app => }/api/system/index.ts (100%)
rename src/{app => }/api/system/menu/index.ts (100%)
rename src/{app => }/api/system/menu/menu-model.d.ts (100%)
rename src/{app => }/api/system/menu/menu.ts (92%)
rename src/{app => }/api/system/profile/index.ts (100%)
rename src/{app => }/api/system/profile/model.d.ts (100%)
rename src/{app => }/api/system/role/index.ts (100%)
rename src/{app => }/api/system/role/role-model.d.ts (100%)
rename src/{app => }/api/system/role/role.ts (92%)
rename src/{app => }/api/system/rule/index.ts (100%)
rename src/{app => }/api/system/rule/rule-model.d.ts (100%)
rename src/{app => }/api/system/rule/rule.ts (94%)
rename src/{app => }/api/system/user/index.ts (100%)
rename src/{app => }/api/system/user/user-model.d.ts (100%)
rename src/{app => }/api/system/user/user.ts (96%)
rename src/{app => }/api/tools/crontab/crontab-model.d.ts (100%)
rename src/{app => }/api/tools/crontab/crontab.ts (96%)
rename src/{app => }/api/tools/crontab/index.ts (100%)
rename src/{app => }/api/tools/delegation/index.ts (100%)
rename src/{app => }/api/tools/delegation/model.d.ts (100%)
rename src/{app => }/api/tools/features/index.ts (98%)
rename src/{app => }/api/tools/features/model.d.ts (100%)
rename src/{app => }/api/tools/files/files-model.d.ts (100%)
rename src/{app => }/api/tools/files/files.ts (61%)
rename src/{app => }/api/tools/files/index.ts (100%)
rename src/{app => }/api/tools/generator/index.ts (100%)
rename src/{app => }/api/tools/generator/model.d.ts (100%)
rename src/{app => }/api/tools/module/index.ts (95%)
rename src/{app => }/api/tools/module/model.d.ts (100%)
rename src/{app => }/api/tools/plugin-develop/index.ts (63%)
rename src/{app => }/api/tools/plugin-develop/model.ts (100%)
rename src/{app => }/api/tools/recycle/index.ts (100%)
rename src/{app => }/api/tools/recycle/recycle-bin-model.d.ts (100%)
rename src/{app => }/api/tools/recycle/recycle.ts (87%)
rename src/{app => }/api/tools/terminal/index.ts (90%)
rename src/{app => }/api/tools/terminal/model.d.ts (100%)
rename src/{app => }/api/web/index.ts (100%)
rename src/{app => }/api/web/link/index.ts (84%)
rename src/{app => }/api/web/link/link-model.d.ts (100%)
rename src/{app => }/api/web/menu/index.ts (84%)
rename src/{app => }/api/web/menu/menu-model.d.ts (100%)
rename src/{app/views/tools/plugin => apps}/.gitignore (100%)
rename src/{features => apps}/demo/api/auth.ts (82%)
rename src/{features => apps}/demo/api/dictApi.ts (100%)
rename src/{features => apps}/demo/api/hello_world.ts (74%)
rename src/{features => apps}/demo/api/system-manage.ts (100%)
rename src/{app => apps/demo}/assets/images/3d/icon1.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon2.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon3.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon4.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon5.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon6.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon7.webp (100%)
rename src/{app => apps/demo}/assets/images/3d/icon8.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar1.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar10.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar2.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar3.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar4.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar5.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar6.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar7.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar8.webp (100%)
rename src/{app => apps/demo}/assets/images/avatar/avatar9.webp (100%)
rename src/{app => apps/demo}/assets/images/ceremony/hb.png (100%)
rename src/{app => apps/demo}/assets/images/ceremony/sd.png (100%)
rename src/{app => apps/demo}/assets/images/ceremony/xc.png (100%)
rename src/{app => apps/demo}/assets/images/ceremony/yd.png (100%)
rename src/{app => apps/demo}/assets/images/common/logo.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img1.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img10.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img2.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img3.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img4.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img5.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img6.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img7.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img8.webp (100%)
rename src/{app => apps/demo}/assets/images/cover/img9.webp (100%)
rename src/{app => apps/demo}/assets/images/draw/draw1.png (100%)
rename src/{app => apps/demo}/assets/images/favicon.ico (100%)
rename src/{app => apps/demo}/assets/images/lock/bg_dark.webp (100%)
rename src/{app => apps/demo}/assets/images/lock/bg_light.webp (100%)
rename src/{app => apps/demo}/assets/images/login/lf_icon2.webp (100%)
rename src/{app => apps/demo}/assets/images/safeguard/server.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_layouts/dual_column.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_layouts/horizontal.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_layouts/mixed.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_layouts/vertical.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_styles/dark.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_styles/design.png (100%)
rename src/{app => apps/demo}/assets/images/settings/menu_styles/light.png (100%)
rename src/{app => apps/demo}/assets/images/settings/theme_styles/dark.png (100%)
rename src/{app => apps/demo}/assets/images/settings/theme_styles/light.png (100%)
rename src/{app => apps/demo}/assets/images/settings/theme_styles/system.png (100%)
rename src/{app => apps/demo}/assets/images/svg/403.svg (100%)
rename src/{app => apps/demo}/assets/images/svg/404.svg (100%)
rename src/{app => apps/demo}/assets/images/svg/500.svg (100%)
rename src/{app => apps/demo}/assets/images/svg/login_icon.svg (100%)
rename src/{app => apps/demo}/assets/images/user/avatar.webp (100%)
rename src/{app => apps/demo}/assets/images/user/bg.webp (100%)
rename src/{features => apps}/demo/assets/styles/core/app.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/dark.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/el-dark.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/el-light.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/el-ui.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/md.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/mixin.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/reset.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/router-transition.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/tailwind.css (100%)
rename src/{features => apps}/demo/assets/styles/core/theme-animation.scss (100%)
rename src/{features => apps}/demo/assets/styles/core/theme-change.scss (100%)
rename src/{features => apps}/demo/assets/styles/custom/one-dark-pro.scss (100%)
rename src/{features => apps}/demo/assets/styles/index.scss (100%)
rename src/{app => apps/demo}/assets/svg/loading.ts (100%)
rename src/{features => apps}/demo/lang/en/demo.json (100%)
rename src/{features => apps}/demo/lang/zh-cn/demo.json (100%)
rename src/{features => apps}/demo/mock/json/chinaMap.json (100%)
rename src/{features => apps}/demo/mock/temp/articleList.ts (100%)
rename src/{features => apps}/demo/mock/temp/commentDetail.ts (100%)
rename src/{features => apps}/demo/mock/temp/commentList.ts (100%)
rename src/{features => apps}/demo/mock/temp/formData.ts (100%)
rename src/{features => apps}/demo/mock/upgrade/changeLog.ts (100%)
rename src/{features => apps}/demo/routes/article.ts (100%)
rename src/{features => apps}/demo/routes/dashboard.ts (100%)
rename src/{features => apps}/demo/routes/examples.ts (100%)
rename src/{features => apps}/demo/routes/exception.ts (100%)
rename src/{features => apps}/demo/routes/help.ts (100%)
rename src/{features => apps}/demo/routes/index.ts (100%)
rename src/{features => apps}/demo/routes/result.ts (100%)
rename src/{features => apps}/demo/routes/safeguard.ts (100%)
rename src/{features => apps}/demo/routes/system.ts (100%)
rename src/{features => apps}/demo/routes/template.ts (100%)
rename src/{features => apps}/demo/routes/widgets.ts (100%)
rename src/{features => apps}/demo/views/article/comment/index.vue (69%)
rename src/{features => apps}/demo/views/article/detail/index.vue (100%)
rename src/{features => apps}/demo/views/article/list/index.vue (98%)
rename src/{features => apps}/demo/views/article/publish/index.vue (99%)
rename src/{app => apps/demo}/views/auth/forget-password/index.vue (100%)
rename src/{features => apps}/demo/views/auth/login/index.vue (99%)
rename src/{app => apps/demo}/views/auth/login/style.css (100%)
rename src/{app => apps/demo}/views/auth/register/index.vue (100%)
rename src/{features => apps}/demo/views/change/log/index.vue (95%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/index.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/customer-satisfaction.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/sales-mapping-by-country.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/target-vs-reality.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/today-sales.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/top-products.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/total-revenue.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/visitor-insights.vue (100%)
rename src/{app/views/dashboard/analytics => apps/demo/views/dashboard/analysis}/modules/volume-service-level.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/index.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/about-project.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/active-user.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/card-list.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/dynamic-stats.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/new-user.vue (91%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/sales-overview.vue (100%)
rename src/{app/views/dashboard/workspace => apps/demo/views/dashboard/console}/modules/todo-list.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/index.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/annual-sales.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/banner.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/cart-conversion-rate.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/hot-commodity.vue (100%)
rename src/{features => apps}/demo/views/dashboard/ecommerce/modules/hot-products-list.vue (93%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/product-sales.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/recent-transaction.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/sales-classification.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/sales-growth.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/sales-trend.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/total-order-volume.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/total-products.vue (100%)
rename src/{app => apps/demo}/views/dashboard/ecommerce/modules/transaction-list.vue (100%)
rename src/{features => apps}/demo/views/examples/forms/index.vue (100%)
rename src/{features => apps}/demo/views/examples/forms/search-bar.vue (100%)
rename src/{features => apps}/demo/views/examples/permission/button-auth/index.vue (100%)
rename src/{features => apps}/demo/views/examples/permission/page-visibility/index.vue (100%)
rename src/{features => apps}/demo/views/examples/permission/switch-role/index.vue (98%)
rename src/{features => apps}/demo/views/examples/socket-chat/index.vue (100%)
rename src/{features => apps}/demo/views/examples/tables/basic.vue (95%)
rename src/{features => apps}/demo/views/examples/tables/index.vue (99%)
rename src/{features => apps}/demo/views/examples/tables/tree.vue (99%)
rename src/{features => apps}/demo/views/examples/tabs/index.vue (100%)
rename src/{app => apps/demo}/views/exception/403/index.vue (100%)
rename src/{app => apps/demo}/views/exception/404/index.vue (100%)
rename src/{app => apps/demo}/views/exception/500/index.vue (100%)
rename src/{features => apps}/demo/views/index/index.vue (100%)
rename src/{features => apps}/demo/views/index/style.scss (100%)
rename src/{features => apps}/demo/views/outside/Iframe.vue (100%)
rename src/{features => apps}/demo/views/result/fail/index.vue (100%)
rename src/{features => apps}/demo/views/result/success/index.vue (100%)
rename src/{features => apps}/demo/views/safeguard/server/index.vue (100%)
rename src/{features => apps}/demo/views/system/menu/index.vue (99%)
rename src/{features => apps}/demo/views/system/menu/modules/menu-dialog.vue (100%)
rename src/{features => apps}/demo/views/system/nested/menu1/index.vue (100%)
rename src/{features => apps}/demo/views/system/nested/menu2/index.vue (100%)
rename src/{features => apps}/demo/views/system/nested/menu3/index.vue (100%)
rename src/{features => apps}/demo/views/system/nested/menu3/menu3-2/index.vue (100%)
rename src/{features => apps}/demo/views/system/role/index.vue (98%)
rename src/{features => apps}/demo/views/system/role/modules/role-edit-dialog.vue (100%)
rename src/{features => apps}/demo/views/system/role/modules/role-permission-dialog.vue (100%)
rename src/{features => apps}/demo/views/system/role/modules/role-search.vue (100%)
rename src/{features => apps}/demo/views/system/user-center/index.vue (100%)
rename src/{features => apps}/demo/views/system/user/index.vue (98%)
rename src/{features => apps}/demo/views/system/user/modules/user-dialog.vue (98%)
rename src/{features => apps}/demo/views/system/user/modules/user-search.vue (100%)
rename src/{features => apps}/demo/views/template/banners/index.vue (100%)
rename src/{features => apps}/demo/views/template/calendar/index.vue (100%)
rename src/{features => apps}/demo/views/template/cards/index.vue (100%)
rename src/{features => apps}/demo/views/template/charts/index.vue (100%)
rename src/{features => apps}/demo/views/template/chat/index.vue (94%)
rename src/{features => apps}/demo/views/template/map/index.vue (100%)
rename src/{features => apps}/demo/views/template/pricing/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/context-menu/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/count-to/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/drag/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/excel/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/fireworks/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/icon/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/image-crop/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/qrcode/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/text-scroll/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/video/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/wang-editor/index.vue (100%)
rename src/{features => apps}/demo/views/widgets/watermark/index.vue (100%)
rename src/{features/demo => }/assets/images/3d/icon1.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon2.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon3.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon4.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon5.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon6.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon7.webp (100%)
rename src/{features/demo => }/assets/images/3d/icon8.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar1.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar10.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar2.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar3.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar4.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar5.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar6.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar7.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar8.webp (100%)
rename src/{features/demo => }/assets/images/avatar/avatar9.webp (100%)
rename src/{features/demo => }/assets/images/ceremony/hb.png (100%)
rename src/{features/demo => }/assets/images/ceremony/sd.png (100%)
rename src/{features/demo => }/assets/images/ceremony/xc.png (100%)
rename src/{features/demo => }/assets/images/ceremony/yd.png (100%)
rename src/{features/demo => }/assets/images/common/logo.webp (100%)
rename src/{features/demo => }/assets/images/cover/img1.webp (100%)
rename src/{features/demo => }/assets/images/cover/img10.webp (100%)
rename src/{features/demo => }/assets/images/cover/img2.webp (100%)
rename src/{features/demo => }/assets/images/cover/img3.webp (100%)
rename src/{features/demo => }/assets/images/cover/img4.webp (100%)
rename src/{features/demo => }/assets/images/cover/img5.webp (100%)
rename src/{features/demo => }/assets/images/cover/img6.webp (100%)
rename src/{features/demo => }/assets/images/cover/img7.webp (100%)
rename src/{features/demo => }/assets/images/cover/img8.webp (100%)
rename src/{features/demo => }/assets/images/cover/img9.webp (100%)
rename src/{features/demo => }/assets/images/draw/draw1.png (100%)
rename src/{features/demo => }/assets/images/favicon.ico (100%)
rename src/{features/demo => }/assets/images/lock/bg_dark.webp (100%)
rename src/{features/demo => }/assets/images/lock/bg_light.webp (100%)
rename src/{features/demo => }/assets/images/login/lf_icon2.webp (100%)
rename src/{features/demo => }/assets/images/safeguard/server.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_layouts/dual_column.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_layouts/horizontal.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_layouts/mixed.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_layouts/vertical.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_styles/dark.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_styles/design.png (100%)
rename src/{features/demo => }/assets/images/settings/menu_styles/light.png (100%)
rename src/{features/demo => }/assets/images/settings/theme_styles/dark.png (100%)
rename src/{features/demo => }/assets/images/settings/theme_styles/light.png (100%)
rename src/{features/demo => }/assets/images/settings/theme_styles/system.png (100%)
rename src/{features/demo => }/assets/images/svg/403.svg (100%)
rename src/{features/demo => }/assets/images/svg/404.svg (100%)
rename src/{features/demo => }/assets/images/svg/500.svg (100%)
rename src/{features/demo => }/assets/images/svg/login_icon.svg (100%)
rename src/{app => }/assets/images/tools/auth.png (100%)
rename src/{features/demo => }/assets/images/user/avatar.webp (100%)
rename src/{features/demo => }/assets/images/user/bg.webp (100%)
rename src/{features/demo => }/assets/svg/loading.ts (100%)
rename src/{app => }/enums/appEnum.ts (100%)
rename src/{app => }/enums/dict-enum.ts (100%)
rename src/{app => }/enums/formEnum.ts (100%)
rename src/{app => }/enums/index.ts (100%)
rename src/{app => }/enums/terminal-enum.ts (100%)
rename src/{app => locales}/lang/en/member/member.user.json (100%)
rename src/{app => locales}/lang/en/monitor/logs.login.json (100%)
rename src/{app => locales}/lang/en/monitor/logs.operate.json (100%)
rename src/{app => locales}/lang/en/monitor/monitor.redis.json (100%)
rename src/{app => locales}/lang/en/monitor/monitor.server.json (100%)
rename src/{app => locales}/lang/en/setting/setting.config.json (100%)
rename src/{app => locales}/lang/en/setting/setting.dept.json (100%)
rename src/{app => locales}/lang/en/setting/setting.dict.item.json (100%)
rename src/{app => locales}/lang/en/setting/setting.dict.json (100%)
rename src/{app => locales}/lang/en/setting/setting.gateway.limiter.json (100%)
rename src/{app => locales}/lang/en/setting/setting.message.json (100%)
rename src/{app => locales}/lang/en/setting/setting.notice.json (100%)
rename src/{app => locales}/lang/en/setting/setting.post.json (100%)
rename src/{app => locales}/lang/en/system/system.menu.json (100%)
rename src/{app => locales}/lang/en/system/system.role.json (100%)
rename src/{app => locales}/lang/en/system/system.user.center.json (100%)
rename src/{app => locales}/lang/en/system/system.user.json (100%)
rename src/{app => locales}/lang/en/tools/tools.crontab.json (100%)
rename src/{app => locales}/lang/en/tools/tools.crontab.log.json (100%)
rename src/{app => locales}/lang/en/tools/tools.delegation.json (100%)
rename src/{app => locales}/lang/en/tools/tools.features.json (100%)
rename src/{app => locales}/lang/en/tools/tools.files.json (100%)
rename src/{app => locales}/lang/en/tools/tools.generator.code.json (100%)
rename src/{app => locales}/lang/en/tools/tools.plugin.develop.json (100%)
rename src/{app => locales}/lang/en/tools/tools.recycle.json (100%)
rename src/{app => locales}/lang/en/tools/tools.terminal.json (100%)
rename src/{app => locales}/lang/en/web/web.link.json (100%)
rename src/{app => locales}/lang/en/web/web.menu.json (100%)
rename src/{app => locales}/lang/zh-cn/member/member.level.json (100%)
rename src/{app => locales}/lang/zh-cn/member/member.points.json (100%)
rename src/{app => locales}/lang/zh-cn/member/member.tag.json (100%)
rename src/{app => locales}/lang/zh-cn/member/member.user.json (100%)
rename src/{app => locales}/lang/zh-cn/monitor/logs.login.json (100%)
rename src/{app => locales}/lang/zh-cn/monitor/logs.operate.json (100%)
rename src/{app => locales}/lang/zh-cn/monitor/monitor.redis.json (100%)
rename src/{app => locales}/lang/zh-cn/monitor/monitor.server.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.config.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.dept.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.dict.item.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.dict.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.gateway.blacklist.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.gateway.limiter.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.message.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.notice.json (100%)
rename src/{app => locales}/lang/zh-cn/setting/setting.post.json (100%)
rename src/{app => locales}/lang/zh-cn/system/system.menu.json (100%)
rename src/{app => locales}/lang/zh-cn/system/system.role.json (100%)
rename src/{app => locales}/lang/zh-cn/system/system.user.center.json (100%)
rename src/{app => locales}/lang/zh-cn/system/system.user.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.crontab.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.crontab.log.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.delegation.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.features.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.files.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.generator.code.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.plugin.develop.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.recycle.json (100%)
rename src/{app => locales}/lang/zh-cn/tools/tools.terminal.json (100%)
rename src/{app => locales}/lang/zh-cn/web/web.link.json (100%)
rename src/{app => locales}/lang/zh-cn/web/web.menu.json (100%)
rename src/router/core/{FeatureModuleScanner.ts => AppsModuleScanner.ts} (72%)
rename src/router/core/{FeatureRouteManager.ts => AppsRouteManager.ts} (81%)
rename src/{features/demo => }/views/auth/forget-password/index.vue (100%)
rename src/{app => }/views/auth/login/index.vue (98%)
rename src/{features/demo => }/views/auth/login/style.css (100%)
rename src/{features/demo => }/views/auth/register/index.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/index.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/customer-satisfaction.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/sales-mapping-by-country.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/target-vs-reality.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/today-sales.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/top-products.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/total-revenue.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/visitor-insights.vue (100%)
rename src/{features/demo/views/dashboard/analysis => views/dashboard/analytics}/modules/volume-service-level.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/index.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/annual-sales.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/banner.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/cart-conversion-rate.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/hot-commodity.vue (100%)
rename src/{app => }/views/dashboard/ecommerce/modules/hot-products-list.vue (93%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/product-sales.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/recent-transaction.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/sales-classification.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/sales-growth.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/sales-trend.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/total-order-volume.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/total-products.vue (100%)
rename src/{features/demo => }/views/dashboard/ecommerce/modules/transaction-list.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/index.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/about-project.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/active-user.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/card-list.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/dynamic-stats.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/new-user.vue (91%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/sales-overview.vue (100%)
rename src/{features/demo/views/dashboard/console => views/dashboard/workspace}/modules/todo-list.vue (100%)
rename src/{app => }/views/dev/index.vue (100%)
rename src/{features/demo => }/views/exception/403/index.vue (100%)
rename src/{features/demo => }/views/exception/404/index.vue (100%)
rename src/{features/demo => }/views/exception/500/index.vue (100%)
rename src/{app => }/views/member/level/index.vue (100%)
rename src/{app => }/views/member/level/schemas/index.tsx (98%)
rename src/{app => }/views/member/points/index.vue (100%)
rename src/{app => }/views/member/points/schemas/index.tsx (98%)
rename src/{app => }/views/member/tag/index.vue (100%)
rename src/{app => }/views/member/tag/schemas/index.tsx (98%)
rename src/{app => }/views/member/user/components/adjust-points-modal.vue (97%)
rename src/{app => }/views/member/user/components/assign-tag-modal.vue (97%)
rename src/{app => }/views/member/user/components/reset-password-modal.vue (97%)
rename src/{app => }/views/member/user/index.vue (100%)
rename src/{app => }/views/member/user/schemas/index.tsx (98%)
rename src/{app => }/views/monitor/logs/login/index.vue (100%)
rename src/{app => }/views/monitor/logs/login/schemas/index.tsx (98%)
rename src/{app => }/views/monitor/logs/operate/index.vue (100%)
rename src/{app => }/views/monitor/logs/operate/schemas/index.tsx (97%)
rename src/{app => }/views/monitor/redis/index.vue (99%)
rename src/{app => }/views/monitor/server/index.vue (99%)
rename src/{app => }/views/setting/config/index.vue (100%)
rename src/{app => }/views/setting/config/modules/email.vue (98%)
rename src/{app => }/views/setting/config/modules/site.vue (97%)
rename src/{app => }/views/setting/config/modules/sms.vue (96%)
rename src/{app => }/views/setting/config/modules/upload-ext-drawer.vue (99%)
rename src/{app => }/views/setting/config/modules/upload.vue (96%)
rename src/{app => }/views/setting/config/schemas/index.tsx (100%)
rename src/{app => }/views/setting/dept/index.vue (100%)
rename src/{app => }/views/setting/dept/schemas/index.tsx (98%)
rename src/{app => }/views/setting/dict-item/index.vue (100%)
rename src/{app => }/views/setting/dict-item/schemas/index.tsx (98%)
rename src/{app => }/views/setting/dict/dict-item-wrap.vue (100%)
rename src/{app => }/views/setting/dict/index.vue (100%)
rename src/{app => }/views/setting/dict/schemas/index.tsx (98%)
rename src/{app => }/views/setting/gateway/blacklist/index.vue (100%)
rename src/{app => }/views/setting/gateway/blacklist/schemas/index.tsx (98%)
rename src/{app => }/views/setting/gateway/limiter/index.vue (100%)
rename src/{app => }/views/setting/gateway/limiter/schemas/index.tsx (98%)
rename src/{app => }/views/setting/message/index.vue (100%)
rename src/{app => }/views/setting/message/modules/detail.vue (100%)
rename src/{app => }/views/setting/message/modules/form.vue (94%)
rename src/{app => }/views/setting/message/schemas/index.tsx (98%)
rename src/{app => }/views/setting/notice/index.vue (95%)
rename src/{app => }/views/setting/notice/schemas/index.tsx (97%)
rename src/{app => }/views/setting/post/index.vue (100%)
rename src/{app => }/views/setting/post/schemas/index.tsx (97%)
rename src/{app => }/views/system/menu/index.vue (100%)
rename src/{app => }/views/system/menu/initerface-list.vue (98%)
rename src/{app => }/views/system/menu/schemas/index.tsx (99%)
rename src/{app => }/views/system/role/add-user.vue (98%)
rename src/{app => }/views/system/role/auth-menu.vue (97%)
rename src/{app => }/views/system/role/data-scope.vue (98%)
rename src/{app => }/views/system/role/index.vue (100%)
rename src/{app => }/views/system/role/schemas/index.tsx (98%)
rename src/{app => }/views/system/role/user-role.vue (98%)
rename src/{app => }/views/system/user-center/index.vue (98%)
rename src/{app => }/views/system/user-center/schemas/index.tsx (94%)
rename src/{app => }/views/system/user/grant-role.vue (97%)
rename src/{app => }/views/system/user/index.vue (100%)
rename src/{app => }/views/system/user/online-user-detail.vue (98%)
rename src/{app => }/views/system/user/online-user-list.vue (99%)
rename src/{app => }/views/system/user/schemas/index.tsx (99%)
rename src/{app => }/views/tools/crontab-log/index.vue (100%)
rename src/{app => }/views/tools/crontab-log/schemas/index.tsx (98%)
rename src/{app => }/views/tools/crontab/index.vue (98%)
rename src/{app => }/views/tools/crontab/logs-wrap.vue (100%)
rename src/{app => }/views/tools/crontab/schemas/index.tsx (99%)
rename src/{app => }/views/tools/delegation/authorization.vue (96%)
rename src/{app => }/views/tools/delegation/index.vue (96%)
rename src/{app => }/views/tools/features/components/index.ts (100%)
rename src/{app => }/views/tools/features/components/module-detail.vue (100%)
rename src/{app => }/views/tools/features/components/module-list.vue (100%)
rename src/{app => }/views/tools/features/components/table-header.vue (100%)
rename src/{app => }/views/tools/features/components/upgrade-log.vue (100%)
rename src/{app => }/views/tools/features/index.vue (98%)
rename src/{app => }/views/tools/features/store.ts (100%)
rename src/{app => }/views/tools/files/index.vue (98%)
rename src/{app => }/views/tools/files/schemas/index.tsx (97%)
rename src/{app => }/views/tools/generator/components/basic-settings.vue (99%)
rename src/{app => }/views/tools/generator/components/code-preview.vue (99%)
rename src/{app => }/views/tools/generator/components/field-settings.vue (100%)
rename src/{app => }/views/tools/generator/components/generate-config.vue (100%)
rename src/{app => }/views/tools/generator/components/import-table.vue (97%)
rename src/{app => }/views/tools/generator/components/relation-settings.vue (100%)
rename src/{app => }/views/tools/generator/generator.vue (98%)
rename src/{app => }/views/tools/generator/index.vue (97%)
rename src/{app => }/views/tools/generator/schemas/index.tsx (98%)
rename src/{features => views/tools/plugin}/.gitignore (100%)
rename src/{app => }/views/tools/plugin/develop/index.vue (90%)
rename src/{app => }/views/tools/plugin/develop/schemas/index.tsx (98%)
rename src/{app => }/views/tools/recycle/index.vue (94%)
rename src/{app => }/views/tools/recycle/schemas/index.tsx (97%)
rename src/{app => }/views/web/link/index.vue (100%)
rename src/{app => }/views/web/link/schemas/index.tsx (98%)
rename src/{app => }/views/web/menu/index.vue (100%)
rename src/{app => }/views/web/menu/schemas/index.tsx (99%)
diff --git a/.auto-import.json b/.auto-import.json
index 2f09d16c..9e1f8ba3 100644
--- a/.auto-import.json
+++ b/.auto-import.json
@@ -7,6 +7,7 @@
"EffectScope": true,
"ElLoading": true,
"ElMessage": true,
+ "ElTag": true,
"ExtractDefaultPropTypes": true,
"ExtractPropTypes": true,
"ExtractPublicPropTypes": true,
diff --git a/AI_CONTEXT.md b/AI_CONTEXT.md
index 1b6e07e6..39902aa8 100644
--- a/AI_CONTEXT.md
+++ b/AI_CONTEXT.md
@@ -65,7 +65,7 @@ src/app/views/{模块名}/{实体名}/
```typescript
import { BaseService } from '@/utils/request'
-import { {EntityName}Row } from '@/app/api/{模块名}/models/{实体名}-model'
+import { {EntityName}Row } from '@/api/{模块名}/models/{实体名}-model'
/**
* {实体名} API 服务
@@ -98,7 +98,7 @@ export default {EntityName}Service
```typescript
import { CrudSchema } from '@/components/crud'
-import { {EntityName}Service } from '@/app/api/{模块名}/{实体名}'
+import { {EntityName}Service } from '@/api/{模块名}/{实体名}'
import { $t } from '@/locales'
/**
@@ -477,7 +477,7 @@ const handleCreateSuccess = () => {
```typescript
import { BaseService } from '@/utils/request'
-import { PostRow } from '@/app/api/system/models/post-model'
+import { PostRow } from '@/api/system/models/post-model'
/**
* 岗位管理 API 服务
@@ -493,7 +493,7 @@ export default PostService
```typescript
import { CrudSchema } from '@/components/crud'
-import { PostService } from '@/app/api/system/post'
+import { PostService } from '@/api/system/post'
import { $t } from '@/locales'
/** 岗位管理 CRUD 配置 */
@@ -692,7 +692,7 @@ export const crudSchema = (): CrudSchema => {
```typescript
import { BaseService } from '@/utils/request'
-import { DeptRow } from '@/app/api/system/models/dept-model'
+import { DeptRow } from '@/api/system/models/dept-model'
/**
* 部门管理 API 服务
@@ -714,7 +714,7 @@ export default DeptService
``tsx
import { CrudSchema } from '@/components/crud'
-import { DeptService, getDeptTree } from '@/app/api/system/dept'
+import { DeptService, getDeptTree } from '@/api/system/dept'
import { $t } from '@/locales'
/** 部门管理 CRUD 配置 */
diff --git a/src/app/api/core/base.ts b/src/api/core/base.ts
similarity index 100%
rename from src/app/api/core/base.ts
rename to src/api/core/base.ts
diff --git a/src/app/api/core/dict-api.ts b/src/api/core/dict-api.ts
similarity index 100%
rename from src/app/api/core/dict-api.ts
rename to src/api/core/dict-api.ts
diff --git a/src/app/api/core/download.ts b/src/api/core/download.ts
similarity index 100%
rename from src/app/api/core/download.ts
rename to src/api/core/download.ts
diff --git a/src/app/api/member/index.ts b/src/api/member/index.ts
similarity index 100%
rename from src/app/api/member/index.ts
rename to src/api/member/index.ts
diff --git a/src/app/api/member/level/index.ts b/src/api/member/level/index.ts
similarity index 94%
rename from src/app/api/member/level/index.ts
rename to src/api/member/level/index.ts
index d263e8cb..ad56f69c 100644
--- a/src/app/api/member/level/index.ts
+++ b/src/api/member/level/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import request from '@/utils/http'
import type { MemberLevel } from './level-model'
diff --git a/src/app/api/member/level/level-model.d.ts b/src/api/member/level/level-model.d.ts
similarity index 100%
rename from src/app/api/member/level/level-model.d.ts
rename to src/api/member/level/level-model.d.ts
diff --git a/src/app/api/member/points/index.ts b/src/api/member/points/index.ts
similarity index 95%
rename from src/app/api/member/points/index.ts
rename to src/api/member/points/index.ts
index 78f1b4fa..6eccf154 100644
--- a/src/app/api/member/points/index.ts
+++ b/src/api/member/points/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import request from '@/utils/http'
import type { MemberPointsLog } from './points-model'
diff --git a/src/app/api/member/points/points-model.d.ts b/src/api/member/points/points-model.d.ts
similarity index 100%
rename from src/app/api/member/points/points-model.d.ts
rename to src/api/member/points/points-model.d.ts
diff --git a/src/app/api/member/tag/index.ts b/src/api/member/tag/index.ts
similarity index 94%
rename from src/app/api/member/tag/index.ts
rename to src/api/member/tag/index.ts
index 03b5fd80..2df68d9d 100644
--- a/src/app/api/member/tag/index.ts
+++ b/src/api/member/tag/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import request from '@/utils/http'
import type { MemberTag } from './tag-model'
diff --git a/src/app/api/member/tag/tag-model.d.ts b/src/api/member/tag/tag-model.d.ts
similarity index 100%
rename from src/app/api/member/tag/tag-model.d.ts
rename to src/api/member/tag/tag-model.d.ts
diff --git a/src/app/api/member/user/index.ts b/src/api/member/user/index.ts
similarity index 96%
rename from src/app/api/member/user/index.ts
rename to src/api/member/user/index.ts
index a0b3e6bc..2b1d3143 100644
--- a/src/app/api/member/user/index.ts
+++ b/src/api/member/user/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import request from '@/utils/http'
import type { Member } from './user-model'
diff --git a/src/app/api/member/user/user-model.d.ts b/src/api/member/user/user-model.d.ts
similarity index 100%
rename from src/app/api/member/user/user-model.d.ts
rename to src/api/member/user/user-model.d.ts
diff --git a/src/app/api/monitor/logs/index.ts b/src/api/monitor/logs/index.ts
similarity index 100%
rename from src/app/api/monitor/logs/index.ts
rename to src/api/monitor/logs/index.ts
diff --git a/src/app/api/monitor/logs/logs-model.d.ts b/src/api/monitor/logs/logs-model.d.ts
similarity index 100%
rename from src/app/api/monitor/logs/logs-model.d.ts
rename to src/api/monitor/logs/logs-model.d.ts
diff --git a/src/app/api/monitor/logs/logs.ts b/src/api/monitor/logs/logs.ts
similarity index 91%
rename from src/app/api/monitor/logs/logs.ts
rename to src/api/monitor/logs/logs.ts
index 9dff8f46..2235fd79 100644
--- a/src/app/api/monitor/logs/logs.ts
+++ b/src/api/monitor/logs/logs.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import type { LoginRecordRow, OperateRecordRow } from './logs-model';
const loginBaseUrl = '/logs/login';
diff --git a/src/app/api/monitor/redis/index.ts b/src/api/monitor/redis/index.ts
similarity index 100%
rename from src/app/api/monitor/redis/index.ts
rename to src/api/monitor/redis/index.ts
diff --git a/src/app/api/monitor/redis/redis-model.d.ts b/src/api/monitor/redis/redis-model.d.ts
similarity index 100%
rename from src/app/api/monitor/redis/redis-model.d.ts
rename to src/api/monitor/redis/redis-model.d.ts
diff --git a/src/app/api/monitor/redis/redis.ts b/src/api/monitor/redis/redis.ts
similarity index 100%
rename from src/app/api/monitor/redis/redis.ts
rename to src/api/monitor/redis/redis.ts
diff --git a/src/app/api/monitor/server/index.ts b/src/api/monitor/server/index.ts
similarity index 100%
rename from src/app/api/monitor/server/index.ts
rename to src/api/monitor/server/index.ts
diff --git a/src/app/api/monitor/server/server-model.d.ts b/src/api/monitor/server/server-model.d.ts
similarity index 100%
rename from src/app/api/monitor/server/server-model.d.ts
rename to src/api/monitor/server/server-model.d.ts
diff --git a/src/app/api/monitor/server/server.ts b/src/api/monitor/server/server.ts
similarity index 100%
rename from src/app/api/monitor/server/server.ts
rename to src/api/monitor/server/server.ts
diff --git a/src/app/api/request.ts b/src/api/request.ts
similarity index 100%
rename from src/app/api/request.ts
rename to src/api/request.ts
diff --git a/src/app/api/setting/config/config-model.d.ts b/src/api/setting/config/config-model.d.ts
similarity index 100%
rename from src/app/api/setting/config/config-model.d.ts
rename to src/api/setting/config/config-model.d.ts
diff --git a/src/app/api/setting/config/config.ts b/src/api/setting/config/config.ts
similarity index 100%
rename from src/app/api/setting/config/config.ts
rename to src/api/setting/config/config.ts
diff --git a/src/app/api/setting/config/index.ts b/src/api/setting/config/index.ts
similarity index 100%
rename from src/app/api/setting/config/index.ts
rename to src/api/setting/config/index.ts
diff --git a/src/app/api/setting/dept/dept-model.d.ts b/src/api/setting/dept/dept-model.d.ts
similarity index 100%
rename from src/app/api/setting/dept/dept-model.d.ts
rename to src/api/setting/dept/dept-model.d.ts
diff --git a/src/app/api/setting/dept/dept.ts b/src/api/setting/dept/dept.ts
similarity index 89%
rename from src/app/api/setting/dept/dept.ts
rename to src/api/setting/dept/dept.ts
index 7a5e1b3a..69685db3 100644
--- a/src/app/api/setting/dept/dept.ts
+++ b/src/api/setting/dept/dept.ts
@@ -1,4 +1,4 @@
-import BaseService from "@/app/api/core/base";
+import BaseService from "@/api/core/base";
import type { DeptRow, DeptTree } from "./dept-model";
import request from '@/utils/http';
diff --git a/src/app/api/setting/dept/index.ts b/src/api/setting/dept/index.ts
similarity index 100%
rename from src/app/api/setting/dept/index.ts
rename to src/api/setting/dept/index.ts
diff --git a/src/app/api/setting/dict/dict-item-model.d.ts b/src/api/setting/dict/dict-item-model.d.ts
similarity index 100%
rename from src/app/api/setting/dict/dict-item-model.d.ts
rename to src/api/setting/dict/dict-item-model.d.ts
diff --git a/src/app/api/setting/dict/dict-item.ts b/src/api/setting/dict/dict-item.ts
similarity index 81%
rename from src/app/api/setting/dict/dict-item.ts
rename to src/api/setting/dict/dict-item.ts
index ca9f5682..9d4edec7 100644
--- a/src/app/api/setting/dict/dict-item.ts
+++ b/src/api/setting/dict/dict-item.ts
@@ -1,4 +1,4 @@
-import BaseService from "@/app/api/core/base";
+import BaseService from "@/api/core/base";
import type { DictItemRow } from "./dict-item-model";
const baseUrl = '/system/dict-item';
diff --git a/src/app/api/setting/dict/dict-model.d.ts b/src/api/setting/dict/dict-model.d.ts
similarity index 100%
rename from src/app/api/setting/dict/dict-model.d.ts
rename to src/api/setting/dict/dict-model.d.ts
diff --git a/src/app/api/setting/dict/dict.ts b/src/api/setting/dict/dict.ts
similarity index 93%
rename from src/app/api/setting/dict/dict.ts
rename to src/api/setting/dict/dict.ts
index f325c7fc..4ef6e051 100644
--- a/src/app/api/setting/dict/dict.ts
+++ b/src/api/setting/dict/dict.ts
@@ -1,4 +1,4 @@
-import BaseService from "@/app/api/core/base";
+import BaseService from "@/api/core/base";
import type { DictOptions, DictRow } from "./dict-model";
import request from '@/utils/http';
diff --git a/src/app/api/setting/dict/index.ts b/src/api/setting/dict/index.ts
similarity index 100%
rename from src/app/api/setting/dict/index.ts
rename to src/api/setting/dict/index.ts
diff --git a/src/app/api/setting/gateway/index.ts b/src/api/setting/gateway/index.ts
similarity index 88%
rename from src/app/api/setting/gateway/index.ts
rename to src/api/setting/gateway/index.ts
index 70832f50..e017df1f 100644
--- a/src/app/api/setting/gateway/index.ts
+++ b/src/api/setting/gateway/index.ts
@@ -1,5 +1,5 @@
-import BaseService from "@/app/api/core/base";
+import BaseService from "@/api/core/base";
import type { GatewayLimiterRow, GatewayBlacklistRow } from "./model";
diff --git a/src/app/api/setting/gateway/model.d.ts b/src/api/setting/gateway/model.d.ts
similarity index 100%
rename from src/app/api/setting/gateway/model.d.ts
rename to src/api/setting/gateway/model.d.ts
diff --git a/src/app/api/setting/message/index.ts b/src/api/setting/message/index.ts
similarity index 94%
rename from src/app/api/setting/message/index.ts
rename to src/api/setting/message/index.ts
index ee9b958d..03b475f5 100644
--- a/src/app/api/setting/message/index.ts
+++ b/src/api/setting/message/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import type { MessageRow } from "./model";
import request from '@/utils/http';
diff --git a/src/app/api/setting/message/model.d.ts b/src/api/setting/message/model.d.ts
similarity index 100%
rename from src/app/api/setting/message/model.d.ts
rename to src/api/setting/message/model.d.ts
diff --git a/src/app/api/setting/notice/index.ts b/src/api/setting/notice/index.ts
similarity index 88%
rename from src/app/api/setting/notice/index.ts
rename to src/api/setting/notice/index.ts
index 52d030e5..c528fc81 100644
--- a/src/app/api/setting/notice/index.ts
+++ b/src/api/setting/notice/index.ts
@@ -1,4 +1,4 @@
-import BaseService from "@/app/api/core/base";
+import BaseService from "@/api/core/base";
import type { NoticeRow } from "./model";
import request from '@/utils/http';
diff --git a/src/app/api/setting/notice/model.d.ts b/src/api/setting/notice/model.d.ts
similarity index 100%
rename from src/app/api/setting/notice/model.d.ts
rename to src/api/setting/notice/model.d.ts
diff --git a/src/app/api/setting/post/index.ts b/src/api/setting/post/index.ts
similarity index 100%
rename from src/app/api/setting/post/index.ts
rename to src/api/setting/post/index.ts
diff --git a/src/app/api/setting/post/post-model.d.ts b/src/api/setting/post/post-model.d.ts
similarity index 100%
rename from src/app/api/setting/post/post-model.d.ts
rename to src/api/setting/post/post-model.d.ts
diff --git a/src/app/api/setting/post/post.ts b/src/api/setting/post/post.ts
similarity index 79%
rename from src/app/api/setting/post/post.ts
rename to src/api/setting/post/post.ts
index 5252f728..36e33bfa 100644
--- a/src/app/api/setting/post/post.ts
+++ b/src/api/setting/post/post.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import type { PostRow } from './post-model';
const baseUrl = '/org/post';
diff --git a/src/app/api/system/auth/auth-model.d.ts b/src/api/system/auth/auth-model.d.ts
similarity index 100%
rename from src/app/api/system/auth/auth-model.d.ts
rename to src/api/system/auth/auth-model.d.ts
diff --git a/src/app/api/system/auth/auth.ts b/src/api/system/auth/auth.ts
similarity index 94%
rename from src/app/api/system/auth/auth.ts
rename to src/api/system/auth/auth.ts
index b9e7ec0f..47f5f5b6 100644
--- a/src/app/api/system/auth/auth.ts
+++ b/src/api/system/auth/auth.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import request from '@/utils/http';
const baseUrl = '/system/auth';
@@ -63,7 +63,7 @@ export const AuthService = {
},
fetchGetMenuList() {
// 获取用户菜单列表-返回前端路由格式
- return request.get({ url: `${baseUrl}/user-menus` ,params: { format: 'art' } });
+ return request.get({ url: `${baseUrl}/user-menus`, params: { format: 'art' } });
}
};
diff --git a/src/app/api/system/auth/index.ts b/src/api/system/auth/index.ts
similarity index 100%
rename from src/app/api/system/auth/index.ts
rename to src/api/system/auth/index.ts
diff --git a/src/app/api/system/index.ts b/src/api/system/index.ts
similarity index 100%
rename from src/app/api/system/index.ts
rename to src/api/system/index.ts
diff --git a/src/app/api/system/menu/index.ts b/src/api/system/menu/index.ts
similarity index 100%
rename from src/app/api/system/menu/index.ts
rename to src/api/system/menu/index.ts
diff --git a/src/app/api/system/menu/menu-model.d.ts b/src/api/system/menu/menu-model.d.ts
similarity index 100%
rename from src/app/api/system/menu/menu-model.d.ts
rename to src/api/system/menu/menu-model.d.ts
diff --git a/src/app/api/system/menu/menu.ts b/src/api/system/menu/menu.ts
similarity index 92%
rename from src/app/api/system/menu/menu.ts
rename to src/api/system/menu/menu.ts
index ba472250..180c5eed 100644
--- a/src/app/api/system/menu/menu.ts
+++ b/src/api/system/menu/menu.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import type { MenuRow } from './menu-model';
import request from '@/utils/http';
diff --git a/src/app/api/system/profile/index.ts b/src/api/system/profile/index.ts
similarity index 100%
rename from src/app/api/system/profile/index.ts
rename to src/api/system/profile/index.ts
diff --git a/src/app/api/system/profile/model.d.ts b/src/api/system/profile/model.d.ts
similarity index 100%
rename from src/app/api/system/profile/model.d.ts
rename to src/api/system/profile/model.d.ts
diff --git a/src/app/api/system/role/index.ts b/src/api/system/role/index.ts
similarity index 100%
rename from src/app/api/system/role/index.ts
rename to src/api/system/role/index.ts
diff --git a/src/app/api/system/role/role-model.d.ts b/src/api/system/role/role-model.d.ts
similarity index 100%
rename from src/app/api/system/role/role-model.d.ts
rename to src/api/system/role/role-model.d.ts
diff --git a/src/app/api/system/role/role.ts b/src/api/system/role/role.ts
similarity index 92%
rename from src/app/api/system/role/role.ts
rename to src/api/system/role/role.ts
index 467adc4e..2e70c534 100644
--- a/src/app/api/system/role/role.ts
+++ b/src/api/system/role/role.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import request from '@/utils/http'
import type { RoleRow } from './role-model'
import type { DeptTree } from '../../org/dept/dept-model'
diff --git a/src/app/api/system/rule/index.ts b/src/api/system/rule/index.ts
similarity index 100%
rename from src/app/api/system/rule/index.ts
rename to src/api/system/rule/index.ts
diff --git a/src/app/api/system/rule/rule-model.d.ts b/src/api/system/rule/rule-model.d.ts
similarity index 100%
rename from src/app/api/system/rule/rule-model.d.ts
rename to src/api/system/rule/rule-model.d.ts
diff --git a/src/app/api/system/rule/rule.ts b/src/api/system/rule/rule.ts
similarity index 94%
rename from src/app/api/system/rule/rule.ts
rename to src/api/system/rule/rule.ts
index 67a869c0..187ca24b 100644
--- a/src/app/api/system/rule/rule.ts
+++ b/src/api/system/rule/rule.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import request from '@/utils/http';
import type { RouteRow } from './rule-model';
diff --git a/src/app/api/system/user/index.ts b/src/api/system/user/index.ts
similarity index 100%
rename from src/app/api/system/user/index.ts
rename to src/api/system/user/index.ts
diff --git a/src/app/api/system/user/user-model.d.ts b/src/api/system/user/user-model.d.ts
similarity index 100%
rename from src/app/api/system/user/user-model.d.ts
rename to src/api/system/user/user-model.d.ts
diff --git a/src/app/api/system/user/user.ts b/src/api/system/user/user.ts
similarity index 96%
rename from src/app/api/system/user/user.ts
rename to src/api/system/user/user.ts
index e672d208..67d1469c 100644
--- a/src/app/api/system/user/user.ts
+++ b/src/api/system/user/user.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import request from '@/utils/http';
import type { User } from './user-model';
diff --git a/src/app/api/tools/crontab/crontab-model.d.ts b/src/api/tools/crontab/crontab-model.d.ts
similarity index 100%
rename from src/app/api/tools/crontab/crontab-model.d.ts
rename to src/api/tools/crontab/crontab-model.d.ts
diff --git a/src/app/api/tools/crontab/crontab.ts b/src/api/tools/crontab/crontab.ts
similarity index 96%
rename from src/app/api/tools/crontab/crontab.ts
rename to src/api/tools/crontab/crontab.ts
index 5d4c226b..ae1386f1 100644
--- a/src/app/api/tools/crontab/crontab.ts
+++ b/src/api/tools/crontab/crontab.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import type { CrontabLogRow, CrontabRow } from './crontab-model'
import request from '@/utils/http'
diff --git a/src/app/api/tools/crontab/index.ts b/src/api/tools/crontab/index.ts
similarity index 100%
rename from src/app/api/tools/crontab/index.ts
rename to src/api/tools/crontab/index.ts
diff --git a/src/app/api/tools/delegation/index.ts b/src/api/tools/delegation/index.ts
similarity index 100%
rename from src/app/api/tools/delegation/index.ts
rename to src/api/tools/delegation/index.ts
diff --git a/src/app/api/tools/delegation/model.d.ts b/src/api/tools/delegation/model.d.ts
similarity index 100%
rename from src/app/api/tools/delegation/model.d.ts
rename to src/api/tools/delegation/model.d.ts
diff --git a/src/app/api/tools/features/index.ts b/src/api/tools/features/index.ts
similarity index 98%
rename from src/app/api/tools/features/index.ts
rename to src/api/tools/features/index.ts
index b142817a..578faeaa 100644
--- a/src/app/api/tools/features/index.ts
+++ b/src/api/tools/features/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base'
+import BaseService from '@/api/core/base'
import type {
FeaturesRow,
FeaturesSearchParams,
diff --git a/src/app/api/tools/features/model.d.ts b/src/api/tools/features/model.d.ts
similarity index 100%
rename from src/app/api/tools/features/model.d.ts
rename to src/api/tools/features/model.d.ts
diff --git a/src/app/api/tools/files/files-model.d.ts b/src/api/tools/files/files-model.d.ts
similarity index 100%
rename from src/app/api/tools/files/files-model.d.ts
rename to src/api/tools/files/files-model.d.ts
diff --git a/src/app/api/tools/files/files.ts b/src/api/tools/files/files.ts
similarity index 61%
rename from src/app/api/tools/files/files.ts
rename to src/api/tools/files/files.ts
index 150df0b8..b359e9ff 100644
--- a/src/app/api/tools/files/files.ts
+++ b/src/api/tools/files/files.ts
@@ -1,8 +1,8 @@
-import BaseService from '@/app/api/core/base';
-import request from '@/utils/http';
-import type { FilesRow } from './files-model';
+import BaseService from "@/api/core/base";
+import request from "@/utils/http";
+import type { FilesRow } from "./files-model";
-const baseUrl = '/files';
+const baseUrl = "/files";
export const FilesService = {
...BaseService({ baseUrl }),
@@ -14,21 +14,20 @@ export const FilesService = {
downloadById(id: string | number) {
return request.get({
url: `${baseUrl}/download-by-id/${id}`,
- responseType: 'blob',
+ responseType: "blob",
isResponse: true,
} as any);
},
-
/**
- * 通过文件id集合获取文件信息
- * @param data
- */
+ * 通过文件id集合获取文件信息
+ * @param data
+ */
getFileInfoByIds(params: any) {
return request.post({
- url: '/sys/fileInfo/getFileInfoByIds',
- params
- })
+ url: "/sys/fileInfo/getFileInfoByIds",
+ params,
+ });
},
/**
* 初始化切片
@@ -37,9 +36,9 @@ export const FilesService = {
initiateMultipartUpload(params: any) {
return request.post({
- url: '/sys/fileInfo/initiateMultipartUpload',
- params
- })
+ url: "/sys/fileInfo/initiateMultipartUpload",
+ params,
+ });
},
/**
@@ -47,7 +46,7 @@ export const FilesService = {
* /sys/fileInfo/uploadPart
*/
uploadPart(data: any) {
- return request.upload('/sys/fileInfo/uploadPart', data)
+ return request.upload("/sys/fileInfo/uploadPart", data);
},
/**
* 已完成分片上传-告知合并
@@ -55,9 +54,9 @@ export const FilesService = {
*/
completeMultipartUpload(params: any) {
return request.post({
- url: '/sys/fileInfo/completeMultipartUpload',
- params
- })
+ url: "/sys/fileInfo/completeMultipartUpload",
+ params,
+ });
},
/**
* 取消分片上传
@@ -65,10 +64,10 @@ export const FilesService = {
*/
abortMultipartUpload(params: any) {
return request.post({
- url: '/sys/fileInfo/abortMultipartUpload',
- params
- })
- }
+ url: "/sys/fileInfo/abortMultipartUpload",
+ params,
+ });
+ },
};
export default FilesService;
diff --git a/src/app/api/tools/files/index.ts b/src/api/tools/files/index.ts
similarity index 100%
rename from src/app/api/tools/files/index.ts
rename to src/api/tools/files/index.ts
diff --git a/src/app/api/tools/generator/index.ts b/src/api/tools/generator/index.ts
similarity index 100%
rename from src/app/api/tools/generator/index.ts
rename to src/api/tools/generator/index.ts
diff --git a/src/app/api/tools/generator/model.d.ts b/src/api/tools/generator/model.d.ts
similarity index 100%
rename from src/app/api/tools/generator/model.d.ts
rename to src/api/tools/generator/model.d.ts
diff --git a/src/app/api/tools/module/index.ts b/src/api/tools/module/index.ts
similarity index 95%
rename from src/app/api/tools/module/index.ts
rename to src/api/tools/module/index.ts
index 460f123e..88ac5ca5 100644
--- a/src/app/api/tools/module/index.ts
+++ b/src/api/tools/module/index.ts
@@ -1,4 +1,4 @@
-import BaseService from "@/app/api/core/base";
+import BaseService from "@/api/core/base";
import type { ModuleRow } from "./model";
import request from '@/utils/http';
diff --git a/src/app/api/tools/module/model.d.ts b/src/api/tools/module/model.d.ts
similarity index 100%
rename from src/app/api/tools/module/model.d.ts
rename to src/api/tools/module/model.d.ts
diff --git a/src/app/api/tools/plugin-develop/index.ts b/src/api/tools/plugin-develop/index.ts
similarity index 63%
rename from src/app/api/tools/plugin-develop/index.ts
rename to src/api/tools/plugin-develop/index.ts
index f9a7f9af..b9335edd 100644
--- a/src/app/api/tools/plugin-develop/index.ts
+++ b/src/api/tools/plugin-develop/index.ts
@@ -1,5 +1,5 @@
-import BaseService from '@/app/api/core/base';
-import type {PluginDevelopRow} from './model';
+import BaseService from '@/api/core/base';
+import type { PluginDevelopRow } from './model';
const baseUrl = '/plugin/develop';
diff --git a/src/app/api/tools/plugin-develop/model.ts b/src/api/tools/plugin-develop/model.ts
similarity index 100%
rename from src/app/api/tools/plugin-develop/model.ts
rename to src/api/tools/plugin-develop/model.ts
diff --git a/src/app/api/tools/recycle/index.ts b/src/api/tools/recycle/index.ts
similarity index 100%
rename from src/app/api/tools/recycle/index.ts
rename to src/api/tools/recycle/index.ts
diff --git a/src/app/api/tools/recycle/recycle-bin-model.d.ts b/src/api/tools/recycle/recycle-bin-model.d.ts
similarity index 100%
rename from src/app/api/tools/recycle/recycle-bin-model.d.ts
rename to src/api/tools/recycle/recycle-bin-model.d.ts
diff --git a/src/app/api/tools/recycle/recycle.ts b/src/api/tools/recycle/recycle.ts
similarity index 87%
rename from src/app/api/tools/recycle/recycle.ts
rename to src/api/tools/recycle/recycle.ts
index 674ac133..86ba5cf0 100644
--- a/src/app/api/tools/recycle/recycle.ts
+++ b/src/api/tools/recycle/recycle.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import request from '@/utils/http';
import type { RecycleBinRow } from './recycle-bin-model';
diff --git a/src/app/api/tools/terminal/index.ts b/src/api/tools/terminal/index.ts
similarity index 90%
rename from src/app/api/tools/terminal/index.ts
rename to src/api/tools/terminal/index.ts
index c0b5bdac..f71b6781 100644
--- a/src/app/api/tools/terminal/index.ts
+++ b/src/api/tools/terminal/index.ts
@@ -1,5 +1,5 @@
-import BaseService from '@/app/api/core/base';
-import { getApiBaseUrl } from '@/app/api/request';
+import BaseService from '@/api/core/base';
+import { getApiBaseUrl } from '@/api/request';
import { useUserStore } from '@/store/modules/user';
import request from '@/utils/http';
diff --git a/src/app/api/tools/terminal/model.d.ts b/src/api/tools/terminal/model.d.ts
similarity index 100%
rename from src/app/api/tools/terminal/model.d.ts
rename to src/api/tools/terminal/model.d.ts
diff --git a/src/app/api/web/index.ts b/src/api/web/index.ts
similarity index 100%
rename from src/app/api/web/index.ts
rename to src/api/web/index.ts
diff --git a/src/app/api/web/link/index.ts b/src/api/web/link/index.ts
similarity index 84%
rename from src/app/api/web/link/index.ts
rename to src/api/web/link/index.ts
index 1d8addec..b7204197 100644
--- a/src/app/api/web/link/index.ts
+++ b/src/api/web/link/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import request from '@/utils/http';
import type { Link } from './link-model';
diff --git a/src/app/api/web/link/link-model.d.ts b/src/api/web/link/link-model.d.ts
similarity index 100%
rename from src/app/api/web/link/link-model.d.ts
rename to src/api/web/link/link-model.d.ts
diff --git a/src/app/api/web/menu/index.ts b/src/api/web/menu/index.ts
similarity index 84%
rename from src/app/api/web/menu/index.ts
rename to src/api/web/menu/index.ts
index 17797449..a404b01c 100644
--- a/src/app/api/web/menu/index.ts
+++ b/src/api/web/menu/index.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
import request from '@/utils/http';
import type { Menu } from './menu-model';
diff --git a/src/app/api/web/menu/menu-model.d.ts b/src/api/web/menu/menu-model.d.ts
similarity index 100%
rename from src/app/api/web/menu/menu-model.d.ts
rename to src/api/web/menu/menu-model.d.ts
diff --git a/src/app/views/tools/plugin/.gitignore b/src/apps/.gitignore
similarity index 100%
rename from src/app/views/tools/plugin/.gitignore
rename to src/apps/.gitignore
diff --git a/src/features/demo/api/auth.ts b/src/apps/demo/api/auth.ts
similarity index 82%
rename from src/features/demo/api/auth.ts
rename to src/apps/demo/api/auth.ts
index 9dc7b6a2..a9f45df2 100644
--- a/src/features/demo/api/auth.ts
+++ b/src/apps/demo/api/auth.ts
@@ -1,4 +1,4 @@
-import request from '@/utils/http'
+import request from "@/utils/http";
/**
* 登录
@@ -7,11 +7,11 @@ import request from '@/utils/http'
*/
export function fetchLogin(params: Api.Auth.LoginParams) {
return request.post({
- url: '/api/auth/login',
- params
+ url: "/api/auth/login",
+ params,
// showSuccessMessage: true // 显示成功消息
// showErrorMessage: false // 不显示错误消息
- })
+ });
}
/**
@@ -20,10 +20,10 @@ export function fetchLogin(params: Api.Auth.LoginParams) {
*/
export function fetchGetUserInfo() {
return request.get({
- url: '/api/user/info'
+ url: "/api/user/info",
// 自定义请求头
// headers: {
// 'X-Custom-Header': 'your-custom-value'
// }
- })
+ });
}
diff --git a/src/features/demo/api/dictApi.ts b/src/apps/demo/api/dictApi.ts
similarity index 100%
rename from src/features/demo/api/dictApi.ts
rename to src/apps/demo/api/dictApi.ts
diff --git a/src/features/demo/api/hello_world.ts b/src/apps/demo/api/hello_world.ts
similarity index 74%
rename from src/features/demo/api/hello_world.ts
rename to src/apps/demo/api/hello_world.ts
index c7d2d5b4..64fea239 100644
--- a/src/features/demo/api/hello_world.ts
+++ b/src/apps/demo/api/hello_world.ts
@@ -1,4 +1,4 @@
-import BaseService from '@/app/api/core/base';
+import BaseService from '@/api/core/base';
diff --git a/src/features/demo/api/system-manage.ts b/src/apps/demo/api/system-manage.ts
similarity index 100%
rename from src/features/demo/api/system-manage.ts
rename to src/apps/demo/api/system-manage.ts
diff --git a/src/app/assets/images/3d/icon1.webp b/src/apps/demo/assets/images/3d/icon1.webp
similarity index 100%
rename from src/app/assets/images/3d/icon1.webp
rename to src/apps/demo/assets/images/3d/icon1.webp
diff --git a/src/app/assets/images/3d/icon2.webp b/src/apps/demo/assets/images/3d/icon2.webp
similarity index 100%
rename from src/app/assets/images/3d/icon2.webp
rename to src/apps/demo/assets/images/3d/icon2.webp
diff --git a/src/app/assets/images/3d/icon3.webp b/src/apps/demo/assets/images/3d/icon3.webp
similarity index 100%
rename from src/app/assets/images/3d/icon3.webp
rename to src/apps/demo/assets/images/3d/icon3.webp
diff --git a/src/app/assets/images/3d/icon4.webp b/src/apps/demo/assets/images/3d/icon4.webp
similarity index 100%
rename from src/app/assets/images/3d/icon4.webp
rename to src/apps/demo/assets/images/3d/icon4.webp
diff --git a/src/app/assets/images/3d/icon5.webp b/src/apps/demo/assets/images/3d/icon5.webp
similarity index 100%
rename from src/app/assets/images/3d/icon5.webp
rename to src/apps/demo/assets/images/3d/icon5.webp
diff --git a/src/app/assets/images/3d/icon6.webp b/src/apps/demo/assets/images/3d/icon6.webp
similarity index 100%
rename from src/app/assets/images/3d/icon6.webp
rename to src/apps/demo/assets/images/3d/icon6.webp
diff --git a/src/app/assets/images/3d/icon7.webp b/src/apps/demo/assets/images/3d/icon7.webp
similarity index 100%
rename from src/app/assets/images/3d/icon7.webp
rename to src/apps/demo/assets/images/3d/icon7.webp
diff --git a/src/app/assets/images/3d/icon8.webp b/src/apps/demo/assets/images/3d/icon8.webp
similarity index 100%
rename from src/app/assets/images/3d/icon8.webp
rename to src/apps/demo/assets/images/3d/icon8.webp
diff --git a/src/app/assets/images/avatar/avatar.webp b/src/apps/demo/assets/images/avatar/avatar.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar.webp
rename to src/apps/demo/assets/images/avatar/avatar.webp
diff --git a/src/app/assets/images/avatar/avatar1.webp b/src/apps/demo/assets/images/avatar/avatar1.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar1.webp
rename to src/apps/demo/assets/images/avatar/avatar1.webp
diff --git a/src/app/assets/images/avatar/avatar10.webp b/src/apps/demo/assets/images/avatar/avatar10.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar10.webp
rename to src/apps/demo/assets/images/avatar/avatar10.webp
diff --git a/src/app/assets/images/avatar/avatar2.webp b/src/apps/demo/assets/images/avatar/avatar2.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar2.webp
rename to src/apps/demo/assets/images/avatar/avatar2.webp
diff --git a/src/app/assets/images/avatar/avatar3.webp b/src/apps/demo/assets/images/avatar/avatar3.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar3.webp
rename to src/apps/demo/assets/images/avatar/avatar3.webp
diff --git a/src/app/assets/images/avatar/avatar4.webp b/src/apps/demo/assets/images/avatar/avatar4.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar4.webp
rename to src/apps/demo/assets/images/avatar/avatar4.webp
diff --git a/src/app/assets/images/avatar/avatar5.webp b/src/apps/demo/assets/images/avatar/avatar5.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar5.webp
rename to src/apps/demo/assets/images/avatar/avatar5.webp
diff --git a/src/app/assets/images/avatar/avatar6.webp b/src/apps/demo/assets/images/avatar/avatar6.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar6.webp
rename to src/apps/demo/assets/images/avatar/avatar6.webp
diff --git a/src/app/assets/images/avatar/avatar7.webp b/src/apps/demo/assets/images/avatar/avatar7.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar7.webp
rename to src/apps/demo/assets/images/avatar/avatar7.webp
diff --git a/src/app/assets/images/avatar/avatar8.webp b/src/apps/demo/assets/images/avatar/avatar8.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar8.webp
rename to src/apps/demo/assets/images/avatar/avatar8.webp
diff --git a/src/app/assets/images/avatar/avatar9.webp b/src/apps/demo/assets/images/avatar/avatar9.webp
similarity index 100%
rename from src/app/assets/images/avatar/avatar9.webp
rename to src/apps/demo/assets/images/avatar/avatar9.webp
diff --git a/src/app/assets/images/ceremony/hb.png b/src/apps/demo/assets/images/ceremony/hb.png
similarity index 100%
rename from src/app/assets/images/ceremony/hb.png
rename to src/apps/demo/assets/images/ceremony/hb.png
diff --git a/src/app/assets/images/ceremony/sd.png b/src/apps/demo/assets/images/ceremony/sd.png
similarity index 100%
rename from src/app/assets/images/ceremony/sd.png
rename to src/apps/demo/assets/images/ceremony/sd.png
diff --git a/src/app/assets/images/ceremony/xc.png b/src/apps/demo/assets/images/ceremony/xc.png
similarity index 100%
rename from src/app/assets/images/ceremony/xc.png
rename to src/apps/demo/assets/images/ceremony/xc.png
diff --git a/src/app/assets/images/ceremony/yd.png b/src/apps/demo/assets/images/ceremony/yd.png
similarity index 100%
rename from src/app/assets/images/ceremony/yd.png
rename to src/apps/demo/assets/images/ceremony/yd.png
diff --git a/src/app/assets/images/common/logo.webp b/src/apps/demo/assets/images/common/logo.webp
similarity index 100%
rename from src/app/assets/images/common/logo.webp
rename to src/apps/demo/assets/images/common/logo.webp
diff --git a/src/app/assets/images/cover/img1.webp b/src/apps/demo/assets/images/cover/img1.webp
similarity index 100%
rename from src/app/assets/images/cover/img1.webp
rename to src/apps/demo/assets/images/cover/img1.webp
diff --git a/src/app/assets/images/cover/img10.webp b/src/apps/demo/assets/images/cover/img10.webp
similarity index 100%
rename from src/app/assets/images/cover/img10.webp
rename to src/apps/demo/assets/images/cover/img10.webp
diff --git a/src/app/assets/images/cover/img2.webp b/src/apps/demo/assets/images/cover/img2.webp
similarity index 100%
rename from src/app/assets/images/cover/img2.webp
rename to src/apps/demo/assets/images/cover/img2.webp
diff --git a/src/app/assets/images/cover/img3.webp b/src/apps/demo/assets/images/cover/img3.webp
similarity index 100%
rename from src/app/assets/images/cover/img3.webp
rename to src/apps/demo/assets/images/cover/img3.webp
diff --git a/src/app/assets/images/cover/img4.webp b/src/apps/demo/assets/images/cover/img4.webp
similarity index 100%
rename from src/app/assets/images/cover/img4.webp
rename to src/apps/demo/assets/images/cover/img4.webp
diff --git a/src/app/assets/images/cover/img5.webp b/src/apps/demo/assets/images/cover/img5.webp
similarity index 100%
rename from src/app/assets/images/cover/img5.webp
rename to src/apps/demo/assets/images/cover/img5.webp
diff --git a/src/app/assets/images/cover/img6.webp b/src/apps/demo/assets/images/cover/img6.webp
similarity index 100%
rename from src/app/assets/images/cover/img6.webp
rename to src/apps/demo/assets/images/cover/img6.webp
diff --git a/src/app/assets/images/cover/img7.webp b/src/apps/demo/assets/images/cover/img7.webp
similarity index 100%
rename from src/app/assets/images/cover/img7.webp
rename to src/apps/demo/assets/images/cover/img7.webp
diff --git a/src/app/assets/images/cover/img8.webp b/src/apps/demo/assets/images/cover/img8.webp
similarity index 100%
rename from src/app/assets/images/cover/img8.webp
rename to src/apps/demo/assets/images/cover/img8.webp
diff --git a/src/app/assets/images/cover/img9.webp b/src/apps/demo/assets/images/cover/img9.webp
similarity index 100%
rename from src/app/assets/images/cover/img9.webp
rename to src/apps/demo/assets/images/cover/img9.webp
diff --git a/src/app/assets/images/draw/draw1.png b/src/apps/demo/assets/images/draw/draw1.png
similarity index 100%
rename from src/app/assets/images/draw/draw1.png
rename to src/apps/demo/assets/images/draw/draw1.png
diff --git a/src/app/assets/images/favicon.ico b/src/apps/demo/assets/images/favicon.ico
similarity index 100%
rename from src/app/assets/images/favicon.ico
rename to src/apps/demo/assets/images/favicon.ico
diff --git a/src/app/assets/images/lock/bg_dark.webp b/src/apps/demo/assets/images/lock/bg_dark.webp
similarity index 100%
rename from src/app/assets/images/lock/bg_dark.webp
rename to src/apps/demo/assets/images/lock/bg_dark.webp
diff --git a/src/app/assets/images/lock/bg_light.webp b/src/apps/demo/assets/images/lock/bg_light.webp
similarity index 100%
rename from src/app/assets/images/lock/bg_light.webp
rename to src/apps/demo/assets/images/lock/bg_light.webp
diff --git a/src/app/assets/images/login/lf_icon2.webp b/src/apps/demo/assets/images/login/lf_icon2.webp
similarity index 100%
rename from src/app/assets/images/login/lf_icon2.webp
rename to src/apps/demo/assets/images/login/lf_icon2.webp
diff --git a/src/app/assets/images/safeguard/server.png b/src/apps/demo/assets/images/safeguard/server.png
similarity index 100%
rename from src/app/assets/images/safeguard/server.png
rename to src/apps/demo/assets/images/safeguard/server.png
diff --git a/src/app/assets/images/settings/menu_layouts/dual_column.png b/src/apps/demo/assets/images/settings/menu_layouts/dual_column.png
similarity index 100%
rename from src/app/assets/images/settings/menu_layouts/dual_column.png
rename to src/apps/demo/assets/images/settings/menu_layouts/dual_column.png
diff --git a/src/app/assets/images/settings/menu_layouts/horizontal.png b/src/apps/demo/assets/images/settings/menu_layouts/horizontal.png
similarity index 100%
rename from src/app/assets/images/settings/menu_layouts/horizontal.png
rename to src/apps/demo/assets/images/settings/menu_layouts/horizontal.png
diff --git a/src/app/assets/images/settings/menu_layouts/mixed.png b/src/apps/demo/assets/images/settings/menu_layouts/mixed.png
similarity index 100%
rename from src/app/assets/images/settings/menu_layouts/mixed.png
rename to src/apps/demo/assets/images/settings/menu_layouts/mixed.png
diff --git a/src/app/assets/images/settings/menu_layouts/vertical.png b/src/apps/demo/assets/images/settings/menu_layouts/vertical.png
similarity index 100%
rename from src/app/assets/images/settings/menu_layouts/vertical.png
rename to src/apps/demo/assets/images/settings/menu_layouts/vertical.png
diff --git a/src/app/assets/images/settings/menu_styles/dark.png b/src/apps/demo/assets/images/settings/menu_styles/dark.png
similarity index 100%
rename from src/app/assets/images/settings/menu_styles/dark.png
rename to src/apps/demo/assets/images/settings/menu_styles/dark.png
diff --git a/src/app/assets/images/settings/menu_styles/design.png b/src/apps/demo/assets/images/settings/menu_styles/design.png
similarity index 100%
rename from src/app/assets/images/settings/menu_styles/design.png
rename to src/apps/demo/assets/images/settings/menu_styles/design.png
diff --git a/src/app/assets/images/settings/menu_styles/light.png b/src/apps/demo/assets/images/settings/menu_styles/light.png
similarity index 100%
rename from src/app/assets/images/settings/menu_styles/light.png
rename to src/apps/demo/assets/images/settings/menu_styles/light.png
diff --git a/src/app/assets/images/settings/theme_styles/dark.png b/src/apps/demo/assets/images/settings/theme_styles/dark.png
similarity index 100%
rename from src/app/assets/images/settings/theme_styles/dark.png
rename to src/apps/demo/assets/images/settings/theme_styles/dark.png
diff --git a/src/app/assets/images/settings/theme_styles/light.png b/src/apps/demo/assets/images/settings/theme_styles/light.png
similarity index 100%
rename from src/app/assets/images/settings/theme_styles/light.png
rename to src/apps/demo/assets/images/settings/theme_styles/light.png
diff --git a/src/app/assets/images/settings/theme_styles/system.png b/src/apps/demo/assets/images/settings/theme_styles/system.png
similarity index 100%
rename from src/app/assets/images/settings/theme_styles/system.png
rename to src/apps/demo/assets/images/settings/theme_styles/system.png
diff --git a/src/app/assets/images/svg/403.svg b/src/apps/demo/assets/images/svg/403.svg
similarity index 100%
rename from src/app/assets/images/svg/403.svg
rename to src/apps/demo/assets/images/svg/403.svg
diff --git a/src/app/assets/images/svg/404.svg b/src/apps/demo/assets/images/svg/404.svg
similarity index 100%
rename from src/app/assets/images/svg/404.svg
rename to src/apps/demo/assets/images/svg/404.svg
diff --git a/src/app/assets/images/svg/500.svg b/src/apps/demo/assets/images/svg/500.svg
similarity index 100%
rename from src/app/assets/images/svg/500.svg
rename to src/apps/demo/assets/images/svg/500.svg
diff --git a/src/app/assets/images/svg/login_icon.svg b/src/apps/demo/assets/images/svg/login_icon.svg
similarity index 100%
rename from src/app/assets/images/svg/login_icon.svg
rename to src/apps/demo/assets/images/svg/login_icon.svg
diff --git a/src/app/assets/images/user/avatar.webp b/src/apps/demo/assets/images/user/avatar.webp
similarity index 100%
rename from src/app/assets/images/user/avatar.webp
rename to src/apps/demo/assets/images/user/avatar.webp
diff --git a/src/app/assets/images/user/bg.webp b/src/apps/demo/assets/images/user/bg.webp
similarity index 100%
rename from src/app/assets/images/user/bg.webp
rename to src/apps/demo/assets/images/user/bg.webp
diff --git a/src/features/demo/assets/styles/core/app.scss b/src/apps/demo/assets/styles/core/app.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/app.scss
rename to src/apps/demo/assets/styles/core/app.scss
diff --git a/src/features/demo/assets/styles/core/dark.scss b/src/apps/demo/assets/styles/core/dark.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/dark.scss
rename to src/apps/demo/assets/styles/core/dark.scss
diff --git a/src/features/demo/assets/styles/core/el-dark.scss b/src/apps/demo/assets/styles/core/el-dark.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/el-dark.scss
rename to src/apps/demo/assets/styles/core/el-dark.scss
diff --git a/src/features/demo/assets/styles/core/el-light.scss b/src/apps/demo/assets/styles/core/el-light.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/el-light.scss
rename to src/apps/demo/assets/styles/core/el-light.scss
diff --git a/src/features/demo/assets/styles/core/el-ui.scss b/src/apps/demo/assets/styles/core/el-ui.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/el-ui.scss
rename to src/apps/demo/assets/styles/core/el-ui.scss
diff --git a/src/features/demo/assets/styles/core/md.scss b/src/apps/demo/assets/styles/core/md.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/md.scss
rename to src/apps/demo/assets/styles/core/md.scss
diff --git a/src/features/demo/assets/styles/core/mixin.scss b/src/apps/demo/assets/styles/core/mixin.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/mixin.scss
rename to src/apps/demo/assets/styles/core/mixin.scss
diff --git a/src/features/demo/assets/styles/core/reset.scss b/src/apps/demo/assets/styles/core/reset.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/reset.scss
rename to src/apps/demo/assets/styles/core/reset.scss
diff --git a/src/features/demo/assets/styles/core/router-transition.scss b/src/apps/demo/assets/styles/core/router-transition.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/router-transition.scss
rename to src/apps/demo/assets/styles/core/router-transition.scss
diff --git a/src/features/demo/assets/styles/core/tailwind.css b/src/apps/demo/assets/styles/core/tailwind.css
similarity index 100%
rename from src/features/demo/assets/styles/core/tailwind.css
rename to src/apps/demo/assets/styles/core/tailwind.css
diff --git a/src/features/demo/assets/styles/core/theme-animation.scss b/src/apps/demo/assets/styles/core/theme-animation.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/theme-animation.scss
rename to src/apps/demo/assets/styles/core/theme-animation.scss
diff --git a/src/features/demo/assets/styles/core/theme-change.scss b/src/apps/demo/assets/styles/core/theme-change.scss
similarity index 100%
rename from src/features/demo/assets/styles/core/theme-change.scss
rename to src/apps/demo/assets/styles/core/theme-change.scss
diff --git a/src/features/demo/assets/styles/custom/one-dark-pro.scss b/src/apps/demo/assets/styles/custom/one-dark-pro.scss
similarity index 100%
rename from src/features/demo/assets/styles/custom/one-dark-pro.scss
rename to src/apps/demo/assets/styles/custom/one-dark-pro.scss
diff --git a/src/features/demo/assets/styles/index.scss b/src/apps/demo/assets/styles/index.scss
similarity index 100%
rename from src/features/demo/assets/styles/index.scss
rename to src/apps/demo/assets/styles/index.scss
diff --git a/src/app/assets/svg/loading.ts b/src/apps/demo/assets/svg/loading.ts
similarity index 100%
rename from src/app/assets/svg/loading.ts
rename to src/apps/demo/assets/svg/loading.ts
diff --git a/src/features/demo/lang/en/demo.json b/src/apps/demo/lang/en/demo.json
similarity index 100%
rename from src/features/demo/lang/en/demo.json
rename to src/apps/demo/lang/en/demo.json
diff --git a/src/features/demo/lang/zh-cn/demo.json b/src/apps/demo/lang/zh-cn/demo.json
similarity index 100%
rename from src/features/demo/lang/zh-cn/demo.json
rename to src/apps/demo/lang/zh-cn/demo.json
diff --git a/src/features/demo/mock/json/chinaMap.json b/src/apps/demo/mock/json/chinaMap.json
similarity index 100%
rename from src/features/demo/mock/json/chinaMap.json
rename to src/apps/demo/mock/json/chinaMap.json
diff --git a/src/features/demo/mock/temp/articleList.ts b/src/apps/demo/mock/temp/articleList.ts
similarity index 100%
rename from src/features/demo/mock/temp/articleList.ts
rename to src/apps/demo/mock/temp/articleList.ts
diff --git a/src/features/demo/mock/temp/commentDetail.ts b/src/apps/demo/mock/temp/commentDetail.ts
similarity index 100%
rename from src/features/demo/mock/temp/commentDetail.ts
rename to src/apps/demo/mock/temp/commentDetail.ts
diff --git a/src/features/demo/mock/temp/commentList.ts b/src/apps/demo/mock/temp/commentList.ts
similarity index 100%
rename from src/features/demo/mock/temp/commentList.ts
rename to src/apps/demo/mock/temp/commentList.ts
diff --git a/src/features/demo/mock/temp/formData.ts b/src/apps/demo/mock/temp/formData.ts
similarity index 100%
rename from src/features/demo/mock/temp/formData.ts
rename to src/apps/demo/mock/temp/formData.ts
diff --git a/src/features/demo/mock/upgrade/changeLog.ts b/src/apps/demo/mock/upgrade/changeLog.ts
similarity index 100%
rename from src/features/demo/mock/upgrade/changeLog.ts
rename to src/apps/demo/mock/upgrade/changeLog.ts
diff --git a/src/features/demo/routes/article.ts b/src/apps/demo/routes/article.ts
similarity index 100%
rename from src/features/demo/routes/article.ts
rename to src/apps/demo/routes/article.ts
diff --git a/src/features/demo/routes/dashboard.ts b/src/apps/demo/routes/dashboard.ts
similarity index 100%
rename from src/features/demo/routes/dashboard.ts
rename to src/apps/demo/routes/dashboard.ts
diff --git a/src/features/demo/routes/examples.ts b/src/apps/demo/routes/examples.ts
similarity index 100%
rename from src/features/demo/routes/examples.ts
rename to src/apps/demo/routes/examples.ts
diff --git a/src/features/demo/routes/exception.ts b/src/apps/demo/routes/exception.ts
similarity index 100%
rename from src/features/demo/routes/exception.ts
rename to src/apps/demo/routes/exception.ts
diff --git a/src/features/demo/routes/help.ts b/src/apps/demo/routes/help.ts
similarity index 100%
rename from src/features/demo/routes/help.ts
rename to src/apps/demo/routes/help.ts
diff --git a/src/features/demo/routes/index.ts b/src/apps/demo/routes/index.ts
similarity index 100%
rename from src/features/demo/routes/index.ts
rename to src/apps/demo/routes/index.ts
diff --git a/src/features/demo/routes/result.ts b/src/apps/demo/routes/result.ts
similarity index 100%
rename from src/features/demo/routes/result.ts
rename to src/apps/demo/routes/result.ts
diff --git a/src/features/demo/routes/safeguard.ts b/src/apps/demo/routes/safeguard.ts
similarity index 100%
rename from src/features/demo/routes/safeguard.ts
rename to src/apps/demo/routes/safeguard.ts
diff --git a/src/features/demo/routes/system.ts b/src/apps/demo/routes/system.ts
similarity index 100%
rename from src/features/demo/routes/system.ts
rename to src/apps/demo/routes/system.ts
diff --git a/src/features/demo/routes/template.ts b/src/apps/demo/routes/template.ts
similarity index 100%
rename from src/features/demo/routes/template.ts
rename to src/apps/demo/routes/template.ts
diff --git a/src/features/demo/routes/widgets.ts b/src/apps/demo/routes/widgets.ts
similarity index 100%
rename from src/features/demo/routes/widgets.ts
rename to src/apps/demo/routes/widgets.ts
diff --git a/src/features/demo/views/article/comment/index.vue b/src/apps/demo/views/article/comment/index.vue
similarity index 69%
rename from src/features/demo/views/article/comment/index.vue
rename to src/apps/demo/views/article/comment/index.vue
index 6a3f5da0..44e6ff36 100644
--- a/src/features/demo/views/article/comment/index.vue
+++ b/src/apps/demo/views/article/comment/index.vue
@@ -73,60 +73,68 @@
diff --git a/src/features/demo/views/article/detail/index.vue b/src/apps/demo/views/article/detail/index.vue
similarity index 100%
rename from src/features/demo/views/article/detail/index.vue
rename to src/apps/demo/views/article/detail/index.vue
diff --git a/src/features/demo/views/article/list/index.vue b/src/apps/demo/views/article/list/index.vue
similarity index 98%
rename from src/features/demo/views/article/list/index.vue
rename to src/apps/demo/views/article/list/index.vue
index 78e7a33f..3034c7c4 100644
--- a/src/features/demo/views/article/list/index.vue
+++ b/src/apps/demo/views/article/list/index.vue
@@ -99,7 +99,7 @@ import { Search } from "@element-plus/icons-vue";
import { router } from "@/router";
import { useDateFormat } from "@vueuse/core";
import EmojiText from "@/utils/ui/emojo";
-import { ArticleList } from "@/features/demo/mock/temp/articleList";
+import { ArticleList } from "@/apps/demo/mock/temp/articleList";
import { useCommon } from "@/hooks/core/useCommon";
defineOptions({ name: "ArticleList" });
diff --git a/src/features/demo/views/article/publish/index.vue b/src/apps/demo/views/article/publish/index.vue
similarity index 99%
rename from src/features/demo/views/article/publish/index.vue
rename to src/apps/demo/views/article/publish/index.vue
index bf550f28..50968a8a 100644
--- a/src/features/demo/views/article/publish/index.vue
+++ b/src/apps/demo/views/article/publish/index.vue
@@ -80,7 +80,7 @@
import { ApiStatus } from '@/utils/http/status'
import { useUserStore } from '@/store/modules/user'
import EmojiText from '@/utils/ui/emojo'
- import { PageModeEnum } from '@/app/enums/formEnum'
+ import { PageModeEnum } from '@/enums/formEnum'
import axios from 'axios'
import { useCommon } from '@/hooks/core/useCommon'
diff --git a/src/app/views/auth/forget-password/index.vue b/src/apps/demo/views/auth/forget-password/index.vue
similarity index 100%
rename from src/app/views/auth/forget-password/index.vue
rename to src/apps/demo/views/auth/forget-password/index.vue
diff --git a/src/features/demo/views/auth/login/index.vue b/src/apps/demo/views/auth/login/index.vue
similarity index 99%
rename from src/features/demo/views/auth/login/index.vue
rename to src/apps/demo/views/auth/login/index.vue
index e9961993..7cb91716 100644
--- a/src/features/demo/views/auth/login/index.vue
+++ b/src/apps/demo/views/auth/login/index.vue
@@ -112,7 +112,7 @@
import { useUserStore } from '@/store/modules/user'
import { useI18n } from 'vue-i18n'
import { HttpError } from '@/utils/http/error'
- import { fetchLogin } from '@/features/demo/api/auth'
+ import { fetchLogin } from '@/apps/demo/api/auth'
import { ElNotification, type FormInstance, type FormRules } from 'element-plus'
import { useSettingStore } from '@/store/modules/setting'
diff --git a/src/app/views/auth/login/style.css b/src/apps/demo/views/auth/login/style.css
similarity index 100%
rename from src/app/views/auth/login/style.css
rename to src/apps/demo/views/auth/login/style.css
diff --git a/src/app/views/auth/register/index.vue b/src/apps/demo/views/auth/register/index.vue
similarity index 100%
rename from src/app/views/auth/register/index.vue
rename to src/apps/demo/views/auth/register/index.vue
diff --git a/src/features/demo/views/change/log/index.vue b/src/apps/demo/views/change/log/index.vue
similarity index 95%
rename from src/features/demo/views/change/log/index.vue
rename to src/apps/demo/views/change/log/index.vue
index ca09a033..2308087a 100644
--- a/src/features/demo/views/change/log/index.vue
+++ b/src/apps/demo/views/change/log/index.vue
@@ -47,7 +47,7 @@
diff --git a/src/app/views/dashboard/analytics/index.vue b/src/apps/demo/views/dashboard/analysis/index.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/index.vue
rename to src/apps/demo/views/dashboard/analysis/index.vue
diff --git a/src/app/views/dashboard/analytics/modules/customer-satisfaction.vue b/src/apps/demo/views/dashboard/analysis/modules/customer-satisfaction.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/customer-satisfaction.vue
rename to src/apps/demo/views/dashboard/analysis/modules/customer-satisfaction.vue
diff --git a/src/app/views/dashboard/analytics/modules/sales-mapping-by-country.vue b/src/apps/demo/views/dashboard/analysis/modules/sales-mapping-by-country.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/sales-mapping-by-country.vue
rename to src/apps/demo/views/dashboard/analysis/modules/sales-mapping-by-country.vue
diff --git a/src/app/views/dashboard/analytics/modules/target-vs-reality.vue b/src/apps/demo/views/dashboard/analysis/modules/target-vs-reality.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/target-vs-reality.vue
rename to src/apps/demo/views/dashboard/analysis/modules/target-vs-reality.vue
diff --git a/src/app/views/dashboard/analytics/modules/today-sales.vue b/src/apps/demo/views/dashboard/analysis/modules/today-sales.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/today-sales.vue
rename to src/apps/demo/views/dashboard/analysis/modules/today-sales.vue
diff --git a/src/app/views/dashboard/analytics/modules/top-products.vue b/src/apps/demo/views/dashboard/analysis/modules/top-products.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/top-products.vue
rename to src/apps/demo/views/dashboard/analysis/modules/top-products.vue
diff --git a/src/app/views/dashboard/analytics/modules/total-revenue.vue b/src/apps/demo/views/dashboard/analysis/modules/total-revenue.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/total-revenue.vue
rename to src/apps/demo/views/dashboard/analysis/modules/total-revenue.vue
diff --git a/src/app/views/dashboard/analytics/modules/visitor-insights.vue b/src/apps/demo/views/dashboard/analysis/modules/visitor-insights.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/visitor-insights.vue
rename to src/apps/demo/views/dashboard/analysis/modules/visitor-insights.vue
diff --git a/src/app/views/dashboard/analytics/modules/volume-service-level.vue b/src/apps/demo/views/dashboard/analysis/modules/volume-service-level.vue
similarity index 100%
rename from src/app/views/dashboard/analytics/modules/volume-service-level.vue
rename to src/apps/demo/views/dashboard/analysis/modules/volume-service-level.vue
diff --git a/src/app/views/dashboard/workspace/index.vue b/src/apps/demo/views/dashboard/console/index.vue
similarity index 100%
rename from src/app/views/dashboard/workspace/index.vue
rename to src/apps/demo/views/dashboard/console/index.vue
diff --git a/src/app/views/dashboard/workspace/modules/about-project.vue b/src/apps/demo/views/dashboard/console/modules/about-project.vue
similarity index 100%
rename from src/app/views/dashboard/workspace/modules/about-project.vue
rename to src/apps/demo/views/dashboard/console/modules/about-project.vue
diff --git a/src/app/views/dashboard/workspace/modules/active-user.vue b/src/apps/demo/views/dashboard/console/modules/active-user.vue
similarity index 100%
rename from src/app/views/dashboard/workspace/modules/active-user.vue
rename to src/apps/demo/views/dashboard/console/modules/active-user.vue
diff --git a/src/app/views/dashboard/workspace/modules/card-list.vue b/src/apps/demo/views/dashboard/console/modules/card-list.vue
similarity index 100%
rename from src/app/views/dashboard/workspace/modules/card-list.vue
rename to src/apps/demo/views/dashboard/console/modules/card-list.vue
diff --git a/src/app/views/dashboard/workspace/modules/dynamic-stats.vue b/src/apps/demo/views/dashboard/console/modules/dynamic-stats.vue
similarity index 100%
rename from src/app/views/dashboard/workspace/modules/dynamic-stats.vue
rename to src/apps/demo/views/dashboard/console/modules/dynamic-stats.vue
diff --git a/src/app/views/dashboard/workspace/modules/new-user.vue b/src/apps/demo/views/dashboard/console/modules/new-user.vue
similarity index 91%
rename from src/app/views/dashboard/workspace/modules/new-user.vue
rename to src/apps/demo/views/dashboard/console/modules/new-user.vue
index 761878c1..9d395228 100644
--- a/src/app/views/dashboard/workspace/modules/new-user.vue
+++ b/src/apps/demo/views/dashboard/console/modules/new-user.vue
@@ -53,12 +53,12 @@
diff --git a/src/components/core/layouts/art-fireworks-effect/index.vue b/src/components/core/layouts/art-fireworks-effect/index.vue
index 7c7461d1..be852744 100644
--- a/src/components/core/layouts/art-fireworks-effect/index.vue
+++ b/src/components/core/layouts/art-fireworks-effect/index.vue
@@ -10,9 +10,9 @@
import { useEventListener } from '@vueuse/core'
import { mittBus } from '@/utils/sys'
import type { Handler } from 'mitt'
- import bp from '@/app/assets/images/ceremony/hb.png'
- import sd from '@/app/assets/images/ceremony/sd.png'
- import yd from '@/app/assets/images/ceremony/yd.png'
+ import bp from '@/assets/images/ceremony/hb.png'
+ import sd from '@/assets/images/ceremony/sd.png'
+ import yd from '@/assets/images/ceremony/yd.png'
defineOptions({ name: 'ArtFireworksEffect' })
diff --git a/src/components/core/layouts/art-header-bar/index.vue b/src/components/core/layouts/art-header-bar/index.vue
index 0d00c601..e09443c3 100755
--- a/src/components/core/layouts/art-header-bar/index.vue
+++ b/src/components/core/layouts/art-header-bar/index.vue
@@ -206,7 +206,7 @@
import { useI18n } from "vue-i18n";
import { useRouter } from "vue-router";
import { useFullscreen, useWindowSize } from "@vueuse/core";
-import { LanguageEnum, MenuTypeEnum } from "@/app/enums/appEnum";
+import { LanguageEnum, MenuTypeEnum } from "@/enums/appEnum";
import { useSettingStore } from "@/store/modules/setting";
import { useUserStore } from "@/store/modules/user";
import { useMenuStore } from "@/store/modules/menu";
diff --git a/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue b/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
index 2ed7c04a..b4c80f72 100755
--- a/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
+++ b/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
@@ -132,7 +132,7 @@
diff --git a/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts b/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts
index a2a58dca..35e8066e 100644
--- a/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts
+++ b/src/components/core/layouts/art-settings-panel/composables/useSettingsConfig.ts
@@ -1,6 +1,6 @@
import { computed } from 'vue'
import { useI18n } from 'vue-i18n'
-import { ContainerWidthEnum } from '@/app/enums/appEnum'
+import { ContainerWidthEnum } from '@/enums/appEnum'
import AppConfig from '@/config'
import { headerBarConfig } from '@/config/modules/headerBar'
diff --git a/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts b/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts
index d957879c..392c6900 100644
--- a/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts
+++ b/src/components/core/layouts/art-settings-panel/composables/useSettingsHandlers.ts
@@ -1,6 +1,6 @@
import { useSettingStore } from '@/store/modules/setting'
import { storeToRefs } from 'pinia'
-import type { ContainerWidthEnum } from '@/app/enums/appEnum'
+import type { ContainerWidthEnum } from '@/enums/appEnum'
/**
* 设置项通用处理逻辑
diff --git a/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts b/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts
index 12b01b98..66877a8e 100644
--- a/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts
+++ b/src/components/core/layouts/art-settings-panel/composables/useSettingsPanel.ts
@@ -3,7 +3,7 @@ import { useSettingStore } from '@/store/modules/setting'
import { storeToRefs } from 'pinia'
import { useBreakpoints } from '@vueuse/core'
import AppConfig from '@/config'
-import { SystemThemeEnum, MenuTypeEnum } from '@/app/enums/appEnum'
+import { SystemThemeEnum, MenuTypeEnum } from '@/enums/appEnum'
import { mittBus } from '@/utils/sys'
import { useTheme } from '@/hooks/core/useTheme'
import { useCeremony } from '@/hooks/core/useCeremony'
diff --git a/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts b/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts
index aa6a6fb7..65352d29 100644
--- a/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts
+++ b/src/components/core/layouts/art-settings-panel/composables/useSettingsState.ts
@@ -1,5 +1,5 @@
import { useSettingStore } from '@/store/modules/setting'
-import { MenuThemeEnum, MenuTypeEnum } from '@/app/enums/appEnum'
+import { MenuThemeEnum, MenuTypeEnum } from '@/enums/appEnum'
/**
* 设置状态管理
diff --git a/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue b/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue
index bb5a84ab..61237ebb 100644
--- a/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue
+++ b/src/components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue
@@ -23,7 +23,7 @@
-
+
- {{ isUploading ? '上传中...' : '上传文件' }}
+ {{ isUploading ? "上传中..." : "上传文件" }}
@@ -382,45 +392,45 @@
diff --git a/src/components/terminal/index.vue b/src/components/terminal/index.vue
index e2bf6f38..44fd9bd5 100644
--- a/src/components/terminal/index.vue
+++ b/src/components/terminal/index.vue
@@ -201,8 +201,8 @@
diff --git a/src/apps/official/views/doc/schemas/index.tsx b/src/apps/official/views/doc/schemas/index.tsx
new file mode 100644
index 00000000..4be477c9
--- /dev/null
+++ b/src/apps/official/views/doc/schemas/index.tsx
@@ -0,0 +1,290 @@
+import { DocProjectService } from '@/apps/official/api/doc'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { Icon } from '@/components/icon'
+import { $t } from '@/locales'
+import { h } from 'vue'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: DocProjectService.list,
+ dialogTitle: '文档中心',
+ crudApi: {
+ // 新增接口
+ add: DocProjectService.create,
+ // 修改接口
+ edit: DocProjectService.update,
+ // 删除接口
+ remove: DocProjectService.remove,
+ // 详情接口
+ view: DocProjectService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: true,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: true,
+ // 是否有详情
+ hasView: true,
+ // 新增权限码
+ addAuth: 'official:doc:create',
+ // 删除权限码
+ removeAuth: 'official:doc:delete',
+ // 修改权限码
+ editAuth: 'official:doc:update',
+ // 详情权限码
+ viewAuth: 'official:doc:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ align: 'center'
+ },
+ {
+ prop: 'thumb',
+ label: '缩略图',
+ formatter: (row: any) => {
+ const imageUrl = row.thumb_url || row.thumb
+ if (!imageUrl) {
+ return h('span', { style: { color: '#999', fontSize: '12px' } }, '无')
+ }
+ return h('div', { style: { display: 'flex', justifyContent: 'center', alignItems: 'center' } }, [
+ h('img', {
+ src: imageUrl,
+ alt: '海报',
+ style: {
+ width: '60px',
+ height: '60px',
+ objectFit: 'cover',
+ borderRadius: '4px',
+ cursor: 'pointer',
+ border: '1px solid #e8e8e8'
+ },
+ onClick: () => {
+ window.open(imageUrl, '_blank')
+ }
+ })
+ ])
+ }
+ },
+ {
+ label: '唯一标识',
+ prop: 'code',
+ align: 'center'
+ },
+ {
+ label: '标题',
+ prop: 'title',
+ align: 'center'
+ },
+ {
+ label: '阅读量',
+ prop: 'sort',
+ align: 'center'
+ },
+ {
+ prop: 'is_show',
+ label: '是否显示',
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_YES_NO,
+ }
+ },
+ {
+ prop: 'enabled',
+ label: '状态',
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS,
+ }
+ },
+
+
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '70%',
+ dialogType: 'drawer',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '120px',
+ schema: [
+ {
+ label: '唯一标识',
+ prop: 'code',
+ component: 'Input',
+ colSpan: 6,
+ rules: [],
+ },
+ {
+ prop: 'LIKE_title',
+ label: '标题',
+ component: 'Input',
+ colSpan: 6,
+ },
+
+
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ showDefaultActions: true,
+ labelWidth: '130px',
+ schema: [
+ {
+ label: 'ID',
+ prop: 'id',
+ component: 'Input',
+ colSpan: 24,
+ show: false,
+ ifDetail: false
+ },
+ {
+ prop: 'thumb',
+ label: '海报上传',
+ component: 'Upload',
+ colSpan: 24,
+ componentProps: {
+ listType: 'picture-card',
+ maxCount: 1,
+ accept: '.jpg,.jpeg,.png,.webp,.gif',
+ maxSize: 5 * 1024 * 1024,
+ limit: 1,
+
+ }
+ },
+ {
+ label: '唯一编码',
+ prop: 'code',
+ component: 'Input',
+ colSpan: 24,
+ rules: [],
+ },
+ {
+ label: '显示名称',
+ prop: 'title',
+ component: 'Input',
+ colSpan: 24,
+ rules: [],
+
+ },
+
+ {
+ label: '权限管控',
+ prop: 'auth_type',
+ component: 'ApiDict',
+ defaultValue: 0,
+ colSpan: 24,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ code: DictEnum.DOC_PERMISSION_TYPE,
+ }
+ }
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ component: 'InputNumber',
+ defaultValue: 999,
+ colSpan: 24,
+ componentProps: {
+ clearable: true,
+ min: -1
+ }
+ },
+ {
+ label: '首页显示',
+ prop: 'app',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 12,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ code: DictEnum.SYS_ENABLED_STATUS,
+ isBtn: true,
+ renderType: 'RadioGroup',
+ }
+ }
+ },
+ {
+ label: '启用状态',
+ prop: 'enabled',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 12,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ code: DictEnum.SYS_ENABLED_STATUS,
+ isBtn: true,
+ renderType: 'RadioGroup',
+ }
+ }
+ },
+ {
+ label: '协助分组',
+ prop: 'role_ids',
+ component: 'ApiSelect',
+ defaultValue: '',
+ colSpan: 24,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ api: '/system/role',
+ requestMethod: 'GET',
+ placeholder: '请选择协作分组',
+ }
+
+ }
+ },
+ {
+ label: '协作用户',
+ prop: 'admin_ids',
+ component: 'ApiSelect',
+ defaultValue: '',
+ colSpan: 24,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ api: '/system/admin',
+ requestMethod: 'GET',
+ placeholder: '请选择协作用户',
+ }
+
+ }
+ },
+ {
+ label: '描述',
+ prop: 'desc',
+ component: 'Input',
+ colSpan: 24,
+ defaultValue: '',
+ componentProps: {
+ rows: 4,
+ type: 'textarea',
+ clearable: true
+ }
+ },
+
+
+
+ ]
+ }
+ }
+}
diff --git a/src/apps/official/views/market/index.vue b/src/apps/official/views/market/index.vue
new file mode 100644
index 00000000..1120fe25
--- /dev/null
+++ b/src/apps/official/views/market/index.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/market/schemas/index.tsx b/src/apps/official/views/market/schemas/index.tsx
new file mode 100644
index 00000000..fc007d89
--- /dev/null
+++ b/src/apps/official/views/market/schemas/index.tsx
@@ -0,0 +1,380 @@
+import { MarketService } from '@/apps/official/api/market'
+import { DictEnum } from '@/enums'
+import { CrudSchema } from '@/components/crud'
+import { Icon } from '@/components/icon'
+import { $t } from '@/locales'
+import api from '@/utils/http'
+import { h } from 'vue'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: MenuService.list,
+ dialogTitle: $t('web.menu.title'),
+ tree: {
+ id: 'id',
+ pid: 'parent_id'
+ },
+ crudApi: {
+ // 新增接口
+ add: MenuService.create,
+ // 修改接口
+ edit: MenuService.update,
+ // 删除接口
+ remove: MenuService.delete,
+ // 详情接口
+ view: MenuService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: true,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: true,
+ // 是否有详情
+ hasView: true,
+ // 新增权限码
+ addAuth: 'web:menu:create',
+ // 删除权限码
+ removeAuth: 'web:menu:delete',
+ // 修改权限码
+ editAuth: 'web:menu:update',
+ // 详情权限码
+ viewAuth: 'web:menu:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+ {
+ prop: 'name',
+ label: $t('web.menu.table.columns.name'),
+ formatter: (row) => {
+ return row.icon
+ ? h('span', {}, [
+ h(Icon, {
+ icon: row.icon
+ }),
+ h(
+ 'span',
+ {
+ style: {
+ paddingLeft: '6px'
+ }
+ },
+ row.name
+ )
+ ])
+ : h('span', {}, row.name)
+ },
+ minWidth: 200
+ },
+ {
+ label: $t('web.menu.table.columns.category'),
+ prop: 'category',
+ component: 'ApiDict',
+ align: 'center',
+ componentProps: {
+ code: DictEnum.WEB_MENU_CATEGORY,
+ }
+ },
+ {
+ prop: 'url',
+ label: $t('web.menu.table.columns.url'),
+ minWidth: 100,
+ formatter(row) {
+ if (row.type === 1) {
+ return '/'
+ }
+ },
+ },
+ {
+ prop: 'sort',
+ label: $t('web.menu.table.columns.sort'),
+ },
+ {
+ prop: 'type',
+ label: $t('web.menu.table.columns.type'),
+ component: 'ApiDict',
+ align: 'left',
+ componentProps: {
+ code: DictEnum.WEB_MENU_TYPE,
+ }
+ },
+ {
+ prop: 'target',
+ label: $t('web.menu.table.columns.target'),
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.WEB_MENU_TARGET,
+ }
+ },
+ {
+ prop: 'is_show',
+ label: $t('web.menu.table.columns.is_show'),
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_YES_NO,
+ }
+ },
+ {
+ prop: 'enabled',
+ label: $t('web.menu.table.columns.enabled'),
+ component: 'ApiDict',
+ align: 'center',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS,
+ }
+ },
+
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '60%',
+ dialogType: 'drawer',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '120px',
+ schema: [
+ {
+ label: $t('web.menu.search.app'),
+ prop: 'app',
+ component: 'ApiSelect',
+ colSpan: 6,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ api: '/system/menu/app/list',
+ requestMethod: 'GET',
+ }
+
+ }
+ },
+ {
+ prop: 'EQ_category',
+ label: $t('web.menu.search.category'),
+ component: 'ApiDict',
+ colSpan: 6,
+ componentProps: {
+ code: DictEnum.WEB_MENU_CATEGORY,
+ }
+ },
+ {
+ prop: 'LINK_name',
+ label: $t('web.menu.search.name'),
+ component: 'Input',
+ colSpan: 6
+ },
+ {
+ prop: 'type',
+ label: $t('web.menu.search.type'),
+ component: 'ApiDict',
+ componentProps: {
+ placeholder: $t('web.menu.form.placeholder_type'),
+ code: DictEnum.WEB_MENU_TYPE,
+ clearable: true
+ },
+ colSpan: 6
+ },
+
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ showDefaultActions: true,
+ labelWidth: '130px',
+ schema: [
+ {
+ label: 'ID',
+ prop: 'id',
+ component: 'Input',
+ colSpan: 24,
+ show: false,
+ ifDetail: false
+ },
+ {
+ label: $t('web.menu.form.category'),
+ prop: 'category',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 24,
+ rules: [],
+ componentProps: {
+ renderType: 'RadioGroup',
+ placeholder: $t('web.menu.form.placeholder_type'),
+ code: DictEnum.WEB_MENU_CATEGORY,
+ isBtn: true,
+ }
+ },
+ {
+ label: $t('web.menu.form.app'),
+ prop: 'app',
+ component: 'ApiSelect',
+ defaultValue: 'web',
+ colSpan: 24,
+ rules: [],
+ componentProps: (_value) => {
+ return {
+ api: '/system/menu/app/list',
+ requestMethod: 'GET',
+ placeholder: $t('web.menu.form.placeholder_app'),
+ style: {
+ width: '330px',
+ }
+ }
+
+ }
+ },
+ {
+ label: $t('web.menu.form.source'),
+ prop: 'source',
+ component: 'Input',
+ colSpan: 24,
+ defaultValue: 'create',
+ componentProps: {
+ placeholder: $t('web.menu.form.source'),
+ clearable: true
+ }
+ },
+ {
+ label: $t('web.menu.form.name'),
+ prop: 'name',
+ component: 'Input',
+ colSpan: 24,
+ rules: [{ required: true, message: $t('web.menu.form.rules_name') }],
+ componentProps: {
+ placeholder: $t('web.menu.form.name'),
+ clearable: true
+ }
+ },
+ {
+ label: $t('web.menu.form.type'),
+ prop: 'type',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 24,
+ rules: [{ required: true, message: $t('web.menu.form.rules_type') }],
+ componentProps: {
+ code: DictEnum.WEB_MENU_TYPE,
+ placeholder: $t('web.menu.form.placeholder_type'),
+ clearable: false
+ }
+ },
+ {
+ label: $t('web.menu.form.pid'),
+ prop: 'pid',
+ component: 'ApiTreeSelect',
+ colSpan: 24,
+ componentProps: (values) => {
+ return {
+ placeholder: $t('web.menu.form.placeholder_pid'),
+ clearable: true,
+ checkStrictly: true,
+ api: '/web/menu',
+ params: {
+ format: 'tree',
+ app: values.app || 'web',
+ category: values.category || 1,
+ },
+ labelField: 'name',
+ valueField: 'id'
+ }
+ }
+ },
+ {
+ label: $t('web.menu.form.url'),
+ prop: 'url',
+ component: 'Input',
+ colSpan: 24,
+ ifShow(values) {
+ return [2, 3, 4].includes(values.type)
+ },
+ componentProps: (values) => {
+ return {
+ placeholder: $t('web.menu.form.placeholder_url'),
+ clearable: true,
+ disabled: ![2, 3, 4].includes(values.type)
+ }
+ }
+ },
+ {
+ label: $t('web.menu.form.target'),
+ prop: 'target',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 24,
+ ifShow(values) {
+ return [2, 3, 4].includes(values.type)
+ },
+ componentProps: (values) => {
+ return {
+ code: DictEnum.WEB_MENU_TARGET,
+ placeholder: $t('web.menu.form.placeholder_target'),
+ disabled: ![2, 3, 4].includes(values.type),
+ clearable: false
+ }
+ }
+ },
+ {
+ label: $t('web.menu.form.icon'),
+ prop: 'icon',
+ component: 'IconPicker',
+ colSpan: 12,
+ componentProps: (values) => {
+ return {
+ class: 'w-full',
+ placeholder: $t('web.menu.form.placeholder_icon'),
+ clearable: true,
+ }
+ }
+ },
+ {
+ label: $t('web.menu.form.sort'),
+ prop: 'sort',
+ component: 'InputNumber',
+ defaultValue: 999,
+ colSpan: 12,
+ componentProps: {
+ placeholder: $t('web.menu.form.placeholder_sort'),
+ clearable: true,
+ min: -1
+ }
+ },
+ {
+ label: $t('web.menu.form.enabled'),
+ prop: 'enabled',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 12,
+ componentProps: {
+ placeholder: $t('web.menu.form.placeholder_enabled'),
+ code: DictEnum.SYS_ENABLED_STATUS,
+ isBtn: true,
+ renderType: 'RadioGroup'
+ }
+ },
+ {
+ label: $t('web.menu.form.is_show'),
+ prop: 'is_show',
+ component: 'ApiDict',
+ colSpan: 12,
+ defaultValue: 1,
+ componentProps: {
+ placeholder: $t('web.menu.form.placeholder_is_show'),
+ code: DictEnum.SYS_YES_NO,
+ isBtn: true,
+ renderType: 'RadioGroup'
+ }
+ },
+ ]
+ }
+ }
+}
diff --git a/src/components/form/components/upload.vue b/src/components/form/components/upload.vue
index e793c5bc..072f4198 100644
--- a/src/components/form/components/upload.vue
+++ b/src/components/form/components/upload.vue
@@ -27,7 +27,7 @@ const props = defineProps({
action: {
// 上传的地址
type: String,
- default: `${import.meta.env.VITE_API_URL}/system/fileInfo/upload`,
+ default: `${import.meta.env.VITE_API_URL}/files/upload-file`,
},
headers: {
// 上传请求的 headers
--
Gitee
From ebb0cb2cbe18d2109e778e3e508c63bb49b818cb Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Thu, 5 Mar 2026 17:34:10 +0800
Subject: [PATCH 06/16] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=9D=99?=
=?UTF-8?q?=E6=80=81=E8=B5=84=E6=BA=90=E7=BB=9F=E4=B8=80=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/request.ts | 41 ++-
src/components/core/base/art-logo/index.vue | 15 +-
.../core/layouts/art-header-bar/index.vue | 7 +-
.../art-menus/art-sidebar-menu/index.vue | 7 +-
.../core/views/login/AuthTopBar.vue | 7 +-
src/components/form/components/avatar.vue | 6 +-
src/store/modules/notify.ts | 6 +-
src/utils/index.ts | 4 +
src/utils/url/index.ts | 120 +------
src/utils/url/static-resource.ts | 308 ++++++++++++++++++
vite.config.ts | 5 +
11 files changed, 407 insertions(+), 119 deletions(-)
create mode 100644 src/utils/url/static-resource.ts
diff --git a/src/api/request.ts b/src/api/request.ts
index b7a96e25..c02ed77b 100644
--- a/src/api/request.ts
+++ b/src/api/request.ts
@@ -3,17 +3,44 @@ export * from '@/utils/http';
export const getApiBaseUrl = (customValue?: string | null): string => {
+ const getBaseUrl = (value: string): string => {
+ // 如果是 useCurrentDomain,返回当前域名并添加 /adminapi
+ if (value === 'useCurrentDomain') {
+ const currentDomain = window.location.protocol + '//' + window.location.host;
+ return currentDomain + '/adminapi';
+ }
+
+ // 如果是完整 URL,直接返回
+ if (/^https?:\/\//i.test(value)) {
+ return value;
+ }
+
+ // 如果是相对路径,确保以 / 开头
+ const normalizedPath = value.replace(/^\/+/, '');
+
+ // 如果是当前域名,添加 /adminapi
+ if (normalizedPath === '') {
+ return window.location.protocol + '//' + window.location.host + '/adminapi';
+ }
+
+ // 如果已经是 /adminapi 开头,直接返回
+ if (normalizedPath.startsWith('adminapi')) {
+ return window.location.protocol + '//' + window.location.host + '/' + normalizedPath;
+ }
+
+ // 其他相对路径,添加当前域名
+ return window.location.protocol + '//' + window.location.host + '/' + normalizedPath;
+ };
+
if (customValue) {
- return customValue === 'useCurrentDomain'
- ? window.location.protocol + '//' + window.location.host
- : customValue;
+ return getBaseUrl(customValue);
}
const envValue = import.meta.env.VITE_API_URL;
if (envValue) {
- return envValue === 'useCurrentDomain'
- ? window.location.protocol + '//' + window.location.host
- : envValue;
+ return getBaseUrl(envValue);
}
- return window.location.protocol + '//' + window.location.host;
+
+ // 默认返回当前域名 + /adminapi
+ return window.location.protocol + '//' + window.location.host + '/adminapi';
}
\ No newline at end of file
diff --git a/src/components/core/base/art-logo/index.vue b/src/components/core/base/art-logo/index.vue
index 3830b5a2..62adbe2e 100644
--- a/src/components/core/base/art-logo/index.vue
+++ b/src/components/core/base/art-logo/index.vue
@@ -8,16 +8,29 @@
diff --git a/src/components/core/layouts/art-header-bar/index.vue b/src/components/core/layouts/art-header-bar/index.vue
index e09443c3..f5d95438 100755
--- a/src/components/core/layouts/art-header-bar/index.vue
+++ b/src/components/core/layouts/art-header-bar/index.vue
@@ -21,7 +21,7 @@
- {{ AppConfig.systemInfo.name }}
+ {{ systemTitle }}
@@ -209,6 +209,7 @@ import { useFullscreen, useWindowSize } from "@vueuse/core";
import { LanguageEnum, MenuTypeEnum } from "@/enums/appEnum";
import { useSettingStore } from "@/store/modules/setting";
import { useUserStore } from "@/store/modules/user";
+import { useSystemConfigStore } from "@/store/modules/system-config";
import { useMenuStore } from "@/store/modules/menu";
import AppConfig from "@/config";
import { languageOptions } from "@/locales";
@@ -230,6 +231,10 @@ const { width } = useWindowSize();
const settingStore = useSettingStore();
const userStore = useUserStore();
const menuStore = useMenuStore();
+const systemConfigStore = useSystemConfigStore();
+
+// 优先使用后台配置的系统标题
+const systemTitle = computed(() => systemConfigStore.config.title || AppConfig.systemInfo.name)
// 顶部栏功能配置
const {
diff --git a/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue b/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
index b4c80f72..5e6c2dc2 100755
--- a/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
+++ b/src/components/core/layouts/art-menus/art-sidebar-menu/index.vue
@@ -84,7 +84,7 @@
opacity: !menuOpen ? 0 : 1
}"
>
- {{ AppConfig.systemInfo.name }}
+ {{ systemTitle }}
@@ -132,6 +132,7 @@
+```
+
+**Props**:
+- `value` (String): 图片 URL
+- `autoHandleBaseUrl` (Boolean): 是否自动处理 URL,默认 true
+- `urlMode` (String): URL 处理模式,'auto' | 'relative' | 'absolute'
+- `width` (Number): 宽度,默认 320
+- `height` (Number): 高度,默认 150
+
+### Avatar 组件
+
+```vue
+
+
+
+```
+
+**Props**:
+- `value` (String): 头像 URL
+- `autoHandleBaseUrl` (Boolean): 是否自动处理 URL,默认 true
+- `urlMode` (String): URL 处理模式
+
+## 配置说明
+
+### 环境变量
+
+| 变量名 | 说明 | 示例 |
+|---------|------|------|
+| `VITE_BASE_URL` | 应用基础路径 | `/` 或 `/admin/` |
+| `VITE_API_URL` | API 地址 | `/` 或 `/adminapi` 或 `https://api.example.com` |
+| `VITE_API_PROXY_URL` | 代理目标地址 | `http://127.0.0.1:8001` |
+
+### 系统配置
+
+通过 `useSystemConfigStore()` 配置:
+
+```javascript
+{
+ // 存储类型
+ storage_type: 'local' | 'aliyun_oss' | 'tencent_cos' | 'qiniu' | 'aws_s3',
+
+ // URL 处理模式
+ url_mode: 'auto' | 'relative' | 'absolute',
+
+ // CDN 域名
+ cdn_url: 'https://cdn.example.com',
+
+ // CDN URL 参数(如 OSS 签名)
+ cdn_params: 'token=xxx&version=v1',
+
+ // 静态资源域名(与 API 分离)
+ static_domain: 'https://static.example.com',
+
+ // 是否启用静态资源 CDN
+ enable_static_cdn: true
+}
+```
+
+## 最佳实践
+
+### 1. 本地开发
+```javascript
+// .env.development
+VITE_API_URL = /adminapi
+VITE_API_PROXY_URL = http://127.0.0.1:8001
+```
+
+### 2. 测试环境(同域)
+```javascript
+// .env.test
+VITE_API_URL = /
+```
+
+### 3. 生产环境(前后端分离)
+```javascript
+// .env.production
+VITE_API_URL = https://api.example.com
+```
+
+### 4. 生产环境(CDN)
+```javascript
+// 系统配置
+{
+ storage_type: 'aliyun_oss',
+ url_mode: 'absolute',
+ cdn_url: 'https://cdn.example.com',
+ enable_static_cdn: true
+}
+```
+
+## 工具函数
+
+### isSameOrigin()
+判断是否为同域部署
+
+```javascript
+import { isSameOrigin } from '@/utils'
+
+if (isSameOrigin()) {
+ // 同域,使用相对路径
+}
+```
+
+### isUsingCdn()
+判断是否使用 CDN
+
+```javascript
+import { isUsingCdn } from '@/utils'
+
+if (isUsingCdn()) {
+ // 使用 CDN
+}
+```
+
+### isOssStorage()
+判断是否为 OSS 存储
+
+```javascript
+import { isOssStorage } from '@/utils'
+
+if (isOssStorage()) {
+ // OSS 存储,可能需要特殊处理
+}
+```
+
+## 迁移指南
+
+### 从旧版本迁移
+
+旧版本使用 `fullUrl` 和 `stripBaseUrl`:
+
+```javascript
+// 旧版本
+import { fullUrl, stripBaseUrl } from '@/utils'
+
+// 显示
+const displayUrl = fullUrl(imageUrl)
+
+// 存储
+const storageUrl = stripBaseUrl(imageUrl)
+```
+
+新版本使用资源处理机制:
+
+```javascript
+// 新版本
+import { buildResourceUrl, extractRelativePath } from '@/utils'
+
+// 显示
+const displayUrl = buildResourceUrl(imageUrl)
+
+// 存储
+const storageUrl = extractRelativePath(imageUrl)
+```
+
+## 常见问题
+
+### Q: 为什么显示的图片多了 `/adminapi` 前缀?
+
+A: 检查 `VITE_API_URL` 配置。静态资源不应该使用 API 前缀。
+
+解决方法:
+- 方法 1:配置 `static_domain`
+- 方法 2:使用 `extractRelativePath` 提取相对路径
+
+### Q: OSS 图片无法显示?
+
+A: 检查系统配置:
+- `storage_type` 是否正确
+- `cdn_url` 是否配置
+- `url_mode` 是否为 `absolute`
+
+### Q: 代理模式下图片 404?
+
+A: 检查 `static_domain` 配置,确保静态资源不经过 API 代理。
+
+## 技术细节
+
+### URL 处理优先级
+
+1. 如果是完整 URL(http:// 或 https://),直接返回
+2. 如果是 Data URL(base64),直接返回
+3. 否则根据配置拼接域名
+
+### 路径标准化
+
+- 自动移除 API 前缀(/adminapi, /webapi, /api, /sys)
+- 自动处理 CDN 参数
+- 自动处理斜杠
+
+### 性能优化
+
+- 使用 `computed` 缓存计算结果
+- 批量处理避免重复计算
+- 条件判断提前返回
+
+## 相关文件
+
+- `src/utils/resource.ts` - 资源 URL 处理核心逻辑
+- `src/apps/official/views/doc/components/poster-upload.vue` - 海报上传组件
+- `src/components/form/components/avatar.vue` - 头像上传组件
+- `.env*` - 环境配置文件
diff --git a/src/apps/official/api/doc/project/index.ts b/src/apps/official/api/doc/project/index.ts
index 16a77bc1..50e6d465 100644
--- a/src/apps/official/api/doc/project/index.ts
+++ b/src/apps/official/api/doc/project/index.ts
@@ -1,7 +1,8 @@
import BaseService from '@/api/core/base'
import type { DocProject, DocProjectSearchParams } from './types'
+import request from '@/utils/http'
-const baseUrl = '/doc'
+const baseUrl = '/docs'
/**
* 文档项目服务
@@ -10,5 +11,15 @@ export const DocProjectService = {
...BaseService({
baseUrl,
forbiddenMethods: ['export', 'changStatus']
- })
+
+ }),
+ //克隆文档
+ clone(id: string | number): Promise {
+ return request.post({
+ url: `${baseUrl}/clone`,
+ data: {
+ id,
+ },
+ })
+ }
}
diff --git a/src/apps/official/routes/index.ts b/src/apps/official/routes/index.ts
index 4687a58e..24f480fc 100644
--- a/src/apps/official/routes/index.ts
+++ b/src/apps/official/routes/index.ts
@@ -22,6 +22,18 @@ export default {
module: 'official'
}
},
+ {
+ path: 'doc-item',
+ name: 'OfficialDocItem',
+ component: '/doc-item/index',
+ meta: {
+ title: '文档章节',
+ icon: 'ri:list-unordered',
+ keepAlive: false,
+ isHide: true,
+ module: 'official'
+ }
+ },
{
path: 'market',
name: 'OfficialMarket',
diff --git a/src/apps/official/views/doc-item/form.vue b/src/apps/official/views/doc-item/form.vue
new file mode 100644
index 00000000..88678b85
--- /dev/null
+++ b/src/apps/official/views/doc-item/form.vue
@@ -0,0 +1,205 @@
+
+
+
+
+
diff --git a/src/apps/official/views/doc-item/index.vue b/src/apps/official/views/doc-item/index.vue
new file mode 100644
index 00000000..31d69576
--- /dev/null
+++ b/src/apps/official/views/doc-item/index.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/doc-item/schemas/index.tsx b/src/apps/official/views/doc-item/schemas/index.tsx
new file mode 100644
index 00000000..7421ed3e
--- /dev/null
+++ b/src/apps/official/views/doc-item/schemas/index.tsx
@@ -0,0 +1,139 @@
+import { DocContentService } from '@/apps/official/api/doc'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { formatDateTime } from '@/utils'
+
+const route = useRoute()
+const router = useRouter()
+const getRouteParams = () => {
+ // 优先使用路径参数
+ if (route.params.id) {
+ return route.params.id as string
+ }
+ // 其次使用查询参数
+ if (route.query.id) {
+ return route.query.id as string
+ }
+ // 还可以支持其他查询参数名称
+ if (route.query.doc_id) {
+ return route.query.doc_id as string
+ }
+ return null
+}
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: DocContentService.list,
+ dialogTitle: '文档中心',
+ crudApi: {
+ // 新增接口
+ add: DocContentService.create,
+ // 修改接口
+ edit: DocContentService.update,
+ // 删除接口
+ remove: DocContentService.remove,
+ // 详情接口
+ view: DocContentService.get
+ },
+ tree: {
+ // 树形id字段名
+ id: 'id',
+ // 树形pid字段名
+ pid: 'pid',
+ // 树形children字段名
+ children: 'children'
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: false,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: false,
+ // 是否有详情
+ hasView: false,
+ // 新增权限码
+ addAuth: 'official:doc-item:create',
+ // 删除权限码
+ removeAuth: 'official:doc-item:delete',
+ // 修改权限码
+ editAuth: 'official:doc-item:update',
+ // 详情权限码
+ viewAuth: 'official:doc-item:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+ {
+ label: '类型',
+ prop: 'type',
+ width: 90,
+ align: 'center',
+ formatter: (row: any) => {
+ return Number(row.type) === 1 ? '目录' : '文档'
+ }
+ },
+ {
+ prop: 'title',
+ label: '名称',
+ align: 'left',
+ minWidth: 120
+ },
+ {
+ label: '状态',
+ prop: 'enabled',
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS
+ }
+ },
+ {
+ label: '访问权限',
+ prop: 'is_auth',
+ align: 'center',
+ formatter: (row: any) => {
+ return Number(row.is_auth) === 1 ? '继承权限' : '公开文档'
+ }
+ },
+ {
+ prop: 'sort',
+ label: '排序',
+ width: 70,
+ align: 'center'
+ },
+ {
+ label: '创建时间',
+ prop: 'created_at',
+ minWidth: 150,
+ align: 'center',
+ formatter: (row: any) => {
+ return formatDateTime(row.created_at)
+ }
+ },
+ {
+ label: '更新时间',
+ prop: 'updated_at',
+ align: 'center',
+ visible: false,
+ formatter: (row: any) => {
+ return formatDateTime(row.updated_at)
+ }
+ }
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '70%',
+ dialogType: 'drawer'
+ },
+ // 搜索表单配置
+ useSearchForm: false,
+ // crud表单配置
+ formSchema: {}
+ }
+}
diff --git a/src/apps/official/views/doc/components/poster-upload.vue b/src/apps/official/views/doc/components/poster-upload.vue
new file mode 100644
index 00000000..c36660f9
--- /dev/null
+++ b/src/apps/official/views/doc/components/poster-upload.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
diff --git a/src/apps/official/views/doc/form.vue b/src/apps/official/views/doc/form.vue
new file mode 100644
index 00000000..b3212ea4
--- /dev/null
+++ b/src/apps/official/views/doc/form.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
diff --git a/src/apps/official/views/doc/index.vue b/src/apps/official/views/doc/index.vue
index 42be5796..275b5367 100644
--- a/src/apps/official/views/doc/index.vue
+++ b/src/apps/official/views/doc/index.vue
@@ -1,26 +1,92 @@
-
+
+
+
diff --git a/src/apps/official/views/market/apps/index.vue b/src/apps/official/views/market/apps/index.vue
new file mode 100644
index 00000000..14fe2d9b
--- /dev/null
+++ b/src/apps/official/views/market/apps/index.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/market/apps/schemas/index.tsx b/src/apps/official/views/market/apps/schemas/index.tsx
new file mode 100644
index 00000000..02ef69ae
--- /dev/null
+++ b/src/apps/official/views/market/apps/schemas/index.tsx
@@ -0,0 +1,190 @@
+import { MarketAppService } from '@/apps/official/api/market'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { formatDateTime } from '@/utils'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: MarketAppService.list,
+ dialogTitle: '应用列表',
+ crudApi: {
+ // 新增接口
+ add: MarketAppService.create,
+ // 修改接口
+ edit: MarketAppService.update,
+ // 删除接口
+ remove: MarketAppService.remove,
+ // 详情接口
+ view: MarketAppService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: false,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: false,
+ // 是否有详情
+ hasView: false,
+ // 新增权限码
+ addAuth: 'market:apps:create',
+ // 删除权限码
+ removeAuth: 'market:apps:delete',
+ // 修改权限码
+ editAuth: 'market:apps:update',
+ // 详情权限码
+ viewAuth: 'market:apps:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+
+ {
+ prop: 'category.name',
+ label: '类型',
+ align: 'center',
+ minWidth: 120
+ },
+ {
+ prop: 'code',
+ label: '应用标识',
+ align: 'left',
+ minWidth: 120
+ },
+ {
+ prop: 'name',
+ label: '应用名称',
+ align: 'left',
+ minWidth: 120
+ },
+ {
+ prop: 'description',
+ label: '应用描述',
+ align: 'left',
+ minWidth: 200
+ },
+ {
+ prop: 'sort_weight',
+ label: '排序',
+ width: 70,
+ align: 'center'
+ },
+ {
+ prop: 'developer',
+ label: '开发者',
+ align: 'center',
+ minWidth: 100
+ },
+ {
+ prop: 'version',
+ label: '活动版本',
+ align: 'center',
+ width: 90
+ },
+ {
+ label: '是否上架',
+ prop: 'status',
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_YES_NO
+ }
+ },
+
+ {
+ label: '创建时间',
+ prop: 'created_at',
+ minWidth: 170,
+ align: 'center',
+ visible: false,
+ formatter: (row: any) => {
+ return formatDateTime(row.created_at)
+ }
+ },
+ {
+ label: '更新时间',
+ prop: 'updated_at',
+ minWidth: 170,
+ align: 'center',
+ visible: false,
+ formatter: (row: any) => {
+ return formatDateTime(row.updated_at)
+ }
+ }
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '70%',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '120px',
+ schema: [
+ {
+ label: '应用标识',
+ prop: 'LIKE_code',
+ component: 'Input',
+ colSpan: 6,
+ rules: [],
+ },
+ {
+ label: '应用名称',
+ prop: 'LIKE_name',
+ component: 'Input',
+ colSpan: 6,
+ rules: [],
+ },
+ {
+ label: '应用描述',
+ prop: 'LIKE_description',
+ component: 'Input',
+ colSpan: 6,
+ rules: [],
+ },
+ {
+ label: '商家名称',
+ prop: 'LIKE_developer',
+ component: 'Input',
+ colSpan: 6,
+ rules: [],
+ },
+ {
+ prop: 'EQ_enabled',
+ label: '状态',
+ component: 'ApiDict',
+ componentProps: {
+ clearable: true,
+ code: DictEnum.SYS_ENABLED_STATUS
+ },
+ colSpan: 6
+ },
+ {
+ label: '应用类型',
+ prop: 'EQ_category_id',
+ component: 'ApiSelect',
+ componentProps: {
+ clearable: true,
+ api: '/market/category',
+ params: {
+ format: 'select'
+ },
+ colSpan: 6,
+ rules: [],
+ }
+ }
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ labelWidth: 120,
+ gutter: 20,
+ schema: []
+ }
+ }
+}
diff --git a/src/apps/official/views/market/apps/version-form.vue b/src/apps/official/views/market/apps/version-form.vue
new file mode 100644
index 00000000..4d22d1a4
--- /dev/null
+++ b/src/apps/official/views/market/apps/version-form.vue
@@ -0,0 +1,125 @@
+
+
+
+
--
Gitee
From b9e16cc9bdc8d14e6aa80aba9f68e9f5b5b3aaa8 Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Fri, 6 Mar 2026 21:45:35 +0800
Subject: [PATCH 11/16] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0apps=20Api?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/apps/official/api/ask/question/index.ts | 36 ++++++++-
src/apps/official/api/market/app/index.ts | 16 +++-
.../official/api/market/category/index.ts | 2 +-
src/apps/official/api/market/tag/index.ts | 2 +-
src/apps/official/routes/index.ts | 76 ++++++++++++++++---
5 files changed, 118 insertions(+), 14 deletions(-)
diff --git a/src/apps/official/api/ask/question/index.ts b/src/apps/official/api/ask/question/index.ts
index 44dfbbf0..71de428d 100644
--- a/src/apps/official/api/ask/question/index.ts
+++ b/src/apps/official/api/ask/question/index.ts
@@ -1,5 +1,6 @@
import BaseService from '@/api/core/base'
import type { Question, QuestionSearchParams } from './types'
+import request from '@/utils/http'
const baseUrl = '/ask/question'
@@ -10,5 +11,38 @@ export const QuestionService = {
...BaseService({
baseUrl,
forbiddenMethods: ['export', 'changStatus']
- })
+ }),
+
+ /**
+ * 设置置顶
+ */
+ async setSticky(id: number | string, data: { is_sticky: number; sticky_order?: number }) {
+ return request.post(`${baseUrl}/${id}/sticky`, data)
+ },
+
+ /**
+ * 设置精华
+ */
+ async setExcellent(id: number | string, data: { is_excellent: number }) {
+ return request.post(`${baseUrl}/${id}/excellent`, data)
+ }
+}
+
+const answerBaseUrl = '/ask/answer'
+
+/**
+ * 回答服务
+ */
+export const AnswerService = {
+ ...BaseService({
+ baseUrl: answerBaseUrl,
+ forbiddenMethods: ['create', 'update', 'export', 'changStatus']
+ }),
+
+ /**
+ * 设置最佳答案
+ */
+ async setBest(data: { id: number | string; is_best: number }) {
+ return request.post(`${answerBaseUrl}/best`, data)
+ }
}
diff --git a/src/apps/official/api/market/app/index.ts b/src/apps/official/api/market/app/index.ts
index 199bc248..8af2df2b 100644
--- a/src/apps/official/api/market/app/index.ts
+++ b/src/apps/official/api/market/app/index.ts
@@ -1,7 +1,9 @@
import BaseService from '@/api/core/base'
import type { MarketApp, MarketAppSearchParams } from './types'
+import request from '@/utils/http'
-const baseUrl = '/apps'
+
+const baseUrl = '/market/apps'
/**
* 应用服务
@@ -10,5 +12,15 @@ export const MarketAppService = {
...BaseService({
baseUrl,
forbiddenMethods: ['export', 'changStatus']
- })
+ }),
+
+ /**
+ * 发布新版本
+ */
+ async publishVersion(data: { version: string; attachment: string, id: number | string, }) {
+ return request.post({
+ url: `${baseUrl}/publish-version`,
+ data,
+ })
+ }
}
diff --git a/src/apps/official/api/market/category/index.ts b/src/apps/official/api/market/category/index.ts
index 3c8cd4a2..438d01a7 100644
--- a/src/apps/official/api/market/category/index.ts
+++ b/src/apps/official/api/market/category/index.ts
@@ -1,7 +1,7 @@
import BaseService from '@/api/core/base'
import type { MarketCategory } from './types'
-const baseUrl = '/apps/category'
+const baseUrl = '/market/category'
/**
* 应用分类服务
diff --git a/src/apps/official/api/market/tag/index.ts b/src/apps/official/api/market/tag/index.ts
index 181a8986..838aef9e 100644
--- a/src/apps/official/api/market/tag/index.ts
+++ b/src/apps/official/api/market/tag/index.ts
@@ -1,7 +1,7 @@
import BaseService from '@/api/core/base'
import type { MarketTag, MarketTagSearchParams } from './types'
-const baseUrl = '/apps/tag'
+const baseUrl = '/market/tag'
/**
* 应用标签服务
diff --git a/src/apps/official/routes/index.ts b/src/apps/official/routes/index.ts
index 24f480fc..2fdf2874 100644
--- a/src/apps/official/routes/index.ts
+++ b/src/apps/official/routes/index.ts
@@ -37,24 +37,82 @@ export default {
{
path: 'market',
name: 'OfficialMarket',
- component: '/market/index',
meta: {
- title: '市场管理',
- icon: 'ri:list-unordered',
+ title: '应用市场',
+ icon: 'ant-design:appstore-add-outlined',
keepAlive: false,
module: 'official'
- }
+ },
+ children: [
+ {
+ path: 'category',
+ name: 'OfficialMarketCategory',
+ component: '/market/category/index',
+ meta: {
+ title: '应用分类',
+ icon: 'ant-design:exception-outlined',
+ keepAlive: false,
+ module: 'official'
+ }
+ },
+ {
+ path: 'list',
+ name: 'OfficialMarketList',
+ component: '/market/apps/index',
+ meta: {
+ title: '应用列表',
+ icon: 'ant-design:ordered-list-outlined',
+ keepAlive: false,
+ module: 'official'
+ }
+ }
+
+ ]
},
{
- path: 'qa',
- name: 'OfficialQa',
- component: '/ask/question/index',
+ path: '/ask',
+ name: 'OfficialAsk',
meta: {
title: '社区问答',
- icon: 'ri:list-unordered',
+ icon: 'ant-design:question-circle-outlined',
keepAlive: false,
module: 'official'
- }
+ },
+ children: [
+ {
+ path: '/ask/question',
+ name: 'OfficialQaQuestion',
+ component: '/ask/question/index',
+ meta: {
+ title: '问题列表',
+ icon: 'ant-design:ordered-list-outlined',
+ keepAlive: false,
+ module: 'official'
+ }
+ },
+ {
+ path: '/ask/category',
+ name: 'OfficialQaCategory',
+ component: '/ask/category/index',
+ meta: {
+ title: '分类管理',
+ icon: 'ant-design:exception-outlined',
+ keepAlive: false,
+ module: 'official'
+ }
+ },
+ {
+ path: '/ask/tag',
+ name: 'OfficialQaTag',
+ component: '/ask/tag/index',
+ meta: {
+ title: '标签管理',
+ icon: 'ant-design:tag-outlined',
+ keepAlive: false,
+ module: 'official'
+ }
+ }
+ ]
},
]
--
Gitee
From 39cfe0227ce715ccf00bac4d1aa62dd5b03c51e7 Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Fri, 6 Mar 2026 21:46:02 +0800
Subject: [PATCH 12/16] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=A4=BE?=
=?UTF-8?q?=E5=8C=BA=E9=97=AE=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/apps/official/api/market/app-version.ts | 17 +
.../official/components/carousel-upload.vue | 304 ++++++++++++++
.../official/components/single-upload.vue | 259 ++++++++++++
.../official/views/ask/category/index.vue | 14 +
.../views/ask/category/schemas/index.tsx | 174 ++++++++
.../official/views/ask/question/detail.vue | 321 +++++++++++++++
.../official/views/ask/question/index.vue | 57 +++
.../views/ask/question/schemas/index.tsx | 205 ++++++++++
.../views/{market => ask/tag}/index.vue | 6 +-
.../official/views/ask/tag/schemas/index.tsx | 177 ++++++++
.../official/views/market/category/index.vue | 21 +
.../views/market/category/schemas/index.tsx | 160 ++++++++
.../official/views/market/schemas/index.tsx | 380 ------------------
13 files changed, 1712 insertions(+), 383 deletions(-)
create mode 100644 src/apps/official/api/market/app-version.ts
create mode 100644 src/apps/official/components/carousel-upload.vue
create mode 100644 src/apps/official/components/single-upload.vue
create mode 100644 src/apps/official/views/ask/category/index.vue
create mode 100644 src/apps/official/views/ask/category/schemas/index.tsx
create mode 100644 src/apps/official/views/ask/question/detail.vue
create mode 100644 src/apps/official/views/ask/question/index.vue
create mode 100644 src/apps/official/views/ask/question/schemas/index.tsx
rename src/apps/official/views/{market => ask/tag}/index.vue (60%)
create mode 100644 src/apps/official/views/ask/tag/schemas/index.tsx
create mode 100644 src/apps/official/views/market/category/index.vue
create mode 100644 src/apps/official/views/market/category/schemas/index.tsx
delete mode 100644 src/apps/official/views/market/schemas/index.tsx
diff --git a/src/apps/official/api/market/app-version.ts b/src/apps/official/api/market/app-version.ts
new file mode 100644
index 00000000..7f2c8cc6
--- /dev/null
+++ b/src/apps/official/api/market/app-version.ts
@@ -0,0 +1,17 @@
+import request from "@/api/request";
+
+export namespace AppVersionService {
+ /**
+ * 发布新版本
+ */
+ export const publishVersion = (id: string, data: {
+ version: string;
+ download_url: string;
+ release_notes?: string;
+ sort_weight?: number;
+ }) => {
+ return request.post(`/market/apps/${id}/publish-version`, data);
+ };
+}
+
+export default AppVersionService;
diff --git a/src/apps/official/components/carousel-upload.vue b/src/apps/official/components/carousel-upload.vue
new file mode 100644
index 00000000..d3275bb8
--- /dev/null
+++ b/src/apps/official/components/carousel-upload.vue
@@ -0,0 +1,304 @@
+
+
+
+
+
+
+
+ 上传图片 ({{ carouselList.length }}/{{ maxCount }})
+
+
+
+
+
+
![carousel]()
+
+
{{ index + 1 }}
+
+
+
+
+
+
diff --git a/src/apps/official/components/single-upload.vue b/src/apps/official/components/single-upload.vue
new file mode 100644
index 00000000..55c45ec7
--- /dev/null
+++ b/src/apps/official/components/single-upload.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+ {{ uploading ? uploadingText : buttonText || "上传文件" }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ mValue }}
+
+
+
+ 删除
+
+
+
+
+
![预览]()
+
+
+
+
+
diff --git a/src/apps/official/views/ask/category/index.vue b/src/apps/official/views/ask/category/index.vue
new file mode 100644
index 00000000..5151986b
--- /dev/null
+++ b/src/apps/official/views/ask/category/index.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/ask/category/schemas/index.tsx b/src/apps/official/views/ask/category/schemas/index.tsx
new file mode 100644
index 00000000..777910b7
--- /dev/null
+++ b/src/apps/official/views/ask/category/schemas/index.tsx
@@ -0,0 +1,174 @@
+import { CategoryService } from '@/apps/official/api/ask'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { formatDateTime } from '@/utils'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: CategoryService.list,
+ dialogTitle: '分类列表',
+ crudApi: {
+ // 新增接口
+ add: CategoryService.create,
+ // 修改接口
+ edit: CategoryService.update,
+ // 删除接口
+ remove: CategoryService.remove,
+ // 详情接口
+ view: CategoryService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: true,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: true,
+ // 是否有详情
+ hasView: true,
+ // 新增权限码
+ addAuth: 'ask:category:create',
+ // 删除权限码
+ removeAuth: 'ask:category:delete',
+ // 修改权限码
+ editAuth: 'ask:category:update',
+ // 详情权限码
+ viewAuth: 'ask:category:read',
+ rowKey: 'id',
+
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+ {
+ prop: 'id',
+ label: 'ID',
+ align: 'center',
+ width: 80,
+ visible: false
+ },
+ {
+ prop: 'name',
+ label: '分类名称',
+ align: 'left',
+ minWidth: 150
+ },
+ {
+ prop: 'description',
+ label: '分类描述',
+ align: 'left',
+ minWidth: 150
+ },
+ {
+ prop: 'sort',
+ label: '排序',
+ align: 'center',
+ width: 80
+ },
+ {
+ label: '状态',
+ prop: 'status',
+ align: 'center',
+ width: 80,
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS
+ }
+ },
+ {
+ label: '创建时间',
+ prop: 'created_at',
+ minWidth: 170,
+ align: 'center',
+ formatter: (row: any) => {
+ return formatDateTime(row.created_at)
+ }
+ }
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '50%',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '100px',
+ schema: [
+ {
+ label: '分类名称',
+ prop: 'LIKE_name',
+ component: 'Input',
+ colSpan: 6,
+ },
+ {
+ label: '状态',
+ prop: 'EQ_status',
+ component: 'ApiDict',
+ componentProps: {
+ clearable: true,
+ code: DictEnum.SYS_YES_NO
+ },
+ colSpan: 6
+ }
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ labelWidth: 100,
+ gutter: 20,
+ schema: [
+ {
+ label: 'ID',
+ prop: 'id',
+ component: 'Input',
+ colSpan: 24,
+ show: false
+ },
+ {
+ label: '分类名称',
+ prop: 'name',
+ component: 'Input',
+ colSpan: 24,
+ rules: [{ required: true, message: '请输入分类名称' }]
+ },
+ {
+ label: '分类描述',
+ prop: 'description',
+ component: 'Input',
+ componentProps: {
+ type: 'textarea',
+ rows: 3
+ },
+ colSpan: 24
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ component: 'InputNumber',
+ defaultValue: 0,
+ componentProps: {
+ min: 0,
+ max: 9999
+ },
+ colSpan: 12
+ },
+ {
+ label: '状态',
+ prop: 'status',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 12,
+ componentProps: {
+ isBtn: true,
+ code: DictEnum.SYS_YES_NO,
+ renderType: 'RadioGroup'
+ }
+ }
+ ]
+ }
+ }
+}
diff --git a/src/apps/official/views/ask/question/detail.vue b/src/apps/official/views/ask/question/detail.vue
new file mode 100644
index 00000000..59e304cf
--- /dev/null
+++ b/src/apps/official/views/ask/question/detail.vue
@@ -0,0 +1,321 @@
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/ask/question/index.vue b/src/apps/official/views/ask/question/index.vue
new file mode 100644
index 00000000..f3f71dbf
--- /dev/null
+++ b/src/apps/official/views/ask/question/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/ask/question/schemas/index.tsx b/src/apps/official/views/ask/question/schemas/index.tsx
new file mode 100644
index 00000000..f76a76b9
--- /dev/null
+++ b/src/apps/official/views/ask/question/schemas/index.tsx
@@ -0,0 +1,205 @@
+import { QuestionService } from '@/apps/official/api/ask'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { formatDateTime } from '@/utils'
+import { h } from 'vue'
+import { ElTag } from 'element-plus'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: QuestionService.list,
+ dialogTitle: '问题列表',
+ crudApi: {
+ // 删除接口
+ remove: QuestionService.remove,
+ // 详情接口
+ view: QuestionService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: false,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: false,
+ // 是否有详情
+ hasView: false,
+ // 新增权限码
+ addAuth: 'ask:question:create',
+ // 删除权限码
+ removeAuth: 'ask:question:delete',
+ // 修改权限码
+ editAuth: 'ask:question:update',
+ // 详情权限码
+ viewAuth: 'ask:question:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+ {
+ prop: 'id',
+ label: 'ID',
+ align: 'center',
+ width: 80,
+ visible: false
+ },
+ {
+ prop: 'category.name',
+ label: '分类',
+ align: 'center',
+ minWidth: 100,
+ formatter: (row: any) => {
+ return row.category?.name || '/'
+ }
+ },
+ {
+ prop: 'title',
+ label: '问题标题',
+ align: 'left',
+ minWidth: 200
+ },
+ {
+ prop: 'content',
+ label: '问题内容',
+ align: 'left',
+ minWidth: 300,
+ visible: false,
+ showOverflowTooltip: true
+ },
+ {
+ label: '标签',
+ prop: 'tags',
+ align: 'left',
+ minWidth: 150,
+ formatter: (row: any) => {
+ if (!row.tags || !Array.isArray(row.tags) || row.tags.length === 0) {
+ return '-'
+ }
+ return h('div', { style: { display: 'flex', flexWrap: 'wrap', gap: '4px', justifyContent: 'flex-start' } },
+ row.tags.map((t: any) =>
+ h(ElTag, { size: 'small', key: t.id }, () => t.name)
+ )
+ )
+ }
+ },
+ {
+ prop: 'view_count',
+ label: '浏览',
+ align: 'center',
+ width: 70
+ },
+ {
+ prop: 'comment_count',
+ label: '评论',
+ align: 'center',
+ width: 70
+ },
+ {
+ prop: 'like_count',
+ label: '收藏',
+ align: 'center',
+ width: 70
+ },
+ {
+ label: '是否置顶',
+ prop: 'is_sticky',
+ align: 'center',
+ width: 90,
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_YES_NO
+ }
+ },
+ {
+ label: '是否精华',
+ prop: 'is_excellent',
+ align: 'center',
+ width: 90,
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_YES_NO
+ }
+ },
+ {
+ prop: 'member.nickname',
+ label: '提问者',
+ align: 'center',
+ minWidth: 100
+ },
+ {
+ label: '创建时间',
+ prop: 'created_at',
+ minWidth: 170,
+ align: 'center',
+ visible: false,
+ formatter: (row: any) => {
+ return formatDateTime(row.created_at)
+ }
+ }
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '70%',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '100px',
+ schema: [
+ {
+ label: '关键词',
+ prop: 'keywords',
+ component: 'Input',
+ colSpan: 6,
+ componentProps: {
+ placeholder: '标题/内容'
+ }
+ },
+ {
+ label: '分类',
+ prop: 'EQ_category_id',
+ component: 'ApiSelect',
+ componentProps: {
+ clearable: true,
+ api: '/ask/category',
+ params: {
+ format: 'select'
+ },
+ },
+ colSpan: 6
+ },
+ {
+ label: '是否置顶',
+ prop: 'EQ_is_sticky',
+ component: 'ApiDict',
+ componentProps: {
+ clearable: true,
+ code: DictEnum.SYS_YES_NO
+ },
+ colSpan: 6
+ },
+ {
+ label: '是否精华',
+ prop: 'EQ_is_excellent',
+ component: 'ApiDict',
+ componentProps: {
+ clearable: true,
+ code: DictEnum.SYS_YES_NO
+ },
+ colSpan: 6
+ }
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ labelWidth: 120,
+ gutter: 20,
+ schema: []
+ }
+ }
+}
diff --git a/src/apps/official/views/market/index.vue b/src/apps/official/views/ask/tag/index.vue
similarity index 60%
rename from src/apps/official/views/market/index.vue
rename to src/apps/official/views/ask/tag/index.vue
index 1120fe25..21f2f473 100644
--- a/src/apps/official/views/market/index.vue
+++ b/src/apps/official/views/ask/tag/index.vue
@@ -1,5 +1,5 @@
-
+
@@ -8,10 +8,10 @@
import { useCrud } from "@/components/crud";
import { crudSchema } from "./schemas";
-const [BasicCrud] = useCrud({
+const [BasicCrud, crudApi] = useCrud({
...crudSchema(),
beforeFetch: (params: any) => {
- // return { ...params, format: "table_tree", page: 1, limit: 9999 };
+ return params;
},
});
diff --git a/src/apps/official/views/ask/tag/schemas/index.tsx b/src/apps/official/views/ask/tag/schemas/index.tsx
new file mode 100644
index 00000000..25a6bdc9
--- /dev/null
+++ b/src/apps/official/views/ask/tag/schemas/index.tsx
@@ -0,0 +1,177 @@
+import { TagService } from '@/apps/official/api/ask'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { formatDateTime } from '@/utils'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: TagService.list,
+ dialogTitle: '标签列表',
+ crudApi: {
+ // 新增接口
+ add: TagService.create,
+ // 修改接口
+ edit: TagService.update,
+ // 删除接口
+ remove: TagService.remove,
+ // 详情接口
+ view: TagService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: true,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: true,
+ // 是否有详情
+ hasView: true,
+ // 新增权限码
+ addAuth: 'ask:tag:create',
+ // 删除权限码
+ removeAuth: 'ask:tag:delete',
+ // 修改权限码
+ editAuth: 'ask:tag:update',
+ // 详情权限码
+ viewAuth: 'ask:tag:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+ {
+ prop: 'id',
+ label: 'ID',
+ align: 'center',
+ width: 200,
+ visible: false
+ },
+ {
+ prop: 'name',
+ label: '标签名称',
+ align: 'left',
+ minWidth: 150
+ },
+ {
+ prop: 'description',
+ label: '标签描述',
+ align: 'left',
+ minWidth: 200
+ },
+ {
+ prop: 'usage_count',
+ label: '使用次数',
+ align: 'right',
+ minWidth: 200
+ },
+ {
+ prop: 'sort',
+ label: '排序',
+ align: 'center',
+ width: 80
+ },
+ {
+ label: '状态',
+ prop: 'enabled',
+ align: 'center',
+ width: 80,
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS
+ }
+ },
+ {
+ label: '创建时间',
+ prop: 'created_at',
+ minWidth: 170,
+ align: 'center',
+ formatter: (row: any) => {
+ return formatDateTime(row.created_at)
+ }
+ }
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '50%',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '100px',
+ schema: [
+ {
+ label: '标签名称',
+ prop: 'LIKE_name',
+ component: 'Input',
+ colSpan: 6,
+ componentProps: {
+ clearable: true
+ }
+ },
+ {
+ label: '状态',
+ prop: 'EQ_enabled',
+ component: 'ApiDict',
+ componentProps: {
+ clearable: true,
+ code: DictEnum.SYS_ENABLED_STATUS
+ },
+ colSpan: 6
+ }
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ labelWidth: 100,
+ gutter: 20,
+ schema: [
+ {
+ label: 'ID',
+ prop: 'id',
+ component: 'Input',
+ colSpan: 24,
+ show: false
+ },
+ {
+ label: '标签名称',
+ prop: 'name',
+ component: 'Input',
+ colSpan: 24,
+ rules: [{ required: true, message: '请输入标签名称' }]
+ },
+ {
+ label: '标签描述',
+ prop: 'description',
+ component: 'Input',
+ componentProps: {
+ type: 'textarea',
+ rows: 3
+ },
+ colSpan: 24
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ component: 'InputNumber',
+ defaultValue: 0,
+ colSpan: 12
+ },
+ {
+ label: '状态',
+ prop: 'enabled',
+ component: 'ApiDict',
+ defaultValue: 1,
+ colSpan: 12,
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS,
+ renderType: 'RadioGroup'
+ }
+ }
+ ]
+ }
+ }
+}
diff --git a/src/apps/official/views/market/category/index.vue b/src/apps/official/views/market/category/index.vue
new file mode 100644
index 00000000..6e4e2a9f
--- /dev/null
+++ b/src/apps/official/views/market/category/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/src/apps/official/views/market/category/schemas/index.tsx b/src/apps/official/views/market/category/schemas/index.tsx
new file mode 100644
index 00000000..05a67acb
--- /dev/null
+++ b/src/apps/official/views/market/category/schemas/index.tsx
@@ -0,0 +1,160 @@
+import { MarketCategoryService } from '@/apps/official/api/market'
+import { DictEnum } from '@/apps/official/enums/dict-enum'
+import { CrudSchema } from '@/components/crud'
+import { formatDateTime } from '@/utils'
+
+
+// crud配置
+export const crudSchema = (): CrudSchema => {
+ return {
+ // 接口地址
+ api: MarketCategoryService.list,
+ dialogTitle: '应用分类',
+ crudApi: {
+ // 新增接口
+ add: MarketCategoryService.create,
+ // 修改接口
+ edit: MarketCategoryService.update,
+ // 删除接口
+ remove: MarketCategoryService.remove,
+ // 详情接口
+ view: MarketCategoryService.get
+ },
+ // 使用crud
+ useCrud: true,
+ // 是否有新增
+ hasAdd: true,
+ // 是否有删除
+ hasRemove: true,
+ // 是否有修改
+ hasEdit: true,
+ // 是否有详情
+ hasView: false,
+ // 新增权限码
+ addAuth: 'market:category:create',
+ // 删除权限码
+ removeAuth: 'market:category:delete',
+ // 修改权限码
+ editAuth: 'market:category:update',
+ // 详情权限码
+ viewAuth: 'market:category:read',
+ rowKey: 'id',
+ // 表格列定义
+ columns: [
+ {
+ type: 'selection'
+ },
+
+ {
+ prop: 'name',
+ label: '名称',
+ align: 'left',
+ minWidth: 120
+ },
+ {
+ label: '状态',
+ prop: 'enabled',
+ align: 'center',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS
+ }
+ },
+ {
+ prop: 'sort',
+ label: '排序',
+ width: 70,
+ align: 'center'
+ },
+ {
+ label: '创建时间',
+ prop: 'created_at',
+ minWidth: 150,
+ align: 'center',
+ formatter: (row: any) => {
+ return formatDateTime(row.created_at)
+ }
+ },
+ {
+ label: '更新时间',
+ prop: 'updated_at',
+ align: 'center',
+ visible: false,
+ formatter: (row: any) => {
+ return formatDateTime(row.updated_at)
+ }
+ }
+ ],
+ // 内置弹窗配置
+ dialogProps: {
+ width: '50%',
+ },
+ // 搜索表单配置
+ searchFormSchema: {
+ labelWidth: '120px',
+ schema: [
+ {
+ label: '名称',
+ prop: 'LIKE_name',
+ component: 'Input',
+ colSpan: 6,
+ rules: [],
+ },
+ {
+ prop: 'EQ_enabled',
+ label: '状态',
+ component: 'ApiDict',
+ componentProps: {
+ code: DictEnum.SYS_ENABLED_STATUS
+ },
+ colSpan: 6
+ }
+ ]
+ },
+ // crud表单配置
+ formSchema: {
+ labelWidth: 120,
+ gutter: 20,
+ schema: [
+ {
+ label: '名称',
+ prop: 'name',
+ component: 'Input',
+ rules: [
+ {
+ required: true,
+ message: '请输入名称',
+ trigger: 'blur'
+ }
+ ],
+ componentProps: () => ({
+ clearable: true,
+ placeholder: '请输入名称',
+ style:{
+ width: '50%'
+ }
+ })
+ },
+ {
+ label: '排序',
+ prop: 'sort',
+ component: 'InputNumber',
+ defaultValue: 0,
+ componentProps: {
+ min: 0,
+ max: 9999,
+ controlsPosition: 'right'
+ },
+ rules: [
+ {
+ required: true,
+ message: '请输入排序',
+ trigger: 'blur'
+ }
+ ]
+ }
+ ]
+
+ }
+ }
+}
diff --git a/src/apps/official/views/market/schemas/index.tsx b/src/apps/official/views/market/schemas/index.tsx
deleted file mode 100644
index fc007d89..00000000
--- a/src/apps/official/views/market/schemas/index.tsx
+++ /dev/null
@@ -1,380 +0,0 @@
-import { MarketService } from '@/apps/official/api/market'
-import { DictEnum } from '@/enums'
-import { CrudSchema } from '@/components/crud'
-import { Icon } from '@/components/icon'
-import { $t } from '@/locales'
-import api from '@/utils/http'
-import { h } from 'vue'
-
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: MenuService.list,
- dialogTitle: $t('web.menu.title'),
- tree: {
- id: 'id',
- pid: 'parent_id'
- },
- crudApi: {
- // 新增接口
- add: MenuService.create,
- // 修改接口
- edit: MenuService.update,
- // 删除接口
- remove: MenuService.delete,
- // 详情接口
- view: MenuService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: true,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: true,
- // 是否有详情
- hasView: true,
- // 新增权限码
- addAuth: 'web:menu:create',
- // 删除权限码
- removeAuth: 'web:menu:delete',
- // 修改权限码
- editAuth: 'web:menu:update',
- // 详情权限码
- viewAuth: 'web:menu:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
- {
- prop: 'name',
- label: $t('web.menu.table.columns.name'),
- formatter: (row) => {
- return row.icon
- ? h('span', {}, [
- h(Icon, {
- icon: row.icon
- }),
- h(
- 'span',
- {
- style: {
- paddingLeft: '6px'
- }
- },
- row.name
- )
- ])
- : h('span', {}, row.name)
- },
- minWidth: 200
- },
- {
- label: $t('web.menu.table.columns.category'),
- prop: 'category',
- component: 'ApiDict',
- align: 'center',
- componentProps: {
- code: DictEnum.WEB_MENU_CATEGORY,
- }
- },
- {
- prop: 'url',
- label: $t('web.menu.table.columns.url'),
- minWidth: 100,
- formatter(row) {
- if (row.type === 1) {
- return '/'
- }
- },
- },
- {
- prop: 'sort',
- label: $t('web.menu.table.columns.sort'),
- },
- {
- prop: 'type',
- label: $t('web.menu.table.columns.type'),
- component: 'ApiDict',
- align: 'left',
- componentProps: {
- code: DictEnum.WEB_MENU_TYPE,
- }
- },
- {
- prop: 'target',
- label: $t('web.menu.table.columns.target'),
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.WEB_MENU_TARGET,
- }
- },
- {
- prop: 'is_show',
- label: $t('web.menu.table.columns.is_show'),
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_YES_NO,
- }
- },
- {
- prop: 'enabled',
- label: $t('web.menu.table.columns.enabled'),
- component: 'ApiDict',
- align: 'center',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS,
- }
- },
-
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '60%',
- dialogType: 'drawer',
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '120px',
- schema: [
- {
- label: $t('web.menu.search.app'),
- prop: 'app',
- component: 'ApiSelect',
- colSpan: 6,
- rules: [],
- componentProps: (_value) => {
- return {
- api: '/system/menu/app/list',
- requestMethod: 'GET',
- }
-
- }
- },
- {
- prop: 'EQ_category',
- label: $t('web.menu.search.category'),
- component: 'ApiDict',
- colSpan: 6,
- componentProps: {
- code: DictEnum.WEB_MENU_CATEGORY,
- }
- },
- {
- prop: 'LINK_name',
- label: $t('web.menu.search.name'),
- component: 'Input',
- colSpan: 6
- },
- {
- prop: 'type',
- label: $t('web.menu.search.type'),
- component: 'ApiDict',
- componentProps: {
- placeholder: $t('web.menu.form.placeholder_type'),
- code: DictEnum.WEB_MENU_TYPE,
- clearable: true
- },
- colSpan: 6
- },
-
- ]
- },
- // crud表单配置
- formSchema: {
- showDefaultActions: true,
- labelWidth: '130px',
- schema: [
- {
- label: 'ID',
- prop: 'id',
- component: 'Input',
- colSpan: 24,
- show: false,
- ifDetail: false
- },
- {
- label: $t('web.menu.form.category'),
- prop: 'category',
- component: 'ApiDict',
- defaultValue: 1,
- colSpan: 24,
- rules: [],
- componentProps: {
- renderType: 'RadioGroup',
- placeholder: $t('web.menu.form.placeholder_type'),
- code: DictEnum.WEB_MENU_CATEGORY,
- isBtn: true,
- }
- },
- {
- label: $t('web.menu.form.app'),
- prop: 'app',
- component: 'ApiSelect',
- defaultValue: 'web',
- colSpan: 24,
- rules: [],
- componentProps: (_value) => {
- return {
- api: '/system/menu/app/list',
- requestMethod: 'GET',
- placeholder: $t('web.menu.form.placeholder_app'),
- style: {
- width: '330px',
- }
- }
-
- }
- },
- {
- label: $t('web.menu.form.source'),
- prop: 'source',
- component: 'Input',
- colSpan: 24,
- defaultValue: 'create',
- componentProps: {
- placeholder: $t('web.menu.form.source'),
- clearable: true
- }
- },
- {
- label: $t('web.menu.form.name'),
- prop: 'name',
- component: 'Input',
- colSpan: 24,
- rules: [{ required: true, message: $t('web.menu.form.rules_name') }],
- componentProps: {
- placeholder: $t('web.menu.form.name'),
- clearable: true
- }
- },
- {
- label: $t('web.menu.form.type'),
- prop: 'type',
- component: 'ApiDict',
- defaultValue: 1,
- colSpan: 24,
- rules: [{ required: true, message: $t('web.menu.form.rules_type') }],
- componentProps: {
- code: DictEnum.WEB_MENU_TYPE,
- placeholder: $t('web.menu.form.placeholder_type'),
- clearable: false
- }
- },
- {
- label: $t('web.menu.form.pid'),
- prop: 'pid',
- component: 'ApiTreeSelect',
- colSpan: 24,
- componentProps: (values) => {
- return {
- placeholder: $t('web.menu.form.placeholder_pid'),
- clearable: true,
- checkStrictly: true,
- api: '/web/menu',
- params: {
- format: 'tree',
- app: values.app || 'web',
- category: values.category || 1,
- },
- labelField: 'name',
- valueField: 'id'
- }
- }
- },
- {
- label: $t('web.menu.form.url'),
- prop: 'url',
- component: 'Input',
- colSpan: 24,
- ifShow(values) {
- return [2, 3, 4].includes(values.type)
- },
- componentProps: (values) => {
- return {
- placeholder: $t('web.menu.form.placeholder_url'),
- clearable: true,
- disabled: ![2, 3, 4].includes(values.type)
- }
- }
- },
- {
- label: $t('web.menu.form.target'),
- prop: 'target',
- component: 'ApiDict',
- defaultValue: 1,
- colSpan: 24,
- ifShow(values) {
- return [2, 3, 4].includes(values.type)
- },
- componentProps: (values) => {
- return {
- code: DictEnum.WEB_MENU_TARGET,
- placeholder: $t('web.menu.form.placeholder_target'),
- disabled: ![2, 3, 4].includes(values.type),
- clearable: false
- }
- }
- },
- {
- label: $t('web.menu.form.icon'),
- prop: 'icon',
- component: 'IconPicker',
- colSpan: 12,
- componentProps: (values) => {
- return {
- class: 'w-full',
- placeholder: $t('web.menu.form.placeholder_icon'),
- clearable: true,
- }
- }
- },
- {
- label: $t('web.menu.form.sort'),
- prop: 'sort',
- component: 'InputNumber',
- defaultValue: 999,
- colSpan: 12,
- componentProps: {
- placeholder: $t('web.menu.form.placeholder_sort'),
- clearable: true,
- min: -1
- }
- },
- {
- label: $t('web.menu.form.enabled'),
- prop: 'enabled',
- component: 'ApiDict',
- defaultValue: 1,
- colSpan: 12,
- componentProps: {
- placeholder: $t('web.menu.form.placeholder_enabled'),
- code: DictEnum.SYS_ENABLED_STATUS,
- isBtn: true,
- renderType: 'RadioGroup'
- }
- },
- {
- label: $t('web.menu.form.is_show'),
- prop: 'is_show',
- component: 'ApiDict',
- colSpan: 12,
- defaultValue: 1,
- componentProps: {
- placeholder: $t('web.menu.form.placeholder_is_show'),
- code: DictEnum.SYS_YES_NO,
- isBtn: true,
- renderType: 'RadioGroup'
- }
- },
- ]
- }
- }
-}
--
Gitee
From d64b86100e2613275d76686857a5279b00145b62 Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Sun, 8 Mar 2026 22:34:01 +0800
Subject: [PATCH 13/16] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BC=9A?=
=?UTF-8?q?=E5=91=98=E6=A0=87=E7=AD=BE=E6=9D=83=E9=99=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.auto-import.json | 2 +
src/views/member/tag/add-user.vue | 140 +++++++++++++++
src/views/member/tag/auth-menu.vue | 240 +++++++++++++++++++++++++
src/views/member/tag/index.vue | 65 ++++++-
src/views/member/tag/schemas/index.tsx | 2 +-
src/views/member/tag/user-role.vue | 173 ++++++++++++++++++
6 files changed, 619 insertions(+), 3 deletions(-)
create mode 100644 src/views/member/tag/add-user.vue
create mode 100644 src/views/member/tag/auth-menu.vue
create mode 100644 src/views/member/tag/user-role.vue
diff --git a/.auto-import.json b/.auto-import.json
index 2f09d16c..5d6c79f3 100644
--- a/.auto-import.json
+++ b/.auto-import.json
@@ -5,8 +5,10 @@
"ComputedRef": true,
"DirectiveBinding": true,
"EffectScope": true,
+ "ElButton": true,
"ElLoading": true,
"ElMessage": true,
+ "ElMessageBox": true,
"ExtractDefaultPropTypes": true,
"ExtractPropTypes": true,
"ExtractPublicPropTypes": true,
diff --git a/src/views/member/tag/add-user.vue b/src/views/member/tag/add-user.vue
new file mode 100644
index 00000000..8986aa48
--- /dev/null
+++ b/src/views/member/tag/add-user.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
diff --git a/src/views/member/tag/auth-menu.vue b/src/views/member/tag/auth-menu.vue
new file mode 100644
index 00000000..aa838627
--- /dev/null
+++ b/src/views/member/tag/auth-menu.vue
@@ -0,0 +1,240 @@
+
+
+
+
+
diff --git a/src/views/member/tag/index.vue b/src/views/member/tag/index.vue
index 7616543f..d69d7949 100644
--- a/src/views/member/tag/index.vue
+++ b/src/views/member/tag/index.vue
@@ -1,14 +1,75 @@
\ No newline at end of file
+
diff --git a/src/views/member/tag/schemas/index.tsx b/src/views/member/tag/schemas/index.tsx
index 11b9a563..850acd90 100644
--- a/src/views/member/tag/schemas/index.tsx
+++ b/src/views/member/tag/schemas/index.tsx
@@ -29,7 +29,7 @@ export const crudSchema = (): CrudSchema => {
// 是否有删除
hasRemove: true,
// 是否有修改
- hasEdit: true,
+ hasEdit: false,
// 是否有详情
hasView: true,
// 新增权限码
diff --git a/src/views/member/tag/user-role.vue b/src/views/member/tag/user-role.vue
new file mode 100644
index 00000000..75590100
--- /dev/null
+++ b/src/views/member/tag/user-role.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
--
Gitee
From 3ef54fac057d8dc31bd6ffecc33e6e3f560fdda0 Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Tue, 10 Mar 2026 14:50:09 +0800
Subject: [PATCH 14/16] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=BC=9A?=
=?UTF-8?q?=E5=91=98=E6=A0=87=E7=AD=BE=E8=AF=AD=E8=A8=80=E5=8C=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.auto-import.json | 2 -
.env.development | 4 +-
src/api/member/auth/auth-model.d.ts | 0
src/api/member/auth/auth.ts | 46 ++
src/api/member/auth/index.ts | 1 +
src/apps/demo/mock/temp/articleList.ts | 20 +-
src/apps/demo/mock/temp/formData.ts | 20 +-
src/apps/demo/views/article/detail/index.vue | 4 +-
src/apps/demo/views/examples/tables/tree.vue | 2 +-
.../core/charts/art-map-chart/index.vue | 478 +++++++++---------
src/lang/en/member/member.tag.auth.json | 21 +
src/lang/en/member/member.tag.user-tag.json | 32 ++
src/lang/en/member/member.tag.user.json | 35 ++
src/lang/zh-cn/member/member.tag.auth.json | 21 +
src/lang/zh-cn/member/member.tag.user.json | 35 ++
src/locales/lang/en/member/member.user.json | 41 --
src/locales/lang/en/monitor/logs.login.json | 51 --
src/locales/lang/en/monitor/logs.operate.json | 69 ---
.../lang/en/monitor/monitor.redis.json | 36 --
.../lang/en/monitor/monitor.server.json | 24 -
.../lang/en/setting/setting.config.json | 100 ----
src/locales/lang/en/setting/setting.dept.json | 82 ---
.../lang/en/setting/setting.dict.item.json | 85 ----
src/locales/lang/en/setting/setting.dict.json | 91 ----
.../en/setting/setting.gateway.limiter.json | 91 ----
.../lang/en/setting/setting.message.json | 58 ---
.../lang/en/setting/setting.notice.json | 70 ---
src/locales/lang/en/setting/setting.post.json | 66 ---
src/locales/lang/en/system/system.menu.json | 130 -----
src/locales/lang/en/system/system.role.json | 97 ----
.../lang/en/system/system.user.center.json | 60 ---
src/locales/lang/en/system/system.user.json | 126 -----
src/locales/lang/en/tools/tools.crontab.json | 83 ---
.../lang/en/tools/tools.crontab.log.json | 45 --
.../lang/en/tools/tools.delegation.json | 21 -
src/locales/lang/en/tools/tools.features.json | 26 -
src/locales/lang/en/tools/tools.files.json | 63 ---
.../lang/en/tools/tools.generator.code.json | 152 ------
.../lang/en/tools/tools.plugin.develop.json | 52 --
src/locales/lang/en/tools/tools.recycle.json | 59 ---
src/locales/lang/en/tools/tools.terminal.json | 47 --
src/locales/lang/en/web/web.link.json | 28 -
src/locales/lang/en/web/web.menu.json | 47 --
.../lang/zh-cn/member/member.level.json | 41 --
.../lang/zh-cn/member/member.points.json | 45 --
src/locales/lang/zh-cn/member/member.tag.json | 36 --
.../lang/zh-cn/member/member.user.json | 46 --
.../lang/zh-cn/monitor/logs.login.json | 51 --
.../lang/zh-cn/monitor/logs.operate.json | 69 ---
.../lang/zh-cn/monitor/monitor.redis.json | 36 --
.../lang/zh-cn/monitor/monitor.server.json | 24 -
.../lang/zh-cn/setting/setting.config.json | 100 ----
.../lang/zh-cn/setting/setting.dept.json | 82 ---
.../lang/zh-cn/setting/setting.dict.item.json | 85 ----
.../lang/zh-cn/setting/setting.dict.json | 91 ----
.../setting/setting.gateway.blacklist.json | 87 ----
.../setting/setting.gateway.limiter.json | 91 ----
.../lang/zh-cn/setting/setting.message.json | 58 ---
.../lang/zh-cn/setting/setting.notice.json | 70 ---
.../lang/zh-cn/setting/setting.post.json | 66 ---
.../lang/zh-cn/system/system.menu.json | 130 -----
.../lang/zh-cn/system/system.role.json | 97 ----
.../lang/zh-cn/system/system.user.center.json | 60 ---
.../lang/zh-cn/system/system.user.json | 126 -----
.../lang/zh-cn/tools/tools.crontab.json | 83 ---
.../lang/zh-cn/tools/tools.crontab.log.json | 45 --
.../lang/zh-cn/tools/tools.delegation.json | 21 -
.../lang/zh-cn/tools/tools.features.json | 26 -
src/locales/lang/zh-cn/tools/tools.files.json | 63 ---
.../zh-cn/tools/tools.generator.code.json | 152 ------
.../zh-cn/tools/tools.plugin.develop.json | 52 --
.../lang/zh-cn/tools/tools.recycle.json | 59 ---
.../lang/zh-cn/tools/tools.terminal.json | 47 --
src/locales/lang/zh-cn/web/web.link.json | 28 -
src/locales/lang/zh-cn/web/web.menu.json | 47 --
src/router/utils/registerRoutes.ts | 8 +-
src/views/member/tag/add-user.vue | 48 +-
src/views/member/tag/auth-menu.vue | 78 ++-
src/views/member/tag/index.vue | 7 +-
.../tag/{user-role.vue => user-tag.vue} | 72 +--
src/views/member/user/schemas/index.tsx | 9 +-
src/views/tools/crontab/logs-wrap.vue | 2 +-
src/views/tools/delegation/index.vue | 2 +-
83 files changed, 591 insertions(+), 4370 deletions(-)
create mode 100644 src/api/member/auth/auth-model.d.ts
create mode 100644 src/api/member/auth/auth.ts
create mode 100644 src/api/member/auth/index.ts
create mode 100644 src/lang/en/member/member.tag.auth.json
create mode 100644 src/lang/en/member/member.tag.user-tag.json
create mode 100644 src/lang/en/member/member.tag.user.json
create mode 100644 src/lang/zh-cn/member/member.tag.auth.json
create mode 100644 src/lang/zh-cn/member/member.tag.user.json
delete mode 100644 src/locales/lang/en/member/member.user.json
delete mode 100644 src/locales/lang/en/monitor/logs.login.json
delete mode 100644 src/locales/lang/en/monitor/logs.operate.json
delete mode 100644 src/locales/lang/en/monitor/monitor.redis.json
delete mode 100644 src/locales/lang/en/monitor/monitor.server.json
delete mode 100644 src/locales/lang/en/setting/setting.config.json
delete mode 100644 src/locales/lang/en/setting/setting.dept.json
delete mode 100644 src/locales/lang/en/setting/setting.dict.item.json
delete mode 100644 src/locales/lang/en/setting/setting.dict.json
delete mode 100644 src/locales/lang/en/setting/setting.gateway.limiter.json
delete mode 100644 src/locales/lang/en/setting/setting.message.json
delete mode 100644 src/locales/lang/en/setting/setting.notice.json
delete mode 100644 src/locales/lang/en/setting/setting.post.json
delete mode 100644 src/locales/lang/en/system/system.menu.json
delete mode 100644 src/locales/lang/en/system/system.role.json
delete mode 100644 src/locales/lang/en/system/system.user.center.json
delete mode 100644 src/locales/lang/en/system/system.user.json
delete mode 100644 src/locales/lang/en/tools/tools.crontab.json
delete mode 100644 src/locales/lang/en/tools/tools.crontab.log.json
delete mode 100644 src/locales/lang/en/tools/tools.delegation.json
delete mode 100644 src/locales/lang/en/tools/tools.features.json
delete mode 100644 src/locales/lang/en/tools/tools.files.json
delete mode 100644 src/locales/lang/en/tools/tools.generator.code.json
delete mode 100644 src/locales/lang/en/tools/tools.plugin.develop.json
delete mode 100644 src/locales/lang/en/tools/tools.recycle.json
delete mode 100644 src/locales/lang/en/tools/tools.terminal.json
delete mode 100644 src/locales/lang/en/web/web.link.json
delete mode 100644 src/locales/lang/en/web/web.menu.json
delete mode 100644 src/locales/lang/zh-cn/member/member.level.json
delete mode 100644 src/locales/lang/zh-cn/member/member.points.json
delete mode 100644 src/locales/lang/zh-cn/member/member.tag.json
delete mode 100644 src/locales/lang/zh-cn/member/member.user.json
delete mode 100644 src/locales/lang/zh-cn/monitor/logs.login.json
delete mode 100644 src/locales/lang/zh-cn/monitor/logs.operate.json
delete mode 100644 src/locales/lang/zh-cn/monitor/monitor.redis.json
delete mode 100644 src/locales/lang/zh-cn/monitor/monitor.server.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.config.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.dept.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.dict.item.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.dict.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.gateway.blacklist.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.gateway.limiter.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.message.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.notice.json
delete mode 100644 src/locales/lang/zh-cn/setting/setting.post.json
delete mode 100644 src/locales/lang/zh-cn/system/system.menu.json
delete mode 100644 src/locales/lang/zh-cn/system/system.role.json
delete mode 100644 src/locales/lang/zh-cn/system/system.user.center.json
delete mode 100644 src/locales/lang/zh-cn/system/system.user.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.crontab.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.crontab.log.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.delegation.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.features.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.files.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.generator.code.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.plugin.develop.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.recycle.json
delete mode 100644 src/locales/lang/zh-cn/tools/tools.terminal.json
delete mode 100644 src/locales/lang/zh-cn/web/web.link.json
delete mode 100644 src/locales/lang/zh-cn/web/web.menu.json
rename src/views/member/tag/{user-role.vue => user-tag.vue} (62%)
diff --git a/.auto-import.json b/.auto-import.json
index 5d6c79f3..2f09d16c 100644
--- a/.auto-import.json
+++ b/.auto-import.json
@@ -5,10 +5,8 @@
"ComputedRef": true,
"DirectiveBinding": true,
"EffectScope": true,
- "ElButton": true,
"ElLoading": true,
"ElMessage": true,
- "ElMessageBox": true,
"ExtractDefaultPropTypes": true,
"ExtractPropTypes": true,
"ExtractPublicPropTypes": true,
diff --git a/.env.development b/.env.development
index 152b6429..00a7bb0a 100755
--- a/.env.development
+++ b/.env.development
@@ -10,5 +10,7 @@ VITE_API_URL = /adminapi
VITE_DROP_CONSOLE = false
# 本地开发代理的目标后端地址(仅开发环境生效,用于解决跨域)
-VITE_API_PROXY_URL = http://127.0.0.1:8001
+# VITE_API_PROXY_URL = http://127.0.0.1:8001
+
+VITE_API_PROXY_URL = http://demo.madong.tech
diff --git a/src/api/member/auth/auth-model.d.ts b/src/api/member/auth/auth-model.d.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/src/api/member/auth/auth.ts b/src/api/member/auth/auth.ts
new file mode 100644
index 00000000..6defae06
--- /dev/null
+++ b/src/api/member/auth/auth.ts
@@ -0,0 +1,46 @@
+import BaseService from '@/api/core/base';
+import request from '@/utils/http';
+
+const baseUrl = '/member/auth';
+
+export const AuthService = {
+ ...BaseService({ baseUrl }),
+ tagMenuIds(params: any) {
+ return request.get({ url: `${baseUrl}/tag-menu-ids`, params });
+ },
+
+ tagScopeIds(params: any) {
+ return request.get({ url: `${baseUrl}/tag-scope-ids`, params });
+ },
+
+ userListByTagId(params: any) {
+ return request.get({ url: `${baseUrl}/user-list-by-tag-id`, params });
+ },
+
+ userListExcludeTagId(params: any) {
+ return request.get({ url: `${baseUrl}/user-list-exclude-tag-id`, params });
+ },
+
+ removeUserTag(data: any) {
+ return request.post({ url: `${baseUrl}/remove-user-tag`, data });
+ },
+
+ saveTagMenu(data: any) {
+ return request.post({ url: `${baseUrl}/save-tag-menu`, data });
+ },
+
+ saveUserTag(data: any) {
+ return request.post({ url: `${baseUrl}/save-user-tag`, data });
+ },
+
+ getMemberAllPermission() {
+ return request.get({ url: `${baseUrl}/permissions`, params: {} });
+ },
+
+ getMemberPermissionByTagId(id: number | string, params: any) {
+ return request.get({ url: `${baseUrl}/${id}/tag-permissions`, params: { format: 'tree' } });
+ },
+
+};
+
+export default AuthService;
diff --git a/src/api/member/auth/index.ts b/src/api/member/auth/index.ts
new file mode 100644
index 00000000..269586ee
--- /dev/null
+++ b/src/api/member/auth/index.ts
@@ -0,0 +1 @@
+export * from './auth';
diff --git a/src/apps/demo/mock/temp/articleList.ts b/src/apps/demo/mock/temp/articleList.ts
index 4d0bcf9f..1426181e 100644
--- a/src/apps/demo/mock/temp/articleList.ts
+++ b/src/apps/demo/mock/temp/articleList.ts
@@ -1,13 +1,13 @@
-import cover1 from '@features/demo/assets/images/cover/img1.webp'
-import cover2 from '@features/demo/assets/images/cover/img2.webp'
-import cover3 from '@features/demo/assets/images/cover/img3.webp'
-import cover4 from '@features/demo/assets/images/cover/img4.webp'
-import cover5 from '@features/demo/assets/images/cover/img5.webp'
-import cover6 from '@features/demo/assets/images/cover/img6.webp'
-import cover7 from '@features/demo/assets/images/cover/img7.webp'
-import cover8 from '@features/demo/assets/images/cover/img8.webp'
-import cover9 from '@features/demo/assets/images/cover/img9.webp'
-import cover10 from '@features/demo/assets/images/cover/img10.webp'
+import cover1 from '@/apps/demo/assets/images/cover/img1.webp'
+import cover2 from '@/apps/demo/assets/images/cover/img2.webp'
+import cover3 from '@/apps/demo/assets/images/cover/img3.webp'
+import cover4 from '@/apps/demo/assets/images/cover/img4.webp'
+import cover5 from '@/apps/demo/assets/images/cover/img5.webp'
+import cover6 from '@/apps/demo/assets/images/cover/img6.webp'
+import cover7 from '@/apps/demo/assets/images/cover/img7.webp'
+import cover8 from '@/apps/demo/assets/images/cover/img8.webp'
+import cover9 from '@/apps/demo/assets/images/cover/img9.webp'
+import cover10 from '@/apps/demo/assets/images/cover/img10.webp'
export const ArticleList = [
{
diff --git a/src/apps/demo/mock/temp/formData.ts b/src/apps/demo/mock/temp/formData.ts
index 421b8ee0..52547d51 100644
--- a/src/apps/demo/mock/temp/formData.ts
+++ b/src/apps/demo/mock/temp/formData.ts
@@ -1,13 +1,13 @@
-import avatar1 from '@features/demo/assets/images/avatar/avatar1.webp'
-import avatar2 from '@features/demo/assets/images/avatar/avatar2.webp'
-import avatar3 from '@features/demo/assets/images/avatar/avatar3.webp'
-import avatar4 from '@features/demo/assets/images/avatar/avatar4.webp'
-import avatar5 from '@features/demo/assets/images/avatar/avatar5.webp'
-import avatar6 from '@features/demo/assets/images/avatar/avatar6.webp'
-import avatar7 from '@features/demo/assets/images/avatar/avatar7.webp'
-import avatar8 from '@features/demo/assets/images/avatar/avatar8.webp'
-import avatar9 from '@features/demo/assets/images/avatar/avatar9.webp'
-import avatar10 from '@features/demo/assets/images/avatar/avatar10.webp'
+import avatar1 from '@/apps/demo/assets/images/avatar/avatar1.webp'
+import avatar2 from '@/apps/demo/assets/images/avatar/avatar2.webp'
+import avatar3 from '@/apps/demo/assets/images/avatar/avatar3.webp'
+import avatar4 from '@/apps/demo/assets/images/avatar/avatar4.webp'
+import avatar5 from '@/apps/demo/assets/images/avatar/avatar5.webp'
+import avatar6 from '@/apps/demo/assets/images/avatar/avatar6.webp'
+import avatar7 from '@/apps/demo/assets/images/avatar/avatar7.webp'
+import avatar8 from '@/apps/demo/assets/images/avatar/avatar8.webp'
+import avatar9 from '@/apps/demo/assets/images/avatar/avatar9.webp'
+import avatar10 from '@/apps/demo/assets/images/avatar/avatar10.webp'
export interface User {
id: number
diff --git a/src/apps/demo/views/article/detail/index.vue b/src/apps/demo/views/article/detail/index.vue
index f49f220a..5924d6bf 100644
--- a/src/apps/demo/views/article/detail/index.vue
+++ b/src/apps/demo/views/article/detail/index.vue
@@ -10,8 +10,8 @@
diff --git a/src/lang/en/member/member.tag.auth.json b/src/lang/en/member/member.tag.auth.json
new file mode 100644
index 00000000..864d8cb9
--- /dev/null
+++ b/src/lang/en/member/member.tag.auth.json
@@ -0,0 +1,21 @@
+{
+ "title": "Auth Menu",
+ "auth_manage": "【{name}】Auth Menu",
+ "expand": {
+ "title": "Expand/Collapse",
+ "expand_all": "Expand All",
+ "expand_level1": "Expand Level 1",
+ "expand_level2": "Expand Level 2",
+ "collapse_all": "Collapse All"
+ },
+ "tag": {
+ "nav_menu": "Nav Menu",
+ "member_menu": "Member Menu",
+ "unknown": "Unknown",
+ "auth": "Auth",
+ "public": "Public"
+ },
+ "message": {
+ "auth_success": "Auth successfully"
+ }
+}
\ No newline at end of file
diff --git a/src/lang/en/member/member.tag.user-tag.json b/src/lang/en/member/member.tag.user-tag.json
new file mode 100644
index 00000000..f4a28367
--- /dev/null
+++ b/src/lang/en/member/member.tag.user-tag.json
@@ -0,0 +1,32 @@
+{
+ "title": "User List",
+ "member_manage": "【{name}】Member Management",
+ "search": {
+ "user_name": "Username",
+ "placeholder": {
+ "user_name": "Please input username",
+ "real_name": "Please input real name",
+ "mobile_phone": "Please input mobile phone"
+ },
+ "real_name": "Real Name",
+ "mobile_phone": "Mobile Phone"
+ },
+ "table": {
+ "columns": {
+ "user_name": "Username",
+ "real_name": "Real Name",
+ "mobile_phone": "Mobile Phone"
+ }
+ },
+ "actions": {
+ "add_user": "Add User",
+ "remove_user": "Remove User"
+ },
+ "confirm": {
+ "title": "Tips",
+ "content": "Are you sure to delete?"
+ },
+ "message": {
+ "delete_success": "Delete successfully"
+ }
+}
\ No newline at end of file
diff --git a/src/lang/en/member/member.tag.user.json b/src/lang/en/member/member.tag.user.json
new file mode 100644
index 00000000..fd8228ad
--- /dev/null
+++ b/src/lang/en/member/member.tag.user.json
@@ -0,0 +1,35 @@
+{
+ "add_title": "Add User",
+ "list_title": "User List",
+ "member_manage": "【{name}】Member Management",
+ "message": {
+ "select_user": "Please select user",
+ "save_success": "Save successfully",
+ "delete_success": "Delete successfully"
+ },
+ "search": {
+ "user_name": "Username",
+ "placeholder": {
+ "user_name": "Please input username",
+ "real_name": "Please input real name",
+ "mobile_phone": "Please input mobile phone"
+ },
+ "real_name": "Real Name",
+ "mobile_phone": "Mobile Phone"
+ },
+ "table": {
+ "columns": {
+ "user_name": "Username",
+ "real_name": "Real Name",
+ "mobile_phone": "Mobile Phone"
+ }
+ },
+ "actions": {
+ "add_user": "Add User",
+ "remove_user": "Remove User"
+ },
+ "confirm": {
+ "title": "Tips",
+ "content": "Are you sure to delete?"
+ }
+}
\ No newline at end of file
diff --git a/src/lang/zh-cn/member/member.tag.auth.json b/src/lang/zh-cn/member/member.tag.auth.json
new file mode 100644
index 00000000..652d1582
--- /dev/null
+++ b/src/lang/zh-cn/member/member.tag.auth.json
@@ -0,0 +1,21 @@
+{
+ "title": "授权菜单",
+ "auth_manage": "【{name}】授权菜单",
+ "expand": {
+ "title": "展开/折叠",
+ "expand_all": "展开所有",
+ "expand_level1": "展开一级",
+ "expand_level2": "展开二级",
+ "collapse_all": "折叠所有"
+ },
+ "tag": {
+ "nav_menu": "导航菜单",
+ "member_menu": "会员菜单",
+ "unknown": "未知",
+ "auth": "授权",
+ "public": "公开"
+ },
+ "message": {
+ "auth_success": "授权成功"
+ }
+}
\ No newline at end of file
diff --git a/src/lang/zh-cn/member/member.tag.user.json b/src/lang/zh-cn/member/member.tag.user.json
new file mode 100644
index 00000000..85a26176
--- /dev/null
+++ b/src/lang/zh-cn/member/member.tag.user.json
@@ -0,0 +1,35 @@
+{
+ "add_title": "添加用户",
+ "list_title": "用户列表",
+ "member_manage": "【{name}】成员管理",
+ "message": {
+ "select_user": "请选择用户",
+ "save_success": "保存成功",
+ "delete_success": "删除成功"
+ },
+ "search": {
+ "user_name": "用户名",
+ "placeholder": {
+ "user_name": "请输入用户名",
+ "real_name": "请输入真实姓名",
+ "mobile_phone": "请输入手机号码"
+ },
+ "real_name": "真实姓名",
+ "mobile_phone": "手机号码"
+ },
+ "table": {
+ "columns": {
+ "user_name": "用户名",
+ "real_name": "真实姓名",
+ "mobile_phone": "手机号码"
+ }
+ },
+ "actions": {
+ "add_user": "添加用户",
+ "remove_user": "移除用户"
+ },
+ "confirm": {
+ "title": "提示",
+ "content": "确定删除吗?"
+ }
+}
\ No newline at end of file
diff --git a/src/locales/lang/en/member/member.user.json b/src/locales/lang/en/member/member.user.json
deleted file mode 100644
index 091fa09f..00000000
--- a/src/locales/lang/en/member/member.user.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "title": "Member Management",
- "table": {
- "columns": {
- "id": "ID",
- "username": "Username",
- "nickname": "Nickname",
- "phone": "Phone",
- "email": "Email",
- "level_name": "Member Level",
- "balance": "Balance",
- "points": "Points",
- "status": "Status",
- "create_time": "Registration Time"
- }
- },
- "search": {
- "username": "Username",
- "phone": "Phone",
- "status": "Status"
- },
- "form": {
- "username": "Username",
- "nickname": "Nickname",
- "phone": "Phone",
- "email": "Email",
- "password": "Password",
- "level_id": "Member Level",
- "status": "Status"
- },
- "actions": {
- "reset_password": "Reset Password",
- "enable": "Enable",
- "disable": "Disable",
- "assign_tags": "Assign Tags"
- },
- "status": {
- "normal": "Normal",
- "disabled": "Disabled"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/monitor/logs.login.json b/src/locales/lang/en/monitor/logs.login.json
deleted file mode 100644
index 36e182d0..00000000
--- a/src/locales/lang/en/monitor/logs.login.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "list": {
- "title": "Login Logs",
- "table": {
- "columns": {
- "id": "ID",
- "user_name": "Username",
- "ip": "IP",
- "ip_location": "IP Location",
- "os": "Operating System",
- "browser": "Browser",
- "status": "Login Status",
- "message": "Message",
- "key": "Key",
- "remark": "Remark",
- "login_date": "Login Time",
- "operation": "Operation",
- "actions": {
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "empty": {
- "label": "Clear",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to clear all login records?"
- },
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "user_name": "Username",
- "ip": "Login IP",
- "status": "Login Status",
- "created_date": "Login Time",
- "placeholder": {
- "user_name": "Please enter username",
- "ip": "Please enter login IP address",
- "status": "Please select login status"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/monitor/logs.operate.json b/src/locales/lang/en/monitor/logs.operate.json
deleted file mode 100644
index fe6d7467..00000000
--- a/src/locales/lang/en/monitor/logs.operate.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "list": {
- "title": "Operation Logs",
- "table": {
- "columns": {
- "id": "ID",
- "name": "Module",
- "app": "App",
- "ip": "IP",
- "ip_location": "IP Address",
- "browser": "Browser",
- "os": "Operating System",
- "url": "Request Address",
- "class_name": "Class Name",
- "action": "Method Name",
- "method": "Request Method",
- "param": "Request Parameters",
- "result": "Return Result",
- "user_name": "Operator",
- "created_date": "Operation Time",
- "operation": "Operation",
- "actions": {
- "detail": "Details",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "empty": {
- "label": "Clear",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to clear all operation records?"
- },
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "user_name": "Operator",
- "ip": "Request IP",
- "url": "Request Address",
- "created_date": "Operation Time",
- "placeholder": {
- "user_name": "Please enter operator",
- "ip": "Please enter IP address",
- "url": "Please enter request address"
- }
- }
- },
- "form": {
- "detail": "Details",
- "app": "Application Name",
- "ip": "IP Address",
- "url": "Request Address",
- "class_name": "Class Name",
- "method": "Request Method",
- "action": "Operation Method",
- "created_date": "Operation Time",
- "user_name": "Operator",
- "param": "Request Parameters",
- "result": "Return Result"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/monitor/monitor.redis.json b/src/locales/lang/en/monitor/monitor.redis.json
deleted file mode 100644
index 53be46b1..00000000
--- a/src/locales/lang/en/monitor/monitor.redis.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "title": "Redis Monitoring Information",
- "columns": {
- "redis_version": "Redis Version",
- "redis_mode": "Redis Mode",
- "os": "Operating System",
- "arch_bits": "Architecture Bits",
- "multiplexing_api": "Multiplexing API",
- "process_id": "Process ID",
- "run_id": "Run ID",
- "tcp_port": "TCP Port",
- "uptime_in_days": "Uptime (Days)",
- "role": "Role",
- "connected_clients": "Number of Clients",
- "used_memory_human": "Used Memory",
- "used_memory_peak_human": "Peak Used Memory",
- "mem_allocator": "Memory Allocator",
- "total_connections_received": "Total Connections Received",
- "total_commands_processed": "Total Commands Processed",
- "instantaneous_ops_per_sec": "Instantaneous Operations Per Second",
- "total_net_input_bytes": "Total Network Input Bytes",
- "instantaneous_input_kbps": "Instantaneous Input Rate (KB/s)",
- "instantaneous_output_kbps": "Instantaneous Output Rate (KB/s)",
- "rejected_connections": "Rejected Connections",
- "keyspace_hits": "Keyspace Hits",
- "keyspace_misses": "Keyspace Misses",
- "config_file": "Configuration File Path"
- },
- "tip": {
- "yes": "Yes",
- "no": "No",
- "years": "Years",
- "day": "Days",
- "less_day": "Less than a day"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/monitor/monitor.server.json b/src/locales/lang/en/monitor/monitor.server.json
deleted file mode 100644
index 2b8377ca..00000000
--- a/src/locales/lang/en/monitor/monitor.server.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "columns": {
- "key": "Property",
- "value": "Value",
- "filesystem": "Filesystem",
- "size": "Total Size",
- "available": "Available Space",
- "used": "Used Space",
- "use_percentage": "Usage Percentage",
- "mounted_on": "Mounted On"
- },
- "cpu": {
- "title": "CPU"
- },
- "memory": {
- "title": "Memory"
- },
- "server": {
- "title": "Server Details"
- },
- "disk": {
- "title": "Disk Status"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.config.json b/src/locales/lang/en/setting/setting.config.json
deleted file mode 100644
index 4ea5a4eb..00000000
--- a/src/locales/lang/en/setting/setting.config.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "site": {
- "title": "Site Settings",
- "open": "Site Open",
- "url": "Site URL",
- "name": "Site Name",
- "logo": "Site Logo",
- "network_security": "Network Record No.",
- "description": "Site Description",
- "record_no": "Website ICP",
- "icp_url": "ICP URL",
- "network_security_url": "Network Security Record Link",
- "keywords": "Keywords",
- "placeholder": {
- "title": "Please enter site name",
- "url": "Please enter backend site address",
- "name": "Please enter site name",
- "network_security": "Please enter network record no.",
- "description": "Please fill in site description",
- "record_no": "Please enter website ICP",
- "icp_url": "Please enter ICP URL",
- "network_security_url": "Please enter network security record link",
- "keywords": "Please enter site keywords"
- },
- "button": {
- "submit": "Save"
- }
- },
- "upload": {
- "title": "Upload Settings",
- "mode": "Upload Mode",
- "single_limit": "Upload Size",
- "total_limit": "File Limit",
- "nums": "Quantity Limit",
- "exclude": "Disallowed File Types",
- "extend": {
- "root": "Storage Directory",
- "secretId": "secretId",
- "accessKey": "accessKey",
- "accessKeyId": "accessKeyId",
- "secretKey": "secretKey",
- "key": "key",
- "accessKeySecret": "accessKeySecret",
- "secret": "secret",
- "bucket": "Bucket Name",
- "dirname": "Directory Name",
- "domain": "Domain Address",
- "endpoint": "Endpoint",
- "region": "Region",
- "acl": "Acl",
- "remark": "Remark"
- },
- "button": {
- "submit": "Save",
- "extend": "Extended Settings"
- }
- },
- "email": {
- "title": "Email Settings",
- "Host": "SMTP Server",
- "Port": "SMTP Port",
- "Username": "SMTP Username",
- "Password": "SMTP Password",
- "SMTPSecure": "SMTP Authentication Method",
- "From": "Default Sender",
- "FromName": "Default Sender Name",
- "test": "Test Address",
- "button": {
- "submit": "Save"
- },
- "tip": {
- "test": "Send Test Email"
- },
- "placeholder": {
- "Host": "Please enter SMTP server address",
- "Port": "Please enter SMTP port",
- "Username": "Please enter SMTP username",
- "Password": "Please enter SMTP password",
- "SMTPSecure": "Please enter SMTP authentication method",
- "From": "Please enter default sender",
- "FromName": "Please enter default sender name",
- "test": "Please enter test address"
- }
- },
- "sms": {
- "title": "SMS Settings",
- "access_key_id": "access_key_id",
- "access_key_secret": "access_key_secret",
- "enable": "Enable",
- "sign_name": "sign_name",
- "placeholder": {
- "access_key_id": "Please enter access_key_id",
- "access_key_secret": "Please enter access_key_secret",
- "sign_name": "Please enter default signature"
- },
- "button": {
- "submit": "Save"
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.dept.json b/src/locales/lang/en/setting/setting.dept.json
deleted file mode 100644
index 7302e3db..00000000
--- a/src/locales/lang/en/setting/setting.dept.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "list": {
- "title": "Department Management",
- "table": {
- "columns": {
- "id": "ID",
- "name": "Department Name",
- "code": "Department Code",
- "parent_dept": "Parent Department",
- "enabled": "Status",
- "leader": "Department Leader",
- "remark": "Remark",
- "sort": "Sort",
- "created_date": "Creation Time",
- "operation": "Operation",
- "actions": {
- "append": "Add Subordinate",
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- },
- "status": {
- "disabled": "Disable",
- "enabled": "Enable",
- "confirm": "Do you want to change the status of {0} to [{1}]?",
- "title": "Change Status"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "collapse": "Collapse",
- "expand": "Expand",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "name": "Department Name",
- "code": "Department Code",
- "parent_dept": "Parent Department",
- "enabled": "Status",
- "leader": "Department Leader",
- "remark": "Remark",
- "created_date": "Creation Time",
- "placeholder": {
- "code": "Please enter department code",
- "name": "Please enter department name",
- "enabled": "Please select status",
- "leader": "Please select department leader"
- }
- }
- },
- "form": {
- "modal": {
- "name": "Department Name",
- "code": "Department Code",
- "parent_dept": "Parent Department",
- "enabled": "Status",
- "leader": "Department Leader",
- "remark": "Remark",
- "created_date": "Creation Time",
- "placeholder": {
- "code": "Please enter department identifier",
- "name": "Please enter department name",
- "parent_dept": "Please select parent department",
- "remark": "Please enter remark",
- "leader": "Please select department leader"
- }
- },
- "help": {}
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.dict.item.json b/src/locales/lang/en/setting/setting.dict.item.json
deleted file mode 100644
index d57dbc78..00000000
--- a/src/locales/lang/en/setting/setting.dict.item.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "list": {
- "title": "Dictionary Item Management",
- "table": {
- "columns": {
- "id": "ID",
- "label": "Dictionary Item Label",
- "value": "Dictionary Item Value",
- "code": "Dictionary Code",
- "sort": "Sort",
- "enabled": "Status",
- "other_class": "Other CSS",
- "color": "Color",
- "is_default": "Default Value",
- "remark": "Remark",
- "created_date": "Creation Date",
- "updated_date": "Update Date",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "label": "Dictionary Label",
- "value": "Dictionary Value",
- "enabled": "Status",
- "placeholder": {
- "label": "Please enter dictionary item label",
- "value": "Please enter dictionary item value",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "label": "Dictionary Label",
- "value": "Dictionary Value",
- "code": "Dictionary Code",
- "sort": "Sort",
- "enabled": "Status",
- "other_class": "Other CSS",
- "color": "Color",
- "is_default": "Default Value",
- "remark": "Remark",
- "placeholder": {
- "label": "Please enter dictionary item label",
- "value": "Please enter dictionary item value",
- "sort": "Please enter dictionary item sort",
- "other_class": "You can use Tailwind class names like bg-blue w-full h-full",
- "color": "Please select dictionary label color",
- "is_default": "Please enter default value",
- "remark": "Please enter remark"
- },
- "help": {
- "other_class": "CSS styles for tags, you can add compiled CSS class names"
- }
- },
- "tag_style": {
- "default": "Default Color",
- "custom": "Custom Color",
- "placeholder": {
- "default": "Please select tag style"
- }
- }
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.dict.json b/src/locales/lang/en/setting/setting.dict.json
deleted file mode 100644
index 344d626f..00000000
--- a/src/locales/lang/en/setting/setting.dict.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "list": {
- "title": "Dictionary Management",
- "table": {
- "columns": {
- "id": "ID",
- "group_code": "Group",
- "name": "Dictionary Name",
- "code": "Dictionary Code",
- "sort": "Sort",
- "data_type": "Data Type",
- "description": "Description",
- "enabled": "Status",
- "dict_item": "Dictionary Items",
- "operation": "Operation",
- "actions": {
- "item": "Dictionary Items",
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- },
- "status": {
- "disabled": "Disable",
- "enabled": "Enable",
- "confirm": "Do you want to change the status of {0} to [{1}]?",
- "title": "Change Status"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "enum": "Enum Dictionary",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "group_code": "Group",
- "code": "Dictionary Code",
- "name": "Dictionary Name",
- "enabled": "Status",
- "placeholder": {
- "group_code": "Please select group",
- "code": "Please enter dictionary code",
- "name": "Please enter dictionary name",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "group_code": "Group",
- "name": "Dictionary Name",
- "code": "Dictionary Code",
- "sort": "Sort",
- "data_type": "Data Type",
- "description": "Description",
- "enabled": "Status",
- "remark": "Remark",
- "placeholder": {
- "group_code": "Please select group",
- "code": "Please enter dictionary code",
- "name": "Please enter dictionary name",
- "sort": "Please enter dictionary sort",
- "remark": "Please enter remark"
- }
- },
- "help": {}
- },
- "enum": {
- "title": "Enum Dictionary",
- "columns": {
- "dict_key": "Namespace",
- "name": "Enum Name",
- "case": "Unique ID",
- "label": "Label",
- "value": "Value",
- "color": "Label Color"
- }
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.gateway.limiter.json b/src/locales/lang/en/setting/setting.gateway.limiter.json
deleted file mode 100644
index 9d7a0250..00000000
--- a/src/locales/lang/en/setting/setting.gateway.limiter.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "list": {
- "title": "Rate Limiting Rules",
- "table": {
- "columns": {
- "id": "ID",
- "name": "Rule Name",
- "enabled": "Status",
- "priority": "Priority",
- "match_type": "Match Type",
- "conditions": "Match Conditions",
- "methods": "HTTP Methods",
- "path": "Request Path",
- "limit_type": "Limit Type",
- "limit_value": "Limit Value",
- "period": "Statistical Period(seconds)",
- "ttl": "Validity Period(seconds)",
- "message": "Prompt Message",
- "created_date": "Creation Time",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- },
- "status": {
- "disabled": "Disable",
- "enabled": "Enable",
- "confirm": "Do you want to change the status of {0} to [{1}]?",
- "title": "Change Status"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "name": "Rule Name",
- "enabled": "Status",
- "priority": "Priority",
- "methods": "HTTP Methods",
- "path": "Request Path",
- "placeholder": {
- "name": "Please enter rule name",
- "enabled": "Please select status",
- "priority": "Please select priority",
- "methods": "Please select HTTP methods",
- "path": "Please enter request path"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "name": "Rule Name",
- "enabled": "Status",
- "priority": "Priority",
- "match_type": "Match Type",
- "conditions": "Match Conditions",
- "methods": "HTTP Methods",
- "path": "Request Path",
- "limit_type": "Limit Type",
- "limit_value": "Limit Value",
- "period": "Statistical Period(seconds)",
- "ttl": "Validity Period(seconds)",
- "message": "Prompt Message",
- "remark": "Remark",
- "placeholder": {
- "name": "Please enter rule name",
- "priority": "Please select priority",
- "match_type": "Please enter match type",
- "conditions": "Please enter match conditions",
- "methods": "Please select HTTP methods",
- "path": "Please enter request path",
- "limit_type": "Please select limit type",
- "limit_value": "Please enter limit value",
- "period": "Please enter statistical period(seconds)",
- "ttl": "Please enter validity period(seconds)",
- "message": "Please enter prompt message"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.message.json b/src/locales/lang/en/setting/setting.message.json
deleted file mode 100644
index 06c034bb..00000000
--- a/src/locales/lang/en/setting/setting.message.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "list": {
- "title": "My Messages",
- "table": {
- "columns": {
- "id": "ID",
- "type": "Type",
- "title": "Title",
- "related_id": "Business ID",
- "content": "Content",
- "sender": {
- "user_name": "Username",
- "real_name": "User Nickname"
- },
- "status": "Read Status",
- "priority": "Priority",
- "channel": "Scene",
- "created_date": "Receive Time",
- "read_date": "Read Time",
- "updated_date": "Update Time",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "type": "Type",
- "title": "Title",
- "content": "Content",
- "enabled": "Status",
- "priority": "Priority",
- "placeholder": {
- "type": "Please select type",
- "title": "Please enter title",
- "content": "Please fill in content",
- "enabled": "Please select status",
- "priority": "Please select priority"
- }
- }
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.notice.json b/src/locales/lang/en/setting/setting.notice.json
deleted file mode 100644
index 13a31470..00000000
--- a/src/locales/lang/en/setting/setting.notice.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "list": {
- "title": "Notice Announcement",
- "table": {
- "columns": {
- "id": "ID",
- "type": "Type",
- "title": "Title",
- "content": "Content",
- "sort": "Sort",
- "enabled": "Status",
- "created_dept": "Department",
- "remark": "",
- "created_date": "Creation Date",
- "updated_date": "Update Date",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- },
- "publish": {
- "label": "Push",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to push the announcement [{0}]?"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "type": "Type",
- "title": "Title",
- "placeholder": {
- "type": "Please select type",
- "title": "Please enter title"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "type": "Type",
- "title": "Title",
- "content": "Content",
- "sort": "Sort",
- "enabled": "Status",
- "remark": "",
- "placeholder": {
- "type": "Please select type",
- "title": "Please enter title",
- "sort": "Please enter sort",
- "content": "Please fill in content"
- }
- }
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/setting/setting.post.json b/src/locales/lang/en/setting/setting.post.json
deleted file mode 100644
index 99131da7..00000000
--- a/src/locales/lang/en/setting/setting.post.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "list": {
- "title": "Post Management",
- "table": {
- "columns": {
- "id": "ID",
- "code": "Post Code",
- "name": "Post Name",
- "dept_name": "Department Name",
- "sort": "Sort",
- "enabled": "Status",
- "created_date": "Creation Time",
- "remark": "Remark",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "code": "Post Code",
- "name": "Post Name",
- "enabled": "Status",
- "placeholder": {
- "code": "Please enter post code",
- "name": "Please enter post name",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "code": "Post Code",
- "name": "Post Name",
- "dept_name": "Department Name",
- "sort": "Sort",
- "enabled": "Status",
- "remark": "Remark",
- "placeholder": {
- "code": "Please enter post identifier",
- "name": "Please enter post name",
- "sort": "Please enter post sort value",
- "dept_name": "Please select department",
- "remark": "Please enter remark"
- }
- },
- "help": {}
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/system/system.menu.json b/src/locales/lang/en/system/system.menu.json
deleted file mode 100644
index 60b225a4..00000000
--- a/src/locales/lang/en/system/system.menu.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "list": {
- "title": "Menu Management",
- "table": {
- "columns": {
- "id": "ID",
- "type": "Type",
- "title": "Title",
- "code": "Permission Code",
- "path": "Route Address",
- "component": "Page Component",
- "sort": "Sort",
- "enabled": "Status",
- "remark": "",
- "created_date": "Creation Date",
- "updated_date": "Update Date",
- "operation": "Operation",
- "actions": {
- "api": "Select Permissions",
- "append": "Add Submenu",
- "edit": "Edit",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "collapse": "Collapse",
- "expand": "Expand",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "type": "Type",
- "title": "Title",
- "path": "Route Address",
- "code": "Permission Code",
- "enabled": "Status",
- "placeholder": {
- "type": "Please select type",
- "title": "Please enter title",
- "path": "Please enter route address",
- "code": "Please enter permission code",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "type": "Menu Type",
- "pid": "Parent Menu",
- "app": "Application Code",
- "title": "Menu Name",
- "code": "Permission Code",
- "sort": "Sort",
- "path": "Route Address/Interface",
- "component": "Component Address",
- "redirect": "Redirect",
- "icon": "Icon",
- "is_show": "Show",
- "is_link": "Internal Link",
- "link_url": "Internal Link Address",
- "enabled": "Status",
- "open_type": "Open Method",
- "is_cache": "Cache",
- "is_sync": "Sync",
- "is_affix": "Affix",
- "methods": "Request Method",
- "is_frame": "External Link",
- "placeholder": {
- "pid": "Please select parent menu",
- "title": "Please enter menu name",
- "code": "Please enter permission code",
- "sort": "Please enter sort",
- "path": "Please enter route address/interface",
- "component": "Please enter component address",
- "icon": "Please select icon",
- "link_url": "Please enter internal link address"
- }
- },
- "placeholder": {
- "type": "Please select menu type",
- "pid": "Please select parent menu",
- "app": "Please select application",
- "title": "Please enter menu name",
- "code": "Please enter permission code",
- "sort": "Please enter sort",
- "path": "Please enter route address/interface",
- "component": "Please enter component address",
- "open_type": "Please select open method",
- "icon": "Please select icon",
- "link_url": "Please enter internal link address",
- "enabled": "Please select status",
- "is_show": "Please select whether to show",
- "is_sync": "Please select whether to sync",
- "is_cache": "Please select whether to cache"
- },
- "help": {
- "path": "Please enter correct route address or interface path",
- "link_url": "Please enter correct internal link address"
- }
- },
- "api": {
- "title": "Select Interface",
- "search": "Search",
- "sync": "Sync",
- "tips": {
- "1": "1. Multiple interfaces can be selected and added repeatedly;",
- "2": "2. Developers add route definitions according to backend routing rules;",
- "3": "3. After adding, you can select the corresponding interface here;"
- },
- "routeInfo": {
- "name": "Interface Name",
- "method": "Interface Method",
- "path": "Interface Address"
- }
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/system/system.role.json b/src/locales/lang/en/system/system.role.json
deleted file mode 100644
index 991897d6..00000000
--- a/src/locales/lang/en/system/system.role.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "list": {
- "title": "Role Management",
- "table": {
- "columns": {
- "id": "ID",
- "name": "Role",
- "code": "Role Code",
- "role_name": "Role Name",
- "is_super_admin": "Super Admin",
- "role_type": "Role Type",
- "data_scope": "Data Permission",
- "sort": "Sort",
- "enabled": "Status",
- "remark": "Remark",
- "created_date": "Creation Time",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "user": "Assign Users",
- "data_scope": "Data Permission",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- },
- "status": {
- "disabled": "Disable",
- "enabled": "Enable",
- "confirm": "Do you want to change the status of {name} to [{status}]?",
- "title": "Change Status"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete the selected {length} records?"
- }
- }
- },
- "query": {
- "code": "Role Code",
- "name": "Role Name",
- "enabled": "Role Status",
- "created_date": "Date",
- "placeholder": {
- "code": "Please enter role code",
- "name": "Please enter role name",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "code": "Role Code",
- "name": "Role Name",
- "is_super_admin": "Super Admin",
- "role_type": "Role Type",
- "data_scope": "Data Permission",
- "sort": "Sort",
- "enabled": "Status",
- "permissions": "Permissions",
- "dept_list": "Department List",
- "remark": "Remark",
- "placeholder": {
- "code": "Please enter role identifier",
- "name": "Please enter role name",
- "role_type": "Please select role type",
- "remark": "Please enter remark"
- }
- },
- "data_scope": {
- "title": "Data Permission",
- "role_code": "Role Code",
- "role_name": "Role Name",
- "data_permission": "Data Permission",
- "dept_list": "Department List",
- "assign_permission": "Assign Permission",
- "assign_success": "Assignment Success"
- },
- "help": {}
- },
- "assign_user": {
- "title": "Assign Users",
- "append_title": "Add Users"
- },
- "message": {
- "success": "Success",
- "error": "Failed",
- "delete": "Deletion Success",
- "operate": "Operation Success"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/system/system.user.center.json b/src/locales/lang/en/system/system.user.center.json
deleted file mode 100644
index 0fcdde3b..00000000
--- a/src/locales/lang/en/system/system.user.center.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "title": "Personal Center",
- "base_setting": {
- "title": "Basic Settings",
- "real_name": "Nickname",
- "mobile_phone": "Phone",
- "email": "Email",
- "sex": "Gender",
- "address": "Address",
- "signed": "Signature",
- "button": {
- "submit": "Update"
- }
- },
- "secure_setting": {
- "title": "Security Settings",
- "old_password": "Old Password",
- "new_password": "New Password",
- "confirm_password": "Confirm Password",
- "placeholder": {
- "old_password": "Please enter user password",
- "new_password": "Please enter new password",
- "confirm_password": "Please enter confirm password"
- },
- "rules": {
- "min_password": "Password length cannot be less than {0} characters",
- "max_password": "Password length cannot exceed {0} characters",
- "differ_password": "Two passwords are inconsistent",
- "degree_password": "Old and new passwords cannot be the same"
- },
- "button": {
- "submit": "Change Password"
- }
- },
- "online_device": {
- "title": "Online Devices",
- "query": {
- "ipaddr": "IP Address",
- "user_name": "User Account"
- },
- "table": {
- "title": "My Online Devices",
- "columns": {
- "user_name": "Login Account",
- "ip": "IP Address",
- "ip_location": "Login Address",
- "browser": "Browser",
- "os": "System",
- "login_time": "Login Time",
- "operation": "Operation",
- "actions": {
- "force_offline": {
- "label": "Force Offline",
- "confirm": "Confirm to force offline {0}?"
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/system/system.user.json b/src/locales/lang/en/system/system.user.json
deleted file mode 100644
index 2f54eb45..00000000
--- a/src/locales/lang/en/system/system.user.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- "list": {
- "title": "User Management",
- "table": {
- "columns": {
- "id": "id",
- "user_name": "Account",
- "real_name": "User Nickname",
- "nick_name": "User Nickname",
- "password": "User Password",
- "is_super": "Admin",
- "mobile_phone": "Phone Number",
- "email": "Email",
- "avatar": "Avatar",
- "signed": "Signature",
- "dashboard": "Homepage",
- "dept_id": "Department ID",
- "dept_name": "Department Name",
- "enabled": "Status",
- "login_ip": "Login IP",
- "login_time": "Login Time",
- "backend_setting": "Personal Configuration",
- "tenants": "Authorized Tenants",
- "sex": "Gender",
- "remark": "Remark",
- "birthday": "Birthday",
- "tel": "Telephone",
- "is_locked": "Locked",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "managed_tenants": "Tenant Management",
- "locked": {
- "label": "Lock",
- "title": "Warm Reminder",
- "confirm": "Do you want to lock {name}'s account?"
- },
- "un_locked": {
- "label": "Unlock",
- "title": "Warm Reminder",
- "confirm": "Do you want to unlock {name}'s account?"
- },
- "reset_password": "Reset Password",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- },
- "status": {
- "disabled": "Disable",
- "enabled": "Enable",
- "confirm": "Do you want to change {name}'s status to [{status}]?",
- "title": "Change Status"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete the selected {length} records?"
- }
- }
- },
- "query": {
- "user_name": "Username",
- "real_name": "Name",
- "mobile_phone": "Phone Number",
- "enabled": "Status",
- "created_date": "Date",
- "is_locked": "Locked",
- "placeholder": {
- "user_name": "Please enter username",
- "real_name": "Please enter name",
- "mobile_phone": "Please enter phone number",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "user_name": "Account",
- "real_name": "User Nickname",
- "nick_name": "User Nickname",
- "password": "User Password",
- "mobile_phone": "Phone Number",
- "email": "Email",
- "sex": "Gender",
- "enabled": "Status",
- "dept_name": "Department Name",
- "post_name": "Post Name",
- "role_name": "Role Name",
- "login_date": "Last Login Time",
- "avatar": "Avatar",
- "remark": "Remark",
- "birthday": "Birthday",
- "tel": "Telephone",
- "is_locked": "Locked",
- "address": "Address",
- "signed": "Signature"
- },
- "help": {
- "post_name": "After selecting a department, all posts under that department will be automatically loaded"
- },
- "placeholder": {
- "user_name": "Please enter account",
- "real_name": "Please enter user nickname",
- "nick_name": "Please enter user nickname",
- "password": "Please enter user password",
- "mobile_phone": "Please enter phone number",
- "email": "Please enter email",
- "dept_name": "Please select department",
- "post_name": "Please select post",
- "role_name": "Please select role",
- "remark": "Remark"
- }
- },
- "success": {
- "reset_password": "Password reset successfully",
- "un_locked": "Unlock successful",
- "locked": "Lock successful",
- "delete": "Deletion successful",
- "operate": "Operation successful"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.crontab.json b/src/locales/lang/en/tools/tools.crontab.json
deleted file mode 100644
index 37b2db96..00000000
--- a/src/locales/lang/en/tools/tools.crontab.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "list": {
- "title": "Scheduled Tasks",
- "table": {
- "columns": {
- "id": "ID",
- "biz_id": "Business ID",
- "title": "Name",
- "type": "Type",
- "task_cycle": "Task Cycle",
- "cycle_rule": "Cycle Rule",
- "rule": "Task Expression",
- "rule_name": "Execution Rule",
- "target": "Call Task",
- "running_times": "Running Times",
- "last_running_time": "Last Running Time",
- "enabled": "Enabled Status",
- "singleton": "Loop",
- "created_date": "Creation Time",
- "operation": "Operation",
- "actions": {
- "edit": "Edit",
- "execute": "Execute",
- "logs": "Logs",
- "resume": "Start",
- "pause": "Stop",
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "create": "Add",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "title": "Task Name",
- "type": "Task Type",
- "enabled": "Status",
- "placeholder": {
- "title": "Please enter task name",
- "type": "Please select task type",
- "enabled": "Please select task status"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "biz_id": "Business ID",
- "title": "Task Name",
- "type": "Task Type",
- "task_cycle": "Execution Cycle",
- "cycle_rule": "Cycle Rule",
- "rule": "Expression",
- "target": "Call Task",
- "running_times": "Running Times",
- "last_running_time": "Last Running Time",
- "enabled": "Status",
- "singleton": "Loop Execution",
- "remark": "Remark",
- "placeholder": {
- "title": "Please enter task name",
- "target": "Please enter call task",
- "remark": "Please enter remark"
- },
- "suffix": {
- "month": "Month",
- "day": "Day",
- "hour": "Hour",
- "minute": "Minute",
- "second": "Second"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.crontab.log.json b/src/locales/lang/en/tools/tools.crontab.log.json
deleted file mode 100644
index e0032d49..00000000
--- a/src/locales/lang/en/tools/tools.crontab.log.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "list": {
- "title": "Execution Logs",
- "table": {
- "columns": {
- "id": "ID",
- "crontab_id": "Task ID",
- "target": "Call Target",
- "log": "Execution Log",
- "return_code": "Running Status",
- "running_time": "Execution Time",
- "created_date": "Creation Time",
- "operation": "Operation",
- "actions": {
- "delete": {
- "label": "Delete",
- "title": "Delete Confirmation",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "empty": {
- "label": "Clear",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to clear all records?"
- },
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "target": "Call Target",
- "return_code": "Execution Status",
- "placeholder": {
- "target": "Please enter call target",
- "return_code": "Please select execution status"
- }
- }
- },
- "form": {}
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.delegation.json b/src/locales/lang/en/tools/tools.delegation.json
deleted file mode 100644
index bd27e051..00000000
--- a/src/locales/lang/en/tools/tools.delegation.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "title": "Authorization Information",
- "company": "Authorized Company",
- "domain": "Authorized Domain",
- "auth_code": "Authorization Code",
- "auth_button": "Authorization Code Authentication",
- "how_to_get": "How to get authorization code?",
- "get_from_website": "Get authorization code through official website.",
- "go_to_market": "Go to app market",
- "close": "Close",
- "dialog": {
- "title": "Authorization Code Authentication",
- "auth_code": "Authorization Code",
- "auth_secret": "Authorization Secret",
- "auth_code_placeholder": "Please enter authorization code",
- "auth_secret_placeholder": "Please enter authorization secret",
- "auth_code_required": "Please enter authorization code",
- "auth_secret_required": "Please enter authorization secret",
- "success": "Authorization code authentication successful"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.features.json b/src/locales/lang/en/tools/tools.features.json
deleted file mode 100644
index 7d3fdd92..00000000
--- a/src/locales/lang/en/tools/tools.features.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "search_placeholder": "Enter module keywords",
- "card_view": "Card View",
- "table_view": "Table View",
- "total_modules": "Total {count} modules",
- "no_data_title": "No module data",
- "no_data_description": "No matching modules found under current filter conditions",
- "version": "Version: ",
- "update_log": "Update Log",
- "uninstall": "Uninstall",
- "download": "Download Now",
- "view_details": "Details",
- "update_info": "Update Info",
- "table_columns": {
- "index": "No.",
- "module_info": "Module Info",
- "app_id": "App ID",
- "version": "Version",
- "status": "Status",
- "actions": "Actions"
- },
- "status": {
- "installed": "Installed",
- "not_installed": "Not Installed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.files.json b/src/locales/lang/en/tools/tools.files.json
deleted file mode 100644
index ba83edb8..00000000
--- a/src/locales/lang/en/tools/tools.files.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "list": {
- "title": "Attachment Management",
- "table": {
- "columns": {
- "id": "ID",
- "url": "Access Address",
- "size": "File Size",
- "size_info": "File Details",
- "hash": "Hash",
- "filename": "File Name",
- "original_filename": "Original File Name",
- "base_path": "Base Path",
- "path": "Storage Path",
- "ext": "Extension",
- "content_type": "MIME Type",
- "platform": "Storage Platform",
- "th_url": "Thumbnail Access Path",
- "object_id": "File Belonging Object Id",
- "object_type": "Object Type",
- "attr": "Additional Attributes",
- "remark": "",
- "created_date": "Creation Date",
- "updated_date": "Update Date",
- "created_name": "Uploader",
- "operation": "Operation",
- "actions": {
- "download": "Download",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "upload": "Upload",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "filename": "File Name",
- "original_filename": "Original File Name",
- "ext": "Extension",
- "platform": "Platform",
- "placeholder": {
- "filename": "Please enter file name",
- "original_filename": "Please enter original file name",
- "ext": "Please enter extension",
- "platform": "Please enter platform"
- }
- }
- },
- "form": {},
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.generator.code.json b/src/locales/lang/en/tools/tools.generator.code.json
deleted file mode 100644
index 1ea4cb60..00000000
--- a/src/locales/lang/en/tools/tools.generator.code.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "list": {
- "title": "Code Generation",
- "table_name": "Table Name",
- "table_content": "Description",
- "plugin_name": "Module",
- "class_name": "Class Name",
- "package_name": "Package Name",
- "author": "Author",
- "remark": "Remark",
- "features_name": "Feature Name",
- "delete_type": "Delete Type",
- "edit_mode": "Edit Mode",
- "sort_field": "Sort Field",
- "sort_order": "Sort Order",
- "parent_menu": "Parent Menu",
- "generate_files": "Generate Files",
- "generate": "Generate Code",
- "preview": "Preview Code",
- "download": "Download Code",
- "created_date": "Creation Time",
- "updated_date": "Update Time",
- "query": {
- "name": "Query Name",
- "placeholder": "Please enter query name",
- "features_name": "Module",
- "placeholder_features_name": "Please select module",
- "table_name": "Table Name",
- "placeholder_table_name": "Please enter table name"
- }
- },
- "basic": {
- "table_name": "Table Name",
- "description": "Description",
- "plugin": "Plugin",
- "module_name": "Module Name",
- "class_name": "Class Name",
- "table_name_placeholder": "Please enter table name",
- "description_placeholder": "Please enter description",
- "plugin_placeholder": "Please select plugin",
- "module_name_placeholder": "Please enter module name",
- "class_name_placeholder": "Please enter class name",
- "module_tip_1": "The functional module to which the generated code belongs, corresponding to the route name, such as member module, recharge module, order module, etc.",
- "module_tip_2": "Naming convention: lowercase, multiple words connected with underscores, e.g.: member, article_category",
- "class_tip_1": "The file name of the generated code, controller, model, service, etc.",
- "class_tip_2": "Naming convention: lowercase, multiple words connected with underscores, e.g.: article_category"
- },
- "field": {
- "operation": "Operation",
- "column_name": "Field Name",
- "column_comment": "Field Description",
- "column_type": "Field Type",
- "primary_key": "Primary Key",
- "required": "Required",
- "insert": "Add",
- "update": "Edit",
- "lists": "List",
- "search": "Search",
- "search_method": "Search Method",
- "form_type": "Form Type",
- "validation_type": "Validation Type",
- "placeholder": {
- "column_comment": "Please enter field description",
- "select": "Please select",
- "setup": "Setup"
- },
- "validation": {
- "max": "Maximum input characters",
- "min": "Minimum input characters",
- "between": "Input character range"
- }
- },
- "config": {
- "delete_type": "Delete Type",
- "physical_delete": "Physical Delete",
- "soft_delete": "Soft Delete",
- "delete_type_tip": "Physical deletion: directly delete records from the database; Soft deletion: mark deletion status through fields",
- "delete_field": "Delete Field",
- "delete_field_tip": "Select the field used to mark the deletion status",
- "edit_mode": "Edit Mode",
- "dialog": "Dialog",
- "drawer": "Drawer",
- "edit_mode_tip": "Select the interface display method when editing data",
- "sort_field": "Sort Field",
- "sort_field_tip": "Select the field for sorting, leave blank for no sorting",
- "sort_order": "Sort Order",
- "asc": "Ascending",
- "desc": "Descending",
- "sort_order_tip": "Select sort method",
- "parent_menu": "Parent Menu",
- "placeholder": {
- "select": "Please select",
- "select_edit_mode": "Please select edit mode",
- "enter_sort_field": "Please enter sort field",
- "select_sort_order": "Please select sort order"
- }
- },
- "relation": {
- "title": "Relation Settings",
- "type": "Relation Type",
- "method_name": "Relation Method Name",
- "app": "Relation App",
- "model": "Relation Model",
- "local_key": "Relation Key",
- "foreign_key": "Foreign Key",
- "add_relation": "Add Relation",
- "edit_relation": "Edit",
- "delete_relation": "Delete",
- "operation": "Operation",
- "type_options": {
- "one_to_one": "One to One",
- "one_to_many": "One to Many",
- "many_to_many": "Many to Many"
- },
- "placeholder": {
- "relation_type": "Please select relation type",
- "relation_method": "Please enter relation method name",
- "relation_app": "Please enter relation app",
- "relation_model": "Please enter relation model",
- "relation_key": "Please enter relation key",
- "foreign_key": "Please enter foreign key"
- },
- "validation": {
- "relation_type_required": "Please select relation type",
- "relation_method_required": "Please enter relation method name",
- "relation_model_required": "Please enter relation model",
- "relation_key_required": "Please enter relation key",
- "foreign_key_required": "Please enter foreign key"
- }
- },
- "import_table": {
- "title": "Import Data Table",
- "table_name": "Table Name",
- "table_comment": "Table Comment",
- "engine": "Engine",
- "charset": "Charset",
- "create_time": "Creation Time",
- "confirm": "Confirm Selection",
- "reset": "Reset",
- "select_table": "Select Data Table",
- "single_select_tip": "Only one data table can be selected",
- "no_selection": "Please select data table first",
- "search_placeholder": "Please enter table name"
- },
- "preview": {
- "dialog_title": "Code Preview",
- "copy_button": "Copy",
- "copy_success": "Code copied to clipboard",
- "copy_error": "Copy failed, please copy manually",
- "fetch_error": "Failed to get preview data"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.plugin.develop.json b/src/locales/lang/en/tools/tools.plugin.develop.json
deleted file mode 100644
index 0672a7c6..00000000
--- a/src/locales/lang/en/tools/tools.plugin.develop.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "title": "Plugin",
- "create": "Add Plugin",
- "edit": "Edit Plugin",
- "delete": "Delete Plugin",
- "view": "View Plugin",
- "create_success": "Plugin created successfully",
- "create_fail": "Plugin creation failed",
- "update_success": "Plugin updated successfully",
- "update_fail": "Plugin update failed",
- "delete_success": "Plugin deleted successfully",
- "delete_fail": "Plugin deletion failed",
- "list": {
- "author": "Author",
- "version": "Version",
- "cover": "Cover",
- "id": "Primary Key",
- "key": "Plugin Key",
- "desc": "Plugin Description",
- "support_app": "Applications supported by the plugin, empty means general plugin",
- "installed_at": "Installation Time",
- "title": "Plugin Name",
- "icon": "Plugin Icon",
- "status": "Status",
- "type": "Plugin type: app, plugin",
- "variables": "Plugin Variables",
- "created_at": "Creation Time"
- },
- "form": {
- "author": "Author",
- "version": "Version",
- "cover": "Cover",
- "id": "Primary Key",
- "key": "Key",
- "desc": "Description",
- "support_app": "Applications supported by the plugin, empty means general plugin",
- "installed_at": "Installation Time",
- "title": "Name",
- "icon": "Icon",
- "status": "Status",
- "type": "Type",
- "type_options": {
- "app": "App",
- "module": "Module"
- }
- },
- "search": {
- "desc": "Plugin Description",
- "title": "Plugin Name",
- "status": "Status"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.recycle.json b/src/locales/lang/en/tools/tools.recycle.json
deleted file mode 100644
index b2ab82de..00000000
--- a/src/locales/lang/en/tools/tools.recycle.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "list": {
- "title": "Recycle Bin Management",
- "table": {
- "columns": {
- "id": "ID",
- "data": "Data",
- "table_name": "Data Table",
- "table_prefix": "Table Prefix",
- "enabled": "Status",
- "ip": "IP",
- "operate_by": "",
- "created_date": "Creation Date",
- "updated_date": "Update Date",
- "operation": "Operation",
- "actions": {
- "detail": "Details",
- "recover": "Recover",
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete?"
- }
- }
- },
- "toolbar": {
- "delete": {
- "label": "Delete",
- "title": "Warm Reminder",
- "confirm": "Are you sure you want to delete the selected {0} records?"
- }
- }
- },
- "query": {
- "table_name": "Data Table",
- "enabled": "Status",
- "placeholder": {
- "table_name": "Please enter data table name",
- "enabled": "Please select status"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "data": "Recycled Data",
- "table_name": "Data Table",
- "table_prefix": "Table Prefix",
- "enabled": "Recover",
- "ip": "IP",
- "operate_name": "Operator",
- "created_date": "Deletion Time"
- }
- },
- "message": {
- "success": "Success",
- "error": "Failed"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/tools/tools.terminal.json b/src/locales/lang/en/tools/tools.terminal.json
deleted file mode 100644
index 5ede384c..00000000
--- a/src/locales/lang/en/tools/tools.terminal.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "title": "Terminal",
- "status": {
- "waiting": "Waiting for execution",
- "connecting": "Connecting",
- "executing": "Executing",
- "success": "Execution successful",
- "failed": "Execution failed",
- "unknown": "Unknown"
- },
- "empty": "No running tasks",
- "block_on_failure": "Failure of this command will block queue execution",
- "not_refresh_browser": "Do not refresh the browser",
- "task_blocking": "Task blocking, added tasks will never be executed",
- "actions": {
- "command_run_log": "Command run log",
- "retry": "Retry",
- "delete": "Delete",
- "test": "Test",
- "install": {
- "title": "Install dependencies",
- "pnpm_install": "pnpm install",
- "composer_update": "composer update"
- },
- "republish": "Republish",
- "empty_task": "Clear tasks",
- "setting": "Terminal settings",
- "return_terminal": "Return to terminal"
- },
- "form": {
- "title": "Terminal settings",
- "npm_registry": "NPM Registry",
- "composer_registry": "Composer Registry",
- "package_manager": "NPM Package Manager",
- "automatic_cleanup_task": "Clean up successful tasks",
- "placeholder": {
- "npm_registry": "Please select NPM Registry",
- "composer_registry": "Please select Composer Registry",
- "package_manager": "Please select package manager"
- },
- "confirm": {
- "title": "Warm reminder",
- "source_command": "Cannot modify source command, please try again manually.",
- "packaging_build": "Please confirm whether to republish"
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/en/web/web.link.json b/src/locales/lang/en/web/web.link.json
deleted file mode 100644
index 6dfb8064..00000000
--- a/src/locales/lang/en/web/web.link.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "title": "Friend Link Management",
- "table": {
- "columns": {
- "logo": "Logo",
- "name": "Name",
- "url": "URL",
- "description": "Description",
- "sort": "Sort",
- "enabled": "Status"
- }
- },
- "search": {
- "name": "Link Name",
- "url": "Link URL",
- "enabled": "Status"
- },
- "form": {
- "name": "Name",
- "url": "URL",
- "logo": "Logo",
- "description": "Description",
- "sort": "Sort",
- "enabled": "Status",
- "rules_name": "Please enter link name",
- "rules_url": "Please enter link URL"
- }
-}
diff --git a/src/locales/lang/en/web/web.menu.json b/src/locales/lang/en/web/web.menu.json
deleted file mode 100644
index 22dec779..00000000
--- a/src/locales/lang/en/web/web.menu.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "title": "Menu Management",
- "table": {
- "columns": {
- "name": "Name",
- "category": "Category",
- "url": "URL",
- "sort": "Sort",
- "type": "Type",
- "target": "Target",
- "is_show": "Show",
- "enabled": "Status"
- }
- },
- "search": {
- "app": "App",
- "category": "Category",
- "name": "Name",
- "type": "Type"
- },
- "form": {
- "id": "ID",
- "category": "Category",
- "app": "App",
- "source": "Source",
- "name": "Name",
- "type": "Type",
- "pid": "Parent Menu",
- "url": "URL",
- "target": "Target",
- "icon": "Icon",
- "sort": "Sort",
- "enabled": "Status",
- "is_show": "Show",
- "rules_name": "Please enter menu name",
- "rules_type": "Please select menu type",
- "placeholder_type": "Please select menu type",
- "placeholder_app": "Please select app",
- "placeholder_url": "Please enter URL",
- "placeholder_target": "Please select target",
- "placeholder_pid": "Please select parent menu",
- "placeholder_sort": "Please enter sort",
- "placeholder_enabled": "Please select status",
- "placeholder_is_show": "Please select show",
- "placeholder_icon": "Please select icon"
- }
-}
diff --git a/src/locales/lang/zh-cn/member/member.level.json b/src/locales/lang/zh-cn/member/member.level.json
deleted file mode 100644
index a30f4b69..00000000
--- a/src/locales/lang/zh-cn/member/member.level.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "title": "会员等级",
- "table": {
- "columns": {
- "id": "ID",
- "name": "名称",
- "level": "等级",
- "icon": "等级图标",
- "min_points": "最低积分",
- "discount": "折扣率",
- "member_count": "会员数量",
- "enabled": "状态",
- "created_at": "创建时间"
- }
- },
- "search": {
- "name": "等级名称",
- "enabled": "状态"
- },
- "form": {
- "name": "名称",
- "level": "等级",
- "icon": "等级图标",
- "min_points": "最低积分",
- "discount": "折扣率",
- "sort": "排序",
- "enabled": "状态",
- "description": "等级描述",
- "rules_name": "等级名称不能为空",
- "rules_level": "等级不能为空",
- "rules_min_points": "最低积分不能为空",
- "rules_discount": "折扣率不能为空",
- "rules_sort": "排序不能为空",
- "rules_enabled": "状态不能为空",
- "rules_description": "等级描述不能为空"
- },
- "actions": {
- "view_members": "查看会员",
- "check_delete": "检查删除"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/member/member.points.json b/src/locales/lang/zh-cn/member/member.points.json
deleted file mode 100644
index cfd1cdf7..00000000
--- a/src/locales/lang/zh-cn/member/member.points.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "title": "会员积分",
- "table": {
- "columns": {
- "id": "ID",
- "username": "用户名",
- "nickname": "昵称",
- "type": "操作类型",
- "points": "积分",
- "balance": "操作后积分",
- "source": "来源/用途",
- "remark": "备注",
- "operator": "操作人",
- "create_time": "操作时间"
- }
- },
- "search": {
- "username": "用户名",
- "nickname": "会员昵称",
- "type": "操作类型",
- "date_range": "操作时间"
- },
- "form": {
- "member_id": "会员",
- "type": "操作类型",
- "points": "积分",
- "source": "来源/用途",
- "remark": "备注",
- "rules_member_id": "会员不能为空",
- "rules_points": "积分不能为空",
- "rules_type": "操作类型不能为空",
- "rules_source": "来源/用途不能为空"
- },
- "types": {
- "earn": "获取",
- "consume": "消耗",
- "adjust": "调整"
- },
- "actions": {
- "operate": "积分操作",
- "batch_operate": "批量操作",
- "export": "导出记录",
- "set_rules": "设置规则"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/member/member.tag.json b/src/locales/lang/zh-cn/member/member.tag.json
deleted file mode 100644
index be8f347f..00000000
--- a/src/locales/lang/zh-cn/member/member.tag.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "title": "会员标签",
- "table": {
- "columns": {
- "id": "ID",
- "name": "标签名称",
- "color": "标签颜色",
- "member_count": "会员数量",
- "description": "描述",
- "sort": "排序",
- "enabled": "状态",
- "create_time": "创建时间"
- }
- },
- "search": {
- "name": "标签名称",
- "enabled": "状态"
- },
- "form": {
- "name": "标签名称",
- "color": "标签颜色",
- "sort": "排序",
- "enabled": "状态",
- "description": "描述",
- "rules_name": "请输入标签名称",
- "rules_color": "请选择标签颜色"
- },
- "actions": {
- "view_members": "查看会员",
- "batch_assign": "批量分配"
- },
- "status": {
- "enabled": "启用",
- "disabled": "禁用"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/member/member.user.json b/src/locales/lang/zh-cn/member/member.user.json
deleted file mode 100644
index 38279a88..00000000
--- a/src/locales/lang/zh-cn/member/member.user.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "title": "会员管理",
- "table": {
- "columns": {
- "id": "ID",
- "username": "用户名",
- "nickname": "昵称",
- "phone": "手机号",
- "email": "邮箱",
- "level_name": "会员等级",
- "balance": "余额",
- "points": "积分",
- "enabled": "状态",
- "created_at": "注册时间",
- "tags": "会员标签"
- }
- },
- "search": {
- "username": "用户名",
- "phone": "手机号",
- "enabled": "状态"
- },
- "form": {
- "username": "用户名",
- "nickname": "昵称",
- "phone": "手机号",
- "email": "邮箱",
- "password": "密码",
- "level_id": "会员等级",
- "enabled": "状态",
- "tags": "标签",
- "assign_tags": "分配标签",
- "adjust_points": "调整积分",
- "points": "积分",
- "tags_help": "选择用户标签",
- "reset_password": "重置密码",
- "rules_username": "请输入用户名",
- "rules_reset_password": "请输入重置密码"
- },
- "actions": {
- "reset_password": "重置密码",
- "enable": "启用",
- "disable": "禁用",
- "assign_tags": "分配标签"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/monitor/logs.login.json b/src/locales/lang/zh-cn/monitor/logs.login.json
deleted file mode 100644
index fb447c7a..00000000
--- a/src/locales/lang/zh-cn/monitor/logs.login.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
- "list": {
- "title": "登录日志",
- "table": {
- "columns": {
- "id": "ID",
- "user_name": "用户名",
- "ip": "ip",
- "ip_location": "ip归属地",
- "os": "操作系统",
- "browser": "浏览器",
- "status": "登录状态",
- "message": "提示消息",
- "key": "Key",
- "remark": "备注",
- "login_date": "登录时间",
- "operation": "操作",
- "actions": {
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "empty": {
- "label": "清空",
- "title": "温馨提示",
- "confirm": "确认清空所有登录记录吗?"
- },
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "user_name": "用户名",
- "ip": "登录ip",
- "status": "登录状态",
- "created_date": "登录时间",
- "placeholder": {
- "user_name": "请输入用户名",
- "ip": "请输入登录ip地址",
- "status": "请选择登录状态"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/monitor/logs.operate.json b/src/locales/lang/zh-cn/monitor/logs.operate.json
deleted file mode 100644
index 372583e7..00000000
--- a/src/locales/lang/zh-cn/monitor/logs.operate.json
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "list": {
- "title": "操作日志",
- "table": {
- "columns": {
- "id": "ID",
- "name": "模块",
- "app": "App",
- "ip": "ip",
- "ip_location": "ip地址",
- "browser": "浏览器",
- "os": "操作系统",
- "url": "请求地址",
- "class_name": "类名",
- "action": "方法名称",
- "method": "请求方式",
- "param": "请求参数",
- "result": "返回结果",
- "user_name": "操作用户",
- "created_date": "操作时间",
- "operation": "操作",
- "actions": {
- "detail": "详情",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "empty": {
- "label": "清空",
- "title": "温馨提示",
- "confirm": "确认清空所有操作记录吗?"
- },
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "user_name": "操作用户",
- "ip": "请求ip",
- "url": "请求地址",
- "created_date": "操作时间",
- "placeholder": {
- "user_name": "请输入操作用户",
- "ip": "请输入ip地址",
- "url": "请输入请求地址"
- }
- }
- },
- "form": {
- "detail": "详情",
- "app": "应用名称",
- "ip": "IP地址",
- "url": "请求地址",
- "class_name": "类名称",
- "method": "请求方式",
- "action": "操作方法",
- "created_date": "操作时间",
- "user_name": "操作用户",
- "param": "请求参数",
- "result": "返回结果"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/monitor/monitor.redis.json b/src/locales/lang/zh-cn/monitor/monitor.redis.json
deleted file mode 100644
index b405a083..00000000
--- a/src/locales/lang/zh-cn/monitor/monitor.redis.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "title": "redis监控信息",
- "columns": {
- "redis_version": "Redis版本",
- "redis_mode": "Redis模式",
- "os": "操作系统",
- "arch_bits": "架构位数",
- "multiplexing_api": "多路复用 API",
- "process_id": "进程ID",
- "run_id": "运行ID",
- "tcp_port": "TCP 端口",
- "uptime_in_days": "运行时间(天)",
- "role": "角色",
- "connected_clients": "客户端数量",
- "used_memory_human": "以使用内存",
- "used_memory_peak_human": "峰值已使用内存",
- "mem_allocator": "内存分配器",
- "total_connections_received": "接收到的总连接数",
- "total_commands_processed": "处理的总命令数",
- "instantaneous_ops_per_sec": "每秒瞬时操作数",
- "total_net_input_bytes": "总网络输入字节数",
- "instantaneous_input_kbps": "瞬时输入速率(KB/s)",
- "instantaneous_output_kbps": "瞬时输出速率(KB/s)",
- "rejected_connections": "被拒绝的连接数",
- "keyspace_hits": "键空间命中次数",
- "keyspace_misses": "键空间未命中次数",
- "config_file": "配置文件路径"
- },
- "tip": {
- "yes": "是",
- "no": "否",
- "years": "年",
- "day": "天",
- "less_day": "不足一天"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/monitor/monitor.server.json b/src/locales/lang/zh-cn/monitor/monitor.server.json
deleted file mode 100644
index 4ecd1a1b..00000000
--- a/src/locales/lang/zh-cn/monitor/monitor.server.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "columns": {
- "key": "属性",
- "value": "值",
- "filesystem": "文件系统",
- "size": "总大小",
- "available": "可用空间",
- "used": "已用空间",
- "use_percentage": "使用百分比",
- "mounted_on": "挂载点"
- },
- "cpu": {
- "title": "CPU"
- },
- "memory": {
- "title": "内存"
- },
- "server": {
- "title": "服务器详情"
- },
- "disk": {
- "title": "磁盘状态"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.config.json b/src/locales/lang/zh-cn/setting/setting.config.json
deleted file mode 100644
index a977abb6..00000000
--- a/src/locales/lang/zh-cn/setting/setting.config.json
+++ /dev/null
@@ -1,100 +0,0 @@
-{
- "site": {
- "title": "站点设置",
- "open": "站点开启",
- "url": "网站地址",
- "name": "站点名称",
- "logo": "站点Logo",
- "network_security": "网备案号",
- "description": "网站描述",
- "record_no": "网站ICP",
- "icp_url": "ICP URL",
- "network_security_url": "网安备案链接",
- "keywords": "关键字",
- "placeholder": {
- "title": "请输入站点名称",
- "url": "请输入后端站点地址",
- "name": "请输入站点名称",
- "network_security": "请输入网备案号",
- "description": "请填写网站描述",
- "record_no": "请输入网站ICP",
- "icp_url": "请输入ICP URL",
- "network_security_url": "请输入网安备案链接",
- "keywords": "请输入网站关键字"
- },
- "button": {
- "submit": "保存"
- }
- },
- "upload": {
- "title": "上传设置",
- "mode": "上传模式",
- "single_limit": "上传大小",
- "total_limit": "文件限制",
- "nums": "数量限制",
- "exclude": "不允许文件类型",
- "extend": {
- "root": "存储目录",
- "secretId": "secretId",
- "accessKey": "accessKey",
- "accessKeyId": "accessKeyId",
- "secretKey": "secretKey",
- "key": "key",
- "accessKeySecret": "accessKeySecret",
- "secret": "secret",
- "bucket": "桶名称",
- "dirname": "目录名称",
- "domain": "域名地址",
- "endpoint": "Endpoint",
- "region": "区域",
- "acl": "Acl",
- "remark": "备注"
- },
- "button": {
- "submit": "保存",
- "extend": "扩展设置"
- }
- },
- "email": {
- "title": "邮件设置",
- "Host": "SMTP服务器",
- "Port": "SMTP端口",
- "Username": "SMTP用户名",
- "Password": "SMTP密码",
- "SMTPSecure": "SMTP验证方式",
- "From": "默认发件人",
- "FromName": "默认发件人名称",
- "test": "测试地址",
- "button": {
- "submit": "保存"
- },
- "tip": {
- "test": "发送测试邮件"
- },
- "placeholder": {
- "Host": "请输入SMTP服务器地址",
- "Port": "请输入SMTP端口",
- "Username": "请输入SMTP用户名",
- "Password": "请输入SMTP密码",
- "SMTPSecure": "请输入SMTP验证方式",
- "From": "请输入默认发件人",
- "FromName": "请输入默认发件人名称",
- "test": "请输入测试地址"
- }
- },
- "sms": {
- "title": "短信设置",
- "access_key_id": "access_key_id",
- "access_key_secret": "access_key_secret",
- "enable": "是否开启",
- "sign_name": "sign_name",
- "placeholder": {
- "access_key_id": "请输入 access_key_id",
- "access_key_secret": "请输入 access_key_secret",
- "sign_name": "请输入默认签名"
- },
- "button": {
- "submit": "保存"
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.dept.json b/src/locales/lang/zh-cn/setting/setting.dept.json
deleted file mode 100644
index dce38f93..00000000
--- a/src/locales/lang/zh-cn/setting/setting.dept.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "list": {
- "title": "部门管理",
- "table": {
- "columns": {
- "id": "ID",
- "name": "部门名称",
- "code": "部门代码",
- "parent_dept": "上级部门",
- "enabled": "状态",
- "leader": "部门领导",
- "remark": "备注",
- "sort": "排序",
- "created_date": "创建时间",
- "operation": "操作",
- "actions": {
- "append": "新增下级",
- "edit": "修改",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- },
- "status": {
- "disabled": "禁用",
- "enabled": "启用",
- "confirm": "你要将 {0}的状态切换为 【{1}】吗?",
- "title": "切换状态"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "collapse": "收缩",
- "expand": "展开",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "name": "部门名称",
- "code": "部门代码",
- "parent_dept": "上级部门",
- "enabled": "状态",
- "leader": "部门领导",
- "remark": "备注",
- "created_date": "创建时间",
- "placeholder": {
- "code": "请输入部门代码",
- "name": "请输入部门名称",
- "enabled": "请选择状态",
- "leader": "请选择部门领导"
- }
- }
- },
- "form": {
- "modal": {
- "name": "部门名称",
- "code": "部门代码",
- "parent_dept": "上级部门",
- "enabled": "状态",
- "leader": "部门领导",
- "remark": "备注",
- "created_date": "创建时间",
- "placeholder": {
- "code": "请输入部门标识",
- "name": "请输入部门名称",
- "parent_dept": "请选择上级部门",
- "remark": "请输入备注",
- "leader": "请选择部门领导"
- }
- },
- "help": {}
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.dict.item.json b/src/locales/lang/zh-cn/setting/setting.dict.item.json
deleted file mode 100644
index 3fafcfa5..00000000
--- a/src/locales/lang/zh-cn/setting/setting.dict.item.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
- "list": {
- "title": "字典项管理",
- "table": {
- "columns": {
- "id": "ID",
- "label": "字典项标签",
- "value": "字典项键值",
- "code": "字典标识",
- "sort": "排序",
- "enabled": "状态",
- "other_class": "其他css",
- "color": "颜色",
- "is_default": "默认值",
- "remark": "备注",
- "created_date": "创建日期",
- "updated_date": "更新日期",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "label": "字典标签",
- "value": "字典键值",
- "enabled": "状态",
- "placeholder": {
- "label": "请输入字典项标签",
- "value": "请输入字典项值",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "label": "字典标签",
- "value": "字典键值",
- "code": "字典标识",
- "sort": "排序",
- "enabled": "状态",
- "other_class": "其他css",
- "color": "颜色",
- "is_default": "默认值",
- "remark": "备注",
- "placeholder": {
- "label": "请输入字典项标签",
- "value": "请输入字典项键值",
- "sort": "请输入字典项排序",
- "other_class": "可使用tailwind类名 如bg-blue w-full h-full等",
- "color": "请选择字典标签颜色",
- "is_default": "请输入默认值",
- "remark": "请输入备注"
- },
- "help": {
- "other_class": "标签的css样式, 可添加已经编译的css类名"
- }
- },
- "tag_style": {
- "default": "默认值颜色",
- "custom": "自定义颜色",
- "placeholder": {
- "default": "请选择标签样式"
- }
- }
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.dict.json b/src/locales/lang/zh-cn/setting/setting.dict.json
deleted file mode 100644
index ced7a0af..00000000
--- a/src/locales/lang/zh-cn/setting/setting.dict.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "list": {
- "title": "字典管理",
- "table": {
- "columns": {
- "id": "ID",
- "group_code": "所属分组",
- "name": "字典名称",
- "code": "字典标识",
- "sort": "排序",
- "data_type": "数据类型",
- "description": "描述",
- "enabled": "状态",
- "dict_item": "字典项",
- "operation": "操作",
- "actions": {
- "item": "字典项",
- "edit": "修改",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- },
- "status": {
- "disabled": "禁用",
- "enabled": "启用",
- "confirm": "你要将 {0}的状态切换为 【{1}】吗?",
- "title": "切换状态"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "enum": "枚举字典",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "group_code": "所属分组",
- "code": "字典代码",
- "name": "字典名称",
- "enabled": "状态",
- "placeholder": {
- "group_code": "请选择所属分组",
- "code": "请输入字典代码",
- "name": "请输入字典名称",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "group_code": "所属分组",
- "name": "字典名称",
- "code": "字典标识",
- "sort": "排序",
- "data_type": "数据类型",
- "description": "描述",
- "enabled": "状态",
- "remark": "备注",
- "placeholder": {
- "group_code": "请选择所属分组",
- "code": "请输入字典标识",
- "name": "请输入字典名称",
- "sort": "请输字典排序",
- "remark": "请输入备注"
- }
- },
- "help": {}
- },
- "enum": {
- "title": "枚举字典",
- "columns": {
- "dict_key": "命名空间",
- "name": "枚举名称",
- "case": "唯一标识",
- "label": "标签",
- "value": "值",
- "color": "标签颜色"
- }
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.gateway.blacklist.json b/src/locales/lang/zh-cn/setting/setting.gateway.blacklist.json
deleted file mode 100644
index 284744aa..00000000
--- a/src/locales/lang/zh-cn/setting/setting.gateway.blacklist.json
+++ /dev/null
@@ -1,87 +0,0 @@
-{
- "list": {
- "title": "限坊名单",
- "table": {
- "columns": {
- "id": "ID",
- "name": "名称",
- "match_type": "类型",
- "ip": "ip",
- "priority": "优先级",
- "methods": "HTTP方法",
- "path": "路径",
- "enabled": "状态",
- "message": "提示信息",
- "start_date": "起始日期",
- "end_date": "结束日期",
- "created_date": "创建时间",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- },
- "status": {
- "disabled": "禁用",
- "enabled": "启用",
- "confirm": "你要将 {0}的状态切换为 【{1}】吗?",
- "title": "切换状态"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "ip": "ip",
- "name": "名称",
- "enabled": "状态",
- "priority": "优先级",
- "methods": "HTTP方法",
- "path": "请求路径",
- "placeholder": {
- "ip": "请输入ip地址",
- "name": "请输入名称",
- "enabled": "请选择状态",
- "priority": "请选择优先级",
- "methods": "请选择HTTP方法",
- "path": "请输入请求路径"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "name": "名称",
- "match_type": "类型",
- "ip": "ip",
- "priority": "优先级",
- "methods": "HTTP方法",
- "path": "路径",
- "enabled": "状态",
- "message": "提示信息",
- "start_date": "起始日期",
- "end_date": "结束日期",
- "placeholder": {
- "name": "请输入名称",
- "match_type": "请选择类型",
- "ip": "请输入ip",
- "priority": "请输入优先级",
- "methods": "请选择HTTP方法",
- "path": "请输入请求路径",
- "enabled": "想选择状态",
- "message": "请输入提示信息",
- "start_date": "请输入起始日期",
- "end_date": "请输入结束日期"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.gateway.limiter.json b/src/locales/lang/zh-cn/setting/setting.gateway.limiter.json
deleted file mode 100644
index 9793ed6a..00000000
--- a/src/locales/lang/zh-cn/setting/setting.gateway.limiter.json
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- "list": {
- "title": "限流规则",
- "table": {
- "columns": {
- "id": "ID",
- "name": "规则名称",
- "enabled": "状态",
- "priority": "优先级",
- "match_type": "匹配类型",
- "conditions": "匹配条件",
- "methods": "HTTP方法",
- "path": "请求路径",
- "limit_type": "限制类型",
- "limit_value": "限制值",
- "period": "统计周期(秒)",
- "ttl": "有效期(秒)",
- "message": "提示信息",
- "created_date": "创建时间",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- },
- "status": {
- "disabled": "禁用",
- "enabled": "启用",
- "confirm": "你要将 {0}的状态切换为 【{1}】吗?",
- "title": "切换状态"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "name": "规则名称",
- "enabled": "状态",
- "priority": "优先级",
- "methods": "HTTP方法",
- "path": "请求路径",
- "placeholder": {
- "name": "请输入规则名称",
- "enabled": "请选择状态",
- "priority": "请选择优先级",
- "methods": "请选择HTTP方法",
- "path": "请输入请求路径"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "name": "规则名称",
- "enabled": "状态",
- "priority": "优先级",
- "match_type": "匹配类型",
- "conditions": "匹配条件",
- "methods": "HTTP方法",
- "path": "请求路径",
- "limit_type": "限制类型",
- "limit_value": "限制值",
- "period": "统计周期(秒)",
- "ttl": "有效期(秒)",
- "message": "提示信息",
- "remark": "备注",
- "placeholder": {
- "name": "请输入规则名称",
- "priority": "请选择优先级",
- "match_type": "请输入匹配类型",
- "conditions": "请输入匹配条件",
- "methods": "请选择HTTP方法",
- "path": "请输入请求路径",
- "limit_type": "请选择限制类型",
- "limit_value": "请输入限制值",
- "period": "请输入统计周期(秒)",
- "ttl": "请输入有效期(秒)",
- "message": "请输入提示信息"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.message.json b/src/locales/lang/zh-cn/setting/setting.message.json
deleted file mode 100644
index 98b01895..00000000
--- a/src/locales/lang/zh-cn/setting/setting.message.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "list": {
- "title": "我的消息",
- "table": {
- "columns": {
- "id": "ID",
- "type": "类型",
- "title": "标题",
- "related_id": "业务编号",
- "content": "内容",
- "sender": {
- "user_name": "用户名",
- "real_name": "用户昵称"
- },
- "status": "是否已读",
- "priority": "优先级",
- "channel": "场景",
- "created_date": "接收时间",
- "read_date": "阅读时间",
- "updated_date": "更新时间",
- "operation": "操作",
- "actions": {
- "edit": "编辑",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "type": "类型",
- "title": "标题",
- "content": "内容",
- "enabled": "状态",
- "priority": "优先级",
- "placeholder": {
- "type": "请选择类型",
- "title": "请输入标题",
- "content": "请填写内容",
- "enabled": "请选择状态",
- "priority": "请选择优先级"
- }
- }
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.notice.json b/src/locales/lang/zh-cn/setting/setting.notice.json
deleted file mode 100644
index b7b89126..00000000
--- a/src/locales/lang/zh-cn/setting/setting.notice.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "list": {
- "title": "通知公告",
- "table": {
- "columns": {
- "id": "ID",
- "type": "类型",
- "title": "标题",
- "content": "内容",
- "sort": "排序",
- "enabled": "状态",
- "created_dept": "部门",
- "remark": "",
- "created_date": "创建日期",
- "updated_date": "更新日期",
- "operation": "操作",
- "actions": {
- "edit": "编辑",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- },
- "publish": {
- "label": "推送",
- "title": "温馨提示",
- "confirm": "请确认是否推送【{0}】公告?"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "type": "类型",
- "title": "标题",
- "placeholder": {
- "type": "请选择类型",
- "title": "请输入标题"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "type": "类型",
- "title": "标题",
- "content": "内容",
- "sort": "排序",
- "enabled": "状态",
- "remark": "",
- "placeholder": {
- "type": "请选择类型",
- "title": "请输入标题",
- "sort": "请输入排序",
- "content": "请填写内容"
- }
- }
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/setting/setting.post.json b/src/locales/lang/zh-cn/setting/setting.post.json
deleted file mode 100644
index 2b1d319e..00000000
--- a/src/locales/lang/zh-cn/setting/setting.post.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "list": {
- "title": "岗位管理",
- "table": {
- "columns": {
- "id": "ID",
- "code": "岗位代码",
- "name": "岗位名称",
- "dept_name": "部门名称",
- "sort": "排序",
- "enabled": "状态",
- "created_date": "创建时间",
- "remark": "备注",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "code": "岗位代码",
- "name": "岗位名称",
- "enabled": "状态",
- "placeholder": {
- "code": "请输入岗位代码",
- "name": "请输入岗位名称",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "code": "岗位代码",
- "name": "岗位名称",
- "dept_name": "部门名称",
- "sort": "排序",
- "enabled": "状态",
- "remark": "备注",
- "placeholder": {
- "code": "请输入岗位标识",
- "name": "请输入岗位名称",
- "sort": "请输岗位排序值",
- "dept_name": "请选择部门",
- "remark": "请输入备注"
- }
- },
- "help": {}
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/system/system.menu.json b/src/locales/lang/zh-cn/system/system.menu.json
deleted file mode 100644
index 3d802f0c..00000000
--- a/src/locales/lang/zh-cn/system/system.menu.json
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "list": {
- "title": "菜单管理",
- "table": {
- "columns": {
- "id": "ID",
- "type": "类型",
- "title": "标题",
- "code": "权限标识",
- "path": "路由地址",
- "component": "页面组件",
- "sort": "排序",
- "enabled": "状态",
- "remark": "",
- "created_date": "创建日期",
- "updated_date": "更新日期",
- "operation": "操作",
- "actions": {
- "api": "选择权限",
- "append": "新增下级",
- "edit": "编辑",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "collapse": "收缩",
- "expand": "展开",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "type": "类型",
- "title": "标题",
- "path": "路由地址",
- "code": "权限标识",
- "enabled": "状态",
- "placeholder": {
- "type": "请选择类型",
- "title": "请输入标题",
- "path": "请输入路由地址",
- "code": "请输入权限标识",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "type": "菜单类型",
- "pid": "上级菜单",
- "app": "应用编码",
- "title": "菜单名称",
- "code": "权限标识",
- "sort": "排序",
- "path": "路由地址/接口",
- "component": "组件地址",
- "redirect": "重定向",
- "icon": "图标",
- "is_show": "是否显示",
- "is_link": "是否内链",
- "link_url": "内链地址",
- "enabled": "状态",
- "open_type": "打开方式",
- "is_cache": "是否缓存 ",
- "is_sync": "是否同步",
- "is_affix": "是否固定",
- "methods": "请求方式",
- "is_frame": "是否外链",
- "placeholder": {
- "pid": "请选择上级菜单",
- "title": "请输入菜单名称",
- "code": "请输入权限标识",
- "sort": "请输入排序",
- "path": "请输入路由地址/接口",
- "component": "请输入组件地址",
- "icon": "请选择图标",
- "link_url": "请输入内链地址"
- }
- },
- "placeholder": {
- "type": "请选择菜单类型",
- "pid": "请选择上级菜单",
- "app": "请选择应用",
- "title": "请输入菜单名称",
- "code": "请输入权限标识",
- "sort": "请输入排序",
- "path": "请输入路由地址/接口",
- "component": "请输入组件地址",
- "open_type": "请选择打开方式",
- "icon": "请选择图标",
- "link_url": "请输入内链地址",
- "enabled": "请选择状态",
- "is_show": "请选择是否显示",
- "is_sync": "请选择是否同步",
- "is_cache": "请选择是否缓存"
- },
- "help": {
- "path": "请输入正确的路由地址或接口路径",
- "link_url": "请输入正确的内链地址"
- }
- },
- "api": {
- "title": "选择接口",
- "search": "搜索",
- "sync": "同步",
- "tips": {
- "1": "1.接口可多选,可重复添加;",
- "2": "2.开发者按照后端路由规则进行添加路由定义;",
- "3": "3.添加后即可在此选择对应的接口;"
- },
- "routeInfo": {
- "name": "接口名称",
- "method": "接口方式",
- "path": "接口地址"
- }
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/system/system.role.json b/src/locales/lang/zh-cn/system/system.role.json
deleted file mode 100644
index 5db5920a..00000000
--- a/src/locales/lang/zh-cn/system/system.role.json
+++ /dev/null
@@ -1,97 +0,0 @@
-{
- "list": {
- "title": "角色管理",
- "table": {
- "columns": {
- "id": "ID",
- "name": "角色",
- "code": "角色代码",
- "role_name": "角色名称",
- "is_super_admin": "是否超级管理员",
- "role_type": "角色类型",
- "data_scope": "数据权限",
- "sort": "排序",
- "enabled": "状态",
- "remark": "备注",
- "created_date": "创建时间",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "user": "分配用户",
- "data_scope": "数据权限",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- },
- "status": {
- "disabled": "禁用",
- "enabled": "启用",
- "confirm": "你要将 {name}的状态切换为 【{status}】吗?",
- "title": "切换状态"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "确认删除选中的{length}条记录吗?"
- }
- }
- },
- "query": {
- "code": "角色代码",
- "name": "角色名称",
- "enabled": "角色状态",
- "created_date": "日期",
- "placeholder": {
- "code": "请输入角色代码",
- "name": "请输入角色名称",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "code": "角色代码",
- "name": "角色名称",
- "is_super_admin": "是否超级管理员",
- "role_type": "角色类型",
- "data_scope": "数据权限",
- "sort": "排序",
- "enabled": "状态",
- "permissions": "权限",
- "dept_list": "部门列表",
- "remark": "备注",
- "placeholder": {
- "code": "请输入角色标识",
- "name": "请输入角色名称",
- "role_type": "请选择角色类型",
- "remark": "请输入备注"
- }
- },
- "data_scope": {
- "title": "数据权限",
- "role_code": "角色代码",
- "role_name": "角色名称",
- "data_permission": "数据权限",
- "dept_list": "部门列表",
- "assign_permission": "分配权限",
- "assign_success": "分配成功"
- },
- "help": {}
- },
- "assign_user": {
- "title": "分配用户",
- "append_title": "添加用户"
- },
- "message": {
- "success": "成功",
- "error": "失败",
- "delete": "删除成功",
- "operate": "操作成功"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/system/system.user.center.json b/src/locales/lang/zh-cn/system/system.user.center.json
deleted file mode 100644
index ade274c3..00000000
--- a/src/locales/lang/zh-cn/system/system.user.center.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
- "title": "个人中心",
- "base_setting": {
- "title": "基础设置",
- "real_name": "昵称",
- "mobile_phone": "手机",
- "email": "邮箱",
- "sex": "性别",
- "address": "地址",
- "signed": "签名",
- "button": {
- "submit": "更新"
- }
- },
- "secure_setting": {
- "title": "安全设置",
- "old_password": "旧密码",
- "new_password": "新密码",
- "confirm_password": "确认密码",
- "placeholder": {
- "old_password": "请输入用户密码",
- "new_password": "请输入新密码",
- "confirm_password": "请输入确认密码"
- },
- "rules": {
- "min_password": "密码长度不能小于{0}字符",
- "max_password": "密码长度不能超过{0}字符",
- "differ_password": "两次密码不一致",
- "degree_password": "新旧密码不能相同"
- },
- "button": {
- "submit": "修改密码"
- }
- },
- "online_device": {
- "title": "在线设备",
- "query": {
- "ipaddr": "ip地址",
- "user_name": "用户账号"
- },
- "table": {
- "title": "我的在线设备",
- "columns": {
- "user_name": "登录账号",
- "ip": "IP地址",
- "ip_location": "登录地址",
- "browser": "浏览器",
- "os": "系统",
- "login_time": "登录时间",
- "operation": "操作",
- "actions": {
- "force_offline": {
- "label": "强制下线",
- "confirm": "确认强制下线{0}?"
- }
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/system/system.user.json b/src/locales/lang/zh-cn/system/system.user.json
deleted file mode 100644
index fcee5a6d..00000000
--- a/src/locales/lang/zh-cn/system/system.user.json
+++ /dev/null
@@ -1,126 +0,0 @@
-{
- "list": {
- "title": "用户管理",
- "table": {
- "columns": {
- "id": "id",
- "user_name": "账号",
- "real_name": "用户昵称",
- "nick_name": "用户昵称",
- "password": "用户密码",
- "is_super": "是否管理员",
- "mobile_phone": "手机号码",
- "email": "邮箱",
- "avatar": "头像",
- "signed": "签名",
- "dashboard": "首页",
- "dept_id": "部门ID",
- "dept_name": "部门名称",
- "enabled": "状态",
- "login_ip": "登录ip",
- "login_time": "登录时间",
- "backend_setting": "个人配置",
- "tenants": "授权租户",
- "sex": "性别",
- "remark": "备注",
- "birthday": "生日",
- "tel": "电话",
- "is_locked": "是否锁定",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "managed_tenants": "租户管理",
- "locked": {
- "label": "锁定",
- "title": "温馨提示",
- "confirm": "你要将 {name}的账号进行锁定?"
- },
- "un_locked": {
- "label": "解锁",
- "title": "温馨提示",
- "confirm": "你要将 {name}的账号进行解锁?"
- },
- "reset_password": "重置密码",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- },
- "status": {
- "disabled": "禁用",
- "enabled": "启用",
- "confirm": "你要将 {name}的状态切换为 【{status}】吗?",
- "title": "切换状态"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "确认删除选中的{length}条记录吗?"
- }
- }
- },
- "query": {
- "user_name": "用户名",
- "real_name": "姓名",
- "mobile_phone": "手机号码",
- "enabled": "状态",
- "created_date": "日期",
- "is_locked": "是否锁定",
- "placeholder": {
- "user_name": "请输入用户名",
- "real_name": "请输入姓名",
- "mobile_phone": "请输入手机号码",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "user_name": "账号",
- "real_name": "用户昵称",
- "nick_name": "用户昵称",
- "password": "用户密码",
- "mobile_phone": "手机号码",
- "email": "邮箱",
- "sex": "性别",
- "enabled": "状态",
- "dept_name": "部门名称",
- "post_name": "岗位名称",
- "role_name": "角色名称",
- "login_date": "上次登录时间",
- "avatar": "头像",
- "remark": "备注",
- "birthday": "生日",
- "tel": "电话",
- "is_locked": "是否锁定",
- "address": "地址",
- "signed": "签名"
- },
- "help": {
- "post_name": "选择部门后, 将自动加载该部门下所有的岗位"
- },
- "placeholder": {
- "user_name": "请输入账号",
- "real_name": "请输入用户昵称",
- "nick_name": "请输入用户昵称",
- "password": "请输入用户密码",
- "mobile_phone": "请输入手机号码",
- "email": "请输入邮箱",
- "dept_name": "请选择部门",
- "post_name": "请选择岗位",
- "role_name": "请选择角色",
- "remark": "备注"
- }
- },
- "success": {
- "reset_password": "重置密码成功",
- "un_locked": "解锁成功",
- "locked": "锁定成功",
- "delete": "删除成功",
- "operate": "操作成功"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.crontab.json b/src/locales/lang/zh-cn/tools/tools.crontab.json
deleted file mode 100644
index 02895edc..00000000
--- a/src/locales/lang/zh-cn/tools/tools.crontab.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "list": {
- "title": "定时任务",
- "table": {
- "columns": {
- "id": "ID",
- "biz_id": "业务ID",
- "title": "名称",
- "type": "类型",
- "task_cycle": "任务周期",
- "cycle_rule": "周期规则",
- "rule": "任务表达式",
- "rule_name": "执行规则",
- "target": "调用任务",
- "running_times": "运行次数",
- "last_running_time": "上次运行时间",
- "enabled": "启用状态",
- "singleton": "是否循环",
- "created_date": "创建时间",
- "operation": "操作",
- "actions": {
- "edit": "修改",
- "execute": "执行",
- "logs": "日志",
- "resume": "启动",
- "pause": "停止",
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "create": "新增",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "title": "任务名称",
- "type": "任务类型",
- "enabled": "状态",
- "placeholder": {
- "title": "请输入任务名称",
- "type": "请选择任务类型",
- "enabled": "请选择任务状态"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "biz_id": "业务ID",
- "title": "任务名称",
- "type": "任务类型",
- "task_cycle": "执行周期",
- "cycle_rule": "周期规则",
- "rule": "表达式",
- "target": "调用任务",
- "running_times": "运行次数",
- "last_running_time": "上次运行时间",
- "enabled": "状态",
- "singleton": "是否循环执行",
- "remark": "备注",
- "placeholder": {
- "title": "请输入任务名称",
- "target": "请输入调用任务",
- "remark": "请输入备注"
- },
- "suffix": {
- "month": "月",
- "day": "日",
- "hour": "时",
- "minute": "分",
- "second": "秒"
- }
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.crontab.log.json b/src/locales/lang/zh-cn/tools/tools.crontab.log.json
deleted file mode 100644
index 3b04c3c7..00000000
--- a/src/locales/lang/zh-cn/tools/tools.crontab.log.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "list": {
- "title": "执行日志",
- "table": {
- "columns": {
- "id": "ID",
- "crontab_id": "任务ID",
- "target": "调用目标",
- "log": "执行日志",
- "return_code": "运行状态",
- "running_time": "执行耗时",
- "created_date": "创建时间",
- "operation": "操作",
- "actions": {
- "delete": {
- "label": "删除",
- "title": "删除确认",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "empty": {
- "label": "清空",
- "title": "温馨提示",
- "confirm": "确认清除所有记录吗?"
- },
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "target": "调用目标",
- "return_code": "执行状态",
- "placeholder": {
- "target": "请输入调用目标",
- "return_code": "请选择执行状态"
- }
- }
- },
- "form": {}
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.delegation.json b/src/locales/lang/zh-cn/tools/tools.delegation.json
deleted file mode 100644
index fa809431..00000000
--- a/src/locales/lang/zh-cn/tools/tools.delegation.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "title": "授权信息",
- "company": "授权公司",
- "domain": "授权域名",
- "auth_code": "授权编码",
- "auth_button": "授权码认证",
- "how_to_get": "如何获取授权码?",
- "get_from_website": "通过官网获取授权码。",
- "go_to_market": "去应用市场逛逛",
- "close": "关闭",
- "dialog": {
- "title": "授权码认证",
- "auth_code": "授权编码",
- "auth_secret": "授权密钥",
- "auth_code_placeholder": "请输入授权码",
- "auth_secret_placeholder": "请输入授权密钥",
- "auth_code_required": "请输入授权码",
- "auth_secret_required": "请输入授权密钥",
- "success": "授权码认证成功"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.features.json b/src/locales/lang/zh-cn/tools/tools.features.json
deleted file mode 100644
index 715122a2..00000000
--- a/src/locales/lang/zh-cn/tools/tools.features.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "search_placeholder": "输入模块关键字",
- "card_view": "卡片视图",
- "table_view": "表格视图",
- "total_modules": "共 {count} 个模块",
- "no_data_title": "暂无模块数据",
- "no_data_description": "当前筛选条件下没有找到匹配的模块",
- "version": "版本:",
- "update_log": "更新记录",
- "uninstall": "卸载",
- "download": "立即下载",
- "view_details": "详情",
- "update_info": "更新信息",
- "table_columns": {
- "index": "序号",
- "module_info": "模块信息",
- "app_id": "应用标识",
- "version": "版本",
- "status": "状态",
- "actions": "操作"
- },
- "status": {
- "installed": "已安装",
- "not_installed": "未安装"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.files.json b/src/locales/lang/zh-cn/tools/tools.files.json
deleted file mode 100644
index cd995cdb..00000000
--- a/src/locales/lang/zh-cn/tools/tools.files.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
- "list": {
- "title": "附件管理",
- "table": {
- "columns": {
- "id": "ID",
- "url": "访问地址",
- "size": "文件大小",
- "size_info": "文件详情",
- "hash": "Hash",
- "filename": "文件名称",
- "original_filename": "原始文件名",
- "base_path": "基础路径",
- "path": "存储路径",
- "ext": "扩展名",
- "content_type": "MIME类型",
- "platform": "存储平台",
- "th_url": "缩略图访问路径",
- "object_id": "文件所属对象Id",
- "object_type": "对象类型",
- "attr": "附加属性",
- "remark": "",
- "created_date": "创建日期",
- "updated_date": "更新日期",
- "created_name": "上传人",
- "operation": "操作",
- "actions": {
- "download": "下载",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "upload": "上传",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "filename": "文件名",
- "original_filename": "原文件名",
- "ext": "扩展名",
- "platform": "平台",
- "placeholder": {
- "filename": "请输入文件名称",
- "original_filename": "请输入原始文件名称",
- "ext": "请输入扩展名",
- "platform": "请输入平台"
- }
- }
- },
- "form": {},
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.generator.code.json b/src/locales/lang/zh-cn/tools/tools.generator.code.json
deleted file mode 100644
index 140b73b8..00000000
--- a/src/locales/lang/zh-cn/tools/tools.generator.code.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "list": {
- "title": "代码生成",
- "table_name": "表名",
- "table_content": "描述",
- "plugin_name": "所属模块",
- "class_name": "类名",
- "package_name": "包名",
- "author": "作者",
- "remark": "备注",
- "features_name": "功能名称",
- "delete_type": "删除类型",
- "edit_mode": "编辑模式",
- "sort_field": "排序字段",
- "sort_order": "排序顺序",
- "parent_menu": "父菜单",
- "generate_files": "生成文件",
- "generate": "生成代码",
- "preview": "预览代码",
- "download": "下载代码",
- "created_date": "创建时间",
- "updated_date": "更新时间",
- "query": {
- "name": "查询名称",
- "placeholder": "请输入查询名称",
- "features_name": "所属模块",
- "placeholder_features_name": "请选择所属模块",
- "table_name": "表名",
- "placeholder_table_name": "请输入表名"
- }
- },
- "basic": {
- "table_name": "表名称",
- "description": "描述",
- "plugin": "所属插件",
- "module_name": "模块名称",
- "class_name": "类名称",
- "table_name_placeholder": "请输入表名称",
- "description_placeholder": "请输入描述",
- "plugin_placeholder": "请选择插件",
- "module_name_placeholder": "请输入模块名称",
- "class_name_placeholder": "请输入类名称",
- "module_tip_1": "生成代码所属功能模块,对应路由名称,例如会员模块,充值模块,订单模块等",
- "module_tip_2": "命名规范,小写,多个单词使用下划线连接,例如: member,article_category",
- "class_tip_1": "生成代码所属文件名称,controller,model,service,等类型文件名",
- "class_tip_2": "命名规范,小写,多个单词使用下划线连接,例如: article_category"
- },
- "field": {
- "operation": "操作",
- "column_name": "字段名称",
- "column_comment": "字段描述",
- "column_type": "字段类型",
- "primary_key": "主键",
- "required": "必填",
- "insert": "添加",
- "update": "编辑",
- "lists": "列表",
- "search": "搜索",
- "search_method": "搜索方式",
- "form_type": "表单类型",
- "validation_type": "验证类型",
- "placeholder": {
- "column_comment": "请输入字段描述",
- "select": "请选择",
- "setup": "设置"
- },
- "validation": {
- "max": "最大输入字符",
- "min": "最小输入字符",
- "between": "输入字符区间"
- }
- },
- "config": {
- "delete_type": "删除类型",
- "physical_delete": "物理删除",
- "soft_delete": "软删除",
- "delete_type_tip": "物理删除:直接从数据库删除记录;软删除:通过字段标记删除状态",
- "delete_field": "删除字段",
- "delete_field_tip": "选择用于标记删除状态的字段",
- "edit_mode": "编辑模式",
- "dialog": "弹窗",
- "drawer": "抽屉",
- "edit_mode_tip": "选择编辑数据时的界面展示方式",
- "sort_field": "排序字段",
- "sort_field_tip": "选择用于排序的字段,留空则不排序",
- "sort_order": "排序顺序",
- "asc": "升序",
- "desc": "降序",
- "sort_order_tip": "选择排序方式",
- "parent_menu": "父菜单",
- "placeholder": {
- "select": "请选择",
- "select_edit_mode": "请选择编辑模式",
- "enter_sort_field": "请输入排序字段",
- "select_sort_order": "请选择排序顺序"
- }
- },
- "relation": {
- "title": "关联设置",
- "type": "关联类型",
- "method_name": "关联方法名称",
- "app": "关联应用",
- "model": "关联模型",
- "local_key": "关联键",
- "foreign_key": "外键",
- "add_relation": "新增关联",
- "edit_relation": "编辑",
- "delete_relation": "删除",
- "operation": "操作",
- "type_options": {
- "one_to_one": "一对一",
- "one_to_many": "一对多",
- "many_to_many": "多对多"
- },
- "placeholder": {
- "relation_type": "请选择关联类型",
- "relation_method": "请输入关联方法名称",
- "relation_app": "请输入关联应用",
- "relation_model": "请输入关联模型",
- "relation_key": "请输入关联键",
- "foreign_key": "请输入外键"
- },
- "validation": {
- "relation_type_required": "请选择关联类型",
- "relation_method_required": "请输入关联方法名称",
- "relation_model_required": "请输入关联模型",
- "relation_key_required": "请输入关联键",
- "foreign_key_required": "请输入外键"
- }
- },
- "import_table": {
- "title": "导入数据表",
- "table_name": "表名称",
- "table_comment": "表注释",
- "engine": "引擎",
- "charset": "编码",
- "create_time": "创建时间",
- "confirm": "确认选择",
- "reset": "重置",
- "select_table": "选择数据表",
- "single_select_tip": "只能选择一张数据表",
- "no_selection": "请先选择数据表",
- "search_placeholder": "请输入表名"
- },
- "preview": {
- "dialog_title": "代码预览",
- "copy_button": "复制",
- "copy_success": "代码已复制到剪贴板",
- "copy_error": "复制失败,请手动复制",
- "fetch_error": "获取预览数据失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.plugin.develop.json b/src/locales/lang/zh-cn/tools/tools.plugin.develop.json
deleted file mode 100644
index f65eccd7..00000000
--- a/src/locales/lang/zh-cn/tools/tools.plugin.develop.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
- "title": "Plugin",
- "create": "新增Plugin",
- "edit": "编辑Plugin",
- "delete": "删除Plugin",
- "view": "查看Plugin",
- "create_success": "Plugin创建成功",
- "create_fail": "Plugin创建失败",
- "update_success": "Plugin更新成功",
- "update_fail": "Plugin更新失败",
- "delete_success": "Plugin删除成功",
- "delete_fail": "Plugin删除失败",
- "list": {
- "author": "作者",
- "version": "版本号",
- "cover": "封面",
- "id": "主键",
- "key": "插件标识",
- "desc": "插件描述",
- "support_app": "插件支持的应用空表示通用插件",
- "installed_at": "安装时间",
- "title": "插件名称",
- "icon": "插件图标",
- "status": "状态",
- "type": "插件类型app,plugin",
- "variables": "插件变量",
- "created_at": "创建时间"
- },
- "form": {
- "author": "作者",
- "version": "版本",
- "cover": "封面",
- "id": "主键",
- "key": "标识",
- "desc": "描述",
- "support_app": "插件支持的应用空表示通用插件",
- "installed_at": "安装时间",
- "title": "名称",
- "icon": "图标",
- "status": "状态",
- "type": "类型",
- "type_options": {
- "app": "App",
- "module": "Module"
- }
- },
- "search": {
- "desc": "插件描述",
- "title": "插件名称",
- "status": "状态"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.recycle.json b/src/locales/lang/zh-cn/tools/tools.recycle.json
deleted file mode 100644
index acebe449..00000000
--- a/src/locales/lang/zh-cn/tools/tools.recycle.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
- "list": {
- "title": "回收站管理",
- "table": {
- "columns": {
- "id": "ID",
- "data": "数据",
- "table_name": "数据表",
- "table_prefix": "表前缀",
- "enabled": "状态",
- "ip": "ip",
- "operate_by": "",
- "created_date": "创建日期",
- "updated_date": "更新日期",
- "operation": "操作",
- "actions": {
- "detail": "详情",
- "recover": "还原",
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "是否确认删除?"
- }
- }
- },
- "toolbar": {
- "delete": {
- "label": "删除",
- "title": "温馨提示",
- "confirm": "确认删除选中的{0}条记录吗?"
- }
- }
- },
- "query": {
- "table_name": "数据表",
- "enabled": "状态",
- "placeholder": {
- "table_name": "请输入数据表名称",
- "enabled": "请选择状态"
- }
- }
- },
- "form": {
- "modal": {
- "id": "ID",
- "data": "回收数据",
- "table_name": "数据表",
- "table_prefix": "表前缀",
- "enabled": "是否还原",
- "ip": "ip",
- "operate_name": "操作人员",
- "created_date": "删除时间"
- }
- },
- "message": {
- "success": "成功",
- "error": "失败"
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/tools/tools.terminal.json b/src/locales/lang/zh-cn/tools/tools.terminal.json
deleted file mode 100644
index 5509b0c7..00000000
--- a/src/locales/lang/zh-cn/tools/tools.terminal.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "title": "终端",
- "status": {
- "waiting": "等待执行",
- "connecting": "连接中",
- "executing": "执行中",
- "success": "执行成功",
- "failed": "执行失败",
- "unknown": "未知"
- },
- "empty": "没有运行的任务",
- "block_on_failure": "本命令执行失败会阻断队列执行",
- "not_refresh_browser": "请勿刷新浏览器",
- "task_blocking": "任务阻塞,添加的任务永远不会被执行",
- "actions": {
- "command_run_log": "命令运行日志",
- "retry": "重试",
- "delete": "删除",
- "test": "测试",
- "install": {
- "title": "安装依赖",
- "pnpm_install": "pnpm install",
- "composer_update": "composer update"
- },
- "republish": "重新发布",
- "empty_task": "清理任务",
- "setting": "终端设置",
- "return_terminal": "返回终端"
- },
- "form": {
- "title": "终端设置",
- "npm_registry": "NPM 源",
- "composer_registry": "Composer 源",
- "package_manager": "NPM 包管理器",
- "automatic_cleanup_task": "清理成功任务",
- "placeholder": {
- "npm_registry": "请选择NPM 源",
- "composer_registry": "请选择Composer 源",
- "package_manager": "请选择包管理器"
- },
- "confirm": {
- "title": "温馨提醒",
- "source_command": "无法修改源命令,请手动重新尝试。",
- "packaging_build": "请确认是否重新发布"
- }
- }
-}
\ No newline at end of file
diff --git a/src/locales/lang/zh-cn/web/web.link.json b/src/locales/lang/zh-cn/web/web.link.json
deleted file mode 100644
index 55fe3207..00000000
--- a/src/locales/lang/zh-cn/web/web.link.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "title": "友情链接管理",
- "table": {
- "columns": {
- "logo": "图标",
- "name": "名称",
- "url": "地址",
- "description": "描述",
- "sort": "排序",
- "enabled": "状态"
- }
- },
- "search": {
- "name": "链接名称",
- "url": "链接地址",
- "enabled": "状态"
- },
- "form": {
- "name": "名称",
- "url": "地址",
- "logo": "图标",
- "description": "描述",
- "sort": "排序",
- "enabled": "状态",
- "rules_name": "请输入链接名称",
- "rules_url": "请输入链接地址"
- }
-}
diff --git a/src/locales/lang/zh-cn/web/web.menu.json b/src/locales/lang/zh-cn/web/web.menu.json
deleted file mode 100644
index b514e5f4..00000000
--- a/src/locales/lang/zh-cn/web/web.menu.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "title": "菜单管理",
- "table": {
- "columns": {
- "name": "名称",
- "category": "分类",
- "url": "链接地址",
- "sort": "排序",
- "type": "类型",
- "target": "打开方式",
- "is_show": "是否显示",
- "enabled": "状态"
- }
- },
- "search": {
- "app": "应用",
- "category": "分类",
- "name": "名称",
- "type": "类型"
- },
- "form": {
- "id": "ID",
- "category": "分类",
- "app": "应用",
- "source": "来源",
- "name": "名称",
- "type": "类型",
- "pid": "父菜单",
- "url": "链接地址",
- "target": "打开方式",
- "icon": "图标",
- "sort": "排序",
- "enabled": "状态",
- "is_show": "显示",
- "rules_name": "请输入菜单名称",
- "rules_type": "请选择菜单类型",
- "placeholder_type": "请选择菜单类型",
- "placeholder_app": "请选择应用",
- "placeholder_url": "请输入链接地址",
- "placeholder_target": "请选择打开方式",
- "placeholder_pid": "请选择上级菜单",
- "placeholder_sort": "请输入排序",
- "placeholder_enabled": "请选择状态",
- "placeholder_is_show": "请选择是否显示",
- "placeholder_icon": "请选择图标"
- }
-}
diff --git a/src/router/utils/registerRoutes.ts b/src/router/utils/registerRoutes.ts
index 561305a4..8534d902 100644
--- a/src/router/utils/registerRoutes.ts
+++ b/src/router/utils/registerRoutes.ts
@@ -12,7 +12,7 @@ import { useMenuStore } from '@/store/modules/menu'
/**
* 动态导入 app/views 目录下所有 .vue 组件
*/
-const appModules: Record Promise> = import.meta.glob('@/app/views/**/*.vue', { eager: false })
+const appModules: Record Promise> = import.meta.glob('@/views/**/*.vue', { eager: false })
/**
* 动态导入 features 模块下所有 .vue 组件
@@ -189,8 +189,8 @@ function loadComponent(componentPath: string, routeName: string, meta: any): ()
*/
function loadAppComponent(componentPath: string, routeName: string): () => Promise {
// 构建可能的路径
- const fullPath = `@/app/views${componentPath}.vue`
- const fullPathWithIndex = `@/app/views${componentPath}/index.vue`
+ const fullPath = `@/views${componentPath}.vue`
+ const fullPathWithIndex = `@/views${componentPath}/index.vue`
// 先尝试直接路径,再尝试添加/index的路径
const module = appModules[fullPath] || appModules[fullPathWithIndex]
@@ -331,7 +331,7 @@ function handleLayoutRoute(
route: AppRouteRecord,
component: string | undefined
): void {
- converted.component = () => import('@/app/views/layout/index.vue')
+ converted.component = () => import('@/views/layout/index.vue')
converted.path = `/${(route.path?.split('/')[1] || '').trim()}`
// 移除父路由的 name,避免与子路由冲突
converted.name = undefined
diff --git a/src/views/member/tag/add-user.vue b/src/views/member/tag/add-user.vue
index 8986aa48..0e1a55a4 100644
--- a/src/views/member/tag/add-user.vue
+++ b/src/views/member/tag/add-user.vue
@@ -8,13 +8,13 @@
+
diff --git a/src/views/tools/generator/schemas/index.tsx b/src/views/tools/apps/generator/schemas/index.tsx
similarity index 99%
rename from src/views/tools/generator/schemas/index.tsx
rename to src/views/tools/apps/generator/schemas/index.tsx
index a4b1579a..6759d2bf 100644
--- a/src/views/tools/generator/schemas/index.tsx
+++ b/src/views/tools/apps/generator/schemas/index.tsx
@@ -3,7 +3,7 @@ import { $t } from '@/locales'
import { DictEnum } from '@/enums'
import { Recordable } from '@/types'
import { Icon } from '@/components/icon'
-import { GeneratorCodeService } from '@/api/tools/generator'
+import { GeneratorCodeService } from '@/api/tools/apps/generator'
// crud配置 - 函数方式
diff --git a/src/views/tools/features/components/index.ts b/src/views/tools/apps/module/components/index.ts
similarity index 100%
rename from src/views/tools/features/components/index.ts
rename to src/views/tools/apps/module/components/index.ts
diff --git a/src/views/tools/features/components/module-detail.vue b/src/views/tools/apps/module/components/module-detail.vue
similarity index 100%
rename from src/views/tools/features/components/module-detail.vue
rename to src/views/tools/apps/module/components/module-detail.vue
diff --git a/src/views/tools/features/components/module-list.vue b/src/views/tools/apps/module/components/module-list.vue
similarity index 100%
rename from src/views/tools/features/components/module-list.vue
rename to src/views/tools/apps/module/components/module-list.vue
diff --git a/src/views/tools/features/components/table-header.vue b/src/views/tools/apps/module/components/table-header.vue
similarity index 100%
rename from src/views/tools/features/components/table-header.vue
rename to src/views/tools/apps/module/components/table-header.vue
diff --git a/src/views/tools/features/components/upgrade-log.vue b/src/views/tools/apps/module/components/upgrade-log.vue
similarity index 100%
rename from src/views/tools/features/components/upgrade-log.vue
rename to src/views/tools/apps/module/components/upgrade-log.vue
diff --git a/src/views/tools/features/index.vue b/src/views/tools/apps/module/index.vue
similarity index 91%
rename from src/views/tools/features/index.vue
rename to src/views/tools/apps/module/index.vue
index 515422aa..7d1ec3dc 100644
--- a/src/views/tools/features/index.vue
+++ b/src/views/tools/apps/module/index.vue
@@ -33,7 +33,7 @@
-
--
Gitee
From 4f607d09f01b829f9ce65122daa02d820fe5c499 Mon Sep 17 00:00:00 2001
From: "Mr.April"
Date: Tue, 10 Mar 2026 21:56:48 +0800
Subject: [PATCH 16/16] =?UTF-8?q?=E7=A7=BB=E9=99=A4apps/official?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/apps/official/api/ask/answer/index.ts | 14 -
src/apps/official/api/ask/answer/types.ts | 19 --
src/apps/official/api/ask/category/index.ts | 14 -
src/apps/official/api/ask/category/types.ts | 10 -
src/apps/official/api/ask/comment/index.ts | 14 -
src/apps/official/api/ask/comment/types.ts | 18 -
src/apps/official/api/ask/index.ts | 18 -
src/apps/official/api/ask/question/index.ts | 48 ---
src/apps/official/api/ask/question/types.ts | 29 --
src/apps/official/api/ask/tag/index.ts | 14 -
src/apps/official/api/ask/tag/types.ts | 15 -
src/apps/official/api/doc/content/index.ts | 14 -
src/apps/official/api/doc/content/types.ts | 16 -
src/apps/official/api/doc/index.ts | 12 -
src/apps/official/api/doc/menu/index.ts | 14 -
src/apps/official/api/doc/menu/types.ts | 16 -
src/apps/official/api/doc/project/index.ts | 25 --
src/apps/official/api/doc/project/types.ts | 14 -
src/apps/official/api/index.ts | 12 -
src/apps/official/api/market/app-version.ts | 17 -
src/apps/official/api/market/app/index.ts | 26 --
src/apps/official/api/market/app/types.ts | 26 --
.../official/api/market/category/index.ts | 14 -
.../official/api/market/category/types.ts | 10 -
src/apps/official/api/market/index.ts | 12 -
src/apps/official/api/market/tag/index.ts | 14 -
src/apps/official/api/market/tag/types.ts | 15 -
.../official/components/carousel-upload.vue | 304 -----------------
.../official/components/poster-upload.vue | 147 --------
.../official/components/single-upload.vue | 259 --------------
src/apps/official/enums/dict-enum.ts | 13 -
src/apps/official/routes/index.ts | 119 -------
.../official/views/ask/category/index.vue | 14 -
.../views/ask/category/schemas/index.tsx | 174 ----------
.../official/views/ask/question/detail.vue | 321 ------------------
.../official/views/ask/question/index.vue | 57 ----
.../views/ask/question/schemas/index.tsx | 205 -----------
src/apps/official/views/ask/tag/index.vue | 17 -
.../official/views/ask/tag/schemas/index.tsx | 177 ----------
src/apps/official/views/doc-item/form.vue | 205 -----------
src/apps/official/views/doc-item/index.vue | 107 ------
.../official/views/doc-item/schemas/index.tsx | 139 --------
src/apps/official/views/doc/form.vue | 229 -------------
src/apps/official/views/doc/index.vue | 94 -----
src/apps/official/views/doc/schemas/index.tsx | 128 -------
src/apps/official/views/market/apps/form.vue | 237 -------------
src/apps/official/views/market/apps/index.vue | 82 -----
.../views/market/apps/schemas/index.tsx | 190 -----------
.../views/market/apps/version-form.vue | 125 -------
.../official/views/market/category/index.vue | 21 --
.../views/market/category/schemas/index.tsx | 160 ---------
51 files changed, 3994 deletions(-)
delete mode 100644 src/apps/official/api/ask/answer/index.ts
delete mode 100644 src/apps/official/api/ask/answer/types.ts
delete mode 100644 src/apps/official/api/ask/category/index.ts
delete mode 100644 src/apps/official/api/ask/category/types.ts
delete mode 100644 src/apps/official/api/ask/comment/index.ts
delete mode 100644 src/apps/official/api/ask/comment/types.ts
delete mode 100644 src/apps/official/api/ask/index.ts
delete mode 100644 src/apps/official/api/ask/question/index.ts
delete mode 100644 src/apps/official/api/ask/question/types.ts
delete mode 100644 src/apps/official/api/ask/tag/index.ts
delete mode 100644 src/apps/official/api/ask/tag/types.ts
delete mode 100644 src/apps/official/api/doc/content/index.ts
delete mode 100644 src/apps/official/api/doc/content/types.ts
delete mode 100644 src/apps/official/api/doc/index.ts
delete mode 100644 src/apps/official/api/doc/menu/index.ts
delete mode 100644 src/apps/official/api/doc/menu/types.ts
delete mode 100644 src/apps/official/api/doc/project/index.ts
delete mode 100644 src/apps/official/api/doc/project/types.ts
delete mode 100644 src/apps/official/api/index.ts
delete mode 100644 src/apps/official/api/market/app-version.ts
delete mode 100644 src/apps/official/api/market/app/index.ts
delete mode 100644 src/apps/official/api/market/app/types.ts
delete mode 100644 src/apps/official/api/market/category/index.ts
delete mode 100644 src/apps/official/api/market/category/types.ts
delete mode 100644 src/apps/official/api/market/index.ts
delete mode 100644 src/apps/official/api/market/tag/index.ts
delete mode 100644 src/apps/official/api/market/tag/types.ts
delete mode 100644 src/apps/official/components/carousel-upload.vue
delete mode 100644 src/apps/official/components/poster-upload.vue
delete mode 100644 src/apps/official/components/single-upload.vue
delete mode 100644 src/apps/official/enums/dict-enum.ts
delete mode 100644 src/apps/official/routes/index.ts
delete mode 100644 src/apps/official/views/ask/category/index.vue
delete mode 100644 src/apps/official/views/ask/category/schemas/index.tsx
delete mode 100644 src/apps/official/views/ask/question/detail.vue
delete mode 100644 src/apps/official/views/ask/question/index.vue
delete mode 100644 src/apps/official/views/ask/question/schemas/index.tsx
delete mode 100644 src/apps/official/views/ask/tag/index.vue
delete mode 100644 src/apps/official/views/ask/tag/schemas/index.tsx
delete mode 100644 src/apps/official/views/doc-item/form.vue
delete mode 100644 src/apps/official/views/doc-item/index.vue
delete mode 100644 src/apps/official/views/doc-item/schemas/index.tsx
delete mode 100644 src/apps/official/views/doc/form.vue
delete mode 100644 src/apps/official/views/doc/index.vue
delete mode 100644 src/apps/official/views/doc/schemas/index.tsx
delete mode 100644 src/apps/official/views/market/apps/form.vue
delete mode 100644 src/apps/official/views/market/apps/index.vue
delete mode 100644 src/apps/official/views/market/apps/schemas/index.tsx
delete mode 100644 src/apps/official/views/market/apps/version-form.vue
delete mode 100644 src/apps/official/views/market/category/index.vue
delete mode 100644 src/apps/official/views/market/category/schemas/index.tsx
diff --git a/src/apps/official/api/ask/answer/index.ts b/src/apps/official/api/ask/answer/index.ts
deleted file mode 100644
index 735ce443..00000000
--- a/src/apps/official/api/ask/answer/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { Answer } from './types'
-
-const baseUrl = '/ask/answer'
-
-/**
- * 回答服务
- */
-export const AnswerService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/ask/answer/types.ts b/src/apps/official/api/ask/answer/types.ts
deleted file mode 100644
index b4b22a7d..00000000
--- a/src/apps/official/api/ask/answer/types.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-export interface Answer {
- id: string
- question_id: string
- content: string
- author_id: string
- author_name?: string
- author_avatar?: string
- like_count?: number
- dislike_count?: number
- is_best?: boolean
- created_at: string
- updated_at: string
-}
-
-export interface AnswerSearchParams {
- page?: number
- limit?: number
- question_id?: string
-}
diff --git a/src/apps/official/api/ask/category/index.ts b/src/apps/official/api/ask/category/index.ts
deleted file mode 100644
index 59a2a417..00000000
--- a/src/apps/official/api/ask/category/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { Category } from './types'
-
-const baseUrl = '/ask/category'
-
-/**
- * 分类服务
- */
-export const CategoryService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/ask/category/types.ts b/src/apps/official/api/ask/category/types.ts
deleted file mode 100644
index f6923e4e..00000000
--- a/src/apps/official/api/ask/category/types.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export interface Category {
- id: string
- name: string
- description?: string
- icon?: string
- sort?: number
- question_count?: number
- created_at?: string
- updated_at?: string
-}
diff --git a/src/apps/official/api/ask/comment/index.ts b/src/apps/official/api/ask/comment/index.ts
deleted file mode 100644
index f6f268e4..00000000
--- a/src/apps/official/api/ask/comment/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { Comment, CommentSearchParams } from './types'
-
-const baseUrl = '/ask/comment'
-
-/**
- * 评论服务
- */
-export const CommentService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/ask/comment/types.ts b/src/apps/official/api/ask/comment/types.ts
deleted file mode 100644
index 0ab87db5..00000000
--- a/src/apps/official/api/ask/comment/types.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-export interface Comment {
- id: string
- target_id: string
- target_type: 'question' | 'answer'
- content: string
- author_id: string
- author_name?: string
- author_avatar?: string
- like_count?: number
- created_at: string
-}
-
-export interface CommentSearchParams {
- page?: number
- limit?: number
- target_type?: 'question' | 'answer'
- target_id?: string
-}
diff --git a/src/apps/official/api/ask/index.ts b/src/apps/official/api/ask/index.ts
deleted file mode 100644
index e05ef3dd..00000000
--- a/src/apps/official/api/ask/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * 问答社区模块统一导出
- */
-
-export { QuestionService } from './question'
-export type * from './question/types'
-
-export { AnswerService } from './answer'
-export type * from './answer/types'
-
-export { CommentService } from './comment'
-export type * from './comment/types'
-
-export { CategoryService } from './category'
-export type * from './category/types'
-
-export { TagService } from './tag'
-export type * from './tag/types'
diff --git a/src/apps/official/api/ask/question/index.ts b/src/apps/official/api/ask/question/index.ts
deleted file mode 100644
index 71de428d..00000000
--- a/src/apps/official/api/ask/question/index.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { Question, QuestionSearchParams } from './types'
-import request from '@/utils/http'
-
-const baseUrl = '/ask/question'
-
-/**
- * 问题服务
- */
-export const QuestionService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- }),
-
- /**
- * 设置置顶
- */
- async setSticky(id: number | string, data: { is_sticky: number; sticky_order?: number }) {
- return request.post(`${baseUrl}/${id}/sticky`, data)
- },
-
- /**
- * 设置精华
- */
- async setExcellent(id: number | string, data: { is_excellent: number }) {
- return request.post(`${baseUrl}/${id}/excellent`, data)
- }
-}
-
-const answerBaseUrl = '/ask/answer'
-
-/**
- * 回答服务
- */
-export const AnswerService = {
- ...BaseService({
- baseUrl: answerBaseUrl,
- forbiddenMethods: ['create', 'update', 'export', 'changStatus']
- }),
-
- /**
- * 设置最佳答案
- */
- async setBest(data: { id: number | string; is_best: number }) {
- return request.post(`${answerBaseUrl}/best`, data)
- }
-}
diff --git a/src/apps/official/api/ask/question/types.ts b/src/apps/official/api/ask/question/types.ts
deleted file mode 100644
index d357110b..00000000
--- a/src/apps/official/api/ask/question/types.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-export interface Question {
- id: string
- title: string
- content: string
- category_id?: string
- tags?: string[]
- author_id: string
- author_name?: string
- author_avatar?: string
- view_count?: number
- answer_count?: number
- is_solved?: boolean
- best_answer_id?: string
- status?: 'published' | 'draft' | 'closed'
- type?: string
- created_at: string
- updated_at: string
-}
-
-export interface QuestionSearchParams {
- page?: number
- limit?: number
- tag?: string
- tags?: string
- search?: string
- type?: string
- category_id?: string
- status?: string
-}
diff --git a/src/apps/official/api/ask/tag/index.ts b/src/apps/official/api/ask/tag/index.ts
deleted file mode 100644
index 3d8932ba..00000000
--- a/src/apps/official/api/ask/tag/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { Tag, TagSearchParams } from './types'
-
-const baseUrl = '/ask/tag'
-
-/**
- * 标签服务
- */
-export const TagService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/ask/tag/types.ts b/src/apps/official/api/ask/tag/types.ts
deleted file mode 100644
index 626f2904..00000000
--- a/src/apps/official/api/ask/tag/types.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export interface Tag {
- id: string
- name: string
- color?: string
- description?: string
- question_count?: number
- created_at?: string
- updated_at?: string
-}
-
-export interface TagSearchParams {
- page?: number
- limit?: number
- search?: string
-}
diff --git a/src/apps/official/api/doc/content/index.ts b/src/apps/official/api/doc/content/index.ts
deleted file mode 100644
index 4d4f9c24..00000000
--- a/src/apps/official/api/doc/content/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { DocContent, DocContentSearchParams } from './types'
-
-const baseUrl = '/doc/content'
-
-/**
- * 文档内容服务
- */
-export const DocContentService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/doc/content/types.ts b/src/apps/official/api/doc/content/types.ts
deleted file mode 100644
index d9928b6c..00000000
--- a/src/apps/official/api/doc/content/types.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export interface DocContent {
- id: string
- project_id?: string
- menu_id?: string
- title: string
- content: string
- path?: string
- created_at: string
- updated_at: string
-}
-
-export interface DocContentSearchParams {
- project_id?: string
- menu_id?: string
- search?: string
-}
diff --git a/src/apps/official/api/doc/index.ts b/src/apps/official/api/doc/index.ts
deleted file mode 100644
index ef2d115d..00000000
--- a/src/apps/official/api/doc/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * 文档管理模块统一导出
- */
-
-export { DocProjectService } from './project'
-export type * from './project/types'
-
-export { DocMenuService } from './menu'
-export type * from './menu/types'
-
-export { DocContentService } from './content'
-export type * from './content/types'
diff --git a/src/apps/official/api/doc/menu/index.ts b/src/apps/official/api/doc/menu/index.ts
deleted file mode 100644
index 211a0060..00000000
--- a/src/apps/official/api/doc/menu/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { DocMenu, DocMenuSearchParams } from './types'
-
-const baseUrl = '/doc/menu'
-
-/**
- * 文档目录服务
- */
-export const DocMenuService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/doc/menu/types.ts b/src/apps/official/api/doc/menu/types.ts
deleted file mode 100644
index 5b146aed..00000000
--- a/src/apps/official/api/doc/menu/types.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export interface DocMenu {
- id: string
- project_name: string
- parent_id?: string
- title: string
- path?: string
- sort?: number
- content_id?: string
- created_at?: string
- updated_at?: string
-}
-
-export interface DocMenuSearchParams {
- project_name?: string
- parent_id?: string
-}
diff --git a/src/apps/official/api/doc/project/index.ts b/src/apps/official/api/doc/project/index.ts
deleted file mode 100644
index 50e6d465..00000000
--- a/src/apps/official/api/doc/project/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { DocProject, DocProjectSearchParams } from './types'
-import request from '@/utils/http'
-
-const baseUrl = '/docs'
-
-/**
- * 文档项目服务
- */
-export const DocProjectService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
-
- }),
- //克隆文档
- clone(id: string | number): Promise {
- return request.post({
- url: `${baseUrl}/clone`,
- data: {
- id,
- },
- })
- }
-}
diff --git a/src/apps/official/api/doc/project/types.ts b/src/apps/official/api/doc/project/types.ts
deleted file mode 100644
index a8a677e7..00000000
--- a/src/apps/official/api/doc/project/types.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-export interface DocProject {
- id: string
- name: string
- title?: string
- description?: string
- created_at: string
- updated_at: string
-}
-
-export interface DocProjectSearchParams {
- page?: number
- limit?: number
- search?: string
-}
diff --git a/src/apps/official/api/index.ts b/src/apps/official/api/index.ts
deleted file mode 100644
index 2c605d73..00000000
--- a/src/apps/official/api/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * 官方模块 API 统一导出入口
- */
-
-// 问答社区模块
-export * from './ask'
-
-// 文档管理模块
-export * from './doc'
-
-// 应用市场模块
-export * from './market'
diff --git a/src/apps/official/api/market/app-version.ts b/src/apps/official/api/market/app-version.ts
deleted file mode 100644
index 7f2c8cc6..00000000
--- a/src/apps/official/api/market/app-version.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from "@/api/request";
-
-export namespace AppVersionService {
- /**
- * 发布新版本
- */
- export const publishVersion = (id: string, data: {
- version: string;
- download_url: string;
- release_notes?: string;
- sort_weight?: number;
- }) => {
- return request.post(`/market/apps/${id}/publish-version`, data);
- };
-}
-
-export default AppVersionService;
diff --git a/src/apps/official/api/market/app/index.ts b/src/apps/official/api/market/app/index.ts
deleted file mode 100644
index 8af2df2b..00000000
--- a/src/apps/official/api/market/app/index.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { MarketApp, MarketAppSearchParams } from './types'
-import request from '@/utils/http'
-
-
-const baseUrl = '/market/apps'
-
-/**
- * 应用服务
- */
-export const MarketAppService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- }),
-
- /**
- * 发布新版本
- */
- async publishVersion(data: { version: string; attachment: string, id: number | string, }) {
- return request.post({
- url: `${baseUrl}/publish-version`,
- data,
- })
- }
-}
diff --git a/src/apps/official/api/market/app/types.ts b/src/apps/official/api/market/app/types.ts
deleted file mode 100644
index a814ad50..00000000
--- a/src/apps/official/api/market/app/types.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-export interface MarketApp {
- id: number
- name: string
- code: string
- icon?: string
- description?: string
- category_id?: string
- tag_ids?: string[]
- price?: number
- price_type?: 'free' | 'paid' | 'vip'
- version?: string
- download_count?: number
- is_hot?: boolean
- is_new?: boolean
- created_at: string
- updated_at: string
-}
-
-export interface MarketAppSearchParams {
- page?: number
- limit?: number
- category?: string
- tag_id?: string
- pay?: string
- keyword?: string
-}
diff --git a/src/apps/official/api/market/category/index.ts b/src/apps/official/api/market/category/index.ts
deleted file mode 100644
index 438d01a7..00000000
--- a/src/apps/official/api/market/category/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { MarketCategory } from './types'
-
-const baseUrl = '/market/category'
-
-/**
- * 应用分类服务
- */
-export const MarketCategoryService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/market/category/types.ts b/src/apps/official/api/market/category/types.ts
deleted file mode 100644
index 8a425c60..00000000
--- a/src/apps/official/api/market/category/types.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-export interface MarketCategory {
- id: string
- name: string
- icon?: string
- description?: string
- sort?: number
- app_count?: number
- created_at?: string
- updated_at?: string
-}
diff --git a/src/apps/official/api/market/index.ts b/src/apps/official/api/market/index.ts
deleted file mode 100644
index 3d9a6c03..00000000
--- a/src/apps/official/api/market/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * 应用市场模块统一导出
- */
-
-export { MarketAppService } from './app'
-export type * from './app/types'
-
-export { MarketCategoryService } from './category'
-export type * from './category/types'
-
-export { MarketTagService } from './tag'
-export type * from './tag/types'
diff --git a/src/apps/official/api/market/tag/index.ts b/src/apps/official/api/market/tag/index.ts
deleted file mode 100644
index 838aef9e..00000000
--- a/src/apps/official/api/market/tag/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import BaseService from '@/api/core/base'
-import type { MarketTag, MarketTagSearchParams } from './types'
-
-const baseUrl = '/market/tag'
-
-/**
- * 应用标签服务
- */
-export const MarketTagService = {
- ...BaseService({
- baseUrl,
- forbiddenMethods: ['export', 'changStatus']
- })
-}
diff --git a/src/apps/official/api/market/tag/types.ts b/src/apps/official/api/market/tag/types.ts
deleted file mode 100644
index d4e95189..00000000
--- a/src/apps/official/api/market/tag/types.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-export interface MarketTag {
- id: string
- name: string
- color?: string
- description?: string
- app_count?: number
- created_at?: string
- updated_at?: string
-}
-
-export interface MarketTagSearchParams {
- page?: number
- limit?: number
- search?: string
-}
diff --git a/src/apps/official/components/carousel-upload.vue b/src/apps/official/components/carousel-upload.vue
deleted file mode 100644
index d3275bb8..00000000
--- a/src/apps/official/components/carousel-upload.vue
+++ /dev/null
@@ -1,304 +0,0 @@
-
-
-
-
-
-
-
- 上传图片 ({{ carouselList.length }}/{{ maxCount }})
-
-
-
-
-
-
![carousel]()
-
-
{{ index + 1 }}
-
-
-
-
-
-
diff --git a/src/apps/official/components/poster-upload.vue b/src/apps/official/components/poster-upload.vue
deleted file mode 100644
index c36660f9..00000000
--- a/src/apps/official/components/poster-upload.vue
+++ /dev/null
@@ -1,147 +0,0 @@
-
-
-
-
-
-
-
![]()
-
-
-
-
-
-
diff --git a/src/apps/official/components/single-upload.vue b/src/apps/official/components/single-upload.vue
deleted file mode 100644
index 55c45ec7..00000000
--- a/src/apps/official/components/single-upload.vue
+++ /dev/null
@@ -1,259 +0,0 @@
-
-
-
-
-
-
-
- {{ uploading ? uploadingText : buttonText || "上传文件" }}
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ mValue }}
-
-
-
- 删除
-
-
-
-
-
![预览]()
-
-
-
-
-
diff --git a/src/apps/official/enums/dict-enum.ts b/src/apps/official/enums/dict-enum.ts
deleted file mode 100644
index 6fbb53d2..00000000
--- a/src/apps/official/enums/dict-enum.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * 系统字典键常量
- * 注:实际数据通过API动态获取
- */
-import { DictEnum as BaseDictEnum } from "@/enums"
-
-export const DictEnum = {
- // 权限管控类型
- DOC_PERMISSION_TYPE: 'official.PermissionType',
- ...BaseDictEnum
-} as const
-
-export type DictEnumKey = keyof typeof DictEnum
diff --git a/src/apps/official/routes/index.ts b/src/apps/official/routes/index.ts
deleted file mode 100644
index 2fdf2874..00000000
--- a/src/apps/official/routes/index.ts
+++ /dev/null
@@ -1,119 +0,0 @@
-import { AppRouteRecord } from '@/types/router'
-import { RoutesAlias } from '@/router/routesAlias'
-
-export default {
- path: '/official',
- name: 'official',
- component: RoutesAlias.Layout,
- meta: {
- title: '微官网',
- icon: 'ri:article-line',
- module: 'demo'
- },
- children: [
- {
- path: 'doc',
- name: 'OfficialDoc',
- component: '/doc/index',
- meta: {
- title: '文档管理',
- icon: 'ri:list-unordered',
- keepAlive: false,
- module: 'official'
- }
- },
- {
- path: 'doc-item',
- name: 'OfficialDocItem',
- component: '/doc-item/index',
- meta: {
- title: '文档章节',
- icon: 'ri:list-unordered',
- keepAlive: false,
- isHide: true,
- module: 'official'
- }
- },
- {
- path: 'market',
- name: 'OfficialMarket',
- meta: {
- title: '应用市场',
- icon: 'ant-design:appstore-add-outlined',
- keepAlive: false,
- module: 'official'
- },
- children: [
- {
- path: 'category',
- name: 'OfficialMarketCategory',
- component: '/market/category/index',
- meta: {
- title: '应用分类',
- icon: 'ant-design:exception-outlined',
- keepAlive: false,
- module: 'official'
- }
- },
- {
- path: 'list',
- name: 'OfficialMarketList',
- component: '/market/apps/index',
- meta: {
- title: '应用列表',
- icon: 'ant-design:ordered-list-outlined',
- keepAlive: false,
- module: 'official'
- }
- }
-
- ]
- },
- {
- path: '/ask',
- name: 'OfficialAsk',
- meta: {
- title: '社区问答',
- icon: 'ant-design:question-circle-outlined',
- keepAlive: false,
- module: 'official'
- },
- children: [
- {
- path: '/ask/question',
- name: 'OfficialQaQuestion',
- component: '/ask/question/index',
- meta: {
- title: '问题列表',
- icon: 'ant-design:ordered-list-outlined',
- keepAlive: false,
- module: 'official'
- }
- },
- {
- path: '/ask/category',
- name: 'OfficialQaCategory',
- component: '/ask/category/index',
- meta: {
- title: '分类管理',
- icon: 'ant-design:exception-outlined',
- keepAlive: false,
- module: 'official'
- }
- },
- {
- path: '/ask/tag',
- name: 'OfficialQaTag',
- component: '/ask/tag/index',
- meta: {
- title: '标签管理',
- icon: 'ant-design:tag-outlined',
- keepAlive: false,
- module: 'official'
- }
- }
- ]
- },
-
- ]
-} as AppRouteRecord
\ No newline at end of file
diff --git a/src/apps/official/views/ask/category/index.vue b/src/apps/official/views/ask/category/index.vue
deleted file mode 100644
index 5151986b..00000000
--- a/src/apps/official/views/ask/category/index.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/ask/category/schemas/index.tsx b/src/apps/official/views/ask/category/schemas/index.tsx
deleted file mode 100644
index 777910b7..00000000
--- a/src/apps/official/views/ask/category/schemas/index.tsx
+++ /dev/null
@@ -1,174 +0,0 @@
-import { CategoryService } from '@/apps/official/api/ask'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { formatDateTime } from '@/utils'
-
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: CategoryService.list,
- dialogTitle: '分类列表',
- crudApi: {
- // 新增接口
- add: CategoryService.create,
- // 修改接口
- edit: CategoryService.update,
- // 删除接口
- remove: CategoryService.remove,
- // 详情接口
- view: CategoryService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: true,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: true,
- // 是否有详情
- hasView: true,
- // 新增权限码
- addAuth: 'ask:category:create',
- // 删除权限码
- removeAuth: 'ask:category:delete',
- // 修改权限码
- editAuth: 'ask:category:update',
- // 详情权限码
- viewAuth: 'ask:category:read',
- rowKey: 'id',
-
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
- {
- prop: 'id',
- label: 'ID',
- align: 'center',
- width: 80,
- visible: false
- },
- {
- prop: 'name',
- label: '分类名称',
- align: 'left',
- minWidth: 150
- },
- {
- prop: 'description',
- label: '分类描述',
- align: 'left',
- minWidth: 150
- },
- {
- prop: 'sort',
- label: '排序',
- align: 'center',
- width: 80
- },
- {
- label: '状态',
- prop: 'status',
- align: 'center',
- width: 80,
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS
- }
- },
- {
- label: '创建时间',
- prop: 'created_at',
- minWidth: 170,
- align: 'center',
- formatter: (row: any) => {
- return formatDateTime(row.created_at)
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '50%',
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '100px',
- schema: [
- {
- label: '分类名称',
- prop: 'LIKE_name',
- component: 'Input',
- colSpan: 6,
- },
- {
- label: '状态',
- prop: 'EQ_status',
- component: 'ApiDict',
- componentProps: {
- clearable: true,
- code: DictEnum.SYS_YES_NO
- },
- colSpan: 6
- }
- ]
- },
- // crud表单配置
- formSchema: {
- labelWidth: 100,
- gutter: 20,
- schema: [
- {
- label: 'ID',
- prop: 'id',
- component: 'Input',
- colSpan: 24,
- show: false
- },
- {
- label: '分类名称',
- prop: 'name',
- component: 'Input',
- colSpan: 24,
- rules: [{ required: true, message: '请输入分类名称' }]
- },
- {
- label: '分类描述',
- prop: 'description',
- component: 'Input',
- componentProps: {
- type: 'textarea',
- rows: 3
- },
- colSpan: 24
- },
- {
- label: '排序',
- prop: 'sort',
- component: 'InputNumber',
- defaultValue: 0,
- componentProps: {
- min: 0,
- max: 9999
- },
- colSpan: 12
- },
- {
- label: '状态',
- prop: 'status',
- component: 'ApiDict',
- defaultValue: 1,
- colSpan: 12,
- componentProps: {
- isBtn: true,
- code: DictEnum.SYS_YES_NO,
- renderType: 'RadioGroup'
- }
- }
- ]
- }
- }
-}
diff --git a/src/apps/official/views/ask/question/detail.vue b/src/apps/official/views/ask/question/detail.vue
deleted file mode 100644
index 59e304cf..00000000
--- a/src/apps/official/views/ask/question/detail.vue
+++ /dev/null
@@ -1,321 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/ask/question/index.vue b/src/apps/official/views/ask/question/index.vue
deleted file mode 100644
index f3f71dbf..00000000
--- a/src/apps/official/views/ask/question/index.vue
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/ask/question/schemas/index.tsx b/src/apps/official/views/ask/question/schemas/index.tsx
deleted file mode 100644
index f76a76b9..00000000
--- a/src/apps/official/views/ask/question/schemas/index.tsx
+++ /dev/null
@@ -1,205 +0,0 @@
-import { QuestionService } from '@/apps/official/api/ask'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { formatDateTime } from '@/utils'
-import { h } from 'vue'
-import { ElTag } from 'element-plus'
-
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: QuestionService.list,
- dialogTitle: '问题列表',
- crudApi: {
- // 删除接口
- remove: QuestionService.remove,
- // 详情接口
- view: QuestionService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: false,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: false,
- // 是否有详情
- hasView: false,
- // 新增权限码
- addAuth: 'ask:question:create',
- // 删除权限码
- removeAuth: 'ask:question:delete',
- // 修改权限码
- editAuth: 'ask:question:update',
- // 详情权限码
- viewAuth: 'ask:question:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
- {
- prop: 'id',
- label: 'ID',
- align: 'center',
- width: 80,
- visible: false
- },
- {
- prop: 'category.name',
- label: '分类',
- align: 'center',
- minWidth: 100,
- formatter: (row: any) => {
- return row.category?.name || '/'
- }
- },
- {
- prop: 'title',
- label: '问题标题',
- align: 'left',
- minWidth: 200
- },
- {
- prop: 'content',
- label: '问题内容',
- align: 'left',
- minWidth: 300,
- visible: false,
- showOverflowTooltip: true
- },
- {
- label: '标签',
- prop: 'tags',
- align: 'left',
- minWidth: 150,
- formatter: (row: any) => {
- if (!row.tags || !Array.isArray(row.tags) || row.tags.length === 0) {
- return '-'
- }
- return h('div', { style: { display: 'flex', flexWrap: 'wrap', gap: '4px', justifyContent: 'flex-start' } },
- row.tags.map((t: any) =>
- h(ElTag, { size: 'small', key: t.id }, () => t.name)
- )
- )
- }
- },
- {
- prop: 'view_count',
- label: '浏览',
- align: 'center',
- width: 70
- },
- {
- prop: 'comment_count',
- label: '评论',
- align: 'center',
- width: 70
- },
- {
- prop: 'like_count',
- label: '收藏',
- align: 'center',
- width: 70
- },
- {
- label: '是否置顶',
- prop: 'is_sticky',
- align: 'center',
- width: 90,
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_YES_NO
- }
- },
- {
- label: '是否精华',
- prop: 'is_excellent',
- align: 'center',
- width: 90,
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_YES_NO
- }
- },
- {
- prop: 'member.nickname',
- label: '提问者',
- align: 'center',
- minWidth: 100
- },
- {
- label: '创建时间',
- prop: 'created_at',
- minWidth: 170,
- align: 'center',
- visible: false,
- formatter: (row: any) => {
- return formatDateTime(row.created_at)
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '70%',
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '100px',
- schema: [
- {
- label: '关键词',
- prop: 'keywords',
- component: 'Input',
- colSpan: 6,
- componentProps: {
- placeholder: '标题/内容'
- }
- },
- {
- label: '分类',
- prop: 'EQ_category_id',
- component: 'ApiSelect',
- componentProps: {
- clearable: true,
- api: '/ask/category',
- params: {
- format: 'select'
- },
- },
- colSpan: 6
- },
- {
- label: '是否置顶',
- prop: 'EQ_is_sticky',
- component: 'ApiDict',
- componentProps: {
- clearable: true,
- code: DictEnum.SYS_YES_NO
- },
- colSpan: 6
- },
- {
- label: '是否精华',
- prop: 'EQ_is_excellent',
- component: 'ApiDict',
- componentProps: {
- clearable: true,
- code: DictEnum.SYS_YES_NO
- },
- colSpan: 6
- }
- ]
- },
- // crud表单配置
- formSchema: {
- labelWidth: 120,
- gutter: 20,
- schema: []
- }
- }
-}
diff --git a/src/apps/official/views/ask/tag/index.vue b/src/apps/official/views/ask/tag/index.vue
deleted file mode 100644
index 21f2f473..00000000
--- a/src/apps/official/views/ask/tag/index.vue
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/ask/tag/schemas/index.tsx b/src/apps/official/views/ask/tag/schemas/index.tsx
deleted file mode 100644
index 25a6bdc9..00000000
--- a/src/apps/official/views/ask/tag/schemas/index.tsx
+++ /dev/null
@@ -1,177 +0,0 @@
-import { TagService } from '@/apps/official/api/ask'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { formatDateTime } from '@/utils'
-
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: TagService.list,
- dialogTitle: '标签列表',
- crudApi: {
- // 新增接口
- add: TagService.create,
- // 修改接口
- edit: TagService.update,
- // 删除接口
- remove: TagService.remove,
- // 详情接口
- view: TagService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: true,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: true,
- // 是否有详情
- hasView: true,
- // 新增权限码
- addAuth: 'ask:tag:create',
- // 删除权限码
- removeAuth: 'ask:tag:delete',
- // 修改权限码
- editAuth: 'ask:tag:update',
- // 详情权限码
- viewAuth: 'ask:tag:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
- {
- prop: 'id',
- label: 'ID',
- align: 'center',
- width: 200,
- visible: false
- },
- {
- prop: 'name',
- label: '标签名称',
- align: 'left',
- minWidth: 150
- },
- {
- prop: 'description',
- label: '标签描述',
- align: 'left',
- minWidth: 200
- },
- {
- prop: 'usage_count',
- label: '使用次数',
- align: 'right',
- minWidth: 200
- },
- {
- prop: 'sort',
- label: '排序',
- align: 'center',
- width: 80
- },
- {
- label: '状态',
- prop: 'enabled',
- align: 'center',
- width: 80,
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS
- }
- },
- {
- label: '创建时间',
- prop: 'created_at',
- minWidth: 170,
- align: 'center',
- formatter: (row: any) => {
- return formatDateTime(row.created_at)
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '50%',
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '100px',
- schema: [
- {
- label: '标签名称',
- prop: 'LIKE_name',
- component: 'Input',
- colSpan: 6,
- componentProps: {
- clearable: true
- }
- },
- {
- label: '状态',
- prop: 'EQ_enabled',
- component: 'ApiDict',
- componentProps: {
- clearable: true,
- code: DictEnum.SYS_ENABLED_STATUS
- },
- colSpan: 6
- }
- ]
- },
- // crud表单配置
- formSchema: {
- labelWidth: 100,
- gutter: 20,
- schema: [
- {
- label: 'ID',
- prop: 'id',
- component: 'Input',
- colSpan: 24,
- show: false
- },
- {
- label: '标签名称',
- prop: 'name',
- component: 'Input',
- colSpan: 24,
- rules: [{ required: true, message: '请输入标签名称' }]
- },
- {
- label: '标签描述',
- prop: 'description',
- component: 'Input',
- componentProps: {
- type: 'textarea',
- rows: 3
- },
- colSpan: 24
- },
- {
- label: '排序',
- prop: 'sort',
- component: 'InputNumber',
- defaultValue: 0,
- colSpan: 12
- },
- {
- label: '状态',
- prop: 'enabled',
- component: 'ApiDict',
- defaultValue: 1,
- colSpan: 12,
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS,
- renderType: 'RadioGroup'
- }
- }
- ]
- }
- }
-}
diff --git a/src/apps/official/views/doc-item/form.vue b/src/apps/official/views/doc-item/form.vue
deleted file mode 100644
index 88678b85..00000000
--- a/src/apps/official/views/doc-item/form.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-
-
-
-
-
diff --git a/src/apps/official/views/doc-item/index.vue b/src/apps/official/views/doc-item/index.vue
deleted file mode 100644
index 31d69576..00000000
--- a/src/apps/official/views/doc-item/index.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/doc-item/schemas/index.tsx b/src/apps/official/views/doc-item/schemas/index.tsx
deleted file mode 100644
index 7421ed3e..00000000
--- a/src/apps/official/views/doc-item/schemas/index.tsx
+++ /dev/null
@@ -1,139 +0,0 @@
-import { DocContentService } from '@/apps/official/api/doc'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { formatDateTime } from '@/utils'
-
-const route = useRoute()
-const router = useRouter()
-const getRouteParams = () => {
- // 优先使用路径参数
- if (route.params.id) {
- return route.params.id as string
- }
- // 其次使用查询参数
- if (route.query.id) {
- return route.query.id as string
- }
- // 还可以支持其他查询参数名称
- if (route.query.doc_id) {
- return route.query.doc_id as string
- }
- return null
-}
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: DocContentService.list,
- dialogTitle: '文档中心',
- crudApi: {
- // 新增接口
- add: DocContentService.create,
- // 修改接口
- edit: DocContentService.update,
- // 删除接口
- remove: DocContentService.remove,
- // 详情接口
- view: DocContentService.get
- },
- tree: {
- // 树形id字段名
- id: 'id',
- // 树形pid字段名
- pid: 'pid',
- // 树形children字段名
- children: 'children'
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: false,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: false,
- // 是否有详情
- hasView: false,
- // 新增权限码
- addAuth: 'official:doc-item:create',
- // 删除权限码
- removeAuth: 'official:doc-item:delete',
- // 修改权限码
- editAuth: 'official:doc-item:update',
- // 详情权限码
- viewAuth: 'official:doc-item:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
- {
- label: '类型',
- prop: 'type',
- width: 90,
- align: 'center',
- formatter: (row: any) => {
- return Number(row.type) === 1 ? '目录' : '文档'
- }
- },
- {
- prop: 'title',
- label: '名称',
- align: 'left',
- minWidth: 120
- },
- {
- label: '状态',
- prop: 'enabled',
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS
- }
- },
- {
- label: '访问权限',
- prop: 'is_auth',
- align: 'center',
- formatter: (row: any) => {
- return Number(row.is_auth) === 1 ? '继承权限' : '公开文档'
- }
- },
- {
- prop: 'sort',
- label: '排序',
- width: 70,
- align: 'center'
- },
- {
- label: '创建时间',
- prop: 'created_at',
- minWidth: 150,
- align: 'center',
- formatter: (row: any) => {
- return formatDateTime(row.created_at)
- }
- },
- {
- label: '更新时间',
- prop: 'updated_at',
- align: 'center',
- visible: false,
- formatter: (row: any) => {
- return formatDateTime(row.updated_at)
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '70%',
- dialogType: 'drawer'
- },
- // 搜索表单配置
- useSearchForm: false,
- // crud表单配置
- formSchema: {}
- }
-}
diff --git a/src/apps/official/views/doc/form.vue b/src/apps/official/views/doc/form.vue
deleted file mode 100644
index e4f5b310..00000000
--- a/src/apps/official/views/doc/form.vue
+++ /dev/null
@@ -1,229 +0,0 @@
-
-
-
-
-
diff --git a/src/apps/official/views/doc/index.vue b/src/apps/official/views/doc/index.vue
deleted file mode 100644
index 275b5367..00000000
--- a/src/apps/official/views/doc/index.vue
+++ /dev/null
@@ -1,94 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/doc/schemas/index.tsx b/src/apps/official/views/doc/schemas/index.tsx
deleted file mode 100644
index 138486d3..00000000
--- a/src/apps/official/views/doc/schemas/index.tsx
+++ /dev/null
@@ -1,128 +0,0 @@
-import { DocProjectService } from '@/apps/official/api/doc'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { h } from 'vue'
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: DocProjectService.list,
- dialogTitle: '文档中心',
- crudApi: {
- // 新增接口
- add: DocProjectService.create,
- // 修改接口
- edit: DocProjectService.update,
- // 删除接口
- remove: DocProjectService.remove,
- // 详情接口
- view: DocProjectService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: false,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: false,
- // 是否有详情
- hasView: false,
- // 新增权限码
- addAuth: 'official:doc:create',
- // 删除权限码
- removeAuth: 'official:doc:delete',
- // 修改权限码
- editAuth: 'official:doc:update',
- // 详情权限码
- viewAuth: 'official:doc:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
- {
- label: '排序',
- prop: 'sort',
- align: 'center',
- width: 80
- },
- {
- prop: 'thumb',
- label: '缩略图',
- align: 'center',
- width: 80,
- formatter: (row: any) => {
- return h('img', {
- src: row.thumb,
- alt: row.title,
- style: {
- width: '40px',
- height: '40px'
- }
- })
- }
- },
- {
- label: '唯一标识',
- prop: 'code',
- align: 'center'
- },
- {
- label: '标题',
- prop: 'title',
- align: 'center'
- },
- {
- label: '阅读量',
- prop: 'read',
- align: 'center'
- },
- {
- prop: 'is_show',
- label: '是否显示',
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_YES_NO
- }
- },
- {
- prop: 'enabled',
- label: '状态',
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '70%',
- dialogType: 'drawer'
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '120px',
- schema: [
- {
- label: '唯一标识',
- prop: 'code',
- component: 'Input',
- colSpan: 6,
- rules: []
- },
- {
- prop: 'LIKE_title',
- label: '标题',
- component: 'Input',
- colSpan: 6
- }
- ]
- }
- // crud表单配置
- }
-}
diff --git a/src/apps/official/views/market/apps/form.vue b/src/apps/official/views/market/apps/form.vue
deleted file mode 100644
index 229da549..00000000
--- a/src/apps/official/views/market/apps/form.vue
+++ /dev/null
@@ -1,237 +0,0 @@
-
-
-
-
-
diff --git a/src/apps/official/views/market/apps/index.vue b/src/apps/official/views/market/apps/index.vue
deleted file mode 100644
index 14fe2d9b..00000000
--- a/src/apps/official/views/market/apps/index.vue
+++ /dev/null
@@ -1,82 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/market/apps/schemas/index.tsx b/src/apps/official/views/market/apps/schemas/index.tsx
deleted file mode 100644
index 02ef69ae..00000000
--- a/src/apps/official/views/market/apps/schemas/index.tsx
+++ /dev/null
@@ -1,190 +0,0 @@
-import { MarketAppService } from '@/apps/official/api/market'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { formatDateTime } from '@/utils'
-
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: MarketAppService.list,
- dialogTitle: '应用列表',
- crudApi: {
- // 新增接口
- add: MarketAppService.create,
- // 修改接口
- edit: MarketAppService.update,
- // 删除接口
- remove: MarketAppService.remove,
- // 详情接口
- view: MarketAppService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: false,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: false,
- // 是否有详情
- hasView: false,
- // 新增权限码
- addAuth: 'market:apps:create',
- // 删除权限码
- removeAuth: 'market:apps:delete',
- // 修改权限码
- editAuth: 'market:apps:update',
- // 详情权限码
- viewAuth: 'market:apps:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
-
- {
- prop: 'category.name',
- label: '类型',
- align: 'center',
- minWidth: 120
- },
- {
- prop: 'code',
- label: '应用标识',
- align: 'left',
- minWidth: 120
- },
- {
- prop: 'name',
- label: '应用名称',
- align: 'left',
- minWidth: 120
- },
- {
- prop: 'description',
- label: '应用描述',
- align: 'left',
- minWidth: 200
- },
- {
- prop: 'sort_weight',
- label: '排序',
- width: 70,
- align: 'center'
- },
- {
- prop: 'developer',
- label: '开发者',
- align: 'center',
- minWidth: 100
- },
- {
- prop: 'version',
- label: '活动版本',
- align: 'center',
- width: 90
- },
- {
- label: '是否上架',
- prop: 'status',
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_YES_NO
- }
- },
-
- {
- label: '创建时间',
- prop: 'created_at',
- minWidth: 170,
- align: 'center',
- visible: false,
- formatter: (row: any) => {
- return formatDateTime(row.created_at)
- }
- },
- {
- label: '更新时间',
- prop: 'updated_at',
- minWidth: 170,
- align: 'center',
- visible: false,
- formatter: (row: any) => {
- return formatDateTime(row.updated_at)
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '70%',
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '120px',
- schema: [
- {
- label: '应用标识',
- prop: 'LIKE_code',
- component: 'Input',
- colSpan: 6,
- rules: [],
- },
- {
- label: '应用名称',
- prop: 'LIKE_name',
- component: 'Input',
- colSpan: 6,
- rules: [],
- },
- {
- label: '应用描述',
- prop: 'LIKE_description',
- component: 'Input',
- colSpan: 6,
- rules: [],
- },
- {
- label: '商家名称',
- prop: 'LIKE_developer',
- component: 'Input',
- colSpan: 6,
- rules: [],
- },
- {
- prop: 'EQ_enabled',
- label: '状态',
- component: 'ApiDict',
- componentProps: {
- clearable: true,
- code: DictEnum.SYS_ENABLED_STATUS
- },
- colSpan: 6
- },
- {
- label: '应用类型',
- prop: 'EQ_category_id',
- component: 'ApiSelect',
- componentProps: {
- clearable: true,
- api: '/market/category',
- params: {
- format: 'select'
- },
- colSpan: 6,
- rules: [],
- }
- }
- ]
- },
- // crud表单配置
- formSchema: {
- labelWidth: 120,
- gutter: 20,
- schema: []
- }
- }
-}
diff --git a/src/apps/official/views/market/apps/version-form.vue b/src/apps/official/views/market/apps/version-form.vue
deleted file mode 100644
index 4d22d1a4..00000000
--- a/src/apps/official/views/market/apps/version-form.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-
-
-
-
diff --git a/src/apps/official/views/market/category/index.vue b/src/apps/official/views/market/category/index.vue
deleted file mode 100644
index 6e4e2a9f..00000000
--- a/src/apps/official/views/market/category/index.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
diff --git a/src/apps/official/views/market/category/schemas/index.tsx b/src/apps/official/views/market/category/schemas/index.tsx
deleted file mode 100644
index 05a67acb..00000000
--- a/src/apps/official/views/market/category/schemas/index.tsx
+++ /dev/null
@@ -1,160 +0,0 @@
-import { MarketCategoryService } from '@/apps/official/api/market'
-import { DictEnum } from '@/apps/official/enums/dict-enum'
-import { CrudSchema } from '@/components/crud'
-import { formatDateTime } from '@/utils'
-
-
-// crud配置
-export const crudSchema = (): CrudSchema => {
- return {
- // 接口地址
- api: MarketCategoryService.list,
- dialogTitle: '应用分类',
- crudApi: {
- // 新增接口
- add: MarketCategoryService.create,
- // 修改接口
- edit: MarketCategoryService.update,
- // 删除接口
- remove: MarketCategoryService.remove,
- // 详情接口
- view: MarketCategoryService.get
- },
- // 使用crud
- useCrud: true,
- // 是否有新增
- hasAdd: true,
- // 是否有删除
- hasRemove: true,
- // 是否有修改
- hasEdit: true,
- // 是否有详情
- hasView: false,
- // 新增权限码
- addAuth: 'market:category:create',
- // 删除权限码
- removeAuth: 'market:category:delete',
- // 修改权限码
- editAuth: 'market:category:update',
- // 详情权限码
- viewAuth: 'market:category:read',
- rowKey: 'id',
- // 表格列定义
- columns: [
- {
- type: 'selection'
- },
-
- {
- prop: 'name',
- label: '名称',
- align: 'left',
- minWidth: 120
- },
- {
- label: '状态',
- prop: 'enabled',
- align: 'center',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS
- }
- },
- {
- prop: 'sort',
- label: '排序',
- width: 70,
- align: 'center'
- },
- {
- label: '创建时间',
- prop: 'created_at',
- minWidth: 150,
- align: 'center',
- formatter: (row: any) => {
- return formatDateTime(row.created_at)
- }
- },
- {
- label: '更新时间',
- prop: 'updated_at',
- align: 'center',
- visible: false,
- formatter: (row: any) => {
- return formatDateTime(row.updated_at)
- }
- }
- ],
- // 内置弹窗配置
- dialogProps: {
- width: '50%',
- },
- // 搜索表单配置
- searchFormSchema: {
- labelWidth: '120px',
- schema: [
- {
- label: '名称',
- prop: 'LIKE_name',
- component: 'Input',
- colSpan: 6,
- rules: [],
- },
- {
- prop: 'EQ_enabled',
- label: '状态',
- component: 'ApiDict',
- componentProps: {
- code: DictEnum.SYS_ENABLED_STATUS
- },
- colSpan: 6
- }
- ]
- },
- // crud表单配置
- formSchema: {
- labelWidth: 120,
- gutter: 20,
- schema: [
- {
- label: '名称',
- prop: 'name',
- component: 'Input',
- rules: [
- {
- required: true,
- message: '请输入名称',
- trigger: 'blur'
- }
- ],
- componentProps: () => ({
- clearable: true,
- placeholder: '请输入名称',
- style:{
- width: '50%'
- }
- })
- },
- {
- label: '排序',
- prop: 'sort',
- component: 'InputNumber',
- defaultValue: 0,
- componentProps: {
- min: 0,
- max: 9999,
- controlsPosition: 'right'
- },
- rules: [
- {
- required: true,
- message: '请输入排序',
- trigger: 'blur'
- }
- ]
- }
- ]
-
- }
- }
-}
--
Gitee