cdt-cli
Version:
A simple CLI for creating your projects
264 lines (248 loc) • 6.52 kB
JavaScript
/* eslint-disable */
/**
* 存储localStorage
*/
export const setStore = (name, content) => {
if (!name) return;
if (typeof content !== "string") {
content = JSON.stringify(content);
}
window.localStorage.setItem(name, content);
};
/**
* 获取localStorage
*/
export const getStore = name => {
if (!name) return;
return window.localStorage.getItem(name);
};
/**
* 移除localStorage
*/
export const removeStore = name => {
if (!name) return;
window.localStorage.removeItem(name);
};
/**
* 删除数组某个元素
* @param {Array} arr
* @param {Function} func
* 用法 :
* removeArray(arr, n => n != id)
* arr是操作的数组,id是要删除的元素,返回最新的数组
*/
export const removeArray = (arr, func) => {
return Array.isArray(arr)
? arr.filter(func).reduce((acc, val) => {
arr.splice(arr.indexOf(val), 1);
return acc.concat(val);
}, [])
: [];
};
/**
* 对象数组根据某个属性去重
* @param {Array} arr
* @param {String} key
*/
export const removeDuplicate = (array, key) => {
let hash = {};
array = array.reduce(function(arr, current) {
hash[current[key]] ? "" : (hash[current[key]] = true && arr.push(current));
return arr;
}, []);
return array;
};
/**
* 数组包含
* @param {Array} a 主
* @param {Array} b 次
*/
export const isIncludes = (a, b) => {
const s = new Set(b);
return a.filter(x => s.has(x)).length == b.length;
};
/**
* 数组交集
* @param {*} arr 主
* @param {*} values 次
*/
export const similarity = (arr, values) => arr.filter(v => values.includes(v));
/**
* 获取当前时间
*/
export const getCurrentTime = () => {
let now = new Date();
let year = now.getFullYear(); //年
let month = now.getMonth() + 1; //月
let day = now.getDate(); //日
let hh = now.getHours(); //时
let mm = now.getMinutes(); //分
let ss = now.getSeconds(); //分
let clock = year + "-";
if (month < 10) clock += "0";
clock += month + "-";
if (day < 10) clock += "0";
clock += day + " ";
if (hh < 10) clock += "0";
clock += hh + ":";
if (mm < 10) clock += "0";
clock += mm + ":";
if (ss < 10) clock += "0";
clock += ss;
return clock;
};
/**
* 深度克隆对象
* @param {Object} obj
*/
export const deepClone = obj => {
let _tmp, result;
_tmp = JSON.stringify(obj);
result = JSON.parse(_tmp);
return result;
};
/**
* 数组比较
* @param {*} a
* @param {*} b
* difference([1,2,3], [1,2]) -> [3]
*/
export const difference = (a, b) => {
const s = new Set(b);
return a.filter(x => !s.has(x));
};
// 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
export const sheet2blob = (sheet, sheetName) => {
sheetName = sheetName || "sheet1";
let workbook = {
SheetNames: [sheetName],
Sheets: {}
};
workbook.Sheets[sheetName] = sheet;
// 生成excel的配置项
let wopts = {
bookType: "xls", // 要生成的文件类型
bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
type: "binary"
};
let wbout = XLSX.write(workbook, wopts);
let blob = new Blob([s2ab(wbout)], {
type: "application/octet-stream"
});
// 字符串转ArrayBuffer
function s2ab(s) {
let buf = new ArrayBuffer(s.length);
let view = new Uint8Array(buf);
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
return buf;
}
return blob;
};
/**
* 通用的打开下载对话框方法,没有测试过具体兼容性
* @param url 下载地址,也可以是一个blob对象,必选
* @param saveName 保存文件名,可选
*/
export const openDownloadDialog = (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);
};
/**
* 下载excel - xls格式
* @param {*} aoa [['表头1', '表头2', ‘表头3’], ['第二列1', '第二列2', '第二列3'], ['第三列1', '第三列2', ’第三列3‘]]
* @param {*} title 标题
*/
export const tableToXls = (aoa, title) => {
let sheet = XLSX.utils.aoa_to_sheet(aoa);
openDownloadDialog(sheet2blob(sheet), `${title}.xls`);
};
/**
* 树形数据转换
* @param {*} data
* @param {*} id
* @param {*} pid
*/
export function treeDataTranslate(data, id = "id", pid = "parentId") {
// console.log("data", data);
var res = [];
var temp = {};
for (var i = 0; i < data.length; i++) {
temp[data[i][id]] = data[i];
}
for (var k = 0; k < data.length; k++) {
if (temp[data[k][pid]] && data[k][id] !== data[k][pid]) {
if (!temp[data[k][pid]]["children"]) {
temp[data[k][pid]]["children"] = [];
}
if (!temp[data[k][pid]]["_level"]) {
temp[data[k][pid]]["_level"] = 1;
}
data[k]["_level"] = temp[data[k][pid]]._level + 1;
temp[data[k][pid]]["children"].push(data[k]);
} else {
res.push(data[k]);
}
}
return res;
}
/**
* 提取汉字
*/
export function getChinese(str) {
if (str != null && str != "") {
var reg = /[\u4e00-\u9fa5]/g;
return str.match(reg) ? str.match(reg).join('') : ''
} else {
return "";
}
}
/**
* 把菜单栏改成联动选择
* @param {*} arr - 所有菜单
* @param {*} selected - 已选菜单
*/
export function menuToSelect(arr, selected) {
for (let i = 0; i < arr.length; i++) {
if (arr[i].childrenNode && arr[i].childrenNode.length > 0 && arr[i].data.cdlj === null) {
arr[i].children = arr[i].childrenNode
arr[i].childrenNode = this.menuToSelect(arr[i].childrenNode, selected);
}
if (arr[i].data) {
arr[i].label = arr[i].data.mkmc
arr[i].value = arr[i].data
if (selected.indexOf(arr[i].data.mkmc) != -1) {
arr[i].disabled = true
} else {
arr[i].disabled = false
}
}
}
return arr;
}