hookehuyr

fix: 修复价格输入验证并统一使用@input事件

修复价格输入验证逻辑,防止多个小数点和以小数点开头的情况
使用@input替代@onInput事件监听,确保视图及时更新
......@@ -219,7 +219,7 @@
</view>
<view class="form-item-right">
<text class="price-symbol">¥</text>
<input v-model="formData.price" placeholder="请输入" type="digit" class="price-input" @onInput="validatePriceInput" />
<input v-model="formData.price" placeholder="请输入" type="digit" class="price-input" @input="validatePriceInput" />
</view>
</view>
......@@ -231,7 +231,7 @@
<view class="form-item-right">
<text class="market-price-symbol">¥</text>
<input v-model="formData.market_price" placeholder="请输入" type="digit"
class="market-price-input" @onInput="validateMarketPriceInput" />
class="market-price-input" @input="validateMarketPriceInput" />
</view>
</view>
</view>
......@@ -609,17 +609,26 @@ const showTireWearPicker = () => {
* @param {Object} event - 输入事件对象
*/
const validatePriceInput = (event) => {
const value = event.detail.value
const validValue = value.replace(/[^0-9.]/g, '')
// 防止多个小数点
const parts = validValue.split('.')
if (parts.length > 2) {
const newValue = parts[0] + '.' + parts.slice(1).join('')
formData.price = newValue
} else {
formData.price = validValue
let value = event.detail.value
// 只保留数字和小数点,删除其他字符
value = value.replace(/[^0-9.]/g, '')
// 防止多个小数点,只保留第一个小数点
const dotIndex = value.indexOf('.')
if (dotIndex !== -1) {
value = value.substring(0, dotIndex + 1) + value.substring(dotIndex + 1).replace(/\./g, '')
}
// 防止以小数点开头
if (value.startsWith('.')) {
value = '0' + value
}
// 使用 nextTick 确保视图更新
Taro.nextTick(() => {
formData.price = value
})
}
/**
......@@ -627,17 +636,26 @@ const validatePriceInput = (event) => {
* @param {Object} event - 输入事件对象
*/
const validateMarketPriceInput = (event) => {
const value = event.detail.value
const validValue = value.replace(/[^0-9.]/g, '')
// 防止多个小数点
const parts = validValue.split('.')
if (parts.length > 2) {
const newValue = parts[0] + '.' + parts.slice(1).join('')
formData.market_price = newValue
} else {
formData.market_price = validValue
let value = event.detail.value
// 只保留数字和小数点,删除其他字符
value = value.replace(/[^0-9.]/g, '')
// 防止多个小数点,只保留第一个小数点
const dotIndex = value.indexOf('.')
if (dotIndex !== -1) {
value = value.substring(0, dotIndex + 1) + value.substring(dotIndex + 1).replace(/\./g, '')
}
// 防止以小数点开头
if (value.startsWith('.')) {
value = '0' + value
}
// 使用 nextTick 确保视图更新
Taro.nextTick(() => {
formData.market_price = value
})
}
/**
......