Stepper.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <script setup lang="ts">
  2. const props = defineProps<{
  3. modelValue: number | string | undefined
  4. min?: number
  5. max?: number
  6. step?: number
  7. disabled?: boolean
  8. }>()
  9. const emit = defineEmits<{
  10. 'update:modelValue': [value: number]
  11. }>()
  12. const handleUpdate = (value: number) => {
  13. emit('update:modelValue', value)
  14. }
  15. </script>
  16. <template>
  17. <van-stepper
  18. :model-value="props.modelValue"
  19. class="common-stepper"
  20. theme="round"
  21. button-size="24"
  22. :min="props.min"
  23. :max="props.max"
  24. :step="props.step"
  25. :disabled="props.disabled"
  26. @update:model-value="handleUpdate"
  27. />
  28. </template>
  29. <style scoped lang="scss">
  30. .common-stepper {
  31. --van-stepper-button-round-theme-color: #f2f3f5;
  32. --van-stepper-button-disabled-color: #f2f3f5;
  33. --van-stepper-button-disabled-icon-color: #C9CDD4;
  34. :deep(.van-stepper__plus),
  35. :deep(.van-stepper__minus) {
  36. background-color: var(--van-stepper-button-round-theme-color);
  37. color: var(--color-text-secondary);
  38. }
  39. :deep(.van-stepper__minus--disabled),
  40. :deep(.van-stepper__plus--disabled) {
  41. color: var(--van-stepper-button-disabled-icon-color);
  42. background-color: var(--van-stepper-button-disabled-color);
  43. cursor: not-allowed;
  44. opacity: 1;
  45. }
  46. }
  47. </style>