UNPKG

czy-avue-form-design

Version:

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

425 lines (409 loc) 12.2 kB
import { validatenull } from './validate'; import { DIC_PROPS, CHILDREN_LIST } from '../global/variable'; import { typeList } from '../global/variable' export const isMediaType = (url, type) => { if (validatenull(url)) return if (typeList.audio.test(url) || type == 'audio') { return 'audio' } else if (typeList.video.test(url) || type == 'video') { return 'video' } else if (typeList.img.test(url) || type == 'img') { return 'img' } return } export const uuid = () => { var s = []; var hexDigits = "0123456789abcdef"; for (var i = 0; i < 36; i++) { s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); } s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010 s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 s[8] = s[13] = s[18] = s[23] = "-"; var uuid = s.join(""); return uuid; } export function getFixed (val = 0, len = 2) { return Number(val.toFixed(len)); } export function getAsVal (obj, bind = '') { let result = deepClone(obj); if (validatenull(bind)) return result; bind.split('.').forEach(ele => { result = !validatenull(result[ele]) ? result[ele] : ''; }); return result; } export function setAsVal (obj, bind = '', value) { let result; let type = getObjType(value) if (validatenull(value)) { if (type === 'array') { result = `obj.${bind}=[]` } else if (type === 'object') { result = `obj.${bind}={}` } else if (['number', 'boolean'].includes(type)) { result = `obj.${bind}=undefined` } else { result = `obj.${bind}=''` } } else { if (type == 'string') { result = `obj.${bind}='${value}'`; } else { result = `obj.${bind}=${value}`; } } eval(result); return obj; } export const loadScript = (type = 'js', url, dom = "body") => { let flag = false; return new Promise((resolve) => { const head = dom == 'head' ? document.getElementsByTagName('head')[0] : document.body; for (let i = 0; i < head.children.length; i++) { let ele = head.children[i] if ((ele.src || '').indexOf(url) !== -1) { flag = true; resolve(); } } if (flag) return; let script; if (type === 'js') { script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; } else if (type === 'css') { script = document.createElement('link'); script.rel = 'stylesheet'; script.type = 'text/css'; script.href = url; } head.appendChild(script); script.onload = function () { resolve(); }; }); }; export function downFile (url, saveName) { if (typeof url == 'object' && url instanceof Blob) { url = URL.createObjectURL(url); // 创建blob地址 } var aLink = document.createElement('a'); aLink.href = url; aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效 var event; if (window.MouseEvent) { event = new MouseEvent('click'); } else { event = document.createEvent('MouseEvents'); event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); } aLink.dispatchEvent(event); } export function extend () { var target = arguments[0] || {}; var deep = false; var arr = Array.prototype.slice.call(arguments); var i = 1; var options, src, key, copy; var isArray = false; if (typeof target === 'boolean') { deep = target; i++; target = arguments[1]; } for (; i < arr.length; i++) { // 循环传入的对象数组 if ((options = arr[i]) != null) { // 如果当前值不是null,如果是null不做处理 for (key in options) { // for in循环对象中key copy = options[key]; src = target[key]; // 如果对象中value值任然是一个引用类型 if (deep && (toString.call(copy) === '[object Object]' || (isArray = toString.call(copy) == '[object Array]'))) { if (isArray) { // 如果引用类型是数组 // 如果目标对象target存在当前key,且数据类型是数组,那就还原此值,如果不是就定义成一个空数组; src = toString.call(src) === '[object Array]' ? src : []; } else { // 如果目标对象target存在当前key,且数据类型是对象,那就还原此值,如果不是就定义成一个空对象; src = toString.call(src) === '[object Object]' ? src : {}; } // 引用类型就再次调用extend,递归,直到此时copy是一个基本类型的值。 target[key] = extend(deep, src, copy); } else if (copy !== undefined && copy !== src) { // 如果这个值是基本值类型,且不是undefined target[key] = copy; } } } } return target; } export function createObj (obj, bind) { let list = bind.split('.'); let first = list.splice(0, 1)[0]; let deep = {}; deep[first] = {}; if (list.length >= 2) { let start = '{'; let end = '}'; let result = ''; list.forEach(ele => { result = `${result}${start}"${ele}":`; }); result = `${result}""`; for (let i = 0; i < list.length; i++) { result = `${result}${end}`; } result = JSON.parse(result); deep[first] = result; } obj = extend(true, obj, deep); return obj; } export function dataURLtoFile (dataurl, filename) { let arr = dataurl.split(','); let mime = arr[0].match(/:(.*?);/)[1]; let bstr = atob(arr[1]); let n = bstr.length; let u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } return new File([u8arr], filename, { type: mime }); } export function findObject (list = [], value, prop = 'prop') { let result result = findNode(list, { value: prop }, value); if (!result) { list.forEach(ele => { if (ele.column) { if (!result) result = findNode(ele.column, { value: prop }, value); } else if (ele.children && CHILDREN_LIST.includes(ele.type)) { if (!result) result = findNode(ele.children.column, { value: prop }, value); } }) } return result; } /** * 生成随机数 */ export function randomId () { let $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; let maxPos = $chars.length; let id = ''; for (let i = 0; i < 16; i++) { id += $chars.charAt(Math.floor(Math.random() * maxPos)); } return id; } export const getObjType = obj => { var toString = Object.prototype.toString; var map = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regExp', '[object Undefined]': 'undefined', '[object Null]': 'null', '[object Object]': 'object' }; if (obj instanceof Element) { return 'element'; } return map[toString.call(obj)]; }; /** *判断是否为json对象 */ export const isJson = str => { if (Array.isArray(str)) { if (str[0] instanceof Object) { return true; } else { return false; } } else if (str instanceof Object) { return true; } return false; }; /** * 对象深拷贝 */ export const deepClone = data => { var type = getObjType(data); var obj; if (type === 'array') obj = []; else if (type === 'object') obj = {}; else return data; if (type === 'array') { for (var i = 0, len = data.length; i < len; i++) { data[i] = (() => { if (data[i] === 0) { return data[i]; } return data[i]; })(); if (data[i]) { delete data[i].$parent; } obj.push(deepClone(data[i])); } } else if (type === 'object') { for (var key in data) { if (data) { delete data.$parent; } obj[key] = deepClone(data[key]); } } return obj; }; /** * 设置px像素 */ export const setPx = (val, defval = '') => { if (validatenull(val)) val = defval; if (validatenull(val)) return ''; val = val + ''; if (val.indexOf('%') === -1) { val = val + 'px'; } return val; }; /** * 字符串数据类型转化 */ export const detailDataType = (value, type) => { if (validatenull(value)) return value if (type === 'number') { return Number(value); } else if (type === 'string') { return value + ''; } else { return value; } }; /** * 根据字典的value显示label */ export const getDicValue = (list, value, props = {}) => { let isArray = Array.isArray(value) value = isArray ? value : [value] let result = []; let labelKey = props[DIC_PROPS.label] || DIC_PROPS.label let groupsKey = props[DIC_PROPS.groups] || DIC_PROPS.groups let dic = deepClone(list); dic.forEach(ele => { if (ele[groupsKey]) { dic = dic.concat(ele[groupsKey]); delete ele[groupsKey]; } }); value.forEach(ele => { let obj = findNode(dic, props, ele) || {} result.push(obj[labelKey] || ele); }) if (isArray) { return result } else { return result.join('') } }; /** * 过滤字典翻译字段和空字段 */ export const filterParams = (form, list = ['', '$'], deep = true) => { let data = deep ? deepClone(form) : form for (let o in data) { if (list.includes('')) { if (validatenull(data[o])) delete data[o]; } if (list.includes('$')) { if (o.indexOf('$') !== -1) delete data[o]; } } return data }; /** * 根据值查找对应的序号 */ export const findArray = (list = [], value, valueKey = DIC_PROPS.value, index = false) => { let node; if (index) { node = list.findIndex(ele => ele[valueKey] == value) } else { node = list.find(ele => ele[valueKey] == value) } return node }; export const findNode = (list = [], props = {}, value) => { let valueKey = props.value || DIC_PROPS.value; let childrenKey = props.children || DIC_PROPS.children; let node; for (let i = 0; i < list.length; i++) { const ele = list[i] if (ele[valueKey] == value) { return ele } else if (ele[childrenKey] && Array.isArray(ele[childrenKey])) { let node = findNode(ele[childrenKey], props, value) if (node) return node } } return node } /** * 根据位数获取*密码程度 */ export const getPasswordChar = (result = '', char) => { let len = result.toString().length; result = ''; for (let i = 0; i < len; i++) { result = result + char; } return result; }; export const arraySort = (list = [], prop, callback) => { return list.filter(ele => !validatenull(ele[prop])).sort((a, b) => callback(a, b)).concat(list.filter(ele => validatenull(ele[prop]))); } export const clearVal = (obj, propList, list = [],propOption=[]) => { if (!obj) return {}; propList.forEach(ele => { for (var i=0 ;i<propOption.length; i++){ var item = propOption[i]; if (item.prop === ele&(item.display === false||item.disabled === true||item.readonly === true)){ return } } if (list.includes(ele)) return else if (ele.includes('$')) delete obj[ele] else if (!validatenull(obj[ele])) { let type = getObjType(obj[ele]) if (type === 'array') obj[ele] = []; else if (type === 'object') obj[ele] = {}; else if (['number', 'boolean'].includes(type)) obj[ele] = undefined; else obj[ele] = ''; } }); return obj; }; /** * 验证是否存在true/false */ export const validData = (val, dafult) => { if (typeof val === 'boolean') { return val; } return !validatenull(val) ? val : dafult; }; export const hasOwn = (args, i) => { return args.hasOwnProperty(args, i) };