PayrollManagementSystem/frontend/src/api/dashboard.ts
liuwenxin 39a3fa7796 fix(dashboard): 修复普通用户落地页与待办角色过滤
- 新增 router/access.ts 统一准入与落地页(工作台→业务数据→回款),
  守卫/登录回跳/菜单/面包屑复用;普通用户不再被无限重定向
- 待办按角色映射在途审批节点(财务/领导/admin),admin 不代办但可查全部
- 预警排除已终止业务;WarningBlock.total 为全量命中数;回款趋势改日期范围
- 工作台加载请求序号防竞态;KPI 口径说明补经理分成/调整单
- 新增 role_home_flow e2e,更新 system_management 普通用户断言

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-20 09:45:03 +08:00

100 lines
2.2 KiB
TypeScript

import { request } from './request'
/** 近 6 个月趋势点(绩效按台账归属月,回款按到账月) */
export interface TrendPoint {
month: string
performance_total: string | null
receipt_total: string | null
}
export interface SettlementBrief {
exists: boolean
status: number | null
total_performance: string | null
total_payable: string | null
locked_at: string | null
}
export interface OverviewBlock {
month: string
performance_total: string | null
payable_total: string | null
person_count: number
team_count: number
settlement: SettlementBrief
trend: TrendPoint[]
note: string
}
export interface ApprovalTodoItem {
order_id: number
order_no: string
order_type: number
submitter_name: string | null
create_time: string
}
export interface ReceiptTodoItem {
receipt_id: number
receipt_batch_no: string
business_id: number
business_no: string | null
amount: string
receipt_date: string
}
export interface TodoBlock {
pending_approval_total: number
pending_approvals: ApprovalTodoItem[]
unassigned_receipt_total: number
unassigned_receipts: ReceiptTodoItem[]
sync_available: boolean
sync_failure_total: number
}
export interface WarningItem {
code: string
level: 'warning' | 'danger'
object_type: string
object_id: number
title: string
detail: string
suggest: string
link: string | null
}
export interface WarningBlock {
enabled: boolean
receipt_overdue_days: number
approval_timeout_days: number
/** 当前返回的条目(受展示上限约束) */
items: WarningItem[]
/** 全部规则命中总数;徽标计数用它,不能用 items.length */
total: number
receipt_overdue_total: number
approval_timeout_total: number
sync_available: boolean
}
export interface ActivityItem {
id: number
module: string
action: string
summary: string
username: string | null
success: number
create_time: string
}
export interface DashboardData {
month: string
overview: OverviewBlock
todos: TodoBlock
warnings: WarningBlock
activities: ActivityItem[]
}
export function getDashboard(params: { month?: string }): Promise<DashboardData> {
return request({ url: '/v1/dashboard', method: 'get', params })
}