- Move shared platform JS (source/point/equipment/chart/events/...) from
web/feeder/js to web/core/js/platform; both apps load it via the ServeDir
core fallback (subdir avoids shadowing ops' own api.js/dom.js).
- Add platform-config.js and log-stream.js as shared modules; feeder app.js
and logs.js now delegate instead of inlining (no duplication).
- ops: add 平台配置 tab reusing the shared panels; rename 段/工位配置 ->
应用配置; move tabs into the topbar like feeder.
- Align view layout across both apps: 系统事件 in 运行监控 (live via WS),
实时日志 in 平台配置.
- Titles: 投煤控制系统 / 隧道窑运转系统; feeder 运维 tab -> 运行监控.
- Update README; add CLAUDE.md documenting the shared-frontend architecture.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Lifts ControlUnit, UnitRuntime/State, ControlRuntimeStore and unit CRUD
into app_feeder_distributor; their feeder-specific semantics
(DistributorRunning state, run_time/stop_time/acc_time/bl_time pacing)
violated the shared-core invariant.
WsMessage drops the UnitRuntimeChanged variant in favor of a generic
AppEvent(AppWsEvent) carrying {app, event_type, data}. Feeder emits
"feeder"/"unit_runtime_changed"; the web client dispatches by app
namespace, leaving core free of business types. The equipment handler
keeps its friendly unit-exists check by issuing an inline EXISTS query
instead of pulling the unit service.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The web/core, web/feeder, and web/ops directories were mistakenly
committed as deletions. Restore from f8757a7.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Clean up old web module files that were superseded by the per-app
split architecture. Includes plan documentation for the migration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Batch equipment-unit assignment is now handled via the "选择设备"
modal in app-config. Remove the batch toolbar, checkbox selection,
and related JS/state from the equipment panel in platform config.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix unit-config-list grid by increasing specificity over .list flex
- Equipment selection modal uses card grid (auto-fill 150px) instead
of one-per-line list
- Widen modal to accommodate card grid
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Unit cards in app-config use CSS grid (auto-fill 260px min) for
compact card layout across the full page
- Each card shows bound equipment tags and a "选择设备" button
- Equipment selection modal allows multi-select with checkboxes,
calls batch set-unit API to bind/unbind, then refreshes
- App-config loads both units and equipments on first switch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Unit cards in app-config use CSS grid with auto-fill columns
- Equipment panel (with batch unit assignment) visible in both
app-config and platform-config views
- App-config loads both units and equipments on first switch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Delete feeder source-panel override (units no longer in platform config)
- Extract buildUnitCard() and render to both unitList and unitConfigList
- Guard null DOM refs for removed unit buttons
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>