移除账号启用状态统一使用归档

This commit is contained in:
2026-07-24 09:53:04 +08:00
parent a9c6578569
commit 13ef357448
13 changed files with 86 additions and 67 deletions

View File

@@ -10,7 +10,6 @@ const baseUser = (overrides: Partial<TeacherCandidateUser> = {}): TeacherCandida
id: 1,
username: 'teacher',
name: '测试老师',
isActive: true,
isArchived: false,
studentStatus: null,
roles: [{ code: 'teacher', name: '任课老师' }],
@@ -29,13 +28,12 @@ describe('class teacher candidates', () => {
expect(isTeacherCandidate(baseUser({ studentStatus: 'staff' }))).toBe(true);
});
it('excludes active students, disabled, archived, and super-admin accounts', () => {
it('excludes active students, archived, and super-admin accounts', () => {
const users = [
baseUser({ id: 1, studentStatus: 'active' }),
baseUser({ id: 2, isActive: false }),
baseUser({ id: 3, isArchived: true }),
baseUser({ id: 2, isArchived: true }),
baseUser({
id: 4,
id: 3,
roles: [{ code: 'super_admin', name: '超级管理员' }],
}),
];

View File

@@ -7,7 +7,6 @@ export interface TeacherCandidateUser {
id: number;
username: string;
name?: string | null;
isActive: boolean;
isArchived: boolean;
studentStatus?: string | null;
roles?: TeacherCandidateRole[];
@@ -18,7 +17,7 @@ const isSuperAdminRole = (role: TeacherCandidateRole) =>
role.code === 'super_admin' || role.name === '超级管理员' || role.name === '超管';
export const isTeacherCandidate = (user: TeacherCandidateUser) => {
if (!user.isActive || user.isArchived) return false;
if (user.isArchived) return false;
if (user.studentStatus && user.studentStatus !== 'staff') return false;
return !(user.roles || []).some(isSuperAdminRole);
};

View File

@@ -12,7 +12,6 @@ interface TeacherRow {
id: number;
username: string;
name: string;
isActive: boolean;
profile: { subjects?: string[]; joinedAt?: string; qualifications?: string } | null;
lastLoginAt: string;
roles: { code: string; name: string }[];
@@ -175,13 +174,6 @@ const TeachersPage: React.FC = () => {
</EditableCell>
),
},
{
title: '状态',
dataIndex: 'isActive',
key: 'status',
width: 90,
render: (v: boolean) => <Tag color={v ? 'green' : 'red'}>{v ? '在职' : '停用'}</Tag>,
},
{
title: '最后登录',
dataIndex: 'lastLoginAt',

View File

@@ -87,7 +87,6 @@ const UsersPage: React.FC = () => {
form.setFieldsValue({
username: record.username,
name: record.name,
isActive: record.isActive,
roleIds: record.roles?.map((r: any) => r.id) || [],
});
setModalOpen(true);
@@ -101,7 +100,6 @@ const UsersPage: React.FC = () => {
await api.put(`/rbac/users/${editing.id}`, {
username: values.username,
name: values.name,
isActive: values.isActive,
roleIds: values.roleIds || [],
});
message.success('更新成功');
@@ -223,26 +221,6 @@ const UsersPage: React.FC = () => {
</EditableCell>
),
},
{
title: '状态',
dataIndex: 'isActive',
width: 80,
render: (v: boolean, r: any) => (
<EditableCell
value={String(v)}
editor="select"
options={[
{ value: 'true', label: '启用' },
{ value: 'false', label: '禁用' },
]}
permission="user:edit"
disabled={r.isArchived}
onSave={(next) => saveCell(r, 'isActive', String(next) === 'true')}
>
<Tag color={v ? 'green' : 'default'}>{v ? '启用' : '禁用'}</Tag>
</EditableCell>
),
},
{
title: '最后登录',
dataIndex: 'lastLoginAt',
@@ -350,7 +328,7 @@ const UsersPage: React.FC = () => {
dataSource={data}
rowKey="id"
loading={loading}
scroll={{ x: 1250 }}
scroll={{ x: 1150 }}
pagination={false}
/>
@@ -382,11 +360,6 @@ const UsersPage: React.FC = () => {
<Form.Item name="name" label="姓名" rules={[{ required: true, message: '请输入姓名' }]}>
<Input />
</Form.Item>
{editing && (
<Form.Item name="isActive" label="状态" valuePropName="checked">
<Switch checkedChildren="启用" unCheckedChildren="禁用" />
</Form.Item>
)}
<Form.Item
name="roleIds"
label="角色分配"