180 lines
6.5 KiB
JavaScript
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(); // 返回成功
|
|
}
|
|
});
|
|
|
|
|
|
|
|
});
|
|
}
|
|
|
|
} |