Commit 6a5d9b7846dc4534ad094c152c1792ed706b98bf
1 parent
ad950e67
feat: implement websocket data source sync
Showing
3 changed files
with
536 additions
and
237 deletions
| ... | ... | @@ -458,7 +458,9 @@ EditorUi.prototype.initPages = function() |
| 458 | 458 | |
| 459 | 459 | // Updates scrollbar positions and backgrounds after validation |
| 460 | 460 | var p = this.currentPage; |
| 461 | - | |
| 461 | + console.log(this) | |
| 462 | + previewAction(this, this.currentPage) | |
| 463 | + | |
| 462 | 464 | if (p != null && p != lastPage) |
| 463 | 465 | { |
| 464 | 466 | if (p.viewState == null || p.viewState.scrollLeft == null) | ... | ... |
| ... | ... | @@ -306,7 +306,6 @@ Format.prototype.init = function () { |
| 306 | 306 | var ui = this.editorUi; |
| 307 | 307 | var editor = ui.editor; |
| 308 | 308 | var graph = editor.graph; |
| 309 | - | |
| 310 | 309 | this.update = mxUtils.bind(this, function (sender, evt) { |
| 311 | 310 | this.refresh(); |
| 312 | 311 | }); |
| ... | ... | @@ -681,7 +680,7 @@ BaseFormatPanel.prototype.installInputHandler = function ( |
| 681 | 680 | if (graph.isEditing()) { |
| 682 | 681 | graph.stopEditing(true); |
| 683 | 682 | } |
| 684 | - | |
| 683 | + // TODO update data ?? | |
| 685 | 684 | graph.getModel().beginUpdate(); |
| 686 | 685 | try { |
| 687 | 686 | var cells = ui.getSelectionState().cells; |
| ... | ... | @@ -4030,7 +4029,7 @@ TextFormatPanel.prototype.addFont = function (container) { |
| 4030 | 4029 | while ( |
| 4031 | 4030 | node != null && |
| 4032 | 4031 | node.nodeType != mxConstants.NODETYPE_ELEMENT |
| 4033 | - ) { | |
| 4032 | + ) { | |
| 4034 | 4033 | node = node.parentNode; |
| 4035 | 4034 | } |
| 4036 | 4035 | |
| ... | ... | @@ -5020,7 +5019,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5020 | 5019 | let echoRefreshFn = null |
| 5021 | 5020 | |
| 5022 | 5021 | |
| 5023 | - | |
| 5024 | 5022 | // 获取url的请求参数函数 |
| 5025 | 5023 | function getRequest() { |
| 5026 | 5024 | var url = location.search; //获取url中"?"符后的字串 |
| ... | ... | @@ -5077,8 +5075,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5077 | 5075 | } |
| 5078 | 5076 | |
| 5079 | 5077 | |
| 5080 | - | |
| 5081 | - | |
| 5082 | 5078 | /** |
| 5083 | 5079 | * @description 生成数据交互面板 |
| 5084 | 5080 | * @returns {Array} |
| ... | ... | @@ -5087,11 +5083,16 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5087 | 5083 | const eventList = [] |
| 5088 | 5084 | const eventNodeCls = 'interaction__container' |
| 5089 | 5085 | for (const item of interactionList) { |
| 5090 | - const checkbox = UseLayUi.createCheckBox({ dataSource: item, layFilter: item.type, valueField: 'type', labelField: 'label' }) | |
| 5086 | + const checkbox = UseLayUi.createCheckBox({ | |
| 5087 | + dataSource: item, | |
| 5088 | + layFilter: item.type, | |
| 5089 | + valueField: 'type', | |
| 5090 | + labelField: 'label' | |
| 5091 | + }) | |
| 5091 | 5092 | const template = ` |
| 5092 | - <div class="${eventNodeCls}"> | |
| 5093 | - ${checkbox} | |
| 5094 | - <i id="${item.type}"></i> | |
| 5093 | + <div class="${ eventNodeCls }"> | |
| 5094 | + ${ checkbox } | |
| 5095 | + <i id="${ item.type }"></i> | |
| 5095 | 5096 | </div>` |
| 5096 | 5097 | eventList.push(template) |
| 5097 | 5098 | } |
| ... | ... | @@ -5106,11 +5107,16 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5106 | 5107 | const eventList = [] |
| 5107 | 5108 | const eventNodeCls = 'interaction__container' |
| 5108 | 5109 | for (const item of list) { |
| 5109 | - const checkbox = UseLayUi.createCheckBox({ dataSource: item, layFilter: item.checkboxName, valueField: 'type', labelField: 'label' }) | |
| 5110 | + const checkbox = UseLayUi.createCheckBox({ | |
| 5111 | + dataSource: item, | |
| 5112 | + layFilter: item.checkboxName, | |
| 5113 | + valueField: 'type', | |
| 5114 | + labelField: 'label' | |
| 5115 | + }) | |
| 5110 | 5116 | const template = ` |
| 5111 | - <div class="${eventNodeCls}"> | |
| 5112 | - ${checkbox} | |
| 5113 | - <i id="${item.type}"></i> | |
| 5117 | + <div class="${ eventNodeCls }"> | |
| 5118 | + ${ checkbox } | |
| 5119 | + <i id="${ item.type }"></i> | |
| 5114 | 5120 | </div>` |
| 5115 | 5121 | eventList.push(template) |
| 5116 | 5122 | } |
| ... | ... | @@ -5147,7 +5153,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5147 | 5153 | */ |
| 5148 | 5154 | async function generatorOrgTres() { |
| 5149 | 5155 | orgPanel = defaultPanel.cloneNode(false) |
| 5150 | - const orgContainer = `<div id="${enumActionEl.ORG_EL}"></div>` | |
| 5156 | + const orgContainer = `<div id="${ enumActionEl.ORG_EL }"></div>` | |
| 5151 | 5157 | $(orgPanel).append(orgContainer) |
| 5152 | 5158 | |
| 5153 | 5159 | const [err, res] = await to(ConfigurationNodeApi.getOrgTree()) |
| ... | ... | @@ -5155,7 +5161,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5155 | 5161 | treeList = res |
| 5156 | 5162 | |
| 5157 | 5163 | UseLayUi.createTreeSelect({ |
| 5158 | - elem: `#${enumActionEl.ORG_EL}`, | |
| 5164 | + elem: `#${ enumActionEl.ORG_EL }`, | |
| 5159 | 5165 | layFilter: enumDataSourceConst.ORG_ID, |
| 5160 | 5166 | className: 'data-source__org--override', |
| 5161 | 5167 | label: '组织', |
| ... | ... | @@ -5184,10 +5190,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5184 | 5190 | const { value } = data |
| 5185 | 5191 | const selected = deviceList.find(item => item.id === value) |
| 5186 | 5192 | if (selected.deviceType === enumDataSourceConst.GATEWAY) { |
| 5187 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'block' }) | |
| 5193 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' }) | |
| 5188 | 5194 | getSlaveDeviceByMasterDeviceId(currentCheckedOrgNode, selected.id) |
| 5189 | 5195 | } else { |
| 5190 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'none' }) | |
| 5196 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'none' }) | |
| 5191 | 5197 | getAttrByDeviceId(selected.id) |
| 5192 | 5198 | } |
| 5193 | 5199 | } |
| ... | ... | @@ -5227,14 +5233,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5227 | 5233 | } |
| 5228 | 5234 | |
| 5229 | 5235 | |
| 5230 | - | |
| 5231 | 5236 | /** |
| 5232 | 5237 | * @description 根据组织ID获取设备 |
| 5233 | 5238 | */ |
| 5234 | 5239 | async function getDevicesByOrgId(organizationId) { |
| 5235 | 5240 | if (organizationId) { |
| 5236 | 5241 | const items = deviceList = await ConfigurationNodeApi.getMasterDevice(organizationId); |
| 5237 | - $(`#${enumActionEl.DEVICE_EL}`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items })) | |
| 5242 | + $(`#${ enumActionEl.DEVICE_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items })) | |
| 5238 | 5243 | form.render('select', CONTAINER_FILTER) |
| 5239 | 5244 | } |
| 5240 | 5245 | } |
| ... | ... | @@ -5245,7 +5250,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5245 | 5250 | async function getSlaveDeviceByMasterDeviceId(orgId, deviceId) { |
| 5246 | 5251 | if (deviceId && currentCheckedOrgNode) { |
| 5247 | 5252 | const items = await ConfigurationNodeApi.getSlaveDevice(orgId, deviceId); |
| 5248 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items })) | |
| 5253 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: items })) | |
| 5249 | 5254 | form.render('select', CONTAINER_FILTER) |
| 5250 | 5255 | } |
| 5251 | 5256 | } |
| ... | ... | @@ -5256,7 +5261,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5256 | 5261 | async function getAttrByDeviceId(tbDeviceId) { |
| 5257 | 5262 | if (tbDeviceId) { |
| 5258 | 5263 | const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(tbDeviceId)) |
| 5259 | - $(`#${enumActionEl.ATTR_EL}`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: res })) | |
| 5264 | + $(`#${ enumActionEl.ATTR_EL }`).find('select').html(UseLayUi.generateOptionTemplate({ dataSource: res })) | |
| 5260 | 5265 | form.render('select', CONTAINER_FILTER) |
| 5261 | 5266 | } |
| 5262 | 5267 | } |
| ... | ... | @@ -5276,7 +5281,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5276 | 5281 | await getNodeBindInfo() |
| 5277 | 5282 | |
| 5278 | 5283 | |
| 5279 | - | |
| 5280 | 5284 | function echoDataSource() { |
| 5281 | 5285 | const { dataSources = [] } = currentNodeData |
| 5282 | 5286 | const [dataSource = {}] = dataSources |
| ... | ... | @@ -5284,21 +5288,19 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5284 | 5288 | const queue = [] |
| 5285 | 5289 | if (orgId) { |
| 5286 | 5290 | currentCheckedOrgNode = orgId |
| 5287 | - queue.push(() => getDevicesByOrgId(orgId)) | |
| 5291 | + queue.push(getDevicesByOrgId(orgId)) | |
| 5288 | 5292 | } |
| 5289 | 5293 | if (slaveDeviceId) { |
| 5290 | - queue.push(() => { | |
| 5291 | - getSlaveDeviceByMasterDeviceId(orgId, deviceId) | |
| 5292 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'block' }) | |
| 5293 | - }) | |
| 5294 | - queue.push(() => getAttrByDeviceId(slaveDeviceId)) | |
| 5294 | + queue.push(getSlaveDeviceByMasterDeviceId(orgId, deviceId)) | |
| 5295 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' }) | |
| 5296 | + queue.push(getAttrByDeviceId(slaveDeviceId)) | |
| 5295 | 5297 | } else { |
| 5296 | - queue.push(() => getAttrByDeviceId(deviceId)) | |
| 5298 | + queue.push(getAttrByDeviceId(deviceId)) | |
| 5297 | 5299 | } |
| 5298 | - Promise.all(queue.map(item => item())) | |
| 5300 | + Promise.all(queue) | |
| 5299 | 5301 | .finally(() => { |
| 5300 | 5302 | const orgNode = UseLayUi.findTreeObjectByField(treeList, currentCheckedOrgNode) |
| 5301 | - $(`#${enumActionEl.ORG_EL} input[name="${enumDataSourceConst.ORG_ID}"]`).parent().find('span').html(orgNode?.name) | |
| 5303 | + $(`#${ enumActionEl.ORG_EL } input[name="${ enumDataSourceConst.ORG_ID }"]`).parent().find('span').html(orgNode?.name) | |
| 5302 | 5304 | form.val(CONTAINER_FILTER, { |
| 5303 | 5305 | orgId, |
| 5304 | 5306 | deviceId, |
| ... | ... | @@ -5330,6 +5332,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5330 | 5332 | $(container).append(fragment) |
| 5331 | 5333 | |
| 5332 | 5334 | } |
| 5335 | + | |
| 5333 | 5336 | mount() |
| 5334 | 5337 | |
| 5335 | 5338 | } |
| ... | ... | @@ -5457,7 +5460,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5457 | 5460 | } |
| 5458 | 5461 | |
| 5459 | 5462 | |
| 5460 | - | |
| 5461 | 5463 | /** |
| 5462 | 5464 | * @description 所有设备选项 |
| 5463 | 5465 | * @type {*[]} |
| ... | ... | @@ -5466,7 +5468,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5466 | 5468 | |
| 5467 | 5469 | let addRowNumber = 0 |
| 5468 | 5470 | |
| 5469 | - const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}` | |
| 5471 | + const getRowFilter = (rowNumber) => `${ enumActionEl.ROW_FILTER }${ rowNumber }` | |
| 5470 | 5472 | |
| 5471 | 5473 | /** |
| 5472 | 5474 | * @description 枚举常量 |
| ... | ... | @@ -5502,25 +5504,25 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5502 | 5504 | |
| 5503 | 5505 | function addRecord() { |
| 5504 | 5506 | const content = ` |
| 5505 | - <tr class="layui-form" lay-filter="${enumActionEl.ROW_FILTER}${addRowNumber}"> | |
| 5507 | + <tr class="layui-form" lay-filter="${ enumActionEl.ROW_FILTER }${ addRowNumber }"> | |
| 5506 | 5508 | <td> |
| 5507 | - <select name="${enumConst.DEVICE}" lay-filter="${enumConst.DEVICE}" lay-verType="tips" lay-verify="required"></select> | |
| 5509 | + <select name="${ enumConst.DEVICE }" lay-filter="${ enumConst.DEVICE }" lay-verType="tips" lay-verify="required"></select> | |
| 5508 | 5510 | </td> |
| 5509 | 5511 | <td> |
| 5510 | - <select name="${enumConst.SLAVE_DEVICE}" lay-filter="${enumConst.SLAVE_DEVICE}" lay-verType="tips"></select> | |
| 5512 | + <select name="${ enumConst.SLAVE_DEVICE }" lay-filter="${ enumConst.SLAVE_DEVICE }" lay-verType="tips"></select> | |
| 5511 | 5513 | </td> |
| 5512 | 5514 | <td> |
| 5513 | - <select name="${enumConst.ATTR}" lay-verType="tips" lay-verify="required"></select> | |
| 5515 | + <select name="${ enumConst.ATTR }" lay-verType="tips" lay-verify="required"></select> | |
| 5514 | 5516 | </td> |
| 5515 | 5517 | <td> |
| 5516 | - <textarea name="${enumConst.VALUE}" placeholder="请输入命令" lay-verType="tips" class="layui-textarea" ></textarea> | |
| 5518 | + <textarea name="${ enumConst.VALUE }" placeholder="请输入命令" lay-verType="tips" class="layui-textarea" ></textarea> | |
| 5517 | 5519 | </td> |
| 5518 | 5520 | <td> |
| 5519 | - <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_ROW_EL}">删除</button> | |
| 5521 | + <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_ROW_EL }">删除</button> | |
| 5520 | 5522 | </td> |
| 5521 | 5523 | </tr> |
| 5522 | 5524 | ` |
| 5523 | - $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).append(content) | |
| 5525 | + $(`#${ enumActionEl.DEVICE_DATA_BODY_EL }`).append(content) | |
| 5524 | 5526 | setDeviceOptions(addRowNumber) |
| 5525 | 5527 | form.render('select', getRowFilter(addRowNumber)) |
| 5526 | 5528 | addRowNumber++ |
| ... | ... | @@ -5534,7 +5536,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5534 | 5536 | const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(data.value)) |
| 5535 | 5537 | if (!res) return |
| 5536 | 5538 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res }) |
| 5537 | - $(data.elem).parents('tr').find(`select[name="${enumConst.ATTR}"]`).html(generateOption) | |
| 5539 | + $(data.elem).parents('tr').find(`select[name="${ enumConst.ATTR }"]`).html(generateOption) | |
| 5538 | 5540 | form.render('select') |
| 5539 | 5541 | } |
| 5540 | 5542 | |
| ... | ... | @@ -5542,20 +5544,20 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5542 | 5544 | * @description 选择设备监听事件 |
| 5543 | 5545 | */ |
| 5544 | 5546 | function createSelectDeviceListenEvent() { |
| 5545 | - form.on(`select(${enumConst.DEVICE})`, async (data) => { | |
| 5547 | + form.on(`select(${ enumConst.DEVICE })`, async (data) => { | |
| 5546 | 5548 | const isGATEWAY = allDeviceOptions.find(item => item.id === data.value)?.deviceType === "GATEWAY" |
| 5547 | 5549 | // 网关设备请求子设备 |
| 5548 | 5550 | if (isGATEWAY && data.value) { |
| 5549 | 5551 | const [err, res] = await to(ConfigurationNodeApi.getSlaveDevice(currentCheckedOrgNode, data.value)) |
| 5550 | 5552 | if (!res) return |
| 5551 | 5553 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res }) |
| 5552 | - $(data.elem).parents('tr').find(`select[name="${enumConst.SLAVE_DEVICE}"]`).html(generateOption) | |
| 5554 | + $(data.elem).parents('tr').find(`select[name="${ enumConst.SLAVE_DEVICE }"]`).html(generateOption) | |
| 5553 | 5555 | } else { |
| 5554 | 5556 | updateVariableOptions(data) |
| 5555 | 5557 | } |
| 5556 | 5558 | form.render('select') |
| 5557 | 5559 | }) |
| 5558 | - form.on(`select(${enumConst.SLAVE_DEVICE})`, (data) => { | |
| 5560 | + form.on(`select(${ enumConst.SLAVE_DEVICE })`, (data) => { | |
| 5559 | 5561 | updateVariableOptions(data) |
| 5560 | 5562 | }) |
| 5561 | 5563 | } |
| ... | ... | @@ -5564,7 +5566,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5564 | 5566 | * @description 删除行 |
| 5565 | 5567 | */ |
| 5566 | 5568 | function createDeleteRowListenEvent() { |
| 5567 | - $(`.${enumActionEl.DEL_ROW_EL}`).click((event) => { | |
| 5569 | + $(`.${ enumActionEl.DEL_ROW_EL }`).click((event) => { | |
| 5568 | 5570 | $(event.target).parents('tr').remove() |
| 5569 | 5571 | }) |
| 5570 | 5572 | } |
| ... | ... | @@ -5573,10 +5575,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5573 | 5575 | * @description 新增行 |
| 5574 | 5576 | */ |
| 5575 | 5577 | function createAddRowListenEvent() { |
| 5576 | - $(`#${enumActionEl.ADD_ROW_EL}`).click(() => { | |
| 5578 | + $(`#${ enumActionEl.ADD_ROW_EL }`).click(() => { | |
| 5577 | 5579 | addRecord() |
| 5578 | 5580 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions }) |
| 5579 | - $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).last().find(`select[name="${enumConst.DEVICE}"]`).html(generateOption) | |
| 5581 | + $(`#${ enumActionEl.DEVICE_DATA_BODY_EL } tr`).last().find(`select[name="${ enumConst.DEVICE }"]`).html(generateOption) | |
| 5580 | 5582 | createDeleteRowListenEvent() |
| 5581 | 5583 | form.render('select') |
| 5582 | 5584 | }) |
| ... | ... | @@ -5587,7 +5589,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5587 | 5589 | */ |
| 5588 | 5590 | function setDeviceOptions(row) { |
| 5589 | 5591 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions }) |
| 5590 | - $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr[lay-filter="${getRowFilter(row)}"]`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption) | |
| 5592 | + $(`#${ enumActionEl.DEVICE_DATA_BODY_EL } tr[lay-filter="${ getRowFilter(row) }"]`).find(`select[name="${ enumConst.DEVICE }"]`).html(generateOption) | |
| 5591 | 5593 | } |
| 5592 | 5594 | |
| 5593 | 5595 | /** |
| ... | ... | @@ -5607,7 +5609,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5607 | 5609 | */ |
| 5608 | 5610 | function mountSelectOptions(row, key, data) { |
| 5609 | 5611 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: data }) |
| 5610 | - $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).find(`tr[lay-filter="${getRowFilter(row)}"] select[name="${key}"]`).html(generateOption) | |
| 5612 | + $(`#${ enumActionEl.DEVICE_DATA_BODY_EL }`).find(`tr[lay-filter="${ getRowFilter(row) }"] select[name="${ key }"]`).html(generateOption) | |
| 5611 | 5613 | } |
| 5612 | 5614 | |
| 5613 | 5615 | /** |
| ... | ... | @@ -5688,7 +5690,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5688 | 5690 | <div class="layui-form-item"> |
| 5689 | 5691 | <label class="layui-form-label">事件</label> |
| 5690 | 5692 | <div class="layui-input-block"> |
| 5691 | - <input type="text" name="event" class="layui-input" value="${enumenumEventType[type]}" disabled> | |
| 5693 | + <input type="text" name="event" class="layui-input" value="${ enumenumEventType[type] }" disabled> | |
| 5692 | 5694 | </div> |
| 5693 | 5695 | </div> |
| 5694 | 5696 | <div class="layui-form-item"> |
| ... | ... | @@ -5725,10 +5727,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5725 | 5727 | <th style="text-align:center">操作</th> |
| 5726 | 5728 | </tr> |
| 5727 | 5729 | </thead> |
| 5728 | - <tbody id="${enumActionEl.DEVICE_DATA_BODY_EL}"></tbody> | |
| 5730 | + <tbody id="${ enumActionEl.DEVICE_DATA_BODY_EL }"></tbody> | |
| 5729 | 5731 | </table> |
| 5730 | 5732 | <div style="display:flex;justify-content:center;"> |
| 5731 | - <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${enumActionEl.ADD_ROW_EL}">添加一条</button> | |
| 5733 | + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${ enumActionEl.ADD_ROW_EL }">添加一条</button> | |
| 5732 | 5734 | </div> |
| 5733 | 5735 | </div> |
| 5734 | 5736 | </form>` |
| ... | ... | @@ -5742,7 +5744,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5742 | 5744 | btn: ["保存", "取消"], |
| 5743 | 5745 | shade: ["0.7", "#fafafa"], |
| 5744 | 5746 | yes(index) { |
| 5745 | - form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => { | |
| 5747 | + form.on(`submit(${ enumActionEl.LAYER_SUBMIT_FILTER })`, data => { | |
| 5746 | 5748 | submit(() => { |
| 5747 | 5749 | layer.close(index) |
| 5748 | 5750 | getNodeBindInfo() |
| ... | ... | @@ -5753,7 +5755,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5753 | 5755 | return false |
| 5754 | 5756 | }, |
| 5755 | 5757 | async success(layero, index) { |
| 5756 | - $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 'lay-submit': '', 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER }) | |
| 5758 | + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ | |
| 5759 | + 'lay-submit': '', | |
| 5760 | + 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER | |
| 5761 | + }) | |
| 5757 | 5762 | await getMaterDevice() |
| 5758 | 5763 | const info = getLayerBindInfo('event', type) |
| 5759 | 5764 | if (!info) { |
| ... | ... | @@ -5843,8 +5848,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5843 | 5848 | [enumGetValue[content.type]]: content.value |
| 5844 | 5849 | } |
| 5845 | 5850 | if (content.type === enumActionType.PAGE) { |
| 5846 | - $(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'block' }) | |
| 5847 | - $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' }) | |
| 5851 | + $(`#${ enumActionEl.PAGE_EL_ID }`).css({ display: 'block' }) | |
| 5852 | + $(`#${ enumActionEl.LINK_EL_ID }`).css({ display: 'none' }) | |
| 5848 | 5853 | } |
| 5849 | 5854 | form.val(enumActionEl.FORM_FILTER, val) |
| 5850 | 5855 | } |
| ... | ... | @@ -5891,14 +5896,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5891 | 5896 | } |
| 5892 | 5897 | |
| 5893 | 5898 | function generatorEventListen() { |
| 5894 | - form.on(`select(${enumActionEl.ACTION_SELECT_FILTER})`, (data) => { | |
| 5899 | + form.on(`select(${ enumActionEl.ACTION_SELECT_FILTER })`, (data) => { | |
| 5895 | 5900 | const { value } = data |
| 5896 | 5901 | if (value === enumActionType.PAGE) { |
| 5897 | - $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' }) | |
| 5898 | - $(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'block' }) | |
| 5902 | + $(`#${ enumActionEl.LINK_EL_ID }`).css({ display: 'none' }) | |
| 5903 | + $(`#${ enumActionEl.PAGE_EL_ID }`).css({ display: 'block' }) | |
| 5899 | 5904 | } else if (value === enumActionType.LINK) { |
| 5900 | - $(`#${enumActionEl.PAGE_EL_ID}`).css({ display: 'none' }) | |
| 5901 | - $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'block' }) | |
| 5905 | + $(`#${ enumActionEl.PAGE_EL_ID }`).css({ display: 'none' }) | |
| 5906 | + $(`#${ enumActionEl.LINK_EL_ID }`).css({ display: 'block' }) | |
| 5902 | 5907 | } |
| 5903 | 5908 | }) |
| 5904 | 5909 | } |
| ... | ... | @@ -5909,33 +5914,33 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5909 | 5914 | function createLayerForm(type) { |
| 5910 | 5915 | |
| 5911 | 5916 | const content = ` |
| 5912 | - <form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}"> | |
| 5917 | + <form class="layui-form" lay-filter="${ enumActionEl.FORM_FILTER }"> | |
| 5913 | 5918 | <div style="width:400px"> |
| 5914 | 5919 | <div class="layui-form-item"> |
| 5915 | 5920 | <label class="layui-form-label">事件</label> |
| 5916 | 5921 | <div class="layui-input-block"> |
| 5917 | - <input type="text" name="${enumConst.EVENT}" disabled class="layui-input" value="${enumEventType[type]}"> | |
| 5922 | + <input type="text" name="${ enumConst.EVENT }" disabled class="layui-input" value="${ enumEventType[type] }"> | |
| 5918 | 5923 | </div> |
| 5919 | 5924 | </div> |
| 5920 | 5925 | <div class="layui-form-item"> |
| 5921 | 5926 | <label class="layui-form-label">动作</label> |
| 5922 | 5927 | <div class="layui-input-block"> |
| 5923 | - <select name="${enumConst.ACTION}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ACTION_SELECT_FILTER}"> | |
| 5924 | - ${generatorActionOptions()} | |
| 5928 | + <select name="${ enumConst.ACTION }" lay-verType="tips" lay-verify="required" lay-filter="${ enumActionEl.ACTION_SELECT_FILTER }"> | |
| 5929 | + ${ generatorActionOptions() } | |
| 5925 | 5930 | </select> |
| 5926 | 5931 | </div> |
| 5927 | 5932 | </div> |
| 5928 | - <div class="layui-form-item" id="${enumActionEl.LINK_EL_ID}"> | |
| 5933 | + <div class="layui-form-item" id="${ enumActionEl.LINK_EL_ID }"> | |
| 5929 | 5934 | <label class="layui-form-label">链接</label> |
| 5930 | 5935 | <div class="layui-input-block"> |
| 5931 | - <input type="text" lay-verType="tips" name="${enumConst.LINK_VALUE}" class="layui-input"> | |
| 5936 | + <input type="text" lay-verType="tips" name="${ enumConst.LINK_VALUE }" class="layui-input"> | |
| 5932 | 5937 | </div> |
| 5933 | 5938 | </div> |
| 5934 | - <div class="layui-form-item" id="${enumActionEl.PAGE_EL_ID}" style="display:none"> | |
| 5939 | + <div class="layui-form-item" id="${ enumActionEl.PAGE_EL_ID }" style="display:none"> | |
| 5935 | 5940 | <label class="layui-form-label">页面</label> |
| 5936 | 5941 | <div class="layui-input-block"> |
| 5937 | - <select name="${enumConst.PAGE_VALUE}" lay-verType="tips" id="pageSelect"> | |
| 5938 | - ${generatorPageOptions()} | |
| 5942 | + <select name="${ enumConst.PAGE_VALUE }" lay-verType="tips" id="pageSelect"> | |
| 5943 | + ${ generatorPageOptions() } | |
| 5939 | 5944 | </select> |
| 5940 | 5945 | </div> |
| 5941 | 5946 | </div> |
| ... | ... | @@ -5951,7 +5956,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5951 | 5956 | area: ["800px", "500px"], |
| 5952 | 5957 | btn: ["保存", "取消"], |
| 5953 | 5958 | yes(index) { |
| 5954 | - form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => { | |
| 5959 | + form.on(`submit(${ enumActionEl.LAYER_SUBMIT_FILTER })`, data => { | |
| 5955 | 5960 | submit(() => { |
| 5956 | 5961 | layer.close(index) |
| 5957 | 5962 | getNodeBindInfo() |
| ... | ... | @@ -5962,7 +5967,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 5962 | 5967 | layer.close(index); |
| 5963 | 5968 | }, |
| 5964 | 5969 | success(layero) { |
| 5965 | - $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 'lay-submit': '', 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER }) | |
| 5970 | + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ | |
| 5971 | + 'lay-submit': '', | |
| 5972 | + 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER | |
| 5973 | + }) | |
| 5966 | 5974 | generatorEventListen() |
| 5967 | 5975 | const info = getLayerBindInfo('event', type) |
| 5968 | 5976 | form.render(null, enumActionEl.FORM_FILTER) |
| ... | ... | @@ -6004,10 +6012,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6004 | 6012 | LAYER_SUBMIT_FILTER: 'dynamicEffectLayerFilter' |
| 6005 | 6013 | } |
| 6006 | 6014 | |
| 6007 | - const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}` | |
| 6015 | + const getRowFilter = (rowNumber) => `${ enumActionEl.ROW_FILTER }${ rowNumber }` | |
| 6008 | 6016 | |
| 6009 | 6017 | /** |
| 6010 | - * @description | |
| 6018 | + * @description | |
| 6011 | 6019 | */ |
| 6012 | 6020 | const enumConst = { |
| 6013 | 6021 | MIN: 'min', |
| ... | ... | @@ -6042,7 +6050,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6042 | 6050 | */ |
| 6043 | 6051 | function generatorOrgTreeSelect() { |
| 6044 | 6052 | UseLayUi.createTreeSelect({ |
| 6045 | - elem: `#${enumActionEl.ORG_EL}`, | |
| 6053 | + elem: `#${ enumActionEl.ORG_EL }`, | |
| 6046 | 6054 | layFilter: enumConst.ORG_ID, |
| 6047 | 6055 | label: '组织', |
| 6048 | 6056 | singleUsage: false, |
| ... | ... | @@ -6066,7 +6074,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6066 | 6074 | if (res) { |
| 6067 | 6075 | deviceList = res |
| 6068 | 6076 | const template = UseLayUi.generateOptionTemplate({ dataSource: res }) |
| 6069 | - $(`#${enumActionEl.DEVICE_EL} select`).html(template) | |
| 6077 | + $(`#${ enumActionEl.DEVICE_EL } select`).html(template) | |
| 6070 | 6078 | form.render('select', enumActionEl.FORM_FILTER) |
| 6071 | 6079 | } |
| 6072 | 6080 | } |
| ... | ... | @@ -6078,7 +6086,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6078 | 6086 | const [err, res] = await to(ConfigurationNodeApi.getSlaveDevice(orgId, id)) |
| 6079 | 6087 | if (res) { |
| 6080 | 6088 | const template = UseLayUi.generateOptionTemplate({ dataSource: res }) |
| 6081 | - $(`#${enumActionEl.SLAVE_DEVICE_EL} select`).html(template) | |
| 6089 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL } select`).html(template) | |
| 6082 | 6090 | form.render('select', enumActionEl.FORM_FILTER) |
| 6083 | 6091 | } |
| 6084 | 6092 | } |
| ... | ... | @@ -6090,7 +6098,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6090 | 6098 | const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(id)) |
| 6091 | 6099 | if (res) { |
| 6092 | 6100 | const template = UseLayUi.generateOptionTemplate({ dataSource: res }) |
| 6093 | - $(`#${enumActionEl.ATTR_EL} select`).html(template) | |
| 6101 | + $(`#${ enumActionEl.ATTR_EL } select`).html(template) | |
| 6094 | 6102 | // form.render('select') |
| 6095 | 6103 | form.render('select', enumActionEl.FORM_FILTER) |
| 6096 | 6104 | } |
| ... | ... | @@ -6105,7 +6113,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6105 | 6113 | return ` |
| 6106 | 6114 | <div class="layui-form-item" style="margin-bottom: 0px"> |
| 6107 | 6115 | <div class="layui-input-block" style="margin-left: 0px;"> |
| 6108 | - <select name="${enumConst.TYPE}" lay-verify="required">${template}</select> | |
| 6116 | + <select name="${ enumConst.TYPE }" lay-verify="required">${ template }</select> | |
| 6109 | 6117 | </div> |
| 6110 | 6118 | </div> |
| 6111 | 6119 | ` |
| ... | ... | @@ -6116,21 +6124,21 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6116 | 6124 | */ |
| 6117 | 6125 | function addRecord() { |
| 6118 | 6126 | const content = ` |
| 6119 | - <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}"> | |
| 6120 | - ${IS_DISPLAY && `<td>${generatorDisplayOptions()}</td>`} | |
| 6127 | + <tr class="layui-form" lay-filter="${ getRowFilter(addRowNumber) }"> | |
| 6128 | + ${ IS_DISPLAY && `<td>${ generatorDisplayOptions() }</td>` } | |
| 6121 | 6129 | <td> |
| 6122 | - <input lay-verType="tips" lay-verify="required" type="text" name="${enumConst.MIN}" class="layui-input"> | |
| 6130 | + <input lay-verType="tips" lay-verify="required" type="text" name="${ enumConst.MIN }" class="layui-input"> | |
| 6123 | 6131 | </td> |
| 6124 | 6132 | <td> |
| 6125 | - <input lay-verType="tips" lay-verify="required" type="text" name="${enumConst.MAX}" class="layui-input"> | |
| 6133 | + <input lay-verType="tips" lay-verify="required" type="text" name="${ enumConst.MAX }" class="layui-input"> | |
| 6126 | 6134 | </td> |
| 6127 | 6135 | <td style="text-align: center;"> |
| 6128 | - <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_BTN_EL}">删除</button> | |
| 6136 | + <button type="button" class="layui-btn layui-btn-primary layui-border-red ${ enumActionEl.DEL_BTN_EL }">删除</button> | |
| 6129 | 6137 | </td> |
| 6130 | 6138 | </tr> |
| 6131 | 6139 | ` |
| 6132 | 6140 | addRowNumber++ |
| 6133 | - $(`#${enumActionEl.TABLE_BODY_EL}`).append(content) | |
| 6141 | + $(`#${ enumActionEl.TABLE_BODY_EL }`).append(content) | |
| 6134 | 6142 | if (IS_DISPLAY) { |
| 6135 | 6143 | // form.render(null, getRowFilter(addRowNumber)) |
| 6136 | 6144 | form.render() |
| ... | ... | @@ -6141,7 +6149,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6141 | 6149 | * @description 创建添加记录事件 |
| 6142 | 6150 | */ |
| 6143 | 6151 | function createAddRowListenEvent() { |
| 6144 | - $(`#${enumActionEl.ADD_BTN_EL}`).click(() => { | |
| 6152 | + $(`#${ enumActionEl.ADD_BTN_EL }`).click(() => { | |
| 6145 | 6153 | addRecord() |
| 6146 | 6154 | createDeleteRowListenEvent() |
| 6147 | 6155 | }) |
| ... | ... | @@ -6151,7 +6159,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6151 | 6159 | * @description 创建删除行事件 |
| 6152 | 6160 | */ |
| 6153 | 6161 | function createDeleteRowListenEvent() { |
| 6154 | - $(`.${enumActionEl.DEL_BTN_EL}`).click((event) => { | |
| 6162 | + $(`.${ enumActionEl.DEL_BTN_EL }`).click((event) => { | |
| 6155 | 6163 | $(event.target).parents('tr').remove() |
| 6156 | 6164 | }) |
| 6157 | 6165 | } |
| ... | ... | @@ -6160,19 +6168,19 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6160 | 6168 | * @description 创建下拉联动事件 |
| 6161 | 6169 | */ |
| 6162 | 6170 | function createSelectLinkageListenEvent() { |
| 6163 | - form.on(`select(${enumActionEl.DEVICE_EL})`, (data) => { | |
| 6171 | + form.on(`select(${ enumActionEl.DEVICE_EL })`, (data) => { | |
| 6164 | 6172 | const { value } = data |
| 6165 | 6173 | const selected = deviceList.find(item => item.id === value) |
| 6166 | 6174 | if (selected.deviceType === enumConst.GATEWAY) { |
| 6167 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'block' }) | |
| 6175 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' }) | |
| 6168 | 6176 | getSlaveDeviceByMasterDevice(currentOrgId, selected.id) |
| 6169 | 6177 | } else { |
| 6170 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'none' }) | |
| 6178 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'none' }) | |
| 6171 | 6179 | getAttrsByDevice(selected.id) |
| 6172 | 6180 | } |
| 6173 | 6181 | }) |
| 6174 | 6182 | |
| 6175 | - form.on(`select(${enumActionEl.SLAVE_DEVICE_EL})`, (data) => { | |
| 6183 | + form.on(`select(${ enumActionEl.SLAVE_DEVICE_EL })`, (data) => { | |
| 6176 | 6184 | getAttrsByDevice(data.value) |
| 6177 | 6185 | }) |
| 6178 | 6186 | } |
| ... | ... | @@ -6195,16 +6203,16 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6195 | 6203 | echoOrgTree(orgId) |
| 6196 | 6204 | const queue = [] |
| 6197 | 6205 | if (orgId) { |
| 6198 | - queue.push(() => getDeviceByOrg(orgId)) | |
| 6206 | + queue.push(getDeviceByOrg(orgId)) | |
| 6199 | 6207 | } |
| 6200 | 6208 | if (slaveDeviceId) { |
| 6201 | - $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'block' }) | |
| 6202 | - queue.push(() => getSlaveDeviceByMasterDevice(orgId, deviceId)) | |
| 6203 | - queue.push(() => getAttrsByDevice(slaveDeviceId)) | |
| 6209 | + $(`#${ enumActionEl.SLAVE_DEVICE_EL }`).css({ display: 'block' }) | |
| 6210 | + queue.push(getSlaveDeviceByMasterDevice(orgId, deviceId)) | |
| 6211 | + queue.push(getAttrsByDevice(slaveDeviceId)) | |
| 6204 | 6212 | } else { |
| 6205 | - queue.push(() => getAttrsByDevice(deviceId)) | |
| 6213 | + queue.push(getAttrsByDevice(deviceId)) | |
| 6206 | 6214 | } |
| 6207 | - Promise.all(queue.map(item => item())).finally(() => { | |
| 6215 | + Promise.all(queue).finally(() => { | |
| 6208 | 6216 | form.val(enumActionEl.FORM_FILTER, { slaveDeviceId, deviceId, attr, orgId }) |
| 6209 | 6217 | }) |
| 6210 | 6218 | } |
| ... | ... | @@ -6224,7 +6232,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6224 | 6232 | */ |
| 6225 | 6233 | function echoOrgTree(id) { |
| 6226 | 6234 | const node = UseLayUi.findTreeObjectByField(treeList, id) |
| 6227 | - $(`#${enumActionEl.ORG_EL}`).find(`input[name="${enumConst.ORG_ID}"]`).parent().find('span').html(node.name) | |
| 6235 | + $(`#${ enumActionEl.ORG_EL }`).find(`input[name="${ enumConst.ORG_ID }"]`).parent().find('span').html(node.name) | |
| 6228 | 6236 | } |
| 6229 | 6237 | |
| 6230 | 6238 | async function submit(callback) { |
| ... | ... | @@ -6247,7 +6255,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6247 | 6255 | |
| 6248 | 6256 | function createLayerForm(type) { |
| 6249 | 6257 | const content = ` |
| 6250 | - <form class="layui-form" lay-filter="${enumActionEl.FORM_FILTER}"> | |
| 6258 | + <form class="layui-form" lay-filter="${ enumActionEl.FORM_FILTER }"> | |
| 6251 | 6259 | <div style="width:400px"> |
| 6252 | 6260 | <div class="layui-form-item"> |
| 6253 | 6261 | <label class="layui-form-label">类型</label> |
| ... | ... | @@ -6257,28 +6265,28 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6257 | 6265 | </div> |
| 6258 | 6266 | </div> |
| 6259 | 6267 | |
| 6260 | - <div id="${enumActionEl.ORG_EL}">组织</div> | |
| 6268 | + <div id="${ enumActionEl.ORG_EL }">组织</div> | |
| 6261 | 6269 | |
| 6262 | - <div class="layui-form-item" id="${enumActionEl.DEVICE_EL}"> | |
| 6270 | + <div class="layui-form-item" id="${ enumActionEl.DEVICE_EL }"> | |
| 6263 | 6271 | <label class="layui-form-label">设备</label> |
| 6264 | 6272 | <div class="layui-input-block"> |
| 6265 | - <select name="${enumConst.DEVICE_ID}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.DEVICE_EL}"> | |
| 6273 | + <select name="${ enumConst.DEVICE_ID }" lay-verType="tips" lay-verify="required" lay-filter="${ enumActionEl.DEVICE_EL }"> | |
| 6266 | 6274 | </select> |
| 6267 | 6275 | </div> |
| 6268 | 6276 | </div> |
| 6269 | 6277 | |
| 6270 | - <div class="layui-form-item" id="${enumActionEl.SLAVE_DEVICE_EL}" style="display: none"> | |
| 6278 | + <div class="layui-form-item" id="${ enumActionEl.SLAVE_DEVICE_EL }" style="display: none"> | |
| 6271 | 6279 | <label class="layui-form-label">子设备</label> |
| 6272 | 6280 | <div class="layui-input-block"> |
| 6273 | - <select name="${enumConst.SLAVE_DEVICE_ID}" lay-verType="tips" lay-filter="${enumActionEl.SLAVE_DEVICE_EL}"> | |
| 6281 | + <select name="${ enumConst.SLAVE_DEVICE_ID }" lay-verType="tips" lay-filter="${ enumActionEl.SLAVE_DEVICE_EL }"> | |
| 6274 | 6282 | </select> |
| 6275 | 6283 | </div> |
| 6276 | 6284 | </div> |
| 6277 | 6285 | |
| 6278 | - <div class="layui-form-item" id="${enumActionEl.ATTR_EL}"> | |
| 6286 | + <div class="layui-form-item" id="${ enumActionEl.ATTR_EL }"> | |
| 6279 | 6287 | <label class="layui-form-label">属性</label> |
| 6280 | 6288 | <div class="layui-input-block"> |
| 6281 | - <select name="${enumConst.ATTR}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ATTR_EL}"></select> | |
| 6289 | + <select name="${ enumConst.ATTR }" lay-verType="tips" lay-verify="required" lay-filter="${ enumActionEl.ATTR_EL }"></select> | |
| 6282 | 6290 | </div> |
| 6283 | 6291 | </div> |
| 6284 | 6292 | </div> |
| ... | ... | @@ -6286,23 +6294,23 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6286 | 6294 | <div> |
| 6287 | 6295 | <table class="layui-table" > |
| 6288 | 6296 | <colgroup> |
| 6289 | - ${IS_DISPLAY ? '<col width="240">' : ''} | |
| 6297 | + ${ IS_DISPLAY ? '<col width="240">' : '' } | |
| 6290 | 6298 | <col width="240"> |
| 6291 | 6299 | <col width="240"> |
| 6292 | 6300 | <col> |
| 6293 | 6301 | </colgroup> |
| 6294 | 6302 | <thead> |
| 6295 | 6303 | <tr> |
| 6296 | - ${IS_DISPLAY ? '<th style="text-align:center">类型</th>' : ''} | |
| 6304 | + ${ IS_DISPLAY ? '<th style="text-align:center">类型</th>' : '' } | |
| 6297 | 6305 | <th style="text-align:center">最小值(<=)</th> |
| 6298 | 6306 | <th style="text-align:center">最大值(>=)</th> |
| 6299 | 6307 | <th style="text-align:center">操作</th> |
| 6300 | 6308 | </tr> |
| 6301 | 6309 | </thead> |
| 6302 | - <tbody id="${enumActionEl.TABLE_BODY_EL}"></tbody> | |
| 6310 | + <tbody id="${ enumActionEl.TABLE_BODY_EL }"></tbody> | |
| 6303 | 6311 | </table> |
| 6304 | 6312 | <div style="display:flex;justify-content:center;"> |
| 6305 | - <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${enumActionEl.ADD_BTN_EL}">添加一条</button> | |
| 6313 | + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${ enumActionEl.ADD_BTN_EL }">添加一条</button> | |
| 6306 | 6314 | </div> |
| 6307 | 6315 | </div> |
| 6308 | 6316 | ` |
| ... | ... | @@ -6314,7 +6322,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6314 | 6322 | btn: ['保存', '取消'], |
| 6315 | 6323 | area: IS_DISPLAY ? '1000px' : '800PX', |
| 6316 | 6324 | success(layero) { |
| 6317 | - $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 'lay-submit': '', 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER }) | |
| 6325 | + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ | |
| 6326 | + 'lay-submit': '', | |
| 6327 | + 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER | |
| 6328 | + }) | |
| 6318 | 6329 | generatorOrgTreeSelect() |
| 6319 | 6330 | const info = getLayerBindInfo('act', type) |
| 6320 | 6331 | if (info) { |
| ... | ... | @@ -6326,7 +6337,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6326 | 6337 | form.render() |
| 6327 | 6338 | }, |
| 6328 | 6339 | yes(index) { |
| 6329 | - form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => { | |
| 6340 | + form.on(`submit(${ enumActionEl.LAYER_SUBMIT_FILTER })`, data => { | |
| 6330 | 6341 | submit(() => { |
| 6331 | 6342 | layer.close(index) |
| 6332 | 6343 | getNodeBindInfo() |
| ... | ... | @@ -6347,14 +6358,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
| 6347 | 6358 | setTimeout(() => { |
| 6348 | 6359 | |
| 6349 | 6360 | // TODO 数据交互事件 |
| 6350 | - $(`#${enumInteractionType.DOWN}`).click({ type: enumInteractionType.DOWN, }, handleDownOrUpEvent); | |
| 6351 | - $(`#${enumInteractionType.UP}`).click({ type: enumInteractionType.UP }, handleDownOrUpEvent); | |
| 6352 | - $(`#${enumInteractionType.SINGLE}`).click({ type: enumInteractionType.SINGLE }, handleClickOrDbClick); | |
| 6353 | - $(`#${enumInteractionType.DOUBLE}`).click({ type: enumInteractionType.DOUBLE }, handleClickOrDbClick); | |
| 6361 | + $(`#${ enumInteractionType.DOWN }`).click({ type: enumInteractionType.DOWN, }, handleDownOrUpEvent); | |
| 6362 | + $(`#${ enumInteractionType.UP }`).click({ type: enumInteractionType.UP }, handleDownOrUpEvent); | |
| 6363 | + $(`#${ enumInteractionType.SINGLE }`).click({ type: enumInteractionType.SINGLE }, handleClickOrDbClick); | |
| 6364 | + $(`#${ enumInteractionType.DOUBLE }`).click({ type: enumInteractionType.DOUBLE }, handleClickOrDbClick); | |
| 6354 | 6365 | // 数据动效事件 |
| 6355 | - $(`#${enumDynamicEffectType.FLASH}`).click({ type: enumDynamicEffectType.FLASH }, handleDataDynamicEffect); | |
| 6356 | - $(`#${enumDynamicEffectType.DISPLAY}`).click({ type: enumDynamicEffectType.DISPLAY }, handleDataDynamicEffect); | |
| 6357 | - $(`#${enumDynamicEffectType.ROTATE}`).click({ type: enumDynamicEffectType.ROTATE }, handleDataDynamicEffect); | |
| 6366 | + $(`#${ enumDynamicEffectType.FLASH }`).click({ type: enumDynamicEffectType.FLASH }, handleDataDynamicEffect); | |
| 6367 | + $(`#${ enumDynamicEffectType.DISPLAY }`).click({ type: enumDynamicEffectType.DISPLAY }, handleDataDynamicEffect); | |
| 6368 | + $(`#${ enumDynamicEffectType.ROTATE }`).click({ type: enumDynamicEffectType.ROTATE }, handleDataDynamicEffect); | |
| 6358 | 6369 | }); |
| 6359 | 6370 | }; |
| 6360 | 6371 | |
| ... | ... | @@ -6691,9 +6702,9 @@ StyleFormatPanel.prototype.addFill = function (container) { |
| 6691 | 6702 | var tmpColor = mxUtils.getValue(ss.style, fillKey, null); |
| 6692 | 6703 | gradientPanel.style.display = |
| 6693 | 6704 | tmpColor != null && |
| 6694 | - tmpColor != mxConstants.NONE && | |
| 6695 | - ss.fill && | |
| 6696 | - ss.style.shape != "image" | |
| 6705 | + tmpColor != mxConstants.NONE && | |
| 6706 | + ss.fill && | |
| 6707 | + ss.style.shape != "image" | |
| 6697 | 6708 | ? "" |
| 6698 | 6709 | : "none"; |
| 6699 | 6710 | |
| ... | ... | @@ -6755,7 +6766,7 @@ StyleFormatPanel.prototype.addFill = function (container) { |
| 6755 | 6766 | fillStyleSelect.style.display = ss.style.sketch == "1" ? "" : "none"; |
| 6756 | 6767 | gradientPanel.style.display = |
| 6757 | 6768 | !ss.containsImage && |
| 6758 | - (ss.style.sketch != "1" || fillStyle == "solid" || fillStyle == "auto") | |
| 6769 | + (ss.style.sketch != "1" || fillStyle == "solid" || fillStyle == "auto") | |
| 6759 | 6770 | ? "" |
| 6760 | 6771 | : "none"; |
| 6761 | 6772 | } |
| ... | ... | @@ -8536,14 +8547,14 @@ StyleFormatPanel.prototype.addStroke = function (container) { |
| 8536 | 8547 | edgeStyleDiv.className = |
| 8537 | 8548 | "geSprite " + |
| 8538 | 8549 | (mxUtils.getValue(ss.style, mxConstants.STYLE_ELBOW, null) == |
| 8539 | - "vertical" | |
| 8550 | + "vertical" | |
| 8540 | 8551 | ? "geSprite-verticalelbow" |
| 8541 | 8552 | : "geSprite-horizontalelbow"); |
| 8542 | 8553 | } else if (es == "isometricEdgeStyle") { |
| 8543 | 8554 | edgeStyleDiv.className = |
| 8544 | 8555 | "geSprite " + |
| 8545 | 8556 | (mxUtils.getValue(ss.style, mxConstants.STYLE_ELBOW, null) == |
| 8546 | - "vertical" | |
| 8557 | + "vertical" | |
| 8547 | 8558 | ? "geSprite-verticalisometric" |
| 8548 | 8559 | : "geSprite-horizontalisometric"); |
| 8549 | 8560 | } else { |
| ... | ... | @@ -10124,7 +10135,7 @@ class UseLayUi { |
| 10124 | 10135 | return result === '[object Function]' || result === '[object AsyncFunction]' |
| 10125 | 10136 | } |
| 10126 | 10137 | |
| 10127 | - static dynamicAttr = (attr, value) => value ? `${attr}="${value}"` : '' | |
| 10138 | + static dynamicAttr = (attr, value) => value ? `${ attr }="${ value }"` : '' | |
| 10128 | 10139 | |
| 10129 | 10140 | /** |
| 10130 | 10141 | * @description format data source to tree structure |
| ... | ... | @@ -10193,9 +10204,9 @@ class UseLayUi { |
| 10193 | 10204 | let { renderFn } = options |
| 10194 | 10205 | renderFn = renderFn || ((record) => { |
| 10195 | 10206 | if (typeof record === 'object') { |
| 10196 | - return `<option value="${record[valueField]}" ${record.disabled ? 'disabled=""' : ''}>${record[labelField]}</option>` | |
| 10207 | + return `<option value="${ record[valueField] }" ${ record.disabled ? 'disabled=""' : '' }>${ record[labelField] }</option>` | |
| 10197 | 10208 | } else { |
| 10198 | - return `<option value="${record}">${record}</option>` | |
| 10209 | + return `<option value="${ record }">${ record }</option>` | |
| 10199 | 10210 | } |
| 10200 | 10211 | }) |
| 10201 | 10212 | const optionsList = dataSource.map(renderFn) |
| ... | ... | @@ -10209,8 +10220,8 @@ class UseLayUi { |
| 10209 | 10220 | */ |
| 10210 | 10221 | static createSingleUseFormItem(content, props = '') { |
| 10211 | 10222 | return ` |
| 10212 | - <div class="layui-form" ${props}> | |
| 10213 | - ${content} | |
| 10223 | + <div class="layui-form" ${ props }> | |
| 10224 | + ${ content } | |
| 10214 | 10225 | </div> |
| 10215 | 10226 | ` |
| 10216 | 10227 | } |
| ... | ... | @@ -10272,7 +10283,7 @@ class UseLayUi { |
| 10272 | 10283 | return dataSource.map(record => renderFn(record)) |
| 10273 | 10284 | } |
| 10274 | 10285 | return formatDataSource(dataSource).map(record => { |
| 10275 | - return `<option value="${record[valueField]}" ${record.disable ? 'disabled=""' : ''}>${record[labelField]}</option>` | |
| 10286 | + return `<option value="${ record[valueField] }" ${ record.disable ? 'disabled=""' : '' }>${ record[labelField] }</option>` | |
| 10276 | 10287 | }) |
| 10277 | 10288 | } |
| 10278 | 10289 | |
| ... | ... | @@ -10283,7 +10294,7 @@ class UseLayUi { |
| 10283 | 10294 | } |
| 10284 | 10295 | |
| 10285 | 10296 | if (layFilter) { |
| 10286 | - form.on(`select(${layFilter})`, (data) => { | |
| 10297 | + form.on(`select(${ layFilter })`, (data) => { | |
| 10287 | 10298 | if (onClick && this.isFunction(onClick)) { |
| 10288 | 10299 | onClick(data) |
| 10289 | 10300 | } |
| ... | ... | @@ -10291,11 +10302,11 @@ class UseLayUi { |
| 10291 | 10302 | } |
| 10292 | 10303 | |
| 10293 | 10304 | let template = ` |
| 10294 | - <div class="layui-form-item ${className}"> | |
| 10295 | - <label class="layui-form-label">${label}</label> | |
| 10305 | + <div class="layui-form-item ${ className }"> | |
| 10306 | + <label class="layui-form-label">${ label }</label> | |
| 10296 | 10307 | <div class="layui-input-block"> |
| 10297 | - <select name="${layFilter}" ${this.dynamicAttr('lay-filter', layFilter)} ${this.dynamicAttr('lay-verify', layVerify)}> | |
| 10298 | - ${generateOptionTemplate(dataSource)} | |
| 10308 | + <select name="${ layFilter }" ${ this.dynamicAttr('lay-filter', layFilter) } ${ this.dynamicAttr('lay-verify', layVerify) }> | |
| 10309 | + ${ generateOptionTemplate(dataSource) } | |
| 10299 | 10310 | </select> |
| 10300 | 10311 | </div> |
| 10301 | 10312 | </div>` |
| ... | ... | @@ -10357,18 +10368,18 @@ class UseLayUi { |
| 10357 | 10368 | let { data = [], click, onReady } = treeProps |
| 10358 | 10369 | |
| 10359 | 10370 | let template = ` |
| 10360 | - <div class="layui-form-item ${CLASS_NAME} ${className}"> | |
| 10361 | - <label class="layui-form-label">${label}</label> | |
| 10371 | + <div class="layui-form-item ${ CLASS_NAME } ${ className }"> | |
| 10372 | + <label class="layui-form-label">${ label }</label> | |
| 10362 | 10373 | <div class="layui-input-block"> |
| 10363 | - <div class="layui-unselect layui-form-select ${SELECT_CLS}"> | |
| 10374 | + <div class="layui-unselect layui-form-select ${ SELECT_CLS }"> | |
| 10364 | 10375 | <div class="layui-select-title"> |
| 10365 | 10376 | <span class="layui-input layui-unselect">请选择</span> |
| 10366 | - <input type="hidden" name="${layFilter}"> | |
| 10377 | + <input type="hidden" name="${ layFilter }"> | |
| 10367 | 10378 | <i class="layui-edge"></i> |
| 10368 | 10379 | </div> |
| 10369 | 10380 | <dl class="layui-anim layui-anim-upbit"> |
| 10370 | 10381 | <dd> |
| 10371 | - <ul id="${layFilter}"></ul> | |
| 10382 | + <ul id="${ layFilter }"></ul> | |
| 10372 | 10383 | </dd> |
| 10373 | 10384 | </dl> |
| 10374 | 10385 | </div> |
| ... | ... | @@ -10386,7 +10397,7 @@ class UseLayUi { |
| 10386 | 10397 | $(elem) |
| 10387 | 10398 | .find('.layui-form-select').removeClass('layui-form-selected').end() |
| 10388 | 10399 | .find(".layui-select-title span").html(title).end() |
| 10389 | - .find(`input:hidden[name='${layFilter}']`).val(id); | |
| 10400 | + .find(`input:hidden[name='${ layFilter }']`).val(id); | |
| 10390 | 10401 | } |
| 10391 | 10402 | |
| 10392 | 10403 | // init mount |
| ... | ... | @@ -10399,7 +10410,7 @@ class UseLayUi { |
| 10399 | 10410 | tree.render({ |
| 10400 | 10411 | ...treeProps, |
| 10401 | 10412 | ...(autoFormatDataSource ? { data: UseLayUi.formatTreeDataSource(data, customSetTree, valueField, labelField, childrenField) } : {}), |
| 10402 | - elem: $(elem).find(`#${layFilter}`), | |
| 10413 | + elem: $(elem).find(`#${ layFilter }`), | |
| 10403 | 10414 | click(node) { |
| 10404 | 10415 | setValue(node.data) |
| 10405 | 10416 | if (UseLayUi.isFunction(click)) click(node) |
| ... | ... | @@ -10407,10 +10418,10 @@ class UseLayUi { |
| 10407 | 10418 | }) |
| 10408 | 10419 | |
| 10409 | 10420 | // focus |
| 10410 | - $(`.${SELECT_CLS}`) | |
| 10421 | + $(`.${ SELECT_CLS }`) | |
| 10411 | 10422 | .on("click", ".layui-select-title", function (e) { |
| 10412 | 10423 | $(".layui-form-select").not($(this).parents(".layui-form-select")).removeClass("layui-form-selected"); |
| 10413 | - $(this).parents(`.${SELECT_CLS}`).toggleClass("layui-form-selected"); | |
| 10424 | + $(this).parents(`.${ SELECT_CLS }`).toggleClass("layui-form-selected"); | |
| 10414 | 10425 | layui.stope(e); |
| 10415 | 10426 | }) |
| 10416 | 10427 | .on('click', '.layui-anim', (e) => { |
| ... | ... | @@ -10428,7 +10439,7 @@ class UseLayUi { |
| 10428 | 10439 | if (!parentNode) return |
| 10429 | 10440 | const showClose = UseLayUi.isInNode(parentNode, target, true) |
| 10430 | 10441 | if (showClose) return |
| 10431 | - $(`.${SELECT_CLS}`).removeClass("layui-form-selected") | |
| 10442 | + $(`.${ SELECT_CLS }`).removeClass("layui-form-selected") | |
| 10432 | 10443 | }); |
| 10433 | 10444 | |
| 10434 | 10445 | if (UseLayUi.isFunction(onReady)) { |
| ... | ... | @@ -10465,21 +10476,21 @@ class UseLayUi { |
| 10465 | 10476 | function createOptions(dataSource) { |
| 10466 | 10477 | return dataSource.map((record) => { |
| 10467 | 10478 | return `<input |
| 10468 | - type="checkbox" lay-skin="${laySkin}" | |
| 10469 | - ${UseLayUi.dynamicAttr('name', record[valueField])} | |
| 10470 | - ${UseLayUi.dynamicAttr('title', record[labelField])} | |
| 10471 | - ${UseLayUi.dynamicAttr('lay-filter', layFilter)} | |
| 10472 | - ${UseLayUi.dynamicAttr('lay-verify', layVerify)} | |
| 10473 | - ${UseLayUi.dynamicAttr('checked', record[checkedField])} | |
| 10479 | + type="checkbox" lay-skin="${ laySkin }" | |
| 10480 | + ${ UseLayUi.dynamicAttr('name', record[valueField]) } | |
| 10481 | + ${ UseLayUi.dynamicAttr('title', record[labelField]) } | |
| 10482 | + ${ UseLayUi.dynamicAttr('lay-filter', layFilter) } | |
| 10483 | + ${ UseLayUi.dynamicAttr('lay-verify', layVerify) } | |
| 10484 | + ${ UseLayUi.dynamicAttr('checked', record[checkedField]) } | |
| 10474 | 10485 | >` |
| 10475 | 10486 | }) |
| 10476 | 10487 | } |
| 10477 | 10488 | |
| 10478 | 10489 | let template = ` |
| 10479 | - <div class="layui-form-item ${CLASS_NAME}" > | |
| 10480 | - <label class="layui-form-label">${label}</label> | |
| 10490 | + <div class="layui-form-item ${ CLASS_NAME }" > | |
| 10491 | + <label class="layui-form-label">${ label }</label> | |
| 10481 | 10492 | <div class="layui-input-block"> |
| 10482 | - ${createOptions(dataSource).join('')} | |
| 10493 | + ${ createOptions(dataSource).join('') } | |
| 10483 | 10494 | </div> |
| 10484 | 10495 | </div> |
| 10485 | 10496 | ` |
| ... | ... | @@ -10489,7 +10500,7 @@ class UseLayUi { |
| 10489 | 10500 | if (!elem) return template |
| 10490 | 10501 | $(elem).empty() |
| 10491 | 10502 | $(elem).append(template) |
| 10492 | - form.on(`checkbox(${layFilter})`, (data) => { | |
| 10503 | + form.on(`checkbox(${ layFilter })`, (data) => { | |
| 10493 | 10504 | onChange && (onChange(data)) |
| 10494 | 10505 | }) |
| 10495 | 10506 | form.render() |
| ... | ... | @@ -10572,6 +10583,64 @@ function to(promise, errorExt) { |
| 10572 | 10583 | } |
| 10573 | 10584 | |
| 10574 | 10585 | |
| 10586 | +class EventCenter { | |
| 10587 | + | |
| 10588 | + /** | |
| 10589 | + * @description 调度中心 | |
| 10590 | + * @type {Map<string, Function[]>} | |
| 10591 | + */ | |
| 10592 | + eventStack | |
| 10593 | + | |
| 10594 | + /** | |
| 10595 | + * @description 实例化EventCenter | |
| 10596 | + */ | |
| 10597 | + constructor() { | |
| 10598 | + this.eventStack = new Map() | |
| 10599 | + } | |
| 10600 | + | |
| 10601 | + /** | |
| 10602 | + * @description 监听事件 | |
| 10603 | + * @param {string | number} eventName - 事件名 | |
| 10604 | + * @param {Function} callback - 事件处理方法 | |
| 10605 | + */ | |
| 10606 | + on(eventName, callback) { | |
| 10607 | + if (this.eventStack.has(eventName)) { | |
| 10608 | + this.eventStack.get(eventName).push(callback) | |
| 10609 | + return | |
| 10610 | + } | |
| 10611 | + this.eventStack.set(eventName, [callback]) | |
| 10612 | + } | |
| 10613 | + | |
| 10614 | + /** | |
| 10615 | + * @description 触发事件 | |
| 10616 | + * @param {string | number} eventName - 事件名 | |
| 10617 | + * @param {any} args - 参数 | |
| 10618 | + */ | |
| 10619 | + emit(eventName, ...args) { | |
| 10620 | + if (this.eventStack.has(eventName)) | |
| 10621 | + this.eventStack.get(eventName).forEach(fn => fn(...args)) | |
| 10622 | + | |
| 10623 | + } | |
| 10624 | + | |
| 10625 | + /** | |
| 10626 | + * @description 移除事件 | |
| 10627 | + * @param {string} eventName - 时间名 | |
| 10628 | + */ | |
| 10629 | + off(eventName) { | |
| 10630 | + if (this.eventStack.has(eventName)) | |
| 10631 | + this.eventStack.delete(eventName) | |
| 10632 | + } | |
| 10633 | + | |
| 10634 | + /** | |
| 10635 | + * @description 清除事件 | |
| 10636 | + */ | |
| 10637 | + clean(eventName) { | |
| 10638 | + this.eventStack.clear() | |
| 10639 | + } | |
| 10640 | + | |
| 10641 | + | |
| 10642 | +} | |
| 10643 | + | |
| 10575 | 10644 | class Ws { |
| 10576 | 10645 | /** |
| 10577 | 10646 | * @description url 连接地址 |
| ... | ... | @@ -10584,6 +10653,36 @@ class Ws { |
| 10584 | 10653 | protocols |
| 10585 | 10654 | |
| 10586 | 10655 | /** |
| 10656 | + * @description socket open时 拓展 | |
| 10657 | + * @type {Function} | |
| 10658 | + * @param {Ws} instance - 实例 | |
| 10659 | + */ | |
| 10660 | + onopenCallback | |
| 10661 | + | |
| 10662 | + /** | |
| 10663 | + * @description socket error时 拓展 | |
| 10664 | + * @type {Function} | |
| 10665 | + * @param {Ws} instance - 实例 | |
| 10666 | + */ | |
| 10667 | + onerrorCallback | |
| 10668 | + | |
| 10669 | + /** | |
| 10670 | + * @description socket close时 拓展 | |
| 10671 | + * @type {Function} | |
| 10672 | + * @param {Ws} instance - 实例 | |
| 10673 | + */ | |
| 10674 | + oncloseCallback | |
| 10675 | + | |
| 10676 | + /** | |
| 10677 | + * @description socket message时 拓展 | |
| 10678 | + * @type {Function} | |
| 10679 | + * @param {object} data - event.data message数据 | |
| 10680 | + * @param {MessageEvent} event - event 事件对象 | |
| 10681 | + * @param {Ws} instance - Ws 实例 | |
| 10682 | + */ | |
| 10683 | + onmessageCallback | |
| 10684 | + | |
| 10685 | + /** | |
| 10587 | 10686 | * @description socket 实例 |
| 10588 | 10687 | * @type {WebSocket} |
| 10589 | 10688 | */ |
| ... | ... | @@ -10613,13 +10712,28 @@ class Ws { |
| 10613 | 10712 | errorStack = [] |
| 10614 | 10713 | |
| 10615 | 10714 | /** |
| 10715 | + * @description 实例 | |
| 10716 | + */ | |
| 10717 | + static instance | |
| 10718 | + | |
| 10719 | + /** | |
| 10616 | 10720 | * @description 创建websocket实例 |
| 10617 | - * @params {string} url - 连接路径 | |
| 10618 | - * @params {string} protocols - 协议 | |
| 10721 | + * @param {string} option.url - 连接路径 | |
| 10722 | + * @param {string} [option.protocols] option.protocols - 协议 | |
| 10723 | + * @param {Function} [option.onopenCallback] option.onopenCallback - socket open时 拓展 | |
| 10724 | + * @param {Function} [option.onerrorCallback] option.onerrorCallback - socket error时 拓展 | |
| 10725 | + * @param {Function} [option.oncloseCallback] option.oncloseCallback - socket close时 拓展 | |
| 10726 | + * @param {Function} [option.onmessageCallback] option.onmessageCallback - socket message时 拓展 | |
| 10619 | 10727 | */ |
| 10620 | - constructor(url, protocols) { | |
| 10728 | + constructor(option) { | |
| 10729 | + const { url, protocols, onopenCallback, onerrorCallback, oncloseCallback, onmessageCallback } = option | |
| 10730 | + if (!url) throw new Error('param url in Ws constructor is required') | |
| 10621 | 10731 | this.url = url |
| 10622 | 10732 | this.protocols = protocols |
| 10733 | + this.onopenCallback = onopenCallback | |
| 10734 | + this.onerrorCallback = onerrorCallback | |
| 10735 | + this.oncloseCallback = oncloseCallback | |
| 10736 | + this.onmessageCallback = onmessageCallback | |
| 10623 | 10737 | this.createWs() |
| 10624 | 10738 | } |
| 10625 | 10739 | |
| ... | ... | @@ -10639,12 +10753,12 @@ class Ws { |
| 10639 | 10753 | */ |
| 10640 | 10754 | onopen() { |
| 10641 | 10755 | this.ws.onopen = () => { |
| 10642 | - console.log(this.ws, 'onopen') | |
| 10643 | 10756 | this.errorStack.forEach(message => { |
| 10644 | 10757 | this.send(message) |
| 10645 | 10758 | }) |
| 10646 | 10759 | this.errorStack = [] |
| 10647 | 10760 | this.isReconnectionLoading = false |
| 10761 | + if (typeof this.onopenCallback === 'function') this.onopenCallback(this) | |
| 10648 | 10762 | } |
| 10649 | 10763 | } |
| 10650 | 10764 | |
| ... | ... | @@ -10653,9 +10767,9 @@ class Ws { |
| 10653 | 10767 | */ |
| 10654 | 10768 | onerror() { |
| 10655 | 10769 | this.ws.onerror = (err) => { |
| 10656 | - console.log(err, 'onerror') | |
| 10657 | 10770 | this.reconnection() |
| 10658 | 10771 | this.isReconnectionLoading = false |
| 10772 | + if (typeof this.onerrorCallback === 'function') this.onerrorCallback(this) | |
| 10659 | 10773 | } |
| 10660 | 10774 | } |
| 10661 | 10775 | |
| ... | ... | @@ -10664,24 +10778,27 @@ class Ws { |
| 10664 | 10778 | */ |
| 10665 | 10779 | onclose() { |
| 10666 | 10780 | this.ws.onclose = () => { |
| 10667 | - console.log('onclose') | |
| 10668 | 10781 | if (this.isCustomClose) return |
| 10669 | 10782 | |
| 10670 | 10783 | this.reconnection() |
| 10671 | 10784 | this.isReconnectionLoading = false |
| 10785 | + | |
| 10786 | + if (typeof this.oncloseCallback === 'function') this.oncloseCallback(this) | |
| 10672 | 10787 | } |
| 10673 | 10788 | } |
| 10674 | 10789 | |
| 10675 | 10790 | /** |
| 10676 | 10791 | * @description 接受消息 |
| 10677 | 10792 | */ |
| 10678 | - async onmessage() { | |
| 10793 | + onmessage() { | |
| 10679 | 10794 | this.ws.onmessage = (event) => { |
| 10680 | 10795 | try { |
| 10681 | 10796 | const data = JSON.parse(event.data) |
| 10682 | - this.eventCenter.emit(data.type, data.data) | |
| 10797 | + if (typeof this.onmessageCallback === 'function') this.onmessageCallback(data, event, this) | |
| 10798 | + | |
| 10683 | 10799 | } catch (error) { |
| 10684 | - console.log(error, 'error') | |
| 10800 | + // throw new Error(error) | |
| 10801 | + console.error(error) | |
| 10685 | 10802 | } |
| 10686 | 10803 | } |
| 10687 | 10804 | } |
| ... | ... | @@ -10696,7 +10813,7 @@ class Ws { |
| 10696 | 10813 | clearTimeout(this.timeId) |
| 10697 | 10814 | this.timeId = setTimeout(() => { |
| 10698 | 10815 | this.createWs() |
| 10699 | - }, 10000) | |
| 10816 | + }, 60000) | |
| 10700 | 10817 | } |
| 10701 | 10818 | |
| 10702 | 10819 | /** |
| ... | ... | @@ -10734,93 +10851,290 @@ class Ws { |
| 10734 | 10851 | this.close() |
| 10735 | 10852 | this.ws = null |
| 10736 | 10853 | this.errorStack = null |
| 10737 | - this.eventCenter = null | |
| 10854 | + } | |
| 10855 | + | |
| 10856 | + /** | |
| 10857 | + * @description 单例模式 | |
| 10858 | + * @param {string} option.url - 连接路径 | |
| 10859 | + * @param {string} [option.protocols] option.protocols - 协议 | |
| 10860 | + * @param {Function} [option.onopenCallback] option.onopenCallback - socket open时 拓展 | |
| 10861 | + * @param {Function} [option.onerrorCallback] option.onerrorCallback - socket error时 拓展 | |
| 10862 | + * @param {Function} [option.oncloseCallback] option.oncloseCallback - socket close时 拓展 | |
| 10863 | + * @param {Function} [option.onmessageCallback] option.onmessageCallback - socket message时 拓展 | |
| 10864 | + * @return {Ws} instance | |
| 10865 | + */ | |
| 10866 | + static getInstance(option) { | |
| 10867 | + if (!this.instance) { | |
| 10868 | + this.instance = new Ws(option) | |
| 10869 | + } | |
| 10870 | + return this.instance | |
| 10738 | 10871 | } |
| 10739 | 10872 | } |
| 10740 | 10873 | |
| 10874 | +/** | |
| 10875 | + * @description 切换页面时触发 /src/main/webapp/js/diagramly/Pages.js row: 461 | |
| 10876 | + * @param editorUi | |
| 10877 | + * @param currentPage | |
| 10878 | + */ | |
| 10879 | +function previewAction(editorUi, currentPage) { | |
| 10880 | + if (!editorUi.editor.graph.isLightboxView()) return | |
| 10881 | + DispatchCenter.getInstance(editorUi, currentPage) | |
| 10741 | 10882 | |
| 10742 | -class EventCenter { | |
| 10883 | + /** | |
| 10884 | + * @description 编辑模式下editor对象的editable为true | |
| 10885 | + * @param editorUi | |
| 10886 | + * @return {boolean} | |
| 10887 | + */ | |
| 10888 | + function isPreviewMode(editorUi = {}) { | |
| 10889 | + const { editor: { editable } = {} } = editorUi | |
| 10890 | + return !!editable | |
| 10891 | + } | |
| 10892 | +} | |
| 10893 | + | |
| 10894 | + | |
| 10895 | +/** | |
| 10896 | + * @description 调度中心 | |
| 10897 | + */ | |
| 10898 | +class DispatchCenter { | |
| 10743 | 10899 | |
| 10744 | 10900 | /** |
| 10745 | - * @description 调度中心 | |
| 10746 | - * @type {Map<string, Function[]} | |
| 10901 | + * @description 节点映射 | |
| 10902 | + * @type {Map<string, object>} | |
| 10747 | 10903 | */ |
| 10748 | - eventStack | |
| 10904 | + nodeMapping | |
| 10749 | 10905 | |
| 10750 | 10906 | /** |
| 10751 | - * @description | |
| 10907 | + * @description 当前页信息 | |
| 10752 | 10908 | */ |
| 10753 | - constructor() { | |
| 10754 | - this.eventStack = new Map() | |
| 10755 | - } | |
| 10909 | + currentPage | |
| 10756 | 10910 | |
| 10757 | 10911 | /** |
| 10758 | - * @description 监听事件 | |
| 10912 | + * @description 当前页中的所有cell | |
| 10759 | 10913 | */ |
| 10760 | - on(eventName, callback) { | |
| 10761 | - if (this.eventStack.has(eventName)) { | |
| 10762 | - this.eventStack.get(eventName).push(callback) | |
| 10763 | - return | |
| 10764 | - } | |
| 10765 | - this.eventStack.set(eventName, [callback]) | |
| 10766 | - } | |
| 10914 | + contentAllCell | |
| 10767 | 10915 | |
| 10768 | 10916 | /** |
| 10769 | - * @description 触发事件 | |
| 10917 | + * @description 图源信息 | |
| 10770 | 10918 | */ |
| 10771 | - emit(eventName, ...args) { | |
| 10772 | - if (this.eventStack.has(eventName)) | |
| 10773 | - this.eventStack.get(eventName).forEach(fn => fn(...args)) | |
| 10919 | + graph | |
| 10774 | 10920 | |
| 10775 | - } | |
| 10921 | + /** | |
| 10922 | + * @description socket instance | |
| 10923 | + * @type {Ws} | |
| 10924 | + */ | |
| 10925 | + socket | |
| 10776 | 10926 | |
| 10777 | 10927 | /** |
| 10778 | - * @description 移除事件 | |
| 10928 | + * @description 事件总线 | |
| 10929 | + * @type {EventCenter} | |
| 10779 | 10930 | */ |
| 10780 | - off(eventName) { | |
| 10781 | - if (this.eventStack.has(eventName)) | |
| 10782 | - this.eventStack.delete(eventName) | |
| 10931 | + eventBus | |
| 10932 | + | |
| 10933 | + /** | |
| 10934 | + * @description 当前实例 | |
| 10935 | + */ | |
| 10936 | + static instance | |
| 10937 | + | |
| 10938 | + /** | |
| 10939 | + * @description 原页面ID 原页面content id | |
| 10940 | + */ | |
| 10941 | + static rawContentId | |
| 10942 | + | |
| 10943 | + constructor(editorUi, currentPage) { | |
| 10944 | + this.nodeMapping = new Map() | |
| 10945 | + this.init(editorUi, currentPage) | |
| 10783 | 10946 | } |
| 10784 | 10947 | |
| 10785 | 10948 | /** |
| 10786 | - * @description 清除事件 | |
| 10949 | + * @description 初始化实例 | |
| 10950 | + * @param editorUi | |
| 10951 | + * @param currentPage | |
| 10787 | 10952 | */ |
| 10788 | - clean(eventName) { | |
| 10789 | - this.eventStack.clear() | |
| 10953 | + init(editorUi, currentPage) { | |
| 10954 | + this.createEventBus() | |
| 10955 | + this.saveContentInfo(editorUi, currentPage) | |
| 10956 | + // this.createGraphEventListener() | |
| 10957 | + this.connectSocket() | |
| 10958 | + this.getContentDataNode() | |
| 10790 | 10959 | } |
| 10791 | 10960 | |
| 10961 | + /** | |
| 10962 | + * @description 建立socket连接 | |
| 10963 | + */ | |
| 10964 | + connectSocket() { | |
| 10965 | + const GLOBAL_TOKEN = JSON.parse(localStorage.getItem("UNDEFINED__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__")).value.JWT_TOKEN.value | |
| 10792 | 10966 | |
| 10793 | -} | |
| 10967 | + // const { host, href } = location | |
| 10968 | + // const reg = /^https/ | |
| 10969 | + // const wsUrl = `${reg.test(href) ? 'wss' : 'ws'}://${host}/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}` | |
| 10794 | 10970 | |
| 10971 | + const wsUrl = `ws://47.99.141.212:8080/api/ws/plugins/telemetry?token=${ GLOBAL_TOKEN }` | |
| 10972 | + // const wsUrl = `ws://192.168.10.115:8080/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}` | |
| 10795 | 10973 | |
| 10796 | -// TODO preview action | |
| 10797 | -function previewAction() { | |
| 10974 | + this.socket = Ws.getInstance({ url: wsUrl, onmessageCallback: this.socketOnmessage }) | |
| 10975 | + } | |
| 10798 | 10976 | |
| 10799 | - setTimeout(() => { | |
| 10800 | - console.dir(GLOBAL_EDITOR_UI) | |
| 10801 | - }, 5000); | |
| 10977 | + /** | |
| 10978 | + * @description 处理webSocket消息 | |
| 10979 | + * @param message | |
| 10980 | + * @param event | |
| 10981 | + * @param ws | |
| 10982 | + */ | |
| 10983 | + socketOnmessage(message, event, ws) { | |
| 10984 | + const { subscriptionId, data } = message | |
| 10985 | + DispatchCenter.instance.publishEvent(subscriptionId, data) | |
| 10986 | + } | |
| 10987 | + | |
| 10988 | + /** | |
| 10989 | + * @description 创建事件中心 | |
| 10990 | + */ | |
| 10991 | + createEventBus() { | |
| 10992 | + this.eventBus = new EventCenter() | |
| 10993 | + } | |
| 10802 | 10994 | |
| 10803 | - function getContentInfo() { | |
| 10995 | + /** | |
| 10996 | + * @description 创建图层事件监听器 | |
| 10997 | + */ | |
| 10998 | + createGraphEventListener() { | |
| 10999 | + console.log(mxEvent) | |
| 11000 | + // this.graph.addListener(mxEvent.MOUSE_DOWN, (sender, event) => { | |
| 11001 | + // console.log('down') | |
| 11002 | + // console.log(event) | |
| 11003 | + // console.log(sender) | |
| 11004 | + // }) | |
| 11005 | + // this.graph.addListener(mxEvent.MOUSE_UP, (sender, event) => { | |
| 11006 | + // console.log('up') | |
| 11007 | + // console.log(event) | |
| 11008 | + // console.log(sender) | |
| 11009 | + // }) | |
| 11010 | + console.log(this.contentAllCell) | |
| 11011 | + const node = this.contentAllCell.find(item => item.id === "xu8fz6ypefe3Lfq39emV-10") | |
| 11012 | + console.log(node) | |
| 11013 | + // node.addListener(mxEvent.CLICK, (sender, event) => { | |
| 11014 | + // console.log('click') | |
| 11015 | + // console.log(event) | |
| 11016 | + // console.log(sender) | |
| 11017 | + // }) | |
| 11018 | + // this.graph.addListener(mxEvent.DOUBLE_CLICK, (sender, event) => { | |
| 11019 | + // console.log('double click') | |
| 11020 | + // console.log(event) | |
| 11021 | + // console.log(sender) | |
| 11022 | + // }) | |
| 11023 | + } | |
| 10804 | 11024 | |
| 11025 | + /** | |
| 11026 | + * @description 保存部分页面信息到实例上 | |
| 11027 | + * @param editorUi | |
| 11028 | + * @param currentPage | |
| 11029 | + */ | |
| 11030 | + saveContentInfo(editorUi, currentPage) { | |
| 11031 | + const editor = editorUi.editor | |
| 11032 | + this.graph = editor.graph | |
| 11033 | + this.currentPage = currentPage | |
| 11034 | + this.contentAllCell = this.graph.getDefaultParent().children | |
| 10805 | 11035 | } |
| 10806 | 11036 | |
| 10807 | - const sendMsgTemplate = { | |
| 10808 | - tsSubCmds: [ | |
| 10809 | - { | |
| 11037 | + /** | |
| 11038 | + * @description 获取页面绑定的节点信息 | |
| 11039 | + */ | |
| 11040 | + async getContentDataNode() { | |
| 11041 | + const { node: { id } = {} } = this.currentPage | |
| 11042 | + if (!id) return | |
| 11043 | + const [err, res] = await to(ConfigurationNodeApi.getConfigurationInfo('CONTENT', id)) | |
| 11044 | + const { dataSources } = res | |
| 11045 | + const sendMsg = { | |
| 11046 | + tsSubCmds: this.generatorDataSourceMapping(dataSources) | |
| 11047 | + } | |
| 11048 | + this.sendMessageToGetRealTimeData(sendMsg) | |
| 11049 | + } | |
| 11050 | + | |
| 11051 | + /** | |
| 11052 | + * @description 发送消息去获取实时数据 | |
| 11053 | + */ | |
| 11054 | + sendMessageToGetRealTimeData(message) { | |
| 11055 | + if (typeof message !== 'string') message = JSON.stringify(message) | |
| 11056 | + this.socket.send(message) | |
| 11057 | + } | |
| 11058 | + | |
| 11059 | + /** | |
| 11060 | + * @description 生成节点映射表 | |
| 11061 | + * @param dataSources | |
| 11062 | + * @return {{cmdId: number, entityType: string, keys: *, scope: string, entityId: *}[]} | |
| 11063 | + */ | |
| 11064 | + generatorDataSourceMapping(dataSources = []) { | |
| 11065 | + return dataSources.map((datum, eventName) => { | |
| 11066 | + const { deviceId, attr } = datum | |
| 11067 | + const sendMsgTemplate = { | |
| 10810 | 11068 | entityType: "DEVICE", |
| 10811 | - entityId: "a5ef5840-d68a-11ec-9c71-a9680487d1e0", | |
| 11069 | + entityId: deviceId, | |
| 10812 | 11070 | scope: "LATEST_TELEMETRY", |
| 10813 | - cmdId: 1 | |
| 11071 | + cmdId: eventName, | |
| 11072 | + keys: attr | |
| 10814 | 11073 | } |
| 10815 | - ] | |
| 11074 | + | |
| 11075 | + this.subscribeDataSources(datum, eventName, attr) | |
| 11076 | + this.nodeMapping.set(deviceId, sendMsgTemplate) | |
| 11077 | + return sendMsgTemplate | |
| 11078 | + }) | |
| 10816 | 11079 | } |
| 10817 | 11080 | |
| 10818 | - const GLOBAL_TOKEN = JSON.parse(localStorage.getItem("UNDEFINED__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__")).value.JWT_TOKEN.value | |
| 11081 | + /** | |
| 11082 | + * @description 分发事件 | |
| 11083 | + */ | |
| 11084 | + publishEvent(eventName, data) { | |
| 11085 | + Object.keys(data).forEach(() => { | |
| 11086 | + this.eventBus.emit(eventName, data) | |
| 11087 | + }) | |
| 11088 | + } | |
| 10819 | 11089 | |
| 10820 | - const wsUrl = `ws://192.168.10.115:8080/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}` | |
| 11090 | + /** | |
| 11091 | + * @description 订阅数据源 | |
| 11092 | + * @param datum | |
| 11093 | + * @param eventName | |
| 11094 | + * @param key | |
| 11095 | + */ | |
| 11096 | + subscribeDataSources(datum, eventName, key) { | |
| 11097 | + const node = this.contentAllCell.find(item => item.id === datum.nodeId) | |
| 11098 | + this.eventBus.on(eventName, (message) => { | |
| 11099 | + this.updatePage(node, () => { | |
| 11100 | + const [[timespan, value]] = message[key] | |
| 11101 | + node.setValue(value) | |
| 11102 | + }) | |
| 11103 | + }) | |
| 11104 | + } | |
| 10821 | 11105 | |
| 10822 | - const websocket = new Ws(wsUrl) | |
| 11106 | + /** | |
| 11107 | + * @description 更新页面 | |
| 11108 | + * @param node | |
| 11109 | + * @param callback | |
| 11110 | + */ | |
| 11111 | + updatePage(node, callback) { | |
| 11112 | + this.graph.getModel().beginUpdate() | |
| 11113 | + try { | |
| 11114 | + callback() | |
| 11115 | + this.graph.insertVertex(node, null); | |
| 11116 | + } finally { | |
| 11117 | + this.graph.getModel().endUpdate() | |
| 11118 | + } | |
| 11119 | + } | |
| 11120 | + | |
| 11121 | + | |
| 11122 | + /** | |
| 11123 | + * @description 返回 DispatchCenter 实例 当contentID变化时重新创建实例 | |
| 11124 | + * @param editorUi | |
| 11125 | + * @param currentPage | |
| 11126 | + * @return {*} | |
| 11127 | + */ | |
| 11128 | + static getInstance(editorUi, currentPage = {}) { | |
| 11129 | + const { node: { id } = {} } = currentPage | |
| 11130 | + if (!id) return | |
| 11131 | + if (!DispatchCenter.instance || DispatchCenter.rawContentId !== id) { | |
| 11132 | + DispatchCenter.instance = new DispatchCenter(editorUi, currentPage) | |
| 11133 | + DispatchCenter.rawContentId = id | |
| 11134 | + } | |
| 11135 | + | |
| 11136 | + return DispatchCenter.instance | |
| 11137 | + } | |
| 10823 | 11138 | |
| 10824 | 11139 | } |
| 10825 | 11140 | |
| 10826 | -previewAction() | ... | ... |
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | |
| 11 | 11 | .override__title--default { |
| 12 | 12 | width: 100% !important; |
| 13 | - padding: 6px 0px 6px 6px !important; | |
| 13 | + padding: 6px 0 6px 6px !important; | |
| 14 | 14 | border-top: 1px solid #dadce0 !important |
| 15 | 15 | } |
| 16 | 16 | |
| ... | ... | @@ -50,6 +50,7 @@ |
| 50 | 50 | .data-panel__select .layui-form-label { |
| 51 | 51 | padding: 9px 10px 9px 0; |
| 52 | 52 | width: 50px !important; |
| 53 | + box-sizing: border-box; | |
| 53 | 54 | } |
| 54 | 55 | |
| 55 | 56 | .data-panel__select .layui-input-block { |
| ... | ... | @@ -72,6 +73,7 @@ |
| 72 | 73 | .data-source__org--override .layui-form-label { |
| 73 | 74 | width: 50px !important; |
| 74 | 75 | padding: 9px 10px 9px 0; |
| 76 | + box-sizing: border-box; | |
| 75 | 77 | |
| 76 | 78 | } |
| 77 | 79 | |
| ... | ... | @@ -87,9 +89,6 @@ |
| 87 | 89 | |
| 88 | 90 | /* ================ Tree Select ================== */ |
| 89 | 91 | |
| 90 | -/*.things-kit-tree-select {*/ | |
| 91 | -/* width: 100%;*/ | |
| 92 | -/*}*/ | |
| 93 | 92 | |
| 94 | 93 | .things-kit-tree-select__tree .layui-select-title span { |
| 95 | 94 | line-height: 38px; |
| ... | ... | @@ -103,25 +102,9 @@ |
| 103 | 102 | background-color: #fff; |
| 104 | 103 | } |
| 105 | 104 | |
| 106 | - | |
| 107 | -/*.things-kit-tree-select .layui-form-label {*/ | |
| 108 | -/* flex: auto;*/ | |
| 109 | -/* max-width: 80px;*/ | |
| 110 | -/* padding: 9px 0;*/ | |
| 111 | -/* width: auto;*/ | |
| 112 | -/* border: none;*/ | |
| 113 | -/*}*/ | |
| 114 | - | |
| 115 | -/*.things-kit-tree-select {*/ | |
| 116 | -/* display: flex;*/ | |
| 117 | -/* margin-bottom: 0;*/ | |
| 118 | -/*}*/ | |
| 119 | - | |
| 120 | -/*.things-kit-tree-select .layui-input-block {*/ | |
| 121 | -/* margin-left: 0;*/ | |
| 122 | -/* padding: 0 10px;*/ | |
| 123 | -/* flex: auto;*/ | |
| 124 | -/*}*/ | |
| 105 | +.things-kit-tree-select__tree .layui-input { | |
| 106 | + border-width: 2px; | |
| 107 | +} | |
| 125 | 108 | |
| 126 | 109 | /* ============== checkbox ===================== */ |
| 127 | 110 | ... | ... |