@flexem/fc-gui 3.0.0-alpha.156 → 3.0.0-alpha.158

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 (37) hide show
  1. package/bundles/@flexem/fc-gui.umd.js +191 -27
  2. package/bundles/@flexem/fc-gui.umd.js.map +1 -1
  3. package/bundles/@flexem/fc-gui.umd.min.js +4 -4
  4. package/bundles/@flexem/fc-gui.umd.min.js.map +1 -1
  5. package/communication/variable/variable-state-enum.d.ts +1 -0
  6. package/communication/variable/variable-state-enum.js +1 -0
  7. package/communication/variable/variable-state-enum.metadata.json +1 -1
  8. package/config/variable/variable-store.d.ts +1 -0
  9. package/elements/base/state-control-element.js +17 -4
  10. package/elements/shared/text/text-element.d.ts +5 -0
  11. package/elements/shared/text/text-element.js +7 -0
  12. package/elements/shared/text/text-element.metadata.json +1 -1
  13. package/elements/shared/text/text-state-element.d.ts +10 -1
  14. package/elements/shared/text/text-state-element.js +29 -2
  15. package/elements/shared/text/text-state-element.metadata.json +1 -1
  16. package/elements/static-elements/hyperlink-element.d.ts +4 -0
  17. package/elements/static-elements/hyperlink-element.js +35 -7
  18. package/elements/static-elements/hyperlink-element.metadata.json +1 -1
  19. package/elements/static-elements/text-element.d.ts +4 -0
  20. package/elements/static-elements/text-element.js +44 -11
  21. package/elements/static-elements/text-element.metadata.json +1 -1
  22. package/elements/switch-indicator-light/switch-indicator-light-element.js +10 -3
  23. package/elements/view-operation/view-operation.element.d.ts +4 -0
  24. package/elements/view-operation/view-operation.element.js +31 -1
  25. package/elements/view-operation/view-operation.element.metadata.json +1 -1
  26. package/gui/gui-view.js +16 -1
  27. package/localization/localization.service.d.ts +1 -0
  28. package/localization/localization.service.js +1 -0
  29. package/localization/localization.service.metadata.json +1 -1
  30. package/localization/localization.service.zh_CN.js +1 -0
  31. package/localization/localization.service.zh_CN.metadata.json +1 -1
  32. package/model/base/font-setting-model.d.ts +10 -0
  33. package/model/base/font-setting-model.metadata.json +1 -1
  34. package/model/shared/state/state.d.ts +1 -0
  35. package/model/shared/state/state.js +1 -0
  36. package/model/shared/state/state.metadata.json +1 -1
  37. package/package.json +1 -1
@@ -3,5 +3,6 @@ export declare enum VariableStateEnum {
3
3
  Offline = 1,
4
4
  Unbind = 3,
5
5
  DataNormal = 9,
6
+ InvalidMonitor = 10,
6
7
  Abnormal = 99
7
8
  }
@@ -4,5 +4,6 @@ export var VariableStateEnum;
4
4
  VariableStateEnum[VariableStateEnum["Offline"] = 1] = "Offline";
5
5
  VariableStateEnum[VariableStateEnum["Unbind"] = 3] = "Unbind";
6
6
  VariableStateEnum[VariableStateEnum["DataNormal"] = 9] = "DataNormal";
7
+ VariableStateEnum[VariableStateEnum["InvalidMonitor"] = 10] = "InvalidMonitor";
7
8
  VariableStateEnum[VariableStateEnum["Abnormal"] = 99] = "Abnormal";
8
9
  })(VariableStateEnum || (VariableStateEnum = {}));
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"VariableStateEnum":{"Normal":0,"Offline":1,"Unbind":3,"DataNormal":9,"Abnormal":99}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"VariableStateEnum":{"Normal":0,"Offline":1,"Unbind":3,"DataNormal":9,"InvalidMonitor":10,"Abnormal":99}}}]
@@ -4,4 +4,5 @@ export interface VariableStore {
4
4
  * 老数据转换
5
5
  */
6
6
  getVariableName(input: GetVariableNameArgs): string;
7
+ getAllVariableNames?(): string[];
7
8
  }
@@ -65,26 +65,34 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
65
65
  case VariableStateEnum.Abnormal:
66
66
  currentState = State.Abnormal;
67
67
  break;
68
+ case VariableStateEnum.InvalidMonitor:
69
+ currentState = State.InvalidMonitor;
70
+ break;
68
71
  }
69
72
  return currentState;
70
73
  }
71
74
  changeState(state) {
72
75
  switch (state) {
76
+ case State.InvalidMonitor:
77
+ this.state = State.InvalidMonitor;
78
+ break;
73
79
  case State.Unbind:
74
- this.state = State.Unbind;
80
+ if (this.state !== State.InvalidMonitor) {
81
+ this.state = State.Unbind;
82
+ }
75
83
  break;
76
84
  case State.Offline:
77
- if (this.state !== State.Unbind) {
85
+ if (this.state !== State.Unbind && this.state !== State.InvalidMonitor) {
78
86
  this.state = State.Offline;
79
87
  }
80
88
  break;
81
89
  case State.Loading:
82
- if (this.state !== State.Unbind && this.state !== State.Offline) {
90
+ if (this.state !== State.Unbind && this.state !== State.Offline && this.state !== State.InvalidMonitor) {
83
91
  this.state = State.Loading;
84
92
  }
85
93
  break;
86
94
  case State.Abnormal:
87
- if (this.state !== State.Unbind && this.state !== State.Offline && this.state !== State.Loading) {
95
+ if (this.state !== State.Unbind && this.state !== State.Offline && this.state !== State.Loading && this.state !== State.InvalidMonitor) {
88
96
  this.state = State.Abnormal;
89
97
  }
90
98
  break;
@@ -123,6 +131,11 @@ export class StateControlElement extends ConditionalDynamicDisplayElement {
123
131
  title = this.localization.disable;
124
132
  stroke = '#ff4444';
125
133
  break;
134
+ case State.InvalidMonitor:
135
+ url = 'assets/img/loading.svg';
136
+ title = this.localization.invalidMonitor;
137
+ stroke = '#226abc';
138
+ break;
126
139
  default:
127
140
  url = 'assets/img/loading.svg';
128
141
  title = this.localization.loading;
@@ -7,6 +7,11 @@ export declare class TextElementModal {
7
7
  private isVariableText?;
8
8
  get Element(): SVGElement;
9
9
  constructor(content: string, font: Font, width: number, height: number, isVariableText?: boolean);
10
+ /**
11
+ * 更新字体样式
12
+ * @param font 新的字体样式
13
+ */
14
+ updateFont(font: Font): void;
10
15
  /**
11
16
  * 更新文本内容
12
17
  * @param content 新的文本内容
@@ -17,6 +17,13 @@ export class TextElementModal {
17
17
  get Element() {
18
18
  return this._element;
19
19
  }
20
+ /**
21
+ * 更新字体样式
22
+ * @param font 新的字体样式
23
+ */
24
+ updateFont(font) {
25
+ this.font = font;
26
+ }
20
27
  /**
21
28
  * 更新文本内容
22
29
  * @param content 新的文本内容
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"TextElementModal":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../../model","name":"Font","line":15,"character":39},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"boolean"}]}],"updateText":[{"__symbolic":"method"}],"getforeignObjectElement":[{"__symbolic":"method"}],"createNewForeignObjectText":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"TextElementModal":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../../model","name":"Font","line":15,"character":39},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"boolean"}]}],"updateFont":[{"__symbolic":"method"}],"updateText":[{"__symbolic":"method"}],"getforeignObjectElement":[{"__symbolic":"method"}],"createNewForeignObjectText":[{"__symbolic":"method"}]}}}}]
@@ -16,6 +16,7 @@ export declare class TextStateElement {
16
16
  private readonly languageService?;
17
17
  private readonly guiContext?;
18
18
  private readonly allowEmpty;
19
+ private readonly fontStyleCultures?;
19
20
  private textElement;
20
21
  private _element;
21
22
  get Element(): SVGElement;
@@ -23,7 +24,11 @@ export declare class TextStateElement {
23
24
  private faultFlickerInterval;
24
25
  private currentStateId;
25
26
  private languageChangeSubscription?;
26
- constructor(textStates: TextState[], width: number, height: number, logger: LoggerService, version?: number, faultFlickers?: IndicatorLightFaultFlicker[], textLibrarySetting?: TextLibrarySetting, textLibraryService?: TextLibraryService, languageService?: LanguageService, guiContext?: GuiContext, allowEmpty?: boolean);
27
+ constructor(textStates: TextState[], width: number, height: number, logger: LoggerService, version?: number, faultFlickers?: IndicatorLightFaultFlicker[], textLibrarySetting?: TextLibrarySetting, textLibraryService?: TextLibraryService, languageService?: LanguageService, guiContext?: GuiContext, allowEmpty?: boolean, fontStyleCultures?: {
28
+ [stateId: string]: {
29
+ [languageCode: string]: any;
30
+ };
31
+ });
27
32
  switchToState(stateId: number): void;
28
33
  /**
29
34
  * 订阅语种变化事件
@@ -38,6 +43,10 @@ export declare class TextStateElement {
38
43
  private removeForeignObjectlement;
39
44
  private doFaultFlicker;
40
45
  private clearFlickerInterval;
46
+ /**
47
+ * 获取指定状态在当前语种下的字体样式
48
+ */
49
+ private getFontForState;
41
50
  /**
42
51
  * 获取显示文本
43
52
  * 支持三种格式:
@@ -1,6 +1,6 @@
1
1
  import { Flicker } from '../../../model';
2
2
  export class TextStateElement {
3
- constructor(textStates, width, height, logger, version, faultFlickers, textLibrarySetting, textLibraryService, languageService, guiContext, allowEmpty = false) {
3
+ constructor(textStates, width, height, logger, version, faultFlickers, textLibrarySetting, textLibraryService, languageService, guiContext, allowEmpty = false, fontStyleCultures) {
4
4
  this.textStates = textStates;
5
5
  this.width = width;
6
6
  this.height = height;
@@ -12,6 +12,7 @@ export class TextStateElement {
12
12
  this.languageService = languageService;
13
13
  this.guiContext = guiContext;
14
14
  this.allowEmpty = allowEmpty;
15
+ this.fontStyleCultures = fontStyleCultures;
15
16
  this.faultFlickerStatus = false;
16
17
  this.faultFlickerInterval = undefined;
17
18
  this._element = document.createElementNS('http://www.w3.org/2000/svg', 'g');
@@ -36,7 +37,7 @@ export class TextStateElement {
36
37
  this.removeForeignObjectlement();
37
38
  return;
38
39
  }
39
- const font = textState.text.font;
40
+ const font = this.getFontForState(stateId, textState.text.font);
40
41
  if (!font) {
41
42
  this.removeForeignObjectlement();
42
43
  this.logger.debug('The font is undefined.');
@@ -158,6 +159,32 @@ export class TextStateElement {
158
159
  }
159
160
  }
160
161
  }
162
+ /**
163
+ * 获取指定状态在当前语种下的字体样式
164
+ */
165
+ getFontForState(stateId, defaultFont) {
166
+ if (!this.fontStyleCultures) {
167
+ return defaultFont;
168
+ }
169
+ const stateKey = stateId.toString();
170
+ if (!this.fontStyleCultures[stateKey]) {
171
+ return defaultFont;
172
+ }
173
+ const getTargetLanguage = () => {
174
+ var _a, _b, _c, _d, _e, _f;
175
+ const currentLanguageId = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getCurrentLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null;
176
+ const defaultLanguage = ((_d = this.languageService) === null || _d === void 0 ? void 0 : _d.getDefaultLanguage()) || 'zh-CN';
177
+ if (currentLanguageId === null || currentLanguageId === undefined) {
178
+ return defaultLanguage;
179
+ }
180
+ return ((_f = (_e = this.guiContext) === null || _e === void 0 ? void 0 : _e.getLanguageCultureById) === null || _f === void 0 ? void 0 : _f.call(_e, currentLanguageId)) || defaultLanguage;
181
+ };
182
+ const targetLanguage = getTargetLanguage();
183
+ if (this.fontStyleCultures[stateKey][targetLanguage]) {
184
+ return this.fontStyleCultures[stateKey][targetLanguage];
185
+ }
186
+ return defaultFont;
187
+ }
161
188
  /**
162
189
  * 获取显示文本
163
190
  * 支持三种格式:
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"TextStateElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"./text-state.model","name":"TextState","line":23,"character":45}]},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","module":"../../../logger","name":"LoggerService","line":26,"character":33},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"../../../model/switch-indicator-light/indicator-light-fault-flicker","name":"IndicatorLightFaultFlicker","line":28,"character":41}]},{"__symbolic":"reference","module":"../../../model/base/font-setting-model","name":"TextLibrarySetting","line":29,"character":46},{"__symbolic":"reference","module":"../../../service","name":"TextLibraryService","line":30,"character":46},{"__symbolic":"reference","module":"../../../service","name":"LanguageService","line":31,"character":43},{"__symbolic":"reference","module":"../../../gui/gui-context","name":"GuiContext","line":32,"character":38},{"__symbolic":"reference","name":"boolean"}]}],"switchToState":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"getforeignObjectElement":[{"__symbolic":"method"}],"removeForeignObjectlement":[{"__symbolic":"method"}],"doFaultFlicker":[{"__symbolic":"method"}],"clearFlickerInterval":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"TextStateElement":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"./text-state.model","name":"TextState","line":23,"character":45}]},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","module":"../../../logger","name":"LoggerService","line":26,"character":33},{"__symbolic":"reference","name":"number"},{"__symbolic":"reference","name":"Array","arguments":[{"__symbolic":"reference","module":"../../../model/switch-indicator-light/indicator-light-fault-flicker","name":"IndicatorLightFaultFlicker","line":28,"character":41}]},{"__symbolic":"reference","module":"../../../model/base/font-setting-model","name":"TextLibrarySetting","line":29,"character":46},{"__symbolic":"reference","module":"../../../service","name":"TextLibraryService","line":30,"character":46},{"__symbolic":"reference","module":"../../../service","name":"LanguageService","line":31,"character":43},{"__symbolic":"reference","module":"../../../gui/gui-context","name":"GuiContext","line":32,"character":38},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"error","message":"Expression form not supported","line":34,"character":45}]}],"switchToState":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}],"getforeignObjectElement":[{"__symbolic":"method"}],"removeForeignObjectlement":[{"__symbolic":"method"}],"doFaultFlicker":[{"__symbolic":"method"}],"clearFlickerInterval":[{"__symbolic":"method"}],"getFontForState":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}]}}}}]
@@ -27,6 +27,10 @@ export declare class HyperlinkElement extends ConditionalDynamicDisplayElement {
27
27
  */
28
28
  private reRenderText;
29
29
  private initGraphAndText;
30
+ /**
31
+ * 获取当前语种的字体样式
32
+ */
33
+ private getFontStyle;
30
34
  /**
31
35
  * 获取显示文本
32
36
  * 如果配置了文本库,则从文本库中获取对应语种的文本
@@ -56,9 +56,9 @@ export class HyperlinkElement extends ConditionalDynamicDisplayElement {
56
56
  if (!this.textElementModal || !this.model.size) {
57
57
  return;
58
58
  }
59
- // 获取新的显示文本
60
59
  const displayText = this.getDisplayText();
61
- // 直接更新文本内容,而不是重新创建元素
60
+ const font = this.getFontStyle();
61
+ this.textElementModal.updateFont(font);
62
62
  this.textElementModal.updateText(displayText);
63
63
  }
64
64
  initGraphAndText() {
@@ -72,7 +72,39 @@ export class HyperlinkElement extends ConditionalDynamicDisplayElement {
72
72
  graphStateElement.switchToState(0);
73
73
  this.$element.prepend(graphStateElement.Element);
74
74
  }
75
- const font = {
75
+ const font = this.getFontStyle();
76
+ // 获取显示文本(支持文本库)
77
+ const displayText = this.getDisplayText();
78
+ this.textElementModal = new TextElementModal(displayText, font, width, height);
79
+ this.$element.append(this.textElementModal.Element);
80
+ }
81
+ /**
82
+ * 获取当前语种的字体样式
83
+ */
84
+ getFontStyle() {
85
+ const getTargetLanguage = () => {
86
+ var _a, _b, _c, _d, _e, _f;
87
+ const currentLanguageId = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getCurrentLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null;
88
+ const defaultLanguage = ((_d = this.languageService) === null || _d === void 0 ? void 0 : _d.getDefaultLanguage()) || 'zh-CN';
89
+ if (currentLanguageId === null || currentLanguageId === undefined) {
90
+ return defaultLanguage;
91
+ }
92
+ return ((_f = (_e = this.guiContext) === null || _e === void 0 ? void 0 : _e.getLanguageCultureById) === null || _f === void 0 ? void 0 : _f.call(_e, currentLanguageId)) || defaultLanguage;
93
+ };
94
+ const targetLanguage = getTargetLanguage();
95
+ if (this.model.fontStyleCultures && this.model.fontStyleCultures[targetLanguage]) {
96
+ const style = this.model.fontStyleCultures[targetLanguage];
97
+ return {
98
+ isUnderline: style.isUnderline,
99
+ isBold: this.isBold(style.fontStyle),
100
+ isItalic: this.isItalic(style.fontStyle),
101
+ fontSize: style.fontSize,
102
+ fontFamily: this.fontFamily(style.fontStyle),
103
+ color: style.fontColor,
104
+ textAlign: style.textAlign
105
+ };
106
+ }
107
+ return {
76
108
  isUnderline: this.model.isUnderline,
77
109
  isBold: this.isBold(this.model.font),
78
110
  isItalic: this.isItalic(this.model.font),
@@ -81,10 +113,6 @@ export class HyperlinkElement extends ConditionalDynamicDisplayElement {
81
113
  color: this.model.stroke,
82
114
  textAlign: this.model.textAlign
83
115
  };
84
- // 获取显示文本(支持文本库)
85
- const displayText = this.getDisplayText();
86
- this.textElementModal = new TextElementModal(displayText, font, width, height);
87
- this.$element.append(this.textElementModal.Element);
88
116
  }
89
117
  /**
90
118
  * 获取显示文本
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"HyperlinkElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":14,"character":38},"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":21,"character":77},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":22,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":22,"character":67},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":22,"character":111},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":24,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":25,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":26,"character":38}]}],"dispose":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"reRenderText":[{"__symbolic":"method"}],"initGraphAndText":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"HyperlinkElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":14,"character":38},"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":21,"character":77},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":22,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":22,"character":67},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":22,"character":111},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":24,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":25,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":26,"character":38}]}],"dispose":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"reRenderText":[{"__symbolic":"method"}],"initGraphAndText":[{"__symbolic":"method"}],"getFontStyle":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}]}}}}]
@@ -26,6 +26,10 @@ export declare class TextElement extends ConditionalDynamicDisplayElement {
26
26
  * 重新渲染文本
27
27
  */
28
28
  private reRenderText;
29
+ /**
30
+ * 获取当前语种的字体样式
31
+ */
32
+ private getFontStyle;
29
33
  /**
30
34
  * 获取显示文本
31
35
  * 如果配置了文本库,则从文本库中获取对应语种的文本
@@ -20,15 +20,7 @@ export class TextElement extends ConditionalDynamicDisplayElement {
20
20
  graphStateElement.switchToState(0);
21
21
  this.$element.prepend(graphStateElement.Element);
22
22
  }
23
- const font = {
24
- isUnderline: this.model.isUnderline,
25
- isBold: this.isBold(this.model.font),
26
- isItalic: this.isItalic(this.model.font),
27
- fontSize: this.model.fontSize,
28
- fontFamily: this.fontFamily(this.model.font),
29
- color: this.model.stroke,
30
- textAlign: this.model.textAlign
31
- };
23
+ const font = this.getFontStyle();
32
24
  // 获取显示文本(支持文本库)
33
25
  const displayText = this.getDisplayText();
34
26
  this.textElementModal = new TextElementModal(displayText, font, width, height);
@@ -72,11 +64,52 @@ export class TextElement extends ConditionalDynamicDisplayElement {
72
64
  if (!this.textElementModal || !this.model.size) {
73
65
  return;
74
66
  }
75
- // 获取新的显示文本
67
+ // 获取新的显示文本和样式
76
68
  const displayText = this.getDisplayText();
77
- // 直接更新文本内容,而不是重新创建元素
69
+ const font = this.getFontStyle();
70
+ // 更新样式和文本内容
71
+ this.textElementModal.updateFont(font);
78
72
  this.textElementModal.updateText(displayText);
79
73
  }
74
+ /**
75
+ * 获取当前语种的字体样式
76
+ */
77
+ getFontStyle() {
78
+ // 获取目标语种
79
+ const getTargetLanguage = () => {
80
+ var _a, _b, _c, _d, _e, _f;
81
+ const currentLanguageId = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getCurrentLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null;
82
+ const defaultLanguage = ((_d = this.languageService) === null || _d === void 0 ? void 0 : _d.getDefaultLanguage()) || 'zh-CN';
83
+ if (currentLanguageId === null || currentLanguageId === undefined) {
84
+ return defaultLanguage;
85
+ }
86
+ return ((_f = (_e = this.guiContext) === null || _e === void 0 ? void 0 : _e.getLanguageCultureById) === null || _f === void 0 ? void 0 : _f.call(_e, currentLanguageId)) || defaultLanguage;
87
+ };
88
+ const targetLanguage = getTargetLanguage();
89
+ // 如果有多语种样式配置,优先使用
90
+ if (this.model.fontStyleCultures && this.model.fontStyleCultures[targetLanguage]) {
91
+ const style = this.model.fontStyleCultures[targetLanguage];
92
+ return {
93
+ isUnderline: style.isUnderline,
94
+ isBold: this.isBold(style.fontStyle),
95
+ isItalic: this.isItalic(style.fontStyle),
96
+ fontSize: style.fontSize,
97
+ fontFamily: this.fontFamily(style.fontStyle),
98
+ color: style.fontColor,
99
+ textAlign: style.textAlign
100
+ };
101
+ }
102
+ // 回退到全局样式
103
+ return {
104
+ isUnderline: this.model.isUnderline,
105
+ isBold: this.isBold(this.model.font),
106
+ isItalic: this.isItalic(this.model.font),
107
+ fontSize: this.model.fontSize,
108
+ fontFamily: this.fontFamily(this.model.font),
109
+ color: this.model.stroke,
110
+ textAlign: this.model.textAlign
111
+ };
112
+ }
80
113
  /**
81
114
  * 获取显示文本
82
115
  * 如果配置了文本库,则从文本库中获取对应语种的文本
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"TextElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":12,"character":33},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":19,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":19,"character":48},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":19,"character":77},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":20,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":20,"character":67},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":20,"character":111},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":22,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":23,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":24,"character":38}]}],"dispose":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"reRenderText":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}],"handleTextValue":[{"__symbolic":"method"}],"initGraph":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"TextElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-dynamic-display-element","name":"ConditionalDynamicDisplayElement","line":12,"character":33},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":19,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":19,"character":48},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":19,"character":77},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":20,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":20,"character":67},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":20,"character":111},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":22,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":23,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":24,"character":38}]}],"dispose":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"reRenderText":[{"__symbolic":"method"}],"getFontStyle":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}],"handleTextValue":[{"__symbolic":"method"}],"initGraph":[{"__symbolic":"method"}]}}}}]
@@ -2,7 +2,7 @@ import { LOGGER_SERVICE_TOKEN } from '../../logger';
2
2
  import * as d3 from 'd3-selection';
3
3
  import { isUndefined } from 'lodash';
4
4
  import { IndicatorLightType, SwitchType, State, BitSwitchOperation } from '../../model';
5
- import { VariableState } from '../../communication';
5
+ import { VariableState, VariableStateEnum } from '../../communication';
6
6
  import { ConditionalEnableElement } from '../base/conditional-enable-element';
7
7
  import { GraphStateElement } from '../shared/graph/graph-state-element';
8
8
  import { TextStateElement } from '../shared/text/text-state-element';
@@ -195,11 +195,18 @@ export class SwitchIndicatorLightElement extends ConditionalEnableElement {
195
195
  }
196
196
  }
197
197
  initIndictorLightOperator() {
198
+ var _a, _b, _c, _d;
198
199
  const settings = this.model.indicatorLightSettings;
199
200
  if (settings.settings.variableName) {
200
201
  const variable = new VariableDefinition(settings.settings.variableName, settings.settings.variableGroupName, settings.settings.dataSourceCode, settings.settings.variableVersion);
201
- this.addElementState(new VariableState(VariableUtil.getConvertedVariableName(this.variableStore, variable), undefined));
202
+ const convertedName = VariableUtil.getConvertedVariableName(this.variableStore, variable);
203
+ this.addElementState(new VariableState(convertedName, undefined));
202
204
  this.initState();
205
+ const validNames = (_d = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.configStore) === null || _b === void 0 ? void 0 : _b.variableStore) === null || _c === void 0 ? void 0 : _c.getAllVariableNames) === null || _d === void 0 ? void 0 : _d.call(_c);
206
+ if (validNames && !validNames.includes(convertedName)) {
207
+ this.updateElementStates([new VariableState(convertedName, VariableStateEnum.InvalidMonitor)]);
208
+ return;
209
+ }
203
210
  }
204
211
  switch (settings.type) {
205
212
  case IndicatorLightType.Bit:
@@ -246,7 +253,7 @@ export class SwitchIndicatorLightElement extends ConditionalEnableElement {
246
253
  this.graphStateElement = new GraphStateElement(this.model.graphSetting, width, height, this.graphStore, this.logger, this.model.version, this.model.states);
247
254
  this.$element.append(this.graphStateElement.Element);
248
255
  }
249
- this.textStateElement = new TextStateElement(this.model.states, width, height, this.logger, this.model.version, this.model.states, this.model.textLibrary, this.textLibraryService, this.languageService, this.guiContext, true);
256
+ this.textStateElement = new TextStateElement(this.model.states, width, height, this.logger, this.model.version, this.model.states, this.model.textLibrary, this.textLibraryService, this.languageService, this.guiContext, true, this.model.fontStyleCultures);
250
257
  this.$element.append(this.textStateElement.Element);
251
258
  }
252
259
  /**
@@ -43,6 +43,10 @@ export declare class ViewOperationElement extends ConditionalEnableElement {
43
43
  * 订阅语种变化事件
44
44
  */
45
45
  private subscribeLanguageChange;
46
+ /**
47
+ * 获取当前语种的字体样式
48
+ */
49
+ private getFontStyle;
46
50
  /**
47
51
  * 更新文本内容(支持文本库和语种切换)
48
52
  */
@@ -37,7 +37,7 @@ export class ViewOperationElement extends ConditionalEnableElement {
37
37
  this.$element.find('text').remove();
38
38
  this.initGraph(width, height);
39
39
  this.rootElement.append('rect').attr('id', 'StateFrame').attr('width', width).attr('height', height).attr('fill', 'transparent');
40
- const font = Object.assign(Object.assign({}, this.model.label.font), { fontFamily: this.model.label.font.fontFamily || 'msyh' });
40
+ const font = this.getFontStyle();
41
41
  this.textElementModal = new TextElementModal(this.getDisplayText(), font, width, height);
42
42
  this.$element.append(this.textElementModal.Element);
43
43
  this.switchToState(0);
@@ -217,11 +217,41 @@ export class ViewOperationElement extends ConditionalEnableElement {
217
217
  });
218
218
  }
219
219
  }
220
+ /**
221
+ * 获取当前语种的字体样式
222
+ */
223
+ getFontStyle() {
224
+ const getTargetLanguage = () => {
225
+ var _a, _b, _c, _d, _e, _f;
226
+ const currentLanguageId = (_c = (_b = (_a = this.guiContext) === null || _a === void 0 ? void 0 : _a.getCurrentLanguageId) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : null;
227
+ const defaultLanguage = ((_d = this.languageService) === null || _d === void 0 ? void 0 : _d.getDefaultLanguage()) || 'zh-CN';
228
+ if (currentLanguageId === null || currentLanguageId === undefined) {
229
+ return defaultLanguage;
230
+ }
231
+ return ((_f = (_e = this.guiContext) === null || _e === void 0 ? void 0 : _e.getLanguageCultureById) === null || _f === void 0 ? void 0 : _f.call(_e, currentLanguageId)) || defaultLanguage;
232
+ };
233
+ const targetLanguage = getTargetLanguage();
234
+ if (this.model.fontStyleCultures && this.model.fontStyleCultures[targetLanguage]) {
235
+ const style = this.model.fontStyleCultures[targetLanguage];
236
+ return {
237
+ isUnderline: style.isUnderline,
238
+ isBold: style.isBold,
239
+ isItalic: style.isItalic,
240
+ fontSize: style.fontSize,
241
+ fontFamily: style.fontFamily || 'msyh',
242
+ color: style.color,
243
+ textAlign: style.textAlign
244
+ };
245
+ }
246
+ return Object.assign(Object.assign({}, this.model.label.font), { fontFamily: this.model.label.font.fontFamily || 'msyh' });
247
+ }
220
248
  /**
221
249
  * 更新文本内容(支持文本库和语种切换)
222
250
  */
223
251
  updateTextContent() {
224
252
  if (this.textElementModal) {
253
+ const font = this.getFontStyle();
254
+ this.textElementModal.updateFont(font);
225
255
  this.textElementModal.updateText(this.getDisplayText());
226
256
  }
227
257
  }
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"ViewOperationElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-enable-element","name":"ConditionalEnableElement","line":23,"character":42},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":36,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":36,"character":48},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":37,"character":39},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":38,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":39,"character":23},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":40,"character":37},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":41,"character":27},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":42,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":43,"character":42},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":44,"character":22},{"__symbolic":"reference","module":"../../view/popup-view.service","name":"PopupViewService","line":45,"character":43},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":47,"character":29},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":49,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":50,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":51,"character":38}]}],"initElement":[{"__symbolic":"method"}],"switchToState":[{"__symbolic":"method"}],"initGraph":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"executeViewOperation":[{"__symbolic":"method"}],"toggleView":[{"__symbolic":"method"}],"popView":[{"__symbolic":"method"}],"closeView":[{"__symbolic":"method"}],"moveView":[{"__symbolic":"method"}],"recordViewOperation":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"updateTextContent":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}]}}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"ViewOperationElement":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"../base/conditional-enable-element","name":"ConditionalEnableElement","line":23,"character":42},"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"error","message":"Could not resolve type","line":36,"character":25,"context":{"typeName":"HTMLElement"}},{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":36,"character":48},{"__symbolic":"reference","module":"ngx-bootstrap/modal","name":"BsModalService","line":37,"character":39},{"__symbolic":"reference","module":"../../communication","name":"VariableCommunicator","line":38,"character":30},{"__symbolic":"reference","module":"../../config","name":"VariableStore","line":39,"character":23},{"__symbolic":"reference","module":"../../config","name":"GraphStore","line":40,"character":37},{"__symbolic":"reference","module":"../../service","name":"PermissionChecker","line":41,"character":27},{"__symbolic":"reference","module":"../../service","name":"OperationRecordService","line":42,"character":49},{"__symbolic":"reference","module":"../../security","name":"SecurityChecker","line":43,"character":42},{"__symbolic":"reference","module":"../../localization","name":"Localization","line":44,"character":22},{"__symbolic":"reference","module":"../../view/popup-view.service","name":"PopupViewService","line":45,"character":43},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":47,"character":29},{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../../service","name":"TextLibraryService","line":49,"character":46},{"__symbolic":"reference","module":"../../service","name":"LanguageService","line":50,"character":43},{"__symbolic":"reference","module":"../../gui/gui-context","name":"GuiContext","line":51,"character":38}]}],"initElement":[{"__symbolic":"method"}],"switchToState":[{"__symbolic":"method"}],"initGraph":[{"__symbolic":"method"}],"checkElementPassword":[{"__symbolic":"method"}],"executeViewOperation":[{"__symbolic":"method"}],"toggleView":[{"__symbolic":"method"}],"popView":[{"__symbolic":"method"}],"closeView":[{"__symbolic":"method"}],"moveView":[{"__symbolic":"method"}],"recordViewOperation":[{"__symbolic":"method"}],"subscribeLanguageChange":[{"__symbolic":"method"}],"getFontStyle":[{"__symbolic":"method"}],"updateTextContent":[{"__symbolic":"method"}],"getDisplayText":[{"__symbolic":"method"}],"dispose":[{"__symbolic":"method"}]}}}}]
package/gui/gui-view.js CHANGED
@@ -2,7 +2,7 @@ import { LOGGER_SERVICE_TOKEN } from '../logger';
2
2
  import * as d3 from 'd3-selection';
3
3
  import { each, forEach } from 'lodash';
4
4
  import { map } from 'rxjs/operators';
5
- import { VariableStateEnum } from '../communication';
5
+ import { VariableStateEnum, VariableState } from '../communication';
6
6
  import { MainElement } from '../elements/main-element';
7
7
  import { PerViewVariableCommunicator } from '../elements/per-view-variable-communicator';
8
8
  import { ViewPopupBackdropType, ViewPopupLocationType } from '../model';
@@ -64,6 +64,7 @@ export class GuiView {
64
64
  this.logger.debug('[GUI] View loaded.');
65
65
  }
66
66
  loadElementState() {
67
+ var _a, _b;
67
68
  if (!this.mainElement) {
68
69
  return;
69
70
  }
@@ -108,6 +109,20 @@ export class GuiView {
108
109
  });
109
110
  normalVariablesForState.splice(normalVariablesForState.indexOf('设备状态'), 1);
110
111
  }
112
+ const validVariableNames = (_b = (_a = this.context.configStore.variableStore).getAllVariableNames) === null || _b === void 0 ? void 0 : _b.call(_a);
113
+ if (validVariableNames) {
114
+ const invalidVariables = normalVariablesForState.filter(name => !validVariableNames.includes(name));
115
+ if (invalidVariables.length > 0) {
116
+ const unbindStates = invalidVariables.map(name => new VariableState(name, VariableStateEnum.InvalidMonitor));
117
+ this.mainElement.reportVariableStates(unbindStates);
118
+ invalidVariables.forEach(name => {
119
+ const idx = normalVariablesForState.indexOf(name);
120
+ if (idx !== -1) {
121
+ normalVariablesForState.splice(idx, 1);
122
+ }
123
+ });
124
+ }
125
+ }
111
126
  if (normalVariablesForState.length === 0) {
112
127
  return;
113
128
  }
@@ -29,6 +29,7 @@ export interface Localization {
29
29
  offline: any;
30
30
  abnormal: any;
31
31
  disable: any;
32
+ invalidMonitor: any;
32
33
  permissiontip: any;
33
34
  conditionIsNotMetTip: any;
34
35
  chartNoData: any;
@@ -29,6 +29,7 @@ export const DefaultLocalization = {
29
29
  offline: 'Offline',
30
30
  abnormal: 'Data abnormal',
31
31
  disable: 'Disable',
32
+ invalidMonitor: 'Element binding monitor point is invalid',
32
33
  permissiontip: 'You have no permission to operate.',
33
34
  conditionIsNotMetTip: 'Operation conditions not met or variable anomalies.',
34
35
  chartNoData: 'No Data Available',
@@ -1 +1 @@
1
- [{"__symbolic":"module","version":4,"metadata":{"LOCALIZATION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":32},"arguments":["fc.gui.loc"]},"Localization":{"__symbolic":"interface"},"DefaultLocalization":{"loadFailed":"Load failed.","setting":"Setting","submit":"Submit","submitting":"Submitting···","numericalValueRequired":"Numerical value can't be emtpy","invalidNumericalValue":"Numerical value is not valid","writeValueTimeout":"Write value error: Timeout","binaryType":"Binary","decimalType":"Decimal","hexadecimalType":"Hexadecimal","stringType":"String","numericalValueTooLong":"Numerical value too long","fractionDigitsMustLessThan":"Fraction digits must be less than ","canNotBeNegative":"Can not be negative","valueOutOfRange":"Numerical value is out of range","timeout":"timeout","confirmOperationPrompt":"Are you sure you want to perform this operation?","confirm":"Yes","cancel":"Cancel","characterInputRequired":"Character input can't be empty","character":"(Character)","characterOutofRange":"Character length is out of range","writeValueRange":"Write value range","loading":"Loading","unbind":"Unbind","offline":"Offline","abnormal":"Data abnormal","disable":"Disable","permissiontip":"You have no permission to operate.","conditionIsNotMetTip":"Operation conditions not met or variable anomalies.","chartNoData":"No Data Available","lastThirtyMinutes":"Last thirty minutes","lastOneHour":"Last one hour","lastEightHour":"Last eight hours","lastTwentyFourHours":"Last 24 hours","lastSevenDays":"Last 7 days","lastThirtyDays":"Last 30 days","lastOneYear":"Last 1 year","grouped":"Grouped","stacked":"Stacked","passwordVerify":"Password verifiers","passwordError":"Password error","password":"Password","passwordToolTip":"Password error, please re-enter","passwordRequired":"Password can't be empty","invalidVideoAddress":"Invalid video address","unconfiguredVideoAddress":"Unconfigured Video Address","weatherNotSupport":"Location not supported","weatherNotAddress":"Address not configured","weatherNotAvailable":"Address not yet available","airQualityNotSupport":"Location not supported","airQualityNotAddress":"Address not configured","airQualityNotAvailable":"Address not yet available"}}}]
1
+ [{"__symbolic":"module","version":4,"metadata":{"LOCALIZATION":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":32},"arguments":["fc.gui.loc"]},"Localization":{"__symbolic":"interface"},"DefaultLocalization":{"loadFailed":"Load failed.","setting":"Setting","submit":"Submit","submitting":"Submitting···","numericalValueRequired":"Numerical value can't be emtpy","invalidNumericalValue":"Numerical value is not valid","writeValueTimeout":"Write value error: Timeout","binaryType":"Binary","decimalType":"Decimal","hexadecimalType":"Hexadecimal","stringType":"String","numericalValueTooLong":"Numerical value too long","fractionDigitsMustLessThan":"Fraction digits must be less than ","canNotBeNegative":"Can not be negative","valueOutOfRange":"Numerical value is out of range","timeout":"timeout","confirmOperationPrompt":"Are you sure you want to perform this operation?","confirm":"Yes","cancel":"Cancel","characterInputRequired":"Character input can't be empty","character":"(Character)","characterOutofRange":"Character length is out of range","writeValueRange":"Write value range","loading":"Loading","unbind":"Unbind","offline":"Offline","abnormal":"Data abnormal","disable":"Disable","invalidMonitor":"Element binding monitor point is invalid","permissiontip":"You have no permission to operate.","conditionIsNotMetTip":"Operation conditions not met or variable anomalies.","chartNoData":"No Data Available","lastThirtyMinutes":"Last thirty minutes","lastOneHour":"Last one hour","lastEightHour":"Last eight hours","lastTwentyFourHours":"Last 24 hours","lastSevenDays":"Last 7 days","lastThirtyDays":"Last 30 days","lastOneYear":"Last 1 year","grouped":"Grouped","stacked":"Stacked","passwordVerify":"Password verifiers","passwordError":"Password error","password":"Password","passwordToolTip":"Password error, please re-enter","passwordRequired":"Password can't be empty","invalidVideoAddress":"Invalid video address","unconfiguredVideoAddress":"Unconfigured Video Address","weatherNotSupport":"Location not supported","weatherNotAddress":"Address not configured","weatherNotAvailable":"Address not yet available","airQualityNotSupport":"Location not supported","airQualityNotAddress":"Address not configured","airQualityNotAvailable":"Address not yet available"}}}]
@@ -27,6 +27,7 @@ export const Localization_zh_CN = {
27
27
  offline: '离线',
28
28
  abnormal: '数据异常',
29
29
  disable: '禁用',
30
+ invalidMonitor: '元件绑定的监控点无效',
30
31
  permissiontip: '您无权限执行此操作',
31
32
  conditionIsNotMetTip: '操作条件不满足或逻辑控制变量异常',
32
33
  chartNoData: '无数据',