Commit 49ad777a0a00b26c25aa3b21ea5956220555ffc4
1 parent
4a851038
perf: switch component cancel fill commond
Showing
3 changed files
with
102 additions
and
21 deletions
| @@ -249,8 +249,23 @@ | @@ -249,8 +249,23 @@ | ||
| 249 | */ | 249 | */ |
| 250 | DEFAULT: 'default', | 250 | DEFAULT: 'default', |
| 251 | 251 | ||
| 252 | + /** | ||
| 253 | + * @description 开关组件 value | ||
| 254 | + */ | ||
| 255 | + SWITCH_VALUE: 'switchValue', | ||
| 256 | + | ||
| 257 | + /** | ||
| 258 | + * @description 开关组件状态 {true | false | null} | ||
| 259 | + */ | ||
| 260 | + SWITCH_STATE: 'switchState' | ||
| 252 | } | 261 | } |
| 253 | 262 | ||
| 263 | + Sidebar.prototype.enumComponentTypeValue = { | ||
| 264 | + SWITCH_STATE_ENABLED: 'enabled', | ||
| 265 | + SWITCH_STATE_CLOSE: 'close', | ||
| 266 | + SWITCH_STATE_NONE: 'none', | ||
| 267 | + } | ||
| 268 | + | ||
| 254 | /** | 269 | /** |
| 255 | * @description 组件权限map | 270 | * @description 组件权限map |
| 256 | * @type {Map<string, string[]>} | 271 | * @type {Map<string, string[]>} |
| @@ -4,7 +4,8 @@ | @@ -4,7 +4,8 @@ | ||
| 4 | // Control Component 控制元件 | 4 | // Control Component 控制元件 |
| 5 | Sidebar.prototype.addControlComponentsPalette = function () { | 5 | Sidebar.prototype.addControlComponentsPalette = function () { |
| 6 | const { COMPONENT_TYPE } = this.enumCellBasicAttribute | 6 | const { COMPONENT_TYPE } = this.enumCellBasicAttribute |
| 7 | - const { SWITCH, PARAMS_SETTING_BUTTON } = this.enumComponentType | 7 | + const { SWITCH, PARAMS_SETTING_BUTTON, SWITCH_VALUE, SWITCH_STATE } = this.enumComponentType |
| 8 | + const { SWITCH_STATE_NONE } = this.enumComponentTypeValue | ||
| 8 | const gn = 'mxgraph.control'; | 9 | const gn = 'mxgraph.control'; |
| 9 | const dt = 'control'; | 10 | const dt = 'control'; |
| 10 | const label = '控制元件' | 11 | const label = '控制元件' |
| @@ -15,14 +16,14 @@ | @@ -15,14 +16,14 @@ | ||
| 15 | const defaultStyle = ';imageAspect=0;' | 16 | const defaultStyle = ';imageAspect=0;' |
| 16 | this.setCurrentSearchEntryLibrary(dt); | 17 | this.setCurrentSearchEntryLibrary(dt); |
| 17 | 18 | ||
| 18 | - | ||
| 19 | - | ||
| 20 | const fns = [ | 19 | const fns = [ |
| 21 | this.addEntry(this.getTagsForStencil(gn, 'Switch', dt).join(' '), mxUtils.bind(this, function () { | 20 | this.addEntry(this.getTagsForStencil(gn, 'Switch', dt).join(' '), mxUtils.bind(this, function () { |
| 22 | const cell = new mxCell('', new mxGeometry(0, 0, 48, 48), `image;image=images/thingskit/switch-on.svg;${defaultStyle}`); | 21 | const cell = new mxCell('', new mxGeometry(0, 0, 48, 48), `image;image=images/thingskit/switch-on.svg;${defaultStyle}`); |
| 23 | // 自定义属性 | 22 | // 自定义属性 |
| 24 | const cellAttribute = { | 23 | const cellAttribute = { |
| 25 | - [COMPONENT_TYPE]: SWITCH | 24 | + [COMPONENT_TYPE]: SWITCH, |
| 25 | + [SWITCH_VALUE]: 1, | ||
| 26 | + [SWITCH_STATE]: SWITCH_STATE_NONE | ||
| 26 | } | 27 | } |
| 27 | cell.setVertex(true) | 28 | cell.setVertex(true) |
| 28 | this.setCellAttributes(cell, cellAttribute) | 29 | this.setCellAttributes(cell, cellAttribute) |
| @@ -6923,9 +6923,17 @@ DataFormatPanel.prototype.addDataFont = function (container) { | @@ -6923,9 +6923,17 @@ DataFormatPanel.prototype.addDataFont = function (container) { | ||
| 6923 | async function submit(callback) { | 6923 | async function submit(callback) { |
| 6924 | const formVal = form.val(enumActionEl.FORM_FILTER) | 6924 | const formVal = form.val(enumActionEl.FORM_FILTER) |
| 6925 | const isParamsSetting = formVal[enumConst.ACTION] === enumActionType.PARAMS_SETTING | 6925 | const isParamsSetting = formVal[enumConst.ACTION] === enumActionType.PARAMS_SETTING |
| 6926 | + const { COMPONENT_TYPE } = Sidebar.prototype.enumCellBasicAttribute | ||
| 6927 | + const { SWITCH } = Sidebar.prototype.enumComponentType | ||
| 6928 | + const isSwitchComponent = vertices[0].getAttribute(COMPONENT_TYPE) === SWITCH | ||
| 6929 | + | ||
| 6930 | + if (isParamsSetting && isSwitchComponent && (!currentNodeData.act || !currentNodeData.act.find(item => item.type === enumDynamicEffectType.SWITCH))) { | ||
| 6931 | + UseLayUi.topErrorMsg('请先配置数据动效中的状态设置') | ||
| 6932 | + return | ||
| 6933 | + } | ||
| 6934 | + | ||
| 6926 | if (isParamsSetting) { | 6935 | if (isParamsSetting) { |
| 6927 | if (!isJson(formVal[enumConst.COMMAND])) { | 6936 | if (!isJson(formVal[enumConst.COMMAND])) { |
| 6928 | - console.log() | ||
| 6929 | UseLayUi.topErrorMsg('命令配置存在错误') | 6937 | UseLayUi.topErrorMsg('命令配置存在错误') |
| 6930 | return | 6938 | return |
| 6931 | } | 6939 | } |
| @@ -12994,6 +13002,7 @@ class DispatchCenter { | @@ -12994,6 +13002,7 @@ class DispatchCenter { | ||
| 12994 | DISPLAY: 'DISPLAY', | 13002 | DISPLAY: 'DISPLAY', |
| 12995 | FLASH: 'FLASH', | 13003 | FLASH: 'FLASH', |
| 12996 | ROTATE: 'ROTATE', | 13004 | ROTATE: 'ROTATE', |
| 13005 | + SWITCH: 'SWITCH', | ||
| 12997 | } | 13006 | } |
| 12998 | 13007 | ||
| 12999 | static enumPageType = { | 13008 | static enumPageType = { |
| @@ -13396,13 +13405,18 @@ class HandleDataSource { | @@ -13396,13 +13405,18 @@ class HandleDataSource { | ||
| 13396 | const { condition = [] } = switchConfig || {} | 13405 | const { condition = [] } = switchConfig || {} |
| 13397 | let reg = /image=[^;]+/g | 13406 | let reg = /image=[^;]+/g |
| 13398 | let flag = false | 13407 | let flag = false |
| 13408 | + const { SWITCH_STATE, SWITCH_VALUE } = Sidebar.prototype.enumComponentType | ||
| 13409 | + const { SWITCH_STATE_NONE } = Sidebar.prototype.enumComponentTypeValue | ||
| 13399 | for (const item of condition) { | 13410 | for (const item of condition) { |
| 13400 | - const { value, imagePath } = item || {} | 13411 | + const { value, imagePath, type } = item || {} |
| 13401 | if (Number(receiveValue) === Number(value)) { | 13412 | if (Number(receiveValue) === Number(value)) { |
| 13402 | flag = true | 13413 | flag = true |
| 13403 | this.updatePage(() => { | 13414 | this.updatePage(() => { |
| 13404 | const style = node.getStyle() | 13415 | const style = node.getStyle() |
| 13405 | node.setStyle(style.replace(reg, `image=${imagePath}`)) | 13416 | node.setStyle(style.replace(reg, `image=${imagePath}`)) |
| 13417 | + node.setAttribute('label', '') | ||
| 13418 | + node.setAttribute(SWITCH_VALUE, receiveValue) | ||
| 13419 | + node.setAttribute(SWITCH_STATE, type) | ||
| 13406 | }, node) | 13420 | }, node) |
| 13407 | break | 13421 | break |
| 13408 | } | 13422 | } |
| @@ -13411,6 +13425,9 @@ class HandleDataSource { | @@ -13411,6 +13425,9 @@ class HandleDataSource { | ||
| 13411 | this.updatePage(() => { | 13425 | this.updatePage(() => { |
| 13412 | const style = node.getStyle() | 13426 | const style = node.getStyle() |
| 13413 | node.setStyle(style.replace(reg, `image=images/thingskit/not-standard-value.svg`)) | 13427 | node.setStyle(style.replace(reg, `image=images/thingskit/not-standard-value.svg`)) |
| 13428 | + node.setAttribute('label', receiveValue) | ||
| 13429 | + node.setAttribute(SWITCH_VALUE, receiveValue) | ||
| 13430 | + node.setAttribute(SWITCH_STATE, SWITCH_STATE_NONE) | ||
| 13414 | }, node) | 13431 | }, node) |
| 13415 | } | 13432 | } |
| 13416 | } | 13433 | } |
| @@ -14010,7 +14027,12 @@ class HandleDataInteraction { | @@ -14010,7 +14027,12 @@ class HandleDataInteraction { | ||
| 14010 | */ | 14027 | */ |
| 14011 | paramsSetting(nodeId, content) { | 14028 | paramsSetting(nodeId, content) { |
| 14012 | const { layer, jquery: $, form } = layui | 14029 | const { layer, jquery: $, form } = layui |
| 14030 | + const { SWITCH_STATE, SWITCH_VALUE, SWITCH, PARAMS_SETTING_BUTTON } = Sidebar.prototype.enumComponentType | ||
| 14031 | + const { SWITCH_STATE_ENABLED, SWITCH_STATE_NONE, SWITCH_STATE_CLOSE } = Sidebar.prototype.enumComponentTypeValue | ||
| 14032 | + const { COMPONENT_TYPE } = Sidebar.prototype.enumCellBasicAttribute | ||
| 14013 | const contentData = this.contentData | 14033 | const contentData = this.contentData |
| 14034 | + const currentNode = this.DispatchInstance.contentAllCell.find(item => item.id === nodeId) | ||
| 14035 | + | ||
| 14014 | const enumConst = { | 14036 | const enumConst = { |
| 14015 | VALUE: 'value', | 14037 | VALUE: 'value', |
| 14016 | ISSUED_WAY: 'way', | 14038 | ISSUED_WAY: 'way', |
| @@ -14040,20 +14062,6 @@ class HandleDataInteraction { | @@ -14040,20 +14062,6 @@ class HandleDataInteraction { | ||
| 14040 | </div>` | 14062 | </div>` |
| 14041 | } | 14063 | } |
| 14042 | 14064 | ||
| 14043 | - function isJson(string) { | ||
| 14044 | - if (typeof string === 'string') { | ||
| 14045 | - try { | ||
| 14046 | - const obj = JSON.parse(string) | ||
| 14047 | - if (typeof obj === 'object' && obj !== null) { | ||
| 14048 | - return true | ||
| 14049 | - } | ||
| 14050 | - } catch (e) { | ||
| 14051 | - return false | ||
| 14052 | - } | ||
| 14053 | - } | ||
| 14054 | - return false | ||
| 14055 | - } | ||
| 14056 | - | ||
| 14057 | function jsonParse(value) { | 14065 | function jsonParse(value) { |
| 14058 | try { | 14066 | try { |
| 14059 | return JSON.parse(value) | 14067 | return JSON.parse(value) |
| @@ -14062,6 +14070,48 @@ class HandleDataInteraction { | @@ -14062,6 +14070,48 @@ class HandleDataInteraction { | ||
| 14062 | } | 14070 | } |
| 14063 | } | 14071 | } |
| 14064 | 14072 | ||
| 14073 | + // TODO switch component send command | ||
| 14074 | + function getSwitchComponentBindValue() { | ||
| 14075 | + return currentNode.getAttribute(SWITCH_VALUE) | ||
| 14076 | + } | ||
| 14077 | + | ||
| 14078 | + async function handleSwitchComponent() { | ||
| 14079 | + const state = currentNode.getAttribute(SWITCH_STATE) | ||
| 14080 | + const value = currentNode.getAttribute(SWITCH_VALUE) | ||
| 14081 | + if (state === SWITCH_STATE_NONE) { | ||
| 14082 | + return | ||
| 14083 | + } | ||
| 14084 | + | ||
| 14085 | + let { deviceId, attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {} | ||
| 14086 | + let { command, way } = content | ||
| 14087 | + const validate = new Validate([ | ||
| 14088 | + { value, required: true, message: '下发值是必填项' }, | ||
| 14089 | + { value: deviceId, required: true, message: '未绑定设备' }, | ||
| 14090 | + { value: way, required: true, message: '未绑定指令下发方式(单向/双向)' }, | ||
| 14091 | + { value: command, required: true, message: '未设置下发命令' }, | ||
| 14092 | + { value: attr, required: true, message: '未绑定设备属性' }, | ||
| 14093 | + ]) | ||
| 14094 | + if (!validate.begin()) return | ||
| 14095 | + if (typeof command === 'string') command = jsonParse(command) | ||
| 14096 | + const data = replaceAttrPlaceholder(command, attr, value) | ||
| 14097 | + const instructionData = { | ||
| 14098 | + method: "methodThingskit", | ||
| 14099 | + params: data, | ||
| 14100 | + } | ||
| 14101 | + | ||
| 14102 | + const [err, res = []] = await to(ConfigurationNodeApi.deviceIsOnLine(deviceId)) | ||
| 14103 | + const { value: onlineFlag } = res[0] || {} | ||
| 14104 | + if (onlineFlag) { | ||
| 14105 | + const [err, res] = await to(ConfigurationNodeApi.sendInstruction(way, deviceId, instructionData)) | ||
| 14106 | + if (!err) { | ||
| 14107 | + UseLayUi.topSuccessMsg('操作成功') | ||
| 14108 | + callback() | ||
| 14109 | + } | ||
| 14110 | + } else { | ||
| 14111 | + UseLayUi.topErrorMsg('设备不在线!') | ||
| 14112 | + } | ||
| 14113 | + } | ||
| 14114 | + | ||
| 14065 | function replaceAttrPlaceholder(oldValue = {}, replaceAttr = '', replaceValue = '', newValue = {},) { | 14115 | function replaceAttrPlaceholder(oldValue = {}, replaceAttr = '', replaceValue = '', newValue = {},) { |
| 14066 | if (typeof oldValue !== 'object') return newValue | 14116 | if (typeof oldValue !== 'object') return newValue |
| 14067 | 14117 | ||
| @@ -14135,7 +14185,22 @@ class HandleDataInteraction { | @@ -14135,7 +14185,22 @@ class HandleDataInteraction { | ||
| 14135 | }) | 14185 | }) |
| 14136 | } | 14186 | } |
| 14137 | 14187 | ||
| 14138 | - createLayer() | 14188 | + |
| 14189 | + function startProcess() { | ||
| 14190 | + const componentType = currentNode.getAttribute(COMPONENT_TYPE) | ||
| 14191 | + const handle = { | ||
| 14192 | + [SWITCH]: handleSwitchComponent, | ||
| 14193 | + [PARAMS_SETTING_BUTTON]: createLayer | ||
| 14194 | + } | ||
| 14195 | + | ||
| 14196 | + try { | ||
| 14197 | + handle[componentType]() | ||
| 14198 | + } catch (error) { | ||
| 14199 | + | ||
| 14200 | + } | ||
| 14201 | + } | ||
| 14202 | + console.log('enter') | ||
| 14203 | + startProcess() | ||
| 14139 | } | 14204 | } |
| 14140 | } | 14205 | } |
| 14141 | 14206 |