Files
DashBoard/openspec/changes/reject-history-query-page/specs/vue-vite-page-architecture/spec.md
egg 248cbc25e0 fix(query-tool): batch detail loading, UX polish, and docs cleanup
- Fix multi-WO display: auto-select all tree roots after resolve so detail
  panel loads data for every work order, not just the first seed CID
- Disable scroll-wheel zoom on lineage tree (roam: 'move') to prevent
  accidental layout jumps while preserving drag-pan
- Add batch API endpoints (get_lot_history_batch, get_lot_associations_batch)
  to avoid N parallel requests hitting rate limits
- Remove redundant Split sub-tab from LOT detail (tree already shows splits)
- Rename 退貨 → 報廢 to match actual reject/scrap data semantics
- Hide internal ID columns (CONTAINERID, EQUIPMENTID, RESOURCEID) from
  history table display
- Add timeline scroll container and time range header for long timelines
- Remove obsolete migration and architecture docs no longer needed

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

1.9 KiB

ADDED Requirements

Requirement: Reject History page SHALL be a pure Vite HTML entry

The reject-history page SHALL be built from an HTML entry and emitted as static dist assets.

Scenario: Vite entry registration

  • WHEN Vite config inputs are evaluated
  • THEN reject-history SHALL map to frontend/src/reject-history/index.html

Scenario: Build output artifacts

  • WHEN vite build completes
  • THEN output SHALL include reject-history.html, reject-history.js, and reject-history.css in static/dist/

Requirement: Reject History route SHALL serve static dist HTML

The Flask route for /reject-history SHALL serve pre-built static HTML through send_from_directory.

Scenario: Static page serving

  • WHEN user navigates to /reject-history
  • THEN Flask SHALL serve static/dist/reject-history.html when the file exists
  • THEN HTML SHALL NOT be rendered through Jinja template interpolation

Scenario: Dist fallback response

  • WHEN reject-history.html is missing in dist
  • THEN route SHALL return a minimal fallback HTML that still references /static/dist/reject-history.js

Requirement: Reject History shell integration SHALL use native module loading

The page SHALL integrate with portal-shell native module loading policy.

Scenario: Native module registration

  • WHEN shell resolves a route component for /reject-history
  • THEN it SHALL dynamically import frontend/src/reject-history/App.vue
  • THEN the route style bundle SHALL be loaded via registered style loaders

Requirement: Reject History page SHALL call APIs through shared core API module

The page SHALL call backend APIs via frontend/src/core/api.js without legacy global dependencies.

Scenario: API call path

  • WHEN reject-history page executes GET or export requests
  • THEN requests SHALL use shared API utilities (apiGet/equivalent)
  • THEN page behavior SHALL NOT depend on window.MesApi