Files
inquiry_robot/inquiry-backend/src/views/inquiry/mock/dashboard.ts
T

97 lines
3.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 分析看板 Mock:字段与原型 admin-dashboard.html 演示数据对齐。
*/
export type MetricCard = {
key: string;
label: string;
tip: string;
value: string;
isTime?: boolean;
};
export type InquiryPoint = { date: string; value: number };
export type RankingPerson = {
name: string;
role: "sales" | "route" | "product";
dept: string;
volumeNum: number;
};
export type CostRoute = {
id: string;
label: string;
color: string;
/** 与 costDates 对齐;某日无样本为 null */
values: Array<number | null>;
/** 前端根据 values 生成的 SVG path */
path: string;
/** 有金额的日子画点(仅一天有数时折线不可见,靠点可见) */
points: Array<{ x: number; y: number; index: number }>;
};
/** 今日视角九指标(与原型 5 列栅格、主账 InquiryDashboardServiceImpl 一致) */
export const todayMetrics: MetricCard[] = [
{ key: "inquiry", label: "询价总量", tip: "周期内询价工单总数", value: "128" },
{ key: "quoted", label: "报价工单", tip: "已报价工单数(已报价 + 议价中 + 已成交 + 未成交)", value: "92 单" },
{ key: "tms", label: "标准报价命中率", tip: "命中 TMS 标准价的询价数 ÷ 询价总数 × 100%", value: "67.8%" },
{ key: "avgSale", label: "平均报价销售额", tip: "AVG(已勾选报价的销售价)", value: "12800" },
{ key: "manual", label: "手工工单占比", tip: "人工报价的询价数 ÷ 询价总数 × 100%", value: "32.0%" },
{ key: "pending", label: "待处理工单", tip: "工单总数 − 已成交 − 未成交 − 已关闭", value: "39 单" },
{ key: "dealRate", label: "报价成功率", tip: "已成交数 ÷ 已报价数 × 100%", value: "34.8%" },
{ key: "feedback", label: "报价有效率", tip: "(已成交 + 未成交)÷ 工单数 × 100%", value: "60.2%" },
{
key: "avgResp",
label: "内部报价平均响应",
tip: "AVG(首次有效回复时间 − 分发时间)",
value: "8m42s",
isTime: true,
},
];
export const inquiryTrend: InquiryPoint[] = [
{ date: "06-12", value: 72 },
{ date: "06-13", value: 84 },
{ date: "06-14", value: 76 },
{ date: "06-15", value: 92 },
{ date: "06-16", value: 88 },
{ date: "06-17", value: 102 },
{ date: "06-18", value: 128 },
];
export const rankingPeople: RankingPerson[] = [
{ name: "张磊", role: "route", dept: "空运航线部", volumeNum: 38 },
{ name: "张三", role: "route", dept: "空运航线部", volumeNum: 35 },
{ name: "林芳", role: "route", dept: "空运航线部", volumeNum: 26 },
{ name: "赵六", role: "route", dept: "空运航线部", volumeNum: 22 },
{ name: "王伟", role: "product", dept: "海运产品部", volumeNum: 42 },
{ name: "陈昊", role: "product", dept: "海运产品部", volumeNum: 31 },
{ name: "周琳", role: "product", dept: "陆运产品部", volumeNum: 18 },
{ name: "王五", role: "product", dept: "陆运产品部", volumeNum: 15 },
{ name: "张敏", role: "sales", dept: "华东销售一部", volumeNum: 29 },
{ name: "李华", role: "sales", dept: "华南销售二部", volumeNum: 24 },
{ name: "刘洋", role: "sales", dept: "陆运销售部", volumeNum: 21 },
];
export const rankingDepts = [
"华东销售一部",
"华南销售二部",
"陆运销售部",
"空运航线部",
"海运产品部",
"陆运产品部",
];
/** 成本趋势折线:路径坐标对齐原型 SVG(仅作样式参考;正式数据来自主账) */
export const costRoutes: CostRoute[] = [
{
id: "cgo-kul",
label: "CGO-KUL",
color: "#2563eb",
values: [120, 118, 125, 110, 115, 105, 100],
path: "M36 56 L145 51 L254 61 L363 46 L472 50 L581 41 L690 36",
points: [],
},
];