geo/frontend/types/dashboard-health.ts

147 lines
3.1 KiB
TypeScript

/**
* 健康状态Dashboard类型定义
*/
import type {
ActionPriority as ActionPriorityBase,
ActionItem,
} from "./suggestion";
// 健康等级
export type HealthLevel = "excellent" | "good" | "pass" | "danger";
// 健康等级配置
export interface HealthLevelConfig {
level: HealthLevel;
label: string;
icon: string;
color: {
bg: string;
text: string;
border: string;
};
minScore: number;
maxScore: number;
}
// 健康等级配置映射
export const HEALTH_LEVEL_CONFIG: Record<HealthLevel, HealthLevelConfig> = {
excellent: {
level: "excellent",
label: "优秀",
icon: "✓",
color: {
bg: "bg-emerald-50",
text: "text-emerald-600",
border: "border-emerald-200",
},
minScore: 80,
maxScore: 100,
},
good: {
level: "good",
label: "良好",
icon: "~",
color: {
bg: "bg-yellow-50",
text: "text-yellow-600",
border: "border-yellow-200",
},
minScore: 60,
maxScore: 79,
},
pass: {
level: "pass",
label: "及格",
icon: "!",
color: {
bg: "bg-orange-50",
text: "text-orange-600",
border: "border-orange-200",
},
minScore: 40,
maxScore: 59,
},
danger: {
level: "danger",
label: "危险",
icon: "⚠",
color: {
bg: "bg-red-50",
text: "text-red-600",
border: "border-red-200",
},
minScore: 0,
maxScore: 39,
},
};
// 平台评分(带竞品对比)
export interface PlatformScoreWithCompetitor {
platform: string;
score: number;
competitor_score?: number;
competitor_name?: string;
// 兼容旧字段名
competitorScore?: number;
competitorName?: string;
}
// 维度评分项
export interface DimensionScore {
name: string;
score: number;
max_score: number;
percentage: number;
}
// Dashboard统计数据
export interface DashboardStats {
overall_score: number;
health_level?: HealthLevel;
score_change: number;
platform_scores: PlatformScoreWithCompetitor[];
recent_queries: RecentQuery[];
// V2新增字段
dimensions?: DimensionScore[];
brand_name?: string;
competitors_ahead?: number; // 领先的竞品数
competitors_behind?: number; // 落后的竞品数
monitored_platforms?: number;
total_platforms?: number;
}
// 最近查询记录
export interface RecentQuery {
id: string;
keyword: string;
target_brand: string;
citation_count: number;
queried_at: string;
}
// 行动建议(扩展自统一 ActionItem 类型)
export type ActionPriority = ActionPriorityBase;
export interface ActionSuggestion extends Omit<ActionItem, "priority"> {
type: ActionPriority;
priority: number; // 排序优先级(数字越小越优先)
}
// 维度名称映射
export const DIMENSION_LABELS: Record<string, string> = {
: "提及率",
: "推荐排名",
: "情感倾向",
: "引用质量",
: "竞品对比",
};
// 维度颜色映射
export const DIMENSION_COLORS: Record<string, string> = {
: "bg-blue-500",
: "bg-purple-500",
: "bg-emerald-500",
: "bg-amber-500",
: "bg-rose-500",
};