0.3.0.0
This commit is contained in:
@@ -287,7 +287,7 @@ export function MemberForm({ initialData, existingMembers = [], onSubmit, onCanc
|
||||
<div className="flex justify-center mb-4">
|
||||
<ImageUpload
|
||||
value={formData.avatarUrl}
|
||||
onChange={(imageUrl) => handleChange("avatarUrl", imageUrl)}
|
||||
onChange={(imageUrl) => handleChange("avatarUrl", imageUrl || null)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -26,15 +26,16 @@ interface MemberVersionHistoryProps {
|
||||
memberId: string
|
||||
treeId: string
|
||||
onVersionSelect?: (version: MemberHistory) => void
|
||||
lastUpdated?: number // 用于触发刷新的时间戳
|
||||
}
|
||||
|
||||
export function MemberVersionHistory({ memberId, treeId, onVersionSelect }: MemberVersionHistoryProps) {
|
||||
export function MemberVersionHistory({ memberId, treeId, onVersionSelect, lastUpdated }: MemberVersionHistoryProps) {
|
||||
const [history, setHistory] = useState<MemberHistory[]>([])
|
||||
const [loading, setLoading] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
loadHistory()
|
||||
}, [memberId, treeId])
|
||||
}, [memberId, treeId, lastUpdated])
|
||||
|
||||
const loadHistory = async () => {
|
||||
try {
|
||||
@@ -80,12 +81,18 @@ export function MemberVersionHistory({ memberId, treeId, onVersionSelect }: Memb
|
||||
motherId: '母亲', fatherId: '父亲', isFounder: '始祖',
|
||||
isLunarDate: '农历日期', burialPlace: '安葬地', tags: '标签',
|
||||
spouseFatherName: '岳父/公公', spouseMotherName: '岳母/婆婆',
|
||||
avatarUrl: '头像', stories: '家族故事',
|
||||
}
|
||||
|
||||
const formatValue = (value: any) => {
|
||||
const formatValue = (value: any, field?: string) => {
|
||||
if (value === null || value === undefined) return '-'
|
||||
if (typeof value === 'boolean') return value ? '是' : '否'
|
||||
if (Array.isArray(value)) return value.length > 0 ? value.join(', ') : '-'
|
||||
if (Array.isArray(value)) {
|
||||
if (field === 'photoIds') return `${value.length} 张照片`
|
||||
if (field === 'stories') return `${value.length} 个故事`
|
||||
return value.length > 0 ? value.join(', ') : '-'
|
||||
}
|
||||
if (field === 'avatarUrl') return value ? '已上传' : '无'
|
||||
return String(value)
|
||||
}
|
||||
|
||||
@@ -125,9 +132,9 @@ export function MemberVersionHistory({ memberId, treeId, onVersionSelect }: Memb
|
||||
<span className="text-muted-foreground min-w-[60px]">{fieldLabels[field]}:</span>
|
||||
<div className="flex-1">
|
||||
<div className="flex items-center gap-2">
|
||||
<span className="text-red-600 line-through">{formatValue(change.old)}</span>
|
||||
<span className="text-red-600 line-through">{formatValue(change.old, field)}</span>
|
||||
<span className="text-muted-foreground">→</span>
|
||||
<span className="text-green-600 font-medium">{formatValue(change.new)}</span>
|
||||
<span className="text-green-600 font-medium">{formatValue(change.new, field)}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -146,9 +153,9 @@ export function MemberVersionHistory({ memberId, treeId, onVersionSelect }: Memb
|
||||
<span className="text-muted-foreground min-w-[60px]">{fieldLabels[field]}:</span>
|
||||
<div className="flex-1">
|
||||
<div className="flex items-center gap-2 flex-wrap">
|
||||
<span className="text-red-600 line-through">{formatValue(change.old)}</span>
|
||||
<span className="text-red-600 line-through">{formatValue(change.old, field)}</span>
|
||||
<span className="text-muted-foreground">→</span>
|
||||
<span className="text-green-600 font-medium">{formatValue(change.new)}</span>
|
||||
<span className="text-green-600 font-medium">{formatValue(change.new, field)}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user