qrcode-app/utils/common.js
2024-07-25 11:35:20 +08:00

1371 lines
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// import { random, omit } from 'lodash';
// import moment from 'moment';
// import { color } from 'html2canvas/dist/types/css/types/color'; //wyw 这个会影响
export function timeFix() {
const time = new Date()
const hour = time.getHours()
return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好'
}
/**
* 对Date的扩展将 Date 转化为指定格式的String
* 月(Y)、月(m)、日(d)、小时(H)、分(M)、秒(S) 可以用 1-2 个占位符,
* 例子:
* dateFormat('YYYY-mm-dd HH:MM:SS', new Date()) ==> 2020-01-01 08:00:00
*/
export const dateFormat = (fmt, date) => {
const opt = {
"Y+": date.getFullYear().toString(), // 年
"m+": (date.getMonth() + 1).toString(), // 月
"d+": date.getDate().toString(), // 日
"H+": date.getHours().toString(), // 时
"M+": date.getMinutes().toString(), // 分
"S+": date.getSeconds().toString() // 秒
// 有其他格式化字符需求可以继续添加,必须转化成字符串
};
let ret
for (let k in opt) {
ret = new RegExp("(" + k + ")").exec(fmt)
if (ret) {
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
};
};
return fmt
}
export function handleScrollHeader(callback) {
let timer = 0
let beforeScrollTop = window.pageYOffset
callback = callback || function() {}
window.addEventListener(
'scroll',
event => {
clearTimeout(timer)
timer = setTimeout(() => {
let direction = 'up'
const afterScrollTop = window.pageYOffset
const delta = afterScrollTop - beforeScrollTop
if (delta === 0) {
return false
}
direction = delta > 0 ? 'down' : 'up'
callback(direction)
beforeScrollTop = afterScrollTop
}, 50)
},
false
)
}
/**
* Remove loading animate
* @param id parent element id or class
* @param timeout
*/
export function removeLoadingAnimate(id = '', timeout = 1500) {
if (id === '') {
return
}
setTimeout(() => {
document.body.removeChild(document.getElementById(id))
}, timeout)
}
// 节流
// 思路: 第一次先设定一个变量true
// 第二次执行这个函数时会判断变量是否true
// 是则返回。当第一次的定时器执行完函数最后会设定变量为flase。
// 那么下次判断变量时则为flase函数会依次运行。
export function throttle(fn, delay = 100) {
// 首先设定一个变量在没有执行我们的定时器时为null
var timer = null
return function() {
// 当我们发现这个定时器存在时,则表示定时器已经在运行中,需要返回
if (timer) return
timer = setTimeout(() => {
fn.apply(this, arguments)
timer = null
}, delay)
}
}
// 防抖
// 首次运行时把定时器赋值给一个变量, 第二次执行时,
// 如果间隔没超过定时器设定的时间则会清除掉定时器,
// 重新设定定时器, 依次反复, 当我们停止下来时,
// 没有执行清除定时器, 超过一定时间后触发回调函数。
export function debounce(fun, delay) {
return function(args) {
// 获取函数的作用域和变量
const that = this
const _args = args
// 每次事件被触发都会清除当前的timeer然后重写设置超时调用
clearTimeout(fun.id)
fun.id = setTimeout(function() {
fun.call(that, _args)
}, delay)
}
}
/**
* 判断是否为空对象
* @param {*} object 源对象
*/
export function isEmptyObject(object) {
return Object.keys(object).length === 0
}
/**
* 判断是否为对象
* @param {*} object
*/
export function isObject(object) {
return Object.prototype.toString.call(object) === '[object Object]'
}
/**
* 判断是否为对象
* @param {*} array
*/
export function isArray(array) {
return Object.prototype.toString.call(array) === '[object Array]'
}
/**
* 判断是否为空
* @param {*} object 源对象
*/
export function isEmpty(value) {
if (isArray(value)) {
return value.length === 0
}
if (isObject(value)) {
return isEmptyObject(value)
}
return !value
}
/**
* 判断是否在数组中
* @param {*} search
* @param {*} array
*/
export function inArray(search, array) {
return array.includes(search)
}
/**
* 获取指定天数的日期
* @param day
* @returns {string}
*/
export function getDateByDay(day) {
var today = new Date()
var targetdaySeconds = today.getTime() + 1000 * 60 * 60 * 24 * day
today.setTime(targetdaySeconds) // 注意,这行是关键代码
return today.getFullYear() + '-' + zeroFillLeft(today.getMonth() + 1) + '-' + zeroFillLeft(today.getDate())
}
/**
* 左侧补0
* @param value
* @returns {*}
*/
export function zeroFillLeft(value) {
return (value.toString().length === 1) ? ('0' + value) : value
}
/**
* 批量给指定对象赋值
* @param obj obj 指定的对象,一般为vue实例
* @param obj assignment 赋值的元素 { a: '123' }
*/
export function assignment(obj, assignment) {
Object.keys(assignment).forEach(key => {
obj[key] = assignment[key]
})
}
/**
* 对象转URL
* @param {object} obj
*/
export const urlEncode = (obj = {}) => {
const result = []
for (const key in obj) {
const item = obj[key]
if (!item) {
continue
}
if (isArray(item)) {
item.forEach(val => {
result.push(key + '=' + val)
})
} else {
result.push(key + '=' + item)
}
}
return result.join('&')
}
export const formatTime = date => {
const year = date.getFullYear()
const month = date.getMonth() + 1
const day = date.getDate()
const hour = date.getHours()
const minute = date.getMinutes()
const second = date.getSeconds()
return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber).join(':')
}
/**
* 生成url (带参数)
* @param {string} path 链接
* @param {object} params query参数
*/
export function buildUrL(path, params) {
const queryStr = urlEncode(params)
if (!isEmpty(queryStr)) {
return path + '?' + queryStr
}
return path
}
const RFC4122_TEMPLATE = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
// export function uuid(placeholder) {
// return RFC4122_TEMPLATE.replace(/[xy]/g, function () {
// let value = random(15)
// value = placeholder === 'x' ? value : (value & 0x3 | 0x8)
// return value.toString(16)
// })
// }
export function Base64_Encode(str) { // base64转换
let c1, c2, c3;
let base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
let i = 0;
let len = str.length;
let string = '';
while (i < len) {
c1 = str.charCodeAt(i++) & 0xff;
if (i === len) {
string += base64EncodeChars.charAt(c1 >> 2);
string += base64EncodeChars.charAt((c1 & 0x3) << 4);
string += "==";
break;
}
c2 = str.charCodeAt(i++);
if (i === len) {
string += base64EncodeChars.charAt(c1 >> 2);
string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
string += base64EncodeChars.charAt((c2 & 0xF) << 2);
string += "=";
break;
}
c3 = str.charCodeAt(i++);
string += base64EncodeChars.charAt(c1 >> 2);
string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));
string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));
string += base64EncodeChars.charAt(c3 & 0x3F);
}
return string;
}
export function guid() {
function S4() {
return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1)
}
return S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4();
}
export function extend(obj1, obj2) {
if (typeof(obj2) === 'object')
for (let p in obj2) obj1[p] = obj2[p];
}
export function extendRule(obj, filed, op, value, isSysParam) { //查询条件
let data = {};
if (value === null) {
value = '';
}
data['Field'] = filed;
data['Operate'] = op;
data['Value'] = isSysParam ? value.toString() : value;
if (isSysParam) {
data["IsSysParamRule"] = true;
}
if (!obj.FilterGroup) {
obj.FilterGroup = {};
}
if (!obj.FilterGroup.Rules) {
obj.FilterGroup.Rules = [];
}
obj.FilterGroup.Rules.push(data);
}
export function initFilterGroup(IsAnd = true) {
return {
IsAnd,
Rules: [],
Groups: [],
}
}
export function extendFilterGroup(obj, obj2) {
if (!obj.FilterGroup) {
obj.FilterGroup = {};
}
if (!obj.FilterGroup.Groups) {
obj.FilterGroup.Groups = [];
}
obj.FilterGroup.Groups.push(obj2);
}
export function extendChildGroup(obj, obj2) {
if (!obj.Groups) {
obj.Groups = [];
}
obj.Groups.push(obj2);
}
export function extendGroupRule(obj, filed, op, value, isSysParam) { //查询条件
let data = {};
if (value === null) {
value = '';
}
data['Field'] = filed;
data['Operate'] = op;
data['Value'] = isSysParam ? value.toString() : value;
if (isSysParam) {
data["IsSysParamRule"] = true;
}
if (!obj.Rules) {
obj.Rules = [];
}
obj.Rules.push(data);
}
export function initQueryFilter(OrgId, PageIndex, Limit, Sort, Order) {
return {
OrgId,
PageIndex,
Limit,
Start: (PageIndex - 1) * Limit,
Sort,
Order: (Order === '' ? 0 : Order),
RuleCount: 0,
IncludeCount: 0,
OrderCount: 0,
FilterGroupCount: 0,
Include: [],
Orders: [],
FilterGroup: {
Rules: [],
Groups: []
}
};
}
export function initFilter(OrgId, Keyword = "", Sort, Order, PageIndex = 1, Parameter1, Parameter2, Parameter3,
Parameter4, Parameter5, Parameter6) {
return {
Keyword,
Parameter1,
Parameter2,
Parameter3,
Parameter4,
Parameter5,
Parameter6,
OrgId,
PageIndex,
Limit: 10,
Start: (PageIndex - 1) * 10,
Sort,
Order: (Order === '' ? 0 : Order),
RuleCount: 0,
IncludeCount: 0,
OrderCount: 0,
FilterGroupCount: 0,
Include: [],
Orders: [],
FilterGroup: {
Rules: [],
Groups: []
},
SelectField: [],
DataRule: [],
IgnoreDataRule: false
};
// let params = $("#search-form").elFilterParam();
// extend(json, params);
}
export function extendInclude(obj, clude) {
if (!obj.Include) {
obj.Include = [];
}
obj.Include.push(clude);
}
//wyw 添加 子表过滤条件
export function extendFilterGroupGroupRules(obj, filed, op, value, isSysParam) { //查询条件
let data = {};
if (value === null) {
value = '';
}
data['Field'] = filed;
data['Operate'] = op;
data['Value'] = isSysParam ? value.toString() : value;
if (isSysParam) {
data["IsSysParamRule"] = true;
}
if (!obj.FilterGroup) {
obj.FilterGroup = {};
}
if (!obj.FilterGroup.Groups) {
obj.FilterGroup.Groups = [];
}
if (obj.FilterGroup.Groups.length == 0) {
let groupGroup = initFilterGroup(false)
obj.FilterGroup.Groups.push(groupGroup)
}
if (!obj.FilterGroup.Groups[0].Rules) {
obj.FilterGroup.Groups[0].Groups = [];
obj.FilterGroup.Groups[0].Rules = [];
obj.FilterGroup.Groups[0].IsAnd = false;
}
obj.FilterGroup.Groups[0].Rules.push(data);
}
export function extendOrder(obj, filed, order) {
var data = {};
data["Field"] = filed;
data["Order"] = order;
if (!obj.Orders) {
obj.Orders = [];
}
obj.Orders.push(data);
}
export function extendIgnoreDataRule(obj) {
obj.IgnoreDataRule = true
}
function trim(str) { // ?
for (var i = 0; i < str.length && str.charAt(i) == " "; i++)
;
for (var j = str.length; j > 0 && str.charAt(j - 1) == " "; j--)
;
if (i > j)
return "";
return str.substring(i, j);
}
export function empty(v, allowZero) {
if (v === "null" || v === undefined || v === "") return true;
switch (typeof v) {
case 'undefined':
return true;
case 'string':
if (trim(v).length == 0)
return true;
break;
case 'boolean':
if (!v)
return true;
break;
case 'number':
if (0 === v && !allowZero)
return true;
break;
case 'object':
if (null === v)
return true;
if (undefined !== v.length && v.length == 0)
return true;
for (var k in v) {
return false;
}
return true;
default:
return false;
}
}
export function strConvert(target, def) { // 点字符串转对象
// str为需要转换的值, def为有固定的最后一个属性值
let splitFiles = target.split('.');
let str = '';
let len = splitFiles.length;
splitFiles.forEach(item => {
str += '{\"' + item + '\":'
});
str += "" + def + ""
for (let j = 0; j < len; j++) {
str += '}'
}
let mat = JSON.parse(str);
return mat
}
//仅仅获取对象的基础属性,不包含属性中的对象
export function getOnlyPropertyData(data, isGetSysParam) {
let result = {};
Object.keys(data).forEach((n) => {
if (n.indexOf('.') !== -1) return;
if (isGetSysParam && n === 'Nav_SysParams') {
result[n] = data[n];
} else if (Array.isArray(data[n])) {
result[n] = data[n];
} else if (typeof(data[n]) !== "object") {
result[n] = data[n];
}
});
return result;
}
//仅仅获取对象的基础属性及列表,不包含属性中的对象
export function getPropertyData(data, isSetDelete) {
let result = {};
Object.keys(data).forEach((n) => {
if (n.indexOf('.') != -1) return;
if (typeof(data[n]) !== "object") {
result[n] = data[n];
} else if (data[n] && data[n].length) {
const array = [];
data[n].forEach(nx => {
const d = getPropertyData(nx, isSetDelete);
array.push(d);
});
result[n] = array;
}
if (isSetDelete) {
result['IS_DELETED'] = true;
}
});
return result;
}
// 取导航属性的最后一个字段
export function dataIndexName(field) {
const valueValid = field ? field.split('.') : [];
return valueValid[valueValid.length - 1]
}
export function splitEnum(str) {
let newArr = [];
let oArr = str ? str.split(',') : [];
oArr.forEach(item => {
let n = item.split(':');
newArr.push({
label: n[0],
value: n[1]
})
});
return newArr
}
export function getDataFieldValueByCol(data, field, defaultValue) {
if (!data || !field) return null;
let opIndex = field.lastIndexOf('/');
let op = 0;
if (opIndex === -1) {
opIndex = field.indexOf('*');
if (opIndex === -1) {
opIndex = field.indexOf('+');
if (opIndex === -1) {
opIndex = field.lastIndexOf('-');
if (opIndex !== -1) {
op = 2;
}
} else {
op = 1;
}
} else {
op = 3;
}
} else {
op = 4;
}
let controlValue = null;
if (opIndex !== -1) {
const leftField = field.substring(0, opIndex);
const rightField = field.substring(opIndex + 1);
const leftText = getDataFieldValueByCol(data, leftField);
const rigthText = getDataFieldValueByCol(data, rightField);
if (leftText !== '' && rigthText !== '' && !isNaN(leftText) && !isNaN(rigthText)) {
if (op === 1) {
controlValue = (+leftText) + (+rigthText);
} else if (op === 2) {
controlValue = (+leftText) - (+rigthText);
} else if (op === 3) {
controlValue = (+leftText) * (+rigthText);
} else if (op === 3 && (+rigthText) !== 0) {
controlValue = (+leftText) / (+rigthText);
}
}
} else {
controlValue = getDataFieldValue(data, field, defaultValue);
}
return controlValue;
}
function innerGetDataFieldValue(data, field, defaultValue) {
if (!data || !field) return null;
const valueValid = field ? field.split('.') : [];
let controlValue = null;
let tmp = {
...data
};
if (tmp) {
for (let j = 0; j < valueValid.length; j++) {
if (j < valueValid.length - 1) {
if (!Array.isArray(tmp)) {
if (tmp && tmp.hasOwnProperty(valueValid[j])) {
tmp = tmp[valueValid[j]];
} else {
tmp = null;
}
} else {
let arrayTmp = [];
tmp.forEach(item => {
if (item && item.hasOwnProperty(valueValid[j])) {
arrayTmp.push(item[valueValid[j]]);
}
})
tmp = arrayTmp;
}
} else {
if (!Array.isArray(tmp)) {
if (tmp && tmp.hasOwnProperty(valueValid[j])) {
controlValue = tmp[valueValid[j]];
}
} else {
controlValue = '';
tmp.forEach(item => {
controlValue += item[valueValid[j]] + ",";
})
if (controlValue && controlValue.indexOf(',') > 0) {
controlValue = controlValue.substring(0, controlValue.length - 1);
}
}
}
}
}
if (controlValue == null && defaultValue !== undefined) {
return defaultValue;
}
return controlValue;
}
export function getDataFieldValue(data, field, defaultValue) {
if (!data || !field) {
if (defaultValue !== undefined) {
return defaultValue;
}
return null;
}
const key = 'Nav_SysParams';
const index = field.indexOf(key);
if (index === -1) {
return innerGetDataFieldValue(data, field, defaultValue);
} else {
const f1 = index > 0 ? field.substring(0, index - 1) : null;
const f2 = field.substring(index + key.length + 1);
let temp = null;
if (f1) {
temp = innerGetDataFieldValue(data, f1);
} else {
temp = data;
}
if (temp) {
let sysParams = temp[key];
if (sysParams) {
let paramRecord = sysParams.filter(t => t.CODE === f2)[0];
if (paramRecord) {
return paramRecord.VALUE;
}
}
}
}
if (defaultValue !== undefined) {
return defaultValue;
}
return null;
}
function innerSetDataFieldValue(data, field, value) {
let tmp = data;
const valueValid = field ? field.split('.') : [];
for (let j = 0; j < valueValid.length; j++) {
if (j < valueValid.length - 1) {
if (!tmp.hasOwnProperty(valueValid[j]) || !tmp[valueValid[j]]) {
tmp[valueValid[j]] = {};
}
let tmpData = tmp[valueValid[j]];
if (!tmpData) {
tmpData = {};
}
tmp = tmpData;
} else {
tmp[valueValid[j]] = value;
}
}
return data;
}
export function setDataFieldValue(data, field, value) {
if (!data || !field) return data;
const key = 'Nav_SysParams';
const index = field.indexOf(key);
if (index === -1) {
innerSetDataFieldValue(data, field, value);
} else {
const f1 = index > 0 ? field.substring(0, index - 1) : null;
const f2 = field.substring(index + key.length + 1);
let temp = null;
if (f1) {
temp = innerGetDataFieldValue(data, f1);
if (!temp) {
temp = {};
innerSetDataFieldValue(data, f1, temp);
}
} else {
temp = data;
}
let sysParams = temp[key];
if (!sysParams) {
sysParams = [];
temp[key] = sysParams;
}
let paramRecord = sysParams.filter(t => t.CODE === f2)[0];
if (!paramRecord) {
paramRecord = {
ID: guid(),
CODE: f2,
ENTITY_ID: temp.ID,
}
sysParams.push(paramRecord);
}
paramRecord.VALUE = value;
}
return data;
}
export function permissionUtils(login) {
const checkPermission = (formId, keyId, type) => {
if (login.userType == 99 || !formId) return true; //管理员
let hasPermission = false;
const currActivatedMenu = login.currActivatedMenu || {}
if (login.rolePerm && login.rolePerm.Nav_RolePermForms && login.rolePerm.Nav_RolePermForms
.length) { //只要一个角色有权限就有权限
/**
* hasPermssion 判断为 true 之后,必须直接赋值为 true
* 不能用条件判断比如hasPermission = matchForm;)去赋值
* 因为一直在循环,满足 if 条件后,可能 hasPermission 又被置为 false 了
*/
login.rolePerm.Nav_RolePermForms.forEach((n1, i1) => {
if (!currActivatedMenu.ID) {
hasPermission = true
} else {
if (n1.PermFormId === formId) {
const matchForm = (n1.MenuId === currActivatedMenu.ID || !currActivatedMenu.ID)
if (type == 0 && matchForm) { //表单权限
hasPermission = true;
} else if (type == 1) { //按钮权限
if (n1.Nav_Btns && n1.Nav_Btns.length) {
n1.Nav_Btns.forEach((n2, i2) => {
const matchBtn = (n2.MenuId === currActivatedMenu.ID || !
currActivatedMenu.ID)
if (n2.BtnId === keyId && matchBtn) {
hasPermission = true;
}
});
}
} else if (type == 2) { //行权限
if (n1.Nav_Columns && n1.Nav_Columns.length) {
n1.Nav_Columns.forEach((n2, i2) => {
const matchRow = (n2.MenuId === currActivatedMenu.ID || !
currActivatedMenu.ID)
if (n2.ColumnId === keyId && matchRow) {
hasPermission = true;
}
});
}
}
}
}
});
}
return hasPermission;
};
return {
checkBtn: (formId, btnId) => {
return checkPermission(formId, btnId, 1);
},
checkColumn: (formId, columnId) => {
return checkPermission(formId, columnId, 2);
},
checkForm: (formId) => {
return checkPermission(formId, '', 0);
},
};
}
//根据枚举字符串获取枚举列表
export function getEnums(str) {
let newArr = {};
let oArr = str ? str.split(',') : [];
oArr.forEach(item => {
let n = item.split(':');
newArr[[n[1]]] = n[0];
});
return newArr
}
export function getCustomParams(customParamsStr) {
const customParams = {};
if (customParamsStr && typeof customParamsStr === 'string') {
let arrays = customParamsStr.split('|');
arrays.forEach(function(n, i) {
let paris = n.split("=");
if (paris.length >= 2) {
customParams[paris[0]] = paris[1];
} else {
customParams[paris[0]] = null;
}
});
}
return customParams;
}
export function getGroupByQueryFields(fields, groups, parentId, parent, list) {
if (groups && groups.length) {
const tempGroups = groups.filter(t => t.PARENT_ID === parentId);
if (tempGroups && tempGroups.length) {
tempGroups.forEach(t => {
const group = {
rules: [],
childGroups: [],
isAnd: t.RELATION_TYPE !== 1,
};
if (fields && fields.length) {
const tempFields = fields.filter(t1 => t1.USER_C_C_QUERY_GROUP_ID === t.ID);
if (tempFields && tempFields.length) {
group.rules = getRulesByQueryFields(tempFields, group.childGroups);
}
}
if (parent) {
parent.childGroups.push(group)
} else {
list.push(group);
}
getGroupByQueryFields(fields, groups, t.ID, group, list);
});
}
}
}
export function getRuleAndGroupsByQueryFields(queryFields, queryGroups) {
const result = {};
if (queryFields != null && queryFields.length) {
const sysFields = queryFields.filter(t => !t.USER_C_C_QUERY_GROUP_ID);
result.groups = [];
result.rules = getRulesByQueryFields(sysFields, result.groups);
getGroupByQueryFields(queryFields, queryGroups, null, null, result.groups);
}
return result;
}
export function locationQuery(query) {
if (!query) return {};
let querys = query.split('?')[1];
let pair = querys.split('&');
let obj = {};
for (let i = 0; i < pair.length; i++) {
let propertys = pair[i].split('=');
obj[propertys[0]] = propertys[1]
}
return obj;
}
export function addChildGroups(list, group) {
if (list && list.length) {
list.forEach(t => {
const tempGroup = initFilterGroup(t.isAnd);
if (t.rules && t.rules.length) {
t.rules.forEach(t1 => {
extendGroupRule(tempGroup, t1.field, t1.operator, t1.value, t1.isSysParam);
});
}
if (t.childGroups && t.childGroups.length) {
addChildGroups(t.childGroups, tempGroup);
}
extendChildGroup(group, tempGroup);
});
}
}
// export function getRandomCode(len) {
// len = len || 32;
// var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678=-*&@#$%!~+,./?\;:|' /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
// var maxPos = $chars.length;
// var pwd = '';
// for (var i = 0; i < len; i++) {
// pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
// }
// return pwd;
// }
export function addRuleAndGroups(json, ruleAndGroupJson) {
if (json && ruleAndGroupJson) {
if (ruleAndGroupJson.rules && ruleAndGroupJson.rules.length) {
ruleAndGroupJson.rules.forEach(t => {
if (t.isCustom) { //自定义字段
if (t.field.indexOf(',') > -1) //modify by陈昌雨 2020/6/4
{
var splitFileds = t.field.split(',');
let values = null;
if (typeof(t.value) === 'number' && t.value !== undefined && t.value != null) {
values = t.value.toString().split(',');
} else {
values = t.value.split(',');
}
if (splitFileds && values) {
splitFileds.forEach((n, i) => {
json[n] = values[i];
});
}
} else {
json[t.field] = t.value;
}
} else {
extendRule(json, t.field, t.operator, t.value, t.isSysParam);
}
});
}
if (ruleAndGroupJson.groups && ruleAndGroupJson.groups.length) {
ruleAndGroupJson.groups.forEach(t => {
const tempGroup = initFilterGroup(t.isAnd);
if (t.rules && t.rules.length) {
t.rules.forEach(t1 => {
extendGroupRule(tempGroup, t1.field, t1.operator, t1.value, t1.isSysParam);
});
}
if (t.childGroups && t.childGroups.length) {
addChildGroups(t.childGroups, tempGroup);
}
extendFilterGroup(json, tempGroup);
});
}
if (ruleAndGroupJson.orgType) {
json.OrgType = ruleAndGroupJson.orgType;
}
if (ruleAndGroupJson.menuParameter) {
json.MenuParameter = ruleAndGroupJson.menuParameter
}
}
}
export function constructStandardTreeData(data, cascader) {
data.forEach(item => {
const {
Node,
Children
} = item
const {
NAME,
ID
} = Node
if (cascader) {
item.label = NAME
item.value = ID
Array.isArray(Children) && Children.length && (item.children = Children)
for (let key in Node) {
item[key] = Node[key]
}
} else {
item.title = NAME
item.key = ID
item.value = ID
item.children = Children
}
if (Array.isArray(Children) && Children.length) {
constructStandardTreeData(Children, cascader)
}
})
}
// 树搜索
// export function flatTreeData(tree = [], data = []) {
// if (Array.isArray(tree) && tree.length) {
// tree.forEach(item => {
// data.push(omit(item, ['children']))
// flatTreeData(item.children, data)
// })
// }
// }
export function digTreeData(arr, target) {
for (let i = 0, j = arr.length; i < j; i++) {
if (arr[i].Node && arr[i].Node.ID === target) return arr[i]
if (Array.isArray(arr[i].Children) && arr[i].Children.length) {
const result = digTreeData(arr[i].Children, target)
if (result) return result
}
}
}
export function toFixed(num, base = 2, notCeil = true) {
if (typeof num !== 'number') return num
let str = num.toFixed(notCeil ? base + 1 : base)
base === 0 && notCeil && (str = str.substring(0, str.length - 1)) // 防止出现 120. 这类多一个点的字符串
return str.substring(0, notCeil ? str.length - 1 : str.length)
}
//排序
export function compare(obj1, obj2) {
var val1 = obj1.num;
var val2 = obj2.num;
if (val1 < val2) {
return -1;
} else if (val1 > val2) {
return 1;
} else {
return 0;
}
}
export function validUUID(value) {
if (!value) return false
if (value.toString().split('-').length === 4 && value.toString().length === 32) return true
if (value.toString().split('-').length === 5 && value.toString().length === 36) return true
return false
}
//显示用户签名
export function showUsersSign(listUsers, imgHost, width, height) {
var result = []
if (width == undefined) {
width = 200
}
if (height == undefined) {
height = 50
}
listUsers = listUsers.sort(function(a, b) {
if (a.CREATE_TIME > b.CREATE_TIME) {
return 1
} else {
return -1
}
})
// listUsers?.map((item, i) => {
// if (item.Nav_User != null && item.Nav_User.Nav_UserSignFiles != null && item.Nav_User.Nav_UserSignFiles.length > 0) {
// result.push( < img width = {
// width
// }
// style = {{margin: "0 0 0 5px",
// maxHeight: "100px"
// }
// }
// src = {
// imgHost + item.Nav_User?.Nav_UserSignFiles[0]?.Nav_ImgFile.Nav_File.FILE_PATH
// }
// title = {
// item.Nav_User?.NAME
// }
// alt = {
// item.Nav_User?.NAME
// }
// />)
// }
// else {
// result.push( < img width = {
// width
// }
// style = {
// {
// margin: "0 0 0 5px",
// maxHeight: "100px"
// }
// }
// src = ''
// title = {
// item.Nav_User?.NAME
// }
// alt = {
// item.Nav_User?.NAME
// }
// />)
// }
// })
return result
}
//显示用户签名
export function showUserSign(user, imgHost, width, height) {
var result = []
if (width == undefined) {
width = 200
}
if (height == undefined) {
height = 50
}
// height={height}
// if (user != null && user.Nav_UserSignFiles != null && user.Nav_UserSignFiles.length > 0) {
// result.push( < img width = {
// width
// }
// style = {
// {
// margin: "0 0 0 5px",
// maxHeight: "100px"
// }
// }
// src = {
// imgHost + user?.Nav_UserSignFiles[0]?.Nav_ImgFile.Nav_File.FILE_PATH
// }
// title = {
// user.NAME
// }
// alt = {
// user.NAME
// }
// />)
// }
// else {
// result.push( < img width = {
// width
// }
// style = {
// {
// margin: "0 0 0 5px",
// maxHeight: "100px"
// }
// }
// src = ''
// title = {
// user.NAME
// }
// alt = {
// user.NAME
// }
// />)
// }
return result
}
//判断是PC还是移动端
export function getIsPC() {
if (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/WebOS/i) || navigator
.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent
.match(/iPod/i) || navigator.userAgent.match(/Windows Phone/i)) {
return false
} else {
return true
}
}
//task未空的onBeforeSaveHandleRecord事件日志
export function onBeforeSaveHandleRecordLog(params, formCode, title) {
if (params.data.TaskID == '00000000-0000-0000-0000-000000000000' || params.data.id ==
'00000000-0000-0000-0000-000000000000') {
var orgId = params.login.OrgId; //登录后有存储登录信息
let json = initFilter(orgId, null, null, null, null, formCode, title, params.data.TaskID,
" params.pageCode:[" + params.pageCode + "] params.data.id:[" + params.data.id +
"] UserId:[" + params.login.loginInfo.User.ID + "] params.data.taskCode: [" + params
.data.taskCode + "] homeReload: [" + params.data.homeReload + "]");
params.dispatch({
type: 'app/getDataByPost',
url: 'PF/PFSysLog/addLog',
payload: json,
onlyData: false,
onComplete: (ret) => {}
})
}
}
//显示附件
export function showFiles(Nav_Files, imgHost) {
var result = []
// Nav_Files && Nav_Files?.map((item, i) => {
// result.push( < a width = {
// '20%'
// }
// title = {
// item.Nav_ImgFile.FILE_NAME
// }
// target = '_blank'
// href = {
// imgHost + item.Nav_ImgFile.Nav_File.FILE_PATH
// } > {
// item.Nav_ImgFile.FILE_NAME
// } < /a>)
// })
return result
}
export function ShowDateTime(datetime, fmt) {
if (datetime == undefined || datetime == null || datetime.length < 1) {
return ''
} else {
if (fmt == undefined || fmt == null || fmt.length < 1)
fmt = 'yyyy-MM-dd'
return new Date(datetime).Format(fmt)
}
}
export function downLoad(imgHost, fileName) {
if (fileName) {
let link = document.createElement('a')
link.href = imgHost + '/' + fileName
document.body.appendChild(link)
window.open(link)
} else {
alert('获取参数配置失败!')
}
}
Date.prototype.Format = function(fmt) {
var o = {
"M+": this.getMonth() + 1, //月份
"d+": this.getDate(), //日
"H+": this.getHours(), //小时
"m+": this.getMinutes(), //分
"s+": this.getSeconds(), //秒
"q+": Math.floor((this.getMonth() + 3) / 3), //季度
"S": this.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 -
RegExp.$1.length));
for (var 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 function ShowPrintClose(props) {
if (typeof props.data.onCancel != "undefined" && typeof props.data.onCancel == 'function')
props.data.onCancel();
}
//附件数据结构转换
export function fileStructChange(files) {
let result = []
files.forEach(e => {
result.push({
...e,
remotePath: e.Nav_ImgFile.Nav_File.FILE_PATH,
name: e.Nav_ImgFile.FILE_NAME
})
})
return result
}
//查重
export function duplicated(array) {
for (let j = 0; j < array.length; j++) {
if (array.indexOf(array[j]) < array.lastIndexOf(array[j])) {
return true
}
}
return false;
}
export function isChinaMobilePhone(phone) {
// 2024
var reg = new RegExp(/^(13[0-9]|14[05679]|15[012356789]|16[2567]|17[01235678]|18[0-9]|19[012356789])[0-9]{8}$/)
return reg.test(phone)
}
export function easyCheckID(code) {
return /^([0-9a-zA-Z]{15}|[0-9a-zA-Z]{18})$/.test(code)
}
export function IsChinese(str) {
// var reg = /^[\u0391-\uFFE5]+$/;
var reg =/[^\u4e00-\u9fa5]/
if (reg.test(str)) {
return false
} else {
return true
}
}
export function checkIDCard(code) {
// 校验非空
if (!code) {
return false
}
// 校验长度
if (code.length != 15 && code.length != 18) {
return false
}
// 定义判别用户身份证号的正则表达式15位或者18位最后一位可以为字母
//假设18位身份证号码:41000119910101123X 410001 19910101 123X
//^开头
//[1-9] 第一位1-9中的一个 4
//\\d{5} 五位数字 10001前六位省市县地区
//(18|19|20) 19现阶段可能取值范围18xx-20xx年
//\\d{2} 91年份
//((0[1-9])|(10|11|12)) 01月份
//(([0-2][1-9])|10|20|30|31)01日期
//\\d{3} 三位数字 123第十七位奇数代表男偶数代表女
//[0-9Xx] 0123456789Xx其中的一个 X第十八位为校验值
//$结尾
//假设15位身份证号码:410001910101123 410001 910101 123
//^开头
//[1-9] 第一位1-9中的一个 4
//\\d{5} 五位数字 10001前六位省市县地区
//\\d{2} 91年份
//((0[1-9])|(10|11|12)) 01月份
//(([0-2][1-9])|10|20|30|31)01日期
//\\d{3} 三位数字 123第十五位奇数代表男偶数代表女15位身份证不含X
//$结尾
var reg = new RegExp(/(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)/)
var matches = reg.test(code)
if (matches) {
// 15位的身份证直接返回合法
if (code.length == 15) {
return true
}
// 18位的进一步校验
try {
// TODO:
if (/^([0-9a-zA-Z]{18})$/.test(code)) {
return true
} else {
return false
}
} catch (e) {
console.error(e)
return false
}
}
return matches
}