From f1a0b17bb07391c58ccd222a4b266cf04ee5f08d Mon Sep 17 00:00:00 2001 From: yvan <8574526@qq.com> Date: Thu, 13 Aug 2026 22:35:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + LICENSE | 21 - docs/ADMIN_BACKEND.md | 52 + docs/ADMIN_BACKEND_MIGRATION.md | 58 - gva | 1 - internal/data/announcement.go | 2 +- internal/data/system.go | 10 +- internal/server/audit_routes.go | 9 - web/.commitlintrc.js | 1 - web/.docker-compose/nginx/conf.d/my.conf | 26 + web/.docker-compose/nginx/conf.d/nginx.conf | 32 + web/.dockerignore | 1 + web/.editorconfig | 16 - web/.env.development | 11 + web/.env.production | 5 + web/.gitignore | 45 +- web/.husky/commit-msg | 1 - web/.husky/pre-commit | 1 - web/.lintstagedrc | 5 - web/.npmrc | 1 - web/.prettierrc | 12 + web/Dockerfile | 24 + web/LICENSE | 21 - web/README.md | 16 + web/babel.config.cjs | 13 + web/biome.json | 49 - web/config/config.ts | 157 - web/config/defaultSettings.ts | 28 - web/config/proxy.ts | 23 - web/config/routes.ts | 47 - web/eslint.config.mjs | 83 + web/index.html | 151 + web/jest.config.ts | 21 - web/jsconfig.json | 10 + web/package.json | 152 +- web/pnpm-lock.yaml | 5340 +++++++++++++++++ web/pnpm-workspace.yaml | 7 + web/public/CNAME | 1 - web/public/favicon.ico | Bin 4286 -> 0 bytes web/public/icons/icon-128x128.png | Bin 1329 -> 0 bytes web/public/icons/icon-192x192.png | Bin 1856 -> 0 bytes web/public/icons/icon-512x512.png | Bin 5082 -> 0 bytes web/public/logo.svg | 5 +- web/public/pro_icon.svg | 5 - web/public/scripts/loading.js | 202 - web/src/App.vue | 46 + web/src/access.ts | 13 - web/src/api/api.js | 206 + web/src/api/attachmentCategory.js | 26 + web/src/api/authority.js | 122 + web/src/api/authorityBtn.js | 25 + web/src/api/casbin.js | 32 + web/src/api/dataAccessLog.js | 19 + web/src/api/department.js | 64 + web/src/api/email.js | 14 + web/src/api/exportTemplate.js | 145 + web/src/api/fileUploadAndDownload.js | 67 + web/src/api/initdb.js | 27 + web/src/api/jwt.js | 14 + web/src/api/logViewer.js | 34 + web/src/api/media.js | 13 + web/src/api/menu.js | 141 + web/src/api/position.js | 64 + web/src/api/securityConfig.js | 29 + web/src/api/sysApiToken.js | 25 + web/src/api/sysDictionary.js | 112 + web/src/api/sysDictionaryDetail.js | 145 + web/src/api/sysLoginLog.js | 33 + web/src/api/sysOperationRecord.js | 48 + web/src/api/sysParams.js | 111 + web/src/api/system.js | 55 + web/src/api/system/sysError.js | 110 + web/src/api/timedTask.js | 33 + web/src/api/user.js | 205 + web/src/api/version.js | 114 + web/src/app.tsx | 143 - web/src/assets/404.png | Bin 0 -> 43988 bytes web/src/assets/cover-redesign.svg | 208 + web/src/assets/icons/api-kra.svg | 1 + web/src/assets/icons/close.svg | 1 + web/src/assets/icons/config-file-kra.svg | 1 + web/src/assets/icons/config-kra.svg | 1 + web/src/assets/icons/connection.svg | 1 + web/src/assets/icons/error-kra.svg | 1 + web/src/assets/icons/grid.svg | 1 + web/src/assets/icons/idea.svg | 1 + web/src/assets/icons/lock.svg | 1 + web/src/assets/icons/monitor-kra.svg | 1 + web/src/assets/icons/monitor.svg | 1 + web/src/assets/icons/perm-kra.svg | 1 + web/src/assets/icons/role-kra.svg | 1 + web/src/assets/icons/security-kra.svg | 1 + web/src/assets/icons/server.svg | 1 + web/src/assets/icons/share.svg | 1 + web/src/assets/icons/shop.svg | 1 + web/src/assets/icons/version-kra.svg | 1 + web/src/assets/icons/warn.svg | 1 + web/src/assets/logo.svg | 4 + web/src/assets/noBody.png | Bin 0 -> 4097 bytes web/src/assets/notFound.png | Bin 0 -> 19669 bytes web/src/components/Footer/index.tsx | 36 - web/src/components/HeaderDropdown/index.tsx | 41 - .../RightContent/AvatarDropdown.tsx | 142 - web/src/components/RightContent/index.tsx | 32 - web/src/components/application/index.vue | 39 + web/src/components/arrayCtrl/arrayCtrl.vue | 67 + web/src/components/bottomInfo/bottomInfo.vue | 34 + web/src/components/charts/index.vue | 47 + web/src/components/commandMenu/index.vue | 195 + web/src/components/customPic/index.vue | 90 + web/src/components/entryBrand/index.vue | 30 + web/src/components/errorPreview/index.vue | 126 + .../components/exportExcel/exportExcel.vue | 84 + .../components/exportExcel/exportTemplate.vue | 40 + .../components/exportExcel/importExcel.vue | 45 + web/src/components/iconButton/index.vue | 95 + web/src/components/index.ts | 12 - web/src/components/logo/index.vue | 95 + web/src/components/office/docx.vue | 31 + web/src/components/office/excel.vue | 36 + web/src/components/office/index.vue | 49 + web/src/components/office/pdf.vue | 39 + web/src/components/richtext/rich-edit.vue | 164 + web/src/components/richtext/rich-view.vue | 131 + web/src/components/selectFile/selectFile.vue | 86 + .../selectImage/selectComponent.vue | 86 + .../components/selectImage/selectImage.vue | 529 ++ web/src/components/svgIcon/svgIcon.vue | 44 + web/src/components/upload/QR-code.vue | 65 + web/src/components/upload/common.vue | 98 + web/src/components/upload/cropper.vue | 244 + web/src/components/upload/image.vue | 109 + web/src/components/warningBar/warningBar.vue | 33 + web/src/composables/useChunkUpload.js | 134 + .../core/componentLibrary/button/Button.vue | 37 + web/src/core/componentLibrary/button/index.js | 63 + .../componentLibrary/checkbox/Checkbox.vue | 37 + .../core/componentLibrary/checkbox/index.js | 1 + .../color-picker/ColorPicker.vue | 285 + .../componentLibrary/color-picker/index.js | 4 + .../dropdown-menu/DropdownMenu.vue | 99 + .../dropdown-menu/DropdownMenuContent.vue | 51 + .../dropdown-menu/DropdownMenuItem.vue | 29 + .../dropdown-menu/DropdownMenuLabel.vue | 19 + .../dropdown-menu/DropdownMenuSeparator.vue | 16 + .../componentLibrary/dropdown-menu/index.js | 13 + web/src/core/componentLibrary/index.js | 14 + web/src/core/componentLibrary/input/Input.vue | 124 + web/src/core/componentLibrary/input/index.js | 9 + .../componentLibrary/menu/HorizontalMenu.vue | 213 + .../menu/HorizontalMoreNode.vue | 52 + web/src/core/componentLibrary/menu/Menu.vue | 84 + .../core/componentLibrary/menu/MenuFlyout.vue | 81 + .../core/componentLibrary/menu/MenuItem.vue | 133 + .../componentLibrary/menu/NavMenuPanel.vue | 54 + web/src/core/componentLibrary/menu/index.js | 4 + web/src/core/componentLibrary/menu/shared.js | 55 + .../core/componentLibrary/menu/variants.js | 58 + .../number-field/NumberField.vue | 64 + .../componentLibrary/number-field/index.js | 1 + .../componentLibrary/page-tab/ButtonTab.vue | 33 + .../componentLibrary/page-tab/ChromeTab.vue | 88 + .../componentLibrary/page-tab/ChromeTabBg.vue | 51 + .../componentLibrary/page-tab/PageTab.vue | 88 + .../componentLibrary/page-tab/SliderTab.vue | 30 + .../core/componentLibrary/page-tab/index.js | 4 + .../core/componentLibrary/page-tab/shared.js | 3 + .../core/componentLibrary/select/Select.vue | 70 + .../componentLibrary/select/SelectContent.vue | 30 + .../componentLibrary/select/SelectItem.vue | 32 + .../componentLibrary/select/SelectTrigger.vue | 25 + web/src/core/componentLibrary/select/index.js | 6 + .../core/componentLibrary/slider/Slider.vue | 70 + web/src/core/componentLibrary/slider/index.js | 1 + .../core/componentLibrary/switch/Switch.vue | 35 + web/src/core/componentLibrary/switch/index.js | 1 + web/src/core/componentLibrary/utils.js | 18 + web/src/core/config.js | 22 + web/src/core/error-handel.js | 24 + web/src/core/global.js | 88 + web/src/core/kra.js | 11 + web/src/directive/auth.js | 25 + web/src/directive/clickOutSide.js | 43 + web/src/global.less | 94 - web/src/global.style.ts | 42 - web/src/global.tsx | 93 - web/src/hooks/charts.js | 18 + web/src/hooks/responsive.js | 38 + web/src/hooks/use-windows-resize.js | 23 + web/src/hooks/useLayoutMode.js | 23 + web/src/hooks/useSideWidth.js | 21 + web/src/loading.tsx | 7 - web/src/locales/bn-BD.ts | 25 - web/src/locales/bn-BD/component.ts | 5 - web/src/locales/bn-BD/globalHeader.ts | 17 - web/src/locales/bn-BD/menu.ts | 52 - web/src/locales/bn-BD/pages.ts | 76 - web/src/locales/bn-BD/pwa.ts | 7 - web/src/locales/bn-BD/settingDrawer.ts | 32 - web/src/locales/bn-BD/settings.ts | 60 - web/src/locales/en-US.ts | 25 - web/src/locales/en-US/component.ts | 5 - web/src/locales/en-US/globalHeader.ts | 18 - web/src/locales/en-US/menu.ts | 52 - web/src/locales/en-US/pages.ts | 79 - web/src/locales/en-US/pwa.ts | 7 - web/src/locales/en-US/settingDrawer.ts | 32 - web/src/locales/en-US/settings.ts | 61 - web/src/locales/fa-IR.ts | 25 - web/src/locales/fa-IR/component.ts | 5 - web/src/locales/fa-IR/globalHeader.ts | 18 - web/src/locales/fa-IR/menu.ts | 52 - web/src/locales/fa-IR/pages.ts | 77 - web/src/locales/fa-IR/pwa.ts | 7 - web/src/locales/fa-IR/settingDrawer.ts | 32 - web/src/locales/fa-IR/settings.ts | 64 - web/src/locales/id-ID.ts | 25 - web/src/locales/id-ID/component.ts | 5 - web/src/locales/id-ID/globalHeader.ts | 18 - web/src/locales/id-ID/menu.ts | 53 - web/src/locales/id-ID/pages.ts | 78 - web/src/locales/id-ID/pwa.ts | 7 - web/src/locales/id-ID/settingDrawer.ts | 33 - web/src/locales/id-ID/settings.ts | 64 - web/src/locales/ja-JP.ts | 25 - web/src/locales/ja-JP/component.ts | 5 - web/src/locales/ja-JP/globalHeader.ts | 17 - web/src/locales/ja-JP/menu.ts | 52 - web/src/locales/ja-JP/pages.ts | 80 - web/src/locales/ja-JP/pwa.ts | 7 - web/src/locales/ja-JP/settingDrawer.ts | 33 - web/src/locales/ja-JP/settings.ts | 63 - web/src/locales/pt-BR.ts | 22 - web/src/locales/pt-BR/component.ts | 5 - web/src/locales/pt-BR/globalHeader.ts | 18 - web/src/locales/pt-BR/menu.ts | 54 - web/src/locales/pt-BR/pages.ts | 80 - web/src/locales/pt-BR/pwa.ts | 7 - web/src/locales/pt-BR/settingDrawer.ts | 33 - web/src/locales/pt-BR/settings.ts | 66 - web/src/locales/zh-CN.ts | 24 - web/src/locales/zh-CN/component.ts | 5 - web/src/locales/zh-CN/globalHeader.ts | 17 - web/src/locales/zh-CN/menu.ts | 51 - web/src/locales/zh-CN/pages.ts | 80 - web/src/locales/zh-CN/pwa.ts | 6 - web/src/locales/zh-CN/settingDrawer.ts | 32 - web/src/locales/zh-CN/settings.ts | 59 - web/src/locales/zh-TW.ts | 22 - web/src/locales/zh-TW/component.ts | 5 - web/src/locales/zh-TW/globalHeader.ts | 17 - web/src/locales/zh-TW/menu.ts | 52 - web/src/locales/zh-TW/pages.ts | 73 - web/src/locales/zh-TW/pwa.ts | 6 - web/src/locales/zh-TW/settingDrawer.ts | 32 - web/src/locales/zh-TW/settings.ts | 59 - web/src/main.js | 39 + web/src/manifest.json | 22 - web/src/modules/announcement/api/info.js | 110 + web/src/modules/announcement/form/info.vue | 137 + web/src/modules/announcement/view/info.vue | 510 ++ web/src/modules/email/api/email.js | 29 + web/src/modules/email/view/index.vue | 60 + web/src/pages/404.tsx | 20 - web/src/pages/Admin.tsx | 51 - web/src/pages/Welcome.tsx | 166 - .../pages/admins/components/CreateForm.tsx | 149 - .../pages/admins/components/UpdateForm.tsx | 149 - web/src/pages/admins/index.tsx | 265 - .../login/__snapshots__/login.test.tsx.snap | 1088 ---- web/src/pages/user/login/index.tsx | 159 - web/src/pages/user/login/login.test.tsx | 102 - web/src/pathInfo.json | 66 + web/src/permission.js | 224 + web/src/pinia/index.js | 9 + web/src/pinia/modules/app.js | 64 + web/src/pinia/modules/dictionary.js | 252 + web/src/pinia/modules/params.js | 31 + web/src/pinia/modules/router.js | 211 + web/src/pinia/modules/theme.js | 183 + web/src/pinia/modules/user.js | 150 + web/src/requestErrorConfig.ts | 54 - web/src/router/index.js | 47 + web/src/service-worker.js | 66 - web/src/services/index.ts | 60 - web/src/services/kratos/admin/v1/index.ts | 350 -- web/src/style/element/index.scss | 24 + web/src/style/element_visiable.scss | 143 + web/src/style/iconfont.css | 47 + web/src/style/main.scss | 78 + web/src/style/reset.scss | 378 ++ web/src/style/theme.scss | 56 + web/src/style/transition.scss | 113 + web/src/theme/adapters/chrome.js | 52 + web/src/theme/adapters/element-plus.js | 47 + web/src/theme/adapters/runtime.js | 38 + web/src/theme/adapters/structure.js | 11 + web/src/theme/adapters/uno.js | 3 + web/src/theme/color.js | 165 + web/src/theme/index.js | 65 + web/src/theme/preset/azir-fresh-blue.json | 62 + web/src/theme/preset/dark-night.json | 24 + web/src/theme/preset/kra-classic.json | 60 + web/src/theme/preset/kra-tech-blue.json | 104 + web/src/theme/settings.js | 98 + web/src/theme/shared.js | 207 + web/src/theme/token.js | 100 + web/src/theme/vars.js | 36 + web/src/theme/version.js | 40 + web/src/typings.d.ts | 16 - web/src/utils/asyncRouter.js | 37 + web/src/utils/btnAuth.js | 6 + web/src/utils/bus.js | 4 + web/src/utils/closeThisPage.js | 5 + web/src/utils/date.js | 44 + web/src/utils/dictionary.js | 93 + web/src/utils/doc.js | 3 + web/src/utils/downloadImg.js | 20 + web/src/utils/env.js | 3 + web/src/utils/event.js | 17 + web/src/utils/fmtRouterTitle.js | 13 + web/src/utils/format.js | 117 + web/src/utils/image.js | 126 + web/src/utils/page.js | 9 + web/src/utils/params.js | 14 + web/src/utils/request.js | 263 + web/src/utils/requestError.js | 4 + web/src/utils/stringFun.js | 29 + web/src/utils/uploadResponse.js | 7 + web/src/view/dashboard/components/card.vue | 44 + .../components/charts-content-numbers.vue | 187 + .../components/charts-people-numbers.vue | 132 + web/src/view/dashboard/components/charts.vue | 49 + web/src/view/dashboard/components/index.js | 11 + web/src/view/dashboard/components/notice.vue | 66 + .../view/dashboard/components/quickLinks.vue | 53 + web/src/view/dashboard/index.vue | 81 + web/src/view/error/index.vue | 107 + web/src/view/error/reload.vue | 14 + web/src/view/init/index.vue | 407 ++ web/src/view/init/scroll-gate.js | 7 + web/src/view/layout/aside/CollapseBar.vue | 31 + .../view/layout/aside/MobileMenuDrawer.vue | 76 + web/src/view/layout/aside/combinationMode.vue | 91 + .../view/layout/aside/composables/useMenu.js | 79 + .../aside/composables/useSidebarTheme.js | 34 + web/src/view/layout/aside/headMode.vue | 24 + web/src/view/layout/aside/index.vue | 34 + web/src/view/layout/aside/normalMode.vue | 43 + web/src/view/layout/aside/sidebarMode.vue | 119 + web/src/view/layout/aside/verticalMode.vue | 62 + web/src/view/layout/header/index.vue | 256 + web/src/view/layout/header/tools.vue | 156 + web/src/view/layout/iframe.vue | 73 + web/src/view/layout/index.vue | 135 + web/src/view/layout/screenfull/index.vue | 62 + web/src/view/layout/search/search.vue | 98 + .../setting/components/cardModeSelector.vue | 44 + .../setting/components/layoutModeCard.vue | 170 + .../setting/components/menuThemeSelector.vue | 64 + .../layout/setting/components/presetCard.vue | 90 + .../setting/components/radiusSelector.vue | 32 + .../components/semanticColorPicker.vue | 38 + .../layout/setting/components/settingItem.vue | 26 + .../setting/components/tabModeSelector.vue | 110 + .../setting/components/themeColorPicker.vue | 70 + .../setting/components/themeModeSelector.vue | 70 + web/src/view/layout/setting/index.vue | 222 + .../setting/modules/appearance/index.vue | 142 + .../layout/setting/modules/general/index.vue | 168 + .../layout/setting/modules/layout/index.vue | 154 + .../layout/setting/modules/presets/index.vue | 192 + web/src/view/layout/tabs/index.vue | 387 ++ web/src/view/login/index.vue | 294 + web/src/view/media/chunkUpload.vue | 60 + web/src/view/media/scanUpload.vue | 252 + web/src/view/media/upload.vue | 531 ++ web/src/view/person/person.vue | 567 ++ web/src/view/routerHolder.vue | 22 + web/src/view/superAdmin/api/api.vue | 884 +++ .../view/superAdmin/authority/authority.vue | 750 +++ .../superAdmin/authority/components/apis.vue | 174 + .../superAdmin/authority/components/menus.vue | 309 + .../dataAccessLog/dataAccessLog.vue | 164 + .../view/superAdmin/department/department.vue | 349 ++ .../superAdmin/dictionary/sysDictionary.vue | 824 +++ .../dictionary/sysDictionaryDetail.vue | 433 ++ web/src/view/superAdmin/index.vue | 20 + .../menu/components/components-cascader.vue | 131 + web/src/view/superAdmin/menu/icon.vue | 1179 ++++ web/src/view/superAdmin/menu/menu.vue | 932 +++ .../operation/sysOperationRecord.vue | 292 + web/src/view/superAdmin/orgMemberAssign.vue | 182 + web/src/view/superAdmin/params/sysParams.vue | 604 ++ web/src/view/superAdmin/position/position.vue | 277 + web/src/view/superAdmin/user/user.vue | 753 +++ .../system/security/forceChangePassword.vue | 71 + web/src/view/system/security/index.vue | 156 + web/src/view/system/state.vue | 264 + web/src/view/systemTools/apiToken/index.vue | 295 + web/src/view/systemTools/logViewer/index.vue | 659 ++ web/src/view/systemTools/loginLog/index.vue | 180 + .../view/systemTools/sysError/sysError.vue | 430 ++ web/src/view/systemTools/system/system.vue | 140 + web/src/view/systemTools/timedTask/index.vue | 429 ++ .../systemTools/timedTask/useAlertStream.js | 43 + web/src/view/systemTools/version/version.vue | 998 +++ web/tests/setupTests.jsx | 78 - web/tsconfig.json | 22 - web/types/index.d.ts | 120 - web/uno.config.js | 60 + web/vite.config.js | 102 + 412 files changed, 36769 insertions(+), 6617 deletions(-) delete mode 100644 LICENSE create mode 100644 docs/ADMIN_BACKEND.md delete mode 100644 docs/ADMIN_BACKEND_MIGRATION.md delete mode 160000 gva delete mode 100644 web/.commitlintrc.js create mode 100644 web/.docker-compose/nginx/conf.d/my.conf create mode 100644 web/.docker-compose/nginx/conf.d/nginx.conf create mode 100644 web/.dockerignore delete mode 100644 web/.editorconfig create mode 100644 web/.env.development create mode 100644 web/.env.production delete mode 100644 web/.husky/commit-msg delete mode 100644 web/.husky/pre-commit delete mode 100644 web/.lintstagedrc delete mode 100644 web/.npmrc create mode 100644 web/.prettierrc create mode 100644 web/Dockerfile delete mode 100644 web/LICENSE create mode 100644 web/README.md create mode 100644 web/babel.config.cjs delete mode 100644 web/biome.json delete mode 100644 web/config/config.ts delete mode 100644 web/config/defaultSettings.ts delete mode 100644 web/config/proxy.ts delete mode 100644 web/config/routes.ts create mode 100644 web/eslint.config.mjs create mode 100644 web/index.html delete mode 100644 web/jest.config.ts create mode 100644 web/jsconfig.json create mode 100644 web/pnpm-lock.yaml create mode 100644 web/pnpm-workspace.yaml delete mode 100644 web/public/CNAME delete mode 100644 web/public/favicon.ico delete mode 100644 web/public/icons/icon-128x128.png delete mode 100644 web/public/icons/icon-192x192.png delete mode 100644 web/public/icons/icon-512x512.png delete mode 100644 web/public/pro_icon.svg delete mode 100644 web/public/scripts/loading.js create mode 100644 web/src/App.vue delete mode 100644 web/src/access.ts create mode 100644 web/src/api/api.js create mode 100644 web/src/api/attachmentCategory.js create mode 100644 web/src/api/authority.js create mode 100644 web/src/api/authorityBtn.js create mode 100644 web/src/api/casbin.js create mode 100644 web/src/api/dataAccessLog.js create mode 100644 web/src/api/department.js create mode 100644 web/src/api/email.js create mode 100644 web/src/api/exportTemplate.js create mode 100644 web/src/api/fileUploadAndDownload.js create mode 100644 web/src/api/initdb.js create mode 100644 web/src/api/jwt.js create mode 100644 web/src/api/logViewer.js create mode 100644 web/src/api/media.js create mode 100644 web/src/api/menu.js create mode 100644 web/src/api/position.js create mode 100644 web/src/api/securityConfig.js create mode 100644 web/src/api/sysApiToken.js create mode 100644 web/src/api/sysDictionary.js create mode 100644 web/src/api/sysDictionaryDetail.js create mode 100644 web/src/api/sysLoginLog.js create mode 100644 web/src/api/sysOperationRecord.js create mode 100644 web/src/api/sysParams.js create mode 100644 web/src/api/system.js create mode 100644 web/src/api/system/sysError.js create mode 100644 web/src/api/timedTask.js create mode 100644 web/src/api/user.js create mode 100644 web/src/api/version.js delete mode 100644 web/src/app.tsx create mode 100644 web/src/assets/404.png create mode 100644 web/src/assets/cover-redesign.svg create mode 100644 web/src/assets/icons/api-kra.svg create mode 100644 web/src/assets/icons/close.svg create mode 100644 web/src/assets/icons/config-file-kra.svg create mode 100644 web/src/assets/icons/config-kra.svg create mode 100644 web/src/assets/icons/connection.svg create mode 100644 web/src/assets/icons/error-kra.svg create mode 100644 web/src/assets/icons/grid.svg create mode 100644 web/src/assets/icons/idea.svg create mode 100644 web/src/assets/icons/lock.svg create mode 100644 web/src/assets/icons/monitor-kra.svg create mode 100644 web/src/assets/icons/monitor.svg create mode 100644 web/src/assets/icons/perm-kra.svg create mode 100644 web/src/assets/icons/role-kra.svg create mode 100644 web/src/assets/icons/security-kra.svg create mode 100644 web/src/assets/icons/server.svg create mode 100644 web/src/assets/icons/share.svg create mode 100644 web/src/assets/icons/shop.svg create mode 100644 web/src/assets/icons/version-kra.svg create mode 100644 web/src/assets/icons/warn.svg create mode 100644 web/src/assets/logo.svg create mode 100644 web/src/assets/noBody.png create mode 100644 web/src/assets/notFound.png delete mode 100644 web/src/components/Footer/index.tsx delete mode 100644 web/src/components/HeaderDropdown/index.tsx delete mode 100644 web/src/components/RightContent/AvatarDropdown.tsx delete mode 100644 web/src/components/RightContent/index.tsx create mode 100644 web/src/components/application/index.vue create mode 100644 web/src/components/arrayCtrl/arrayCtrl.vue create mode 100644 web/src/components/bottomInfo/bottomInfo.vue create mode 100644 web/src/components/charts/index.vue create mode 100644 web/src/components/commandMenu/index.vue create mode 100644 web/src/components/customPic/index.vue create mode 100644 web/src/components/entryBrand/index.vue create mode 100644 web/src/components/errorPreview/index.vue create mode 100644 web/src/components/exportExcel/exportExcel.vue create mode 100644 web/src/components/exportExcel/exportTemplate.vue create mode 100644 web/src/components/exportExcel/importExcel.vue create mode 100644 web/src/components/iconButton/index.vue delete mode 100644 web/src/components/index.ts create mode 100644 web/src/components/logo/index.vue create mode 100644 web/src/components/office/docx.vue create mode 100644 web/src/components/office/excel.vue create mode 100644 web/src/components/office/index.vue create mode 100644 web/src/components/office/pdf.vue create mode 100644 web/src/components/richtext/rich-edit.vue create mode 100644 web/src/components/richtext/rich-view.vue create mode 100644 web/src/components/selectFile/selectFile.vue create mode 100644 web/src/components/selectImage/selectComponent.vue create mode 100644 web/src/components/selectImage/selectImage.vue create mode 100644 web/src/components/svgIcon/svgIcon.vue create mode 100644 web/src/components/upload/QR-code.vue create mode 100644 web/src/components/upload/common.vue create mode 100644 web/src/components/upload/cropper.vue create mode 100644 web/src/components/upload/image.vue create mode 100644 web/src/components/warningBar/warningBar.vue create mode 100644 web/src/composables/useChunkUpload.js create mode 100644 web/src/core/componentLibrary/button/Button.vue create mode 100644 web/src/core/componentLibrary/button/index.js create mode 100644 web/src/core/componentLibrary/checkbox/Checkbox.vue create mode 100644 web/src/core/componentLibrary/checkbox/index.js create mode 100644 web/src/core/componentLibrary/color-picker/ColorPicker.vue create mode 100644 web/src/core/componentLibrary/color-picker/index.js create mode 100644 web/src/core/componentLibrary/dropdown-menu/DropdownMenu.vue create mode 100644 web/src/core/componentLibrary/dropdown-menu/DropdownMenuContent.vue create mode 100644 web/src/core/componentLibrary/dropdown-menu/DropdownMenuItem.vue create mode 100644 web/src/core/componentLibrary/dropdown-menu/DropdownMenuLabel.vue create mode 100644 web/src/core/componentLibrary/dropdown-menu/DropdownMenuSeparator.vue create mode 100644 web/src/core/componentLibrary/dropdown-menu/index.js create mode 100644 web/src/core/componentLibrary/index.js create mode 100644 web/src/core/componentLibrary/input/Input.vue create mode 100644 web/src/core/componentLibrary/input/index.js create mode 100644 web/src/core/componentLibrary/menu/HorizontalMenu.vue create mode 100644 web/src/core/componentLibrary/menu/HorizontalMoreNode.vue create mode 100644 web/src/core/componentLibrary/menu/Menu.vue create mode 100644 web/src/core/componentLibrary/menu/MenuFlyout.vue create mode 100644 web/src/core/componentLibrary/menu/MenuItem.vue create mode 100644 web/src/core/componentLibrary/menu/NavMenuPanel.vue create mode 100644 web/src/core/componentLibrary/menu/index.js create mode 100644 web/src/core/componentLibrary/menu/shared.js create mode 100644 web/src/core/componentLibrary/menu/variants.js create mode 100644 web/src/core/componentLibrary/number-field/NumberField.vue create mode 100644 web/src/core/componentLibrary/number-field/index.js create mode 100644 web/src/core/componentLibrary/page-tab/ButtonTab.vue create mode 100644 web/src/core/componentLibrary/page-tab/ChromeTab.vue create mode 100644 web/src/core/componentLibrary/page-tab/ChromeTabBg.vue create mode 100644 web/src/core/componentLibrary/page-tab/PageTab.vue create mode 100644 web/src/core/componentLibrary/page-tab/SliderTab.vue create mode 100644 web/src/core/componentLibrary/page-tab/index.js create mode 100644 web/src/core/componentLibrary/page-tab/shared.js create mode 100644 web/src/core/componentLibrary/select/Select.vue create mode 100644 web/src/core/componentLibrary/select/SelectContent.vue create mode 100644 web/src/core/componentLibrary/select/SelectItem.vue create mode 100644 web/src/core/componentLibrary/select/SelectTrigger.vue create mode 100644 web/src/core/componentLibrary/select/index.js create mode 100644 web/src/core/componentLibrary/slider/Slider.vue create mode 100644 web/src/core/componentLibrary/slider/index.js create mode 100644 web/src/core/componentLibrary/switch/Switch.vue create mode 100644 web/src/core/componentLibrary/switch/index.js create mode 100644 web/src/core/componentLibrary/utils.js create mode 100644 web/src/core/config.js create mode 100644 web/src/core/error-handel.js create mode 100644 web/src/core/global.js create mode 100644 web/src/core/kra.js create mode 100644 web/src/directive/auth.js create mode 100644 web/src/directive/clickOutSide.js delete mode 100644 web/src/global.less delete mode 100644 web/src/global.style.ts delete mode 100644 web/src/global.tsx create mode 100644 web/src/hooks/charts.js create mode 100644 web/src/hooks/responsive.js create mode 100644 web/src/hooks/use-windows-resize.js create mode 100644 web/src/hooks/useLayoutMode.js create mode 100644 web/src/hooks/useSideWidth.js delete mode 100644 web/src/loading.tsx delete mode 100644 web/src/locales/bn-BD.ts delete mode 100644 web/src/locales/bn-BD/component.ts delete mode 100644 web/src/locales/bn-BD/globalHeader.ts delete mode 100644 web/src/locales/bn-BD/menu.ts delete mode 100644 web/src/locales/bn-BD/pages.ts delete mode 100644 web/src/locales/bn-BD/pwa.ts delete mode 100644 web/src/locales/bn-BD/settingDrawer.ts delete mode 100644 web/src/locales/bn-BD/settings.ts delete mode 100644 web/src/locales/en-US.ts delete mode 100644 web/src/locales/en-US/component.ts delete mode 100644 web/src/locales/en-US/globalHeader.ts delete mode 100644 web/src/locales/en-US/menu.ts delete mode 100644 web/src/locales/en-US/pages.ts delete mode 100644 web/src/locales/en-US/pwa.ts delete mode 100644 web/src/locales/en-US/settingDrawer.ts delete mode 100644 web/src/locales/en-US/settings.ts delete mode 100644 web/src/locales/fa-IR.ts delete mode 100644 web/src/locales/fa-IR/component.ts delete mode 100644 web/src/locales/fa-IR/globalHeader.ts delete mode 100644 web/src/locales/fa-IR/menu.ts delete mode 100644 web/src/locales/fa-IR/pages.ts delete mode 100644 web/src/locales/fa-IR/pwa.ts delete mode 100644 web/src/locales/fa-IR/settingDrawer.ts delete mode 100644 web/src/locales/fa-IR/settings.ts delete mode 100644 web/src/locales/id-ID.ts delete mode 100644 web/src/locales/id-ID/component.ts delete mode 100644 web/src/locales/id-ID/globalHeader.ts delete mode 100644 web/src/locales/id-ID/menu.ts delete mode 100644 web/src/locales/id-ID/pages.ts delete mode 100644 web/src/locales/id-ID/pwa.ts delete mode 100644 web/src/locales/id-ID/settingDrawer.ts delete mode 100644 web/src/locales/id-ID/settings.ts delete mode 100644 web/src/locales/ja-JP.ts delete mode 100644 web/src/locales/ja-JP/component.ts delete mode 100644 web/src/locales/ja-JP/globalHeader.ts delete mode 100644 web/src/locales/ja-JP/menu.ts delete mode 100644 web/src/locales/ja-JP/pages.ts delete mode 100644 web/src/locales/ja-JP/pwa.ts delete mode 100644 web/src/locales/ja-JP/settingDrawer.ts delete mode 100644 web/src/locales/ja-JP/settings.ts delete mode 100644 web/src/locales/pt-BR.ts delete mode 100644 web/src/locales/pt-BR/component.ts delete mode 100644 web/src/locales/pt-BR/globalHeader.ts delete mode 100644 web/src/locales/pt-BR/menu.ts delete mode 100644 web/src/locales/pt-BR/pages.ts delete mode 100644 web/src/locales/pt-BR/pwa.ts delete mode 100644 web/src/locales/pt-BR/settingDrawer.ts delete mode 100644 web/src/locales/pt-BR/settings.ts delete mode 100644 web/src/locales/zh-CN.ts delete mode 100644 web/src/locales/zh-CN/component.ts delete mode 100644 web/src/locales/zh-CN/globalHeader.ts delete mode 100644 web/src/locales/zh-CN/menu.ts delete mode 100644 web/src/locales/zh-CN/pages.ts delete mode 100644 web/src/locales/zh-CN/pwa.ts delete mode 100644 web/src/locales/zh-CN/settingDrawer.ts delete mode 100644 web/src/locales/zh-CN/settings.ts delete mode 100644 web/src/locales/zh-TW.ts delete mode 100644 web/src/locales/zh-TW/component.ts delete mode 100644 web/src/locales/zh-TW/globalHeader.ts delete mode 100644 web/src/locales/zh-TW/menu.ts delete mode 100644 web/src/locales/zh-TW/pages.ts delete mode 100644 web/src/locales/zh-TW/pwa.ts delete mode 100644 web/src/locales/zh-TW/settingDrawer.ts delete mode 100644 web/src/locales/zh-TW/settings.ts create mode 100644 web/src/main.js delete mode 100644 web/src/manifest.json create mode 100644 web/src/modules/announcement/api/info.js create mode 100644 web/src/modules/announcement/form/info.vue create mode 100644 web/src/modules/announcement/view/info.vue create mode 100644 web/src/modules/email/api/email.js create mode 100644 web/src/modules/email/view/index.vue delete mode 100644 web/src/pages/404.tsx delete mode 100644 web/src/pages/Admin.tsx delete mode 100644 web/src/pages/Welcome.tsx delete mode 100644 web/src/pages/admins/components/CreateForm.tsx delete mode 100644 web/src/pages/admins/components/UpdateForm.tsx delete mode 100644 web/src/pages/admins/index.tsx delete mode 100644 web/src/pages/user/login/__snapshots__/login.test.tsx.snap delete mode 100644 web/src/pages/user/login/index.tsx delete mode 100644 web/src/pages/user/login/login.test.tsx create mode 100644 web/src/pathInfo.json create mode 100644 web/src/permission.js create mode 100644 web/src/pinia/index.js create mode 100644 web/src/pinia/modules/app.js create mode 100644 web/src/pinia/modules/dictionary.js create mode 100644 web/src/pinia/modules/params.js create mode 100644 web/src/pinia/modules/router.js create mode 100644 web/src/pinia/modules/theme.js create mode 100644 web/src/pinia/modules/user.js delete mode 100644 web/src/requestErrorConfig.ts create mode 100644 web/src/router/index.js delete mode 100644 web/src/service-worker.js delete mode 100644 web/src/services/index.ts delete mode 100644 web/src/services/kratos/admin/v1/index.ts create mode 100644 web/src/style/element/index.scss create mode 100644 web/src/style/element_visiable.scss create mode 100644 web/src/style/iconfont.css create mode 100644 web/src/style/main.scss create mode 100644 web/src/style/reset.scss create mode 100644 web/src/style/theme.scss create mode 100644 web/src/style/transition.scss create mode 100644 web/src/theme/adapters/chrome.js create mode 100644 web/src/theme/adapters/element-plus.js create mode 100644 web/src/theme/adapters/runtime.js create mode 100644 web/src/theme/adapters/structure.js create mode 100644 web/src/theme/adapters/uno.js create mode 100644 web/src/theme/color.js create mode 100644 web/src/theme/index.js create mode 100644 web/src/theme/preset/azir-fresh-blue.json create mode 100644 web/src/theme/preset/dark-night.json create mode 100644 web/src/theme/preset/kra-classic.json create mode 100644 web/src/theme/preset/kra-tech-blue.json create mode 100644 web/src/theme/settings.js create mode 100644 web/src/theme/shared.js create mode 100644 web/src/theme/token.js create mode 100644 web/src/theme/vars.js create mode 100644 web/src/theme/version.js delete mode 100644 web/src/typings.d.ts create mode 100644 web/src/utils/asyncRouter.js create mode 100644 web/src/utils/btnAuth.js create mode 100644 web/src/utils/bus.js create mode 100644 web/src/utils/closeThisPage.js create mode 100644 web/src/utils/date.js create mode 100644 web/src/utils/dictionary.js create mode 100644 web/src/utils/doc.js create mode 100644 web/src/utils/downloadImg.js create mode 100644 web/src/utils/env.js create mode 100644 web/src/utils/event.js create mode 100644 web/src/utils/fmtRouterTitle.js create mode 100644 web/src/utils/format.js create mode 100644 web/src/utils/image.js create mode 100644 web/src/utils/page.js create mode 100644 web/src/utils/params.js create mode 100644 web/src/utils/request.js create mode 100644 web/src/utils/requestError.js create mode 100644 web/src/utils/stringFun.js create mode 100644 web/src/utils/uploadResponse.js create mode 100644 web/src/view/dashboard/components/card.vue create mode 100644 web/src/view/dashboard/components/charts-content-numbers.vue create mode 100644 web/src/view/dashboard/components/charts-people-numbers.vue create mode 100644 web/src/view/dashboard/components/charts.vue create mode 100644 web/src/view/dashboard/components/index.js create mode 100644 web/src/view/dashboard/components/notice.vue create mode 100644 web/src/view/dashboard/components/quickLinks.vue create mode 100644 web/src/view/dashboard/index.vue create mode 100644 web/src/view/error/index.vue create mode 100644 web/src/view/error/reload.vue create mode 100644 web/src/view/init/index.vue create mode 100644 web/src/view/init/scroll-gate.js create mode 100644 web/src/view/layout/aside/CollapseBar.vue create mode 100644 web/src/view/layout/aside/MobileMenuDrawer.vue create mode 100644 web/src/view/layout/aside/combinationMode.vue create mode 100644 web/src/view/layout/aside/composables/useMenu.js create mode 100644 web/src/view/layout/aside/composables/useSidebarTheme.js create mode 100644 web/src/view/layout/aside/headMode.vue create mode 100644 web/src/view/layout/aside/index.vue create mode 100644 web/src/view/layout/aside/normalMode.vue create mode 100644 web/src/view/layout/aside/sidebarMode.vue create mode 100644 web/src/view/layout/aside/verticalMode.vue create mode 100644 web/src/view/layout/header/index.vue create mode 100644 web/src/view/layout/header/tools.vue create mode 100644 web/src/view/layout/iframe.vue create mode 100644 web/src/view/layout/index.vue create mode 100644 web/src/view/layout/screenfull/index.vue create mode 100644 web/src/view/layout/search/search.vue create mode 100644 web/src/view/layout/setting/components/cardModeSelector.vue create mode 100644 web/src/view/layout/setting/components/layoutModeCard.vue create mode 100644 web/src/view/layout/setting/components/menuThemeSelector.vue create mode 100644 web/src/view/layout/setting/components/presetCard.vue create mode 100644 web/src/view/layout/setting/components/radiusSelector.vue create mode 100644 web/src/view/layout/setting/components/semanticColorPicker.vue create mode 100644 web/src/view/layout/setting/components/settingItem.vue create mode 100644 web/src/view/layout/setting/components/tabModeSelector.vue create mode 100644 web/src/view/layout/setting/components/themeColorPicker.vue create mode 100644 web/src/view/layout/setting/components/themeModeSelector.vue create mode 100644 web/src/view/layout/setting/index.vue create mode 100644 web/src/view/layout/setting/modules/appearance/index.vue create mode 100644 web/src/view/layout/setting/modules/general/index.vue create mode 100644 web/src/view/layout/setting/modules/layout/index.vue create mode 100644 web/src/view/layout/setting/modules/presets/index.vue create mode 100644 web/src/view/layout/tabs/index.vue create mode 100644 web/src/view/login/index.vue create mode 100644 web/src/view/media/chunkUpload.vue create mode 100644 web/src/view/media/scanUpload.vue create mode 100644 web/src/view/media/upload.vue create mode 100644 web/src/view/person/person.vue create mode 100644 web/src/view/routerHolder.vue create mode 100644 web/src/view/superAdmin/api/api.vue create mode 100644 web/src/view/superAdmin/authority/authority.vue create mode 100644 web/src/view/superAdmin/authority/components/apis.vue create mode 100644 web/src/view/superAdmin/authority/components/menus.vue create mode 100644 web/src/view/superAdmin/dataAccessLog/dataAccessLog.vue create mode 100644 web/src/view/superAdmin/department/department.vue create mode 100644 web/src/view/superAdmin/dictionary/sysDictionary.vue create mode 100644 web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue create mode 100644 web/src/view/superAdmin/index.vue create mode 100644 web/src/view/superAdmin/menu/components/components-cascader.vue create mode 100644 web/src/view/superAdmin/menu/icon.vue create mode 100644 web/src/view/superAdmin/menu/menu.vue create mode 100644 web/src/view/superAdmin/operation/sysOperationRecord.vue create mode 100644 web/src/view/superAdmin/orgMemberAssign.vue create mode 100644 web/src/view/superAdmin/params/sysParams.vue create mode 100644 web/src/view/superAdmin/position/position.vue create mode 100644 web/src/view/superAdmin/user/user.vue create mode 100644 web/src/view/system/security/forceChangePassword.vue create mode 100644 web/src/view/system/security/index.vue create mode 100644 web/src/view/system/state.vue create mode 100644 web/src/view/systemTools/apiToken/index.vue create mode 100644 web/src/view/systemTools/logViewer/index.vue create mode 100644 web/src/view/systemTools/loginLog/index.vue create mode 100644 web/src/view/systemTools/sysError/sysError.vue create mode 100644 web/src/view/systemTools/system/system.vue create mode 100644 web/src/view/systemTools/timedTask/index.vue create mode 100644 web/src/view/systemTools/timedTask/useAlertStream.js create mode 100644 web/src/view/systemTools/version/version.vue delete mode 100644 web/tests/setupTests.jsx delete mode 100644 web/tsconfig.json delete mode 100644 web/types/index.d.ts create mode 100644 web/uno.config.js create mode 100644 web/vite.config.js diff --git a/.gitignore b/.gitignore index a5e2699..74f750b 100644 --- a/.gitignore +++ b/.gitignore @@ -38,3 +38,6 @@ bin/ .cache/ .idea/ *.swp + +web/dist/ +web/node_modules/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 684318c..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2020 go-kratos - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/docs/ADMIN_BACKEND.md b/docs/ADMIN_BACKEND.md new file mode 100644 index 0000000..0b7531f --- /dev/null +++ b/docs/ADMIN_BACKEND.md @@ -0,0 +1,52 @@ +# Kra 管理后台 + +## 范围 + +Kra 管理后台由 Kratos 应用承载生命周期,Gin 提供兼容管理端的 HTTP 路由。后端按 `service -> biz -> data` 分层,前端位于 `web/`。 + +保留的业务模块: + +- 初始化、认证、用户和个人中心 +- 角色、菜单、API、Casbin 和按钮权限 +- 部门、岗位和数据范围 +- 字典、字典项和系统参数 +- 安全策略、系统配置和 API Token +- Excel 导入导出与版本管理 +- 操作日志、登录日志、数据访问日志、错误日志和文件日志 +- 定时任务、SSE、媒体上传和附件分类 +- 公告管理与邮件发送 + +不包含代码生成、智能辅助、模块安装发布、客户示例和测试页面。 + +## 目录 + +| 目录 | 职责 | +|---|---| +| `internal/server` | Gin 路由、中间件和 Kratos transport 生命周期 | +| `internal/service` | HTTP DTO 与领域对象转换、用例编排 | +| `internal/biz` | 领域对象、业务规则和仓储接口 | +| `internal/data` | GORM、MySQL、Redis 和本地文件存储实现 | +| `web` | Vue 3 管理端 | + +## 兼容约定 + +- HTTP 响应为 `{code, data, msg}`,成功码为 `0`。 +- JWT 接受 `x-token` Header 和同名 Cookie。 +- 初始化创建后台数据表、管理员、菜单,并从 Gin 路由同步 API 权限数据。 +- 超级管理员角色 `888` 保留全权限旁路,其他角色由 Casbin 控制。 +- SMTP 配置位于 `admin.email`;未配置时错误邮件告警保持关闭。 +- 媒体文件默认使用本地 `uploads/file` 存储。 + +## 验证 + +```bash +go generate ./cmd/kratos-admin +go test ./... +go vet ./... +go build ./... + +cd web +pnpm install +pnpm run lint +pnpm run build +``` diff --git a/docs/ADMIN_BACKEND_MIGRATION.md b/docs/ADMIN_BACKEND_MIGRATION.md deleted file mode 100644 index 1eb3a3c..0000000 --- a/docs/ADMIN_BACKEND_MIGRATION.md +++ /dev/null @@ -1,58 +0,0 @@ -# GVA 管理后端迁移清单 - -## 基线与范围 - -- 参考基线:工作区 `gva/server`,Git `02f37833`。 -- 目标:保留 GVA Vue 管理端使用的 HTTP 路径、方法、请求字段、统一响应结构和核心业务语义,同时按 Kratos 的 `service -> biz -> data` 分层落地。 -- 明确排除:代码生成、代码生成历史、插件打包/安装、AI/LLM、MCP、Skills,以及测试文件。 -- 公告与邮件位于 `gva/server/plugin`;两者均已按 Kratos 分层迁移,不保留 GVA 的插件式全局变量结构。 -- 推荐范围包含 177 个 GVA HTTP 路由,目标端全部覆盖;另增加 `GET /health`,目标实际注册路由总数为 178。 - -## 模块契约矩阵 - -| 模块 | 路由数 | 迁移内容 | -|---|---:|---| -| 初始化、登录、用户、个人中心 | 17 | 初始化、验证码、登录、JWT、用户 CRUD、多角色、个人资料、密码、菜单、注销 | -| 角色 | 9 | 角色树、创建、复制、更新、删除、用户关联、数据范围 | -| 菜单 | 10 | 菜单树、CRUD、角色菜单、菜单角色、菜单按钮 | -| API 与 Casbin | 19 | API CRUD/同步/忽略、角色 API、Casbin 策略、按钮权限 | -| 组织 | 16 | 部门树、岗位、用户关联、自定义数据范围 | -| 字典与参数 | 24 | 字典/字典项 CRUD、树、路径、导入导出、系统参数 | -| 安全、系统配置、API Token | 9 | 安全策略热更新、限流、锁定、密码策略、配置、服务器信息、Token 签发/作废 | -| Excel 导入导出 | 12 | 模板 CRUD、SQL 预览、一次性下载令牌、Excel 导入导出 | -| 版本管理 | 7 | 菜单/API/字典版本打包、记录、下载和导入 | -| 审计与日志 | 20 | 操作、登录、数据访问、错误日志以及安全的文件日志查看 | -| 定时任务与 SSE | 9 | Cron CRUD/启停/触发、HTTP/本地执行器、执行日志、失败告警 SSE | -| 媒体 | 15 | 文件库、附件分类、本地存储枚举、普通上传、秒传与分片续传 | -| 公告 | 8 | 公告 CRUD、批量删除、分页、发布者数据源和公开接口 | -| 邮件 | 2 | SMTP 测试、主动发送,以及失败请求邮件告警中间件 | - -## 分层映射 - -| Kratos 层 | 职责 | -|---|---| -| `internal/server` | Gin 路由、鉴权/审计中间件、HTTP 请求绑定与响应写出、Kratos transport 生命周期 | -| `internal/service` | HTTP DTO 与领域数据的适配、用例编排 | -| `internal/biz` | 用户、权限、设置、审计、任务、媒体等领域对象、仓储接口与业务规则 | -| `internal/data` | GORM PO、MySQL 仓储、Redis/内存缓存、本地文件存储 | -| `cmd/kratos-admin` | Wire 依赖注入与 Kratos 应用组装 | - -## 兼容性说明 - -- HTTP 响应保持 `{code, data, msg}`,成功码为 `0`。 -- JWT 继续接受 `x-token` Header 和同名 Cookie;角色切换返回 `new-token`、`new-expires-at`。 -- 初始化会自动迁移表、写入管理员与菜单,并从 Gin 实际路由同步 API 表。 -- 超级管理员角色 `888` 保留全权限旁路;其他角色由 Casbin 策略控制。 -- 代码中的 `*-gva` 字符串仅是原 Vue 图标库的图标标识,为页面显示兼容而保留;Go 文件、类型、变量和方法均使用实际职责命名。 -- 当前首先实现 MySQL、Redis(不可用时退化为进程缓存)和本地文件存储;云 OSS 驱动没有混入领域层。 -- SMTP 参数位于 `admin.email`;未配置服务器、发件人或密钥时错误告警保持关闭,邮件接口会返回明确的配置错误。 - -## 验证命令 - -```bash -go generate ./cmd/kratos-admin -go test ./... -go vet ./... -go build ./... -git diff --check -``` diff --git a/gva b/gva deleted file mode 160000 index 02f3783..0000000 --- a/gva +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 02f37833255e0e339c3d69199cb5a468f17de9fc diff --git a/internal/data/announcement.go b/internal/data/announcement.go index 2445e25..25d93cc 100644 --- a/internal/data/announcement.go +++ b/internal/data/announcement.go @@ -22,7 +22,7 @@ type announcementPO struct { Attachments []byte `gorm:"type:json"` } -func (announcementPO) TableName() string { return "gva_announcements_info" } +func (announcementPO) TableName() string { return "kra_announcements_info" } type announcementRepo struct{ data *Data } diff --git a/internal/data/system.go b/internal/data/system.go index 56045b8..0247743 100644 --- a/internal/data/system.go +++ b/internal/data/system.go @@ -419,13 +419,13 @@ func defaultMenus() []menuPO { } return []menuPO{ {Path: "dashboard", Name: "dashboard", Component: "view/dashboard/index.vue", Title: "仪表盘", Icon: "odometer", Sort: 1}, - root("permission", "permission", "权限管理", "perm-gva", 2), root("org", "org", "组织管理", "share", 3), root("systemConfig", "systemConfig", "系统设置", "config-gva", 4), root("monitor", "monitor", "运维监控", "monitor-gva", 5), root("media", "media", "媒体管理", "folder-opened", 6), root("plugin", "plugin", "插件系统", "cherry", 10), + root("permission", "permission", "权限管理", "perm-kra", 2), root("org", "org", "组织管理", "share", 3), root("systemConfig", "systemConfig", "系统设置", "config-kra", 4), root("monitor", "monitor", "运维监控", "monitor-kra", 5), root("media", "media", "媒体管理", "folder-opened", 6), root("extensions", "extensions", "扩展功能", "cherry", 10), {Path: "person", Name: "person", Component: "view/person/person.vue", Title: "个人信息", Icon: "postcard", Hidden: true, Sort: 13}, - child("permission", "authority", "authority", "view/superAdmin/authority/authority.vue", "角色管理", "role-gva", 1), child("permission", "menu", "menu", "view/superAdmin/menu/menu.vue", "菜单管理", "tickets", 2), child("permission", "api", "api", "view/superAdmin/api/api.vue", "api管理", "api-gva", 3), child("permission", "apiToken", "apiToken", "view/systemTools/apiToken/index.vue", "API Token", "key", 4), + child("permission", "authority", "authority", "view/superAdmin/authority/authority.vue", "角色管理", "role-kra", 1), child("permission", "menu", "menu", "view/superAdmin/menu/menu.vue", "菜单管理", "tickets", 2), child("permission", "api", "api", "view/superAdmin/api/api.vue", "api管理", "api-kra", 3), child("permission", "apiToken", "apiToken", "view/systemTools/apiToken/index.vue", "API Token", "key", 4), child("org", "user", "user", "view/superAdmin/user/user.vue", "用户管理", "user", 1), child("org", "department", "department", "view/superAdmin/department/department.vue", "部门管理", "office-building", 2), child("org", "position", "position", "view/superAdmin/position/position.vue", "岗位管理", "postcard", 3), - child("systemConfig", "system", "system", "view/systemTools/system/system.vue", "配置文件", "config-file-gva", 1), child("systemConfig", "dictionary", "dictionary", "view/superAdmin/dictionary/sysDictionary.vue", "字典管理", "notebook", 2), child("systemConfig", "sysParams", "sysParams", "view/superAdmin/params/sysParams.vue", "参数管理", "set-up", 3), child("systemConfig", "security", "security", "view/system/security/index.vue", "安全配置", "security-gva", 4), - child("monitor", "operation", "operation", "view/superAdmin/operation/sysOperationRecord.vue", "操作历史", "document", 1), child("monitor", "loginLog", "loginLog", "view/systemTools/loginLog/index.vue", "登录日志", "clock", 2), child("monitor", "sysError", "sysError", "view/systemTools/sysError/sysError.vue", "错误日志", "error-gva", 3), child("monitor", "sysVersion", "sysVersion", "view/systemTools/version/version.vue", "版本管理", "version-gva", 4), child("monitor", "state", "state", "view/system/state.vue", "服务器状态", "server", 5), child("monitor", "dataAccessLog", "dataAccessLog", "view/superAdmin/dataAccessLog/dataAccessLog.vue", "数据权限审计", "warning", 6), child("monitor", "timedTask", "timedTask", "view/systemTools/timedTask/index.vue", "定时任务", "timer", 7), child("monitor", "logViewer", "logViewer", "view/systemTools/logViewer/index.vue", "文件日志", "document", 8), + child("systemConfig", "system", "system", "view/systemTools/system/system.vue", "配置文件", "config-file-kra", 1), child("systemConfig", "dictionary", "dictionary", "view/superAdmin/dictionary/sysDictionary.vue", "字典管理", "notebook", 2), child("systemConfig", "sysParams", "sysParams", "view/superAdmin/params/sysParams.vue", "参数管理", "set-up", 3), child("systemConfig", "security", "security", "view/system/security/index.vue", "安全配置", "security-kra", 4), + child("monitor", "operation", "operation", "view/superAdmin/operation/sysOperationRecord.vue", "操作历史", "document", 1), child("monitor", "loginLog", "loginLog", "view/systemTools/loginLog/index.vue", "登录日志", "clock", 2), child("monitor", "sysError", "sysError", "view/systemTools/sysError/sysError.vue", "错误日志", "error-kra", 3), child("monitor", "sysVersion", "sysVersion", "view/systemTools/version/version.vue", "版本管理", "version-kra", 4), child("monitor", "state", "state", "view/system/state.vue", "服务器状态", "server", 5), child("monitor", "dataAccessLog", "dataAccessLog", "view/superAdmin/dataAccessLog/dataAccessLog.vue", "数据权限审计", "warning", 6), child("monitor", "timedTask", "timedTask", "view/systemTools/timedTask/index.vue", "定时任务", "timer", 7), child("monitor", "logViewer", "logViewer", "view/systemTools/logViewer/index.vue", "文件日志", "document", 8), child("media", "upload", "upload", "view/media/upload.vue", "媒体库(上传下载)", "upload", 1), child("media", "chunkUpload", "chunkUpload", "view/media/chunkUpload.vue", "大文件上传", "folder-add", 2), - child("plugin", "plugin-email", "plugin-email", "plugin/email/view/index.vue", "邮件插件", "message", 4), child("plugin", "anInfo", "anInfo", "plugin/announcement/view/info.vue", "公告管理[示例]", "bell", 5), + child("extensions", "email", "email", "modules/email/view/index.vue", "邮件发送", "message", 4), child("extensions", "anInfo", "anInfo", "modules/announcement/view/info.vue", "公告管理", "bell", 5), } } diff --git a/internal/server/audit_routes.go b/internal/server/audit_routes.go index 3bd0a8c..0a97967 100644 --- a/internal/server/audit_routes.go +++ b/internal/server/audit_routes.go @@ -216,15 +216,6 @@ func registerAuditRoutes(group, public *gin.RouterGroup, svc *service.AuditServi } writeResult(c, codeSuccess, pageResult{List: items, Total: total, Page: page, PageSize: size}, "获取成功") }) - errorsRoute.GET("/getSysErrorSolution", func(c *gin.Context) { - id, _ := strconv.ParseUint(c.Query("ID"), 10, 64) - item, err := svc.Error(c.Request.Context(), uint(id)) - if err != nil { - fail(c, "查询失败") - return - } - writeResult(c, codeSuccess, gin.H{"solution": item["solution"]}, "获取成功") - }) public.Group("/sysError").POST("/createSysError", func(c *gin.Context) { var req struct { Form string `json:"form"` diff --git a/web/.commitlintrc.js b/web/.commitlintrc.js deleted file mode 100644 index 422b194..0000000 --- a/web/.commitlintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { extends: ['@commitlint/config-conventional'] }; diff --git a/web/.docker-compose/nginx/conf.d/my.conf b/web/.docker-compose/nginx/conf.d/my.conf new file mode 100644 index 0000000..9a1685d --- /dev/null +++ b/web/.docker-compose/nginx/conf.d/my.conf @@ -0,0 +1,26 @@ +server { + listen 8080; + server_name localhost; + + #charset koi8-r; + #access_log logs/host.access.log main; + + location / { + root /usr/share/nginx/html; + add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + rewrite ^/api/(.*)$ /$1 break; #重写 + proxy_pass http://177.7.0.12:8888; # 设置代理服务器的协议和地址 + } + + location /api/swagger/index.html { + proxy_pass http://127.0.0.1:8888/swagger/index.html; + } + } \ No newline at end of file diff --git a/web/.docker-compose/nginx/conf.d/nginx.conf b/web/.docker-compose/nginx/conf.d/nginx.conf new file mode 100644 index 0000000..29f68b8 --- /dev/null +++ b/web/.docker-compose/nginx/conf.d/nginx.conf @@ -0,0 +1,32 @@ +server { + listen 80; + server_name localhost; + + #charset koi8-r; + #access_log logs/host.access.log main; + + location / { + root /usr/share/nginx/html/dist; + add_header Cache-Control 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0'; + try_files $uri $uri/ /index.html; + } + + location /api { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + rewrite ^/api/(.*)$ /$1 break; #重写 + proxy_pass http://127.0.0.1:8888; # 设置代理服务器的协议和地址 + } + location /form-generator { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:8888; + } + location /api/swagger/index.html { + proxy_pass http://127.0.0.1:8888/swagger/index.html; + } + } \ No newline at end of file diff --git a/web/.dockerignore b/web/.dockerignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/web/.dockerignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/web/.editorconfig b/web/.editorconfig deleted file mode 100644 index 7e3649a..0000000 --- a/web/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -# http://editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false - -[Makefile] -indent_style = tab diff --git a/web/.env.development b/web/.env.development new file mode 100644 index 0000000..dcf5a27 --- /dev/null +++ b/web/.env.development @@ -0,0 +1,11 @@ +ENV = 'development' +VITE_CLI_PORT = 8080 +VITE_SERVER_PORT = 8000 +VITE_BASE_API = /api +VITE_FILE_API = /api +VITE_BASE_PATH = http://127.0.0.1 +VITE_POSITION = open +VITE_EDITOR = code +// VITE_EDITOR = webstorm 如果使用webstorm开发且要使用dom定位到代码行功能 请先自定添加 webstorm到环境变量 再将VITE_EDITOR值修改为webstorm +// 如果使用docker-compose开发模式,设置为下面的地址或本机主机IP +//VITE_BASE_PATH = http://177.7.0.12 diff --git a/web/.env.production b/web/.env.production new file mode 100644 index 0000000..87f863c --- /dev/null +++ b/web/.env.production @@ -0,0 +1,5 @@ +ENV = 'production' + +#下方为上线需要用到的程序代理前缀,一般用于nginx代理转发 +VITE_BASE_API = /api +VITE_FILE_API = /api diff --git a/web/.gitignore b/web/.gitignore index 7237b34..a79a8b2 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,41 +1,6 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -**/node_modules -# roadhog-api-doc ignore -/src/utils/request-temp.js -_roadhog-api-doc - -# production -/dist - -# misc -.DS_Store -npm-debug.log* -yarn-error.log - -/coverage -.idea -yarn.lock +/node_modules/ +/dist/ package-lock.json -*bak -.vscode - - -# visual studio code -.history -*.log -functions/* -.temp/** - -# umi -.umi -.umi-production -.umi-test -.turbopack - -# screenshot -screenshot -.firebase - -build +yarn.lock +bun.lockb +config.yaml diff --git a/web/.husky/commit-msg b/web/.husky/commit-msg deleted file mode 100644 index 0a4b97d..0000000 --- a/web/.husky/commit-msg +++ /dev/null @@ -1 +0,0 @@ -npx --no -- commitlint --edit $1 diff --git a/web/.husky/pre-commit b/web/.husky/pre-commit deleted file mode 100644 index c27d889..0000000 --- a/web/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -lint-staged diff --git a/web/.lintstagedrc b/web/.lintstagedrc deleted file mode 100644 index 1c2023c..0000000 --- a/web/.lintstagedrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "**/*.{js,jsx,tsx,ts,md,css,less,json}": [ - "npx @biomejs/biome check --write" - ] -} diff --git a/web/.npmrc b/web/.npmrc deleted file mode 100644 index 521a9f7..0000000 --- a/web/.npmrc +++ /dev/null @@ -1 +0,0 @@ -legacy-peer-deps=true diff --git a/web/.prettierrc b/web/.prettierrc new file mode 100644 index 0000000..bc61a53 --- /dev/null +++ b/web/.prettierrc @@ -0,0 +1,12 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "trailingComma": "none", + "bracketSpacing": true, + "arrowParens": "always", + "vueIndentScriptAndStyle": true, + "endOfLine": "lf" +} diff --git a/web/Dockerfile b/web/Dockerfile new file mode 100644 index 0000000..21a1d59 --- /dev/null +++ b/web/Dockerfile @@ -0,0 +1,24 @@ +# 如果需要用 cicd ,请设置环境变量: +# variables: +# DOCKER_BUILDKIT: 1 + +FROM node:20-slim AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable +COPY . /app +WORKDIR /app + + +FROM base AS prod-deps +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod + +FROM base AS build +COPY --from=prod-deps /app/node_modules /app/node_modules +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install && pnpm run build + + +FROM nginx:alpine +COPY --from=base /app/.docker-compose/nginx/conf.d/my.conf /etc/nginx/conf.d/my.conf +COPY --from=build /app/dist /usr/share/nginx/html +RUN ls -al /usr/share/nginx/html diff --git a/web/LICENSE b/web/LICENSE deleted file mode 100644 index b65958e..0000000 --- a/web/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019-present Alipay.inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..eb575d4 --- /dev/null +++ b/web/README.md @@ -0,0 +1,16 @@ +# Kra 管理后台 + +Kra 的 Vue 3 管理端,与仓库中的 Kratos + Gin 后端配套使用。 + +```bash +npm install +npm run dev +``` + +生产构建: + +```bash +npm run build +``` + +开发环境默认把 `/api` 代理到 `http://127.0.0.1:8000`。 diff --git a/web/babel.config.cjs b/web/babel.config.cjs new file mode 100644 index 0000000..14cfe04 --- /dev/null +++ b/web/babel.config.cjs @@ -0,0 +1,13 @@ +// Babel 配置 +// +// 用 .cjs 而非 .js:本项目 package.json 为 "type": "module",.js 会被当作 ESM, +// 而 @babel/eslint-parser 需要「同步」读取 babel 配置(ESLint 是同步解析的), +// ESM 配置无法同步加载。.cjs 强制 CommonJS,保证 eslint 能正常读取本文件。 +// +// 目前主要供 @babel/eslint-parser 解析 .js / .vue + + + +
+