Commit 49ad777a0a00b26c25aa3b21ea5956220555ffc4

Authored by ww
1 parent 4a851038

perf: switch component cancel fill commond

... ... @@ -249,8 +249,23 @@
249 249 */
250 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 270 * @description 组件权限map
256 271 * @type {Map<string, string[]>}
... ...
... ... @@ -4,7 +4,8 @@
4 4 // Control Component 控制元件
5 5 Sidebar.prototype.addControlComponentsPalette = function () {
6 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 9 const gn = 'mxgraph.control';
9 10 const dt = 'control';
10 11 const label = '控制元件'
... ... @@ -15,14 +16,14 @@
15 16 const defaultStyle = ';imageAspect=0;'
16 17 this.setCurrentSearchEntryLibrary(dt);
17 18
18   -
19   -
20 19 const fns = [
21 20 this.addEntry(this.getTagsForStencil(gn, 'Switch', dt).join(' '), mxUtils.bind(this, function () {
22 21 const cell = new mxCell('', new mxGeometry(0, 0, 48, 48), `image;image=images/thingskit/switch-on.svg;${defaultStyle}`);
23 22 // 自定义属性
24 23 const cellAttribute = {
25   - [COMPONENT_TYPE]: SWITCH
  24 + [COMPONENT_TYPE]: SWITCH,
  25 + [SWITCH_VALUE]: 1,
  26 + [SWITCH_STATE]: SWITCH_STATE_NONE
26 27 }
27 28 cell.setVertex(true)
28 29 this.setCellAttributes(cell, cellAttribute)
... ...
... ... @@ -6923,9 +6923,17 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6923 6923 async function submit(callback) {
6924 6924 const formVal = form.val(enumActionEl.FORM_FILTER)
6925 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 6935 if (isParamsSetting) {
6927 6936 if (!isJson(formVal[enumConst.COMMAND])) {
6928   - console.log()
6929 6937 UseLayUi.topErrorMsg('命令配置存在错误')
6930 6938 return
6931 6939 }
... ... @@ -12994,6 +13002,7 @@ class DispatchCenter {
12994 13002 DISPLAY: 'DISPLAY',
12995 13003 FLASH: 'FLASH',
12996 13004 ROTATE: 'ROTATE',
  13005 + SWITCH: 'SWITCH',
12997 13006 }
12998 13007
12999 13008 static enumPageType = {
... ... @@ -13396,13 +13405,18 @@ class HandleDataSource {
13396 13405 const { condition = [] } = switchConfig || {}
13397 13406 let reg = /image=[^;]+/g
13398 13407 let flag = false
  13408 + const { SWITCH_STATE, SWITCH_VALUE } = Sidebar.prototype.enumComponentType
  13409 + const { SWITCH_STATE_NONE } = Sidebar.prototype.enumComponentTypeValue
13399 13410 for (const item of condition) {
13400   - const { value, imagePath } = item || {}
  13411 + const { value, imagePath, type } = item || {}
13401 13412 if (Number(receiveValue) === Number(value)) {
13402 13413 flag = true
13403 13414 this.updatePage(() => {
13404 13415 const style = node.getStyle()
13405 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 13420 }, node)
13407 13421 break
13408 13422 }
... ... @@ -13411,6 +13425,9 @@ class HandleDataSource {
13411 13425 this.updatePage(() => {
13412 13426 const style = node.getStyle()
13413 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 13431 }, node)
13415 13432 }
13416 13433 }
... ... @@ -14010,7 +14027,12 @@ class HandleDataInteraction {
14010 14027 */
14011 14028 paramsSetting(nodeId, content) {
14012 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 14033 const contentData = this.contentData
  14034 + const currentNode = this.DispatchInstance.contentAllCell.find(item => item.id === nodeId)
  14035 +
14014 14036 const enumConst = {
14015 14037 VALUE: 'value',
14016 14038 ISSUED_WAY: 'way',
... ... @@ -14040,20 +14062,6 @@ class HandleDataInteraction {
14040 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 14065 function jsonParse(value) {
14058 14066 try {
14059 14067 return JSON.parse(value)
... ... @@ -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 14115 function replaceAttrPlaceholder(oldValue = {}, replaceAttr = '', replaceValue = '', newValue = {},) {
14066 14116 if (typeof oldValue !== 'object') return newValue
14067 14117
... ... @@ -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
... ...