export type TimeRange = 'today' | 'week' | 'month' | 'quarter' | 'year';
|
export type ScreenKey = 'overview' | 'resource' | 'carbon' | 'participation' | 'operation';
|
export type RankMetric = 'weight' | 'people' | 'pointPerCapita' | 'weightPerCapita' | 'carbon';
|
|
export const SCREEN_NAV: { key: ScreenKey; path: string; index: string; label: string; audience: string }[] = [
|
{ key: 'overview', path: '/report/screen/overview', index: '01', label: '绿色校园总览', audience: '校领导' },
|
{ key: 'resource', path: '/report/screen/resource', index: '02', label: '垃圾资源化分析', audience: '后勤 / 环保' },
|
{ key: 'carbon', path: '/report/screen/carbon', index: '03', label: '碳减排与绿色贡献', audience: '双碳 / ESG' },
|
{ key: 'participation', path: '/report/screen/participation', index: '04', label: '师生参与与碳积分', audience: '学工 / 团委' },
|
{ key: 'operation', path: '/report/screen/operation', index: '05', label: '回收运营监控', audience: '运营公司' }
|
];
|
|
export const TIME_RANGE_OPTIONS: { label: string; value: TimeRange }[] = [
|
{ label: '今日', value: 'today' },
|
{ label: '本周', value: 'week' },
|
{ label: '本月', value: 'month' },
|
{ label: '本季度', value: 'quarter' },
|
{ label: '本年度', value: 'year' }
|
];
|
|
export interface ScreenData {
|
range: TimeRange | string;
|
axis: string[];
|
kpis: Record<string, number>;
|
wasteMix: { name: string; code?: string; weight: number; value: number; count: number; color: string }[];
|
recycleItems: { name: string; weight: number; value: number; carbon: number; color: string }[];
|
trend: { weight: number[]; value: number[]; carbon: number[] };
|
yearCarbon: number[];
|
deptRank: any[];
|
classRank: any[];
|
majorRank: any[];
|
pointFlow: { issued: number; transfer: number; donate: number; mall: number; balance: number };
|
participateTrend: number[];
|
deliverTrend: number[];
|
ordersByType: { axis: string[]; 现场回收: number[]; 预约上门: number[]; 大屏投递: number[]; 活动回收: number[] };
|
appointmentFlow: { name: string; value: number }[];
|
sorterStatus: { name: string; value: number; color: string }[];
|
vehicles: { no: string; km: number; idle: number; overspeed: number; status: string }[];
|
sites: { name: string; weight: number; online: boolean }[];
|
unavailable?: string[];
|
}
|
|
import { structureScreen } from './screen-structure';
|
|
/** 零值结构兜底,图表轴与品类名称仍完整 */
|
export function emptyScreen(range: TimeRange = 'month'): ScreenData {
|
return structureScreen(range);
|
}
|