z-input.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <view>
  3. <input class="input" :disabled="disabled" :style="{'text-align':align}" :maxlength="maxlength" :type="type" v-model="inputvalue"
  4. placeholder-class="pl-class" @input="input($event)" @blur="blur($event)" :placeholder="placeholder" />
  5. </view>
  6. </template>
  7. <script>
  8. import bus from '../../utils/bus.js'
  9. export default {
  10. name: 'z-input',
  11. props: {
  12. value: String | Number,
  13. type: {
  14. type: String,
  15. default: 'text'
  16. },
  17. placeholder: {
  18. type: String,
  19. default: ''
  20. },
  21. disabled: Boolean,
  22. maxlength: String,
  23. max: {
  24. type: Number,
  25. default: 9999999999999
  26. },
  27. min: {
  28. type: Number,
  29. default: -9999999999999
  30. },
  31. step: {
  32. type: Number,
  33. default: 1
  34. },
  35. decimal: {
  36. type: Number,
  37. default: 0
  38. },
  39. align: {
  40. type: String,
  41. default: 'right'
  42. }
  43. },
  44. model: {
  45. prop: 'value',
  46. event: 'input'
  47. },
  48. watch: {
  49. value(newval, oldval) {
  50. this.inputvalue = this.value;
  51. }
  52. },
  53. data() {
  54. return {
  55. inputvalue: ''
  56. };
  57. },
  58. mounted() {
  59. this.inputvalue = this.value;
  60. },
  61. methods: {
  62. blur(e){
  63. var num = e.target.value;
  64. console.log(e)
  65. if (this.type == 'number'||this.type=='digit') {
  66. var data = num;
  67. if (this.decimal != 0) {
  68. data = data.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
  69. data = data.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
  70. data = data.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  71. var test = '/^(\\-)*(\\d+)\\.{1}(\\d{0,' + this.decimal + '}).*$/';
  72. data = data.replace(eval(test), '$1$2.$3'); //只能输入几个小数
  73. }
  74. else {
  75. data = data.replace(/[^\d]/g, ""); //清除“数字”以外的字符
  76. }
  77. if (data.indexOf(".") < 0 && data != "") { //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
  78. data = parseFloat(data);
  79. }
  80. console.log('data',data)
  81. if (data > this.max) {
  82. console.log('da')
  83. // var data1 = String(data)
  84. // data1 = data1.substring(0, data1.length - 1);
  85. // data = Number(data1);
  86. // console.log('330',data)
  87. data=this.max;
  88. }
  89. if (data < this.min && data != '') {
  90. data = this.min;
  91. }
  92. if(Number(data%this.step)>(this.step/2)){
  93. data=Number(data) + Number(this.step - data%this.step)
  94. }else if(Number(data%this.step)<=(this.step/2)&&Number(data%this.step)>0){
  95. data=Number(data) - Number(data%this.step)
  96. }
  97. num = data;
  98. }
  99. this.$emit('input', num);
  100. this.$emit('change',num);
  101. this.inputvalue=num;
  102. setTimeout(()=>{
  103. this.inputvalue=num;
  104. },10)
  105. },
  106. input(e) {
  107. var num = e.target.value;
  108. console.log('输入内容',num)
  109. if (this.type == 'number'||this.type=='digit') {
  110. var data = num;
  111. if (this.decimal != 0) {
  112. data = data.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符
  113. data = data.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的
  114. data = data.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
  115. var test = '/^(\\-)*(\\d+)\\.{1}(\\d{0,' + this.decimal + '}).*$/';
  116. data = data.replace(eval(test), '$1$2.$3'); //只能输入几个小数
  117. } else {
  118. data = data.replace(/[^\d]/g, ""); //清除“数字”以外的字符
  119. }
  120. if (data.indexOf(".") < 0 && data != "") { //以上已经过滤,此处控制的是如果没有小数点,首位不能为类似于 01、02的金额
  121. data = parseFloat(data);
  122. }
  123. console.log('data',data)
  124. if (data > this.max) {
  125. console.log('da')
  126. // var data1 = String(data)
  127. // data1 = data1.substring(0, data1.length - 1);
  128. // data = Number(data1);
  129. // console.log('330',data)
  130. data=this.max;
  131. }
  132. if (data < this.min && data != '') {
  133. data = this.min;
  134. }
  135. if(Number(data%this.step)>(this.step/2)){
  136. data=Number(data) + Number(this.step - data%this.step)
  137. }else if(Number(data%this.step)<=(this.step/2)&&Number(data%this.step)>0){
  138. data=Number(data) - Number(data%this.step)
  139. }
  140. num = data;
  141. }
  142. this.$emit('input', num);
  143. this.$emit('change',num);
  144. this.inputvalue=num;
  145. setTimeout(()=>{
  146. this.inputvalue=num;
  147. },10)
  148. // console.log(num)
  149. }
  150. }
  151. }
  152. </script>
  153. <style scoped lang="scss">
  154. input {}
  155. .input {
  156. font-size: 28rpx;
  157. border: none !important;
  158. outline: none !important;
  159. padding: 0 10rpx;
  160. width: calc(100% - 20rpx) !important;
  161. background: rgba(0,0,0,0);
  162. }
  163. .pl-class {
  164. color: #999999 !important;
  165. }
  166. </style>