fix: use identityUuid (camelCase) for person data
This commit is contained in:
@@ -22,10 +22,10 @@
|
||||
<div class="ms-ppl-section-title">已知人物:</div>
|
||||
</div>
|
||||
<div class="ms-ppl-face-grid">
|
||||
<div v-for="p in confirmedPeople" :key="p.identity_uuid" class="ms-ppl-face-card" @click="selectPerson(p)" @contextmenu.prevent="showContextMenu($event, p)">
|
||||
<div v-for="p in confirmedPeople" :key="p.identityUuid" class="ms-ppl-face-card" @click="selectPerson(p)" @contextmenu.prevent="showContextMenu($event, p)">
|
||||
<div class="ms-ppl-face-img-wrap">
|
||||
<img v-if="profiles[p.identity_uuid]" :src="profiles[p.identity_uuid]" alt="" @vue:mounted="loadProfile(p.identity_uuid)">
|
||||
<svg v-else class="ms-silhouette" @vue:mounted="loadProfile(p.identity_uuid)" viewBox="0 0 120 120" fill="none">
|
||||
<img v-if="profiles[p.identityUuid]" :src="profiles[p.identityUuid]" alt="" @vue:mounted="loadProfile(p.identityUuid)">
|
||||
<svg v-else class="ms-silhouette" @vue:mounted="loadProfile(p.identityUuid)" viewBox="0 0 120 120" fill="none">
|
||||
<circle cx="60" cy="45" r="25" fill="#d1d5db"/>
|
||||
<ellipse cx="60" cy="105" rx="40" ry="25" fill="#d1d5db"/>
|
||||
</svg>
|
||||
@@ -44,10 +44,10 @@
|
||||
<div class="ms-ppl-section-title">待定人物:</div>
|
||||
</div>
|
||||
<div class="ms-ppl-face-grid">
|
||||
<div v-for="p in pendingPeople" :key="p.identity_uuid" class="ms-ppl-face-card" @click="selectPerson(p)" @contextmenu.prevent="showContextMenu($event, p)">
|
||||
<div v-for="p in pendingPeople" :key="p.identityUuid" class="ms-ppl-face-card" @click="selectPerson(p)" @contextmenu.prevent="showContextMenu($event, p)">
|
||||
<div class="ms-ppl-face-img-wrap">
|
||||
<img v-if="profiles[p.identity_uuid]" :src="profiles[p.identity_uuid]" alt="" @vue:mounted="loadProfile(p.identity_uuid)">
|
||||
<svg v-else class="ms-silhouette" @vue:mounted="loadProfile(p.identity_uuid)" viewBox="0 0 120 120" fill="none">
|
||||
<img v-if="profiles[p.identityUuid]" :src="profiles[p.identityUuid]" alt="" @vue:mounted="loadProfile(p.identityUuid)">
|
||||
<svg v-else class="ms-silhouette" @vue:mounted="loadProfile(p.identityUuid)" viewBox="0 0 120 120" fill="none">
|
||||
<circle cx="60" cy="45" r="25" fill="#d1d5db"/>
|
||||
<ellipse cx="60" cy="105" rx="40" ry="25" fill="#d1d5db"/>
|
||||
</svg>
|
||||
@@ -72,10 +72,10 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ms-ppl-face-grid">
|
||||
<div v-for="p in skippedPeople" :key="p.identity_uuid" class="ms-ppl-face-card skipped-card" @click="selectPerson(p)" @contextmenu.prevent="showContextMenu($event, p)">
|
||||
<div v-for="p in skippedPeople" :key="p.identityUuid" class="ms-ppl-face-card skipped-card" @click="selectPerson(p)" @contextmenu.prevent="showContextMenu($event, p)">
|
||||
<div class="ms-ppl-face-img-wrap">
|
||||
<img v-if="profiles[p.identity_uuid]" :src="profiles[p.identity_uuid]" alt="" @vue:mounted="loadProfile(p.identity_uuid)">
|
||||
<svg v-else class="ms-silhouette" @vue:mounted="loadProfile(p.identity_uuid)" viewBox="0 0 120 120" fill="none">
|
||||
<img v-if="profiles[p.identityUuid]" :src="profiles[p.identityUuid]" alt="" @vue:mounted="loadProfile(p.identityUuid)">
|
||||
<svg v-else class="ms-silhouette" @vue:mounted="loadProfile(p.identityUuid)" viewBox="0 0 120 120" fill="none">
|
||||
<circle cx="60" cy="45" r="25" fill="#d1d5db"/>
|
||||
<ellipse cx="60" cy="105" rx="40" ry="25" fill="#d1d5db"/>
|
||||
</svg>
|
||||
@@ -224,7 +224,13 @@ function onSearch() {
|
||||
|
||||
async function loadProfile(uuid: string) {
|
||||
if (profiles.value[uuid]) return
|
||||
try { profiles.value[uuid] = await invoke('get_identity_profile', { uuid }) } catch {}
|
||||
try {
|
||||
const result: string = await invoke('get_identity_profile', { uuid })
|
||||
console.log('Profile loaded for:', uuid, result ? 'success' : 'empty')
|
||||
profiles.value[uuid] = result
|
||||
} catch (e) {
|
||||
console.error('Profile load failed for:', uuid, e)
|
||||
}
|
||||
}
|
||||
|
||||
async function loadCandidateThumb(uuid: string) {
|
||||
@@ -233,7 +239,10 @@ async function loadCandidateThumb(uuid: string) {
|
||||
}
|
||||
|
||||
function selectPerson(p: any) {
|
||||
router.push({ name: 'PersonDetail', params: { uuid: p.identity_uuid } })
|
||||
const uuid = p.identityUuid || p.identityUuid
|
||||
console.log('selectPerson called:', uuid, p.name)
|
||||
router.push({ name: 'PersonDetail', params: { uuid } })
|
||||
.catch(e => console.error('Router push failed:', e))
|
||||
}
|
||||
|
||||
async function toggleStar() {
|
||||
@@ -247,7 +256,7 @@ async function confirmDelete() {
|
||||
if (!confirm(`Delete "${selected.value.name}"?`)) return
|
||||
try {
|
||||
await invoke('delete_identity', { uuid: selected.value.identity_uuid })
|
||||
people.value = people.value.filter((p: any) => p.identity_uuid !== selected.value.identity_uuid)
|
||||
people.value = people.value.filter((p: any) => p.identityUuid !== selected.value.identity_uuid)
|
||||
selected.value = null
|
||||
} catch (e) { console.error('Failed to delete:', e) }
|
||||
}
|
||||
@@ -273,7 +282,7 @@ async function confirmMerge() {
|
||||
try {
|
||||
await invoke('merge_identities', { uuid: selected.value.identity_uuid, intoUuid: mergeTarget.value })
|
||||
showMerge.value = false
|
||||
people.value = people.value.filter((p: any) => p.identity_uuid !== selected.value.identity_uuid)
|
||||
people.value = people.value.filter((p: any) => p.identityUuid !== selected.value.identity_uuid)
|
||||
selected.value = null
|
||||
} catch (e) { console.error('Merge failed:', e) }
|
||||
}
|
||||
@@ -304,16 +313,16 @@ function ctxAction(action: string) {
|
||||
ctxMenu.value.show = false
|
||||
if (action === 'star') {
|
||||
p.starred = !p.starred
|
||||
const idx = people.value.findIndex((x: any) => x.identity_uuid === p.identity_uuid)
|
||||
const idx = people.value.findIndex((x: any) => x.identity_uuid === p.identityUuid)
|
||||
if (idx >= 0) people.value[idx].starred = p.starred
|
||||
} else if (action === 'skip') {
|
||||
invoke('update_identity_status', { uuid: p.identity_uuid, status: 'skipped' }).then(() => {
|
||||
const idx = people.value.findIndex((x: any) => x.identity_uuid === p.identity_uuid)
|
||||
invoke('update_identity_status', { uuid: p.identityUuid, status: 'skipped' }).then(() => {
|
||||
const idx = people.value.findIndex((x: any) => x.identity_uuid === p.identityUuid)
|
||||
if (idx >= 0) people.value[idx].status = 'skipped'
|
||||
}).catch(e => console.error('Skip failed:', e))
|
||||
} else if (action === 'confirm') {
|
||||
invoke('update_identity_status', { uuid: p.identity_uuid, status: 'confirmed' }).then(() => {
|
||||
const idx = people.value.findIndex((x: any) => x.identity_uuid === p.identity_uuid)
|
||||
invoke('update_identity_status', { uuid: p.identityUuid, status: 'confirmed' }).then(() => {
|
||||
const idx = people.value.findIndex((x: any) => x.identity_uuid === p.identityUuid)
|
||||
if (idx >= 0) people.value[idx].status = 'confirmed'
|
||||
}).catch(e => console.error('Confirm failed:', e))
|
||||
} else if (action === 'rename' || action === 'merge') {
|
||||
|
||||
Reference in New Issue
Block a user