import { useState } from 'react' import { useRouter } from '@tarojs/taro' import { View, Text, Input } from '@tarojs/components' import { Navbar } from '@/components/navbar' import { addCared, type EmergencyContact } from '@/api/family' import { MAX_EMERGENCY_CONTACTS, MAX_FAMILY_NAME_LEN } from '@/constants/family' import { navigateBack } from '@/utils/navigation' import { showToast } from '@/utils/toast' import { validateContactForm } from './validate' import styles from './add.module.scss' const emptyContact = (): EmergencyContact => ({ id: `tmp-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`, name: '', phone: '', relation: '' }) export default function ContactAdd() { const router = useRouter() const familyId = router.params.familyId ?? '' const [name, setName] = useState('') const [idNumber, setIdNumber] = useState('') const [address, setAddress] = useState('') const [contacts, setContacts] = useState([]) const [submitting, setSubmitting] = useState(false) const patchContact = (id: string, key: keyof EmergencyContact, value: string) => { setContacts((prev) => prev.map((c) => (c.id === id ? { ...c, [key]: value } : c))) } const removeContact = (id: string) => { setContacts((prev) => prev.filter((c) => c.id !== id)) } const submit = async () => { if (submitting) return const result = validateContactForm({ name, idNumber, address, contacts }) if (!result.ok) { showToast(result.error) return } setSubmitting(true) try { await addCared({ familyId, name: name.trim(), idNumber: idNumber.trim(), address: address.trim(), contacts: result.contacts }) showToast('添加成功') setTimeout(() => navigateBack(), 500) } catch (error) { showToast(error instanceof Error ? error.message : '添加失败') } finally { setSubmitting(false) } } return ( *姓名 setName(e.detail.value)} /> *身份证号 setIdNumber(e.detail.value)} /> *关爱地址 setAddress(e.detail.value)} /> 紧急联系人 {contacts.length < MAX_EMERGENCY_CONTACTS && ( setContacts((p) => [...p, emptyContact()])}> + 添加 )} 最多可添加 {MAX_EMERGENCY_CONTACTS} 位紧急联系人,可不填 {contacts.map((c) => ( removeContact(c.id)}> × 姓名 patchContact(c.id, 'name', e.detail.value)} /> 电话 patchContact(c.id, 'phone', e.detail.value)} /> 关系 patchContact(c.id, 'relation', e.detail.value)} /> ))} {submitting ? '提交中...' : '确认添加'} ) }