Commit 852b6102965f30277b8a67ac37ab2c461de20872

Authored by xp.Huang
2 parents de316bb7 3500e013

Merge branch 'fix/DEFECT-1488' into 'main_dev'

fix: 修复根据选择设备的设备类型下发json或modbus指令

See merge request yunteng/thingskit-scada!120
... ... @@ -7078,7 +7078,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7078 7078
7079 7079 /**
7080 7080 * @description 所有设备选项
7081   - * @type {{id: string, name: string, deviceType: string}[]}
  7081 + * @type {{id: string, name: string, deviceType: string, tbDeviceId: string, codeType: string}[]}
7082 7082 */
7083 7083 let allDeviceOptions = []
7084 7084
... ... @@ -7128,6 +7128,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7128 7128 * @description 组织id
7129 7129 */
7130 7130 ORG_ID: 'orgId',
  7131 +
  7132 + /**
  7133 + * @description 命令下发类型
  7134 + */
  7135 + CODE_TYPE: 'codeType'
7131 7136 }
7132 7137
7133 7138 const sendInstructionWay = {
... ... @@ -7135,6 +7140,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7135 7140 TWO_WAY: 'twoway',
7136 7141 }
7137 7142
  7143 + const codeTypeEnum = {
  7144 + JSON: 'json',
  7145 + STRING: 'string'
  7146 + }
  7147 +
7138 7148 /**
7139 7149 * @description 创建回显数据 查询出所有网关设备和直连设备
7140 7150 */
... ... @@ -7167,11 +7177,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7167 7177 fontSize: 14, // 编辑器内字体大小
7168 7178 tabSize: 2, // 制表符设置为 4 个空格大小
7169 7179 });
7170   - editor.session.setMode("ace/mode/json");
  7180 + editor.session.setMode(datum?.codeType === codeTypeEnum.STRING ? 'ace/mode/text' : "ace/mode/json");
7171 7181 editor.getSession().on('change', (event, editor) => {
7172 7182 $(`#${el}`).parent().find(`textarea[name="${enumConst.VALUE}"]`).val(editor.getValue())
7173 7183 })
7174   - editor.setValue(datum[enumConst.VALUE] ? datum[enumConst.VALUE] : "{}")
  7184 + editor.setValue(datum[enumConst.VALUE] ? datum[enumConst.VALUE] : datum?.codeType === codeTypeEnum.STRING ? "" : "{\n\n}")
7175 7185 }
7176 7186
7177 7187 /**
... ... @@ -7210,6 +7220,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7210 7220 <tr class="layui-form" lay-filter="${getRowFilter(addRowNumber)}">
7211 7221 <td>
7212 7222 <select name="${enumConst.DEVICE}" lay-filter="${enumConst.DEVICE}" lay-verType="tips" lay-verify="required"></select>
  7223 + <input name="${enumConst.CODE_TYPE}" style="display: none;" />
7213 7224 </td>
7214 7225 <td>
7215 7226 <form action="" style="display: flex">
... ... @@ -7289,6 +7300,25 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7289 7300 })
7290 7301 }
7291 7302
  7303 + function createSelectChangeEvent() {
  7304 + form.on(`select(${enumConst.DEVICE})`, event => {
  7305 + const { value, elem } = event
  7306 + const codeTypeInput = $(elem).parent().find(`input[name="${enumConst.CODE_TYPE}"]`).val(codeTypeEnum.JSON)
  7307 + if (value) {
  7308 + const selected = allDeviceOptions.find(item => item.tbDeviceId == value)
  7309 + const codeType = selected?.codeType && selected.codeType == 'MODBUS_RTU' ? codeTypeEnum.STRING : codeTypeEnum.JSON
  7310 + codeTypeInput.val(codeType)
  7311 + if (codeType === codeTypeEnum.STRING) {
  7312 + const editorEl = $(elem).parent().parent().find(`.${enumActionEl.JSON}>div>div`)
  7313 + const id = editorEl.attr('id')
  7314 + const editor = ace.edit(id)
  7315 + editor?.session?.setMode?.('ace/mode/text')
  7316 + editor?.setValue('')
  7317 + }
  7318 + }
  7319 + })
  7320 + }
  7321 +
7292 7322 /**
7293 7323 * @description 生成事件监听
7294 7324 */
... ... @@ -7296,6 +7326,7 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7296 7326 createDeleteRowListenEvent()
7297 7327 createAddRowListenEvent()
7298 7328 createSelectOptionMountEvent()
  7329 + createSelectChangeEvent()
7299 7330 }
7300 7331
7301 7332 /**
... ... @@ -7339,6 +7370,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7339 7370 return false
7340 7371 }
7341 7372
  7373 + function isString(string) {
  7374 + if (typeof string === 'string' && string.trim() && /^\w+$/g.test(string)) return true
  7375 + return false
  7376 + }
  7377 +
7342 7378 /**
7343 7379 * @description 表单验证
7344 7380 * @param tableData
... ... @@ -7346,12 +7382,11 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7346 7382 */
7347 7383 function validate(tableData) {
7348 7384 let validateFlag = true
7349   -
7350 7385 const formModel = form.val(enumActionEl.FORM_FILTER)
7351 7386 if (!formModel[enumConst.ORG_ID]) return false
7352 7387 for (let i = 0; i < tableData.length; i++) {
7353   - const { value } = tableData[i]
7354   - if (!isJson(value)) {
  7388 + const { value, codeType } = tableData[i]
  7389 + if (codeType === codeTypeEnum.JSON ? !isJson(value) : !isString(value)) {
7355 7390 validateFlag = false
7356 7391 layer.tips('下发值不正确', $(`#${enumActionEl.DEVICE_DATA_BODY_EL} tr`).eq(i).find(`td.${enumActionEl.JSON}`), { tips: 1 })
7357 7392 break
... ... @@ -7372,7 +7407,6 @@ DataFormatPanel.prototype.addDataFont = function (container) {
7372 7407 const formModal = {
7373 7408 ...recordData,
7374 7409 configurationId,
7375   - // orgId,
7376 7410 contentId: currentPageId.id,
7377 7411 id: graphId,
7378 7412 content: {
... ... @@ -15968,14 +16002,23 @@ class HandleDataInteraction {
15968 16002 UseLayUi.errorMsg('设备不在线!')
15969 16003 }
15970 16004 }
  16005 +
  16006 + function parse(value, codeType = 'json') {
  16007 + try {
  16008 + return codeType === 'json' ? JSON.parse(value) : value
  16009 + } catch (error) {
  16010 + return value
  16011 + }
  16012 + }
  16013 +
15971 16014 for (const item of list) {
15972   - const { deviceId, slaveDeviceId, value, way } = item
  16015 + const { deviceId, codeType, value, way } = item
15973 16016 if (!value || !deviceId) continue
15974 16017 const data = {
15975 16018 method: "methodThingskit",
15976 16019 additionalInfo: { cmdType: 'API' },
15977 16020 persistent: true,
15978   - params: JSON.parse(value),
  16021 + params: parse(value, codeType),
15979 16022 }
15980 16023 if (deviceId) {
15981 16024 queue.push(() => {
... ...