vxe-pc-ui 4.15.11 → 4.15.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 (260) hide show
  1. package/dist/all.esm.js +1597 -236
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/collapse/src/collapse.js +73 -40
  5. package/es/components.js +6 -0
  6. package/es/date-picker/src/date-picker.js +1 -0
  7. package/es/icon/style.css +1 -1
  8. package/es/image/src/image.js +14 -14
  9. package/es/language/ar-EG.js +4 -0
  10. package/es/language/de-DE.js +4 -0
  11. package/es/language/en-US.js +5 -1
  12. package/es/language/es-ES.js +4 -0
  13. package/es/language/fr-FR.js +4 -0
  14. package/es/language/hu-HU.js +4 -0
  15. package/es/language/hy-AM.js +4 -0
  16. package/es/language/id-ID.js +4 -0
  17. package/es/language/it-IT.js +4 -0
  18. package/es/language/ja-JP.js +4 -0
  19. package/es/language/ko-KR.js +4 -0
  20. package/es/language/ms-MY.js +4 -0
  21. package/es/language/nb-NO.js +4 -0
  22. package/es/language/pt-BR.js +4 -0
  23. package/es/language/ru-RU.js +4 -0
  24. package/es/language/th-TH.js +4 -0
  25. package/es/language/ug-CN.js +4 -0
  26. package/es/language/uk-UA.js +4 -0
  27. package/es/language/uz-UZ.js +4 -0
  28. package/es/language/vi-VN.js +4 -0
  29. package/es/language/zh-CHT.js +4 -0
  30. package/es/language/zh-CN.js +4 -0
  31. package/es/list/src/list.js +1163 -32
  32. package/es/list/src/store.js +8 -0
  33. package/es/list/style.css +328 -0
  34. package/es/list/style.min.css +1 -1
  35. package/es/print/src/util.js +1 -1
  36. package/es/pulldown/src/pulldown.js +4 -4
  37. package/es/style.css +1 -1
  38. package/es/style.min.css +1 -1
  39. package/es/table-transfer/index.js +12 -0
  40. package/es/table-transfer/src/table-transfer.js +65 -0
  41. package/es/table-transfer/style.css +0 -0
  42. package/es/table-transfer/style.min.css +0 -0
  43. package/es/transfer/index.js +12 -0
  44. package/es/transfer/src/transfer.js +91 -0
  45. package/es/transfer/style.css +4 -0
  46. package/es/transfer/style.min.css +1 -0
  47. package/es/tree/src/tree.js +20 -26
  48. package/es/tree/src/util.js +0 -7
  49. package/es/tree-select/src/tree-select.js +8 -7
  50. package/es/ui/index.js +14 -2
  51. package/es/ui/src/log.js +1 -1
  52. package/es/ui/src/utils.js +12 -0
  53. package/es/vxe-list/style.css +328 -0
  54. package/es/vxe-list/style.min.css +1 -1
  55. package/es/vxe-table-transfer/index.js +3 -0
  56. package/es/vxe-table-transfer/style.css +0 -0
  57. package/es/vxe-table-transfer/style.min.css +0 -0
  58. package/es/vxe-transfer/index.js +3 -0
  59. package/es/vxe-transfer/style.css +4 -0
  60. package/es/vxe-transfer/style.min.css +1 -0
  61. package/lib/collapse/src/collapse.js +89 -47
  62. package/lib/collapse/src/collapse.min.js +1 -1
  63. package/lib/components.js +25 -1
  64. package/lib/components.min.js +1 -1
  65. package/lib/date-picker/src/date-picker.js +1 -0
  66. package/lib/date-picker/src/date-picker.min.js +1 -1
  67. package/lib/icon/style/style.css +1 -1
  68. package/lib/icon/style/style.min.css +1 -1
  69. package/lib/image/src/image.js +17 -17
  70. package/lib/image/src/image.min.js +1 -1
  71. package/lib/index.umd.js +1753 -188
  72. package/lib/index.umd.min.js +1 -1
  73. package/lib/language/ar-EG.js +4 -0
  74. package/lib/language/ar-EG.min.js +1 -1
  75. package/lib/language/ar-EG.umd.js +4 -0
  76. package/lib/language/de-DE.js +4 -0
  77. package/lib/language/de-DE.min.js +1 -1
  78. package/lib/language/de-DE.umd.js +4 -0
  79. package/lib/language/en-US.js +5 -1
  80. package/lib/language/en-US.min.js +1 -1
  81. package/lib/language/en-US.umd.js +5 -1
  82. package/lib/language/es-ES.js +4 -0
  83. package/lib/language/es-ES.min.js +1 -1
  84. package/lib/language/es-ES.umd.js +4 -0
  85. package/lib/language/fr-FR.js +4 -0
  86. package/lib/language/fr-FR.min.js +1 -1
  87. package/lib/language/fr-FR.umd.js +4 -0
  88. package/lib/language/hu-HU.js +4 -0
  89. package/lib/language/hu-HU.min.js +1 -1
  90. package/lib/language/hu-HU.umd.js +4 -0
  91. package/lib/language/hy-AM.js +4 -0
  92. package/lib/language/hy-AM.min.js +1 -1
  93. package/lib/language/hy-AM.umd.js +4 -0
  94. package/lib/language/id-ID.js +4 -0
  95. package/lib/language/id-ID.min.js +1 -1
  96. package/lib/language/id-ID.umd.js +4 -0
  97. package/lib/language/it-IT.js +4 -0
  98. package/lib/language/it-IT.min.js +1 -1
  99. package/lib/language/it-IT.umd.js +4 -0
  100. package/lib/language/ja-JP.js +4 -0
  101. package/lib/language/ja-JP.min.js +1 -1
  102. package/lib/language/ja-JP.umd.js +4 -0
  103. package/lib/language/ko-KR.js +4 -0
  104. package/lib/language/ko-KR.min.js +1 -1
  105. package/lib/language/ko-KR.umd.js +4 -0
  106. package/lib/language/ms-MY.js +4 -0
  107. package/lib/language/ms-MY.min.js +1 -1
  108. package/lib/language/ms-MY.umd.js +4 -0
  109. package/lib/language/nb-NO.js +4 -0
  110. package/lib/language/nb-NO.min.js +1 -1
  111. package/lib/language/nb-NO.umd.js +4 -0
  112. package/lib/language/pt-BR.js +4 -0
  113. package/lib/language/pt-BR.min.js +1 -1
  114. package/lib/language/pt-BR.umd.js +4 -0
  115. package/lib/language/ru-RU.js +4 -0
  116. package/lib/language/ru-RU.min.js +1 -1
  117. package/lib/language/ru-RU.umd.js +4 -0
  118. package/lib/language/th-TH.js +4 -0
  119. package/lib/language/th-TH.min.js +1 -1
  120. package/lib/language/th-TH.umd.js +4 -0
  121. package/lib/language/ug-CN.js +4 -0
  122. package/lib/language/ug-CN.min.js +1 -1
  123. package/lib/language/ug-CN.umd.js +4 -0
  124. package/lib/language/uk-UA.js +4 -0
  125. package/lib/language/uk-UA.min.js +1 -1
  126. package/lib/language/uk-UA.umd.js +4 -0
  127. package/lib/language/uz-UZ.js +4 -0
  128. package/lib/language/uz-UZ.min.js +1 -1
  129. package/lib/language/uz-UZ.umd.js +4 -0
  130. package/lib/language/vi-VN.js +4 -0
  131. package/lib/language/vi-VN.min.js +1 -1
  132. package/lib/language/vi-VN.umd.js +4 -0
  133. package/lib/language/zh-CHT.js +4 -0
  134. package/lib/language/zh-CHT.min.js +1 -1
  135. package/lib/language/zh-CHT.umd.js +4 -0
  136. package/lib/language/zh-CN.js +4 -0
  137. package/lib/language/zh-CN.min.js +1 -1
  138. package/lib/language/zh-CN.umd.js +4 -0
  139. package/lib/list/src/list.js +1319 -30
  140. package/lib/list/src/list.min.js +1 -1
  141. package/lib/list/src/store.js +15 -0
  142. package/lib/list/src/store.min.js +1 -0
  143. package/lib/list/style/style.css +328 -0
  144. package/lib/list/style/style.min.css +1 -1
  145. package/lib/print/src/util.js +1 -1
  146. package/lib/print/src/util.min.js +1 -1
  147. package/lib/pulldown/src/pulldown.js +4 -0
  148. package/lib/pulldown/src/pulldown.min.js +1 -1
  149. package/lib/style.css +1 -1
  150. package/lib/style.min.css +1 -1
  151. package/lib/table-transfer/index.js +19 -0
  152. package/lib/table-transfer/index.min.js +1 -0
  153. package/lib/table-transfer/src/table-transfer.js +76 -0
  154. package/lib/table-transfer/src/table-transfer.min.js +1 -0
  155. package/lib/table-transfer/style/index.js +1 -0
  156. package/lib/table-transfer/style/style.css +0 -0
  157. package/lib/table-transfer/style/style.min.css +0 -0
  158. package/lib/transfer/index.js +19 -0
  159. package/lib/transfer/index.min.js +1 -0
  160. package/lib/transfer/src/transfer.js +95 -0
  161. package/lib/transfer/src/transfer.min.js +1 -0
  162. package/lib/transfer/style/index.js +1 -0
  163. package/lib/transfer/style/style.css +4 -0
  164. package/lib/transfer/style/style.min.css +1 -0
  165. package/lib/tree/src/tree.js +18 -24
  166. package/lib/tree/src/tree.min.js +1 -1
  167. package/lib/tree/src/util.js +0 -10
  168. package/lib/tree/src/util.min.js +1 -1
  169. package/lib/tree-select/src/tree-select.js +9 -6
  170. package/lib/tree-select/src/tree-select.min.js +1 -1
  171. package/lib/ui/index.js +14 -2
  172. package/lib/ui/index.min.js +1 -1
  173. package/lib/ui/src/log.js +1 -1
  174. package/lib/ui/src/log.min.js +1 -1
  175. package/lib/ui/src/utils.js +15 -0
  176. package/lib/ui/src/utils.min.js +1 -1
  177. package/lib/vxe-list/style/style.css +328 -0
  178. package/lib/vxe-list/style/style.min.css +1 -1
  179. package/lib/vxe-table-transfer/index.js +21 -0
  180. package/lib/vxe-table-transfer/index.min.js +1 -0
  181. package/lib/vxe-table-transfer/style/index.js +1 -0
  182. package/lib/vxe-table-transfer/style/style.css +0 -0
  183. package/lib/vxe-table-transfer/style/style.min.css +0 -0
  184. package/lib/vxe-transfer/index.js +21 -0
  185. package/lib/vxe-transfer/index.min.js +1 -0
  186. package/lib/vxe-transfer/style/index.js +1 -0
  187. package/lib/vxe-transfer/style/style.css +4 -0
  188. package/lib/vxe-transfer/style/style.min.css +1 -0
  189. package/package.json +1 -1
  190. package/packages/collapse/src/collapse.ts +81 -42
  191. package/packages/components.ts +6 -0
  192. package/packages/date-picker/src/date-picker.ts +1 -0
  193. package/packages/image/src/image.ts +14 -14
  194. package/packages/language/ar-EG.ts +4 -0
  195. package/packages/language/de-DE.ts +4 -0
  196. package/packages/language/en-US.ts +5 -1
  197. package/packages/language/es-ES.ts +4 -0
  198. package/packages/language/fr-FR.ts +4 -0
  199. package/packages/language/hu-HU.ts +4 -0
  200. package/packages/language/hy-AM.ts +4 -0
  201. package/packages/language/id-ID.ts +4 -0
  202. package/packages/language/it-IT.ts +4 -0
  203. package/packages/language/ja-JP.ts +4 -0
  204. package/packages/language/ko-KR.ts +4 -0
  205. package/packages/language/ms-MY.ts +4 -0
  206. package/packages/language/nb-NO.ts +4 -0
  207. package/packages/language/pt-BR.ts +4 -0
  208. package/packages/language/ru-RU.ts +4 -0
  209. package/packages/language/th-TH.ts +4 -0
  210. package/packages/language/ug-CN.ts +4 -0
  211. package/packages/language/uk-UA.ts +4 -0
  212. package/packages/language/uz-UZ.ts +4 -0
  213. package/packages/language/vi-VN.ts +4 -0
  214. package/packages/language/zh-CHT.ts +4 -0
  215. package/packages/language/zh-CN.ts +4 -0
  216. package/packages/list/src/list.ts +1276 -37
  217. package/packages/list/src/store.ts +14 -0
  218. package/packages/print/src/util.ts +1 -2
  219. package/packages/pulldown/src/pulldown.ts +4 -4
  220. package/packages/table-transfer/index.ts +16 -0
  221. package/packages/table-transfer/src/table-transfer.ts +91 -0
  222. package/packages/transfer/index.ts +16 -0
  223. package/packages/transfer/src/transfer.ts +117 -0
  224. package/packages/tree/src/tree.ts +20 -26
  225. package/packages/tree/src/util.ts +0 -10
  226. package/packages/tree-select/src/tree-select.ts +8 -7
  227. package/packages/ui/index.ts +14 -1
  228. package/packages/ui/src/utils.ts +15 -0
  229. package/styles/all.scss +2 -0
  230. package/styles/components/list.scss +245 -0
  231. package/styles/components/table-transfer.scss +0 -0
  232. package/styles/components/transfer.scss +4 -0
  233. package/styles/components/tree.scss +1 -0
  234. package/styles/theme/base.scss +3 -0
  235. package/styles/theme/dark.scss +10 -0
  236. package/styles/theme/light.scss +10 -0
  237. package/styles/variable.scss +11 -1
  238. package/types/all.d.ts +6 -0
  239. package/types/components/collapse.d.ts +4 -2
  240. package/types/components/list.d.ts +349 -17
  241. package/types/components/pulldown.d.ts +1 -0
  242. package/types/components/table-transfer.d.ts +84 -0
  243. package/types/components/table.d.ts +4 -0
  244. package/types/components/transfer.d.ts +84 -0
  245. package/types/components/tree-select.d.ts +4 -0
  246. package/types/components/tree.d.ts +1 -1
  247. package/types/ui/global-config.d.ts +4 -0
  248. package/types/ui/global-icon.d.ts +6 -1
  249. /package/es/icon/{iconfont.1782358507268.ttf → iconfont.1782658269305.ttf} +0 -0
  250. /package/es/icon/{iconfont.1782358507268.woff → iconfont.1782658269305.woff} +0 -0
  251. /package/es/icon/{iconfont.1782358507268.woff2 → iconfont.1782658269305.woff2} +0 -0
  252. /package/es/{iconfont.1782358507268.ttf → iconfont.1782658269305.ttf} +0 -0
  253. /package/es/{iconfont.1782358507268.woff → iconfont.1782658269305.woff} +0 -0
  254. /package/es/{iconfont.1782358507268.woff2 → iconfont.1782658269305.woff2} +0 -0
  255. /package/lib/icon/style/{iconfont.1782358507268.ttf → iconfont.1782658269305.ttf} +0 -0
  256. /package/lib/icon/style/{iconfont.1782358507268.woff → iconfont.1782658269305.woff} +0 -0
  257. /package/lib/icon/style/{iconfont.1782358507268.woff2 → iconfont.1782658269305.woff2} +0 -0
  258. /package/lib/{iconfont.1782358507268.ttf → iconfont.1782658269305.ttf} +0 -0
  259. /package/lib/{iconfont.1782358507268.woff → iconfont.1782658269305.woff} +0 -0
  260. /package/lib/{iconfont.1782358507268.woff2 → iconfont.1782658269305.woff2} +0 -0
@@ -8,24 +8,51 @@ var _vue = require("vue");
8
8
  var _comp = require("../../ui/src/comp");
9
9
  var _xeUtils = _interopRequireDefault(require("xe-utils"));
10
10
  var _ui = require("../../ui");
11
+ var _store = require("./store");
11
12
  var _dom = require("../../ui/src/dom");
13
+ var _utils = require("../../ui/src/utils");
14
+ var _log = require("../../ui/src/log");
15
+ var _anime = require("../../ui/src/anime");
12
16
  var _loading = _interopRequireDefault(require("../../loading/src/loading"));
13
17
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
18
+ const {
19
+ errLog
20
+ } = (0, _log.createComponentLog)('tree');
21
+ function getRowKeyByField(row, keyField) {
22
+ return row ? '' + (row[keyField] || '') : '';
23
+ }
24
+ function getRowIdByField(row, keyField) {
25
+ if (!row) {
26
+ return '';
27
+ }
28
+ const rowKey = getRowKeyByField(row, keyField);
29
+ return (0, _utils.enModelValue)(rowKey);
30
+ }
14
31
  function createReactData() {
15
32
  return {
16
33
  scrollYLoad: false,
17
34
  bodyHeight: 0,
35
+ headHeight: 0,
36
+ footHeight: 0,
18
37
  customHeight: 0,
19
38
  customMaxHeight: 0,
20
39
  parentHeight: 0,
21
40
  topSpaceHeight: 0,
22
- items: []
41
+ rowList: [],
42
+ selectRadioRow: null,
43
+ currRowFlag: 1,
44
+ updateCheckboxFlag: 1,
45
+ isAllChecked: false,
46
+ isAllIndeterminate: false,
47
+ dragRow: null,
48
+ dragTipText: ''
23
49
  };
24
50
  }
25
51
  function createInternalData() {
26
52
  return {
27
53
  resizeObserver: undefined,
28
54
  fullData: [],
55
+ fullKeyMaps: {},
29
56
  lastScrollLeft: 0,
30
57
  lastScrollTop: 0,
31
58
  scrollYStore: {
@@ -34,7 +61,11 @@ function createInternalData() {
34
61
  visibleSize: 0,
35
62
  offsetSize: 0,
36
63
  rowHeight: 0
37
- }
64
+ },
65
+ currentRow: null,
66
+ selectCheckboxMaps: {}
67
+ // prevDragRow: null,
68
+ // prevDragPos: ''
38
69
  };
39
70
  }
40
71
  var _default = exports.default = (0, _comp.defineVxeComponent)({
@@ -54,10 +85,24 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
54
85
  default: () => (0, _ui.getConfig)().list.autoResize
55
86
  },
56
87
  syncResize: [Boolean, String, Number],
88
+ showRadio: {
89
+ type: Boolean,
90
+ default: () => (0, _ui.getConfig)().list.showRadio
91
+ },
92
+ checkRowKey: [String, Number],
93
+ radioConfig: Object,
94
+ showCheckbox: {
95
+ type: Boolean,
96
+ default: () => (0, _ui.getConfig)().list.showCheckbox
97
+ },
98
+ checkRowKeys: Array,
99
+ checkboxConfig: Object,
100
+ rowConfig: Object,
101
+ dragConfig: Object,
57
102
  virtualYConfig: Object,
58
103
  scrollY: Object
59
104
  },
60
- emits: ['scroll'],
105
+ emits: ['update:checkRowKey', 'update:checkRowKeys', 'row-click', 'row-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'checkbox-all', 'scroll', 'row-dragstart', 'row-dragover', 'row-dragend'],
61
106
  setup(props, context) {
62
107
  const {
63
108
  slots,
@@ -70,9 +115,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
70
115
  } = (0, _ui.useSize)(props);
71
116
  const reactData = (0, _vue.reactive)(createReactData());
72
117
  const internalData = createInternalData();
118
+ const crossListDragRowInfo = (0, _store.getCrossListDragRowInfo)();
73
119
  const refElem = (0, _vue.ref)();
120
+ const refHeaderElem = (0, _vue.ref)();
121
+ const refFooterElem = (0, _vue.ref)();
74
122
  const refVirtualWrapper = (0, _vue.ref)();
75
123
  const refVirtualBody = (0, _vue.ref)();
124
+ const refDragRowLineElem = (0, _vue.ref)();
125
+ const refDragTipElem = (0, _vue.ref)();
76
126
  const refMaps = {
77
127
  refElem
78
128
  };
@@ -84,24 +134,71 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
84
134
  internalData,
85
135
  getRefMaps: () => refMaps
86
136
  };
137
+ const computeRowOpts = (0, _vue.computed)(() => {
138
+ return Object.assign({}, (0, _ui.getConfig)().list.rowConfig, props.rowConfig);
139
+ });
140
+ const computeDragOpts = (0, _vue.computed)(() => {
141
+ return Object.assign({}, (0, _ui.getConfig)().list.dragConfig, props.dragConfig);
142
+ });
87
143
  const computeSYOpts = (0, _vue.computed)(() => {
88
144
  return Object.assign({}, (0, _ui.getConfig)().list.virtualYConfig || (0, _ui.getConfig)().list.scrollY, props.virtualYConfig || props.scrollY);
89
145
  });
90
- const computeStyles = (0, _vue.computed)(() => {
146
+ const computeKeyField = (0, _vue.computed)(() => {
147
+ const rowOpts = computeRowOpts.value;
148
+ const {
149
+ keyField
150
+ } = rowOpts;
151
+ return keyField || '';
152
+ });
153
+ const computeIsDrag = (0, _vue.computed)(() => {
154
+ const {
155
+ dragConfig
156
+ } = props;
157
+ const dragOpts = computeDragOpts.value;
158
+ return dragConfig && (0, _utils.isEnableConf)(dragOpts);
159
+ });
160
+ const computeRowHeight = (0, _vue.computed)(() => {
161
+ const rowOpts = computeRowOpts.value;
162
+ const {
163
+ height
164
+ } = rowOpts;
165
+ return height;
166
+ });
167
+ const computeRadioOpts = (0, _vue.computed)(() => {
168
+ return Object.assign({
169
+ showIcon: true
170
+ }, (0, _ui.getConfig)().list.radioConfig, props.radioConfig);
171
+ });
172
+ const computeCheckboxOpts = (0, _vue.computed)(() => {
173
+ return Object.assign({
174
+ showIcon: true
175
+ }, (0, _ui.getConfig)().list.checkboxConfig, props.checkboxConfig);
176
+ });
177
+ const computeWrapperStyles = (0, _vue.computed)(() => {
178
+ const rowHeight = computeRowHeight.value;
179
+ const style = {};
180
+ if (rowHeight) {
181
+ style['--vxe-ui-list-row-height'] = (0, _dom.toCssUnit)(rowHeight);
182
+ }
183
+ return style;
184
+ });
185
+ const computeVirtualStyles = (0, _vue.computed)(() => {
91
186
  const {
92
187
  height,
93
188
  maxHeight
94
189
  } = props;
95
190
  const {
96
191
  customHeight,
97
- customMaxHeight
192
+ customMaxHeight,
193
+ headHeight,
194
+ footHeight
98
195
  } = reactData;
99
196
  const style = {};
100
197
  if (height) {
101
- style.height = `${customHeight}px`;
198
+ style.height = (0, _dom.toCssUnit)(Math.max(20, customHeight - headHeight - footHeight));
102
199
  } else if (maxHeight) {
103
200
  style.height = 'auto';
104
- style.maxHeight = `${customMaxHeight}px`;
201
+ style.maxHeight = (0, _dom.toCssUnit)(Math.max(20, customMaxHeight - headHeight - footHeight));
105
202
  }
106
203
  return style;
107
204
  });
@@ -110,6 +207,16 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
110
207
  $list: $xeList
111
208
  }, params));
112
209
  };
210
+ const emitCheckboxMode = value => {
211
+ emit('update:checkRowKeys', value);
212
+ };
213
+ const emitRadioMode = value => {
214
+ emit('update:checkRowKey', value);
215
+ };
216
+ const getRowId = row => {
217
+ const keyField = computeKeyField.value;
218
+ return getRowIdByField(row, keyField);
219
+ };
113
220
  const calcTableHeight = key => {
114
221
  const {
115
222
  parentHeight
@@ -131,6 +238,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
131
238
  return num;
132
239
  };
133
240
  const updateHeight = () => {
241
+ const headEl = refHeaderElem.value;
242
+ const footEl = refFooterElem.value;
243
+ reactData.headHeight = headEl ? Math.floor(headEl.offsetHeight) : 0;
244
+ reactData.footHeight = footEl ? Math.floor(footEl.offsetHeight) : 0;
134
245
  reactData.customHeight = calcTableHeight('height');
135
246
  reactData.customMaxHeight = calcTableHeight('maxHeight');
136
247
  };
@@ -153,7 +264,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
153
264
  fullData,
154
265
  scrollYStore
155
266
  } = internalData;
156
- reactData.items = scrollYLoad ? fullData.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullData.slice(0);
267
+ reactData.rowList = scrollYLoad ? fullData.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullData.slice(0);
157
268
  return (0, _vue.nextTick)();
158
269
  };
159
270
  const updateYData = () => {
@@ -171,17 +282,17 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
171
282
  const virtualBodyElem = refVirtualBody.value;
172
283
  const sYOpts = computeSYOpts.value;
173
284
  let rowHeight = 0;
174
- let firstItemElem;
285
+ let firstRowElem;
175
286
  if (virtualBodyElem) {
176
287
  if (sYOpts.sItem) {
177
- firstItemElem = virtualBodyElem.querySelector(sYOpts.sItem);
288
+ firstRowElem = virtualBodyElem.querySelector(sYOpts.sItem);
178
289
  }
179
- if (!firstItemElem) {
180
- firstItemElem = virtualBodyElem.children[0];
290
+ if (!firstRowElem) {
291
+ firstRowElem = virtualBodyElem.children[0];
181
292
  }
182
293
  }
183
- if (firstItemElem) {
184
- rowHeight = firstItemElem.offsetHeight;
294
+ if (firstRowElem) {
295
+ rowHeight = firstRowElem.offsetHeight;
185
296
  }
186
297
  rowHeight = Math.max(12, rowHeight);
187
298
  scrollYStore.rowHeight = rowHeight;
@@ -310,6 +421,53 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
310
421
  isY
311
422
  }, evnt);
312
423
  };
424
+ const updateRadioModeValue = () => {
425
+ const {
426
+ checkRowKey
427
+ } = props;
428
+ const {
429
+ fullKeyMaps
430
+ } = internalData;
431
+ if (checkRowKey) {
432
+ const row = fullKeyMaps[checkRowKey];
433
+ reactData.selectRadioRow = row || null;
434
+ } else {
435
+ reactData.selectRadioRow = null;
436
+ }
437
+ };
438
+ const updateCheckboxModeValue = () => {
439
+ const {
440
+ checkRowKeys
441
+ } = props;
442
+ const {
443
+ fullKeyMaps
444
+ } = internalData;
445
+ const keyField = computeKeyField.value;
446
+ const selectMaps = {};
447
+ if (checkRowKeys && checkRowKeys.length) {
448
+ for (const rowKey of checkRowKeys) {
449
+ const row = fullKeyMaps[rowKey];
450
+ if (row) {
451
+ const rowid = getRowIdByField(row, keyField);
452
+ selectMaps[rowid] = row;
453
+ }
454
+ }
455
+ }
456
+ internalData.selectCheckboxMaps = selectMaps;
457
+ updateCheckboxStatus();
458
+ };
459
+ const cacheRowMap = () => {
460
+ const {
461
+ fullData
462
+ } = internalData;
463
+ const keyField = computeKeyField.value;
464
+ const keyMaps = {};
465
+ fullData.forEach(row => {
466
+ const rowKey = getRowKeyByField(row, keyField);
467
+ keyMaps[rowKey] = row;
468
+ });
469
+ internalData.fullKeyMaps = keyMaps;
470
+ };
313
471
  /**
314
472
  * 加载数据
315
473
  * @param {Array} datas 数据
@@ -328,11 +486,790 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
328
486
  internalData.fullData = fullData;
329
487
  // 如果gt为0,则总是启用
330
488
  reactData.scrollYLoad = !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt <= fullData.length);
489
+ cacheRowMap();
331
490
  handleData();
491
+ updateRadioModeValue();
492
+ updateCheckboxModeValue();
332
493
  return computeScrollLoad().then(() => {
333
494
  refreshScroll();
334
495
  });
335
496
  };
497
+ const clearRowDropOrigin = () => {
498
+ const el = refElem.value;
499
+ if (el) {
500
+ const clss = 'row--drag-origin';
501
+ _xeUtils.default.arrayEach(el.querySelectorAll(`.${clss}`), elem => {
502
+ elem.draggable = false;
503
+ (0, _dom.removeClass)(elem, clss);
504
+ });
505
+ }
506
+ };
507
+ const updateRowDropOrigin = row => {
508
+ const sYOpts = computeSYOpts.value;
509
+ const {
510
+ sItem
511
+ } = sYOpts;
512
+ const el = refElem.value;
513
+ if (el) {
514
+ const clss = 'row--drag-origin';
515
+ const rowid = getRowId(row);
516
+ _xeUtils.default.arrayEach(el.querySelectorAll(`.vxe-list--row[rowid="${rowid}"]` + (sItem ? `${sItem}[rowid="${rowid}"]` : '')), elem => {
517
+ (0, _dom.addClass)(elem, clss);
518
+ });
519
+ }
520
+ };
521
+ const updateRowDropTipContent = rowEl => {
522
+ const {
523
+ dragRow
524
+ } = reactData;
525
+ const dragOpts = computeDragOpts.value;
526
+ const {
527
+ tooltipMethod
528
+ } = dragOpts;
529
+ const rTooltipMethod = tooltipMethod;
530
+ let tipContent = '';
531
+ if (rTooltipMethod) {
532
+ const rtParams = {
533
+ $list: $xeList,
534
+ row: dragRow
535
+ };
536
+ tipContent = `${rTooltipMethod(rtParams) || ''}`;
537
+ } else {
538
+ tipContent = (0, _ui.getI18n)('vxe.list.dragTip', [rowEl.textContent || '']);
539
+ }
540
+ reactData.dragTipText = tipContent;
541
+ };
542
+ const hideDropTip = () => {
543
+ const rdTipEl = refDragTipElem.value;
544
+ const rdLineEl = refDragRowLineElem.value;
545
+ if (rdTipEl) {
546
+ rdTipEl.style.display = '';
547
+ }
548
+ if (rdLineEl) {
549
+ rdLineEl.style.display = '';
550
+ }
551
+ };
552
+ const clearCrossListDragStatus = () => {
553
+ // crossListDragRowObj = null
554
+ crossListDragRowInfo.row = null;
555
+ };
556
+ const clearDragStatus = () => {
557
+ const {
558
+ dragRow
559
+ } = reactData;
560
+ if (dragRow) {
561
+ hideDropTip();
562
+ clearRowDropOrigin();
563
+ clearCrossListDragStatus();
564
+ reactData.dragRow = null;
565
+ }
566
+ };
567
+ const handleRowDragMousedownEvent = (evnt, params) => {
568
+ evnt.stopPropagation();
569
+ const {
570
+ row
571
+ } = params;
572
+ const dragConfig = computeDragOpts.value;
573
+ const {
574
+ trigger,
575
+ dragStartMethod
576
+ } = dragConfig;
577
+ const dragEl = evnt.currentTarget;
578
+ const rowEl = trigger === 'row' ? dragEl : dragEl.parentElement.parentElement;
579
+ clearRowDropOrigin();
580
+ if (dragStartMethod && !dragStartMethod(params)) {
581
+ rowEl.draggable = false;
582
+ reactData.dragRow = null;
583
+ hideDropTip();
584
+ return;
585
+ }
586
+ const dragstartEventParams = {
587
+ row
588
+ };
589
+ reactData.dragRow = row;
590
+ rowEl.draggable = true;
591
+ updateRowDropOrigin(row);
592
+ updateRowDropTipContent(rowEl);
593
+ dispatchEvent('row-dragstart', dragstartEventParams, evnt);
594
+ };
595
+ const handleRowDragMouseupEvent = () => {
596
+ clearDragStatus();
597
+ };
598
+ const showDropTip = (evnt, rowEl, showLine, dragPos) => {
599
+ const wrapperEl = refElem.value;
600
+ if (!wrapperEl) {
601
+ return;
602
+ }
603
+ const wrapperRect = wrapperEl.getBoundingClientRect();
604
+ const wrapperHeight = wrapperEl.clientHeight;
605
+ if (rowEl) {
606
+ const rdLineEl = refDragRowLineElem.value;
607
+ if (rdLineEl) {
608
+ if (showLine) {
609
+ const trRect = rowEl.getBoundingClientRect();
610
+ let rowHeight = rowEl.clientHeight;
611
+ const offsetTop = Math.max(1, trRect.y - wrapperRect.y);
612
+ if (offsetTop + rowHeight > wrapperHeight) {
613
+ rowHeight = wrapperHeight - offsetTop;
614
+ }
615
+ rdLineEl.style.display = 'block';
616
+ rdLineEl.style.top = `${offsetTop}px`;
617
+ rdLineEl.style.height = `${rowHeight}px`;
618
+ rdLineEl.setAttribute('drag-pos', dragPos);
619
+ } else {
620
+ rdLineEl.style.display = '';
621
+ }
622
+ }
623
+ }
624
+ const rdTipEl = refDragTipElem.value;
625
+ if (rdTipEl) {
626
+ rdTipEl.style.display = 'block';
627
+ rdTipEl.style.top = `${Math.min(wrapperEl.clientHeight - wrapperEl.scrollTop - rdTipEl.clientHeight, evnt.clientY - wrapperRect.y)}px`;
628
+ rdTipEl.style.left = `${Math.min(wrapperEl.clientWidth - wrapperEl.scrollLeft - rdTipEl.clientWidth - 1, evnt.clientX - wrapperRect.x)}px`;
629
+ rdTipEl.setAttribute('drag-status', showLine ? 'normal' : 'disabled');
630
+ }
631
+ };
632
+ const clearRowDragData = () => {
633
+ const wrapperEl = refElem.value;
634
+ const dtClss = ['.vxe-list--row'];
635
+ hideDropTip();
636
+ clearRowDropOrigin();
637
+ (0, _anime.clearRowAnimate)(wrapperEl, dtClss);
638
+ reactData.dragRow = null;
639
+ };
640
+ const handleRowDragSwapEvent = (evnt, dragRow, prevDragRow, prevDragPos) => {
641
+ const {
642
+ fullData
643
+ } = internalData;
644
+ const dragConfig = computeDragOpts.value;
645
+ const {
646
+ animation,
647
+ dragEndMethod
648
+ } = dragConfig;
649
+ const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
650
+ const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
651
+ const el = refElem.value;
652
+ const errRest = {
653
+ status: false
654
+ };
655
+ if (!(el && prevDragRow && dragRow)) {
656
+ return Promise.resolve(errRest);
657
+ }
658
+ // 判断是否有拖动
659
+ if (prevDragRow !== dragRow) {
660
+ const dragParams = {
661
+ oldRow: dragRow,
662
+ newRow: prevDragRow,
663
+ dragRow,
664
+ dragPos: prevDragPos,
665
+ offsetIndex: dragOffsetIndex
666
+ };
667
+ const dragRowid = getRowId(dragRow);
668
+ const _dragRowIndex = findRowIndexOfByKey(fullData, dragRowid);
669
+ const newRowid = getRowKey(prevDragRow);
670
+ let dragRowHeight = 0;
671
+ let dragOffsetTop = -1;
672
+ if (animation) {
673
+ const prevRowEl = el.querySelector(`.vxe-list--row[rowid="${newRowid}"]`);
674
+ const oldRowEl = el.querySelector(`.vxe-list--row[rowid="${dragRowid}"]`);
675
+ const targetRowEl = prevRowEl || oldRowEl;
676
+ if (targetRowEl) {
677
+ dragRowHeight = targetRowEl.offsetHeight;
678
+ }
679
+ if (oldRowEl) {
680
+ dragOffsetTop = oldRowEl.offsetTop;
681
+ }
682
+ }
683
+ let oafIndex = -1;
684
+ let nafIndex = -1;
685
+ return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then(status => {
686
+ if (!status) {
687
+ return errRest;
688
+ }
689
+ // 移出
690
+ oafIndex = findRowIndexOf(fullData, dragRow);
691
+ fullData.splice(oafIndex, 1);
692
+ // 插入
693
+ const pafIndex = findRowIndexOf(fullData, prevDragRow);
694
+ nafIndex = pafIndex + dragOffsetIndex;
695
+ fullData.splice(nafIndex, 0, dragRow);
696
+ handleData();
697
+ if (reactData.scrollYLoad) {
698
+ updateYSpace();
699
+ }
700
+ if (evnt) {
701
+ const dragendEventParams = {
702
+ oldRow: dragRow,
703
+ newRow: prevDragRow,
704
+ dragRow,
705
+ dragPos: prevDragPos,
706
+ offsetIndex: dragOffsetIndex,
707
+ _index: {
708
+ newIndex: nafIndex,
709
+ oldIndex: oafIndex
710
+ }
711
+ };
712
+ dispatchEvent('row-dragend', dragendEventParams, evnt);
713
+ }
714
+ return (0, _vue.nextTick)().then(() => {
715
+ if (animation) {
716
+ const {
717
+ rowList
718
+ } = reactData;
719
+ const {
720
+ fullData
721
+ } = internalData;
722
+ const _newRowIndex = findRowIndexOfByKey(fullData, dragRowid);
723
+ const firstRow = fullData[0];
724
+ const _firstRowIndex = findRowIndexOf(fullData, firstRow);
725
+ const wrapperEl = el;
726
+ if (_firstRowIndex > -1) {
727
+ const _lastRowIndex = _firstRowIndex + fullData.length;
728
+ let rsIndex = -1;
729
+ let reIndex = -1;
730
+ let offsetRate = 1;
731
+ if (_dragRowIndex < _firstRowIndex) {
732
+ // 从上往下虚拟拖拽
733
+ rsIndex = 0;
734
+ reIndex = _newRowIndex - _firstRowIndex;
735
+ } else if (_dragRowIndex > _lastRowIndex) {
736
+ // 从下往上虚拟拖拽
737
+ const $newRowIndex = findRowIndexOfByKey(rowList, dragRowid);
738
+ rsIndex = $newRowIndex + 1;
739
+ reIndex = fullData.length;
740
+ offsetRate = -1;
741
+ } else {
742
+ if (_newRowIndex > _dragRowIndex) {
743
+ // 从上往下拖拽
744
+ rsIndex = _dragRowIndex - _firstRowIndex;
745
+ reIndex = rsIndex + _newRowIndex - _dragRowIndex;
746
+ } else {
747
+ // 从下往上拖拽
748
+ rsIndex = _newRowIndex - _firstRowIndex;
749
+ reIndex = rsIndex + _dragRowIndex - _newRowIndex + 1;
750
+ offsetRate = -1;
751
+ }
752
+ }
753
+ const dragRangeList = fullData.slice(rsIndex, reIndex);
754
+ if (dragRangeList.length) {
755
+ const dtClss = [];
756
+ dragRangeList.forEach(obj => {
757
+ const rowid = getRowId(obj);
758
+ dtClss.push(`.vxe-list--row[rowid="${rowid}"]`);
759
+ });
760
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
761
+ (0, _anime.moveRowAnimateToTb)(dtTrList, offsetRate * dragRowHeight);
762
+ }
763
+ }
764
+ const drClss = [`.vxe-list--row[rowid="${dragRowid}"]`];
765
+ const newDtTrList = wrapperEl.querySelectorAll(drClss.join(','));
766
+ const newTrEl = newDtTrList[0];
767
+ if (dragOffsetTop > -1 && newTrEl) {
768
+ (0, _anime.moveRowAnimateToTb)(newDtTrList, dragOffsetTop - newTrEl.offsetTop);
769
+ }
770
+ }
771
+ recalculate();
772
+ }).then(() => {
773
+ return {
774
+ status: true
775
+ };
776
+ });
777
+ }).catch(() => {
778
+ return errRest;
779
+ }).then(rest => {
780
+ clearRowDragData();
781
+ clearCrossListDragStatus();
782
+ return rest;
783
+ });
784
+ }
785
+ clearRowDragData();
786
+ clearCrossListDragStatus();
787
+ return Promise.resolve(errRest);
788
+ };
789
+ const handleRowDragDragstartEvent = evnt => {
790
+ if (evnt.dataTransfer) {
791
+ evnt.dataTransfer.setDragImage((0, _dom.getTpImg)(), 0, 0);
792
+ }
793
+ };
794
+ const handleRowDragDragendEvent = evnt => {
795
+ const {
796
+ dragRow
797
+ } = reactData;
798
+ const {
799
+ prevDragRow,
800
+ prevDragPos
801
+ } = internalData;
802
+ handleRowDragSwapEvent(evnt, dragRow, prevDragRow, prevDragPos);
803
+ };
804
+ const handleRowDragDragoverEvent = evnt => {
805
+ const {
806
+ dragRow
807
+ } = reactData;
808
+ const {
809
+ fullData
810
+ } = internalData;
811
+ if (!dragRow) {
812
+ evnt.preventDefault();
813
+ }
814
+ const rowEl = evnt.currentTarget;
815
+ const rowid = rowEl.getAttribute('rowid') || '';
816
+ const row = findRowByKey(fullData, rowid);
817
+ if (row) {
818
+ evnt.preventDefault();
819
+ const offsetY = evnt.clientY - rowEl.getBoundingClientRect().y;
820
+ const dragPos = offsetY < rowEl.clientHeight / 2 ? 'top' : 'bottom';
821
+ internalData.prevDragRow = row;
822
+ internalData.prevDragPos = dragPos;
823
+ if (dragRow && getRowId(dragRow) === rowid) {
824
+ showDropTip(evnt, rowEl, false, dragPos);
825
+ return;
826
+ }
827
+ const dragOffsetIndex = dragPos === 'bottom' ? 1 : 0;
828
+ const offsetIndex = dragOffsetIndex;
829
+ const dragoverEventParams = {
830
+ oldRow: dragRow,
831
+ targetRow: row,
832
+ dragPos,
833
+ dragRow,
834
+ offsetIndex
835
+ };
836
+ showDropTip(evnt, rowEl, true, dragPos);
837
+ dispatchEvent('row-dragover', dragoverEventParams, evnt);
838
+ }
839
+ };
840
+ const handleRowMousedownEvent = (evnt, row) => {
841
+ const dragConfig = computeDragOpts.value;
842
+ const isDrag = computeIsDrag.value;
843
+ const {
844
+ trigger,
845
+ disabledMethod
846
+ } = dragConfig;
847
+ let isRowDrag = false;
848
+ if (isDrag) {
849
+ isRowDrag = trigger === 'row';
850
+ }
851
+ const params = {
852
+ row,
853
+ $list: $xeList
854
+ };
855
+ if (isRowDrag && !(disabledMethod && disabledMethod(params))) {
856
+ handleRowDragMousedownEvent(evnt, params);
857
+ }
858
+ };
859
+ const handleRowClickEvent = (evnt, row) => {
860
+ const {
861
+ currentRow
862
+ } = internalData;
863
+ const rowOpts = computeRowOpts.value;
864
+ const {
865
+ isCurrent
866
+ } = rowOpts;
867
+ let triggerCurrent = false;
868
+ if (isCurrent) {
869
+ triggerCurrent = true;
870
+ changeCurrentEvent(evnt, row);
871
+ } else if (currentRow) {
872
+ internalData.currentRow = null;
873
+ reactData.currRowFlag++;
874
+ }
875
+ dispatchEvent('row-click', {
876
+ row,
877
+ triggerCurrent
878
+ }, evnt);
879
+ };
880
+ const handleRowDblclickEvent = (evnt, row) => {
881
+ dispatchEvent('row-dblclick', {
882
+ row
883
+ }, evnt);
884
+ };
885
+ const getRowKey = row => {
886
+ const keyField = computeKeyField.value;
887
+ return getRowKeyByField(row, keyField);
888
+ };
889
+ const eqRowKey = (rowKey1, rowKey2) => {
890
+ return '' + rowKey1 === '' + rowKey2;
891
+ };
892
+ const eqRow = (row1, row2) => {
893
+ if (row1 && row2) {
894
+ if (row1 === row2) {
895
+ return true;
896
+ }
897
+ return eqRowKey(getRowId(row1), getRowId(row2));
898
+ }
899
+ return false;
900
+ };
901
+ const eqRowByKey = (row, rowKey) => {
902
+ return row && eqRowKey(getRowKey(row), rowKey);
903
+ };
904
+ const findRow = (list, row) => {
905
+ return row ? _xeUtils.default.find(list, obj => eqRow(obj, row)) : null;
906
+ };
907
+ const findRowByKey = (list, rowKey) => {
908
+ const keyField = computeKeyField.value;
909
+ return _xeUtils.default.find(list, obj => eqRowKey(getRowIdByField(obj, keyField), rowKey));
910
+ };
911
+ const findRowIndexOf = (list, row) => {
912
+ return row ? _xeUtils.default.findIndexOf(list, obj => eqRow(obj, row)) : -1;
913
+ };
914
+ const findRowIndexOfByKey = (list, rowKey) => {
915
+ const keyField = computeKeyField.value;
916
+ return _xeUtils.default.findIndexOf(list, obj => eqRowKey(getRowIdByField(obj, keyField), rowKey));
917
+ };
918
+ const isCheckedByRadioRowKey = rowKey => {
919
+ const {
920
+ selectRadioRow
921
+ } = reactData;
922
+ return getRowKey(selectRadioRow) === rowKey;
923
+ };
924
+ const isCheckedByRadioRow = row => {
925
+ return isCheckedByRadioRowKey(getRowKey(row));
926
+ };
927
+ const isCheckedByCheckboxRowKey = rowid => {
928
+ const {
929
+ updateCheckboxFlag
930
+ } = reactData;
931
+ const {
932
+ selectCheckboxMaps
933
+ } = internalData;
934
+ return !!(updateCheckboxFlag && selectCheckboxMaps[rowid]);
935
+ };
936
+ const isCheckedByCheckboxRow = row => {
937
+ return isCheckedByCheckboxRowKey(getRowKey(row));
938
+ };
939
+ const setCurrentRow = row => {
940
+ internalData.currentRow = row;
941
+ reactData.currRowFlag++;
942
+ return (0, _vue.nextTick)();
943
+ };
944
+ const setCurrentRowByKey = rowKey => {
945
+ const {
946
+ fullData
947
+ } = internalData;
948
+ internalData.currentRow = findRowByKey(fullData, rowKey);
949
+ reactData.currRowFlag++;
950
+ return (0, _vue.nextTick)();
951
+ };
952
+ const getCurrentRow = () => {
953
+ const {
954
+ currentRow
955
+ } = internalData;
956
+ return currentRow;
957
+ };
958
+ const getCurrentRowKey = () => {
959
+ const {
960
+ currentRow
961
+ } = internalData;
962
+ return currentRow ? getRowKey(currentRow) : null;
963
+ };
964
+ const clearCurrentRow = () => {
965
+ internalData.currentRow = null;
966
+ reactData.currRowFlag++;
967
+ return (0, _vue.nextTick)();
968
+ };
969
+ const setRadioRow = row => {
970
+ reactData.selectRadioRow = row;
971
+ const value = getRowKey(row);
972
+ emitRadioMode(value);
973
+ return (0, _vue.nextTick)();
974
+ };
975
+ const setRadioRowByKey = rowKey => {
976
+ const {
977
+ fullData
978
+ } = internalData;
979
+ reactData.selectRadioRow = findRowByKey(fullData, rowKey);
980
+ const value = rowKey;
981
+ emitRadioMode(value);
982
+ return (0, _vue.nextTick)();
983
+ };
984
+ const getRadioRow = () => {
985
+ const {
986
+ selectRadioRow
987
+ } = reactData;
988
+ return selectRadioRow;
989
+ };
990
+ const getRadioRowKey = () => {
991
+ const {
992
+ selectRadioRow
993
+ } = reactData;
994
+ return selectRadioRow ? getRowKey(selectRadioRow) : null;
995
+ };
996
+ const clearRadioRow = () => {
997
+ const value = null;
998
+ reactData.selectRadioRow = value;
999
+ emitRadioMode(value);
1000
+ return (0, _vue.nextTick)();
1001
+ };
1002
+ const setCheckboxRow = (row, checked) => {
1003
+ const {
1004
+ selectCheckboxMaps
1005
+ } = internalData;
1006
+ const keyField = computeKeyField.value;
1007
+ const rowList = row ? _xeUtils.default.isArray(row) ? row : [row] : [];
1008
+ rowList.forEach(checked ? obj => {
1009
+ const rowid = getRowIdByField(obj, keyField);
1010
+ if (!selectCheckboxMaps[rowid]) {
1011
+ selectCheckboxMaps[rowid] = obj;
1012
+ }
1013
+ } : obj => {
1014
+ const rowid = getRowIdByField(obj, keyField);
1015
+ if (selectCheckboxMaps[rowid]) {
1016
+ delete selectCheckboxMaps[rowid];
1017
+ }
1018
+ });
1019
+ const value = getCheckboxRowKeys();
1020
+ emitCheckboxMode(value);
1021
+ return updateCheckboxStatus();
1022
+ };
1023
+ const setCheckboxRowByKey = (rowKey, checked) => {
1024
+ const {
1025
+ selectCheckboxMaps,
1026
+ fullKeyMaps
1027
+ } = internalData;
1028
+ const keyField = computeKeyField.value;
1029
+ const rowKeys = rowKey ? _xeUtils.default.isArray(rowKey) ? rowKey : [rowKey] : [];
1030
+ rowKeys.forEach(checked ? key => {
1031
+ const row = fullKeyMaps[key || ''];
1032
+ if (row) {
1033
+ const rowid = getRowIdByField(row, keyField);
1034
+ if (row && !selectCheckboxMaps[rowid]) {
1035
+ selectCheckboxMaps[rowid] = row;
1036
+ }
1037
+ }
1038
+ } : key => {
1039
+ const row = fullKeyMaps[key || ''];
1040
+ if (row) {
1041
+ const rowid = getRowIdByField(row, keyField);
1042
+ if (selectCheckboxMaps[rowid]) {
1043
+ delete selectCheckboxMaps[rowid];
1044
+ }
1045
+ }
1046
+ });
1047
+ const value = getCheckboxRowKeys();
1048
+ emitCheckboxMode(value);
1049
+ return updateCheckboxStatus();
1050
+ };
1051
+ const getCheckboxRows = () => {
1052
+ const {
1053
+ updateCheckboxFlag
1054
+ } = reactData;
1055
+ const {
1056
+ selectCheckboxMaps
1057
+ } = internalData;
1058
+ const rowList = [];
1059
+ if (updateCheckboxFlag) {
1060
+ _xeUtils.default.each(selectCheckboxMaps, row => {
1061
+ if (row) {
1062
+ rowList.push(row);
1063
+ }
1064
+ });
1065
+ }
1066
+ return rowList;
1067
+ };
1068
+ const getCheckboxRowKeys = () => {
1069
+ const {
1070
+ updateCheckboxFlag
1071
+ } = reactData;
1072
+ const {
1073
+ selectCheckboxMaps
1074
+ } = internalData;
1075
+ const keyField = computeKeyField.value;
1076
+ const rowKeys = [];
1077
+ if (updateCheckboxFlag) {
1078
+ _xeUtils.default.each(selectCheckboxMaps, row => {
1079
+ if (row) {
1080
+ const rowKey = getRowKeyByField(row, keyField);
1081
+ rowKeys.push(rowKey);
1082
+ }
1083
+ });
1084
+ }
1085
+ return rowKeys;
1086
+ };
1087
+ const clearCheckboxRow = () => {
1088
+ internalData.selectCheckboxMaps = {};
1089
+ reactData.updateCheckboxFlag++;
1090
+ reactData.isAllChecked = false;
1091
+ reactData.isAllIndeterminate = false;
1092
+ const value = [];
1093
+ emitCheckboxMode(value);
1094
+ return (0, _vue.nextTick)();
1095
+ };
1096
+ const setAllCheckboxRow = checked => {
1097
+ const {
1098
+ fullData,
1099
+ selectCheckboxMaps
1100
+ } = internalData;
1101
+ const keyField = computeKeyField.value;
1102
+ if (checked) {
1103
+ const value = [];
1104
+ for (const row of fullData) {
1105
+ const rowKey = getRowKeyByField(row, keyField);
1106
+ const rowid = getRowIdByField(row, keyField);
1107
+ selectCheckboxMaps[rowid] = row;
1108
+ value.push(rowKey);
1109
+ }
1110
+ emitCheckboxMode(value);
1111
+ return updateCheckboxStatus();
1112
+ }
1113
+ return clearCheckboxRow();
1114
+ };
1115
+ const updateCheckboxStatus = () => {
1116
+ const {
1117
+ selectCheckboxMaps,
1118
+ fullData
1119
+ } = internalData;
1120
+ const keyField = computeKeyField.value;
1121
+ const checkboxOpts = computeCheckboxOpts.value;
1122
+ const {
1123
+ checkMethod
1124
+ } = checkboxOpts;
1125
+ let hasChecked = false;
1126
+ let hasUnchecked = false;
1127
+ if (checkMethod) {
1128
+ for (const row of fullData) {
1129
+ if (checkMethod({
1130
+ row,
1131
+ $list: $xeList
1132
+ })) {
1133
+ const rowid = getRowIdByField(row, keyField);
1134
+ if (selectCheckboxMaps[rowid]) {
1135
+ hasChecked = true;
1136
+ } else {
1137
+ hasUnchecked = true;
1138
+ if (hasChecked) {
1139
+ break;
1140
+ }
1141
+ }
1142
+ }
1143
+ }
1144
+ } else {
1145
+ for (const row of fullData) {
1146
+ const rowid = getRowIdByField(row, keyField);
1147
+ if (selectCheckboxMaps[rowid]) {
1148
+ hasChecked = true;
1149
+ } else {
1150
+ hasUnchecked = true;
1151
+ if (hasChecked) {
1152
+ break;
1153
+ }
1154
+ }
1155
+ }
1156
+ }
1157
+ reactData.isAllChecked = hasChecked && !hasUnchecked;
1158
+ reactData.isAllIndeterminate = hasChecked && hasUnchecked;
1159
+ reactData.updateCheckboxFlag++;
1160
+ return (0, _vue.nextTick)();
1161
+ };
1162
+ const changeCheckboxAllEvent = evnt => {
1163
+ const {
1164
+ isAllChecked
1165
+ } = reactData;
1166
+ const isChecked = !isAllChecked;
1167
+ if (isChecked) {
1168
+ setAllCheckboxRow(true);
1169
+ } else {
1170
+ clearCheckboxRow();
1171
+ }
1172
+ dispatchEvent('checkbox-all', {
1173
+ checked: isChecked
1174
+ }, evnt);
1175
+ };
1176
+ const changeCheckboxEvent = (evnt, row) => {
1177
+ evnt.preventDefault();
1178
+ evnt.stopPropagation();
1179
+ const {
1180
+ selectCheckboxMaps
1181
+ } = internalData;
1182
+ const checkboxOpts = computeCheckboxOpts.value;
1183
+ const {
1184
+ checkMethod
1185
+ } = checkboxOpts;
1186
+ const rowid = getRowId(row);
1187
+ const isDisabled = checkMethod ? !checkMethod({
1188
+ $list: $xeList,
1189
+ row
1190
+ }) : false;
1191
+ if (isDisabled) {
1192
+ return;
1193
+ }
1194
+ let isChecked = false;
1195
+ if (selectCheckboxMaps[rowid]) {
1196
+ delete selectCheckboxMaps[rowid];
1197
+ } else {
1198
+ isChecked = true;
1199
+ selectCheckboxMaps[rowid] = row;
1200
+ }
1201
+ reactData.updateCheckboxFlag++;
1202
+ updateCheckboxStatus();
1203
+ const rowids = _xeUtils.default.keys(selectCheckboxMaps);
1204
+ const value = rowids.map(_utils.deModelValue);
1205
+ emitCheckboxMode(value);
1206
+ dispatchEvent('checkbox-change', {
1207
+ row,
1208
+ value,
1209
+ checked: isChecked
1210
+ }, evnt);
1211
+ };
1212
+ const changeCurrentEvent = (evnt, row) => {
1213
+ evnt.preventDefault();
1214
+ const rowOpts = computeRowOpts.value;
1215
+ const {
1216
+ currentMethod
1217
+ } = rowOpts;
1218
+ let isDisabled = false;
1219
+ if (currentMethod) {
1220
+ isDisabled = !currentMethod({
1221
+ row
1222
+ });
1223
+ }
1224
+ if (isDisabled) {
1225
+ return;
1226
+ }
1227
+ const isChecked = true;
1228
+ internalData.currentRow = row;
1229
+ reactData.currRowFlag++;
1230
+ dispatchEvent('current-change', {
1231
+ row,
1232
+ checked: isChecked
1233
+ }, evnt);
1234
+ };
1235
+ const changeRadioEvent = (evnt, row) => {
1236
+ evnt.preventDefault();
1237
+ evnt.stopPropagation();
1238
+ const {
1239
+ selectRadioRow
1240
+ } = reactData;
1241
+ const radioOpts = computeRadioOpts.value;
1242
+ const {
1243
+ strict,
1244
+ checkMethod
1245
+ } = radioOpts;
1246
+ const rowKey = getRowKey(row);
1247
+ const isDisabled = checkMethod ? !checkMethod({
1248
+ $list: $xeList,
1249
+ row
1250
+ }) : false;
1251
+ if (isDisabled) {
1252
+ return;
1253
+ }
1254
+ const value = rowKey;
1255
+ let isChecked = true;
1256
+ if (strict) {
1257
+ if (selectRadioRow && rowKey === getRowKey(selectRadioRow)) {
1258
+ isChecked = false;
1259
+ reactData.selectRadioRow = null;
1260
+ } else {
1261
+ reactData.selectRadioRow = row;
1262
+ }
1263
+ } else {
1264
+ reactData.selectRadioRow = row;
1265
+ }
1266
+ emitRadioMode(value);
1267
+ dispatchEvent('radio-change', {
1268
+ row,
1269
+ value,
1270
+ checked: isChecked
1271
+ }, evnt);
1272
+ };
336
1273
  const listMethods = {
337
1274
  dispatchEvent,
338
1275
  loadData,
@@ -344,37 +1281,330 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
344
1281
  clearScroll();
345
1282
  return loadData(datas);
346
1283
  },
1284
+ getFullData() {
1285
+ const {
1286
+ fullData
1287
+ } = internalData;
1288
+ return fullData;
1289
+ },
347
1290
  recalculate,
348
1291
  scrollTo,
349
1292
  refreshScroll,
350
- clearScroll
1293
+ clearScroll,
1294
+ getRowKey,
1295
+ eqRowKey,
1296
+ eqRow,
1297
+ eqRowByKey,
1298
+ findRow,
1299
+ findRowByKey,
1300
+ findRowIndexOf,
1301
+ findRowIndexOfByKey,
1302
+ isCheckedByRadioRowKey,
1303
+ isCheckedByRadioRow,
1304
+ isCheckedByCheckboxRowKey,
1305
+ isCheckedByCheckboxRow,
1306
+ setCurrentRow,
1307
+ setCurrentRowByKey,
1308
+ getCurrentRow,
1309
+ getCurrentRowKey,
1310
+ clearCurrentRow,
1311
+ setRadioRow,
1312
+ setRadioRowByKey,
1313
+ getRadioRow,
1314
+ getRadioRowKey,
1315
+ clearRadioRow,
1316
+ setCheckboxRow,
1317
+ setCheckboxRowByKey,
1318
+ getCheckboxRows,
1319
+ getCheckboxRowKeys,
1320
+ clearCheckboxRow,
1321
+ setAllCheckboxRow
1322
+ };
1323
+ const listPrivateMethods = {};
1324
+ Object.assign($xeList, listMethods, listPrivateMethods);
1325
+ const renderDragTip = () => {
1326
+ const {
1327
+ dragRow,
1328
+ dragTipText
1329
+ } = reactData;
1330
+ const dragOpts = computeDragOpts.value;
1331
+ const isDrag = computeIsDrag.value;
1332
+ const dRow = dragRow;
1333
+ if (isDrag) {
1334
+ return (0, _vue.h)('div', {
1335
+ class: 'vxe-list--drag-wrapper'
1336
+ }, [(0, _vue.h)('div', {
1337
+ ref: refDragRowLineElem,
1338
+ class: ['vxe-list--drag-row-line', {
1339
+ 'is--guides': dragOpts.showGuidesStatus
1340
+ }]
1341
+ }), dRow && dragOpts.showDragTip ? (0, _vue.h)('div', {
1342
+ ref: refDragTipElem,
1343
+ class: 'vxe-list--drag-sort-tip'
1344
+ }, [(0, _vue.h)('div', {
1345
+ class: 'vxe-list--drag-sort-tip-wrapper'
1346
+ }, [(0, _vue.h)('div', {
1347
+ class: 'vxe-list--drag-sort-tip-status'
1348
+ }, [(0, _vue.h)('span', {
1349
+ class: ['vxe-list--drag-sort-tip-normal-status', (0, _ui.getIcon)().LIST_DRAG_STATUS_NODE]
1350
+ }), (0, _vue.h)('span', {
1351
+ class: ['vxe-list--drag-sort-tip-disabled-status', (0, _ui.getIcon)().LIST_DRAG_DISABLED]
1352
+ })]), (0, _vue.h)('div', {
1353
+ class: 'vxe-list--drag-sort-tip-content'
1354
+ }, dragTipText)])]) : (0, _ui.renderEmptyElement)($xeList)]);
1355
+ }
1356
+ return (0, _ui.renderEmptyElement)($xeList);
1357
+ };
1358
+ const renderRadio = (row, rowid, isChecked) => {
1359
+ const {
1360
+ showRadio
1361
+ } = props;
1362
+ const radioOpts = computeRadioOpts.value;
1363
+ const {
1364
+ showIcon,
1365
+ checkMethod,
1366
+ visibleMethod
1367
+ } = radioOpts;
1368
+ const isVisible = !visibleMethod || visibleMethod({
1369
+ $list: $xeList,
1370
+ row
1371
+ });
1372
+ if (showRadio && showIcon && isVisible) {
1373
+ const isDisabled = checkMethod ? !checkMethod({
1374
+ $list: $xeList,
1375
+ row
1376
+ }) : false;
1377
+ return (0, _vue.h)('div', {
1378
+ key: 'ct2',
1379
+ class: ['vxe-list--radio-option', {
1380
+ 'is--checked': isChecked,
1381
+ 'is--disabled': isDisabled
1382
+ }],
1383
+ onClick(evnt) {
1384
+ if (!isDisabled) {
1385
+ changeRadioEvent(evnt, row);
1386
+ }
1387
+ }
1388
+ }, [(0, _vue.h)('span', {
1389
+ class: ['vxe-radio--icon', isChecked ? (0, _ui.getIcon)().RADIO_CHECKED : (0, _ui.getIcon)().RADIO_UNCHECKED]
1390
+ })]);
1391
+ }
1392
+ return (0, _ui.renderEmptyElement)($xeList);
1393
+ };
1394
+ const renderCheckbox = (row, rowid, isChecked) => {
1395
+ const {
1396
+ showCheckbox
1397
+ } = props;
1398
+ const checkboxOpts = computeCheckboxOpts.value;
1399
+ const {
1400
+ showIcon,
1401
+ checkMethod,
1402
+ visibleMethod
1403
+ } = checkboxOpts;
1404
+ const isVisible = !visibleMethod || visibleMethod({
1405
+ $list: $xeList,
1406
+ row
1407
+ });
1408
+ if (showCheckbox && showIcon && isVisible) {
1409
+ const isDisabled = checkMethod ? !checkMethod({
1410
+ $list: $xeList,
1411
+ row
1412
+ }) : false;
1413
+ return (0, _vue.h)('div', {
1414
+ key: 'ct3',
1415
+ class: ['vxe-list--checkbox-option', {
1416
+ 'is--checked': isChecked,
1417
+ 'is--disabled': isDisabled
1418
+ }],
1419
+ onClick(evnt) {
1420
+ if (!isDisabled) {
1421
+ changeCheckboxEvent(evnt, row);
1422
+ }
1423
+ }
1424
+ }, [(0, _vue.h)('span', {
1425
+ class: ['vxe-checkbox--icon', isChecked ? (0, _ui.getIcon)().CHECKBOX_CHECKED : (0, _ui.getIcon)().CHECKBOX_UNCHECKED]
1426
+ })]);
1427
+ }
1428
+ return (0, _ui.renderEmptyElement)($xeList);
1429
+ };
1430
+ const renderRow = (row, rowIndex) => {
1431
+ const {
1432
+ showRadio,
1433
+ showCheckbox
1434
+ } = props;
1435
+ const {
1436
+ selectRadioRow,
1437
+ currRowFlag,
1438
+ updateCheckboxFlag
1439
+ } = reactData;
1440
+ const {
1441
+ selectCheckboxMaps,
1442
+ currentRow
1443
+ } = internalData;
1444
+ const contentSlot = slots.content;
1445
+ const dragOpts = computeDragOpts.value;
1446
+ const {
1447
+ trigger,
1448
+ icon,
1449
+ disabledMethod,
1450
+ visibleMethod
1451
+ } = dragOpts;
1452
+ const rowOpts = computeRowOpts.value;
1453
+ const {
1454
+ useKey,
1455
+ contentField,
1456
+ className: rowClassName,
1457
+ isCurrent
1458
+ } = rowOpts;
1459
+ const isDrag = computeIsDrag.value;
1460
+ const keyField = computeKeyField.value;
1461
+ const isRowFnCls = rowClassName && _xeUtils.default.isFunction(rowClassName);
1462
+ const hasKey = keyField || useKey || isDrag || isCurrent || showRadio || showCheckbox;
1463
+ const rowKey = hasKey && keyField ? getRowIdByField(row, keyField) : '';
1464
+ const rowid = (0, _utils.enModelValue)(rowKey);
1465
+ const rowParams = {
1466
+ row,
1467
+ $list: $xeList
1468
+ };
1469
+ let isRadioChecked = false;
1470
+ if (showRadio) {
1471
+ isRadioChecked = selectRadioRow && (row === selectRadioRow || eqRowByKey(selectRadioRow, rowKey));
1472
+ }
1473
+ let isCheckboxChecked = false;
1474
+ if (showCheckbox) {
1475
+ isCheckboxChecked = !!(updateCheckboxFlag && selectCheckboxMaps[rowid]);
1476
+ }
1477
+ const ctVNs = [];
1478
+ let isDragDisabled = false;
1479
+ if (isDrag && keyField && (!visibleMethod || visibleMethod(rowParams))) {
1480
+ const handleOns = {};
1481
+ if (trigger !== 'row') {
1482
+ isDragDisabled = !!(disabledMethod && disabledMethod(rowParams));
1483
+ handleOns.onMousedown = evnt => {
1484
+ if (!isDragDisabled) {
1485
+ handleRowDragMousedownEvent(evnt, rowParams);
1486
+ }
1487
+ };
1488
+ handleOns.onMouseup = handleRowDragMouseupEvent;
1489
+ }
1490
+ ctVNs.push((0, _vue.h)('div', {
1491
+ key: 'ct1',
1492
+ class: 'vxe-list--row-drag'
1493
+ }, [(0, _vue.h)('span', Object.assign({
1494
+ class: 'vxe-list--drag-handle'
1495
+ }, handleOns), [(0, _vue.h)('i', {
1496
+ class: icon || (0, _ui.getIcon)().LIST_DRAG
1497
+ })])]));
1498
+ }
1499
+ if (showRadio) {
1500
+ ctVNs.push(renderRadio(row, rowid, isRadioChecked));
1501
+ }
1502
+ if (showCheckbox) {
1503
+ ctVNs.push(renderCheckbox(row, rowid, isCheckboxChecked));
1504
+ }
1505
+ ctVNs.push((0, _vue.h)('div', {
1506
+ key: 'ct5',
1507
+ class: 'vxe-list--row-content'
1508
+ }, contentSlot ? contentSlot(rowParams) : contentField ? (0, _utils.getText)(row[contentField]) : ''));
1509
+ const rowOns = {
1510
+ onMousedown(evnt) {
1511
+ handleRowMousedownEvent(evnt, row);
1512
+ },
1513
+ onMouseup: handleRowDragMouseupEvent,
1514
+ onClick(evnt) {
1515
+ handleRowClickEvent(evnt, row);
1516
+ },
1517
+ onDblclick(evnt) {
1518
+ handleRowDblclickEvent(evnt, row);
1519
+ }
1520
+ };
1521
+ // 拖拽行事件
1522
+ if (isDrag) {
1523
+ rowOns.onDragstart = handleRowDragDragstartEvent;
1524
+ rowOns.onDragend = handleRowDragDragendEvent;
1525
+ rowOns.onDragover = handleRowDragDragoverEvent;
1526
+ }
1527
+ return (0, _vue.h)('div', Object.assign({
1528
+ key: hasKey && keyField ? rowid : rowIndex,
1529
+ class: ['vxe-list--row', isRowFnCls ? rowClassName(rowParams) : rowClassName || '', {
1530
+ 'is--drag-disabled': isDragDisabled,
1531
+ 'is--current': currRowFlag && currentRow && eqRowByKey(currentRow, rowKey),
1532
+ 'is-radio--checked': isRadioChecked,
1533
+ 'is-checkbox--checked': isCheckboxChecked
1534
+ }],
1535
+ rowid: hasKey && keyField ? rowid : undefined
1536
+ }, rowOns), ctVNs);
351
1537
  };
352
- Object.assign($xeList, listMethods);
353
1538
  const renderVN = () => {
354
1539
  const {
1540
+ showCheckbox,
355
1541
  className,
356
1542
  loading
357
1543
  } = props;
358
1544
  const {
359
1545
  bodyHeight,
360
1546
  topSpaceHeight,
361
- items
1547
+ rowList,
1548
+ isAllChecked,
1549
+ isAllIndeterminate
362
1550
  } = reactData;
363
1551
  const defaultSlot = slots.default;
1552
+ const headerSlot = slots.header;
1553
+ const footerSlot = slots.footer;
364
1554
  const vSize = computeSize.value;
365
- const styles = computeStyles.value;
1555
+ const wrapperStyles = computeWrapperStyles.value;
1556
+ const virtualStyles = computeVirtualStyles.value;
1557
+ const radioOpts = computeRadioOpts.value;
1558
+ const checkboxOpts = computeCheckboxOpts.value;
1559
+ const {
1560
+ showHeader,
1561
+ headerTitle
1562
+ } = checkboxOpts;
1563
+ const dragOpts = computeDragOpts.value;
1564
+ const {
1565
+ trigger
1566
+ } = dragOpts;
1567
+ const rowOpts = computeRowOpts.value;
1568
+ const {
1569
+ isHover,
1570
+ padding
1571
+ } = rowOpts;
1572
+ const isDrag = computeIsDrag.value;
1573
+ const showDefChekboxHead = showCheckbox && showHeader !== false;
366
1574
  return (0, _vue.h)('div', {
367
1575
  ref: refElem,
368
1576
  class: ['vxe-list', className ? _xeUtils.default.isFunction(className) ? className({
369
1577
  $list: $xeList
370
1578
  }) : className : '', {
371
1579
  [`size--${vSize}`]: vSize,
1580
+ 'is--drag': isDrag,
372
1581
  'is--loading': loading
373
- }]
1582
+ }],
1583
+ style: wrapperStyles
1584
+ }, [headerSlot || showDefChekboxHead ? (0, _vue.h)('div', {
1585
+ ref: refHeaderElem,
1586
+ class: 'vxe-list--header-wrapper'
1587
+ }, [showDefChekboxHead ? (0, _vue.h)('div', {
1588
+ class: 'vxe-list--header-left'
374
1589
  }, [(0, _vue.h)('div', {
1590
+ class: ['vxe-list--checkbox-header', {
1591
+ 'is--checked': isAllChecked,
1592
+ 'is--indeterminate': isAllIndeterminate
1593
+ }],
1594
+ onClick: changeCheckboxAllEvent
1595
+ }, [(0, _vue.h)('span', {
1596
+ class: ['vxe-checkbox--icon', isAllChecked ? (0, _ui.getIcon)().CHECKBOX_CHECKED : isAllIndeterminate ? (0, _ui.getIcon)().CHECKBOX_INDETERMINATE : (0, _ui.getIcon)().CHECKBOX_UNCHECKED]
1597
+ }), (0, _vue.h)('span', {
1598
+ class: 'vxe-checkbox--label'
1599
+ }, _xeUtils.default.eqNull(headerTitle) ? (0, _ui.getI18n)('vxe.list.allChecked') : (0, _utils.getText)(headerTitle))])]) : (0, _ui.renderEmptyElement)($xeList), headerSlot ? (0, _vue.h)('div', {
1600
+ class: 'vxe-list--header-content'
1601
+ }, headerSlot({
1602
+ items: rowList,
1603
+ $list: $xeList
1604
+ })) : (0, _ui.renderEmptyElement)($xeList)]) : (0, _ui.renderEmptyElement)($xeList), (0, _vue.h)('div', {
375
1605
  ref: refVirtualWrapper,
376
1606
  class: 'vxe-list--virtual-wrapper',
377
- style: styles,
1607
+ style: virtualStyles,
378
1608
  onScroll: scrollEvent
379
1609
  }, [(0, _vue.h)('div', {
380
1610
  class: 'vxe-list--y-space',
@@ -383,14 +1613,30 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
383
1613
  }
384
1614
  }), (0, _vue.h)('div', {
385
1615
  ref: refVirtualBody,
386
- class: 'vxe-list--body',
1616
+ class: ['vxe-list--body', {
1617
+ 'trigger--row': trigger === 'row',
1618
+ 'checkbox--highlight': checkboxOpts.highlight,
1619
+ 'radio--highlight': radioOpts.highlight,
1620
+ 'row--hover': isHover,
1621
+ 'is--padding': padding
1622
+ }],
387
1623
  style: {
388
1624
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
389
1625
  }
390
1626
  }, defaultSlot ? defaultSlot({
391
- items,
1627
+ items: rowList,
1628
+ $list: $xeList
1629
+ }) : rowList.map((row, i) => renderRow(row, i)))]), footerSlot ? (0, _vue.h)('div', {
1630
+ ref: refFooterElem,
1631
+ class: 'vxe-list--footer-wrapper'
1632
+ }, footerSlot({
1633
+ items: rowList,
392
1634
  $list: $xeList
393
- }) : [])]),
1635
+ })) : (0, _ui.renderEmptyElement)($xeList),
1636
+ /**
1637
+ * 拖拽提示
1638
+ */
1639
+ renderDragTip(),
394
1640
  /**
395
1641
  * 加载中
396
1642
  */
@@ -409,17 +1655,36 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
409
1655
  (0, _vue.watch)(dataFlag, () => {
410
1656
  loadData(props.data || []);
411
1657
  });
1658
+ const reFlag = (0, _vue.ref)(0);
412
1659
  (0, _vue.watch)(() => props.height, () => {
413
- recalculate();
1660
+ reFlag.value++;
414
1661
  });
415
1662
  (0, _vue.watch)(() => props.maxHeight, () => {
416
- recalculate();
1663
+ reFlag.value++;
1664
+ });
1665
+ (0, _vue.watch)(() => props.syncResize, () => {
1666
+ reFlag.value++;
417
1667
  });
418
- (0, _vue.watch)(() => props.syncResize, value => {
419
- if (value) {
1668
+ (0, _vue.watch)(computeRowHeight, () => {
1669
+ reFlag.value++;
1670
+ });
1671
+ (0, _vue.watch)(reFlag, () => {
1672
+ (0, _vue.nextTick)(() => {
420
1673
  recalculate();
421
- (0, _vue.nextTick)(() => setTimeout(() => recalculate()));
422
- }
1674
+ });
1675
+ });
1676
+ (0, _vue.watch)(() => props.checkRowKey, () => {
1677
+ updateRadioModeValue();
1678
+ });
1679
+ const checkKeyFlag = (0, _vue.ref)(0);
1680
+ (0, _vue.watch)(() => props.checkRowKeys ? props.checkRowKeys.length : -1, () => {
1681
+ checkKeyFlag.value++;
1682
+ });
1683
+ (0, _vue.watch)(() => props.checkRowKeys, () => {
1684
+ checkKeyFlag.value++;
1685
+ });
1686
+ (0, _vue.watch)(checkKeyFlag, () => {
1687
+ updateCheckboxModeValue();
423
1688
  });
424
1689
  (0, _vue.onActivated)(() => {
425
1690
  recalculate().then(() => refreshScroll());
@@ -428,7 +1693,30 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
428
1693
  loadData(props.data || []);
429
1694
  });
430
1695
  (0, _vue.onMounted)(() => {
431
- recalculate();
1696
+ const {
1697
+ showRadio,
1698
+ showCheckbox
1699
+ } = props;
1700
+ const rowOpts = computeRowOpts.value;
1701
+ const {
1702
+ useKey
1703
+ } = rowOpts;
1704
+ const isDrag = computeIsDrag.value;
1705
+ const keyField = computeKeyField.value;
1706
+ if (!keyField) {
1707
+ if (showRadio) {
1708
+ errLog('vxe.error.reqSupportProp', ['show-radio', 'row-config.keyField']);
1709
+ }
1710
+ if (showCheckbox) {
1711
+ errLog('vxe.error.reqSupportProp', ['show-checkbox', 'row-config.keyField']);
1712
+ }
1713
+ if (isDrag) {
1714
+ errLog('vxe.error.reqSupportProp', ['drag-config', 'row-config.keyField']);
1715
+ }
1716
+ }
1717
+ if (useKey && !keyField) {
1718
+ errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
1719
+ }
432
1720
  if (props.autoResize) {
433
1721
  const el = refElem.value;
434
1722
  const resizeObserver = _ui.globalResize.create(() => recalculate());
@@ -438,6 +1726,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
438
1726
  }
439
1727
  internalData.resizeObserver = resizeObserver;
440
1728
  }
1729
+ recalculate();
441
1730
  _ui.globalEvents.on($xeList, 'resize', recalculate);
442
1731
  });
443
1732
  (0, _vue.onBeforeUnmount)(() => {