diff --git a/apps/admin/src/pages/Rooms/index.tsx b/apps/admin/src/pages/Rooms/index.tsx index 19a833f..2fc7278 100644 --- a/apps/admin/src/pages/Rooms/index.tsx +++ b/apps/admin/src/pages/Rooms/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useMemo } from 'react'; +import React, { useEffect, useState, useMemo, useCallback } from 'react'; import { Table, Button, @@ -63,6 +63,8 @@ function parseRoomNumber(input: string) { return null; } +const RoomsPage: React.FC = () => { + const [data, setData] = useState([]); const [loading, setLoading] = useState(false); const [modalOpen, setModalOpen] = useState(false); const [editing, setEditing] = useState(null); @@ -156,20 +158,19 @@ function parseRoomNumber(input: string) { setSaving(false); } }; - - const fetchBeds = async (roomId: number) => { + const fetchBeds = useCallback(async (roomId: number) => { try { const res = await api.get(`/rooms/${roomId}/beds`); setBeds(res); } catch (e) { console.error(e); } - }; + }, []); - const fetchLockers = async (roomId: number) => { + const fetchLockers = useCallback(async (roomId: number) => { try { const res = await api.get(`/rooms/${roomId}/lockers`); setLockers(res); } catch (e) { console.error(e); } - }; + }, []); const handleSaveBed = async () => { const values = await bedForm.validateFields(); @@ -325,54 +326,57 @@ function parseRoomNumber(input: string) { { title: '操作', width: 220, - render: (_: any, record: any) => ( - - {record.status === 'archived' ? ( - handleRestore(record.id)} - okText="恢复" - cancelText="取消" - > - } type="link"> - 恢复 - - { - setDrawerRoom(record); - setDrawerOpen(true); - await Promise.all([fetchBeds(record.id), fetchLockers(record.id)]); - }} - > - 查看 - - { - setEditing(record); - form.setFieldsValue(record); - setModalOpen(true); - }} - > - 编辑 - + render: (_: unknown, record: unknown) => { + const r = record as { status?: string; id: number }; + return ( + + {r.status === 'archived' ? ( handleArchive(record.id)} - okText="归档" - cancelText="取消" + title="确定恢复此宿舍?" + onConfirm={() => handleRestore(r.id)} > - }> - 归档 + } type="link"> + 恢复 - - )} - + ) : ( + <> + { + const rec = record as { id: number }; + setDrawerRoom(record); + setDrawerOpen(true); + await Promise.all([fetchBeds(rec.id), fetchLockers(rec.id)]); + }} + > + 查看 + + { + const rec = record as { id: number }; + setEditing(rec); + form.setFieldsValue(rec); + setModalOpen(true); + }} + > + 编辑 + + handleArchive(r.id)}> + }> + 归档 + + + + )} + + ); + }, + }, ], [showArchived, buildings, handleBatchDelete, handleRestore, handleArchive, fetchBeds, fetchLockers]); return (