UNPKG

el-plus-form

Version:

采用Vue3 + TS,封装的element-plus数据驱动表单组件

210 lines (193 loc) 5.67 kB
// 是否定义 export function isDef(val: any) { return !isUnDef(val) } // 是否没定义 export function isUnDef(val: any) { return val === null || val === undefined } // 判断是否为函数 export function isFunction(val: any) { return typeof val === 'function' } // 判断类型 export function is(val: any, type: any) { const typeArr = Array.isArray(type) ? type : [type] const valType = Object.prototype.toString.call(val) return typeArr.some((type) => `[object ${type}]` === valType) } // 判断是否为生产环境 export function isProd() { return process.env.NODE_ENV === 'production' } // 获取 display: none 的节点宽度和高度 export function getSize(elem: any) { const noneNodes: any[] = [] const nodeStyle: any[] = [] getNoneNode(elem) // 获取多层display:none;的元素 setNodeStyle() const width = elem.clientWidth const height = elem.clientHeight resumeNodeStyle() return { width: width, height: height } function getNoneNode(node: any) { const display = getStyles(node).getPropertyValue('display') const tagName = node.nodeName.toLowerCase() if (display !== 'none' && tagName !== 'body') { getNoneNode(node.parentNode) } else { noneNodes.push(node) if (tagName !== 'body') getNoneNode(node.parentNode) } } // 这方法才能获取最终是否有display属性设置,不能style.display。 function getStyles(elem: any) { // Support: IE<=11+, Firefox<=30+ (#15098, #14150) // IE throws on elements created in popups // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" let view = elem.ownerDocument.defaultView if (!view || !view.opener) { view = window } return view.getComputedStyle(elem) } function setNodeStyle() { let i = 0 for (; i < noneNodes.length; i++) { const visibility = noneNodes[i].style.visibility const display = noneNodes[i].style.display const style = noneNodes[i].getAttribute('style') // 覆盖其他display样式 noneNodes[i].setAttribute('style', 'visibility:hidden;display:block !important;' + style) nodeStyle[i] = { visibility: visibility, display: display } } } function resumeNodeStyle() { let i = 0 for (; i < noneNodes.length; i++) { noneNodes[i].style.visibility = nodeStyle[i].visibility noneNodes[i].style.display = nodeStyle[i].display } } } // 如果 value 不是数组, 那么强制转为数组 // 空转为空数组 undefined | null | '' => [] // 1 => [1], false => [false], {} => [{}] export function castArray(value: any) { if (Array.isArray(value)) { return value } else if (value === undefined || value === null || value === '') { return [] } else { return [value] } } // 如果 value 不是数组, 那么强制转为数组 export function castFileList(value: any) { if (Array.isArray(value)) { return value } else if (value === undefined || value === null || value === '') { return [] } else { return value.split(',') } } // 如果 value 不是字符串, 那么强制转为字符串 export function castString(value: any) { if (typeof value === 'string') { return value } else if (value === undefined || value === null) { return '' } else if (value.toString) { return value.toString() } else { return value + '' } } // 如果 value 不是Boolean, 那么强制转为Boolean export function castBoolean(value: any) { if (typeof value === 'boolean') { return value } else { return Boolean(value) } } // 如果 value 不是Number, 那么强制转为Number export function castNumber(value: any) { if (typeof value === 'number') { return value } else { return Number(value) || 0 } } // 判断是否为空 // 空数组 / null / undefined / 空字符串 export function isEmpty(val: any) { if (Array.isArray(val) && val.length === 0) { return true } else if (isUnDef(val)) { return true } else if (typeof val === 'string' && val === '') { return true } else { return false } } /** * 获取随机字符串 * @returns {string} */ export function getUID(): string { let str = '' const arr = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.split('') for (let i = 0; i < 32; i++) { let index = Math.floor(arr.length * Math.random()) if (index < 0) index = 0 str += arr[index] } return str } // 根据类型获取初始值 export function handelValueData(type: String, value: any, defVal?: any): any { let tempValue = null if (value !== undefined && value !== null && value !== '') { tempValue = value } else if (defVal !== undefined && defVal !== null) { tempValue = defVal } if (type) { // 输入类 switch (type) { case 'input': case 'nbInput': case 'password': tempValue = castString(tempValue) || '' break case 'yesno': tempValue = castBoolean(tempValue) || false break case 'cascader': case 'checkbox': case 'checkbox-button': case 'image': case 'transfer': tempValue = castArray(tempValue) || [] break case 'number': case 'status': case 'switch': tempValue = castNumber(tempValue) || 0 break case 'upImg': tempValue = castFileList(tempValue) break } } return tempValue }