vxe-table 4.18.0-beta.2 → 4.18.0-beta.20

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 (322) hide show
  1. package/README.md +10 -10
  2. package/es/colgroup/style.css +0 -0
  3. package/es/colgroup/style.min.css +0 -0
  4. package/es/column/style.css +0 -0
  5. package/es/column/style.min.css +0 -0
  6. package/es/grid/src/grid.js +23 -19
  7. package/es/grid/style.css +86 -0
  8. package/es/grid/style.min.css +1 -0
  9. package/es/iconfont.1770109263422.ttf +0 -0
  10. package/es/iconfont.1770109263422.woff +0 -0
  11. package/es/iconfont.1770109263422.woff2 +0 -0
  12. package/es/index.css +1 -1
  13. package/es/index.min.css +1 -1
  14. package/es/locale/lang/ar-EG.d.ts +2 -0
  15. package/es/locale/lang/ar-EG.js +6 -0
  16. package/es/locale/lang/de-DE.d.ts +2 -0
  17. package/es/locale/lang/de-DE.js +6 -0
  18. package/es/locale/lang/en-US.d.ts +2 -0
  19. package/es/locale/lang/en-US.js +6 -0
  20. package/es/locale/lang/es-ES.d.ts +2 -0
  21. package/es/locale/lang/es-ES.js +6 -0
  22. package/es/locale/lang/fr-FR.d.ts +2 -0
  23. package/es/locale/lang/fr-FR.js +6 -0
  24. package/es/locale/lang/hu-HU.d.ts +2 -0
  25. package/es/locale/lang/hu-HU.js +6 -0
  26. package/es/locale/lang/hy-AM.d.ts +2 -0
  27. package/es/locale/lang/hy-AM.js +6 -0
  28. package/es/locale/lang/id-ID.d.ts +2 -0
  29. package/es/locale/lang/id-ID.js +6 -0
  30. package/es/locale/lang/it-IT.d.ts +2 -0
  31. package/es/locale/lang/it-IT.js +6 -0
  32. package/es/locale/lang/ja-JP.d.ts +2 -0
  33. package/es/locale/lang/ja-JP.js +6 -0
  34. package/es/locale/lang/ko-KR.d.ts +2 -0
  35. package/es/locale/lang/ko-KR.js +6 -0
  36. package/es/locale/lang/ms-MY.d.ts +2 -0
  37. package/es/locale/lang/ms-MY.js +6 -0
  38. package/es/locale/lang/nb-NO.d.ts +2 -0
  39. package/es/locale/lang/nb-NO.js +6 -0
  40. package/es/locale/lang/pt-BR.d.ts +2 -0
  41. package/es/locale/lang/pt-BR.js +6 -0
  42. package/es/locale/lang/ru-RU.d.ts +2 -0
  43. package/es/locale/lang/ru-RU.js +6 -0
  44. package/es/locale/lang/th-TH.d.ts +2 -0
  45. package/es/locale/lang/th-TH.js +6 -0
  46. package/es/locale/lang/ug-CN.d.ts +2 -0
  47. package/es/locale/lang/ug-CN.js +6 -0
  48. package/es/locale/lang/uk-UA.d.ts +2 -0
  49. package/es/locale/lang/uk-UA.js +6 -0
  50. package/es/locale/lang/uz-UZ.d.ts +2 -0
  51. package/es/locale/lang/uz-UZ.js +6 -0
  52. package/es/locale/lang/vi-VN.d.ts +2 -0
  53. package/es/locale/lang/vi-VN.js +6 -0
  54. package/es/locale/lang/zh-CHT.d.ts +2 -0
  55. package/es/locale/lang/zh-CHT.js +6 -0
  56. package/es/locale/lang/zh-CN.d.ts +2 -0
  57. package/es/locale/lang/zh-CN.js +6 -0
  58. package/es/locale/lang/zh-HK.d.ts +2 -0
  59. package/es/locale/lang/zh-MO.d.ts +2 -0
  60. package/es/locale/lang/zh-TW.d.ts +2 -0
  61. package/es/style.css +1 -1
  62. package/es/style.min.css +1 -1
  63. package/es/table/module/custom/hook.js +25 -9
  64. package/es/table/module/custom/panel.js +14 -13
  65. package/es/table/module/edit/hook.js +3 -3
  66. package/es/table/module/export/hook.js +15 -1
  67. package/es/table/module/filter/panel.js +11 -3
  68. package/es/table/module/validator/hook.js +7 -6
  69. package/es/table/render/index.js +14 -0
  70. package/es/table/src/body.js +12 -5
  71. package/es/table/src/emits.js +1 -0
  72. package/es/table/src/props.js +2 -0
  73. package/es/table/src/table.js +235 -54
  74. package/es/table/src/util.js +23 -9
  75. package/es/table/style.css +3887 -0
  76. package/es/table/style.min.css +1 -0
  77. package/es/toolbar/src/toolbar.js +11 -7
  78. package/es/toolbar/style.css +110 -0
  79. package/es/toolbar/style.min.css +1 -0
  80. package/es/ui/index.js +1 -1
  81. package/es/ui/src/log.js +1 -1
  82. package/es/ui/style.css +0 -0
  83. package/es/ui/style.min.css +0 -0
  84. package/es/v-x-e-table/style.css +0 -0
  85. package/es/v-x-e-table/style.min.css +0 -0
  86. package/es/vxe-colgroup/style.css +0 -0
  87. package/es/vxe-colgroup/style.min.css +0 -0
  88. package/es/vxe-column/style.css +0 -0
  89. package/es/vxe-column/style.min.css +0 -0
  90. package/es/vxe-grid/style.css +86 -0
  91. package/es/vxe-grid/style.min.css +1 -0
  92. package/es/vxe-table/style.css +3887 -0
  93. package/es/vxe-table/style.min.css +1 -0
  94. package/es/vxe-toolbar/style.css +110 -0
  95. package/es/vxe-toolbar/style.min.css +1 -0
  96. package/es/vxe-ui/style.css +0 -0
  97. package/es/vxe-ui/style.min.css +0 -0
  98. package/es/vxe-v-x-e-table/style.css +0 -0
  99. package/es/vxe-v-x-e-table/style.min.css +0 -0
  100. package/lib/colgroup/style/index.js +1 -0
  101. package/lib/colgroup/style/style.css +0 -0
  102. package/lib/colgroup/style/style.min.css +0 -0
  103. package/lib/column/style/index.js +1 -0
  104. package/lib/column/style/style.css +0 -0
  105. package/lib/column/style/style.min.css +0 -0
  106. package/lib/grid/src/grid.js +22 -18
  107. package/lib/grid/src/grid.min.js +1 -1
  108. package/lib/grid/style/index.js +1 -0
  109. package/lib/grid/style/style.css +86 -0
  110. package/lib/grid/style/style.min.css +1 -0
  111. package/lib/iconfont.1770109263422.ttf +0 -0
  112. package/lib/iconfont.1770109263422.woff +0 -0
  113. package/lib/iconfont.1770109263422.woff2 +0 -0
  114. package/lib/index.common.js +22 -0
  115. package/lib/index.css +1 -1
  116. package/lib/index.min.css +1 -1
  117. package/lib/index.umd.js +224 -106
  118. package/lib/index.umd.min.js +1 -1
  119. package/lib/locale/lang/ar-EG.d.ts +2 -0
  120. package/lib/locale/lang/ar-EG.js +6 -0
  121. package/lib/locale/lang/ar-EG.min.js +1 -1
  122. package/lib/locale/lang/ar-EG.umd.js +848 -0
  123. package/lib/locale/lang/de-DE.d.ts +2 -0
  124. package/lib/locale/lang/de-DE.js +6 -0
  125. package/lib/locale/lang/de-DE.min.js +1 -1
  126. package/lib/locale/lang/de-DE.umd.js +848 -0
  127. package/lib/locale/lang/en-US.d.ts +2 -0
  128. package/lib/locale/lang/en-US.js +6 -0
  129. package/lib/locale/lang/en-US.min.js +1 -1
  130. package/lib/locale/lang/en-US.umd.js +848 -0
  131. package/lib/locale/lang/es-ES.d.ts +2 -0
  132. package/lib/locale/lang/es-ES.js +6 -0
  133. package/lib/locale/lang/es-ES.min.js +1 -1
  134. package/lib/locale/lang/es-ES.umd.js +848 -0
  135. package/lib/locale/lang/fr-FR.d.ts +2 -0
  136. package/lib/locale/lang/fr-FR.js +6 -0
  137. package/lib/locale/lang/fr-FR.min.js +1 -1
  138. package/lib/locale/lang/fr-FR.umd.js +848 -0
  139. package/lib/locale/lang/hu-HU.d.ts +2 -0
  140. package/lib/locale/lang/hu-HU.js +6 -0
  141. package/lib/locale/lang/hu-HU.min.js +1 -1
  142. package/lib/locale/lang/hu-HU.umd.js +848 -0
  143. package/lib/locale/lang/hy-AM.d.ts +2 -0
  144. package/lib/locale/lang/hy-AM.js +6 -0
  145. package/lib/locale/lang/hy-AM.min.js +1 -1
  146. package/lib/locale/lang/hy-AM.umd.js +848 -0
  147. package/lib/locale/lang/id-ID.d.ts +2 -0
  148. package/lib/locale/lang/id-ID.js +6 -0
  149. package/lib/locale/lang/id-ID.min.js +1 -1
  150. package/lib/locale/lang/id-ID.umd.js +848 -0
  151. package/lib/locale/lang/it-IT.d.ts +2 -0
  152. package/lib/locale/lang/it-IT.js +6 -0
  153. package/lib/locale/lang/it-IT.min.js +1 -1
  154. package/lib/locale/lang/it-IT.umd.js +848 -0
  155. package/lib/locale/lang/ja-JP.d.ts +2 -0
  156. package/lib/locale/lang/ja-JP.js +6 -0
  157. package/lib/locale/lang/ja-JP.min.js +1 -1
  158. package/lib/locale/lang/ja-JP.umd.js +848 -0
  159. package/lib/locale/lang/ko-KR.d.ts +2 -0
  160. package/lib/locale/lang/ko-KR.js +6 -0
  161. package/lib/locale/lang/ko-KR.min.js +1 -1
  162. package/lib/locale/lang/ko-KR.umd.js +848 -0
  163. package/lib/locale/lang/ms-MY.d.ts +2 -0
  164. package/lib/locale/lang/ms-MY.js +6 -0
  165. package/lib/locale/lang/ms-MY.min.js +1 -1
  166. package/lib/locale/lang/ms-MY.umd.js +848 -0
  167. package/lib/locale/lang/nb-NO.d.ts +2 -0
  168. package/lib/locale/lang/nb-NO.js +6 -0
  169. package/lib/locale/lang/nb-NO.min.js +1 -1
  170. package/lib/locale/lang/nb-NO.umd.js +848 -0
  171. package/lib/locale/lang/pt-BR.d.ts +2 -0
  172. package/lib/locale/lang/pt-BR.js +6 -0
  173. package/lib/locale/lang/pt-BR.min.js +1 -1
  174. package/lib/locale/lang/pt-BR.umd.js +848 -0
  175. package/lib/locale/lang/ru-RU.d.ts +2 -0
  176. package/lib/locale/lang/ru-RU.js +6 -0
  177. package/lib/locale/lang/ru-RU.min.js +1 -1
  178. package/lib/locale/lang/ru-RU.umd.js +848 -0
  179. package/lib/locale/lang/th-TH.d.ts +2 -0
  180. package/lib/locale/lang/th-TH.js +6 -0
  181. package/lib/locale/lang/th-TH.min.js +1 -1
  182. package/lib/locale/lang/th-TH.umd.js +848 -0
  183. package/lib/locale/lang/ug-CN.d.ts +2 -0
  184. package/lib/locale/lang/ug-CN.js +6 -0
  185. package/lib/locale/lang/ug-CN.min.js +1 -1
  186. package/lib/locale/lang/ug-CN.umd.js +848 -0
  187. package/lib/locale/lang/uk-UA.d.ts +2 -0
  188. package/lib/locale/lang/uk-UA.js +6 -0
  189. package/lib/locale/lang/uk-UA.min.js +1 -1
  190. package/lib/locale/lang/uk-UA.umd.js +848 -0
  191. package/lib/locale/lang/uz-UZ.d.ts +2 -0
  192. package/lib/locale/lang/uz-UZ.js +6 -0
  193. package/lib/locale/lang/uz-UZ.min.js +1 -1
  194. package/lib/locale/lang/uz-UZ.umd.js +848 -0
  195. package/lib/locale/lang/vi-VN.d.ts +2 -0
  196. package/lib/locale/lang/vi-VN.js +6 -0
  197. package/lib/locale/lang/vi-VN.min.js +1 -1
  198. package/lib/locale/lang/vi-VN.umd.js +848 -0
  199. package/lib/locale/lang/zh-CHT.d.ts +2 -0
  200. package/lib/locale/lang/zh-CHT.js +6 -0
  201. package/lib/locale/lang/zh-CHT.min.js +1 -1
  202. package/lib/locale/lang/zh-CHT.umd.js +848 -0
  203. package/lib/locale/lang/zh-CN.d.ts +2 -0
  204. package/lib/locale/lang/zh-CN.js +6 -0
  205. package/lib/locale/lang/zh-CN.min.js +1 -1
  206. package/lib/locale/lang/zh-CN.umd.js +848 -0
  207. package/lib/locale/lang/zh-HK.d.ts +2 -0
  208. package/lib/locale/lang/zh-HK.min.js +1 -1
  209. package/lib/locale/lang/zh-HK.umd.js +23 -0
  210. package/lib/locale/lang/zh-MO.d.ts +2 -0
  211. package/lib/locale/lang/zh-MO.min.js +1 -1
  212. package/lib/locale/lang/zh-MO.umd.js +23 -0
  213. package/lib/locale/lang/zh-TW.d.ts +2 -0
  214. package/lib/locale/lang/zh-TW.min.js +1 -1
  215. package/lib/locale/lang/zh-TW.umd.js +23 -0
  216. package/lib/style.css +1 -1
  217. package/lib/style.min.css +1 -1
  218. package/lib/table/module/custom/hook.js +29 -9
  219. package/lib/table/module/custom/hook.min.js +1 -1
  220. package/lib/table/module/custom/panel.js +12 -8
  221. package/lib/table/module/custom/panel.min.js +1 -1
  222. package/lib/table/module/edit/hook.js +3 -3
  223. package/lib/table/module/edit/hook.min.js +1 -1
  224. package/lib/table/module/export/hook.js +18 -6
  225. package/lib/table/module/export/hook.min.js +1 -1
  226. package/lib/table/module/filter/panel.js +14 -3
  227. package/lib/table/module/filter/panel.min.js +1 -1
  228. package/lib/table/module/validator/hook.js +8 -6
  229. package/lib/table/module/validator/hook.min.js +1 -1
  230. package/lib/table/render/index.js +18 -0
  231. package/lib/table/render/index.min.js +1 -1
  232. package/lib/table/src/body.js +13 -4
  233. package/lib/table/src/body.min.js +1 -1
  234. package/lib/table/src/emits.js +1 -1
  235. package/lib/table/src/emits.min.js +1 -1
  236. package/lib/table/src/props.js +2 -0
  237. package/lib/table/src/props.min.js +1 -1
  238. package/lib/table/src/table.js +37 -32
  239. package/lib/table/src/table.min.js +1 -1
  240. package/lib/table/src/util.js +31 -11
  241. package/lib/table/src/util.min.js +1 -1
  242. package/lib/table/style/index.js +1 -0
  243. package/lib/table/style/style.css +3887 -0
  244. package/lib/table/style/style.min.css +1 -0
  245. package/lib/toolbar/src/toolbar.js +10 -6
  246. package/lib/toolbar/src/toolbar.min.js +1 -1
  247. package/lib/toolbar/style/index.js +1 -0
  248. package/lib/toolbar/style/style.css +110 -0
  249. package/lib/toolbar/style/style.min.css +1 -0
  250. package/lib/ui/index.js +1 -1
  251. package/lib/ui/index.min.js +1 -1
  252. package/lib/ui/src/log.js +1 -1
  253. package/lib/ui/src/log.min.js +1 -1
  254. package/lib/ui/style/index.js +1 -0
  255. package/lib/ui/style/style.css +0 -0
  256. package/lib/ui/style/style.min.css +0 -0
  257. package/lib/v-x-e-table/style/index.js +1 -0
  258. package/lib/v-x-e-table/style/style.css +0 -0
  259. package/lib/v-x-e-table/style/style.min.css +0 -0
  260. package/lib/vxe-colgroup/style/index.js +1 -0
  261. package/lib/vxe-colgroup/style/style.css +0 -0
  262. package/lib/vxe-colgroup/style/style.min.css +0 -0
  263. package/lib/vxe-column/style/index.js +1 -0
  264. package/lib/vxe-column/style/style.css +0 -0
  265. package/lib/vxe-column/style/style.min.css +0 -0
  266. package/lib/vxe-grid/style/index.js +1 -0
  267. package/lib/vxe-grid/style/style.css +86 -0
  268. package/lib/vxe-grid/style/style.min.css +1 -0
  269. package/lib/vxe-table/style/index.js +1 -0
  270. package/lib/vxe-table/style/style.css +3887 -0
  271. package/lib/vxe-table/style/style.min.css +1 -0
  272. package/lib/vxe-toolbar/style/index.js +1 -0
  273. package/lib/vxe-toolbar/style/style.css +110 -0
  274. package/lib/vxe-toolbar/style/style.min.css +1 -0
  275. package/lib/vxe-ui/style/index.js +1 -0
  276. package/lib/vxe-ui/style/style.css +0 -0
  277. package/lib/vxe-ui/style/style.min.css +0 -0
  278. package/lib/vxe-v-x-e-table/style/index.js +1 -0
  279. package/lib/vxe-v-x-e-table/style/style.css +0 -0
  280. package/lib/vxe-v-x-e-table/style/style.min.css +0 -0
  281. package/package.json +2 -2
  282. package/packages/grid/src/grid.ts +23 -18
  283. package/packages/locale/lang/ar-EG.ts +6 -0
  284. package/packages/locale/lang/de-DE.ts +6 -0
  285. package/packages/locale/lang/en-US.ts +6 -0
  286. package/packages/locale/lang/es-ES.ts +6 -0
  287. package/packages/locale/lang/fr-FR.ts +6 -0
  288. package/packages/locale/lang/hu-HU.ts +6 -0
  289. package/packages/locale/lang/hy-AM.ts +6 -0
  290. package/packages/locale/lang/id-ID.ts +6 -0
  291. package/packages/locale/lang/it-IT.ts +6 -0
  292. package/packages/locale/lang/ja-JP.ts +6 -0
  293. package/packages/locale/lang/ko-KR.ts +6 -0
  294. package/packages/locale/lang/ms-MY.ts +6 -0
  295. package/packages/locale/lang/nb-NO.ts +6 -0
  296. package/packages/locale/lang/pt-BR.ts +6 -0
  297. package/packages/locale/lang/ru-RU.ts +6 -0
  298. package/packages/locale/lang/th-TH.ts +6 -0
  299. package/packages/locale/lang/ug-CN.ts +6 -0
  300. package/packages/locale/lang/uk-UA.ts +6 -0
  301. package/packages/locale/lang/uz-UZ.ts +6 -0
  302. package/packages/locale/lang/vi-VN.ts +6 -0
  303. package/packages/locale/lang/zh-CHT.ts +6 -0
  304. package/packages/locale/lang/zh-CN.ts +6 -0
  305. package/packages/table/module/custom/hook.ts +24 -9
  306. package/packages/table/module/custom/panel.ts +15 -14
  307. package/packages/table/module/edit/hook.ts +3 -3
  308. package/packages/table/module/export/hook.ts +13 -1
  309. package/packages/table/module/filter/panel.ts +10 -3
  310. package/packages/table/module/validator/hook.ts +7 -6
  311. package/packages/table/render/index.ts +16 -0
  312. package/packages/table/src/body.ts +12 -5
  313. package/packages/table/src/emits.ts +1 -0
  314. package/packages/table/src/props.ts +5 -3
  315. package/packages/table/src/table.ts +235 -53
  316. package/packages/table/src/util.ts +25 -9
  317. package/packages/toolbar/src/toolbar.ts +12 -7
  318. package/styles/components/table-module/custom.scss +3 -0
  319. package/styles/components/table-module/filter.scss +1 -1
  320. package/styles/components/table.scss +8 -2
  321. package/styles/components/toolbar.scss +5 -1
  322. package/styles/theme/base.scss +4 -0
@@ -122,7 +122,7 @@ export default defineVxeComponent({
122
122
 
123
123
  const { columnKey, resizable: allResizable, showOverflow: allShowOverflow, border, height, treeConfig, cellClassName: allCellClassName, cellStyle, align: allAlign, spanMethod, mouseConfig, editConfig, editRules, tooltipConfig, padding: allPadding } = tableProps
124
124
  const { tableData, tableColumn, dragRow, overflowX, overflowY, currentColumn, scrollXLoad, scrollYLoad, mergeBodyFlag, calcCellHeightFlag, resizeHeightFlag, resizeWidthFlag, editStore, isAllOverflow, validErrorMaps } = tableReactData
125
- const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore } = tableInternalData
125
+ const { fullAllDataRowIdData, fullColumnIdData, mergeBodyCellMaps, visibleColumn, afterFullData, mergeBodyList, scrollXStore, scrollYStore, keepUpdateFieldMaps } = tableInternalData
126
126
  const cellOpts = computeCellOpts.value
127
127
  const validOpts = computeValidOpts.value
128
128
  const checkboxOpts = computeCheckboxOpts.value
@@ -142,7 +142,7 @@ export default defineVxeComponent({
142
142
  const areaOpts = computeAreaOpts.value
143
143
  const cellOffsetWidth = computeCellOffsetWidth.value
144
144
  const { selectCellToRow } = areaOpts
145
- const { type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column
145
+ const { field, type, cellRender, editRender, align, showOverflow, className, treeNode, rowResize, padding, verticalAlign, slots } = column
146
146
  const { verticalAlign: allVerticalAlign } = cellOpts
147
147
  const { actived } = editStore
148
148
  const rowRest = fullAllDataRowIdData[rowid] || {}
@@ -297,8 +297,8 @@ export default defineVxeComponent({
297
297
  }
298
298
  }
299
299
  // 如果编辑列开启显示状态
300
- if (!fixedHiddenColumn && editConfig && (editRender || cellRender) && (editOpts.showStatus || editOpts.showUpdateStatus)) {
301
- isDirty = $xeTable.isUpdateByRow(row, column.field)
300
+ if (!fixedHiddenColumn && editConfig && (editOpts.showStatus || editOpts.showUpdateStatus) && keepUpdateFieldMaps[field]) {
301
+ isDirty = $xeTable.isUpdateByRow(row, field)
302
302
  }
303
303
 
304
304
  const isVNAutoHeight = !hasEllipsis && (scrollYLoad || scrollXLoad)
@@ -600,6 +600,13 @@ export default defineVxeComponent({
600
600
  const expandOpts = computeExpandOpts.value
601
601
  const { height: expandHeight, padding, mode: expandMode } = expandOpts
602
602
  if (expandMode === 'fixed') {
603
+ const currExpHeight = rowRest.expandHeight
604
+ let expHeight = 0
605
+ if (rowExpandHeightFlag) {
606
+ if (currExpHeight || expandHeight) {
607
+ expHeight = (currExpHeight || expandHeight || 0) + 1
608
+ }
609
+ }
603
610
  rows.push(
604
611
  h('tr', {
605
612
  class: 'vxe-body--row-expanded-place',
@@ -610,7 +617,7 @@ export default defineVxeComponent({
610
617
  class: 'vxe-body--row-expanded-place-column',
611
618
  colspan: tableColumn.length,
612
619
  style: {
613
- height: `${rowExpandHeightFlag ? (rowRest.expandHeight || expandHeight) : 0}px`
620
+ height: `${expHeight}px`
614
621
  }
615
622
  })
616
623
  ])
@@ -74,6 +74,7 @@ export const tableEmits: VxeTableEmits = [
74
74
  'column-dragend',
75
75
 
76
76
  'enter-append-row',
77
+ 'tab-append-row',
77
78
 
78
79
  'edit-actived', // 废弃
79
80
 
@@ -270,13 +270,15 @@ export const tableProps = {
270
270
  // 区域配置项
271
271
  areaConfig: Object as PropType<VxeTablePropTypes.AreaConfig>,
272
272
  // 按键配置项
273
- keyboardConfig: Object as PropType<VxeTablePropTypes.KeyboardConfig<any>>,
273
+ keyboardConfig: Object as PropType<VxeTablePropTypes.KeyboardConfig>,
274
274
  // 复制粘/贴配置项
275
- clipConfig: Object as PropType<VxeTablePropTypes.ClipConfig<any>>,
275
+ clipConfig: Object as PropType<VxeTablePropTypes.ClipConfig>,
276
276
  // 查找/替换配置项
277
277
  fnrConfig: Object as PropType<VxeTablePropTypes.FNRConfig>,
278
278
  // 编辑配置项
279
- editConfig: Object as PropType<VxeTablePropTypes.EditConfig<any>>,
279
+ editConfig: Object as PropType<VxeTablePropTypes.EditConfig>,
280
+ // 数据状态监听配置项
281
+ editDirtyConfig: Object as PropType<VxeTablePropTypes.EditDirtyConfig>,
280
282
  // 校验配置项
281
283
  validConfig: Object as PropType<VxeTablePropTypes.ValidConfig>,
282
284
  // 校验规则配置项
@@ -4,7 +4,7 @@ import XEUtils from 'xe-utils'
4
4
  import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, scrollTopTo, getEventTargetNode, getPaddingTopBottomSize, setScrollTop, setScrollLeft, toCssUnit, hasControlKey, checkTargetElement } from '../../ui/src/dom'
5
5
  import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils'
6
6
  import { VxeUI } from '../../ui'
7
- import { createReactData, createInternalData, getRowUniqueId, clearTableAllStatus, getColumnList, toFilters, hasDeepKey, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getCalcHeight, getCellRestHeight, getLastChildColumn } from './util'
7
+ import { createReactData, createInternalData, getRowUniqueId, createRowId, clearTableAllStatus, getColumnList, toFilters, hasDeepKey, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getRefElem, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getCalcHeight, getCellRestHeight, getLastChildColumn } from './util'
8
8
  import { getSlotVNs } from '../../ui/src/vn'
9
9
  import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from '../../ui/src/anime'
10
10
  import { warnLog, errLog } from '../../ui/src/log'
@@ -370,6 +370,10 @@ export default defineVxeComponent({
370
370
  return Object.assign({}, getConfig().table.editConfig, props.editConfig) as VxeTablePropTypes.EditOpts
371
371
  })
372
372
 
373
+ const computeEditDirtyOpts = computed(() => {
374
+ return Object.assign({}, getConfig().table.editDirtyConfig, props.editDirtyConfig)
375
+ })
376
+
373
377
  const computeSortOpts = computed(() => {
374
378
  return Object.assign({ orders: ['asc', 'desc', null] }, getConfig().table.sortConfig, props.sortConfig) as VxeTablePropTypes.SortOpts
375
379
  })
@@ -586,6 +590,27 @@ export default defineVxeComponent({
586
590
  return Object.assign({}, getConfig().table.customConfig, props.customConfig)
587
591
  })
588
592
 
593
+ const computeCustomSimpleMode = computed(() => {
594
+ const { minHeight, height } = props
595
+ const customOpts = computeCustomOpts.value
596
+ const { mode, popupOptions, placement } = customOpts
597
+ if (!placement || placement === 'top-left' || placement === 'top-right') {
598
+ if (!(mode === 'modal' || mode === 'drawer')) {
599
+ const { mode } = popupOptions || {}
600
+ if (!mode || mode === 'auto') {
601
+ if (height || minHeight) {
602
+ return 'inside'
603
+ }
604
+ return 'outside'
605
+ }
606
+ if (mode) {
607
+ return mode
608
+ }
609
+ }
610
+ }
611
+ return ''
612
+ })
613
+
589
614
  const computeTableRowExpandedList = computed(() => {
590
615
  const { tableData, rowExpandedFlag, expandColumn, rowGroupExpandedFlag, treeExpandedFlag } = reactData
591
616
  const { visibleDataRowIdData, rowExpandedMaps } = internalData
@@ -631,6 +656,33 @@ export default defineVxeComponent({
631
656
  return false
632
657
  })
633
658
 
659
+ const computeKeepFields = computed(() => {
660
+ const { tableFullColumn } = internalData
661
+ const { updateColFlag } = reactData
662
+ const editDirtyOpts = computeEditDirtyOpts.value
663
+ const { includeFields, excludeFields } = editDirtyOpts
664
+ const kpFields: string[] = []
665
+ if (updateColFlag) {
666
+ if (includeFields && includeFields.length) {
667
+ return includeFields
668
+ }
669
+ const exfMaps: Record<string, number> = {}
670
+ if (excludeFields && excludeFields.length) {
671
+ excludeFields.forEach(field => {
672
+ exfMaps[field] = 1
673
+ })
674
+ }
675
+ for (let i = 0; i < tableFullColumn.length; i++) {
676
+ const column = tableFullColumn[i]
677
+ const { field, type, editRender, cellRender } = column
678
+ if (field && !type && (editRender || cellRender) && !exfMaps[field]) {
679
+ kpFields.push(field)
680
+ }
681
+ }
682
+ }
683
+ return kpFields
684
+ })
685
+
634
686
  const computeTableBorder = computed(() => {
635
687
  const { border } = props
636
688
  if (border === true) {
@@ -762,6 +814,7 @@ export default defineVxeComponent({
762
814
  computeHeaderTooltipOpts,
763
815
  computeFooterTooltipOpts,
764
816
  computeEditOpts,
817
+ computeEditDirtyOpts,
765
818
  computeSortOpts,
766
819
  computeFilterOpts,
767
820
  computeFloatingFilterOpts,
@@ -786,11 +839,13 @@ export default defineVxeComponent({
786
839
  computeLoadingOpts,
787
840
  computeCellOffsetWidth,
788
841
  computeCustomOpts,
842
+ computeCustomSimpleMode,
789
843
  computeLeftFixedWidth,
790
844
  computeRightFixedWidth,
791
845
  computeBodyMergeCoverFixed,
792
846
  computeFixedColumnSize,
793
847
  computeIsMaxFixedColumn,
848
+ computeKeepFields,
794
849
  computeIsAllCheckboxDisabled,
795
850
  computeIsHeaderRenderOptimize,
796
851
  computeIsBodyRenderOptimize,
@@ -1445,14 +1500,17 @@ export default defineVxeComponent({
1445
1500
 
1446
1501
  const calcTableHeight = (key: 'height' | 'minHeight' | 'maxHeight') => {
1447
1502
  const { editConfig, editRules } = props
1448
- const { parentHeight } = reactData
1503
+ const { parentHeight, tableColumn } = reactData
1449
1504
  let val = props[key]
1450
1505
  if (key === 'minHeight') {
1451
1506
  const defMinHeight = getConfig().table.minHeight
1452
1507
  if (XEUtils.eqNull(val)) {
1453
1508
  if (eqEmptyValue(defMinHeight)) {
1454
- // 编辑模式默认最小高度
1455
- if (editRules && isEnableConf(editConfig)) {
1509
+ if (!tableColumn.length) {
1510
+ // 如果全部列被隐藏
1511
+ val = 40
1512
+ } else if (editRules && isEnableConf(editConfig)) {
1513
+ // 编辑模式默认最小高度
1456
1514
  val = 144
1457
1515
  }
1458
1516
  } else {
@@ -1564,6 +1622,7 @@ export default defineVxeComponent({
1564
1622
  const newCollectCols = XEUtils.toArrayTree(XEUtils.orderBy(allCols, 'renderSortNumber'), { key: 'id', parentKey: 'parentId', children: 'children' })
1565
1623
  internalData.collectColumn = newCollectCols
1566
1624
  internalData.tableFullColumn = getColumnList(newCollectCols)
1625
+ reactData.updateColFlag++
1567
1626
  }
1568
1627
  reactData.isCustomStatus = true
1569
1628
  } else {
@@ -1714,14 +1773,19 @@ export default defineVxeComponent({
1714
1773
  tableFullColumn.forEach(handleFunc)
1715
1774
  }
1716
1775
 
1717
- if (expandColumn && expandOpts.mode !== 'fixed' && virtualYOpts.enabled) {
1718
- warnLog('vxe.error.notConflictProp', ['column.type="expand', 'virtual-y-config.enabled=false'])
1719
- }
1720
- if ((expandColumn && expandOpts.mode !== 'fixed') && mouseOpts.area) {
1721
- errLog('vxe.error.errConflicts', ['mouse-config.area', 'column.type=expand'])
1722
- }
1723
- if (expandColumn && expandOpts.mode !== 'inside' && (treeConfig && !treeOpts.transform)) {
1724
- errLog('vxe.error.notConflictProp', ['tree-config.transform=false', 'expand-config.mode=fixed'])
1776
+ if (expandColumn) {
1777
+ if (expandOpts.mode !== 'fixed' && virtualYOpts.enabled) {
1778
+ warnLog('vxe.error.notConflictProp', ['column.type="expand', 'virtual-y-config.enabled=false'])
1779
+ }
1780
+ if ((expandOpts.mode !== 'fixed') && mouseOpts.area) {
1781
+ errLog('vxe.error.errConflicts', ['mouse-config.area', 'column.type=expand'])
1782
+ }
1783
+ if (expandOpts.mode !== 'inside' && (treeConfig && !treeOpts.transform)) {
1784
+ errLog('vxe.error.notConflictProp', ['tree-config.transform=false', 'expand-config.mode=fixed'])
1785
+ }
1786
+ if (props.spanMethod) {
1787
+ warnLog('vxe.error.notSupportProp', ['column.type=expand', 'span-method', 'span-method=null'])
1788
+ }
1725
1789
  }
1726
1790
 
1727
1791
  if (htmlColumn) {
@@ -3483,6 +3547,7 @@ export default defineVxeComponent({
3483
3547
  if (rowGroups) {
3484
3548
  const aggregateOpts = computeAggregateOpts.value
3485
3549
  const { rowField, parentField, childrenField, mapChildrenField } = aggregateOpts
3550
+ const rowOpts = computeRowOpts.value
3486
3551
  const checkboxOpts = computeCheckboxOpts.value
3487
3552
  const { checkField } = checkboxOpts
3488
3553
  const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
@@ -3518,10 +3583,10 @@ export default defineVxeComponent({
3518
3583
  childCount: 0,
3519
3584
  [rowField]: getRowUniqueId(),
3520
3585
  [parentField]: null,
3521
- [rowkey]: getRowUniqueId(),
3522
3586
  [childrenField]: childTreeData,
3523
3587
  [mapChildrenField]: childTreeData
3524
3588
  }
3589
+ aggRow[rowkey] = createRowId(rowOpts, aggRow, rowkey)
3525
3590
  if (checkField) {
3526
3591
  aggRow[checkField] = false
3527
3592
  }
@@ -3698,7 +3763,7 @@ export default defineVxeComponent({
3698
3763
  // }
3699
3764
 
3700
3765
  if (!(props.height || props.maxHeight)) {
3701
- errLog('vxe.error.reqProp', ['height | max-height | virtual-y-config={enabled: false}'])
3766
+ errLog('vxe.error.reqSupportProp', ['virtual-y-config.enabled = true', 'height | max-height'])
3702
3767
  }
3703
3768
  // if (!props.showOverflow) {
3704
3769
  // warnLog('vxe.error.reqProp', ['table.show-overflow'])
@@ -3825,8 +3890,9 @@ export default defineVxeComponent({
3825
3890
  const handleUpdateColumn = () => {
3826
3891
  const columnList = XEUtils.orderBy(internalData.collectColumn, 'renderSortNumber')
3827
3892
  internalData.collectColumn = columnList
3828
- const tableFullColumn = getColumnList(columnList)
3829
- internalData.tableFullColumn = tableFullColumn
3893
+ const tFullColumn = getColumnList(columnList)
3894
+ internalData.tableFullColumn = tFullColumn
3895
+ reactData.updateColFlag++
3830
3896
  cacheColumnMap()
3831
3897
  }
3832
3898
 
@@ -4005,8 +4071,9 @@ export default defineVxeComponent({
4005
4071
  const handleInitColumn = (collectColumn: VxeTableDefines.ColumnInfo[]) => {
4006
4072
  const expandOpts = computeExpandOpts.value
4007
4073
  internalData.collectColumn = collectColumn
4008
- const tableFullColumn = getColumnList(collectColumn)
4009
- internalData.tableFullColumn = tableFullColumn
4074
+ const tFullColumn = getColumnList(collectColumn)
4075
+ internalData.tableFullColumn = tFullColumn
4076
+ reactData.updateColFlag++
4010
4077
  reactData.isColLoading = true
4011
4078
  initColumnHierarchy()
4012
4079
  return Promise.resolve(
@@ -4557,7 +4624,7 @@ export default defineVxeComponent({
4557
4624
  const rowid = expandEl.getAttribute('rowid') || ''
4558
4625
  const rowRest = fullAllDataRowIdData[rowid]
4559
4626
  if (rowRest) {
4560
- const expandHeight = expandEl.offsetHeight + 1
4627
+ const expandHeight = expandEl.offsetHeight
4561
4628
  const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`) as HTMLTableCellElement
4562
4629
  let offsetTop = 0
4563
4630
  if (scrollYLoad) {
@@ -5315,7 +5382,8 @@ export default defineVxeComponent({
5315
5382
  */
5316
5383
  isUpdateByRow (rowidOrRow, field) {
5317
5384
  const { keepSource } = props
5318
- const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData
5385
+ const { fullDataRowIdData, sourceDataRowIdData } = internalData
5386
+ const keepFields = computeKeepFields.value
5319
5387
  if (keepSource) {
5320
5388
  const rowid = XEUtils.isString(rowidOrRow) || XEUtils.isNumber(rowidOrRow) ? rowidOrRow : getRowid($xeTable, rowidOrRow)
5321
5389
  const rowRest = fullDataRowIdData[rowid]
@@ -5329,9 +5397,8 @@ export default defineVxeComponent({
5329
5397
  if (arguments.length > 1) {
5330
5398
  return !eqCellValue(oRow, row, field as string)
5331
5399
  }
5332
- for (let index = 0, len = tableFullColumn.length; index < len; index++) {
5333
- const property = tableFullColumn[index].field
5334
- if (property && !eqCellValue(oRow, row, property)) {
5400
+ for (let i = 0; i < keepFields.length; i++) {
5401
+ if (!eqCellValue(oRow, row, keepFields[i])) {
5335
5402
  return true
5336
5403
  }
5337
5404
  }
@@ -7028,8 +7095,8 @@ export default defineVxeComponent({
7028
7095
  XEUtils.each(fullAllDataRowIdData, (rowRest) => {
7029
7096
  rowRest.treeLoaded = false
7030
7097
  })
7098
+ internalData.treeExpandedMaps = {}
7031
7099
  }
7032
- internalData.treeExpandedMaps = {}
7033
7100
  if (transform) {
7034
7101
  handleVirtualTreeToList()
7035
7102
  $xeTable.handleTableData()
@@ -7236,18 +7303,13 @@ export default defineVxeComponent({
7236
7303
  setScrollTop(rightScrollElem, scrollTop)
7237
7304
  loadScrollYData()
7238
7305
  }
7239
- if (reactData.scrollXLoad || reactData.scrollYLoad) {
7240
- return new Promise<void>(resolve => {
7241
- setTimeout(() => {
7242
- nextTick(() => {
7243
- internalData.intoRunScroll = false
7244
- resolve()
7245
- })
7246
- }, 30)
7247
- })
7248
- }
7249
- return nextTick().then(() => {
7250
- internalData.intoRunScroll = false
7306
+ return new Promise<void>(resolve => {
7307
+ setTimeout(() => {
7308
+ nextTick(() => {
7309
+ internalData.intoRunScroll = false
7310
+ resolve()
7311
+ })
7312
+ }, (reactData.scrollXLoad || reactData.scrollYLoad) ? 30 : 0)
7251
7313
  })
7252
7314
  },
7253
7315
  /**
@@ -7897,7 +7959,7 @@ export default defineVxeComponent({
7897
7959
  $xeTable.preventEvent(evnt, 'event.keydown', null, () => {
7898
7960
  const { mouseConfig, keyboardConfig, treeConfig, editConfig, highlightCurrentRow, highlightCurrentColumn } = props
7899
7961
  const { ctxMenuStore, editStore, currentRow } = reactData
7900
- const { afterFullData } = internalData
7962
+ const { afterFullData, visibleColumn } = internalData
7901
7963
  const isContentMenu = computeIsContentMenu.value
7902
7964
  const bodyMenu = computeBodyMenu.value
7903
7965
  const keyboardOpts = computeKeyboardOpts.value
@@ -7907,6 +7969,7 @@ export default defineVxeComponent({
7907
7969
  const menuList = computeMenuList.value
7908
7970
  const rowOpts = computeRowOpts.value
7909
7971
  const columnOpts = computeColumnOpts.value
7972
+ const { isLastEnterAppendRow, beforeEnterMethod, enterMethod, isLastTabAppendRow, beforeTabMethod, tabMethod } = keyboardOpts
7910
7973
  const { selected, actived } = editStore
7911
7974
  const childrenField = treeOpts.children || treeOpts.childrenField
7912
7975
  const keyCode = evnt.keyCode
@@ -7980,7 +8043,6 @@ export default defineVxeComponent({
7980
8043
  internalData._keyCtx = false
7981
8044
  }, 1000)
7982
8045
  } else if (isEnter && !isAltKey && keyboardConfig && keyboardOpts.isEnter && (selected.row || actived.row || (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow))) {
7983
- const { isLastEnterAppendRow, beforeEnterMethod, enterMethod } = keyboardOpts
7984
8046
  // 退出选中
7985
8047
  if (isControlKey) {
7986
8048
  // 如果是激活编辑状态,则取消编辑
@@ -7997,6 +8059,8 @@ export default defineVxeComponent({
7997
8059
  } else {
7998
8060
  // 如果是激活状态,退则出到上一行/下一行
7999
8061
  if (selected.row || actived.row) {
8062
+ const activeRow = selected.row || actived.row
8063
+ const activeColumn = selected.column || actived.column
8000
8064
  const activeParams = selected.row ? selected.args : actived.args
8001
8065
  if (hasShiftKey) {
8002
8066
  if (keyboardOpts.enterToTab) {
@@ -8005,12 +8069,44 @@ export default defineVxeComponent({
8005
8069
  $xeTable.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt)
8006
8070
  }
8007
8071
  } else {
8072
+ const _rowIndex = $xeTable.getVTRowIndex(activeRow)
8073
+ const _columnIndex = $xeTable.getVTColumnIndex(activeColumn)
8008
8074
  if (keyboardOpts.enterToTab) {
8009
- $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt)
8075
+ const ttrParams = {
8076
+ row: activeRow,
8077
+ rowIndex: $xeTable.getRowIndex(activeRow),
8078
+ $rowIndex: $xeTable.getVMRowIndex(activeRow),
8079
+ _rowIndex,
8080
+ column: activeColumn,
8081
+ columnIndex: $xeTable.getColumnIndex(activeColumn),
8082
+ $columnIndex: $xeTable.getVMColumnIndex(activeColumn),
8083
+ _columnIndex,
8084
+ $table: $xeTable
8085
+ }
8086
+ if (!beforeTabMethod || beforeTabMethod(ttrParams) !== false) {
8087
+ evnt.preventDefault()
8088
+ // 最后一行按下Tab键,自动追加一行
8089
+ if (isLastTabAppendRow) {
8090
+ const newColumn = visibleColumn[0]
8091
+ if (_rowIndex >= afterFullData.length - 1 && _columnIndex >= visibleColumn.length - 1) {
8092
+ if (actived.row) {
8093
+ $xeTable.handleClearEdit(evnt)
8094
+ }
8095
+ $xeTable.insertAt({}, -1).then(({ row: newRow }) => {
8096
+ $xeTable.scrollToRow(newRow, newColumn)
8097
+ $xeTable.handleSelected({ ...activeParams, row: newRow, column: newColumn }, evnt)
8098
+ })
8099
+ $xeTable.dispatchEvent('tab-append-row', ttrParams, evnt)
8100
+ return
8101
+ }
8102
+ }
8103
+ if (tabMethod) {
8104
+ tabMethod(ttrParams)
8105
+ } else {
8106
+ $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt)
8107
+ }
8108
+ }
8010
8109
  } else {
8011
- const activeRow = selected.row || actived.row
8012
- const activeColumn = selected.column || actived.column
8013
- const _rowIndex = $xeTable.getVTRowIndex(activeRow)
8014
8110
  const etrParams = {
8015
8111
  row: activeRow,
8016
8112
  rowIndex: $xeTable.getRowIndex(activeRow),
@@ -8019,10 +8115,11 @@ export default defineVxeComponent({
8019
8115
  column: activeColumn,
8020
8116
  columnIndex: $xeTable.getColumnIndex(activeColumn),
8021
8117
  $columnIndex: $xeTable.getVMColumnIndex(activeColumn),
8022
- _columnIndex: $xeTable.getVTColumnIndex(activeColumn),
8118
+ _columnIndex,
8023
8119
  $table: $xeTable
8024
8120
  }
8025
8121
  if (!beforeEnterMethod || beforeEnterMethod(etrParams) !== false) {
8122
+ evnt.preventDefault()
8026
8123
  // 最后一行按下回车键,自动追加一行
8027
8124
  if (isLastEnterAppendRow) {
8028
8125
  if (_rowIndex >= afterFullData.length - 1) {
@@ -8034,9 +8131,13 @@ export default defineVxeComponent({
8034
8131
  return
8035
8132
  }
8036
8133
  }
8037
- $xeTable.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
8038
8134
  if (enterMethod) {
8039
8135
  enterMethod(etrParams)
8136
+ } else {
8137
+ if (actived.row) {
8138
+ $xeTable.handleClearEdit(evnt)
8139
+ }
8140
+ $xeTable.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt)
8040
8141
  }
8041
8142
  }
8042
8143
  }
@@ -8077,10 +8178,49 @@ export default defineVxeComponent({
8077
8178
  }
8078
8179
  } else if (isTab && keyboardConfig && keyboardOpts.isTab) {
8079
8180
  // 如果按下了 Tab 键切换
8080
- if (selected.row || selected.column) {
8081
- $xeTable.moveTabSelected(selected.args, hasShiftKey, evnt)
8082
- } else if (actived.row || actived.column) {
8083
- $xeTable.moveTabSelected(actived.args, hasShiftKey, evnt)
8181
+ if (selected.row || actived.row) {
8182
+ const activeRow = selected.row || actived.row
8183
+ const activeColumn = selected.column || actived.column
8184
+ const activeParams = selected.row ? selected.args : actived.args
8185
+ const _rowIndex = $xeTable.getVTRowIndex(activeRow)
8186
+ const _columnIndex = $xeTable.getVTColumnIndex(activeColumn)
8187
+ const ttrParams = {
8188
+ row: activeRow,
8189
+ rowIndex: $xeTable.getRowIndex(activeRow),
8190
+ $rowIndex: $xeTable.getVMRowIndex(activeRow),
8191
+ _rowIndex,
8192
+ column: activeColumn,
8193
+ columnIndex: $xeTable.getColumnIndex(activeColumn),
8194
+ $columnIndex: $xeTable.getVMColumnIndex(activeColumn),
8195
+ _columnIndex,
8196
+ $table: $xeTable
8197
+ }
8198
+ if (!beforeTabMethod || beforeTabMethod(ttrParams) !== false) {
8199
+ evnt.preventDefault()
8200
+ // 最后一行按下Tab键,自动追加一行
8201
+ if (isLastTabAppendRow) {
8202
+ const newColumn = visibleColumn[0]
8203
+ if (_rowIndex >= afterFullData.length - 1 && _columnIndex >= visibleColumn.length - 1) {
8204
+ if (actived.row) {
8205
+ $xeTable.handleClearEdit(evnt)
8206
+ }
8207
+ $xeTable.insertAt({}, -1).then(({ row: newRow }) => {
8208
+ $xeTable.scrollToRow(newRow, newColumn)
8209
+ $xeTable.handleSelected({ ...activeParams, row: newRow, column: newColumn }, evnt)
8210
+ })
8211
+ $xeTable.dispatchEvent('tab-append-row', ttrParams, evnt)
8212
+ return
8213
+ }
8214
+ }
8215
+ if (tabMethod) {
8216
+ tabMethod(ttrParams)
8217
+ } else {
8218
+ if (actived.row) {
8219
+ $xeTable.handleClearEdit(evnt)
8220
+ }
8221
+ $xeTable.moveTabSelected(activeParams, hasShiftKey, evnt)
8222
+ }
8223
+ }
8084
8224
  }
8085
8225
  } else if (keyboardConfig && keyboardOpts.isDel && hasDeleteKey && isEnableConf(editConfig) && (selected.row || selected.column)) {
8086
8226
  // 如果是删除键
@@ -8619,6 +8759,7 @@ export default defineVxeComponent({
8619
8759
  const expandOpts = computeExpandOpts.value
8620
8760
  const treeOpts = computeTreeOpts.value
8621
8761
  const radioOpts = computeRadioOpts.value
8762
+ const rowOpts = computeRowOpts.value
8622
8763
  const checkboxOpts = computeCheckboxOpts.value
8623
8764
  const childrenField = treeOpts.children || treeOpts.childrenField
8624
8765
  const rowkey = getRowkey($xeTable)
@@ -8652,7 +8793,7 @@ export default defineVxeComponent({
8652
8793
  }
8653
8794
  // 必须有行数据的唯一主键,可以自行设置;也可以默认生成一个随机数
8654
8795
  if (eqEmptyValue(XEUtils.get(record, rowkey))) {
8655
- XEUtils.set(record, rowkey, getRowUniqueId())
8796
+ XEUtils.set(record, rowkey, createRowId(rowOpts, record, rowkey))
8656
8797
  }
8657
8798
  return record
8658
8799
  })
@@ -10456,6 +10597,7 @@ export default defineVxeComponent({
10456
10597
  // 移出源位置
10457
10598
  if (oldRest && newRest) {
10458
10599
  const fullList = XEUtils.toTreeArray(internalData.afterTreeFullData, {
10600
+ updated: false,
10459
10601
  key: rowField,
10460
10602
  parentKey: parentField,
10461
10603
  children: mapChildrenField
@@ -12534,7 +12676,11 @@ export default defineVxeComponent({
12534
12676
  }],
12535
12677
  rowid,
12536
12678
  style: cellStyle
12537
- }, expandColumn.renderData(expandParams))
12679
+ }, [
12680
+ h('div', {
12681
+ class: 'vxe-body--row-expanded-content'
12682
+ }, expandColumn.renderData(expandParams))
12683
+ ])
12538
12684
  )
12539
12685
  })
12540
12686
  }
@@ -12723,6 +12869,8 @@ export default defineVxeComponent({
12723
12869
  const columnDragOpts = computeColumnDragOpts.value
12724
12870
  const scrollbarXToTop = computeScrollbarXToTop.value
12725
12871
  const scrollbarYToLeft = computeScrollbarYToLeft.value
12872
+ const customSimpleMode = computeCustomSimpleMode.value
12873
+ const showCustomSimpleOutside = customSimpleMode === 'outside'
12726
12874
  const { isCrossTableDrag } = rowDragOpts
12727
12875
  const tbOns: {
12728
12876
  onContextmenu: (...args: any[]) => void
@@ -12875,7 +13023,7 @@ export default defineVxeComponent({
12875
13023
  /**
12876
13024
  * 自定义列
12877
13025
  */
12878
- initStore.custom
13026
+ !showCustomSimpleOutside && initStore.custom
12879
13027
  ? h(TableCustomPanelComponent, {
12880
13028
  key: 'cs',
12881
13029
  ref: refTableCustom,
@@ -12921,6 +13069,16 @@ export default defineVxeComponent({
12921
13069
  h('div', {
12922
13070
  ref: refPopupWrapperElem
12923
13071
  }, [
13072
+ /**
13073
+ * 自定义列
13074
+ */
13075
+ showCustomSimpleOutside && initStore.custom
13076
+ ? h(TableCustomPanelComponent, {
13077
+ key: 'cs',
13078
+ ref: refTableCustom,
13079
+ customStore
13080
+ })
13081
+ : renderEmptyElement($xeTable),
12924
13082
  /**
12925
13083
  * 筛选
12926
13084
  */
@@ -13232,6 +13390,22 @@ export default defineVxeComponent({
13232
13390
  }
13233
13391
  })
13234
13392
 
13393
+ const kfFlag = ref(0)
13394
+ watch(() => reactData.updateColFlag, () => {
13395
+ kfFlag.value++
13396
+ })
13397
+ watch(computeKeepFields, () => {
13398
+ kfFlag.value++
13399
+ })
13400
+ watch(kfFlag, () => {
13401
+ const keepFields = computeKeepFields.value
13402
+ const kpfMaps: Record<string, number> = {}
13403
+ keepFields.forEach(field => {
13404
+ kpfMaps[field] = 1
13405
+ })
13406
+ internalData.keepUpdateFieldMaps = kpfMaps
13407
+ })
13408
+
13235
13409
  if ($xeTabs) {
13236
13410
  watch(() => $xeTabs ? $xeTabs.reactData.resizeFlag : null, () => {
13237
13411
  handleGlobalResizeEvent()
@@ -13270,9 +13444,10 @@ export default defineVxeComponent({
13270
13444
  })
13271
13445
 
13272
13446
  onMounted(() => {
13273
- const { exportConfig, importConfig, treeConfig } = props
13447
+ const { exportConfig, importConfig, treeConfig, minHeight } = props
13274
13448
  const { scrollXStore, scrollYStore } = internalData
13275
13449
  const columnOpts = computeColumnOpts.value
13450
+ const columnDragOpts = computeColumnDragOpts.value
13276
13451
  const aggregateOpts = computeAggregateOpts.value
13277
13452
  const virtualYOpts = computeVirtualYOpts.value
13278
13453
  const editOpts = computeEditOpts.value
@@ -13289,6 +13464,7 @@ export default defineVxeComponent({
13289
13464
  // const currentColumnOpts = computeCurrentColumnOpts.value
13290
13465
  // const keyboardOpts = computeKeyboardOpts.value
13291
13466
  const rowDragOpts = computeRowDragOpts.value
13467
+ const areaOpts = computeAreaOpts.value
13292
13468
  const { groupFields } = aggregateOpts
13293
13469
 
13294
13470
  if ($xeGantt) {
@@ -13401,6 +13577,9 @@ export default defineVxeComponent({
13401
13577
  errLog('vxe.error.notProp', ['mouse-config.area'])
13402
13578
  return
13403
13579
  }
13580
+ if (mouseOpts.area && areaOpts.selectCellByHeader && columnOpts.drag && columnDragOpts.trigger === 'cell') {
13581
+ errLog('vxe.error.notSupportProp', ['area-config.selectCellByHeader & column-config.drag', 'column-drag-config.trigger=cell', 'column-drag-config.trigger=default | area-config.selectCellByHeader=false'])
13582
+ }
13404
13583
  }
13405
13584
  if (!$xeTable.handlePivotTableAggregateData) {
13406
13585
  if (customOpts.allowGroup) {
@@ -13454,6 +13633,9 @@ export default defineVxeComponent({
13454
13633
  if (checkboxOpts.halfField) {
13455
13634
  warnLog('vxe.error.delProp', ['checkbox-config.halfField', 'checkbox-config.indeterminateField'])
13456
13635
  }
13636
+ if (props.editConfig && isEnableConf(editOpts) && props.editRules && (minHeight === 0 || minHeight === '0')) {
13637
+ warnLog('vxe.error.reqSupportProp', ['edit-config & edit-rules', 'min-height'])
13638
+ }
13457
13639
 
13458
13640
  if (treeConfig) {
13459
13641
  XEUtils.arrayEach(['rowField', 'parentField', 'childrenField', 'hasChildField', 'mapChildrenField'], key => {
@@ -13587,11 +13769,11 @@ export default defineVxeComponent({
13587
13769
 
13588
13770
  $xeTable.preventEvent(null, 'beforeUnmount', { $table: $xeTable })
13589
13771
  XEUtils.assign(reactData, createReactData())
13772
+ XEUtils.assign(internalData, createInternalData())
13590
13773
  })
13591
13774
 
13592
13775
  onUnmounted(() => {
13593
13776
  $xeTable.preventEvent(null, 'unmounted', { $table: $xeTable })
13594
- XEUtils.assign(internalData, createInternalData())
13595
13777
  })
13596
13778
 
13597
13779
  nextTick(() => {