From 7e8d3b1a19f730bcf276ad1315094fa7034cb67d Mon Sep 17 00:00:00 2001 From: xianyi Date: Tue, 16 Dec 2025 11:01:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=A4=87=E6=B3=A8=E7=AA=97?= =?UTF-8?q?=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/modals/NoteModal.tsx | 74 ++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/src/components/modals/NoteModal.tsx b/src/components/modals/NoteModal.tsx index 55bbb43..7fc35cb 100644 --- a/src/components/modals/NoteModal.tsx +++ b/src/components/modals/NoteModal.tsx @@ -1,3 +1,7 @@ +import { useEffect, useState } from 'react'; + +import { getOperatorRemarkInfo, saveOperatorRemarkInfo } from '../../api'; + interface NoteModalProps { noteText: string; onNoteChange: (v: string) => void; @@ -5,12 +9,69 @@ interface NoteModalProps { } export const NoteModal = ({ noteText, onNoteChange, onClose }: NoteModalProps) => { + const [loading, setLoading] = useState(false); + const [saving, setSaving] = useState(false); + const [message, setMessage] = useState(null); + + const operatorId = typeof window !== 'undefined' ? localStorage.getItem('operatorPhone') || 'unknown' : 'unknown'; + const operatorName = typeof window !== 'undefined' ? localStorage.getItem('operatorName') || '未知' : '未知'; + + // 初始化拉取备注 + useEffect(() => { + if (!operatorId) return; + setLoading(true); + setMessage(null); + getOperatorRemarkInfo({ operator_id: operatorId }) + .then((res) => { + if (res.Status === 200 && res.Data?.remark_content) { + onNoteChange(res.Data.remark_content); + } else if (res.Message) { + setMessage(res.Message); + } + }) + .catch((err) => { + console.error('获取备注失败', err); + setMessage('获取备注失败,请稍后重试'); + }) + .finally(() => setLoading(false)); + }, [operatorId, onNoteChange]); + + const handleSave = async () => { + if (!operatorId || !operatorName) { + setMessage('缺少操作员信息,无法保存'); + return; + } + if (!noteText.trim()) { + setMessage('备注内容不能为空'); + return; + } + setSaving(true); + setMessage(null); + try { + const res = await saveOperatorRemarkInfo({ + operator_id: operatorId, + operator_name: operatorName, + remark_content: noteText.trim(), + }); + if (res.Status === 200) { + setMessage('保存成功'); + } else { + setMessage(res.Message || '保存失败'); + } + } catch (err) { + console.error('保存备注失败', err); + setMessage('保存失败,请稍后重试'); + } finally { + setSaving(false); + } + }; + return (
备注窗
-
@@ -22,7 +83,18 @@ export const NoteModal = ({ noteText, onNoteChange, onClose }: NoteModalProps) = placeholder='例如:客户有既往疾病史、沟通偏好、特殊关怀需求等,可在此记录。' value={noteText} onChange={(e) => onNoteChange(e.target.value)} + disabled={loading || saving} /> + {message &&
{message}
} +
+ +
备注内容会同步至客户详情页,供前台和导检护士查看。