feat: 实现20260730优化方案全部功能

- AI文件审查:.docx上传提取文本,支持多种文档类型
- 用工办理工作流:WorkProcess页面+后端API,支持入职/续签/终止等流程
- 企业自建文本库:Templates页面Tab切换,企业模板CRUD+渲染+下载Word
- 考勤发布:Attendance发布/取消发布按钮,员工端MyAttendance页面
- 工资条发布:Money发布/定时发送按钮+弹窗,portal端publishStatus过滤
- 合同到期弹窗:Dashboard合同到期预警可点击打开弹窗,支持续签/终止操作
- Prisma schema新增WorkProcess/EnterpriseTemplate/AttendancePublish模型
- 前后端编译验证全部通过
This commit is contained in:
freedakgmail
2026-07-30 10:21:22 +08:00
parent 38b8849332
commit 42e0c650a4
24 changed files with 3639 additions and 35 deletions
+64
View File
@@ -172,6 +172,9 @@ model Organization {
leaveRecords LeaveRecord[]
calendarEvents CalendarEvent[]
consultations Consultation[]
workProcesses WorkProcess[]
enterpriseTemplates EnterpriseTemplate[]
attendancePublishes AttendancePublish[]
}
model User {
@@ -252,6 +255,7 @@ model Employee {
shiftAssignments ShiftAssignment[]
leaveRecords LeaveRecord[]
calendarEvents CalendarEvent[]
workProcesses WorkProcess[]
@@unique([orgId, idCardHash])
}
@@ -628,6 +632,8 @@ model Payslip {
confirmedAt DateTime?
confirmedIp String?
publishedAt DateTime? // 工资条发布到员工端的时间
publishStatus String? // UNPUBLISHED/PUBLISHED/SCHEDULED
scheduledAt DateTime? // 定时发送时间
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -1171,3 +1177,61 @@ model Consultation {
@@index([orgId, status])
@@index([orgId, type])
}
// ========== 用工办理工作流 ==========
model WorkProcess {
id String @id @default(cuid())
orgId String
org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
type String // HIRE/ONBOARD/CUSTOM_CONTRACT/INFO_SUBMIT/CONFIRM/CHANGE/RENEW/SUSPEND/INCOME_CERT/TERMINATE/RESCIND/LEAVING_CERT/FLEXIBLE
title String
employeeId String?
employee Employee? @relation(fields: [employeeId], references: [id], onDelete: SetNull)
status String @default("DRAFT") // DRAFT/PENDING_APPROVAL/APPROVED/REJECTED/EXECUTING/COMPLETED/CANCELLED
formData Json // 表单数据 JSON
documents Json? // 生成的文书列表 [{name, content, type}]
approverId String?
approvedAt DateTime?
remark String?
createdBy String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([orgId, status])
@@index([orgId, type])
@@index([orgId, createdBy])
}
// ========== 企业自建文本模板 ==========
model EnterpriseTemplate {
id String @id @default(cuid())
orgId String
org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
name String
category String // CONTRACT/RULES/NOTICE/AGREEMENT/OTHER
description String?
content String @db.Text
variables String[] // 变量名列表
status String @default("ACTIVE") // ACTIVE/ARCHIVED
createdBy String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([orgId, category])
}
// ========== 考勤发布记录 ==========
model AttendancePublish {
id String @id @default(cuid())
orgId String
org Organization @relation(fields: [orgId], references: [id], onDelete: Cascade)
month String // YYYY-MM
title String // 如"2026年7月考勤表"
status String @default("PUBLISHED") // PUBLISHED/CANCELLED
publishDate DateTime @default(now())
createdBy String
createdAt DateTime @default(now())
@@unique([orgId, month])
@@index([orgId, month])
}