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)])
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 |