UNPKG

es-form-table

Version:

基于element-ui-form和table两大组件进一步改良的控件,目的是为了解放前端在表单这块的操作

185 lines (170 loc) 5.23 kB
/*字段映射*/ const fieldMappingObjectKey = { } const fieldMappingArrayKey = { 'title': 'label', 'dataIndex': 'prop' } const fieldMappingObject = function (realProps) { const res = {}; Object.keys(realProps).forEach(key => { if(fieldMappingObjectKey[key]){ res[fieldMappingObjectKey[key]] = realProps[key]; }else{ res[key] = realProps[key]; } }) return res } const fieldMappingArray = function (esProps, realProps=[]) { var res = []; realProps.forEach(v => { var cv = Object.assign({}, esProps, {...v}); if(cv.type === 'selection'){ if(cv.display === 'radio'){ cv.label = ''; delete cv.type }else{ cv.display = 'checkbox' } } Object.keys(fieldMappingArrayKey).forEach(k => { if(cv.hasOwnProperty(k)){ cv[fieldMappingArrayKey[k]] = cv[k]; delete cv[k] } }); res.push(cv) }) return res } const FormProps = { 'inline': false, 'label-position': 'right', 'label-width': undefined, 'label-suffix': undefined, 'hide-required-asterisk': false, 'show-message': true, 'inline-message': false, 'status-icon': false, 'validate-on-rule-change': true, 'size': undefined, 'disabled': false, } const EsFormProps = { 'inline': true, } const TableProps = { 'data': undefined, 'height': undefined, /*Table 的高度,默认为自动高度。如果 height 为 number 类型,单位 px;如果 height 为 string 类型,则这个高度会设置为 Table 的 style.height 的值,Table 的高度会受控于外部样式。*/ 'max-height': undefined, /*Table 的最大高度。合法的值为数字或者单位为 px 的高度*/ 'stripe': false, /*是否为斑马纹 table*/ 'border': false, /*是否带有纵向边框 */ 'size': undefined, 'fit': true, 'show-header': true, 'highlight-current-row': false, 'current-row-key': undefined, 'row-class-name': undefined, 'row-style': undefined, 'cell-class-name': undefined, 'cell-style': undefined, 'header-row-class-name': undefined, 'header-row-style': undefined, /*表头行的 style 的回调方法,也可以使用一个固定的 Object 为所有表头行设置一样的 Style*/ 'header-cell-class-name': undefined, 'header-cell-style': undefined, 'row-key': undefined, 'empty-text': '暂无数据', 'default-expand-all': false, 'expand-row-keys': undefined, 'default-sort': undefined, 'tooltip-effect': undefined, 'show-summary': false, 'sum-text': '合计', 'summary-method': undefined, 'span-method': undefined, 'select-on-indeterminate': undefined, 'indent': 16, 'lazy': undefined, 'load': undefined, 'tree-props': { hasChildren: 'hasChildren', children: 'children' } } const EsTableProps = {} const TableColumnProps = { 'type': undefined, 'index': undefined, 'column-key': undefined, 'label': undefined, 'prop': undefined, 'width': undefined, 'min-width': undefined, 'fixed': undefined, 'render-header': undefined, 'sortable': false, 'sort-method': undefined, 'sort-by': undefined, 'sort-orders': undefined, 'resizable': undefined, 'formatter': undefined, 'show-overflow-tooltip': false, 'align': 'left', 'header-align': undefined, 'class-name': undefined, 'label-class-name': undefined, 'selectable': undefined, 'reserve-selection': false, 'filters': undefined, 'filter-placement': undefined, 'filter-multiple': true, 'filter-method': undefined, 'filtered-value': undefined, } const EsTableColumnProps = { 'display': 'checkbox', } const PaginationProps = { 'small': false, 'background': false, 'page-size': 10, 'total': undefined, 'page-count': undefined, 'pager-count': 7, 'current-page': 1, 'layout': 'prev, pager, next, jumper', 'page-sizes': [10, 20, 30, 40, 50, 100], 'popper-class': undefined, 'prev-text': undefined, 'next-text': undefined, 'disabled': false, 'hide-on-single-page': undefined } const EsPaginationProps = { 'prev-text': '上一页', 'next-text': '下一页', 'layout': 'total, sizes, prev, pager, next, jumper', 'page-sizes': [10, 20, 50, 100], } function _mergeElemProps(component) { switch (component) { case 'Form': return Object.assign({}, FormProps, EsFormProps) case 'Table': return Object.assign({}, TableProps, EsTableProps) case 'Table-column': return Object.assign({}, TableColumnProps, EsTableColumnProps) case 'Pagination': return Object.assign({}, PaginationProps, EsPaginationProps) } } export function mergeElemProps(component, realProps) { var type = Object.prototype.toString.call(realProps); if(type === '[object Object]'){ return Object.assign({}, _mergeElemProps(component), fieldMappingObject(realProps)); }else if(type === '[object Array]'){ return fieldMappingArray(_mergeElemProps(component), realProps) }else{ return realProps } } export const PAGE_CURRENT = 'current-page'; export const PAGE_SIZE = 'page-size';