Commit 0f93987f6755fe7da0bced59d9c2d731f5a5711a

Authored by ww
1 parent 7cd64571

feat: implement line component running dynamic effect

@@ -321,9 +321,14 @@ @@ -321,9 +321,14 @@
321 SWITCH_STATE_SETTING: 'stateSetting', 321 SWITCH_STATE_SETTING: 'stateSetting',
322 322
323 /** 323 /**
324 - * @description 只有单事件 324 + * @description 只有单事件
325 */ 325 */
326 - ONLY_SINGLE_EVENT: 'onlySingleEvent' 326 + ONLY_SINGLE_EVENT: 'onlySingleEvent',
  327 +
  328 + /**
  329 + * @description 运行于停止
  330 + */
  331 + RUNNING_AND_STOP: 'runningAndStop'
327 } 332 }
328 333
329 /** 334 /**
@@ -680,9 +685,9 @@ @@ -680,9 +685,9 @@
680 //更多图形,显示出来的的标题跟id,同时包括图片 685 //更多图形,显示出来的的标题跟id,同时包括图片
681 686
682 // TODO thingsKit 设置数据绑定展示面板 687 // TODO thingsKit 设置数据绑定展示面板
683 - const { LINE_CHART_EXPAND, BAR_CHART_EXPAND, DYNAMIC_EFFECT, DATA_SOURCE, VAR_IMAGE, INTERACTION, VIDEO: VIDEO_PANEL, SWITCH_STATE_SETTING, ONLY_SINGLE_EVENT } = this.enumPermissionPanel 688 + const { LINE_CHART_EXPAND, BAR_CHART_EXPAND, DYNAMIC_EFFECT, DATA_SOURCE, VAR_IMAGE, INTERACTION, VIDEO: VIDEO_PANEL, SWITCH_STATE_SETTING, ONLY_SINGLE_EVENT, RUNNING_AND_STOP } = this.enumPermissionPanel
684 const { LINE, LINE_CHART, REAL_TIME, TITLE, VARIABLE, DEFAULT, BAR_CHART, VIDEO, SWITCH, PARAMS_SETTING_BUTTON } = this.enumComponentType 689 const { LINE, LINE_CHART, REAL_TIME, TITLE, VARIABLE, DEFAULT, BAR_CHART, VIDEO, SWITCH, PARAMS_SETTING_BUTTON } = this.enumComponentType
685 - this.setComponentPermission(LINE, [DYNAMIC_EFFECT]) 690 + this.setComponentPermission(LINE, [RUNNING_AND_STOP, DYNAMIC_EFFECT])
686 this.setComponentPermission(DEFAULT, [DYNAMIC_EFFECT]) 691 this.setComponentPermission(DEFAULT, [DYNAMIC_EFFECT])
687 this.setComponentPermission(REAL_TIME, [DYNAMIC_EFFECT]) 692 this.setComponentPermission(REAL_TIME, [DYNAMIC_EFFECT])
688 this.setComponentPermission(TITLE, [INTERACTION, DYNAMIC_EFFECT]) 693 this.setComponentPermission(TITLE, [INTERACTION, DYNAMIC_EFFECT])
@@ -5016,7 +5016,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5016,7 +5016,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5016 FLASH: 'FLASH', 5016 FLASH: 'FLASH',
5017 ROTATE: 'ROTATE', 5017 ROTATE: 'ROTATE',
5018 IMAGE: 'IMAGE', 5018 IMAGE: 'IMAGE',
5019 - SWITCH: 'SWITCH' 5019 + SWITCH: 'SWITCH',
  5020 + RUNNING: 'RUNNING'
5020 } 5021 }
5021 5022
5022 const interactionList = [ 5023 const interactionList = [
@@ -5133,7 +5134,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5133,7 +5134,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5133 [permissionKey.VAR_IMAGE]: createVarImagePanel, 5134 [permissionKey.VAR_IMAGE]: createVarImagePanel,
5134 [permissionKey.VIDEO]: createVideoBindPanel, 5135 [permissionKey.VIDEO]: createVideoBindPanel,
5135 [permissionKey.SWITCH_STATE_SETTING]: createSwitchStateSettingPanel, 5136 [permissionKey.SWITCH_STATE_SETTING]: createSwitchStateSettingPanel,
5136 - [permissionKey.ONLY_SINGLE_EVENT]: createParamsSettingButtonPanel 5137 + [permissionKey.ONLY_SINGLE_EVENT]: createParamsSettingButtonPanel,
  5138 + [permissionKey.RUNNING_AND_STOP]: createRunningAndStopPanel
5137 } 5139 }
5138 5140
5139 5141
@@ -5404,6 +5406,17 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5404,6 +5406,17 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5404 } 5406 }
5405 5407
5406 /** 5408 /**
  5409 + * @description 运行停止
  5410 + */
  5411 + function createRunningAndStopPanel() {
  5412 + dynamicEffectList.push({
  5413 + label: '运行与停止',
  5414 + type: enumDynamicEffectType.RUNNING,
  5415 + category: enumCategory.ACT
  5416 + })
  5417 + }
  5418 +
  5419 + /**
5407 * @description 是否是折线图 5420 * @description 是否是折线图
5408 * @param {boolean} isLineChart 5421 * @param {boolean} isLineChart
5409 */ 5422 */
@@ -6991,12 +7004,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6991,12 +7004,14 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6991 */ 7004 */
6992 function handleDataDynamicEffect(event) { 7005 function handleDataDynamicEffect(event) {
6993 7006
6994 - const IS_DISPLAY = event.data.type === 'DISPLAY' 7007 + const IS_DISPLAY = event.data.type === enumDynamicEffectType.DISPLAY
  7008 + const IS_RUNNING = event.data.type === enumDynamicEffectType.RUNNING
6995 7009
6996 const enumEventType = { 7010 const enumEventType = {
6997 FLASH: '闪烁', 7011 FLASH: '闪烁',
6998 DISPLAY: '显示/隐藏', 7012 DISPLAY: '显示/隐藏',
6999 ROTATE: '旋转', 7013 ROTATE: '旋转',
  7014 + RUNNING: '运行于停止'
7000 } 7015 }
7001 7016
7002 const enumActionEl = { 7017 const enumActionEl = {
@@ -7031,6 +7046,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7031,6 +7046,18 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7031 7046
7032 const enumDisplayType = HandleDynamicEffect.enumDisplayType 7047 const enumDisplayType = HandleDynamicEffect.enumDisplayType
7033 7048
  7049 + const enumRunningType = HandleDynamicEffect.enumRunningType
  7050 +
  7051 + const displayOptions = [
  7052 + { name: '显示', id: enumDisplayType.SHOW },
  7053 + { name: '隐藏', id: enumDisplayType.HIDDEN },
  7054 + ]
  7055 +
  7056 + const runningOptions = [
  7057 + { name: '运行', id: enumRunningType.RUN },
  7058 + { name: '停止', id: enumRunningType.STOP },
  7059 + ]
  7060 +
7034 /** 7061 /**
7035 * @description 7062 * @description
7036 */ 7063 */
@@ -7040,12 +7067,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7040,12 +7067,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7040 enabled: false 7067 enabled: false
7041 } 7068 }
7042 7069
7043 - function generatorDisplayOptions() {  
7044 - const options = [  
7045 - { name: '显示', id: enumDisplayType.SHOW },  
7046 - { name: '隐藏', id: enumDisplayType.HIDDEN },  
7047 - ]  
7048 - const template = UseLayUi.generateOptionTemplate({ dataSource: options }) 7070 + function generateStateOptions(options = []) {
  7071 + const template = UseLayUi.generateOptionTemplate({ dataSource: options, addPlaceholderOption: false })
7049 return ` 7072 return `
7050 <div class="layui-form-item" style="margin-bottom: 0px"> 7073 <div class="layui-form-item" style="margin-bottom: 0px">
7051 <div class="layui-input-block" style="margin-left: 0px;"> 7074 <div class="layui-input-block" style="margin-left: 0px;">
@@ -7061,7 +7084,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7061,7 +7084,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7061 function addRecord() { 7084 function addRecord() {
7062 const content = ` 7085 const content = `
7063 <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}"> 7086 <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}">
7064 - ${IS_DISPLAY && `<td>${generatorDisplayOptions()}</td>`} 7087 + ${IS_DISPLAY && `<td>${generateStateOptions(displayOptions)}</td>`}
  7088 + ${IS_RUNNING && `<td>${generateStateOptions(runningOptions)}</td>`}
7065 <td> 7089 <td>
7066 <input autocomplete="off" lay-verType="tips" lay-verify="required" type="number" name="${enumConst.MIN}" class="layui-input ${enumActionEl.MIN_FILTER}"> 7090 <input autocomplete="off" lay-verType="tips" lay-verify="required" type="number" name="${enumConst.MIN}" class="layui-input ${enumActionEl.MIN_FILTER}">
7067 </td> 7091 </td>
@@ -7075,7 +7099,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7075,7 +7099,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7075 ` 7099 `
7076 addRowNumber++ 7100 addRowNumber++
7077 $(`#${enumActionEl.TABLE_BODY_EL}`).append(content) 7101 $(`#${enumActionEl.TABLE_BODY_EL}`).append(content)
7078 - if (IS_DISPLAY) { 7102 + if (IS_DISPLAY || IS_RUNNING) {
7079 form.render() 7103 form.render()
7080 } 7104 }
7081 } 7105 }
@@ -7232,6 +7256,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7232,6 +7256,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7232 <thead> 7256 <thead>
7233 <tr> 7257 <tr>
7234 ${IS_DISPLAY ? '<th style="text-align:center">类型</th>' : ''} 7258 ${IS_DISPLAY ? '<th style="text-align:center">类型</th>' : ''}
  7259 + ${IS_RUNNING ? '<th style="text-align:center">类型</th>' : ''}
7235 <th style="text-align:center">最小值(>=)</th> 7260 <th style="text-align:center">最小值(>=)</th>
7236 <th style="text-align:center">最大值(<=)</th> 7261 <th style="text-align:center">最大值(<=)</th>
7237 <th style="text-align:center">操作</th> 7262 <th style="text-align:center">操作</th>
@@ -7251,7 +7276,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7251,7 +7276,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7251 skin: 'event-layer__override', 7276 skin: 'event-layer__override',
7252 btn: ['保存', '取消'], 7277 btn: ['保存', '取消'],
7253 offset: '100px', 7278 offset: '100px',
7254 - area: IS_DISPLAY ? '1000px' : '800PX', 7279 + area: (IS_DISPLAY || IS_RUNNING) ? '1000px' : '800PX',
7255 success(layero) { 7280 success(layero) {
7256 $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 7281 $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({
7257 'lay-submit': '', 7282 'lay-submit': '',
@@ -8166,8 +8191,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8166,8 +8191,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8166 $(`#${enumDynamicEffectType.FLASH}`).click({ type: enumDynamicEffectType.FLASH }, proxyFn(handleDataDynamicEffect)); 8191 $(`#${enumDynamicEffectType.FLASH}`).click({ type: enumDynamicEffectType.FLASH }, proxyFn(handleDataDynamicEffect));
8167 $(`#${enumDynamicEffectType.DISPLAY}`).click({ type: enumDynamicEffectType.DISPLAY }, proxyFn(handleDataDynamicEffect)); 8192 $(`#${enumDynamicEffectType.DISPLAY}`).click({ type: enumDynamicEffectType.DISPLAY }, proxyFn(handleDataDynamicEffect));
8168 $(`#${enumDynamicEffectType.ROTATE}`).click({ type: enumDynamicEffectType.ROTATE }, proxyFn(handleDataDynamicEffect)); 8193 $(`#${enumDynamicEffectType.ROTATE}`).click({ type: enumDynamicEffectType.ROTATE }, proxyFn(handleDataDynamicEffect));
  8194 + $(`#${enumDynamicEffectType.RUNNING}`).click({ type: enumDynamicEffectType.RUNNING }, proxyFn(handleDataDynamicEffect))
8169 8195
8170 $(`#${enumDynamicEffectType.SWITCH}`).click({ type: enumDynamicEffectType.SWITCH }, proxyFn(handleStateSetting)) 8196 $(`#${enumDynamicEffectType.SWITCH}`).click({ type: enumDynamicEffectType.SWITCH }, proxyFn(handleStateSetting))
  8197 +
  8198 +
8171 }); 8199 });
8172 }; 8200 };
8173 8201
@@ -14001,6 +14029,7 @@ class HandleDynamicEffect { @@ -14001,6 +14029,7 @@ class HandleDynamicEffect {
14001 DISPLAY: 'DISPLAY', 14029 DISPLAY: 'DISPLAY',
14002 ROTATE: 'ROTATE', 14030 ROTATE: 'ROTATE',
14003 IMAGE: 'IMAGE', 14031 IMAGE: 'IMAGE',
  14032 + RUNNING: 'RUNNING'
14004 } 14033 }
14005 14034
14006 static enumDisplayType = { 14035 static enumDisplayType = {
@@ -14008,6 +14037,11 @@ class HandleDynamicEffect { @@ -14008,6 +14037,11 @@ class HandleDynamicEffect {
14008 HIDDEN: 'hidden', 14037 HIDDEN: 'hidden',
14009 } 14038 }
14010 14039
  14040 + static enumRunningType = {
  14041 + RUN: 'run',
  14042 + STOP: 'stop'
  14043 + }
  14044 +
14011 static enumVideoConst = { 14045 static enumVideoConst = {
14012 ORG_ID: 'orgId', 14046 ORG_ID: 'orgId',
14013 RECORD_ID: 'id', 14047 RECORD_ID: 'id',
@@ -14199,6 +14233,9 @@ class HandleDynamicEffect { @@ -14199,6 +14233,9 @@ class HandleDynamicEffect {
14199 case HandleDynamicEffect.enumActType.IMAGE: 14233 case HandleDynamicEffect.enumActType.IMAGE:
14200 invoke = this.varImage.bind(this) 14234 invoke = this.varImage.bind(this)
14201 break 14235 break
  14236 + case HandleDynamicEffect.enumActType.RUNNING:
  14237 + invoke = this.running.bind(this)
  14238 + break
14202 } 14239 }
14203 return invoke 14240 return invoke
14204 } 14241 }
@@ -14327,6 +14364,26 @@ class HandleDynamicEffect { @@ -14327,6 +14364,26 @@ class HandleDynamicEffect {
14327 } 14364 }
14328 } 14365 }
14329 14366
  14367 + running(message) {
  14368 + const { subscriptionId, data = {} } = message
  14369 + const { flag, condition } = this.validate(subscriptionId, HandleDynamicEffect.enumActType.RUNNING, data)
  14370 + if (!flag) return
  14371 + const node = this.getNodeByCmdId(subscriptionId)
  14372 + let isRun = false
  14373 + if (condition.type === HandleDynamicEffect.enumRunningType.RUN) {
  14374 + isRun = true
  14375 + } else if (condition.type === HandleDynamicEffect.enumRunningType.STOP) {
  14376 + isRun = false
  14377 + }
  14378 +
  14379 + const updateFn = () => {
  14380 + const reg = /flowAnimation[^;]+/
  14381 + const style = node.getStyle()
  14382 + node.setStyle(style.replace(reg, `flowAnimation=${isRun ? 1 : 0}`))
  14383 + }
  14384 + this.insertOnceUpdateFn(node, updateFn)
  14385 + }
  14386 +
14330 /** 14387 /**
14331 * @description 播放视频 14388 * @description 播放视频
14332 */ 14389 */