You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
320 lines
7.7 KiB
320 lines
7.7 KiB
import {
|
|
validatenull
|
|
} from './validate'
|
|
|
|
|
|
// 表单序列化
|
|
export const serialize = data => {
|
|
const list = []
|
|
Object.keys(data).forEach(ele => {
|
|
list.push(`${ele}=${data[ele]}`)
|
|
})
|
|
return list.join('&')
|
|
}
|
|
export const getObjType = obj => {
|
|
var toString = Object.prototype.toString
|
|
var map = {
|
|
'[object Boolean]': 'boolean',
|
|
'[object Number]': 'number',
|
|
'[object String]': 'string',
|
|
'[object Function]': 'function',
|
|
'[object Array]': 'array',
|
|
'[object Date]': 'date',
|
|
'[object RegExp]': 'regExp',
|
|
'[object Undefined]': 'undefined',
|
|
'[object Null]': 'null',
|
|
'[object Object]': 'object'
|
|
}
|
|
if (obj instanceof Element) {
|
|
return 'element'
|
|
}
|
|
return map[toString.call(obj)]
|
|
}
|
|
/**
|
|
* 对象深拷贝
|
|
*/
|
|
export const deepClone = data => {
|
|
var type = getObjType(data)
|
|
var obj
|
|
if (type === 'array') {
|
|
obj = []
|
|
} else if (type === 'object') {
|
|
obj = {}
|
|
} else {
|
|
// 不再具有下一层次
|
|
return data
|
|
}
|
|
if (type === 'array') {
|
|
for (var i = 0, len = data.length; i < len; i++) {
|
|
obj.push(deepClone(data[i]))
|
|
}
|
|
} else if (type === 'object') {
|
|
for (var key in data) {
|
|
obj[key] = deepClone(data[key])
|
|
}
|
|
}
|
|
return obj
|
|
}
|
|
/**
|
|
* 判断路由是否相等
|
|
*/
|
|
export const diff = (obj1, obj2) => {
|
|
delete obj1.close
|
|
var o1 = obj1 instanceof Object
|
|
var o2 = obj2 instanceof Object
|
|
if (!o1 || !o2) {
|
|
/* 判断不是对象 */
|
|
return obj1 === obj2
|
|
}
|
|
|
|
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
|
|
return false
|
|
// Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
|
|
}
|
|
|
|
for (var attr in obj1) {
|
|
var t1 = obj1[attr] instanceof Object
|
|
var t2 = obj2[attr] instanceof Object
|
|
if (t1 && t2) {
|
|
return diff(obj1[attr], obj2[attr])
|
|
} else if (obj1[attr] !== obj2[attr]) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
/**
|
|
* 设置灰度模式
|
|
*/
|
|
export const toggleGrayMode = (status) => {
|
|
if (status) {
|
|
document.body.className = document.body.className + ' grayMode'
|
|
} else {
|
|
document.body.className = document.body.className.replace(' grayMode', '')
|
|
}
|
|
}
|
|
/**
|
|
* 设置主题
|
|
*/
|
|
export const setTheme = (name) => {
|
|
document.body.className = name
|
|
}
|
|
/**
|
|
* 递归寻找子类的父类
|
|
*/
|
|
|
|
export const findParent = (menu, id) => {
|
|
for (let i = 0; i < menu.length; i++) {
|
|
if (menu[i].children.length !== 0) {
|
|
for (let j = 0; j < menu[i].children.length; j++) {
|
|
if (menu[i].children[j].id === id) {
|
|
return menu[i]
|
|
} else {
|
|
if (menu[i].children[j].children.length !== 0) {
|
|
return findParent(menu[i].children[j].children, id)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 动态插入css
|
|
*/
|
|
|
|
export const loadStyle = url => {
|
|
const link = document.createElement('link')
|
|
link.type = 'text/css'
|
|
link.rel = 'stylesheet'
|
|
link.href = url
|
|
const head = document.getElementsByTagName('head')[0]
|
|
head.appendChild(link)
|
|
}
|
|
/**
|
|
* 判断路由是否相等
|
|
*/
|
|
export const isObjectValueEqual = (a, b) => {
|
|
let result = true
|
|
Object.keys(a).forEach(ele => {
|
|
const type = typeof(a[ele])
|
|
if (type === 'string' && a[ele] !== b[ele]) result = false
|
|
else if (type === 'object' && JSON.stringify(a[ele]) !== JSON.stringify(b[ele])) result = false
|
|
})
|
|
return result
|
|
}
|
|
|
|
export const findLabelValueByProp = (dic, value, propl, label) => {
|
|
// console.log(dic, value, propl,label)
|
|
propl = propl ? propl : 'value';
|
|
label = label ? label : 'label';
|
|
let result = ''
|
|
if (validatenull(dic)) return value
|
|
let idx = dic.findIndex(item => item[propl] == value);
|
|
if (idx > -1) {
|
|
return dic[idx][label]
|
|
}
|
|
return value
|
|
}
|
|
/**
|
|
* 根据字典的value显示label
|
|
*/
|
|
export const findByvalue = (dic, value) => {
|
|
let result = ''
|
|
if (validatenull(dic)) return value
|
|
if (typeof(value) === 'string' || typeof(value) === 'number' || typeof(value) === 'boolean') {
|
|
let index = 0
|
|
index = findArray(dic, value)
|
|
if (index !== -1) {
|
|
result = dic[index].label
|
|
} else {
|
|
result = value
|
|
}
|
|
} else if (value instanceof Array) {
|
|
result = []
|
|
let index = 0
|
|
value.forEach(ele => {
|
|
index = findArray(dic, ele)
|
|
if (index !== -1) {
|
|
result.push(dic[index].label)
|
|
} else {
|
|
result.push(value)
|
|
}
|
|
})
|
|
result = result.toString()
|
|
console.log('ddd', result)
|
|
}
|
|
return result
|
|
}
|
|
/**
|
|
* 根据字典的value查找对应的index
|
|
*/
|
|
export const findArray = (dic, value) => {
|
|
for (let i = 0; i < dic.length; i++) {
|
|
if (dic[i].value === value) {
|
|
return i
|
|
}
|
|
}
|
|
return -1
|
|
}
|
|
/**
|
|
* 生成随机len位数字
|
|
*/
|
|
export const randomLenNum = (len, date) => {
|
|
let random = ''
|
|
random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, len || 4)
|
|
if (date) random = random + Date.now()
|
|
return random
|
|
}
|
|
/**
|
|
* 打开小窗口
|
|
*/
|
|
export const openWindow = (url, title, w, h) => {
|
|
// Fixes dual-screen position Most browsers Firefox
|
|
const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left
|
|
const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top
|
|
|
|
const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document
|
|
.documentElement.clientWidth : screen.width
|
|
const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document
|
|
.documentElement.clientHeight : screen.height
|
|
|
|
const left = ((width / 2) - (w / 2)) + dualScreenLeft
|
|
const top = ((height / 2) - (h / 2)) + dualScreenTop
|
|
const newWindow = window.open(url, title,
|
|
'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' +
|
|
w + ', height=' + h + ', top=' + top + ', left=' + left)
|
|
|
|
// Puts focus on the newWindow
|
|
if (window.focus) {
|
|
newWindow.focus()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* <img> <a> src 处理
|
|
* @returns {PromiseLike<T | never> | Promise<T | never>}
|
|
*/
|
|
|
|
export function buildQueryString(params) {
|
|
let str = '';
|
|
Object.keys(params).forEach((key) => {
|
|
str += `${key}=${params[key]}&`;
|
|
});
|
|
str.substr(0, str.length - 1);
|
|
return str;
|
|
}
|
|
export function getQueryString(url, paraName) {
|
|
const arrObj = url.split('?')
|
|
if (arrObj.length > 1) {
|
|
const arrPara = arrObj[1].split('&')
|
|
let arr
|
|
for (let i = 0; i < arrPara.length; i++) {
|
|
arr = arrPara[i].split('=')
|
|
// eslint-disable-next-line eqeqeq
|
|
if (arr != null && arr[0] == paraName) {
|
|
return arr[1]
|
|
}
|
|
}
|
|
return ''
|
|
} else {
|
|
return ''
|
|
}
|
|
}
|
|
export function dateFormat(date, format) {
|
|
if (!format) {
|
|
format = 'yyyy-MM-dd hh:mm:ss';
|
|
}
|
|
if (date !== 'Invalid Date') {
|
|
var o = {
|
|
'M+': date.getMonth() + 1, // month
|
|
'd+': date.getDate(), // day
|
|
'h+': date.getHours(), // hour
|
|
'm+': date.getMinutes(), // minute
|
|
's+': date.getSeconds(), // second
|
|
'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
|
|
'S': date.getMilliseconds() // millisecond
|
|
}
|
|
if (/(y+)/.test(format)) {
|
|
format = format.replace(RegExp.$1,
|
|
(date.getFullYear() + '').substr(4 - RegExp.$1.length))
|
|
}
|
|
for (var k in o) {
|
|
if (new RegExp('(' + k + ')').test(format)) {
|
|
format = format.replace(RegExp.$1,
|
|
RegExp.$1.length === 1 ? o[k] :
|
|
('00' + o[k]).substr(('' + o[k]).length))
|
|
}
|
|
}
|
|
return format
|
|
}
|
|
return ''
|
|
}
|
|
export function dillFeSiteStaticurl(url) {
|
|
if (typeof url !== 'string') {
|
|
return url;
|
|
}
|
|
if (url.indexOf('/fencingapi') === 0) {
|
|
return '/fencinginfo' + url;
|
|
}
|
|
return url;
|
|
}
|
|
|
|
|
|
// 处理任务类型
|
|
export function findLabelValueByPropnew(dic, value, propl, label) {
|
|
if (!value) return ""
|
|
const valueArr = value.split(',')
|
|
propl = propl ? propl : 'value';
|
|
label = label ? label : 'label';
|
|
let resultArr = []
|
|
if (validatenull(dic)) return value
|
|
|
|
valueArr.forEach((it, i) => {
|
|
const index = dic.findIndex(item => item[propl] == valueArr[i])
|
|
if (index != -1) {
|
|
resultArr.push(dic[index][label])
|
|
}
|
|
})
|
|
return resultArr.join(',')
|
|
} |