| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | 
							- <template>
 
- 	<view class="grace-number-box" :style="{width:width}">
 
- 		<text class="grace-number-box-doBtn" @tap.stop="reduce" 
 
- 		:style="{
 
- 			width:btnSize, height:btnSize, fontSize:btnFontSize, 
 
- 			lineHeight:btnSize, color:btnColr}">-</text>
 
- 		<input class="grace-number-box-input" type="number" 
 
- 		:value="inputNumber" :disabled="disabled"  @blur="inputval" 
 
- 		:style="{
 
- 			backgroundColor:inputBG, height:inputHeight, lineHeight:inputHeight, 
 
- 			fontSize:inputFontSize, color:inputColor, padding:inputPadding, 
 
- 			borderRadius:inputBorderRadius}"></input>
 
- 		<text class="grace-number-box-doBtn" @tap.stop="add" 
 
- 		:style="{width:btnSize, height:btnSize, fontSize:btnFontSize, lineHeight:btnSize, color:btnColr}">+</text>
 
- 	</view>
 
- </template>
 
- <script>
 
- export default {
 
- 	name: "graceNumberBox",
 
- 	props: {
 
- 		disabled :{
 
- 			type : Boolean,
 
- 			default : false
 
- 		},
 
- 		value : {
 
- 			type : Number,
 
- 			default : 0 
 
- 		},
 
- 		index : {
 
- 			type : Number,
 
- 			default : 0
 
- 		},
 
- 		maxNum:{
 
- 			type: Number,
 
- 			default: 999999
 
- 		},
 
- 		minNum: {
 
- 			type: Number,
 
- 			default: 0
 
- 		},
 
- 		datas:{
 
- 			type: String,
 
- 			default: ''
 
- 		},
 
- 		btnSize : {
 
- 			type : String,
 
- 			default : '60rpx'
 
- 		},
 
- 		btnFontSize : {
 
- 			type : String,
 
- 			default : '36rpx'
 
- 		},
 
- 		btnColr : {
 
- 			type : String,
 
- 			default : '#666666'
 
- 		},
 
- 		inputHeight : {
 
- 			type : String,
 
- 			default : '56rpx'
 
- 		},
 
- 		inputFontSize : {
 
- 			type : String,
 
- 			default : '26rpx'
 
- 		},
 
- 		inputColor : {
 
- 			type : String,
 
- 			default : '#333333'
 
- 		},
 
- 		inputBG : {
 
- 			type : String,
 
- 			default : '#F6F7F8'
 
- 		},
 
- 		inputPadding : {
 
- 			type : String,
 
- 			default : '10rpx'
 
- 		},
 
- 		inputBorderRadius : {
 
- 			type : String,
 
- 			default : '8rpx'
 
- 		},
 
- 		width:{
 
- 			type : String,
 
- 			default : '200rpx'
 
- 		},
 
- 		step : {
 
- 			type : Number,
 
- 			default : 1
 
- 		}
 
- 	},
 
- 	data() {
 
- 		return {
 
- 			inputNumber: 0,
 
- 			callbackNumber:0
 
- 		}
 
- 	},
 
- 	created:function(){
 
- 		this.inputNumber = Number(this.value);
 
- 		this.callbackNumber++;
 
- 	},
 
- 	watch:{
 
- 		value :function(val, vo){this.inputNumber = Number(val);},
 
- 		inputNumber :function(val, vo){
 
- 			val = Number(val);
 
- 			if(isNaN(val)){ setTimeout(()=>{this.inputNumber = Number(vo);}, 200);  return; }
 
- 			if(val > this.maxNum){
 
- 				this.$emit('change', [this.maxNum, this.index, this.datas]);
 
- 				setTimeout(()=>{this.inputNumber = this.maxNum;}, 200);
 
- 				return ;
 
- 			}
 
- 			if(val < this.minNum){
 
- 				this.$emit('change', [this.minNum, this.index, this.datas]);
 
- 				setTimeout(()=>{this.inputNumber = this.minNum;}, 200);
 
- 				return ;
 
- 			}
 
- 			if(val != vo && this.callbackNumber > 0){this.$emit('change', [val, this.index, this.datas]);}
 
- 		}
 
- 	},
 
- 	methods: {
 
- 		add : function(){
 
- 			var newVal = Number(this.inputNumber) + Number(this.step);
 
- 			if(newVal > this.maxNum){return ;}
 
- 			this.inputNumber = Number(newVal);
 
- 		},
 
- 		reduce: function () {
 
- 			var newVal = Number(this.inputNumber) - Number(this.step);
 
- 			if(newVal < this.minNum){return ;}
 
- 			this.inputNumber = newVal;
 
- 		},
 
- 		inputval:function (e) {
 
- 			this.inputNumber = e.detail.value;
 
- 		}
 
- 	}
 
- }
 
- </script>
 
- <style scoped>
 
- .grace-number-box{overflow:hidden; flex-direction:row; flex-wrap:nowrap; align-items:center;}
 
- .grace-number-box-doBtn{text-align:center; color:#666666;}
 
- .grace-number-box-input{text-align:center; width:700rpx; flex:1;}
 
- </style>
 
 
  |