Commit 7dc23102ac1f00ed3bdf68778e6d88decfa6c057

Authored by ww
1 parent 2aead0f8

perf: tcp子设备下发参数时使用modbus生成命令

@@ -273,7 +273,7 @@ @@ -273,7 +273,7 @@
273 // Forces includes for dev environment in node.js 273 // Forces includes for dev environment in node.js
274 mxForceIncludes = true; 274 mxForceIncludes = true;
275 } 275 }
276 - if (location.hostname == 'localhost' || location.hostname == '127.0.0.1' || location.hostname == '192.168.10.111') { 276 + if (location.hostname == 'localhost' || location.hostname == '127.0.0.1' || location.hostname == '192.168.10.114') {
277 drawDevUrl = `http://${location.hostname}:3000/`; 277 drawDevUrl = `http://${location.hostname}:3000/`;
278 geBasePath = `http://${location.hostname}:3000/js/grapheditor`; 278 geBasePath = `http://${location.hostname}:3000/js/grapheditor`;
279 mxBasePath = `http://${location.hostname}:3000/mxgraph`; 279 mxBasePath = `http://${location.hostname}:3000/mxgraph`;
@@ -255,4 +255,9 @@ class ConfigurationNodeApi { @@ -255,4 +255,9 @@ class ConfigurationNodeApi {
255 static getAlarmList(params) { 255 static getAlarmList(params) {
256 return defHttp.post('/yt/alarm/configuration/page', params) 256 return defHttp.post('/yt/alarm/configuration/page', params)
257 } 257 }
  258 +
  259 + static getModbusCommand(params) {
  260 + return defHttp.post('/yt/js/modbus', params)
  261 + }
  262 +
258 } 263 }
@@ -5075,7 +5075,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5075,7 +5075,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5075 5075
5076 /** 5076 /**
5077 * @description 用于在其他位置获取数据源绑定的数据,在生成数据源面板中进行了改写 5077 * @description 用于在其他位置获取数据源绑定的数据,在生成数据源面板中进行了改写
5078 - * @return {{orgId: string, attr: string, deviceId: string, deviceType: string, deviceProfileId: string}} 5078 + * @return {{orgId: string, attr: string, deviceId: string, deviceType: string, deviceProfileId: string, deviceCode: string, registerAddress: string, method: string, dataType: string}}
5079 */ 5079 */
5080 function getDataSourceBindValue() { 5080 function getDataSourceBindValue() {
5081 5081
@@ -5248,7 +5248,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -5248,7 +5248,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
5248 echoRefreshFn = function () { 5248 echoRefreshFn = function () {
5249 refreshFn.apply(this) 5249 refreshFn.apply(this)
5250 const { dataSources: [dataSource] = [] } = currentNodeData || {} 5250 const { dataSources: [dataSource] = [] } = currentNodeData || {}
5251 - echoDataSource(dataSource) 5251 + echoDataSource({ ...dataSource, ...(dataSource?.additional || {}) })
5252 form.render(null, CONTAINER_FILTER) 5252 form.render(null, CONTAINER_FILTER)
5253 } 5253 }
5254 5254
@@ -6586,7 +6586,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -6586,7 +6586,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
6586 function getSwitchSubmitValue(field) { 6586 function getSwitchSubmitValue(field) {
6587 const dataSources = getDataSourceBindValue() 6587 const dataSources = getDataSourceBindValue()
6588 const enableStatus = getEnableStatus(field) 6588 const enableStatus = getEnableStatus(field)
6589 - return { configurationId, contentId: currentPageId.id, nodeId: graphId, dataSources, ...enableStatus } 6589 + return { configurationId, contentId: currentPageId.id, nodeId: graphId, dataSources: { ...dataSources, additional: { deviceCode: dataSources?.deviceCode, method: dataSources?.method, registerAddress: dataSources?.registerAddress, dataType: dataSources?.dataType } }, ...enableStatus }
6590 } 6590 }
6591 6591
6592 6592
@@ -7711,7 +7711,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7711,7 +7711,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7711 7711
7712 $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: 'none' }) 7712 $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: 'none' })
7713 $(`#${enumActionEl.SERVICE_EL}`).css({ display: 'none' }) 7713 $(`#${enumActionEl.SERVICE_EL}`).css({ display: 'none' })
7714 - $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: 'none' }) 7714 + // $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: 'none' })
7715 $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' }) 7715 $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: 'none' })
7716 } else if (value === enumActionType.PARAMS_SETTING) { 7716 } else if (value === enumActionType.PARAMS_SETTING) {
7717 $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' }) 7717 $(`#${enumActionEl.LINK_EL_ID}`).css({ display: 'none' })
@@ -7720,9 +7720,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7720,9 +7720,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7720 $(`#${enumActionEl.COMMAND_TYPE_EL}`).css({ display: 'block' }) 7720 $(`#${enumActionEl.COMMAND_TYPE_EL}`).css({ display: 'block' })
7721 7721
7722 $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: isCustom ? 'none' : 'block' }) 7722 $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: isCustom ? 'none' : 'block' })
7723 - $(`#${enumActionEl.WAY_SELECT}`).css({ display: isCustom ? 'block' : 'none' }) 7723 + $(`#${enumActionEl.WAY_SELECT}`).css({ display: !isTCP && isCustom ? 'block' : 'none' })
7724 $(`#${enumActionEl.SERVICE_EL}`).css({ display: isCustom ? 'none' : 'block' }) 7724 $(`#${enumActionEl.SERVICE_EL}`).css({ display: isCustom ? 'none' : 'block' })
7725 - $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: isTCP && isCustom ? 'block' : 'none' }) 7725 + // $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: isTCP && isCustom ? 'block' : 'none' })
7726 $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: !isTCP && isCustom ? 'flex' : 'none' }) 7726 $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: !isTCP && isCustom ? 'flex' : 'none' })
7727 } 7727 }
7728 } 7728 }
@@ -7737,6 +7737,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7737,6 +7737,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7737 const { COMPONENT_TYPE } = Sidebar.prototype.enumCellBasicAttribute 7737 const { COMPONENT_TYPE } = Sidebar.prototype.enumCellBasicAttribute
7738 const { SWITCH } = Sidebar.prototype.enumComponentType 7738 const { SWITCH } = Sidebar.prototype.enumComponentType
7739 const isSwitchComponent = vertices[0].getAttribute(COMPONENT_TYPE) === SWITCH 7739 const isSwitchComponent = vertices[0].getAttribute(COMPONENT_TYPE) === SWITCH
  7740 + const isTCPTransportType = formVal[enumConst.TRANSPORTTYPE] === 'TCP'
7740 7741
7741 if (isParamsSetting && isSwitchComponent && (!currentNodeData.act || !currentNodeData.act.find(item => item.type === enumDynamicEffectType.SWITCH))) { 7742 if (isParamsSetting && isSwitchComponent && (!currentNodeData.act || !currentNodeData.act.find(item => item.type === enumDynamicEffectType.SWITCH))) {
7742 UseLayUi.topErrorMsg('请先配置数据动效中的状态设置') 7743 UseLayUi.topErrorMsg('请先配置数据动效中的状态设置')
@@ -7744,17 +7745,24 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7744,17 +7745,24 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7744 } 7745 }
7745 7746
7746 if (isParamsSetting) { 7747 if (isParamsSetting) {
7747 - const isTCPTransportType = formVal[enumConst.TRANSPORTTYPE] === 'TCP'  
7748 const isCustom = formVal[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM 7748 const isCustom = formVal[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM
7749 let inputData = form.val(enumActionEl.INPUT_DATA_FORM_FILTER) 7749 let inputData = form.val(enumActionEl.INPUT_DATA_FORM_FILTER)
7750 7750
7751 const validateParamsSetting = () => { 7751 const validateParamsSetting = () => {
7752 if (isCustom) { 7752 if (isCustom) {
7753 if (isTCPTransportType) { 7753 if (isTCPTransportType) {
7754 - if (!formVal[enumConst.TCP_COMMAND]) {  
7755 - UseLayUi.topErrorMsg('请输入自定义下发指令')  
7756 - return false 7754 + const dataSource = currentNodeData?.dataSources?.[0]
  7755 + if (dataSource) {
  7756 + const additional = dataSource?.additional || {}
  7757 + if (dataSource?.deviceType !== 'SENDOR' && !additional?.deviceCode) {
  7758 + UseLayUi.topErrorMsg('设备地址码不存在')
  7759 + return false
  7760 + }
7757 } 7761 }
  7762 + // if (!formVal[enumConst.TCP_COMMAND]) {
  7763 + // UseLayUi.topErrorMsg('请输入自定义下发指令')
  7764 + // return false
  7765 + // }
7758 } else { 7766 } else {
7759 if (!isJson(formVal[enumConst.JSON_COMMAND])) { 7767 if (!isJson(formVal[enumConst.JSON_COMMAND])) {
7760 UseLayUi.topErrorMsg('命令配置存在错误') 7768 UseLayUi.topErrorMsg('命令配置存在错误')
@@ -7796,7 +7804,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7796,7 +7804,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7796 [enumConst.CALL_TYPE]: formVal[enumConst.CALL_TYPE], 7804 [enumConst.CALL_TYPE]: formVal[enumConst.CALL_TYPE],
7797 [enumConst.IDENTIFIER]: formVal[enumConst.IDENTIFIER], 7805 [enumConst.IDENTIFIER]: formVal[enumConst.IDENTIFIER],
7798 [enumConst.JSON_COMMAND]: formVal[enumConst.JSON_COMMAND], 7806 [enumConst.JSON_COMMAND]: formVal[enumConst.JSON_COMMAND],
7799 - [enumConst.WAY]: formVal[enumConst.WAY], 7807 + [enumConst.WAY]: isTCPTransportType ? 'oneway' : formVal[enumConst.WAY],
7800 [enumConst.COMMAND_TYPE]: formVal[enumConst.COMMAND_TYPE], 7808 [enumConst.COMMAND_TYPE]: formVal[enumConst.COMMAND_TYPE],
7801 [enumConst.TCP_COMMAND]: formVal[enumConst.TCP_COMMAND], 7809 [enumConst.TCP_COMMAND]: formVal[enumConst.TCP_COMMAND],
7802 [enumConst.TRANSPORTTYPE]: formVal[enumConst.TRANSPORTTYPE], 7810 [enumConst.TRANSPORTTYPE]: formVal[enumConst.TRANSPORTTYPE],
@@ -7866,8 +7874,12 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7866,8 +7874,12 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7866 return 7874 return
7867 } 7875 }
7868 originType = value 7876 originType = value
7869 - const isCustom = form.val(enumActionEl.ACTION_SELECT_FILTER)[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM  
7870 - controlFormDisplay(value, transportType, isCustom) 7877 + form.val(enumActionEl.FORM_FILTER, {
  7878 + [enumConst.COMMAND_TYPE]: COMMAND_TYPE_ENUM.CUSTOM
  7879 + })
  7880 + const isCustom = form.val(enumActionEl.FORM_FILTER)[enumConst.COMMAND_TYPE] === COMMAND_TYPE_ENUM.CUSTOM
  7881 +
  7882 + controlFormDisplay(value, transportType === 'TCP', isCustom)
7871 }) 7883 })
7872 7884
7873 /** 7885 /**
@@ -7878,9 +7890,9 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -7878,9 +7890,9 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7878 const flag = value === COMMAND_TYPE_ENUM.CUSTOM 7890 const flag = value === COMMAND_TYPE_ENUM.CUSTOM
7879 const isTCPTransportType = transportType === 'TCP' 7891 const isTCPTransportType = transportType === 'TCP'
7880 $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: flag ? 'none' : 'block' }) 7892 $(`#${enumActionEl.INPUT_DATA_FORM}`).css({ display: flag ? 'none' : 'block' })
7881 - $(`#${enumActionEl.WAY_SELECT}`).css({ display: flag ? 'block' : 'none' }) 7893 + $(`#${enumActionEl.WAY_SELECT}`).css({ display: !isTCPTransportType && flag ? 'block' : 'none' })
7882 $(`#${enumActionEl.SERVICE_EL}`).css({ display: flag ? 'none' : 'block' }) 7894 $(`#${enumActionEl.SERVICE_EL}`).css({ display: flag ? 'none' : 'block' })
7883 - $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: isTCPTransportType && flag ? 'block' : 'none' }) 7895 + // $(`#${enumActionEl.TCP_COMMAND_INPUT}`).css({ display: !isTCPTransportType && flag ? 'block' : 'none' })
7884 $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: !isTCPTransportType && flag ? 'flex' : 'none' }) 7896 $(`#${enumActionEl.EDITOR_CONTAINER}`).css({ display: !isTCPTransportType && flag ? 'flex' : 'none' })
7885 form.val(enumActionEl.FORM_FILTER, { [enumConst.TCP_COMMAND]: '', [enumConst.SERVICE]: '', [enumConst.COMMAND]: '', [enumConst.IDENTIFIER]: '' }) 7897 form.val(enumActionEl.FORM_FILTER, { [enumConst.TCP_COMMAND]: '', [enumConst.SERVICE]: '', [enumConst.COMMAND]: '', [enumConst.IDENTIFIER]: '' })
7886 $(`#${enumActionEl.INPUT_DATA_FORM}`).html('') 7898 $(`#${enumActionEl.INPUT_DATA_FORM}`).html('')
@@ -8057,12 +8069,12 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8057,12 +8069,12 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8057 <div id="${enumActionEl.EDITOR}" style="width: 100%; height: 100%;border: 2px solid #eee;"></div> 8069 <div id="${enumActionEl.EDITOR}" style="width: 100%; height: 100%;border: 2px solid #eee;"></div>
8058 <textarea name="${enumConst.JSON_COMMAND}" class="layui-textarea" style="display: none;" /> 8070 <textarea name="${enumConst.JSON_COMMAND}" class="layui-textarea" style="display: none;" />
8059 </div> 8071 </div>
8060 - <div id="${enumActionEl.TCP_COMMAND_INPUT}" style="display: none;"> 8072 + <!-- <div id="${enumActionEl.TCP_COMMAND_INPUT}" style="display: none;">
8061 <label class="layui-form-label" style="width: 120px;">命令 ${createHelpMessage('用户预览模式下,点击参数设置后。输入的变量值将作为"attrPlaceholder"的值,并以JSON格式下发给服务器。', 'command')}</label> 8073 <label class="layui-form-label" style="width: 120px;">命令 ${createHelpMessage('用户预览模式下,点击参数设置后。输入的变量值将作为"attrPlaceholder"的值,并以JSON格式下发给服务器。', 'command')}</label>
8062 <div class="layui-input-block" style="margin-left: 150px;"> 8074 <div class="layui-input-block" style="margin-left: 150px;">
8063 <input type="text" lay-verType="tips" name="${enumConst.TCP_COMMAND}" placeholder="请输入自定义下发命令" class="layui-input"> 8075 <input type="text" lay-verType="tips" name="${enumConst.TCP_COMMAND}" placeholder="请输入自定义下发命令" class="layui-input">
8064 </div> 8076 </div>
8065 - </div> 8077 + </div> -->
8066 <div style="display: none;"> 8078 <div style="display: none;">
8067 <input type="text" lay-verType="tips" name="${enumConst.TRANSPORTTYPE}" placeholder="请输入自定义下发命令" class="layui-input"> 8079 <input type="text" lay-verType="tips" name="${enumConst.TRANSPORTTYPE}" placeholder="请输入自定义下发命令" class="layui-input">
8068 </div> 8080 </div>
@@ -8685,7 +8697,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8685,7 +8697,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8685 GATEWAY: 'GATEWAY', 8697 GATEWAY: 'GATEWAY',
8686 ORG_NAME: 'orgName', 8698 ORG_NAME: 'orgName',
8687 DEVICE_NAME: 'deviceName', 8699 DEVICE_NAME: 'deviceName',
8688 - ATTR_NAME: 'attrName' 8700 + ATTR_NAME: 'attrName',
  8701 + METHOD: 'method',
  8702 + DEVICE_COED: 'deviceCode',
  8703 + REGISTER_ADDRESS: 'registerAddress',
  8704 + DATA_TYPE: 'dataType'
8689 } 8705 }
8690 8706
8691 /** 8707 /**
@@ -8700,6 +8716,8 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8700,6 +8716,8 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8700 */ 8716 */
8701 let currentDataSource = {} 8717 let currentDataSource = {}
8702 8718
  8719 + let thingsModel = []
  8720 +
8703 const component = document.createElement('div') 8721 const component = document.createElement('div')
8704 8722
8705 $(component) 8723 $(component)
@@ -8738,6 +8756,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8738,6 +8756,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8738 [enumDataSourceConst.DEVICE_ID]: null, 8756 [enumDataSourceConst.DEVICE_ID]: null,
8739 [enumDataSourceConst.ATTR]: null, 8757 [enumDataSourceConst.ATTR]: null,
8740 [enumDataSourceConst.ATTR_NAME]: null, 8758 [enumDataSourceConst.ATTR_NAME]: null,
  8759 + [enumDataSourceConst.DEVICE_COED]: null,
  8760 + [enumDataSourceConst.METHOD]: null,
  8761 + [enumDataSourceConst.REGISTER_ADDRESS]: null,
  8762 + [enumDataSourceConst.DATA_TYPE]: null,
8741 }) 8763 })
8742 8764
8743 currentDataSource[enumDataSourceConst.DEVICE_TYPE] = value 8765 currentDataSource[enumDataSourceConst.DEVICE_TYPE] = value
@@ -8762,6 +8784,11 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8762,6 +8784,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8762 [enumDataSourceConst.DEVICE_ID]: null, 8784 [enumDataSourceConst.DEVICE_ID]: null,
8763 [enumDataSourceConst.ATTR]: null, 8785 [enumDataSourceConst.ATTR]: null,
8764 [enumDataSourceConst.ATTR_NAME]: null, 8786 [enumDataSourceConst.ATTR_NAME]: null,
  8787 + [enumDataSourceConst.DEVICE_COED]: null,
  8788 + [enumDataSourceConst.METHOD]: null,
  8789 + [enumDataSourceConst.REGISTER_ADDRESS]: null,
  8790 + [enumDataSourceConst.DATA_TYPE]: null,
  8791 +
8765 }) 8792 })
8766 currentDataSource[enumDataSourceConst.DEVICE_PROFILE_ID] = value 8793 currentDataSource[enumDataSourceConst.DEVICE_PROFILE_ID] = value
8767 getMeetConditionsDevice(currentDataSource) 8794 getMeetConditionsDevice(currentDataSource)
@@ -8782,6 +8809,18 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8782,6 +8809,18 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8782 <div class="layui-form-item" style="margin-bottom: 0"> 8809 <div class="layui-form-item" style="margin-bottom: 0">
8783 <input style="display: none" type="text" name="${enumDataSourceConst.ATTR_NAME}" class="layui-input"> 8810 <input style="display: none" type="text" name="${enumDataSourceConst.ATTR_NAME}" class="layui-input">
8784 </div> 8811 </div>
  8812 + <div class="layui-form-item" style="margin-bottom: 0; display: none;">
  8813 + <input style="display: none" type="text" name="${enumDataSourceConst.DEVICE_COED}" class="layui-input">
  8814 + </div>
  8815 + <div class="layui-form-item" style="margin-bottom: 0; display: none;">
  8816 + <input style="display: none" type="text" name="${enumDataSourceConst.METHOD}" class="layui-input">
  8817 + </div>
  8818 + <div class="layui-form-item" style="margin-bottom: 0; display: none;">
  8819 + <input style="display: none" type="text" name="${enumDataSourceConst.REGISTER_ADDRESS}" class="layui-input">
  8820 + </div>
  8821 + <div class="layui-form-item" style="margin-bottom: 0; display: none;">
  8822 + <input style="display: none" type="text" name="${enumDataSourceConst.DATA_TYPE}" class="layui-input">
  8823 + </div>
8785 ` 8824 `
8786 $(component).append(template) 8825 $(component).append(template)
8787 } 8826 }
@@ -8804,6 +8843,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8804,6 +8843,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8804 async function getMeetConditionsDevice(params) { 8843 async function getMeetConditionsDevice(params) {
8805 if (!params.organizationId) return 8844 if (!params.organizationId) return
8806 const items = await ConfigurationNodeApi.getMeetConditionsDevice(params); 8845 const items = await ConfigurationNodeApi.getMeetConditionsDevice(params);
  8846 + deviceList = items
8807 $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items, valueField: 'tbDeviceId', labelField: 'name', alias: 'alias' })) 8847 $(`#${componentId} `).find(`select[name="${enumDataSourceConst.DEVICE_ID}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: items, valueField: 'tbDeviceId', labelField: 'name', alias: 'alias' }))
8808 form.render('select', componentFilter) 8848 form.render('select', componentFilter)
8809 } 8849 }
@@ -8815,6 +8855,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8815,6 +8855,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8815 async function getAttrByDeviceId(deviceProfileId) { 8855 async function getAttrByDeviceId(deviceProfileId) {
8816 if (deviceProfileId) { 8856 if (deviceProfileId) {
8817 const [err, res] = await to(ConfigurationNodeApi.getDeviceAttribute(deviceProfileId)) 8857 const [err, res] = await to(ConfigurationNodeApi.getDeviceAttribute(deviceProfileId))
  8858 + thingsModel = res
8818 $(`#${componentId} `).find(`select[name="${enumDataSourceConst.ATTR}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: Array.isArray(res) ? res : [], labelField: 'name', valueField: 'identifier' })) 8859 $(`#${componentId} `).find(`select[name="${enumDataSourceConst.ATTR}"]`).html(UseLayUi.generateOptionTemplate({ dataSource: Array.isArray(res) ? res : [], labelField: 'name', valueField: 'identifier' }))
8819 form.render('select', componentFilter) 8860 form.render('select', componentFilter)
8820 } 8861 }
@@ -8847,6 +8888,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8847,6 +8888,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8847 click(node) { 8888 click(node) {
8848 form.val(componentFilter, { 8889 form.val(componentFilter, {
8849 [enumDataSourceConst.ORG_NAME]: node?.data?.title, 8890 [enumDataSourceConst.ORG_NAME]: node?.data?.title,
  8891 + [enumDataSourceConst.DEVICE_COED]: null,
8850 [enumDataSourceConst.DEVICE_ID]: null, 8892 [enumDataSourceConst.DEVICE_ID]: null,
8851 [enumDataSourceConst.DEVICE_NAME]: null, 8893 [enumDataSourceConst.DEVICE_NAME]: null,
8852 }) 8894 })
@@ -8869,10 +8911,12 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8869,10 +8911,12 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8869 ...validateRule, 8911 ...validateRule,
8870 onClick(data) { 8912 onClick(data) {
8871 const { value } = data 8913 const { value } = data
8872 - const selected = deviceList.find(item => item.id === value) 8914 + const selected = deviceList.find(item => item.tbDeviceId === value)
  8915 +
8873 if (!selected) return 8916 if (!selected) return
8874 form.val(componentFilter, { 8917 form.val(componentFilter, {
8875 [enumDataSourceConst.DEVICE_NAME]: selected?.name, 8918 [enumDataSourceConst.DEVICE_NAME]: selected?.name,
  8919 + [enumDataSourceConst.DEVICE_COED]: selected?.code,
8876 [enumDataSourceConst.ATTR]: null, 8920 [enumDataSourceConst.ATTR]: null,
8877 [enumDataSourceConst.ATTR_NAME]: null, 8921 [enumDataSourceConst.ATTR_NAME]: null,
8878 }) 8922 })
@@ -8895,9 +8939,31 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8895,9 +8939,31 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8895 ...validateRule, 8939 ...validateRule,
8896 onClick(data) { 8940 onClick(data) {
8897 const { value } = data 8941 const { value } = data
  8942 +
8898 form.val(componentFilter, { 8943 form.val(componentFilter, {
8899 [enumDataSourceConst.ATTR_NAME]: value, 8944 [enumDataSourceConst.ATTR_NAME]: value,
8900 }) 8945 })
  8946 +
  8947 + const selected = thingsModel.find(item => item.identifier === value)
  8948 +
  8949 + if (!selected) return
  8950 + const type = selected?.extensionDesc?.dataType
  8951 +
  8952 + let method
  8953 +
  8954 + if (type === 'short' || type === 'unshort') {
  8955 + method = '06'
  8956 + } else if (type === 'bit') {
  8957 + method = '05'
  8958 + } else {
  8959 + method = '10'
  8960 + }
  8961 +
  8962 + form.val(componentFilter, {
  8963 + [enumDataSourceConst.METHOD]: method,
  8964 + [enumDataSourceConst.REGISTER_ADDRESS]: selected?.extensionDesc?.registerAddress,
  8965 + [enumDataSourceConst.DATA_TYPE]: selected?.extensionDesc?.dataType,
  8966 + })
8901 } 8967 }
8902 }) 8968 })
8903 $(component).append(attrsSelect) 8969 $(component).append(attrsSelect)
@@ -8908,7 +8974,7 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8908,7 +8974,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8908 * @param {{orgId: string, deviceId: string, slaveDeviceId?: string, attr: string}} dataSource 8974 * @param {{orgId: string, deviceId: string, slaveDeviceId?: string, attr: string}} dataSource
8909 */ 8975 */
8910 function echoDataSource(dataSource = {}) { 8976 function echoDataSource(dataSource = {}) {
8911 - const { orgId, deviceId, deviceProfileId, deviceType, attr } = dataSource 8977 + const { orgId, deviceId, deviceProfileId, deviceType, attr, method, deviceCode, registerAddress, dataType } = dataSource
8912 const queue = [] 8978 const queue = []
8913 currentDataSource = { organizationId: orgId, deviceProfileId, deviceType } 8979 currentDataSource = { organizationId: orgId, deviceProfileId, deviceType }
8914 queue.push(getProduct(deviceType)) 8980 queue.push(getProduct(deviceType))
@@ -8926,6 +8992,10 @@ DataFormatPanel.prototype.addDataFont = function (container) { @@ -8926,6 +8992,10 @@ DataFormatPanel.prototype.addDataFont = function (container) {
8926 deviceProfileId, 8992 deviceProfileId,
8927 deviceType, 8993 deviceType,
8928 attr, 8994 attr,
  8995 + method,
  8996 + deviceCode,
  8997 + registerAddress,
  8998 + dataType
8929 }) 8999 })
8930 9000
8931 }) 9001 })
@@ -14626,7 +14696,7 @@ class DispatchCenter { @@ -14626,7 +14696,7 @@ class DispatchCenter {
14626 ...(dataType === HandleDataSource.enumDataBindType.REAL ? {} : { endTs: Date.now() }) 14696 ...(dataType === HandleDataSource.enumDataBindType.REAL ? {} : { endTs: Date.now() })
14627 }) 14697 })
14628 setSubscribeMapping(cmdId, [item]) 14698 setSubscribeMapping(cmdId, [item])
14629 - messageList[dataType].push(message) 14699 + messageList[dataType]?.push(message)
14630 cmdId++ 14700 cmdId++
14631 }) 14701 })
14632 14702
@@ -15803,7 +15873,7 @@ class HandleDataInteraction { @@ -15803,7 +15873,7 @@ class HandleDataInteraction {
15803 <div class="layui-form-item"> 15873 <div class="layui-form-item">
15804 <label class="layui-form-label" style="width: 120px;">自定义下发值</label> 15874 <label class="layui-form-label" style="width: 120px;">自定义下发值</label>
15805 <div class="layui-input-block" style="margin-left: 150px;"> 15875 <div class="layui-input-block" style="margin-left: 150px;">
15806 - <input type="text" name="${enumActionEl.CUSTOM_TCP_COMMAND}" lay-verify="required" autocomplete="off" placeholder="请输入下发值" class="layui-input"> 15876 + <input type="number" name="${enumActionEl.CUSTOM_TCP_COMMAND}" lay-verify="required" autocomplete="off" placeholder="请输入下发值" class="layui-input">
15807 </div> 15877 </div>
15808 </div> 15878 </div>
15809 </div> 15879 </div>
@@ -15982,7 +16052,8 @@ class HandleDataInteraction { @@ -15982,7 +16052,8 @@ class HandleDataInteraction {
15982 16052
15983 const validate = (data) => { 16053 const validate = (data) => {
15984 const { commandType, transportType } = content 16054 const { commandType, transportType } = content
15985 - let { attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {} 16055 + let dataSource = contentData.dataSources.find(item => item.nodeId === nodeId) || {}
  16056 + const { attr, additional } = dataSource
15986 let flag = false 16057 let flag = false
15987 let value 16058 let value
15988 16059
@@ -15993,8 +16064,11 @@ class HandleDataInteraction { @@ -15993,8 +16064,11 @@ class HandleDataInteraction {
15993 if (isCustom) { 16064 if (isCustom) {
15994 if (isTCP) { 16065 if (isTCP) {
15995 value = data[enumActionEl.CUSTOM_TCP_COMMAND] 16066 value = data[enumActionEl.CUSTOM_TCP_COMMAND]
  16067 + const { dataType } = additional
15996 const validate = new Validate([ 16068 const validate = new Validate([
15997 { value, required: true, message: '下发值是必填项' }, 16069 { value, required: true, message: '下发值是必填项' },
  16070 + ...(dataType === 'bit' ? [{ value, message: '下发类型必须为0或1', validator(value) { return value == 0 || value == 1 } }] : []),
  16071 + ...(dataType === 'short' || dataType === 'unshort' ? [{ value, message: '下发类型必须为整型', validator(value) { return value % 1 === 0 } }, { value, message: '最大值不能超过65535', validator(value) { return Number(value) <= parseInt('ffff', 16) } }] : [])
15998 ]) 16072 ])
15999 if (validate.begin()) flag = true 16073 if (validate.begin()) flag = true
16000 } else { 16074 } else {
@@ -16039,16 +16113,34 @@ class HandleDataInteraction { @@ -16039,16 +16113,34 @@ class HandleDataInteraction {
16039 defaultHandler(result, callback) 16113 defaultHandler(result, callback)
16040 } 16114 }
16041 16115
  16116 + async function getTCPCommand(registerValue, dataSource) {
  16117 + const { additional } = dataSource || {}
  16118 + const { method, deviceCode, registerAddress } = additional || {}
  16119 +
  16120 + const params = {
  16121 + crc: 'CRC_16_LOWER',
  16122 + deviceCode,
  16123 + method,
  16124 + registerAddr: Number(registerAddress),
  16125 + registerNumber: 1,
  16126 + registerValues: [Number(registerValue)]
  16127 + }
  16128 +
  16129 + const command = await ConfigurationNodeApi.getModbusCommand(params)
  16130 +
  16131 + return command
  16132 + }
  16133 +
16042 async function defaultHandler(value, callback) { 16134 async function defaultHandler(value, callback) {
16043 - let { deviceId, attr } = contentData.dataSources.find(item => item.nodeId === nodeId) || {}  
16044 - console.log(content) 16135 + let dataSource = contentData.dataSources.find(item => item.nodeId === nodeId) || {}
  16136 + const { deviceId, attr, deviceProfileId } = dataSource
16045 /** 16137 /**
16046 * @type {command: string , commandType: string, service: string, wary: string, tcpCommand: string} 16138 * @type {command: string , commandType: string, service: string, wary: string, tcpCommand: string}
16047 */ 16139 */
16048 let { command, way, service, callType } = content 16140 let { command, way, service, callType } = content
16049 const identifier = content?.identifier 16141 const identifier = content?.identifier
16050 const params = content?.transportType === 'TCP' 16142 const params = content?.transportType === 'TCP'
16051 - ? value 16143 + ? await getTCPCommand(value, dataSource)
16052 : identifier 16144 : identifier
16053 ? { [identifier]: value } 16145 ? { [identifier]: value }
16054 : value 16146 : value