59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <section class="AiNumber">
 | |
|     <el-input v-model="num" :size="size" @input.native="validate" @focus="$emit('focus')" @blur="format" clearable
 | |
|              @change="$emit('change')" :validate-event="isRule"></el-input>
 | |
|   </section>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
|   export default {
 | |
|     name: "AiNumber",
 | |
|     model: {
 | |
|       prop: "value",
 | |
|       event: "change"
 | |
|     },
 | |
|     props: {
 | |
|       value: String,
 | |
|       size: String,
 | |
|       decimal: {type: [String, Number], default: 2},
 | |
|       isRule: {type: Boolean, default: true}
 | |
|     },
 | |
|     computed: {
 | |
|       validRegex() {
 | |
|         let dec = Number(this.decimal || 0),
 | |
|             regex = `^(\\d*\\.?\\d{0,${dec}}).*`
 | |
|         return new RegExp(regex)
 | |
|       }
 | |
| 
 | |
|     },
 | |
|     data() {
 | |
|       return {
 | |
|         num: ""
 | |
|       }
 | |
|     },
 | |
|     methods: {
 | |
|       validate() {
 | |
|         let num = JSON.parse(JSON.stringify(this.num))
 | |
|         this.num = num.replace(this.validRegex, '$1')
 | |
|       },
 | |
|       format() {
 | |
|         this.num = Number(this.num||0).toString()
 | |
|         this.$emit("blur")
 | |
|       }
 | |
|     },
 | |
|     watch: {
 | |
|       num(v) {
 | |
|         this.$emit("change", v)
 | |
|       }
 | |
|     },
 | |
|     mounted() {
 | |
|       this.num = this.value
 | |
|     }
 | |
|   }
 | |
| </script>
 | |
| 
 | |
| <style lang="scss" scoped>
 | |
|   .AiNumber {
 | |
|   }
 | |
| </style>
 |