index.jsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { computed } from 'vue'
  2. import { layoutProps } from '../layout-props'
  3. import './index.less'
  4. export default {
  5. props: layoutProps,
  6. setup (props, { slots }) {
  7. const grid = computed(() => {
  8. return props.config._isGrid
  9. })
  10. const classifyOptions = computed(() => {
  11. return props.config.classifyOptions || []
  12. })
  13. const getClassifyChildren = (options = [], classifyConfig) => {
  14. const { key } = classifyConfig
  15. return options.filter(v => {
  16. return v.config.classify === key
  17. })
  18. }
  19. const Item = (classifyConfig, index) => {
  20. const children = getClassifyChildren(props.config.options , classifyConfig)
  21. // 无children是需要隐藏classify
  22. if (children.length === 0) return undefined
  23. return <div class={'basic-classify-layout__item'} key={index}>
  24. {classifyConfig.title && <h2 class={'basic-classify-layout__item__title'}>{classifyConfig.title}</h2>}
  25. <div
  26. class={{ 'cip-form--grid': grid.value }}
  27. style={{ gridTemplateColumns: `repeat(${typeof grid.value === 'number' ? grid.value : 3},1fr)` }} >
  28. {slots.item?.({ children: children })}
  29. </div>
  30. </div>
  31. }
  32. return () => (
  33. <div class={'basic-classify-layout'}>
  34. {classifyOptions.value.map(Item)}
  35. </div>
  36. )
  37. }
  38. }