import router from “@/router”;
import Vue from “vue”;
import { myMessage } from ‘./resetMessage’;
import { newFileUpload } from “@/api/common”;
// 防抖
export const debounce = (fn, delay) => {
let timer = null;
return function () {
if (timer) {
clearTimeout(timer);
}
timer = setTimeout(() => {
fn.apply(this, arguments);
}, delay);
};
};
// 节流
export function throttle(fn, delay) {
let flag = true;
return function () {
if (!flag) {
return;
}
setTimeout(() => {
fn.apply(this, arguments);
flag = true;
}, delay);
flag = false;
};
}
// 递归
export function getLastLevelNodes(treeArray) {
let result = [];
function traverse(node, level) {
if (!node.children || node.children.length === 0) {
result.push({ …node, level });
} else {
node.children.forEach(child => traverse(child, level + 1));
}
}
treeArray.forEach(node => traverse(node, 1));
return result;
}
// 递归遍历每一级区域code并获取下级区域节点,实现级联回显
export function mapCode(superiorCode, nodes, index, getAreaSelectList) {
if (superiorCode && superiorCode.length) {
getAreaSelectList({
superiorCode: superiorCode[index],
}).then((res) => {
let filterItem = nodes.filter(
(item) => item.code === superiorCode[index]
);
if (res.data?.length) {
this.KaTeX parse error: Expected 'EOF', got '}' at position 55: … || []); }̲ else { …set(filterItem[0], “leaf”, true);
}
if (index < superiorCode.length - 1) {
index++;
this.mapCode(superiorCode, filterItem[0].children, index);
}
});
}
}
// b64Data–>传入加密的数据进行解密
export function unzip(b64Data) {
const pako = require(“pako”);
let strData = atob(b64Data);
// 将二进制字符串转换为字符数数组
const charData = strData.split(“”).map(function (x) {
return x.charCodeAt(0);
});
// 将数字数组转换为字节数组
const binData = new Uint8Array(charData);
// // unzip
const data = pako.inflate(binData);
// 将gunzipped byteArray转换回ascii字符串:
strData = arrayBufferToString(new Uint16Array(data));
return decodeURIComponent(escape(strData));
}
// 加密
export function zip(str) {
const pako = require(“pako”);
// const binaryString = pako.gzip(str, { to: ‘string’ })
// return btoa(binaryString)
// 将字符串转换为UTF-8编码的字节数组
var utf8Encoder = new TextEncoder();
var data = utf8Encoder.encode(str);
// 使用pako.js进行gzip压缩
var compressedData = pako.gzip(data);
// 将压缩后的数据转换为Base64编码的字符串
return btoa(String.fromCharCode.apply(null, compressedData));
}
function arrayBufferToString(buffer) {
var bufView = new Uint16Array(buffer);
var length = bufView.length;
var result = “”;
var addition = Math.pow(2, 16) - 1;
for (var i = 0; i < length; i += addition) {
if (i + addition > length) {
addition = length - i;
}
result += String.fromCharCode.apply(
null,
bufView.subarray(i, i + addition)
);
}
return result;
}
// 导出
export function exportFilep(url, params, filename,num) {
return new Promise((resolve, reject) => {
const axios = require(“axios”);
const { getCookies } = require(“@/utils/auth”);
const baseUrl = process.env.VUE_APP_BASE_API;
url = baseUrl + url;
axios
.post(url, params, {
responseType: “blob”,
headers: {
Authorization: getCookies(“token”),
},
})
.then((res) => {
const aLink = document.createElement(“a”);
let reader = new FileReader();
reader.readAsText(res.data, “utf-8”);
reader.onload = function () {
if (reader.result.length > 100) {
aLink.href = URL.createObjectURL(res.data);
if (num) {
aLink.download =
(filename ||
decodeURI(
res.headers["content-disposition"].split("filename=")[1]
))+'.xlsx';
}else{
aLink.download =
filename ||
decodeURI(
res.headers["content-disposition"].split("filename=")[1]
);
}
aLink.click();
URL.revokeObjectURL(url);
}
resolve();
};
})
.catch((err) => {
reject(err);
});
});
}
// 导出
export function exportFile(url, params, filename) {
return new Promise((resolve, reject) => {
const axios = require(“axios”);
const { getCookies } = require(“@/utils/auth”);
const baseUrl = process.env.VUE_APP_BASE_API;
url = baseUrl + url;
axios({
method: ‘get’,
url: url,
params,
responseType: ‘blob’,
headers: {
Authorization: getCookies(“token”)
},
}).then(res=>{
console.log(res,‘rrrr’);
const aLink = document.createElement(“a”);
let reader = new FileReader();
reader.readAsText(res.data, “utf-8”);
reader.onload = function () {
if (reader.result.length > 100) {
aLink.href = URL.createObjectURL(res.data);
aLink.download =
filename ||
decodeURI(
res.headers[“content-disposition”].split(“filename=”)[1]
);
aLink.click();
URL.revokeObjectURL(url);
}
resolve();
};
}).catch((err) => {
reject(err);
});
});
}
function getNum(len, radix) {
const chars = “0123456789”.split(“”);
let uuid = [],
i;
radix = radix || chars.length;
if (len) {
for (i = 0; i < len; i++) {
uuid[i] = chars[0 | (Math.random() * radix)];
}
}
return uuid.join(“”);
}
// 上传文件
export function uploadFile(f , fileName, client,minioInfo) {
// try {
// const axios = require("axios");
const formData = new FormData();
formData.append('file', f);
// // // 使用axios发送请求
// // axios({
// // url: process.env.VUE_APP_BASE_API + '/resource/file/upload',
// // method: 'POST',
// // data: formData
// // })
// // .then(response => {
// // console.log(response)
// // })
// // .catch(error => {
// // console.error(error);
// // });
// return new Promise((resolve, reject) => {
// })
return newFileUpload(formData).then(res => {
console.log(res,'/**/**/*/*')
// resolve(res.data)
if(res.code == 200){
return res.data
}
console.log(res.message)
throw new Error(res.message)
}).catch(err => {
console.log(err)
myMessage({
message: err?.message || "上传失败",
type: "error",
duration: 5 * 1000,
});
})
// let suffix = fileName.substr(fileName.lastIndexOf("."));
// let num = getNum(6, 10);
// let storeAs = suffix.substr(1) + "/" + new Date() * 1 + "/" + num + suffix;
// let reader = new FileReader();
// reader.readAsArrayBuffer(f);
// return new Promise((resolve, reject) => {
// reader.onload = function (e) {
// let res = e.target.result;//ArrayBuffer
// let buf = Buffer.from(res);//Buffer
// const metaData = {
// 'content-type': f.type,
// 'content-length': f.size
// }
// console.log(client,'this.$ossClientthis.$ossClientthis.$ossClient2222');
// return client?.putObject(minioInfo.bucket, storeAs, buf, f.size, metaData,function (err, data) {
// if (err){
// myMessage({
// message: err,
// type: "error",
// duration: 5 * 1000,
// });
// }else{
// let obj = {};
// obj.fileKey = storeAs;
// obj.originalName = fileName
// let urls=minioInfo.endPoint.indexOf("//")>0?minioInfo.endPoint:('http://'+minioInfo.endPoint)
// obj.url = `${urls}:${minioInfo.port}/${minioInfo.bucket}/${storeAs}`;
// resolve(obj)
// }
// });
// }
// })
// } catch (e) {
// }
}
// 深拷贝
export function deepCopy(obj = {}) {
let newobj = null;
//判断是否需要继续进行递归
if (typeof obj == “object” && obj !== null) {
newobj = obj instanceof Array ? [] : {};
//进行下一层递归克隆
for (var i in obj) {
newobj[i] = deepCopy(obj[i]);
}
//如果不是对象直接赋值
} else newobj = obj;
return newobj;
}
// qs
export const qs=(obj,flag)=>{
const ar=[]
Object.keys(obj).forEach(key=>{
const v=obj[key]
if(flag){
if(typeof v!==‘undefined’ && v!null && v!‘’){
ar.push(key+‘=’+v)
}
}else{
ar.push(key+‘=’+(v||‘’))
}
})
return ar.join(‘&’)
}
// 每三位以‘逗号’隔开
export function toThousands(n) {
let number = Number(n)
let num = null
let floatNum = null
if(String(number).includes(‘.’)) {
const splitArr = String(number).split(‘.’)
num = splitArr[0]
floatNum = splitArr[1]
} else num = number
const arr = [];
while (num >= 1000) {
arr.push((num % 1000).toString().padStart(3, ‘0’)); // 00x,0xx时取模时0会消失,用padStart补齐0
num = Math.floor(num / 1000)
}
arr.push(num)
return floatNum > 0 ? arr.reverse().join(‘,’)+ .${floatNum}
: arr.reverse().join(‘,’);
}
/*
-
跳转页面
-
@Description: 主系统会有多个子系统菜单,为了跳转到当前系统下的相应菜单
-
this.menuProjectId 拼接了路由前面的项目id
/
export function goToSystemPath(path, route) {
var reg = /[1-9][0-9]/g
const pathUrl = route.match(reg) || []
let menuProjectId = pathUrl.length ? pathUrl[0] : undefined
const p = menuProjectId ?/${menuProjectId}${path}
: path
router.push§
}//度°分′秒″转度
export function ToDigital(strDu, strFen, strMiao, len) {
len = (len > 6 || typeof (len) == “undefined”) ? 6 : len;//精确到小数点后最多六位
strDu = (typeof (strDu) == “undefined” || strDu == “”) ? 0 : parseFloat(strDu);
strFen = (typeof (strFen) == “undefined” || strFen == “”) ? 0 : parseFloat(strFen) / 60;
strMiao = (typeof (strMiao) == “undefined” || strMiao == “”) ? 0 : parseFloat(strMiao) / 3600;
var digital = strDu + strFen + strMiao;
if (digital == 0) {
return “”;
} else {
return digital.toFixed(len);
}
}
//度转度°分′秒″
export function ToDegrees(val) {
if (typeof (val) == “undefined” || val == “”) {
return “”;
}
var i = val.indexOf(‘.’);
var strDu = i < 0 ? val : val.substring(0, i);//获取度
var strFen = 0;
var strMiao = 0;
if (i > 0) {
var strFen = “0” + val.substring(i);
strFen = strFen * 60 + “”;
i = strFen.indexOf(‘.’);
if (i > 0) {
strMiao = “0” + strFen.substring(i);
strFen = strFen.substring(0, i);//获取分
strMiao = strMiao * 60 + “”;
i = strMiao.indexOf(‘.’);
strMiao = strMiao.substring(0, i + 5);//取到小数点后面三位
strMiao = parseFloat(strMiao).toFixed(2);//精确小数点后面两位
}
}
return strDu + “,” + strFen + “,” + strMiao;
}