Commit 7cc8813034836939cc4b46c77c566bbf06c3ae7b
Merge branch 'ww' into 'main'
feat: complete right data source console See merge request huang/thingskit-drawio!9
Showing
2 changed files
with
494 additions
and
179 deletions
... | ... | @@ -4878,12 +4878,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
4878 | 4878 | const editor = ui.editor; |
4879 | 4879 | const graph = editor.graph; |
4880 | 4880 | const ss = ui.getSelectionState(); |
4881 | + const vertices = ss.vertices || [] | |
4881 | 4882 | |
4882 | - console.log(ss.vertices) | |
4883 | + console.log(vertices) | |
4883 | 4884 | /** |
4884 | 4885 | * @description 不是单一节点则不进入数据绑定 |
4885 | 4886 | */ |
4886 | - if (!isSingleNode(ss.vertices)) return | |
4887 | + if (!isSingleNode(vertices)) return | |
4887 | 4888 | |
4888 | 4889 | // 组态id |
4889 | 4890 | const configurationId = getRequest().configurationId; |
... | ... | @@ -4891,7 +4892,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
4891 | 4892 | const currentPageId = ui.currentPage.node; |
4892 | 4893 | |
4893 | 4894 | // 图形的id |
4894 | - const graphId = ss.vertices[0].id; | |
4895 | + const graphId = vertices[0].id; | |
4895 | 4896 | |
4896 | 4897 | // 解构全局属性layui要用到的模块 |
4897 | 4898 | const { layer, form, jquery: $ } = layui; |
... | ... | @@ -4914,7 +4915,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
4914 | 4915 | * @description 选中节点信息来源 |
4915 | 4916 | * @param {string} nodeInfo.id - 节点ID |
4916 | 4917 | */ |
4917 | - const nodeInfo = getNodeInfo(ss.vertices) | |
4918 | + const nodeInfo = getNodeInfo(vertices) | |
4918 | 4919 | |
4919 | 4920 | |
4920 | 4921 | /** |
... | ... | @@ -5008,15 +5009,16 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5008 | 5009 | }, |
5009 | 5010 | ]; |
5010 | 5011 | |
5011 | - const enumDataSourceConst = (() => { | |
5012 | - return { | |
5013 | - ORG_ID: 'orgId', | |
5014 | - DEVICE_ID: 'deviceId', | |
5015 | - SLAVE_DEVICE_ID: 'slaveDeviceId', | |
5016 | - ATTR: 'attr', | |
5017 | - GATEWAY: 'GATEWAY' | |
5018 | - } | |
5019 | - })() | |
5012 | + const enumDataSourceConst = { | |
5013 | + ORG_ID: 'orgId', | |
5014 | + DEVICE_ID: 'deviceId', | |
5015 | + SLAVE_DEVICE_ID: 'slaveDeviceId', | |
5016 | + ATTR: 'attr', | |
5017 | + GATEWAY: 'GATEWAY' | |
5018 | + } | |
5019 | + | |
5020 | + let echoRefreshFn = null | |
5021 | + | |
5020 | 5022 | |
5021 | 5023 | |
5022 | 5024 | // 获取url的请求参数函数 |
... | ... | @@ -5067,12 +5069,16 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5067 | 5069 | /** |
5068 | 5070 | * @description 获取节点绑定信息 |
5069 | 5071 | */ |
5070 | - function getNodeBindInfo() { | |
5072 | + async function getNodeBindInfo() { | |
5071 | 5073 | const { id } = nodeInfo |
5072 | - return ConfigurationNodeApi.getConfigurationInfo('NODE', id) | |
5074 | + const [err, res] = await to(ConfigurationNodeApi.getConfigurationInfo('NODE', id)) | |
5075 | + currentNodeData = res | |
5076 | + if (echoRefreshFn && typeof echoRefreshFn === 'function') echoRefreshFn() | |
5073 | 5077 | } |
5074 | 5078 | |
5075 | 5079 | |
5080 | + | |
5081 | + | |
5076 | 5082 | /** |
5077 | 5083 | * @description 生成数据交互面板 |
5078 | 5084 | * @returns {Array} |
... | ... | @@ -5157,8 +5163,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5157 | 5163 | treeProps: { |
5158 | 5164 | data: treeList, |
5159 | 5165 | onlyIconControl: true, |
5160 | - onReady(setValue) { | |
5161 | - }, | |
5162 | 5166 | click(node) { |
5163 | 5167 | currentCheckedOrgNode = node.data.id |
5164 | 5168 | getDevicesByOrgId(node.data.id) |
... | ... | @@ -5262,37 +5266,44 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5262 | 5266 | * @description 数据回显 |
5263 | 5267 | */ |
5264 | 5268 | async function echoData() { |
5265 | - const [err, res] = await to(getNodeBindInfo()) | |
5266 | - if (err || !Object.keys(res).length) return | |
5267 | - currentNodeData = res | |
5268 | 5269 | |
5269 | - echoDataSource() | |
5270 | - echoActionType() | |
5270 | + echoRefreshFn = () => { | |
5271 | + echoDataSource() | |
5272 | + echoActionType() | |
5273 | + form.render(null, CONTAINER_FILTER) | |
5274 | + } | |
5275 | + | |
5276 | + await getNodeBindInfo() | |
5277 | + | |
5278 | + | |
5271 | 5279 | |
5272 | 5280 | function echoDataSource() { |
5273 | 5281 | const { dataSources = [] } = currentNodeData |
5274 | - const [ dataSource = {} ] = dataSources | |
5275 | - const { orgId, deviceId, slaveDeviceId, attr: [bindAttr] = [] } = dataSource | |
5282 | + const [dataSource = {}] = dataSources | |
5283 | + const { orgId, deviceId, slaveDeviceId, attr } = dataSource | |
5276 | 5284 | const queue = [] |
5277 | 5285 | if (orgId) { |
5278 | 5286 | currentCheckedOrgNode = orgId |
5279 | 5287 | queue.push(() => getDevicesByOrgId(orgId)) |
5280 | 5288 | } |
5281 | 5289 | if (slaveDeviceId) { |
5282 | - queue.push(() => getSlaveDeviceByMasterDeviceId(orgId, deviceId)) | |
5290 | + queue.push(() => { | |
5291 | + getSlaveDeviceByMasterDeviceId(orgId, deviceId) | |
5292 | + $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'block' }) | |
5293 | + }) | |
5283 | 5294 | queue.push(() => getAttrByDeviceId(slaveDeviceId)) |
5284 | 5295 | } else { |
5285 | 5296 | queue.push(() => getAttrByDeviceId(deviceId)) |
5286 | 5297 | } |
5287 | 5298 | Promise.all(queue.map(item => item())) |
5288 | 5299 | .finally(() => { |
5289 | - const orgNode = UseLayUi.findTreeObjectByField(treeList, orgId) | |
5290 | - $(`#${enumActionEl.ORG_EL} input`).parent().find('span').html(orgNode.name) | |
5300 | + const orgNode = UseLayUi.findTreeObjectByField(treeList, currentCheckedOrgNode) | |
5301 | + $(`#${enumActionEl.ORG_EL} input[name="${enumDataSourceConst.ORG_ID}"]`).parent().find('span').html(orgNode?.name) | |
5291 | 5302 | form.val(CONTAINER_FILTER, { |
5292 | 5303 | orgId, |
5293 | 5304 | deviceId, |
5294 | 5305 | slaveDeviceId, |
5295 | - attr: bindAttr | |
5306 | + attr | |
5296 | 5307 | }) |
5297 | 5308 | }) |
5298 | 5309 | } |
... | ... | @@ -5301,11 +5312,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5301 | 5312 | const all = [...(currentNodeData.act ?? []), ...(currentNodeData.event ?? [])] |
5302 | 5313 | const actionType = {} |
5303 | 5314 | for (const item of all) { |
5304 | - if (!item.enabled) { | |
5305 | - actionType[item.type] = 'on' | |
5306 | - } | |
5315 | + actionType[item.type] = item.enabled | |
5307 | 5316 | } |
5308 | - console.log(actionType) | |
5309 | 5317 | form.val(CONTAINER_FILTER, actionType) |
5310 | 5318 | } |
5311 | 5319 | } |
... | ... | @@ -5321,8 +5329,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5321 | 5329 | |
5322 | 5330 | $(container).append(fragment) |
5323 | 5331 | |
5324 | - UseLayUi.nextTick(() => form.render(null, CONTAINER_FILTER)) | |
5325 | - | |
5326 | 5332 | } |
5327 | 5333 | mount() |
5328 | 5334 | |
... | ... | @@ -5370,37 +5376,38 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5370 | 5376 | const panel = createPanel() |
5371 | 5377 | $(panel).addClass('data-source__submit-panel').append(`<button type="button" lay-submit lay-filter="formDataSource" class="layui-btn">保存</button>`) |
5372 | 5378 | $(container).append(panel) |
5373 | - form.on('submit(formDataSource)', function (data) { | |
5379 | + form.on('submit(formDataSource)', async function (data) { | |
5374 | 5380 | const ENABLED_FLAG = 'on' |
5375 | 5381 | const { field } = data |
5376 | - const value = { [enumCategory.ACT]: [], [enumCategory.EVENT]: [], [enumCategory.DATA_SOURCE]: [] } | |
5382 | + const value = { | |
5383 | + configurationId, | |
5384 | + contentId: currentPageId.id, | |
5385 | + nodeId: graphId, | |
5386 | + [enumCategory.ACT]: [], | |
5387 | + [enumCategory.EVENT]: [], | |
5388 | + [enumCategory.DATA_SOURCE]: { | |
5389 | + [enumDataSourceConst.ORG_ID]: field[enumDataSourceConst.ORG_ID], | |
5390 | + [enumDataSourceConst.DEVICE_ID]: field[enumDataSourceConst.DEVICE_ID], | |
5391 | + ...(field[enumDataSourceConst.SLAVE_DEVICE_ID] && { [enumDataSourceConst.SLAVE_DEVICE_ID]: field[enumDataSourceConst.SLAVE_DEVICE_ID] }), | |
5392 | + [enumDataSourceConst.ATTR]: field[enumDataSourceConst.ATTR], | |
5393 | + } | |
5394 | + } | |
5377 | 5395 | const allType = [...interactionList, ...dynamicEffectList] |
5378 | 5396 | for (const item of allType) { |
5379 | 5397 | if (field[item.type] === ENABLED_FLAG) { |
5380 | 5398 | const enableItem = currentNodeData[item.category].find(each => each.type === item.type) |
5381 | 5399 | if (!enableItem) continue |
5382 | 5400 | value[item.category].push({ |
5383 | - configurationId, | |
5384 | - contentId: currentPageId.id, | |
5385 | - id: graphId, | |
5386 | 5401 | type: item.type, |
5387 | 5402 | enabled: true |
5388 | 5403 | }) |
5389 | 5404 | } |
5390 | 5405 | } |
5391 | - value[enumCategory.DATA_SOURCE].push({ | |
5392 | - [enumDataSourceConst.ORG_ID]: field[enumDataSourceConst.ORG_ID], | |
5393 | - [enumDataSourceConst.DEVICE_ID]: field[enumDataSourceConst.DEVICE_ID], | |
5394 | - [enumDataSourceConst.SLAVE_DEVICE_ID]: field[enumDataSourceConst.SLAVE_DEVICE_ID], | |
5395 | - [enumDataSourceConst.ATTR]: [field[enumDataSourceConst.ATTR]], | |
5396 | - }) | |
5397 | 5406 | |
5398 | - ConfigurationNodeApi.updateNodeInfo(value) | |
5399 | - .then(res => { | |
5400 | - console.log(res) | |
5401 | - }).catch(err => { | |
5402 | - console.log(err) | |
5403 | - }) | |
5407 | + const [err, res] = await to(ConfigurationNodeApi.updateNodeInfo(value)) | |
5408 | + if (err) return | |
5409 | + UseLayUi.successMsg() | |
5410 | + await getNodeBindInfo() | |
5404 | 5411 | return false; |
5405 | 5412 | }); |
5406 | 5413 | } |
... | ... | @@ -5415,18 +5422,41 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5415 | 5422 | return |
5416 | 5423 | } |
5417 | 5424 | // 事件类型 |
5418 | - const eventType = { | |
5425 | + const enumenumEventType = { | |
5419 | 5426 | DOWN: "按下", |
5420 | 5427 | UP: "抬起", |
5421 | 5428 | SINGLE: "单击", |
5422 | 5429 | DOUBLE: "双击", |
5423 | 5430 | }; |
5424 | 5431 | |
5425 | - /** | |
5426 | - * @description 表格表体 | |
5427 | - * @type {string} | |
5428 | - */ | |
5429 | - const deviceDataTbody = 'deviceDataTbody' | |
5432 | + const enumActionEl = { | |
5433 | + /** | |
5434 | + * @description 表体节点 | |
5435 | + */ | |
5436 | + DEVICE_DATA_BODY_EL: 'deviceDataTbody', | |
5437 | + | |
5438 | + /** | |
5439 | + * @description 删除行节点 | |
5440 | + */ | |
5441 | + DEL_ROW_EL: 'deleteRow', | |
5442 | + | |
5443 | + /** | |
5444 | + * @description 增加行节点 | |
5445 | + */ | |
5446 | + ADD_ROW_EL: 'addRow', | |
5447 | + | |
5448 | + /** | |
5449 | + * @descripton | |
5450 | + */ | |
5451 | + ROW_FILTER: 'interactionRowFilter', | |
5452 | + | |
5453 | + /** | |
5454 | + * @description 弹出层保存 filter | |
5455 | + */ | |
5456 | + LAYER_SUBMIT_FILTER: 'interactionLayerSubmit' | |
5457 | + } | |
5458 | + | |
5459 | + | |
5430 | 5460 | |
5431 | 5461 | /** |
5432 | 5462 | * @description 所有设备选项 |
... | ... | @@ -5436,25 +5466,25 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5436 | 5466 | |
5437 | 5467 | let addRowNumber = 0 |
5438 | 5468 | |
5439 | - const rowFormList = [] | |
5469 | + const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}` | |
5440 | 5470 | |
5441 | 5471 | /** |
5442 | 5472 | * @description 枚举常量 |
5443 | - * @enum DEVICE - | |
5473 | + * @enum DEVICE | |
5444 | 5474 | */ |
5445 | 5475 | const enumConst = { |
5446 | 5476 | /** |
5447 | 5477 | * @description 设备 |
5448 | 5478 | */ |
5449 | - DEVICE: 'device', | |
5479 | + DEVICE: 'deviceId', | |
5450 | 5480 | /** |
5451 | 5481 | * @description 子设备 |
5452 | 5482 | */ |
5453 | - CHILD_DEVICE: 'childDevice', | |
5483 | + SLAVE_DEVICE: 'slaveDeviceId', | |
5454 | 5484 | /** |
5455 | 5485 | * @description 变量 |
5456 | 5486 | */ |
5457 | - VARIABLE: 'variable', | |
5487 | + ATTR: 'attr', | |
5458 | 5488 | /** |
5459 | 5489 | * @description 下发值 |
5460 | 5490 | */ |
... | ... | @@ -5464,39 +5494,36 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5464 | 5494 | /** |
5465 | 5495 | * @description 创建回显数据 查询出所有网关设备和直连设备 |
5466 | 5496 | */ |
5467 | - function getAllDevice() { | |
5497 | + async function getMaterDevice() { | |
5468 | 5498 | if (!currentCheckedOrgNode) return |
5469 | - ConfigurationNodeApi.getMasterDevice(currentCheckedOrgNode) | |
5470 | - .then(res => { | |
5471 | - allDeviceOptions = res | |
5472 | - setDeviceOptions() | |
5473 | - }) | |
5499 | + const [err, res] = await to(ConfigurationNodeApi.getMasterDevice(currentCheckedOrgNode)) | |
5500 | + allDeviceOptions = res | |
5474 | 5501 | } |
5475 | 5502 | |
5476 | 5503 | function addRecord() { |
5477 | - addRowNumber++ | |
5478 | - rowFormList.push(addRowNumber) | |
5479 | 5504 | const content = ` |
5480 | - <tr class="layui-form" lay-filter="deviceDataRow${addRowNumber}"> | |
5505 | + <tr class="layui-form" lay-filter="${enumActionEl.ROW_FILTER}${addRowNumber}"> | |
5481 | 5506 | <td> |
5482 | - <select name="${enumConst.DEVICE}" lay-filter="device" lay-verify="required"></select> | |
5507 | + <select name="${enumConst.DEVICE}" lay-filter="${enumConst.DEVICE}" lay-verType="tips" lay-verify="required"></select> | |
5483 | 5508 | </td> |
5484 | 5509 | <td> |
5485 | - <select name="${enumConst.CHILD_DEVICE}" lay-filter="childDevice" lay-verify="required" ></select> | |
5510 | + <select name="${enumConst.SLAVE_DEVICE}" lay-filter="${enumConst.SLAVE_DEVICE}" lay-verType="tips"></select> | |
5486 | 5511 | </td> |
5487 | 5512 | <td> |
5488 | - <select name="${enumConst.VARIABLE}" lay-verify="required"></select> | |
5513 | + <select name="${enumConst.ATTR}" lay-verType="tips" lay-verify="required"></select> | |
5489 | 5514 | </td> |
5490 | 5515 | <td> |
5491 | - <textarea name="${enumConst.VALUE}" placeholder="请输入命令" class="layui-textarea" ></textarea> | |
5516 | + <textarea name="${enumConst.VALUE}" placeholder="请输入命令" lay-verType="tips" class="layui-textarea" ></textarea> | |
5492 | 5517 | </td> |
5493 | 5518 | <td> |
5494 | - <button type="button" class="layui-btn layui-btn-primary layui-border-red deleteRow">删除</button> | |
5519 | + <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_ROW_EL}">删除</button> | |
5495 | 5520 | </td> |
5496 | 5521 | </tr> |
5497 | 5522 | ` |
5498 | - $('#deviceDataTbody').append(content) | |
5499 | - form.render(null, `deviceDataRow${addRowNumber}`) | |
5523 | + $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).append(content) | |
5524 | + setDeviceOptions(addRowNumber) | |
5525 | + form.render('select', getRowFilter(addRowNumber)) | |
5526 | + addRowNumber++ | |
5500 | 5527 | } |
5501 | 5528 | |
5502 | 5529 | /** |
... | ... | @@ -5507,8 +5534,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5507 | 5534 | const [err, res] = await to(ConfigurationNodeApi.getDeviceAttr(data.value)) |
5508 | 5535 | if (!res) return |
5509 | 5536 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res }) |
5510 | - $(data.elem).parents('tr').find(`select[name="${enumConst.VARIABLE}"]`).html(generateOption) | |
5511 | - UseLayUi.nextTick(() => form.render()) | |
5537 | + $(data.elem).parents('tr').find(`select[name="${enumConst.ATTR}"]`).html(generateOption) | |
5538 | + form.render('select') | |
5512 | 5539 | } |
5513 | 5540 | |
5514 | 5541 | /** |
... | ... | @@ -5521,14 +5548,14 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5521 | 5548 | if (isGATEWAY && data.value) { |
5522 | 5549 | const [err, res] = await to(ConfigurationNodeApi.getSlaveDevice(currentCheckedOrgNode, data.value)) |
5523 | 5550 | if (!res) return |
5524 | - const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res.items }) | |
5525 | - $(data.elem).parents('tr').find(`select[name="${enumConst.CHILD_DEVICE}"]`).html(generateOption) | |
5551 | + const generateOption = UseLayUi.generateOptionTemplate({ dataSource: res }) | |
5552 | + $(data.elem).parents('tr').find(`select[name="${enumConst.SLAVE_DEVICE}"]`).html(generateOption) | |
5526 | 5553 | } else { |
5527 | 5554 | updateVariableOptions(data) |
5528 | 5555 | } |
5529 | - UseLayUi.nextTick(() => form.render()) | |
5556 | + form.render('select') | |
5530 | 5557 | }) |
5531 | - form.on(`select(${enumConst.CHILD_DEVICE})`, (data) => { | |
5558 | + form.on(`select(${enumConst.SLAVE_DEVICE})`, (data) => { | |
5532 | 5559 | updateVariableOptions(data) |
5533 | 5560 | }) |
5534 | 5561 | } |
... | ... | @@ -5537,7 +5564,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5537 | 5564 | * @description 删除行 |
5538 | 5565 | */ |
5539 | 5566 | function createDeleteRowListenEvent() { |
5540 | - $('.deleteRow').click((event) => { | |
5567 | + $(`.${enumActionEl.DEL_ROW_EL}`).click((event) => { | |
5541 | 5568 | $(event.target).parents('tr').remove() |
5542 | 5569 | }) |
5543 | 5570 | } |
... | ... | @@ -5546,21 +5573,21 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5546 | 5573 | * @description 新增行 |
5547 | 5574 | */ |
5548 | 5575 | function createAddRowListenEvent() { |
5549 | - $('#addRow').click(() => { | |
5576 | + $(`#${enumActionEl.ADD_ROW_EL}`).click(() => { | |
5550 | 5577 | addRecord() |
5551 | 5578 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions }) |
5552 | - $(`#${deviceDataTbody} tr`).last().find(`select[name="${enumConst.DEVICE}"]`).html(generateOption) | |
5579 | + $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).last().find(`select[name="${enumConst.DEVICE}"]`).html(generateOption) | |
5553 | 5580 | createDeleteRowListenEvent() |
5554 | - form.render() | |
5581 | + form.render('select') | |
5555 | 5582 | }) |
5556 | 5583 | } |
5557 | 5584 | |
5558 | 5585 | /** |
5559 | 5586 | * @description 设置设备选项 |
5560 | 5587 | */ |
5561 | - function setDeviceOptions() { | |
5588 | + function setDeviceOptions(row) { | |
5562 | 5589 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: allDeviceOptions }) |
5563 | - $(`#${deviceDataTbody}`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption) | |
5590 | + $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr[lay-filter="${getRowFilter(row)}"]`).find(`select[name="${enumConst.DEVICE}"]`).html(generateOption) | |
5564 | 5591 | } |
5565 | 5592 | |
5566 | 5593 | /** |
... | ... | @@ -5580,52 +5607,23 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5580 | 5607 | */ |
5581 | 5608 | function mountSelectOptions(row, key, data) { |
5582 | 5609 | const generateOption = UseLayUi.generateOptionTemplate({ dataSource: data }) |
5583 | - $(`#${deviceDataTbody}`).find(`tr[lay-filter="deviceDataRow${row}"] select[name="${key}"]`).html(generateOption) | |
5610 | + $(`#${enumActionEl.DEVICE_DATA_BODY_EL}`).find(`tr[lay-filter="${getRowFilter(row)}"] select[name="${key}"]`).html(generateOption) | |
5584 | 5611 | } |
5585 | 5612 | |
5586 | 5613 | /** |
5587 | - * @description 设置select val | |
5588 | - * @param row | |
5589 | - * @param key | |
5590 | - * @param val | |
5614 | + * @description 根据主设备ID获取从设备 | |
5591 | 5615 | */ |
5592 | - function setSelectVal(row, key, val) { | |
5593 | - $(`#${deviceDataTbody}`).find(`tr[lay-filter="deviceDataRow${row}"] select[name="${key}"]`).val(val) | |
5616 | + async function getSlaveDeviceByMasterDevice(deviceId, row) { | |
5617 | + const res = await ConfigurationNodeApi.getSlaveDevice(currentCheckedOrgNode, deviceId) | |
5618 | + mountSelectOptions(row, enumConst.SLAVE_DEVICE, res) | |
5594 | 5619 | } |
5595 | 5620 | |
5596 | 5621 | /** |
5597 | - * @description 处理每条回显数据 | |
5598 | - * @param datum | |
5599 | - * @returns {Promise<void>} | |
5622 | + * @description 根据设备ID获取设备属性 | |
5600 | 5623 | */ |
5601 | - async function handleEachDataEcho(datum) { | |
5602 | - | |
5603 | - addRecord() | |
5604 | - setDeviceOptions() | |
5605 | - const currentRow = addRowNumber | |
5606 | - | |
5607 | - const childDeviceId = datum[enumConst.CHILD_DEVICE] | |
5608 | - const deviceId = datum[enumConst.DEVICE] | |
5609 | - const variable = datum[enumConst.VARIABLE] | |
5610 | - let findId = deviceId | |
5611 | - | |
5612 | - /** | |
5613 | - * @description 存在子设备请求子设备列表 | |
5614 | - */ | |
5615 | - if (childDeviceId && deviceId) { | |
5616 | - findId = childDeviceId | |
5617 | - ConfigurationNodeApi.getSlaveDevice(currentCheckedOrgNode, deviceId) | |
5618 | - .then(res => { | |
5619 | - mountSelectOptions(currentRow, enumConst.CHILD_DEVICE, res.items) | |
5620 | - setSelectVal(currentRow, enumConst.CHILD_DEVICE, childDeviceId) | |
5621 | - form.val(`deviceDataRow${currentRow}`, datum) | |
5622 | - }) | |
5623 | - } | |
5624 | - deviceId && ConfigurationNodeApi.getDeviceAttr(findId).then(res => { | |
5625 | - mountSelectOptions(currentRow, enumConst.VARIABLE, res) | |
5626 | - setSelectVal(currentRow, enumConst.CHILD_DEVICE, variable) | |
5627 | - form.val(`deviceDataRow${currentRow}`, datum) | |
5628 | - }) | |
5624 | + async function getDeviceAttrByDeviceId(deviceId, row) { | |
5625 | + const res = await ConfigurationNodeApi.getDeviceAttr(deviceId) | |
5626 | + mountSelectOptions(row, enumConst.ATTR, res) | |
5629 | 5627 | } |
5630 | 5628 | |
5631 | 5629 | /** |
... | ... | @@ -5633,16 +5631,37 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5633 | 5631 | */ |
5634 | 5632 | function echoFormData(info) { |
5635 | 5633 | const { content: { data = [] } = {} } = info |
5636 | - for (const datum of data) { | |
5637 | - handleEachDataEcho(datum) | |
5634 | + data.forEach((datum, index) => echoEachData(datum, index)) | |
5635 | + } | |
5636 | + | |
5637 | + /** | |
5638 | + * @description 回显每条数据 | |
5639 | + */ | |
5640 | + function echoEachData(datum = {}, row) { | |
5641 | + addRecord() | |
5642 | + const deviceId = datum[enumConst.DEVICE] | |
5643 | + const slaveDeviceId = datum[enumConst.SLAVE_DEVICE] | |
5644 | + const queue = [] | |
5645 | + | |
5646 | + if (slaveDeviceId) { | |
5647 | + queue.push(() => getSlaveDeviceByMasterDevice(deviceId, row)) | |
5648 | + queue.push(() => getDeviceAttrByDeviceId(slaveDeviceId, row)) | |
5649 | + } else { | |
5650 | + queue.push(() => getDeviceAttrByDeviceId(deviceId, row)) | |
5638 | 5651 | } |
5652 | + | |
5653 | + Promise | |
5654 | + .all(queue.map(item => item())) | |
5655 | + .finally(() => { | |
5656 | + form.val(getRowFilter(row), datum) | |
5657 | + }) | |
5639 | 5658 | } |
5640 | 5659 | |
5641 | 5660 | /** |
5642 | 5661 | * @description 保存 |
5643 | 5662 | */ |
5644 | - function submit() { | |
5645 | - const data = rowFormList.map(rowNumber => form.val(`deviceDataRow${rowNumber}`)).filter(item => Object.keys(item).length) | |
5663 | + async function submit(callback) { | |
5664 | + const data = Array.from({ length: addRowNumber }).map((_, row) => form.val(getRowFilter(row))).filter(item => Object.keys(item).length) | |
5646 | 5665 | const formModal = { |
5647 | 5666 | configurationId, |
5648 | 5667 | contentId: currentPageId.id, |
... | ... | @@ -5652,7 +5671,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5652 | 5671 | }, |
5653 | 5672 | type: event.data.type |
5654 | 5673 | }; |
5655 | - ConfigurationNodeApi.updateNodeEvent(formModal) | |
5674 | + const [err, res] = await to(ConfigurationNodeApi.updateNodeEvent(formModal)) | |
5675 | + if (err) return | |
5676 | + UseLayUi.successMsg() | |
5677 | + callback() | |
5656 | 5678 | } |
5657 | 5679 | |
5658 | 5680 | /** |
... | ... | @@ -5666,7 +5688,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5666 | 5688 | <div class="layui-form-item"> |
5667 | 5689 | <label class="layui-form-label">事件</label> |
5668 | 5690 | <div class="layui-input-block"> |
5669 | - <input type="text" name="event" class="layui-input" value="${eventType[type]}" disabled> | |
5691 | + <input type="text" name="event" class="layui-input" value="${enumenumEventType[type]}" disabled> | |
5670 | 5692 | </div> |
5671 | 5693 | </div> |
5672 | 5694 | <div class="layui-form-item"> |
... | ... | @@ -5685,12 +5707,12 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5685 | 5707 | </div> |
5686 | 5708 | </div> |
5687 | 5709 | </div> |
5688 | - <div style="height:255px;" id="tableContent"> | |
5710 | + <div id="tableContent"> | |
5689 | 5711 | <table class="layui-table" > |
5690 | 5712 | <colgroup> |
5691 | - <col> | |
5692 | - <col> | |
5693 | - <col> | |
5713 | + <col width="240"> | |
5714 | + <col width="240"> | |
5715 | + <col width="240"> | |
5694 | 5716 | <col width="240"> |
5695 | 5717 | <col width="60"> |
5696 | 5718 | </colgroup> |
... | ... | @@ -5703,10 +5725,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5703 | 5725 | <th style="text-align:center">操作</th> |
5704 | 5726 | </tr> |
5705 | 5727 | </thead> |
5706 | - <tbody id="${deviceDataTbody}"></tbody> | |
5728 | + <tbody id="${enumActionEl.DEVICE_DATA_BODY_EL}"></tbody> | |
5707 | 5729 | </table> |
5708 | 5730 | <div style="display:flex;justify-content:center;"> |
5709 | - <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="addRow">添加一条</button> | |
5731 | + <button type="button" class="layui-btn layui-btn-primary layui-border-blue" id="${enumActionEl.ADD_ROW_EL}">添加一条</button> | |
5710 | 5732 | </div> |
5711 | 5733 | </div> |
5712 | 5734 | </form>` |
... | ... | @@ -5716,21 +5738,23 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5716 | 5738 | content, |
5717 | 5739 | skin: 'event-layer__override', |
5718 | 5740 | // area: ["800px", "600px"], |
5719 | - area: '800px', | |
5741 | + area: '1100px', | |
5720 | 5742 | btn: ["保存", "取消"], |
5721 | 5743 | shade: ["0.7", "#fafafa"], |
5722 | - async yes(index, layero) { | |
5723 | - await submit() | |
5724 | - layer.close(index) | |
5725 | - const [err, res] = await to(getNodeBindInfo()) | |
5726 | - if (err || !Object.keys(res).length) return | |
5727 | - currentNodeData = res | |
5744 | + yes(index) { | |
5745 | + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => { | |
5746 | + submit(() => { | |
5747 | + layer.close(index) | |
5748 | + getNodeBindInfo() | |
5749 | + }) | |
5750 | + }) | |
5728 | 5751 | }, |
5729 | 5752 | but2(index, layero) { |
5730 | - | |
5753 | + return false | |
5731 | 5754 | }, |
5732 | - success(layero, index) { | |
5733 | - getAllDevice() | |
5755 | + async success(layero, index) { | |
5756 | + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 'lay-submit': '', 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER }) | |
5757 | + await getMaterDevice() | |
5734 | 5758 | const info = getLayerBindInfo('event', type) |
5735 | 5759 | if (!info) { |
5736 | 5760 | addRecord() |
... | ... | @@ -5751,7 +5775,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5751 | 5775 | */ |
5752 | 5776 | function handleClickOrDbClick(event) { |
5753 | 5777 | |
5754 | - const eventType = { | |
5778 | + const enumEventType = { | |
5755 | 5779 | DOWN: "按下", |
5756 | 5780 | UP: "抬起", |
5757 | 5781 | SINGLE: "单击", |
... | ... | @@ -5802,6 +5826,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5802 | 5826 | * @description 页面 ID |
5803 | 5827 | */ |
5804 | 5828 | PAGE_EL_ID: 'dynamicInputPage', |
5829 | + | |
5830 | + /** | |
5831 | + * @description layer submit filter | |
5832 | + */ | |
5833 | + LAYER_SUBMIT_FILTER: 'dynamicLinkLayerFilter' | |
5805 | 5834 | } |
5806 | 5835 | |
5807 | 5836 | /** |
... | ... | @@ -5837,6 +5866,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5837 | 5866 | } |
5838 | 5867 | const [err] = await to(ConfigurationNodeApi.updateNodeEvent(data)) |
5839 | 5868 | if (err) return |
5869 | + UseLayUi.successMsg() | |
5840 | 5870 | callback() |
5841 | 5871 | } |
5842 | 5872 | |
... | ... | @@ -5884,13 +5914,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5884 | 5914 | <div class="layui-form-item"> |
5885 | 5915 | <label class="layui-form-label">事件</label> |
5886 | 5916 | <div class="layui-input-block"> |
5887 | - <input type="text" name="${enumConst.EVENT}" disabled class="layui-input" value="${eventType[type]}"> | |
5917 | + <input type="text" name="${enumConst.EVENT}" disabled class="layui-input" value="${enumEventType[type]}"> | |
5888 | 5918 | </div> |
5889 | 5919 | </div> |
5890 | 5920 | <div class="layui-form-item"> |
5891 | 5921 | <label class="layui-form-label">动作</label> |
5892 | 5922 | <div class="layui-input-block"> |
5893 | - <select name="${enumConst.ACTION}" lay-verify="required" lay-filter="${enumActionEl.ACTION_SELECT_FILTER}"> | |
5923 | + <select name="${enumConst.ACTION}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ACTION_SELECT_FILTER}"> | |
5894 | 5924 | ${generatorActionOptions()} |
5895 | 5925 | </select> |
5896 | 5926 | </div> |
... | ... | @@ -5898,13 +5928,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5898 | 5928 | <div class="layui-form-item" id="${enumActionEl.LINK_EL_ID}"> |
5899 | 5929 | <label class="layui-form-label">链接</label> |
5900 | 5930 | <div class="layui-input-block"> |
5901 | - <input type="text" name="${enumConst.LINK_VALUE}" class="layui-input"> | |
5931 | + <input type="text" lay-verType="tips" name="${enumConst.LINK_VALUE}" class="layui-input"> | |
5902 | 5932 | </div> |
5903 | 5933 | </div> |
5904 | 5934 | <div class="layui-form-item" id="${enumActionEl.PAGE_EL_ID}" style="display:none"> |
5905 | 5935 | <label class="layui-form-label">页面</label> |
5906 | 5936 | <div class="layui-input-block"> |
5907 | - <select name="${enumConst.PAGE_VALUE}" lay-verify="required" id="pageSelect"> | |
5937 | + <select name="${enumConst.PAGE_VALUE}" lay-verType="tips" id="pageSelect"> | |
5908 | 5938 | ${generatorPageOptions()} |
5909 | 5939 | </select> |
5910 | 5940 | </div> |
... | ... | @@ -5920,13 +5950,19 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5920 | 5950 | content, |
5921 | 5951 | area: ["800px", "500px"], |
5922 | 5952 | btn: ["保存", "取消"], |
5923 | - async yes(index) { | |
5924 | - submit(() => layer.close(index)) | |
5953 | + yes(index) { | |
5954 | + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => { | |
5955 | + submit(() => { | |
5956 | + layer.close(index) | |
5957 | + getNodeBindInfo() | |
5958 | + }) | |
5959 | + }) | |
5925 | 5960 | }, |
5926 | 5961 | btn2(index) { |
5927 | 5962 | layer.close(index); |
5928 | 5963 | }, |
5929 | - success() { | |
5964 | + success(layero) { | |
5965 | + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 'lay-submit': '', 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER }) | |
5930 | 5966 | generatorEventListen() |
5931 | 5967 | const info = getLayerBindInfo('event', type) |
5932 | 5968 | form.render(null, enumActionEl.FORM_FILTER) |
... | ... | @@ -5946,7 +5982,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5946 | 5982 | |
5947 | 5983 | const IS_DISPLAY = event.data.type === 'DISPLAY' |
5948 | 5984 | |
5949 | - const eventType = { | |
5985 | + const enumEventType = { | |
5950 | 5986 | FLASH: '闪烁', |
5951 | 5987 | DISPLAY: '显示/隐藏', |
5952 | 5988 | ROTATE: '旋转', |
... | ... | @@ -5964,7 +6000,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
5964 | 6000 | ATTR_EL: 'dataDynamicEffectAtt', |
5965 | 6001 | DEL_BTN_EL: 'dataDynamicEffectDelBtn', |
5966 | 6002 | ADD_BTN_EL: 'dataDynamicEffectAddBtn', |
5967 | - DISPLAY_SWITCH_EL: 'visibleOrHidden' | |
6003 | + DISPLAY_SWITCH_EL: 'visibleOrHidden', | |
6004 | + LAYER_SUBMIT_FILTER: 'dynamicEffectLayerFilter' | |
5968 | 6005 | } |
5969 | 6006 | |
5970 | 6007 | const getRowFilter = (rowNumber) => `${enumActionEl.ROW_FILTER}${rowNumber}` |
... | ... | @@ -6012,8 +6049,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6012 | 6049 | treeProps: { |
6013 | 6050 | data: treeList, |
6014 | 6051 | onlyIconControl: true, |
6015 | - onReady(setValue) { | |
6016 | - }, | |
6017 | 6052 | click(node) { |
6018 | 6053 | currentOrgId = node.data.id |
6019 | 6054 | getDeviceByOrg(node.data.id) |
... | ... | @@ -6084,10 +6119,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6084 | 6119 | <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}"> |
6085 | 6120 | ${IS_DISPLAY && `<td>${generatorDisplayOptions()}</td>`} |
6086 | 6121 | <td> |
6087 | - <input type="text" name="${enumConst.MIN}" class="layui-input"> | |
6122 | + <input lay-verType="tips" lay-verify="required" type="text" name="${enumConst.MIN}" class="layui-input"> | |
6088 | 6123 | </td> |
6089 | 6124 | <td> |
6090 | - <input type="text" name="${enumConst.MAX}" class="layui-input"> | |
6125 | + <input lay-verType="tips" lay-verify="required" type="text" name="${enumConst.MAX}" class="layui-input"> | |
6091 | 6126 | </td> |
6092 | 6127 | <td style="text-align: center;"> |
6093 | 6128 | <button type="button" class="layui-btn layui-btn-primary layui-border-red ${enumActionEl.DEL_BTN_EL}">删除</button> |
... | ... | @@ -6158,15 +6193,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6158 | 6193 | const { slaveDeviceId, deviceId, attr, orgId, condition = [] } = info |
6159 | 6194 | echoEachData(condition) |
6160 | 6195 | echoOrgTree(orgId) |
6161 | - const queue = [getDeviceByOrg(orgId)] | |
6196 | + const queue = [] | |
6197 | + if (orgId) { | |
6198 | + queue.push(() => getDeviceByOrg(orgId)) | |
6199 | + } | |
6162 | 6200 | if (slaveDeviceId) { |
6163 | 6201 | $(`#${enumActionEl.SLAVE_DEVICE_EL}`).css({ display: 'block' }) |
6164 | - queue.push(getSlaveDeviceByMasterDevice(orgId, deviceId)) | |
6165 | - queue.push(getAttrsByDevice(slaveDeviceId)) | |
6202 | + queue.push(() => getSlaveDeviceByMasterDevice(orgId, deviceId)) | |
6203 | + queue.push(() => getAttrsByDevice(slaveDeviceId)) | |
6166 | 6204 | } else { |
6167 | - queue.push(getAttrsByDevice(deviceId)) | |
6205 | + queue.push(() => getAttrsByDevice(deviceId)) | |
6168 | 6206 | } |
6169 | - Promise.all(queue).finally(() => { | |
6207 | + Promise.all(queue.map(item => item())).finally(() => { | |
6170 | 6208 | form.val(enumActionEl.FORM_FILTER, { slaveDeviceId, deviceId, attr, orgId }) |
6171 | 6209 | }) |
6172 | 6210 | } |
... | ... | @@ -6186,7 +6224,6 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6186 | 6224 | */ |
6187 | 6225 | function echoOrgTree(id) { |
6188 | 6226 | const node = UseLayUi.findTreeObjectByField(treeList, id) |
6189 | - console.log($(`#${enumActionEl.ORG_EL}`).find(`input[name="${enumConst.ORG_ID}"]`).parent().find('span')) | |
6190 | 6227 | $(`#${enumActionEl.ORG_EL}`).find(`input[name="${enumConst.ORG_ID}"]`).parent().find('span').html(node.name) |
6191 | 6228 | } |
6192 | 6229 | |
... | ... | @@ -6202,7 +6239,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6202 | 6239 | type: event.data.type |
6203 | 6240 | } |
6204 | 6241 | const [err, res] = await to(ConfigurationNodeApi.updateNodeAct(formModel)) |
6205 | - if (!err) callback() | |
6242 | + if (err) return | |
6243 | + UseLayUi.successMsg() | |
6244 | + callback() | |
6206 | 6245 | } |
6207 | 6246 | |
6208 | 6247 | |
... | ... | @@ -6223,7 +6262,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6223 | 6262 | <div class="layui-form-item" id="${enumActionEl.DEVICE_EL}"> |
6224 | 6263 | <label class="layui-form-label">设备</label> |
6225 | 6264 | <div class="layui-input-block"> |
6226 | - <select name="${enumConst.DEVICE_ID}" lay-verify="required" lay-filter="${enumActionEl.DEVICE_EL}"> | |
6265 | + <select name="${enumConst.DEVICE_ID}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.DEVICE_EL}"> | |
6227 | 6266 | </select> |
6228 | 6267 | </div> |
6229 | 6268 | </div> |
... | ... | @@ -6231,7 +6270,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6231 | 6270 | <div class="layui-form-item" id="${enumActionEl.SLAVE_DEVICE_EL}" style="display: none"> |
6232 | 6271 | <label class="layui-form-label">子设备</label> |
6233 | 6272 | <div class="layui-input-block"> |
6234 | - <select name="${enumConst.SLAVE_DEVICE_ID}" lay-verify="required" lay-filter="${enumActionEl.SLAVE_DEVICE_EL}"> | |
6273 | + <select name="${enumConst.SLAVE_DEVICE_ID}" lay-verType="tips" lay-filter="${enumActionEl.SLAVE_DEVICE_EL}"> | |
6235 | 6274 | </select> |
6236 | 6275 | </div> |
6237 | 6276 | </div> |
... | ... | @@ -6239,7 +6278,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6239 | 6278 | <div class="layui-form-item" id="${enumActionEl.ATTR_EL}"> |
6240 | 6279 | <label class="layui-form-label">属性</label> |
6241 | 6280 | <div class="layui-input-block"> |
6242 | - <select name="${enumConst.ATTR}" lay-verify="required" lay-filter="${enumActionEl.ATTR_EL}"></select> | |
6281 | + <select name="${enumConst.ATTR}" lay-verType="tips" lay-verify="required" lay-filter="${enumActionEl.ATTR_EL}"></select> | |
6243 | 6282 | </div> |
6244 | 6283 | </div> |
6245 | 6284 | </div> |
... | ... | @@ -6269,12 +6308,13 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6269 | 6308 | ` |
6270 | 6309 | |
6271 | 6310 | layer.open({ |
6272 | - title: eventType[type], | |
6311 | + title: enumEventType[type], | |
6273 | 6312 | content, |
6274 | 6313 | skin: 'event-layer__override', |
6275 | 6314 | btn: ['保存', '取消'], |
6276 | - area: [IS_DISPLAY ? '1000px' : '800PX', '500px'], | |
6277 | - success() { | |
6315 | + area: IS_DISPLAY ? '1000px' : '800PX', | |
6316 | + success(layero) { | |
6317 | + $(layero).addClass('layui-form').find('.layui-layer-btn0').attr({ 'lay-submit': '', 'lay-filter': enumActionEl.LAYER_SUBMIT_FILTER }) | |
6278 | 6318 | generatorOrgTreeSelect() |
6279 | 6319 | const info = getLayerBindInfo('act', type) |
6280 | 6320 | if (info) { |
... | ... | @@ -6286,7 +6326,12 @@ DataFormatPanel.prototype.addDataFont = function (container) { |
6286 | 6326 | form.render() |
6287 | 6327 | }, |
6288 | 6328 | yes(index) { |
6289 | - submit(() => layer.close(index)) | |
6329 | + form.on(`submit(${enumActionEl.LAYER_SUBMIT_FILTER})`, data => { | |
6330 | + submit(() => { | |
6331 | + layer.close(index) | |
6332 | + getNodeBindInfo() | |
6333 | + }) | |
6334 | + }) | |
6290 | 6335 | }, |
6291 | 6336 | btn2() { |
6292 | 6337 | |
... | ... | @@ -10332,6 +10377,11 @@ class UseLayUi { |
10332 | 10377 | |
10333 | 10378 | template = singleUsage ? UseLayUi.createSingleUseFormItem(template) : template |
10334 | 10379 | |
10380 | + /** | |
10381 | + * @description 设置下拉树值 | |
10382 | + * @param {string} id - layui tree 树形结构 title字段 | |
10383 | + * @param {string} title - layui tree 树形结构 id字段 | |
10384 | + */ | |
10335 | 10385 | function setValue({ id, title }) { |
10336 | 10386 | $(elem) |
10337 | 10387 | .find('.layui-form-select').removeClass('layui-form-selected').end() |
... | ... | @@ -10349,7 +10399,7 @@ class UseLayUi { |
10349 | 10399 | tree.render({ |
10350 | 10400 | ...treeProps, |
10351 | 10401 | ...(autoFormatDataSource ? { data: UseLayUi.formatTreeDataSource(data, customSetTree, valueField, labelField, childrenField) } : {}), |
10352 | - elem: `#${layFilter}`, | |
10402 | + elem: $(elem).find(`#${layFilter}`), | |
10353 | 10403 | click(node) { |
10354 | 10404 | setValue(node.data) |
10355 | 10405 | if (UseLayUi.isFunction(click)) click(node) |
... | ... | @@ -10492,6 +10542,14 @@ class UseLayUi { |
10492 | 10542 | }) |
10493 | 10543 | } |
10494 | 10544 | |
10545 | + static msg(msg, options) { | |
10546 | + const { layer } = layui | |
10547 | + layer.msg(msg, options) | |
10548 | + } | |
10549 | + | |
10550 | + static successMsg(msg = '操作成功', options) { | |
10551 | + UseLayUi.msg(msg, { ...options, icon: 6 }) | |
10552 | + } | |
10495 | 10553 | |
10496 | 10554 | } |
10497 | 10555 | |
... | ... | @@ -10512,3 +10570,257 @@ function to(promise, errorExt) { |
10512 | 10570 | return [err, undefined] |
10513 | 10571 | }) |
10514 | 10572 | } |
10573 | + | |
10574 | + | |
10575 | +class Ws { | |
10576 | + /** | |
10577 | + * @description url 连接地址 | |
10578 | + */ | |
10579 | + url | |
10580 | + | |
10581 | + /** | |
10582 | + * @description 协议 | |
10583 | + */ | |
10584 | + protocols | |
10585 | + | |
10586 | + /** | |
10587 | + * @description socket 实例 | |
10588 | + * @type {WebSocket} | |
10589 | + */ | |
10590 | + ws | |
10591 | + | |
10592 | + /** | |
10593 | + * @description 重连标志 | |
10594 | + * @type {boolean} | |
10595 | + */ | |
10596 | + isReconnectionLoading = false | |
10597 | + | |
10598 | + /** | |
10599 | + * @description 重连定时器 | |
10600 | + */ | |
10601 | + timeId = null | |
10602 | + | |
10603 | + /** | |
10604 | + * @description 手动关闭标志位 | |
10605 | + * @type {boolean} | |
10606 | + */ | |
10607 | + isCustomClose = false | |
10608 | + | |
10609 | + /** | |
10610 | + * @description 消息队列 重新连接后会将之前断开期间发送的消息重新推送 | |
10611 | + * @type {Array} | |
10612 | + */ | |
10613 | + errorStack = [] | |
10614 | + | |
10615 | + /** | |
10616 | + * @description 创建websocket实例 | |
10617 | + * @params {string} url - 连接路径 | |
10618 | + * @params {string} protocols - 协议 | |
10619 | + */ | |
10620 | + constructor(url, protocols) { | |
10621 | + this.url = url | |
10622 | + this.protocols = protocols | |
10623 | + this.createWs() | |
10624 | + } | |
10625 | + | |
10626 | + /** | |
10627 | + * @description | |
10628 | + */ | |
10629 | + createWs() { | |
10630 | + this.ws = new WebSocket(this.url, this.protocols) | |
10631 | + this.onopen() | |
10632 | + this.onerror() | |
10633 | + this.onclose() | |
10634 | + this.onmessage() | |
10635 | + } | |
10636 | + | |
10637 | + /** | |
10638 | + * @description 建立连接时 | |
10639 | + */ | |
10640 | + onopen() { | |
10641 | + this.ws.onopen = () => { | |
10642 | + console.log(this.ws, 'onopen') | |
10643 | + this.errorStack.forEach(message => { | |
10644 | + this.send(message) | |
10645 | + }) | |
10646 | + this.errorStack = [] | |
10647 | + this.isReconnectionLoading = false | |
10648 | + } | |
10649 | + } | |
10650 | + | |
10651 | + /** | |
10652 | + * @description 连接发生错误 | |
10653 | + */ | |
10654 | + onerror() { | |
10655 | + this.ws.onerror = (err) => { | |
10656 | + console.log(err, 'onerror') | |
10657 | + this.reconnection() | |
10658 | + this.isReconnectionLoading = false | |
10659 | + } | |
10660 | + } | |
10661 | + | |
10662 | + /** | |
10663 | + * @description 连接断开时 | |
10664 | + */ | |
10665 | + onclose() { | |
10666 | + this.ws.onclose = () => { | |
10667 | + console.log('onclose') | |
10668 | + if (this.isCustomClose) return | |
10669 | + | |
10670 | + this.reconnection() | |
10671 | + this.isReconnectionLoading = false | |
10672 | + } | |
10673 | + } | |
10674 | + | |
10675 | + /** | |
10676 | + * @description 接受消息 | |
10677 | + */ | |
10678 | + async onmessage() { | |
10679 | + this.ws.onmessage = (event) => { | |
10680 | + try { | |
10681 | + const data = JSON.parse(event.data) | |
10682 | + this.eventCenter.emit(data.type, data.data) | |
10683 | + } catch (error) { | |
10684 | + console.log(error, 'error') | |
10685 | + } | |
10686 | + } | |
10687 | + } | |
10688 | + | |
10689 | + /** | |
10690 | + * @description 断开重连 | |
10691 | + */ | |
10692 | + reconnection() { | |
10693 | + if (this.isReconnectionLoading) return | |
10694 | + | |
10695 | + this.isReconnectionLoading = true | |
10696 | + clearTimeout(this.timeId) | |
10697 | + this.timeId = setTimeout(() => { | |
10698 | + this.createWs() | |
10699 | + }, 10000) | |
10700 | + } | |
10701 | + | |
10702 | + /** | |
10703 | + * @description 发送消息 | |
10704 | + */ | |
10705 | + send(message) { | |
10706 | + if (this.ws.readyState !== 1) { | |
10707 | + this.errorStack.push(message) | |
10708 | + return | |
10709 | + } | |
10710 | + | |
10711 | + this.ws.send(message) | |
10712 | + } | |
10713 | + | |
10714 | + /** | |
10715 | + * @description 手动关闭 | |
10716 | + */ | |
10717 | + close() { | |
10718 | + this.isCustomClose = true | |
10719 | + this.ws.close() | |
10720 | + } | |
10721 | + | |
10722 | + /** | |
10723 | + * @description 手动开启 | |
10724 | + */ | |
10725 | + start() { | |
10726 | + this.isCustomClose = false | |
10727 | + this.reconnection() | |
10728 | + } | |
10729 | + | |
10730 | + /** | |
10731 | + * @description 销毁 | |
10732 | + */ | |
10733 | + destroy() { | |
10734 | + this.close() | |
10735 | + this.ws = null | |
10736 | + this.errorStack = null | |
10737 | + this.eventCenter = null | |
10738 | + } | |
10739 | +} | |
10740 | + | |
10741 | + | |
10742 | +class EventCenter { | |
10743 | + | |
10744 | + /** | |
10745 | + * @description 调度中心 | |
10746 | + * @type {Map<string, Function[]} | |
10747 | + */ | |
10748 | + eventStack | |
10749 | + | |
10750 | + /** | |
10751 | + * @description | |
10752 | + */ | |
10753 | + constructor() { | |
10754 | + this.eventStack = new Map() | |
10755 | + } | |
10756 | + | |
10757 | + /** | |
10758 | + * @description 监听事件 | |
10759 | + */ | |
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 | + } | |
10767 | + | |
10768 | + /** | |
10769 | + * @description 触发事件 | |
10770 | + */ | |
10771 | + emit(eventName, ...args) { | |
10772 | + if (this.eventStack.has(eventName)) | |
10773 | + this.eventStack.get(eventName).forEach(fn => fn(...args)) | |
10774 | + | |
10775 | + } | |
10776 | + | |
10777 | + /** | |
10778 | + * @description 移除事件 | |
10779 | + */ | |
10780 | + off(eventName) { | |
10781 | + if (this.eventStack.has(eventName)) | |
10782 | + this.eventStack.delete(eventName) | |
10783 | + } | |
10784 | + | |
10785 | + /** | |
10786 | + * @description 清除事件 | |
10787 | + */ | |
10788 | + clean(eventName) { | |
10789 | + this.eventStack.clear() | |
10790 | + } | |
10791 | + | |
10792 | + | |
10793 | +} | |
10794 | + | |
10795 | + | |
10796 | +// TODO preview action | |
10797 | +function previewAction() { | |
10798 | + | |
10799 | + setTimeout(() => { | |
10800 | + console.dir(GLOBAL_EDITOR_UI) | |
10801 | + }, 5000); | |
10802 | + | |
10803 | + function getContentInfo() { | |
10804 | + | |
10805 | + } | |
10806 | + | |
10807 | + const sendMsgTemplate = { | |
10808 | + tsSubCmds: [ | |
10809 | + { | |
10810 | + entityType: "DEVICE", | |
10811 | + entityId: "a5ef5840-d68a-11ec-9c71-a9680487d1e0", | |
10812 | + scope: "LATEST_TELEMETRY", | |
10813 | + cmdId: 1 | |
10814 | + } | |
10815 | + ] | |
10816 | + } | |
10817 | + | |
10818 | + const GLOBAL_TOKEN = JSON.parse(localStorage.getItem("UNDEFINED__DEVELOPMENT__2.7.1__COMMON__LOCAL__KEY__")).value.JWT_TOKEN.value | |
10819 | + | |
10820 | + const wsUrl = `ws://192.168.10.115:8080/api/ws/plugins/telemetry?token=${GLOBAL_TOKEN}` | |
10821 | + | |
10822 | + const websocket = new Ws(wsUrl) | |
10823 | + | |
10824 | +} | |
10825 | + | |
10826 | +previewAction() | ... | ... |