123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343 |
- import { cloneDeep } from 'lodash';
- export const extractFileName = (str) => {
- if (/filename=([^;\s]*)/gi.test(str)) {
- return decodeURIComponent(RegExp.$1);
- }
- return '下载文件';
- };
- const typeColor = (type = 'default') => {
- let color = '';
- switch (type) {
- case 'default':
- color = '#35495E';
- break;
- case 'primary':
- color = '#3488ff';
- break;
- case 'success':
- color = '#43B883';
- break;
- case 'warning':
- color = '#e6a23c';
- break;
- case 'danger':
- color = '#f56c6c';
- break;
- default:
- break;
- }
- return color;
- };
- /**
- * LocalStorage
- */
- export const local = {
- set(table, settings) {
- const _set = JSON.stringify(settings);
- return localStorage.setItem('sop_' + table, _set);
- },
- get(table) {
- let data = localStorage.getItem('sop_' + table);
- try {
- data = JSON.parse(data);
- } catch (err) {
- return null;
- }
- return data;
- },
- remove(table) {
- return localStorage.removeItem('sop_' + table);
- },
- clear() {
- return localStorage.clear();
- },
- };
- /**
- * SessionStorage
- */
- export const session = {
- set(table, settings) {
- const _set = JSON.stringify(settings);
- return sessionStorage.setItem('sop_' + table, _set);
- },
- get(table) {
- let data = sessionStorage.getItem('sop_' + table);
- try {
- data = JSON.parse(data);
- } catch (err) {
- return null;
- }
- return data;
- },
- remove(table) {
- return sessionStorage.removeItem('sop_' + table);
- },
- clear() {
- return sessionStorage.clear();
- },
- };
- export const clear = () => {
- localStorage.clear();
- sessionStorage.clear();
- };
- /**
- * CookieStorage
- */
- export const cookie = {
- set(name, value, config = {}) {
- const cfg = {
- expires: null,
- path: null,
- domain: null,
- secure: false,
- httpOnly: false,
- ...config,
- };
- let cookieStr = `${name}=${escape(value)}`;
- if (cfg.expires) {
- const exp = new Date();
- exp.setTime(exp.getTime() + parseInt(cfg.expires) * 1000);
- cookieStr += `;expires=${exp.toGMTString()}`;
- }
- if (cfg.path) {
- cookieStr += `;path=${cfg.path}`;
- }
- if (cfg.domain) {
- cookieStr += `;domain=${cfg.domain}`;
- }
- document.cookie = cookieStr;
- },
- get(name) {
- const arr = document.cookie.match(new RegExp(`(^| )${name}=([^;]*)(;|$)`));
- if (arr != null) {
- return unescape(arr[2]);
- }
- return null;
- },
- remove(name) {
- const exp = new Date();
- exp.setTime(exp.getTime() - 1);
- document.cookie = `${name}=;expires=${exp.toGMTString()}`;
- },
- };
- /* Fullscreen */
- export const screen = (element) => {
- const isFull = !!(
- document.webkitIsFullScreen ||
- document.mozFullScreen ||
- document.msFullscreenElement ||
- document.fullscreenElement
- );
- if (isFull) {
- if (document.exitFullscreen) {
- document.exitFullscreen();
- } else if (document.msExitFullscreen) {
- document.msExitFullscreen();
- } else if (document.mozCancelFullScreen) {
- document.mozCancelFullScreen();
- } else if (document.webkitExitFullscreen) {
- document.webkitExitFullscreen();
- }
- } else if (element.requestFullscreen) {
- element.requestFullscreen();
- } else if (element.msRequestFullscreen) {
- element.msRequestFullscreen();
- } else if (element.mozRequestFullScreen) {
- element.mozRequestFullScreen();
- } else if (element.webkitRequestFullscreen) {
- element.webkitRequestFullscreen();
- }
- };
- /* 复制对象 */
- export const objCopy = (obj) => {
- if (obj === undefined) {
- return undefined;
- }
- return JSON.parse(JSON.stringify(obj));
- };
- export const generateId = function () {
- return Math.floor(
- Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000
- );
- };
- /* 日期格式化 */
- export const dateFormat = (
- date,
- fmt = 'yyyy-MM-dd hh:mm:ss',
- isDefault = '-'
- ) => {
- if (date.toString().length === 10) {
- date *= 1000;
- }
- date = new Date(date);
- if (date.valueOf() < 1) {
- return isDefault;
- }
- const o = {
- 'M+': date.getMonth() + 1, // 月份
- 'd+': date.getDate(), // 日
- 'h+': date.getHours(), // 小时
- 'm+': date.getMinutes(), // 分
- 's+': date.getSeconds(), // 秒
- 'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
- 'S': date.getMilliseconds(), // 毫秒
- };
- if (/(y+)/.test(fmt)) {
- fmt = fmt.replace(
- RegExp.$1,
- `${date.getFullYear()}`.substr(4 - RegExp.$1.length)
- );
- }
- for (const k in o) {
- if (new RegExp(`(${k})`).test(fmt)) {
- fmt = fmt.replace(
- RegExp.$1,
- RegExp.$1.length === 1 ? o[k] : `00${o[k]}`.substr(`${o[k]}`.length)
- );
- }
- }
- return fmt;
- };
- /* 千分符 */
- export const groupSeparator = (num) => {
- num += '';
- if (!num.includes('.')) {
- num += '.';
- }
- return num
- .replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
- return `${$1},`;
- })
- .replace(/\.$/, '');
- };
- export const capsule = (title, info, type = 'primary') => {
- console.log(
- `%c ${title} %c ${info} %c`,
- 'background:#35495E; padding: 1px; border-radius: 3px 0 0 3px; color: #fff;',
- `background:${typeColor(
- type
- )}; padding: 1px; border-radius: 0 3px 3px 0; color: #fff;`,
- 'background:transparent'
- );
- };
- export const download = (res, downName = '') => {
- const aLink = document.createElement('a');
- let fileName = downName;
- let blob = res; // 第三方请求返回blob对象
- // 通过后端接口返回
- if (res.headers && res.data) {
- blob = new Blob([res.data], {
- type: res.headers['content-type'].replace(';charset=utf8', ''),
- });
- if (!downName) {
- fileName = extractFileName(res.headers?.['content-disposition']);
- }
- }
- aLink.href = URL.createObjectURL(blob);
- // 设置下载文件名称
- aLink.setAttribute('download', fileName);
- document.body.appendChild(aLink);
- aLink.click();
- document.body.removeChild(aLink);
- URL.revokeObjectURL(aLink.href);
- };
- /**
- * 对象转url参数
- * @param {*} data
- * @param {*} isPrefix
- */
- export const httpBuild = (data, isPrefix = false) => {
- const prefix = isPrefix ? '?' : '';
- const _result = [];
- for (const key in data) {
- const value = data[key];
- // 去掉为空的参数
- if (['', undefined, null].includes(value)) {
- continue;
- }
- if (value.constructor === Array) {
- value.forEach((_value) => {
- _result.push(
- `${encodeURIComponent(key)}[]=${encodeURIComponent(_value)}`
- );
- });
- } else {
- _result.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
- }
- }
- return _result.length ? prefix + _result.join('&') : '';
- };
- export const getRequestParams = (url) => {
- const theRequest = new Object();
- if (url.indexOf('?') != -1) {
- const params = url.split('?')[1].split('&');
- for (let i = 0; i < params.length; i++) {
- const param = params[i].split('=');
- theRequest[param[0]] = decodeURIComponent(param[1]);
- }
- }
- return theRequest;
- };
- export const getTreeList = (oldDataList, sortField = '') => {
- if (!Array.isArray(oldDataList)) {
- throw new TypeError(`${oldDataList}不是数组`);
- }
- const dataList = cloneDeep(oldDataList);
- const formatObj = dataList.reduce((pre, cur) => {
- return { ...pre, [cur.id]: cur };
- }, {});
- const sortArray = sortField
- ? dataList.sort((a, b) => a.sort - b.sort)
- : dataList;
- const formatArray = sortArray.reduce((arr, cur) => {
- const pid = cur.parentId ? cur.parentId : '-1';
- const parent = formatObj[pid];
- if (parent) {
- parent.children ? parent.children.push(cur) : (parent.children = [cur]);
- } else {
- arr.push(cur);
- }
- return arr;
- }, []);
- return formatArray;
- };
- /**
- * 将一维数组转换为二维数组
- * @param {*} arr
- * @returns
- */
- export const toSecondFloorArray = (arr) => {
- if (!Array.isArray(arr)) {
- throw new TypeError(`${arr}不是数组`);
- }
- const newArr = arr.reduce((initArr, item, index) => {
- if (index % 2 == 0) {
- initArr.push([item]);
- } else {
- initArr[initArr.length - 1].push(item);
- }
- return initArr;
- }, []);
- return newArr;
- };
|