@flexem/fc-gui 3.0.0-alpha.96 → 3.0.0-alpha.98

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -388,7 +388,55 @@
388
388
  #### Bug Fix
389
389
  1. FLEXCLOUD-2612 组态元件写值超时
390
390
 
391
+ ## 3.0.0-alpha.87(2023-05-31)
392
+ ### Web端
393
+ #### Bug Fix
394
+ 1. FLEXCLOUD-2698 【app-ios】视频元件放大后缩小不应占满整个组态
395
+
396
+ ## 3.0.0-alpha.88(2023-06-01)
397
+ ### Web端
398
+ #### Bug Fix
399
+ 1. FLEXCLOUD-2699、FLEXCLOUD-2700 将视频元件还原为在组态外渲染,并且在弹窗时隐藏视频
400
+
401
+ ## 3.0.0-alpha.89(2023-06-01)
402
+ ### Web端
403
+ #### Bug Fix
404
+ 1. FLEXCLOUD-2699、FLEXCLOUD-2700 修改视频元件,优化视频显示逻辑
405
+
406
+ ## 3.0.0-alpha.90(2023-06-06)
407
+ ### Web端
408
+ #### Bug Fix
409
+ 1. 安卓和鸿蒙系统上,组态横屏时不再显示状态栏
410
+ 2. 修复在鸿蒙系统的手机上,视频元件的控制按钮显示异常的问题
411
+ 3. 修复ios系统中视频放大缩小后,画面会变形的问题
412
+
413
+ ## 3.0.0-alpha.92(2023-07-18)
414
+ ### Web端
415
+ #### Features
416
+ 1. FLEXCLOUD-2710 【氚云20230621000600】组态历史曲线表:历史曲线增加点位标记,便于直观看到曲线采样点的变化
417
+
418
+ ## 3.0.0-alpha.93(2023-07-21)
419
+ ### Web端
420
+ #### Features
421
+ 1. FLEXCLOUD-2741 【氚云20230714001409】模板的模拟功能,无法进行写值,一直提示提交中
422
+
423
+ ## 3.0.0-alpha.94(2023-07-21)
424
+ ### Web端
425
+ #### Features
426
+ 1. FLEXCLOUD-2710 【氚云20230621000600】组态历史曲线表:历史曲线增加点位标记,便于直观看到曲线采样点的变化
427
+ - 修改标记点大小
428
+
391
429
  ## 3.0.0-alpha.96(2023-09-26)
392
430
  ### Web端
393
431
  #### Bug Fix
394
- 1. FLEXCLOUD-2864 2018年创建的模板组态写值失败(在补丁包v2.22.0-Hotfix5中使用,其它分支不要用)
432
+ 1. FLEXCLOUD-2864 2018年创建的模板组态写值失败(在补丁包v2.22.0-Hotfix5中使用,其它分支不要用)
433
+
434
+ ## 3.0.0-alpha.97(2023-09-26)
435
+ ### Web端
436
+ #### Bug Fix
437
+ 1. FLEXCLOUD-2864 2018年创建的模板组态写值失败(给APP补丁包v2.8.0中使用)
438
+
439
+ ## 3.0.0-alpha.98(2023-09-26)
440
+ ### Web端
441
+ #### Bug Fix
442
+ 1. FLEXCLOUD-2864 2018年创建的模板组态写值失败(在开发分支上使用)
@@ -33767,7 +33767,7 @@ function styleFunction(name, value, priority) {
33767
33767
  };
33768
33768
  }
33769
33769
 
33770
- /* harmony default export */ var style = (function(name, value, priority) {
33770
+ /* harmony default export */ var selection_style = (function(name, value, priority) {
33771
33771
  return arguments.length > 1
33772
33772
  ? this.each((value == null
33773
33773
  ? styleRemove : typeof value === "function"
@@ -34222,7 +34222,7 @@ Selection.prototype = selection_selection.prototype = {
34222
34222
  empty: selection_empty,
34223
34223
  each: each,
34224
34224
  attr: attr,
34225
- style: style,
34225
+ style: selection_style,
34226
34226
  property: property,
34227
34227
  classed: classed,
34228
34228
  text: selection_text,
@@ -36357,6 +36357,7 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
36357
36357
  operationButtonMargin: 4
36358
36358
  };
36359
36359
  this.elementStatus = HistoricalCurveElementStatus.Loading;
36360
+ this.data = [];
36360
36361
  this.logger = injector.get(logger["b" /* LOGGER_SERVICE_TOKEN */]);
36361
36362
  this.localization = injector.get(_tmp_localization["b" /* LOCALIZATION */]);
36362
36363
  this.timePeriods = this.getValidTimePeriods();
@@ -36468,6 +36469,7 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
36468
36469
  Object(lodash["each"])(result, v => values.push({ x: moment(v.time).local().toDate().valueOf(), y: v.values[key] }));
36469
36470
  data.push({ key: channel.name, area: channel.projectEnabled, values: values });
36470
36471
  });
36472
+ this.data = data;
36471
36473
  nv_d3["addGraph"](() => {
36472
36474
  if (this.model.displaySetting.curveType === CurveType.BarGroup || this.model.displaySetting.curveType === CurveType.BarStack) {
36473
36475
  return this.getMultiBarWithFocusChart(chartWidth, chartHeight, data);
@@ -36477,6 +36479,50 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
36477
36479
  }
36478
36480
  });
36479
36481
  }
36482
+ initPoint() {
36483
+ try {
36484
+ const legendList = this.$element
36485
+ .find('.nv-legend')
36486
+ .find('.nv-series');
36487
+ let hiddenCount = 0;
36488
+ for (let i = 0; i < this.data.length; i++) {
36489
+ const channel = this.model.dataSetting.channels[i];
36490
+ if (legendList.eq(i).children().eq(0).css('fill-opacity') === '1') {
36491
+ const pointList = this.$element
36492
+ .find('.nv-scatterWrap')
36493
+ .find('.nv-series-' + (i - hiddenCount))
36494
+ .find('.nv-point');
36495
+ if (pointList && pointList.length) {
36496
+ for (let j = 0; j < pointList.length; j++) {
36497
+ const point = pointList.eq(j);
36498
+ const previousPoint = pointList.eq(j - 1);
36499
+ if (j && point.attr('transform').split(',')[1] !== previousPoint.attr('transform').split(',')[1]) {
36500
+ if (channel.enablePoint && channel.pointColor) {
36501
+ const pointStyle = {
36502
+ 'stroke-opacity': 1,
36503
+ 'stroke-width': '2px',
36504
+ 'stroke': channel.pointColor,
36505
+ 'fill-opacity': 1,
36506
+ 'fill': channel.pointColor
36507
+ };
36508
+ point.addClass('nv-mark-point');
36509
+ point.css(pointStyle);
36510
+ previousPoint.addClass('nv-mark-point');
36511
+ previousPoint.css(pointStyle);
36512
+ }
36513
+ }
36514
+ }
36515
+ }
36516
+ }
36517
+ else {
36518
+ hiddenCount++;
36519
+ }
36520
+ }
36521
+ }
36522
+ catch (e) {
36523
+ console.log(e);
36524
+ }
36525
+ }
36480
36526
  getLineChart(chartWidth, chartHeight, data) {
36481
36527
  const chart = nv_d3["models"].lineChart().showLegend(true)
36482
36528
  .margin({ top: 0, bottom: 0, left: this.displayOption.marginLeft, right: this.displayOption.marginRight })
@@ -36492,6 +36538,19 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
36492
36538
  }
36493
36539
  this.renderCommonProperty(chart, chartWidth, chartHeight, data);
36494
36540
  this.renderOperationArea(chartWidth, chartHeight);
36541
+ this.initPoint();
36542
+ chart.legend.dispatch.on('legendClick', () => {
36543
+ setTimeout(() => {
36544
+ this.$element.find('.nv-mark-point').css({
36545
+ 'stroke-opacity': 0,
36546
+ 'stroke-width': 0,
36547
+ 'stroke': 'unset',
36548
+ 'fill-opacity': 0,
36549
+ 'fill': 'unset'
36550
+ }).removeClass('nv-mark-point');
36551
+ this.initPoint();
36552
+ }, 1);
36553
+ });
36495
36554
  return chart;
36496
36555
  }
36497
36556
  getMultiBarWithFocusChart(chartWidth, chartHeight, data) {
@@ -36535,6 +36594,18 @@ class historical_curve_element_HistoricalCurveElement extends conditional_displa
36535
36594
  chart.tooltip.headerFormatter(d => this.timeFormat(d, '%x %X'));
36536
36595
  if (this.model.displaySetting.showAxis) {
36537
36596
  chart.xAxis.showMaxMin(true).tickFormat(d => {
36597
+ this.$element.find('.nv-mark-point').css({
36598
+ 'stroke-opacity': 0,
36599
+ 'stroke-width': 0,
36600
+ 'stroke': 'unset',
36601
+ 'fill-opacity': 0,
36602
+ 'fill': 'unset'
36603
+ }).removeClass('nv-mark-point');
36604
+ clearTimeout(this.timer);
36605
+ this.timer = undefined;
36606
+ this.timer = setTimeout(() => {
36607
+ this.initPoint();
36608
+ }, 100);
36538
36609
  if (this.currentTimePeriod === 3 || this.currentTimePeriod === 4 || this.currentTimePeriod === 5) {
36539
36610
  return this.timeFormat(d, '%y-%m-%d');
36540
36611
  }
@@ -39313,6 +39384,9 @@ class view_operation_element_ViewOperationElement extends conditional_enable_ele
39313
39384
  const viewIndex = this.model.viewIndex;
39314
39385
  if (null != viewIndex) {
39315
39386
  this.popupViewService.popView(viewIndex, this.hostContainerId, this.el).subscribe(() => this.recordViewOperation(), error => this.logger.error(`ToggleView(${viewIndex}) failed. ${error}`));
39387
+ $(`#${this.hostContainerId} video`)
39388
+ .addClass('video-hidden')
39389
+ .css('visibility', 'hidden');
39316
39390
  }
39317
39391
  else {
39318
39392
  this.logger.error('[GUI]Toggle View:invalid view index');
@@ -39320,6 +39394,11 @@ class view_operation_element_ViewOperationElement extends conditional_enable_ele
39320
39394
  }
39321
39395
  closeView() {
39322
39396
  this.popupViewService.closeView();
39397
+ if ($(`#${this.hostContainerId} > svg > svg`).length === 0) {
39398
+ $(`#${this.hostContainerId} .video-hidden`)
39399
+ .removeClass('video-hidden')
39400
+ .css('visibility', 'visible');
39401
+ }
39323
39402
  this.recordViewOperation();
39324
39403
  }
39325
39404
  moveView(movementX, movementY) {
@@ -39466,6 +39545,7 @@ class video_element_VideoElement extends conditional_display_element_Conditional
39466
39545
  this.guiSize = guiSize;
39467
39546
  this.svgRootClass = svgRootClass;
39468
39547
  this.videoId = '';
39548
+ this.isFullscreen = false;
39469
39549
  this.isMobileMode = _tmp_settings["a" /* DisplayMode */].Mobile === injector.get(_tmp_settings["b" /* GlobalSettings */]).displayMode;
39470
39550
  this.localization = injector.get(_tmp_localization["b" /* LOCALIZATION */]);
39471
39551
  this.init();
@@ -39501,60 +39581,84 @@ class video_element_VideoElement extends conditional_display_element_Conditional
39501
39581
  return;
39502
39582
  }
39503
39583
  this.videoId = guid["a" /* Guid */].newGuid().toString('n');
39584
+ this.rootElement.append('rect').attr('id', 'rect' + this.videoId).attr('fill', 'transparent')
39585
+ .attr('width', this.model.size.width)
39586
+ .attr('height', this.model.size.height);
39504
39587
  this.videoService.getVideoUrl(this.model.videoTag).then(result => {
39505
- this.isMobileType = result.isMobileType;
39506
- const isAndroid = !!navigator.userAgent.match(/(Android)/i);
39507
- let videoUrl = result.url;
39508
- const patt = /https:.+.m3u8/;
39509
- if (videoUrl.indexOf('http:') !== -1) {
39510
- videoUrl = videoUrl.replace('http:', 'https:');
39511
- }
39512
- if (!patt.test(videoUrl)) {
39513
- let videoToolTip = this.localization.invalidVideoAddress;
39514
- if (Object(lodash["isNil"])(videoUrl) || videoUrl === '') {
39515
- videoToolTip = this.localization.unconfiguredVideoAddress;
39516
- }
39517
- this.addVideoAddressToolTip(videoToolTip);
39518
- return;
39588
+ this.videoUrl = result.url;
39589
+ this.initVideo(result.url, this.videoId);
39590
+ }).catch(() => {
39591
+ throw new Error('Failure of the videoService');
39592
+ });
39593
+ }
39594
+ initVideo(videoUrl, videoId) {
39595
+ const patt = /https:.+.m3u8/;
39596
+ if (videoUrl.indexOf('http:') !== -1) {
39597
+ videoUrl = videoUrl.replace('http:', 'https:');
39598
+ }
39599
+ if (!patt.test(videoUrl)) {
39600
+ let videoToolTip = this.localization.invalidVideoAddress;
39601
+ if (Object(lodash["isNil"])(videoUrl) || videoUrl === '') {
39602
+ videoToolTip = this.localization.unconfiguredVideoAddress;
39519
39603
  }
39520
- const video = this.rootElement.append('foreignObject')
39521
- .attr('x', 0)
39522
- .attr('y', 0)
39523
- .attr('width', this.model.size.width)
39524
- .attr('height', this.model.size.height)
39525
- .append('xhtml:video')
39526
- .attr('id', this.videoId)
39527
- .attr('class', 'element-video')
39528
- .attr('scareX', this.model.location.x / this.guiSize.width)
39529
- .attr('scareY', this.model.location.y / this.guiSize.height)
39530
- .attr('src', videoUrl)
39531
- .style('width', '100%')
39532
- .style('height', '100%')
39533
- .style('object-fit', 'fill')
39534
- .attr('playsInline', true)
39535
- .attr('webkit-playsinline', true)
39536
- .attr('controls', true)
39537
- .attr('muted', true);
39538
- if (this.isMobileMode) {
39539
- if (isAndroid) {
39540
- video.attr('autoplay', true);
39541
- }
39604
+ this.addVideoAddressToolTip(videoToolTip);
39605
+ return;
39606
+ }
39607
+ const isAndroid = !!navigator.userAgent.match(/(Android)/i);
39608
+ const isIos = !!navigator.userAgent.match(/(Mac)/i);
39609
+ const currentRect = this.$element.find('rect#rect' + videoId).first();
39610
+ if (!currentRect.length) {
39611
+ return;
39612
+ }
39613
+ const clientRect = currentRect[0].getBoundingClientRect();
39614
+ const chartWidth = clientRect.width;
39615
+ const chartHeight = clientRect.height;
39616
+ const left = this.model.location.x / this.guiSize.width * $('.' + this.svgRootClass).find('.svg-content').width();
39617
+ const top = this.model.location.y / this.guiSize.height * $('.' + this.svgRootClass).find('.svg-content').height();
39618
+ const scareX = this.model.location.x / this.guiSize.width;
39619
+ const scareY = this.model.location.y / this.guiSize.height;
39620
+ if (isIos) {
39621
+ videoUrl = videoUrl + '#t=1';
39622
+ }
39623
+ const preload = isIos ? ' preload=\'metadata\'' : '';
39624
+ let videoHtml = `<video scareX="${scareX}"
39625
+ scareY="${scareY}" id="${videoId}" ${preload} src="${videoUrl}" width="${chartWidth}" height="${chartHeight}"
39626
+ style="position: absolute;top:${top}px;left:${left}px;object-fit:fill;z-index:0;"
39627
+ playsInline webkit-playsinline `;
39628
+ if (this.isMobileMode) {
39629
+ if (isAndroid) {
39630
+ videoHtml += ' autoplay muted></video>';
39542
39631
  }
39543
39632
  else {
39544
- video.attr('autoplay', true);
39633
+ videoHtml += ' controls muted></video>';
39545
39634
  }
39546
- if (this.isShow === false) {
39547
- $('#' + this.videoId).hide();
39548
- }
39549
- this.videoPlayer = new EZUIPlayer(this.videoId);
39635
+ }
39636
+ else {
39637
+ videoHtml += ' controls autoplay muted></video>';
39638
+ }
39639
+ $('.' + this.svgRootClass).find('.svg-content').append(videoHtml);
39640
+ if (this.isShow === false) {
39641
+ $('#' + this.videoId).hide();
39642
+ }
39643
+ setTimeout(() => {
39550
39644
  if (isAndroid) {
39551
- setTimeout(() => {
39552
- this.setAndroidVideo();
39553
- }, 500);
39645
+ this.setAndroidVideo(videoId);
39554
39646
  }
39555
- }).catch(() => {
39556
- throw new Error('Failure of the videoService');
39557
- });
39647
+ else if (isIos) {
39648
+ this.setIosVideo(this.videoUrl, videoId);
39649
+ }
39650
+ try {
39651
+ this.videoPlayer = new EZUIPlayer(videoId);
39652
+ }
39653
+ catch (err) {
39654
+ console.log(err);
39655
+ }
39656
+ }, 1000);
39657
+ const style = document.createElement('style');
39658
+ style.innerHTML = `#${videoId}::-webkit-media-controls-enclosure {
39659
+ display: none;
39660
+ }`;
39661
+ document.head.append();
39558
39662
  }
39559
39663
  addVideoAddressToolTip(videoToolTip) {
39560
39664
  const size = this.model.size;
@@ -39576,53 +39680,71 @@ class video_element_VideoElement extends conditional_display_element_Conditional
39576
39680
  const textElement = new text_element_TextElementModal(videoToolTip, font, size.width, size.height);
39577
39681
  this.$element.append(textElement.Element);
39578
39682
  }
39579
- setAndroidVideo() {
39683
+ setAndroidVideo(videoId) {
39684
+ const videoElement = $('#' + videoId);
39685
+ let preHeight = videoElement.height();
39686
+ let preWidth = videoElement.width();
39687
+ let preTop = videoElement.css('top');
39688
+ let preLeft = videoElement.css('left');
39580
39689
  const { StatusBar } = window;
39581
- this.bindFullscreenEvent();
39582
- window.addEventListener('orientationchange', () => {
39583
- StatusBar.show();
39584
- this.hide();
39585
- clearTimeout(this.refreshTimer);
39586
- this.refreshTimer = null;
39587
- this.refreshTimer = setTimeout(() => {
39588
- this.init();
39589
- this.show();
39590
- }, 1000);
39591
- });
39592
- }
39593
- bindFullscreenEvent() {
39594
- const that = this;
39595
- const { StatusBar } = window;
39596
- $('#' + this.videoId).bind('webkitfullscreenchange', () => {
39597
- if (document.webkitIsFullScreen) {
39598
- $('#' + that.videoId).css({
39599
- 'object-fit': 'contain',
39600
- 'z-index': 99
39601
- });
39602
- StatusBar.hide();
39690
+ videoElement.on('click', () => {
39691
+ if (!this.isFullscreen) {
39692
+ if (StatusBar) {
39693
+ StatusBar.hide();
39694
+ }
39695
+ preHeight = videoElement.height();
39696
+ preWidth = videoElement.width();
39697
+ preTop = videoElement.css('top');
39698
+ preLeft = videoElement.css('left');
39699
+ const width = document.documentElement.clientWidth;
39700
+ const height = document.documentElement.clientHeight;
39701
+ videoElement.css('object-fit', 'contain');
39702
+ videoElement.css('background', '#000000');
39703
+ videoElement.css('width', width + 'px');
39704
+ videoElement.css('height', height + 'px');
39705
+ videoElement.css('left', '0px');
39706
+ videoElement.css('top', '0px');
39707
+ videoElement.css('z-index', '99');
39708
+ videoElement.css('position', 'fixed');
39709
+ this.isFullscreen = true;
39710
+ try {
39711
+ screen.orientation.lock(screen.orientation.type);
39712
+ }
39713
+ catch (error) {
39714
+ console.error(error);
39715
+ }
39603
39716
  }
39604
39717
  else {
39605
- StatusBar.show();
39606
- if (that.isMobileType) {
39607
- $('#' + this.videoId).css('object-fit', document.webkitIsFullScreen ? 'contain' : 'fill');
39718
+ videoElement.css('object-fit', 'fill');
39719
+ videoElement.css('width', preWidth + 'px');
39720
+ videoElement.css('height', preHeight + 'px');
39721
+ videoElement.css('left', preLeft);
39722
+ videoElement.css('top', preTop);
39723
+ videoElement.css('z-index', '0');
39724
+ videoElement.css('position', 'absolute');
39725
+ this.isFullscreen = false;
39726
+ try {
39727
+ if (screen.orientation.type.includes('portrait')) {
39728
+ StatusBar.show();
39729
+ }
39608
39730
  }
39609
- else {
39610
- clearTimeout(this.resetTimer);
39611
- this.resetTimer = null;
39612
- $('#' + this.videoId).css('display', 'none');
39613
- this.resetTimer = setTimeout(() => {
39614
- $('#' + this.videoId).css({
39615
- 'width': '100%',
39616
- 'height': '100%',
39617
- 'display': 'block',
39618
- 'z-index': 0,
39619
- 'object-fit': document.webkitIsFullScreen ? 'contain' : 'fill'
39620
- });
39621
- }, 1000);
39731
+ catch (error) {
39732
+ console.error(error);
39622
39733
  }
39623
39734
  }
39624
39735
  });
39625
39736
  }
39737
+ setIosVideo(videoUrl, videoId) {
39738
+ const video = $('#' + this.videoId);
39739
+ video.on('webkitendfullscreen', () => {
39740
+ video.remove();
39741
+ clearTimeout(this.refreshTimer);
39742
+ this.refreshTimer = null;
39743
+ this.refreshTimer = setTimeout(() => {
39744
+ this.initVideo(videoUrl, videoId);
39745
+ }, 500);
39746
+ });
39747
+ }
39626
39748
  }
39627
39749
 
39628
39750
  // CONCATENATED MODULE: ./.tmp/elements/weather/weater-element.ts
@@ -41669,13 +41791,24 @@ let WriteValueModalComponent = class WriteValueModalComponent {
41669
41791
  value = this.formatWriteValue();
41670
41792
  }
41671
41793
  }
41794
+ if (!this.args.releasedVariableService) {
41795
+ this.onClosed({
41796
+ value: value,
41797
+ showValue: showValue,
41798
+ enableNumericalOperation: false,
41799
+ isNumericalOperation: this.isNumericalOperation,
41800
+ variableRwType: 6
41801
+ });
41802
+ return;
41803
+ }
41672
41804
  this.args.releasedVariableService.getVariableWithValueTransform(this.variableName).subscribe(result => {
41673
41805
  const valueTransform = JSON.parse(result.valueTransform);
41674
41806
  if ((valueTransform === null || valueTransform === void 0 ? void 0 : valueTransform.Type) !== 0) {
41675
41807
  this.isNumericalOperation = true;
41676
41808
  }
41677
41809
  this.onClosed({
41678
- value, showValue,
41810
+ value: value,
41811
+ showValue: showValue,
41679
41812
  enableNumericalOperation: this.enableNumericalOperation,
41680
41813
  isNumericalOperation: this.isNumericalOperation,
41681
41814
  variableRwType: result.variableRwType