fix: I2 add studentNo to class listing, I4 replace attendance edit placeholder with working edit modal
This commit is contained in:
@@ -131,6 +131,31 @@ const AttendancePage: React.FC = () => {
|
||||
const [studentSearchResults, setStudentSearchResults] = useState<{ id: number; name: string }[]>([]);
|
||||
const [studentSearchLoading, setStudentSearchLoading] = useState(false);
|
||||
|
||||
// Edit modal
|
||||
const [editModalOpen, setEditModalOpen] = useState(false);
|
||||
const [editRecord, setEditRecord] = useState<AttendanceRecordItem | null>(null);
|
||||
const [editForm] = Form.useForm();
|
||||
|
||||
|
||||
// ── Edit record ──
|
||||
const handleEdit = (record: AttendanceRecordItem) => {
|
||||
setEditRecord(record);
|
||||
editForm.setFieldsValue({ session: record.session, status: record.status, remark: record.remark });
|
||||
setEditModalOpen(true);
|
||||
};
|
||||
|
||||
const handleEditSubmit = async () => {
|
||||
try {
|
||||
const values = await editForm.validateFields();
|
||||
await api.put(`/attendance-records/${editRecord!.id}`, values);
|
||||
message.success('更新成功');
|
||||
setEditModalOpen(false);
|
||||
fetchRecords();
|
||||
} catch (e: any) {
|
||||
message.error(e?.message || '更新失败');
|
||||
}
|
||||
};
|
||||
|
||||
// ── Fetch classes ──
|
||||
const fetchClasses = useCallback(async () => {
|
||||
try {
|
||||
@@ -343,7 +368,7 @@ const AttendancePage: React.FC = () => {
|
||||
width: 80,
|
||||
fixed: 'right' as const,
|
||||
render: (_: unknown, record: AttendanceRecordItem) => (
|
||||
<PermissionButton permission="attendance:edit" size="small" onClick={() => message.info('编辑功能开发中')}>
|
||||
<PermissionButton permission="attendance:edit" size="small" onClick={() => handleEdit(record)}>
|
||||
编辑
|
||||
</PermissionButton>
|
||||
),
|
||||
@@ -625,6 +650,22 @@ const AttendancePage: React.FC = () => {
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</Modal>
|
||||
|
||||
{/* ── Edit modal ── */}
|
||||
<Modal title="编辑考勤" open={editModalOpen} onOk={handleEditSubmit} onCancel={() => setEditModalOpen(false)}>
|
||||
<Form form={editForm} layout="vertical">
|
||||
<Form.Item name="session" label="时段" rules={[{ required: true }]}>
|
||||
<Select options={SESSION_OPTIONS.map((s) => ({ value: s.value, label: s.label }))} />
|
||||
</Form.Item>
|
||||
<Form.Item name="status" label="状态" rules={[{ required: true }]}>
|
||||
<Select options={STATUS_OPTIONS} />
|
||||
</Form.Item>
|
||||
<Form.Item name="remark" label="备注">
|
||||
<Input.TextArea rows={2} />
|
||||
</Form.Item>
|
||||
</Form>
|
||||
</Modal>
|
||||
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user