Commit 8a7370fa93b01dfc2d00b144920e00d76fb61dca
Merge branch 'feat/tcp-product-thingsmodel-add-zoom-factory' into 'main_dev'
fix: 修复输入参数为0时,无法生成modbus指令 See merge request yunteng/thingskit-scada!116
Showing
1 changed file
with
11 additions
and
9 deletions
@@ -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 | } |