feat: 看板重构 — 在制品看板 + 留言未读数
核心理念转变:
旧: 最近操作历史(谁做了什么)
新: 当前在制品状态(谁的活卡了多久)
后端:
- DashboardStats 新增 unread_messages(协同留言总数)
- 新增 GET /dashboard/wip-tasks(在制品端点)
- 按滞留时间升序排列,PENDING/WIP 任务倒计时
- 自动计算 duration_hours(已滞留小时数)
前端:
- 品质卡片: 新增留言未读数(紫色)
- 在制品看板: 替换原最近动态
每行显示: 状态徽标 | 任务名+负责人+身份证 | 滞留时长
- 滞留颜色: 48h+红 | 24h+橙 | 8h+黄 | <8h灰
- 系统通知可点击跳转
This commit is contained in:
@ -12,15 +12,17 @@ export interface DashboardStats {
|
||||
tasks_rejected: number;
|
||||
tasks_rework: number;
|
||||
unread_notifications: number;
|
||||
unread_messages: number;
|
||||
}
|
||||
|
||||
export interface RecentActivity {
|
||||
action: string;
|
||||
export interface WipTask {
|
||||
task_id: string;
|
||||
task_name: string;
|
||||
operator: string;
|
||||
assignee: string;
|
||||
product_sn: string;
|
||||
time: string;
|
||||
remark: string | null;
|
||||
status: string;
|
||||
received_at: string;
|
||||
duration_hours: number;
|
||||
}
|
||||
|
||||
export async function fetchDashboardStats(): Promise<DashboardStats> {
|
||||
@ -28,14 +30,7 @@ export async function fetchDashboardStats(): Promise<DashboardStats> {
|
||||
return data;
|
||||
}
|
||||
|
||||
export async function fetchRecentActivity(
|
||||
limit = 10,
|
||||
since?: string,
|
||||
until?: string,
|
||||
): Promise<RecentActivity[]> {
|
||||
const params: Record<string, string | number> = { limit };
|
||||
if (since) params.since = since;
|
||||
if (until) params.until = until;
|
||||
const { data } = await api.get<RecentActivity[]>("/dashboard/recent-activity", { params });
|
||||
export async function fetchWipTasks(limit = 20): Promise<WipTask[]> {
|
||||
const { data } = await api.get<WipTask[]>("/dashboard/wip-tasks", { params: { limit } });
|
||||
return data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user