forked from admin/hair-keeper
feat: Hair Keeper v1.1.0 版本更新
本次更新包含以下主要改进: ## 新功能 - 添加quickstart.sh脚本帮助用户快速使用模板项目 - 添加simple_deploy.sh便于部署 - 新增院系管理功能(DeptAdmin),支持增删改查院系管理员信息 - 用户可以在header中切换管理的院系 - 添加zustand全局状态管理 - 添加DEFAULT_USER_PASSWORD环境变量,作为创建用户时的默认密码 - 添加p-limit库和DB_PARALLEL_LIMIT环境变量控制数据库批次操作并发数 ## 安全修复 - 修复Next.js CVE-2025-66478漏洞 - 限制只有超级管理员才能创建超级管理员用户 ## 开发环境优化 - 开发终端兼容云端环境 - MinIO客户端直传兼容云端环境 - 开发容器增加vim和Claude Code插件 - 编程代理改用Claude - docker-compose.yml添加全局name属性 ## Bug修复与代码优化 - 删除用户时级联删除SelectionLog - 手机端关闭侧边栏后刷新页面延迟调整(300ms=>350ms) - instrumentation.ts移至src内部以适配生产环境 - 删除部分引发类型错误的无用代码 - 优化quickstart.sh远程仓库推送相关配置 ## 文件变更 - 新增49个文件,修改多个配置和源代码文件 - 重构用户管理模块目录结构 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,7 @@ model User {
|
||||
name String?
|
||||
status String? // 在校/减离/NULL
|
||||
deptCode String? @map("dept_code") // 所属院系代码(外键)
|
||||
currentManagedDept String? @map("current_managed_dept") @db.VarChar(5) // 当前正在管理的院系代码,用于支持院系管理员类型的角色
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
||||
password String
|
||||
@@ -29,6 +30,7 @@ model User {
|
||||
dept Dept? @relation(fields: [deptCode], references: [code])
|
||||
roles Role[] // 多对多关联角色
|
||||
selectionLogs SelectionLog[] // 选择日志
|
||||
deptAdmins DeptAdmin[] // 作为院系管理员的信息
|
||||
|
||||
@@map("user")
|
||||
}
|
||||
@@ -41,10 +43,31 @@ model Dept {
|
||||
|
||||
// 关联
|
||||
users User[]
|
||||
deptAdmins DeptAdmin[] // 院系管理员
|
||||
|
||||
@@map("dept")
|
||||
}
|
||||
|
||||
// 院系管理员表
|
||||
model DeptAdmin {
|
||||
id Int @id @default(autoincrement())
|
||||
uid String @db.VarChar(30) // 管理员用户ID(外键)
|
||||
deptCode String @map("dept_code") @db.VarChar(5) // 院系代码(外键)
|
||||
adminEmail String? @map("admin_email") @db.VarChar(100) // 管理员邮箱
|
||||
adminLinePhone String? @map("admin_line_phone") @db.VarChar(100) // 管理员座机
|
||||
adminMobilePhone String? @map("admin_mobile_phone") @db.VarChar(100) // 管理员手机
|
||||
note String? @db.VarChar(1000) // 备注
|
||||
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
|
||||
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz
|
||||
|
||||
// 关联
|
||||
user User @relation(fields: [uid], references: [id])
|
||||
dept Dept @relation(fields: [deptCode], references: [code])
|
||||
|
||||
@@unique([uid, deptCode], name: "uidx_uid_dept_code")
|
||||
@@map("dept_admin")
|
||||
}
|
||||
|
||||
// 角色表
|
||||
model Role {
|
||||
id Int @id @default(autoincrement())
|
||||
@@ -68,7 +91,7 @@ model Permission {
|
||||
model SelectionLog {
|
||||
id Int @id @default(autoincrement())
|
||||
userId String // 关联到用户
|
||||
user User @relation(fields: [userId], references: [id])
|
||||
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
|
||||
// 用于标识是哪个的选项,用.进行分隔,例如"user.filter.dept"
|
||||
context String
|
||||
|
||||
Reference in New Issue
Block a user