input-number.vue 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <template>
  2. <div class="input-number">
  3. <div class="sub" @click="sub">-</div>
  4. <input class="input" type="number" @change="changeInput" v-model="number">
  5. <div class="add" @click="add">+</div>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. props: {
  11. value:{
  12. type:Number,
  13. default:0
  14. },
  15. max: {
  16. type:Number,
  17. default:1000000
  18. },
  19. min: {
  20. type:Number,
  21. default:0
  22. }
  23. },
  24. data () {
  25. return {
  26. number: this.value
  27. }
  28. },
  29. methods: {
  30. add () {
  31. if(this.number > this.max) {
  32. return
  33. }
  34. this.number ++
  35. this.$emit('input', this.number)
  36. },
  37. sub () {
  38. if(this.number <= this.min) {
  39. return
  40. }
  41. this.number --
  42. this.$emit('input', this.number)
  43. },
  44. changeInput() {
  45. this.$emit('input', Number(this.number))
  46. }
  47. }
  48. }
  49. </script>
  50. <style scoped>
  51. .input-number {
  52. display: flex;
  53. }
  54. .input {
  55. width: 40px;
  56. height: 25px;
  57. border-top: 1px solid #DDDDDD;
  58. border-bottom: 1px solid #DDDDDD;
  59. border-left: none;
  60. border-right: none;
  61. text-align: center;
  62. }
  63. .sub, .add {
  64. width: 25px;
  65. height: 25px;
  66. border: 1px solid #DDDDDD;
  67. display: flex;
  68. align-items: center;
  69. justify-content: center;
  70. cursor: pointer;
  71. color: #AAAAAA;
  72. font-size: 20px;
  73. user-select:none;
  74. }
  75. </style>