@varonervar/components
Version:
> 基于[Element-UI](https://element.eleme.cn/#/zh-CN/component/quickstart) 封装常用组件,部分组件参考[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
75 lines (66 loc) • 2.42 kB
JavaScript
import "core-js/modules/es.array.includes.js";
/**
* 检测数据类型
* @param {any} target 目标数据
*/
export const typeCheck = target => Object.prototype.toString.call(target).slice(8, -1);
/**
* @param {string} path
* @returns {Boolean}
*/
export default function isExternal(path) {
return /^(https?:|mailto:|tel:)/.test(path);
}
/**
* This is just a simple version of deep copy
* Has a lot of edge cases bug
* If you want to use a perfect deep copy, use lodash's _.cloneDeep
* @param {Object} source 源对象
* @returns {Object} 克隆对象
*/
export function deepClone(source) {
if (!['Array', 'Object'].includes(typeCheck(source))) {
return source;
}
const targetObj = source.constructor();
Object.keys(source).forEach(keys => {
if (['Array', 'Object'].includes(typeCheck(source[keys]))) {
targetObj[keys] = deepClone(source[keys]);
} else {
targetObj[keys] = source[keys];
}
});
return targetObj;
} // 判断值是否不存在, 提交数据时,存在值为false或0的情况
export const isFalse = data => {
return data == null || data === '';
}; // 业务函数:检查组件的rule用change还是blur
export function changeRuleItems(type) {
return ['radio', 'select', 'datePicker', 'checkbox', 'cascader', 'timePicker'].includes(type);
} // 业务函数:检查时间是不是范围选择
export function editFormDateIsRange(item) {
return item.template === 'datePicker' && ['daterange', 'datetimerange'].includes(item.type);
} // 业务函数:检查编辑组件的是否初始赋值数组
export function editFormatIsArr(item) {
// 如果有指定是数组,则返回数组
if (item.valIsArr) return true;
const selectMul = item.template === 'select' && item.bind && item.bind.multiple;
const dateMul = editFormDateIsRange(item);
const timeMul = item.template === 'timePicker' && item.isRange;
return ['checkbox', 'cascader'].includes(item.template) || selectMul || dateMul || timeMul;
} // 业务函数:json数据处理, condition与form
export function ajaxDataDispose(DATA) {
if (typeCheck(DATA) !== 'Object') return DATA;
const result = {};
Object.keys(DATA).forEach(key => {
if (key.includes(',')) {
const data = DATA[key] || [];
key.split(',').forEach((k, i) => {
result[k] = data[i];
});
} else {
result[key] = DATA[key];
}
});
return result;
}