Commit 8a7370fa93b01dfc2d00b144920e00d76fb61dca

Authored by xp.Huang
2 parents b8fa6482 d03e6d61

Merge branch 'feat/tcp-product-thingsmodel-add-zoom-factory' into 'main_dev'

fix: 修复输入参数为0时,无法生成modbus指令

See merge request yunteng/thingskit-scada!116
@@ -16274,34 +16274,35 @@ class HandleDataInteraction { @@ -16274,34 +16274,35 @@ class HandleDataInteraction {
16274 } 16274 }
16275 16275
16276 const getNumberFloatPart = (number) => { 16276 const getNumberFloatPart = (number) => {
  16277 + const isLessZero = number < 0
16277 number = number.toString() 16278 number = number.toString()
16278 const floatIndex = number.indexOf('.') 16279 const floatIndex = number.indexOf('.')
16279 const floatPart = ~floatIndex ? `0.${number.substring(floatIndex + 1)}` : '0'; 16280 const floatPart = ~floatIndex ? `0.${number.substring(floatIndex + 1)}` : '0';
16280 - return Number(floatPart) 16281 + return isLessZero ? -Number(floatPart) : Number(floatPart)
16281 } 16282 }
16282 16283
16283 if (commandType == enumCommandType.MODBUS) { 16284 if (commandType == enumCommandType.MODBUS) {
16284 - value = Number(data[enumActionEl.CUSTOM_TCP_COMMAND]) 16285 + value = data[enumActionEl.CUSTOM_TCP_COMMAND]
16285 16286
16286 let { method, deviceCode, zoomFactor } = additional || {} 16287 let { method, deviceCode, zoomFactor } = additional || {}
16287 zoomFactor = zoomFactor ? zoomFactor : 1 16288 zoomFactor = zoomFactor ? zoomFactor : 1
  16289 +
16288 const validate = new Validate([ 16290 const validate = new Validate([
16289 { value: deviceCode, required: true, message: '未找到设备地址码' }, 16291 { value: deviceCode, required: true, message: '未找到设备地址码' },
16290 { value: method, required: true, message: '未找到Modbus命令操作类型' }, 16292 { value: method, required: true, message: '未找到Modbus命令操作类型' },
16291 - { value, required: true, message: '下发值不是一个数字', validator(value) { return !isNaN(value) } },  
16292 - { value, required: true, message: '下发值是必填项' }, 16293 + { value, message: '下发值不是一个数字', validator(value) { return value.toString().trim() && !isNaN(value) } },
16293 ...(method == '05' ? [{ value, message: '下发类型必须为0或1', validator(value) { return value == 0 || value == 1 } }] : []), 16294 ...(method == '05' ? [{ value, message: '下发类型必须为0或1', validator(value) { return value == 0 || value == 1 } }] : []),
16294 - ...(method == '06' ? [{ value, message: `下发类型必须为整型,缩放因子为${zoomFactor}`, validator(value) { return !isNaN(value) && getNumberFloatPart(value) * zoomFactor % 1 === 0 } }, { value: Number(value) * zoomFactor, message: `最大值不能超过65535,缩放因子为${zoomFactor}`, validator(value) { return Number(value) <= parseInt('ffff', 16) } }] : []), 16295 + ...(method == '06' ? [{ value, message: `下发类型必须为整型,缩放因子为${zoomFactor}`, validator(value) { return !isNaN(value) && getNumberFloatPart(Number(value)) * zoomFactor % 1 === 0 } }, { value: Number(value) * zoomFactor, message: `最大值不能超过65535,缩放因子为${zoomFactor}`, validator(value) { return Number(value) <= parseInt('ffff', 16) } }] : []),
16295 ...(method == '16' ? [{ value, message: '下发类型精确到两位小数', validator(value) { return /^-?\d+(\.\d{0,2})?$/.test(Math.floor(Number(value)) * zoomFactor + getNumberFloatPart(Number(value)) * zoomFactor) } }] : []) 16296 ...(method == '16' ? [{ value, message: '下发类型精确到两位小数', validator(value) { return /^-?\d+(\.\d{0,2})?$/.test(Math.floor(Number(value)) * zoomFactor + getNumberFloatPart(Number(value)) * zoomFactor) } }] : [])
16296 ]) 16297 ])
16297 - 16298 +
16298 if (method == '06' || method == '16') { 16299 if (method == '06' || method == '16') {
16299 - value = Math.floor(value) * zoomFactor + getNumberFloatPart(value) * zoomFactor 16300 + value = Math.trunc(value) * zoomFactor + getNumberFloatPart(value) * zoomFactor
16300 } 16301 }
16301 16302
16302 if (method == '16') { 16303 if (method == '16') {
16303 const hexValue = UseLayUi.numberToHex(value).split(' ').join('') 16304 const hexValue = UseLayUi.numberToHex(value).split(' ').join('')
16304 - value = [parseInt(hexValue.slice(0, 4), 16), parseInt(hexValue.slice(4, 8), 16)] 16305 + value = value ? [parseInt(hexValue.slice(0, 4), 16), parseInt(hexValue.slice(4, 8), 16)] : [0, 0]
16305 } 16306 }
16306 16307
16307 if (validate.begin()) flag = true 16308 if (validate.begin()) flag = true
@@ -17316,7 +17317,8 @@ class Validate { @@ -17316,7 +17317,8 @@ class Validate {
17316 begin() { 17317 begin() {
17317 for (const rule of this.list) { 17318 for (const rule of this.list) {
17318 const { required, value, message, validator } = rule 17319 const { required, value, message, validator } = rule
17319 - if (required && !value) { 17320 +
  17321 + if (required && (value === null || value === undefined || value === '')) {
17320 UseLayUi.topErrorMsg(message) 17322 UseLayUi.topErrorMsg(message)
17321 return false 17323 return false
17322 } 17324 }