function filterMoney(str) {
let num = ''
if (str && str !== 0) {
num = (str * 1).toFixed(2)
if (isNaN(num)) {
return ''
}
} else if(str === 0) {
return 0
}
let after = num.indexOf('.') > 0 ? num.substr(num.indexOf('.')) : ''
let numArr = num.indexOf('.') > 0 ? num.substring(0, num.indexOf('.')) : num
if (numArr && numArr !== null) {
numArr = numArr.toString().replace(/\d+/, (n) => {
return n.replace(/(\d)(?=(\d{3})+$)/g, ($1) => {
return $1 + ','
})
})
}
return numArr + after
}
export function clearMoney(str) {
let num = ''
if (str) {
num = str + ''
}
return num.replace(/[^\d.]/g, "");
}
import { filterMoney,clearMoney } from "@/utils";
export default {
bind(el, binding, vnode) {
const { value } = binding
const ele = el.children[0]
el.custom = {
value
}
const val = filterMoney(ele.value)
ele.value = val
ele.addEventListener('blur',(e) => {
const val = filterMoney(ele.value)
ele.value = val
})
ele.addEventListener('focus',(e) => {
ele.value = clearMoney(ele.value) || ''
})
},
update(el, binding, vnode) {
const { value } = binding
const ele = el.children[0]
const val = filterMoney(ele.value)
if(ele.target.value !== value) {
return
}
ele.value = val
}
}
import thousandth from './number/thousandth'
Vue.directive('thousandth',thousandth)
<el-input v-model.trim="value" v-thousandth></el-input>