vxe-table 3.6.14-beta.0 → 3.6.14-beta.2

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 (42) hide show
  1. package/README.md +1 -1
  2. package/lib/edit/src/mixin.js +23 -31
  3. package/lib/edit/src/mixin.min.js +1 -1
  4. package/lib/form/src/form-config-item.js +7 -2
  5. package/lib/form/src/form-config-item.min.js +1 -1
  6. package/lib/form/src/form-item.js +7 -2
  7. package/lib/form/src/form-item.min.js +1 -1
  8. package/lib/icon/style/style.css +1 -1
  9. package/lib/icon/style/style.min.css +1 -1
  10. package/lib/index.css +1 -1
  11. package/lib/index.umd.js +114 -91
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/select/src/select.js +8 -2
  14. package/lib/select/src/select.min.js +1 -1
  15. package/lib/style.css +1 -1
  16. package/lib/style.min.css +1 -1
  17. package/lib/table/src/body.js +5 -5
  18. package/lib/table/src/body.min.js +1 -1
  19. package/lib/table/src/methods.js +68 -46
  20. package/lib/table/src/methods.min.js +1 -1
  21. package/lib/table/src/table.js +3 -1
  22. package/lib/table/src/table.min.js +1 -1
  23. package/lib/tools/log.js +1 -1
  24. package/lib/tools/log.min.js +1 -1
  25. package/lib/v-x-e-table/index.js +1 -1
  26. package/lib/v-x-e-table/index.min.js +1 -1
  27. package/package.json +1 -1
  28. package/packages/edit/src/mixin.js +18 -22
  29. package/packages/form/src/form-config-item.js +7 -2
  30. package/packages/form/src/form-item.js +7 -2
  31. package/packages/select/src/select.js +4 -2
  32. package/packages/table/src/body.js +5 -5
  33. package/packages/table/src/methods.js +66 -35
  34. package/packages/table/src/table.js +3 -1
  35. package/types/table.d.ts +6 -0
  36. package/types/v-x-e-table/renderer.d.ts +11 -7
  37. /package/lib/icon/style/{iconfont.1682555826742.ttf → iconfont.1684560851897.ttf} +0 -0
  38. /package/lib/icon/style/{iconfont.1682555826742.woff → iconfont.1684560851897.woff} +0 -0
  39. /package/lib/icon/style/{iconfont.1682555826742.woff2 → iconfont.1684560851897.woff2} +0 -0
  40. /package/lib/{iconfont.1682555826742.ttf → iconfont.1684560851897.ttf} +0 -0
  41. /package/lib/{iconfont.1682555826742.woff → iconfont.1684560851897.woff} +0 -0
  42. /package/lib/{iconfont.1682555826742.woff2 → iconfont.1684560851897.woff2} +0 -0
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.errLog=void 0,exports.getLog=getLog,exports.warnLog=void 0;var _conf=_interopRequireDefault(require("../v-x-e-table/src/conf"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function getLog(e,o){return"[vxe-table v".concat("3.6.14-beta.0","] ",_conf.default.i18n(e,o))}function outLog(r){return function(e,o){e=getLog(e,o);return console[r](e),e}}var warnLog=outLog("warn"),errLog=(exports.warnLog=warnLog,outLog("error"));exports.errLog=errLog;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.errLog=void 0,exports.getLog=getLog,exports.warnLog=void 0;var _conf=_interopRequireDefault(require("../v-x-e-table/src/conf"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function getLog(e,o){return"[vxe-table v".concat("3.6.14-beta.2","] ",_conf.default.i18n(e,o))}function outLog(r){return function(e,o){e=getLog(e,o);return console[r](e),e}}var warnLog=outLog("warn"),errLog=(exports.warnLog=warnLog,outLog("error"));exports.errLog=errLog;
@@ -186,7 +186,7 @@ var v = 'v3';
186
186
  exports.v = v;
187
187
  var VXETable = {
188
188
  v: v,
189
- version: "3.6.14-beta.0",
189
+ version: "3.6.14-beta.2",
190
190
  reg: reg,
191
191
  use: use,
192
192
  setup: _setup.setup,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _exportNames={use:!0,config:!0,t:!0,_t:!0,v:!0,VXETable:!0},_xeUtils=(exports.VXETable=void 0,exports._t=_t,exports.default=exports.config=void 0,exports.t=t,exports.use=use,exports.v=void 0,_interopRequireDefault(require("xe-utils"))),_conf=_interopRequireDefault(require("../v-x-e-table/src/conf")),_interceptor=require("./src/interceptor"),_renderer=(Object.keys(_interceptor).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_interceptor[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _interceptor[e]}})}),require("./src/renderer")),_commands=(Object.keys(_renderer).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_renderer[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _renderer[e]}})}),require("./src/commands")),_menus=(Object.keys(_commands).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_commands[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _commands[e]}})}),require("./src/menus")),_formats=(Object.keys(_menus).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_menus[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _menus[e]}})}),require("./src/formats")),_setup=(Object.keys(_formats).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_formats[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _formats[e]}})}),require("./src/setup")),_utils=(Object.keys(_setup).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_setup[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _setup[e]}})}),require("../tools/utils")),_log=require("../tools/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}var installedPlugins=[];function use(e,t){return e&&e.install&&-1===installedPlugins.indexOf(e)&&(e.install(VXETable,t),installedPlugins.push(e)),VXETable}function reg(e){"development"===process.env.NODE_ENV&&VXETable.Table&&(0,_log.errLog)("vxe.error.useErr",[e]),VXETable["_".concat(e)]=1}function getExportOrImpotType(e,r){var o=[];return _xeUtils.default.objectEach(e,function(e,t){0!==e&&e!==r||o.push(t)}),o}var VXETableConfig=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"zIndex",get:function(){return _utils.UtilTools.getLastZIndex()}},{key:"nextZIndex",get:function(){return _utils.UtilTools.nextZIndex()}},{key:"exportTypes",get:function(){return getExportOrImpotType(_conf.default.export.types,1)}},{key:"importTypes",get:function(){return getExportOrImpotType(_conf.default.export.types,2)}}]),e}(),config=new VXETableConfig;function t(e,t){return _conf.default.i18n(e,t)}function _t(e,t){return e?_xeUtils.default.toValueString(_conf.default.translate?_conf.default.translate(e,t):e):""}exports.config=config;var v="v3",VXETable={v:exports.v=v,version:"3.6.14-beta.0",reg:reg,use:use,setup:_setup.setup,interceptor:_interceptor.interceptor,renderer:_renderer.renderer,commands:_commands.commands,formats:_formats.formats,menus:_menus.menus,config:config,t:t,_t:_t},_default=exports.VXETable=VXETable;exports.default=_default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var _exportNames={use:!0,config:!0,t:!0,_t:!0,v:!0,VXETable:!0},_xeUtils=(exports.VXETable=void 0,exports._t=_t,exports.default=exports.config=void 0,exports.t=t,exports.use=use,exports.v=void 0,_interopRequireDefault(require("xe-utils"))),_conf=_interopRequireDefault(require("../v-x-e-table/src/conf")),_interceptor=require("./src/interceptor"),_renderer=(Object.keys(_interceptor).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_interceptor[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _interceptor[e]}})}),require("./src/renderer")),_commands=(Object.keys(_renderer).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_renderer[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _renderer[e]}})}),require("./src/commands")),_menus=(Object.keys(_commands).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_commands[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _commands[e]}})}),require("./src/menus")),_formats=(Object.keys(_menus).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_menus[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _menus[e]}})}),require("./src/formats")),_setup=(Object.keys(_formats).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_formats[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _formats[e]}})}),require("./src/setup")),_utils=(Object.keys(_setup).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(_exportNames,e)||e in exports&&exports[e]===_setup[e]||Object.defineProperty(exports,e,{enumerable:!0,get:function(){return _setup[e]}})}),require("../tools/utils")),_log=require("../tools/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var o=t[r];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}var installedPlugins=[];function use(e,t){return e&&e.install&&-1===installedPlugins.indexOf(e)&&(e.install(VXETable,t),installedPlugins.push(e)),VXETable}function reg(e){"development"===process.env.NODE_ENV&&VXETable.Table&&(0,_log.errLog)("vxe.error.useErr",[e]),VXETable["_".concat(e)]=1}function getExportOrImpotType(e,r){var o=[];return _xeUtils.default.objectEach(e,function(e,t){0!==e&&e!==r||o.push(t)}),o}var VXETableConfig=function(){function e(){_classCallCheck(this,e)}return _createClass(e,[{key:"zIndex",get:function(){return _utils.UtilTools.getLastZIndex()}},{key:"nextZIndex",get:function(){return _utils.UtilTools.nextZIndex()}},{key:"exportTypes",get:function(){return getExportOrImpotType(_conf.default.export.types,1)}},{key:"importTypes",get:function(){return getExportOrImpotType(_conf.default.export.types,2)}}]),e}(),config=new VXETableConfig;function t(e,t){return _conf.default.i18n(e,t)}function _t(e,t){return e?_xeUtils.default.toValueString(_conf.default.translate?_conf.default.translate(e,t):e):""}exports.config=config;var v="v3",VXETable={v:exports.v=v,version:"3.6.14-beta.2",reg:reg,use:use,setup:_setup.setup,interceptor:_interceptor.interceptor,renderer:_renderer.renderer,commands:_commands.commands,formats:_formats.formats,menus:_menus.menus,config:config,t:t,_t:_t},_default=exports.VXETable=VXETable;exports.default=_default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-table",
3
- "version": "3.6.14-beta.0",
3
+ "version": "3.6.14-beta.2",
4
4
  "description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器等...",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -64,7 +64,7 @@ export default {
64
64
  if (!XEUtils.isArray(records)) {
65
65
  records = [records]
66
66
  }
67
- const newRecords = records.map(record => this.defineField(Object.assign({}, record)))
67
+ const newRecords = this.defineField(records.map(record => Object.assign({}, record)))
68
68
  if (!row) {
69
69
  // 如果为虚拟树
70
70
  if (treeConfig && transform) {
@@ -158,13 +158,19 @@ export default {
158
158
  }
159
159
  }
160
160
  }
161
- editStore.insertList.unshift(...newRecords)
161
+ const { insertList, insertMaps } = editStore
162
+ newRecords.forEach(newRow => {
163
+ const rowid = getRowid(this, newRow)
164
+ insertMaps[rowid] = newRow
165
+ })
166
+ insertList.unshift(...newRecords)
167
+ this.cacheRowMap()
168
+ this.updateScrollYStatus()
162
169
  this.handleTableData(treeConfig && transform)
163
170
  if (!(treeConfig && transform)) {
164
171
  this.updateAfterDataIndex()
165
172
  }
166
173
  this.updateFooter()
167
- this.cacheRowMap()
168
174
  this.checkSelectionStatus()
169
175
  if (this.scrollYLoad) {
170
176
  this.updateScrollYSpace()
@@ -188,7 +194,7 @@ export default {
188
194
  _remove (rows) {
189
195
  const { afterFullData, tableFullData, tableFullTreeData, treeConfig, mergeList, editStore, checkboxOpts, selection, isInsertByRow, treeOpts } = this
190
196
  const { transform } = treeOpts
191
- const { actived, removeList, insertList } = editStore
197
+ const { actived, removeList, insertList, insertMaps } = editStore
192
198
  const { checkField } = checkboxOpts
193
199
  let rest = []
194
200
  if (!rows) {
@@ -261,10 +267,12 @@ export default {
261
267
  }
262
268
  // 从新增中移除已删除的数据
263
269
  rows.forEach(row => {
270
+ const rowid = getRowid(this, row)
264
271
  const iIndex = this.findRowIndexOf(insertList, row)
265
272
  if (iIndex > -1) {
266
273
  insertList.splice(iIndex, 1)
267
274
  }
275
+ delete insertMaps[rowid]
268
276
  })
269
277
  this.handleTableData(treeConfig && transform)
270
278
  if (!(treeConfig && transform)) {
@@ -326,27 +334,15 @@ export default {
326
334
  * 获取新增的临时数据
327
335
  */
328
336
  _getInsertRecords () {
329
- const { treeConfig, tableFullTreeData, tableFullData, treeOpts } = this
337
+ const { fullAllDataRowIdData } = this
330
338
  const insertList = this.editStore.insertList
331
339
  const insertRecords = []
332
- if (insertList.length) {
333
- // 如果为虚拟树
334
- if (treeConfig && treeOpts.transform) {
335
- insertList.forEach(row => {
336
- const rowid = getRowid(this, row)
337
- const matchObj = XEUtils.findTree(tableFullTreeData, item => rowid === getRowid(this, item), treeOpts)
338
- if (matchObj) {
339
- insertRecords.push(row)
340
- }
341
- })
342
- } else {
343
- insertList.forEach(row => {
344
- if (tableFullData.indexOf(row) > -1) {
345
- insertRecords.push(row)
346
- }
347
- })
340
+ insertList.forEach(row => {
341
+ const rowid = getRowid(this, row)
342
+ if (fullAllDataRowIdData[rowid]) {
343
+ insertRecords.push(row)
348
344
  }
349
- }
345
+ })
350
346
  return insertRecords
351
347
  },
352
348
  /**
@@ -31,6 +31,9 @@ const VxeFormConfigItem = {
31
31
  const { slots, title, folding, visible, field, collapseNode, itemRender, showError, errRule, className, titleOverflow, children } = item
32
32
  const compConf = isEnableConf(itemRender) ? VXETable.renderer.get(itemRender.name) : null
33
33
  const itemClassName = compConf ? compConf.itemClassName : ''
34
+ const itemStyle = compConf ? compConf.itemStyle : null
35
+ const itemContentClassName = compConf ? compConf.itemContentClassName : ''
36
+ const itemContentStyle = compConf ? compConf.itemContentStyle : null
34
37
  const span = item.span || $xeform.span
35
38
  const align = item.align || $xeform.align
36
39
  const titleAlign = XEUtils.eqNull(item.titleAlign) ? allTitleAlign : item.titleAlign
@@ -100,7 +103,8 @@ const VxeFormConfigItem = {
100
103
  'is--active': isActivetem($xeform, item),
101
104
  'is--error': showError
102
105
  }
103
- ]
106
+ ],
107
+ style: XEUtils.isFunction(itemStyle) ? itemStyle(params) : itemStyle
104
108
  }, [
105
109
  h('div', {
106
110
  class: 'vxe-form--item-inner'
@@ -118,7 +122,8 @@ const VxeFormConfigItem = {
118
122
  on: ons
119
123
  }, renderTitle(h, $xeform, item)) : null,
120
124
  h('div', {
121
- class: ['vxe-form--item-content', align ? `align--${align}` : null]
125
+ class: ['vxe-form--item-content', align ? `align--${align}` : '', itemContentClassName ? (XEUtils.isFunction(itemContentClassName) ? itemContentClassName(params) : itemContentClassName) : ''],
126
+ style: XEUtils.isFunction(itemContentStyle) ? itemContentStyle(params) : itemContentStyle
122
127
  }, contentVNs.concat(
123
128
  [
124
129
  collapseNode ? h('div', {
@@ -55,6 +55,9 @@ const renderItem = (h, _vm, item, slots) => {
55
55
  const { title, folding, visible, field, collapseNode, itemRender, showError, errRule, className, titleOverflow } = item
56
56
  const compConf = isEnableConf(itemRender) ? VXETable.renderer.get(itemRender.name) : null
57
57
  const itemClassName = compConf ? compConf.itemClassName : ''
58
+ const itemStyle = compConf ? compConf.itemStyle : null
59
+ const itemContentClassName = compConf ? compConf.itemContentClassName : ''
60
+ const itemContentStyle = compConf ? compConf.itemContentStyle : null
58
61
  const span = item.span || _vm.span
59
62
  const align = item.align || _vm.align
60
63
  const titleAlign = XEUtils.eqNull(item.titleAlign) ? allTitleAlign : item.titleAlign
@@ -109,7 +112,8 @@ const renderItem = (h, _vm, item, slots) => {
109
112
  'is--active': isActivetem(_vm, item),
110
113
  'is--error': showError
111
114
  }
112
- ]
115
+ ],
116
+ style: XEUtils.isFunction(itemStyle) ? itemStyle(params) : itemStyle
113
117
  }, [
114
118
  h('div', {
115
119
  class: 'vxe-form--item-inner'
@@ -127,7 +131,8 @@ const renderItem = (h, _vm, item, slots) => {
127
131
  on: ons
128
132
  }, renderTitle(h, _vm, item)) : null,
129
133
  h('div', {
130
- class: ['vxe-form--item-content', align ? `align--${align}` : null]
134
+ class: ['vxe-form--item-content', align ? `align--${align}` : '', itemContentClassName ? (XEUtils.isFunction(itemContentClassName) ? itemContentClassName(params) : itemContentClassName) : ''],
135
+ style: XEUtils.isFunction(itemContentStyle) ? itemContentStyle(params) : itemContentStyle
131
136
  }, contentVNs.concat(
132
137
  [
133
138
  collapseNode ? h('div', {
@@ -706,13 +706,15 @@ export default {
706
706
  })
707
707
  }
708
708
  },
709
- focusEvent () {
709
+ focusEvent (evnt) {
710
710
  if (!this.disabled) {
711
711
  this.isActivated = true
712
712
  }
713
+ this.$emit('focus', { $event: evnt })
713
714
  },
714
- blurEvent () {
715
+ blurEvent (evnt) {
715
716
  this.isActivated = false
717
+ this.$emit('blur', { $event: evnt })
716
718
  },
717
719
  modelSearchEvent (value) {
718
720
  this.searchValue = value
@@ -93,7 +93,8 @@ function renderColumn (h, _vm, $xetable, seq, rowid, fixedType, rowLevel, row, r
93
93
  const { height: rowHeight } = rowOpts
94
94
  const renderOpts = editRender || cellRender
95
95
  const compConf = renderOpts ? VXETable.renderer.get(renderOpts.name) : null
96
- const cellClassName = compConf ? compConf.cellClassName : ''
96
+ const compCellClassName = compConf ? compConf.cellClassName : ''
97
+ const compCellStyle = compConf ? compConf.cellStyle : ''
97
98
  const showAllTip = tooltipOpts.showAll || tooltipOpts.enabled
98
99
  const columnIndex = $xetable.getColumnIndex(column)
99
100
  const _columnIndex = $xetable.getVTColumnIndex(column)
@@ -275,7 +276,7 @@ function renderColumn (h, _vm, $xetable, seq, rowid, fixedType, rowLevel, row, r
275
276
  'col--valid-error': hasValidError,
276
277
  'col--current': currentColumn === column
277
278
  },
278
- UtilTools.getClass(cellClassName, params),
279
+ UtilTools.getClass(compCellClassName, params),
279
280
  UtilTools.getClass(className, params),
280
281
  UtilTools.getClass(allCellClassName, params)
281
282
  ],
@@ -283,7 +284,7 @@ function renderColumn (h, _vm, $xetable, seq, rowid, fixedType, rowLevel, row, r
283
284
  attrs,
284
285
  style: Object.assign({
285
286
  height: hasEllipsis && (scrollYRHeight || rowHeight) ? `${scrollYRHeight || rowHeight}px` : ''
286
- }, cellStyle ? (XEUtils.isFunction(cellStyle) ? cellStyle(params) : cellStyle) : null),
287
+ }, XEUtils.isFunction(compCellStyle) ? compCellStyle(params) : compCellStyle, XEUtils.isFunction(cellStyle) ? cellStyle(params) : cellStyle),
287
288
  on: tdOns
288
289
  }, tdVNs)
289
290
  }
@@ -303,7 +304,6 @@ function renderRows (h, _vm, $xetable, fixedType, tableData, tableColumn) {
303
304
  editOpts,
304
305
  treeExpandeds,
305
306
  scrollYLoad,
306
- editStore,
307
307
  rowExpandeds,
308
308
  radioOpts,
309
309
  checkboxOpts,
@@ -347,7 +347,7 @@ function renderRows (h, _vm, $xetable, fixedType, tableData, tableColumn) {
347
347
  // 是否新增行
348
348
  let isNewRow = false
349
349
  if (editConfig) {
350
- isNewRow = editStore.insertList.indexOf(row) > -1
350
+ isNewRow = $xetable.isInsertByRow(row)
351
351
  }
352
352
  if (treeConfig && !scrollYLoad && !treeOpts.transform && treeExpandeds.length) {
353
353
  rowChildren = row[treeOpts.children]
@@ -343,8 +343,9 @@ const Methods = {
343
343
  updateScrollYStatus (fullData) {
344
344
  const { treeConfig, treeOpts, sYOpts } = this
345
345
  const { transform } = treeOpts
346
+ const allList = fullData || this.tableFullData
346
347
  // 如果gt为0,则总是启用
347
- const scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt <= fullData.length)
348
+ const scrollYLoad = (transform || !treeConfig) && !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt <= allList.length)
348
349
  this.scrollYLoad = scrollYLoad
349
350
  return scrollYLoad
350
351
  },
@@ -397,7 +398,9 @@ const Methods = {
397
398
  scrollXStore.startIndex = 0
398
399
  scrollXStore.endIndex = 1
399
400
  editStore.insertList = []
401
+ editStore.insertMaps = {}
400
402
  editStore.removeList = []
403
+ editStore.removeMaps = {}
401
404
  const sYLoad = this.updateScrollYStatus(fullData)
402
405
  this.scrollYLoad = sYLoad
403
406
  // 全量数据
@@ -654,7 +657,7 @@ const Methods = {
654
657
  * 牺牲数据组装的耗时,用来换取使用过程中的流畅
655
658
  */
656
659
  cacheColumnMap () {
657
- const { tableFullColumn, collectColumn, fullColumnMap, showOverflow } = this
660
+ const { tableFullColumn, collectColumn, fullColumnMap, showOverflow, columnOpts, rowOpts } = this
658
661
  const fullColumnIdData = this.fullColumnIdData = {}
659
662
  const fullColumnFieldData = this.fullColumnFieldData = {}
660
663
  const isGroup = collectColumn.some(hasChildrenList)
@@ -663,6 +666,7 @@ const Methods = {
663
666
  let treeNodeColumn
664
667
  let checkboxColumn
665
668
  let radioColumn
669
+ let htmlColumn
666
670
  let hasFixed
667
671
  const handleFunc = (column, index, items, path, parent) => {
668
672
  const { id: colid, field, fixed, type, treeNode } = column
@@ -675,9 +679,14 @@ const Methods = {
675
679
  }
676
680
  fullColumnFieldData[field] = rest
677
681
  }
682
+
678
683
  if (!hasFixed && fixed) {
679
684
  hasFixed = fixed
680
685
  }
686
+ if (!htmlColumn && type === 'html') {
687
+ htmlColumn = column
688
+ }
689
+
681
690
  if (treeNode) {
682
691
  if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
683
692
  if (treeNodeColumn) {
@@ -725,6 +734,18 @@ const Methods = {
725
734
  warnLog('vxe.error.errConflicts', [`table.show-footer-overflow=${this.showFooterOverflow}`, `column.show-footer-overflow=${column.showFooterOverflow}`])
726
735
  }
727
736
  }
737
+
738
+ if (process.env.VUE_APP_VXE_TABLE_ENV === 'development') {
739
+ if (htmlColumn) {
740
+ if (!columnOpts.useKey) {
741
+ errLog('vxe.error.reqProp', ['column-config.useKey', 'column.type=html'])
742
+ }
743
+ if (!rowOpts.useKey) {
744
+ errLog('vxe.error.reqProp', ['row-config.useKey', 'column.type=html'])
745
+ }
746
+ }
747
+ }
748
+
728
749
  if (isAllOverflow && column.showOverflow === false) {
729
750
  isAllOverflow = false
730
751
  }
@@ -879,40 +900,45 @@ const Methods = {
879
900
  },
880
901
  /**
881
902
  * 定义行数据中的列属性,如果不存在则定义
882
- * @param {Row} record 行数据
903
+ * @param {Row} records 行数据
883
904
  */
884
- defineField (record) {
905
+ defineField (records) {
885
906
  const { radioOpts, checkboxOpts, treeConfig, treeOpts, expandOpts } = this
886
907
  const rowkey = getRowkey(this)
887
- this.tableFullColumn.forEach(column => {
888
- const { field, editRender } = column
889
- if (field && !XEUtils.has(record, field)) {
890
- let cellValue = null
891
- if (editRender) {
892
- const { defaultValue } = editRender
893
- if (XEUtils.isFunction(defaultValue)) {
894
- cellValue = defaultValue({ column })
895
- } else if (!XEUtils.isUndefined(defaultValue)) {
896
- cellValue = defaultValue
908
+ if (!XEUtils.isArray(records)) {
909
+ records = [records || {}]
910
+ }
911
+ return records.map(record => {
912
+ this.tableFullColumn.forEach(column => {
913
+ const { field, editRender } = column
914
+ if (field && !XEUtils.has(record, field)) {
915
+ let cellValue = null
916
+ if (editRender) {
917
+ const { defaultValue } = editRender
918
+ if (XEUtils.isFunction(defaultValue)) {
919
+ cellValue = defaultValue({ column })
920
+ } else if (!XEUtils.isUndefined(defaultValue)) {
921
+ cellValue = defaultValue
922
+ }
897
923
  }
924
+ XEUtils.set(record, field, cellValue)
898
925
  }
899
- XEUtils.set(record, field, cellValue)
926
+ })
927
+ const otherFields = [radioOpts.labelField, checkboxOpts.checkField, checkboxOpts.labelField, expandOpts.labelField]
928
+ otherFields.forEach((key) => {
929
+ if (key && eqEmptyValue(XEUtils.get(record, key))) {
930
+ XEUtils.set(record, key, null)
931
+ }
932
+ })
933
+ if (treeConfig && treeOpts.lazy && XEUtils.isUndefined(record[treeOpts.children])) {
934
+ record[treeOpts.children] = null
900
935
  }
901
- })
902
- const otherFields = [radioOpts.labelField, checkboxOpts.checkField, checkboxOpts.labelField, expandOpts.labelField]
903
- otherFields.forEach((key) => {
904
- if (key && eqEmptyValue(XEUtils.get(record, key))) {
905
- XEUtils.set(record, key, null)
936
+ // 必须有行数据的唯一主键,可以自行设置;也可以默认生成一个随机数
937
+ if (eqEmptyValue(XEUtils.get(record, rowkey))) {
938
+ XEUtils.set(record, rowkey, getRowUniqueId())
906
939
  }
940
+ return record
907
941
  })
908
- if (treeConfig && treeOpts.lazy && XEUtils.isUndefined(record[treeOpts.children])) {
909
- record[treeOpts.children] = null
910
- }
911
- // 必须有行数据的唯一主键,可以自行设置;也可以默认生成一个随机数
912
- if (eqEmptyValue(XEUtils.get(record, rowkey))) {
913
- XEUtils.set(record, rowkey, getRowUniqueId())
914
- }
915
- return record
916
942
  },
917
943
  /**
918
944
  * 创建 data 对象
@@ -920,10 +946,9 @@ const Methods = {
920
946
  * @param {Array} records 新数据
921
947
  */
922
948
  createData (records) {
923
- const { treeConfig, treeOpts } = this
924
- const handleRrecord = record => this.defineField(Object.assign({}, record))
925
- const rows = treeConfig ? XEUtils.mapTree(records, handleRrecord, treeOpts) : records.map(handleRrecord)
926
- return this.$nextTick().then(() => rows)
949
+ return this.$nextTick().then(() => {
950
+ return this.defineField(records)
951
+ })
927
952
  },
928
953
  /**
929
954
  * 创建 Row|Rows 对象
@@ -935,7 +960,7 @@ const Methods = {
935
960
  if (!isArr) {
936
961
  records = [records]
937
962
  }
938
- return this.$nextTick().then(() => this.createData(records).then(rows => isArr ? rows : rows[0]))
963
+ return this.createData(records).then(rows => isArr ? rows : rows[0])
939
964
  },
940
965
  /**
941
966
  * 还原数据
@@ -1017,7 +1042,9 @@ const Methods = {
1017
1042
  * @param {Row} row 行对象
1018
1043
  */
1019
1044
  isInsertByRow (row) {
1020
- return this.editStore.insertList.indexOf(row) > -1
1045
+ const { editStore } = this
1046
+ const rowid = getRowid(this, row)
1047
+ return editStore.insertList.length && editStore.insertMaps[rowid]
1021
1048
  },
1022
1049
  /**
1023
1050
  * 删除所有新增的临时数据
@@ -3723,13 +3750,17 @@ const Methods = {
3723
3750
  * 判断指定列是否为筛选状态,如果为空则判断所有列
3724
3751
  * @param {String} fieldOrColumn 字段名
3725
3752
  */
3726
- isFilter (fieldOrColumn) {
3753
+ isActiveFilterByColumn (fieldOrColumn) {
3727
3754
  const column = handleFieldOrColumn(this, fieldOrColumn)
3728
3755
  if (column) {
3729
3756
  return column.filters && column.filters.some(option => option.checked)
3730
3757
  }
3731
3758
  return this.getCheckedFilters().length > 0
3732
3759
  },
3760
+ // 已废弃
3761
+ isFilter (fieldOrColumn) {
3762
+ return this.isActiveFilterByColumn(fieldOrColumn)
3763
+ },
3733
3764
  /**
3734
3765
  * 判断展开行是否懒加载完成
3735
3766
  * @param {Row} row 行对象
@@ -394,7 +394,9 @@ export default {
394
394
  column: null
395
395
  },
396
396
  insertList: [],
397
- removeList: []
397
+ insertMaps: {},
398
+ removeList: [],
399
+ removeMaps: {}
398
400
  },
399
401
  // 存放 tooltip 相关信息
400
402
  tooltipStore: {
package/types/table.d.ts CHANGED
@@ -272,6 +272,7 @@ export declare class Table extends VXETableComponent {
272
272
  */
273
273
  clearAll(): Promise<any>;
274
274
  /**
275
+ * 该方法已废弃!!!
275
276
  * 同步 data 数据;如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑
276
277
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
277
278
  * @deprecated
@@ -629,6 +630,11 @@ export declare class Table extends VXETableComponent {
629
630
  * 判断指定列是否为筛选状态,如果为空则判断所有列
630
631
  * @param column 列对象
631
632
  */
633
+ isActiveFilterByColumn(column: ColumnInfo): boolean;
634
+ /**
635
+ * 已废弃,请使用 isFilterByColumn
636
+ * @deprecated
637
+ */
632
638
  isFilter(column: ColumnInfo): boolean;
633
639
  /**
634
640
  * 用于 expand-config.lazy,用于懒加载展开行,判断展开行是否懒加载完成
@@ -1,5 +1,5 @@
1
- import { CreateElement, VNode } from 'vue'
2
- import { SlotVNodeType, RowInfo } from '../component'
1
+ import { CreateElement } from 'vue'
2
+ import { SlotVNodeType, RowInfo, VNodeStyle } from '../component'
3
3
  import { Table } from '../table'
4
4
  import { Grid } from '../grid'
5
5
  import { ColumnInfo, ColumnCellRenderOptions, ColumnContentRenderOptions } from '../column'
@@ -43,6 +43,7 @@ export interface RendererMapOptions {
43
43
 
44
44
  // 单元格渲染
45
45
  cellClassName?: string | ((params: ColumnCellRenderParams | ColumnEditRenderParams) => string | { [key: string]: boolean })
46
+ cellStyle?: string | VNodeStyle | ((params: ColumnCellRenderParams | ColumnEditRenderParams) => string | VNodeStyle)
46
47
  renderHeader?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): SlotVNodeType | SlotVNodeType[];
47
48
  renderDefault?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnCellRenderParams | ColumnEditRenderParams): SlotVNodeType | SlotVNodeType[];
48
49
  renderFooter?(h: CreateElement, renderOpts: ColumnCellRenderOptions | ColumnEditRenderOptions, params: ColumnFooterRenderParams): SlotVNodeType | SlotVNodeType[];
@@ -63,6 +64,9 @@ export interface RendererMapOptions {
63
64
 
64
65
  // 表单-项渲染
65
66
  itemClassName?: string | ((params: FormItemRenderParams) => string | { [key: string]: boolean })
67
+ itemStyle?: string | VNodeStyle | ((params: FormItemRenderParams) => string | VNodeStyle)
68
+ itemContentClassName?: string | ((params: FormItemRenderParams) => string | { [key: string]: boolean })
69
+ itemContentStyle?: string | VNodeStyle | ((params: FormItemRenderParams) => string | VNodeStyle)
66
70
  renderItemTitle?(h: CreateElement, renderOpts: FormItemRenderOptions, params: FormItemRenderParams): SlotVNodeType | SlotVNodeType[];
67
71
  renderItemContent?(h: CreateElement, renderOpts: FormItemRenderOptions, params: FormItemRenderParams): SlotVNodeType | SlotVNodeType[];
68
72
  itemVisibleMethod?(params: FormItemVisibleParams): boolean;
@@ -178,9 +182,9 @@ export class GridRenderParams extends TableRenderParams {
178
182
 
179
183
  export class EmptyRenderParams extends TableRenderParams { }
180
184
 
181
- export interface ColumnDefaultSlotParams extends ColumnCellRenderParams { }
182
- export interface ColumnContentSlotParams extends ColumnContentRenderParams { }
183
- export interface ColumnIconSlotParams extends ColumnIconRenderParams { }
185
+ export type ColumnDefaultSlotParams = ColumnCellRenderParams
186
+ export type ColumnContentSlotParams = ColumnContentRenderParams
187
+ export type ColumnIconSlotParams = ColumnIconRenderParams
184
188
 
185
- export interface ColumnContentRenderParams extends ColumnCellRenderParams { }
186
- export interface ColumnIconRenderParams extends ColumnCellRenderParams { }
189
+ export type ColumnContentRenderParams = ColumnCellRenderParams
190
+ export type ColumnIconRenderParams = ColumnCellRenderParams