290 lines
8.9 KiB
JavaScript
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 ''
|
|
} |