vxe-table 4.16.16 → 4.16.17

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 (230) hide show
  1. package/es/style.css +1 -1
  2. package/es/table/src/table.js +5 -0
  3. package/es/ui/index.js +1 -1
  4. package/es/ui/src/log.js +1 -1
  5. package/lib/index.umd.js +3 -3
  6. package/lib/index.umd.min.js +1 -1
  7. package/lib/locale/lang/ar-EG.min.js +1 -1
  8. package/lib/locale/lang/de-DE.min.js +1 -1
  9. package/lib/locale/lang/en-US.min.js +1 -1
  10. package/lib/locale/lang/es-ES.min.js +1 -1
  11. package/lib/locale/lang/fr-FR.min.js +1 -1
  12. package/lib/locale/lang/hu-HU.min.js +1 -1
  13. package/lib/locale/lang/hy-AM.min.js +1 -1
  14. package/lib/locale/lang/id-ID.min.js +1 -1
  15. package/lib/locale/lang/it-IT.min.js +1 -1
  16. package/lib/locale/lang/ja-JP.min.js +1 -1
  17. package/lib/locale/lang/ko-KR.min.js +1 -1
  18. package/lib/locale/lang/ms-MY.min.js +1 -1
  19. package/lib/locale/lang/nb-NO.min.js +1 -1
  20. package/lib/locale/lang/pt-BR.min.js +1 -1
  21. package/lib/locale/lang/ru-RU.min.js +1 -1
  22. package/lib/locale/lang/th-TH.min.js +1 -1
  23. package/lib/locale/lang/ug-CN.min.js +1 -1
  24. package/lib/locale/lang/uk-UA.min.js +1 -1
  25. package/lib/locale/lang/uz-UZ.min.js +1 -1
  26. package/lib/locale/lang/vi-VN.min.js +1 -1
  27. package/lib/locale/lang/zh-CHT.min.js +1 -1
  28. package/lib/locale/lang/zh-CN.min.js +1 -1
  29. package/lib/locale/lang/zh-HK.min.js +1 -1
  30. package/lib/locale/lang/zh-MO.min.js +1 -1
  31. package/lib/locale/lang/zh-TW.min.js +1 -1
  32. package/lib/style.css +1 -1
  33. package/lib/table/src/props.js +0 -318
  34. package/lib/ui/index.js +1 -1
  35. package/lib/ui/index.min.js +1 -1
  36. package/lib/ui/src/log.js +1 -1
  37. package/lib/ui/src/log.min.js +1 -1
  38. package/package.json +1 -1
  39. package/packages/table/src/table.ts +5 -0
  40. package/es/colgroup/style.css +0 -0
  41. package/es/colgroup/style.min.css +0 -0
  42. package/es/column/style.css +0 -0
  43. package/es/column/style.min.css +0 -0
  44. package/es/grid/style.css +0 -86
  45. package/es/grid/style.min.css +0 -1
  46. package/es/iconfont.1758344508103.ttf +0 -0
  47. package/es/iconfont.1758344508103.woff +0 -0
  48. package/es/iconfont.1758344508103.woff2 +0 -0
  49. package/es/index.esm.js +0 -3
  50. package/es/locale/lang/ar-EG.d.ts +0 -2
  51. package/es/locale/lang/de-DE.d.ts +0 -2
  52. package/es/locale/lang/en-US.d.ts +0 -2
  53. package/es/locale/lang/es-ES.d.ts +0 -2
  54. package/es/locale/lang/fr-FR.d.ts +0 -2
  55. package/es/locale/lang/hu-HU.d.ts +0 -2
  56. package/es/locale/lang/hy-AM.d.ts +0 -2
  57. package/es/locale/lang/id-ID.d.ts +0 -2
  58. package/es/locale/lang/it-IT.d.ts +0 -2
  59. package/es/locale/lang/ja-JP.d.ts +0 -2
  60. package/es/locale/lang/ko-KR.d.ts +0 -2
  61. package/es/locale/lang/ms-MY.d.ts +0 -2
  62. package/es/locale/lang/nb-NO.d.ts +0 -2
  63. package/es/locale/lang/pt-BR.d.ts +0 -2
  64. package/es/locale/lang/ru-RU.d.ts +0 -2
  65. package/es/locale/lang/th-TH.d.ts +0 -2
  66. package/es/locale/lang/ug-CN.d.ts +0 -2
  67. package/es/locale/lang/uk-UA.d.ts +0 -2
  68. package/es/locale/lang/uz-UZ.d.ts +0 -2
  69. package/es/locale/lang/vi-VN.d.ts +0 -2
  70. package/es/locale/lang/zh-CHT.d.ts +0 -2
  71. package/es/locale/lang/zh-CN.d.ts +0 -2
  72. package/es/locale/lang/zh-HK.d.ts +0 -2
  73. package/es/locale/lang/zh-MO.d.ts +0 -2
  74. package/es/locale/lang/zh-TW.d.ts +0 -2
  75. package/es/table/style.css +0 -3657
  76. package/es/table/style.min.css +0 -1
  77. package/es/toolbar/style.css +0 -90
  78. package/es/toolbar/style.min.css +0 -1
  79. package/es/ui/style.css +0 -0
  80. package/es/ui/style.min.css +0 -0
  81. package/es/v-x-e-table/style.css +0 -0
  82. package/es/v-x-e-table/style.min.css +0 -0
  83. package/es/vxe-colgroup/style.css +0 -0
  84. package/es/vxe-colgroup/style.min.css +0 -0
  85. package/es/vxe-column/style.css +0 -0
  86. package/es/vxe-column/style.min.css +0 -0
  87. package/es/vxe-grid/style.css +0 -86
  88. package/es/vxe-grid/style.min.css +0 -1
  89. package/es/vxe-table/style.css +0 -3657
  90. package/es/vxe-table/style.min.css +0 -1
  91. package/es/vxe-toolbar/style.css +0 -90
  92. package/es/vxe-toolbar/style.min.css +0 -1
  93. package/es/vxe-ui/style.css +0 -0
  94. package/es/vxe-ui/style.min.css +0 -0
  95. package/es/vxe-v-x-e-table/style.css +0 -0
  96. package/es/vxe-v-x-e-table/style.min.css +0 -0
  97. package/lib/colgroup/style/index.js +0 -1
  98. package/lib/colgroup/style/style.css +0 -0
  99. package/lib/colgroup/style/style.min.css +0 -0
  100. package/lib/column/style/index.js +0 -1
  101. package/lib/column/style/style.css +0 -0
  102. package/lib/column/style/style.min.css +0 -0
  103. package/lib/grid/style/index.js +0 -1
  104. package/lib/grid/style/style.css +0 -86
  105. package/lib/grid/style/style.min.css +0 -1
  106. package/lib/iconfont.1758344508103.ttf +0 -0
  107. package/lib/iconfont.1758344508103.woff +0 -0
  108. package/lib/iconfont.1758344508103.woff2 +0 -0
  109. package/lib/index.common.js +0 -22
  110. package/lib/locale/lang/ar-EG.d.ts +0 -2
  111. package/lib/locale/lang/ar-EG.umd.js +0 -806
  112. package/lib/locale/lang/de-DE.d.ts +0 -2
  113. package/lib/locale/lang/de-DE.umd.js +0 -806
  114. package/lib/locale/lang/en-US.d.ts +0 -2
  115. package/lib/locale/lang/en-US.umd.js +0 -806
  116. package/lib/locale/lang/es-ES.d.ts +0 -2
  117. package/lib/locale/lang/es-ES.umd.js +0 -806
  118. package/lib/locale/lang/fr-FR.d.ts +0 -2
  119. package/lib/locale/lang/fr-FR.umd.js +0 -806
  120. package/lib/locale/lang/hu-HU.d.ts +0 -2
  121. package/lib/locale/lang/hu-HU.umd.js +0 -806
  122. package/lib/locale/lang/hy-AM.d.ts +0 -2
  123. package/lib/locale/lang/hy-AM.umd.js +0 -806
  124. package/lib/locale/lang/id-ID.d.ts +0 -2
  125. package/lib/locale/lang/id-ID.umd.js +0 -806
  126. package/lib/locale/lang/it-IT.d.ts +0 -2
  127. package/lib/locale/lang/it-IT.umd.js +0 -806
  128. package/lib/locale/lang/ja-JP.d.ts +0 -2
  129. package/lib/locale/lang/ja-JP.umd.js +0 -806
  130. package/lib/locale/lang/ko-KR.d.ts +0 -2
  131. package/lib/locale/lang/ko-KR.umd.js +0 -806
  132. package/lib/locale/lang/ms-MY.d.ts +0 -2
  133. package/lib/locale/lang/ms-MY.umd.js +0 -806
  134. package/lib/locale/lang/nb-NO.d.ts +0 -2
  135. package/lib/locale/lang/nb-NO.umd.js +0 -806
  136. package/lib/locale/lang/pt-BR.d.ts +0 -2
  137. package/lib/locale/lang/pt-BR.umd.js +0 -806
  138. package/lib/locale/lang/ru-RU.d.ts +0 -2
  139. package/lib/locale/lang/ru-RU.umd.js +0 -806
  140. package/lib/locale/lang/th-TH.d.ts +0 -2
  141. package/lib/locale/lang/th-TH.umd.js +0 -806
  142. package/lib/locale/lang/ug-CN.d.ts +0 -2
  143. package/lib/locale/lang/ug-CN.umd.js +0 -806
  144. package/lib/locale/lang/uk-UA.d.ts +0 -2
  145. package/lib/locale/lang/uk-UA.umd.js +0 -806
  146. package/lib/locale/lang/uz-UZ.d.ts +0 -2
  147. package/lib/locale/lang/uz-UZ.umd.js +0 -806
  148. package/lib/locale/lang/vi-VN.d.ts +0 -2
  149. package/lib/locale/lang/vi-VN.umd.js +0 -806
  150. package/lib/locale/lang/zh-CHT.d.ts +0 -2
  151. package/lib/locale/lang/zh-CHT.umd.js +0 -806
  152. package/lib/locale/lang/zh-CN.d.ts +0 -2
  153. package/lib/locale/lang/zh-CN.umd.js +0 -808
  154. package/lib/locale/lang/zh-HK.d.ts +0 -2
  155. package/lib/locale/lang/zh-HK.umd.js +0 -23
  156. package/lib/locale/lang/zh-MO.d.ts +0 -2
  157. package/lib/locale/lang/zh-MO.umd.js +0 -23
  158. package/lib/locale/lang/zh-TW.d.ts +0 -2
  159. package/lib/locale/lang/zh-TW.umd.js +0 -23
  160. package/lib/table/module/custom/hook.js +0 -430
  161. package/lib/table/module/custom/hook.min.js +0 -1
  162. package/lib/table/module/custom/panel.js +0 -1193
  163. package/lib/table/module/custom/panel.min.js +0 -1
  164. package/lib/table/module/edit/hook.js +0 -1308
  165. package/lib/table/module/edit/hook.min.js +0 -1
  166. package/lib/table/module/export/export-panel.js +0 -467
  167. package/lib/table/module/export/export-panel.min.js +0 -1
  168. package/lib/table/module/export/hook.js +0 -1888
  169. package/lib/table/module/export/hook.min.js +0 -1
  170. package/lib/table/module/export/import-panel.js +0 -226
  171. package/lib/table/module/export/import-panel.min.js +0 -1
  172. package/lib/table/module/export/util.js +0 -20
  173. package/lib/table/module/export/util.min.js +0 -1
  174. package/lib/table/module/filter/hook.js +0 -442
  175. package/lib/table/module/filter/hook.min.js +0 -1
  176. package/lib/table/module/filter/panel.js +0 -265
  177. package/lib/table/module/filter/panel.min.js +0 -1
  178. package/lib/table/module/keyboard/hook.js +0 -579
  179. package/lib/table/module/keyboard/hook.min.js +0 -1
  180. package/lib/table/module/menu/hook.js +0 -392
  181. package/lib/table/module/menu/hook.min.js +0 -1
  182. package/lib/table/module/menu/panel.js +0 -145
  183. package/lib/table/module/menu/panel.min.js +0 -1
  184. package/lib/table/module/validator/hook.js +0 -681
  185. package/lib/table/module/validator/hook.min.js +0 -1
  186. package/lib/table/src/header.min.js +0 -1
  187. package/lib/table/src/props.min.js +0 -1
  188. package/lib/table/src/store.js +0 -15
  189. package/lib/table/src/store.min.js +0 -1
  190. package/lib/table/src/table.js +0 -902
  191. package/lib/table/src/table.min.js +0 -1
  192. package/lib/table/src/use/cell-view.js +0 -57
  193. package/lib/table/src/use/cell-view.min.js +0 -1
  194. package/lib/table/src/use/index.js +0 -16
  195. package/lib/table/src/use/index.min.js +0 -1
  196. package/lib/table/src/util.js +0 -916
  197. package/lib/table/src/util.min.js +0 -1
  198. package/lib/table/style/index.js +0 -1
  199. package/lib/table/style/style.css +0 -3657
  200. package/lib/table/style/style.min.css +0 -1
  201. package/lib/toolbar/style/index.js +0 -1
  202. package/lib/toolbar/style/style.css +0 -90
  203. package/lib/toolbar/style/style.min.css +0 -1
  204. package/lib/ui/style/index.js +0 -1
  205. package/lib/ui/style/style.css +0 -0
  206. package/lib/ui/style/style.min.css +0 -0
  207. package/lib/v-x-e-table/style/index.js +0 -1
  208. package/lib/v-x-e-table/style/style.css +0 -0
  209. package/lib/v-x-e-table/style/style.min.css +0 -0
  210. package/lib/vxe-colgroup/style/index.js +0 -1
  211. package/lib/vxe-colgroup/style/style.css +0 -0
  212. package/lib/vxe-colgroup/style/style.min.css +0 -0
  213. package/lib/vxe-column/style/index.js +0 -1
  214. package/lib/vxe-column/style/style.css +0 -0
  215. package/lib/vxe-column/style/style.min.css +0 -0
  216. package/lib/vxe-grid/style/index.js +0 -1
  217. package/lib/vxe-grid/style/style.css +0 -86
  218. package/lib/vxe-grid/style/style.min.css +0 -1
  219. package/lib/vxe-table/style/index.js +0 -1
  220. package/lib/vxe-table/style/style.css +0 -3657
  221. package/lib/vxe-table/style/style.min.css +0 -1
  222. package/lib/vxe-toolbar/style/index.js +0 -1
  223. package/lib/vxe-toolbar/style/style.css +0 -90
  224. package/lib/vxe-toolbar/style/style.min.css +0 -1
  225. package/lib/vxe-ui/style/index.js +0 -1
  226. package/lib/vxe-ui/style/style.css +0 -0
  227. package/lib/vxe-ui/style/style.min.css +0 -0
  228. package/lib/vxe-v-x-e-table/style/index.js +0 -1
  229. package/lib/vxe-v-x-e-table/style/style.css +0 -0
  230. package/lib/vxe-v-x-e-table/style/style.min.css +0 -0
@@ -1,681 +0,0 @@
1
- "use strict";
2
-
3
- var _vue = require("vue");
4
- var _xeUtils = _interopRequireDefault(require("xe-utils"));
5
- var _ui = require("../../../ui");
6
- var _utils = require("../../../ui/src/utils");
7
- var _dom = require("../../../ui/src/dom");
8
- var _util = require("../../src/util");
9
- var _log = require("../../../ui/src/log");
10
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
- const {
12
- getConfig,
13
- validators,
14
- hooks
15
- } = _ui.VxeUI;
16
- /**
17
- * 校验规则
18
- */
19
- class Rule {
20
- constructor(rule) {
21
- Object.assign(this, {
22
- $options: rule,
23
- required: rule.required,
24
- min: rule.min,
25
- max: rule.max,
26
- type: rule.type,
27
- pattern: rule.pattern,
28
- validator: rule.validator,
29
- trigger: rule.trigger,
30
- maxWidth: rule.maxWidth
31
- });
32
- }
33
- /**
34
- * 获取校验不通过的消息
35
- * 支持国际化翻译
36
- */
37
- get content() {
38
- return (0, _utils.getFuncText)(this.$options.content || this.$options.message);
39
- }
40
- get message() {
41
- return this.content;
42
- }
43
- }
44
- // 如果存在 pattern,判断正则
45
- function validREValue(pattern, val) {
46
- if (pattern && !(_xeUtils.default.isRegExp(pattern) ? pattern : new RegExp(pattern)).test(val)) {
47
- return false;
48
- }
49
- return true;
50
- }
51
- // 如果存在 max,判断最大值
52
- function validMaxValue(max, num) {
53
- if (!_xeUtils.default.eqNull(max) && num > _xeUtils.default.toNumber(max)) {
54
- return false;
55
- }
56
- return true;
57
- }
58
- // 如果存在 min,判断最小值
59
- function validMinValue(min, num) {
60
- if (!_xeUtils.default.eqNull(min) && num < _xeUtils.default.toNumber(min)) {
61
- return false;
62
- }
63
- return true;
64
- }
65
- function validRuleValue(rule, val, required) {
66
- const {
67
- type,
68
- min,
69
- max,
70
- pattern
71
- } = rule;
72
- const isArrType = type === 'array';
73
- const isNumType = type === 'number';
74
- const isStrType = type === 'string';
75
- const strVal = `${val}`;
76
- if (!validREValue(pattern, strVal)) {
77
- return false;
78
- }
79
- if (isArrType) {
80
- if (!_xeUtils.default.isArray(val)) {
81
- return false;
82
- }
83
- if (required) {
84
- if (!val.length) {
85
- return false;
86
- }
87
- }
88
- if (!validMinValue(min, val.length)) {
89
- return false;
90
- }
91
- if (!validMaxValue(max, val.length)) {
92
- return false;
93
- }
94
- } else if (isNumType) {
95
- const numVal = Number(val);
96
- if (isNaN(numVal)) {
97
- return false;
98
- }
99
- if (!validMinValue(min, numVal)) {
100
- return false;
101
- }
102
- if (!validMaxValue(max, numVal)) {
103
- return false;
104
- }
105
- } else {
106
- if (isStrType) {
107
- if (!_xeUtils.default.isString(val)) {
108
- return false;
109
- }
110
- }
111
- if (required) {
112
- if (!strVal) {
113
- return false;
114
- }
115
- }
116
- if (!validMinValue(min, strVal.length)) {
117
- return false;
118
- }
119
- if (!validMaxValue(max, strVal.length)) {
120
- return false;
121
- }
122
- }
123
- return true;
124
- }
125
- function checkRuleStatus(rule, val) {
126
- const {
127
- required
128
- } = rule;
129
- const isEmptyVal = _xeUtils.default.isArray(val) ? !val.length : (0, _utils.eqEmptyValue)(val);
130
- if (required) {
131
- if (isEmptyVal) {
132
- return false;
133
- }
134
- if (!validRuleValue(rule, val, required)) {
135
- return false;
136
- }
137
- } else {
138
- if (!isEmptyVal) {
139
- if (!validRuleValue(rule, val, required)) {
140
- return false;
141
- }
142
- }
143
- }
144
- return true;
145
- }
146
- const tableValidatorMethodKeys = ['fullValidate', 'validate', 'fullValidateField', 'validateField', 'clearValidate'];
147
- hooks.add('tableValidatorModule', {
148
- setupTable($xeTable) {
149
- const {
150
- props,
151
- reactData,
152
- internalData
153
- } = $xeTable;
154
- const {
155
- refValidTooltip
156
- } = $xeTable.getRefMaps();
157
- const {
158
- computeValidOpts,
159
- computeTreeOpts,
160
- computeEditOpts,
161
- computeAggregateOpts
162
- } = $xeTable.getComputeMaps();
163
- let validatorMethods = {};
164
- let validatorPrivateMethods = {};
165
- let validRuleErr;
166
- /**
167
- * 聚焦到校验通过的单元格并弹出校验错误提示
168
- */
169
- const handleValidError = params => {
170
- return new Promise(resolve => {
171
- const validOpts = computeValidOpts.value;
172
- if (validOpts.autoPos === false) {
173
- $xeTable.dispatchEvent('valid-error', params, null);
174
- resolve();
175
- } else {
176
- $xeTable.handleEdit(params, {
177
- type: 'valid-error',
178
- trigger: 'call'
179
- }).then(() => {
180
- resolve(validatorPrivateMethods.showValidTooltip(params));
181
- });
182
- }
183
- });
184
- };
185
- const handleErrMsgMode = validErrMaps => {
186
- const validOpts = computeValidOpts.value;
187
- if (validOpts.msgMode === 'single') {
188
- const keys = Object.keys(validErrMaps);
189
- const resMaps = {};
190
- if (keys.length) {
191
- const firstKey = keys[0];
192
- resMaps[firstKey] = validErrMaps[firstKey];
193
- }
194
- return resMaps;
195
- }
196
- return validErrMaps;
197
- };
198
- /**
199
- * 对表格数据进行校验
200
- * 如果不指定数据,则默认只校验临时变动的数据,例如新增或修改
201
- * 如果传 true 则校验当前表格数据
202
- * 如果传 row 指定行记录,则只验证传入的行
203
- * 如果传 rows 为多行记录,则只验证传入的行
204
- * 如果只传 callback 否则默认验证整个表格数据
205
- * 返回 Promise 对象,或者使用回调方式
206
- */
207
- const beginValidate = (rows, cols, cb, isFull) => {
208
- const validRest = {};
209
- const {
210
- editRules,
211
- treeConfig
212
- } = props;
213
- const {
214
- isRowGroupStatus
215
- } = reactData;
216
- const {
217
- afterFullData,
218
- pendingRowMaps,
219
- removeRowMaps
220
- } = internalData;
221
- const treeOpts = computeTreeOpts.value;
222
- const aggregateOpts = computeAggregateOpts.value;
223
- const validOpts = computeValidOpts.value;
224
- let validList;
225
- if (rows === true) {
226
- validList = afterFullData;
227
- } else if (rows) {
228
- if (_xeUtils.default.isFunction(rows)) {
229
- cb = rows;
230
- } else {
231
- validList = _xeUtils.default.isArray(rows) ? rows : [rows];
232
- }
233
- }
234
- if (!validList) {
235
- if ($xeTable.getInsertRecords) {
236
- validList = $xeTable.getInsertRecords().concat($xeTable.getUpdateRecords());
237
- } else {
238
- validList = [];
239
- }
240
- }
241
- const rowValidErrs = [];
242
- internalData._lastCallTime = Date.now();
243
- validRuleErr = false; // 如果为快速校验,当存在某列校验不通过时将终止执行
244
- validatorMethods.clearValidate();
245
- const validErrMaps = {};
246
- if (editRules) {
247
- const columns = cols && cols.length ? cols : $xeTable.getColumns();
248
- const handleVaild = row => {
249
- const rowid = (0, _util.getRowid)($xeTable, row);
250
- // 是否删除
251
- if (removeRowMaps[rowid]) {
252
- return;
253
- }
254
- // 是否标记删除
255
- if (pendingRowMaps[rowid]) {
256
- return;
257
- }
258
- if ($xeTable.isAggregateRecord(row)) {
259
- return;
260
- }
261
- if (isFull || !validRuleErr) {
262
- const colVailds = [];
263
- columns.forEach(column => {
264
- const field = _xeUtils.default.isString(column) ? column : column.field;
265
- if ((isFull || !validRuleErr) && _xeUtils.default.has(editRules, field)) {
266
- colVailds.push(validatorPrivateMethods.validCellRules('all', row, column).catch(({
267
- rule,
268
- rules
269
- }) => {
270
- const rest = {
271
- rule,
272
- rules,
273
- rowIndex: $xeTable.getRowIndex(row),
274
- row,
275
- columnIndex: $xeTable.getColumnIndex(column),
276
- column,
277
- field,
278
- $table: $xeTable
279
- };
280
- if (!validRest[field]) {
281
- validRest[field] = [];
282
- }
283
- validErrMaps[`${(0, _util.getRowid)($xeTable, row)}:${column.id}`] = {
284
- column,
285
- row,
286
- rule,
287
- content: rule.content
288
- };
289
- validRest[field].push(rest);
290
- if (!isFull) {
291
- validRuleErr = true;
292
- return Promise.reject(rest);
293
- }
294
- }));
295
- }
296
- });
297
- rowValidErrs.push(Promise.all(colVailds));
298
- }
299
- };
300
- if (isRowGroupStatus) {
301
- _xeUtils.default.eachTree(validList, handleVaild, {
302
- children: aggregateOpts.mapChildrenField
303
- });
304
- } else if (treeConfig) {
305
- const childrenField = treeOpts.children || treeOpts.childrenField;
306
- _xeUtils.default.eachTree(validList, handleVaild, {
307
- children: childrenField
308
- });
309
- } else {
310
- validList.forEach(handleVaild);
311
- }
312
- return Promise.all(rowValidErrs).then(() => {
313
- const ruleProps = Object.keys(validRest);
314
- reactData.validErrorMaps = handleErrMsgMode(validErrMaps);
315
- return (0, _vue.nextTick)().then(() => {
316
- if (ruleProps.length) {
317
- return Promise.reject(validRest[ruleProps[0]][0]);
318
- }
319
- if (cb) {
320
- cb();
321
- }
322
- });
323
- }).catch(firstErrParams => {
324
- return new Promise((resolve, reject) => {
325
- const finish = () => {
326
- (0, _vue.nextTick)(() => {
327
- if (cb) {
328
- cb(validRest);
329
- resolve();
330
- } else {
331
- if (getConfig().validToReject === 'obsolete') {
332
- // 已废弃,校验失败将不会执行catch
333
- reject(validRest);
334
- } else {
335
- resolve(validRest);
336
- }
337
- }
338
- });
339
- };
340
- const posAndFinish = () => {
341
- firstErrParams.cell = $xeTable.getCellElement(firstErrParams.row, firstErrParams.column);
342
- (0, _dom.scrollToView)(firstErrParams.cell);
343
- handleValidError(firstErrParams).then(finish);
344
- };
345
- /**
346
- * 当校验不通过时
347
- * 将表格滚动到可视区
348
- * 由于提示信息至少需要占一行,定位向上偏移一行
349
- */
350
- if (validOpts.autoPos === false) {
351
- finish();
352
- } else {
353
- const row = firstErrParams.row;
354
- const column = firstErrParams.column;
355
- $xeTable.scrollToRow(row, column).then(posAndFinish);
356
- }
357
- });
358
- });
359
- } else {
360
- reactData.validErrorMaps = {};
361
- }
362
- return (0, _vue.nextTick)().then(() => {
363
- if (cb) {
364
- cb();
365
- }
366
- });
367
- };
368
- validatorMethods = {
369
- /**
370
- * 完整校验行,和 validate 的区别就是会给有效数据中的每一行进行校验
371
- */
372
- fullValidate(rows, cb) {
373
- if (_xeUtils.default.isFunction(cb)) {
374
- (0, _log.warnLog)('vxe.error.notValidators', ['fullValidate(rows, callback)', 'fullValidate(rows)']);
375
- }
376
- return beginValidate(rows, null, cb, true);
377
- },
378
- /**
379
- * 快速校验行,如果存在记录不通过的记录,则返回不再继续校验(异步校验除外)
380
- */
381
- validate(rows, cb) {
382
- return beginValidate(rows, null, cb);
383
- },
384
- /**
385
- * 完整校验单元格,和 validateField 的区别就是会给有效数据中的每一行进行校验
386
- */
387
- fullValidateField(rows, fieldOrColumn) {
388
- const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)($xeTable, column));
389
- if (colList.length) {
390
- return beginValidate(rows, colList, null, true);
391
- }
392
- return (0, _vue.nextTick)();
393
- },
394
- /**
395
- * 快速校验单元格,如果存在记录不通过的记录,则返回不再继续校验(异步校验除外)
396
- */
397
- validateField(rows, fieldOrColumn) {
398
- const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)($xeTable, column));
399
- if (colList.length) {
400
- return beginValidate(rows, colList, null);
401
- }
402
- return (0, _vue.nextTick)();
403
- },
404
- clearValidate(rows, fieldOrColumn) {
405
- const {
406
- validErrorMaps
407
- } = reactData;
408
- const validTip = refValidTooltip.value;
409
- const validOpts = computeValidOpts.value;
410
- const rowList = _xeUtils.default.isArray(rows) ? rows : rows ? [rows] : [];
411
- const colList = (_xeUtils.default.isArray(fieldOrColumn) ? fieldOrColumn : fieldOrColumn ? [fieldOrColumn] : []).map(column => (0, _util.handleFieldOrColumn)($xeTable, column));
412
- let validErrMaps = {};
413
- if (validTip && validTip.reactData.visible) {
414
- validTip.close();
415
- }
416
- // 如果是单个提示模式
417
- if (validOpts.msgMode === 'single') {
418
- reactData.validErrorMaps = {};
419
- return (0, _vue.nextTick)();
420
- }
421
- if (rowList.length && colList.length) {
422
- validErrMaps = Object.assign({}, validErrorMaps);
423
- rowList.forEach(row => {
424
- colList.forEach(column => {
425
- const validKey = `${(0, _util.getRowid)($xeTable, row)}:${column.id}`;
426
- if (validErrMaps[validKey]) {
427
- delete validErrMaps[validKey];
428
- }
429
- });
430
- });
431
- } else if (rowList.length) {
432
- const rowIdList = rowList.map(row => `${(0, _util.getRowid)($xeTable, row)}`);
433
- _xeUtils.default.each(validErrorMaps, (item, key) => {
434
- if (rowIdList.indexOf(key.split(':')[0]) > -1) {
435
- validErrMaps[key] = item;
436
- }
437
- });
438
- } else if (colList.length) {
439
- const colidList = colList.map(column => `${column.id}`);
440
- _xeUtils.default.each(validErrorMaps, (item, key) => {
441
- if (colidList.indexOf(key.split(':')[1]) > -1) {
442
- validErrMaps[key] = item;
443
- }
444
- });
445
- }
446
- reactData.validErrorMaps = validErrMaps;
447
- return (0, _vue.nextTick)();
448
- }
449
- };
450
- validatorPrivateMethods = {
451
- /**
452
- * 校验数据
453
- * 按表格行、列顺序依次校验(同步或异步)
454
- * 校验规则根据索引顺序依次校验,如果是异步则会等待校验完成才会继续校验下一列
455
- * 如果校验失败则,触发回调或者Promise<不通过列的错误消息>
456
- * 如果是传回调方式这返回一个校验不通过列的错误消息
457
- *
458
- * rule 配置:
459
- * required=Boolean 是否必填
460
- * min=Number 最小长度
461
- * max=Number 最大长度
462
- * validator=Function({ cellValue, rule, rules, row, column, rowIndex, columnIndex }) 自定义校验,接收一个 Promise
463
- * trigger=blur|change 触发方式(除非特殊场景,否则默认为空就行)
464
- */
465
- validCellRules(validType, row, column, val) {
466
- const $xeGrid = $xeTable.xeGrid;
467
- const $xeGantt = $xeTable.xeGantt;
468
- const {
469
- editRules
470
- } = props;
471
- const {
472
- field
473
- } = column;
474
- const errorRules = [];
475
- const syncValidList = [];
476
- if (field && editRules) {
477
- const rules = _xeUtils.default.get(editRules, field);
478
- if (rules) {
479
- const cellValue = _xeUtils.default.isUndefined(val) ? _xeUtils.default.get(row, field) : val;
480
- rules.forEach(rule => {
481
- const {
482
- trigger,
483
- validator
484
- } = rule;
485
- if (validType === 'all' || !trigger || validType === trigger) {
486
- if (validator) {
487
- const validParams = {
488
- cellValue,
489
- rule,
490
- rules,
491
- row,
492
- rowIndex: $xeTable.getRowIndex(row),
493
- column,
494
- columnIndex: $xeTable.getColumnIndex(column),
495
- field: column.field,
496
- $table: $xeTable,
497
- $grid: $xeGrid,
498
- $gantt: $xeGantt
499
- };
500
- let customValid;
501
- if (_xeUtils.default.isString(validator)) {
502
- const gvItem = validators.get(validator);
503
- if (gvItem) {
504
- const tcvMethod = gvItem.tableCellValidatorMethod || gvItem.cellValidatorMethod;
505
- if (tcvMethod) {
506
- customValid = tcvMethod(validParams);
507
- } else {
508
- (0, _log.errLog)('vxe.error.notValidators', [validator]);
509
- }
510
- } else {
511
- (0, _log.errLog)('vxe.error.notValidators', [validator]);
512
- }
513
- } else {
514
- customValid = validator(validParams);
515
- }
516
- if (customValid) {
517
- if (_xeUtils.default.isError(customValid)) {
518
- validRuleErr = true;
519
- errorRules.push(new Rule({
520
- type: 'custom',
521
- trigger,
522
- content: customValid.message,
523
- rule: new Rule(rule)
524
- }));
525
- } else if (customValid.catch) {
526
- // 如果为异步校验(注:异步校验是并发无序的)
527
- syncValidList.push(customValid.catch(e => {
528
- validRuleErr = true;
529
- errorRules.push(new Rule({
530
- type: 'custom',
531
- trigger,
532
- content: e && e.message ? e.message : rule.content || rule.message,
533
- rule: new Rule(rule)
534
- }));
535
- }));
536
- }
537
- }
538
- } else {
539
- if (!checkRuleStatus(rule, cellValue)) {
540
- validRuleErr = true;
541
- errorRules.push(new Rule(rule));
542
- }
543
- }
544
- }
545
- });
546
- }
547
- }
548
- return Promise.all(syncValidList).then(() => {
549
- if (errorRules.length) {
550
- const rest = {
551
- rules: errorRules,
552
- rule: errorRules[0]
553
- };
554
- return Promise.reject(rest);
555
- }
556
- });
557
- },
558
- hasCellRules(type, row, column) {
559
- const {
560
- editRules
561
- } = props;
562
- const {
563
- field
564
- } = column;
565
- if (field && editRules) {
566
- const rules = _xeUtils.default.get(editRules, field);
567
- return rules && !!_xeUtils.default.find(rules, rule => type === 'all' || !rule.trigger || type === rule.trigger);
568
- }
569
- return false;
570
- },
571
- /**
572
- * 触发校验
573
- */
574
- triggerValidate(type) {
575
- const {
576
- editConfig,
577
- editRules
578
- } = props;
579
- const {
580
- editStore
581
- } = reactData;
582
- const {
583
- actived
584
- } = editStore;
585
- const editOpts = computeEditOpts.value;
586
- const validOpts = computeValidOpts.value;
587
- // 检查清除校验消息
588
- if (editRules && validOpts.msgMode === 'single') {
589
- reactData.validErrorMaps = {};
590
- }
591
- // 校验单元格
592
- if (editConfig && editRules && actived.row) {
593
- const {
594
- row,
595
- column,
596
- cell
597
- } = actived.args;
598
- if (validatorPrivateMethods.hasCellRules(type, row, column)) {
599
- return validatorPrivateMethods.validCellRules(type, row, column).then(() => {
600
- if (editOpts.mode === 'row') {
601
- validatorMethods.clearValidate(row, column);
602
- }
603
- }).catch(({
604
- rule
605
- }) => {
606
- // 如果校验不通过与触发方式一致,则聚焦提示错误,否则跳过并不作任何处理
607
- if (!rule.trigger || type === rule.trigger) {
608
- const rest = {
609
- rule,
610
- row,
611
- column,
612
- cell
613
- };
614
- validatorPrivateMethods.showValidTooltip(rest);
615
- return Promise.reject(rest);
616
- }
617
- return Promise.resolve();
618
- });
619
- }
620
- }
621
- return Promise.resolve();
622
- },
623
- /**
624
- * 弹出校验错误提示
625
- */
626
- showValidTooltip(params) {
627
- const {
628
- height
629
- } = props;
630
- const {
631
- tableData,
632
- validStore,
633
- validErrorMaps
634
- } = reactData;
635
- const {
636
- rule,
637
- row,
638
- column,
639
- cell
640
- } = params;
641
- const validOpts = computeValidOpts.value;
642
- const validTip = refValidTooltip.value;
643
- const content = rule.content;
644
- validStore.visible = true;
645
- if (validOpts.msgMode === 'single') {
646
- reactData.validErrorMaps = {
647
- [`${(0, _util.getRowid)($xeTable, row)}:${column.id}`]: {
648
- column,
649
- row,
650
- rule,
651
- content
652
- }
653
- };
654
- } else {
655
- reactData.validErrorMaps = Object.assign({}, validErrorMaps, {
656
- [`${(0, _util.getRowid)($xeTable, row)}:${column.id}`]: {
657
- column,
658
- row,
659
- rule,
660
- content
661
- }
662
- });
663
- }
664
- $xeTable.dispatchEvent('valid-error', params, null);
665
- if (validTip) {
666
- if (validTip && (validOpts.message === 'tooltip' || validOpts.message === 'default' && !height && tableData.length < 2)) {
667
- return validTip.open(cell, content);
668
- }
669
- }
670
- return (0, _vue.nextTick)();
671
- }
672
- };
673
- return Object.assign(Object.assign({}, validatorMethods), validatorPrivateMethods);
674
- },
675
- setupGrid($xeGrid) {
676
- return $xeGrid.extendTableMethods(tableValidatorMethodKeys);
677
- },
678
- setupGantt($xeGantt) {
679
- return $xeGantt.extendTableMethods(tableValidatorMethodKeys);
680
- }
681
- });
@@ -1 +0,0 @@
1
- var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_dom=require("../../../ui/src/dom"),_util=require("../../src/util"),_log=require("../../../ui/src/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getConfig,validators,hooks}=_ui.VxeUI;class Rule{constructor(e){Object.assign(this,{$options:e,required:e.required,min:e.min,max:e.max,type:e.type,pattern:e.pattern,validator:e.validator,trigger:e.trigger,maxWidth:e.maxWidth})}get content(){return(0,_utils.getFuncText)(this.$options.content||this.$options.message)}get message(){return this.content}}function validREValue(e,l){return!(e&&!(_xeUtils.default.isRegExp(e)?e:new RegExp(e)).test(l))}function validMaxValue(e,l){return!(!_xeUtils.default.eqNull(e)&&l>_xeUtils.default.toNumber(e))}function validMinValue(e,l){return!(!_xeUtils.default.eqNull(e)&&l<_xeUtils.default.toNumber(e))}function validRuleValue(e,l,t){var{type:e,min:r,max:i,pattern:a}=e,u="array"===e,n="number"===e,e="string"===e,s=""+l;if(!validREValue(a,s))return!1;if(u){if(!_xeUtils.default.isArray(l))return!1;if(t&&!l.length)return!1;if(!validMinValue(r,l.length))return!1;if(!validMaxValue(i,l.length))return!1}else if(n){a=Number(l);if(isNaN(a))return!1;if(!validMinValue(r,a))return!1;if(!validMaxValue(i,a))return!1}else{if(e&&!_xeUtils.default.isString(l))return!1;if(t&&!s)return!1;if(!validMinValue(r,s.length))return!1;if(!validMaxValue(i,s.length))return!1}return!0}function checkRuleStatus(e,l){var t=e.required,r=_xeUtils.default.isArray(l)?!l.length:(0,_utils.eqEmptyValue)(l);if(t){if(r)return!1;if(!validRuleValue(e,l,t))return!1}else if(!r&&!validRuleValue(e,l,t))return!1;return!0}let tableValidatorMethodKeys=["fullValidate","validate","fullValidateField","validateField","clearValidate"];hooks.add("tableValidatorModule",{setupTable(p){let{props:x,reactData:_,internalData:R}=p,g=p.getRefMaps().refValidTooltip,{computeValidOpts:w,computeTreeOpts:V,computeEditOpts:r,computeAggregateOpts:M}=p.getComputeMaps(),U={},b={},E,t=(e,t,u,a)=>{let n={},{editRules:s,treeConfig:r}=x;var i=_.isRowGroupStatus;let{afterFullData:l,pendingRowMaps:o,removeRowMaps:d}=R;var c=V.value,g=M.value;let f=w.value,v,h=(!0===e?v=l:e&&(_xeUtils.default.isFunction(e)?u=e:v=_xeUtils.default.isArray(e)?e:[e]),v=v||(p.getInsertRecords?p.getInsertRecords().concat(p.getUpdateRecords()):[]),[]),m=(R._lastCallTime=Date.now(),E=!1,U.clearValidate(),{});if(s){let l=t&&t.length?t:p.getColumns();e=i=>{var e=(0,_util.getRowid)(p,i);if(!d[e]&&!o[e]&&!p.isAggregateRecord(i)&&(a||!E)){let e=[];l.forEach(t=>{let r=_xeUtils.default.isString(t)?t:t.field;!a&&E||!_xeUtils.default.has(s,r)||e.push(b.validCellRules("all",i,t).catch(({rule:e,rules:l})=>{l={rule:e,rules:l,rowIndex:p.getRowIndex(i),row:i,columnIndex:p.getColumnIndex(t),column:t,field:r,$table:p};if(n[r]||(n[r]=[]),m[(0,_util.getRowid)(p,i)+":"+t.id]={column:t,row:i,rule:e,content:e.content},n[r].push(l),!a)return E=!0,Promise.reject(l)}))}),h.push(Promise.all(e))}};return i?_xeUtils.default.eachTree(v,e,{children:g.mapChildrenField}):r?(t=c.children||c.childrenField,_xeUtils.default.eachTree(v,e,{children:t})):v.forEach(e),Promise.all(h).then(()=>{let e=Object.keys(n);var l,t,r;return _.validErrorMaps=(l=m,"single"===w.value.msgMode?(t={},(r=Object.keys(l)).length&&(t[r=r[0]]=l[r]),t):l),(0,_vue.nextTick)().then(()=>{if(e.length)return Promise.reject(n[e[0]][0]);u&&u()})}).catch(a=>new Promise((e,l)=>{let t=()=>{(0,_vue.nextTick)(()=>{u?(u(n),e()):("obsolete"===getConfig().validToReject?l:e)(n)})};var r,i=()=>{var l;a.cell=p.getCellElement(a.row,a.column),(0,_dom.scrollToView)(a.cell),l=a,new Promise(e=>{!1===w.value.autoPos?(p.dispatchEvent("valid-error",l,null),e()):p.handleEdit(l,{type:"valid-error",trigger:"call"}).then(()=>{e(b.showValidTooltip(l))})}).then(t)};!1===f.autoPos?t():(r=a.row,p.scrollToRow(r,a.column).then(i))}))}return _.validErrorMaps={},(0,_vue.nextTick)().then(()=>{u&&u()})};return U={fullValidate(e,l){return _xeUtils.default.isFunction(l)&&(0,_log.warnLog)("vxe.error.notValidators",["fullValidate(rows, callback)","fullValidate(rows)"]),t(e,null,l,!0)},validate(e,l){return t(e,null,l)},fullValidateField(e,l){l=(_xeUtils.default.isArray(l)?l:l?[l]:[]).map(e=>(0,_util.handleFieldOrColumn)(p,e));return l.length?t(e,l,null,!0):(0,_vue.nextTick)()},validateField(e,l){l=(_xeUtils.default.isArray(l)?l:l?[l]:[]).map(e=>(0,_util.handleFieldOrColumn)(p,e));return l.length?t(e,l,null):(0,_vue.nextTick)()},clearValidate(e,l){var r=_.validErrorMaps,t=g.value,i=w.value,e=_xeUtils.default.isArray(e)?e:e?[e]:[];let a=(_xeUtils.default.isArray(l)?l:l?[l]:[]).map(e=>(0,_util.handleFieldOrColumn)(p,e)),u={};if(t&&t.reactData.visible&&t.close(),"single"===i.msgMode)_.validErrorMaps={};else{if(e.length&&a.length)u=Object.assign({},r),e.forEach(l=>{a.forEach(e=>{e=(0,_util.getRowid)(p,l)+":"+e.id;u[e]&&delete u[e]})});else if(e.length){let t=e.map(e=>""+(0,_util.getRowid)(p,e));_xeUtils.default.each(r,(e,l)=>{-1<t.indexOf(l.split(":")[0])&&(u[l]=e)})}else if(a.length){let t=a.map(e=>""+e.id);_xeUtils.default.each(r,(e,l)=>{-1<t.indexOf(l.split(":")[1])&&(u[l]=e)})}_.validErrorMaps=u}return(0,_vue.nextTick)()}},b={validCellRules(e,s,o,l){let d=p.xeGrid,c=p.xeGantt;var t=x.editRules,r=o.field;let g=[],f=[];if(r&&t){let n=_xeUtils.default.get(t,r);if(n){let u=_xeUtils.default.isUndefined(l)?_xeUtils.default.get(s,r):l;n.forEach(l=>{let{trigger:t,validator:r}=l;if("all"===e||!t||e===t)if(r){var i,a={cellValue:u,rule:l,rules:n,row:s,rowIndex:p.getRowIndex(s),column:o,columnIndex:p.getColumnIndex(o),field:o.field,$table:p,$grid:d,$gantt:c};let e;_xeUtils.default.isString(r)?(i=validators.get(r))&&(i=i.tableCellValidatorMethod||i.cellValidatorMethod)?e=i(a):(0,_log.errLog)("vxe.error.notValidators",[r]):e=r(a),e&&(_xeUtils.default.isError(e)?(E=!0,g.push(new Rule({type:"custom",trigger:t,content:e.message,rule:new Rule(l)}))):e.catch&&f.push(e.catch(e=>{E=!0,g.push(new Rule({type:"custom",trigger:t,content:e&&e.message?e.message:l.content||l.message,rule:new Rule(l)}))})))}else checkRuleStatus(l,u)||(E=!0,g.push(new Rule(l)))})}}return Promise.all(f).then(()=>{var e;if(g.length)return e={rules:g,rule:g[0]},Promise.reject(e)})},hasCellRules(l,e,t){var r=x.editRules,t=t.field;return!(!t||!r)&&(r=_xeUtils.default.get(r,t))&&!!_xeUtils.default.find(r,e=>"all"===l||!e.trigger||l===e.trigger)},triggerValidate(i){var{editConfig:e,editRules:l}=x,a=_.editStore,a=a.actived;let u=r.value;var t=w.value;if(l&&"single"===t.msgMode&&(_.validErrorMaps={}),e&&l&&a.row){let{row:l,column:t,cell:r}=a.args;if(b.hasCellRules(i,l,t))return b.validCellRules(i,l,t).then(()=>{"row"===u.mode&&U.clearValidate(l,t)}).catch(({rule:e})=>e.trigger&&i!==e.trigger?Promise.resolve():(e={rule:e,row:l,column:t,cell:r},b.showValidTooltip(e),Promise.reject(e)))}return Promise.resolve()},showValidTooltip(e){var l=x.height,{tableData:t,validStore:r,validErrorMaps:i}=_,{rule:a,row:u,column:n,cell:s}=e,o=w.value,d=g.value,c=a.content;return r.visible=!0,"single"===o.msgMode?_.validErrorMaps={[(0,_util.getRowid)(p,u)+":"+n.id]:{column:n,row:u,rule:a,content:c}}:_.validErrorMaps=Object.assign({},i,{[(0,_util.getRowid)(p,u)+":"+n.id]:{column:n,row:u,rule:a,content:c}}),p.dispatchEvent("valid-error",e,null),d&&("tooltip"===o.message||"default"===o.message&&!l&&t.length<2)?d.open(s,c):(0,_vue.nextTick)()}},Object.assign(Object.assign({},U),b)},setupGrid(e){return e.extendTableMethods(tableValidatorMethodKeys)},setupGantt(e){return e.extendTableMethods(tableValidatorMethodKeys)}});