# 里程碑时间线 (Milestone)
## Content 约束
- 节点 4-8 个
- 每节点:标题 + 日期 + 可选描述
- 时间从左到右递增
## Layout 选型
两种方案按需选择:
1. **横向时间线**:horizontal frame,节点等分
2. **交替上下**:绝对定位,节点交替在时间轴上下方(节点多时更紧凑)
## 结构特征
- **标题居中**:顶部放置图表标题
- **年份/时间轴条**:箭头形色块承载年份,按时间从左到右递增
- **里程碑卡片**:下方虚线圆角卡片承载标题与描述
- **严格对齐**:年份条与对应卡片等宽,左右对齐
- **文字层级**:标题加粗在上,描述文字更小更浅在下,居中对齐
## Layout 规则
- 绝对定位为主(`layout: "none"`),节点位置承载时间序列含义
- 先确定里程碑数量,计算等距的 x 坐标序列
- 时间轴用 connector 贯穿所有节点
- 节点与时间轴用短竖线连接
- 节点间水平间距一致
- 年份条宽度 = 卡片宽度,垂直间距统一
- 标题与年份区域保留足够留白
## 骨架示例
```json
{
"version": 2,
"nodes": [
{
"type": "frame",
"x": 0, "y": 0,
"width": 1200, "height": 360,
"layout": "none",
"children": [
{
"type": "text",
"x": 300, "y": 12,
"width": 600, "height": "fit-content",
"text": [{ "content": "{{CHART_TITLE}}", "bold": true, "fontSize": 24 }],
"textAlign": "center"
},
{
"type": "svg",
"x": 50, "y": 56,
"width": 190, "height": 36,
"svg": {
"code": ""
}
},
{
"type": "text",
"x": 50, "y": 64,
"width": 190, "height": "fit-content",
"text": "{{DATE_1}}",
"textAlign": "center"
},
{
"type": "rect",
"x": 50, "y": 132,
"width": 190, "height": 120,
"borderDash": "dashed",
"borderRadius": 8
},
{
"type": "text",
"x": 50, "y": 150,
"width": 190, "height": "fit-content",
"text": [{ "content": "{{MILESTONE_1_TITLE}}", "bold": true, "fontSize": 16 }],
"textAlign": "center"
},
{
"type": "text",
"x": 50, "y": 180,
"width": 190, "height": "fit-content",
"text": "{{MILESTONE_1_DESC}}",
"fontSize": 13,
"textAlign": "center"
},
{
"type": "svg",
"x": 290, "y": 56,
"width": 190, "height": 36,
"svg": {
"code": ""
}
},
{
"type": "text",
"x": 290, "y": 64,
"width": 190, "height": "fit-content",
"text": "{{DATE_2}}",
"textAlign": "center"
},
{
"type": "rect",
"x": 290, "y": 132,
"width": 190, "height": 120,
"borderDash": "dashed",
"borderRadius": 8
},
{
"type": "text",
"x": 290, "y": 150,
"width": 190, "height": "fit-content",
"text": [{ "content": "{{MILESTONE_2_TITLE}}", "bold": true, "fontSize": 16 }],
"textAlign": "center"
},
{
"type": "text",
"x": 290, "y": 180,
"width": 190, "height": "fit-content",
"text": "{{MILESTONE_2_DESC}}",
"fontSize": 13,
"textAlign": "center"
}
]
}
]
}
```
## 陷阱
- **节点太多时太拥挤**:超过 6 个节点时考虑交替上下布局或增大画布宽度
- **右侧节点与时间轴末端重叠**:最后一个节点的 x + width 不要超出画布边界
- **年份条与卡片不对齐**:年份条和卡片的 x、width 必须完全一致