基本功能完成,下一步开始美化UI
This commit is contained in:
@@ -20,6 +20,26 @@ domains:
|
||||
- name: "createdAt"
|
||||
type: "datetime"
|
||||
description: "创建时间"
|
||||
- name: "UserGroup"
|
||||
description: "用户组 (Note: The User Group feature (including management, assignment, and mixed selection) is implemented but currently UNTESTED. Missing Audit Log feature for User Group changes.)"
|
||||
attributes:
|
||||
- name: "id"
|
||||
type: "string"
|
||||
description: "用户组唯一标识"
|
||||
- name: "name"
|
||||
type: "string"
|
||||
description: "用户组名称"
|
||||
- name: "description"
|
||||
type: "string"
|
||||
description: "用户组描述"
|
||||
- name: "isSystem"
|
||||
type: "boolean"
|
||||
description: "是否为系统内置组 (如: 全体用户)"
|
||||
- name: "createdAt"
|
||||
type: "datetime"
|
||||
description: "创建时间"
|
||||
rules:
|
||||
- "All Users (全体用户) special group: Auto-join for new users; Cannot be deleted or modified; Users cannot exit."
|
||||
|
||||
- name: "Question"
|
||||
description: "题库管理"
|
||||
@@ -196,3 +216,18 @@ domains:
|
||||
- name: "updatedAt"
|
||||
type: "datetime"
|
||||
description: "更新时间"
|
||||
|
||||
- name: "Backup"
|
||||
description: "数据备份与恢复"
|
||||
entities:
|
||||
- name: "BackupRestore"
|
||||
description: "数据导出与导入"
|
||||
attributes:
|
||||
- name: "dataType"
|
||||
type: "enum"
|
||||
values: ["users", "questions", "records", "answers"]
|
||||
description: "数据类型"
|
||||
- name: "action"
|
||||
type: "enum"
|
||||
values: ["export", "restore"]
|
||||
description: "操作类型"
|
||||
|
||||
@@ -38,6 +38,29 @@ components:
|
||||
password:
|
||||
type: string
|
||||
description: "密码 (敏感字段;前端掩码显示)"
|
||||
groupIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
description: "所属用户组ID列表"
|
||||
UserGroup:
|
||||
type: object
|
||||
required: ["id", "name", "createdAt"]
|
||||
properties:
|
||||
id:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
isSystem:
|
||||
type: boolean
|
||||
createdAt:
|
||||
type: string
|
||||
format: date-time
|
||||
memberCount:
|
||||
type: integer
|
||||
description: "成员数量"
|
||||
QuestionCategory:
|
||||
type: object
|
||||
required: ["id", "name", "createdAt"]
|
||||
@@ -119,6 +142,9 @@ components:
|
||||
endAt:
|
||||
type: string
|
||||
format: date-time
|
||||
selectionConfig:
|
||||
type: string
|
||||
description: "JSON string storing original selection of userIds and groupIds"
|
||||
Pagination:
|
||||
type: object
|
||||
required: ["page", "limit", "total", "pages"]
|
||||
@@ -353,9 +379,39 @@ paths:
|
||||
in: query
|
||||
schema:
|
||||
type: integer
|
||||
- name: "keyword"
|
||||
in: query
|
||||
schema:
|
||||
type: string
|
||||
description: "搜索关键词(姓名/手机)"
|
||||
responses:
|
||||
"200":
|
||||
description: "User list"
|
||||
post:
|
||||
summary: "创建用户 (管理员)"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: ["name", "phone", "password"]
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
phone:
|
||||
type: string
|
||||
password:
|
||||
type: string
|
||||
groupIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "User created"
|
||||
delete:
|
||||
summary: "删除用户 (管理员)"
|
||||
security:
|
||||
@@ -374,6 +430,120 @@ paths:
|
||||
"200":
|
||||
description: "Deleted"
|
||||
|
||||
/api/admin/users/{id}:
|
||||
put:
|
||||
summary: "更新用户 (管理员)"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "id"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
phone:
|
||||
type: string
|
||||
password:
|
||||
type: string
|
||||
groupIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "User updated"
|
||||
|
||||
/api/admin/user-groups:
|
||||
get:
|
||||
summary: "获取用户组列表"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
responses:
|
||||
"200":
|
||||
description: "Group list"
|
||||
post:
|
||||
summary: "创建用户组"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: ["name"]
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Group created"
|
||||
|
||||
/api/admin/user-groups/{id}:
|
||||
put:
|
||||
summary: "更新用户组"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "id"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Group updated"
|
||||
delete:
|
||||
summary: "删除用户组"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "id"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Group deleted"
|
||||
|
||||
/api/admin/user-groups/{id}/members:
|
||||
get:
|
||||
summary: "获取用户组成员"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "id"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Group members"
|
||||
|
||||
/api/admin/users/export:
|
||||
get:
|
||||
summary: "导出用户 (管理员)"
|
||||
@@ -557,11 +727,12 @@ paths:
|
||||
- AdminBearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
description: "Create task with mixed selection of users and groups (system handles de-duplication)"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: ["name", "subjectId", "startAt", "endAt", "userIds"]
|
||||
required: ["name", "subjectId", "startAt", "endAt"]
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
@@ -577,6 +748,10 @@ paths:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
groupIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Created"
|
||||
@@ -594,10 +769,30 @@ paths:
|
||||
type: string
|
||||
requestBody:
|
||||
required: true
|
||||
description: "Update task with mixed selection (system handles de-duplication)"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
subjectId:
|
||||
type: string
|
||||
startAt:
|
||||
type: string
|
||||
format: date-time
|
||||
endAt:
|
||||
type: string
|
||||
format: date-time
|
||||
userIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
groupIds:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Updated"
|
||||
@@ -646,3 +841,144 @@ paths:
|
||||
responses:
|
||||
"200":
|
||||
description: "Config updated"
|
||||
|
||||
/api/admin/configs:
|
||||
get:
|
||||
summary: "获取所有系统配置"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
responses:
|
||||
"200":
|
||||
description: "All configs"
|
||||
|
||||
/api/admin/password:
|
||||
put:
|
||||
summary: "修改管理员密码"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: ["oldPassword", "newPassword"]
|
||||
properties:
|
||||
oldPassword:
|
||||
type: string
|
||||
newPassword:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Password updated"
|
||||
|
||||
/api/admin/export/{type}:
|
||||
get:
|
||||
summary: "通用数据导出"
|
||||
description: "type: users, questions, records, answers"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "type"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
enum: ["users", "questions", "records", "answers"]
|
||||
responses:
|
||||
"200":
|
||||
description: "JSON export data"
|
||||
|
||||
/api/admin/restore:
|
||||
post:
|
||||
summary: "数据恢复"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
users:
|
||||
type: array
|
||||
questions:
|
||||
type: array
|
||||
records:
|
||||
type: array
|
||||
answers:
|
||||
type: array
|
||||
responses:
|
||||
"200":
|
||||
description: "Data restored"
|
||||
|
||||
/api/exam-tasks/user/{userId}:
|
||||
get:
|
||||
summary: "获取指定用户的考试任务"
|
||||
parameters:
|
||||
- name: "userId"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "User tasks"
|
||||
|
||||
/api/admin/tasks/{id}/users:
|
||||
get:
|
||||
summary: "获取任务分派的用户"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "id"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Task users"
|
||||
|
||||
/api/admin/active-tasks:
|
||||
get:
|
||||
summary: "获取当前活跃任务统计"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
responses:
|
||||
"200":
|
||||
description: "Active tasks stats"
|
||||
|
||||
/api/users/validate:
|
||||
post:
|
||||
summary: "验证用户信息(用于导入校验)"
|
||||
requestBody:
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
required: ["phone"]
|
||||
properties:
|
||||
phone:
|
||||
type: string
|
||||
name:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Validation result"
|
||||
|
||||
/api/users/name/{name}:
|
||||
get:
|
||||
summary: "根据姓名查找用户"
|
||||
security:
|
||||
- AdminBearerAuth: []
|
||||
parameters:
|
||||
- name: "name"
|
||||
in: "path"
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
responses:
|
||||
"200":
|
||||
description: "Users found"
|
||||
|
||||
@@ -28,6 +28,50 @@ database:
|
||||
- name: "idx_users_created_at"
|
||||
columns: ["created_at"]
|
||||
|
||||
- name: "user_groups"
|
||||
columns:
|
||||
- name: "id"
|
||||
type: "TEXT"
|
||||
primaryKey: true
|
||||
- name: "name"
|
||||
type: "TEXT"
|
||||
nullable: false
|
||||
unique: true
|
||||
- name: "description"
|
||||
type: "TEXT"
|
||||
- name: "is_system"
|
||||
type: "INTEGER"
|
||||
default: "0"
|
||||
comment: "是否为系统内置组 (0:否, 1:是)"
|
||||
- name: "created_at"
|
||||
type: "DATETIME"
|
||||
default: "CURRENT_TIMESTAMP"
|
||||
indexes:
|
||||
- name: "idx_user_groups_name"
|
||||
columns: ["name"]
|
||||
|
||||
- name: "user_group_members"
|
||||
columns:
|
||||
- name: "group_id"
|
||||
type: "TEXT"
|
||||
nullable: false
|
||||
foreignKey:
|
||||
table: "user_groups"
|
||||
column: "id"
|
||||
- name: "user_id"
|
||||
type: "TEXT"
|
||||
nullable: false
|
||||
foreignKey:
|
||||
table: "users"
|
||||
column: "id"
|
||||
- name: "created_at"
|
||||
type: "DATETIME"
|
||||
default: "CURRENT_TIMESTAMP"
|
||||
indexes:
|
||||
- name: "idx_user_group_members_unique"
|
||||
columns: ["group_id", "user_id"]
|
||||
unique: true
|
||||
|
||||
- name: "question_categories"
|
||||
columns:
|
||||
- name: "id"
|
||||
|
||||
Reference in New Issue
Block a user