diff --git a/frontend/src/components/form/index.ts b/frontend/src/components/form/index.ts new file mode 100644 index 0000000..87a49e3 --- /dev/null +++ b/frontend/src/components/form/index.ts @@ -0,0 +1,7 @@ +import FormInput from './FormInput.vue'; +import FormSelect from './FormSelect.vue'; + +export { + FormInput, + FormSelect +}; diff --git a/frontend/src/components/modals/BaseDialog.vue b/frontend/src/components/modals/BaseDialog.vue index 88a1d37..a9c9dd4 100644 --- a/frontend/src/components/modals/BaseDialog.vue +++ b/frontend/src/components/modals/BaseDialog.vue @@ -29,7 +29,7 @@ import { Modal, initFlowbite } from "flowbite"; import { computed, onMounted } from "vue"; -export type ModalSize = "xs" | "sm" | "md" | "lg" | "xl"; +export type ModalSize = "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl" | "5xl" | "6xl" | "7xl"; const props = defineProps<{ /** 对话框标题 */ @@ -50,6 +50,12 @@ const maxWidthClass = computed(() => { md: "max-w-md", lg: "max-w-lg", xl: "max-w-xl", + "2xl": "max-w-2xl", + "3xl": "max-w-3xl", + "4xl": "max-w-4xl", + "5xl": "max-w-5xl", + "6xl": "max-w-6xl", + "7xl": "max-w-7xl", }; return sizes[props.size || "md"]; diff --git a/frontend/src/components/modals/ConfirmationDialog.vue b/frontend/src/components/modals/ConfirmationDialog.vue index 6fc0941..cb54176 100644 --- a/frontend/src/components/modals/ConfirmationDialog.vue +++ b/frontend/src/components/modals/ConfirmationDialog.vue @@ -9,25 +9,33 @@

{{ title }}

+

{{ content }}

- - + +
diff --git a/frontend/src/components/modals/index.ts b/frontend/src/components/modals/index.ts new file mode 100644 index 0000000..4ec950a --- /dev/null +++ b/frontend/src/components/modals/index.ts @@ -0,0 +1,23 @@ +import BaseDialog from "./BaseDialog.vue"; +import ConfirmationDialog from "./ConfirmationDialog.vue"; +import DepartmentFormDialog from "./DepartmentFormDialog.vue"; +import LibraryFormDialog from "./LibraryFormDialog.vue"; +import LlmFormDialog from "./LlmFormDialog.vue"; +import PermissionFormDialog from "./PermissionFormDialog.vue"; +import PositionFormDialog from "./PositionFormDialog.vue"; +import RoleFormDialog from "./RoleFormDialog.vue"; +import SchedulerFormDialog from "./SchedulerFormDialog.vue"; +import UserFormDialog from "./UserFormDialog.vue"; + +export { + BaseDialog, + ConfirmationDialog, + DepartmentFormDialog, + LibraryFormDialog, + LlmFormDialog, + PermissionFormDialog, + PositionFormDialog, + RoleFormDialog, + SchedulerFormDialog, + UserFormDialog, +}; diff --git a/frontend/src/components/tables/TableFilterForm.vue b/frontend/src/components/tables/TableFilterForm.vue index 9011a41..df01516 100644 --- a/frontend/src/components/tables/TableFilterForm.vue +++ b/frontend/src/components/tables/TableFilterForm.vue @@ -33,15 +33,15 @@ - + @@ -53,6 +53,7 @@ diff --git a/frontend/src/composables/common/index.ts b/frontend/src/composables/common/index.ts new file mode 100644 index 0000000..70868d1 --- /dev/null +++ b/frontend/src/composables/common/index.ts @@ -0,0 +1,6 @@ +import { useErrorHandling } from "./useErrorHandling"; +import { usePagination } from "./usePagination"; +import { useSorting } from "./useSorting"; +import { useStyleSystem } from "./useStyleSystem"; + +export { useErrorHandling, usePagination, useSorting, useStyleSystem }; diff --git a/frontend/src/utils/avatarUtil.ts b/frontend/src/utils/avatarUtil.ts index 75f3ec0..7aac218 100644 --- a/frontend/src/utils/avatarUtil.ts +++ b/frontend/src/utils/avatarUtil.ts @@ -1,5 +1,16 @@ -export const getUserAvatarUrl = (avatar?: string): string | undefined => { - if (avatar?.startsWith("/")) { +/** + * 获取用户头像URL + * @param avatar 头像路径 + * @returns 完整的头像URL或默认头像 + */ +export const getUserAvatarUrl = (avatar?: string): string => { + if (!avatar) { + return "/trump.jpg"; // 默认头像 + } + + if (avatar.startsWith("/")) { return `${import.meta.env.VITE_STATIC_URL}${avatar}`; } + + return avatar; // 如果已经是完整URL则直接返回 }; diff --git a/frontend/src/utils/index.ts b/frontend/src/utils/index.ts new file mode 100644 index 0000000..6ea2412 --- /dev/null +++ b/frontend/src/utils/index.ts @@ -0,0 +1,4 @@ +import { getUserAvatarUrl } from "./avatarUtil"; +import { dayjs, formatDate, formatDateString } from "./dateUtil"; + +export { getUserAvatarUrl, dayjs, formatDate, formatDateString };