diff --git a/src/views/IdentityDetailView.vue b/src/views/IdentityDetailView.vue index 42da4c7..405b833 100644 --- a/src/views/IdentityDetailView.vue +++ b/src/views/IdentityDetailView.vue @@ -115,9 +115,29 @@ const loadDetail = async () => { detail.value = result profile.value = result.profile || {} videos.value = result.videos || [] - } catch (error) { - console.error('Failed to load identity detail:', error) - alert('載入失敗: ' + error) + } catch { + // Fallback: some API servers crash on /api/v1/identity/:uuid + try { + const config = getCurrentConfig() + const result = await httpFetch(`${config.api_base_url}/api/v1/identities?uuid=${identityId.value}&page_size=1`) + const identity = (result.identities || [])[0] + if (identity) { + detail.value = identity + const meta = identity.metadata || {} + profile.value = { + name: identity.name, + character_name: meta.tmdb_character, + aliases: meta.tmdb_aliases, + gender: meta.tmdb_gender === 1 ? 'Female' : meta.tmdb_gender === 2 ? 'Male' : undefined, + age: meta.tmdb_birthday ? `${new Date().getFullYear() - new Date(meta.tmdb_birthday).getFullYear()} yrs` : undefined, + } + videos.value = [] + } else { + throw new Error('Identity not found') + } + } catch (fallbackError) { + console.error('Failed to load identity detail:', fallbackError) + } } finally { loading.value = false }