@flexem/fc-gui 3.0.0-alpha.18 → 3.0.0-alpha.181

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. package/CHANGELOG.md +419 -1
  2. package/assets/img/black_first_page.png +0 -0
  3. package/assets/img/black_last_page.png +0 -0
  4. package/assets/img/black_next_page.png +0 -0
  5. package/assets/img/black_previous_page.png +0 -0
  6. package/assets/img/exclamation-outline-circle.png +0 -0
  7. package/bundles/@flexem/fc-gui.umd.js +37413 -32291
  8. package/bundles/@flexem/fc-gui.umd.js.map +1 -1
  9. package/bundles/@flexem/fc-gui.umd.min.js +5 -5
  10. package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
  11. package/communication/variable/variable-communicator.d.ts +5 -0
  12. package/communication/variable/variable-state-enum.d.ts +1 -0
  13. package/communication/variable/variable-state-enum.js +1 -0
  14. package/communication/variable/variable-state-enum.metadata.json +1 -1
  15. package/communication/variable/variable-value.d.ts +4 -1
  16. package/communication/variable/variable-value.js +4 -1
  17. package/communication/variable/variable-value.metadata.json +1 -1
  18. package/config/alarm/alarm.store.d.ts +6 -0
  19. package/config/alarm/alarm.store.js +0 -0
  20. package/config/alarm/alarm.store.metadata.json +1 -0
  21. package/config/alarm/get-alarms-args.d.ts +12 -0
  22. package/config/alarm/get-alarms-args.js +13 -0
  23. package/config/alarm/get-alarms-args.metadata.json +1 -0
  24. package/config/alarm/index.d.ts +2 -0
  25. package/config/alarm/index.js +1 -0
  26. package/config/alarm/index.metadata.json +1 -0
  27. package/config/config-store.d.ts +2 -0
  28. package/config/gui-feature-config.d.ts +3 -0
  29. package/config/gui-feature-config.js +3 -0
  30. package/config/gui-feature-config.metadata.json +1 -0
  31. package/config/index.d.ts +2 -0
  32. package/config/index.js +2 -0
  33. package/config/index.metadata.json +1 -1
  34. package/config/variable/variable-store.d.ts +1 -0
  35. package/elements/air-quality/air-quality-element.js +3 -4
  36. package/elements/alarm/alarm-element.d.ts +89 -0
  37. package/elements/alarm/alarm-element.js +739 -0
  38. package/elements/alarm/alarm-element.metadata.json +1 -0
  39. package/elements/bar-graph-element.d.ts +10 -2
  40. package/elements/bar-graph-element.js +135 -5
  41. package/elements/bar-graph-element.metadata.json +1 -1
  42. package/elements/base/readable-element.d.ts +6 -1
  43. package/elements/base/readable-element.js +69 -2
  44. package/elements/base/readable-element.metadata.json +1 -1
  45. package/elements/base/state-control-element.d.ts +13 -1
  46. package/elements/base/state-control-element.js +42 -8
  47. package/elements/base/state-control-element.metadata.json +1 -1
  48. package/elements/character-display/character-display-element.d.ts +9 -0
  49. package/elements/character-display/character-display-element.js +18 -2
  50. package/elements/character-display/character-display-element.metadata.json +1 -1
  51. package/elements/datetime-display/datetime-display-element.d.ts +1 -0
  52. package/elements/datetime-display/datetime-display-element.js +10 -2
  53. package/elements/datetime-display/datetime-display-element.metadata.json +1 -1
  54. package/elements/datetime-display/time-zone-select-json.d.ts +8 -0
  55. package/elements/datetime-display/time-zone-select-json.js +558 -0
  56. package/elements/historical-curve/historical-curve.element.d.ts +45 -3
  57. package/elements/historical-curve/historical-curve.element.js +722 -45
  58. package/elements/historical-curve/historical-curve.element.metadata.json +1 -1
  59. package/elements/main-element.d.ts +1 -0
  60. package/elements/main-element.js +71 -9
  61. package/elements/main-element.metadata.json +1 -1
  62. package/elements/meter-element.d.ts +7 -1
  63. package/elements/meter-element.js +76 -7
  64. package/elements/meter-element.metadata.json +1 -1
  65. package/elements/numerical-display/numerical-display-element.d.ts +31 -3
  66. package/elements/numerical-display/numerical-display-element.js +160 -12
  67. package/elements/numerical-display/numerical-display-element.metadata.json +1 -1
  68. package/elements/per-view-variable-communicator.d.ts +4 -0
  69. package/elements/per-view-variable-communicator.js +21 -1
  70. package/elements/per-view-variable-communicator.metadata.json +1 -1
  71. package/elements/ring-graph/ring-graph-element.d.ts +13 -1
  72. package/elements/ring-graph/ring-graph-element.js +164 -3
  73. package/elements/ring-graph/ring-graph-element.metadata.json +1 -1
  74. package/elements/scroll-alarm/scroll-alarm-element.d.ts +79 -0
  75. package/elements/scroll-alarm/scroll-alarm-element.js +845 -0
  76. package/elements/scroll-alarm/scroll-alarm-element.metadata.json +1 -0
  77. package/elements/shared/graph/graph-state-element.d.ts +1 -0
  78. package/elements/shared/graph/graph-state-element.js +30 -1
  79. package/elements/shared/graph/graph-state-element.metadata.json +1 -1
  80. package/elements/shared/text/text-element.d.ts +14 -0
  81. package/elements/shared/text/text-element.js +42 -4
  82. package/elements/shared/text/text-element.metadata.json +1 -1
  83. package/elements/shared/text/text-state-element.d.ts +39 -2
  84. package/elements/shared/text/text-state-element.js +242 -67
  85. package/elements/shared/text/text-state-element.metadata.json +1 -1
  86. package/elements/static-elements/hyperlink-element.d.ts +28 -2
  87. package/elements/static-elements/hyperlink-element.js +153 -4
  88. package/elements/static-elements/hyperlink-element.metadata.json +1 -1
  89. package/elements/static-elements/text-element.d.ts +28 -2
  90. package/elements/static-elements/text-element.js +162 -12
  91. package/elements/static-elements/text-element.metadata.json +1 -1
  92. package/elements/switch-indicator-light/bit-indicator-light-operator.d.ts +1 -0
  93. package/elements/switch-indicator-light/bit-indicator-light-operator.js +10 -3
  94. package/elements/switch-indicator-light/bit-indicator-light-operator.metadata.json +1 -1
  95. package/elements/switch-indicator-light/switch-indicator-light-element.d.ts +20 -2
  96. package/elements/switch-indicator-light/switch-indicator-light-element.js +85 -12
  97. package/elements/switch-indicator-light/switch-indicator-light-element.metadata.json +1 -1
  98. package/elements/switch-indicator-light/word-indicator-light-operator.d.ts +1 -0
  99. package/elements/switch-indicator-light/word-indicator-light-operator.js +10 -3
  100. package/elements/switch-indicator-light/word-indicator-light-operator.metadata.json +1 -1
  101. package/elements/video/video-element.d.ts +10 -0
  102. package/elements/video/video-element.js +139 -21
  103. package/elements/video/video-element.metadata.json +1 -1
  104. package/elements/view-operation/view-operation.element.d.ts +28 -2
  105. package/elements/view-operation/view-operation.element.js +165 -5
  106. package/elements/view-operation/view-operation.element.metadata.json +1 -1
  107. package/elements/weather/weater-element.js +0 -1
  108. package/gui/gui-context.d.ts +25 -2
  109. package/gui/gui-host.d.ts +1 -1
  110. package/gui/gui-view.d.ts +19 -2
  111. package/gui/gui-view.js +147 -12
  112. package/gui/gui-view.metadata.json +1 -1
  113. package/gui/gui.component.d.ts +3 -0
  114. package/gui/gui.component.js +15 -2
  115. package/gui/gui.component.metadata.json +1 -1
  116. package/localization/localization.service.d.ts +11 -0
  117. package/localization/localization.service.js +16 -5
  118. package/localization/localization.service.metadata.json +1 -1
  119. package/localization/localization.service.zh_CN.js +12 -1
  120. package/localization/localization.service.zh_CN.metadata.json +1 -1
  121. package/modal/write-character/write-character-modal.component.d.ts +3 -2
  122. package/modal/write-character/write-character-modal.component.html +4 -4
  123. package/modal/write-character/write-character-modal.component.js +7 -5
  124. package/modal/write-character/write-character-modal.component.less +15 -0
  125. package/modal/write-character/write-character-modal.component.metadata.json +1 -1
  126. package/modal/write-value/write-value-modal-args.d.ts +5 -1
  127. package/modal/write-value/write-value-modal-args.js +3 -1
  128. package/modal/write-value/write-value-modal-args.metadata.json +1 -1
  129. package/modal/write-value/write-value-modal.component.d.ts +15 -8
  130. package/modal/write-value/write-value-modal.component.html +10 -5
  131. package/modal/write-value/write-value-modal.component.js +99 -21
  132. package/modal/write-value/write-value-modal.component.less +16 -1
  133. package/modal/write-value/write-value-modal.component.metadata.json +1 -1
  134. package/model/alarm/alarm.model.d.ts +14 -0
  135. package/model/alarm/alarm.model.js +0 -0
  136. package/model/alarm/alarm.model.metadata.json +1 -0
  137. package/model/bar-graph/bar-graph.d.ts +4 -0
  138. package/model/base/font-setting-model.d.ts +22 -1
  139. package/model/base/font-setting-model.metadata.json +1 -1
  140. package/model/base/readable-model.d.ts +4 -0
  141. package/model/character-display/character-display.d.ts +1 -0
  142. package/model/datetime-display/datetime-display.d.ts +1 -0
  143. package/model/historical-curve/historical-curve-axis-settings.d.ts +11 -0
  144. package/model/historical-curve/historical-curve-axis-settings.js +5 -0
  145. package/model/historical-curve/historical-curve-axis-settings.metadata.json +1 -1
  146. package/model/historical-curve/historical-curve-chanel.model.d.ts +8 -0
  147. package/model/historical-curve/historical-curve.display-settings.d.ts +1 -0
  148. package/model/meter/meter.d.ts +4 -0
  149. package/model/numerical-display/numerical-display.d.ts +1 -0
  150. package/model/numerical-display/numerical-operation.d.ts +10 -2
  151. package/model/ring-graph/ring-graph.model.d.ts +8 -0
  152. package/model/scroll-alarm/scroll-alarm.model.d.ts +21 -0
  153. package/model/scroll-alarm/scroll-alarm.model.js +0 -0
  154. package/model/scroll-alarm/scroll-alarm.model.metadata.json +1 -0
  155. package/model/settings/popup/view-popup-location-type.d.ts +2 -1
  156. package/model/settings/popup/view-popup-location-type.js +1 -0
  157. package/model/settings/popup/view-popup-location-type.metadata.json +1 -1
  158. package/model/shared/state/state.d.ts +1 -0
  159. package/model/shared/state/state.js +1 -0
  160. package/model/shared/state/state.metadata.json +1 -1
  161. package/model/shared/text/font.d.ts +1 -1
  162. package/model/shared/text/text.d.ts +3 -0
  163. package/model/switch-indicator-light/switch-indicator-light.d.ts +3 -0
  164. package/model/view-operation/view-operation-element.model.d.ts +7 -1
  165. package/package.json +1 -1
  166. package/public_api.js +1 -0
  167. package/remote/communication/variable/remote-variable-communicator.d.ts +30 -0
  168. package/remote/communication/variable/remote-variable-communicator.js +193 -3
  169. package/remote/communication/variable/remote-variable-communicator.metadata.json +1 -1
  170. package/remote/communication/variable/remote-variable-protocol.d.ts +8 -0
  171. package/service/index.d.ts +4 -0
  172. package/service/index.js +1 -0
  173. package/service/index.metadata.json +1 -1
  174. package/service/language.service.d.ts +37 -0
  175. package/service/language.service.js +0 -0
  176. package/service/language.service.metadata.json +1 -0
  177. package/service/released-variable/index.d.ts +1 -0
  178. package/service/released-variable/index.js +0 -0
  179. package/service/released-variable/index.metadata.json +1 -0
  180. package/service/released-variable/released-variable.service.d.ts +4 -0
  181. package/service/released-variable/released-variable.service.js +0 -0
  182. package/service/released-variable/released-variable.service.metadata.json +1 -0
  183. package/service/system-text-library.service.d.ts +77 -0
  184. package/service/system-text-library.service.js +29 -0
  185. package/service/system-text-library.service.metadata.json +1 -0
  186. package/service/text-library.service.d.ts +49 -0
  187. package/service/text-library.service.js +0 -0
  188. package/service/text-library.service.metadata.json +1 -0
  189. package/shared/gui-consts.d.ts +2 -0
  190. package/shared/gui-consts.js +3 -1
  191. package/shared/gui-consts.metadata.json +1 -1
  192. package/utils/data-type/fbox-data-type.service.js +40 -0
  193. package/utils/numerical-operation.service.js +28 -4
  194. package/view/popup-view.service.d.ts +1 -1
@@ -11,15 +11,26 @@ 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, guiContext) {
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;
28
+ this.guiContext = guiContext;
21
29
  this.displayText = '';
22
30
  this.enableDataParsed = false;
31
+ // 上下限变量的实时缓存值(仅当上下限配置为变量类型时使用)
32
+ this._resolvedUpperLimitValue = undefined;
33
+ this._resolvedLowerLimitValue = undefined;
23
34
  this.logger = injector.get(LOGGER_SERVICE_TOKEN);
24
35
  this.dataTypeService = injector.get(DataTypeService);
25
36
  this.fractionDigitService = injector.get(FractionDigitService);
@@ -39,6 +50,22 @@ export class NumericalDisplayElement extends ReadableElement {
39
50
  }
40
51
  this.initElement();
41
52
  }
53
+ /** 当数值上限配置为变量类型时,返回变量名;否则返回 undefined */
54
+ get upperLimitVariableName() {
55
+ const upper = this.model.numericalUpperLimit;
56
+ if (upper && typeof upper === 'object' && upper.type === 1 && upper.variableName) {
57
+ return upper.variableName;
58
+ }
59
+ return undefined;
60
+ }
61
+ /** 当数值下限配置为变量类型时,返回变量名;否则返回 undefined */
62
+ get lowerLimitVariableName() {
63
+ const lower = this.model.numericalLowerLimit;
64
+ if (lower && typeof lower === 'object' && lower.type === 1 && lower.variableName) {
65
+ return lower.variableName;
66
+ }
67
+ return undefined;
68
+ }
42
69
  get writeVariableName() {
43
70
  return this.readVariableName;
44
71
  }
@@ -50,6 +77,42 @@ export class NumericalDisplayElement extends ReadableElement {
50
77
  this.$element.remove();
51
78
  }
52
79
  }
80
+ /**
81
+ * 重写父类方法,处理"当前语种ID"系统变量
82
+ * 当值为null时,显示默认语种ID
83
+ */
84
+ reportValueChanged(value) {
85
+ var _a, _b, _c;
86
+ // 更新上下限变量缓存(不阻断后续处理)
87
+ if (this.upperLimitVariableName && value.variableName === this.upperLimitVariableName) {
88
+ const num = Number(value.value);
89
+ this._resolvedUpperLimitValue = (value.value != null && !isNaN(num)) ? num : undefined;
90
+ // 如果上限变量不是主显示变量,直接返回
91
+ if (value.variableName !== this.readVariableName) {
92
+ return;
93
+ }
94
+ }
95
+ if (this.lowerLimitVariableName && value.variableName === this.lowerLimitVariableName) {
96
+ const num = Number(value.value);
97
+ this._resolvedLowerLimitValue = (value.value != null && !isNaN(num)) ? num : undefined;
98
+ // 如果下限变量不是主显示变量,直接返回
99
+ if (value.variableName !== this.readVariableName) {
100
+ return;
101
+ }
102
+ }
103
+ // 处理系统变量"当前语种ID"
104
+ if (value.variableName === '当前语种ID') {
105
+ let displayValue = value.value;
106
+ // 如果值为null,使用默认语种ID
107
+ if (displayValue === null || displayValue === undefined) {
108
+ displayValue = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getDefaultLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : 0;
109
+ }
110
+ this.updateVariableValue(displayValue);
111
+ return;
112
+ }
113
+ // 其他变量调用父类方法
114
+ super.reportValueChanged(value);
115
+ }
53
116
  initElement() {
54
117
  const { rootElement } = this;
55
118
  rootElement.selectAll('*').remove();
@@ -173,19 +236,75 @@ export class NumericalDisplayElement extends ReadableElement {
173
236
  if (null == this.writeVariableName) {
174
237
  return;
175
238
  }
176
- 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);
177
- const modalRef = this.modalService.show(WriteValueModalComponent, {
178
- initialState: { args: args }, backdrop: 'static', class: 'gui-modal-dialog-position', animated: false
239
+ // 获取数值操作配置,上下限变量类型已在 reportValueChanged 中实时更新到缓存
240
+ const numericalOperation = this.numericalOperationService.getNumericalOperations(this.model);
241
+ // 用缓存的实时值替换变量类型上下限
242
+ // 模拟模式下(releasedVariableService 为空)变量无实时值,直接使用数据类型默认范围
243
+ const isSimulation = !this.releasedVariableService;
244
+ if (typeof numericalOperation.numericalUpperLimit === 'object' && numericalOperation.numericalUpperLimit.type === 1) {
245
+ if (isSimulation) {
246
+ numericalOperation.numericalUpperLimit = this.dataTypeService.getMaxValue(this.model.version || 0, this.model.dataType || 0, this.model.fBoxDataType || 0, this.model.integerDigits || undefined, this.model.fractionDigits || undefined);
247
+ }
248
+ else {
249
+ numericalOperation.numericalUpperLimit = this._resolvedUpperLimitValue != null
250
+ ? this._resolvedUpperLimitValue
251
+ : (this.dataTypeService.getMaxValue(this.model.version || 0, this.model.dataType || 0, this.model.fBoxDataType || 0) || 0);
252
+ }
253
+ }
254
+ if (typeof numericalOperation.numericalLowerLimit === 'object' && numericalOperation.numericalLowerLimit.type === 1) {
255
+ if (isSimulation) {
256
+ numericalOperation.numericalLowerLimit = this.dataTypeService.getMinValue(this.model.version || 0, this.model.dataType || 0, this.model.fBoxDataType || 0, this.model.integerDigits || undefined, this.model.fractionDigits || undefined);
257
+ }
258
+ else {
259
+ numericalOperation.numericalLowerLimit = this._resolvedLowerLimitValue != null
260
+ ? this._resolvedLowerLimitValue
261
+ : (this.dataTypeService.getMinValue(this.model.version || 0, this.model.dataType || 0, this.model.fBoxDataType || 0) || 0);
262
+ }
263
+ }
264
+ const args = new WriteValueModalArgs(this.writeVariableName, this.model.dataType, this.model.fBoxDataType, this.model.integerDigits, this.model.fractionDigits, numericalOperation, this.model.version, this.enableDataParsed, this.releasedVariableService, this.guiContext);
265
+ this.writeValueMmodalRef = this.modalService.show(WriteValueModalComponent, {
266
+ initialState: { args: args }, backdrop: 'static', class: 'gui-modal-dialog-position gui-modal-write', animated: false
179
267
  });
180
- const onClosedSub = modalRef.content.onClosed.subscribe(result => {
181
- modalRef.hide();
182
- onClosedSub.unsubscribe();
268
+ this.writeValueMmodalRef.content.onClosed = (result) => {
183
269
  if (result) {
270
+ if (this.restorationTimer) {
271
+ clearTimeout(this.restorationTimer);
272
+ this.restorationTimer = undefined;
273
+ }
274
+ this.recordValue = result.value;
184
275
  const writeValue = this.dataTypeService.formatToDecimal(this.model.version, result.value, this.model.dataType);
185
- this.variableCommunicator.write(this.writeVariableName, writeValue).subscribe();
186
- this.recordOperation(result.value);
276
+ this.showValue = result.showValue;
277
+ // 如果是系统变量"当前语种ID",只更新显示,不执行变量写入和操作记录
278
+ if (this.writeVariableName === '当前语种ID') {
279
+ // 直接更新显示值
280
+ this.displayText = this.showValue;
281
+ this.updateDisplayText(this.formatDisplayTextUnit(this.displayText));
282
+ this.writeValueMmodalRef.hide();
283
+ return;
284
+ }
285
+ if (this.displayText !== this.showValue || result.variableRwType === variableRwTypeEnum.witer) {
286
+ if (this.numericalOperation || result.enableNumericalOperation || result.isNumericalOperation || result.variableRwType === variableRwTypeEnum.witer) {
287
+ this.recordOperation(result.value);
288
+ this.writeValueMmodalRef.hide();
289
+ }
290
+ else {
291
+ this.restorationTimer = setTimeout(() => {
292
+ const isEquation = this.model.fractionDigits ?
293
+ parseFloat(this.displayText) === parseFloat(this.showValue) :
294
+ parseInt(this.displayText, 16) === parseInt(this.showValue, 16);
295
+ if (!isEquation) {
296
+ this.writeValueMmodalRef.content.isSubmitting = false;
297
+ this.writeValueMmodalRef.content.showValidationErrorInfo(this.localization.writeValueTimeout);
298
+ }
299
+ }, 30000);
300
+ }
301
+ this.variableCommunicator.write(this.writeVariableName, writeValue).subscribe();
302
+ }
303
+ else {
304
+ this.writeValueMmodalRef.hide();
305
+ }
187
306
  }
188
- });
307
+ };
189
308
  }
190
309
  recordOperation(newValue) {
191
310
  if (this.model.isRecordOperation || this.model.isRecordOperation === undefined) {
@@ -211,7 +330,21 @@ export class NumericalDisplayElement extends ReadableElement {
211
330
  }
212
331
  }
213
332
  updateVariableValue(value) {
214
- this.displayText = this.formatNumericalDisplayText(this.model.dataType, this.model.fractionDigits, value);
333
+ var _a;
334
+ const displayText = this.formatNumericalDisplayText(this.model.dataType, this.model.fractionDigits, value);
335
+ const isEquation = this.model.fractionDigits ?
336
+ parseFloat(displayText) === parseFloat(this.showValue) :
337
+ parseInt(displayText, 16) === parseInt(this.showValue, 16);
338
+ if (((_a = this.writeValueMmodalRef) === null || _a === void 0 ? void 0 : _a.content) && isEquation) {
339
+ if (this.restorationTimer) {
340
+ clearTimeout(this.restorationTimer);
341
+ this.restorationTimer = undefined;
342
+ this.recordOperation(this.recordValue);
343
+ }
344
+ this.writeValueMmodalRef.hide();
345
+ this.writeValueMmodalRef.content.hideValidationErrorInfo();
346
+ }
347
+ this.displayText = displayText;
215
348
  this.updateDisplayText(this.formatDisplayTextUnit(this.displayText));
216
349
  }
217
350
  updateDisplayText(text) {
@@ -354,8 +487,23 @@ export class NumericalDisplayElement extends ReadableElement {
354
487
  }
355
488
  formatDisplayTextUnit(displayText) {
356
489
  if (this.model.showUnit !== false && this.model.unit) {
357
- return `${displayText} ${this.model.unit}`;
490
+ return `${displayText || 0} ${this.model.unit}`;
358
491
  }
359
492
  return displayText;
360
493
  }
494
+ /**
495
+ * 提供元件尺寸信息用于状态图标缩放
496
+ */
497
+ getElementSizeForIconScale() {
498
+ var _a, _b;
499
+ if (this.model.size) {
500
+ return {
501
+ width: this.model.size.width,
502
+ height: this.model.size.height,
503
+ initWidth: (_a = this.model.initSize) === null || _a === void 0 ? void 0 : _a.width,
504
+ initHeight: (_b = this.model.initSize) === null || _b === void 0 ? void 0 : _b.height
505
+ };
506
+ }
507
+ return null;
508
+ }
361
509
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"NumericalDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":22,"character":45},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":39,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":40,"character":18},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":41,"character":39},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":42,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":43,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":44,"character":37},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":45,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":46,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":47,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":48,"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"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"NumericalDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":29,"character":45},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":73,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":74,"character":18},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":75,"character":39},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":76,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":77,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":78,"character":37},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":79,"character":49},{"__symbolic":"reference","module":"../../service","name":"ReleasedVariableService","line":80,"character":50},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":81,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":82,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":83,"character":22},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":85,"character":38}]}],"dispose":[{"__symbolic":"method"}],"reportValueChanged":[{"__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"}],"getElementSizeForIconScale":[{"__symbolic":"method"}]}}}}]
@@ -6,12 +6,16 @@ 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>>;
12
13
  write(variableName: string, value: any): Observable<VariableValue>;
13
14
  writeWordByBit(variableName: string, index: number, value: number): Observable<VariableValue>;
15
+ requestVirtualDeviceState(): Observable<void>;
14
16
  subscribeVariableState(variableName: string): Observable<VariableState>;
15
17
  subscribeVariableStates(variableNames: string[]): Observable<Array<VariableState>>;
18
+ subscribeUserDeviceAlarms(appId?: string): Observable<any[]>;
19
+ subscribeUserOneDeviceAlarms(appId?: string): Observable<any>;
16
20
  dispose(): void;
17
21
  }
@@ -6,6 +6,7 @@ export class PerViewVariableCommunicator {
6
6
  this.observers = new Map();
7
7
  this.variableValuesChangedSubscriptions = new Array();
8
8
  this.variableStatesChangedSubscription = new Array();
9
+ this.alarmSubscription = new Array();
9
10
  this._rawVariableCommunicator = variableCommunicator;
10
11
  }
11
12
  openVariable(variableName, appId) {
@@ -17,7 +18,10 @@ export class PerViewVariableCommunicator {
17
18
  if (!this.observers.has(variableName)) {
18
19
  this.observers.set(variableName, []);
19
20
  }
20
- this.observers.get(variableName).push(subscriber);
21
+ const obs = this.observers.get(variableName);
22
+ if (obs) {
23
+ obs.push(subscriber);
24
+ }
21
25
  });
22
26
  const subscription = this._rawVariableCommunicator.openVariables(variableNames, appId).subscribe(values => subscriber.next(values), error => subscriber.error(error), () => subscriber.complete());
23
27
  this.variableValuesChangedSubscriptions.push(subscription);
@@ -29,6 +33,9 @@ export class PerViewVariableCommunicator {
29
33
  writeWordByBit(variableName, index, value) {
30
34
  return this._rawVariableCommunicator.writeWordByBit(variableName, index, value);
31
35
  }
36
+ requestVirtualDeviceState() {
37
+ return this._rawVariableCommunicator.requestVirtualDeviceState();
38
+ }
32
39
  subscribeVariableState(variableName) {
33
40
  return this.subscribeVariableStates([variableName]).pipe(map(values => values[0]));
34
41
  }
@@ -38,8 +45,21 @@ export class PerViewVariableCommunicator {
38
45
  this.variableStatesChangedSubscription.push(subscription);
39
46
  });
40
47
  }
48
+ subscribeUserDeviceAlarms(appId = '') {
49
+ return new Observable(subscriber => {
50
+ const subscription = this._rawVariableCommunicator.subscribeUserDeviceAlarms(appId).subscribe((values) => subscriber.next(values), (error) => subscriber.error(error), () => subscriber.complete());
51
+ this.alarmSubscription.push(subscription);
52
+ });
53
+ }
54
+ subscribeUserOneDeviceAlarms(appId = '') {
55
+ return new Observable(subscriber => {
56
+ const subscription = this._rawVariableCommunicator.subscribeUserOneDeviceAlarms(appId).subscribe((value) => subscriber.next(value), (error) => subscriber.error(error), () => subscriber.complete());
57
+ this.alarmSubscription.push(subscription);
58
+ });
59
+ }
41
60
  dispose() {
42
61
  forEach(this.variableValuesChangedSubscriptions, s => s.unsubscribe());
43
62
  forEach(this.variableStatesChangedSubscription, s => s.unsubscribe());
63
+ forEach(this.alarmSubscription, s => s.unsubscribe());
44
64
  }
45
65
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"PerViewVariableCommunicator":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":14,"character":38}]}],"openVariable":[{"__symbolic":"method"}],"openVariables":[{"__symbolic":"method"}],"write":[{"__symbolic":"method"}],"writeWordByBit":[{"__symbolic":"method"}],"subscribeVariableState":[{"__symbolic":"method"}],"subscribeVariableStates":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"PerViewVariableCommunicator":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":15,"character":38}]}],"openVariable":[{"__symbolic":"method"}],"openVariables":[{"__symbolic":"method"}],"write":[{"__symbolic":"method"}],"writeWordByBit":[{"__symbolic":"method"}],"requestVirtualDeviceState":[{"__symbolic":"method"}],"subscribeVariableState":[{"__symbolic":"method"}],"subscribeVariableStates":[{"__symbolic":"method"}],"subscribeUserDeviceAlarms":[{"__symbolic":"method"}],"subscribeUserOneDeviceAlarms":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}]}}}}]
@@ -5,13 +5,25 @@ import { ReadableElement } from '../base/readable-element';
5
5
  import { VariableStore } from '../../config';
6
6
  import { PermissionChecker } from '../../service';
7
7
  export declare class RingGraphElement extends ReadableElement {
8
+ private static DEFAULT_MIN_VALUE;
9
+ private static DEFAULT_MAX_VALUE;
8
10
  protected readonly model: RingGraphModel;
9
11
  private _barElement$;
10
12
  private _textElement$;
13
+ private valueObj;
14
+ private isNeedUpdateScale;
15
+ private initTransform;
16
+ private needAddNumber;
11
17
  get readVariableName(): string;
18
+ get minVariableName(): string;
19
+ get maxVariableName(): string;
12
20
  constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
21
+ private initTransformFun;
13
22
  private initFrameNode;
14
- protected updateVariableValue(value: number): void;
23
+ init(variableName: string): void;
24
+ private updateValueObj;
25
+ private updateScale;
26
+ protected updateVariableValue(value: number, variableName: any): void;
15
27
  private updateBar;
16
28
  private getBarColor;
17
29
  private drawClockWiseArc;
@@ -4,31 +4,190 @@ import { RotationDirectionType } from '../../model/shared/rotation/rotation-dire
4
4
  import { calculatePercent, degreesToRadians } from '../shared/math-utils';
5
5
  import { VariableUtil } from '../../utils/variable-util';
6
6
  import { VariableDefinition } from '../../communication/variable/variable-definition';
7
+ import { forEach } from 'lodash';
8
+ import { VariableState } from '../../communication';
9
+ import { VariableValueType } from '../../model/shared/condition/variable-value-type';
7
10
  export class RingGraphElement extends ReadableElement {
8
11
  constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
9
12
  super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
13
+ this.valueObj = {};
14
+ this.isNeedUpdateScale = false;
15
+ this.initTransform = false;
16
+ this.needAddNumber = 0;
17
+ if ((this.model.minValueType === VariableValueType.Constant && this.model.maxValueType === VariableValueType.Variable)
18
+ || this.model.maxValueType === VariableValueType.Constant && this.model.minValueType === VariableValueType.Variable) {
19
+ this.isNeedUpdateScale = true;
20
+ this.updateScale();
21
+ this.isNeedUpdateScale = false;
22
+ }
10
23
  const el$ = $(element);
11
24
  this._barElement$ = el$.find('path[data-id="barArc"]');
12
25
  this._textElement$ = el$.find('text[data-id="pText"]');
13
26
  setTimeout(() => {
14
27
  this.initFrameNode();
15
28
  this.changeStates();
16
- }, 0);
29
+ });
17
30
  }
18
31
  get readVariableName() {
19
32
  if (!this.model.variableId) {
20
33
  return '';
21
34
  }
35
+ if (!this.model.variableId.variableName || !this.model.variableId.variableName.name) {
36
+ return undefined;
37
+ }
22
38
  const variable = new VariableDefinition(this.model.variableId.variableName.name, this.model.variableId.variableName.groupName, this.model.variableId.dataSourceCode, this.model.variableId.variableName.variableVersion);
23
39
  return VariableUtil.getConvertedVariableName(this.variableStore, variable);
24
40
  }
41
+ get minVariableName() {
42
+ if (!this.model.minValueType) {
43
+ return undefined;
44
+ }
45
+ if (!this.model.minVariable || !this.model.minVariable.name) {
46
+ return undefined;
47
+ }
48
+ const variable = new VariableDefinition(this.model.minVariable.name, this.model.minVariable.groupName, this.model.minVariable.dataSourceCode, this.model.minVariable.variableVersion);
49
+ return VariableUtil.getConvertedVariableName(this.variableStore, variable);
50
+ }
51
+ get maxVariableName() {
52
+ if (!this.model.maxValueType) {
53
+ return undefined;
54
+ }
55
+ if (!this.model.maxVariable || !this.model.maxVariable.name) {
56
+ return undefined;
57
+ }
58
+ const variable = new VariableDefinition(this.model.maxVariable.name, this.model.maxVariable.groupName, this.model.maxVariable.dataSourceCode, this.model.maxVariable.variableVersion);
59
+ return VariableUtil.getConvertedVariableName(this.variableStore, variable);
60
+ }
61
+ initTransformFun(len) {
62
+ this.$element[0].childNodes.forEach((node) => {
63
+ if (!node.transform.baseVal[0])
64
+ return;
65
+ // const matrixE = node.transform.baseVal[0].matrix.e;
66
+ // node.transform.baseVal[0].matrix.e = matrixE + len * 5;
67
+ if (node.nodeName === 'g') {
68
+ const nodeValue = node.attributes['clip-path'].value.replace('url(#', '').replace(')', '');
69
+ const rootNode = node.parentNode.parentNode.parentElement;
70
+ const clipPath = $(rootNode).find(`clipPath[id="${nodeValue}"]`);
71
+ const demoPath = clipPath.find('path');
72
+ const dValues = demoPath.attr('d').split(',');
73
+ const retValues = [];
74
+ dValues.forEach((line, index) => {
75
+ const values = [];
76
+ line.split(' ').forEach((item) => {
77
+ const nItem = Number(item);
78
+ if (!isNaN(nItem) && (index === 1 || index === 2 || nItem === -1)) {
79
+ item = nItem > 0 ? (index === 1 || index === 2 ? nItem + (len + 2) * 8 : nItem + len * 8) : nItem - len * 8;
80
+ }
81
+ values.push(item);
82
+ });
83
+ retValues.push(values.join(' '));
84
+ });
85
+ demoPath.attr('d', retValues.join(','));
86
+ }
87
+ });
88
+ }
25
89
  initFrameNode() {
26
90
  const arcPath = Snap(this.$element[0]);
27
91
  const b = arcPath.getBBox(true);
28
92
  this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', b.width).attr('height', b.height).attr('fill', 'transparent');
29
93
  }
30
- updateVariableValue(value) {
31
- const percent = calculatePercent(this.model.min, this.model.max, value);
94
+ init(variableName) {
95
+ if (variableName) {
96
+ let hasVariable = false;
97
+ forEach(this.elementStates, elementState => {
98
+ if (elementState.variableName === variableName) {
99
+ hasVariable = true;
100
+ }
101
+ });
102
+ if (!hasVariable && variableName === this.readVariableName) {
103
+ this.elementStates.push(new VariableState(variableName, undefined));
104
+ }
105
+ }
106
+ }
107
+ updateValueObj(value, variableName) {
108
+ var _a, _b, _c;
109
+ if (((_a = this.model.variableId) === null || _a === void 0 ? void 0 : _a.variableName.name) === variableName) {
110
+ this.isNeedUpdateScale = false;
111
+ this.valueObj.value = value;
112
+ }
113
+ if (((_b = this.model.minVariable) === null || _b === void 0 ? void 0 : _b.name) === variableName) {
114
+ this.isNeedUpdateScale = true;
115
+ this.valueObj.min = value;
116
+ }
117
+ if (((_c = this.model.maxVariable) === null || _c === void 0 ? void 0 : _c.name) === variableName) {
118
+ this.isNeedUpdateScale = true;
119
+ this.valueObj.max = value;
120
+ }
121
+ }
122
+ updateScale() {
123
+ // 刻度模糊问题
124
+ const matrix = this.$element[0].transform.baseVal[0].matrix;
125
+ if (!this.$element[0].style.transform) {
126
+ this.$element[0].style.transform = `translate3d(${matrix.e}px, ${matrix.f}px, 0)`;
127
+ }
128
+ if (!this.isNeedUpdateScale) {
129
+ return;
130
+ }
131
+ const textElements = this.$element.find('g:first > text');
132
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
133
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
134
+ min = Number(min);
135
+ max = Number(max);
136
+ if (isNaN(min) || isNaN(max)) {
137
+ min = RingGraphElement.DEFAULT_MIN_VALUE;
138
+ max = RingGraphElement.DEFAULT_MAX_VALUE;
139
+ }
140
+ if (this.model.minValueType === VariableValueType.Variable || this.model.maxValueType === VariableValueType.Variable) {
141
+ const len = max.toString().length > min.toString().length ? max.toString().length : min.toString().length;
142
+ if (Math.abs(len - this.needAddNumber) > 2) {
143
+ const width = this.$element.find('rect').attr('width');
144
+ this.$element.find('rect').attr('width', Number(width) + (len - this.needAddNumber) * 8);
145
+ this.initTransformFun(Math.abs(len - this.needAddNumber));
146
+ this.needAddNumber = len;
147
+ }
148
+ }
149
+ const avgSacle = ((max - min) / this.model.masterDivisionNumber).toFixed(5);
150
+ for (let i = 0; i < textElements.length; i++) {
151
+ const text = textElements[i];
152
+ if (!text.innerHTML) {
153
+ continue;
154
+ }
155
+ let sacleValue = ((Number(avgSacle) * i) + min).toFixed(0);
156
+ // 整数位和小数位格式化;
157
+ if (this.model.fractionDigits > 0) {
158
+ sacleValue = (sacleValue / Math.pow(10, this.model.fractionDigits)).toFixed(this.model.fractionDigits);
159
+ }
160
+ if (!isNaN(sacleValue)) {
161
+ const oriValue = text.innerHTML;
162
+ text.innerHTML = sacleValue;
163
+ if (this.model.minValueType !== VariableValueType.Constant || this.model.maxValueType !== VariableValueType.Constant) {
164
+ // FLEXCLOUD-2619 刻度显示不全问题
165
+ const order = (i + 1) / textElements.length;
166
+ const len = oriValue.toString().length - sacleValue.toString().length;
167
+ if (order <= 0.7 && len > 1 && !this.initTransform) {
168
+ text.transform.baseVal[0].matrix.e += (len - 1) * 5;
169
+ }
170
+ if (order > 0.7 && Math.abs(len) > 0) {
171
+ text.transform.baseVal[0].matrix.e += len > 1 ? (len - 1) * 5 : len < -1 ? (len + 1) * 5 : len * 5;
172
+ text.transform.baseVal[0].matrix.e += len === -2 ? -3 : 0;
173
+ }
174
+ }
175
+ }
176
+ }
177
+ this.initTransform = true;
178
+ }
179
+ updateVariableValue(value, variableName) {
180
+ this.updateValueObj(value, variableName);
181
+ this.updateScale();
182
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
183
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
184
+ min = Number(min);
185
+ max = Number(max);
186
+ if (isNaN(min) || isNaN(max)) {
187
+ min = RingGraphElement.DEFAULT_MIN_VALUE;
188
+ max = RingGraphElement.DEFAULT_MAX_VALUE;
189
+ }
190
+ const percent = calculatePercent(min, max, this.valueObj.value || 0);
32
191
  this.updateBar(percent);
33
192
  this._barElement$.attr('fill', this.getBarColor(value));
34
193
  if (this.model.showPercentage) {
@@ -87,3 +246,5 @@ export class RingGraphElement extends ReadableElement {
87
246
  arcPath.arc(outer, outer, inner, endRadians, startRadians);
88
247
  }
89
248
  }
249
+ RingGraphElement.DEFAULT_MIN_VALUE = 0;
250
+ RingGraphElement.DEFAULT_MAX_VALUE = 100;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"RingGraphElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":13,"character":38},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":27,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":27,"character":57},{"__symbolic":"reference","module":"../../communication/variable/variable-communicator","name":"VariableCommunicator","line":28,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":29,"character":23},{"__symbolic":"reference","module":"../../localization/localization.service","name":"Localization","line":30,"character":22},{"__symbolic":"reference","name":"string"}]}],"initFrameNode":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"updateBar":[{"__symbolic":"method"}],"getBarColor":[{"__symbolic":"method"}],"drawClockWiseArc":[{"__symbolic":"method"}],"drawAntiClockWiseArc":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"RingGraphElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":16,"character":38},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":62,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":62,"character":57},{"__symbolic":"reference","module":"../../communication/variable/variable-communicator","name":"VariableCommunicator","line":63,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":64,"character":23},{"__symbolic":"reference","module":"../../localization/localization.service","name":"Localization","line":65,"character":22},{"__symbolic":"reference","name":"string"}]}],"initTransformFun":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"init":[{"__symbolic":"method"}],"updateValueObj":[{"__symbolic":"method"}],"updateScale":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"updateBar":[{"__symbolic":"method"}],"getBarColor":[{"__symbolic":"method"}],"drawClockWiseArc":[{"__symbolic":"method"}],"drawAntiClockWiseArc":[{"__symbolic":"method"}]},"statics":{"DEFAULT_MIN_VALUE":0,"DEFAULT_MAX_VALUE":100}}}}]
@@ -0,0 +1,79 @@
1
+ import { Injector } from '@angular/core';
2
+ import { PermissionChecker } from '../../service';
3
+ import { VariableCommunicator } from '../../communication';
4
+ import { ConditionalDynamicDisplayElement } from '../base/conditional-dynamic-display-element';
5
+ import { ScrollAlarmModel } from '../../model/scroll-alarm/scroll-alarm.model';
6
+ import { AlarmsStore, VariableStore } from '../../config';
7
+ export declare class ScrollAlarmElement extends ConditionalDynamicDisplayElement {
8
+ private readonly alarmsStore;
9
+ readonly model: ScrollAlarmModel;
10
+ private readonly logger;
11
+ private readonly localization;
12
+ readonly variableCommunicator: VariableCommunicator;
13
+ private elementStatus;
14
+ private element;
15
+ private scrollIntervalId;
16
+ private alarmNames;
17
+ private startTime;
18
+ private endTime;
19
+ private getAlarmDataId;
20
+ private alarmRefreshThrottleId;
21
+ private alarmRefreshSubscription;
22
+ private signalRSubscription;
23
+ private isReplacingContent;
24
+ private isScrolling;
25
+ private isDisposed;
26
+ private isRefreshingCurrentPage;
27
+ private currentPage;
28
+ private maxResultCount;
29
+ private displayedItems;
30
+ private pageWidths;
31
+ private totalWidth;
32
+ private bgRect;
33
+ private scrollGroup;
34
+ private allAlarmsContainer;
35
+ private currentLeft;
36
+ private autoCycle;
37
+ private hasMoreData;
38
+ private isLoadingNextPage;
39
+ private headerFont;
40
+ private hasTriedFirstPage;
41
+ private isSimulateMode;
42
+ private _canvasCtx;
43
+ constructor(element: HTMLElement, injector: Injector, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, alarmsStore: AlarmsStore, signalRAppId: string);
44
+ dispose(): void;
45
+ private getAlarmData;
46
+ private initDisplayContainer;
47
+ private _buildFontAttrs;
48
+ private _createSvgTextNode;
49
+ private _measureTextWithCanvas;
50
+ private _getSvgTextWidth;
51
+ private _updateUnderlineWidth;
52
+ private renderNewPage;
53
+ private _rebaseTextNodes;
54
+ private removeOldestPage;
55
+ private scrollContent;
56
+ private initScrolling;
57
+ private resetToFirstPage;
58
+ private updateQueryTimeRange;
59
+ private setStatusAsNormal;
60
+ private setStatusAsLoading;
61
+ private renderStatus;
62
+ private clearStatus;
63
+ /**
64
+ * 模拟运行时的静态显示逻辑:只显示字段标签,不查询数据
65
+ */
66
+ private renderStaticDisplay;
67
+ /**
68
+ * 模拟运行时的静态滚动逻辑
69
+ */
70
+ private initStaticScrolling;
71
+ /**
72
+ * 模拟运行时的静态内容滚动
73
+ */
74
+ private scrollStaticContent;
75
+ /**
76
+ * 实时替换当前滚动内容(用于告警数据变化时)
77
+ */
78
+ private replaceCurrentScrollingContent;
79
+ }