79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Vue
		
	
	
import PropTypes from '../_util/vue-types';
 | 
						|
import { getOptionProps, getSlots, getComponentFromProp } from '../_util/props-util';
 | 
						|
 | 
						|
const ColProps = {
 | 
						|
  child: PropTypes.any,
 | 
						|
  bordered: PropTypes.bool,
 | 
						|
  colon: PropTypes.bool,
 | 
						|
  type: PropTypes.oneOf(['label', 'content']),
 | 
						|
  layout: PropTypes.oneOf(['horizontal', 'vertical']),
 | 
						|
};
 | 
						|
 | 
						|
const Col = {
 | 
						|
  functional: true,
 | 
						|
  props: ColProps,
 | 
						|
  render(h, ctx) {
 | 
						|
    const { child, bordered, colon, type, layout } = ctx.props;
 | 
						|
    const { prefixCls, span = 1 } = getOptionProps(child);
 | 
						|
    const { key } = ctx.data;
 | 
						|
    const label = getComponentFromProp(child, 'label');
 | 
						|
    const slots = getSlots(child);
 | 
						|
    const labelProps = {
 | 
						|
      attrs: {},
 | 
						|
      class: [
 | 
						|
        `${prefixCls}-item-label`,
 | 
						|
        {
 | 
						|
          [`${prefixCls}-item-colon`]: colon,
 | 
						|
          [`${prefixCls}-item-no-label`]: !label,
 | 
						|
        },
 | 
						|
      ],
 | 
						|
      key: `${key}-label`,
 | 
						|
    };
 | 
						|
    if (layout === 'vertical') {
 | 
						|
      labelProps.attrs.colSpan = span * 2 - 1;
 | 
						|
    }
 | 
						|
 | 
						|
    if (bordered) {
 | 
						|
      if (type === 'label') {
 | 
						|
        return <th {...labelProps}>{label}</th>;
 | 
						|
      }
 | 
						|
      return (
 | 
						|
        <td class={`${prefixCls}-item-content`} key={`${key}-content`} colSpan={span * 2 - 1}>
 | 
						|
          {slots.default}
 | 
						|
        </td>
 | 
						|
      );
 | 
						|
    }
 | 
						|
    if (layout === 'vertical') {
 | 
						|
      if (type === 'content') {
 | 
						|
        return (
 | 
						|
          <td colSpan={span} class={`${prefixCls}-item`}>
 | 
						|
            <span class={`${prefixCls}-item-content`} key={`${key}-content`}>
 | 
						|
              {slots.default}
 | 
						|
            </span>
 | 
						|
          </td>
 | 
						|
        );
 | 
						|
      }
 | 
						|
      return (
 | 
						|
        <td colSpan={span} class={`${prefixCls}-item`}>
 | 
						|
          <span
 | 
						|
            class={[`${prefixCls}-item-label`, { [`${prefixCls}-item-colon`]: colon }]}
 | 
						|
            key={`${key}-label`}
 | 
						|
          >
 | 
						|
            {label}
 | 
						|
          </span>
 | 
						|
        </td>
 | 
						|
      );
 | 
						|
    }
 | 
						|
    return (
 | 
						|
      <td colSpan={span} class={`${prefixCls}-item`}>
 | 
						|
        <span {...labelProps}>{label}</span>
 | 
						|
        <span class={`${prefixCls}-item-content`} key={`${key}-content`}>
 | 
						|
          {slots.default}
 | 
						|
        </span>
 | 
						|
      </td>
 | 
						|
    );
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
export default Col;
 |