数据模型
User
文件:models/user.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| Username | string | 用户名,非空,唯一索引 |
| Password | string | 密码(bcrypt 哈希),JSON 不输出 |
| Status | string | 状态,非空,默认 "active",最长 20:active/disabled |
| Roles | []Role | 角色,多对多 user_roles |
| CreatedAt | time.Time | 创建时间 |
| UpdatedAt | time.Time | 更新时间 |
Role
文件:models/role.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| Name | string | 角色名,唯一索引 |
| Description | string | 角色描述 |
Department
文件:models/department.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| Name | string | 部门名称,非空,唯一 |
| Description | string | 部门描述,最长 500 |
| LeaderID | *uint | 部门负责人 Employee ID,索引,null 表示暂无负责人 |
| Leader | *Employee | 关联的负责人员工对象(外键 LeaderID) |
| ParentID | *uint | 父部门 ID,索引,null 表示顶级部门 |
| Parent | *Department | 关联的父部门对象(外键 ParentID) |
| Children | []Department | 关联的子部门列表(外键 ParentID) |
| CreatedAt | time.Time | 创建时间 |
| UpdatedAt | time.Time | 更新时间 |
| CreatedBy | string | 创建人,最长 100 |
| UpdatedBy | string | 更新人,最长 100 |
DeptTreeNode(树形响应结构):
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 部门 ID |
| Name | string | 部门名称 |
| Description | string | 部门描述 |
| LeaderID | *uint | 部门负责人 Employee ID |
| LeaderName | string | 负责人姓名(仅树形响应) |
| ParentID | *uint | 父部门 ID |
| Children | []DeptTreeNode | 子部门列表 |
Employee
文件:models/employee.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| UserID | *uint | 关联用户 ID,唯一索引,null 表示未关联登录账号 |
| User | *User | 关联的用户对象(外键 UserID) |
| Name | string | 姓名,非空 |
| string | 邮箱,非空,唯一 | |
| Phone | string | 手机号,最长 20 |
| IDNumber | string | 身份证号,最长 18,数据库列名 id_number |
| DeptID | uint | 所属部门 ID,外键 |
| Department | Department | 关联的部门对象 |
| Status | string | 状态,默认 "active" |
| WorkStartTime | string | 上班时间,默认 "09:00",最长 5 |
| WorkEndTime | string | 下班时间,默认 "18:00",最长 5 |
| CreatedAt | time.Time | 创建时间 |
| UpdatedAt | time.Time | 更新时间 |
| CreatedBy | string | 创建人,最长 100 |
| UpdatedBy | string | 更新人,最长 100 |
表关系
Department 1 ←→ N Department(自引用,parent_id 外键)
Department 1 ←→ N Employee
User 1 ←→ 0..1 Employee(user_id 外键)
Employee 1 ←→ 1 SalaryStructure
Employee 1 ←→ N SalaryRecord
Employee 1 ←→ N AttendanceRecord
Employee 1 ←→ N AttendanceSummary
Employee 1 ←→ N LeaveRequest
Department 通过 ParentID 自引用建立层级树。Employee 通过 DeptID 外键关联 Department,GORM 查询时用 Preload 预加载。
SalaryStructure
文件:models/salary.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| EmployeeID | uint | 员工 ID,非空,唯一索引 |
| BaseSalary | float64 | 基本工资,非空,默认 0 |
| PositionAllowance | float64 | 岗位津贴,非空,默认 0 |
| PerformanceFactor | float64 | 绩效系数,非空,默认 1 |
| CreatedAt | time.Time | 创建时间 |
| UpdatedAt | time.Time | 更新时间 |
| CreatedBy | string | 创建人,最长 100 |
| UpdatedBy | string | 更新人,最长 100 |
SalaryRecord
文件:models/salary.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| EmployeeID | uint | 员工 ID,非空,索引 |
| StructureID | uint | 薪资结构 ID(快照),非空 |
| Year | int | 年份,非空 |
| Month | int | 月份,非空 |
| BaseSalary | float64 | 生成时的基本工资(快照) |
| PositionAllowance | float64 | 生成时的岗位津贴(快照) |
| PerformanceFactor | float64 | 本月绩效系数 |
| ActualSalary | float64 | 实发薪资 = (基本工资 + 岗位津贴) × 绩效系数 |
| Status | string | 状态,非空,默认 draft:draft/pending/approved/rejected/paid |
| ReviewedBy | string | 审核人,最长 100 |
| ReviewedAt | *time.Time | 审核时间 |
| PaidBy | string | 发放人,最长 100 |
| PaidAt | *time.Time | 发放时间 |
| CreatedAt | time.Time | 创建时间 |
| CreatedBy | string | 创建人,最长 100 |
AttendanceRecord
文件:models/attendance.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| EmployeeID | uint | 员工 ID,非空,索引 |
| Date | time.Time | 日期(date 类型) |
| ClockIn | *time.Time | 上班打卡时间 |
| ClockOut | *time.Time | 下班打卡时间 |
| CreatedBy | string | 创建人,最长 100 |
| CreatedAt | time.Time | 创建时间 |
AttendanceSummary
文件:models/attendance.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| EmployeeID | uint | 员工 ID,非空,索引 |
| Year | int | 年份,非空 |
| Month | int | 月份,非空 |
| NormalDays | int | 正常天数,默认 0 |
| LateDays | int | 迟到天数,默认 0 |
| EarlyDays | int | 早退天数,默认 0 |
| AbsentDays | int | 缺勤天数,默认 0 |
| CreatedAt | time.Time | 创建时间 |
LeaveRequest
文件:models/leave.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| EmployeeID | uint | 员工 ID,非空,索引 |
| Type | string | 请假类型,最长 20:annual/sick/personal |
| StartDate | time.Time | 开始日期(date 类型) |
| EndDate | time.Time | 结束日期(date 类型) |
| Reason | string | 请假原因,最长 500 |
| Status | string | 状态,默认 pending:pending/approved/rejected |
| ReviewedBy | string | 审批人,最长 100 |
| ReviewedAt | *time.Time | 审批时间 |
| CreatedBy | string | 创建人,最长 100 |
| CreatedAt | time.Time | 创建时间 |
AuditLog
文件:models/audit_log.go
| 字段 | 类型 | 说明 |
|---|---|---|
| ID | uint | 主键,自增 |
| Operator | string | 操作人,最长 64,索引 |
| Action | string | 操作类型,最长 32,索引 |
| EntityType | string | 实体类型,最长 64,索引 |
| EntityID | uint | 实体 ID,索引 |
| Changes | string | 变更内容,jsonb |
| IPAddress | string | 操作 IP,最长 45 |
| CreatedAt | time.Time | 操作时间,索引 |