diff --git a/src/apis/config.ts b/src/apis/config.ts index d16a397..343fe5d 100644 --- a/src/apis/config.ts +++ b/src/apis/config.ts @@ -17,4 +17,5 @@ export const API_ENDPOINTS = { // 新增单个资源路径 /people PEOPLE: '/people', PEOPLE_BY_ID: (id: string) => `/people/${id}`, + PEOPLE_REMARK_BY_ID: (id: string) => `/people/${id}/remark`, } as const; \ No newline at end of file diff --git a/src/apis/people.ts b/src/apis/people.ts index 1155989..2b5fa0a 100644 --- a/src/apis/people.ts +++ b/src/apis/people.ts @@ -121,6 +121,25 @@ export async function updatePeople(peopleId: string, people: People): Promise(API_ENDPOINTS.PEOPLE_BY_ID(peopleId), requestData); } +/** + * 添加或更新人员备注 + * @param peopleId 人员ID + * @param content 备注内容 + * @returns Promise + */ +export async function addOrUpdateRemark(peopleId: string, content: string): Promise { + return post(API_ENDPOINTS.PEOPLE_REMARK_BY_ID(peopleId), { content }); +} + +/** + * 删除人员备注 + * @param peopleId 人员ID + * @returns Promise + */ +export async function deleteRemark(peopleId: string): Promise { + return del(API_ENDPOINTS.PEOPLE_REMARK_BY_ID(peopleId)); +} + /** * 批量创建人员信息 * @param peopleList 人员信息数组 diff --git a/src/components/ResourceList.tsx b/src/components/ResourceList.tsx index 3d7a094..34a906d 100644 --- a/src/components/ResourceList.tsx +++ b/src/components/ResourceList.tsx @@ -11,7 +11,7 @@ import ImageModal from './ImageModal.tsx'; import PeopleForm from './PeopleForm.tsx'; import { getPeoples } from '../apis'; import type { People } from '../apis'; -import { deletePeople, updatePeople } from '../apis/people'; +import { addOrUpdateRemark, deletePeople, deleteRemark, updatePeople } from '../apis/people'; const { Content } = Layout; @@ -30,6 +30,7 @@ function transformPeoples(list: People[] = []): Resource[] { height: person.height, marital_status: person.marital_status, introduction: person.introduction || {}, + comments: person.comments || {}, contact: person.contact || '', cover: person.cover || '', created_at: person.created_at, @@ -606,6 +607,10 @@ const ResourceList: React.FC = ({ inputOpen = false, onCloseInput, contai const [editingRecord, setEditingRecord] = React.useState(null); const editFormRef = React.useRef(null); + // 备注编辑模态框状态 + const [remarkModalVisible, setRemarkModalVisible] = React.useState(false); + const [editingRemark, setEditingRemark] = React.useState<{ recordId: string; content: string } | null>(null); + // 移动端编辑模式状态 const [mobileEditing, setMobileEditing] = React.useState(false); @@ -1052,6 +1057,48 @@ const ResourceList: React.FC = ({ inputOpen = false, onCloseInput, contai {record.created_at ? '录入于: ' + formatDate(record.created_at) : ''} )} + +
+ +
+ + 备注 + {record.comments && record.comments.remark ? ( + + + + + ) : ( + + )} + + {record.comments && record.comments.remark ? ( +
+
+ 更新于: {formatDate(record.comments.remark.updated_at)} +
+
{record.comments.remark.content}
+
+ ) : null} +
); }, @@ -1146,6 +1193,44 @@ const ResourceList: React.FC = ({ inputOpen = false, onCloseInput, contai /> )} + + { + setRemarkModalVisible(false); + setEditingRemark(null); + }} + onOk={async () => { + if (!editingRemark) return; + try { + const res = await addOrUpdateRemark(editingRemark.recordId, editingRemark.content); + if (res.error_code === 0) { + message.success(editingRemark.content ? '修改成功' : '添加成功'); + setRemarkModalVisible(false); + setEditingRemark(null); + await reloadResources(); + } else { + message.error(res.error_info || '操作失败'); + } + } catch (err) { + message.error('操作失败'); + } + }} + okText="确认" + cancelText="取消" + > + { + if (editingRemark) { + setEditingRemark({ ...editingRemark, content: e.target.value }); + } + }} + placeholder="请输入备注" + /> + ); };