feat: add class roster export button in class detail page

This commit is contained in:
2026-07-06 01:16:55 +08:00
parent 8453e62088
commit 5d102ca3c4

View File

@@ -5,7 +5,7 @@ import {
Popconfirm, message, Form, Input, DatePicker, InputNumber,
} from 'antd';
import type { ColumnsType } from 'antd/es/table';
import { ArrowLeftOutlined, PlusOutlined } from '@ant-design/icons';
import { ArrowLeftOutlined, PlusOutlined, DownloadOutlined } from '@ant-design/icons';
import dayjs from 'dayjs';
import api from '../../api';
import PermissionButton from '../../components/PermissionButton';
@@ -402,10 +402,36 @@ const ClassDetailPage: React.FC = () => {
icon={<PlusOutlined />}
type="primary"
onClick={openStudentModal}
style={{ marginBottom: 16 }}
style={{ marginBottom: 16, marginRight: 8 }}
>
</Button>
<PermissionButton
permission="class:view"
icon={<DownloadOutlined />}
onClick={() => {
const token = localStorage.getItem('token');
fetch(`/api/classes/${id}/roster/export`, {
headers: { Authorization: `Bearer ${token}` },
})
.then((res) => {
if (!res.ok) throw new Error('导出失败');
return res.blob();
})
.then((blob) => {
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `班级花名册-${detail?.name || id}.xlsx`;
a.click();
URL.revokeObjectURL(url);
message.success('花名册导出成功');
})
.catch(() => message.error('花名册导出失败'));
}}
>
</PermissionButton>
<Table<ClassStudent>
columns={studentColumns}
dataSource={students}