Files
DashBoard/openspec/specs/timeline-chart/spec.md
egg 5b358d71c1 feat(query-tool): rewrite frontend with ECharts tree, multi-select, and modular composables
Replace the monolithic useQueryToolData composable and nested Vue component tree
with a modular architecture: useLotResolve, useLotLineage, useLotDetail, and
useEquipmentQuery. Introduce ECharts TreeChart (LR orthogonal layout) for lot
lineage visualization with multi-select support, subtree expansion, zoom/pan,
and serial number normalization. Add unified LineageEngine backend with split
descendant traversal and leaf serial number queries. Archive the query-tool-rewrite
openspec change and sync delta specs to main.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 15:25:00 +08:00

51 lines
2.6 KiB
Markdown

## ADDED Requirements
### Requirement: TimelineChart component SHALL render configurable Gantt-style timelines
A shared `TimelineChart` component SHALL accept structured track/event data and render a horizontal timeline with SVG/CSS.
#### Scenario: Basic track rendering
- **WHEN** TimelineChart receives tracks with bars (each bar having start time, end time, type)
- **THEN** it SHALL render a horizontal time axis and one row per track
- **THEN** each bar SHALL be positioned proportionally along the time axis with width reflecting duration
#### Scenario: Color mapping
- **WHEN** bars have different `type` values
- **THEN** each type SHALL be rendered with a color from the provided `colorMap` prop
- **THEN** a legend SHALL be displayed showing type-to-color mapping
#### Scenario: Event markers
- **WHEN** the component receives events (point-in-time markers)
- **THEN** each event SHALL render as a marker (diamond/triangle icon) at the corresponding time position on its track
- **THEN** hovering over a marker SHALL display a tooltip with the event label and details
#### Scenario: Time axis adapts to data range
- **WHEN** the timeline data spans hours
- **THEN** the time axis SHALL show hour ticks (e.g., 06:00, 07:00, ...)
- **WHEN** the timeline data spans days
- **THEN** the time axis SHALL show date ticks (e.g., 02-10, 02-11, ...)
#### Scenario: Horizontal scroll for long timelines
- **WHEN** the timeline data exceeds the visible width
- **THEN** the component SHALL support horizontal scrolling
- **THEN** track labels on the left SHALL remain fixed (sticky) during scroll
#### Scenario: Bar tooltip on hover
- **WHEN** the user hovers over a bar segment
- **THEN** a tooltip SHALL display the bar's label, start time, end time, and duration
### Requirement: TimelineChart SHALL support multi-layer overlapping tracks
The component SHALL support rendering multiple bar layers on a single track row (e.g., status bars behind lot bars).
#### Scenario: Overlapping layers
- **WHEN** a track has multiple layers (e.g., `statusBars` and `lotBars`)
- **THEN** background layer bars SHALL render behind foreground layer bars
- **THEN** both layers SHALL be visible (foreground bars shorter in height or semi-transparent)
### Requirement: TimelineChart SHALL have no external charting dependencies
The component SHALL be implemented using only SVG elements and CSS, with no external charting library.
#### Scenario: Zero additional dependencies
- **WHEN** the TimelineChart component is used
- **THEN** it SHALL NOT require any npm package not already in the project
- **THEN** rendering SHALL use inline SVG elements within the Vue template