| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | 
							- <template>
 
- 	<view class="uni-numbox">
 
- 		<view class="uni-numbox-minus" 
 
- 			@click="_calcValue('subtract')"
 
- 		>
 
- 			<text class="mix-icon icon--jianhao" :class="minDisabled?'uni-numbox-disabled': ''" ></text>
 
- 		</view>
 
- 		<input
 
- 			class="uni-numbox-value" 
 
- 			type="number" 
 
- 			:disabled="inputDisabled"
 
- 			:value="inputValue" 
 
- 			@blur="_onBlur"
 
- 		>
 
- 		
 
- 		<view 
 
- 			class="uni-numbox-plus" 
 
- 			@click="_calcValue('add')"
 
- 		>
 
- 			<text class="mix-icon icon-jia2" :class="maxDisabled?'uni-numbox-disabled': ''" ></text>
 
- 		</view>
 
- 	</view>
 
- </template>
 
- <script>
 
- 	/**
 
- 	 * index 当前行下标
 
- 	 * value 默认值
 
- 	 * min 最小值
 
- 	 * max 最大值
 
- 	 * step 步进值
 
- 	 * disabled 禁用
 
- 	 */
 
- 	export default {
 
- 		name: 'uni-number-box',
 
- 		props: {
 
- 			index: {
 
- 				type: Number,
 
- 				default: 0
 
- 			},
 
- 			value: {
 
- 				type: Number,
 
- 				default: 1
 
- 			},
 
- 			min: {
 
- 				type: Number,
 
- 				default: -Infinity
 
- 			},
 
- 			max: {
 
- 				type: Number,
 
- 				default: 99
 
- 			},
 
- 			step: {
 
- 				type: Number,
 
- 				default: 1
 
- 			},
 
- 			inputDisabled: {
 
- 				type: Boolean,
 
- 				default: false
 
- 			}
 
- 		},
 
- 		data() {
 
- 			return {
 
- 				inputValue: this.value,
 
- 			}
 
- 		},
 
- 		created(){
 
- 			
 
- 		},
 
- 		computed: {
 
- 			maxDisabled(){
 
- 				return this.inputValue >= this.max;
 
- 			},
 
- 			minDisabled(){
 
- 				return this.inputValue <= this.min;
 
- 			},
 
- 		},
 
- 		watch: {
 
- 			inputValue(number) {
 
- 				const data = {
 
- 					number: number,
 
- 					index: this.index
 
- 				}
 
- 				this.$emit('eventChange', data);
 
- 			},
 
- 		},
 
- 		methods: {
 
- 			_calcValue(type) {
 
- 				let value = this.inputValue;
 
- 				let newValue = 0;
 
- 				let step = this.step;
 
- 				
 
- 				if(type === 'subtract'){
 
- 					newValue = value - step;
 
- 					
 
- 					if(newValue < this.min){
 
- 						newValue = this.min
 
- 						if(this.min > 1){
 
- 							this.$api.msg(this.limit_message);
 
- 						}
 
- 					}
 
- 				}else if(type === 'add'){
 
- 					newValue = value + step;
 
- 					
 
- 					if(newValue > this.max){
 
- 						newValue = this.max
 
- 					}
 
- 				}
 
- 				if(newValue === value){
 
- 					return;
 
- 				}
 
- 				this.inputValue = newValue;
 
- 			},
 
- 			_onBlur(event) {
 
- 				let value = event.detail.value;
 
- 				let constValue = value;
 
- 				if (!value) {
 
- 					this.inputValue = 0;
 
- 					return
 
- 				}
 
- 				value = +value;
 
- 				if (value > this.max) {
 
- 					value = this.max;
 
- 				} else if (value < this.min) {
 
- 					value = this.min
 
- 				}
 
- 				
 
- 				if(constValue != value){
 
- 					this.inputValue = constValue;
 
- 					this.$nextTick(()=>{
 
- 						this.inputValue = value
 
- 					})
 
- 				}else{
 
- 					this.inputValue = value
 
- 				}
 
- 			}
 
- 		}
 
- 	}
 
- </script>
 
- <style>
 
- 	.uni-numbox {
 
- 		display: flex;
 
- 		justify-content: flex-start;
 
- 		flex-direction: row;
 
- 		align-items: center;
 
- 		height: 50rpx;
 
- 	}
 
- 	.uni-numbox-minus,
 
- 	.uni-numbox-plus {
 
- 		display: flex;
 
- 		align-items: center;
 
- 		justify-content: center;
 
- 		width: 50rpx;
 
- 		height: 100%;
 
- 		line-height: 1;
 
- 		background-color: #f7f7f7;
 
- 	}
 
- 	.uni-numbox-minus .mix-icon,
 
- 	.uni-numbox-plus .mix-icon{
 
- 		font-size: 32rpx;
 
- 		color: #333;
 
- 	}
 
- 	.uni-numbox-value {
 
- 		display: flex;
 
- 		align-items: center;
 
- 		justify-content: center;
 
- 		background-color: #fff;
 
- 		width: 60rpx;
 
- 		height: 50rpx;
 
- 		min-height: 50rpx;
 
- 		text-align: center;
 
- 		font-size: 28rpx;
 
- 		color: #333;
 
- 	}
 
- 	.uni-numbox-disabled.mix-icon {
 
- 		color: #C0C4CC;
 
- 	}
 
- </style>
 
 
  |