lm-safe-app/utils/common.js

1296 lines
31 KiB
JavaScript
Raw Permalink Normal View History

2024-06-03 09:37:52 +08:00
// 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;
}