1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- <script lang="ts" setup>
- import defaultAvatar from '@/assets/avatar.jpg';
- import { computed } from 'vue';
- import { useDialog } from 'naive-ui';
- import { useUserStore } from '@/store';
- import { useRouter } from 'vue-router';
- import { SvgIcon } from '@/components/common';
- import { useBasicLayout } from '@/hooks/useBasicLayout';
- const { isMobile } = useBasicLayout();
- const router = useRouter();
- const dialog = useDialog();
- const userStore = useUserStore();
- const user = computed(() => userStore.user);
- async function onLogout() {
- dialog.warning({
- title: '提示',
- content: '你确定注销当前账户吗',
- positiveText: '注销',
- negativeText: '取消',
- onPositiveClick: async () => {
- await userStore.logout();
- userStore.changeIsLogin();
- },
- });
- }
- async function onLogin() {
- userStore.changeIsLogin();
- }
- function onProfile() {
- router.push({ name: 'Profile' });
- }
- </script>
- <template>
- <template v-if="user == null">
- <n-avatar class="cursor-pointer !text-black" round>
- <SvgIcon class="text-2xl" icon="solar:user-broken" />
- </n-avatar>
- <n-button
- :class="isMobile ? '!py-4' : '!py-4'"
- :size="isMobile ? 'tiny' : 'small'"
- block
- class="!rounded-lg"
- secondary
- type="success"
- @click="onLogin()"
- >
- <span class="text-center w-full">登录系统</span>
- </n-button>
- </template>
- <div v-else class="flex w-full flex-col gap-3 mb-2 px-2">
- <div class="flex gap-2 items-center px-2">
- <n-avatar
- :fallback-src="defaultAvatar"
- :src="user.avatar ?? '/avatar.jpg'"
- class="cursor-pointer w-[30px]"
- round
- />
- <n-ellipsis style="max-width: 85px">
- {{ user.username }}
- </n-ellipsis>
- </div>
- <n-button class="!rounded-lg" size="small" tertiary type="info" @click="onProfile()">
- <div class="w-full text-center flex justify-center items-center gap-2">
- <SvgIcon class="text-lg" icon="iconamoon:profile" />
- <span>个人中心</span>
- </div>
- </n-button>
- <n-button class="!rounded-lg" secondary size="small" type="warning" @click="onLogout()">
- <div class="w-full text-center flex justify-center items-center gap-2">
- <SvgIcon class="text-lg" icon="material-symbols:logout" />
- <span>注销账户</span>
- </div>
- </n-button>
- </div>
- </template>
- <style lang="less" scoped></style>
|