Commit 0f93987f6755fe7da0bced59d9c2d731f5a5711a

Authored by ww
1 parent 7cd64571

feat: implement line component running dynamic effect

... ... @@ -321,9 +321,14 @@
321 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 685 //更多图形,显示出来的的标题跟id,同时包括图片
681 686
682 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 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 691 this.setComponentPermission(DEFAULT, [DYNAMIC_EFFECT])
687 692 this.setComponentPermission(REAL_TIME, [DYNAMIC_EFFECT])
688 693 this.setComponentPermission(TITLE, [INTERACTION, DYNAMIC_EFFECT])
... ...
... ... @@ -5016,7 +5016,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5016 5016 FLASH: 'FLASH',
5017 5017 ROTATE: 'ROTATE',
5018 5018 IMAGE: 'IMAGE',
5019   - SWITCH: 'SWITCH'
  5019 + SWITCH: 'SWITCH',
  5020 + RUNNING: 'RUNNING'
5020 5021 }
5021 5022
5022 5023 const interactionList = [
... ... @@ -5133,7 +5134,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5133 5134 [permissionKey.VAR_IMAGE]: createVarImagePanel,
5134 5135 [permissionKey.VIDEO]: createVideoBindPanel,
5135 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 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 5420 * @description 是否是折线图
5408 5421 * @param {boolean} isLineChart
5409 5422 */
... ... @@ -6991,12 +7004,14 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6991 7004 */
6992 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 7010 const enumEventType = {
6997 7011 FLASH: '闪烁',
6998 7012 DISPLAY: '显示/隐藏',
6999 7013 ROTATE: '旋转',
  7014 + RUNNING: '运行于停止'
7000 7015 }
7001 7016
7002 7017 const enumActionEl = {
... ... @@ -7031,6 +7046,18 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7031 7046
7032 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 7062 * @description
7036 7063 */
... ... @@ -7040,12 +7067,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7040 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 7072 return `
7050 7073 <div class="layui-form-item" style="margin-bottom: 0px">
7051 7074 <div class="layui-input-block" style="margin-left: 0px;">
... ... @@ -7061,7 +7084,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7061 7084 function addRecord() {
7062 7085 const content = `
7063 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 7089 <td>
7066 7090 <input autocomplete="off" lay-verType="tips" lay-verify="required" type="number" name="${enumConst.MIN}" class="layui-input ${enumActionEl.MIN_FILTER}">
7067 7091 </td>
... ... @@ -7075,7 +7099,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7075 7099 `
7076 7100 addRowNumber++
7077 7101 $(`#${enumActionEl.TABLE_BODY_EL}`).append(content)
7078   - if (IS_DISPLAY) {
  7102 + if (IS_DISPLAY || IS_RUNNING) {
7079 7103 form.render()
7080 7104 }
7081 7105 }
... ... @@ -7232,6 +7256,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7232 7256 <thead>
7233 7257 <tr>
7234 7258 ${IS_DISPLAY ? '<th style="text-align:center">类型</th>' : ''}
  7259 + ${IS_RUNNING ? '<th style="text-align:center">类型</th>' : ''}
7235 7260 <th style="text-align:center">最小值(>=)</th>
7236 7261 <th style="text-align:center">最大值(<=)</th>
7237 7262 <th style="text-align:center">操作</th>
... ... @@ -7251,7 +7276,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7251 7276 skin: 'event-layer__override',
7252 7277 btn: ['保存', '取消'],
7253 7278 offset: '100px',
7254   - area: IS_DISPLAY ? '1000px' : '800PX',
  7279 + area: (IS_DISPLAY || IS_RUNNING) ? '1000px' : '800PX',
7255 7280 success(layero) {
7256 7281 $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({
7257 7282 'lay-submit': '',
... ... @@ -8166,8 +8191,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8166 8191 $(`#${enumDynamicEffectType.FLASH}`).click({ type: enumDynamicEffectType.FLASH }, proxyFn(handleDataDynamicEffect));
8167 8192 $(`#${enumDynamicEffectType.DISPLAY}`).click({ type: enumDynamicEffectType.DISPLAY }, proxyFn(handleDataDynamicEffect));
8168 8193 $(`#${enumDynamicEffectType.ROTATE}`).click({ type: enumDynamicEffectType.ROTATE }, proxyFn(handleDataDynamicEffect));
  8194 + $(`#${enumDynamicEffectType.RUNNING}`).click({ type: enumDynamicEffectType.RUNNING }, proxyFn(handleDataDynamicEffect))
8169 8195
8170 8196 $(`#${enumDynamicEffectType.SWITCH}`).click({ type: enumDynamicEffectType.SWITCH }, proxyFn(handleStateSetting))
  8197 +
  8198 +
8171 8199 });
8172 8200 };
8173 8201
... ... @@ -14001,6 +14029,7 @@ class HandleDynamicEffect {
14001 14029 DISPLAY: 'DISPLAY',
14002 14030 ROTATE: 'ROTATE',
14003 14031 IMAGE: 'IMAGE',
  14032 + RUNNING: 'RUNNING'
14004 14033 }
14005 14034
14006 14035 static enumDisplayType = {
... ... @@ -14008,6 +14037,11 @@ class HandleDynamicEffect {
14008 14037 HIDDEN: 'hidden',
14009 14038 }
14010 14039
  14040 + static enumRunningType = {
  14041 + RUN: 'run',
  14042 + STOP: 'stop'
  14043 + }
  14044 +
14011 14045 static enumVideoConst = {
14012 14046 ORG_ID: 'orgId',
14013 14047 RECORD_ID: 'id',
... ... @@ -14199,6 +14233,9 @@ class HandleDynamicEffect {
14199 14233 case HandleDynamicEffect.enumActType.IMAGE:
14200 14234 invoke = this.varImage.bind(this)
14201 14235 break
  14236 + case HandleDynamicEffect.enumActType.RUNNING:
  14237 + invoke = this.running.bind(this)
  14238 + break
14202 14239 }
14203 14240 return invoke
14204 14241 }
... ... @@ -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 14388 * @description 播放视频
14332 14389 */
... ...