fix: portal端token过期后自动跳转登录页,避免显示空数据

- portalAxios 401 响应拦截器:清除 token 并跳转 /portal/login
- PortalLayoutWrapper:检查 token 是否存在,不存在则跳转登录页
- 排除 /portal/login 和 /portal/auto-login 页面避免重复跳转

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
selfrelease
2026-08-17 15:06:46 +08:00
parent c66ea290eb
commit 5196d7c80a
23 changed files with 812 additions and 74 deletions
+8 -1
View File
@@ -240,7 +240,9 @@ model Employee {
// 组织架构扩展
departmentId String? // 关联 Department 表(兼容旧 department 字符串)
supervisorId String? // 直属上级员工ID
monthlySalary String // AES-256 加密存储
monthlySalary String // AES-256 加密存储(月薪总额 = 基本工资 + 绩效工资)
baseSalary String? // 基本工资(AES-256 加密,null=旧数据未拆分)
performanceSalary String? // 绩效工资(AES-256 加密,可为"0"null=旧数据未拆分)
status EmployeeStatus @default(ACTIVE)
gender String?
phone String?
@@ -348,6 +350,8 @@ model LaborContract {
contractYears Int @default(3)
probationMonths Int @default(0)
probationSalary Int @default(0)
baseSalary Int @default(0) // 基本工资(转正后)
performanceSalary Int @default(0) // 绩效工资(转正后,可为0)
renewalCount Int @default(0)
attachmentName String?
attachmentUrl String?
@@ -713,6 +717,7 @@ model DisciplinaryRecord {
severity String @default("WARNING") // WARNING/SERIOUS/SEVERE
action String @default("ORAL_WARNING") // ORAL_WARNING/WRITTEN_WARNING/DEDUCTION/DEMOTION/TERMINATION
actionDetail String?
deductionAmount Float @default(0) // 扣款金额(action=DEDUCTION 时填写,用于薪资批次导入)
employeeAck Boolean @default(false) // 员工是否签字确认
ackDate DateTime?
ackMethod String? // SIGN/ELECTRONIC/REFUSED
@@ -820,6 +825,7 @@ model Payslip {
month String // YYYY-MM
// 薪酬构成
baseSalary Float @default(0)
performanceSalary Float @default(0) // 绩效工资
overtimePay Float @default(0)
weekdayOvertimePay Float @default(0)
weekendOvertimePay Float @default(0)
@@ -1194,6 +1200,7 @@ model AttendanceConfirmation {
weekendHours Float @default(0)
holidayHours Float @default(0)
overtimePay Float @default(0)
deductionAmount Float @default(0) // 考勤扣款金额(迟到/早退/旷工等,手动填写,用于薪资批次导入)
confirmedAt DateTime?
confirmedBy String?
confirmIp String?