mirror of https://github.com/halo-dev/halo
Merge pull request #4864 from halo-dev/feature-user-center
Support user center projectpull/4859/head^2
commit
796ffac55f
|
@ -0,0 +1,7 @@
|
|||
<script lang="ts" setup>
|
||||
import BaseApp from "@/components/base-app/BaseApp.vue";
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<BaseApp />
|
||||
</template>
|
|
@ -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";
|
|
@ -3,29 +3,20 @@ import {
|
|||
IconMore,
|
||||
IconSearch,
|
||||
IconUserSettings,
|
||||
IconLogoutCircleRLine,
|
||||
VTag,
|
||||
VAvatar,
|
||||
Dialog,
|
||||
VDropdown,
|
||||
VDropdownItem,
|
||||
IconAccountCircleLine,
|
||||
} from "@halo-dev/components";
|
||||
import { RoutesMenu } from "@/components/menu/RoutesMenu";
|
||||
import type { MenuGroupType, MenuItemType } from "@halo-dev/console-shared";
|
||||
import IconLogo from "~icons/core/logo?width=5rem&height=2rem";
|
||||
import {
|
||||
RouterView,
|
||||
useRoute,
|
||||
useRouter,
|
||||
type RouteRecordRaw,
|
||||
} from "vue-router";
|
||||
import { onMounted, onUnmounted, reactive, ref } from "vue";
|
||||
import { RouterView, useRoute, useRouter } from "vue-router";
|
||||
import { onMounted, 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 sortBy from "lodash.sortby";
|
||||
import { useRoleStore } from "@/stores/role";
|
||||
import { hasPermission } from "@/utils/permission";
|
||||
import { coreMenuGroups } from "@console/router/constant";
|
||||
import { useUserStore } from "@/stores/user";
|
||||
import { rbacAnnotations } from "@/constants/annotations";
|
||||
import { defineStore, storeToRefs } from "pinia";
|
||||
|
@ -35,6 +26,8 @@ import {
|
|||
type UseOverlayScrollbarsParams,
|
||||
} from "overlayscrollbars-vue";
|
||||
import { isMac } from "@/utils/device";
|
||||
import { useEventListener } from "@vueuse/core";
|
||||
import { useRouteMenuGenerator } from "@/composables/use-route-menu-generator";
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
@ -70,122 +63,15 @@ const handleLogout = () => {
|
|||
|
||||
// Global Search
|
||||
const globalSearchVisible = ref(false);
|
||||
|
||||
const handleGlobalSearchKeybinding = (e: KeyboardEvent) => {
|
||||
useEventListener(document, "keydown", (e: KeyboardEvent) => {
|
||||
const { key, ctrlKey, metaKey } = e;
|
||||
if (key === "k" && ((ctrlKey && !isMac) || metaKey)) {
|
||||
globalSearchVisible.value = true;
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
document.addEventListener("keydown", handleGlobalSearchKeybinding);
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
document.removeEventListener("keydown", handleGlobalSearchKeybinding);
|
||||
});
|
||||
|
||||
// Generate menus by routes
|
||||
const menus = ref<MenuGroupType[]>([] as MenuGroupType[]);
|
||||
const minimenus = ref<MenuItemType[]>([] as MenuItemType[]);
|
||||
|
||||
const roleStore = useRoleStore();
|
||||
const { uiPermissions } = roleStore.permissions;
|
||||
|
||||
const generateMenus = () => {
|
||||
// sort by menu.priority and meta.core
|
||||
const currentRoutes = sortBy(
|
||||
router.getRoutes().filter((route) => {
|
||||
const { meta } = route;
|
||||
if (!meta?.menu) {
|
||||
return false;
|
||||
}
|
||||
if (meta.permissions) {
|
||||
return hasPermission(uiPermissions, meta.permissions as string[], true);
|
||||
}
|
||||
return true;
|
||||
}),
|
||||
[
|
||||
(route: RouteRecordRaw) => !route.meta?.core,
|
||||
(route: RouteRecordRaw) => route.meta?.menu?.priority || 0,
|
||||
]
|
||||
);
|
||||
|
||||
// group by menu.group
|
||||
menus.value = currentRoutes.reduce((acc, route) => {
|
||||
const { menu } = route.meta;
|
||||
if (!menu) {
|
||||
return acc;
|
||||
}
|
||||
const group = acc.find((item) => item.id === menu.group);
|
||||
const childRoute = route.children[0];
|
||||
const childMetaMenu = childRoute?.meta?.menu;
|
||||
|
||||
// only support one level
|
||||
const menuChildren = childMetaMenu
|
||||
? [
|
||||
{
|
||||
name: childMetaMenu.name,
|
||||
path: childRoute.path,
|
||||
icon: childMetaMenu.icon,
|
||||
},
|
||||
]
|
||||
: undefined;
|
||||
if (group) {
|
||||
group.items?.push({
|
||||
name: menu.name,
|
||||
path: route.path,
|
||||
icon: menu.icon,
|
||||
mobile: menu.mobile,
|
||||
children: menuChildren,
|
||||
});
|
||||
} else {
|
||||
const menuGroup = coreMenuGroups.find((item) => item.id === menu.group);
|
||||
let name = "";
|
||||
if (!menuGroup) {
|
||||
name = menu.group;
|
||||
} else if (menuGroup.name) {
|
||||
name = menuGroup.name;
|
||||
}
|
||||
acc.push({
|
||||
id: menuGroup?.id || menu.group,
|
||||
name: name,
|
||||
priority: menuGroup?.priority || 0,
|
||||
items: [
|
||||
{
|
||||
name: menu.name,
|
||||
path: route.path,
|
||||
icon: menu.icon,
|
||||
mobile: menu.mobile,
|
||||
children: menuChildren,
|
||||
},
|
||||
],
|
||||
});
|
||||
}
|
||||
return acc;
|
||||
}, [] as MenuGroupType[]);
|
||||
|
||||
// sort by menu.priority
|
||||
menus.value = sortBy(menus.value, [
|
||||
(menu: MenuGroupType) => {
|
||||
return coreMenuGroups.findIndex((item) => item.id === menu.id) < 0;
|
||||
},
|
||||
(menu: MenuGroupType) => menu.priority || 0,
|
||||
]);
|
||||
|
||||
minimenus.value = menus.value
|
||||
.reduce((acc, group) => {
|
||||
if (group?.items) {
|
||||
acc.push(...group.items);
|
||||
}
|
||||
return acc;
|
||||
}, [] as MenuItemType[])
|
||||
.filter((item) => item.mobile);
|
||||
};
|
||||
|
||||
onMounted(generateMenus);
|
||||
const { menus, minimenus } = useRouteMenuGenerator(coreMenuGroups);
|
||||
|
||||
// aside scroll
|
||||
const navbarScroller = ref();
|
||||
|
@ -230,7 +116,7 @@ onMounted(() => {
|
|||
<aside
|
||||
class="navbar fixed hidden h-full overflow-y-auto md:flex md:flex-col"
|
||||
>
|
||||
<div class="logo flex justify-center pb-7 pt-5">
|
||||
<div class="logo flex justify-center pb-5 pt-5">
|
||||
<a
|
||||
href="/"
|
||||
target="_blank"
|
||||
|
@ -266,12 +152,15 @@ onMounted(() => {
|
|||
<VAvatar
|
||||
:src="currentUser?.spec.avatar"
|
||||
:alt="currentUser?.spec.displayName"
|
||||
size="md"
|
||||
size="sm"
|
||||
circle
|
||||
></VAvatar>
|
||||
</div>
|
||||
<div class="profile-name">
|
||||
<div class="flex text-sm font-medium">
|
||||
<div
|
||||
class="flex text-sm font-medium"
|
||||
:title="currentUser?.spec.displayName"
|
||||
>
|
||||
{{ currentUser?.spec.displayName }}
|
||||
</div>
|
||||
<div v-if="currentRoles?.[0]" class="flex">
|
||||
|
@ -287,35 +176,26 @@ onMounted(() => {
|
|||
</VTag>
|
||||
</div>
|
||||
</div>
|
||||
<VDropdown
|
||||
class="profile-control cursor-pointer rounded p-1 transition-all hover:bg-gray-100"
|
||||
>
|
||||
<IconMore />
|
||||
<template #popper>
|
||||
<VDropdownItem
|
||||
@click="
|
||||
$router.push({
|
||||
name: 'UserDetail',
|
||||
params: { name: '-' },
|
||||
})
|
||||
"
|
||||
>
|
||||
{{ $t("core.sidebar.operations.profile.button") }}
|
||||
</VDropdownItem>
|
||||
<VDropdownItem
|
||||
@click="
|
||||
$router.push({
|
||||
name: 'UserNotifications',
|
||||
})
|
||||
"
|
||||
>
|
||||
{{ $t("core.sidebar.operations.notifications.button") }}
|
||||
</VDropdownItem>
|
||||
<VDropdownItem @click="handleLogout">
|
||||
{{ $t("core.sidebar.operations.logout.button") }}
|
||||
</VDropdownItem>
|
||||
</template>
|
||||
</VDropdown>
|
||||
|
||||
<div class="flex items-center gap-1">
|
||||
<a
|
||||
v-tooltip="'个人中心'"
|
||||
class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100"
|
||||
href="/uc"
|
||||
>
|
||||
<IconAccountCircleLine
|
||||
class="h-5 w-5 text-gray-600 group-hover:text-gray-900"
|
||||
/>
|
||||
</a>
|
||||
<div
|
||||
class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100"
|
||||
@click="handleLogout"
|
||||
>
|
||||
<IconLogoutCircleRLine
|
||||
class="h-5 w-5 text-gray-600 group-hover:text-gray-900"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
@ -438,11 +318,8 @@ onMounted(() => {
|
|||
|
||||
.profile-name {
|
||||
@apply flex-1
|
||||
self-center;
|
||||
}
|
||||
|
||||
.profile-control {
|
||||
@apply self-center;
|
||||
self-center
|
||||
overflow-hidden;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,18 +5,21 @@ 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";
|
||||
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 "./stores/theme";
|
||||
import { useUserStore } from "./stores/user";
|
||||
import { useSystemConfigMapStore } from "./stores/system-configmap";
|
||||
import { setupVueQuery } from "./setup/setupVueQuery";
|
||||
import { useGlobalInfoStore } from "./stores/global-info";
|
||||
import { setupCoreModules, setupPluginModules } from "./setup/setupModules";
|
||||
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 "@console/setup/setupModules";
|
||||
|
||||
const app = createApp(App);
|
||||
|
||||
|
@ -66,12 +69,6 @@ async function loadActivatedTheme() {
|
|||
})();
|
||||
|
||||
async function initApp() {
|
||||
// TODO 实验性
|
||||
const theme = localStorage.getItem("theme");
|
||||
if (theme) {
|
||||
document.body.classList.add(theme);
|
||||
}
|
||||
|
||||
try {
|
||||
setupCoreModules(app);
|
||||
|
|
@ -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";
|
|
@ -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,
|
|
@ -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";
|
|
@ -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";
|
|
@ -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();
|
|
@ -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";
|
|
@ -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";
|
|
@ -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();
|
|
@ -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";
|
||||
|
|
@ -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";
|
|
@ -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";
|
|
@ -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";
|
|
@ -1,7 +1,7 @@
|
|||
<script lang="ts" setup>
|
||||
import { VEntityField } from "@halo-dev/components";
|
||||
import type { ListedPost } from "@halo-dev/api-client";
|
||||
import ContributorList from "@/modules/contents/_components/ContributorList.vue";
|
||||
import ContributorList from "@console/modules/contents/_components/ContributorList.vue";
|
||||
|
||||
withDefaults(
|
||||
defineProps<{
|
|
@ -1,6 +1,6 @@
|
|||
import { definePlugin } from "@halo-dev/console-shared";
|
||||
import BasicLayout from "@/layouts/BasicLayout.vue";
|
||||
import BlankLayout from "@/layouts/BlankLayout.vue";
|
||||
import BasicLayout from "@console/layouts/BasicLayout.vue";
|
||||
import BlankLayout from "@console/layouts/BlankLayout.vue";
|
||||
import { IconBookRead } from "@halo-dev/components";
|
||||
import PostList from "./PostList.vue";
|
||||
import DeletedPostList from "./DeletedPostList.vue";
|
|
@ -23,7 +23,7 @@ import cloneDeep from "lodash.clonedeep";
|
|||
import { reset } from "@formkit/core";
|
||||
import { setFocus } from "@/formkit/utils/focus";
|
||||
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";
|
||||
|
|
@ -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 Dashboard from "./Dashboard.vue";
|
||||
import { IconDashboard } from "@halo-dev/components";
|
||||
|
|
@ -11,13 +11,13 @@ import {
|
|||
IconSearch,
|
||||
IconDatabase2Line,
|
||||
VCard,
|
||||
IconUserLine,
|
||||
IconAccountCircleLine,
|
||||
Dialog,
|
||||
Toast,
|
||||
} from "@halo-dev/components";
|
||||
import { markRaw, ref, type Component } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import ThemePreviewModal from "@/modules/interface/themes/components/preview/ThemePreviewModal.vue";
|
||||
import ThemePreviewModal from "@console/modules/interface/themes/components/preview/ThemePreviewModal.vue";
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { OverlayScrollbarsComponent } from "overlayscrollbars-vue";
|
||||
|
@ -37,15 +37,12 @@ const { t } = useI18n();
|
|||
|
||||
const actions: Action[] = [
|
||||
{
|
||||
icon: markRaw(IconUserLine),
|
||||
icon: markRaw(IconAccountCircleLine),
|
||||
title: t(
|
||||
"core.dashboard.widgets.presets.quicklink.actions.user_profile.title"
|
||||
"core.dashboard.widgets.presets.quicklink.actions.user_center.title"
|
||||
),
|
||||
action: () => {
|
||||
router.push({
|
||||
name: "UserDetail",
|
||||
params: { name: "-" },
|
||||
});
|
||||
window.location.href = "/uc/profile";
|
||||
},
|
||||
},
|
||||
{
|
|
@ -9,7 +9,7 @@ import {
|
|||
} from "@halo-dev/components";
|
||||
import Draggable from "vuedraggable";
|
||||
import { ref } from "vue";
|
||||
import type { MenuTreeItem } from "@/modules/interface/menus/utils";
|
||||
import type { MenuTreeItem } from "@console/modules/interface/menus/utils";
|
||||
import { usePermission } from "@/utils/permission";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
|
@ -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 Menus from "./Menus.vue";
|
||||
import { IconListSettings } from "@halo-dev/components";
|
||||
import { markRaw } from "vue";
|
|
@ -11,7 +11,7 @@ import type { ConfigMap, Setting, Theme } from "@halo-dev/api-client";
|
|||
|
||||
// hooks
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import { useSettingFormConvert } from "@/composables/use-setting-form";
|
||||
import { useSettingFormConvert } from "@console/composables/use-setting-form";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { useQuery, useQueryClient } from "@tanstack/vue-query";
|
||||
|
|
@ -16,7 +16,7 @@ import { useThemeLifeCycle } from "../composables/use-theme";
|
|||
import { usePermission } from "@/utils/permission";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { useQueryClient } from "@tanstack/vue-query";
|
||||
import { useOperationItemExtensionPoint } from "@/composables/use-operation-extension-points";
|
||||
import { useOperationItemExtensionPoint } from "@console/composables/use-operation-extension-points";
|
||||
import { markRaw } from "vue";
|
||||
import UninstallOperationItem from "./operation/UninstallOperationItem.vue";
|
||||
import { computed } from "vue";
|
|
@ -12,7 +12,7 @@ import { ref, inject, type Ref } from "vue";
|
|||
import type { Theme } from "@halo-dev/api-client";
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import { useQuery } from "@tanstack/vue-query";
|
||||
import { useThemeStore } from "@/stores/theme";
|
||||
import { useThemeStore } from "@console/stores/theme";
|
||||
|
||||
const themeStore = useThemeStore();
|
||||
|
|
@ -10,7 +10,7 @@ import { useI18n } from "vue-i18n";
|
|||
import { inject } from "vue";
|
||||
import type { Ref } from "vue";
|
||||
import { ref } from "vue";
|
||||
import { useThemeStore } from "@/stores/theme";
|
||||
import { useThemeStore } from "@console/stores/theme";
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import UppyUpload from "@/components/upload/UppyUpload.vue";
|
||||
|
|
@ -7,7 +7,7 @@ import { inject } from "vue";
|
|||
import { ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import type { ThemeInstallationErrorResponse } from "../../types";
|
||||
import { useThemeStore } from "@/stores/theme";
|
||||
import { useThemeStore } from "@console/stores/theme";
|
||||
import { THEME_ALREADY_EXISTS_TYPE } from "../../constants";
|
||||
import { useRouteQuery } from "@vueuse/router";
|
||||
import { onMounted } from "vue";
|
|
@ -1,7 +1,7 @@
|
|||
<script lang="ts" setup>
|
||||
import ThemePreviewListItem from "./ThemePreviewListItem.vue";
|
||||
import { useSettingFormConvert } from "@/composables/use-setting-form";
|
||||
import { useThemeStore } from "@/stores/theme";
|
||||
import { useSettingFormConvert } from "@console/composables/use-setting-form";
|
||||
import { useThemeStore } from "@console/stores/theme";
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import type {
|
||||
ConfigMap,
|
|
@ -3,7 +3,7 @@ import { computed, ref } from "vue";
|
|||
import type { Theme } from "@halo-dev/api-client";
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import { Dialog, Toast } from "@halo-dev/components";
|
||||
import { useThemeStore } from "@/stores/theme";
|
||||
import { useThemeStore } from "@console/stores/theme";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
|
@ -10,7 +10,7 @@ import cloneDeep from "lodash.clonedeep";
|
|||
// hooks
|
||||
import { useThemeLifeCycle } from "../composables/use-theme";
|
||||
// types
|
||||
import BasicLayout from "@/layouts/BasicLayout.vue";
|
||||
import BasicLayout from "@console/layouts/BasicLayout.vue";
|
||||
|
||||
// components
|
||||
import {
|
||||
|
@ -31,7 +31,7 @@ import ThemeListModal from "../components/ThemeListModal.vue";
|
|||
import ThemePreviewModal from "../components/preview/ThemePreviewModal.vue";
|
||||
import type { Setting, SettingForm, Theme } from "@halo-dev/api-client";
|
||||
import { usePermission } from "@/utils/permission";
|
||||
import { useThemeStore } from "@/stores/theme";
|
||||
import { useThemeStore } from "@console/stores/theme";
|
||||
import { storeToRefs } from "pinia";
|
||||
import { apiClient } from "@/utils/api-client";
|
||||
import { useI18n } from "vue-i18n";
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue