import { useCallback, useEffect, useState } from 'react'; import { Table, Button, Form, Input, Select, Drawer, message, Popconfirm, Space } from 'antd'; import { PlusOutlined } from '@ant-design/icons'; import { patientApi, type FamilyMember, type CreateFamilyMemberReq } from '../../../api/health/patients'; import { AuthButton } from '../../../components/AuthButton'; import { useDictionary } from '../../../hooks/useDictionary'; const RELATIONSHIP_FALLBACK = [ { label: '父母', value: 'parent' }, { label: '配偶', value: 'spouse' }, { label: '子女', value: 'child' }, { label: '兄弟姐妹', value: 'sibling' }, { label: '其他', value: 'other' }, ]; interface Props { patientId: string; } export function FamilyMembersTab({ patientId }: Props) { const { options: RELATIONSHIP_OPTIONS } = useDictionary('health_relationship', RELATIONSHIP_FALLBACK); const [members, setMembers] = useState([]); const [loading, setLoading] = useState(false); const [drawerOpen, setDrawerOpen] = useState(false); const [editingMember, setEditingMember] = useState(null); const [form] = Form.useForm(); const fetchMembers = useCallback(async () => { setLoading(true); try { const data = await patientApi.listFamilyMembers(patientId); setMembers(data); } catch { message.error('加载家属列表失败'); } setLoading(false); }, [patientId]); useEffect(() => { fetchMembers(); }, [fetchMembers]); const handleSubmit = async (values: CreateFamilyMemberReq) => { try { if (editingMember) { await patientApi.updateFamilyMember(patientId, editingMember.id, { ...values, version: editingMember.version }); message.success('家属信息已更新'); } else { await patientApi.createFamilyMember(patientId, values); message.success('家属已添加'); } setDrawerOpen(false); setEditingMember(null); form.resetFields(); fetchMembers(); } catch (err: unknown) { const msg = (err as { response?: { data?: { message?: string } } })?.response?.data?.message || '操作失败'; message.error(msg); } }; const handleDelete = async (memberId: string) => { try { await patientApi.deleteFamilyMember(patientId, memberId); message.success('已删除'); fetchMembers(); } catch { message.error('删除失败'); } }; const openCreate = () => { setEditingMember(null); form.resetFields(); setDrawerOpen(true); }; const openEdit = (member: FamilyMember) => { setEditingMember(member); form.setFieldsValue({ name: member.name, relationship: member.relationship, phone: member.phone, id_number: member.id_number, notes: member.notes, }); setDrawerOpen(true); }; const columns = [ { title: '姓名', dataIndex: 'name', key: 'name' }, { title: '关系', dataIndex: 'relationship', key: 'relationship', render: (v: string) => RELATIONSHIP_OPTIONS.find(r => r.value === v)?.label || v, }, { title: '电话', dataIndex: 'phone', key: 'phone' }, { title: '身份证号', dataIndex: 'id_number', key: 'id_number' }, { title: '备注', dataIndex: 'notes', key: 'notes', ellipsis: true }, { title: '操作', key: 'actions', width: 150, render: (_: unknown, record: FamilyMember) => ( handleDelete(record.id)}> ), }, ]; return ( <>
{ setDrawerOpen(false); setEditingMember(null); }} width={400} >
); }