vxe-table 4.5.0-beta.11 → 4.5.0-beta.13

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 (137) hide show
  1. package/README.en.md +1 -1
  2. package/README.md +1 -1
  3. package/README.zh-TW.md +1 -1
  4. package/es/footer/src/footer.js +5 -1
  5. package/es/form/src/form.js +27 -5
  6. package/es/icon/style.css +1 -1
  7. package/es/input/src/input.js +4 -1
  8. package/es/locale/lang/en-US.js +4 -0
  9. package/es/locale/lang/es-ES.js +5 -0
  10. package/es/locale/lang/ja-JP.js +5 -0
  11. package/es/locale/lang/zh-CN.js +5 -0
  12. package/es/locale/lang/zh-TC.js +5 -0
  13. package/es/menu/src/hooks.js +3 -3
  14. package/es/select/src/select.js +4 -1
  15. package/es/style.css +1 -1
  16. package/es/style.min.css +1 -1
  17. package/es/table/src/body.js +7 -3
  18. package/es/table/src/table.js +30 -7
  19. package/es/table/style.css +14 -3
  20. package/es/textarea/src/textarea.js +4 -1
  21. package/es/tools/log.js +1 -1
  22. package/es/tooltip/style.css +0 -6
  23. package/es/v-x-e-table/index.js +4 -1
  24. package/es/v-x-e-table/src/conf.js +4 -1
  25. package/es/v-x-e-table/src/menus.js +48 -2
  26. package/es/v-x-e-table/src/store.js +4 -1
  27. package/es/v-x-e-table/src/validators.js +5 -0
  28. package/es/validator/src/hook.js +100 -22
  29. package/es/vxe-table/style.css +14 -3
  30. package/es/vxe-tooltip/style.css +0 -6
  31. package/lib/footer/src/footer.js +6 -1
  32. package/lib/footer/src/footer.min.js +1 -1
  33. package/lib/form/src/form.js +24 -4
  34. package/lib/form/src/form.min.js +1 -1
  35. package/lib/icon/style/style.css +1 -1
  36. package/lib/icon/style/style.min.css +1 -1
  37. package/lib/index.umd.js +271 -48
  38. package/lib/index.umd.min.js +1 -1
  39. package/lib/input/src/input.js +6 -1
  40. package/lib/input/src/input.min.js +1 -1
  41. package/lib/locale/lang/en-US.js +4 -0
  42. package/lib/locale/lang/en-US.min.js +1 -1
  43. package/lib/locale/lang/en-US.umd.js +4 -0
  44. package/lib/locale/lang/es-ES.js +5 -0
  45. package/lib/locale/lang/es-ES.min.js +1 -1
  46. package/lib/locale/lang/es-ES.umd.js +5 -0
  47. package/lib/locale/lang/ja-JP.js +5 -0
  48. package/lib/locale/lang/ja-JP.min.js +1 -1
  49. package/lib/locale/lang/ja-JP.umd.js +5 -0
  50. package/lib/locale/lang/zh-CN.js +5 -0
  51. package/lib/locale/lang/zh-CN.min.js +1 -1
  52. package/lib/locale/lang/zh-CN.umd.js +5 -0
  53. package/lib/locale/lang/zh-HK.min.js +1 -1
  54. package/lib/locale/lang/zh-HK.umd.js +5 -0
  55. package/lib/locale/lang/zh-MO.min.js +1 -1
  56. package/lib/locale/lang/zh-MO.umd.js +5 -0
  57. package/lib/locale/lang/zh-TC.js +5 -0
  58. package/lib/locale/lang/zh-TC.min.js +1 -1
  59. package/lib/locale/lang/zh-TC.umd.js +5 -0
  60. package/lib/locale/lang/zh-TW.min.js +1 -1
  61. package/lib/locale/lang/zh-TW.umd.js +5 -0
  62. package/lib/menu/src/hooks.js +3 -3
  63. package/lib/menu/src/hooks.min.js +1 -1
  64. package/lib/select/src/select.js +6 -1
  65. package/lib/select/src/select.min.js +1 -1
  66. package/lib/style.css +1 -1
  67. package/lib/style.min.css +1 -1
  68. package/lib/table/src/body.js +8 -2
  69. package/lib/table/src/body.min.js +1 -1
  70. package/lib/table/src/table.js +38 -9
  71. package/lib/table/src/table.min.js +1 -1
  72. package/lib/table/style/style.css +14 -3
  73. package/lib/table/style/style.min.css +1 -1
  74. package/lib/textarea/src/textarea.js +6 -1
  75. package/lib/textarea/src/textarea.min.js +1 -1
  76. package/lib/tools/log.js +1 -1
  77. package/lib/tools/log.min.js +1 -1
  78. package/lib/tooltip/style/style.css +0 -6
  79. package/lib/tooltip/style/style.min.css +1 -1
  80. package/lib/v-x-e-table/index.js +14 -1
  81. package/lib/v-x-e-table/index.min.js +1 -1
  82. package/lib/v-x-e-table/src/conf.js +4 -1
  83. package/lib/v-x-e-table/src/conf.min.js +1 -1
  84. package/lib/v-x-e-table/src/menus.js +48 -2
  85. package/lib/v-x-e-table/src/menus.min.js +1 -1
  86. package/lib/v-x-e-table/src/store.js +4 -1
  87. package/lib/v-x-e-table/src/store.min.js +1 -1
  88. package/lib/v-x-e-table/src/validators.js +15 -0
  89. package/lib/v-x-e-table/src/validators.min.js +1 -0
  90. package/lib/validator/src/hook.js +94 -20
  91. package/lib/validator/src/hook.min.js +1 -1
  92. package/lib/vxe-table/style/style.css +14 -3
  93. package/lib/vxe-table/style/style.min.css +1 -1
  94. package/lib/vxe-tooltip/style/style.css +0 -6
  95. package/lib/vxe-tooltip/style/style.min.css +1 -1
  96. package/package.json +2 -2
  97. package/packages/footer/src/footer.ts +5 -1
  98. package/packages/form/src/form.ts +24 -5
  99. package/packages/input/src/input.ts +4 -1
  100. package/packages/locale/lang/en-US.ts +4 -0
  101. package/packages/locale/lang/es-ES.ts +5 -0
  102. package/packages/locale/lang/ja-JP.ts +5 -0
  103. package/packages/locale/lang/zh-CN.ts +5 -0
  104. package/packages/locale/lang/zh-TC.ts +5 -0
  105. package/packages/menu/src/hooks.ts +3 -3
  106. package/packages/select/src/select.ts +4 -1
  107. package/packages/table/src/body.ts +7 -3
  108. package/packages/table/src/table.ts +34 -7
  109. package/packages/textarea/src/textarea.ts +4 -1
  110. package/packages/v-x-e-table/index.ts +3 -0
  111. package/packages/v-x-e-table/src/conf.ts +4 -1
  112. package/packages/v-x-e-table/src/menus.ts +52 -2
  113. package/packages/v-x-e-table/src/store.ts +3 -1
  114. package/packages/v-x-e-table/src/validators.ts +9 -0
  115. package/packages/validator/src/hook.ts +117 -36
  116. package/styles/cssvar.scss +1 -2
  117. package/styles/table.scss +27 -6
  118. package/styles/tooltip.scss +0 -8
  119. package/styles/variable.scss +1 -2
  120. package/types/form.d.ts +9 -12
  121. package/types/table.d.ts +20 -1
  122. package/types/v-x-e-table/index.d.ts +8 -1
  123. package/types/v-x-e-table/menus.d.ts +19 -7
  124. package/types/v-x-e-table/validators.d.ts +30 -0
  125. package/types/validator.d.ts +14 -1
  126. /package/es/icon/style/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
  127. /package/es/icon/style/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
  128. /package/es/icon/style/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
  129. /package/es/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
  130. /package/es/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
  131. /package/es/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
  132. /package/lib/icon/style/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
  133. /package/lib/icon/style/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
  134. /package/lib/icon/style/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
  135. /package/lib/{iconfont.1689813279210.ttf → iconfont.1690032028705.ttf} +0 -0
  136. /package/lib/{iconfont.1689813279210.woff → iconfont.1690032028705.woff} +0 -0
  137. /package/lib/{iconfont.1689813279210.woff2 → iconfont.1690032028705.woff2} +0 -0
@@ -44,7 +44,7 @@ export default defineComponent({
44
44
  var $xetable = inject('$xetable', {});
45
45
  var xesize = inject('xesize', null);
46
46
  var xID = $xetable.xID, tableProps = $xetable.props, tableContext = $xetable.context, tableReactData = $xetable.reactData, tableInternalData = $xetable.internalData;
47
- var _a = $xetable.getRefMaps(), refTableHeader = _a.refTableHeader, refTableBody = _a.refTableBody, refTableFooter = _a.refTableFooter, refTableLeftBody = _a.refTableLeftBody, refTableRightBody = _a.refTableRightBody;
47
+ var _a = $xetable.getRefMaps(), refTableHeader = _a.refTableHeader, refTableBody = _a.refTableBody, refTableFooter = _a.refTableFooter, refTableLeftBody = _a.refTableLeftBody, refTableRightBody = _a.refTableRightBody, refValidTooltip = _a.refValidTooltip;
48
48
  var _b = $xetable.getComputeMaps(), computeEditOpts = _b.computeEditOpts, computeMouseOpts = _b.computeMouseOpts, computeSYOpts = _b.computeSYOpts, computeEmptyOpts = _b.computeEmptyOpts, computeKeyboardOpts = _b.computeKeyboardOpts, computeTooltipOpts = _b.computeTooltipOpts, computeRadioOpts = _b.computeRadioOpts, computeExpandOpts = _b.computeExpandOpts, computeTreeOpts = _b.computeTreeOpts, computeCheckboxOpts = _b.computeCheckboxOpts, computeValidOpts = _b.computeValidOpts, computeRowOpts = _b.computeRowOpts, computeColumnOpts = _b.computeColumnOpts;
49
49
  var refElem = ref();
50
50
  var refBodyTable = ref();
@@ -130,7 +130,7 @@ export default defineComponent({
130
130
  */
131
131
  var renderColumn = function (seq, rowid, fixedType, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, columns, items) {
132
132
  var _a;
133
- var columnKey = tableProps.columnKey, allColumnOverflow = tableProps.showOverflow, allCellClassName = tableProps.cellClassName, cellStyle = tableProps.cellStyle, allAlign = tableProps.align, spanMethod = tableProps.spanMethod, mouseConfig = tableProps.mouseConfig, editConfig = tableProps.editConfig, editRules = tableProps.editRules, tooltipConfig = tableProps.tooltipConfig;
133
+ var columnKey = tableProps.columnKey, height = tableProps.height, allColumnOverflow = tableProps.showOverflow, allCellClassName = tableProps.cellClassName, cellStyle = tableProps.cellStyle, allAlign = tableProps.align, spanMethod = tableProps.spanMethod, mouseConfig = tableProps.mouseConfig, editConfig = tableProps.editConfig, editRules = tableProps.editRules, tooltipConfig = tableProps.tooltipConfig;
134
134
  var tableData = tableReactData.tableData, overflowX = tableReactData.overflowX, scrollYLoad = tableReactData.scrollYLoad, currentColumn = tableReactData.currentColumn, mergeList = tableReactData.mergeList, editStore = tableReactData.editStore, isAllOverflow = tableReactData.isAllOverflow, validErrorMaps = tableReactData.validErrorMaps;
135
135
  var afterFullData = tableInternalData.afterFullData;
136
136
  var validOpts = computeValidOpts.value;
@@ -162,7 +162,7 @@ export default defineComponent({
162
162
  var tdOns = {};
163
163
  var cellAlign = align || allAlign;
164
164
  var errorValidItem = validErrorMaps["".concat(rowid, ":").concat(column.id)];
165
- var showValidTip = editRules && validOpts.showMessage;
165
+ var showValidTip = editRules && validOpts.showMessage && (validOpts.message === 'default' ? (height || tableData.length > 1) : validOpts.message === 'inline');
166
166
  var attrs = { colid: column.id };
167
167
  var params = { $table: $xetable, $grid: $xetable.xegrid, seq: seq, rowid: rowid, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex, column: column, columnIndex: columnIndex, $columnIndex: $columnIndex, _columnIndex: _columnIndex, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, level: rowLevel, visibleData: afterFullData, data: tableData, items: items };
168
168
  // 虚拟滚动不支持动态高度
@@ -486,6 +486,7 @@ export default defineComponent({
486
486
  var tableFooter = refTableFooter.value;
487
487
  var leftBody = refTableLeftBody.value;
488
488
  var rightBody = refTableRightBody.value;
489
+ var validTip = refValidTooltip.value;
489
490
  var scrollBodyElem = refElem.value;
490
491
  var headerElem = tableHeader ? tableHeader.$el : null;
491
492
  var footerElem = tableFooter ? tableFooter.$el : null;
@@ -538,6 +539,9 @@ export default defineComponent({
538
539
  if (scrollYLoad && isRollY) {
539
540
  $xetable.triggerScrollYEvent(evnt);
540
541
  }
542
+ if (isRollX && validTip && validTip.reactData.visible) {
543
+ validTip.updatePlacement();
544
+ }
541
545
  $xetable.dispatchEvent('scroll', {
542
546
  type: renderType,
543
547
  fixed: fixedType,
@@ -316,6 +316,7 @@ export default defineComponent({
316
316
  var refElem = ref();
317
317
  var refTooltip = ref();
318
318
  var refCommTooltip = ref();
319
+ var refValidTooltip = ref();
319
320
  var refTableFilter = ref();
320
321
  var refTableMenu = ref();
321
322
  var refTableHeader = ref();
@@ -380,6 +381,10 @@ export default defineComponent({
380
381
  var tooltipOpts = computeTooltipOpts.value;
381
382
  return __assign(__assign({}, tooltipOpts), tooltipStore.currOpts);
382
383
  });
384
+ var computeValidTipOpts = computed(function () {
385
+ var tooltipOpts = computeTooltipOpts.value;
386
+ return Object.assign({ isArrow: false }, tooltipOpts);
387
+ });
383
388
  var computeEditOpts = computed(function () {
384
389
  return Object.assign({}, GlobalConfig.table.editConfig, props.editConfig);
385
390
  });
@@ -519,6 +524,7 @@ export default defineComponent({
519
524
  var refMaps = {
520
525
  refElem: refElem,
521
526
  refTooltip: refTooltip,
527
+ refValidTooltip: refValidTooltip,
522
528
  refTableFilter: refTableFilter,
523
529
  refTableMenu: refTableMenu,
524
530
  refTableHeader: refTableHeader,
@@ -4126,14 +4132,14 @@ export default defineComponent({
4126
4132
  * 如果组件值 v-model 发生 change 时,调用改函数用于更新某一列编辑状态
4127
4133
  * 如果单元格配置了校验规则,则会进行校验
4128
4134
  */
4129
- updateStatus: function (scope, cellValue) {
4135
+ updateStatus: function (slotParams, cellValue) {
4130
4136
  var customVal = !XEUtils.isUndefined(cellValue);
4131
4137
  return nextTick().then(function () {
4132
4138
  var editRules = props.editRules;
4133
4139
  var validStore = reactData.validStore;
4134
4140
  var tableBody = refTableBody.value;
4135
- if (scope && tableBody && editRules) {
4136
- var row_1 = scope.row, column_3 = scope.column;
4141
+ if (slotParams && tableBody && editRules) {
4142
+ var row_1 = slotParams.row, column_3 = slotParams.column;
4137
4143
  var type = 'change';
4138
4144
  if ($xetable.hasCellRules) {
4139
4145
  if ($xetable.hasCellRules(type, row_1, column_3)) {
@@ -4263,10 +4269,12 @@ export default defineComponent({
4263
4269
  */
4264
4270
  var handleGlobalMousedownEvent = function (evnt) {
4265
4271
  var editStore = reactData.editStore, ctxMenuStore = reactData.ctxMenuStore, filterStore = reactData.filterStore;
4266
- var mouseConfig = props.mouseConfig;
4272
+ var mouseConfig = props.mouseConfig, editRules = props.editRules;
4267
4273
  var el = refElem.value;
4268
4274
  var editOpts = computeEditOpts.value;
4275
+ var validOpts = computeValidOpts.value;
4269
4276
  var actived = editStore.actived;
4277
+ var $validTooltip = refValidTooltip.value;
4270
4278
  var tableFilter = refTableFilter.value;
4271
4279
  var tableMenu = refTableMenu.value;
4272
4280
  if (tableFilter) {
@@ -4288,7 +4296,10 @@ export default defineComponent({
4288
4296
  // 如果是激活状态,点击了单元格之外
4289
4297
  var cell = actived.args.cell;
4290
4298
  if ((!cell || !getEventTargetNode(evnt, cell).flag)) {
4291
- if (!internalData._lastCallTime || internalData._lastCallTime + 50 < Date.now()) {
4299
+ if ($validTooltip && getEventTargetNode(evnt, $validTooltip.$el).flag) {
4300
+ // 如果是激活状态,且点击了校验提示框
4301
+ }
4302
+ else if (!internalData._lastCallTime || internalData._lastCallTime + 50 < Date.now()) {
4292
4303
  // 如果是激活状态,点击了单元格之外
4293
4304
  if (!getEventTargetNode(evnt, document.body, 'vxe-table--ignore-clear').flag) {
4294
4305
  // 如果手动调用了激活单元格,避免触发源被移除后导致重复关闭
@@ -4349,8 +4360,13 @@ export default defineComponent({
4349
4360
  $xetable.closeMenu();
4350
4361
  }
4351
4362
  }
4363
+ var isActivated = getEventTargetNode(evnt, $xegrid ? $xegrid.getRefMaps().refElem.value : el).flag;
4364
+ // 如果存在校验,点击了表格之外则清除
4365
+ if (!isActivated && editRules && validOpts.autoClear) {
4366
+ reactData.validErrorMaps = {};
4367
+ }
4352
4368
  // 最后激活的表格
4353
- internalData.isActivated = getEventTargetNode(evnt, $xegrid ? $xegrid.getRefMaps().refElem.value : el).flag;
4369
+ internalData.isActivated = isActivated;
4354
4370
  };
4355
4371
  /**
4356
4372
  * 窗口失焦事件处理
@@ -6298,23 +6314,26 @@ export default defineComponent({
6298
6314
  });
6299
6315
  var renderVN = function () {
6300
6316
  var _a;
6301
- var loading = props.loading, stripe = props.stripe, showHeader = props.showHeader, treeConfig = props.treeConfig, mouseConfig = props.mouseConfig, showFooter = props.showFooter, highlightCell = props.highlightCell, highlightHoverRow = props.highlightHoverRow, highlightHoverColumn = props.highlightHoverColumn, editConfig = props.editConfig;
6317
+ var loading = props.loading, stripe = props.stripe, showHeader = props.showHeader, height = props.height, treeConfig = props.treeConfig, mouseConfig = props.mouseConfig, showFooter = props.showFooter, highlightCell = props.highlightCell, highlightHoverRow = props.highlightHoverRow, highlightHoverColumn = props.highlightHoverColumn, editConfig = props.editConfig, editRules = props.editRules;
6302
6318
  var isGroup = reactData.isGroup, overflowX = reactData.overflowX, overflowY = reactData.overflowY, scrollXLoad = reactData.scrollXLoad, scrollYLoad = reactData.scrollYLoad, scrollbarHeight = reactData.scrollbarHeight, tableData = reactData.tableData, tableColumn = reactData.tableColumn, tableGroupColumn = reactData.tableGroupColumn, footerTableData = reactData.footerTableData, initStore = reactData.initStore, columnStore = reactData.columnStore, filterStore = reactData.filterStore;
6303
6319
  var leftList = columnStore.leftList, rightList = columnStore.rightList;
6304
6320
  var loadingSlot = slots.loading;
6305
6321
  var tipConfig = computeTipConfig.value;
6322
+ var validOpts = computeValidOpts.value;
6306
6323
  var treeOpts = computeTreeOpts.value;
6307
6324
  var rowOpts = computeRowOpts.value;
6308
6325
  var columnOpts = computeColumnOpts.value;
6309
6326
  var vSize = computeSize.value;
6310
6327
  var tableBorder = computeTableBorder.value;
6311
6328
  var mouseOpts = computeMouseOpts.value;
6329
+ var validTipOpts = computeValidTipOpts.value;
6312
6330
  var loadingOpts = computeLoadingOpts.value;
6313
6331
  var isMenu = computeIsMenu.value;
6314
6332
  return h('div', {
6315
6333
  ref: refElem,
6316
6334
  class: ['vxe-table', 'vxe-table--render-default', "tid_".concat(xID), "border--".concat(tableBorder), (_a = {},
6317
6335
  _a["size--".concat(vSize)] = vSize,
6336
+ _a["vaild-msg--".concat(validOpts.msgMode)] = !!editRules,
6318
6337
  _a['vxe-editable'] = !!editConfig,
6319
6338
  _a['cell--highlight'] = highlightCell,
6320
6339
  _a['cell--selected'] = mouseConfig && mouseOpts.selected,
@@ -6463,6 +6482,10 @@ export default defineComponent({
6463
6482
  isArrow: false,
6464
6483
  enterable: false
6465
6484
  }) : createCommentVNode(),
6485
+ /**
6486
+ * 校验提示
6487
+ */
6488
+ hasUseTooltip && props.editRules && validOpts.showMessage && (validOpts.message === 'default' ? !height : validOpts.message === 'tooltip') ? h(resolveComponent('vxe-tooltip'), __assign({ ref: refValidTooltip, class: 'vxe-table--valid-error' }, (validOpts.message === 'tooltip' || tableData.length === 1 ? validTipOpts : {}))) : createCommentVNode(),
6466
6489
  /**
6467
6490
  * 工具提示
6468
6491
  */
@@ -1238,6 +1238,7 @@
1238
1238
  display: inline-block;
1239
1239
  border-radius: var(--vxe-border-radius);
1240
1240
  color: var(--vxe-table-validate-error-color);
1241
+ background-color: var(--vxe-table-validate-error-background-color);
1241
1242
  pointer-events: auto;
1242
1243
  }
1243
1244
  .vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-input,
@@ -1248,7 +1249,10 @@
1248
1249
  .vxe-table--render-default .vxe-body--column.col--valid-error .vxe-input > .vxe-input--inner {
1249
1250
  border-color: var(--vxe-table-validate-error-color);
1250
1251
  }
1251
- .vxe-table--render-default .vxe-body--row:last-child .vxe-cell--valid {
1252
+ .vxe-table--render-default.vaild-msg--single .vxe-body--row:last-child .vxe-cell--valid {
1253
+ bottom: 100%;
1254
+ }
1255
+ .vxe-table--render-default.vaild-msg--full .vxe-body--row:last-child .vxe-cell--valid {
1252
1256
  top: calc(100% - 1.3em);
1253
1257
  }
1254
1258
  .vxe-table--render-default .vxe-body--row.row--new > .vxe-body--column {
@@ -1256,8 +1260,8 @@
1256
1260
  }
1257
1261
  .vxe-table--render-default .vxe-body--row.row--new > .vxe-body--column:before {
1258
1262
  content: "";
1259
- top: var(--vxe-table-cell-dirty-width);
1260
- left: var(--vxe-table-cell-dirty-width);
1263
+ top: calc(var(--vxe-table-cell-dirty-width) * -1);
1264
+ left: calc(var(--vxe-table-cell-dirty-width) * -1);
1261
1265
  position: absolute;
1262
1266
  border-width: var(--vxe-table-cell-dirty-width);
1263
1267
  border-style: solid;
@@ -1308,6 +1312,13 @@
1308
1312
  padding: 0;
1309
1313
  }
1310
1314
 
1315
+ /*valid error*/
1316
+ div.vxe-table--tooltip-wrapper.vxe-table--valid-error {
1317
+ padding: 0;
1318
+ color: var(--vxe-table-validate-error-color);
1319
+ background-color: var(--vxe-table-validate-error-background-color);
1320
+ }
1321
+
1311
1322
  /*footer*/
1312
1323
  .vxe-table--footer-wrapper {
1313
1324
  color: var(--vxe-table-footer-font-color);
@@ -13,7 +13,10 @@ export default defineComponent({
13
13
  name: String,
14
14
  readonly: Boolean,
15
15
  disabled: Boolean,
16
- placeholder: String,
16
+ placeholder: {
17
+ type: String,
18
+ default: function () { return XEUtils.eqNull(GlobalConfig.textarea.placeholder) ? GlobalConfig.i18n('vxe.base.pleaseInput') : GlobalConfig.textarea.placeholder; }
19
+ },
17
20
  maxlength: [String, Number],
18
21
  rows: { type: [String, Number], default: 2 },
19
22
  cols: { type: [String, Number], default: null },
package/es/tools/log.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import GlobalConfig from '../v-x-e-table/src/conf';
2
2
  export function getLog(message, params) {
3
- return "[vxe-table v".concat("4.5.0-beta.10", "] ").concat(GlobalConfig.i18n(message, params));
3
+ return "[vxe-table v".concat("4.5.0-beta.13", "] ").concat(GlobalConfig.i18n(message, params));
4
4
  }
5
5
  function outLog(type) {
6
6
  return function (message, params) {
@@ -126,10 +126,4 @@
126
126
  }
127
127
  .vxe-table--tooltip-wrapper.theme--dark.placement--bottom .vxe-table--tooltip-arrow:before {
128
128
  border-bottom-color: var(--vxe-tooltip-dark-background-color);
129
- }
130
-
131
- /*valid error*/
132
- .vxe-table--tooltip-wrapper.vxe-table--valid-error {
133
- background-color: var(--vxe-tooltip-validate-error-background-color);
134
- color: var(--vxe-tooltip-validate-error-color);
135
129
  }
@@ -5,6 +5,7 @@ import { renderer } from './src/renderer';
5
5
  import { commands } from './src/commands';
6
6
  import { menus } from './src/menus';
7
7
  import { formats } from './src/formats';
8
+ import { validators } from './src/validators';
8
9
  import { hooks } from './src/hooks';
9
10
  import { setup } from './src/setup';
10
11
  import { getLastZIndex, nextZIndex } from '../tools/utils';
@@ -83,12 +84,13 @@ export var config = new VXETableConfig();
83
84
  export var v = 'v4';
84
85
  export var VXETable = {
85
86
  v: v,
86
- version: "4.5.0-beta.10",
87
+ version: "4.5.0-beta.13",
87
88
  setup: setup,
88
89
  interceptor: interceptor,
89
90
  renderer: renderer,
90
91
  commands: commands,
91
92
  formats: formats,
93
+ validators: validators,
92
94
  menus: menus,
93
95
  hooks: hooks,
94
96
  config: config,
@@ -101,6 +103,7 @@ export * from './src/renderer';
101
103
  export * from './src/commands';
102
104
  export * from './src/menus';
103
105
  export * from './src/formats';
106
+ export * from './src/validators';
104
107
  export * from './src/hooks';
105
108
  export * from './src/setup';
106
109
  export default VXETable;
@@ -44,7 +44,10 @@ var GlobalConfig = {
44
44
  enterable: true
45
45
  },
46
46
  validConfig: {
47
- showMessage: true
47
+ showMessage: true,
48
+ autoClear: true,
49
+ message: 'default',
50
+ msgMode: 'single'
48
51
  },
49
52
  columnConfig: {
50
53
  maxFixedSize: 4
@@ -1,5 +1,51 @@
1
- import VXEStore from './store';
2
- export var menus = new VXEStore();
1
+ import XEUtils from 'xe-utils';
2
+ import { warnLog } from '../../tools/log';
3
+ var VXEMenusStore = /** @class */ (function () {
4
+ function VXEMenusStore() {
5
+ this.store = {};
6
+ }
7
+ VXEMenusStore.prototype.mixin = function (options) {
8
+ var _this = this;
9
+ XEUtils.each(options, function (item, key) {
10
+ _this.add(key, item);
11
+ });
12
+ return this;
13
+ };
14
+ VXEMenusStore.prototype.has = function (name) {
15
+ return !!this.get(name);
16
+ };
17
+ VXEMenusStore.prototype.get = function (name) {
18
+ return this.store[name];
19
+ };
20
+ VXEMenusStore.prototype.add = function (name, render) {
21
+ var conf = this.store[name];
22
+ // 兼容
23
+ if (XEUtils.isFunction(render)) {
24
+ render = {
25
+ menuMethod: render
26
+ };
27
+ }
28
+ // 检测是否覆盖
29
+ if (process.env.NODE_ENV === 'development') {
30
+ var confKeys_1 = XEUtils.keys(conf);
31
+ XEUtils.each(render, function (item, key) {
32
+ if (confKeys_1.includes(key)) {
33
+ warnLog('vxe.error.coverProp', [name, key]);
34
+ }
35
+ });
36
+ }
37
+ this.store[name] = conf ? XEUtils.merge(conf, render) : render;
38
+ return this;
39
+ };
40
+ VXEMenusStore.prototype.delete = function (name) {
41
+ delete this.store[name];
42
+ };
43
+ VXEMenusStore.prototype.forEach = function (callback) {
44
+ XEUtils.objectEach(this.store, callback);
45
+ };
46
+ return VXEMenusStore;
47
+ }());
48
+ export var menus = new VXEMenusStore();
3
49
  if (process.env.NODE_ENV === 'development') {
4
50
  Object.assign(menus, { _name: 'Menus' });
5
51
  }
@@ -8,7 +8,10 @@ var Store = /** @class */ (function () {
8
8
  this.store = {};
9
9
  }
10
10
  Store.prototype.mixin = function (options) {
11
- Object.assign(this.store, options);
11
+ var _this = this;
12
+ XEUtils.each(options, function (item, key) {
13
+ _this.add(key, item);
14
+ });
12
15
  return this;
13
16
  };
14
17
  Store.prototype.has = function (name) {
@@ -0,0 +1,5 @@
1
+ import VXEStore from './store';
2
+ export var validators = new VXEStore();
3
+ if (process.env.NODE_ENV === 'development') {
4
+ Object.assign(validators, { _name: 'Validators' });
5
+ }
@@ -12,8 +12,10 @@ var __assign = (this && this.__assign) || function () {
12
12
  import { nextTick } from 'vue';
13
13
  import GlobalConfig from '../../v-x-e-table/src/conf';
14
14
  import XEUtils from 'xe-utils';
15
+ import { VXETable } from '../../v-x-e-table';
15
16
  import { getFuncText, eqEmptyValue } from '../../tools/utils';
16
17
  import { scrollToView } from '../../tools/dom';
18
+ import { errLog, warnLog } from '../../tools/log';
17
19
  import { handleFieldOrColumn, getRowid } from '../../table/src/util';
18
20
  /**
19
21
  * 校验规则
@@ -56,6 +58,7 @@ var tableValidatorMethodKeys = ['fullValidate', 'validate', 'clearValidate'];
56
58
  var validatorHook = {
57
59
  setupTable: function ($xetable) {
58
60
  var props = $xetable.props, reactData = $xetable.reactData, internalData = $xetable.internalData;
61
+ var refValidTooltip = $xetable.getRefMaps().refValidTooltip;
59
62
  var _a = $xetable.getComputeMaps(), computeValidOpts = _a.computeValidOpts, computeTreeOpts = _a.computeTreeOpts, computeEditOpts = _a.computeEditOpts;
60
63
  var validatorMethods = {};
61
64
  var validatorPrivateMethods = {};
@@ -77,6 +80,19 @@ var validatorHook = {
77
80
  }
78
81
  });
79
82
  };
83
+ var handleErrMsgMode = function (validErrMaps) {
84
+ var validOpts = computeValidOpts.value;
85
+ if (validOpts.msgMode === 'single') {
86
+ var keys = Object.keys(validErrMaps);
87
+ var resMaps = validErrMaps;
88
+ if (keys.length) {
89
+ var firstKey = keys[0];
90
+ resMaps[firstKey] = validErrMaps[firstKey];
91
+ }
92
+ return resMaps;
93
+ }
94
+ return validErrMaps;
95
+ };
80
96
  /**
81
97
  * 对表格数据进行校验
82
98
  * 如果不指定数据,则默认只校验临时变动的数据,例如新增或修改
@@ -165,7 +181,7 @@ var validatorHook = {
165
181
  }
166
182
  return Promise.all(rowValids).then(function () {
167
183
  var ruleProps = Object.keys(validRest);
168
- reactData.validErrorMaps = validErrMaps;
184
+ reactData.validErrorMaps = handleErrMsgMode(validErrMaps);
169
185
  return nextTick().then(function () {
170
186
  if (ruleProps.length) {
171
187
  return Promise.reject(validRest[ruleProps[0]][0]);
@@ -206,7 +222,6 @@ var validatorHook = {
206
222
  var row = firstErrParams.row;
207
223
  var rowIndex = afterFullData.indexOf(row);
208
224
  var locatRow = rowIndex > 0 ? afterFullData[rowIndex - 1] : row;
209
- reactData.validErrorMaps = validErrMaps;
210
225
  if (validOpts.autoPos === false) {
211
226
  finish();
212
227
  }
@@ -221,7 +236,9 @@ var validatorHook = {
221
236
  });
222
237
  });
223
238
  }
224
- // reactData.validErrorMaps = validErrMaps
239
+ else {
240
+ reactData.validErrorMaps = {};
241
+ }
225
242
  return nextTick().then(function () {
226
243
  if (cb) {
227
244
  cb();
@@ -242,11 +259,22 @@ var validatorHook = {
242
259
  return beginValidate(rows, cb);
243
260
  },
244
261
  clearValidate: function (rows, fieldOrColumn) {
262
+ var validErrorMaps = reactData.validErrorMaps;
263
+ var validTip = refValidTooltip.value;
264
+ var validOpts = computeValidOpts.value;
245
265
  var rowList = XEUtils.isArray(rows) ? rows : (rows ? [rows] : []);
246
266
  var colList = (XEUtils.isArray(fieldOrColumn) ? fieldOrColumn : (fieldOrColumn ? [fieldOrColumn] : []).map(function (column) { return handleFieldOrColumn($xetable, column); }));
247
267
  var validErrMaps = {};
268
+ if (validTip && validTip.reactData.visible) {
269
+ validTip.close();
270
+ }
271
+ // 如果是单个提示模式
272
+ if (validOpts.msgMode === 'single') {
273
+ reactData.validErrorMaps = {};
274
+ return nextTick();
275
+ }
248
276
  if (rowList.length && colList.length) {
249
- validErrMaps = Object.assign({}, reactData.validErrorMaps);
277
+ validErrMaps = Object.assign({}, validErrorMaps);
250
278
  rowList.forEach(function (row) {
251
279
  colList.forEach(function (column) {
252
280
  var vaildKey = "".concat(getRowid($xetable, row), ":").concat(column.id);
@@ -258,7 +286,7 @@ var validatorHook = {
258
286
  }
259
287
  else if (rowList.length) {
260
288
  var rowidList_1 = rowList.map(function (row) { return "".concat(getRowid($xetable, row)); });
261
- XEUtils.each(reactData.validErrorMaps, function (item, key) {
289
+ XEUtils.each(validErrorMaps, function (item, key) {
262
290
  if (rowidList_1.indexOf(key.split(':')[0]) > -1) {
263
291
  validErrMaps[key] = item;
264
292
  }
@@ -266,7 +294,7 @@ var validatorHook = {
266
294
  }
267
295
  else if (colList.length) {
268
296
  var colidList_1 = colList.map(function (column) { return "".concat(column.id); });
269
- XEUtils.each(reactData.validErrorMaps, function (item, key) {
297
+ XEUtils.each(validErrorMaps, function (item, key) {
270
298
  if (colidList_1.indexOf(key.split(':')[1]) > -1) {
271
299
  validErrMaps[key] = item;
272
300
  }
@@ -323,10 +351,10 @@ var validatorHook = {
323
351
  if (rules_1) {
324
352
  var cellValue_1 = XEUtils.isUndefined(val) ? XEUtils.get(row, field) : val;
325
353
  rules_1.forEach(function (rule) {
326
- var type = rule.type, trigger = rule.trigger, required = rule.required;
354
+ var type = rule.type, trigger = rule.trigger, required = rule.required, validator = rule.validator;
327
355
  if (validType === 'all' || !trigger || validType === trigger) {
328
- if (XEUtils.isFunction(rule.validator)) {
329
- var customValid = rule.validator({
356
+ if (validator) {
357
+ var validParams = {
330
358
  cellValue: cellValue_1,
331
359
  rule: rule,
332
360
  rules: rules_1,
@@ -334,9 +362,32 @@ var validatorHook = {
334
362
  rowIndex: $xetable.getRowIndex(row),
335
363
  column: column,
336
364
  columnIndex: $xetable.getColumnIndex(column),
337
- field: column.property,
338
- $table: $xetable
339
- });
365
+ field: column.field,
366
+ $table: $xetable,
367
+ $grid: $xetable.xegrid
368
+ };
369
+ var customValid = void 0;
370
+ if (XEUtils.isString(validator)) {
371
+ var gvItem = VXETable.validators.get(validator);
372
+ if (gvItem) {
373
+ if (gvItem.cellValidatorMethod) {
374
+ customValid = gvItem.cellValidatorMethod(validParams);
375
+ }
376
+ else {
377
+ if (process.env.NODE_ENV === 'development') {
378
+ warnLog('vxe.error.notValidators', [validator]);
379
+ }
380
+ }
381
+ }
382
+ else {
383
+ if (process.env.NODE_ENV === 'development') {
384
+ errLog('vxe.error.notValidators', [validator]);
385
+ }
386
+ }
387
+ }
388
+ else {
389
+ customValid = validator(validParams);
390
+ }
340
391
  if (customValid) {
341
392
  if (XEUtils.isError(customValid)) {
342
393
  validRuleErr = true;
@@ -397,6 +448,12 @@ var validatorHook = {
397
448
  var editStore = reactData.editStore;
398
449
  var actived = editStore.actived;
399
450
  var editOpts = computeEditOpts.value;
451
+ var validOpts = computeValidOpts.value;
452
+ // 检查清除校验消息
453
+ if (editRules && validOpts.msgMode === 'single') {
454
+ reactData.validErrorMaps = {};
455
+ }
456
+ // 校验单元格
400
457
  if (editConfig && editRules && actived.row) {
401
458
  var _a = actived.args, row_1 = _a.row, column_1 = _a.column, cell_1 = _a.cell;
402
459
  if (validatorPrivateMethods.hasCellRules(type, row_1, column_1)) {
@@ -422,18 +479,39 @@ var validatorHook = {
422
479
  * 弹出校验错误提示
423
480
  */
424
481
  showValidTooltip: function (params) {
425
- var _a;
426
- var validStore = reactData.validStore;
482
+ var _a, _b;
483
+ var height = props.height;
484
+ var tableData = reactData.tableData, validStore = reactData.validStore, validErrorMaps = reactData.validErrorMaps;
485
+ var validOpts = computeValidOpts.value;
486
+ var validTip = refValidTooltip.value;
427
487
  validStore.visible = true;
428
- reactData.validErrorMaps = Object.assign({}, reactData.validErrorMaps, (_a = {},
429
- _a["".concat(getRowid($xetable, params.row), ":").concat(params.column.id)] = {
430
- column: params.column,
431
- row: params.row,
432
- rule: params.rule,
433
- content: params.rule.content
434
- },
435
- _a));
488
+ if (validOpts.msgMode === 'single') {
489
+ reactData.validErrorMaps = (_a = {},
490
+ _a["".concat(getRowid($xetable, params.row), ":").concat(params.column.id)] = {
491
+ column: params.column,
492
+ row: params.row,
493
+ rule: params.rule,
494
+ content: params.rule.content
495
+ },
496
+ _a);
497
+ }
498
+ else {
499
+ reactData.validErrorMaps = Object.assign({}, validErrorMaps, (_b = {},
500
+ _b["".concat(getRowid($xetable, params.row), ":").concat(params.column.id)] = {
501
+ column: params.column,
502
+ row: params.row,
503
+ rule: params.rule,
504
+ content: params.rule.content
505
+ },
506
+ _b));
507
+ }
436
508
  $xetable.dispatchEvent('valid-error', params, null);
509
+ if (validTip) {
510
+ var cell = params.cell;
511
+ if (validTip && (validOpts.message === 'tooltip' || (validOpts.message === 'default' && !height && tableData.length < 2))) {
512
+ return validTip.open(cell, params.rule.content);
513
+ }
514
+ }
437
515
  return nextTick();
438
516
  }
439
517
  };
@@ -1238,6 +1238,7 @@
1238
1238
  display: inline-block;
1239
1239
  border-radius: var(--vxe-border-radius);
1240
1240
  color: var(--vxe-table-validate-error-color);
1241
+ background-color: var(--vxe-table-validate-error-background-color);
1241
1242
  pointer-events: auto;
1242
1243
  }
1243
1244
  .vxe-table--render-default .vxe-body--column.col--valid-error .vxe-default-input,
@@ -1248,7 +1249,10 @@
1248
1249
  .vxe-table--render-default .vxe-body--column.col--valid-error .vxe-input > .vxe-input--inner {
1249
1250
  border-color: var(--vxe-table-validate-error-color);
1250
1251
  }
1251
- .vxe-table--render-default .vxe-body--row:last-child .vxe-cell--valid {
1252
+ .vxe-table--render-default.vaild-msg--single .vxe-body--row:last-child .vxe-cell--valid {
1253
+ bottom: 100%;
1254
+ }
1255
+ .vxe-table--render-default.vaild-msg--full .vxe-body--row:last-child .vxe-cell--valid {
1252
1256
  top: calc(100% - 1.3em);
1253
1257
  }
1254
1258
  .vxe-table--render-default .vxe-body--row.row--new > .vxe-body--column {
@@ -1256,8 +1260,8 @@
1256
1260
  }
1257
1261
  .vxe-table--render-default .vxe-body--row.row--new > .vxe-body--column:before {
1258
1262
  content: "";
1259
- top: var(--vxe-table-cell-dirty-width);
1260
- left: var(--vxe-table-cell-dirty-width);
1263
+ top: calc(var(--vxe-table-cell-dirty-width) * -1);
1264
+ left: calc(var(--vxe-table-cell-dirty-width) * -1);
1261
1265
  position: absolute;
1262
1266
  border-width: var(--vxe-table-cell-dirty-width);
1263
1267
  border-style: solid;
@@ -1308,6 +1312,13 @@
1308
1312
  padding: 0;
1309
1313
  }
1310
1314
 
1315
+ /*valid error*/
1316
+ div.vxe-table--tooltip-wrapper.vxe-table--valid-error {
1317
+ padding: 0;
1318
+ color: var(--vxe-table-validate-error-color);
1319
+ background-color: var(--vxe-table-validate-error-background-color);
1320
+ }
1321
+
1311
1322
  /*footer*/
1312
1323
  .vxe-table--footer-wrapper {
1313
1324
  color: var(--vxe-table-footer-font-color);
@@ -126,10 +126,4 @@
126
126
  }
127
127
  .vxe-table--tooltip-wrapper.theme--dark.placement--bottom .vxe-table--tooltip-arrow:before {
128
128
  border-bottom-color: var(--vxe-tooltip-dark-background-color);
129
- }
130
-
131
- /*valid error*/
132
- .vxe-table--tooltip-wrapper.vxe-table--valid-error {
133
- background-color: var(--vxe-tooltip-validate-error-background-color);
134
- color: var(--vxe-tooltip-validate-error-color);
135
129
  }