openatc-components 0.5.14 → 0.5.16

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.
@@ -0,0 +1,2 @@
1
+ import OptimizeKanban from './OptimizeKanban.vue'
2
+ export default OptimizeKanban
@@ -0,0 +1,369 @@
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="kanbanOptimize">
14
+ <div v-if="this.nowNumber === 1" class="optimizetype">
15
+ <span>{{$t('openatccomponents.pattern.optimizetype')}}</span>
16
+ <el-select v-model="value" clearable :placeholder="$t('openatccomponents.common.select')">
17
+ <el-option
18
+ v-for="item in typeOptions"
19
+ :key="item.value"
20
+ :label="$t('openatccomponents.overview.type' + item.value)"
21
+ :value="item.value"
22
+ >
23
+ </el-option>
24
+ </el-select>
25
+ <span class="optimiNum">{{$t('openatccomponents.pattern.optimizecycle')}}</span>
26
+ <el-input v-model="optimizecycle" clearable :placeholder="$t('openatccomponents.common.enter')"></el-input>
27
+ <!-- <el-button type="primary" @click="onOptimizeClick()">{{$t('openatccomponents.pattern.inoptimize')}}</el-button> -->
28
+ </div>
29
+ <div class="common-board-column" :style="{marginTop:this.nowNumber === 1 ? 0 : '50px',marginLeft:this.nowNumber === 1 ? 0 : 0}">
30
+ <div class="common-board-column-header">
31
+ {{headerText}}
32
+ </div>
33
+ <div class="openatccomponents-board-table-header">
34
+ <el-row :gutter="13">
35
+ <el-col :span="4">{{this.$t('openatccomponents.overview.phase')}}
36
+ </el-col>
37
+ <el-col :span="10">{{this.$t('openatccomponents.overview.flow')}}
38
+ </el-col>
39
+ <el-col :span="10">{{this.$t('openatccomponents.overview.saturationflow')}}
40
+ </el-col>
41
+ </el-row>
42
+ </div>
43
+ <draggable
44
+ class="common-board-column-content"
45
+ :list="list"
46
+ :options="options">
47
+ <div class="common-board-item" v-for="element in list" :key="element.id">
48
+ <el-row :gutter="13">
49
+ <el-col :span="4">
50
+ <el-tooltip class="item" effect="dark" placement="left">
51
+ <div slot="content">{{element.name}}</div>
52
+ <div class="common-phase-description">
53
+ <xdrdirselector Width="70px" Height="70px" Widths="58px" Heights="58px" :Datas="styles" :Data="showStyle" :showlist="element.desc" :ISActiveMask="ISActiveMask" :MaskColor="MaskColor"></xdrdirselector>
54
+ </div>
55
+ </el-tooltip>
56
+ </el-col>
57
+ <el-col :span="10">
58
+ <el-input-number :controls="false" class="col-content" size="small" :step="1" v-model.number="element.flowperhour" ref="type" :disabled="element.mode === 7"></el-input-number>
59
+ </el-col>
60
+ <el-col :span="10">
61
+ <el-input-number :controls="false" class="col-content" size="small" :step="1" v-model.number="element.saturation" ref="types" :disabled="element.mode === 7"></el-input-number>
62
+ </el-col>
63
+ </el-row>
64
+ </div>
65
+ </draggable>
66
+ </div>
67
+ </div>
68
+ </template>
69
+ <script>
70
+ import draggable from 'vuedraggable'
71
+ import { getDuration } from '@/api/cross'
72
+ import xdrdirselector from '@/components/XRDDirSelector'
73
+
74
+ export default {
75
+ name: 'patternOptimize',
76
+ components: {
77
+ draggable,
78
+ xdrdirselector
79
+ },
80
+ data () {
81
+ return {
82
+ showStyle: {
83
+ left: '7px',
84
+ top: '0px'
85
+ },
86
+ styles: {
87
+ left: '7px',
88
+ top: '0px'
89
+ },
90
+ typeOptions: [{
91
+ value: 'flow-split-opt'
92
+ }, {
93
+ value: 'cycle-opt'
94
+ }],
95
+ value: 'flow-split-opt',
96
+ optimizecycle: 0
97
+ }
98
+ },
99
+ props: {
100
+ headerText: {
101
+ type: String,
102
+ default: 'Header'
103
+ },
104
+ id: {
105
+ type: Number
106
+ },
107
+ rings: {
108
+ type: Array
109
+ },
110
+ nowNumber: {
111
+ type: Number
112
+ },
113
+ phaseList: {
114
+ type: Array
115
+ },
116
+ options: {
117
+ type: Object,
118
+ default () {
119
+ return {}
120
+ }
121
+ },
122
+ list: {
123
+ type: Array,
124
+ default () {
125
+ return []
126
+ }
127
+ },
128
+ // index: {
129
+ // type: Number
130
+ // },
131
+ ISActiveMask: {
132
+ type: Boolean,
133
+ default: true
134
+ },
135
+ // 当phase的描述为空时,显示的图形颜色。
136
+ MaskColor: {
137
+ type: String,
138
+ default: '#000000'
139
+ }
140
+ },
141
+ created () {
142
+ // this.addMinSplit()
143
+ this.addMin()
144
+ },
145
+ computed () {
146
+
147
+ },
148
+ watch: {
149
+ list: {
150
+ handler: function () {
151
+ // let list = this.$refs.type
152
+ // let flow = this.$refs.types
153
+ // console.log(this.list, 'list')
154
+ // let cycle = 0
155
+ // let n = this.index
156
+ // for (let i = 0; i < list.length; i++) {
157
+ // cycle = cycle + Number(list[i].currentValue)
158
+ // }
159
+ // const globalParamModel = this.$store.getters.globalParamModel
160
+ // // let MaxCycle = globalParamModel.getParamsByType('patternList')[n].cycle
161
+ // let pattern = globalParamModel.getParamsByType('patternList')[n]
162
+ // globalParamModel.getParamsByType('patternList')[n].cycle = this.getMaxCycle(pattern)
163
+ // this.addMinSplit()
164
+ // this.$emit('handleSplit', n)
165
+ },
166
+ deep: true
167
+ }
168
+ },
169
+ methods: {
170
+ onOptimizeClick () {
171
+ let msg = this.$t('openatccomponents.pattern.algorithmEngineOptimization')
172
+ const loading = this.$loading({
173
+ lock: true,
174
+ text: msg,
175
+ spinner: 'el-icon-loading',
176
+ background: 'rgba(0, 0, 0, 0.7)'
177
+ })
178
+ setTimeout(() => {
179
+ loading.close()
180
+ this.handeleOptimizeClick()
181
+ }, 1000)
182
+ },
183
+ handeleOptimizeClick () {
184
+ let newPha = []
185
+ for (let i = 0; i < this.rings.length; i++) {
186
+ newPha.push(...this.rings[i])
187
+ }
188
+ let phaseData = newPha.map(item => {
189
+ return {
190
+ id: item.id,
191
+ flowperhour: item.flowperhour,
192
+ saturation: item.saturation
193
+ }
194
+ })
195
+ let patternList = this.$store.state.globalParam.tscParam.patternList
196
+ let pattern = patternList.filter((item) => item.id === this.id)[0]
197
+ let reqData = {
198
+ 'type': this.value,
199
+ 'optcycle': this.optimizecycle ? this.optimizecycle : 0,
200
+ 'phaseList': this.phaseList,
201
+ 'pattern': pattern,
202
+ 'phases': phaseData
203
+ }
204
+ let isValidata = []
205
+ for (let j = 0; j < newPha.length; j++) {
206
+ let comNum = (newPha[j].length / 4) * 1700 * 0.8
207
+ isValidata.push(newPha[j].flowperhour > comNum)
208
+ }
209
+ if (isValidata.includes(true)) {
210
+ this.$confirm(this.$t('openatccomponents.overview.maxFlow'),
211
+ this.$t('openatccomponents.common.alarm'), {
212
+ confirmButtonText: this.$t('eopenatccomponentsdge.common.confirm'),
213
+ cancelButtonText: this.$t('openatccomponents.common.cancel'),
214
+ type: 'warning'
215
+ }).then(() => {
216
+ getDuration(reqData).then(data => {
217
+ if (data.data.success) {
218
+ this.$message({
219
+ type: 'success',
220
+ message: this.$t('openatccomponents.pattern.success')
221
+ })
222
+ for (let i = 0; i < this.rings.length; i++) {
223
+ for (let j = 0; j < this.rings[i].length; j++) {
224
+ for (let h = 0; h < data.data.data.phase.length; h++) {
225
+ if (this.rings[i][j].id === data.data.data.phase[h].id) {
226
+ this.rings[i][j].value = data.data.data.phase[h].duration
227
+ // this.rings[i][j].cycle = data.data.data.phase[h].cycle
228
+ }
229
+ }
230
+ }
231
+ }
232
+ }
233
+ }).catch(error => {
234
+ console.log(error)
235
+ })
236
+ }).catch(() => {
237
+ })
238
+ } else {
239
+ getDuration(reqData).then(data => {
240
+ if (data.data.success) {
241
+ this.$message({
242
+ type: 'success',
243
+ message: this.$t('openatccomponents.pattern.success')
244
+ })
245
+ for (let i = 0; i < this.rings.length; i++) {
246
+ for (let j = 0; j < this.rings[i].length; j++) {
247
+ for (let h = 0; h < data.data.data.phase.length; h++) {
248
+ if (this.rings[i][j].id === data.data.data.phase[h].id) {
249
+ this.rings[i][j].value = data.data.data.phase[h].duration
250
+ // this.rings[i][j].cycle = data.data.data.phase[h].cycle
251
+ }
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }).catch(error => {
257
+ console.log(error)
258
+ })
259
+ }
260
+ },
261
+ addMin () {
262
+ for (let i of this.list) {
263
+ if (!i.flowperhour || !i.saturation) {
264
+ i.length = this.list.length
265
+ i.flowperhour = 0
266
+ i.saturation = 1700
267
+ }
268
+ }
269
+ }
270
+ // addMinSplit () {
271
+ // const globalParamModel = this.$store.getters.globalParamModel
272
+ // let phaseList = globalParamModel.getParamsByType('phaseList')
273
+ // for (let ls of this.list) {
274
+ // let phase = phaseList.filter((item) => {
275
+ // return item.id === ls.id
276
+ // })[0]
277
+ // if (!phase.redyellow) {
278
+ // phase.redyellow = 0
279
+ // }
280
+ // if (!phase.yellow) {
281
+ // phase.yellow = 0
282
+ // }
283
+ // if (!phase.redclear) {
284
+ // phase.redclear = 0
285
+ // }
286
+ // if (!phase.flashgreen) {
287
+ // phase.flashgreen = 0
288
+ // }
289
+ // if (!phase.phasewalk) {
290
+ // phase.phasewalk = 0
291
+ // }
292
+ // if (!phase.pedclear) {
293
+ // phase.pedclear = 0
294
+ // }
295
+ // // let temp1 = phase.redyellow + phase.yellow + phase.redclear + phase.flashgreen // 绿信比的最小值要大于最小绿+黄灯+全红+绿闪
296
+ // // let temp2 = phase.phasewalk + phase.pedclear
297
+ // // if (temp1 > temp2) {
298
+ // // ls.minSplit = temp1
299
+ // // } else {
300
+ // // ls.minSplit = temp2
301
+ // // }
302
+ // // if (ls.mode !== 7 && ls.value < ls.minSplit) {
303
+ // // ls.value = ls.minSplit
304
+ // // }
305
+ // // let temp1 = phase.yellow + phase.redclear + phase.flashgreen // 绿信比的最小值要大于最小绿+黄灯+全红+绿闪
306
+ // let temp1 = phase.yellow + phase.redclear + phase.mingreen
307
+ // let temp2 = phase.yellow + phase.redclear + phase.phasewalk + phase.pedclear
308
+ // ls.minSplit = temp1 > temp2 ? temp1 : temp2
309
+ // if (ls.mode !== 7 && ls.value < ls.minSplit) {
310
+ // ls.value = ls.minSplit
311
+ // this.$message.error(this.$t('openatccomponents.pattern.splitCheckMsg'))
312
+ // }
313
+ // }
314
+ // },
315
+ // getMaxCycle (pattern) {
316
+ // let rings = pattern.rings
317
+ // let maxCycle = 0
318
+ // for (let ring of rings) {
319
+ // if (ring.length === 0) continue
320
+ // let cycle = 0
321
+ // for (let r of ring) {
322
+ // if (r.mode === 7) { // 忽略相位不计周期
323
+ // continue
324
+ // }
325
+ // cycle = cycle + r.value
326
+ // }
327
+ // if (cycle > maxCycle) {
328
+ // maxCycle = cycle
329
+ // }
330
+ // }
331
+ // return maxCycle
332
+ // },
333
+ // doChange (val) {
334
+ // // if (val.mode === 7) {
335
+ // // val.value = 0
336
+ // // } else {
337
+ // // val.value = 30
338
+ // // }
339
+ // }
340
+ }
341
+ }
342
+ </script>
343
+ <style lang="scss" scoped>
344
+ .col-content {
345
+ width: 100%;
346
+ }
347
+ .kanbanOptimize {
348
+ .common-board-column {
349
+ max-width: unset !important;
350
+ }
351
+ }
352
+ .optimizetype{
353
+ // float: left;
354
+ font-size: 14PX;
355
+ margin:0 0 10PX 0;
356
+ .el-input {
357
+ width: 80PX;
358
+ }
359
+ .el-select{
360
+ width: 145PX;
361
+ }
362
+ .el-button {
363
+ margin-left: 10PX;
364
+ }
365
+ .optimiNum {
366
+ padding-left: 10PX;
367
+ }
368
+ }
369
+ </style>
@@ -222,7 +222,7 @@ export default {
222
222
  this.agentId = val
223
223
  this.resetcomponent = false
224
224
  setIframdevid(val)
225
- this.registerMessage() // 注册消息
225
+ // this.registerMessage() // 注册消息
226
226
  await this.getIntersectionInfo(val)
227
227
  this.$nextTick(() => {
228
228
  this.resetcomponent = true
@@ -249,7 +249,7 @@ export default {
249
249
  this.CrossDiagramMgr = new CrossDiagramMgr()
250
250
  this.agentId = this.AgentId
251
251
  setIframdevid(this.agentId)
252
- this.registerMessage() // 注册消息
252
+ // this.registerMessage() // 注册消息
253
253
  this.getIntersectionInfo(this.agentId)
254
254
  },
255
255
  mounted () {
@@ -380,8 +380,8 @@ export default {
380
380
  })
381
381
  },
382
382
  registerMessage () {
383
- registerMessage(this.agentId).then(data => {
384
- if (!data.data.success) {
383
+ registerMessage(this.agentId, this.protocol).then(data => {
384
+ if (!data.data.success && this.protocol !== 'rcp') {
385
385
  // this.devStatus = 2
386
386
  if (data.data.code === '4002' && data.data.data.errorCode === '4209') {
387
387
  let success = data.data.data.content.success
@@ -406,6 +406,20 @@ export default {
406
406
  this.reSend()
407
407
  }
408
408
  return
409
+ } else {
410
+ if (data.data.code === '4002' && data.data.data.errorCode === '4210') {
411
+ let successArray = data.data.data.content
412
+ successArray.forEach(success => {
413
+ let dataType = this.$t('openatccomponents.common.datatype') + ':' + success.DataClass // 数据类
414
+ let objectID = this.$t('openatccomponents.common.objectid') + ':' + success.ObjectID // 对象
415
+ let propertyID = this.$t('openatccomponents.common.propertyid') + ':' + success.PropertyID // 属性
416
+ let elementID = this.$t('openatccomponents.common.elementid') + ':' + success.ElementID // 元素
417
+ let returnCode = this.$t('openatccomponents.common.returncode') + ':' + this.getError(success.ReturnCode) // 数据值
418
+ let errormsg = `${dataType} ${objectID} ${propertyID} ${elementID} ${returnCode}`
419
+ this.$message.error(this.$t(errormsg))
420
+ })
421
+ return
422
+ }
409
423
  }
410
424
  // this.devStatus = 3
411
425
  this.clearPatternInterval() // 清除其他定时器
@@ -418,6 +432,31 @@ export default {
418
432
  this.getPhase()
419
433
  })
420
434
  },
435
+ getError (val) {
436
+ if (val === 'Status_BadValue') {
437
+ return this.$t('openatccomponents.common.statusbadvalue')
438
+ } else if (val === 'Status_WrongLength') {
439
+ return this.$t('openatccomponents.common.statuswronglength')
440
+ } else if (val === 'Status_Overflow') {
441
+ return this.$t('openatccomponents.common.statusvverflow')
442
+ } else if (val === 'Status_ReadOnly') {
443
+ return this.$t('openatccomponents.common.statusreadonly')
444
+ } else if (val === 'Status_NullValue') {
445
+ return this.$t('openatccomponents.common.statusnullvalue')
446
+ } else if (val === 'Status_Error') {
447
+ return this.$t('openatccomponents.common.statuserror')
448
+ } else if (val === 'Status_ControlFail') {
449
+ return this.$t('openatccomponents.common.statuscontrolfail')
450
+ } else if (val === 'Status_AccessDenied') {
451
+ return this.$t('openatccomponents.common.statusaccessdenied')
452
+ } else if (val === 'Status_InvalidKey') {
453
+ return this.$t('openatccomponents.common.statusinvalidkey')
454
+ } else if (val === 'Status_ChecksumError') {
455
+ return this.$t('openatccomponents.common.statuschecksumerror')
456
+ } else {
457
+ return ''
458
+ }
459
+ },
421
460
  reSend () { // 设备掉线重连机制
422
461
  // this.devStatus = 1
423
462
  this.clearRegisterMessageTimer()
@@ -725,36 +764,36 @@ export default {
725
764
  reconnectionDev () {
726
765
  this.registerMessage()
727
766
  },
728
- queryDevParams () {
729
- queryDevice(this.AgentId).then(res => {
730
- if (!res.data.success) {
731
- this.isShowMessage && this.$message.error(getMessageByCode(res.data.code, this.$i18n.locale))
732
- return
733
- }
734
- let devParams = res.data.data.jsonparam
735
- this.ip = devParams.ip
736
- this.port = String(devParams.port)
737
- this.protocol = res.data.data.protocol
738
- this.agentId = res.data.data.agentid
739
- if (res.data.data.name) {
740
- this.agentName = res.data.data.name
741
- }
742
- this.platform = res.data.data.platform
743
- let state = res.data.data.state
744
- if (state === 'UP') {
745
- this.stateName = this.$t('openatccomponents.overview.online')
746
- } else {
747
- this.stateName = this.$t('openatccomponents.overview.offline')
748
- }
749
- this.registerMessage() // 注册消息
750
- this.initData()
751
- // 配置工具没参数的时候
752
- this.getIntersectionInfo(this.agentId)
753
- if (this.curHomePage === 'Channelization') {
754
- this.getDetectorStatus()
755
- }
756
- })
757
- },
767
+ // queryDevParams () {
768
+ // queryDevice(this.AgentId).then(res => {
769
+ // if (!res.data.success) {
770
+ // this.isShowMessage && this.$message.error(getMessageByCode(res.data.code, this.$i18n.locale))
771
+ // return
772
+ // }
773
+ // let devParams = res.data.data.jsonparam
774
+ // this.ip = devParams.ip
775
+ // this.port = String(devParams.port)
776
+ // this.protocol = res.data.data.protocol
777
+ // this.agentId = res.data.data.agentid
778
+ // if (res.data.data.name) {
779
+ // this.agentName = res.data.data.name
780
+ // }
781
+ // this.platform = res.data.data.platform
782
+ // let state = res.data.data.state
783
+ // if (state === 'UP') {
784
+ // this.stateName = this.$t('openatccomponents.overview.online')
785
+ // } else {
786
+ // this.stateName = this.$t('openatccomponents.overview.offline')
787
+ // }
788
+ // this.registerMessage() // 注册消息
789
+ // this.initData()
790
+ // // 配置工具没参数的时候
791
+ // this.getIntersectionInfo(this.agentId)
792
+ // if (this.curHomePage === 'Channelization') {
793
+ // this.getDetectorStatus()
794
+ // }
795
+ // })
796
+ // },
758
797
  getPhase () {
759
798
  uploadSingleTscParam('phase', this.agentId).then(data => {
760
799
  let res = data.data
@@ -800,6 +839,7 @@ export default {
800
839
  this.agentName = res.data.data.name
801
840
  }
802
841
  this.platform = res.data.data.platform
842
+ this.registerMessage() // 注册消息
803
843
  })
804
844
  },
805
845
  getDetectorStatus () {