diff --git a/console/src/App.vue b/console/console-src/App.vue similarity index 92% rename from console/src/App.vue rename to console/console-src/App.vue index 2405a8e9b..825aebcd7 100644 --- a/console/src/App.vue +++ b/console/console-src/App.vue @@ -3,7 +3,7 @@ import { RouterView, useRoute } from "vue-router"; import { computed, watch, reactive, onMounted, inject } from "vue"; import { useTitle } from "@vueuse/core"; import { useFavicon } from "@vueuse/core"; -import { useSystemConfigMapStore } from "./stores/system-configmap"; +import { useSystemConfigMapStore } from "@console/stores/system-configmap"; import { storeToRefs } from "pinia"; import { useI18n } from "vue-i18n"; import { @@ -11,9 +11,9 @@ import { type UseOverlayScrollbarsParams, } from "overlayscrollbars-vue"; import type { FormKitConfig } from "@formkit/core"; -import { i18n } from "./locales"; -import { AppName } from "./constants/app"; -import { useGlobalInfoStore } from "./stores/global-info"; +import { i18n } from "@/locales"; +import { AppName } from "@/constants/app"; +import { useGlobalInfoStore } from "@/stores/global-info"; const { t } = useI18n(); diff --git a/console/src/composables/use-auto-save-content.ts b/console/console-src/composables/use-auto-save-content.ts similarity index 100% rename from console/src/composables/use-auto-save-content.ts rename to console/console-src/composables/use-auto-save-content.ts diff --git a/console/src/composables/use-content-cache.ts b/console/console-src/composables/use-content-cache.ts similarity index 100% rename from console/src/composables/use-content-cache.ts rename to console/console-src/composables/use-content-cache.ts diff --git a/console/src/composables/use-content-snapshot.ts b/console/console-src/composables/use-content-snapshot.ts similarity index 100% rename from console/src/composables/use-content-snapshot.ts rename to console/console-src/composables/use-content-snapshot.ts diff --git a/console/src/composables/use-editor-extension-points.ts b/console/console-src/composables/use-editor-extension-points.ts similarity index 100% rename from console/src/composables/use-editor-extension-points.ts rename to console/console-src/composables/use-editor-extension-points.ts diff --git a/console/src/composables/use-entity-extension-points.ts b/console/console-src/composables/use-entity-extension-points.ts similarity index 100% rename from console/src/composables/use-entity-extension-points.ts rename to console/console-src/composables/use-entity-extension-points.ts diff --git a/console/src/composables/use-global-info.ts b/console/console-src/composables/use-global-info.ts similarity index 100% rename from console/src/composables/use-global-info.ts rename to console/console-src/composables/use-global-info.ts diff --git a/console/src/composables/use-operation-extension-points.ts b/console/console-src/composables/use-operation-extension-points.ts similarity index 100% rename from console/src/composables/use-operation-extension-points.ts rename to console/console-src/composables/use-operation-extension-points.ts diff --git a/console/src/composables/use-save-keybinding.ts b/console/console-src/composables/use-save-keybinding.ts similarity index 100% rename from console/src/composables/use-save-keybinding.ts rename to console/console-src/composables/use-save-keybinding.ts diff --git a/console/src/composables/use-setting-form.ts b/console/console-src/composables/use-setting-form.ts similarity index 99% rename from console/src/composables/use-setting-form.ts rename to console/console-src/composables/use-setting-form.ts index 5ca6dd0cc..94c3c6e92 100644 --- a/console/src/composables/use-setting-form.ts +++ b/console/console-src/composables/use-setting-form.ts @@ -2,7 +2,7 @@ // types import { computed, watch, type ComputedRef, type Ref } from "vue"; import { ref } from "vue"; -import { apiClient } from "../utils/api-client"; +import { apiClient } from "@/utils/api-client"; // libs import cloneDeep from "lodash.clonedeep"; diff --git a/console/src/composables/use-slugify.ts b/console/console-src/composables/use-slugify.ts similarity index 100% rename from console/src/composables/use-slugify.ts rename to console/console-src/composables/use-slugify.ts diff --git a/console/src/layouts/BasicLayout.vue b/console/console-src/layouts/BasicLayout.vue similarity index 99% rename from console/src/layouts/BasicLayout.vue rename to console/console-src/layouts/BasicLayout.vue index 6d26ba1c9..bbc9e2a0c 100644 --- a/console/src/layouts/BasicLayout.vue +++ b/console/console-src/layouts/BasicLayout.vue @@ -22,7 +22,7 @@ import { onMounted, onUnmounted, reactive, ref } from "vue"; import axios from "axios"; import GlobalSearchModal from "@/components/global-search/GlobalSearchModal.vue"; import LoginModal from "@/components/login/LoginModal.vue"; -import { coreMenuGroups } from "@/router/routes.config"; +import { coreMenuGroups } from "@console/router/routes.config"; import sortBy from "lodash.sortby"; import { useRoleStore } from "@/stores/role"; import { hasPermission } from "@/utils/permission"; diff --git a/console/src/layouts/BlankLayout.vue b/console/console-src/layouts/BlankLayout.vue similarity index 100% rename from console/src/layouts/BlankLayout.vue rename to console/console-src/layouts/BlankLayout.vue diff --git a/console/console-src/main.ts b/console/console-src/main.ts index e69de29bb..693859b17 100644 --- a/console/console-src/main.ts +++ b/console/console-src/main.ts @@ -0,0 +1,113 @@ +import { createApp } from "vue"; +import type { DirectiveBinding } from "vue"; +import { createPinia } from "pinia"; +import App from "./App.vue"; +import router from "./router"; +import { apiClient } from "@/utils/api-client"; +// setup +import "@/setup/setupStyles"; +import { setupComponents } from "@/setup/setupComponents"; +import { setupI18n, i18n, getBrowserLanguage } from "@/locales"; +// core modules +import { hasPermission } from "@/utils/permission"; +import { useRoleStore } from "@/stores/role"; +import { useThemeStore } from "@console/stores/theme"; +import { useUserStore } from "@/stores/user"; +import { useSystemConfigMapStore } from "@console/stores/system-configmap"; +import { setupVueQuery } from "@/setup/setupVueQuery"; +import { useGlobalInfoStore } from "@/stores/global-info"; +import { setupCoreModules, setupPluginModules } from "@/setup/setupModules"; + +const app = createApp(App); + +setupComponents(app); +setupI18n(app); +setupVueQuery(app); + +app.use(createPinia()); + +async function loadUserPermissions() { + const { data: currentPermissions } = await apiClient.user.getPermissions({ + name: "-", + }); + const roleStore = useRoleStore(); + roleStore.$patch({ + permissions: currentPermissions, + }); + app.directive( + "permission", + (el: HTMLElement, binding: DirectiveBinding) => { + const uiPermissions = Array.from( + currentPermissions.uiPermissions + ); + const { value } = binding; + const { any, enable } = binding.modifiers; + + if (hasPermission(uiPermissions, value, any)) { + return; + } + + if (enable) { + //TODO + return; + } + el?.remove?.(); + } + ); +} + +async function loadActivatedTheme() { + const themeStore = useThemeStore(); + await themeStore.fetchActivatedTheme(); +} + +(async function () { + await initApp(); +})(); + +async function initApp() { + // TODO 实验性 + const theme = localStorage.getItem("theme"); + if (theme) { + document.body.classList.add(theme); + } + + try { + setupCoreModules(app); + + const userStore = useUserStore(); + await userStore.fetchCurrentUser(); + + // set locale + i18n.global.locale.value = + localStorage.getItem("locale") || getBrowserLanguage(); + + const globalInfoStore = useGlobalInfoStore(); + await globalInfoStore.fetchGlobalInfo(); + + if (userStore.isAnonymous) { + return; + } + + await loadUserPermissions(); + + try { + await setupPluginModules(app); + } catch (e) { + console.error("Failed to load plugins", e); + } + + // load system configMap + const systemConfigMapStore = useSystemConfigMapStore(); + await systemConfigMapStore.fetchSystemConfigMap(); + + if (globalInfoStore.globalInfo?.userInitialized) { + await loadActivatedTheme(); + } + } catch (e) { + console.error(e); + } finally { + app.use(router); + app.mount("#app"); + } +} diff --git a/console/src/modules/contents/_components/ContributorList.vue b/console/console-src/modules/contents/_components/ContributorList.vue similarity index 100% rename from console/src/modules/contents/_components/ContributorList.vue rename to console/console-src/modules/contents/_components/ContributorList.vue diff --git a/console/src/modules/contents/attachments/AttachmentList.vue b/console/console-src/modules/contents/attachments/AttachmentList.vue similarity index 100% rename from console/src/modules/contents/attachments/AttachmentList.vue rename to console/console-src/modules/contents/attachments/AttachmentList.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentDetailModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentDetailModal.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentDetailModal.vue rename to console/console-src/modules/contents/attachments/components/AttachmentDetailModal.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue rename to console/console-src/modules/contents/attachments/components/AttachmentGroupEditingModal.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentGroupList.vue b/console/console-src/modules/contents/attachments/components/AttachmentGroupList.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentGroupList.vue rename to console/console-src/modules/contents/attachments/components/AttachmentGroupList.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentListItem.vue b/console/console-src/modules/contents/attachments/components/AttachmentListItem.vue similarity index 98% rename from console/src/modules/contents/attachments/components/AttachmentListItem.vue rename to console/console-src/modules/contents/attachments/components/AttachmentListItem.vue index 3109f2ac3..27aaaa08a 100644 --- a/console/src/modules/contents/attachments/components/AttachmentListItem.vue +++ b/console/console-src/modules/contents/attachments/components/AttachmentListItem.vue @@ -19,7 +19,7 @@ import { useI18n } from "vue-i18n"; import { inject } from "vue"; import type { Ref } from "vue"; import { useQueryClient } from "@tanstack/vue-query"; -import { useOperationItemExtensionPoint } from "@/composables/use-operation-extension-points"; +import { useOperationItemExtensionPoint } from "@console/composables/use-operation-extension-points"; import { toRefs } from "vue"; import type { OperationItem } from "@halo-dev/console-shared"; import EntityDropdownItems from "@/components/entity/EntityDropdownItems.vue"; diff --git a/console/src/modules/contents/attachments/components/AttachmentPermalinkList.vue b/console/console-src/modules/contents/attachments/components/AttachmentPermalinkList.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentPermalinkList.vue rename to console/console-src/modules/contents/attachments/components/AttachmentPermalinkList.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentPoliciesModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentPoliciesModal.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentPoliciesModal.vue rename to console/console-src/modules/contents/attachments/components/AttachmentPoliciesModal.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue similarity index 98% rename from console/src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue rename to console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue index 309898730..9cf73da93 100644 --- a/console/src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue +++ b/console/console-src/modules/contents/attachments/components/AttachmentPolicyEditingModal.vue @@ -4,7 +4,7 @@ import SubmitButton from "@/components/button/SubmitButton.vue"; import type { Policy, PolicyTemplate } from "@halo-dev/api-client"; import cloneDeep from "lodash.clonedeep"; import { computed, ref, toRaw, watch, watchEffect } from "vue"; -import { useSettingForm } from "@/composables/use-setting-form"; +import { useSettingForm } from "@console/composables/use-setting-form"; import { apiClient } from "@/utils/api-client"; import { reset, diff --git a/console/src/modules/contents/attachments/components/AttachmentSelectorModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentSelectorModal.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentSelectorModal.vue rename to console/console-src/modules/contents/attachments/components/AttachmentSelectorModal.vue diff --git a/console/src/modules/contents/attachments/components/AttachmentUploadModal.vue b/console/console-src/modules/contents/attachments/components/AttachmentUploadModal.vue similarity index 100% rename from console/src/modules/contents/attachments/components/AttachmentUploadModal.vue rename to console/console-src/modules/contents/attachments/components/AttachmentUploadModal.vue diff --git a/console/src/modules/contents/attachments/components/selector-providers/CoreSelectorProvider.vue b/console/console-src/modules/contents/attachments/components/selector-providers/CoreSelectorProvider.vue similarity index 100% rename from console/src/modules/contents/attachments/components/selector-providers/CoreSelectorProvider.vue rename to console/console-src/modules/contents/attachments/components/selector-providers/CoreSelectorProvider.vue diff --git a/console/src/modules/contents/attachments/composables/use-attachment-group.ts b/console/console-src/modules/contents/attachments/composables/use-attachment-group.ts similarity index 100% rename from console/src/modules/contents/attachments/composables/use-attachment-group.ts rename to console/console-src/modules/contents/attachments/composables/use-attachment-group.ts diff --git a/console/src/modules/contents/attachments/composables/use-attachment-policy.ts b/console/console-src/modules/contents/attachments/composables/use-attachment-policy.ts similarity index 100% rename from console/src/modules/contents/attachments/composables/use-attachment-policy.ts rename to console/console-src/modules/contents/attachments/composables/use-attachment-policy.ts diff --git a/console/src/modules/contents/attachments/composables/use-attachment.ts b/console/console-src/modules/contents/attachments/composables/use-attachment.ts similarity index 100% rename from console/src/modules/contents/attachments/composables/use-attachment.ts rename to console/console-src/modules/contents/attachments/composables/use-attachment.ts diff --git a/console/src/modules/contents/attachments/module.ts b/console/console-src/modules/contents/attachments/module.ts similarity index 93% rename from console/src/modules/contents/attachments/module.ts rename to console/console-src/modules/contents/attachments/module.ts index a376071d8..3b7df17a3 100644 --- a/console/src/modules/contents/attachments/module.ts +++ b/console/console-src/modules/contents/attachments/module.ts @@ -1,5 +1,5 @@ import { definePlugin } from "@halo-dev/console-shared"; -import BasicLayout from "@/layouts/BasicLayout.vue"; +import BasicLayout from "@console/layouts/BasicLayout.vue"; import AttachmentList from "./AttachmentList.vue"; import AttachmentSelectorModal from "./components/AttachmentSelectorModal.vue"; import { IconFolder } from "@halo-dev/components"; diff --git a/console/src/modules/contents/comments/CommentList.vue b/console/console-src/modules/contents/comments/CommentList.vue similarity index 100% rename from console/src/modules/contents/comments/CommentList.vue rename to console/console-src/modules/contents/comments/CommentList.vue diff --git a/console/src/modules/contents/comments/components/CommentListItem.vue b/console/console-src/modules/contents/comments/components/CommentListItem.vue similarity index 100% rename from console/src/modules/contents/comments/components/CommentListItem.vue rename to console/console-src/modules/contents/comments/components/CommentListItem.vue diff --git a/console/src/modules/contents/comments/components/ReplyCreationModal.vue b/console/console-src/modules/contents/comments/components/ReplyCreationModal.vue similarity index 100% rename from console/src/modules/contents/comments/components/ReplyCreationModal.vue rename to console/console-src/modules/contents/comments/components/ReplyCreationModal.vue diff --git a/console/src/modules/contents/comments/components/ReplyListItem.vue b/console/console-src/modules/contents/comments/components/ReplyListItem.vue similarity index 100% rename from console/src/modules/contents/comments/components/ReplyListItem.vue rename to console/console-src/modules/contents/comments/components/ReplyListItem.vue diff --git a/console/src/modules/contents/comments/module.ts b/console/console-src/modules/contents/comments/module.ts similarity index 93% rename from console/src/modules/contents/comments/module.ts rename to console/console-src/modules/contents/comments/module.ts index 5cf8e1103..2172fde2d 100644 --- a/console/src/modules/contents/comments/module.ts +++ b/console/console-src/modules/contents/comments/module.ts @@ -1,5 +1,5 @@ import { definePlugin } from "@halo-dev/console-shared"; -import BasicLayout from "@/layouts/BasicLayout.vue"; +import BasicLayout from "@console/layouts/BasicLayout.vue"; import { IconMessage } from "@halo-dev/components"; import CommentList from "./CommentList.vue"; import CommentStatsWidget from "./widgets/CommentStatsWidget.vue"; diff --git a/console/src/modules/contents/comments/widgets/CommentStatsWidget.vue b/console/console-src/modules/contents/comments/widgets/CommentStatsWidget.vue similarity index 100% rename from console/src/modules/contents/comments/widgets/CommentStatsWidget.vue rename to console/console-src/modules/contents/comments/widgets/CommentStatsWidget.vue diff --git a/console/src/modules/contents/pages/DeletedSinglePageList.vue b/console/console-src/modules/contents/pages/DeletedSinglePageList.vue similarity index 100% rename from console/src/modules/contents/pages/DeletedSinglePageList.vue rename to console/console-src/modules/contents/pages/DeletedSinglePageList.vue diff --git a/console/src/modules/contents/pages/SinglePageEditor.vue b/console/console-src/modules/contents/pages/SinglePageEditor.vue similarity index 96% rename from console/src/modules/contents/pages/SinglePageEditor.vue rename to console/console-src/modules/contents/pages/SinglePageEditor.vue index 683a5c15e..65742ea57 100644 --- a/console/src/modules/contents/pages/SinglePageEditor.vue +++ b/console/console-src/modules/contents/pages/SinglePageEditor.vue @@ -27,8 +27,8 @@ import { useRouteQuery } from "@vueuse/router"; import cloneDeep from "lodash.clonedeep"; import { useRouter } from "vue-router"; import { randomUUID } from "@/utils/id"; -import { useContentCache } from "@/composables/use-content-cache"; -import { useEditorExtensionPoints } from "@/composables/use-editor-extension-points"; +import { useContentCache } from "@console/composables/use-content-cache"; +import { useEditorExtensionPoints } from "@console/composables/use-editor-extension-points"; import type { EditorProvider } from "@halo-dev/console-shared"; import { useLocalStorage } from "@vueuse/core"; import EditorProviderSelector from "@/components/dropdown-selector/EditorProviderSelector.vue"; @@ -36,9 +36,9 @@ import { useI18n } from "vue-i18n"; import UrlPreviewModal from "@/components/preview/UrlPreviewModal.vue"; import { contentAnnotations } from "@/constants/annotations"; import { usePageUpdateMutate } from "./composables/use-page-update-mutate"; -import { useAutoSaveContent } from "@/composables/use-auto-save-content"; -import { useContentSnapshot } from "@/composables/use-content-snapshot"; -import { useSaveKeybinding } from "@/composables/use-save-keybinding"; +import { useAutoSaveContent } from "@console/composables/use-auto-save-content"; +import { useContentSnapshot } from "@console/composables/use-content-snapshot"; +import { useSaveKeybinding } from "@console/composables/use-save-keybinding"; const router = useRouter(); const { t } = useI18n(); diff --git a/console/src/modules/contents/pages/SinglePageList.vue b/console/console-src/modules/contents/pages/SinglePageList.vue similarity index 100% rename from console/src/modules/contents/pages/SinglePageList.vue rename to console/console-src/modules/contents/pages/SinglePageList.vue diff --git a/console/src/modules/contents/pages/components/SinglePageListItem.vue b/console/console-src/modules/contents/pages/components/SinglePageListItem.vue similarity index 100% rename from console/src/modules/contents/pages/components/SinglePageListItem.vue rename to console/console-src/modules/contents/pages/components/SinglePageListItem.vue diff --git a/console/src/modules/contents/pages/components/SinglePageSettingModal.vue b/console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue similarity index 98% rename from console/src/modules/contents/pages/components/SinglePageSettingModal.vue rename to console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue index e742bfddf..a1f2bd040 100644 --- a/console/src/modules/contents/pages/components/SinglePageSettingModal.vue +++ b/console/console-src/modules/contents/pages/components/SinglePageSettingModal.vue @@ -10,13 +10,13 @@ import { computed, nextTick, ref, watchEffect } from "vue"; import type { SinglePage } from "@halo-dev/api-client"; import cloneDeep from "lodash.clonedeep"; import { apiClient } from "@/utils/api-client"; -import { useThemeCustomTemplates } from "@/modules/interface/themes/composables/use-theme"; +import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme"; import { singlePageLabels } from "@/constants/labels"; import { randomUUID } from "@/utils/id"; import { toDatetimeLocal, toISOString } from "@/utils/date"; import { submitForm } from "@formkit/core"; import AnnotationsForm from "@/components/form/AnnotationsForm.vue"; -import useSlugify from "@/composables/use-slugify"; +import useSlugify from "@console/composables/use-slugify"; import { useI18n } from "vue-i18n"; import { usePageUpdateMutate } from "../composables/use-page-update-mutate"; import { FormType } from "@/types/slug"; diff --git a/console/src/modules/contents/pages/composables/use-page-update-mutate.ts b/console/console-src/modules/contents/pages/composables/use-page-update-mutate.ts similarity index 100% rename from console/src/modules/contents/pages/composables/use-page-update-mutate.ts rename to console/console-src/modules/contents/pages/composables/use-page-update-mutate.ts diff --git a/console/src/modules/contents/pages/module.ts b/console/console-src/modules/contents/pages/module.ts similarity index 96% rename from console/src/modules/contents/pages/module.ts rename to console/console-src/modules/contents/pages/module.ts index f88ee1192..7df6f530e 100644 --- a/console/src/modules/contents/pages/module.ts +++ b/console/console-src/modules/contents/pages/module.ts @@ -1,5 +1,5 @@ import { definePlugin } from "@halo-dev/console-shared"; -import BasicLayout from "@/layouts/BasicLayout.vue"; +import BasicLayout from "@console/layouts/BasicLayout.vue"; import SinglePageList from "./SinglePageList.vue"; import DeletedSinglePageList from "./DeletedSinglePageList.vue"; import SinglePageEditor from "./SinglePageEditor.vue"; diff --git a/console/src/modules/contents/pages/widgets/SinglePageStatsWidget.vue b/console/console-src/modules/contents/pages/widgets/SinglePageStatsWidget.vue similarity index 100% rename from console/src/modules/contents/pages/widgets/SinglePageStatsWidget.vue rename to console/console-src/modules/contents/pages/widgets/SinglePageStatsWidget.vue diff --git a/console/src/modules/contents/posts/DeletedPostList.vue b/console/console-src/modules/contents/posts/DeletedPostList.vue similarity index 100% rename from console/src/modules/contents/posts/DeletedPostList.vue rename to console/console-src/modules/contents/posts/DeletedPostList.vue diff --git a/console/src/modules/contents/posts/PostEditor.vue b/console/console-src/modules/contents/posts/PostEditor.vue similarity index 96% rename from console/src/modules/contents/posts/PostEditor.vue rename to console/console-src/modules/contents/posts/PostEditor.vue index 3ec956ba9..f9f352367 100644 --- a/console/src/modules/contents/posts/PostEditor.vue +++ b/console/console-src/modules/contents/posts/PostEditor.vue @@ -27,8 +27,8 @@ import { apiClient } from "@/utils/api-client"; import { useRouteQuery } from "@vueuse/router"; import { useRouter } from "vue-router"; import { randomUUID } from "@/utils/id"; -import { useContentCache } from "@/composables/use-content-cache"; -import { useEditorExtensionPoints } from "@/composables/use-editor-extension-points"; +import { useContentCache } from "@console/composables/use-content-cache"; +import { useEditorExtensionPoints } from "@console/composables/use-editor-extension-points"; import type { EditorProvider } from "@halo-dev/console-shared"; import { useLocalStorage } from "@vueuse/core"; import EditorProviderSelector from "@/components/dropdown-selector/EditorProviderSelector.vue"; @@ -36,9 +36,9 @@ import { useI18n } from "vue-i18n"; import UrlPreviewModal from "@/components/preview/UrlPreviewModal.vue"; import { usePostUpdateMutate } from "./composables/use-post-update-mutate"; import { contentAnnotations } from "@/constants/annotations"; -import { useAutoSaveContent } from "@/composables/use-auto-save-content"; -import { useContentSnapshot } from "@/composables/use-content-snapshot"; -import { useSaveKeybinding } from "@/composables/use-save-keybinding"; +import { useAutoSaveContent } from "@console/composables/use-auto-save-content"; +import { useContentSnapshot } from "@console/composables/use-content-snapshot"; +import { useSaveKeybinding } from "@console/composables/use-save-keybinding"; const router = useRouter(); const { t } = useI18n(); diff --git a/console/src/modules/contents/posts/PostList.vue b/console/console-src/modules/contents/posts/PostList.vue similarity index 100% rename from console/src/modules/contents/posts/PostList.vue rename to console/console-src/modules/contents/posts/PostList.vue diff --git a/console/src/modules/contents/posts/categories/CategoryList.vue b/console/console-src/modules/contents/posts/categories/CategoryList.vue similarity index 100% rename from console/src/modules/contents/posts/categories/CategoryList.vue rename to console/console-src/modules/contents/posts/categories/CategoryList.vue diff --git a/console/src/modules/contents/posts/categories/components/CategoryEditingModal.vue b/console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue similarity index 98% rename from console/src/modules/contents/posts/categories/components/CategoryEditingModal.vue rename to console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue index aac939259..cec6a5167 100644 --- a/console/src/modules/contents/posts/categories/components/CategoryEditingModal.vue +++ b/console/console-src/modules/contents/posts/categories/components/CategoryEditingModal.vue @@ -20,9 +20,9 @@ import type { Category } from "@halo-dev/api-client"; import cloneDeep from "lodash.clonedeep"; import { reset } from "@formkit/core"; import { setFocus } from "@/formkit/utils/focus"; -import { useThemeCustomTemplates } from "@/modules/interface/themes/composables/use-theme"; +import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme"; import AnnotationsForm from "@/components/form/AnnotationsForm.vue"; -import useSlugify from "@/composables/use-slugify"; +import useSlugify from "@console/composables/use-slugify"; import { useI18n } from "vue-i18n"; import { FormType } from "@/types/slug"; diff --git a/console/src/modules/contents/posts/categories/components/CategoryListItem.vue b/console/console-src/modules/contents/posts/categories/components/CategoryListItem.vue similarity index 100% rename from console/src/modules/contents/posts/categories/components/CategoryListItem.vue rename to console/console-src/modules/contents/posts/categories/components/CategoryListItem.vue diff --git a/console/src/modules/contents/posts/categories/components/__tests__/CategoryEditingModal.spec.ts b/console/console-src/modules/contents/posts/categories/components/__tests__/CategoryEditingModal.spec.ts similarity index 100% rename from console/src/modules/contents/posts/categories/components/__tests__/CategoryEditingModal.spec.ts rename to console/console-src/modules/contents/posts/categories/components/__tests__/CategoryEditingModal.spec.ts diff --git a/console/src/modules/contents/posts/categories/composables/use-post-category.ts b/console/console-src/modules/contents/posts/categories/composables/use-post-category.ts similarity index 92% rename from console/src/modules/contents/posts/categories/composables/use-post-category.ts rename to console/console-src/modules/contents/posts/categories/composables/use-post-category.ts index 0e8d90c26..6ac4316ab 100644 --- a/console/src/modules/contents/posts/categories/composables/use-post-category.ts +++ b/console/console-src/modules/contents/posts/categories/composables/use-post-category.ts @@ -2,8 +2,8 @@ import { apiClient } from "@/utils/api-client"; import type { Category } from "@halo-dev/api-client"; import type { Ref } from "vue"; import { ref } from "vue"; -import type { CategoryTree } from "@/modules/contents/posts/categories/utils"; -import { buildCategoriesTree } from "@/modules/contents/posts/categories/utils"; +import type { CategoryTree } from "@console/modules/contents/posts/categories/utils"; +import { buildCategoriesTree } from "@console/modules/contents/posts/categories/utils"; import { Dialog, Toast } from "@halo-dev/components"; import { useQuery } from "@tanstack/vue-query"; import { useI18n } from "vue-i18n"; diff --git a/console/src/modules/contents/posts/categories/utils/index.ts b/console/console-src/modules/contents/posts/categories/utils/index.ts similarity index 100% rename from console/src/modules/contents/posts/categories/utils/index.ts rename to console/console-src/modules/contents/posts/categories/utils/index.ts diff --git a/console/src/modules/contents/posts/components/PostListItem.vue b/console/console-src/modules/contents/posts/components/PostListItem.vue similarity index 96% rename from console/src/modules/contents/posts/components/PostListItem.vue rename to console/console-src/modules/contents/posts/components/PostListItem.vue index 16b7d6715..ea64ce3ae 100644 --- a/console/src/modules/contents/posts/components/PostListItem.vue +++ b/console/console-src/modules/contents/posts/components/PostListItem.vue @@ -16,8 +16,8 @@ import { useQueryClient } from "@tanstack/vue-query"; import type { Ref } from "vue"; import { computed, toRefs, markRaw, ref, inject } from "vue"; import { useRouter } from "vue-router"; -import { useEntityFieldItemExtensionPoint } from "@/composables/use-entity-extension-points"; -import { useOperationItemExtensionPoint } from "@/composables/use-operation-extension-points"; +import { useEntityFieldItemExtensionPoint } from "@console/composables/use-entity-extension-points"; +import { useOperationItemExtensionPoint } from "@console/composables/use-operation-extension-points"; import EntityDropdownItems from "@/components/entity/EntityDropdownItems.vue"; import type { EntityFieldItem, OperationItem } from "@halo-dev/console-shared"; import TitleField from "./entity-fields/TitleField.vue"; diff --git a/console/src/modules/contents/posts/components/PostSettingModal.vue b/console/console-src/modules/contents/posts/components/PostSettingModal.vue similarity index 98% rename from console/src/modules/contents/posts/components/PostSettingModal.vue rename to console/console-src/modules/contents/posts/components/PostSettingModal.vue index a7f37fa9d..1af6215cb 100644 --- a/console/src/modules/contents/posts/components/PostSettingModal.vue +++ b/console/console-src/modules/contents/posts/components/PostSettingModal.vue @@ -10,13 +10,13 @@ import { computed, nextTick, ref, watchEffect } from "vue"; import type { Post } from "@halo-dev/api-client"; import cloneDeep from "lodash.clonedeep"; import { apiClient } from "@/utils/api-client"; -import { useThemeCustomTemplates } from "@/modules/interface/themes/composables/use-theme"; +import { useThemeCustomTemplates } from "@console/modules/interface/themes/composables/use-theme"; import { postLabels } from "@/constants/labels"; import { randomUUID } from "@/utils/id"; import { toDatetimeLocal, toISOString } from "@/utils/date"; import AnnotationsForm from "@/components/form/AnnotationsForm.vue"; import { submitForm } from "@formkit/core"; -import useSlugify from "@/composables/use-slugify"; +import useSlugify from "@console/composables/use-slugify"; import { useI18n } from "vue-i18n"; import { usePostUpdateMutate } from "../composables/use-post-update-mutate"; import { FormType } from "@/types/slug"; diff --git a/console/src/modules/contents/posts/components/__tests__/PostSettingModal.spec.ts b/console/console-src/modules/contents/posts/components/__tests__/PostSettingModal.spec.ts similarity index 100% rename from console/src/modules/contents/posts/components/__tests__/PostSettingModal.spec.ts rename to console/console-src/modules/contents/posts/components/__tests__/PostSettingModal.spec.ts diff --git a/console/src/modules/contents/posts/components/entity-fields/ContributorsField.vue b/console/console-src/modules/contents/posts/components/entity-fields/ContributorsField.vue similarity index 80% rename from console/src/modules/contents/posts/components/entity-fields/ContributorsField.vue rename to console/console-src/modules/contents/posts/components/entity-fields/ContributorsField.vue index 148ce8f9a..87b609032 100644 --- a/console/src/modules/contents/posts/components/entity-fields/ContributorsField.vue +++ b/console/console-src/modules/contents/posts/components/entity-fields/ContributorsField.vue @@ -1,7 +1,7 @@ diff --git a/console/src/modules/system/users/widgets/UserStatsWidget.vue b/console/console-src/modules/system/users/widgets/UserStatsWidget.vue similarity index 100% rename from console/src/modules/system/users/widgets/UserStatsWidget.vue rename to console/console-src/modules/system/users/widgets/UserStatsWidget.vue diff --git a/console/src/router/guards/auth-check.ts b/console/console-src/router/guards/auth-check.ts similarity index 100% rename from console/src/router/guards/auth-check.ts rename to console/console-src/router/guards/auth-check.ts diff --git a/console/src/router/guards/check-states.ts b/console/console-src/router/guards/check-states.ts similarity index 100% rename from console/src/router/guards/check-states.ts rename to console/console-src/router/guards/check-states.ts diff --git a/console/src/router/guards/permission.ts b/console/console-src/router/guards/permission.ts similarity index 100% rename from console/src/router/guards/permission.ts rename to console/console-src/router/guards/permission.ts diff --git a/console/src/router/index.ts b/console/console-src/router/index.ts similarity index 92% rename from console/src/router/index.ts rename to console/console-src/router/index.ts index 20d397cb0..50ad60ae0 100644 --- a/console/src/router/index.ts +++ b/console/console-src/router/index.ts @@ -4,7 +4,7 @@ import { type RouteLocationNormalized, type RouteLocationNormalizedLoaded, } from "vue-router"; -import routesConfig from "@/router/routes.config"; +import routesConfig from "@console/router/routes.config"; import { setupPermissionGuard } from "./guards/permission"; import { setupCheckStatesGuard } from "./guards/check-states"; import { setupAuthCheckGuard } from "./guards/auth-check"; diff --git a/console/src/router/routes.config.ts b/console/console-src/router/routes.config.ts similarity index 78% rename from console/src/router/routes.config.ts rename to console/console-src/router/routes.config.ts index 18704b792..9d0c755a3 100644 --- a/console/src/router/routes.config.ts +++ b/console/console-src/router/routes.config.ts @@ -1,11 +1,11 @@ import type { RouteRecordRaw } from "vue-router"; -import NotFound from "@/views/exceptions/NotFound.vue"; -import Forbidden from "@/views/exceptions/Forbidden.vue"; -import BasicLayout from "@/layouts/BasicLayout.vue"; -import Setup from "@/views/system/Setup.vue"; -import Redirect from "@/views/system/Redirect.vue"; +import NotFound from "@console/views/exceptions/NotFound.vue"; +import Forbidden from "@console/views/exceptions/Forbidden.vue"; +import BasicLayout from "@console/layouts/BasicLayout.vue"; +import Setup from "@console/views/system/Setup.vue"; +import Redirect from "@console/views/system/Redirect.vue"; import type { MenuGroupType } from "@halo-dev/console-shared"; -import SetupInitialData from "@/views/system/SetupInitialData.vue"; +import SetupInitialData from "@console/views/system/SetupInitialData.vue"; export const routes: Array = [ { diff --git a/console/src/stores/system-configmap.ts b/console/console-src/stores/system-configmap.ts similarity index 100% rename from console/src/stores/system-configmap.ts rename to console/console-src/stores/system-configmap.ts diff --git a/console/src/stores/theme.ts b/console/console-src/stores/theme.ts similarity index 100% rename from console/src/stores/theme.ts rename to console/console-src/stores/theme.ts diff --git a/console/src/styles/index.css b/console/console-src/styles/index.css similarity index 100% rename from console/src/styles/index.css rename to console/console-src/styles/index.css diff --git a/console/src/styles/tailwind.css b/console/console-src/styles/tailwind.css similarity index 100% rename from console/src/styles/tailwind.css rename to console/console-src/styles/tailwind.css diff --git a/console/src/views/exceptions/Forbidden.vue b/console/console-src/views/exceptions/Forbidden.vue similarity index 100% rename from console/src/views/exceptions/Forbidden.vue rename to console/console-src/views/exceptions/Forbidden.vue diff --git a/console/src/views/exceptions/NotFound.vue b/console/console-src/views/exceptions/NotFound.vue similarity index 100% rename from console/src/views/exceptions/NotFound.vue rename to console/console-src/views/exceptions/NotFound.vue diff --git a/console/src/views/exceptions/__tests__/NotFound.spec.ts b/console/console-src/views/exceptions/__tests__/NotFound.spec.ts similarity index 100% rename from console/src/views/exceptions/__tests__/NotFound.spec.ts rename to console/console-src/views/exceptions/__tests__/NotFound.spec.ts diff --git a/console/src/views/exceptions/components/Exception.vue b/console/console-src/views/exceptions/components/Exception.vue similarity index 100% rename from console/src/views/exceptions/components/Exception.vue rename to console/console-src/views/exceptions/components/Exception.vue diff --git a/console/src/views/system/Redirect.vue b/console/console-src/views/system/Redirect.vue similarity index 100% rename from console/src/views/system/Redirect.vue rename to console/console-src/views/system/Redirect.vue diff --git a/console/src/views/system/Setup.vue b/console/console-src/views/system/Setup.vue similarity index 100% rename from console/src/views/system/Setup.vue rename to console/console-src/views/system/Setup.vue diff --git a/console/src/views/system/SetupInitialData.vue b/console/console-src/views/system/SetupInitialData.vue similarity index 100% rename from console/src/views/system/SetupInitialData.vue rename to console/console-src/views/system/SetupInitialData.vue diff --git a/console/src/views/system/setup-data/category.json b/console/console-src/views/system/setup-data/category.json similarity index 100% rename from console/src/views/system/setup-data/category.json rename to console/console-src/views/system/setup-data/category.json diff --git a/console/src/views/system/setup-data/menu-items.json b/console/console-src/views/system/setup-data/menu-items.json similarity index 100% rename from console/src/views/system/setup-data/menu-items.json rename to console/console-src/views/system/setup-data/menu-items.json diff --git a/console/src/views/system/setup-data/menu.json b/console/console-src/views/system/setup-data/menu.json similarity index 100% rename from console/src/views/system/setup-data/menu.json rename to console/console-src/views/system/setup-data/menu.json diff --git a/console/src/views/system/setup-data/post.json b/console/console-src/views/system/setup-data/post.json similarity index 100% rename from console/src/views/system/setup-data/post.json rename to console/console-src/views/system/setup-data/post.json diff --git a/console/src/views/system/setup-data/singlePage.json b/console/console-src/views/system/setup-data/singlePage.json similarity index 100% rename from console/src/views/system/setup-data/singlePage.json rename to console/console-src/views/system/setup-data/singlePage.json diff --git a/console/src/views/system/setup-data/tag.json b/console/console-src/views/system/setup-data/tag.json similarity index 100% rename from console/src/views/system/setup-data/tag.json rename to console/console-src/views/system/setup-data/tag.json diff --git a/console/docs/project-structure/README.md b/console/docs/project-structure/README.md new file mode 100644 index 000000000..63984b893 --- /dev/null +++ b/console/docs/project-structure/README.md @@ -0,0 +1,61 @@ +# 项目结构 + +此目录为 Halo 前端项目的根目录,包含 Console 和 User Center 两部分。 + +## 名词解释 + +- Console:管理控制台,主要包含内容管理、系统管理、插件、主题等面向管理员的功能。 +- User Center:用户中心,主要面向单个用户。 + +## 目录结构 + +```bash +├── console-src # Console 部分的源码 +│ ├── composables +│ ├── layouts +│ ├── modules +│ ├── router +│ ├── stores +│ ├── styles +│ ├── views +│ ├── App.vue +│ └── main.ts +├── packages # 公共库,会在 Halo 发布版本的时候发布到 npmjs.com +│ ├── api-client # 根据 OpenAPI 生成的 API 客户端 +│ ├── components # 基础组件库 +│ └── shared # 共享库,主要提供给插件使用 +├── src # Console 和 User Center 共享的源码 +│ ├── assets +│ ├── components +│ ├── constants +│ ├── formkit +│ ├── locales +│ ├── setup +│ ├── stores +│ ├── types +│ ├── utils +│ └── vite +├── uc-src # User Center 部分的源码 +│ ├── router +│ ├── App.vue +│ └── main.ts +├── env.d.ts +├── index.html +├── package.json +├── pnpm-lock.yaml +├── pnpm-workspace.yaml +├── postcss.config.js +├── prettier.config.js +├── tailwind.config.js +├── tsconfig.app.json +├── tsconfig.json +├── tsconfig.node.json +├── tsconfig.vitest.json +├── vite.config.ts # Console 的 Vite 配置,使用 `--config` 指定 +├── vite.uc.config.ts # User Center 的 Vite 配置,使用 `--config` 指定 +└── vitest.config.ts +``` + +可以注意到 Console 和 User Center 仅仅只是使用了目录和 Vite 配置进行区分,本质上还是同一个项目,启动 Dev Server 的时候会同时启动两个 Vite 服务,路径分别为 `/console` 和 `/uc`。 + +同时,在构建时,会将 Console 和 User Center 两部分分别构建为两个独立的项目,构建后的文件会分别放在后端的 `application/src/main/resources/console` 和 `application/src/main/resources/uc` 目录下,最终通过 Halo 本身进行托管。 diff --git a/console/docs/routes-generation/README.md b/console/docs/routes-generation/README.md index cbec57be5..966c2ea25 100644 --- a/console/docs/routes-generation/README.md +++ b/console/docs/routes-generation/README.md @@ -15,7 +15,7 @@ ```ts import { definePlugin } from "@halo-dev/console-shared"; -import BasicLayout from "@/layouts/BasicLayout.vue"; +import BasicLayout from "@console/layouts/BasicLayout.vue"; import AttachmentList from "./AttachmentList.vue"; import AttachmentSelectorModal from "./components/AttachmentSelectorModal.vue"; import { IconFolder } from "@halo-dev/components"; diff --git a/console/src/components/dropdown-selector/EditorProviderSelector.vue b/console/src/components/dropdown-selector/EditorProviderSelector.vue index 12b6dbc00..733ce07c2 100644 --- a/console/src/components/dropdown-selector/EditorProviderSelector.vue +++ b/console/src/components/dropdown-selector/EditorProviderSelector.vue @@ -1,5 +1,5 @@