@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
@@ -0,0 +1 @@
1
+ [{"__symbolic":"module","version":4,"metadata":{"AlarmElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":21,"character":34},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":61,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":62,"character":18},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":63,"character":27},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":64,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":65,"character":23},{"__symbolic":"reference","module":"../../config","name":"AlarmsStore","line":66,"character":38},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"SystemTextLibraryService","line":68,"character":52},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":69,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":70,"character":38}]}],"dispose":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"updateLanguageTexts":[{"__symbolic":"method"}],"getCurrentCulture":[{"__symbolic":"method"}],"getHeaderTextByColumn":[{"__symbolic":"method"}],"getValidTimePeriods":[{"__symbolic":"method"}],"getTimePeriodText":[{"__symbolic":"method"}],"getAlarmData":[{"__symbolic":"method"}],"refreshCurrentPageData":[{"__symbolic":"method"}],"updateTableContent":[{"__symbolic":"method"}],"getIconScale":[{"__symbolic":"method"}],"renderElement":[{"__symbolic":"method"}],"buildHeaderRow":[{"__symbolic":"method"}],"buildDataRow":[{"__symbolic":"method"}],"renderPlainTable":[{"__symbolic":"method"}],"renderScrollableTable":[{"__symbolic":"method"}],"bindScrollHoverEvents":[{"__symbolic":"method"}],"unbindScrollHoverEvents":[{"__symbolic":"method"}],"startAutoScroll":[{"__symbolic":"method"}],"scrollOneRow":[{"__symbolic":"method"}],"autoNextPage":[{"__symbolic":"method"}],"renderOperationArea":[{"__symbolic":"method"}],"updateTimeRange":[{"__symbolic":"method"}],"updateQueryTimeRange":[{"__symbolic":"method"}],"loadFirstPage":[{"__symbolic":"method"}],"loadNextPage":[{"__symbolic":"method"}],"loadPreviousPage":[{"__symbolic":"method"}],"loadLastPage":[{"__symbolic":"method"}],"setStatusAsNormal":[{"__symbolic":"method"}],"setStatusAsLoading":[{"__symbolic":"method"}],"renderStatus":[{"__symbolic":"method"}],"clearStatus":[{"__symbolic":"method"}]}}}}]
@@ -5,17 +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 BarGraphElement extends ReadableElement {
8
+ private static DEFAULT_MIN_VALUE;
9
+ private static DEFAULT_MAX_VALUE;
8
10
  readonly model: BarGraph;
9
11
  private readonly $barRect;
10
12
  private readonly barElement;
11
13
  private readonly $barText;
12
- private readonly defaultTransform;
14
+ private defaultTransform;
13
15
  private defaultBarColor;
14
16
  private defaultUpperLimitColor;
15
17
  private defaultLowerLimitColor;
16
18
  private barText;
19
+ private valueObj;
20
+ private isNeedUpdateScale;
21
+ private needAddNumber;
17
22
  get readVariableName(): string;
18
23
  constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
24
+ private initTransform;
19
25
  private initFrameNode;
20
- updateVariableValue(value: number): void;
26
+ private updateValueObj;
27
+ private updateScale;
28
+ updateVariableValue(value: number, variableName: any): void;
21
29
  }
@@ -2,6 +2,7 @@ import { BarGraphDirection } from '../model';
2
2
  import { ReadableElement } from './base/readable-element';
3
3
  import { calculatePercent } from './shared/math-utils';
4
4
  import { VariableUtil } from '../utils/variable-util';
5
+ import { VariableValueType } from '../model/shared/condition/variable-value-type';
5
6
  export class BarGraphElement extends ReadableElement {
6
7
  constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
7
8
  super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
@@ -9,6 +10,15 @@ export class BarGraphElement extends ReadableElement {
9
10
  this.defaultUpperLimitColor = '#ff4448';
10
11
  this.defaultLowerLimitColor = '#0f60e8';
11
12
  this.barText = '';
13
+ this.valueObj = {};
14
+ this.isNeedUpdateScale = false;
15
+ this.needAddNumber = 0;
16
+ if ((this.model.minValueType === VariableValueType.Constant && this.model.maxValueType === VariableValueType.Variable)
17
+ || this.model.maxValueType === VariableValueType.Constant && this.model.minValueType === VariableValueType.Variable) {
18
+ this.isNeedUpdateScale = true;
19
+ this.updateScale();
20
+ this.isNeedUpdateScale = false;
21
+ }
12
22
  this.$barRect = this.$element.find('rect');
13
23
  this.$barText = this.$element.find('text[id="text"]').last();
14
24
  if (this.model.version && this.model.version >= 1) {
@@ -19,7 +29,7 @@ export class BarGraphElement extends ReadableElement {
19
29
  }
20
30
  setTimeout(() => {
21
31
  this.initFrameNode();
22
- }, 0);
32
+ });
23
33
  }
24
34
  get readVariableName() {
25
35
  if (!this.model) {
@@ -36,15 +46,133 @@ export class BarGraphElement extends ReadableElement {
36
46
  return VariableUtil.getConvertedVariableName(this.variableStore, variable);
37
47
  }
38
48
  }
49
+ initTransform() {
50
+ if (this.needAddNumber <= 3)
51
+ return;
52
+ this.$element[0].childNodes.forEach((node, index) => {
53
+ // const matrixE = node.transform.baseVal[0].matrix.e;
54
+ // node.transform.baseVal[0].matrix.e = matrixE + (this.needAddNumber - 3) * 7;
55
+ if (!node.transform.baseVal[0])
56
+ return;
57
+ if (node.nodeName === 'g') {
58
+ const nodeValue = node.attributes['clip-path'].value.replace('url(#', '').replace(')', '');
59
+ const rootNode = node.parentNode.parentNode.parentElement;
60
+ const clipPath = $(rootNode).find(`clipPath[id="${nodeValue}"]`);
61
+ const demoPath = clipPath.find('path');
62
+ const dValues = demoPath.attr('d').split(',');
63
+ const retValues = [];
64
+ dValues.forEach((line) => {
65
+ const values = [];
66
+ line.split(' ').forEach((item) => {
67
+ const nItem = Number(item);
68
+ if (nItem === -1) {
69
+ item = nItem - (this.needAddNumber - 3) * 7;
70
+ }
71
+ values.push(item);
72
+ });
73
+ retValues.push(values.join(' '));
74
+ });
75
+ demoPath.attr('d', retValues.join(','));
76
+ }
77
+ else if (index === this.$element[0].childNodes.length - 1) {
78
+ this.defaultTransform = node.attributes['transform'].value;
79
+ }
80
+ });
81
+ }
39
82
  initFrameNode() {
40
83
  const arcPath = Snap(this.$element[0]);
41
84
  const b = arcPath.getBBox(true);
42
85
  this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', b.width).attr('height', b.height).attr('fill', 'transparent');
43
86
  }
44
- updateVariableValue(value) {
45
- const variableValue = Number(value).valueOf();
46
- const maxValue = Number(this.model.max).valueOf();
47
- const minValue = Number(this.model.min).valueOf();
87
+ updateValueObj(value, variableName) {
88
+ var _a, _b, _c;
89
+ if (((_a = this.model.readVariable) === null || _a === void 0 ? void 0 : _a.name) === variableName) {
90
+ this.isNeedUpdateScale = false;
91
+ this.valueObj.value = value;
92
+ }
93
+ if (((_b = this.model.minVariable) === null || _b === void 0 ? void 0 : _b.name) === variableName) {
94
+ this.isNeedUpdateScale = true;
95
+ this.valueObj.min = value;
96
+ }
97
+ if (((_c = this.model.maxVariable) === null || _c === void 0 ? void 0 : _c.name) === variableName) {
98
+ this.isNeedUpdateScale = true;
99
+ this.valueObj.max = value;
100
+ }
101
+ }
102
+ updateScale() {
103
+ if (!this.isNeedUpdateScale) {
104
+ return;
105
+ }
106
+ const textElements = this.$element.find('g:first > text');
107
+ let min = this.model.minValueType ? this.valueObj.min : this.model.min;
108
+ let max = this.model.maxValueType ? this.valueObj.max : this.model.max;
109
+ min = Number(min);
110
+ max = Number(max);
111
+ if (isNaN(min) || isNaN(max)) {
112
+ min = BarGraphElement.DEFAULT_MIN_VALUE;
113
+ max = BarGraphElement.DEFAULT_MAX_VALUE;
114
+ }
115
+ if (this.model.maxValueType === VariableValueType.Variable || this.model.minValueType === VariableValueType.Variable) {
116
+ this.needAddNumber = max.toString().length > min.toString().length ? max.toString().length : min.toString().length;
117
+ this.initTransform();
118
+ }
119
+ const avgSacle = ((max - min) / this.model.masterDivisionNumber).toFixed(5);
120
+ for (let i = 0; i < textElements.length; i++) {
121
+ const text = textElements[i];
122
+ if (!text.innerHTML) {
123
+ continue;
124
+ }
125
+ let sacleValue = ((Number(avgSacle) * i) + min).toFixed(0);
126
+ // 整数位和小数位格式化;
127
+ if (this.model.fractionDigits > 0) {
128
+ sacleValue = (sacleValue / Math.pow(10, this.model.fractionDigits)).toFixed(this.model.fractionDigits);
129
+ }
130
+ if (!isNaN(sacleValue)) {
131
+ text.innerHTML = sacleValue;
132
+ if (this.model.minValueType !== VariableValueType.Constant || this.model.maxValueType !== VariableValueType.Constant) {
133
+ // FLEXCLOUD-2619 刻度未对齐问题
134
+ let translateX = 0;
135
+ const sacleLen = sacleValue.toString().length;
136
+ switch (sacleLen) {
137
+ case 1:
138
+ translateX = 13;
139
+ break;
140
+ case 2:
141
+ translateX = 7;
142
+ break;
143
+ case 3:
144
+ translateX = this.model.fractionDigits ? 5 : 0;
145
+ break;
146
+ default:
147
+ if (sacleLen > 3 && this.needAddNumber > 3) {
148
+ translateX = -(sacleLen - 3) * 7;
149
+ }
150
+ break;
151
+ }
152
+ if (this.model.minValueType !== VariableValueType.Constant && this.model.maxValueType === VariableValueType.Constant) {
153
+ const maxLen = this.model.max && this.model.max.toString().length;
154
+ translateX += maxLen > 2 ? (maxLen - 3) * 7 : 0;
155
+ }
156
+ text.transform.baseVal[0].matrix.e = translateX;
157
+ }
158
+ }
159
+ }
160
+ }
161
+ updateVariableValue(value, variableName) {
162
+ this.updateValueObj(value, variableName);
163
+ this.updateScale();
164
+ const variableValue = Number(this.valueObj.value);
165
+ let maxValue = this.model.maxValueType ? this.valueObj.max : this.model.max;
166
+ let minValue = this.model.minValueType ? this.valueObj.min : this.model.min;
167
+ minValue = Number(minValue);
168
+ maxValue = Number(maxValue);
169
+ if (isNaN(minValue) || isNaN(maxValue)) {
170
+ minValue = BarGraphElement.DEFAULT_MIN_VALUE;
171
+ maxValue = BarGraphElement.DEFAULT_MAX_VALUE;
172
+ }
173
+ if (isNaN(variableValue)) {
174
+ return;
175
+ }
48
176
  const useAlarmLimit = this.model.useAlarmLimit;
49
177
  const useAlarmUpperLimit = null != this.model.upperLimit;
50
178
  const useAlarmLowerLimit = null != this.model.lowerLimit;
@@ -112,3 +240,5 @@ export class BarGraphElement extends ReadableElement {
112
240
  }
113
241
  }
114
242
  }
243
+ BarGraphElement.DEFAULT_MIN_VALUE = 0;
244
+ BarGraphElement.DEFAULT_MAX_VALUE = 100;
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"BarGraphElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base/readable-element","name":"ReadableElement","line":9,"character":37},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":33,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":33,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":34,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":35,"character":23},{"__symbolic":"reference","module":"../localization","name":"Localization","line":36,"character":22},{"__symbolic":"reference","name":"string"}]}],"initFrameNode":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"BarGraphElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./base/readable-element","name":"ReadableElement","line":10,"character":37},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":39,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../service","name":"PermissionChecker","line":39,"character":57},{"__symbolic":"reference","module":"../communication","name":"VariableCommunicator","line":40,"character":30},{"__symbolic":"reference","module":"../config","name":"VariableStore","line":41,"character":23},{"__symbolic":"reference","module":"../localization","name":"Localization","line":42,"character":22},{"__symbolic":"reference","name":"string"}]}],"initTransform":[{"__symbolic":"method"}],"initFrameNode":[{"__symbolic":"method"}],"updateValueObj":[{"__symbolic":"method"}],"updateScale":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}]},"statics":{"DEFAULT_MIN_VALUE":0,"DEFAULT_MAX_VALUE":100}}}}]
@@ -9,7 +9,12 @@ export declare abstract class ReadableElement extends ConditionalEnableElement {
9
9
  constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
10
10
  init(variableName: string): void;
11
11
  get readVariableName(): string;
12
- protected abstract updateVariableValue(value: any): void;
12
+ get minVariableName(): string;
13
+ get minValueType(): any;
14
+ get maxVariableName(): string;
15
+ get maxValueType(): any;
16
+ private getVariableName;
17
+ protected abstract updateVariableValue(value: any, variableName: any): void;
13
18
  reportStateChanged(variableState: VariableState): void;
14
19
  reportValueChanged(value: VariableValue): void;
15
20
  }
@@ -3,6 +3,7 @@ import { VariableState } from '../../communication';
3
3
  import { ConditionalEnableElement } from './conditional-enable-element';
4
4
  import { forEach } from 'lodash';
5
5
  import { VariableUtil } from '../../utils/variable-util';
6
+ import { GuiFeatureConfig } from '../../config';
6
7
  export class ReadableElement extends ConditionalEnableElement {
7
8
  constructor(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId) {
8
9
  super(element, permissionChecker, variableCommunicator, variableStore, localization, signalRAppId);
@@ -36,6 +37,33 @@ export class ReadableElement extends ConditionalEnableElement {
36
37
  return VariableUtil.getConvertedVariableName(this.variableStore, variable);
37
38
  }
38
39
  }
40
+ get minVariableName() {
41
+ if (!this.model.minValueType) {
42
+ return undefined;
43
+ }
44
+ return this.getVariableName(this.model.minVariable);
45
+ }
46
+ get minValueType() {
47
+ return this.model.minValueType;
48
+ }
49
+ get maxVariableName() {
50
+ if (!this.model.maxValueType) {
51
+ return undefined;
52
+ }
53
+ return this.getVariableName(this.model.maxVariable);
54
+ }
55
+ get maxValueType() {
56
+ return this.model.maxValueType;
57
+ }
58
+ getVariableName(variable) {
59
+ if (!this.model) {
60
+ throw new Error('Model cannot be null');
61
+ }
62
+ if (!variable) {
63
+ return undefined;
64
+ }
65
+ return VariableUtil.getConvertedVariableName(this.variableStore, variable);
66
+ }
39
67
  reportStateChanged(variableState) {
40
68
  forEach(this.elementStates, elementState => {
41
69
  if (elementState.variableName === variableState.variableName) {
@@ -45,14 +73,53 @@ export class ReadableElement extends ConditionalEnableElement {
45
73
  });
46
74
  }
47
75
  reportValueChanged(value) {
76
+ var _a, _b, _c, _d;
48
77
  forEach(this.elementStates, elementState => {
49
78
  if (elementState.variableName === value.variableName) {
50
79
  elementState.state = value.state;
51
80
  this.changeStates();
52
81
  }
53
82
  });
54
- if (this.state === State.Normal || this.state === State.Disable) {
55
- this.updateVariableValue(value.value);
83
+ // 处理系统变量"设备状态"
84
+ if (value.systemName === '设备状态') {
85
+ let name = value.customStatus;
86
+ const language = ((_b = (_a = window.abp.localization) === null || _a === void 0 ? void 0 : _a.currentLanguage) === null || _b === void 0 ? void 0 : _b.name) || ((_d = (_c = this.localization.localizationService) === null || _c === void 0 ? void 0 : _c.translate) === null || _d === void 0 ? void 0 : _d.currentLang);
87
+ const isChinese = language === 'zh-Hans' || language === 'zh';
88
+ const isTraditionalChinese = language === 'zh-Hant' || language === 'zh-TW' || language === 'zh-tw';
89
+ if (!name) {
90
+ switch (value.state) {
91
+ case 1:
92
+ name = isTraditionalChinese ? '線上' : (isChinese ? '在线' : 'Online');
93
+ break;
94
+ case 3:
95
+ name = isTraditionalChinese ? '離線' : (isChinese ? '离线' : 'Offline');
96
+ break;
97
+ case 4:
98
+ name = isTraditionalChinese ? '告警' : (isChinese ? '告警' : 'Alarm');
99
+ break;
100
+ case 5:
101
+ name = isTraditionalChinese ? '未綁定' : (isChinese ? '未绑定' : 'Unbound');
102
+ break;
103
+ default:
104
+ }
105
+ }
106
+ if (value.state === 4) {
107
+ name = isTraditionalChinese ? '告警' : (isChinese ? '告警' : 'Alarm');
108
+ }
109
+ this.updateVariableValue(name, '设备状态');
110
+ return; // 处理完"设备状态"后直接返回
111
+ }
112
+ // 处理系统变量"当前语种ID"
113
+ if (value.variableName === '当前语种ID') {
114
+ // 直接使用变量值(数字或null)
115
+ this.updateVariableValue(value.value, value.variableName);
116
+ return;
117
+ }
118
+ // 处理普通变量
119
+ if (this.state === State.Normal || this.state === State.Disable || (GuiFeatureConfig.isOfflineDisplayEnabled && this.state === State.Offline)
120
+ || value.variableName === this.minVariableName
121
+ || value.variableName === this.maxVariableName) {
122
+ this.updateVariableValue(value.value, value.variableName);
56
123
  }
57
124
  }
58
125
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"ReadableElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./conditional-enable-element","name":"ConditionalEnableElement","line":9,"character":46},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":13,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":13,"character":57},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":13,"character":98},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":14,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":14,"character":52},{"__symbolic":"reference","name":"string"}]}],"init":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"reportStateChanged":[{"__symbolic":"method"}],"reportValueChanged":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"ReadableElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./conditional-enable-element","name":"ConditionalEnableElement","line":10,"character":46},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":14,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":14,"character":57},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":14,"character":98},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":15,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":15,"character":52},{"__symbolic":"reference","name":"string"}]}],"init":[{"__symbolic":"method"}],"getVariableName":[{"__symbolic":"method"}],"updateVariableValue":[{"__symbolic":"method"}],"reportStateChanged":[{"__symbolic":"method"}],"reportValueChanged":[{"__symbolic":"method"}]}}}}]
@@ -1,3 +1,5 @@
1
+ /// <reference types="jquery" />
2
+ /// <reference types="jqueryui" />
1
3
  import { PermissionChecker } from '../../service';
2
4
  import { Localization } from '../../localization';
3
5
  import { VariableCommunicator, VariableState } from '../../communication';
@@ -9,9 +11,19 @@ export declare abstract class StateControlElement extends ConditionalDynamicDisp
9
11
  isEnable: boolean;
10
12
  elementStates: VariableState[];
11
13
  state: State;
12
- private currentRect;
14
+ currentRect: JQuery;
13
15
  preState: State;
14
16
  constructor(element: HTMLElement, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, localization: Localization, signalRAppId: string);
17
+ /**
18
+ * 子类可覆盖此方法提供元件当前大小和初始大小,用于状态图标缩放计算
19
+ * @returns {{ width: number, height: number, initWidth?: number, initHeight?: number }}
20
+ */
21
+ protected getElementSizeForIconScale(): {
22
+ width: number;
23
+ height: number;
24
+ initWidth?: number;
25
+ initHeight?: number;
26
+ } | null;
15
27
  initState(): void;
16
28
  updateElementStates(newElementStates: VariableState[]): void;
17
29
  addElementState(newElementState: VariableState): void;
@@ -9,6 +9,13 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
9
9
  this.isEnable = true;
10
10
  this.elementStates = [];
11
11
  }
12
+ /**
13
+ * 子类可覆盖此方法提供元件当前大小和初始大小,用于状态图标缩放计算
14
+ * @returns {{ width: number, height: number, initWidth?: number, initHeight?: number }}
15
+ */
16
+ getElementSizeForIconScale() {
17
+ return null;
18
+ }
12
19
  initState() {
13
20
  if (!this.elementStates.length) {
14
21
  return;
@@ -65,26 +72,34 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
65
72
  case VariableStateEnum.Abnormal:
66
73
  currentState = State.Abnormal;
67
74
  break;
75
+ case VariableStateEnum.InvalidMonitor:
76
+ currentState = State.InvalidMonitor;
77
+ break;
68
78
  }
69
79
  return currentState;
70
80
  }
71
81
  changeState(state) {
72
82
  switch (state) {
83
+ case State.InvalidMonitor:
84
+ this.state = State.InvalidMonitor;
85
+ break;
73
86
  case State.Unbind:
74
- this.state = State.Unbind;
87
+ if (this.state !== State.InvalidMonitor) {
88
+ this.state = State.Unbind;
89
+ }
75
90
  break;
76
91
  case State.Offline:
77
- if (this.state !== State.Unbind) {
92
+ if (this.state !== State.Unbind && this.state !== State.InvalidMonitor) {
78
93
  this.state = State.Offline;
79
94
  }
80
95
  break;
81
96
  case State.Loading:
82
- if (this.state !== State.Unbind && this.state !== State.Offline) {
97
+ if (this.state !== State.Unbind && this.state !== State.Offline && this.state !== State.InvalidMonitor) {
83
98
  this.state = State.Loading;
84
99
  }
85
100
  break;
86
101
  case State.Abnormal:
87
- if (this.state !== State.Unbind && this.state !== State.Offline && this.state !== State.Loading) {
102
+ if (this.state !== State.Unbind && this.state !== State.Offline && this.state !== State.Loading && this.state !== State.InvalidMonitor) {
88
103
  this.state = State.Abnormal;
89
104
  }
90
105
  break;
@@ -123,9 +138,14 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
123
138
  title = this.localization.disable;
124
139
  stroke = '#ff4444';
125
140
  break;
141
+ case State.InvalidMonitor:
142
+ url = 'assets/img/abnormal.svg';
143
+ title = this.localization.invalidMonitor;
144
+ stroke = '#f6a520';
145
+ break;
126
146
  default:
127
147
  url = 'assets/img/loading.svg';
128
- title = this.localization.loading;
148
+ title = this.localization.variableChanged;
129
149
  stroke = '#226abc';
130
150
  break;
131
151
  }
@@ -139,11 +159,25 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
139
159
  if (!this.currentRect.length) {
140
160
  return;
141
161
  }
162
+ // 元件绑定设备状态或当前语种ID时不需要在右上角显示状态
163
+ if (this.$element[0].dataset.model.includes('设备状态') || this.$element[0].dataset.model.includes('当前语种ID'))
164
+ return;
142
165
  const document = this.$element[0].ownerDocument;
143
166
  const imgObj = document.createElementNS('http://www.w3.org/2000/svg', 'image');
144
167
  if (imgObj) {
145
168
  const currentRectElement = this.currentRect[0];
146
- let x = Number(currentRectElement.getAttribute('width')) - 20;
169
+ // 计算图标缩放比例
170
+ const baseIconSize = 20;
171
+ let iconSize = baseIconSize;
172
+ const sizeInfo = this.getElementSizeForIconScale();
173
+ if (sizeInfo && sizeInfo.initWidth && sizeInfo.initHeight) {
174
+ const scaleX = sizeInfo.width / sizeInfo.initWidth;
175
+ const scaleY = sizeInfo.height / sizeInfo.initHeight;
176
+ // 取较小值,避免图标超出元件边界
177
+ const scale = Math.min(scaleX, scaleY);
178
+ iconSize = baseIconSize * scale;
179
+ }
180
+ let x = Number(currentRectElement.getAttribute('width')) - iconSize;
147
181
  const currentRectX = currentRectElement.getAttribute('x');
148
182
  if (currentRectX !== null) {
149
183
  x += Number(currentRectX);
@@ -154,8 +188,8 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
154
188
  imgObj.setAttributeNS(null, 'id', 'StateImage');
155
189
  imgObj.setAttributeNS(null, 'x', x.toString());
156
190
  imgObj.setAttributeNS(null, 'y', '0');
157
- imgObj.setAttributeNS(null, 'height', '20px');
158
- imgObj.setAttributeNS(null, 'width', '20px');
191
+ imgObj.setAttributeNS(null, 'height', iconSize + 'px');
192
+ imgObj.setAttributeNS(null, 'width', iconSize + 'px');
159
193
  const titleElement = document.createElementNS('http://www.w3.org/2000/svg', 'title');
160
194
  const text = document.createTextNode(title);
161
195
  titleElement.appendChild(text);
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"StateControlElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":8,"character":50},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":16,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":16,"character":57},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":16,"character":98},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":17,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":17,"character":71},{"__symbolic":"reference","name":"string"}]}],"initState":[{"__symbolic":"method"}],"updateElementStates":[{"__symbolic":"method"}],"addElementState":[{"__symbolic":"method"}],"changeStates":[{"__symbolic":"method"}],"getState":[{"__symbolic":"method"}],"changeState":[{"__symbolic":"method"}],"loadStateData":[{"__symbolic":"method"}],"setState":[{"__symbolic":"method"}],"clearTip":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"StateControlElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":8,"character":50},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":16,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":16,"character":57},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":16,"character":98},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":17,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":17,"character":71},{"__symbolic":"reference","name":"string"}]}],"getElementSizeForIconScale":[{"__symbolic":"method"}],"initState":[{"__symbolic":"method"}],"updateElementStates":[{"__symbolic":"method"}],"addElementState":[{"__symbolic":"method"}],"changeStates":[{"__symbolic":"method"}],"getState":[{"__symbolic":"method"}],"changeState":[{"__symbolic":"method"}],"loadStateData":[{"__symbolic":"method"}],"setState":[{"__symbolic":"method"}],"clearTip":[{"__symbolic":"method"}]}}}}]
@@ -32,4 +32,13 @@ export declare class CharacterDisplayElement extends ReadableElement {
32
32
  private doWriteCharacterValue;
33
33
  private recordOperation;
34
34
  private changeGraph;
35
+ /**
36
+ * 提供元件尺寸信息用于状态图标缩放
37
+ */
38
+ protected getElementSizeForIconScale(): {
39
+ width: number;
40
+ height: number;
41
+ initWidth?: number;
42
+ initHeight?: number;
43
+ } | null;
35
44
  }
@@ -1,4 +1,5 @@
1
1
  import { GraphType } from '../../config';
2
+ import { GuiFeatureConfig } from '../../config';
2
3
  import { LOGGER_SERVICE_TOKEN } from '../../logger';
3
4
  import { AlertModalComponent } from '../../modal/alert/alert-modal.component';
4
5
  import { ConfirmOperationModalComponent } from '../../modal/confirm-operation/confirm-operation-modal.component';
@@ -67,7 +68,7 @@ export class CharacterDisplayElement extends ReadableElement {
67
68
  }
68
69
  changeStates() {
69
70
  super.changeStates();
70
- if (this.state === State.Normal || this.state === State.Disable) {
71
+ if (this.state === State.Normal || this.state === State.Disable || (GuiFeatureConfig.isOfflineDisplayEnabled && this.state === State.Offline)) {
71
72
  this.updateDisplayValue(this.displayValue);
72
73
  }
73
74
  else {
@@ -265,7 +266,7 @@ export class CharacterDisplayElement extends ReadableElement {
265
266
  }
266
267
  const args = new WriteCharacterModalArgs(this.writeVariableName, this.model.isPassword, this.model.charCount, this.displayValue);
267
268
  const modalRef = this.modalService.show(WriteCharacterModalComponent, {
268
- initialState: { args: args }, backdrop: 'static', class: 'gui-modal-dialog-position', animated: false
269
+ initialState: { args: args }, backdrop: 'static', class: 'gui-modal-dialog-position gui-modal-write', animated: false
269
270
  });
270
271
  const onClosedSub = modalRef.content.onClosed.subscribe(result => {
271
272
  modalRef.hide();
@@ -308,4 +309,19 @@ export class CharacterDisplayElement extends ReadableElement {
308
309
  this.rootElement.select('image').attr('xlink:href', null);
309
310
  }
310
311
  }
312
+ /**
313
+ * 提供元件尺寸信息用于状态图标缩放
314
+ */
315
+ getElementSizeForIconScale() {
316
+ var _a, _b;
317
+ if (this.model.size) {
318
+ return {
319
+ width: this.model.size.width,
320
+ height: this.model.size.height,
321
+ initWidth: (_a = this.model.initSize) === null || _a === void 0 ? void 0 : _a.width,
322
+ initHeight: (_b = this.model.initSize) === null || _b === void 0 ? void 0 : _b.height
323
+ };
324
+ }
325
+ return null;
326
+ }
311
327
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"CharacterDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":19,"character":45},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":28,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":28,"character":48},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":29,"character":39},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":30,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":31,"character":37},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":32,"character":27},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":33,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":34,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":35,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":36,"character":22},{"__symbolic":"reference","name":"string"}]}],"updateVariableValue":[{"__symbolic":"method"}],"changeStates":[{"__symbolic":"method"}],"updateDisplayValue":[{"__symbolic":"method"}],"getVariableValueText":[{"__symbolic":"method"}],"characterDisplayText":[{"__symbolic":"method"}],"initElement":[{"__symbolic":"method"}],"initVariableText":[{"__symbolic":"method"}],"initClickEvent":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"doWriteCharacterValue":[{"__symbolic":"method"}],"recordOperation":[{"__symbolic":"method"}],"changeGraph":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"CharacterDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/readable-element","name":"ReadableElement","line":20,"character":45},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":29,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":29,"character":48},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":30,"character":39},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":31,"character":30},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":32,"character":37},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":33,"character":27},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":34,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":35,"character":42},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":36,"character":23},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":37,"character":22},{"__symbolic":"reference","name":"string"}]}],"updateVariableValue":[{"__symbolic":"method"}],"changeStates":[{"__symbolic":"method"}],"updateDisplayValue":[{"__symbolic":"method"}],"getVariableValueText":[{"__symbolic":"method"}],"characterDisplayText":[{"__symbolic":"method"}],"initElement":[{"__symbolic":"method"}],"initVariableText":[{"__symbolic":"method"}],"initClickEvent":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"doWriteCharacterValue":[{"__symbolic":"method"}],"recordOperation":[{"__symbolic":"method"}],"changeGraph":[{"__symbolic":"method"}],"getElementSizeForIconScale":[{"__symbolic":"method"}]}}}}]
@@ -13,6 +13,7 @@ export declare class DatetimeDisplayElement extends ConditionalDisplayElement {
13
13
  protected readonly model: DatetimeDisplay;
14
14
  protected readonly logger: LoggerService;
15
15
  private readonly $dateTimeText;
16
+ private timeZoneMap;
16
17
  constructor(element: HTMLElement, injector: Injector, permissionChecker: PermissionChecker, variableCommunicator: VariableCommunicator, variableStore: VariableStore, graphStore: GraphStore, signalRAppId: string);
17
18
  private getAndSetCurrentTime;
18
19
  private getDatetimeFormat;
@@ -5,6 +5,7 @@ import { TimeFormatType } from '../../model/datetime-display/time-format-type';
5
5
  import { ConditionalDisplayElement } from '../base/conditional-display-element';
6
6
  import { GraphStateElement } from '../shared/graph/graph-state-element';
7
7
  import { LOGGER_SERVICE_TOKEN } from '../../logger';
8
+ import timeZoneOptions from './time-zone-select-json';
8
9
  export class DatetimeDisplayElement extends ConditionalDisplayElement {
9
10
  constructor(element, injector, permissionChecker, variableCommunicator, variableStore, graphStore, signalRAppId) {
10
11
  super(element, permissionChecker, variableCommunicator, variableStore, signalRAppId);
@@ -12,7 +13,12 @@ export class DatetimeDisplayElement extends ConditionalDisplayElement {
12
13
  this.variableCommunicator = variableCommunicator;
13
14
  this.variableStore = variableStore;
14
15
  this.graphStore = graphStore;
16
+ this.timeZoneMap = new Map();
15
17
  this.logger = injector.get(LOGGER_SERVICE_TOKEN);
18
+ // 初始化时区
19
+ timeZoneOptions.forEach((item) => {
20
+ this.timeZoneMap.set(item.key, item.utcoffset);
21
+ });
16
22
  if (this.model.size && this.model.useGraph) {
17
23
  this.initGraph(this.model.size.width, this.model.size.height);
18
24
  }
@@ -22,11 +28,13 @@ export class DatetimeDisplayElement extends ConditionalDisplayElement {
22
28
  this.getAndSetCurrentTime(format);
23
29
  setInterval(() => {
24
30
  this.getAndSetCurrentTime(format);
25
- }, 1000);
31
+ }, 100);
26
32
  }
27
33
  }
28
34
  getAndSetCurrentTime(format) {
29
- const content = moment().local().format(format);
35
+ var _a;
36
+ const currentTimeZone = this.timeZoneMap.get((_a = this.model.timeZone) !== null && _a !== void 0 ? _a : '');
37
+ const content = moment().utcOffset(currentTimeZone !== null && currentTimeZone !== void 0 ? currentTimeZone : this.timeZoneMap.get('')).format(format);
30
38
  this.$dateTimeText.text(content);
31
39
  let fontF = this.$dateTimeText.css('font-family');
32
40
  if (fontF && fontF.lastIndexOf('msyh') === -1) {
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"DatetimeDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":14,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":21,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":21,"character":48},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":22,"character":46},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":23,"character":49},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":24,"character":42},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":25,"character":37},{"__symbolic":"reference","name":"string"}]}],"getAndSetCurrentTime":[{"__symbolic":"method"}],"getDatetimeFormat":[{"__symbolic":"method"}],"initGraph":[{"__symbolic":"method"}],"getFormat":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"DatetimeDisplayElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-display-element","name":"ConditionalDisplayElement","line":15,"character":44},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":24,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":24,"character":48},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":25,"character":46},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":26,"character":49},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":27,"character":42},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":28,"character":37},{"__symbolic":"reference","name":"string"}]}],"getAndSetCurrentTime":[{"__symbolic":"method"}],"getDatetimeFormat":[{"__symbolic":"method"}],"initGraph":[{"__symbolic":"method"}],"getFormat":[{"__symbolic":"method"}]}}}}]
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 导出时区json
3
+ */
4
+ declare const timeZoneOptions: {
5
+ key: string;
6
+ utcoffset: string;
7
+ }[];
8
+ export default timeZoneOptions;