2024-04-17 11:15:49 +08:00
|
|
|
|
|
2024-03-22 15:48:25 +08:00
|
|
|
|
import router from '@/router'
|
|
|
|
|
import { isString, isHtmlElement } from './types'
|
|
|
|
|
import UtilVar from "@/config/UtilVar";
|
|
|
|
|
export const returnWeek = () => {
|
|
|
|
|
var week = new Date().getDay();
|
|
|
|
|
switch (week) {
|
|
|
|
|
case 1:
|
|
|
|
|
return '周一'
|
|
|
|
|
case 2:
|
|
|
|
|
return '周二'
|
|
|
|
|
case 3:
|
|
|
|
|
return '周三'
|
|
|
|
|
case 4:
|
|
|
|
|
return '周四'
|
|
|
|
|
case 5:
|
|
|
|
|
return '周五'
|
|
|
|
|
case 6:
|
|
|
|
|
return '周六'
|
|
|
|
|
case 0:
|
|
|
|
|
return '周日'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取uuid
|
|
|
|
|
*/
|
|
|
|
|
export function getUUID() {
|
|
|
|
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
|
|
|
|
|
return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 是否有权限
|
|
|
|
|
* @param {*} key
|
|
|
|
|
*/
|
|
|
|
|
export function isAuth(key) {
|
|
|
|
|
// console.log("key",key,sessionStorage.getItem('permissions'))
|
|
|
|
|
return JSON.parse(sessionStorage.getItem('permissions') || '[]').indexOf(key) !== -1 || false
|
|
|
|
|
}
|
|
|
|
|
export const rowClassName = ({ row, rowIndex }) => {
|
|
|
|
|
if (rowIndex % 2 == 0) {
|
|
|
|
|
return 'lightColour';
|
|
|
|
|
} else {
|
|
|
|
|
return 'DarkColor';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const getToken = () => {
|
|
|
|
|
return localStorage.getItem("token");
|
|
|
|
|
}
|
|
|
|
|
//跳转当前页面并传参
|
|
|
|
|
export const currentQuery = (param) => {
|
|
|
|
|
let newParam = { ...param }
|
|
|
|
|
for (let i in newParam) {
|
|
|
|
|
if (newParam[i] === "") {
|
|
|
|
|
delete newParam[i]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// console.log(newParam)
|
|
|
|
|
router.push({
|
|
|
|
|
path: router.currentRoute.path,
|
|
|
|
|
query: newParam
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 树形数据转换
|
|
|
|
|
* @param {*} data
|
|
|
|
|
* @param {*} id
|
|
|
|
|
* @param {*} pid
|
|
|
|
|
* @param {*} order
|
|
|
|
|
*/
|
|
|
|
|
export function treeDataTranslate(data, id, pid, order) {
|
|
|
|
|
// console.log(Array.isArray(data))
|
|
|
|
|
if (data == null || !Array.isArray(data)) {
|
|
|
|
|
return [];
|
|
|
|
|
}
|
|
|
|
|
if (order) {
|
|
|
|
|
data.sort(function (a, b) {
|
|
|
|
|
return a[order] - b[order];
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
// console.log(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]]['subs']) {
|
|
|
|
|
temp[data[k][pid]]['subs'] = []
|
|
|
|
|
}
|
|
|
|
|
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]]['subs'].push(data[k])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
res.push(data[k])
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// console.log(outurls)
|
|
|
|
|
// console.log(res)
|
|
|
|
|
return res
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//带了一个 margin-left
|
|
|
|
|
export const dragss = (e, marginleft) => {
|
|
|
|
|
|
|
|
|
|
let odiv = e.currentTarget.parentElement;
|
|
|
|
|
let disX = e.clientX - odiv.offsetLeft;
|
|
|
|
|
let disY = e.clientY - odiv.offsetTop;
|
|
|
|
|
document.onmousemove = (e) => {
|
|
|
|
|
odiv.style.left = e.clientX - disX + marginleft + 'px';
|
|
|
|
|
odiv.style.top = e.clientY - disY + 'px';
|
|
|
|
|
return false;
|
|
|
|
|
};
|
|
|
|
|
document.onmouseup = (e) => {
|
|
|
|
|
document.onmousemove = null;
|
|
|
|
|
document.onmouseup = null;
|
|
|
|
|
};
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//转base64
|
|
|
|
|
|
|
|
|
|
export const turnStr = (data) => {
|
|
|
|
|
return window.btoa(window.encodeURI(JSON.stringify(data)));
|
|
|
|
|
}
|
|
|
|
|
// 验证只能输入数字和小数,小数且只能输入2位,第一位不能输入小数点
|
|
|
|
|
// .replace(/[^\d.]/g, '')
|
|
|
|
|
// .replace(/\.{2,}/g, '.')
|
|
|
|
|
// .replace('.', '$#$')
|
|
|
|
|
// .replace(/\./g, '')
|
|
|
|
|
// .replace('$#$', '.')
|
|
|
|
|
// .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
|
|
|
|
|
// .replace(/^\./g, '')
|
|
|
|
|
/**
|
|
|
|
|
* 清除登录信息
|
|
|
|
|
*/
|
|
|
|
|
export function clearLoginInfo() {
|
|
|
|
|
router.options.isAddDynamicMenuRoutes = false;
|
|
|
|
|
localStorage.removeItem('token')
|
|
|
|
|
sessionStorage.removeItem("menuList")
|
|
|
|
|
sessionStorage.removeItem("permissions")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//对象拼成路径传参
|
|
|
|
|
export const convertObj = (data) => {
|
|
|
|
|
var _result = [];
|
|
|
|
|
for (var key in data) {
|
|
|
|
|
var value = data[key];
|
|
|
|
|
if (value.constructor == Array) {
|
|
|
|
|
value.forEach(function (_value) {
|
|
|
|
|
_result.push(key + "=" + _value);
|
|
|
|
|
});
|
|
|
|
|
} else {
|
|
|
|
|
_result.push(key + '=' + value);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return _result.join('&');
|
|
|
|
|
}
|
|
|
|
|
//判断浏览器
|
|
|
|
|
function getExplorer() {
|
|
|
|
|
var explorer = window.navigator.userAgent;
|
|
|
|
|
if (explorer.indexOf('MSIE') >= 0) {
|
|
|
|
|
return 'ie'; // ie
|
|
|
|
|
} else if (explorer.indexOf('Firefox') >= 0) {
|
|
|
|
|
return 'Firefox'; // firefox
|
|
|
|
|
} else if (explorer.indexOf('Chrome') >= 0) {
|
|
|
|
|
return 'Chrome'; // Chrome
|
|
|
|
|
} else if (explorer.indexOf('Opera') >= 0) {
|
|
|
|
|
return 'Opera'; // Opera
|
|
|
|
|
} else if (explorer.indexOf('Safari') >= 0) {
|
|
|
|
|
return 'Safari'; // Safari
|
|
|
|
|
} else if (!!explorer.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {
|
|
|
|
|
return 'IOS';
|
|
|
|
|
} else if (u.indexOf('Android') > -1 || u.indexOf('Adr') > -1) {
|
|
|
|
|
return 'Android';
|
|
|
|
|
} else {
|
|
|
|
|
return explorer
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//导出文档流
|
|
|
|
|
export const exportFile = (data, name) => {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
let types = getExplorer()
|
|
|
|
|
if (types == 'IOS') {
|
|
|
|
|
resolve({
|
|
|
|
|
success: false,
|
|
|
|
|
msg: "请使用商品自带浏览器导出!"
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (data.type && data.type.indexOf('application/vnd.ms-excel') >= 0) {
|
|
|
|
|
// console.log(data)
|
|
|
|
|
try {
|
|
|
|
|
let blob = new Blob([data], {
|
2024-04-17 11:15:49 +08:00
|
|
|
|
type: data.type || 'application/vnd.ms-excel;charset=UTF-8'
|
2024-03-22 15:48:25 +08:00
|
|
|
|
})
|
|
|
|
|
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
|
|
|
|
|
window.navigator.msSaveOrOpenBlob(blob, name);
|
|
|
|
|
} else {
|
|
|
|
|
const link = document.createElement('a')
|
|
|
|
|
link.style.display = 'none';
|
|
|
|
|
link.href = URL.createObjectURL(blob);
|
|
|
|
|
if (types == 'Safari') {
|
|
|
|
|
link.download = `${name || "未命名"}`;
|
|
|
|
|
} else {
|
|
|
|
|
link.download = `${name || "未命名"}.xlsx`;
|
|
|
|
|
}
|
|
|
|
|
// Safari thinks _blank anchor are pop ups. We only want to set _blank
|
|
|
|
|
// target if the browser does not support the HTML5 download attribute.
|
|
|
|
|
// This allows you to download files in desktop safari if pop up blocking
|
|
|
|
|
// is enabled.
|
|
|
|
|
if (typeof link.download === 'unde fined') {
|
|
|
|
|
tempLink.setAttribute('target', '_blank');
|
|
|
|
|
}
|
|
|
|
|
document.body.appendChild(link)
|
|
|
|
|
link.click()
|
|
|
|
|
// Fixes "webkit blob resource error 1"
|
|
|
|
|
let timer = setTimeout(function () {
|
|
|
|
|
document.body.removeChild(link)
|
|
|
|
|
window.URL.revokeObjectURL(link.href);
|
|
|
|
|
clearTimeout(timer)
|
|
|
|
|
}, 200)
|
|
|
|
|
}
|
|
|
|
|
resolve({
|
|
|
|
|
success: true,
|
|
|
|
|
msg: "导出成功"
|
|
|
|
|
})
|
|
|
|
|
} catch (error) {
|
|
|
|
|
resolve({
|
|
|
|
|
success: false,
|
|
|
|
|
msg: "未知异常,请联系管理员!"
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// console.log(data)
|
2024-04-17 11:15:49 +08:00
|
|
|
|
readFile(data).then(res => {
|
2024-03-22 15:48:25 +08:00
|
|
|
|
resolve(res)
|
|
|
|
|
}).catch(err => {
|
|
|
|
|
resolve({
|
|
|
|
|
success: false,
|
|
|
|
|
msg: "未知异常,请联系管理员!"
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
//阅读 blod
|
|
|
|
|
export const readFile = (data) => {
|
|
|
|
|
return new Promise((resole, reject) => {
|
2024-04-17 11:15:49 +08:00
|
|
|
|
if (Object.prototype.toString.call(data) === '[object Blob]') {
|
2024-03-22 15:48:25 +08:00
|
|
|
|
let reader = new FileReader()
|
|
|
|
|
reader.readAsText(data, 'utf-8')
|
|
|
|
|
reader.onload = (e) => {
|
|
|
|
|
console.log('--导出--', JSON.parse(reader.result))
|
|
|
|
|
let result = JSON.parse(reader.result)
|
|
|
|
|
if (result.code == UtilVar.code) {
|
|
|
|
|
router.push("/login")
|
|
|
|
|
}
|
|
|
|
|
resole(result)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
resole(data)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// reader.readAsText(data)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//element 时间选择
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export const shortcuts = [{
|
|
|
|
|
text: '最近一周',
|
|
|
|
|
onClick(picker) {
|
|
|
|
|
const end = new Date();
|
|
|
|
|
const start = new Date();
|
|
|
|
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
|
|
|
|
picker.$emit('pick', [start, end]);
|
|
|
|
|
}
|
|
|
|
|
}, {
|
|
|
|
|
text: '最近一个月',
|
|
|
|
|
onClick(picker) {
|
|
|
|
|
const end = new Date();
|
|
|
|
|
const start = new Date();
|
|
|
|
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
|
|
|
|
picker.$emit('pick', [start, end]);
|
|
|
|
|
}
|
|
|
|
|
}, {
|
|
|
|
|
text: '最近三个月',
|
|
|
|
|
onClick(picker) {
|
|
|
|
|
const end = new Date();
|
|
|
|
|
const start = new Date();
|
|
|
|
|
start.setTime(start.getTime() - 3600 * 1000 * 24 * 89);
|
|
|
|
|
picker.$emit('pick', [start, end]);
|
|
|
|
|
}
|
|
|
|
|
}]
|
|
|
|
|
export const pickerOptions = {
|
|
|
|
|
shortcuts: shortcuts
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 清除相同
|
|
|
|
|
* @param {*} origin
|
|
|
|
|
* @param {*} target
|
|
|
|
|
*/
|
|
|
|
|
export const ArrayCleanRepeat = (origin, target) => {
|
|
|
|
|
if (target) origin = origin.concat(target);
|
|
|
|
|
const result = []
|
|
|
|
|
const tagObj = {}
|
|
|
|
|
for (const i of origin) {
|
|
|
|
|
if (!tagObj[i]) {
|
|
|
|
|
result.push(i)
|
|
|
|
|
tagObj[i] = 1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* @description:
|
|
|
|
|
* @param {file:Object} 文件
|
|
|
|
|
* @return {*}
|
|
|
|
|
*/
|
|
|
|
|
export const beforeUpoads = (file) => {
|
|
|
|
|
// console.log(file)
|
|
|
|
|
var testmsg = file.name.substring(file.name.lastIndexOf('.') + 1)
|
|
|
|
|
if (
|
|
|
|
|
testmsg != 'png' &&
|
|
|
|
|
testmsg != 'jpg' &&
|
|
|
|
|
testmsg != 'jpeg' &&
|
|
|
|
|
testmsg != 'webp'
|
|
|
|
|
) {
|
|
|
|
|
// testmsg != 'gif' &&
|
|
|
|
|
return {
|
|
|
|
|
success: false,
|
|
|
|
|
msg: "上传图片格式不正确!"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const if10M = file.size / 1024 / 1024 < 20
|
|
|
|
|
if (!if10M) {
|
|
|
|
|
return {
|
|
|
|
|
success: false,
|
|
|
|
|
msg: "上传图片大小不能超过20M!"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// console.log("上传前",file, this.filelist)
|
|
|
|
|
return {
|
|
|
|
|
success: true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//复制文字
|
|
|
|
|
export const copy = (value) => {
|
|
|
|
|
let transfer = document.createElement('input')
|
|
|
|
|
|
|
|
|
|
document.body.appendChild(transfer)
|
|
|
|
|
transfer.value = value // 这里表示想要复制的内容
|
|
|
|
|
transfer.focus()
|
|
|
|
|
transfer.select()
|
|
|
|
|
if (document.execCommand('copy')) {
|
|
|
|
|
document.execCommand('copy')
|
|
|
|
|
}
|
|
|
|
|
transfer.blur()
|
|
|
|
|
document.body.removeChild(transfer)
|
|
|
|
|
//选中文字
|
|
|
|
|
// let range = document.createRange()
|
|
|
|
|
// let referenceNode = this.$refs.xy
|
|
|
|
|
// range.selectNodeContents(referenceNode)
|
|
|
|
|
// var selection = window.getSelection()
|
|
|
|
|
// selection.removeAllRanges()
|
|
|
|
|
// selection.addRange(range)
|
|
|
|
|
}
|
|
|
|
|
// 取出两个数组的不同元素
|
|
|
|
|
export const getArrDifference = (arr1, arr2) => {
|
|
|
|
|
return arr1.concat(arr2).filter(function (v, i, arr) {
|
|
|
|
|
return arr.indexOf(v) === arr.lastIndexOf(v);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 表格最大高度
|
|
|
|
|
* @param {ElementDom} dom
|
|
|
|
|
* @param {Boolean} isPaging 是否拥有分页 false 没有 || true 有 默认有
|
|
|
|
|
* @returns
|
|
|
|
|
*/
|
2024-04-17 11:15:49 +08:00
|
|
|
|
export const tableHeight = (dom, isPaging = true) => {
|
2024-03-22 15:48:25 +08:00
|
|
|
|
//定位父级到文档高度
|
|
|
|
|
if (isString(dom)) {
|
|
|
|
|
dom = document.querySelector(dom)
|
|
|
|
|
// if (dom) {
|
|
|
|
|
// return window.innerHeight - top
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
if (isHtmlElement(dom)) {
|
|
|
|
|
var parent = dom.offsetParent;
|
|
|
|
|
var top = dom.offsetTop
|
2024-04-17 11:15:49 +08:00
|
|
|
|
if (isPaging) {
|
|
|
|
|
top = top + 63 + 4
|
|
|
|
|
} else {
|
|
|
|
|
top = top + 16
|
2024-03-22 15:48:25 +08:00
|
|
|
|
}
|
|
|
|
|
while (parent != null) {
|
|
|
|
|
top += parent.offsetTop;
|
|
|
|
|
parent = parent.offsetParent;
|
|
|
|
|
};
|
|
|
|
|
return window.innerHeight - top
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//
|