index.vue 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <div :style="{ width: item.width ? item.width + 'px' : '100%' }">
  3. <v-text-field
  4. v-model="value"
  5. variant="outlined"
  6. :density="item.dense || 'compact'"
  7. :type="item.type"
  8. :rules="item.rules"
  9. :disabled="item.disabled"
  10. :dense="item.dense"
  11. :style="{width: item.width}"
  12. color="primary"
  13. :label="item.label"
  14. :placeholder="item.placeholder || item.label"
  15. :autofocus="item.autofocus"
  16. :required="item.required"
  17. :class="item.class"
  18. :suffix="item.suffix"
  19. :append-inner-icon="item.appendInnerIcon"
  20. :clearable="item.clearable"
  21. :readonly="item.readonly"
  22. :counter="item.counter"
  23. :prepend-inner-icon="item.prependInnerIcon"
  24. hide-spin-buttons
  25. :hide-details="item.hideDetails || false"
  26. @wheel="$event => handleWheel($event, item)"
  27. @update:modelValue="modelValueUpDate"
  28. ></v-text-field>
  29. </div>
  30. </template>
  31. <script setup>
  32. import { defineEmits, ref, watch } from 'vue';
  33. defineOptions({ name:'FormUI-v-text-field'})
  34. const props = defineProps({item: Object, modelValue: [String, Number]})
  35. const emit = defineEmits(['update:modelValue', 'change'])
  36. const item = props.item
  37. const value = ref(props.modelValue)
  38. watch(() => props.modelValue, (newVal) => {
  39. value.value = newVal
  40. })
  41. const modelValueUpDate = (val) => {
  42. value.value = val
  43. emit('update:modelValue', value.value)
  44. emit('change', value.value)
  45. }
  46. const handleWheel = (event, item) => {
  47. if (item.type !== 'number') return
  48. event.preventDefault()
  49. if (event.deltaY > 0) {
  50. item.value--
  51. } else {
  52. item.value++
  53. }
  54. }
  55. </script>
  56. <style lang="scss" scoped>
  57. </style>