Merge pull request #4864 from halo-dev/feature-user-center

Support user center project
pull/4859/head^2
John Niang 2023-11-16 16:51:15 +08:00 committed by GitHub
commit 796ffac55f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
232 changed files with 2299 additions and 668 deletions

View File

@ -0,0 +1,7 @@
<script lang="ts" setup>
import BaseApp from "@/components/base-app/BaseApp.vue";
</script>
<template>
<BaseApp />
</template>

View File

@ -2,7 +2,7 @@
// types // types
import { computed, watch, type ComputedRef, type Ref } from "vue"; import { computed, watch, type ComputedRef, type Ref } from "vue";
import { ref } from "vue"; import { ref } from "vue";
import { apiClient } from "../utils/api-client"; import { apiClient } from "@/utils/api-client";
// libs // libs
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";

View File

@ -3,29 +3,20 @@ import {
IconMore, IconMore,
IconSearch, IconSearch,
IconUserSettings, IconUserSettings,
IconLogoutCircleRLine,
VTag, VTag,
VAvatar, VAvatar,
Dialog, Dialog,
VDropdown, IconAccountCircleLine,
VDropdownItem,
} from "@halo-dev/components"; } from "@halo-dev/components";
import { RoutesMenu } from "@/components/menu/RoutesMenu"; 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 IconLogo from "~icons/core/logo?width=5rem&height=2rem";
import { import { RouterView, useRoute, useRouter } from "vue-router";
RouterView, import { onMounted, reactive, ref } from "vue";
useRoute,
useRouter,
type RouteRecordRaw,
} from "vue-router";
import { onMounted, onUnmounted, reactive, ref } from "vue";
import axios from "axios"; import axios from "axios";
import GlobalSearchModal from "@/components/global-search/GlobalSearchModal.vue"; import GlobalSearchModal from "@/components/global-search/GlobalSearchModal.vue";
import LoginModal from "@/components/login/LoginModal.vue"; import LoginModal from "@/components/login/LoginModal.vue";
import { coreMenuGroups } from "@/router/routes.config"; import { coreMenuGroups } from "@console/router/constant";
import sortBy from "lodash.sortby";
import { useRoleStore } from "@/stores/role";
import { hasPermission } from "@/utils/permission";
import { useUserStore } from "@/stores/user"; import { useUserStore } from "@/stores/user";
import { rbacAnnotations } from "@/constants/annotations"; import { rbacAnnotations } from "@/constants/annotations";
import { defineStore, storeToRefs } from "pinia"; import { defineStore, storeToRefs } from "pinia";
@ -35,6 +26,8 @@ import {
type UseOverlayScrollbarsParams, type UseOverlayScrollbarsParams,
} from "overlayscrollbars-vue"; } from "overlayscrollbars-vue";
import { isMac } from "@/utils/device"; import { isMac } from "@/utils/device";
import { useEventListener } from "@vueuse/core";
import { useRouteMenuGenerator } from "@/composables/use-route-menu-generator";
const route = useRoute(); const route = useRoute();
const router = useRouter(); const router = useRouter();
@ -70,122 +63,15 @@ const handleLogout = () => {
// Global Search // Global Search
const globalSearchVisible = ref(false); const globalSearchVisible = ref(false);
useEventListener(document, "keydown", (e: KeyboardEvent) => {
const handleGlobalSearchKeybinding = (e: KeyboardEvent) => {
const { key, ctrlKey, metaKey } = e; const { key, ctrlKey, metaKey } = e;
if (key === "k" && ((ctrlKey && !isMac) || metaKey)) { if (key === "k" && ((ctrlKey && !isMac) || metaKey)) {
globalSearchVisible.value = true; globalSearchVisible.value = true;
e.preventDefault(); e.preventDefault();
} }
};
onMounted(() => {
document.addEventListener("keydown", handleGlobalSearchKeybinding);
}); });
onUnmounted(() => { const { menus, minimenus } = useRouteMenuGenerator(coreMenuGroups);
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);
// aside scroll // aside scroll
const navbarScroller = ref(); const navbarScroller = ref();
@ -230,7 +116,7 @@ onMounted(() => {
<aside <aside
class="navbar fixed hidden h-full overflow-y-auto md:flex md:flex-col" 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 <a
href="/" href="/"
target="_blank" target="_blank"
@ -266,12 +152,15 @@ onMounted(() => {
<VAvatar <VAvatar
:src="currentUser?.spec.avatar" :src="currentUser?.spec.avatar"
:alt="currentUser?.spec.displayName" :alt="currentUser?.spec.displayName"
size="md" size="sm"
circle circle
></VAvatar> ></VAvatar>
</div> </div>
<div class="profile-name"> <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 }} {{ currentUser?.spec.displayName }}
</div> </div>
<div v-if="currentRoles?.[0]" class="flex"> <div v-if="currentRoles?.[0]" class="flex">
@ -287,35 +176,26 @@ onMounted(() => {
</VTag> </VTag>
</div> </div>
</div> </div>
<VDropdown
class="profile-control cursor-pointer rounded p-1 transition-all hover:bg-gray-100" <div class="flex items-center gap-1">
> <a
<IconMore /> v-tooltip="'个人中心'"
<template #popper> class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100"
<VDropdownItem href="/uc"
@click=" >
$router.push({ <IconAccountCircleLine
name: 'UserDetail', class="h-5 w-5 text-gray-600 group-hover:text-gray-900"
params: { name: '-' }, />
}) </a>
" <div
> class="group inline-block cursor-pointer rounded-full p-1.5 transition-all hover:bg-gray-100"
{{ $t("core.sidebar.operations.profile.button") }} @click="handleLogout"
</VDropdownItem> >
<VDropdownItem <IconLogoutCircleRLine
@click=" class="h-5 w-5 text-gray-600 group-hover:text-gray-900"
$router.push({ />
name: 'UserNotifications', </div>
}) </div>
"
>
{{ $t("core.sidebar.operations.notifications.button") }}
</VDropdownItem>
<VDropdownItem @click="handleLogout">
{{ $t("core.sidebar.operations.logout.button") }}
</VDropdownItem>
</template>
</VDropdown>
</div> </div>
</div> </div>
</aside> </aside>
@ -438,11 +318,8 @@ onMounted(() => {
.profile-name { .profile-name {
@apply flex-1 @apply flex-1
self-center; self-center
} overflow-hidden;
.profile-control {
@apply self-center;
} }
} }
} }

View File

@ -5,18 +5,21 @@ import App from "./App.vue";
import router from "./router"; import router from "./router";
import { apiClient } from "@/utils/api-client"; import { apiClient } from "@/utils/api-client";
// setup // setup
import "./setup/setupStyles"; import "@/setup/setupStyles";
import { setupComponents } from "./setup/setupComponents"; import { setupComponents } from "@/setup/setupComponents";
import { setupI18n, i18n, getBrowserLanguage } from "./locales"; import { setupI18n, i18n, getBrowserLanguage } from "@/locales";
// core modules // core modules
import { hasPermission } from "@/utils/permission"; import { hasPermission } from "@/utils/permission";
import { useRoleStore } from "@/stores/role"; import { useRoleStore } from "@/stores/role";
import { useThemeStore } from "./stores/theme"; import { useThemeStore } from "@console/stores/theme";
import { useUserStore } from "./stores/user"; import { useUserStore } from "@/stores/user";
import { useSystemConfigMapStore } from "./stores/system-configmap"; import { useSystemConfigMapStore } from "@console/stores/system-configmap";
import { setupVueQuery } from "./setup/setupVueQuery"; import { setupVueQuery } from "@/setup/setupVueQuery";
import { useGlobalInfoStore } from "./stores/global-info"; import { useGlobalInfoStore } from "@/stores/global-info";
import { setupCoreModules, setupPluginModules } from "./setup/setupModules"; import {
setupCoreModules,
setupPluginModules,
} from "@console/setup/setupModules";
const app = createApp(App); const app = createApp(App);
@ -66,12 +69,6 @@ async function loadActivatedTheme() {
})(); })();
async function initApp() { async function initApp() {
// TODO 实验性
const theme = localStorage.getItem("theme");
if (theme) {
document.body.classList.add(theme);
}
try { try {
setupCoreModules(app); setupCoreModules(app);

View File

@ -19,7 +19,7 @@ import { useI18n } from "vue-i18n";
import { inject } from "vue"; import { inject } from "vue";
import type { Ref } from "vue"; import type { Ref } from "vue";
import { useQueryClient } from "@tanstack/vue-query"; 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 { toRefs } from "vue";
import type { OperationItem } from "@halo-dev/console-shared"; import type { OperationItem } from "@halo-dev/console-shared";
import EntityDropdownItems from "@/components/entity/EntityDropdownItems.vue"; import EntityDropdownItems from "@/components/entity/EntityDropdownItems.vue";

View File

@ -4,7 +4,7 @@ import SubmitButton from "@/components/button/SubmitButton.vue";
import type { Policy, PolicyTemplate } from "@halo-dev/api-client"; import type { Policy, PolicyTemplate } from "@halo-dev/api-client";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import { computed, ref, toRaw, watch, watchEffect } from "vue"; 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 { apiClient } from "@/utils/api-client";
import { import {
reset, reset,

View File

@ -1,5 +1,5 @@
import { definePlugin } from "@halo-dev/console-shared"; 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 AttachmentList from "./AttachmentList.vue";
import AttachmentSelectorModal from "./components/AttachmentSelectorModal.vue"; import AttachmentSelectorModal from "./components/AttachmentSelectorModal.vue";
import { IconFolder } from "@halo-dev/components"; import { IconFolder } from "@halo-dev/components";

View File

@ -1,5 +1,5 @@
import { definePlugin } from "@halo-dev/console-shared"; 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 { IconMessage } from "@halo-dev/components";
import CommentList from "./CommentList.vue"; import CommentList from "./CommentList.vue";
import CommentStatsWidget from "./widgets/CommentStatsWidget.vue"; import CommentStatsWidget from "./widgets/CommentStatsWidget.vue";

View File

@ -27,8 +27,8 @@ import { useRouteQuery } from "@vueuse/router";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { randomUUID } from "@/utils/id"; import { randomUUID } from "@/utils/id";
import { useContentCache } from "@/composables/use-content-cache"; import { useContentCache } from "@console/composables/use-content-cache";
import { useEditorExtensionPoints } from "@/composables/use-editor-extension-points"; import { useEditorExtensionPoints } from "@console/composables/use-editor-extension-points";
import type { EditorProvider } from "@halo-dev/console-shared"; import type { EditorProvider } from "@halo-dev/console-shared";
import { useLocalStorage } from "@vueuse/core"; import { useLocalStorage } from "@vueuse/core";
import EditorProviderSelector from "@/components/dropdown-selector/EditorProviderSelector.vue"; 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 UrlPreviewModal from "@/components/preview/UrlPreviewModal.vue";
import { contentAnnotations } from "@/constants/annotations"; import { contentAnnotations } from "@/constants/annotations";
import { usePageUpdateMutate } from "./composables/use-page-update-mutate"; import { usePageUpdateMutate } from "./composables/use-page-update-mutate";
import { useAutoSaveContent } from "@/composables/use-auto-save-content"; import { useAutoSaveContent } from "@console/composables/use-auto-save-content";
import { useContentSnapshot } from "@/composables/use-content-snapshot"; import { useContentSnapshot } from "@console/composables/use-content-snapshot";
import { useSaveKeybinding } from "@/composables/use-save-keybinding"; import { useSaveKeybinding } from "@console/composables/use-save-keybinding";
const router = useRouter(); const router = useRouter();
const { t } = useI18n(); const { t } = useI18n();

View File

@ -10,13 +10,13 @@ import { computed, nextTick, ref, watchEffect } from "vue";
import type { SinglePage } from "@halo-dev/api-client"; import type { SinglePage } from "@halo-dev/api-client";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import { apiClient } from "@/utils/api-client"; 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 { singlePageLabels } from "@/constants/labels";
import { randomUUID } from "@/utils/id"; import { randomUUID } from "@/utils/id";
import { toDatetimeLocal, toISOString } from "@/utils/date"; import { toDatetimeLocal, toISOString } from "@/utils/date";
import { submitForm } from "@formkit/core"; import { submitForm } from "@formkit/core";
import AnnotationsForm from "@/components/form/AnnotationsForm.vue"; 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 { useI18n } from "vue-i18n";
import { usePageUpdateMutate } from "../composables/use-page-update-mutate"; import { usePageUpdateMutate } from "../composables/use-page-update-mutate";
import { FormType } from "@/types/slug"; import { FormType } from "@/types/slug";

View File

@ -1,5 +1,5 @@
import { definePlugin } from "@halo-dev/console-shared"; 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 SinglePageList from "./SinglePageList.vue";
import DeletedSinglePageList from "./DeletedSinglePageList.vue"; import DeletedSinglePageList from "./DeletedSinglePageList.vue";
import SinglePageEditor from "./SinglePageEditor.vue"; import SinglePageEditor from "./SinglePageEditor.vue";

View File

@ -27,8 +27,8 @@ import { apiClient } from "@/utils/api-client";
import { useRouteQuery } from "@vueuse/router"; import { useRouteQuery } from "@vueuse/router";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { randomUUID } from "@/utils/id"; import { randomUUID } from "@/utils/id";
import { useContentCache } from "@/composables/use-content-cache"; import { useContentCache } from "@console/composables/use-content-cache";
import { useEditorExtensionPoints } from "@/composables/use-editor-extension-points"; import { useEditorExtensionPoints } from "@console/composables/use-editor-extension-points";
import type { EditorProvider } from "@halo-dev/console-shared"; import type { EditorProvider } from "@halo-dev/console-shared";
import { useLocalStorage } from "@vueuse/core"; import { useLocalStorage } from "@vueuse/core";
import EditorProviderSelector from "@/components/dropdown-selector/EditorProviderSelector.vue"; 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 UrlPreviewModal from "@/components/preview/UrlPreviewModal.vue";
import { usePostUpdateMutate } from "./composables/use-post-update-mutate"; import { usePostUpdateMutate } from "./composables/use-post-update-mutate";
import { contentAnnotations } from "@/constants/annotations"; import { contentAnnotations } from "@/constants/annotations";
import { useAutoSaveContent } from "@/composables/use-auto-save-content"; import { useAutoSaveContent } from "@console/composables/use-auto-save-content";
import { useContentSnapshot } from "@/composables/use-content-snapshot"; import { useContentSnapshot } from "@console/composables/use-content-snapshot";
import { useSaveKeybinding } from "@/composables/use-save-keybinding"; import { useSaveKeybinding } from "@console/composables/use-save-keybinding";
const router = useRouter(); const router = useRouter();
const { t } = useI18n(); const { t } = useI18n();

View File

@ -20,9 +20,9 @@ import type { Category } from "@halo-dev/api-client";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import { reset } from "@formkit/core"; import { reset } from "@formkit/core";
import { setFocus } from "@/formkit/utils/focus"; 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 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 { useI18n } from "vue-i18n";
import { FormType } from "@/types/slug"; import { FormType } from "@/types/slug";

View File

@ -2,8 +2,8 @@ import { apiClient } from "@/utils/api-client";
import type { Category } from "@halo-dev/api-client"; import type { Category } from "@halo-dev/api-client";
import type { Ref } from "vue"; import type { Ref } from "vue";
import { ref } from "vue"; import { ref } from "vue";
import type { CategoryTree } from "@/modules/contents/posts/categories/utils"; import type { CategoryTree } from "@console/modules/contents/posts/categories/utils";
import { buildCategoriesTree } from "@/modules/contents/posts/categories/utils"; import { buildCategoriesTree } from "@console/modules/contents/posts/categories/utils";
import { Dialog, Toast } from "@halo-dev/components"; import { Dialog, Toast } from "@halo-dev/components";
import { useQuery } from "@tanstack/vue-query"; import { useQuery } from "@tanstack/vue-query";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";

View File

@ -16,8 +16,8 @@ import { useQueryClient } from "@tanstack/vue-query";
import type { Ref } from "vue"; import type { Ref } from "vue";
import { computed, toRefs, markRaw, ref, inject } from "vue"; import { computed, toRefs, markRaw, ref, inject } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { useEntityFieldItemExtensionPoint } from "@/composables/use-entity-extension-points"; import { useEntityFieldItemExtensionPoint } from "@console/composables/use-entity-extension-points";
import { useOperationItemExtensionPoint } from "@/composables/use-operation-extension-points"; import { useOperationItemExtensionPoint } from "@console/composables/use-operation-extension-points";
import EntityDropdownItems from "@/components/entity/EntityDropdownItems.vue"; import EntityDropdownItems from "@/components/entity/EntityDropdownItems.vue";
import type { EntityFieldItem, OperationItem } from "@halo-dev/console-shared"; import type { EntityFieldItem, OperationItem } from "@halo-dev/console-shared";
import TitleField from "./entity-fields/TitleField.vue"; import TitleField from "./entity-fields/TitleField.vue";

View File

@ -10,13 +10,13 @@ import { computed, nextTick, ref, watchEffect } from "vue";
import type { Post } from "@halo-dev/api-client"; import type { Post } from "@halo-dev/api-client";
import cloneDeep from "lodash.clonedeep"; import cloneDeep from "lodash.clonedeep";
import { apiClient } from "@/utils/api-client"; 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 { postLabels } from "@/constants/labels";
import { randomUUID } from "@/utils/id"; import { randomUUID } from "@/utils/id";
import { toDatetimeLocal, toISOString } from "@/utils/date"; import { toDatetimeLocal, toISOString } from "@/utils/date";
import AnnotationsForm from "@/components/form/AnnotationsForm.vue"; import AnnotationsForm from "@/components/form/AnnotationsForm.vue";
import { submitForm } from "@formkit/core"; import { submitForm } from "@formkit/core";
import useSlugify from "@/composables/use-slugify"; import useSlugify from "@console/composables/use-slugify";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { usePostUpdateMutate } from "../composables/use-post-update-mutate"; import { usePostUpdateMutate } from "../composables/use-post-update-mutate";
import { FormType } from "@/types/slug"; import { FormType } from "@/types/slug";

View File

@ -1,7 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import { VEntityField } from "@halo-dev/components"; import { VEntityField } from "@halo-dev/components";
import type { ListedPost } from "@halo-dev/api-client"; 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( withDefaults(
defineProps<{ defineProps<{

View File

@ -1,6 +1,6 @@
import { definePlugin } from "@halo-dev/console-shared"; import { definePlugin } from "@halo-dev/console-shared";
import BasicLayout from "@/layouts/BasicLayout.vue"; import BasicLayout from "@console/layouts/BasicLayout.vue";
import BlankLayout from "@/layouts/BlankLayout.vue"; import BlankLayout from "@console/layouts/BlankLayout.vue";
import { IconBookRead } from "@halo-dev/components"; import { IconBookRead } from "@halo-dev/components";
import PostList from "./PostList.vue"; import PostList from "./PostList.vue";
import DeletedPostList from "./DeletedPostList.vue"; import DeletedPostList from "./DeletedPostList.vue";

View File

@ -23,7 +23,7 @@ import cloneDeep from "lodash.clonedeep";
import { reset } from "@formkit/core"; import { reset } from "@formkit/core";
import { setFocus } from "@/formkit/utils/focus"; import { setFocus } from "@/formkit/utils/focus";
import AnnotationsForm from "@/components/form/AnnotationsForm.vue"; 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 { useI18n } from "vue-i18n";
import { FormType } from "@/types/slug"; import { FormType } from "@/types/slug";

View File

@ -1,5 +1,5 @@
import { definePlugin } from "@halo-dev/console-shared"; 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 Dashboard from "./Dashboard.vue";
import { IconDashboard } from "@halo-dev/components"; import { IconDashboard } from "@halo-dev/components";

View File

@ -11,13 +11,13 @@ import {
IconSearch, IconSearch,
IconDatabase2Line, IconDatabase2Line,
VCard, VCard,
IconUserLine, IconAccountCircleLine,
Dialog, Dialog,
Toast, Toast,
} from "@halo-dev/components"; } from "@halo-dev/components";
import { markRaw, ref, type Component } from "vue"; import { markRaw, ref, type Component } from "vue";
import { useRouter } from "vue-router"; 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 { apiClient } from "@/utils/api-client";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { OverlayScrollbarsComponent } from "overlayscrollbars-vue"; import { OverlayScrollbarsComponent } from "overlayscrollbars-vue";
@ -37,15 +37,12 @@ const { t } = useI18n();
const actions: Action[] = [ const actions: Action[] = [
{ {
icon: markRaw(IconUserLine), icon: markRaw(IconAccountCircleLine),
title: t( title: t(
"core.dashboard.widgets.presets.quicklink.actions.user_profile.title" "core.dashboard.widgets.presets.quicklink.actions.user_center.title"
), ),
action: () => { action: () => {
router.push({ window.location.href = "/uc/profile";
name: "UserDetail",
params: { name: "-" },
});
}, },
}, },
{ {

View File

@ -9,7 +9,7 @@ import {
} from "@halo-dev/components"; } from "@halo-dev/components";
import Draggable from "vuedraggable"; import Draggable from "vuedraggable";
import { ref } from "vue"; 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 { usePermission } from "@/utils/permission";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";

View File

@ -1,5 +1,5 @@
import { definePlugin } from "@halo-dev/console-shared"; 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 Menus from "./Menus.vue";
import { IconListSettings } from "@halo-dev/components"; import { IconListSettings } from "@halo-dev/components";
import { markRaw } from "vue"; import { markRaw } from "vue";

View File

@ -11,7 +11,7 @@ import type { ConfigMap, Setting, Theme } from "@halo-dev/api-client";
// hooks // hooks
import { apiClient } from "@/utils/api-client"; 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 { useI18n } from "vue-i18n";
import { useQuery, useQueryClient } from "@tanstack/vue-query"; import { useQuery, useQueryClient } from "@tanstack/vue-query";

View File

@ -16,7 +16,7 @@ import { useThemeLifeCycle } from "../composables/use-theme";
import { usePermission } from "@/utils/permission"; import { usePermission } from "@/utils/permission";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import { useQueryClient } from "@tanstack/vue-query"; 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 { markRaw } from "vue";
import UninstallOperationItem from "./operation/UninstallOperationItem.vue"; import UninstallOperationItem from "./operation/UninstallOperationItem.vue";
import { computed } from "vue"; import { computed } from "vue";

View File

@ -12,7 +12,7 @@ import { ref, inject, type Ref } from "vue";
import type { Theme } from "@halo-dev/api-client"; import type { Theme } from "@halo-dev/api-client";
import { apiClient } from "@/utils/api-client"; import { apiClient } from "@/utils/api-client";
import { useQuery } from "@tanstack/vue-query"; import { useQuery } from "@tanstack/vue-query";
import { useThemeStore } from "@/stores/theme"; import { useThemeStore } from "@console/stores/theme";
const themeStore = useThemeStore(); const themeStore = useThemeStore();

View File

@ -10,7 +10,7 @@ import { useI18n } from "vue-i18n";
import { inject } from "vue"; import { inject } from "vue";
import type { Ref } from "vue"; import type { Ref } from "vue";
import { 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 { apiClient } from "@/utils/api-client";
import UppyUpload from "@/components/upload/UppyUpload.vue"; import UppyUpload from "@/components/upload/UppyUpload.vue";

View File

@ -7,7 +7,7 @@ import { inject } from "vue";
import { ref } from "vue"; import { ref } from "vue";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";
import type { ThemeInstallationErrorResponse } from "../../types"; import type { ThemeInstallationErrorResponse } from "../../types";
import { useThemeStore } from "@/stores/theme"; import { useThemeStore } from "@console/stores/theme";
import { THEME_ALREADY_EXISTS_TYPE } from "../../constants"; import { THEME_ALREADY_EXISTS_TYPE } from "../../constants";
import { useRouteQuery } from "@vueuse/router"; import { useRouteQuery } from "@vueuse/router";
import { onMounted } from "vue"; import { onMounted } from "vue";

View File

@ -1,7 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import ThemePreviewListItem from "./ThemePreviewListItem.vue"; import ThemePreviewListItem from "./ThemePreviewListItem.vue";
import { useSettingFormConvert } from "@/composables/use-setting-form"; import { useSettingFormConvert } from "@console/composables/use-setting-form";
import { useThemeStore } from "@/stores/theme"; import { useThemeStore } from "@console/stores/theme";
import { apiClient } from "@/utils/api-client"; import { apiClient } from "@/utils/api-client";
import type { import type {
ConfigMap, ConfigMap,

View File

@ -3,7 +3,7 @@ import { computed, ref } from "vue";
import type { Theme } from "@halo-dev/api-client"; import type { Theme } from "@halo-dev/api-client";
import { apiClient } from "@/utils/api-client"; import { apiClient } from "@/utils/api-client";
import { Dialog, Toast } from "@halo-dev/components"; import { Dialog, Toast } from "@halo-dev/components";
import { useThemeStore } from "@/stores/theme"; import { useThemeStore } from "@console/stores/theme";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";

View File

@ -10,7 +10,7 @@ import cloneDeep from "lodash.clonedeep";
// hooks // hooks
import { useThemeLifeCycle } from "../composables/use-theme"; import { useThemeLifeCycle } from "../composables/use-theme";
// types // types
import BasicLayout from "@/layouts/BasicLayout.vue"; import BasicLayout from "@console/layouts/BasicLayout.vue";
// components // components
import { import {
@ -31,7 +31,7 @@ import ThemeListModal from "../components/ThemeListModal.vue";
import ThemePreviewModal from "../components/preview/ThemePreviewModal.vue"; import ThemePreviewModal from "../components/preview/ThemePreviewModal.vue";
import type { Setting, SettingForm, Theme } from "@halo-dev/api-client"; import type { Setting, SettingForm, Theme } from "@halo-dev/api-client";
import { usePermission } from "@/utils/permission"; import { usePermission } from "@/utils/permission";
import { useThemeStore } from "@/stores/theme"; import { useThemeStore } from "@console/stores/theme";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { apiClient } from "@/utils/api-client"; import { apiClient } from "@/utils/api-client";
import { useI18n } from "vue-i18n"; import { useI18n } from "vue-i18n";

Some files were not shown because too many files have changed in this diff Show More