openatc-components 0.1.11 → 0.1.13
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.
- package/package/kisscomps/components/IntersectionMap/crossDirection/crossDiagram.vue +11 -4
- package/package/kisscomps/components/IntersectionMap/intersectionmap.vue +5 -0
- package/package/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +8 -0
- package/package/kisscomps/components/overView/index.vue +8 -0
- package/package/kissui.min.js +1 -1
- package/package.json +1 -1
- package/src/kisscomps/components/IntersectionMap/crossDirection/crossDiagram.vue +11 -4
- package/src/kisscomps/components/IntersectionMap/intersectionmap.vue +5 -0
- package/src/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +8 -0
- package/src/kisscomps/components/overView/index.vue +8 -0
- package/src/views/intersection.vue +2 -1
- package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.check.vue +0 -191
- package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.syncOper.vue +0 -331
package/package.json
CHANGED
|
@@ -226,6 +226,10 @@ export default {
|
|
|
226
226
|
controlName: {
|
|
227
227
|
type: String,
|
|
228
228
|
default: ''
|
|
229
|
+
},
|
|
230
|
+
stateName: {
|
|
231
|
+
type: String,
|
|
232
|
+
default: ''
|
|
229
233
|
}
|
|
230
234
|
},
|
|
231
235
|
// computed: {
|
|
@@ -260,6 +264,12 @@ export default {
|
|
|
260
264
|
this.isHasPhase = false
|
|
261
265
|
return
|
|
262
266
|
}
|
|
267
|
+
if (val.control === 16) {
|
|
268
|
+
// 方向锁定时,相位状态显示与通道无关,显示接口返回的红灯会有歧义,此处特殊处理显示默认白色
|
|
269
|
+
this.handleSpecialControlStatus('方向锁定')
|
|
270
|
+
this.isHasPhase = false
|
|
271
|
+
return
|
|
272
|
+
}
|
|
263
273
|
this.curPhase = val.current_phase
|
|
264
274
|
this.isHasPhase = true
|
|
265
275
|
this.createPhaseStatusMap()
|
|
@@ -310,7 +320,6 @@ export default {
|
|
|
310
320
|
},
|
|
311
321
|
data () {
|
|
312
322
|
return {
|
|
313
|
-
stateName: '',
|
|
314
323
|
roadDir: 'right', // 道路行车方向,默认右行
|
|
315
324
|
phaseCountdownList: [], // 相位倒计时列表
|
|
316
325
|
statusData: null, // 信号机状态
|
|
@@ -328,7 +337,7 @@ export default {
|
|
|
328
337
|
crossType: '', // 路口底图类型
|
|
329
338
|
isLoaded: false, // 是否成功加载底图
|
|
330
339
|
isHasPhase: true, // 是否有相位状态数据
|
|
331
|
-
phaseControlColorMap: new Map([['黄闪', '#f7b500'], ['全红', '#ff2828'], ['关灯', '#828282'], ['默认', '#fff']]),
|
|
340
|
+
phaseControlColorMap: new Map([['黄闪', '#f7b500'], ['全红', '#ff2828'], ['关灯', '#828282'], ['默认', '#fff'], ['方向锁定', '#fff']]),
|
|
332
341
|
sidewalkPhaseData: [], // 行人相位
|
|
333
342
|
overlapsidewalkPhaseData: [], // 行人跟随相位
|
|
334
343
|
resetflag: true, // 离线后,控制行人相位、车道相位reset标识
|
|
@@ -554,7 +563,6 @@ export default {
|
|
|
554
563
|
if (!res.data.success) {
|
|
555
564
|
this.isLoaded = false
|
|
556
565
|
let commomMsg = this.$t('openatccomponents.overview.signalID') + ' : ' + agentid
|
|
557
|
-
this.stateName = this.$t('openatccomponents.overview.offline')
|
|
558
566
|
let msg = getMessageByCode(res.data.code, this.$i18n.locale)
|
|
559
567
|
if (res.data.data) {
|
|
560
568
|
// 子类型错误
|
|
@@ -568,7 +576,6 @@ export default {
|
|
|
568
576
|
this.$message.error(msg)
|
|
569
577
|
return
|
|
570
578
|
}
|
|
571
|
-
this.stateName = this.$t('openatccomponents.overview.online')
|
|
572
579
|
this.isLoaded = true
|
|
573
580
|
this.crossInfo = res.data.data.param
|
|
574
581
|
this.tempType = res.data.data.type
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
:isShowMode="isShowMode"
|
|
32
32
|
:modeName="modeName"
|
|
33
33
|
:controlName="controlName"
|
|
34
|
+
:stateName="stateName"
|
|
34
35
|
:devStatus="devStatus"
|
|
35
36
|
:roadDirection="roadDirection" />
|
|
36
37
|
</div>
|
|
@@ -95,6 +96,10 @@ export default {
|
|
|
95
96
|
controlName: {
|
|
96
97
|
type: String,
|
|
97
98
|
default: ''
|
|
99
|
+
},
|
|
100
|
+
stateName: {
|
|
101
|
+
type: String,
|
|
102
|
+
default: ''
|
|
98
103
|
}
|
|
99
104
|
},
|
|
100
105
|
watch: {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
:roadDirection="roadDirection"
|
|
22
22
|
:modeName="modeName !== '' ? modeName : controlData.mode"
|
|
23
23
|
:controlName="controlName !== '' ? controlName : controlData.control"
|
|
24
|
+
:stateName="stateName"
|
|
24
25
|
:isShowMode="isShowMode"
|
|
25
26
|
:isShowState="isShowState"
|
|
26
27
|
:isShowInterval="isShowInterval"
|
|
@@ -41,6 +42,7 @@ export default {
|
|
|
41
42
|
},
|
|
42
43
|
data () {
|
|
43
44
|
return {
|
|
45
|
+
stateName: this.$t('openatccomponents.overview.offline'),
|
|
44
46
|
controlData: {},
|
|
45
47
|
boxVisible: false,
|
|
46
48
|
dialogWidth: '100%',
|
|
@@ -244,6 +246,12 @@ export default {
|
|
|
244
246
|
_this.agentName = res.data.data.name
|
|
245
247
|
}
|
|
246
248
|
_this.platform = res.data.data.platform
|
|
249
|
+
let state = res.data.data.state
|
|
250
|
+
if (state === 'UP') {
|
|
251
|
+
_this.stateName = _this.$t('openatccomponents.overview.online')
|
|
252
|
+
} else {
|
|
253
|
+
_this.stateName = _this.$t('openatccomponents.overview.offline')
|
|
254
|
+
}
|
|
247
255
|
_this.$refs.intersectionMap.resetCrossDiagram()
|
|
248
256
|
_this.registerMessage() // 注册消息
|
|
249
257
|
_this.$emit('queryDevice', res)
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
<intersection-base-map
|
|
28
28
|
ref="intersectionMap"
|
|
29
29
|
:modeName="modeName"
|
|
30
|
+
:stateName="stateName"
|
|
30
31
|
:controlName="controlName"
|
|
31
32
|
:isShowState="isShowState"
|
|
32
33
|
:isShowMode="isShowMode"
|
|
@@ -138,6 +139,7 @@ export default {
|
|
|
138
139
|
},
|
|
139
140
|
data () {
|
|
140
141
|
return {
|
|
142
|
+
stateName: this.$t('openatccomponents.overview.offline'),
|
|
141
143
|
curBodyWidth: 1920,
|
|
142
144
|
graphicMode: false,
|
|
143
145
|
FuncSort: 'allFunc',
|
|
@@ -643,6 +645,12 @@ export default {
|
|
|
643
645
|
this.agentName = res.data.data.name
|
|
644
646
|
}
|
|
645
647
|
this.platform = res.data.data.platform
|
|
648
|
+
let state = res.data.data.state
|
|
649
|
+
if (state === 'UP') {
|
|
650
|
+
this.stateName = this.$t('openatccomponents.overview.online')
|
|
651
|
+
} else {
|
|
652
|
+
this.stateName = this.$t('openatccomponents.overview.offline')
|
|
653
|
+
}
|
|
646
654
|
// let func = 'allFunc'
|
|
647
655
|
// if (this.platform === 'OpenATC') {
|
|
648
656
|
// func = 'allFunc'
|
|
@@ -94,7 +94,8 @@ export default {
|
|
|
94
94
|
return {
|
|
95
95
|
roadDirection: 'right',
|
|
96
96
|
// reqUrl: 'http://192.168.13.103:10003/openatc',
|
|
97
|
-
agentId: '
|
|
97
|
+
agentId: '10002-739',
|
|
98
|
+
// agentId: '0351-01',
|
|
98
99
|
reqUrl: 'http://192.168.13.105:11003/openatc',
|
|
99
100
|
Token: 'eyJraWQiOiIxNjYwMjgzMzQwMzM4IiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc0NjY4MzM0MCwiaWF0IjoxNjYwMjgzMzQwfQ.xmgkrjwcdwT_miC3krjqL27Tv4txJ9FQuDEKlfWdtzU',
|
|
100
101
|
// agentId: '30003-352',
|
package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.check.vue
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2020 kedacom
|
|
3
|
-
* OpenATC is licensed under Mulan PSL v2.
|
|
4
|
-
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
5
|
-
* You may obtain a copy of Mulan PSL v2 at:
|
|
6
|
-
* http://license.coscl.org.cn/MulanPSL2
|
|
7
|
-
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
8
|
-
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
9
|
-
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
10
|
-
* See the Mulan PSL v2 for more details.
|
|
11
|
-
**/
|
|
12
|
-
<template>
|
|
13
|
-
<div class="phase-associated-component">
|
|
14
|
-
<div class="phase-box" v-for="(item, index) in assophaseList" :key="index">
|
|
15
|
-
<div class="single-phase" :class="preselectPhase == item.id ? 'single-phase-select' : ''">
|
|
16
|
-
<!-- <div class="ped-icon">
|
|
17
|
-
<div v-for="(side, index) in item.peddirection" :key="'peddir-' + index">
|
|
18
|
-
<PatternWalkSvg :Data="getshowped(side)" Width="42" Height="44" />
|
|
19
|
-
</div>
|
|
20
|
-
</div> -->
|
|
21
|
-
|
|
22
|
-
<div class="phase-icon" @click="selectPhase(index, item)" v-if="item.direction">
|
|
23
|
-
<xdr-dir-selector Width="44px" Height="44px" :showlist="getShowlist(item.direction)" :roadDirection="roadDirection"></xdr-dir-selector>
|
|
24
|
-
</div>
|
|
25
|
-
<div class="delete-phase-icon" @click="handleDeletePhase(index, item)">
|
|
26
|
-
<i class="el-icon-close"></i>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="single-phase-name">{{$t('openatccomponents.channelizationmap.phase') + item.id}}</div>
|
|
30
|
-
</div>
|
|
31
|
-
<div class="phase-box">
|
|
32
|
-
<div class="single-phase add-phase" @click="handleAddPhase()">
|
|
33
|
-
<i class="iconfont icon-fangda" :class="{'add-disabled': !isCanAdd}"></i>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
</template>
|
|
38
|
-
<script>
|
|
39
|
-
import { mapState } from 'vuex'
|
|
40
|
-
import PhaseDataModel from '../../IntersectionMap/crossDirection/utils.js'
|
|
41
|
-
export default {
|
|
42
|
-
name: 'phase-associated-component',
|
|
43
|
-
data () {
|
|
44
|
-
return {
|
|
45
|
-
assophaseList: [], // 渠化界面的相位列表
|
|
46
|
-
preselectPhase: -1,
|
|
47
|
-
id: 1,
|
|
48
|
-
isCanAdd: true
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
props: {
|
|
52
|
-
editData: {
|
|
53
|
-
type: Object
|
|
54
|
-
},
|
|
55
|
-
Motorways: {
|
|
56
|
-
type: Array
|
|
57
|
-
}
|
|
58
|
-
},
|
|
59
|
-
computed: {
|
|
60
|
-
...mapState({
|
|
61
|
-
associatedphaselist: state => state.globalParam.associatedPhaseList,
|
|
62
|
-
roadDirection: state => state.globalParam.roadDirection,
|
|
63
|
-
PhaseDataMgr: state => state.globalParam.PhaseDataMgr
|
|
64
|
-
})
|
|
65
|
-
},
|
|
66
|
-
watch: {
|
|
67
|
-
associatedphaselist: {
|
|
68
|
-
handler: function (list) {
|
|
69
|
-
this.assophaseList = JSON.parse(JSON.stringify(list))
|
|
70
|
-
},
|
|
71
|
-
deep: true
|
|
72
|
-
},
|
|
73
|
-
assophaseList: {
|
|
74
|
-
handler: function (list) {
|
|
75
|
-
if (list.length >= 40) {
|
|
76
|
-
this.isCanAdd = false
|
|
77
|
-
} else {
|
|
78
|
-
this.isCanAdd = true
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
deep: true
|
|
82
|
-
},
|
|
83
|
-
editData: {
|
|
84
|
-
handler: function (editobj) {
|
|
85
|
-
if (editobj.phaseid !== undefined) {
|
|
86
|
-
this.preselectPhase = editobj.phaseid
|
|
87
|
-
} else {
|
|
88
|
-
this.preselectPhase = -1
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
deep: true
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
methods: {
|
|
95
|
-
selectPhase (index, item) {
|
|
96
|
-
let direction = this.PhaseDataMgr.editDirPosToPhaseDireaciton(this.editData.icondireid, this.editData.lanePosition)
|
|
97
|
-
// 校验同方位车道不能关联不同相位
|
|
98
|
-
if (this.PhaseDataMgr.checkSameDirectionPhase(direction, item.id, this.editData.phaseid, this.Motorways, this.editData) === false) {
|
|
99
|
-
this.$message.error(this.$t('openatccomponents.channelizationmap.associatedphaseerror'))
|
|
100
|
-
return
|
|
101
|
-
}
|
|
102
|
-
// 关联相位
|
|
103
|
-
this.preselectPhase = item.id
|
|
104
|
-
let alldirection = direction
|
|
105
|
-
this.$emit('selectPhase', this.preselectPhase, alldirection)
|
|
106
|
-
},
|
|
107
|
-
changeDirection (choosedicon) {
|
|
108
|
-
for (let i = 0; i < this.assophaseList.length; i++) {
|
|
109
|
-
if (this.assophaseList[i].id === choosedicon.phaseid) {
|
|
110
|
-
let direction = this.PhaseDataMgr.editDirPosToPhaseDireaciton(choosedicon.icondireid, choosedicon.lanePosition, this.preselectPhase)
|
|
111
|
-
// 校验同方位车道不能关联不同相位
|
|
112
|
-
if (this.PhaseDataMgr.checkSameDirectionPhase(direction, choosedicon.phaseid) === false) {
|
|
113
|
-
this.$message.error(this.$t('openatccomponents.channelizationmap.associatedphaseerror'))
|
|
114
|
-
return
|
|
115
|
-
}
|
|
116
|
-
let alldirection = direction
|
|
117
|
-
this.$emit('selectPhase', this.preselectPhase, alldirection)
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
},
|
|
121
|
-
getShowlist (direction) {
|
|
122
|
-
return direction.map(dir => {
|
|
123
|
-
return {
|
|
124
|
-
id: dir,
|
|
125
|
-
color: '#606266'
|
|
126
|
-
}
|
|
127
|
-
})
|
|
128
|
-
},
|
|
129
|
-
getshowped (peddirection) {
|
|
130
|
-
return {
|
|
131
|
-
id: peddirection,
|
|
132
|
-
name: this.PhaseDataModel.getSidePos(peddirection).name
|
|
133
|
-
}
|
|
134
|
-
},
|
|
135
|
-
handleDeletePhase (index, row) {
|
|
136
|
-
// 更新模型内初始相位列表数据
|
|
137
|
-
this.PhaseDataMgr.deleteOriginPhase(index)
|
|
138
|
-
// 删除关联此相位的所有车道相位id
|
|
139
|
-
this.handleDisassociatePhase(row.id)
|
|
140
|
-
if (row.id === this.preselectPhase) {
|
|
141
|
-
this.preselectPhase = -1
|
|
142
|
-
}
|
|
143
|
-
},
|
|
144
|
-
handleDisassociatePhase (deletePhaseid) {
|
|
145
|
-
// 删除相位后,解除相位关联
|
|
146
|
-
this.$emit('handleDisassociatePhase', deletePhaseid)
|
|
147
|
-
},
|
|
148
|
-
handleAddPhase () {
|
|
149
|
-
if (this.assophaseList.length >= 40) {
|
|
150
|
-
this.$message.error(
|
|
151
|
-
this.$t('openatccomponents.phase.mostdata')
|
|
152
|
-
)
|
|
153
|
-
return
|
|
154
|
-
}
|
|
155
|
-
// 更新模型内初始相位列表数据
|
|
156
|
-
this.PhaseDataMgr.addOriginPhase()
|
|
157
|
-
},
|
|
158
|
-
getPedPhasePos () {
|
|
159
|
-
// 行人相位信息
|
|
160
|
-
this.sidewalkPhaseData = []
|
|
161
|
-
this.assophaseList.forEach((ele, i) => {
|
|
162
|
-
if (ele.peddirection) {
|
|
163
|
-
ele.peddirection.forEach((dir, index) => {
|
|
164
|
-
// 行人相位
|
|
165
|
-
if (this.PhaseDataModel.getSidePos(dir)) {
|
|
166
|
-
this.sidewalkPhaseData.push({
|
|
167
|
-
key: this.CrossDiagramMgr.getUniqueKey('pedphase'),
|
|
168
|
-
phaseid: ele.id, // 相位id,用于对应相位状态
|
|
169
|
-
id: dir,
|
|
170
|
-
name: this.PhaseDataModel.getSidePos(dir).name
|
|
171
|
-
})
|
|
172
|
-
}
|
|
173
|
-
})
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
|
-
return this.sidewalkPhaseData
|
|
177
|
-
}
|
|
178
|
-
},
|
|
179
|
-
created () {
|
|
180
|
-
this.globalParamModel = this.$store.getters.globalParamModel
|
|
181
|
-
this.PhaseDataModel = new PhaseDataModel()
|
|
182
|
-
},
|
|
183
|
-
mounted () {
|
|
184
|
-
this.assophaseList = JSON.parse(JSON.stringify(this.associatedphaselist))
|
|
185
|
-
},
|
|
186
|
-
destroyed () {
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
</script>
|
|
190
|
-
<style lang="scss">
|
|
191
|
-
</style>
|
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2020 kedacom
|
|
3
|
-
* OpenATC is licensed under Mulan PSL v2.
|
|
4
|
-
* You can use this software according to the terms and conditions of the Mulan PSL v2.
|
|
5
|
-
* You may obtain a copy of Mulan PSL v2 at:
|
|
6
|
-
* http://license.coscl.org.cn/MulanPSL2
|
|
7
|
-
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
|
|
8
|
-
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
|
|
9
|
-
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
|
|
10
|
-
* See the Mulan PSL v2 for more details.
|
|
11
|
-
**/
|
|
12
|
-
<template>
|
|
13
|
-
<div class="phase-associated-component">
|
|
14
|
-
<div class="phase-box" v-for="(item, index) in phaseList" :key="index">
|
|
15
|
-
<div class="single-phase" @click="selectPhase(index, item)" :class="preselectPhase == item.id ? 'single-phase-select' : ''">
|
|
16
|
-
<!-- <div class="ped-icon">
|
|
17
|
-
<div v-for="(side, index) in item.peddirection" :key="'peddir-' + index">
|
|
18
|
-
<PatternWalkSvg :Data="getshowped(side)" Width="42" Height="44" />
|
|
19
|
-
</div>
|
|
20
|
-
</div> -->
|
|
21
|
-
|
|
22
|
-
<div class="phase-icon" v-if="item.direction">
|
|
23
|
-
<xdr-dir-selector Width="44px" Height="44px" :showlist="getShowlist(item.direction)" :roadDirection="roadDirection"></xdr-dir-selector>
|
|
24
|
-
</div>
|
|
25
|
-
<div class="delete-phase-icon" @click="handleDeletePhase(index, item)">
|
|
26
|
-
<i class="el-icon-close"></i>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
<div class="single-phase-name">{{$t('openatccomponents.channelizationmap.phase') + item.id}}</div>
|
|
30
|
-
</div>
|
|
31
|
-
<div class="phase-box">
|
|
32
|
-
<div class="single-phase add-phase" @click="handleAddPhase()">
|
|
33
|
-
<i class="iconfont icon-fangda" :class="{'add-disabled': !isCanAdd}"></i>
|
|
34
|
-
</div>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
</template>
|
|
38
|
-
<script>
|
|
39
|
-
import { mapState } from 'vuex'
|
|
40
|
-
import PhaseDataModel from '../../IntersectionMap/crossDirection/utils.js'
|
|
41
|
-
// import PatternWalkSvg from 'openatc-components/package/kisscomps/components/PatternWalkSvg'
|
|
42
|
-
export default {
|
|
43
|
-
name: 'phase-associated-component',
|
|
44
|
-
data () {
|
|
45
|
-
return {
|
|
46
|
-
preselectPhase: -1,
|
|
47
|
-
id: 1,
|
|
48
|
-
isCanAdd: true
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
components: {
|
|
52
|
-
// PatternWalkSvg
|
|
53
|
-
},
|
|
54
|
-
props: {
|
|
55
|
-
editData: {
|
|
56
|
-
type: Object
|
|
57
|
-
},
|
|
58
|
-
phaseAssociatedMap: {
|
|
59
|
-
type: Map
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
computed: {
|
|
63
|
-
...mapState({
|
|
64
|
-
phaseList: state => state.globalParam.tscParam.phaseList,
|
|
65
|
-
roadDirection: state => state.globalParam.roadDirection
|
|
66
|
-
})
|
|
67
|
-
},
|
|
68
|
-
watch: {
|
|
69
|
-
phaseList: {
|
|
70
|
-
handler: function (list) {
|
|
71
|
-
if (list.length >= 40) {
|
|
72
|
-
this.isCanAdd = false
|
|
73
|
-
} else {
|
|
74
|
-
this.isCanAdd = true
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
deep: true
|
|
78
|
-
},
|
|
79
|
-
editData: {
|
|
80
|
-
handler: function (editobj) {
|
|
81
|
-
// console.log('editobj', editobj)
|
|
82
|
-
if (editobj.phaseid !== undefined) {
|
|
83
|
-
this.preselectPhase = editobj.phaseid
|
|
84
|
-
} else {
|
|
85
|
-
this.preselectPhase = -1
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
deep: true
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
methods: {
|
|
92
|
-
selectPhase (index, item) {
|
|
93
|
-
let direction = this.editDirPosToPhaseDireaciton(this.editData.icondireid, this.editData.lanePosition)
|
|
94
|
-
// 校验同方位车道不能关联不同相位
|
|
95
|
-
if (this.checkSameDirectionPhase(item.id, direction) === false) return
|
|
96
|
-
// 关联相位
|
|
97
|
-
this.preselectPhase = item.id
|
|
98
|
-
// 组合现有和之前的相位 direction,并去重
|
|
99
|
-
item.direction = Array.from(new Set([...item.direction, ...direction]))
|
|
100
|
-
this.$emit('selectPhase', this.preselectPhase, direction)
|
|
101
|
-
},
|
|
102
|
-
changeDirection (choosedicon) {
|
|
103
|
-
for (let i = 0; i < this.phaseList.length; i++) {
|
|
104
|
-
if (this.phaseList[i].id === choosedicon.phaseid) {
|
|
105
|
-
let direction = this.editDirPosToPhaseDireaciton(choosedicon.icondireid, choosedicon.lanePosition)
|
|
106
|
-
// 校验同方位车道不能关联不同相位
|
|
107
|
-
if (this.checkSameDirectionPhase(choosedicon.phaseid, direction) === false) return
|
|
108
|
-
// 组合现有和之前的相位 direction,并去重
|
|
109
|
-
this.phaseList[i].direction = Array.from(new Set([...this.phaseList[i].direction, ...direction]))
|
|
110
|
-
this.$emit('selectPhase', this.preselectPhase, direction)
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
editDirPosToPhaseDireaciton (laneDirArr, lanePos) {
|
|
115
|
-
// 编辑的车道转向和方位,转化成相位的direction
|
|
116
|
-
let phaseDireacitonArr = laneDirArr.map(lanedir => {
|
|
117
|
-
if (lanePos === 1) {
|
|
118
|
-
// 东
|
|
119
|
-
return lanedir
|
|
120
|
-
}
|
|
121
|
-
if (lanePos === 2) {
|
|
122
|
-
// 西
|
|
123
|
-
return 4 * 1 + lanedir
|
|
124
|
-
}
|
|
125
|
-
if (lanePos === 3) {
|
|
126
|
-
// 南
|
|
127
|
-
return 4 * 3 + lanedir
|
|
128
|
-
}
|
|
129
|
-
if (lanePos === 4) {
|
|
130
|
-
// 北
|
|
131
|
-
return 4 * 2 + lanedir
|
|
132
|
-
}
|
|
133
|
-
})
|
|
134
|
-
return phaseDireacitonArr
|
|
135
|
-
},
|
|
136
|
-
getShowlist (direction) {
|
|
137
|
-
return direction.map(dir => {
|
|
138
|
-
return {
|
|
139
|
-
id: dir,
|
|
140
|
-
color: '#606266'
|
|
141
|
-
}
|
|
142
|
-
})
|
|
143
|
-
},
|
|
144
|
-
getshowped (peddirection) {
|
|
145
|
-
return {
|
|
146
|
-
id: peddirection,
|
|
147
|
-
name: this.PhaseDataModel.getSidePos(peddirection).name
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
handleDeletePhase (index, row) {
|
|
151
|
-
this.$confirm(this.$t('openatccomponents.phase.deletetip'),
|
|
152
|
-
this.$t('openatccomponents.common.alarm'), {
|
|
153
|
-
confirmButtonText: this.$t('openatccomponents.common.confirm'),
|
|
154
|
-
cancelButtonText: this.$t('openatccomponents.common.cancel'),
|
|
155
|
-
type: 'warning'
|
|
156
|
-
}).then(() => {
|
|
157
|
-
this.globalParamModel.deleteParamsByType('phaseList', index, 1)
|
|
158
|
-
this.deleteRing(row)
|
|
159
|
-
this.$message({
|
|
160
|
-
type: 'success',
|
|
161
|
-
message: this.$t('openatccomponents.common.deletesucess')
|
|
162
|
-
})
|
|
163
|
-
// 删除关联此行的并发相位
|
|
164
|
-
this.handleDeleteConcurrent(row.id, [], row.concurrent)
|
|
165
|
-
// 删除关联此相位的所有车道相位id
|
|
166
|
-
this.handleDisassociatePhase(row.id)
|
|
167
|
-
}).catch(() => {
|
|
168
|
-
this.$message({
|
|
169
|
-
type: 'info',
|
|
170
|
-
message: this.$t('openatccomponents.common.deletecancel')
|
|
171
|
-
})
|
|
172
|
-
})
|
|
173
|
-
},
|
|
174
|
-
handleDisassociatePhase (deletePhaseid) {
|
|
175
|
-
// 删除相位后,解除相位关联
|
|
176
|
-
this.$emit('handleDisassociatePhase', deletePhaseid)
|
|
177
|
-
},
|
|
178
|
-
handleAddPhase () {
|
|
179
|
-
this.increaseId()
|
|
180
|
-
if (this.globalParamModel.getParamLength('phaseList') >= 40) {
|
|
181
|
-
this.$message.error(
|
|
182
|
-
this.$t('openatccomponents.phase.mostdata')
|
|
183
|
-
)
|
|
184
|
-
return
|
|
185
|
-
}
|
|
186
|
-
var phaseInitData = {
|
|
187
|
-
id: this.id,
|
|
188
|
-
direction: [],
|
|
189
|
-
peddirection: [], // 行人方向
|
|
190
|
-
mingreen: 0,
|
|
191
|
-
max1: 120,
|
|
192
|
-
max2: 180,
|
|
193
|
-
passage: 3,
|
|
194
|
-
phasewalk: 0,
|
|
195
|
-
pedclear: 0,
|
|
196
|
-
yellow: 3,
|
|
197
|
-
redclear: 2,
|
|
198
|
-
flashgreen: 0,
|
|
199
|
-
redyellow: 0,
|
|
200
|
-
ring: 1,
|
|
201
|
-
greenpulse: 5,
|
|
202
|
-
redpulse: 10,
|
|
203
|
-
vehiclethresh: 30,
|
|
204
|
-
pedestrianthresh: 30,
|
|
205
|
-
controltype: 0, // 控制类型
|
|
206
|
-
concurrent: []
|
|
207
|
-
}
|
|
208
|
-
this.globalParamModel.addParamsByType('phaseList', phaseInitData)
|
|
209
|
-
// this.id++
|
|
210
|
-
this.editRing(phaseInitData)
|
|
211
|
-
// 重新排序相位数组
|
|
212
|
-
let phaseList = this.globalParamModel.getParamsByType('phaseList')
|
|
213
|
-
phaseList.sort(this.compareProperty('id'))
|
|
214
|
-
},
|
|
215
|
-
compareProperty (property) {
|
|
216
|
-
return function (a, b) {
|
|
217
|
-
var value1 = a[property]
|
|
218
|
-
var value2 = b[property]
|
|
219
|
-
return value1 - value2
|
|
220
|
-
}
|
|
221
|
-
},
|
|
222
|
-
increaseId () { // 实现id在之前的基础上寻找最小的
|
|
223
|
-
let phaseList = this.globalParamModel.getParamsByType('phaseList')
|
|
224
|
-
let phaseIdList = phaseList.map(ele => ele.id)
|
|
225
|
-
let i = phaseList.length - 1
|
|
226
|
-
if (i >= 0) {
|
|
227
|
-
for (let j = 1; j <= 40; j++) {
|
|
228
|
-
if (!phaseIdList.includes(j)) {
|
|
229
|
-
this.id = j
|
|
230
|
-
return
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
deleteRing (row) {
|
|
236
|
-
let patternList = this.globalParamModel.getParamsByType('patternList')
|
|
237
|
-
let id = row.id
|
|
238
|
-
let ring = row.ring - 1
|
|
239
|
-
for (let pattern of patternList) {
|
|
240
|
-
for (let i = 0; i < pattern.rings[ring].length; i++) {
|
|
241
|
-
if (pattern.rings[ring][i].id === id) {
|
|
242
|
-
pattern.rings[ring].splice(i, 1)
|
|
243
|
-
pattern.cycle = pattern.cycle - 30
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
editRing (value) {
|
|
249
|
-
let patternList = this.globalParamModel.getParamsByType('patternList')
|
|
250
|
-
let id = value.id
|
|
251
|
-
for (let pattern of patternList) {
|
|
252
|
-
let ring = {}
|
|
253
|
-
ring.name = 'Phase ' + id
|
|
254
|
-
ring.id = id
|
|
255
|
-
ring.value = 30
|
|
256
|
-
pattern.rings[0].push(ring)
|
|
257
|
-
pattern.cycle = pattern.cycle + 30
|
|
258
|
-
}
|
|
259
|
-
},
|
|
260
|
-
handleDeleteConcurrent (curid, curVal, oldVal) {
|
|
261
|
-
// 删除关联的并发相位
|
|
262
|
-
let phaseList = this.globalParamModel.getParamsByType('phaseList')
|
|
263
|
-
for (let i = 0; i < oldVal.length; i++) {
|
|
264
|
-
if (curVal.indexOf(oldVal[i]) === -1) {
|
|
265
|
-
// 此项已被删除
|
|
266
|
-
for (let j = 0; j < phaseList.length; j++) {
|
|
267
|
-
if (phaseList[j].id === oldVal[i]) {
|
|
268
|
-
let index = phaseList[j].concurrent.indexOf(curid)
|
|
269
|
-
if (index !== -1) {
|
|
270
|
-
phaseList[j].concurrent.splice(index, 1)
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
},
|
|
277
|
-
checkSameDirectionPhase (curphaseid, curdirection) {
|
|
278
|
-
// 校验同方向车道关联相位
|
|
279
|
-
// console.log('phaseAssociatedMap', this.phaseAssociatedMap)
|
|
280
|
-
let checkSame = true
|
|
281
|
-
for (let [key, value] of this.phaseAssociatedMap) {
|
|
282
|
-
if (curphaseid !== key) {
|
|
283
|
-
for (let i = 0; i < value.length; i++) {
|
|
284
|
-
if (value[i].index === this.editData.index) continue
|
|
285
|
-
if (!value[i].direction || !value[i].direction.length) continue
|
|
286
|
-
for (let j = 0; j < curdirection.length; j++) {
|
|
287
|
-
if (value[i].direction.indexOf(curdirection[j]) !== -1) {
|
|
288
|
-
checkSame = false
|
|
289
|
-
this.$message.error(this.$t('openatccomponents.channelizationmap.associatedphaseerror'))
|
|
290
|
-
break
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return checkSame
|
|
297
|
-
},
|
|
298
|
-
getPedPhasePos () {
|
|
299
|
-
// 行人相位信息
|
|
300
|
-
this.sidewalkPhaseData = []
|
|
301
|
-
this.phaseList.forEach((ele, i) => {
|
|
302
|
-
if (ele.peddirection) {
|
|
303
|
-
ele.peddirection.forEach((dir, index) => {
|
|
304
|
-
// 行人相位
|
|
305
|
-
if (this.PhaseDataModel.getSidePos(dir)) {
|
|
306
|
-
this.sidewalkPhaseData.push({
|
|
307
|
-
key: this.CrossDiagramMgr.getUniqueKey('pedphase'),
|
|
308
|
-
phaseid: ele.id, // 相位id,用于对应相位状态
|
|
309
|
-
id: dir,
|
|
310
|
-
name: this.PhaseDataModel.getSidePos(dir).name
|
|
311
|
-
})
|
|
312
|
-
}
|
|
313
|
-
})
|
|
314
|
-
}
|
|
315
|
-
})
|
|
316
|
-
return this.sidewalkPhaseData
|
|
317
|
-
}
|
|
318
|
-
},
|
|
319
|
-
created () {
|
|
320
|
-
this.globalParamModel = this.$store.getters.globalParamModel
|
|
321
|
-
this.PhaseDataModel = new PhaseDataModel()
|
|
322
|
-
this.increaseId()
|
|
323
|
-
},
|
|
324
|
-
mounted () {
|
|
325
|
-
},
|
|
326
|
-
destroyed () {
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
</script>
|
|
330
|
-
<style lang="scss">
|
|
331
|
-
</style>
|