refactor: remove identity/pending concepts

- identity_uuid → group_uuid
- Remove status: 'pending'
- Remove starred: false
- Keep only: face, FS, face group
This commit is contained in:
2026-07-25 15:51:38 +08:00
parent 464ddd16a9
commit aa25600580

View File

@@ -50,7 +50,7 @@
</template>
</div>
<div class="ms-ppl-face-grid">
<div v-for="c in faceGroups" :key="c.identity_uuid" class="ms-ppl-face-card ms-ppl-cluster-card" :class="{ 'ms-ppl-face-card-selected': isGroupSelected(c) }" @click="batchMode ? toggleGroupSelection(c) : selectCluster(c)" title="View member faces">
<div v-for="c in faceGroups" :key="c.group_uuid" class="ms-ppl-face-card ms-ppl-cluster-card" :class="{ 'ms-ppl-face-card-selected': isGroupSelected(c) }" @click="batchMode ? toggleGroupSelection(c) : selectCluster(c)" title="View member faces">
<div v-if="batchMode" class="ms-ppl-card-checkbox" @click.stop="toggleGroupSelection(c)">
<span v-if="isGroupSelected(c)"></span>
</div>
@@ -283,7 +283,7 @@
<h2 class="ms-ppl-section-title">Select Target Group</h2>
<p class="ms-merge-hint">Choose which group to keep. Other selected groups will be merged into this one.</p>
<div class="ms-merge-grid">
<div v-for="c in mergeCandidateGroups" :key="c.identity_uuid" class="ms-merge-face-card" @click="executeMerge(c.identity_uuid)">
<div v-for="c in mergeCandidateGroups" :key="c.group_uuid" class="ms-merge-face-card" @click="executeMerge(c.group_uuid)">
<div class="ms-merge-face-img">
<img v-if="c.rep_trace && faceThumbsCache[thumbTraceKey(c.rep_trace)]" :src="faceThumbsCache[thumbTraceKey(c.rep_trace)]" alt="">
<svg v-else viewBox="0 0 120 120" fill="none" style="width:100%;height:100%;">
@@ -313,7 +313,7 @@
<hr class="ms-merge-divider">
<div class="ms-merge-grid">
<div v-for="c in faceGroups" :key="c.identity_uuid" class="ms-merge-face-card" @click="moveToGroup(c)">
<div v-for="c in faceGroups" :key="c.group_uuid" class="ms-merge-face-card" @click="moveToGroup(c)">
<div class="ms-merge-face-img">
<img v-if="c.rep_trace && faceThumbsCache[thumbTraceKey(c.rep_trace)]" :src="faceThumbsCache[thumbTraceKey(c.rep_trace)]" alt="">
<svg v-else viewBox="0 0 120 120" fill="none" style="width:100%;height:100%;">
@@ -537,7 +537,7 @@ function isFaceSelected(t: any): boolean {
}
function isGroupSelected(c: any): boolean {
return selectedGroups.value.includes(c.identity_uuid)
return selectedGroups.value.includes(c.group_uuid)
}
function isClusterTraceSelected(t: any): boolean {
@@ -650,11 +650,9 @@ const faceGroups = computed(() => {
const defaultName = `group ${String(idx + 1).padStart(2, '0')}`
if (!c.name) c.name = defaultName
return {
identity_uuid: `cluster_${c.cluster_id ?? c.group_id}`,
identity_id: `cluster_${String(c.cluster_id ?? c.group_id).padStart(2, '0')}`,
group_uuid: `group_${c.cluster_id ?? c.group_id}`,
group_id: c.cluster_id ?? c.group_id,
name: c.name,
status: 'pending',
starred: false,
trace_count: c.trace_count,
representative_trace: repTraceId,
cluster_id: c.cluster_id ?? c.group_id,
@@ -936,9 +934,9 @@ async function loadClusterResults() {
for (const tid of traceIds) {
const s = suggestions[String(tid)]
if (s) {
const key = s.identity_uuid
const key = s.group_uuid
if (!identityCounts[key]) {
identityCounts[key] = { name: s.name, uuid: s.identity_uuid, count: 0 }
identityCounts[key] = { name: s.name, uuid: s.group_uuid, count: 0 }
}
identityCounts[key].count++
}
@@ -1471,12 +1469,12 @@ async function createNewIdentityFromFace() {
fileUuid: c.file_uuid,
traceIds: c.trace_id ? [c.trace_id] : undefined
})
if (result?.identity_uuid) {
if (result?.group_uuid) {
faceDetailModal.value.show = false
if (c.trace_id) {
unassignedTracesCache.value = unassignedTracesCache.value.filter((t: any) => t.trace_id !== c.trace_id)
}
const cleanUuid = result.identity_uuid.replace(/-/g, '')
const cleanUuid = result.group_uuid.replace(/-/g, '')
router.push(`/people/${cleanUuid}`)
} else {
alert(t('people.detail.create_identity_failed'))
@@ -1512,7 +1510,7 @@ function toggleFaceSelection(t: any) {
}
function toggleGroupSelection(c: any) {
const key = c.identity_uuid
const key = c.group_uuid
const idx = selectedGroups.value.indexOf(key)
if (idx >= 0) {
selectedGroups.value.splice(idx, 1)
@@ -1634,7 +1632,7 @@ async function batchDeleteGroups() {
if (!selectedGroups.value.length) return
const groupIds = Array.from(selectedGroups.value)
const groupsToDelete = faceGroups.value.filter((c: any) => groupIds.includes(c.identity_uuid))
const groupsToDelete = faceGroups.value.filter((c: any) => groupIds.includes(c.group_uuid))
let totalTraces = 0
const allTraceIds: number[] = []
@@ -1687,7 +1685,7 @@ async function batchMergeGroups() {
const groupIds = Array.from(selectedGroups.value)
console.log('[batchMergeGroups] groupIds:', groupIds)
mergeCandidateGroups.value = faceGroups.value.filter((c: any) => groupIds.includes(c.identity_uuid))
mergeCandidateGroups.value = faceGroups.value.filter((c: any) => groupIds.includes(c.group_uuid))
console.log('[batchMergeGroups] mergeCandidateGroups:', mergeCandidateGroups.value.length)
showMergeTargetModal.value = true
@@ -1697,7 +1695,7 @@ async function executeMerge(targetGroupId: string) {
console.log('[executeMerge] targetGroupId:', targetGroupId)
showMergeTargetModal.value = false
const targetGroup = faceGroups.value.find((c: any) => c.identity_uuid === targetGroupId)
const targetGroup = faceGroups.value.find((c: any) => c.group_uuid === targetGroupId)
console.log('[executeMerge] targetGroup:', targetGroup)
if (!targetGroup) return
@@ -1710,7 +1708,7 @@ async function executeMerge(targetGroupId: string) {
const groupIds = Array.from(selectedGroups.value)
const sourceGroupIds = groupIds.filter(id => id !== targetGroupId)
const sourceGroups = faceGroups.value.filter((c: any) => sourceGroupIds.includes(c.identity_uuid))
const sourceGroups = faceGroups.value.filter((c: any) => sourceGroupIds.includes(c.group_uuid))
console.log('[executeMerge] sourceGroups:', sourceGroups.length)
const sourceGroupNames = sourceGroups.map(g => g.name).filter(Boolean)
@@ -1831,7 +1829,7 @@ async function createNewGroupAndMove() {
traceIds: traceList.map(t => t.trace_id)
})
if (result?.identity_uuid) {
if (result?.group_uuid) {
clearSelection()
await refresh()
}