@flexem/fc-gui 3.0.0-alpha.9 → 3.0.0-alpha.90
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/CHANGELOG.md +381 -0
- package/bundles/@flexem/fc-gui.umd.js +17578 -16210
- package/bundles/@flexem/fc-gui.umd.js.map +1 -1
- package/bundles/@flexem/fc-gui.umd.min.js +5 -5
- package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
- package/communication/variable/variable-communicator.d.ts +1 -0
- package/config/alarm/alarm.store.d.ts +6 -0
- package/config/alarm/alarm.store.js +0 -0
- package/config/alarm/alarm.store.metadata.json +1 -0
- package/config/alarm/get-alarms-args.d.ts +9 -0
- package/config/alarm/get-alarms-args.js +9 -0
- package/config/alarm/get-alarms-args.metadata.json +1 -0
- package/config/alarm/index.d.ts +2 -0
- package/config/alarm/index.js +1 -0
- package/config/alarm/index.metadata.json +1 -0
- package/config/config-store.d.ts +2 -0
- package/config/index.d.ts +1 -0
- package/config/index.js +1 -0
- package/config/index.metadata.json +1 -1
- package/elements/air-quality/air-quality-element.d.ts +31 -0
- package/elements/air-quality/air-quality-element.js +194 -0
- package/elements/air-quality/air-quality-element.metadata.json +1 -0
- package/elements/alarm/alarm-element.d.ts +44 -0
- package/elements/alarm/alarm-element.js +382 -0
- package/elements/alarm/alarm-element.metadata.json +1 -0
- package/elements/bar-graph-element.d.ts +7 -1
- package/elements/bar-graph-element.js +70 -4
- package/elements/bar-graph-element.metadata.json +1 -1
- package/elements/base/readable-element.d.ts +6 -1
- package/elements/base/readable-element.js +31 -2
- package/elements/base/readable-element.metadata.json +1 -1
- package/elements/historical-curve/historical-curve.element.js +116 -13
- package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
- package/elements/main-element.js +25 -4
- package/elements/main-element.metadata.json +1 -1
- package/elements/meter-element.d.ts +7 -1
- package/elements/meter-element.js +76 -7
- package/elements/meter-element.metadata.json +1 -1
- package/elements/numerical-display/numerical-display-element.d.ts +8 -2
- package/elements/numerical-display/numerical-display-element.js +55 -11
- package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
- package/elements/per-view-variable-communicator.d.ts +2 -0
- package/elements/per-view-variable-communicator.js +8 -0
- package/elements/per-view-variable-communicator.metadata.json +1 -1
- package/elements/ring-graph/ring-graph-element.d.ts +10 -1
- package/elements/ring-graph/ring-graph-element.js +106 -3
- package/elements/ring-graph/ring-graph-element.metadata.json +1 -1
- package/elements/shared/graph/graph-state-element.js +0 -3
- package/elements/shared/text/text-element.js +13 -2
- package/elements/shared/text/text-state-element.js +1 -1
- package/elements/switch-indicator-light/bit-switch-operator.d.ts +1 -0
- package/elements/switch-indicator-light/bit-switch-operator.js +19 -0
- package/elements/switch-indicator-light/bit-switch-operator.metadata.json +1 -1
- package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +8 -0
- package/elements/switch-indicator-light/switch-indicator-light-element.js +93 -23
- package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
- package/elements/switch-indicator-light/switch-operator.d.ts +1 -0
- package/elements/switch-indicator-light/word-switch-operator.d.ts +1 -0
- package/elements/switch-indicator-light/word-switch-operator.js +6 -0
- package/elements/switch-indicator-light/word-switch-operator.metadata.json +1 -1
- package/elements/video/video-element.d.ts +4 -0
- package/elements/video/video-element.js +69 -20
- package/elements/video/video-element.metadata.json +1 -1
- package/elements/view-operation/view-operation.element.js +8 -0
- package/elements/weather/weater-element.js +0 -1
- package/gui/gui-context.d.ts +2 -1
- package/gui/gui-host.d.ts +1 -1
- package/gui/gui.component.d.ts +3 -0
- package/gui/gui.component.js +15 -2
- package/gui/gui.component.metadata.json +1 -1
- package/localization/localization.service.d.ts +7 -0
- package/localization/localization.service.js +8 -1
- package/localization/localization.service.metadata.json +1 -1
- package/localization/localization.service.zh_CN.js +8 -1
- package/localization/localization.service.zh_CN.metadata.json +1 -1
- package/modal/write-value/write-value-modal-args.d.ts +4 -1
- package/modal/write-value/write-value-modal-args.js +3 -1
- package/modal/write-value/write-value-modal-args.metadata.json +1 -1
- package/modal/write-value/write-value-modal.component.d.ts +9 -7
- package/modal/write-value/write-value-modal.component.html +9 -4
- package/modal/write-value/write-value-modal.component.js +39 -22
- package/modal/write-value/write-value-modal.component.metadata.json +1 -1
- package/model/air-quality/air-quality-info.d.ts +23 -0
- package/model/air-quality/air-quality-info.js +4 -0
- package/model/air-quality/air-quality-info.metadata.json +1 -0
- package/model/air-quality/air-quality.model.d.ts +7 -0
- package/model/air-quality/air-quality.model.js +0 -0
- package/model/air-quality/air-quality.model.metadata.json +1 -0
- package/model/alarm/alarm.model.d.ts +13 -0
- package/model/alarm/alarm.model.js +0 -0
- package/model/alarm/alarm.model.metadata.json +1 -0
- package/model/bar-graph/bar-graph.d.ts +4 -0
- package/model/base/readable-model.d.ts +4 -0
- package/model/historical-curve/historical-curve-axis-settings.d.ts +10 -0
- package/model/historical-curve/historical-curve-axis-settings.js +5 -0
- package/model/historical-curve/historical-curve-axis-settings.metadata.json +1 -1
- package/model/meter/meter.d.ts +4 -0
- package/model/numerical-display/numerical-display.d.ts +1 -0
- package/model/ring-graph/ring-graph.model.d.ts +8 -0
- package/model/switch-indicator-light/bit-switch-operation.d.ts +2 -1
- package/model/switch-indicator-light/bit-switch-operation.js +1 -0
- package/model/switch-indicator-light/bit-switch-operation.metadata.json +1 -1
- package/package.json +1 -1
- package/remote/communication/variable/remote-variable-communicator.d.ts +4 -0
- package/remote/communication/variable/remote-variable-communicator.js +23 -1
- package/remote/communication/variable/remote-variable-communicator.metadata.json +1 -1
- package/remote/communication/variable/remote-variable-protocol.d.ts +3 -0
- package/service/index.d.ts +1 -0
- package/service/index.metadata.json +1 -1
- package/service/released-variable/index.d.ts +1 -0
- package/service/released-variable/index.js +0 -0
- package/service/released-variable/index.metadata.json +1 -0
- package/service/released-variable/released-variable.service.d.ts +4 -0
- package/service/released-variable/released-variable.service.js +0 -0
- package/service/released-variable/released-variable.service.metadata.json +1 -0
- package/service/weather.service.d.ts +1 -0
- package/shared/gui-consts.d.ts +2 -0
- package/shared/gui-consts.js +2 -0
- package/shared/gui-consts.metadata.json +1 -1
- package/utils/data-type/data-type.service.d.ts +4 -7
- package/utils/data-type/data-type.service.js +29 -17
- package/utils/data-type/fbox-data-type.service.js +40 -0
- package/utils/numerical-operation.service.js +2 -2
|
@@ -10,6 +10,7 @@ import { HistoricalCurveElementStatus } from './historical-curve-element-status'
|
|
|
10
10
|
import { LOGGER_SERVICE_TOKEN } from '../../logger';
|
|
11
11
|
import { GlobalSettings, DisplayMode } from '../../settings';
|
|
12
12
|
import { CurveType } from '../../model/historical-curve/curve-type';
|
|
13
|
+
import { AxisRangeType } from '../../model/historical-curve/historical-curve-axis-settings';
|
|
13
14
|
export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
14
15
|
constructor(element, injector, permissionChecker, variableCommunicator, variableStore, historyDataStore, signalRAppId) {
|
|
15
16
|
super(element, permissionChecker, variableCommunicator, variableStore, signalRAppId);
|
|
@@ -21,7 +22,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
21
22
|
marginRight: 20,
|
|
22
23
|
mobileMinWidth: 450,
|
|
23
24
|
operationAreaHeight: 32,
|
|
24
|
-
operationAreaMarginTop:
|
|
25
|
+
operationAreaMarginTop: 25,
|
|
25
26
|
operationSelectFontSize: '16px',
|
|
26
27
|
operationButtonWidth: 24,
|
|
27
28
|
operationButtonHeight: 24,
|
|
@@ -38,7 +39,7 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
38
39
|
}, this.model.displaySetting.refreshInterval * 1000);
|
|
39
40
|
this.isMobileMode = DisplayMode.Mobile === injector.get(GlobalSettings).displayMode;
|
|
40
41
|
if (this.isMobileMode) {
|
|
41
|
-
this.displayOption.operationAreaMarginTop =
|
|
42
|
+
this.displayOption.operationAreaMarginTop = 35;
|
|
42
43
|
if (this.model.displaySetting.size.width >= this.displayOption.mobileMinWidth) {
|
|
43
44
|
this.displayOption.operationAreaHeight = 68;
|
|
44
45
|
this.displayOption.operationSelectFontSize = '24px';
|
|
@@ -58,7 +59,9 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
58
59
|
}
|
|
59
60
|
getValidTimePeriods() {
|
|
60
61
|
const timePeriods = new Array();
|
|
62
|
+
timePeriods.push({ key: 6, name: this.localization.lastThirtyMinutes });
|
|
61
63
|
timePeriods.push({ key: 1, name: this.localization.lastOneHour });
|
|
64
|
+
timePeriods.push({ key: 7, name: this.localization.lastEightHour });
|
|
62
65
|
timePeriods.push({ key: 2, name: this.localization.lastTwentyFourHours });
|
|
63
66
|
timePeriods.push({ key: 3, name: this.localization.lastSevenDays });
|
|
64
67
|
timePeriods.push({ key: 4, name: this.localization.lastThirtyDays });
|
|
@@ -84,6 +87,12 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
84
87
|
case 5:
|
|
85
88
|
this.startTime = moment().subtract(1, 'years');
|
|
86
89
|
break;
|
|
90
|
+
case 6:
|
|
91
|
+
this.startTime = moment().subtract(30, 'minutes');
|
|
92
|
+
break;
|
|
93
|
+
case 7:
|
|
94
|
+
this.startTime = moment().subtract(8, 'hours');
|
|
95
|
+
break;
|
|
87
96
|
default:
|
|
88
97
|
this.startTime = moment().subtract(1, 'days');
|
|
89
98
|
}
|
|
@@ -144,6 +153,9 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
144
153
|
const chart = nv.models.lineChart().showLegend(true)
|
|
145
154
|
.margin({ top: 0, bottom: 0, left: this.displayOption.marginLeft, right: this.displayOption.marginRight })
|
|
146
155
|
.noData(this.localization.chartNoData);
|
|
156
|
+
if (this.model.displaySetting.axisSetting.yAxisRangeType === AxisRangeType.Custom) {
|
|
157
|
+
chart.yDomain([this.model.displaySetting.axisSetting.yAxisMin, this.model.displaySetting.axisSetting.yAxisMax]);
|
|
158
|
+
}
|
|
147
159
|
if (!this.isMobileMode) {
|
|
148
160
|
chart.focusEnable(true);
|
|
149
161
|
chart.focus.margin({ top: 10, right: 0, bottom: 0, left: 0 });
|
|
@@ -151,10 +163,6 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
151
163
|
chart.focus.showXAxis(false);
|
|
152
164
|
}
|
|
153
165
|
this.renderCommonProperty(chart, chartWidth, chartHeight, data);
|
|
154
|
-
// if in Mobile mode and width is less than the min width, then hide operation area
|
|
155
|
-
if (this.isMobileMode && this.model.displaySetting.size.width < this.displayOption.mobileMinWidth) {
|
|
156
|
-
return chart;
|
|
157
|
-
}
|
|
158
166
|
this.renderOperationArea(chartWidth, chartHeight);
|
|
159
167
|
return chart;
|
|
160
168
|
}
|
|
@@ -172,16 +180,15 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
172
180
|
chart.multibar.stacked(true);
|
|
173
181
|
chart.multibar2.stacked(true);
|
|
174
182
|
}
|
|
183
|
+
if (this.model.displaySetting.axisSetting.yAxisRangeType === AxisRangeType.Custom) {
|
|
184
|
+
chart.yDomain([this.model.displaySetting.axisSetting.yAxisMin, this.model.displaySetting.axisSetting.yAxisMax]);
|
|
185
|
+
}
|
|
175
186
|
if (!this.isMobileMode) {
|
|
176
187
|
chart.focusEnable(true);
|
|
177
188
|
chart.focusShowAxisX(false);
|
|
178
189
|
}
|
|
179
190
|
chart.xAxis.tickFormat(d => this.timeFormat(d, '%x %X'));
|
|
180
191
|
this.renderCommonProperty(chart, chartWidth, chartHeight, data);
|
|
181
|
-
// if in Mobile mode and width is less than the min width, then hide operation area
|
|
182
|
-
if (this.isMobileMode && this.model.displaySetting.size.width < this.displayOption.mobileMinWidth) {
|
|
183
|
-
return chart;
|
|
184
|
-
}
|
|
185
192
|
this.renderOperationArea(chartWidth, chartHeight);
|
|
186
193
|
const focusContext = this.rootElement.select('.nv-context');
|
|
187
194
|
focusContext.select('.nv-barsWrap.nvd3-svg').attr('transform', 'translate(0,30)');
|
|
@@ -196,9 +203,15 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
196
203
|
return chart;
|
|
197
204
|
}
|
|
198
205
|
renderCommonProperty(chart, chartWidth, chartHeight, data) {
|
|
206
|
+
var _a, _b;
|
|
199
207
|
chart.tooltip.headerFormatter(d => this.timeFormat(d, '%x %X'));
|
|
200
208
|
if (this.model.displaySetting.showAxis) {
|
|
201
|
-
chart.xAxis.showMaxMin(true).tickFormat(d =>
|
|
209
|
+
chart.xAxis.showMaxMin(true).tickFormat(d => {
|
|
210
|
+
if (this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
|
|
211
|
+
return this.timeFormat(d, '%y-%m-%d');
|
|
212
|
+
}
|
|
213
|
+
return this.timeFormat(Number(d), '%X');
|
|
214
|
+
});
|
|
202
215
|
if (this.model.displaySetting.axisSetting) {
|
|
203
216
|
if (this.model.displaySetting.axisSetting.showAxisLabel && this.model.displaySetting.axisSetting.axisLabelFont) {
|
|
204
217
|
chart.xAxis.fontSize(this.model.displaySetting.axisSetting.axisLabelFont.fontSize);
|
|
@@ -223,15 +236,105 @@ export class HistoricalCurveElement extends ConditionalDisplayElement {
|
|
|
223
236
|
chart.update();
|
|
224
237
|
this.rootElement.selectAll('.nv-noData').attr('x', chartWidth / 2).attr('y', chartHeight / 2 + this.displayOption.operationAreaHeight);
|
|
225
238
|
});
|
|
239
|
+
const fontSize = (_b = (_a = this.model.displaySetting.axisSetting) === null || _a === void 0 ? void 0 : _a.axisLabelFont) === null || _b === void 0 ? void 0 : _b.fontSize;
|
|
226
240
|
this.rootElement.selectAll('.domain').style('stroke-opacity', 1);
|
|
227
241
|
if (this.model.displaySetting.showAxis && this.model.displaySetting.axisSetting) {
|
|
228
242
|
const axisColor = this.model.displaySetting.axisSetting.axisColor;
|
|
229
243
|
this.rootElement.selectAll('.domain').style('stroke', axisColor);
|
|
230
|
-
if (this.model.displaySetting.axisSetting.showAxisLabel) {
|
|
231
|
-
const fontSize = this.model.displaySetting.axisSetting.axisLabelFont.fontSize;
|
|
244
|
+
if (fontSize && this.model.displaySetting.axisSetting.showAxisLabel) {
|
|
232
245
|
this.rootElement.selectAll('.nv-axisMaxMin').select('text').style('font-size', fontSize);
|
|
233
246
|
}
|
|
234
247
|
}
|
|
248
|
+
let strokeWidth = 0;
|
|
249
|
+
if (this.model.displaySetting.axisSetting.showTick !== false) {
|
|
250
|
+
strokeWidth = 1;
|
|
251
|
+
}
|
|
252
|
+
this.rootElement
|
|
253
|
+
.selectAll('.nv-x')
|
|
254
|
+
.selectAll('.tick')
|
|
255
|
+
.selectAll('line')
|
|
256
|
+
.attr('style', `stroke:${this.model.displaySetting.axisSetting.xAxisTickColor || 'rgb(127, 147, 159)'};stroke-width:${strokeWidth};`);
|
|
257
|
+
this.rootElement
|
|
258
|
+
.selectAll('.nv-y')
|
|
259
|
+
.selectAll('.tick')
|
|
260
|
+
.selectAll('line')
|
|
261
|
+
.attr('style', `stroke:${this.model.displaySetting.axisSetting.yAxisTickColor || 'rgb(127, 147, 159)'};stroke-width:${strokeWidth};`);
|
|
262
|
+
if (fontSize && this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
|
|
263
|
+
const self = this;
|
|
264
|
+
this.rootElement
|
|
265
|
+
.selectAll('.nv-x')
|
|
266
|
+
.selectAll('.tick')
|
|
267
|
+
.selectAll('text')
|
|
268
|
+
.data(function (d) {
|
|
269
|
+
return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
|
|
270
|
+
})
|
|
271
|
+
.enter()
|
|
272
|
+
.append('text')
|
|
273
|
+
.attr('class', 'full-date')
|
|
274
|
+
.attr('x', 0)
|
|
275
|
+
.attr('y', 0)
|
|
276
|
+
.attr('dy', '2.3em')
|
|
277
|
+
.style('text-anchor', 'middle')
|
|
278
|
+
.style('font-size', fontSize)
|
|
279
|
+
.text((d) => d);
|
|
280
|
+
this.rootElement
|
|
281
|
+
.selectAll('.nv-axisMaxMin-x')
|
|
282
|
+
.selectAll('text')
|
|
283
|
+
.data(function (d) {
|
|
284
|
+
return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
|
|
285
|
+
})
|
|
286
|
+
.enter()
|
|
287
|
+
.append('text')
|
|
288
|
+
.attr('class', 'full-date')
|
|
289
|
+
.attr('x', 0)
|
|
290
|
+
.attr('y', 0)
|
|
291
|
+
.attr('dy', '2.3em')
|
|
292
|
+
.style('text-anchor', 'middle')
|
|
293
|
+
.style('font-size', fontSize)
|
|
294
|
+
.text((d) => d);
|
|
295
|
+
const focusWrap = this.rootElement.selectAll('.nv-focusWrap');
|
|
296
|
+
if (focusWrap.size()) {
|
|
297
|
+
let h = focusWrap.attr('transform');
|
|
298
|
+
if (h && h.length && h.indexOf(',') !== -1) {
|
|
299
|
+
h = h.slice(0, -1).split(',')[1];
|
|
300
|
+
this.rootElement
|
|
301
|
+
.selectAll('.nv-focusWrap')
|
|
302
|
+
.attr('transform', `translate(0,${Number(h) + 15})`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
const resizeObserver = new window.MutationObserver(() => {
|
|
306
|
+
this.rootElement
|
|
307
|
+
.selectAll('.nv-x')
|
|
308
|
+
.selectAll('.tick')
|
|
309
|
+
.selectAll('.full-date')
|
|
310
|
+
.remove();
|
|
311
|
+
this.rootElement
|
|
312
|
+
.selectAll('.nv-x')
|
|
313
|
+
.selectAll('.tick')
|
|
314
|
+
.selectAll('text')
|
|
315
|
+
.data(function (d) {
|
|
316
|
+
return [self.timeFormat(Number(d), '%y-%m-%d'), self.timeFormat(Number(d), '%H:%M:%S')];
|
|
317
|
+
})
|
|
318
|
+
.enter()
|
|
319
|
+
.append('text')
|
|
320
|
+
.attr('class', 'full-date')
|
|
321
|
+
.attr('x', 0)
|
|
322
|
+
.attr('y', 0)
|
|
323
|
+
.attr('dy', '2.3em')
|
|
324
|
+
.style('text-anchor', 'middle')
|
|
325
|
+
.style('font-size', fontSize)
|
|
326
|
+
.text((d) => d);
|
|
327
|
+
});
|
|
328
|
+
const extent = document.getElementsByClassName('extent');
|
|
329
|
+
if (extent.length) {
|
|
330
|
+
resizeObserver.observe(extent[0], { attributes: true });
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
this.rootElement
|
|
335
|
+
.selectAll('.full-date')
|
|
336
|
+
.remove();
|
|
337
|
+
}
|
|
235
338
|
}
|
|
236
339
|
renderOperationArea(chartWidth, chartHeight) {
|
|
237
340
|
const operationArea = this.rootElement.append('g').attr('transform', `translate(0,${chartHeight + this.displayOption.operationAreaMarginTop})`)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"HistoricalCurveElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":21,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":63,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":64,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":65,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":66,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":67,"character":23},{"__symbolic":"reference","module":"../../config","name":"HistoryDataStore","line":68,"character":43},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"getValidTimePeriods":[{"__symbolic":"method"}],"updateTimeRange":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"reRenderElement":[{"__symbolic":"method"}],"renderElement":[{"__symbolic":"method"}],"renderChart":[{"__symbolic":"method"}],"getLineChart":[{"__symbolic":"method"}],"getMultiBarWithFocusChart":[{"__symbolic":"method"}],"renderCommonProperty":[{"__symbolic":"method"}],"renderOperationArea":[{"__symbolic":"method"}],"timeFormat":[{"__symbolic":"method"}],"loadFirstPage":[{"__symbolic":"method"}],"loadNextPage":[{"__symbolic":"method"}],"loadPreviousPage":[{"__symbolic":"method"}],"loadLastPage":[{"__symbolic":"method"}],"initElementStatus":[{"__symbolic":"method"}],"updateElementStatus":[{"__symbolic":"method"}],"setStatusAsUnbound":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"setStatusAsLoadFailed":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}]}}}}]
|
package/elements/main-element.js
CHANGED
|
@@ -27,6 +27,8 @@ import { PolygonElement } from './vector-graphics/polygon-element';
|
|
|
27
27
|
import { HyperlinkElement } from './static-elements/hyperlink-element';
|
|
28
28
|
import { VideoElement } from './video/video-element';
|
|
29
29
|
import { WeatherElement } from './weather/weater-element';
|
|
30
|
+
import { AirQualityElement } from './air-quality/air-quality-element';
|
|
31
|
+
import { AlarmElement } from './alarm/alarm-element';
|
|
30
32
|
export class MainElement {
|
|
31
33
|
constructor(injector, bsModalService, context, variableCommunicator, popupViewService, signalRAppId) {
|
|
32
34
|
this.injector = injector;
|
|
@@ -58,7 +60,7 @@ export class MainElement {
|
|
|
58
60
|
const category = $(element).data('model').category;
|
|
59
61
|
switch (category) {
|
|
60
62
|
case GuiConsts.components.numericalDisplayKey:
|
|
61
|
-
const numericalDisplayElement = new NumericalDisplayElement(element, this.injector, this.bsModalService, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.graphStore, this.context.operationRecordService, this.context.securityChecker, this.context.configStore.variableStore, this.injector.get(LOCALIZATION), this.signalRAppId);
|
|
63
|
+
const numericalDisplayElement = new NumericalDisplayElement(element, this.injector, this.bsModalService, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.graphStore, this.context.operationRecordService, this.context.releasedVariableService, this.context.securityChecker, this.context.configStore.variableStore, this.injector.get(LOCALIZATION), this.signalRAppId);
|
|
62
64
|
this.elements.push(numericalDisplayElement);
|
|
63
65
|
break;
|
|
64
66
|
case GuiConsts.components.imageKey:
|
|
@@ -125,6 +127,12 @@ export class MainElement {
|
|
|
125
127
|
case GuiConsts.components.weatherKey:
|
|
126
128
|
this.elements.push(new WeatherElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.weatherService, this.signalRAppId));
|
|
127
129
|
break;
|
|
130
|
+
case GuiConsts.components.airQualityKey:
|
|
131
|
+
this.elements.push(new AirQualityElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.weatherService, this.signalRAppId));
|
|
132
|
+
break;
|
|
133
|
+
case GuiConsts.components.alarmKey:
|
|
134
|
+
this.elements.push(new AlarmElement(element, this.injector, this.context.permissionChecker, this.variableCommunicator, this.context.configStore.variableStore, this.context.configStore.alarmsStore, this.signalRAppId));
|
|
135
|
+
break;
|
|
128
136
|
}
|
|
129
137
|
});
|
|
130
138
|
this.initBackground();
|
|
@@ -204,7 +212,7 @@ export class MainElement {
|
|
|
204
212
|
initElementState() {
|
|
205
213
|
forEach(this.elements, element => {
|
|
206
214
|
if (element instanceof ReadableElement) {
|
|
207
|
-
element.init(element.readVariableName);
|
|
215
|
+
element.init(element.readVariableName || element.maxVariableName || element.minVariableName);
|
|
208
216
|
}
|
|
209
217
|
else if (element instanceof HistoricalCurveElement) {
|
|
210
218
|
element.initElementStatus();
|
|
@@ -215,8 +223,20 @@ export class MainElement {
|
|
|
215
223
|
getVariableNames() {
|
|
216
224
|
const variableNames = new Array();
|
|
217
225
|
forEach(this.elements, element => {
|
|
226
|
+
var _a, _b;
|
|
218
227
|
if (element instanceof ReadableElement) {
|
|
228
|
+
const maxVariableName = (_a = element) === null || _a === void 0 ? void 0 : _a.maxVariableName;
|
|
229
|
+
const maxValueType = element.maxValueType;
|
|
230
|
+
const minVariableName = (_b = element) === null || _b === void 0 ? void 0 : _b.minVariableName;
|
|
231
|
+
const minValueType = element.minValueType;
|
|
219
232
|
const variableName = element.readVariableName;
|
|
233
|
+
// 最大最小值选择变量类型时,其中一个未绑定变量不进行开点操作 - FLEXCLOUD-1817
|
|
234
|
+
if (maxValueType && maxVariableName && !variableNames.find(v => isEqual(maxVariableName, v))) {
|
|
235
|
+
variableNames.push(maxVariableName);
|
|
236
|
+
}
|
|
237
|
+
if (minValueType && minVariableName && !variableNames.find(v => isEqual(minVariableName, v))) {
|
|
238
|
+
variableNames.push(minVariableName);
|
|
239
|
+
}
|
|
220
240
|
if (variableName && !variableNames.find(v => isEqual(variableName, v))) {
|
|
221
241
|
variableNames.push(element.readVariableName);
|
|
222
242
|
}
|
|
@@ -242,7 +262,7 @@ export class MainElement {
|
|
|
242
262
|
each(values, value => {
|
|
243
263
|
each(this.elements, e => {
|
|
244
264
|
if (e instanceof ReadableElement) {
|
|
245
|
-
if (e.readVariableName === value.variableName) {
|
|
265
|
+
if (e.readVariableName === value.variableName || e.minVariableName === value.variableName || e.maxVariableName === value.variableName) {
|
|
246
266
|
e.reportValueChanged(value);
|
|
247
267
|
}
|
|
248
268
|
}
|
|
@@ -252,7 +272,8 @@ export class MainElement {
|
|
|
252
272
|
dispose() {
|
|
253
273
|
each(this.elements, e => {
|
|
254
274
|
if (e instanceof HistoricalCurveElement || e instanceof VideoElement
|
|
255
|
-
|| e instanceof WeatherElement || e instanceof NumericalDisplayElement || e instanceof TextElement
|
|
275
|
+
|| e instanceof WeatherElement || e instanceof NumericalDisplayElement || e instanceof TextElement
|
|
276
|
+
|| e instanceof AirQualityElement) {
|
|
256
277
|
e.dispose();
|
|
257
278
|
}
|
|
258
279
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"MainElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"MainElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":55,"character":43},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":56,"character":41},{"__symbolic":"reference","module":"../gui/gui-context","name":"GuiContext","line":57,"character":34},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":58,"character":47},{"__symbolic":"reference","module":"../view/popup-view.service","name":"PopupViewService","line":59,"character":43},null]}],"load":[{"__symbolic":"method"}],"uniformStretch":[{"__symbolic":"method"}],"changeVideoStyle":[{"__symbolic":"method"}],"horizontalStretch":[{"__symbolic":"method"}],"initElementState":[{"__symbolic":"method"}],"getVariableNames":[{"__symbolic":"method"}],"reportVariableStates":[{"__symbolic":"method"}],"reportVariableValues":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"checkIsLoaded":[{"__symbolic":"method"}],"initBackground":[{"__symbolic":"method"}],"getImageEl":[{"__symbolic":"method"}]}}}}]
|
|
@@ -5,16 +5,22 @@ import { ReadableElement } from './base';
|
|
|
5
5
|
import { VariableStore } from '../config';
|
|
6
6
|
import { PermissionChecker } from '../service';
|
|
7
7
|
export declare class MeterElement extends ReadableElement {
|
|
8
|
+
private static DEFAULT_MIN_VALUE;
|
|
9
|
+
private static DEFAULT_MAX_VALUE;
|
|
8
10
|
private readonly $handEl;
|
|
9
11
|
private readonly arcPath$;
|
|
10
12
|
private cx;
|
|
11
13
|
private cy;
|
|
12
14
|
private offsetY;
|
|
13
15
|
private mainElementTransform;
|
|
16
|
+
private valueObj;
|
|
17
|
+
private isNeedUpdateScale;
|
|
14
18
|
readonly model: Meter;
|
|
15
19
|
constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
16
|
-
|
|
20
|
+
private updateValueObj;
|
|
21
|
+
updateVariableValue(value: number, variableName: any): void;
|
|
17
22
|
private initFrameNode;
|
|
23
|
+
private updateScale;
|
|
18
24
|
private getAngle;
|
|
19
25
|
private directionPoint;
|
|
20
26
|
}
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { ReadableElement } from './base';
|
|
2
|
+
import { isNumber } from 'lodash';
|
|
3
|
+
import { VariableValueType } from '../model/shared/condition/variable-value-type';
|
|
2
4
|
export class MeterElement extends ReadableElement {
|
|
3
5
|
constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
|
|
4
6
|
super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
|
|
5
7
|
this.cx = 0;
|
|
6
8
|
this.cy = 0;
|
|
7
9
|
this.offsetY = 0;
|
|
10
|
+
this.valueObj = {};
|
|
11
|
+
this.isNeedUpdateScale = false;
|
|
12
|
+
if ((this.model.minValueType === VariableValueType.Constant && this.model.maxValueType === VariableValueType.Variable)
|
|
13
|
+
|| this.model.maxValueType === VariableValueType.Constant && this.model.minValueType === VariableValueType.Variable) {
|
|
14
|
+
this.isNeedUpdateScale = true;
|
|
15
|
+
this.updateScale();
|
|
16
|
+
this.isNeedUpdateScale = false;
|
|
17
|
+
}
|
|
8
18
|
let mainEl$;
|
|
9
19
|
if (this.model.version && this.model.version > 3) {
|
|
10
20
|
mainEl$ = this.$element.find('[data-id="main"]');
|
|
@@ -31,18 +41,75 @@ export class MeterElement extends ReadableElement {
|
|
|
31
41
|
this.changeStates();
|
|
32
42
|
});
|
|
33
43
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
44
|
+
updateValueObj(value, variableName) {
|
|
45
|
+
var _a, _b, _c;
|
|
46
|
+
if (((_a = this.model.readVariable) === null || _a === void 0 ? void 0 : _a.name) === variableName) {
|
|
47
|
+
this.isNeedUpdateScale = false;
|
|
48
|
+
this.valueObj.value = value;
|
|
49
|
+
}
|
|
50
|
+
if (((_b = this.model.minVariable) === null || _b === void 0 ? void 0 : _b.name) === variableName) {
|
|
51
|
+
this.isNeedUpdateScale = true;
|
|
52
|
+
this.valueObj.min = value;
|
|
53
|
+
}
|
|
54
|
+
if (((_c = this.model.maxVariable) === null || _c === void 0 ? void 0 : _c.name) === variableName) {
|
|
55
|
+
this.isNeedUpdateScale = true;
|
|
56
|
+
this.valueObj.max = value;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
updateVariableValue(value, variableName) {
|
|
60
|
+
this.updateValueObj(value, variableName);
|
|
61
|
+
this.updateScale();
|
|
62
|
+
const angle = this.getAngle();
|
|
63
|
+
if (isNumber(angle)) {
|
|
64
|
+
this.$handEl.attr('transform', this.mainElementTransform + ` translate(0,${this.offsetY}) rotate(${angle}, ${this.cx}, ${this.cy})`);
|
|
65
|
+
}
|
|
37
66
|
}
|
|
38
67
|
initFrameNode() {
|
|
39
68
|
const b = Snap(this.$element[0]).getBBox();
|
|
40
69
|
this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', b.width).attr('height', b.height).attr('fill', 'transparent');
|
|
41
70
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
71
|
+
updateScale() {
|
|
72
|
+
if (!this.isNeedUpdateScale) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
let min = this.model.minValueType ? this.valueObj.min : this.model.min;
|
|
76
|
+
let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
|
|
77
|
+
min = Number(min);
|
|
78
|
+
max = Number(max);
|
|
79
|
+
if (isNaN(min) || isNaN(max)) {
|
|
80
|
+
min = MeterElement.DEFAULT_MIN_VALUE;
|
|
81
|
+
max = MeterElement.DEFAULT_MAX_VALUE;
|
|
82
|
+
}
|
|
83
|
+
const avgSacle = ((max - min) / this.model.masterDivisionNumber).toFixed(5);
|
|
84
|
+
const textElements = this.$element.find('g:first > text');
|
|
85
|
+
for (let i = 0; i < textElements.length; i++) {
|
|
86
|
+
const text = textElements[i];
|
|
87
|
+
if (!text.innerHTML) {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
let sacleValue = ((Number(avgSacle) * i) + min).toFixed(0);
|
|
91
|
+
// 整数位和小数位格式化;
|
|
92
|
+
if (this.model.fractionDigits > 0) {
|
|
93
|
+
sacleValue = (sacleValue / Math.pow(10, this.model.fractionDigits)).toFixed(this.model.fractionDigits);
|
|
94
|
+
}
|
|
95
|
+
if (!isNaN(sacleValue)) {
|
|
96
|
+
text.innerHTML = sacleValue;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
getAngle() {
|
|
101
|
+
let min = this.model.minValueType ? this.valueObj.min : this.model.min;
|
|
102
|
+
let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
|
|
103
|
+
min = Number(min);
|
|
104
|
+
max = Number(max);
|
|
105
|
+
if (isNaN(min) || isNaN(max)) {
|
|
106
|
+
min = MeterElement.DEFAULT_MIN_VALUE;
|
|
107
|
+
max = MeterElement.DEFAULT_MAX_VALUE;
|
|
108
|
+
}
|
|
109
|
+
if (!this.valueObj.value && isNaN(Number(this.valueObj.value))) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
const value = Math.min(Math.max(this.valueObj.value || 0, min), max);
|
|
46
113
|
const len = (value - min) / (max - min);
|
|
47
114
|
const arcPath = Snap(this.arcPath$[0]);
|
|
48
115
|
const b = arcPath.getBBox(true);
|
|
@@ -68,3 +135,5 @@ export class MeterElement extends ReadableElement {
|
|
|
68
135
|
return c;
|
|
69
136
|
}
|
|
70
137
|
}
|
|
138
|
+
MeterElement.DEFAULT_MIN_VALUE = 0;
|
|
139
|
+
MeterElement.DEFAULT_MAX_VALUE = 100;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"MeterElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base","name":"ReadableElement","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"MeterElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base","name":"ReadableElement","line":9,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":25,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":25,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":26,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":26,"character":67},{"__symbolic":"reference","module":"../localization","name":"Localization","line":26,"character":96},{"__symbolic":"reference","name":"string"}]}],"updateValueObj":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"updateScale":[{"__symbolic":"method"}],"getAngle":[{"__symbolic":"method"}],"directionPoint":[{"__symbolic":"method"}]},"statics":{"DEFAULT_MIN_VALUE":0,"DEFAULT_MAX_VALUE":100}}}}]
|
|
@@ -3,7 +3,7 @@ import { BsModalService } from 'ngx-bootstrap/modal';
|
|
|
3
3
|
import { GraphStore, VariableStore } from '../../config';
|
|
4
4
|
import { Localization } from '../../localization';
|
|
5
5
|
import { NumericalDisplay } from '../../model';
|
|
6
|
-
import { PermissionChecker, OperationRecordService } from '../../service';
|
|
6
|
+
import { PermissionChecker, OperationRecordService, ReleasedVariableService } from '../../service';
|
|
7
7
|
import { VariableCommunicator } from '../../communication';
|
|
8
8
|
import { ReadableElement } from '../base/readable-element';
|
|
9
9
|
import { SecurityChecker } from '../../security';
|
|
@@ -11,6 +11,7 @@ export declare class NumericalDisplayElement extends ReadableElement {
|
|
|
11
11
|
private readonly modalService;
|
|
12
12
|
private readonly graphStore;
|
|
13
13
|
private readonly operationRecordService;
|
|
14
|
+
private readonly releasedVariableService;
|
|
14
15
|
private readonly securityChecker;
|
|
15
16
|
private readonly dataTypeService;
|
|
16
17
|
private readonly fractionDigitService;
|
|
@@ -21,8 +22,13 @@ export declare class NumericalDisplayElement extends ReadableElement {
|
|
|
21
22
|
private readonly logger;
|
|
22
23
|
private displayForeignObject;
|
|
23
24
|
private enableDataParsed;
|
|
25
|
+
private writeValueMmodalRef;
|
|
26
|
+
private recordValue;
|
|
27
|
+
private showValue;
|
|
28
|
+
private numericalOperation;
|
|
29
|
+
private restorationTimer;
|
|
24
30
|
get writeVariableName(): string;
|
|
25
|
-
constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, graphStore: GraphStore, operationRecordService: OperationRecordService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
31
|
+
constructor(element: HTMLElement, injector: Injector, modalService: BsModalService, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, graphStore: GraphStore, operationRecordService: OperationRecordService, releasedVariableService: ReleasedVariableService, securityChecker: SecurityChecker, variableStore: VariableStore, localization: Localization, signalRAppId: string);
|
|
26
32
|
dispose(): void;
|
|
27
33
|
initElement(): any;
|
|
28
34
|
private checkElementPassword;
|
|
@@ -11,12 +11,19 @@ import { ConfirmOperationModalComponent } from '../../modal/confirm-operation/co
|
|
|
11
11
|
import { VerifyPasswordModalComponent } from '../../modal/verify-password/verify-password-modal.component';
|
|
12
12
|
import { isNil } from 'lodash';
|
|
13
13
|
import { FCloudDataType } from '../../model/shared/data-type/fcloud-data-Type';
|
|
14
|
+
var variableRwTypeEnum;
|
|
15
|
+
(function (variableRwTypeEnum) {
|
|
16
|
+
variableRwTypeEnum[variableRwTypeEnum["read"] = 4] = "read";
|
|
17
|
+
variableRwTypeEnum[variableRwTypeEnum["witer"] = 2] = "witer";
|
|
18
|
+
variableRwTypeEnum[variableRwTypeEnum["readWiter"] = 6] = "readWiter";
|
|
19
|
+
})(variableRwTypeEnum || (variableRwTypeEnum = {}));
|
|
14
20
|
export class NumericalDisplayElement extends ReadableElement {
|
|
15
|
-
constructor(element, injector, modalService, permissionChecker, variableCommunicator, graphStore, operationRecordService, securityChecker, variableStore, localization, signalRAppId) {
|
|
21
|
+
constructor(element, injector, modalService, permissionChecker, variableCommunicator, graphStore, operationRecordService, releasedVariableService, securityChecker, variableStore, localization, signalRAppId) {
|
|
16
22
|
super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
|
|
17
23
|
this.modalService = modalService;
|
|
18
24
|
this.graphStore = graphStore;
|
|
19
25
|
this.operationRecordService = operationRecordService;
|
|
26
|
+
this.releasedVariableService = releasedVariableService;
|
|
20
27
|
this.securityChecker = securityChecker;
|
|
21
28
|
this.displayText = '';
|
|
22
29
|
this.enableDataParsed = false;
|
|
@@ -173,19 +180,42 @@ export class NumericalDisplayElement extends ReadableElement {
|
|
|
173
180
|
if (null == this.writeVariableName) {
|
|
174
181
|
return;
|
|
175
182
|
}
|
|
176
|
-
const args = new WriteValueModalArgs(this.writeVariableName, this.model.dataType, this.model.integerDigits, this.model.fractionDigits, this.numericalOperationService.getNumericalOperations(this.model), this.model.version, this.enableDataParsed);
|
|
177
|
-
|
|
183
|
+
const args = new WriteValueModalArgs(this.writeVariableName, this.model.dataType, this.model.fBoxDataType, this.model.integerDigits, this.model.fractionDigits, this.numericalOperationService.getNumericalOperations(this.model), this.model.version, this.enableDataParsed, this.releasedVariableService);
|
|
184
|
+
this.writeValueMmodalRef = this.modalService.show(WriteValueModalComponent, {
|
|
178
185
|
initialState: { args: args }, backdrop: 'static', class: 'gui-modal-dialog-position', animated: false
|
|
179
186
|
});
|
|
180
|
-
|
|
181
|
-
modalRef.hide();
|
|
182
|
-
onClosedSub.unsubscribe();
|
|
187
|
+
this.writeValueMmodalRef.content.onClosed = (result) => {
|
|
183
188
|
if (result) {
|
|
189
|
+
if (this.restorationTimer) {
|
|
190
|
+
clearTimeout(this.restorationTimer);
|
|
191
|
+
this.restorationTimer = undefined;
|
|
192
|
+
}
|
|
193
|
+
this.recordValue = result.value;
|
|
184
194
|
const writeValue = this.dataTypeService.formatToDecimal(this.model.version, result.value, this.model.dataType);
|
|
185
|
-
this.
|
|
186
|
-
this.
|
|
195
|
+
this.showValue = result.showValue;
|
|
196
|
+
if (this.displayText !== this.showValue || result.variableRwType === variableRwTypeEnum.witer) {
|
|
197
|
+
if (this.numericalOperation || result.enableNumericalOperation || result.isNumericalOperation || result.variableRwType === variableRwTypeEnum.witer) {
|
|
198
|
+
this.recordOperation(result.value);
|
|
199
|
+
this.writeValueMmodalRef.hide();
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
this.restorationTimer = setTimeout(() => {
|
|
203
|
+
const isEquation = this.model.fractionDigits ?
|
|
204
|
+
parseFloat(this.displayText) === parseFloat(this.showValue) :
|
|
205
|
+
parseInt(this.displayText, 16) === parseInt(this.showValue, 16);
|
|
206
|
+
if (!isEquation) {
|
|
207
|
+
this.writeValueMmodalRef.content.isSubmitting = false;
|
|
208
|
+
this.writeValueMmodalRef.content.showValidationErrorInfo(this.localization.writeValueTimeout);
|
|
209
|
+
}
|
|
210
|
+
}, 10000);
|
|
211
|
+
}
|
|
212
|
+
this.variableCommunicator.write(this.writeVariableName, writeValue).subscribe();
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.writeValueMmodalRef.hide();
|
|
216
|
+
}
|
|
187
217
|
}
|
|
188
|
-
}
|
|
218
|
+
};
|
|
189
219
|
}
|
|
190
220
|
recordOperation(newValue) {
|
|
191
221
|
if (this.model.isRecordOperation || this.model.isRecordOperation === undefined) {
|
|
@@ -211,7 +241,21 @@ export class NumericalDisplayElement extends ReadableElement {
|
|
|
211
241
|
}
|
|
212
242
|
}
|
|
213
243
|
updateVariableValue(value) {
|
|
214
|
-
|
|
244
|
+
var _a;
|
|
245
|
+
const displayText = this.formatNumericalDisplayText(this.model.dataType, this.model.fractionDigits, value);
|
|
246
|
+
const isEquation = this.model.fractionDigits ?
|
|
247
|
+
parseFloat(displayText) === parseFloat(this.showValue) :
|
|
248
|
+
parseInt(displayText, 16) === parseInt(this.showValue, 16);
|
|
249
|
+
if (((_a = this.writeValueMmodalRef) === null || _a === void 0 ? void 0 : _a.content) && isEquation) {
|
|
250
|
+
if (this.restorationTimer) {
|
|
251
|
+
clearTimeout(this.restorationTimer);
|
|
252
|
+
this.restorationTimer = undefined;
|
|
253
|
+
this.recordOperation(this.recordValue);
|
|
254
|
+
}
|
|
255
|
+
this.writeValueMmodalRef.hide();
|
|
256
|
+
this.writeValueMmodalRef.content.hideValidationErrorInfo();
|
|
257
|
+
}
|
|
258
|
+
this.displayText = displayText;
|
|
215
259
|
this.updateDisplayText(this.formatDisplayTextUnit(this.displayText));
|
|
216
260
|
}
|
|
217
261
|
updateDisplayText(text) {
|
|
@@ -354,7 +398,7 @@ export class NumericalDisplayElement extends ReadableElement {
|
|
|
354
398
|
}
|
|
355
399
|
formatDisplayTextUnit(displayText) {
|
|
356
400
|
if (this.model.showUnit !== false && this.model.unit) {
|
|
357
|
-
return `${displayText} ${this.model.unit}`;
|
|
401
|
+
return `${displayText || 0} ${this.model.unit}`;
|
|
358
402
|
}
|
|
359
403
|
return displayText;
|
|
360
404
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{"NumericalDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"NumericalDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":28,"character":45},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":50,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":51,"character":18},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":52,"character":39},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":53,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":54,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":55,"character":37},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":56,"character":49},{"__symbolic":"reference","module":"../../service","name":"ReleasedVariableService","line":57,"character":50},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":58,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":59,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":60,"character":22},{"__symbolic":"reference","name":"string"}]}],"dispose":[{"__symbolic":"method"}],"initElement":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"initVariableText":[{"__symbolic":"method"}],"initGraphAndText":[{"__symbolic":"method"}],"doWriteValue":[{"__symbolic":"method"}],"recordOperation":[{"__symbolic":"method"}],"changeStates":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"updateDisplayText":[{"__symbolic":"method"}],"rebuildTextElement":[{"__symbolic":"method"}],"formatNumericalDisplayText":[{"__symbolic":"method"}],"formatFloatDisplayText":[{"__symbolic":"method"}],"isNumeric":[{"__symbolic":"method"}],"formatDisplayTextUnit":[{"__symbolic":"method"}]}}}}]
|
|
@@ -6,6 +6,7 @@ export declare class PerViewVariableCommunicator implements VariableCommunicator
|
|
|
6
6
|
private observers;
|
|
7
7
|
private variableValuesChangedSubscriptions;
|
|
8
8
|
private variableStatesChangedSubscription;
|
|
9
|
+
private alarmSubscription;
|
|
9
10
|
constructor(variableCommunicator: VariableCommunicator);
|
|
10
11
|
openVariable(variableName: string, appId: string): Observable<VariableValue>;
|
|
11
12
|
openVariables(variableNames: Array<string>, appId?: string): Observable<Array<VariableValue>>;
|
|
@@ -13,5 +14,6 @@ export declare class PerViewVariableCommunicator implements VariableCommunicator
|
|
|
13
14
|
writeWordByBit(variableName: string, index: number, value: number): Observable<VariableValue>;
|
|
14
15
|
subscribeVariableState(variableName: string): Observable<VariableState>;
|
|
15
16
|
subscribeVariableStates(variableNames: string[]): Observable<Array<VariableState>>;
|
|
17
|
+
subscribeUserDeviceAlarms(appId?: string): Observable<VariableState[]>;
|
|
16
18
|
dispose(): void;
|
|
17
19
|
}
|