openatc-components 0.0.96-hotfix → 0.0.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/package/kisscomps/components/BoardCard/BoardCard.vue +6 -1
  2. package/package/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +1 -2
  3. package/package/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +17 -119
  4. package/package/kisscomps/components/KanBan/kanban.vue +6 -6
  5. package/package/kisscomps/components/PatternStatus/PatternStatus.vue +153 -38
  6. package/package/kisscomps/components/SchemeConfig/SchemeConfig.vue +16 -0
  7. package/package/kisscomps/components/SchemeConfig/priorityControl/index.vue +190 -0
  8. package/package/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -0
  9. package/package/kisscomps/components/StageStatus/StageStatus.vue +6 -2
  10. package/package/kisscomps/components/patternList/patternList.vue +5 -0
  11. package/package/kisscomps/index.js +2 -0
  12. package/package/kissui.min.js +1 -1
  13. package/package.json +13 -12
  14. package/src/i18n/language/en.js +31 -3
  15. package/src/i18n/language/zh.js +30 -2
  16. package/src/kisscomps/components/BoardCard/BoardCard.vue +6 -1
  17. package/src/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +1 -2
  18. package/src/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +17 -119
  19. package/src/kisscomps/components/KanBan/kanban.vue +6 -6
  20. package/src/kisscomps/components/PatternStatus/PatternStatus.vue +153 -38
  21. package/src/kisscomps/components/SchemeConfig/SchemeConfig.vue +16 -0
  22. package/src/kisscomps/components/SchemeConfig/priorityControl/index.vue +190 -0
  23. package/src/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -0
  24. package/src/kisscomps/components/StageStatus/StageStatus.vue +6 -2
  25. package/src/kisscomps/components/patternList/patternList.vue +5 -0
  26. package/src/kisscomps/index.js +2 -0
  27. package/src/router/index.js +2 -2
  28. package/static/styles/channelizatioon.scss +3 -12
  29. package/static/styles/schemeconfig.scss +52 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openatc-components",
3
- "version": "0.0.96-hotfix",
3
+ "version": "0.0.99",
4
4
  "description": "A Vue.js project",
5
5
  "author": "openatc developer",
6
6
  "private": false,
@@ -21,24 +21,25 @@
21
21
  "npm2yuanqu": "npm config set registry http://nexus.ctsp.kedacom.com/content/groups/npm-host-yuanqu/"
22
22
  },
23
23
  "dependencies": {
24
+ "@minogin/vue-drag-resize-rotate": "^1.0.5",
25
+ "@openatc/edgebase-front": "^2.4.0",
26
+ "animate.css": "^3.7.2",
27
+ "axios": "0.21.1",
28
+ "echarts": "^4.9.0",
29
+ "element-ui": "^2.7.2",
24
30
  "flatpickr": "^4.5.1",
25
31
  "jquery": "^3.3.1",
32
+ "js-cookie": "2.2.0",
33
+ "localStorage": "^1.0.4",
34
+ "moment": "^2.24.0",
26
35
  "pend": "^1.2.0",
36
+ "scss-loader": "0.0.1",
27
37
  "v-tooltip": "^2.0.0-rc.33",
28
38
  "vue": "^2.5.2",
29
- "vue-router": "^3.0.1",
30
- "element-ui": "^2.7.2",
31
- "moment": "^2.24.0",
32
- "axios": "0.21.1",
33
- "js-cookie": "2.2.0",
34
- "localStorage": "^1.0.4",
35
39
  "vue-i18n": "^8.7.0",
36
- "vuex": "3.0.1",
37
- "scss-loader": "0.0.1",
40
+ "vue-router": "^3.0.1",
38
41
  "vuedraggable": "^2.16.0",
39
- "animate.css": "^3.7.2",
40
- "echarts": "^4.9.0",
41
- "@minogin/vue-drag-resize-rotate": "^1.0.5"
42
+ "vuex": "3.0.1"
42
43
  },
43
44
  "devDependencies": {
44
45
  "autoprefixer": "^7.1.2",
@@ -129,6 +129,7 @@ const en = {
129
129
  'phaseclose': 'Close Phase',
130
130
  'phaselocking': 'Priority Control',
131
131
  'tentativeplan': 'Tentative Plan',
132
+ 'prioritycontrol': 'Priority Control',
132
133
  'implement': 'Execute',
133
134
  'comfirm': 'Comfirm',
134
135
  'ipaddress': 'IP',
@@ -206,7 +207,34 @@ const en = {
206
207
  'modelList22': 'Priority Control',
207
208
  'modelList23': 'Close Phase',
208
209
  'modelList100': 'Tentative Plan',
209
- 'modelList24': 'Emergency Control',
210
+ 'modelList24': 'Priority Control',
211
+ 'priorityType': 'Priority Type',
212
+ 'priorityPhase': 'Priority Phase',
213
+ 'typeOption0': 'Regular Priority',
214
+ 'typeOption1': 'Urgent Priority',
215
+ 'es': 'East-Straight',
216
+ 'el': 'East-Left',
217
+ 'er': 'East-Right',
218
+ 'eb': 'East-Back',
219
+ 'ws': 'West-Straight',
220
+ 'wl': 'West-Left',
221
+ 'wr': 'West-Right',
222
+ 'wb': 'West-Back',
223
+ 'ns': 'North-Straight',
224
+ 'nl': 'North-Left',
225
+ 'nr': 'North-Right',
226
+ 'nb': 'North-Back',
227
+ 'ss': 'South-Straight',
228
+ 'sl': 'South-Left',
229
+ 'sr': 'South-Right',
230
+ 'sb': 'South-Back',
231
+ 'level': 'Level',
232
+ 'levelOption': 'LevelOption',
233
+ 'levelOption1': '1',
234
+ 'levelOption2': '2',
235
+ 'levelOption3': '3',
236
+ 'levelOption4': '4',
237
+ 'levelOption5': '5',
210
238
  'modelList99': 'Device Mantenance',
211
239
  'tips': 'Tips',
212
240
  'exitmanul': 'It is necessary to restore self-control before exiting. Do you want to exit?',
@@ -1169,8 +1197,8 @@ const en = {
1169
1197
  'pedestriandetector': 'Pedestrian Detector',
1170
1198
  'detectorassociated': 'Detector Associated',
1171
1199
  'detectorthreshold': 'Detector Threshold',
1172
- 'occupancythreshold': 'Greenlight Utilization Threshold',
1173
- 'saturationthreshold': 'Flow Saturation Threshold',
1200
+ 'occupancythreshold': 'Occupancy threshold',
1201
+ 'saturationthreshold': 'Flow Saturation threshold',
1174
1202
  'checkthreshold': 'The threshold value cannot be blank. Please fill in a positive integer within the range of 0-100!',
1175
1203
  'pedestriancrossing': 'Pedestrian crossing',
1176
1204
  'pedestriansecondarycrossing': 'Pedestrian secondary crossing',
@@ -129,6 +129,34 @@ const zh = {
129
129
  'phaseclose': '相位关断',
130
130
  'phaselocking': '相位锁定',
131
131
  'tentativeplan': '临时方案',
132
+ 'prioritycontrol': '优先控制',
133
+ 'priorityType': '优先类型',
134
+ 'priorityPhase': '优先相位',
135
+ 'typeOption0': '常规优先',
136
+ 'typeOption1': '紧急优先',
137
+ 'es': '东直行',
138
+ 'el': '东左转',
139
+ 'er': '东右转',
140
+ 'eb': '东掉头',
141
+ 'ws': '西直行',
142
+ 'wl': '西左转',
143
+ 'wr': '西右转',
144
+ 'wb': '西掉头',
145
+ 'ns': '北直行',
146
+ 'nl': '北左转',
147
+ 'nr': '北右转',
148
+ 'nb': '北掉头',
149
+ 'ss': '南直行',
150
+ 'sl': '南左转',
151
+ 'sr': '南右转',
152
+ 'sb': '南掉头',
153
+ 'level': '优先级',
154
+ 'levelOption': 'levelOption',
155
+ 'levelOption1': '1',
156
+ 'levelOption2': '2',
157
+ 'levelOption3': '3',
158
+ 'levelOption4': '4',
159
+ 'levelOption5': '5',
132
160
  'implement': '执行',
133
161
  'comfirm': '确定',
134
162
  'ipaddress': 'IP地址',
@@ -206,7 +234,7 @@ const zh = {
206
234
  'modelList22': '相位锁定',
207
235
  'modelList23': '相位关断',
208
236
  'modelList100': '临时方案',
209
- 'modelList24': '紧急控制',
237
+ 'modelList24': '优先控制',
210
238
  'modelList99': '设备维护',
211
239
  'tips': '提示',
212
240
  'exitmanul': '退出前需要先恢复自主控制, 是否退出?',
@@ -1168,7 +1196,7 @@ const zh = {
1168
1196
  'pedestriandetector': '行人检测器',
1169
1197
  'detectorassociated': '检测器关联',
1170
1198
  'detectorthreshold': '检测器阈值',
1171
- 'occupancythreshold': '绿灯利用率阈值',
1199
+ 'occupancythreshold': '占有率阈值',
1172
1200
  'saturationthreshold': '流量饱和度阈值',
1173
1201
  'checkthreshold': '阈值不可为空,请填0-100范围内的正整数!',
1174
1202
  'pedestriancrossing': '行人过街',
@@ -8,6 +8,7 @@
8
8
  :patternStatusList="patternStatusList">
9
9
  </StageStatus>
10
10
  <PatternStatus
11
+ :showBarrier="showBarrier"
11
12
  :localPatternList="localPatternList"
12
13
  :contrloType="contrloType"
13
14
  :stagesChange="stagesChange"
@@ -17,7 +18,7 @@
17
18
  :phaseList="phaseList"
18
19
  :cycle="cycle"
19
20
  :syncTime="syncTime"
20
- :style="{'margin-top':cycle ? '25px':'0'}"
21
+ :style="{'margin-top':(cycle || !showBarrier)? '25px':'0'}"
21
22
  :patternStatusList="patternStatusList"
22
23
  :patternId="patternId"
23
24
  :cycles="cycles">
@@ -52,6 +53,10 @@ export default {
52
53
  stagesChange: {
53
54
  type: Array
54
55
  },
56
+ showBarrier: {
57
+ type: Boolean,
58
+ default: false
59
+ },
55
60
  phaseList: {
56
61
  type: Array
57
62
  },
@@ -541,8 +541,7 @@ export default {
541
541
  detectortype: 1, // 检测器类型: 1 车辆检测器 2 行人检测器
542
542
  detectorid: undefined,
543
543
  occupancythreshold: 80,
544
- minflowsaturationthreshold: 30,
545
- maxflowsaturationthreshold: 70,
544
+ flowsaturationthreshold: 20,
546
545
  ...defaultDetectorParam
547
546
  }
548
547
  this.curChooseIconIndex = detectoritem.index
@@ -160,45 +160,18 @@
160
160
  <el-form-item
161
161
  :label="$t('openatccomponents.channelizationmap.occupancythreshold') + ':'"
162
162
  prop="intersection">
163
- <!-- <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
163
+ <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
164
164
  :value="occupancythreshold" size="mini"
165
165
  @change="handleChangeOccuthreshold" />
166
- <span class="detector-threshold-formtext">%</span> -->
167
- <el-select :value="occupancythreshold" @change="handleChangeOccuthreshold">
168
- <el-option
169
- v-for="item in occupResholdOptions"
170
- :key="item.value"
171
- :label="item.label"
172
- :value="item.value">
173
- </el-option>
174
- </el-select>
166
+ <span class="detector-threshold-formtext">%</span>
175
167
  </el-form-item>
176
168
  <el-form-item
177
169
  :label="$t('openatccomponents.channelizationmap.saturationthreshold') + ':'"
178
170
  prop="count">
179
- <!-- <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
171
+ <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
180
172
  :value="flowsaturationthreshold" size="mini"
181
173
  @change="handleChangeFlowthreshold" />
182
- <span class="detector-threshold-formtext">%</span> -->
183
- <el-select :value="minflowsaturationthreshold" @change="handleChangeMinFlowthreshold">
184
- <el-option
185
- v-for="item in minflowResholdOptions"
186
- :key="item.value"
187
- :label="item.label"
188
- :value="item.value"
189
- :disabled="item.disabled">
190
- </el-option>
191
- </el-select>
192
- <span class="flow-separator">——</span>
193
- <el-select :value="maxflowsaturationthreshold" @change="handleChangeMaxFlowthreshold">
194
- <el-option
195
- v-for="item in maxflowResholdOptions"
196
- :key="item.value"
197
- :label="item.label"
198
- :value="item.value"
199
- :disabled="item.disabled">
200
- </el-option>
201
- </el-select>
174
+ <span class="detector-threshold-formtext">%</span>
202
175
  </el-form-item>
203
176
  </el-form>
204
177
  </div>
@@ -400,12 +373,8 @@ export default {
400
373
  iconclass: 'custom-peddetector',
401
374
  name: this.$t('openatccomponents.channelizationmap.pedestriandetector')
402
375
  }],
403
- occupResholdOptions: [],
404
- minflowResholdOptions: [],
405
- maxflowResholdOptions: [],
406
376
  occupancythreshold: 80,
407
- minflowsaturationthreshold: 30,
408
- maxflowsaturationthreshold: 70
377
+ flowsaturationthreshold: 20
409
378
  }
410
379
  },
411
380
  watch: {
@@ -425,11 +394,8 @@ export default {
425
394
  if (data.occupancythreshold !== undefined) {
426
395
  this.occupancythreshold = data.occupancythreshold
427
396
  }
428
- if (data.minflowsaturationthreshold !== undefined) {
429
- this.minflowsaturationthreshold = data.minflowsaturationthreshold
430
- }
431
- if (data.maxflowsaturationthreshold !== undefined) {
432
- this.maxflowsaturationthreshold = data.maxflowsaturationthreshold
397
+ if (data.flowsaturationthreshold !== undefined) {
398
+ this.flowsaturationthreshold = data.flowsaturationthreshold
433
399
  }
434
400
  if (data.flip !== undefined) {
435
401
  this.flip = data.flip
@@ -481,9 +447,8 @@ export default {
481
447
  if (value === 2) {
482
448
  // 行人检测器没有阈值设置
483
449
  this.iconObj.occupancythreshold = undefined
484
- this.iconObj.minflowsaturationthreshold = undefined
485
- this.iconObj.maxflowsaturationthreshold = undefined
486
- this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold', 'minflowsaturationthreshold', 'maxflowsaturationthreshold'])
450
+ this.iconObj.flowsaturationthreshold = undefined
451
+ this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold', 'flowsaturationthreshold'])
487
452
  }
488
453
  },
489
454
  selectPedPos (value) {
@@ -541,53 +506,15 @@ export default {
541
506
  this.iconObj.occupancythreshold = occupancythreshold
542
507
  this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold'])
543
508
  },
544
- handleChangeMinFlowthreshold (minflowsaturationthreshold) {
545
- if (minflowsaturationthreshold === undefined) {
546
- this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
547
- this.minflowsaturationthreshold = 30
548
- return
549
- }
550
- this.minflowsaturationthreshold = minflowsaturationthreshold
551
- this.iconObj.minflowsaturationthreshold = minflowsaturationthreshold
552
- this.$emit('changeIconDataByType', this.iconObj, ['minflowsaturationthreshold'])
553
- this.handleDisabledMaxflowOption()
554
- },
555
- handleDisabledMinflowOption () {
556
- // 此处需要排他,恢复上次置灰到默认值
557
- this.minflowResholdOptions = this.minflowResholdOptions.map(option => ({
558
- label: option.label,
559
- value: option.value
560
- }))
561
- // 控制流量饱和度最小阈值的禁用范围
562
- for (let i = 0; i < this.minflowResholdOptions.length; i++) {
563
- if (this.minflowResholdOptions[i].value >= this.maxflowsaturationthreshold) {
564
- this.minflowResholdOptions[i].disabled = true
565
- }
566
- }
567
- },
568
- handleChangeMaxFlowthreshold (maxflowsaturationthreshold) {
569
- if (maxflowsaturationthreshold === undefined) {
509
+ handleChangeFlowthreshold (flowsaturationthreshold) {
510
+ if (flowsaturationthreshold === undefined) {
570
511
  this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
571
- this.maxflowsaturationthreshold = 70
512
+ this.flowsaturationthreshold = 20
572
513
  return
573
514
  }
574
- this.maxflowsaturationthreshold = maxflowsaturationthreshold
575
- this.iconObj.maxflowsaturationthreshold = maxflowsaturationthreshold
576
- this.$emit('changeIconDataByType', this.iconObj, ['maxflowsaturationthreshold'])
577
- this.handleDisabledMinflowOption()
578
- },
579
- handleDisabledMaxflowOption () {
580
- // 此处需要排他,恢复上次置灰到默认值
581
- this.maxflowResholdOptions = this.maxflowResholdOptions.map(option => ({
582
- label: option.label,
583
- value: option.value
584
- }))
585
- // 控制流量饱和度最大阈值的禁用范围
586
- for (let i = 0; i < this.maxflowResholdOptions.length; i++) {
587
- if (this.maxflowResholdOptions[i].value <= this.minflowsaturationthreshold) {
588
- this.maxflowResholdOptions[i].disabled = true
589
- }
590
- }
515
+ this.flowsaturationthreshold = flowsaturationthreshold
516
+ this.iconObj.flowsaturationthreshold = flowsaturationthreshold
517
+ this.$emit('changeIconDataByType', this.iconObj, ['flowsaturationthreshold'])
591
518
  },
592
519
  getCurPedPosList (iconpedtypeid) {
593
520
  // 方位根据行人类型显示
@@ -605,34 +532,8 @@ export default {
605
532
  handleChangeFilp (value) {
606
533
  this.iconObj.flip = value
607
534
  this.$emit('changeIconDataByType', this.iconObj, ['flip'])
608
- },
609
- createResholdSelectOptions () {
610
- for (let i = 5; i < 100; i = i + 5) {
611
- let option = {
612
- label: i + '%',
613
- value: i
614
- }
615
- this.occupResholdOptions.push(option)
616
- if (i <= this.minflowsaturationthreshold) {
617
- option.disabled = true
618
- }
619
- this.maxflowResholdOptions.push(option)
620
- }
621
- for (let i = 5; i < 100; i = i + 5) {
622
- let option = {
623
- label: i + '%',
624
- value: i
625
- }
626
- if (i >= this.maxflowsaturationthreshold) {
627
- option.disabled = true
628
- }
629
- this.minflowResholdOptions.push(option)
630
- }
631
535
  }
632
536
  },
633
- created () {
634
- this.createResholdSelectOptions()
635
- },
636
537
  mounted () {
637
538
  if (JSON.stringify(this.Data) === '{}') return
638
539
  this.iconObj = JSON.parse(JSON.stringify(this.Data))
@@ -648,11 +549,8 @@ export default {
648
549
  if (this.Data.occupancythreshold !== undefined) {
649
550
  this.occupancythreshold = this.Data.occupancythreshold
650
551
  }
651
- if (this.Data.minflowsaturationthreshold !== undefined) {
652
- this.minflowsaturationthreshold = this.Data.minflowsaturationthreshold
653
- }
654
- if (this.Data.maxflowsaturationthreshold !== undefined) {
655
- this.maxflowsaturationthreshold = this.Data.maxflowsaturationthreshold
552
+ if (this.Data.flowsaturationthreshold !== undefined) {
553
+ this.flowsaturationthreshold = this.Data.flowsaturationthreshold
656
554
  }
657
555
  if (this.Data.flip !== undefined) {
658
556
  this.flip = this.Data.flip
@@ -202,12 +202,12 @@ export default {
202
202
  }
203
203
  return maxCycle
204
204
  },
205
- doChange (val) {
206
- // if (val.mode === 7) {
207
- // val.value = 0
208
- // } else {
209
- // val.value = 30
210
- // }
205
+ doChange (e) {
206
+ if (e) {
207
+ let n = this.index
208
+ this.$emit('handleSplit', n)
209
+ this.$forceUpdate()
210
+ }
211
211
  }
212
212
  }
213
213
  }
@@ -43,7 +43,7 @@
43
43
  <div class="first-1" :style="{'width':item.redWidth,'height':'34px','background':'#f27979'}"></div>
44
44
  </div>
45
45
  </div>
46
- <div v-for="(item, index) in barrierList" :key="index + '1'">
46
+ <div v-if="showBarrier" v-for="(item, index) in barrierList" :key="index + '1'">
47
47
  <div class="divider" :style="{'left':item, 'height':barrierHeight}"></div>
48
48
  </div>
49
49
  <div v-show="(syncTime && cycle && cycle>0) || (syncTime && newCycle && newCycle>0)">
@@ -123,6 +123,10 @@ export default {
123
123
  patternList: {
124
124
  type: Array
125
125
  },
126
+ showBarrier: {
127
+ type: Boolean,
128
+ default: false
129
+ },
126
130
  localPatternList: {
127
131
  type: Array
128
132
  },
@@ -162,10 +166,10 @@ export default {
162
166
  return res
163
167
  },
164
168
  timeNumDevide () {
165
- if (this.newCycle && this.newCycle > 0) {
166
- let res = (this.newCycle - this.syncTime) + '/' + this.newCycle
167
- return res
168
- }
169
+ // if (this.newCycle && this.newCycle > 0) {
170
+ // let res = (this.newCycle - this.syncTime) + '/' + this.newCycle
171
+ // return res
172
+ // }
169
173
  if (this.cycle && this.cycle > 0) {
170
174
  let res = (this.cycle - this.syncTime) + '/' + this.cycle
171
175
  return res
@@ -191,7 +195,7 @@ export default {
191
195
  this.getPedPhasePos()
192
196
  this.getBusPos()
193
197
  this.getStage()
194
- this.handlePatternData()
198
+ // this.handlePatternData()
195
199
  },
196
200
  // 深度观察监听
197
201
  deep: true
@@ -407,63 +411,174 @@ export default {
407
411
  this.newList = []
408
412
  if (Object.keys(this.controlData).length === 0 || this.phaseList.length === 0) return
409
413
  if (!this.controlData.phase) return
410
- let cycle = this.controlData.cycle
414
+ // let cycle = this.controlData.cycle
411
415
  if (!this.controlData.rings) return
416
+ let newValue = []
412
417
  for (let rings of this.controlData.rings) {
413
418
  let phase = this.controlData.phase
414
- let list = []
419
+ // let list = []
420
+ let obj = {}
421
+ for (let key in rings.sequence) {
422
+ obj[key] = rings.sequence[key]
423
+ }
424
+ let newObj = Object.keys(obj).map(val => ({
425
+ id: obj[val]
426
+ }))
427
+ newValue.push(newObj)
415
428
  for (let sequ of rings.sequence) {
416
429
  let obj = {}
417
430
  obj.id = sequ
418
431
  let split = phase.filter((item) => {
419
432
  return item.id === sequ
420
433
  })[0].split
434
+ newValue.map(d => {
435
+ d.map(r => {
436
+ if (r.id === sequ) {
437
+ r.value = split
438
+ }
439
+ })
440
+ })
441
+ // let currPhase = this.phaseList.filter((item) => {
442
+ // if (item.id === sequ && item.controltype === 99) {
443
+ // obj.controltype = item.controltype
444
+ // }
445
+ // return item.id === sequ
446
+ // })[0]
447
+ // if (currPhase) {
448
+ // obj.redWidth = (currPhase.redclear / cycle * 100).toFixed(3) + '%'
449
+ // obj.yellowWidth = (currPhase.yellow / cycle * 100).toFixed(3) + '%'
450
+ // obj.greenWidth = ((split - currPhase.redclear - currPhase.yellow - currPhase.flashgreen) / cycle * 100).toFixed(3) + '%'
451
+ // obj.flashgreen = (currPhase.flashgreen / cycle * 100).toFixed(3) + '%'
452
+ // // obj.peddirection = currPhase.peddirection
453
+ // let peddirections = []
454
+ // for (let walk of this.sidewalkPhaseData) {
455
+ // for (let ped of currPhase.peddirection) {
456
+ // // if (stg === walk.phaseid) {
457
+ // let objs = {}
458
+ // objs.name = walk.name
459
+ // objs.id = walk.id
460
+ // if (ped === walk.id) {
461
+ // peddirections.push(objs)
462
+ // peddirections = Array.from(new Set(peddirections))
463
+ // }
464
+ // // }
465
+ // }
466
+ // }
467
+ // obj.peddirection = peddirections
468
+ // obj.split = split
469
+ // obj.direction = currPhase.direction.map(item => {
470
+ // return {
471
+ // id: item,
472
+ // color: '#454545'
473
+ // }
474
+ // })
475
+ // list.push(obj)
476
+ // }
477
+ }
478
+ // this.newList.push(list)
479
+ // this.patternInfo = [...this.newList]
480
+ }
481
+ this.handleOverViewChange(newValue)
482
+ },
483
+ handleBarrierHeight () { // 屏障高度
484
+ if (!this.patternInfo) return
485
+ let patternLength = this.patternInfo.length
486
+ this.barrierHeight = (patternLength * 35 + 21) + 'px'
487
+ },
488
+ handleOverViewChange (val) {
489
+ if (val === null || val.length === 0) return
490
+ this.patternInfo = []
491
+ let currentArr = []
492
+ let newPattern = []
493
+ val.map(i => {
494
+ newPattern.push(...i)
495
+ })
496
+ if (this.phaseList.length === 0) return
497
+ for (let patternStatus of val[0]) {
498
+ if (patternStatus.mode !== 7) {
499
+ let concurrent = this.phaseList.filter((item) => {
500
+ return item.id === patternStatus.id // patternStatus.id当前相位id concurrent当前相位的并发相位
501
+ })[0].concurrent// 当前相位的并发相位
502
+ if (concurrent) {
503
+ let obj = {
504
+ id: patternStatus.id,
505
+ current: concurrent.sort()
506
+ }
507
+ currentArr.push(obj)
508
+ }
509
+ }
510
+ }
511
+ if (currentArr.length !== 0) {
512
+ let newCurrent = this.tranform(currentArr)
513
+ let ringTeam = this.step1(this.phaseList, newCurrent)
514
+ this.fillGap(ringTeam, val)
515
+ }
516
+ let cycle = this.controlData.cycle
517
+ for (let rings of val) {
518
+ if (rings.length === 0) continue
519
+ let list = []
520
+ for (let ring of rings) {
521
+ if (ring.value === 0) continue
522
+ let obj = {}
523
+ let split = ring.value
524
+ obj.id = ring.id
525
+ // obj.split = split
421
526
  let currPhase = this.phaseList.filter((item) => {
422
- if (item.id === sequ && item.controltype === 99) {
527
+ if (item.id === ring.id && item.controltype === 99) {
423
528
  obj.controltype = item.controltype
424
529
  }
425
- return item.id === sequ
530
+ return item.id === ring.id
426
531
  })[0]
427
- if (currPhase) {
428
- obj.redWidth = (currPhase.redclear / cycle * 100).toFixed(3) + '%'
429
- obj.yellowWidth = (currPhase.yellow / cycle * 100).toFixed(3) + '%'
430
- obj.greenWidth = ((split - currPhase.redclear - currPhase.yellow - currPhase.flashgreen) / cycle * 100).toFixed(3) + '%'
431
- obj.flashgreen = (currPhase.flashgreen / cycle * 100).toFixed(3) + '%'
432
- // obj.peddirection = currPhase.peddirection
433
- let peddirections = []
434
- for (let walk of this.sidewalkPhaseData) {
435
- for (let ped of currPhase.peddirection) {
436
- // if (stg === walk.phaseid) {
437
- let objs = {}
438
- objs.name = walk.name
439
- objs.id = walk.id
440
- if (ped === walk.id) {
441
- peddirections.push(objs)
442
- peddirections = Array.from(new Set(peddirections))
443
- }
444
- // }
532
+ if (ring.desc) {
533
+ obj.direction = ring.desc.map(item => { // 虚相位desc为空
534
+ return {
535
+ id: item.id,
536
+ color: '#454545'
445
537
  }
446
- }
447
- obj.peddirection = peddirections
448
- obj.split = split
538
+ })
539
+ } else {
449
540
  obj.direction = currPhase.direction.map(item => {
450
541
  return {
451
542
  id: item,
452
543
  color: '#454545'
453
544
  }
454
545
  })
546
+ }
547
+ if (ring.sum) {
548
+ obj.split = split
549
+ obj.redWidth = (currPhase.redclear + ring.sum / (this.max ? this.max : cycle) * 100).toFixed(3) + '%'
550
+ } else {
551
+ obj.split = split
552
+ obj.redWidth = (currPhase.redclear / (this.max ? this.max : cycle) * 100).toFixed(3) + '%'
553
+ }
554
+ obj.flashgreen = (currPhase.flashgreen / (this.max ? this.max : cycle) * 100).toFixed(3) + '%'
555
+ obj.yellowWidth = (currPhase.yellow / (this.max ? this.max : cycle) * 100).toFixed(3) + '%'
556
+ obj.greenWidth = ((split - currPhase.redclear - currPhase.yellow - currPhase.flashgreen) / (this.max ? this.max : cycle) * 100).toFixed(3) + '%'
557
+ // obj.peddirection = currPhase.peddirection
558
+ let peddirections = []
559
+ for (let walk of this.sidewalkPhaseData) {
560
+ for (let ped of currPhase.peddirection) {
561
+ // if (stg === walk.phaseid) {
562
+ let objs = {}
563
+ objs.name = walk.name
564
+ objs.id = walk.id
565
+ if (ped === walk.id) {
566
+ peddirections.push(objs)
567
+ peddirections = Array.from(new Set(peddirections))
568
+ }
569
+ // }
570
+ }
571
+ }
572
+ obj.peddirection = peddirections
573
+ // 忽略相位不显示
574
+ let mode = ring.mode
575
+ if (mode !== 7) { // 忽略相位不显示
455
576
  list.push(obj)
456
577
  }
457
578
  }
458
- this.newList.push(list)
459
- this.patternInfo = [...this.newList]
579
+ this.patternInfo.push(list)
460
580
  }
461
581
  },
462
- handleBarrierHeight () { // 屏障高度
463
- if (!this.patternInfo) return
464
- let patternLength = this.patternInfo.length
465
- this.barrierHeight = (patternLength * 35 + 21) + 'px'
466
- },
467
582
  handleCurrentChange (val) { // 两个ring的数据
468
583
  if (val === null || val.length === 0) return
469
584
  this.patternInfo = []