UNPKG

czy-avue-form-design

Version:

Vue3.0版本,因Avue还存在一些bug,请慎重使用。

169 lines (160 loc) 4.55 kB
import { validatenull } from '../utils/validate'; import { KEY_COMPONENT_NAME, DIC_SPLIT, ARRAY_LIST, DATE_LIST, INPUT_LIST, ARRAY_VALUE_LIST, MULTIPLE_LIST, SELECT_LIST, RANGE_LIST } from '../global/variable'; import { detailDataType, findObject, createObj } from '../utils/util'; import { t } from '../locale/index'; /** * 计算级联属性 */ export const calcCascader = (list = []) => { list.forEach(ele => { let cascader = ele.cascader if (!validatenull(cascader)) { let parentProp = ele.prop; cascader.forEach(citem => { let column = findObject(list, citem); if (column) column.parentProp = parentProp; }); } }); return list; }; /** * 计算空白列row */ let count = 0; export const calcCount = (ele, spanDefault = 12, init = false) => { if (init) count = 0; const spanAll = 24; count = count + (ele.span || spanDefault) + (ele.offset || 0); if (count === spanAll) { count = 0; } else if (count > spanAll) { count = 0 + (ele.span || spanDefault) + (ele.offset || 0); } else if (ele.row && count !== spanAll) { ele.count = spanAll - count; count = 0; } return ele; }; /** * 初始化数据格式 */ export const initVal = (value, safe) => { let { type, multiple, dataType, separator = DIC_SPLIT, alone, emitPath, range } = safe let list = value; if ( (MULTIPLE_LIST.includes(type) && multiple == true) || (ARRAY_VALUE_LIST.includes(type) && emitPath !== false) || (RANGE_LIST.includes(type) && range == true) ) { if (!Array.isArray(list)) { if (validatenull(list)) { list = []; } else { list = (list + '').split(separator) || []; } } // 数据转化 list.forEach((ele, index) => { list[index] = detailDataType(ele, dataType); }); if (ARRAY_LIST.includes(type) && validatenull(list) && alone) list = ['']; } else { list = detailDataType(list, dataType) } return list; }; /** * 搜索框获取动态组件 */ export const getSearchType = (column) => { const type = column.type; const range = column.searchRange; let result = type; if (column.searchType) return column.searchType; if (['radio', 'checkbox', 'switch'].includes(type)) { result = 'select'; } else if (DATE_LIST.includes(type)) { let rangeKey = 'range'; if (range) { if (!type.includes(rangeKey)) { result = type + rangeKey; } else { result = type; } } else result = type.replace(rangeKey, ''); } else if (['textarea'].includes(type)) { result = 'input'; } return result; }; /** * 动态获取组件 */ export const getComponent = (type, component) => { let result = type || 'input'; if (!validatenull(component)) { return component; } else if (ARRAY_LIST.includes(type)) { result = 'array'; } else if (['time', 'timerange'].includes(type)) { result = 'time'; } else if (DATE_LIST.includes(type)) { result = 'date'; } else if (['password', 'textarea', 'search'].includes(type)) { result = 'input'; } else if (INPUT_LIST.includes(type)) { result = 'input-' + type; } return KEY_COMPONENT_NAME + result; }; /** * 表格初始化值 */ export const formInitVal = (list = []) => { let tableForm = {}; list.forEach(ele => { if ( ARRAY_VALUE_LIST.includes(ele.type) || (MULTIPLE_LIST.includes(ele.type) && ele.multiple) || ele.dataType === 'array' ) { tableForm[ele.prop] = []; } else if (RANGE_LIST.includes(ele.type) && ele.range == true) { tableForm[ele.prop] = [0, 0] } else if ( ['rate', 'slider', 'number'].includes(ele.type) || ele.dataType === 'number' ) { tableForm[ele.prop] = undefined; } else { tableForm[ele.prop] = ''; } if (ele.bind) { tableForm = createObj(tableForm, ele.bind); } // 表单默认值设置 if (!validatenull(ele.value)) { tableForm[ele.prop] = ele.value; } }); return tableForm }; export const getPlaceholder = function (column, type) { const placeholder = column.placeholder; const label = column.label; if (type === 'search') { const searchPlaceholder = column.searchPlaceholder; if (!validatenull(searchPlaceholder)) { return searchPlaceholder; } else { return label; } } else if (validatenull(placeholder)) { if (SELECT_LIST.includes(column.type)) { return `${t('tip.select')} ${label}`; } else { return `${t('tip.input')} ${label}`; } } return placeholder; };