| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528 |
- import CryptoJS from "crypto-js";
- import CityLinkageJson from "@/components/ma-cityLinkage/lib/city.json";
- /**
- * 根据类型获取颜色
- */
- 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;
- };
- const tool = {};
- /**
- * LocalStorage
- */
- tool.local = {
- set(table, settings) {
- let _set = JSON.stringify(settings);
- return localStorage.setItem(table, _set);
- },
- get(table) {
- let data = localStorage.getItem(table);
- try {
- data = JSON.parse(data);
- } catch (err) {
- return null;
- }
- return data;
- },
- remove(table) {
- return localStorage.removeItem(table);
- },
- clear() {
- return localStorage.clear();
- },
- };
- /**
- * SessionStorage
- */
- tool.session = {
- set(table, settings) {
- let _set = JSON.stringify(settings);
- return sessionStorage.setItem(table, _set);
- },
- get(table) {
- let data = sessionStorage.getItem(table);
- try {
- data = JSON.parse(data);
- } catch (err) {
- return null;
- }
- return data;
- },
- remove(table) {
- return sessionStorage.removeItem(table);
- },
- clear() {
- return sessionStorage.clear();
- },
- };
- /**
- * CookieStorage
- */
- tool.cookie = {
- set(name, value, config = {}) {
- var cfg = {
- expires: null,
- path: null,
- domain: null,
- secure: false,
- httpOnly: false,
- ...config,
- };
- var cookieStr = `${name}=${escape(value)}`;
- if (cfg.expires) {
- var 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) {
- var arr = document.cookie.match(
- new RegExp("(^| )" + name + "=([^;]*)(;|$)")
- );
- if (arr != null) {
- return unescape(arr[2]);
- } else {
- return null;
- }
- },
- remove(name) {
- var exp = new Date();
- exp.setTime(exp.getTime() - 1);
- document.cookie = `${name}=;expires=${exp.toGMTString()}`;
- },
- };
- /**
- * 全屏操作
- */
- tool.screen = (element) => {
- let 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();
- }
- }
- };
- /**
- * 获取设备信息
- */
- tool.getDevice = function () {
- const hasTouchScreen =
- "ontouchstart" in window || navigator.maxTouchPoints > 0;
- const isSmallScreen = window.innerWidth < 768;
- if (hasTouchScreen && isSmallScreen) {
- return "mobile";
- } else {
- return "desktop";
- }
- };
- /**
- * 处理图片
- */
- tool.parseImage = (url) => {
- if (url === undefined) {
- return import.meta.env.VITE_APP_BASE + "not-image.png";
- }
- if (typeof url === "string" && url !== null) {
- return url;
- } else {
- if (url !== null) {
- return url[0];
- } else {
- return import.meta.env.VITE_APP_BASE + "not-image.png";
- }
- }
- };
- /**
- * 城市代码翻译成名称
- */
- tool.cityToCode = function (
- province,
- city = undefined,
- area = undefined,
- split = " / "
- ) {
- try {
- let provinceData = CityLinkageJson.filter(
- (item) => province == item.code
- )[0];
- if (!city) {
- return provinceData.name;
- }
- let cityData = provinceData.children.filter((item) => city == item.code)[0];
- if (!area) {
- return [provinceData.name, cityData.name].join(split);
- }
- let areaData = cityData.children.filter((item) => area == item.code)[0];
- return [provinceData.name, cityData.name, areaData.name].join(split);
- } catch (e) {
- return "";
- }
- };
- /**
- * 复制对象
- */
- tool.objCopy = (obj) => {
- if (obj === undefined) {
- return undefined;
- }
- return JSON.parse(JSON.stringify(obj));
- };
- /**
- * 生车随机id
- */
- tool.generateId = function () {
- return Math.floor(
- Math.random() * 100000 + Math.random() * 20000 + Math.random() * 5000
- );
- };
- /**
- * 日期格式化
- */
- tool.dateFormat = (date, fmt = "yyyy-MM-dd hh:mm:ss", isDefault = "-") => {
- if (date.toString().length == 10) {
- date = date * 1000;
- }
- date = new Date(date);
- if (date.valueOf() < 1) {
- return isDefault;
- }
- let 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 (let 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;
- };
- /**
- * 千分符
- */
- tool.groupSeparator = (num) => {
- num = num + "";
- if (!num.includes(".")) {
- num += ".";
- }
- return num
- .replace(/(\d)(?=(\d{3})+\.)/g, function ($0, $1) {
- return $1 + ",";
- })
- .replace(/\.$/, "");
- };
- /**
- * md5加密
- */
- tool.md5 = (str) => {
- return CryptoJS.MD5(str).toString();
- };
- /**
- * Base64加密解密
- */
- tool.base64 = {
- encode(data) {
- return CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(data));
- },
- decode(cipher) {
- return CryptoJS.enc.Base64.parse(cipher).toString(CryptoJS.enc.Utf8);
- },
- };
- /**
- * AES加密解密
- */
- tool.aes = {
- encode(data, secretKey) {
- const result = CryptoJS.AES.encrypt(
- data,
- CryptoJS.enc.Utf8.parse(secretKey),
- {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- }
- );
- return result.toString();
- },
- decode(cipher, secretKey) {
- const result = CryptoJS.AES.decrypt(
- cipher,
- CryptoJS.enc.Utf8.parse(secretKey),
- {
- mode: CryptoJS.mode.ECB,
- padding: CryptoJS.pad.Pkcs7,
- }
- );
- return CryptoJS.enc.Utf8.stringify(result);
- },
- };
- /**
- * 打印信息
- */
- tool.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"
- );
- };
- /**
- * 文件大小单位处理
- */
- tool.formatSize = (size) => {
- if (typeof size == "undefined") {
- return "0";
- }
- let units = ["B", "KB", "MB", "GB", "TB", "PB"];
- let index = 0;
- for (let i = 0; size >= 1024 && i < 5; i++) {
- size /= 1024;
- index = i;
- }
- return Math.round(size, 2) + units[index];
- };
- /**
- * 下载资源
- */
- tool.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) {
- const contentDisposition = decodeURI(res.headers["content-disposition"]);
- const result = contentDisposition.match(/filename=\"(.+)/gi);
- fileName = result[0].replace(/filename=\"/gi, "");
- fileName = fileName.replace('"', "");
- }
- }
- 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
- */
- tool.httpBuild = (data, isPrefix = false) => {
- let prefix = isPrefix ? "?" : "";
- let _result = [];
- for (let key in data) {
- let 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("&") : "";
- };
- /**
- * 获取URL请求参数
- */
- tool.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;
- };
- tool.attachUrl = (path) => {
- // 非完整url地址在此处理
- return path;
- };
- tool.viewImage = (path) => {
- // 非完整url地址在此处理
- return path;
- };
- tool.showFile = (path) => {
- // 非完整url地址在此处理
- return path;
- };
- /**
- * 获取token
- */
- tool.getToken = () => {
- return tool.local.get(import.meta.env.VITE_APP_TOKEN_PREFIX);
- };
- /**
- * 转Unix时间戳
- */
- tool.toUnixTime = (date) => {
- return Math.floor(new Date(date).getTime() / 1000);
- };
- /**
- * 通过value获取颜色
- */
- tool.getColor = (value, data, colors = []) => {
- if (!data) {
- return "";
- }
- if (colors && colors.length > 0) {
- const index = data.findIndex((item) => item.value == value);
- return colors[index] ?? "";
- } else {
- const item = data.find((item) => item.value == value);
- return item?.color ?? "";
- }
- };
- /**
- * 通过value获取label
- */
- tool.getLabel = (value, data) => {
- if (!data) {
- return "";
- }
- const item = data.find((item) => item.value == value);
- return item?.label ?? "";
- };
- /**
- * 复制文本到剪贴板
- */
- tool.copy = (text) => {
- if (navigator.clipboard && window.isSecureContext) {
- // 现代浏览器支持 navigator.clipboard API
- return navigator.clipboard.writeText(text);
- } else {
- // 兼容旧浏览器
- const textArea = document.createElement("textarea");
- textArea.value = text;
- textArea.style.position = "fixed";
- textArea.style.left = "-999999px";
- textArea.style.top = "-999999px";
- document.body.appendChild(textArea);
- textArea.focus();
- textArea.select();
- return new Promise((resolve, reject) => {
- if (document.execCommand("copy")) {
- resolve();
- } else {
- reject();
- }
- document.body.removeChild(textArea);
- });
- }
- };
- export default tool;
|