index.jsx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { ElInputNumber } from 'element-plus'
  2. import { computed, h } from 'vue'
  3. import { generateProps, generateEmits } from '../helper/component-util'
  4. import { componentScheme } from './component.scheme'
  5. import './index.less'
  6. export default {
  7. props: generateProps(componentScheme),
  8. emits: generateEmits(componentScheme),
  9. setup (props, { emit }) {
  10. // props unit
  11. const hasUnit = computed(() => {
  12. return !!props.unit
  13. })
  14. const controls = computed(() => {
  15. if (hasUnit.value) return false
  16. return props.controls ?? true
  17. })
  18. const controlsPosition = computed(() => {
  19. if (hasUnit.value) return ''
  20. return props.controlsPosition ?? ''
  21. })
  22. const precision = computed(() => {
  23. return !props.noPrecision ? (props.precision ?? 0) : undefined
  24. })
  25. return () => h(ElInputNumber, {
  26. class: {
  27. 'cip-number': true,
  28. 'cip-number--left': true,
  29. 'cip-number--unit': !!hasUnit.value,
  30. 'cip-number--no-controls': !controls.value,
  31. 'cip-number--standard': controlsPosition.value !== 'right' && !hasUnit.value
  32. },
  33. modelValue: props.modelValue, // .value,
  34. 'onUpdate:modelValue': val => { emit('update:modelValue', val) },
  35. step: props.step ?? 1,
  36. 'step-strictly': props.stepStrictly ?? false,
  37. min: props.min ?? -Infinity,
  38. max: props.max ?? Infinity,
  39. placeholder: props.placeholder ?? '',
  40. precision: precision.value,
  41. controls: controls.value,
  42. disabled: props.disabled,
  43. 'controls-position': controlsPosition.value,
  44. 'data-unit': props.unit // 此处利用 content: attr(data-unit);注入数据
  45. })
  46. }
  47. }