doomiwork 3.7.11 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configuration/appsetting.js +2 -6
- package/configuration/routerconfig.js +126 -128
- package/core/actionresult.js +1 -1
- package/core/controller.js +75 -74
- package/core/database/mysqlbase.js +17 -13
- package/core/database/poolmanager.js +11 -14
- package/core/doomiwork.js +36 -21
- package/index.js +3 -1
- package/package.json +3 -3
- package/utilities/excelutility.js +139 -0
- package/utilities/keywordparse.js +87 -42
- package/utilities/requestparser.js +139 -203
- package/utilities/tokenutility.js +30 -15
- package/utilities/transferutility.js +96 -128
- package/core/Interceptor.js +0 -14
|
@@ -1,137 +1,105 @@
|
|
|
1
|
-
const {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
if (!fieldConfig || fieldConfig.length == 0) return { successed: true, data: originalResult };//return success({successed:true,data:originalResult});
|
|
13
|
-
var retResult = [];
|
|
14
|
-
originalResult.forEach(function (row) {
|
|
15
|
-
var item = {};
|
|
16
|
-
fieldConfig.forEach(function (element) {
|
|
17
|
-
///如果该字段的序列化仅用于向后保存,则序列化到
|
|
18
|
-
///前端页面的时候就不再输出了
|
|
19
|
-
if (element.direction == "backonly") return;
|
|
20
|
-
let rawValue = row[element.name];
|
|
21
|
-
if (!rawValue && element.nullValue) rawValue = element.nullValue;
|
|
22
|
-
///格式化输出
|
|
23
|
-
if (element.format) {
|
|
24
|
-
if (stringHelper.startWith(element.format, '{') && stringHelper.endsWith(element.format, '}'))
|
|
25
|
-
rawValue = stringHelper.format(element.format, rawValue);
|
|
26
|
-
else
|
|
27
|
-
rawValue = ViewHelper.specialFormatValue(element.format, rawValue);
|
|
28
|
-
}
|
|
29
|
-
if (!element.mapping)
|
|
30
|
-
item[element.name] = rawValue;
|
|
31
|
-
else
|
|
32
|
-
item[element.mapping] = rawValue;
|
|
33
|
-
});
|
|
34
|
-
retResult.push(item);
|
|
35
|
-
});
|
|
36
|
-
return { successed: true, data: retResult };
|
|
1
|
+
const { parseKeyValue, formatValue, validatorParamsType } = require('./keywordparse');
|
|
2
|
+
/**
|
|
3
|
+
* 将结果转化为Mapping对应的键值输出
|
|
4
|
+
* @param {*} originalResult
|
|
5
|
+
* @param {*} fieldConfig
|
|
6
|
+
* @returns transferName2Mapping
|
|
7
|
+
*/
|
|
8
|
+
module.exports.Data2View = (originalResult, fieldConfig) => {
|
|
9
|
+
if (!originalResult) return { successed: true, data: null };
|
|
10
|
+
if (!fieldConfig || fieldConfig.length == 0) return { successed: true, data: originalResult };//return success({successed:true,data:originalResult});
|
|
37
11
|
|
|
12
|
+
let retResult = [];
|
|
13
|
+
for (const row of originalResult) {
|
|
14
|
+
let item = {};
|
|
15
|
+
for (const element of fieldConfig) {
|
|
16
|
+
///如果该字段的序列化仅用于向后保存,则序列化到
|
|
17
|
+
///前端页面的时候就不再输出了
|
|
18
|
+
if (element.direction == "backonly") continue;
|
|
19
|
+
let rawValue = row[element.name];
|
|
20
|
+
if (!rawValue && element.nullValue) rawValue = element.nullValue;
|
|
21
|
+
///格式化输出
|
|
22
|
+
if (element.format) {
|
|
23
|
+
rawValue = formatValue(rawValue, element.format)
|
|
24
|
+
}
|
|
25
|
+
item[element.mapping || element.name] = rawValue;
|
|
26
|
+
}
|
|
27
|
+
retResult.push(item);
|
|
38
28
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return { successed: false, errcode: 6, errmsg: '输入的长度超出,最大允许' + element.maxlength, name: element.mapping }
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
//if (commonHelper.isNullOrEmpty(postValue) && ingoreKey) return;
|
|
69
|
-
///如果提交的值为空
|
|
70
|
-
if (commonHelper.isNullOrEmpty(postValue)) {
|
|
71
|
-
if (element.nullValue)
|
|
72
|
-
postValue = keyParse.parseKeyValue(req, element.nullValue);
|
|
73
|
-
else
|
|
74
|
-
postValue = null;
|
|
75
|
-
}
|
|
76
|
-
if (!postValue && element.default) postValue = element.default;
|
|
77
|
-
///不允许为空值
|
|
78
|
-
if (element.required === true && !postValue) {
|
|
79
|
-
return { successed: false, errcode: 5, errmsg: '请填写必填字段内容', name: element.mapping }
|
|
80
|
-
}
|
|
81
|
-
//空值则不替换或不设置该字段
|
|
82
|
-
if (!postValue && element.ignorenull===true){
|
|
29
|
+
return { successed: true, data: retResult };
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 数据准备保存到数据库中,从视图提交的数据中进行转换
|
|
34
|
+
* @param {*} req
|
|
35
|
+
* @param {*} fieldConfig
|
|
36
|
+
* @param {*} doWhat
|
|
37
|
+
* @returns transferMapping2Name
|
|
38
|
+
*/
|
|
39
|
+
module.exports.View2Data = (req, fieldConfig, doWhat) => {
|
|
40
|
+
let model = {}, tmpModel = {};
|
|
41
|
+
// var ingoreKey = req.query.ingoreNullKey != null && req.query.ingoreNullKey == 'true';
|
|
42
|
+
if (Array.isArray(fieldConfig)) {
|
|
43
|
+
for (const element of fieldConfig) {
|
|
44
|
+
///如果该字段的序列化仅用于向前端输出,保存时忽略
|
|
45
|
+
if (element.direction == "frontonly") continue;
|
|
46
|
+
if (element.action && element.action.indexOf(doWhat) < 0) continue;
|
|
47
|
+
let bodyKey = element.mapping || element.name;
|
|
48
|
+
let postValue = req.body[bodyKey];
|
|
49
|
+
////body中没有这个属性
|
|
50
|
+
//&& element.ignoreundefined == true
|
|
51
|
+
if (postValue === undefined) {
|
|
52
|
+
if ((doWhat == 'update' && !element.required) ||
|
|
53
|
+
(doWhat == 'create' && !element.required && !element.default && !element.nullValue))
|
|
83
54
|
continue;
|
|
55
|
+
}
|
|
56
|
+
///去除两边的空格,默认是去掉空格
|
|
57
|
+
if (typeof (postValue) === 'string') {
|
|
58
|
+
if ((!element.trim || element.trim == true)) postValue.trim();
|
|
59
|
+
if (element.maxlength && postValue.length > element.maxlength) {
|
|
60
|
+
return { successed: false, errcode: 6, errmsg: '输入的长度超出,最大允许' + element.maxlength, name: element.mapping }
|
|
84
61
|
}
|
|
85
|
-
//验证值的类型是否正确,主要验证是否数字
|
|
86
|
-
if (element.type && postValue){
|
|
87
|
-
switch (element.type.toLowerCase()){
|
|
88
|
-
case 'number': ///验证是否是数字
|
|
89
|
-
if (isNaN(postValue)) return { successed: false, errcode: 4, errmsg: '字段类型错误(Number)', name: element.mapping }
|
|
90
|
-
break;
|
|
91
|
-
case 'date':
|
|
92
|
-
if (!(isNaN(postValue) && !isNaN(Date.parse(postValue)))) return { successed: false, errcode: 4, errmsg: '字段类型错误(Date)', name: element.mapping }
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
///格式化结果
|
|
97
|
-
if (postValue && element.format) {
|
|
98
|
-
if (stringHelper.startWith(element.format, '{') && stringHelper.endsWith(element.format, '}'))
|
|
99
|
-
postValue = stringHelper.format(element.format, postValue);
|
|
100
|
-
else {
|
|
101
|
-
postValue = ViewHelper.specialFormatValue(element.format, postValue, false);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
////这个字段是否需要放在其他对象中
|
|
105
|
-
if (element.model) {
|
|
106
|
-
let modelitem = tmpModel[element.model] || {};
|
|
107
|
-
modelitem[element.name] = postValue;
|
|
108
|
-
tmpModel[element.model] = modelitem;
|
|
109
|
-
}
|
|
110
|
-
else
|
|
111
|
-
model[element.name] = postValue;
|
|
112
62
|
}
|
|
113
63
|
|
|
64
|
+
///如果提交的值为空
|
|
65
|
+
if (!postValue) { // if (commonHelper.isNullOrEmpty(postValue)) {
|
|
66
|
+
if (element.nullValue)
|
|
67
|
+
postValue = parseKeyValue(req, element.nullValue);
|
|
68
|
+
else
|
|
69
|
+
postValue = null;
|
|
70
|
+
}
|
|
71
|
+
if (!postValue && element.default) postValue = element.default;
|
|
72
|
+
///不允许为空值
|
|
73
|
+
if (element.required === true && !postValue) return { successed: false, errcode: 5, errmsg: '请填写必填字段内容', name: bodyKey }
|
|
74
|
+
// //空值则不替换或不设置该字段
|
|
75
|
+
// if (!postValue && element.ignorenull===true){
|
|
76
|
+
// continue;
|
|
77
|
+
// }
|
|
78
|
+
//验证值的类型是否正确,主要验证是否数字
|
|
79
|
+
if (element.type && postValue && !validatorParamsType(postValue, element.type)) {
|
|
80
|
+
return { successed: false, errcode: 4, errmsg: `提交的值与要求的类型不匹配:(${bodyKey},${element.type})`, name: bodyKey }
|
|
81
|
+
}
|
|
82
|
+
///格式化结果 : 这个可以用,暂时先去掉
|
|
83
|
+
// if (postValue && element.format) {
|
|
84
|
+
// if (stringHelper.startWith(element.format, '{') && stringHelper.endsWith(element.format, '}'))
|
|
85
|
+
// postValue = stringHelper.format(element.format, postValue);
|
|
86
|
+
// else {
|
|
87
|
+
// postValue = ViewHelper.specialFormatValue(element.format, postValue, false);
|
|
88
|
+
// }
|
|
89
|
+
// }
|
|
90
|
+
////这个字段是否需要放在其他对象中
|
|
91
|
+
if (element.model) {
|
|
92
|
+
let modelitem = tmpModel[element.model] || {};
|
|
93
|
+
modelitem[element.name] = postValue;
|
|
94
|
+
tmpModel[element.model] = modelitem;
|
|
95
|
+
}
|
|
96
|
+
else
|
|
97
|
+
model[element.name] = postValue;
|
|
114
98
|
}
|
|
115
|
-
else
|
|
116
|
-
model = req.body;
|
|
117
|
-
req.modellist = tmpModel;
|
|
118
|
-
return { successed: true, data: model };
|
|
119
|
-
}
|
|
120
99
|
|
|
121
|
-
static specialFormatValue(format, value, toView = true) {
|
|
122
|
-
let formatItem = format.split('|');
|
|
123
|
-
let coll = {};
|
|
124
|
-
let keyIndex = toView ? 0 : 1
|
|
125
|
-
formatItem.forEach(item => {
|
|
126
|
-
if (item == '') return;
|
|
127
|
-
var itemValues = item.split(':');
|
|
128
|
-
if (itemValues.length != 2) return;
|
|
129
|
-
coll[itemValues[keyIndex]] = itemValues[1 - keyIndex];
|
|
130
|
-
})
|
|
131
|
-
//let jsonFormat =JSON.parse('{'+format+'}');
|
|
132
|
-
return coll[value];
|
|
133
100
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
101
|
+
else
|
|
102
|
+
model = req.body;
|
|
103
|
+
req.modellist = tmpModel;
|
|
104
|
+
return { successed: true, data: model };
|
|
105
|
+
}
|
package/core/Interceptor.js
DELETED