123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <template>
- <view class="grace-number-box" :style="{width:width}">
- <view class="grace-number-box-doBtn" @tap.stop="reduce"
- :style="{
- width:btnSize, height:btnSize, fontSize:btnFontSize,
- lineHeight:btnSize, color:btnColr
- }">-</view>
- <input class="grace-number-box-input" :value="inputNumber"
- type="number" @blur="inputval" :disabled="disabled"
- :style="{
- background:inputBG, height:inputHeight, lineHeight:inputHeight,
- fontSize:inputFontSize, color:inputColor, padding:inputPadding,
- borderRadius:inputBorderRadius}"></input>
- <view class="grace-number-box-doBtn" @tap.stop="add"
- :style="{
- width:btnSize, height:btnSize, fontSize:btnFontSize,
- lineHeight:btnSize, color:btnColr}">+</view>
- </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 : '30rpx'
- },
- inputFontSize : {
- type : String,
- default : '28rpx'
- },
- 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{display:flex; overflow:hidden; flex-wrap:nowrap; align-items:center;}
- .grace-number-box-doBtn{text-align:center; color:#666666; flex-shrink:0;}
- .grace-number-box-input{text-align:center; width:700rpx;}
- </style>
|