54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
import {recursionTree} from "./utils";
 | 
						|
 | 
						|
const mapComponents = {
 | 
						|
  complete: 'a-auto-complete',
 | 
						|
  cascader: 'a-cascader',
 | 
						|
  checkbox: 'a-checkbox-group',
 | 
						|
  radio: 'a-radio-group',
 | 
						|
  datePicker: 'a-date-picker',
 | 
						|
  monthPicker: 'a-month-picker',
 | 
						|
  rangePicker: 'a-range-picker',
 | 
						|
  weekPicker: 'a-week-picker',
 | 
						|
  timePicker: 'a-time-picker',
 | 
						|
  input: 'a-input',
 | 
						|
  rate: 'a-rate',
 | 
						|
  slider: 'a-slider',
 | 
						|
  switch: 'a-switch',
 | 
						|
  upload: 'a-upload',
 | 
						|
  button: 'a-button',
 | 
						|
  inputNumber: 'a-input-number',
 | 
						|
  mentions: ['a-mentions', 'a-mentions-option'],
 | 
						|
  select: ['a-select', 'a-select-option'],
 | 
						|
  treeSelect: ['a-tree-select', 'a-tree-select-node'],
 | 
						|
}
 | 
						|
 | 
						|
export default function createControlComponent (h, componentType, vueCreateElementProps = {}) {
 | 
						|
  const component = mapComponents[componentType]
 | 
						|
  // 没有子组件的情况下直接导出
 | 
						|
  if (typeof component === "string") {
 | 
						|
    return h(component, vueCreateElementProps)
 | 
						|
  }
 | 
						|
  // 子组件进行判断是否提供子内容
 | 
						|
  const { props } = vueCreateElementProps
 | 
						|
  if (!props.children || !Array.isArray(props.children)) {
 | 
						|
    return null
 | 
						|
  }
 | 
						|
  const [ outer, inner ] = component
 | 
						|
 | 
						|
  return h(
 | 
						|
    outer,
 | 
						|
    vueCreateElementProps,
 | 
						|
    recursionTree(props.children, (node) => {
 | 
						|
      const {label, value, ...otherProps} = node
 | 
						|
      return h(inner, {
 | 
						|
        props: {
 | 
						|
          value: value,
 | 
						|
          title: label,
 | 
						|
          ...otherProps
 | 
						|
        }
 | 
						|
      }, [h(label)])
 | 
						|
    })
 | 
						|
  )
 | 
						|
}
 | 
						|
 |