view.jsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334
  1. import { formInputViewProps, fromInputEmits } from '../../form-input-props'
  2. import { useFormView, useOptions } from '../../../hooks/form-input'
  3. import { computed } from 'vue'
  4. import { isObject } from '@cip/utils/util'
  5. import './view.less'
  6. export default {
  7. props: formInputViewProps,
  8. emits: fromInputEmits,
  9. setup (props) {
  10. const { securityConfig } = useFormView(props)
  11. const { getValue, options, optionProps } = useOptions(props, false)
  12. const viewOption = computed(() => {
  13. const value = getValue(props.modelValue)
  14. const currentOption = options.value.find(option => option[optionProps.value.value] === value) // || props.modelValue
  15. if (isObject(currentOption)) { // 防御性代码
  16. return {
  17. label: currentOption[optionProps.value.label],
  18. color: currentOption[optionProps.value.color ?? 'color']
  19. }
  20. }
  21. return { label: currentOption }
  22. })
  23. return () => <div class={'cip-color-status'} >
  24. {
  25. viewOption.value.color && <div class={'cip-color-status__color'} style={{
  26. width: securityConfig.value.dotSize,
  27. height: securityConfig.value.dotSize,
  28. background: viewOption.value.color
  29. }}/>
  30. }
  31. <div>{viewOption.value.label}</div>
  32. </div>
  33. }
  34. }