From 87d288c58e2a2c73f0440ae7478fad28524955d6 Mon Sep 17 00:00:00 2001 From: Chuck1sn Date: Mon, 16 Jun 2025 18:00:15 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C=E6=9B=B4=E6=96=B0=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=AF=BC=E5=85=A5=E8=B7=AF=E5=BE=84=EF=BC=8C=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=A4=9A=E4=B8=AA=E6=A8=A1=E6=80=81=E6=A1=86=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E4=BB=A5=E6=94=AF=E6=8C=81=E7=94=A8=E6=88=B7=E3=80=81?= =?UTF-8?q?=E9=83=A8=E9=97=A8=E3=80=81=E8=A7=92=E8=89=B2=E5=92=8C=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=88=86=E9=A1=B5=E5=92=8C=E6=8E=92=E5=BA=8F=E9=80=BB?= =?UTF-8?q?=E8=BE=91=EF=BC=8C=E6=9B=B4=E6=96=B0=E7=B1=BB=E5=9E=8B=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E4=BB=A5=E6=8F=90=E9=AB=98=E4=BB=A3=E7=A0=81=E5=8F=AF?= =?UTF-8?q?=E8=AF=BB=E6=80=A7=E5=92=8C=E7=BB=B4=E6=8A=A4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/client.ts | 4 +- frontend/src/components/common/Assistant.vue | 19 ++++--- .../modals/{BaseModal.vue => BaseDialog.vue} | 10 ++-- ...{PopupModal.vue => ConfirmationDialog.vue} | 6 +-- ...sertModal.vue => DepartmentFormDialog.vue} | 8 +-- .../{LlmUpdateModal.vue => LlmFormDialog.vue} | 6 +-- ...sertModal.vue => PermissionFormDialog.vue} | 8 +-- ...UpsertModal.vue => PositionFormDialog.vue} | 8 +-- ...RoleUpsertModal.vue => RoleFormDialog.vue} | 8 +-- ...pdateModal.vue => SchedulerFormDialog.vue} | 6 +-- ...UserUpsertModal.vue => UserFormDialog.vue} | 12 ++--- .../src/components/tables/TablePagination.vue | 2 +- frontend/src/components/ui/Alert.vue | 4 +- .../useErrorHandling.ts} | 10 ++-- .../{page.ts => common/usePagination.ts} | 5 ++ .../{sort.ts => common/useSorting.ts} | 32 ++++++++--- .../useStyleSystem.ts} | 5 +- .../department/useDepartmentUpsert.ts | 2 +- .../permission/usePermissionUpsert.ts | 2 +- .../src/composables/user/useUserUpsert.ts | 2 +- frontend/src/main.ts | 4 +- frontend/src/router/modules/ai.ts | 2 +- frontend/src/router/modules/auth.ts | 2 +- frontend/src/router/modules/dashboard.ts | 14 ++--- frontend/src/router/modules/error.ts | 2 +- frontend/src/router/modules/user.ts | 14 ++--- frontend/src/types/AlertTypes.ts | 1 + frontend/src/types/DepartmentTypes.ts | 15 ++++++ frontend/src/types/ErrorTypes.ts | 46 ++++++++++++++++ frontend/src/types/PermissionTypes.ts | 14 +++++ frontend/src/types/PositionTypes.ts | 12 +++++ frontend/src/types/RoleTypes.ts | 20 +++++++ frontend/src/types/UserTypes.ts | 35 ++++++++++++ frontend/src/types/department.d.ts | 5 -- frontend/src/types/error.ts | 53 ------------------- frontend/src/types/permission.d.ts | 5 -- frontend/src/types/position.d.ts | 4 -- frontend/src/types/role.d.ts | 5 -- frontend/src/types/user.d.ts | 9 ---- .../views/{OverView.vue => DashboardPage.vue} | 0 ...tView.vue => DepartmentManagementPage.vue} | 22 ++++---- ...onfigView.vue => LlmConfigurationPage.vue} | 6 +-- .../views/{LoginView.vue => LoginPage.vue} | 0 .../views/{NotFound.vue => NotFoundPage.vue} | 0 ...nView.vue => PermissionManagementPage.vue} | 12 ++--- ...ionView.vue => PositionManagementPage.vue} | 8 +-- .../{RoleView.vue => RoleManagementPage.vue} | 14 ++--- ...w.vue => RolePermissionAssignmentPage.vue} | 6 +-- ...erView.vue => SchedulerManagementPage.vue} | 9 ++-- ...ettingsView.vue => SystemSettingsPage.vue} | 0 ...w.vue => UserDepartmentAssignmentPage.vue} | 4 +- .../{UserView.vue => UserManagementPage.vue} | 17 +++--- ...iew.vue => UserPositionAssignmentPage.vue} | 4 +- ...oleView.vue => UserRoleAssignmentPage.vue} | 6 +-- 54 files changed, 308 insertions(+), 221 deletions(-) rename frontend/src/components/modals/{BaseModal.vue => BaseDialog.vue} (91%) rename frontend/src/components/modals/{PopupModal.vue => ConfirmationDialog.vue} (91%) rename frontend/src/components/modals/{DepartmentUpsertModal.vue => DepartmentFormDialog.vue} (93%) rename frontend/src/components/modals/{LlmUpdateModal.vue => LlmFormDialog.vue} (97%) rename frontend/src/components/modals/{PermissionUpsertModal.vue => PermissionFormDialog.vue} (92%) rename frontend/src/components/modals/{PositionUpsertModal.vue => PositionFormDialog.vue} (91%) rename frontend/src/components/modals/{RoleUpsertModal.vue => RoleFormDialog.vue} (93%) rename frontend/src/components/modals/{SchedulerUpdateModal.vue => SchedulerFormDialog.vue} (92%) rename frontend/src/components/modals/{UserUpsertModal.vue => UserFormDialog.vue} (95%) rename frontend/src/composables/{useErrorHandler.ts => common/useErrorHandling.ts} (86%) rename frontend/src/composables/{page.ts => common/usePagination.ts} (92%) rename frontend/src/composables/{sort.ts => common/useSorting.ts} (63%) rename frontend/src/composables/{useMobileStyles.ts => common/useStyleSystem.ts} (94%) create mode 100644 frontend/src/types/AlertTypes.ts create mode 100644 frontend/src/types/DepartmentTypes.ts create mode 100644 frontend/src/types/ErrorTypes.ts create mode 100644 frontend/src/types/PermissionTypes.ts create mode 100644 frontend/src/types/PositionTypes.ts create mode 100644 frontend/src/types/RoleTypes.ts create mode 100644 frontend/src/types/UserTypes.ts delete mode 100644 frontend/src/types/department.d.ts delete mode 100644 frontend/src/types/error.ts delete mode 100644 frontend/src/types/permission.d.ts delete mode 100644 frontend/src/types/position.d.ts delete mode 100644 frontend/src/types/role.d.ts delete mode 100644 frontend/src/types/user.d.ts rename frontend/src/views/{OverView.vue => DashboardPage.vue} (100%) rename frontend/src/views/{DepartmentView.vue => DepartmentManagementPage.vue} (93%) rename frontend/src/views/{LlmConfigView.vue => LlmConfigurationPage.vue} (97%) rename frontend/src/views/{LoginView.vue => LoginPage.vue} (100%) rename frontend/src/views/{NotFound.vue => NotFoundPage.vue} (100%) rename frontend/src/views/{PermissionView.vue => PermissionManagementPage.vue} (96%) rename frontend/src/views/{PositionView.vue => PositionManagementPage.vue} (96%) rename frontend/src/views/{RoleView.vue => RoleManagementPage.vue} (96%) rename frontend/src/views/{BindPermissionView.vue => RolePermissionAssignmentPage.vue} (98%) rename frontend/src/views/{SchedulerView.vue => SchedulerManagementPage.vue} (97%) rename frontend/src/views/{SettingsView.vue => SystemSettingsPage.vue} (100%) rename frontend/src/views/{BindDepartmentView.vue => UserDepartmentAssignmentPage.vue} (98%) rename frontend/src/views/{UserView.vue => UserManagementPage.vue} (96%) rename frontend/src/views/{BindPositionView.vue => UserPositionAssignmentPage.vue} (98%) rename frontend/src/views/{BindRoleView.vue => UserRoleAssignmentPage.vue} (98%) diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 92ec80b..816aeef 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -1,12 +1,12 @@ import createClient, { type Middleware } from "openapi-fetch"; import useAuthStore from "../composables/store/useAuthStore"; +import type { paths } from "./types/schema"; // generated by openapi-typescript import { ForbiddenError, RequestError, UnAuthError, InternalServerError, -} from "../types/error"; -import type { paths } from "./types/schema"; // generated by openapi-typescript +} from "@/types/ErrorTypes"; const myMiddleware: Middleware = { onRequest({ request, options }) { diff --git a/frontend/src/components/common/Assistant.vue b/frontend/src/components/common/Assistant.vue index 7977fa5..45a2e72 100644 --- a/frontend/src/components/common/Assistant.vue +++ b/frontend/src/components/common/Assistant.vue @@ -71,19 +71,19 @@ - - + - - + import { LoadingIcon } from "@/components/icons"; -import DepartmentUpsertModal from "@/components/modals/DepartmentUpsertModal.vue"; -import UserDeleteModal from "@/components/modals/PopupModal.vue"; -import DepartmentDeleteModal from "@/components/modals/PopupModal.vue"; -import UserUpsertModal from "@/components/modals/UserUpsertModal.vue"; +import UserDeleteModal from "@/components/modals/ConfirmationDialog.vue"; +import DepartmentDeleteModal from "@/components/modals/ConfirmationDialog.vue"; +import DepartmentFormDialog from "@/components/modals/DepartmentFormDialog.vue"; import TableButton from "@/components/tables/TableButton.vue"; import Avatar from "@/components/ui/Avatar.vue"; import InputButton from "@/components/ui/InputButton.vue"; @@ -107,8 +106,8 @@ import { useActionExcStore } from "@/composables/store/useActionExcStore"; import useAlertStore from "@/composables/store/useAlertStore"; import useUserStore from "@/composables/store/useUserStore"; import { useUserUpsert } from "@/composables/user/useUserUpsert"; -import type { DepartmentUpsertModel } from "@/types/department"; -import type { UserUpsertSubmitModel } from "@/types/user"; +import type { DepartmentUpsertModel } from "@/types/DepartmentTypes"; +import type { UserUpsertSubmitModel } from "@/types/UserTypes"; import DOMPurify from "dompurify"; import { Modal, type ModalInterface, initFlowbite } from "flowbite"; import { marked } from "marked"; diff --git a/frontend/src/components/modals/BaseModal.vue b/frontend/src/components/modals/BaseDialog.vue similarity index 91% rename from frontend/src/components/modals/BaseModal.vue rename to frontend/src/components/modals/BaseDialog.vue index b86cbd5..88a1d37 100644 --- a/frontend/src/components/modals/BaseModal.vue +++ b/frontend/src/components/modals/BaseDialog.vue @@ -26,19 +26,19 @@ diff --git a/frontend/src/composables/useErrorHandler.ts b/frontend/src/composables/common/useErrorHandling.ts similarity index 86% rename from frontend/src/composables/useErrorHandler.ts rename to frontend/src/composables/common/useErrorHandling.ts index adfa901..59fe3ef 100644 --- a/frontend/src/composables/useErrorHandler.ts +++ b/frontend/src/composables/common/useErrorHandling.ts @@ -7,20 +7,22 @@ import { RequestError, UnAuthError, ValidationError, -} from "@/types/error"; +} from "@/types/ErrorTypes"; import { useRouter } from "vue-router"; import { z } from "zod"; /** - * 错误处理 Composable + * 错误处理 Composable - 提供统一的错误处理机制 + * @returns 包含错误处理函数的对象 */ -export function useErrorHandler() { +export function useErrorHandling() { const router = useRouter(); const { signOut } = useUserAuth(); const alertStore = useAlertStore(); /** * 处理各类错误,显示对应的提示信息 + * @param err 错误对象 */ const handleError = (err: unknown) => { console.error(err); @@ -69,4 +71,4 @@ export function useErrorHandler() { }; } -export default useErrorHandler; +export default useErrorHandling; diff --git a/frontend/src/composables/page.ts b/frontend/src/composables/common/usePagination.ts similarity index 92% rename from frontend/src/composables/page.ts rename to frontend/src/composables/common/usePagination.ts index 4af7371..8f8d84c 100644 --- a/frontend/src/composables/page.ts +++ b/frontend/src/composables/common/usePagination.ts @@ -12,6 +12,11 @@ export interface UsePaginationOptions { initialTotal?: number; } +/** + * 分页逻辑Composable - 提供分页相关的状态和操作 + * @param options 分页选项 + * @returns 分页状态和方法 + */ export function usePagination(options: UsePaginationOptions = {}) { const { initialPage = 1, initialPageSize = 10, initialTotal = 0 } = options; diff --git a/frontend/src/composables/sort.ts b/frontend/src/composables/common/useSorting.ts similarity index 63% rename from frontend/src/composables/sort.ts rename to frontend/src/composables/common/useSorting.ts index d80882f..4903059 100644 --- a/frontend/src/composables/sort.ts +++ b/frontend/src/composables/common/useSorting.ts @@ -1,23 +1,39 @@ import { computed, ref } from "vue"; -export const useSort = () => { - const sortFields = ref< - { - field: string; - order: "asc" | "desc" | undefined; - }[] - >([]); +export interface SortField { + field: string; + order: "asc" | "desc" | undefined; +} +/** + * 排序逻辑Composable - 提供排序相关的状态和操作 + * @returns 排序状态和方法 + */ +export function useSorting() { + const sortFields = ref([]); + + /** + * 获取指定字段的排序信息 + * @param field 字段名 + * @returns 排序字段对象 + */ const getSortField = (field: string) => { return sortFields.value.find((item) => item.field === field); }; + /** + * 排序表达式,用于API请求 + */ const sortBy = computed(() => { return sortFields.value.length ? sortFields.value.map((item) => `${item.field}:${item.order}`).join(",") : undefined; }); + /** + * 处理字段排序 + * @param field 字段名 + */ const handleSort = async (field: string) => { if (sortFields.value?.find((item) => item.field === field)) { sortFields.value = sortFields.value?.map((item) => @@ -39,4 +55,4 @@ export const useSort = () => { handleSort, getSortField, }; -}; +} diff --git a/frontend/src/composables/useMobileStyles.ts b/frontend/src/composables/common/useStyleSystem.ts similarity index 94% rename from frontend/src/composables/useMobileStyles.ts rename to frontend/src/composables/common/useStyleSystem.ts index f1678d8..37c70cc 100644 --- a/frontend/src/composables/useMobileStyles.ts +++ b/frontend/src/composables/common/useStyleSystem.ts @@ -1,7 +1,8 @@ /** - * 移动端样式hook,提供通用的移动端样式类 + * 样式系统Composable - 提供统一的样式类名 + * @returns 样式类名集合 */ -export function useMobileStyles() { +export function useStyleSystem() { // 移动端卡片容器样式 const cardContainerClass = "p-4 bg-white rounded-lg shadow border border-gray-100"; diff --git a/frontend/src/composables/department/useDepartmentUpsert.ts b/frontend/src/composables/department/useDepartmentUpsert.ts index 7dda2be..aaebf4f 100644 --- a/frontend/src/composables/department/useDepartmentUpsert.ts +++ b/frontend/src/composables/department/useDepartmentUpsert.ts @@ -1,5 +1,5 @@ import client from "../../api/client"; -import type { DepartmentUpsertModel } from "../../types/department"; +import type { DepartmentUpsertModel } from "../../types/DepartmentTypes"; export const useDepartmentUpsert = () => { const upsertDepartment = async (department: DepartmentUpsertModel) => { diff --git a/frontend/src/composables/permission/usePermissionUpsert.ts b/frontend/src/composables/permission/usePermissionUpsert.ts index b101769..60cb6f3 100644 --- a/frontend/src/composables/permission/usePermissionUpsert.ts +++ b/frontend/src/composables/permission/usePermissionUpsert.ts @@ -1,5 +1,5 @@ import client from "../../api/client"; -import type { PermissionUpsertModel } from "../../types/permission"; +import type { PermissionUpsertModel } from "../../types/PermissionTypes"; const usePermissionUpsert = () => { const upsertPermission = async (permission: PermissionUpsertModel) => { diff --git a/frontend/src/composables/user/useUserUpsert.ts b/frontend/src/composables/user/useUserUpsert.ts index 4b9299d..1a7e8b4 100644 --- a/frontend/src/composables/user/useUserUpsert.ts +++ b/frontend/src/composables/user/useUserUpsert.ts @@ -1,5 +1,5 @@ import client from "../../api/client"; -import type { UserUpsertSubmitModel } from "../../types/user"; +import type { UserUpsertSubmitModel } from "../../types/UserTypes"; export const useUserUpsert = () => { const uploadUserAvatar = async (file: File) => { diff --git a/frontend/src/main.ts b/frontend/src/main.ts index cb5abf5..a1c6dc7 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -5,7 +5,7 @@ import { createApp } from "vue"; import VueDatePicker from "@vuepic/vue-datepicker"; import App from "./App.vue"; -import useErrorHandler from "./composables/useErrorHandler"; +import useErrorHandling from "./composables/common/useErrorHandling"; import router from "./router"; import "@vuepic/vue-datepicker/dist/main.css"; import "./assets/datepicker.css"; @@ -27,7 +27,7 @@ enableMocking().then(() => { app.use(createPinia()); app.use(router); - const { handleError } = useErrorHandler(); + const { handleError } = useErrorHandling(); app.config.errorHandler = (err, instance, info) => { handleError(err); }; diff --git a/frontend/src/router/modules/ai.ts b/frontend/src/router/modules/ai.ts index f2529c9..0bce41d 100644 --- a/frontend/src/router/modules/ai.ts +++ b/frontend/src/router/modules/ai.ts @@ -5,7 +5,7 @@ const aiRoutes: RouteRecordRaw[] = [ { path: Routes.LLMCONFIGVIEW.path, name: Routes.LLMCONFIGVIEW.name, - component: () => import("@/views/LlmConfigView.vue"), + component: () => import("@/views/LlmConfigurationPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_LLM_CONFIG_PERMISSION, diff --git a/frontend/src/router/modules/auth.ts b/frontend/src/router/modules/auth.ts index 3122e44..66daa35 100644 --- a/frontend/src/router/modules/auth.ts +++ b/frontend/src/router/modules/auth.ts @@ -12,7 +12,7 @@ const authRoutes: RouteRecordRaw[] = [ { path: Routes.LOGIN.path, name: Routes.LOGIN.name, - component: () => import("../../views/LoginView.vue"), + component: () => import("../../views/LoginPage.vue"), }, ]; diff --git a/frontend/src/router/modules/dashboard.ts b/frontend/src/router/modules/dashboard.ts index 14ce891..ecb391d 100644 --- a/frontend/src/router/modules/dashboard.ts +++ b/frontend/src/router/modules/dashboard.ts @@ -1,8 +1,8 @@ import type { RouteRecordRaw } from "vue-router"; +import Dashboard from "../../components/layout/Dashboard.vue"; import { EPermission, Routes } from "../constants"; import aiRoutes from "./ai"; import userManagementRoutes from "./user"; -import Dashboard from "../../components/layout/Dashboard.vue"; const dashboardRoutes: RouteRecordRaw = { path: Routes.DASHBOARD.path, @@ -15,7 +15,7 @@ const dashboardRoutes: RouteRecordRaw = { { path: Routes.OVERVIEW.path, name: Routes.OVERVIEW.name, - component: () => import("@/views/OverView.vue"), + component: () => import("@/views/DashboardPage.vue"), meta: { requiresAuth: true, }, @@ -23,7 +23,7 @@ const dashboardRoutes: RouteRecordRaw = { { path: Routes.SETTINGS.path, name: Routes.SETTINGS.name, - component: () => import("@/views/SettingsView.vue"), + component: () => import("@/views/SystemSettingsPage.vue"), meta: { requiresAuth: true, }, @@ -33,12 +33,12 @@ const dashboardRoutes: RouteRecordRaw = { { path: Routes.NOTFOUND.path, name: Routes.NOTFOUND.name, - component: () => import("@/views/NotFound.vue"), + component: () => import("@/views/NotFoundPage.vue"), }, { path: Routes.SCHEDULERVIEW.path, name: Routes.SCHEDULERVIEW.name, - component: () => import("@/views/SchedulerView.vue"), + component: () => import("@/views/SchedulerManagementPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_SCHEDULER_PERMISSION, @@ -47,7 +47,7 @@ const dashboardRoutes: RouteRecordRaw = { { path: Routes.DEPARTMENTVIEW.path, name: Routes.DEPARTMENTVIEW.name, - component: () => import("@/views/DepartmentView.vue"), + component: () => import("@/views/DepartmentManagementPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_DEPARTMENT_PERMISSION, @@ -56,7 +56,7 @@ const dashboardRoutes: RouteRecordRaw = { { path: Routes.POSITIONVIEW.path, name: Routes.POSITIONVIEW.name, - component: () => import("@/views/PositionView.vue"), + component: () => import("@/views/PositionManagementPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_POSITION_PERMISSION, diff --git a/frontend/src/router/modules/error.ts b/frontend/src/router/modules/error.ts index 6f8571d..d97f0a3 100644 --- a/frontend/src/router/modules/error.ts +++ b/frontend/src/router/modules/error.ts @@ -5,7 +5,7 @@ const errorRoutes: RouteRecordRaw[] = [ { path: Routes.GLOBAL_NOTFOUND.path, name: Routes.GLOBAL_NOTFOUND.name, - component: () => import("../../views/NotFound.vue"), + component: () => import("../../views/NotFoundPage.vue"), }, ]; diff --git a/frontend/src/router/modules/user.ts b/frontend/src/router/modules/user.ts index ce84bc6..b62c564 100644 --- a/frontend/src/router/modules/user.ts +++ b/frontend/src/router/modules/user.ts @@ -5,7 +5,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.USERVIEW.path, name: Routes.USERVIEW.name, - component: () => import("@/views/UserView.vue"), + component: () => import("@/views/UserManagementPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_USER_ROLE_PERMISSION, @@ -14,7 +14,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.ROLEVIEW.path, name: Routes.ROLEVIEW.name, - component: () => import("@/views/RoleView.vue"), + component: () => import("@/views/RoleManagementPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_USER_ROLE_PERMISSION, @@ -23,7 +23,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.BINDROLEVIEW.path, name: Routes.BINDROLEVIEW.name, - component: () => import("@/views/BindRoleView.vue"), + component: () => import("@/views/UserRoleAssignmentPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.WRITE_USER_ROLE_PERMISSION, @@ -32,7 +32,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.BINDDEPARTMENTVIEW.path, name: Routes.BINDDEPARTMENTVIEW.name, - component: () => import("@/views/BindDepartmentView.vue"), + component: () => import("@/views/UserDepartmentAssignmentPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.WRITE_USER_ROLE_PERMISSION, @@ -41,7 +41,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.BINDPERMISSIONVIEW.path, name: Routes.BINDPERMISSIONVIEW.name, - component: () => import("@/views/BindPermissionView.vue"), + component: () => import("@/views/RolePermissionAssignmentPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.WRITE_USER_ROLE_PERMISSION, @@ -50,7 +50,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.PERMISSIONVIEW.path, name: Routes.PERMISSIONVIEW.name, - component: () => import("@/views/PermissionView.vue"), + component: () => import("@/views/PermissionManagementPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.READ_USER_ROLE_PERMISSION, @@ -59,7 +59,7 @@ const userManagementRoutes: RouteRecordRaw[] = [ { path: Routes.BINDPOSITIONVIEW.path, name: Routes.BINDPOSITIONVIEW.name, - component: () => import("@/views/BindPositionView.vue"), + component: () => import("@/views/UserPositionAssignmentPage.vue"), meta: { requiresAuth: true, hasPermission: EPermission.WRITE_USER_ROLE_PERMISSION, diff --git a/frontend/src/types/AlertTypes.ts b/frontend/src/types/AlertTypes.ts new file mode 100644 index 0000000..b8d1f94 --- /dev/null +++ b/frontend/src/types/AlertTypes.ts @@ -0,0 +1 @@ +export type AlertLevel = "info" | "warning" | "success" | "error"; diff --git a/frontend/src/types/DepartmentTypes.ts b/frontend/src/types/DepartmentTypes.ts new file mode 100644 index 0000000..5a87eff --- /dev/null +++ b/frontend/src/types/DepartmentTypes.ts @@ -0,0 +1,15 @@ +export interface DepartmentFormData { + id?: number; + name: string; + parentId?: number | null; +} + +export type DepartmentUpsertModel = DepartmentFormData; + +export interface DepartmentData { + id: number; + name: string; + parentId?: number; + parentName?: string; + isBound?: boolean; +} diff --git a/frontend/src/types/ErrorTypes.ts b/frontend/src/types/ErrorTypes.ts new file mode 100644 index 0000000..0a01e6b --- /dev/null +++ b/frontend/src/types/ErrorTypes.ts @@ -0,0 +1,46 @@ +export class BaseError extends Error { + constructor(message: string) { + super(message); + this.name = this.constructor.name; + } +} + +export class ValidationError extends BaseError {} + +export class RequestError extends BaseError { + status: number; + + constructor(status: number) { + super(`请求错误: ${status}`); + this.status = status; + } +} + +export class UnAuthError extends BaseError { + status: number; + + constructor(status: number) { + super(`未授权: ${status}`); + this.status = status; + } +} + +export class ForbiddenError extends BaseError { + status: number; + + constructor(status: number) { + super(`禁止访问: ${status}`); + this.status = status; + } +} + +export class InternalServerError extends BaseError { + detail?: string; + status: number; + + constructor(status: number, detail?: string) { + super(`服务器错误: ${status}`); + this.status = status; + this.detail = detail; + } +} diff --git a/frontend/src/types/PermissionTypes.ts b/frontend/src/types/PermissionTypes.ts new file mode 100644 index 0000000..d8e0602 --- /dev/null +++ b/frontend/src/types/PermissionTypes.ts @@ -0,0 +1,14 @@ +export interface PermissionFormData { + id?: number; + name: string; + code: string; +} + +export type PermissionUpsertModel = PermissionFormData; + +export interface PermissionData { + id: number; + name: string; + code: string; + isBound?: boolean; +} diff --git a/frontend/src/types/PositionTypes.ts b/frontend/src/types/PositionTypes.ts new file mode 100644 index 0000000..b2008e5 --- /dev/null +++ b/frontend/src/types/PositionTypes.ts @@ -0,0 +1,12 @@ +export interface PositionFormData { + id?: number; + name: string; +} + +export type PositionUpsertModel = PositionFormData; + +export interface PositionData { + id: number; + name: string; + isBound?: boolean; +} diff --git a/frontend/src/types/RoleTypes.ts b/frontend/src/types/RoleTypes.ts new file mode 100644 index 0000000..2c73f71 --- /dev/null +++ b/frontend/src/types/RoleTypes.ts @@ -0,0 +1,20 @@ +export interface RoleFormData { + id?: number; + name: string; + code: string; +} + +export type RoleUpsertModel = RoleFormData; + +export interface RoleData { + id: number; + name: string; + code: string; + isBound?: boolean; + permissions?: Array<{ + id: number; + name: string; + code: string; + isBound?: boolean; + }>; +} diff --git a/frontend/src/types/UserTypes.ts b/frontend/src/types/UserTypes.ts new file mode 100644 index 0000000..79377da --- /dev/null +++ b/frontend/src/types/UserTypes.ts @@ -0,0 +1,35 @@ +export interface UserFormData { + id?: number; + username: string; + password?: string; + enable: boolean; + avatar?: string; + realName?: string; + age?: number; + gender?: number; + email?: string; + telephone?: string; +} + +export type UserUpsertSubmitModel = UserFormData; + +// 用户类型,根据实际情况扩展 +export interface UserData { + id: number; + username: string; + enable: boolean; + avatar?: string; + realName?: string; + age?: number; + gender?: number; + email?: string; + telephone?: string; + roles?: Array<{ + id: number; + name: string; + code: string; + isBound?: boolean; + }>; +} + +export type User = UserData | null; diff --git a/frontend/src/types/department.d.ts b/frontend/src/types/department.d.ts deleted file mode 100644 index 36dedbf..0000000 --- a/frontend/src/types/department.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface DepartmentUpsertModel { - id?: number; - name: string; - parentId?: number | null; -} diff --git a/frontend/src/types/error.ts b/frontend/src/types/error.ts deleted file mode 100644 index 4893798..0000000 --- a/frontend/src/types/error.ts +++ /dev/null @@ -1,53 +0,0 @@ -class ValidationError extends Error { - constructor(message: string) { - super(message); - this.name = "ValidationError"; - } -} - -class HttpError extends Error { - status: number; - detail?: string; - constructor(message: string, status: number, detail?: string) { - super(message); - this.name = "HttpError"; - this.status = status; - this.detail = detail; - } -} - -class UnAuthError extends HttpError { - constructor(status: number) { - super("当前用户身份认证异常", status); - this.name = "UnAuthError"; - } -} - -class ForbiddenError extends HttpError { - constructor(status: number) { - super("您没有对应的权限", status); - this.name = "ForbiddenError"; - } -} - -class RequestError extends HttpError { - constructor(status: number) { - super("请求发生异常,请检查您的输入或稍后再试", status); - this.name = "RequestError"; - } -} - -class InternalServerError extends HttpError { - constructor(status: number, detail: string) { - super(detail, status, detail); - this.name = "InternalServerError"; - } -} - -export { - UnAuthError, - ForbiddenError, - RequestError, - InternalServerError, - ValidationError, -}; diff --git a/frontend/src/types/permission.d.ts b/frontend/src/types/permission.d.ts deleted file mode 100644 index d43584e..0000000 --- a/frontend/src/types/permission.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface PermissionUpsertModel { - id?: number; - name: string; - code: string; -} diff --git a/frontend/src/types/position.d.ts b/frontend/src/types/position.d.ts deleted file mode 100644 index 0e858fb..0000000 --- a/frontend/src/types/position.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface PositionUpsertModel { - id?: number; - name: string; -} diff --git a/frontend/src/types/role.d.ts b/frontend/src/types/role.d.ts deleted file mode 100644 index 3c70923..0000000 --- a/frontend/src/types/role.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface RoleUpsertModel { - id?: number; - name: string; - code: string; -} diff --git a/frontend/src/types/user.d.ts b/frontend/src/types/user.d.ts deleted file mode 100644 index 89ab8be..0000000 --- a/frontend/src/types/user.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface UserUpsertSubmitModel { - id?: number; - username: string; - password?: string; - enable: boolean; - avatar?: string; -} - -export type User = UserRolePermissionModel | null; diff --git a/frontend/src/views/OverView.vue b/frontend/src/views/DashboardPage.vue similarity index 100% rename from frontend/src/views/OverView.vue rename to frontend/src/views/DashboardPage.vue diff --git a/frontend/src/views/DepartmentView.vue b/frontend/src/views/DepartmentManagementPage.vue similarity index 93% rename from frontend/src/views/DepartmentView.vue rename to frontend/src/views/DepartmentManagementPage.vue index 0e0897a..ff7493d 100644 --- a/frontend/src/views/DepartmentView.vue +++ b/frontend/src/views/DepartmentManagementPage.vue @@ -100,31 +100,31 @@ - - +