import React, { useState, useEffect } from 'react'; import { View, Text, Input, Picker } from '@tarojs/components'; import Taro, { useRouter } from '@tarojs/taro'; import { createPatient, updatePatient, Patient } from '../../../services/patient'; import { useElderClass } from '../../../hooks/useElderClass'; import { useSafeTimeout } from '@/hooks/useSafeTimeout'; import PageShell from '@/components/ui/PageShell'; import './index.scss'; const RELATION_OPTIONS = ['本人', '配偶', '父母', '子女', '其他']; const GENDER_OPTIONS = ['男', '女']; export default function FamilyAdd() { const modeClass = useElderClass(); const router = useRouter(); const editId = router.params.id || ''; const editData = Taro.getStorageSync('edit_patient') as Patient | null; const [name, setName] = useState(editData?.name || ''); const [relationIdx, setRelationIdx] = useState( editData?.relation ? RELATION_OPTIONS.indexOf(editData.relation) : 0 ); const [genderIdx, setGenderIdx] = useState( editData?.gender === 'female' ? 1 : 0 ); const [birthDate, setBirthDate] = useState(editData?.birth_date || ''); const [submitting, setSubmitting] = useState(false); const { safeSetTimeout } = useSafeTimeout(); useEffect(() => { return () => { Taro.removeStorageSync('edit_patient'); }; }, []); const handleSubmit = async () => { if (!name.trim()) { Taro.showToast({ title: '请输入姓名', icon: 'none' }); return; } setSubmitting(true); Taro.showLoading({ title: '提交中...' }); try { if (editId && editData) { await updatePatient(editId, { name: name.trim(), gender: GENDER_OPTIONS[genderIdx] === '男' ? 'male' : 'female', birth_date: birthDate || undefined, relation: RELATION_OPTIONS[relationIdx], }, editData.version); Taro.hideLoading(); Taro.showToast({ title: '修改成功', icon: 'success' }); } else { await createPatient({ name: name.trim(), gender: GENDER_OPTIONS[genderIdx] === '男' ? 'male' : 'female', birth_date: birthDate || undefined, }); Taro.hideLoading(); Taro.showToast({ title: '添加成功', icon: 'success' }); } safeSetTimeout(() => Taro.navigateBack(), 1000); } catch { Taro.hideLoading(); Taro.showToast({ title: editId ? '修改失败' : '添加失败', icon: 'none' }); } finally { setSubmitting(false); } }; return ( {editId ? '编辑就诊人' : '添加就诊人'} {/* 提示卡片 */} 完善个人信息 完善信息后即可使用积分商城、签到等功能。请填写真实信息。 {/* 表单 */} 姓名* setName(e.detail.value)} /> 关系* setRelationIdx(Number(e.detail.value))} > {RELATION_OPTIONS[relationIdx]} 性别* setGenderIdx(Number(e.detail.value))} > {GENDER_OPTIONS[genderIdx]} 出生日期* setBirthDate(e.detail.value)} > {birthDate || '请选择'} 手机号 身份证号 {submitting ? '提交中...' : editId ? '保存修改' : '确认添加'} ); }