Commit 49ad777a0a00b26c25aa3b21ea5956220555ffc4

Authored by ww
1 parent 4a851038

perf: switch component cancel fill commond

@@ -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