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 | 16274 | } |
16275 | 16275 | |
16276 | 16276 | const getNumberFloatPart = (number) => { |
16277 | + const isLessZero = number < 0 | |
16277 | 16278 | number = number.toString() |
16278 | 16279 | const floatIndex = number.indexOf('.') |
16279 | 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 | 16284 | if (commandType == enumCommandType.MODBUS) { |
16284 | - value = Number(data[enumActionEl.CUSTOM_TCP_COMMAND]) | |
16285 | + value = data[enumActionEl.CUSTOM_TCP_COMMAND] | |
16285 | 16286 | |
16286 | 16287 | let { method, deviceCode, zoomFactor } = additional || {} |
16287 | 16288 | zoomFactor = zoomFactor ? zoomFactor : 1 |
16289 | + | |
16288 | 16290 | const validate = new Validate([ |
16289 | 16291 | { value: deviceCode, required: true, message: '未找到设备地址码' }, |
16290 | 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 | 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 | 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 | 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 | 16303 | if (method == '16') { |
16303 | 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 | 16308 | if (validate.begin()) flag = true |
... | ... | @@ -17316,7 +17317,8 @@ class Validate { |
17316 | 17317 | begin() { |
17317 | 17318 | for (const rule of this.list) { |
17318 | 17319 | const { required, value, message, validator } = rule |
17319 | - if (required && !value) { | |
17320 | + | |
17321 | + if (required && (value === null || value === undefined || value === '')) { | |
17320 | 17322 | UseLayUi.topErrorMsg(message) |
17321 | 17323 | return false |
17322 | 17324 | } | ... | ... |