You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

290 lines
8.9 KiB
JavaScript

export const getParamsByObj = (params, paramsConfig, obj) => {
if (paramsConfig !== undefined && paramsConfig.length > 0 && obj !== null) {
for (let i in paramsConfig) {
let paramsItem = paramsConfig[i];
if (paramsItem.value !== undefined) {
params[paramsItem.label] = paramsItem.value;
}
if (obj && paramsItem.field !== undefined) {
params[paramsItem.label] =
obj[paramsItem.field] === undefined ? "" : obj[paramsItem.field];
params[paramsItem.label] =
paramsItem.type === "Array"
? [params[paramsItem.label]]
: params[paramsItem.label];
}
}
}
return params;
};
export const getLabelByOptions = (val, options) => {
let label = "";
let valOpt = {};
for (let i in options) {
if (options[i].value === val) {
valOpt = options[i];
break;
}
}
if (valOpt.class || valOpt.style) {
return `<div class="sf-status-label ${valOpt.class}" style="${valOpt.style}">${valOpt.label}</div>`;
}
return valOpt.label;
};
export const getFormObj = (formConfig) => {
let data = {};
formConfig.forEach((item) => {
if (item.field) {
data[item.field] = item.value;
}
});
return data;
};
export const setFormObj = (formConfig, data) => {
formConfig.forEach((item) => {
if (item.field && data[item.field] !== undefined) {
item.value = data[item.field];
}
});
};
export const clearFormObj = (formConfig) => {
formConfig.forEach((item) => {
if (item.field) {
item.value = Array.isArray(item.value)
? []
: !isNaN(item.value)
? null
: "";
}
});
};
export const visibleFormItem = (itemshow, formObj = {}) => {
let flag = true;
if (Object.prototype.toString.call(itemshow) === "[object Boolean]") {
return itemshow;
}
let mathArr = [
"+",
"-",
"/",
"*",
">",
">=",
"<",
"<=",
"==",
"===",
"!==",
"||",
"&&",
];
if (itemshow && Object.keys(formObj).length > 0) {
let expression = itemshow
.replace(/\[%=/g, "")
.replace(/%\]/g, "")
.replace(/'/g, "");
let cs = expression.split(/(\/|%|\*|\+|-|&&|\|\||>|<|>=|<=|\(|\)|===|!==)/);
for (let idx in cs) {
let csItem = cs[idx];
// 右边为''
if (formObj[csItem] === "") {
cs[idx] = "'" + formObj[csItem] + "'";
// 左边可转为数值计算
} else if (
formObj[csItem] !== undefined &&
Object.prototype.toString.call(formObj[csItem]) === "object String"
) {
cs[idx] = formObj[csItem];
} else if (
formObj[csItem] !== undefined &&
Object.prototype.toString.call(formObj[csItem]) === "object Number"
) {
cs[idx] = "'" + formObj[csItem] + "'";
// 左边字段不存在 右边字段值字符串化
} else if (!mathArr.includes(csItem) && formObj[csItem] === undefined) {
cs[idx] = "'" + csItem + "'";
// 计算公式
} else if (mathArr.includes(csItem)) {
cs[idx] = csItem;
} else {
// 左边 在obj中存在 字符串化
cs[idx] = "'" + formObj[csItem] + "'";
}
}
cs = cs.join("");
flag = flag && window.eval(cs);
}
return flag;
};
export const validateItem = (item, itemValue) => {
let validate = item.validate;
let noErr = true;
let message = "";
switch (validate) {
case "required": {
// ADD input type is number is empty is null And dropdowntable,userDropdowntable,dropdownbox is empty is []
if (itemValue === null || itemValue.length === 0) {
noErr = false;
message = "请输入内容";
}
break;
}
case "": {
// ADD input type is number is empty is null And dropdowntable,userDropdowntable,dropdownbox is empty is []
if (itemValue === null || itemValue.length === 0) {
noErr = false;
message = "请输入内容";
}
break;
}
case "email": {
const regEmail =
/^[a-zA-Z0-9_-]+([._\\-]*[a-zA-Z0-9_-])*@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
if (regEmail.test(itemValue) === false) {
noErr = false;
message = "请输入正确邮箱";
}
break;
}
case "chinese": {
const regChinese = /^[^\u4e00-\u9fa5]{0,}$/;
if (regChinese.test(itemValue) === false) {
noErr = false;
message = "请输入中文字符";
}
break;
}
case "maxDecimals4": {
// let regDecimals2 = /^\d+(\.\d{2})?$/
const regDecimals4 = /^\d+(?:\.\d{1,4})?$/;
if (
itemValue !== null &&
itemValue !== "" &&
regDecimals4.test(itemValue) === false
) {
noErr = false;
message = "最多四位小数";
}
break;
}
case "english": {
// 添加英文支持-
const regEnglish = /^[a-zA-Z0-9_@-]{1,}$/;
if (regEnglish.test(itemValue) === false) {
noErr = false;
message = "请输入英文字符";
}
break;
}
case "datetime": {
const regDatetime =
/^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
if (regDatetime.test(itemValue) === false) {
noErr = false;
message = "请输入正确时间";
}
break;
}
case "date": {
const regDate = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/;
if (regDate.test(itemValue) === false) {
noErr = false;
message = "请输入正确日期";
}
break;
}
case "time": {
const regTime = /^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$/;
if (regTime.test(itemValue) === false) {
noErr = false;
message = "请输入正确时间";
}
break;
}
case "interger": {
const regInterger = /^[1-9]\d*$/;
if (regInterger.test(itemValue) === false) {
noErr = false;
message = "请输入整数";
}
break;
}
case "positiveNumber": {
// 包括0的正数
if (itemValue < 0) {
noErr = false;
message = "请输入非负数";
}
break;
}
case "gt0Number": {
// 不包括0的正数
if (itemValue <= 0) {
noErr = false;
message = "请输入非零正数";
}
break;
}
case "telephone": {
const telephoneNumber = /^1(3|4|5|6|7|8|9)\d{9}$/;
if (telephoneNumber.test(itemValue) === false) {
noErr = false;
message = "请输入正确手机号码";
}
break;
}
case "pwdstrong": {
const forceRegex = new RegExp("(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).{6,20}");
if (forceRegex.test(itemValue) === false) {
noErr = false;
message = "请输入符合格式的密码";
}
break;
}
default:
noErr = true;
}
if (!noErr) {
item.errorMessage = message;
} else {
item.errorMessage = "";
}
};
export const validataForm = (formConfig) => {
if (formConfig) {
let formHasErr = false;
formConfig.forEach((item) => {
if (item.validate !== undefined) {
validateItem(item, item.value);
}
if (item.errorMessage) {
formHasErr = true;
}
});
return formHasErr;
}
};
export function isEmpty (val) {
if (val === null || val === "" || val === undefined) {
return true;
}
return false;
}
export function calcRouteParams (obj) {
if (obj && JSON.stringify(obj) !== '{}') {
let str = '?'
for (let key in obj) {
str += key + '=' + obj[key] + '&'
}
return str.slice(0, -1)
}
return ''
}