feat(ui): SVG图标全替换 + Neo-Brutalist主题升级 + 数据导出卡片类别勾选
Deploy to Server / deploy (push) Failing after 14m55s

This commit is contained in:
Trae Assistant
2026-10-04 22:12:17 +08:00
parent 0169f19cf8
commit 9c7d6c1455
18 changed files with 657 additions and 178 deletions
+11 -7
View File
@@ -7,6 +7,7 @@ import Modal from '../../components/Modal';
import { groupsApi, usersApi, errMsg } from '../../api';
import { formatDateRange } from '../../utils/export';
import type { UserItem, UserDetail, WorkGroup } from '../../types';
import { IconUsers, IconPlus, IconEdit, IconTrash, IconEye } from '../../components/Icons';
type Form = { class: string; name: string; volunteer_no: string; group_id: number | null };
const emptyForm: Form = { class: '', name: '', volunteer_no: '', group_id: null };
@@ -67,14 +68,17 @@ export default function Users() {
return (
<div>
<div className="mb-5">
<h1 className="text-xl md:text-2xl font-black mb-1">👥 用户管理</h1>
<p className="text-sm text-gray-500">管理部员信息,查看个人累计义工时长与参与活动明细</p>
<div className="mb-5 flex items-start gap-2">
<IconUsers size={28} className="mt-0.5 shrink-0" />
<div>
<h1 className="text-xl md:text-2xl font-black mb-1">用户管理</h1>
<p className="text-sm text-gray-500">管理部员信息,查看个人累计义工时长与参与活动明细</p>
</div>
</div>
<div className="bg-white border-2 border-black p-4 mb-4 flex flex-col md:flex-row gap-3 md:items-center md:justify-between">
<Input placeholder="搜索 姓名/班级/义工号/工作组..." value={keyword} onChange={(e) => setKeyword(e.target.value)} className="md:max-w-md" />
<Button onClick={openNew}>+ 新增部员</Button>
<Button onClick={openNew}><span className="inline-flex items-center gap-2"><IconPlus size={18} />新增部员</span></Button>
</div>
<DataTable<UserItem>
@@ -87,9 +91,9 @@ export default function Users() {
{
key: 'op', title: '操作', width: '220px', render: (r) => (
<div className="flex gap-1.5 flex-wrap">
<Button size="sm" variant="secondary" onClick={() => openDetail(r)}>详情</Button>
<Button size="sm" variant="secondary" onClick={() => openEdit(r)}>编辑</Button>
<Button size="sm" variant="danger" onClick={() => onDelete(r)}>删除</Button>
<Button size="sm" variant="secondary" onClick={() => openDetail(r)}><span className="inline-flex items-center gap-1.5"><IconEye size={14} />详情</span></Button>
<Button size="sm" variant="secondary" onClick={() => openEdit(r)}><span className="inline-flex items-center gap-1.5"><IconEdit size={14} />编辑</span></Button>
<Button size="sm" variant="danger" onClick={() => onDelete(r)}><span className="inline-flex items-center gap-1.5"><IconTrash size={14} />删除</span></Button>
</div>
)
}