index.js 1.9 KB

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