| 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>
 |