This commit is contained in:
Megghy
2023-06-24 16:17:27 +08:00
parent 64a6bece5c
commit bd93865c6d
2 changed files with 28 additions and 12 deletions

View File

@@ -2,21 +2,37 @@ import { QueryGetAPI } from '@/api/query'
import { BASE_API, USER_API_URL } from '@/data/constants' import { BASE_API, USER_API_URL } from '@/data/constants'
import { APIRoot, UserInfo } from './api-models' import { APIRoot, UserInfo } from './api-models'
import { ref } from 'vue' import { ref } from 'vue'
import { useRoute } from 'vue-router'
export const USERS = ref<{ [uId: number]: UserInfo }>({}) export const USERS = ref<{ [uId: number]: UserInfo }>({})
export async function useUser(uId: number) { export async function useUserByUId(uId: number) {
if (!USERS.value[uId]) { if (!USERS.value[uId]) {
const result = await GetInfo(uId) const result = await QueryGetAPI<UserInfo>(`${USER_API_URL}info`, {
uId: uId,
})
if (result.code == 200) { if (result.code == 200) {
USERS.value[uId] = result.data USERS.value[uId] = result.data
} }
} }
return USERS.value[uId] return USERS.value[uId]
} }
export async function useUser(id?: number) {
export async function GetInfo(uId: number): Promise<APIRoot<UserInfo>> { try {
return QueryGetAPI<UserInfo>(`${USER_API_URL}info`, { if (!id) {
uId: uId, id = Number(useRoute().params.id)
}
} catch { }
if (id) {
if (!USERS.value[id]) {
const result = await QueryGetAPI<UserInfo>(`${USER_API_URL}info`, {
id: id,
}) })
if (result.code == 200) {
USERS.value[id] = result.data
}
}
return USERS.value[id]
}
} }

View File

@@ -3,14 +3,14 @@
import { NAvatar, NCard, NIcon, NLayout, NLayoutFooter, NLayoutHeader, NLayoutSider, NMenu, NSpace, NText, NButton, NEmpty, NResult, NPageHeader, NSwitch, useOsTheme } from 'naive-ui' import { NAvatar, NCard, NIcon, NLayout, NLayoutFooter, NLayoutHeader, NLayoutSider, NMenu, NSpace, NText, NButton, NEmpty, NResult, NPageHeader, NSwitch, useOsTheme } from 'naive-ui'
import { computed, h, onMounted, ref } from 'vue' import { computed, h, onMounted, ref } from 'vue'
import { BookOutline as BookIcon, PersonOutline as PersonIcon, WineOutline as WineIcon } from '@vicons/ionicons5' import { BookOutline as BookIcon, PersonOutline as PersonIcon, WineOutline as WineIcon } from '@vicons/ionicons5'
import { GetInfo, useUser } from '@/api/user' import { useUser, useUserByUId } from '@/api/user'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import { UserInfo } from '@/api/api-models' import { UserInfo } from '@/api/api-models'
import { FETCH_API } from '@/data/constants' import { FETCH_API } from '@/data/constants'
import { useAccount } from '@/api/account' import { useAccount } from '@/api/account'
const route = useRoute() const route = useRoute()
const uId = computed(() => { const id = computed(() => {
return Number(route.params.id) return Number(route.params.id)
}) })
const theme = useOsTheme() const theme = useOsTheme()
@@ -35,7 +35,7 @@ const menuOptions = [
}, },
] ]
async function RequestBiliUserData() { async function RequestBiliUserData() {
await fetch(FETCH_API + `https://account.bilibili.com/api/member/getCardByMid?mid=${uId.value}`) await fetch(FETCH_API + `https://account.bilibili.com/api/member/getCardByMid?mid=${id.value}`)
.then(async (respone) => { .then(async (respone) => {
let data = await respone.json() let data = await respone.json()
if (data.code == 0) { if (data.code == 0) {
@@ -51,12 +51,12 @@ async function RequestBiliUserData() {
onMounted(async () => { onMounted(async () => {
await RequestBiliUserData() await RequestBiliUserData()
userInfo.value = await useUser(uId.value) userInfo.value = await useUser(id.value)
}) })
</script> </script>
<template> <template>
<NResult v-if="!uId" status="error" title="输入的uId无效" description="再检查检查" /> <NResult v-if="!id" status="error" title="输入的uId无效" description="再检查检查" />
<NResult v-else-if="false" status="error" title="未找到指定 uId 的用户" description="或者是没有进行认证" /> <NResult v-else-if="false" status="error" title="未找到指定 uId 的用户" description="或者是没有进行认证" />
<NLayout v-else style="height: 100vh"> <NLayout v-else style="height: 100vh">
<NLayoutHeader style="height: 50px; padding: 5px 15px 5px 15px"> <NLayoutHeader style="height: 50px; padding: 5px 15px 5px 15px">