@kengic/uni 0.5.1 → 0.5.2-beta.1

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.
Files changed (146) hide show
  1. package/dist/uni/uni-ui/uni-badge/uni-badge.vue +222 -219
  2. package/dist/uni/uni-ui/uni-breadcrumb/uni-breadcrumb.vue +29 -29
  3. package/dist/uni/uni-ui/uni-breadcrumb-item/uni-breadcrumb-item.vue +88 -88
  4. package/dist/uni/uni-ui/uni-calendar/calendar.js +936 -532
  5. package/dist/uni/uni-ui/uni-calendar/i18n/en.json +10 -10
  6. package/dist/uni/uni-ui/uni-calendar/i18n/index.js +8 -7
  7. package/dist/uni/uni-ui/uni-calendar/i18n/zh-Hans.json +10 -10
  8. package/dist/uni/uni-ui/uni-calendar/i18n/zh-Hant.json +10 -10
  9. package/dist/uni/uni-ui/uni-calendar/uni-calendar-item.vue +190 -168
  10. package/dist/uni/uni-ui/uni-calendar/uni-calendar.vue +459 -459
  11. package/dist/uni/uni-ui/uni-calendar/util.js +324 -340
  12. package/dist/uni/uni-ui/uni-card/uni-card.vue +8 -1
  13. package/dist/uni/uni-ui/uni-col/uni-col.vue +294 -287
  14. package/dist/uni/uni-ui/uni-collapse/uni-collapse.vue +139 -140
  15. package/dist/uni/uni-ui/uni-collapse-item/uni-collapse-item.vue +381 -378
  16. package/dist/uni/uni-ui/uni-combox/uni-combox.vue +280 -272
  17. package/dist/uni/uni-ui/uni-countdown/i18n/en.json +4 -4
  18. package/dist/uni/uni-ui/uni-countdown/i18n/index.js +8 -7
  19. package/dist/uni/uni-ui/uni-countdown/i18n/zh-Hans.json +4 -4
  20. package/dist/uni/uni-ui/uni-countdown/i18n/zh-Hant.json +4 -4
  21. package/dist/uni/uni-ui/uni-countdown/uni-countdown.vue +249 -257
  22. package/dist/uni/uni-ui/uni-data-checkbox/uni-data-checkbox.vue +832 -813
  23. package/dist/uni/uni-ui/uni-data-picker/keypress.js +42 -42
  24. package/dist/uni/uni-ui/uni-data-picker/uni-data-picker.vue +535 -516
  25. package/dist/uni/uni-ui/uni-data-pickerview/uni-data-picker.js +623 -618
  26. package/dist/uni/uni-ui/uni-data-pickerview/uni-data-pickerview.vue +293 -288
  27. package/dist/uni/uni-ui/uni-data-select/uni-data-select.vue +495 -509
  28. package/dist/uni/uni-ui/uni-dateformat/date-format.js +181 -184
  29. package/dist/uni/uni-ui/uni-dateformat/uni-dateformat.vue +81 -82
  30. package/dist/uni/uni-ui/uni-datetime-picker/calendar-item.vue +176 -170
  31. package/dist/uni/uni-ui/uni-datetime-picker/calendar.vue +926 -920
  32. package/dist/uni/uni-ui/uni-datetime-picker/i18n/en.json +20 -20
  33. package/dist/uni/uni-ui/uni-datetime-picker/i18n/index.js +8 -7
  34. package/dist/uni/uni-ui/uni-datetime-picker/i18n/zh-Hans.json +21 -21
  35. package/dist/uni/uni-ui/uni-datetime-picker/i18n/zh-Hant.json +21 -21
  36. package/dist/uni/uni-ui/uni-datetime-picker/time-picker.vue +921 -926
  37. package/dist/uni/uni-ui/uni-datetime-picker/uni-datetime-picker.vue +1059 -1012
  38. package/dist/uni/uni-ui/uni-datetime-picker/util.js +366 -377
  39. package/dist/uni/uni-ui/uni-drawer/keypress.js +42 -42
  40. package/dist/uni/uni-ui/uni-drawer/uni-drawer.vue +176 -167
  41. package/dist/uni/uni-ui/uni-easyinput/common.js +40 -42
  42. package/dist/uni/uni-ui/uni-easyinput/uni-easyinput.vue +628 -547
  43. package/dist/uni/uni-ui/uni-fab/uni-fab.vue +507 -483
  44. package/dist/uni/uni-ui/uni-fav/i18n/en.json +2 -2
  45. package/dist/uni/uni-ui/uni-fav/i18n/index.js +8 -7
  46. package/dist/uni/uni-ui/uni-fav/i18n/zh-Hans.json +2 -2
  47. package/dist/uni/uni-ui/uni-fav/i18n/zh-Hant.json +2 -2
  48. package/dist/uni/uni-ui/uni-fav/uni-fav.vue +155 -147
  49. package/dist/uni/uni-ui/uni-file-picker/choose-and-upload-file.js +172 -198
  50. package/dist/uni/uni-ui/uni-file-picker/uni-file-picker.vue +636 -634
  51. package/dist/uni/uni-ui/uni-file-picker/upload-file.vue +294 -293
  52. package/dist/uni/uni-ui/uni-file-picker/upload-image.vue +267 -270
  53. package/dist/uni/uni-ui/uni-file-picker/utils.js +81 -82
  54. package/dist/uni/uni-ui/uni-forms/uni-forms.vue +360 -372
  55. package/dist/uni/uni-ui/uni-forms/utils.js +170 -174
  56. package/dist/uni/uni-ui/uni-forms/validate.js +447 -456
  57. package/dist/uni/uni-ui/uni-forms-item/uni-forms-item.vue +497 -497
  58. package/dist/uni/uni-ui/uni-goods-nav/i18n/en.json +4 -4
  59. package/dist/uni/uni-ui/uni-goods-nav/i18n/index.js +8 -7
  60. package/dist/uni/uni-ui/uni-goods-nav/i18n/zh-Hans.json +4 -4
  61. package/dist/uni/uni-ui/uni-goods-nav/i18n/zh-Hant.json +4 -4
  62. package/dist/uni/uni-ui/uni-goods-nav/uni-goods-nav.vue +238 -222
  63. package/dist/uni/uni-ui/uni-grid/uni-grid.vue +134 -134
  64. package/dist/uni/uni-ui/uni-grid-item/uni-grid-item.vue +121 -119
  65. package/dist/uni/uni-ui/uni-group/uni-group.vue +121 -121
  66. package/dist/uni/uni-ui/uni-icons/icons.js +1170 -1168
  67. package/dist/uni/uni-ui/uni-icons/uni-icons.vue +91 -86
  68. package/dist/uni/uni-ui/uni-icons/uniicons.css +166 -166
  69. package/dist/uni/uni-ui/uni-indexed-list/uni-indexed-list-item.vue +129 -129
  70. package/dist/uni/uni-ui/uni-indexed-list/uni-indexed-list.vue +352 -347
  71. package/dist/uni/uni-ui/uni-link/uni-link.vue +134 -119
  72. package/dist/uni/uni-ui/uni-list/uni-list.vue +119 -110
  73. package/dist/uni/uni-ui/uni-list/uni-refresh.vue +14 -14
  74. package/dist/uni/uni-ui/uni-list/uni-refresh.wxs +14 -14
  75. package/dist/uni/uni-ui/uni-list-ad/uni-list-ad.vue +101 -95
  76. package/dist/uni/uni-ui/uni-list-chat/uni-list-chat.scss +18 -18
  77. package/dist/uni/uni-ui/uni-list-chat/uni-list-chat.vue +602 -586
  78. package/dist/uni/uni-ui/uni-list-item/uni-list-item.vue +507 -503
  79. package/dist/uni/uni-ui/uni-load-more/i18n/en.json +3 -3
  80. package/dist/uni/uni-ui/uni-load-more/i18n/index.js +8 -7
  81. package/dist/uni/uni-ui/uni-load-more/i18n/zh-Hans.json +3 -3
  82. package/dist/uni/uni-ui/uni-load-more/i18n/zh-Hant.json +3 -3
  83. package/dist/uni/uni-ui/uni-load-more/uni-load-more.vue +402 -392
  84. package/dist/uni/uni-ui/uni-nav-bar/uni-nav-bar.vue +328 -330
  85. package/dist/uni/uni-ui/uni-nav-bar/uni-status-bar.vue +17 -17
  86. package/dist/uni/uni-ui/uni-notice-bar/uni-notice-bar.vue +422 -401
  87. package/dist/uni/uni-ui/uni-number-box/uni-number-box.vue +211 -205
  88. package/dist/uni/uni-ui/uni-pagination/i18n/en.json +3 -3
  89. package/dist/uni/uni-ui/uni-pagination/i18n/es.json +3 -3
  90. package/dist/uni/uni-ui/uni-pagination/i18n/fr.json +3 -3
  91. package/dist/uni/uni-ui/uni-pagination/i18n/index.js +12 -11
  92. package/dist/uni/uni-ui/uni-pagination/i18n/zh-Hans.json +3 -3
  93. package/dist/uni/uni-ui/uni-pagination/i18n/zh-Hant.json +3 -3
  94. package/dist/uni/uni-ui/uni-pagination/uni-pagination.vue +450 -433
  95. package/dist/uni/uni-ui/uni-popup/uni-popup.vue +404 -404
  96. package/dist/uni/uni-ui/uni-popup-dialog/keypress.js +42 -42
  97. package/dist/uni/uni-ui/uni-popup-dialog/uni-popup-dialog.vue +1 -0
  98. package/dist/uni/uni-ui/uni-popup-message/uni-popup-message.vue +126 -125
  99. package/dist/uni/uni-ui/uni-popup-share/uni-popup-share.vue +172 -172
  100. package/dist/uni/uni-ui/uni-rate/uni-rate.vue +343 -347
  101. package/dist/uni/uni-ui/uni-row/uni-row.vue +180 -182
  102. package/dist/uni/uni-ui/uni-scss/changelog.md +11 -4
  103. package/dist/uni/uni-ui/uni-scss/package.json +73 -73
  104. package/dist/uni/uni-ui/uni-scss/readme.md +2 -1
  105. package/dist/uni/uni-ui/uni-scss/styles/setting/_border.scss +2 -2
  106. package/dist/uni/uni-ui/uni-scss/styles/setting/_color.scss +46 -47
  107. package/dist/uni/uni-ui/uni-scss/styles/setting/_radius.scss +49 -49
  108. package/dist/uni/uni-ui/uni-scss/styles/setting/_space.scss +52 -53
  109. package/dist/uni/uni-ui/uni-scss/styles/setting/_styles.scss +142 -147
  110. package/dist/uni/uni-ui/uni-scss/styles/setting/_text.scss +20 -20
  111. package/dist/uni/uni-ui/uni-scss/styles/setting/_variables.scss +111 -95
  112. package/dist/uni/uni-ui/uni-scss/styles/tools/functions.scss +28 -18
  113. package/dist/uni/uni-ui/uni-scss/theme.scss +10 -7
  114. package/dist/uni/uni-ui/uni-scss/variables.scss +42 -24
  115. package/dist/uni/uni-ui/uni-search-bar/i18n/en.json +3 -3
  116. package/dist/uni/uni-ui/uni-search-bar/i18n/index.js +8 -7
  117. package/dist/uni/uni-ui/uni-search-bar/i18n/zh-Hans.json +2 -2
  118. package/dist/uni/uni-ui/uni-search-bar/i18n/zh-Hant.json +2 -2
  119. package/dist/uni/uni-ui/uni-search-bar/uni-search-bar.vue +290 -281
  120. package/dist/uni/uni-ui/uni-section/uni-section.vue +149 -146
  121. package/dist/uni/uni-ui/uni-segmented-control/uni-segmented-control.vue +141 -131
  122. package/dist/uni/uni-ui/uni-steps/uni-steps.vue +255 -236
  123. package/dist/uni/uni-ui/uni-swipe-action/uni-swipe-action.vue +51 -51
  124. package/dist/uni/uni-ui/uni-swipe-action-item/bindingx.js +276 -282
  125. package/dist/uni/uni-ui/uni-swipe-action-item/isPC.js +10 -10
  126. package/dist/uni/uni-ui/uni-swipe-action-item/mpalipay.js +182 -187
  127. package/dist/uni/uni-ui/uni-swipe-action-item/mpother.js +235 -244
  128. package/dist/uni/uni-ui/uni-swipe-action-item/mpwxs.js +70 -75
  129. package/dist/uni/uni-ui/uni-swipe-action-item/render.js +238 -247
  130. package/dist/uni/uni-ui/uni-swipe-action-item/uni-swipe-action-item.vue +387 -313
  131. package/dist/uni/uni-ui/uni-swipe-action-item/wx.wxs +206 -215
  132. package/dist/uni/uni-ui/uni-swiper-dot/uni-swiper-dot.vue +241 -197
  133. package/dist/uni/uni-ui/uni-table/uni-table.vue +445 -447
  134. package/dist/uni/uni-ui/uni-tag/uni-tag.vue +234 -244
  135. package/dist/uni/uni-ui/uni-tbody/uni-tbody.vue +20 -23
  136. package/dist/uni/uni-ui/uni-td/uni-td.vue +79 -80
  137. package/dist/uni/uni-ui/uni-th/filter-dropdown.vue +510 -503
  138. package/dist/uni/uni-ui/uni-th/uni-th.vue +289 -273
  139. package/dist/uni/uni-ui/uni-thead/uni-thead.vue +115 -114
  140. package/dist/uni/uni-ui/uni-title/uni-title.vue +151 -154
  141. package/dist/uni/uni-ui/uni-tooltip/uni-tooltip.vue +55 -60
  142. package/dist/uni/uni-ui/uni-tr/table-checkbox.vue +162 -163
  143. package/dist/uni/uni-ui/uni-tr/uni-tr.vue +158 -157
  144. package/dist/uni/uni-ui/uni-transition/createAnimation.js +130 -113
  145. package/dist/uni/uni-ui/uni-transition/uni-transition.vue +274 -272
  146. package/package.json +1 -1
@@ -1,486 +1,477 @@
1
1
  var pattern = {
2
- email: /^\S+?@\S+?\.\S+?$/,
3
- idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
4
- url: new RegExp(
5
- "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$",
6
- 'i')
2
+ email: /^\S+?@\S+?\.\S+?$/,
3
+ idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
4
+ url: new RegExp(
5
+ '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$',
6
+ 'i',
7
+ ),
7
8
  };
8
9
 
9
10
  const FORMAT_MAPPING = {
10
- "int": 'integer',
11
- "bool": 'boolean',
12
- "double": 'number',
13
- "long": 'number',
14
- "password": 'string'
15
- // "fileurls": 'array'
16
- }
11
+ int: 'integer',
12
+ bool: 'boolean',
13
+ double: 'number',
14
+ long: 'number',
15
+ password: 'string',
16
+ // "fileurls": 'array'
17
+ };
17
18
 
18
19
  function formatMessage(args, resources = '') {
19
- var defaultMessage = ['label']
20
- defaultMessage.forEach((item) => {
21
- if (args[item] === undefined) {
22
- args[item] = ''
23
- }
24
- })
25
-
26
- let str = resources
27
- for (let key in args) {
28
- let reg = new RegExp('{' + key + '}')
29
- str = str.replace(reg, args[key])
30
- }
31
- return str
20
+ var defaultMessage = ['label'];
21
+ defaultMessage.forEach((item) => {
22
+ if (args[item] === undefined) {
23
+ args[item] = '';
24
+ }
25
+ });
26
+
27
+ let str = resources;
28
+ for (let key in args) {
29
+ let reg = new RegExp('{' + key + '}');
30
+ str = str.replace(reg, args[key]);
31
+ }
32
+ return str;
32
33
  }
33
34
 
34
35
  function isEmptyValue(value, type) {
35
- if (value === undefined || value === null) {
36
- return true;
37
- }
36
+ if (value === undefined || value === null) {
37
+ return true;
38
+ }
38
39
 
39
- if (typeof value === 'string' && !value) {
40
- return true;
41
- }
40
+ if (typeof value === 'string' && !value) {
41
+ return true;
42
+ }
42
43
 
43
- if (Array.isArray(value) && !value.length) {
44
- return true;
45
- }
44
+ if (Array.isArray(value) && !value.length) {
45
+ return true;
46
+ }
46
47
 
47
- if (type === 'object' && !Object.keys(value).length) {
48
- return true;
49
- }
48
+ if (type === 'object' && !Object.keys(value).length) {
49
+ return true;
50
+ }
50
51
 
51
- return false;
52
+ return false;
52
53
  }
53
54
 
54
55
  const types = {
55
- integer(value) {
56
- return types.number(value) && parseInt(value, 10) === value;
57
- },
58
- string(value) {
59
- return typeof value === 'string';
60
- },
61
- number(value) {
62
- if (isNaN(value)) {
63
- return false;
64
- }
65
- return typeof value === 'number';
66
- },
67
- "boolean": function(value) {
68
- return typeof value === 'boolean';
69
- },
70
- "float": function(value) {
71
- return types.number(value) && !types.integer(value);
72
- },
73
- array(value) {
74
- return Array.isArray(value);
75
- },
76
- object(value) {
77
- return typeof value === 'object' && !types.array(value);
78
- },
79
- date(value) {
80
- return value instanceof Date;
81
- },
82
- timestamp(value) {
83
- if (!this.integer(value) || Math.abs(value).toString().length > 16) {
84
- return false
85
- }
86
- return true;
87
- },
88
- file(value) {
89
- return typeof value.url === 'string';
90
- },
91
- email(value) {
92
- return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
93
- },
94
- url(value) {
95
- return typeof value === 'string' && !!value.match(pattern.url);
96
- },
97
- pattern(reg, value) {
98
- try {
99
- return new RegExp(reg).test(value);
100
- } catch (e) {
101
- return false;
102
- }
103
- },
104
- method(value) {
105
- return typeof value === 'function';
106
- },
107
- idcard(value) {
108
- return typeof value === 'string' && !!value.match(pattern.idcard);
109
- },
110
- 'url-https'(value) {
111
- return this.url(value) && value.startsWith('https://');
112
- },
113
- 'url-scheme'(value) {
114
- return value.startsWith('://');
115
- },
116
- 'url-web'(value) {
117
- return false;
118
- }
119
- }
56
+ integer(value) {
57
+ return types.number(value) && parseInt(value, 10) === value;
58
+ },
59
+ string(value) {
60
+ return typeof value === 'string';
61
+ },
62
+ number(value) {
63
+ if (isNaN(value)) {
64
+ return false;
65
+ }
66
+ return typeof value === 'number';
67
+ },
68
+ boolean: function (value) {
69
+ return typeof value === 'boolean';
70
+ },
71
+ float: function (value) {
72
+ return types.number(value) && !types.integer(value);
73
+ },
74
+ array(value) {
75
+ return Array.isArray(value);
76
+ },
77
+ object(value) {
78
+ return typeof value === 'object' && !types.array(value);
79
+ },
80
+ date(value) {
81
+ return value instanceof Date;
82
+ },
83
+ timestamp(value) {
84
+ if (!this.integer(value) || Math.abs(value).toString().length > 16) {
85
+ return false;
86
+ }
87
+ return true;
88
+ },
89
+ file(value) {
90
+ return typeof value.url === 'string';
91
+ },
92
+ email(value) {
93
+ return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255;
94
+ },
95
+ url(value) {
96
+ return typeof value === 'string' && !!value.match(pattern.url);
97
+ },
98
+ pattern(reg, value) {
99
+ try {
100
+ return new RegExp(reg).test(value);
101
+ } catch (e) {
102
+ return false;
103
+ }
104
+ },
105
+ method(value) {
106
+ return typeof value === 'function';
107
+ },
108
+ idcard(value) {
109
+ return typeof value === 'string' && !!value.match(pattern.idcard);
110
+ },
111
+ 'url-https'(value) {
112
+ return this.url(value) && value.startsWith('https://');
113
+ },
114
+ 'url-scheme'(value) {
115
+ return value.startsWith('://');
116
+ },
117
+ 'url-web'(value) {
118
+ return false;
119
+ },
120
+ };
120
121
 
121
122
  class RuleValidator {
122
-
123
- constructor(message) {
124
- this._message = message
125
- }
126
-
127
- async validateRule(fieldKey, fieldValue, value, data, allData) {
128
- var result = null
129
-
130
- let rules = fieldValue.rules
131
-
132
- let hasRequired = rules.findIndex((item) => {
133
- return item.required
134
- })
135
- if (hasRequired < 0) {
136
- if (value === null || value === undefined) {
137
- return result
138
- }
139
- if (typeof value === 'string' && !value.length) {
140
- return result
141
- }
142
- }
143
-
144
- var message = this._message
145
-
146
- if (rules === undefined) {
147
- return message['default']
148
- }
149
-
150
- for (var i = 0; i < rules.length; i++) {
151
- let rule = rules[i]
152
- let vt = this._getValidateType(rule)
153
-
154
- Object.assign(rule, {
155
- label: fieldValue.label || `["${fieldKey}"]`
156
- })
157
-
158
- if (RuleValidatorHelper[vt]) {
159
- result = RuleValidatorHelper[vt](rule, value, message)
160
- if (result != null) {
161
- break
162
- }
163
- }
164
-
165
- if (rule.validateExpr) {
166
- let now = Date.now()
167
- let resultExpr = rule.validateExpr(value, allData, now)
168
- if (resultExpr === false) {
169
- result = this._getMessage(rule, rule.errorMessage || this._message['default'])
170
- break
171
- }
172
- }
173
-
174
- if (rule.validateFunction) {
175
- result = await this.validateFunction(rule, value, data, allData, vt)
176
- if (result !== null) {
177
- break
178
- }
179
- }
180
- }
181
-
182
- if (result !== null) {
183
- result = message.TAG + result
184
- }
185
-
186
- return result
187
- }
188
-
189
- async validateFunction(rule, value, data, allData, vt) {
190
- let result = null
191
- try {
192
- let callbackMessage = null
193
- const res = await rule.validateFunction(rule, value, allData || data, (message) => {
194
- callbackMessage = message
195
- })
196
- if (callbackMessage || (typeof res === 'string' && res) || res === false) {
197
- result = this._getMessage(rule, callbackMessage || res, vt)
198
- }
199
- } catch (e) {
200
- result = this._getMessage(rule, e.message, vt)
201
- }
202
- return result
203
- }
204
-
205
- _getMessage(rule, message, vt) {
206
- return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default'])
207
- }
208
-
209
- _getValidateType(rule) {
210
- var result = ''
211
- if (rule.required) {
212
- result = 'required'
213
- } else if (rule.format) {
214
- result = 'format'
215
- } else if (rule.arrayType) {
216
- result = 'arrayTypeFormat'
217
- } else if (rule.range) {
218
- result = 'range'
219
- } else if (rule.maximum !== undefined || rule.minimum !== undefined) {
220
- result = 'rangeNumber'
221
- } else if (rule.maxLength !== undefined || rule.minLength !== undefined) {
222
- result = 'rangeLength'
223
- } else if (rule.pattern) {
224
- result = 'pattern'
225
- } else if (rule.validateFunction) {
226
- result = 'validateFunction'
227
- }
228
- return result
229
- }
123
+ constructor(message) {
124
+ this._message = message;
125
+ }
126
+
127
+ async validateRule(fieldKey, fieldValue, value, data, allData) {
128
+ var result = null;
129
+
130
+ let rules = fieldValue.rules;
131
+
132
+ let hasRequired = rules.findIndex((item) => {
133
+ return item.required;
134
+ });
135
+ if (hasRequired < 0) {
136
+ if (value === null || value === undefined) {
137
+ return result;
138
+ }
139
+ if (typeof value === 'string' && !value.length) {
140
+ return result;
141
+ }
142
+ }
143
+
144
+ var message = this._message;
145
+
146
+ if (rules === undefined) {
147
+ return message['default'];
148
+ }
149
+
150
+ for (var i = 0; i < rules.length; i++) {
151
+ let rule = rules[i];
152
+ let vt = this._getValidateType(rule);
153
+
154
+ Object.assign(rule, {
155
+ label: fieldValue.label || `["${fieldKey}"]`,
156
+ });
157
+
158
+ if (RuleValidatorHelper[vt]) {
159
+ result = RuleValidatorHelper[vt](rule, value, message);
160
+ if (result != null) {
161
+ break;
162
+ }
163
+ }
164
+
165
+ if (rule.validateExpr) {
166
+ let now = Date.now();
167
+ let resultExpr = rule.validateExpr(value, allData, now);
168
+ if (resultExpr === false) {
169
+ result = this._getMessage(rule, rule.errorMessage || this._message['default']);
170
+ break;
171
+ }
172
+ }
173
+
174
+ if (rule.validateFunction) {
175
+ result = await this.validateFunction(rule, value, data, allData, vt);
176
+ if (result !== null) {
177
+ break;
178
+ }
179
+ }
180
+ }
181
+
182
+ if (result !== null) {
183
+ result = message.TAG + result;
184
+ }
185
+
186
+ return result;
187
+ }
188
+
189
+ async validateFunction(rule, value, data, allData, vt) {
190
+ let result = null;
191
+ try {
192
+ let callbackMessage = null;
193
+ const res = await rule.validateFunction(rule, value, allData || data, (message) => {
194
+ callbackMessage = message;
195
+ });
196
+ if (callbackMessage || (typeof res === 'string' && res) || res === false) {
197
+ result = this._getMessage(rule, callbackMessage || res, vt);
198
+ }
199
+ } catch (e) {
200
+ result = this._getMessage(rule, e.message, vt);
201
+ }
202
+ return result;
203
+ }
204
+
205
+ _getMessage(rule, message, vt) {
206
+ return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default']);
207
+ }
208
+
209
+ _getValidateType(rule) {
210
+ var result = '';
211
+ if (rule.required) {
212
+ result = 'required';
213
+ } else if (rule.format) {
214
+ result = 'format';
215
+ } else if (rule.arrayType) {
216
+ result = 'arrayTypeFormat';
217
+ } else if (rule.range) {
218
+ result = 'range';
219
+ } else if (rule.maximum !== undefined || rule.minimum !== undefined) {
220
+ result = 'rangeNumber';
221
+ } else if (rule.maxLength !== undefined || rule.minLength !== undefined) {
222
+ result = 'rangeLength';
223
+ } else if (rule.pattern) {
224
+ result = 'pattern';
225
+ } else if (rule.validateFunction) {
226
+ result = 'validateFunction';
227
+ }
228
+ return result;
229
+ }
230
230
  }
231
231
 
232
232
  const RuleValidatorHelper = {
233
- required(rule, value, message) {
234
- if (rule.required && isEmptyValue(value, rule.format || typeof value)) {
235
- return formatMessage(rule, rule.errorMessage || message.required);
236
- }
237
-
238
- return null
239
- },
240
-
241
- range(rule, value, message) {
242
- const {
243
- range,
244
- errorMessage
245
- } = rule;
246
-
247
- let list = new Array(range.length);
248
- for (let i = 0; i < range.length; i++) {
249
- const item = range[i];
250
- if (types.object(item) && item.value !== undefined) {
251
- list[i] = item.value;
252
- } else {
253
- list[i] = item;
254
- }
255
- }
256
-
257
- let result = false
258
- if (Array.isArray(value)) {
259
- result = (new Set(value.concat(list)).size === list.length);
260
- } else {
261
- if (list.indexOf(value) > -1) {
262
- result = true;
263
- }
264
- }
265
-
266
- if (!result) {
267
- return formatMessage(rule, errorMessage || message['enum']);
268
- }
269
-
270
- return null
271
- },
272
-
273
- rangeNumber(rule, value, message) {
274
- if (!types.number(value)) {
275
- return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
276
- }
277
-
278
- let {
279
- minimum,
280
- maximum,
281
- exclusiveMinimum,
282
- exclusiveMaximum
283
- } = rule;
284
- let min = exclusiveMinimum ? value <= minimum : value < minimum;
285
- let max = exclusiveMaximum ? value >= maximum : value > maximum;
286
-
287
- if (minimum !== undefined && min) {
288
- return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ?
289
- 'exclusiveMinimum' : 'minimum'
290
- ])
291
- } else if (maximum !== undefined && max) {
292
- return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ?
293
- 'exclusiveMaximum' : 'maximum'
294
- ])
295
- } else if (minimum !== undefined && maximum !== undefined && (min || max)) {
296
- return formatMessage(rule, rule.errorMessage || message['number'].range)
297
- }
298
-
299
- return null
300
- },
301
-
302
- rangeLength(rule, value, message) {
303
- if (!types.string(value) && !types.array(value)) {
304
- return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
305
- }
306
-
307
- let min = rule.minLength;
308
- let max = rule.maxLength;
309
- let val = value.length;
310
-
311
- if (min !== undefined && val < min) {
312
- return formatMessage(rule, rule.errorMessage || message['length'].minLength)
313
- } else if (max !== undefined && val > max) {
314
- return formatMessage(rule, rule.errorMessage || message['length'].maxLength)
315
- } else if (min !== undefined && max !== undefined && (val < min || val > max)) {
316
- return formatMessage(rule, rule.errorMessage || message['length'].range)
317
- }
318
-
319
- return null
320
- },
321
-
322
- pattern(rule, value, message) {
323
- if (!types['pattern'](rule.pattern, value)) {
324
- return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
325
- }
326
-
327
- return null
328
- },
329
-
330
- format(rule, value, message) {
331
- var customTypes = Object.keys(types);
332
- var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : (rule.format || rule.arrayType);
333
-
334
- if (customTypes.indexOf(format) > -1) {
335
- if (!types[format](value)) {
336
- return formatMessage(rule, rule.errorMessage || message.typeError);
337
- }
338
- }
339
-
340
- return null
341
- },
342
-
343
- arrayTypeFormat(rule, value, message) {
344
- if (!Array.isArray(value)) {
345
- return formatMessage(rule, rule.errorMessage || message.typeError);
346
- }
347
-
348
- for (let i = 0; i < value.length; i++) {
349
- const element = value[i];
350
- let formatResult = this.format(rule, element, message)
351
- if (formatResult !== null) {
352
- return formatResult
353
- }
354
- }
355
-
356
- return null
357
- }
358
- }
233
+ required(rule, value, message) {
234
+ if (rule.required && isEmptyValue(value, rule.format || typeof value)) {
235
+ return formatMessage(rule, rule.errorMessage || message.required);
236
+ }
237
+
238
+ return null;
239
+ },
240
+
241
+ range(rule, value, message) {
242
+ const { range, errorMessage } = rule;
243
+
244
+ let list = new Array(range.length);
245
+ for (let i = 0; i < range.length; i++) {
246
+ const item = range[i];
247
+ if (types.object(item) && item.value !== undefined) {
248
+ list[i] = item.value;
249
+ } else {
250
+ list[i] = item;
251
+ }
252
+ }
253
+
254
+ let result = false;
255
+ if (Array.isArray(value)) {
256
+ result = new Set(value.concat(list)).size === list.length;
257
+ } else {
258
+ if (list.indexOf(value) > -1) {
259
+ result = true;
260
+ }
261
+ }
262
+
263
+ if (!result) {
264
+ return formatMessage(rule, errorMessage || message['enum']);
265
+ }
266
+
267
+ return null;
268
+ },
269
+
270
+ rangeNumber(rule, value, message) {
271
+ if (!types.number(value)) {
272
+ return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
273
+ }
274
+
275
+ let { minimum, maximum, exclusiveMinimum, exclusiveMaximum } = rule;
276
+ let min = exclusiveMinimum ? value <= minimum : value < minimum;
277
+ let max = exclusiveMaximum ? value >= maximum : value > maximum;
278
+
279
+ if (minimum !== undefined && min) {
280
+ return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ? 'exclusiveMinimum' : 'minimum']);
281
+ } else if (maximum !== undefined && max) {
282
+ return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ? 'exclusiveMaximum' : 'maximum']);
283
+ } else if (minimum !== undefined && maximum !== undefined && (min || max)) {
284
+ return formatMessage(rule, rule.errorMessage || message['number'].range);
285
+ }
286
+
287
+ return null;
288
+ },
289
+
290
+ rangeLength(rule, value, message) {
291
+ if (!types.string(value) && !types.array(value)) {
292
+ return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
293
+ }
294
+
295
+ let min = rule.minLength;
296
+ let max = rule.maxLength;
297
+ let val = value.length;
298
+
299
+ if (min !== undefined && val < min) {
300
+ return formatMessage(rule, rule.errorMessage || message['length'].minLength);
301
+ } else if (max !== undefined && val > max) {
302
+ return formatMessage(rule, rule.errorMessage || message['length'].maxLength);
303
+ } else if (min !== undefined && max !== undefined && (val < min || val > max)) {
304
+ return formatMessage(rule, rule.errorMessage || message['length'].range);
305
+ }
306
+
307
+ return null;
308
+ },
309
+
310
+ pattern(rule, value, message) {
311
+ if (!types['pattern'](rule.pattern, value)) {
312
+ return formatMessage(rule, rule.errorMessage || message.pattern.mismatch);
313
+ }
314
+
315
+ return null;
316
+ },
317
+
318
+ format(rule, value, message) {
319
+ var customTypes = Object.keys(types);
320
+ var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : rule.format || rule.arrayType;
321
+
322
+ if (customTypes.indexOf(format) > -1) {
323
+ if (!types[format](value)) {
324
+ return formatMessage(rule, rule.errorMessage || message.typeError);
325
+ }
326
+ }
327
+
328
+ return null;
329
+ },
330
+
331
+ arrayTypeFormat(rule, value, message) {
332
+ if (!Array.isArray(value)) {
333
+ return formatMessage(rule, rule.errorMessage || message.typeError);
334
+ }
335
+
336
+ for (let i = 0; i < value.length; i++) {
337
+ const element = value[i];
338
+ let formatResult = this.format(rule, element, message);
339
+ if (formatResult !== null) {
340
+ return formatResult;
341
+ }
342
+ }
343
+
344
+ return null;
345
+ },
346
+ };
359
347
 
360
348
  class SchemaValidator extends RuleValidator {
361
-
362
- constructor(schema, options) {
363
- super(SchemaValidator.message);
364
-
365
- this._schema = schema
366
- this._options = options || null
367
- }
368
-
369
- updateSchema(schema) {
370
- this._schema = schema
371
- }
372
-
373
- async validate(data, allData) {
374
- let result = this._checkFieldInSchema(data)
375
- if (!result) {
376
- result = await this.invokeValidate(data, false, allData)
377
- }
378
- return result.length ? result[0] : null
379
- }
380
-
381
- async validateAll(data, allData) {
382
- let result = this._checkFieldInSchema(data)
383
- if (!result) {
384
- result = await this.invokeValidate(data, true, allData)
385
- }
386
- return result
387
- }
388
-
389
- async validateUpdate(data, allData) {
390
- let result = this._checkFieldInSchema(data)
391
- if (!result) {
392
- result = await this.invokeValidateUpdate(data, false, allData)
393
- }
394
- return result.length ? result[0] : null
395
- }
396
-
397
- async invokeValidate(data, all, allData) {
398
- let result = []
399
- let schema = this._schema
400
- for (let key in schema) {
401
- let value = schema[key]
402
- let errorMessage = await this.validateRule(key, value, data[key], data, allData)
403
- if (errorMessage != null) {
404
- result.push({
405
- key,
406
- errorMessage
407
- })
408
- if (!all) break
409
- }
410
- }
411
- return result
412
- }
413
-
414
- async invokeValidateUpdate(data, all, allData) {
415
- let result = []
416
- for (let key in data) {
417
- let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData)
418
- if (errorMessage != null) {
419
- result.push({
420
- key,
421
- errorMessage
422
- })
423
- if (!all) break
424
- }
425
- }
426
- return result
427
- }
428
-
429
- _checkFieldInSchema(data) {
430
- var keys = Object.keys(data)
431
- var keys2 = Object.keys(this._schema)
432
- if (new Set(keys.concat(keys2)).size === keys2.length) {
433
- return ''
434
- }
435
-
436
- var noExistFields = keys.filter((key) => {
437
- return keys2.indexOf(key) < 0;
438
- })
439
- var errorMessage = formatMessage({
440
- field: JSON.stringify(noExistFields)
441
- }, SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid'])
442
- return [{
443
- key: 'invalid',
444
- errorMessage
445
- }]
446
- }
349
+ constructor(schema, options) {
350
+ super(SchemaValidator.message);
351
+
352
+ this._schema = schema;
353
+ this._options = options || null;
354
+ }
355
+
356
+ updateSchema(schema) {
357
+ this._schema = schema;
358
+ }
359
+
360
+ async validate(data, allData) {
361
+ let result = this._checkFieldInSchema(data);
362
+ if (!result) {
363
+ result = await this.invokeValidate(data, false, allData);
364
+ }
365
+ return result.length ? result[0] : null;
366
+ }
367
+
368
+ async validateAll(data, allData) {
369
+ let result = this._checkFieldInSchema(data);
370
+ if (!result) {
371
+ result = await this.invokeValidate(data, true, allData);
372
+ }
373
+ return result;
374
+ }
375
+
376
+ async validateUpdate(data, allData) {
377
+ let result = this._checkFieldInSchema(data);
378
+ if (!result) {
379
+ result = await this.invokeValidateUpdate(data, false, allData);
380
+ }
381
+ return result.length ? result[0] : null;
382
+ }
383
+
384
+ async invokeValidate(data, all, allData) {
385
+ let result = [];
386
+ let schema = this._schema;
387
+ for (let key in schema) {
388
+ let value = schema[key];
389
+ let errorMessage = await this.validateRule(key, value, data[key], data, allData);
390
+ if (errorMessage != null) {
391
+ result.push({
392
+ key,
393
+ errorMessage,
394
+ });
395
+ if (!all) break;
396
+ }
397
+ }
398
+ return result;
399
+ }
400
+
401
+ async invokeValidateUpdate(data, all, allData) {
402
+ let result = [];
403
+ for (let key in data) {
404
+ let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData);
405
+ if (errorMessage != null) {
406
+ result.push({
407
+ key,
408
+ errorMessage,
409
+ });
410
+ if (!all) break;
411
+ }
412
+ }
413
+ return result;
414
+ }
415
+
416
+ _checkFieldInSchema(data) {
417
+ var keys = Object.keys(data);
418
+ var keys2 = Object.keys(this._schema);
419
+ if (new Set(keys.concat(keys2)).size === keys2.length) {
420
+ return '';
421
+ }
422
+
423
+ var noExistFields = keys.filter((key) => {
424
+ return keys2.indexOf(key) < 0;
425
+ });
426
+ var errorMessage = formatMessage(
427
+ {
428
+ field: JSON.stringify(noExistFields),
429
+ },
430
+ SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid'],
431
+ );
432
+ return [
433
+ {
434
+ key: 'invalid',
435
+ errorMessage,
436
+ },
437
+ ];
438
+ }
447
439
  }
448
440
 
449
441
  function Message() {
450
- return {
451
- TAG: "",
452
- default: '验证错误',
453
- defaultInvalid: '提交的字段{field}在数据库中并不存在',
454
- validateFunction: '验证无效',
455
- required: '{label}必填',
456
- 'enum': '{label}超出范围',
457
- timestamp: '{label}格式无效',
458
- whitespace: '{label}不能为空',
459
- typeError: '{label}类型无效',
460
- date: {
461
- format: '{label}日期{value}格式无效',
462
- parse: '{label}日期无法解析,{value}无效',
463
- invalid: '{label}日期{value}无效'
464
- },
465
- length: {
466
- minLength: '{label}长度不能少于{minLength}',
467
- maxLength: '{label}长度不能超过{maxLength}',
468
- range: '{label}必须介于{minLength}和{maxLength}之间'
469
- },
470
- number: {
471
- minimum: '{label}不能小于{minimum}',
472
- maximum: '{label}不能大于{maximum}',
473
- exclusiveMinimum: '{label}不能小于等于{minimum}',
474
- exclusiveMaximum: '{label}不能大于等于{maximum}',
475
- range: '{label}必须介于{minimum}and{maximum}之间'
476
- },
477
- pattern: {
478
- mismatch: '{label}格式不匹配'
479
- }
480
- };
442
+ return {
443
+ TAG: '',
444
+ default: '验证错误',
445
+ defaultInvalid: '提交的字段{field}在数据库中并不存在',
446
+ validateFunction: '验证无效',
447
+ required: '{label}必填',
448
+ enum: '{label}超出范围',
449
+ timestamp: '{label}格式无效',
450
+ whitespace: '{label}不能为空',
451
+ typeError: '{label}类型无效',
452
+ date: {
453
+ format: '{label}日期{value}格式无效',
454
+ parse: '{label}日期无法解析,{value}无效',
455
+ invalid: '{label}日期{value}无效',
456
+ },
457
+ length: {
458
+ minLength: '{label}长度不能少于{minLength}',
459
+ maxLength: '{label}长度不能超过{maxLength}',
460
+ range: '{label}必须介于{minLength}和{maxLength}之间',
461
+ },
462
+ number: {
463
+ minimum: '{label}不能小于{minimum}',
464
+ maximum: '{label}不能大于{maximum}',
465
+ exclusiveMinimum: '{label}不能小于等于{minimum}',
466
+ exclusiveMaximum: '{label}不能大于等于{maximum}',
467
+ range: '{label}必须介于{minimum}and{maximum}之间',
468
+ },
469
+ pattern: {
470
+ mismatch: '{label}格式不匹配',
471
+ },
472
+ };
481
473
  }
482
474
 
483
-
484
475
  SchemaValidator.message = new Message();
485
476
 
486
- export default SchemaValidator
477
+ export default SchemaValidator;