middle-admin-ant/src/application/mk/libs/function/form.js

180 lines
6.5 KiB
JavaScript

export default {
// 格式化表单数据(准备提交)
formatFormData: function ({ data, rules, igFields }) { // 格式化表单数据
let feachRules = (rules) => {
rules.forEach(rule => { // 循环规则
try {
if (rule.children && rule.children.length) {
feachRules(rule.children);
}
if (!rule.dataRule) {
return;
}
if (rule.field in data) { // 如果字段在数据中
let value = data[rule.field]; // 获取值
if (rule.dataRule.type == "object" && rule.dataRule.fromTextField) {
data[rule.dataRule.saveTextField] = value[rule.dataRule.fromTextField];
}
if (rule.dataRule.fromField) {
value = value[rule.dataRule.fromField];
}
let saveField = rule.field;
if (rule.dataRule.saveField) {
saveField = rule.dataRule.saveField;
}
if (rule.dataRule.type == "integer") { // 如果是整数
if(value == null){
data[saveField] = null;
}else{
if (!value) {
value = 0;
}
if(value === true){
value = 1;
}
if(value === false){
value = 1;
}
data[saveField] = parseInt(value); // 转换为整数
}
}
if (rule.dataRule.type == "bool") { // 如果是布尔
if(value == null){
data[saveField] = null;
}else{
if (!value) {
value = 0;
}
if(value === true){
value = 1;
}
if(value === false){
value = 1;
}
data[saveField] = value ? 1 : 0;
}
}
else if (rule.dataRule.type == "number" || rule.dataRule.type == "float") { // 如果是整数
if(value == null){
data[saveField] = null;
}else{
if (!value) {
value = 0;
}
data[saveField] = parseFloat(value); // 转换为整数
}
}
else if (rule.dataRule.type == "timestamp") { // 如果是时间戳
if (!value) {
data[saveField] = null;
}else{
let date = value.replace('-','.')
data[saveField] = parseInt(new Date(date).getTime() / 1000); // 转换为时间戳
}
}
else if (rule.dataRule.type == "string") { // 如果是字符串
if (data[saveField] === true) {
data[saveField] = "true";
}
else if (data[saveField] === false) {
data[saveField] = "false";
}
else if (data[saveField]) {
data[saveField] = value + "";
}
}
else {
data[saveField] = value;
}
}
} catch (e) {
console.log(e)
}
});
};
feachRules(rules);
if (igFields) {
igFields.forEach(field => {
if (field in data) {
delete data[field];
}
})
}
},
// 格式化表单数据(准备展示)
formatInitFormData: function ({ data, rules }) { // 格式化表单数据
let feachRules = (rules) => {
rules.forEach(rule => { // 循环规则
if (rule.children && rule.children.length) {
feachRules(rule.children);
}
if (!rule.dataRule) {
return;
}
if (rule.dataRule.getter) {
data[rule.field] = rule.dataRule.getter(data);
}
if (rule.field in data) { // 如果字段在数据中
if (rule.dataRule.type == "timestamp") { // 如果是时间戳
if (data[rule.field] > 0) {
data[rule.field] = new Date(data[rule.field] * 1000);
}
}
if(rule.dataRule.type == "bool"){
data[rule.field] = data[rule.field] ? true :false;
}
}
});
};
feachRules(rules);
},
// 验证表单数据
validateForm: function ({ form }) { // 验证表单
return new Promise((resolve, reject) => { // 返回一个Promise
form.validate(a => { // 验证表单
let count = 0; // 计数器
if (a) { // 如果有错误
for (let name in a) { // 循环错误
a[name]; // 获取错误
count++; // 计数器加1
}
}
if (count > 0) { // 如果有错误
reject(count); // 返回错误
} else { // 如果没有错误
resolve(); // 返回成功
}
});
});
}
}