|
|
@@ -1116,10 +1116,7 @@ export async function apiGetCrossingDetailData(id, { iconMode = 'default' } = {}
|
|
|
let cycleLength = _getCycleLength(id)
|
|
|
let phaseData = _makePhaseData(cycleLength, false, 'simple', id)
|
|
|
|
|
|
- // 双相位图示例路口:N 阶段 + thisCycle/lastCycle 双结构
|
|
|
- // 走独立的相位生成器;外层 phaseData/cycleLength 同步覆盖,保持向后兼容字段一致
|
|
|
- let thisCycle = null
|
|
|
- let lastCycle = null
|
|
|
+ // 双相位图示例路口:N 阶段(≠4)走独立相位生成器,覆盖外层 phaseData/cycleLength
|
|
|
const _dualSamples = {
|
|
|
JNC900032: { stageCount: 32, cycleLength: 160, schemeName: '32阶段示范方案' },
|
|
|
JNC900016: { stageCount: 16, cycleLength: 160, schemeName: '16阶段示范方案' },
|
|
|
@@ -1127,30 +1124,31 @@ export async function apiGetCrossingDetailData(id, { iconMode = 'default' } = {}
|
|
|
if (_dualSamples[id]) {
|
|
|
const cfgSample = _dualSamples[id]
|
|
|
cycleLength = cfgSample.cycleLength
|
|
|
- const planPhaseData = _makeFlexiblePhaseData(cycleLength, cfgSample.stageCount)
|
|
|
- phaseData = planPhaseData
|
|
|
-
|
|
|
- const nowSec = Math.floor(Date.now() / 1000)
|
|
|
- const currentTimeIn = nowSec % cycleLength
|
|
|
-
|
|
|
- thisCycle = {
|
|
|
- schemeId: 'sys_a',
|
|
|
- schemeName: cfgSample.schemeName,
|
|
|
- cycleLength,
|
|
|
- currentTime: currentTimeIn,
|
|
|
- phaseData: planPhaseData,
|
|
|
- phaseDiff: (seed * 7) % 25,
|
|
|
- coordTime: (seed * 13) % 60,
|
|
|
- }
|
|
|
- // 上周期用同一份计划相位结构(演示用),actualDuration 模拟真实执行的±2s 拉伸
|
|
|
- lastCycle = {
|
|
|
- schemeId: 'sys_a',
|
|
|
- schemeName: cfgSample.schemeName,
|
|
|
- cycleLength,
|
|
|
- actualDuration: cycleLength + 2,
|
|
|
- endedAt: new Date((nowSec - currentTimeIn) * 1000).toISOString(),
|
|
|
- phaseData: planPhaseData,
|
|
|
- }
|
|
|
+ phaseData = _makeFlexiblePhaseData(cycleLength, cfgSample.stageCount)
|
|
|
+ }
|
|
|
+
|
|
|
+ // thisCycle / lastCycle:所有路口统一返回,让 CrossingDetailPanel 的双相位图布局对所有
|
|
|
+ // 路口生效(普通 4 阶段路口直接复用 _makePhaseData 的结果;示例路口已用 flexible 覆盖)
|
|
|
+ const _planSchemeName = (_dualSamples[id] && _dualSamples[id].schemeName) || '默认配时方案'
|
|
|
+ const _nowSec = Math.floor(Date.now() / 1000)
|
|
|
+ const _currentTimeIn = _nowSec % cycleLength
|
|
|
+ const thisCycle = {
|
|
|
+ schemeId: 'sys_a',
|
|
|
+ schemeName: _planSchemeName,
|
|
|
+ cycleLength,
|
|
|
+ currentTime: _currentTimeIn,
|
|
|
+ phaseData,
|
|
|
+ phaseDiff: (seed * 7) % 25,
|
|
|
+ coordTime: (seed * 13) % 60,
|
|
|
+ }
|
|
|
+ // 上周期:演示用复用同一份计划相位(真实后端应给上周期实绩),actualDuration 模拟 ±2s 拉伸
|
|
|
+ const lastCycle = {
|
|
|
+ schemeId: 'sys_a',
|
|
|
+ schemeName: _planSchemeName,
|
|
|
+ cycleLength,
|
|
|
+ actualDuration: cycleLength + 2,
|
|
|
+ endedAt: new Date((_nowSec - _currentTimeIn) * 1000).toISOString(),
|
|
|
+ phaseData,
|
|
|
}
|
|
|
|
|
|
// 从相位数据中提取阶段列表(优先上轨道绿灯相位,单轨道时取 track 0,最多4个)
|