vxe-pc-ui 4.15.3 → 4.15.4

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 (33) hide show
  1. package/dist/all.esm.js +105 -59
  2. package/es/cascader/src/cascader.js +72 -30
  3. package/es/tree-select/src/tree-select.js +14 -18
  4. package/es/ui/index.js +4 -1
  5. package/es/ui/src/log.js +10 -6
  6. package/lib/cascader/src/cascader.js +80 -33
  7. package/lib/cascader/src/cascader.min.js +1 -1
  8. package/lib/index.umd.js +102 -46
  9. package/lib/index.umd.min.js +1 -1
  10. package/lib/tree-select/src/tree-select.js +7 -7
  11. package/lib/tree-select/src/tree-select.min.js +1 -1
  12. package/lib/ui/index.js +4 -1
  13. package/lib/ui/index.min.js +1 -1
  14. package/lib/ui/src/log.js +11 -5
  15. package/lib/ui/src/log.min.js +1 -1
  16. package/package.json +1 -1
  17. package/packages/cascader/src/cascader.ts +71 -31
  18. package/packages/tree-select/src/tree-select.ts +14 -18
  19. package/packages/ui/index.ts +3 -0
  20. package/packages/ui/src/log.ts +11 -6
  21. package/types/components/cascader.d.ts +4 -0
  22. /package/es/icon/{iconfont.1781852740683.ttf → iconfont.1781876596706.ttf} +0 -0
  23. /package/es/icon/{iconfont.1781852740683.woff → iconfont.1781876596706.woff} +0 -0
  24. /package/es/icon/{iconfont.1781852740683.woff2 → iconfont.1781876596706.woff2} +0 -0
  25. /package/es/{iconfont.1781852740683.ttf → iconfont.1781876596706.ttf} +0 -0
  26. /package/es/{iconfont.1781852740683.woff → iconfont.1781876596706.woff} +0 -0
  27. /package/es/{iconfont.1781852740683.woff2 → iconfont.1781876596706.woff2} +0 -0
  28. /package/lib/icon/style/{iconfont.1781852740683.ttf → iconfont.1781876596706.ttf} +0 -0
  29. /package/lib/icon/style/{iconfont.1781852740683.woff → iconfont.1781876596706.woff} +0 -0
  30. /package/lib/icon/style/{iconfont.1781852740683.woff2 → iconfont.1781876596706.woff2} +0 -0
  31. /package/lib/{iconfont.1781852740683.ttf → iconfont.1781876596706.ttf} +0 -0
  32. /package/lib/{iconfont.1781852740683.woff → iconfont.1781876596706.woff} +0 -0
  33. /package/lib/{iconfont.1781852740683.woff2 → iconfont.1781876596706.woff2} +0 -0
package/dist/all.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as core from '@vxe-ui/core';
2
- import { VxeUI, log, setConfig as setConfig$1, setIcon, getConfig as getConfig$3, createEvent, getIcon as getIcon$2, renderEmptyElement, useSize, usePermission, permission, globalEvents, renderer, getI18n as getI18n$2, globalResize, GLOBAL_EVENT_KEYS, getSlotVNs as getSlotVNs$1, commands, formats, getComponent, validators } from '@vxe-ui/core';
2
+ import { VxeUI, setConfig as setConfig$1, setIcon, getConfig as getConfig$3, createEvent, getIcon as getIcon$2, renderEmptyElement, useSize, usePermission, permission, globalEvents, renderer, getI18n as getI18n$2, globalResize, GLOBAL_EVENT_KEYS, getSlotVNs as getSlotVNs$1, commands, formats, getComponent, validators } from '@vxe-ui/core';
3
3
  export * from '@vxe-ui/core';
4
4
  import { defineComponent, reactive, h, createCommentVNode, createApp, ref, inject, computed, watch, onMounted, onUnmounted, provide, nextTick, onBeforeUnmount, resolveComponent, Teleport, onActivated, onDeactivated, TransitionGroup } from 'vue';
5
5
  import XEUtils from 'xe-utils';
@@ -80,17 +80,21 @@ function checkDynamic() {
80
80
  }
81
81
  }
82
82
 
83
- const version$1 = `ui v${"4.15.3"}`;
83
+ const { log } = VxeUI;
84
+ const uiVersion = `ui v${"4.15.4"}`;
84
85
  function createComponentLog(name) {
86
+ const tableVersion = VxeUI.tableVersion ? `table v${VxeUI.tableVersion}` : '';
87
+ const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
88
+ const designVersion = VxeUI.designVersion ? `design v${VxeUI.designVersion}` : '';
85
89
  return {
86
- warnLog: log.create('warn', `${version$1} ${name}`),
87
- errLog: log.create('error', `${version$1} ${name}`)
90
+ warnLog: log.create('warn', uiVersion + tableVersion + ganttVersion + designVersion + '] [' + name),
91
+ errLog: log.create('error', uiVersion + tableVersion + ganttVersion + designVersion + '] [' + name)
88
92
  };
89
93
  }
90
- const warnLog$b = log.create('warn', version$1);
91
- log.create('error', version$1);
94
+ const warnLog$b = log.create('warn', uiVersion);
95
+ log.create('error', uiVersion);
92
96
 
93
- const version = "4.15.3";
97
+ const version = "4.15.4";
94
98
  VxeUI.uiVersion = version;
95
99
  VxeUI.dynamicApp = dynamicApp;
96
100
  function config(options) {
@@ -153,6 +157,9 @@ setConfig$1({
153
157
  showFullLabel: true,
154
158
  treeConfig: {
155
159
  showIcon: true
160
+ },
161
+ filterConfig: {
162
+ autoExpandMode: 'first'
156
163
  }
157
164
  },
158
165
  checkbox: {},
@@ -3793,7 +3800,7 @@ dynamicApp.use(VxeButton);
3793
3800
  VxeUI.component(VxeButtonComponent);
3794
3801
  const Button = VxeButton;
3795
3802
 
3796
- const { errLog: errLog$h } = createComponentLog('backtop');
3803
+ const { errLog: errLog$g } = createComponentLog('backtop');
3797
3804
  function createInternalData$e() {
3798
3805
  return {
3799
3806
  targetEl: null
@@ -3971,13 +3978,13 @@ var VxeBacktopComponent = defineVxeComponent({
3971
3978
  const { target } = props;
3972
3979
  if (!target) {
3973
3980
  removeScrollEvent();
3974
- errLog$h('vxe.error.reqProp', ['target']);
3981
+ errLog$g('vxe.error.reqProp', ['target']);
3975
3982
  return;
3976
3983
  }
3977
3984
  if (XEUtils.isString(target)) {
3978
3985
  const tEl = document.querySelector(target);
3979
3986
  if (!tEl) {
3980
- errLog$h('vxe.error.errProp', [`target=${target}`, 'body']);
3987
+ errLog$g('vxe.error.errProp', [`target=${target}`, 'body']);
3981
3988
  }
3982
3989
  const { targetEl } = internalData;
3983
3990
  if (targetEl !== tEl) {
@@ -4662,7 +4669,7 @@ function isAllSameChar(str, char) {
4662
4669
  return true;
4663
4670
  }
4664
4671
 
4665
- const { errLog: errLog$g } = createComponentLog('calendar');
4672
+ const { errLog: errLog$f } = createComponentLog('calendar');
4666
4673
  const { menus: menus$2, getConfig: getConfig$2, getI18n: getI18n$1 } = VxeUI;
4667
4674
  var VxeCalendarComponent = defineVxeComponent({
4668
4675
  name: 'VxeCalendar',
@@ -5930,7 +5937,7 @@ var VxeCalendarComponent = defineVxeComponent({
5930
5937
  const { menuConfig } = props;
5931
5938
  const VxeUIContextMenu = VxeUI.getComponent('VxeContextMenu');
5932
5939
  if (menuConfig && !VxeUIContextMenu) {
5933
- errLog$g('vxe.error.reqComp', ['vxe-context-menu']);
5940
+ errLog$f('vxe.error.reqComp', ['vxe-context-menu']);
5934
5941
  }
5935
5942
  dateOpenPanel();
5936
5943
  });
@@ -9807,7 +9814,6 @@ var VxeInputComponent = defineVxeComponent({
9807
9814
  }
9808
9815
  });
9809
9816
 
9810
- const { errLog: errLog$f } = createComponentLog('cascader');
9811
9817
  /**
9812
9818
  * 生成节点的唯一主键
9813
9819
  */
@@ -10378,7 +10384,6 @@ var VxeCascaderComponent = defineVxeComponent({
10378
10384
  return internalData.afterVisibleList;
10379
10385
  };
10380
10386
  const handleData = (force) => {
10381
- const { nodeMaps } = internalData;
10382
10387
  let fullList = internalData.afterVisibleList;
10383
10388
  if (force) {
10384
10389
  // 更新数据,处理筛选和排序
@@ -10387,16 +10392,56 @@ var VxeCascaderComponent = defineVxeComponent({
10387
10392
  fullList = handleTreeToList();
10388
10393
  }
10389
10394
  const treeList = fullList.slice(0);
10390
- treeList.forEach((item, $index) => {
10391
- const nodeid = getNodeId(item);
10392
- const itemRest = nodeMaps[nodeid];
10393
- if (itemRest) {
10394
- itemRest.$index = $index;
10395
- }
10396
- });
10397
10395
  reactData.treeList = treeList;
10398
10396
  };
10399
- const triggerSearchEvent = XEUtils.debounce(() => handleData(true), 350, { trailing: true });
10397
+ /**
10398
+ * 获取第一个拥有子节点的节点
10399
+ */
10400
+ function handleHasChildNodeIds(treeList, type) {
10401
+ const childrenField = computeChildrenField.value;
10402
+ const mapChildrenField = computeMapChildrenField.value;
10403
+ const treeOpts = computeTreeOpts.value;
10404
+ const { transform } = treeOpts;
10405
+ const childField = transform ? mapChildrenField : childrenField;
10406
+ const nodeIds = [];
10407
+ let currList = treeList;
10408
+ while (currList.length) {
10409
+ let targetNode = null;
10410
+ for (const item of currList) {
10411
+ const kids = item[childField];
10412
+ if (XEUtils.isArray(kids) && kids.length > 0) {
10413
+ targetNode = item;
10414
+ break;
10415
+ }
10416
+ }
10417
+ if (targetNode) {
10418
+ nodeIds.push(getNodeId(targetNode));
10419
+ currList = targetNode[childField];
10420
+ }
10421
+ else {
10422
+ const endNode = XEUtils[type](currList);
10423
+ nodeIds.push(getNodeId(endNode));
10424
+ break;
10425
+ }
10426
+ }
10427
+ return nodeIds;
10428
+ }
10429
+ const triggerSearchEvent = XEUtils.debounce(() => {
10430
+ handleData(true);
10431
+ updateModelChecked();
10432
+ const filterOpts = computeFilterOpts.value;
10433
+ const { autoExpandMode } = filterOpts;
10434
+ const { afterTreeList } = internalData;
10435
+ // 默认展开第
10436
+ if (autoExpandMode === 'first' || autoExpandMode === 'last') {
10437
+ const stItems = handleHasChildNodeIds(afterTreeList, autoExpandMode);
10438
+ reactData.currentItems = stItems;
10439
+ }
10440
+ else {
10441
+ handleCurrentItems();
10442
+ }
10443
+ updateCurrentChunk();
10444
+ }, 350, { trailing: true });
10400
10445
  const loadData = (list) => {
10401
10446
  const treeOpts = computeTreeOpts.value;
10402
10447
  const keyField = computeKeyField.value;
@@ -10423,17 +10468,20 @@ var VxeCascaderComponent = defineVxeComponent({
10423
10468
  };
10424
10469
  const updateCurrentChunk = () => {
10425
10470
  const { currentItems } = reactData;
10426
- const { treeFullData } = internalData;
10471
+ const { afterTreeList } = internalData;
10427
10472
  const childrenField = computeChildrenField.value;
10428
- const currentCunkList = [treeFullData];
10473
+ const mapChildrenField = computeMapChildrenField.value;
10474
+ const treeOpts = computeTreeOpts.value;
10475
+ const { transform } = treeOpts;
10476
+ const currentCunkList = [afterTreeList];
10429
10477
  if (currentItems.length) {
10430
10478
  let chunkIndex = 0;
10431
10479
  let stNodeid = currentItems[chunkIndex];
10432
- let optList = treeFullData;
10480
+ let optList = afterTreeList;
10433
10481
  while (stNodeid && optList && optList.length) {
10434
10482
  stNodeid = currentItems[chunkIndex++];
10435
10483
  const currOption = optList.find(item => stNodeid === getNodeId(item));
10436
- optList = currOption ? currOption[childrenField] : [];
10484
+ optList = currOption ? currOption[transform ? mapChildrenField : childrenField] : [];
10437
10485
  if (!optList || !optList.length) {
10438
10486
  break;
10439
10487
  }
@@ -10443,7 +10491,7 @@ var VxeCascaderComponent = defineVxeComponent({
10443
10491
  reactData.currentCunkList = currentCunkList;
10444
10492
  };
10445
10493
  const handleCurrentItems = () => {
10446
- const { treeFullData } = internalData;
10494
+ const { afterTreeList } = internalData;
10447
10495
  const selectVals = computeSelectVals.value;
10448
10496
  const childrenField = computeChildrenField.value;
10449
10497
  const mapChildrenField = computeMapChildrenField.value;
@@ -10453,7 +10501,7 @@ var VxeCascaderComponent = defineVxeComponent({
10453
10501
  const expandedMaps = {};
10454
10502
  if (selectVals.length) {
10455
10503
  const lastVal = enNodeValue$1(XEUtils.last(selectVals));
10456
- const stRest = XEUtils.findTree(treeFullData, (item) => lastVal === getNodeId(item), { children: transform ? mapChildrenField : childrenField });
10504
+ const stRest = XEUtils.findTree(afterTreeList, (item) => lastVal === getNodeId(item), { children: transform ? mapChildrenField : childrenField });
10457
10505
  if (stRest) {
10458
10506
  const { nodes } = stRest;
10459
10507
  nodes.forEach(item => {
@@ -10559,10 +10607,11 @@ var VxeCascaderComponent = defineVxeComponent({
10559
10607
  return { checkNodeKeys: checkKeys, checkNodes };
10560
10608
  });
10561
10609
  };
10562
- const clearCheckboxNode = () => {
10610
+ const clearSelectedNode = () => {
10563
10611
  internalData.indeterminateRowMaps = {};
10564
10612
  internalData.selectCheckboxMaps = {};
10565
10613
  reactData.updateCheckboxFlag++;
10614
+ reactData.selectRadioKey = null;
10566
10615
  updateCheckboxStatus();
10567
10616
  return nextTick().then(() => {
10568
10617
  return { checkNodeKeys: [], checkNodes: [] };
@@ -10604,7 +10653,7 @@ var VxeCascaderComponent = defineVxeComponent({
10604
10653
  const { $event } = params;
10605
10654
  const { multiple, checkedClosable } = props;
10606
10655
  const value = multiple ? [] : null;
10607
- clearCheckboxNode().then(() => {
10656
+ clearSelectedNode().then(() => {
10608
10657
  if (checkedClosable) {
10609
10658
  hideOptionPanel($event);
10610
10659
  }
@@ -10686,9 +10735,12 @@ var VxeCascaderComponent = defineVxeComponent({
10686
10735
  const { nodeMaps } = internalData;
10687
10736
  const radioOpts = computeRadioOpts.value;
10688
10737
  const childrenField = computeChildrenField.value;
10738
+ const treeOpts = computeTreeOpts.value;
10739
+ const { transform } = treeOpts;
10740
+ const mapChildrenField = computeMapChildrenField.value;
10689
10741
  const { checkMode, checkMethod } = radioOpts;
10690
10742
  const nodeid = getNodeId(node);
10691
- const childList = node[childrenField];
10743
+ const childList = node[transform ? mapChildrenField : childrenField];
10692
10744
  const isExistChild = childList && childList.length > 0;
10693
10745
  const nodeItem = nodeMaps[nodeid] || {};
10694
10746
  const nLevel = nodeItem.level;
@@ -10837,7 +10889,7 @@ var VxeCascaderComponent = defineVxeComponent({
10837
10889
  const childRowList = [];
10838
10890
  XEUtils.eachTree(afterTreeList, (node) => {
10839
10891
  const nodeid = getNodeId(node);
10840
- const childList = node[childrenField];
10892
+ const childList = node[transform ? mapChildrenField : childrenField];
10841
10893
  if (childList && childList.length && !childRowMaps[nodeid]) {
10842
10894
  childRowMaps[nodeid] = 1;
10843
10895
  childRowList.unshift([node, nodeid, childList]);
@@ -10941,7 +10993,7 @@ var VxeCascaderComponent = defineVxeComponent({
10941
10993
  const treeOpts = computeTreeOpts.value;
10942
10994
  const { transform } = treeOpts;
10943
10995
  const nodeid = getNodeId(node);
10944
- const childList = node[childrenField];
10996
+ const childList = node[transform ? mapChildrenField : childrenField];
10945
10997
  const isExistChild = childList && childList.length > 0;
10946
10998
  const nodeItem = nodeMaps[nodeid] || {};
10947
10999
  const nLevel = nodeItem.level;
@@ -11187,11 +11239,12 @@ var VxeCascaderComponent = defineVxeComponent({
11187
11239
  const { currentNode, selectRadioKey, updateCheckboxFlag, updateExpandedFlag } = reactData;
11188
11240
  const { nodeMaps, selectCheckboxMaps, indeterminateRowMaps, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
11189
11241
  const treeOpts = computeTreeOpts.value;
11190
- const { lazy, iconLoaded, iconOpen, iconClose } = treeOpts;
11242
+ const { lazy, transform, iconLoaded, iconOpen, iconClose } = treeOpts;
11191
11243
  const childrenField = computeChildrenField.value;
11244
+ const mapChildrenField = computeMapChildrenField.value;
11192
11245
  const labelField = computeLabelField.value;
11193
11246
  const hasChildField = computeHasChildField.value;
11194
- const childList = node[childrenField];
11247
+ const childList = node[transform ? mapChildrenField : childrenField];
11195
11248
  const isExistChild = childList && childList.length > 0;
11196
11249
  const iconSlot = slots.icon;
11197
11250
  const titleSlot = slots.title;
@@ -11373,7 +11426,7 @@ var VxeCascaderComponent = defineVxeComponent({
11373
11426
  h('div', {
11374
11427
  class: 'vxe-tree-select--header-button'
11375
11428
  }, [
11376
- showCheckedButton && showClearButton
11429
+ (showCheckedButton && multiple) || showClearButton
11377
11430
  ? h('div', {
11378
11431
  class: 'vxe-tree-select--selected-btns'
11379
11432
  }, [
@@ -11424,7 +11477,7 @@ var VxeCascaderComponent = defineVxeComponent({
11424
11477
  })
11425
11478
  ])
11426
11479
  ]),
11427
- footerSlot || showTotalButton || (showCloseButton && multiple)
11480
+ footerSlot || showTotalButton || showCloseButton
11428
11481
  ? h('div', {
11429
11482
  class: 'vxe-cascader--panel-footer'
11430
11483
  }, footerSlot
@@ -11438,7 +11491,7 @@ var VxeCascaderComponent = defineVxeComponent({
11438
11491
  class: 'vxe-cascader--total-btns'
11439
11492
  }, getI18n$2('vxe.treeSelect.total', [selectVals.length]))
11440
11493
  : renderEmptyElement($xeCascader),
11441
- showCloseButton && multiple
11494
+ showCloseButton
11442
11495
  ? h('div', {
11443
11496
  class: 'vxe-cascader--oper-btns'
11444
11497
  }, [
@@ -11480,9 +11533,6 @@ var VxeCascaderComponent = defineVxeComponent({
11480
11533
  });
11481
11534
  loadData(props.options || []);
11482
11535
  onMounted(() => {
11483
- if (props.filterable) {
11484
- errLog$f('vxe.error.notProp', ['filterable']);
11485
- }
11486
11536
  globalEvents.on($xeCascader, 'mousewheel', handleGlobalMousewheelEvent);
11487
11537
  globalEvents.on($xeCascader, 'mousedown', handleGlobalMousedownEvent);
11488
11538
  globalEvents.on($xeCascader, 'blur', handleGlobalBlurEvent);
@@ -41291,7 +41341,7 @@ var VxeTreeSelectComponent = defineVxeComponent({
41291
41341
  h('div', {
41292
41342
  class: 'vxe-tree-select--header-button'
41293
41343
  }, [
41294
- showCheckedButton && showClearButton
41344
+ (showCheckedButton && multiple) || showClearButton
41295
41345
  ? h('div', {
41296
41346
  class: 'vxe-tree-select--selected-btns'
41297
41347
  }, [
@@ -41311,24 +41361,20 @@ var VxeTreeSelectComponent = defineVxeComponent({
41311
41361
  : renderEmptyElement($xeTreeSelect)
41312
41362
  ])
41313
41363
  : renderEmptyElement($xeTreeSelect),
41314
- showExpandButton && showExpandButton
41364
+ showExpandButton
41315
41365
  ? h('div', {
41316
41366
  class: 'vxe-tree-select--expand-btns'
41317
41367
  }, [
41318
- showExpandButton
41319
- ? h(VxeButton, {
41320
- content: getI18n$2('vxe.treeSelect.allExpand'),
41321
- mode: 'text',
41322
- onClick: allExpandPanelEvent
41323
- })
41324
- : renderEmptyElement($xeTreeSelect),
41325
- showExpandButton
41326
- ? h(VxeButton, {
41327
- content: getI18n$2('vxe.treeSelect.clearExpand'),
41328
- mode: 'text',
41329
- onClick: clearExpandPanelEvent
41330
- })
41331
- : renderEmptyElement($xeTreeSelect)
41368
+ h(VxeButton, {
41369
+ content: getI18n$2('vxe.treeSelect.allExpand'),
41370
+ mode: 'text',
41371
+ onClick: allExpandPanelEvent
41372
+ }),
41373
+ h(VxeButton, {
41374
+ content: getI18n$2('vxe.treeSelect.clearExpand'),
41375
+ mode: 'text',
41376
+ onClick: clearExpandPanelEvent
41377
+ })
41332
41378
  ])
41333
41379
  : renderEmptyElement($xeTreeSelect)
41334
41380
  ])
@@ -41391,7 +41437,7 @@ var VxeTreeSelectComponent = defineVxeComponent({
41391
41437
  }, treeScopedSlots)
41392
41438
  ])
41393
41439
  ]),
41394
- footerSlot || showTotalButton || (showCloseButton && multiple)
41440
+ footerSlot || showTotalButton || showCloseButton
41395
41441
  ? h('div', {
41396
41442
  class: 'vxe-tree-select--panel-footer'
41397
41443
  }, footerSlot
@@ -41405,7 +41451,7 @@ var VxeTreeSelectComponent = defineVxeComponent({
41405
41451
  class: 'vxe-tree-select--total-btns'
41406
41452
  }, getI18n$2('vxe.treeSelect.total', [selectVals.length]))
41407
41453
  : renderEmptyElement($xeTreeSelect),
41408
- showCloseButton && multiple
41454
+ showCloseButton
41409
41455
  ? h('div', {
41410
41456
  class: 'vxe-tree-select--oper-btns'
41411
41457
  }, [
@@ -4,12 +4,10 @@ import { getConfig, getI18n, getIcon, globalEvents, createEvent, useSize, render
4
4
  import { getEventTargetNode, updatePanelPlacement, toCssUnit } from '../../ui/src/dom';
5
5
  import { getLastZIndex, nextZIndex } from '../../ui/src/utils';
6
6
  import { enNodeValue, deNodeValue } from './util';
7
- import { createComponentLog } from '../../ui/src/log';
8
7
  import XEUtils from 'xe-utils';
9
8
  import VxeListComponent from '../../list/src/list';
10
9
  import VxeInputComponent from '../../input/src/input';
11
10
  import VxeButtonComponent from '../../button/src/button';
12
- const { errLog } = createComponentLog('cascader');
13
11
  /**
14
12
  * 生成节点的唯一主键
15
13
  */
@@ -585,7 +583,6 @@ export default defineVxeComponent({
585
583
  return internalData.afterVisibleList;
586
584
  };
587
585
  const handleData = (force) => {
588
- const { nodeMaps } = internalData;
589
586
  let fullList = internalData.afterVisibleList;
590
587
  if (force) {
591
588
  // 更新数据,处理筛选和排序
@@ -594,16 +591,56 @@ export default defineVxeComponent({
594
591
  fullList = handleTreeToList();
595
592
  }
596
593
  const treeList = fullList.slice(0);
597
- treeList.forEach((item, $index) => {
598
- const nodeid = getNodeId(item);
599
- const itemRest = nodeMaps[nodeid];
600
- if (itemRest) {
601
- itemRest.$index = $index;
602
- }
603
- });
604
594
  reactData.treeList = treeList;
605
595
  };
606
- const triggerSearchEvent = XEUtils.debounce(() => handleData(true), 350, { trailing: true });
596
+ /**
597
+ * 获取第一个拥有子节点的节点
598
+ */
599
+ function handleHasChildNodeIds(treeList, type) {
600
+ const childrenField = computeChildrenField.value;
601
+ const mapChildrenField = computeMapChildrenField.value;
602
+ const treeOpts = computeTreeOpts.value;
603
+ const { transform } = treeOpts;
604
+ const childField = transform ? mapChildrenField : childrenField;
605
+ const nodeIds = [];
606
+ let currList = treeList;
607
+ while (currList.length) {
608
+ let targetNode = null;
609
+ for (const item of currList) {
610
+ const kids = item[childField];
611
+ if (XEUtils.isArray(kids) && kids.length > 0) {
612
+ targetNode = item;
613
+ break;
614
+ }
615
+ }
616
+ if (targetNode) {
617
+ nodeIds.push(getNodeId(targetNode));
618
+ currList = targetNode[childField];
619
+ }
620
+ else {
621
+ const endNode = XEUtils[type](currList);
622
+ nodeIds.push(getNodeId(endNode));
623
+ break;
624
+ }
625
+ }
626
+ return nodeIds;
627
+ }
628
+ const triggerSearchEvent = XEUtils.debounce(() => {
629
+ handleData(true);
630
+ updateModelChecked();
631
+ const filterOpts = computeFilterOpts.value;
632
+ const { autoExpandMode } = filterOpts;
633
+ const { afterTreeList } = internalData;
634
+ // 默认展开第
635
+ if (autoExpandMode === 'first' || autoExpandMode === 'last') {
636
+ const stItems = handleHasChildNodeIds(afterTreeList, autoExpandMode);
637
+ reactData.currentItems = stItems;
638
+ }
639
+ else {
640
+ handleCurrentItems();
641
+ }
642
+ updateCurrentChunk();
643
+ }, 350, { trailing: true });
607
644
  const loadData = (list) => {
608
645
  const treeOpts = computeTreeOpts.value;
609
646
  const keyField = computeKeyField.value;
@@ -630,17 +667,20 @@ export default defineVxeComponent({
630
667
  };
631
668
  const updateCurrentChunk = () => {
632
669
  const { currentItems } = reactData;
633
- const { treeFullData } = internalData;
670
+ const { afterTreeList } = internalData;
634
671
  const childrenField = computeChildrenField.value;
635
- const currentCunkList = [treeFullData];
672
+ const mapChildrenField = computeMapChildrenField.value;
673
+ const treeOpts = computeTreeOpts.value;
674
+ const { transform } = treeOpts;
675
+ const currentCunkList = [afterTreeList];
636
676
  if (currentItems.length) {
637
677
  let chunkIndex = 0;
638
678
  let stNodeid = currentItems[chunkIndex];
639
- let optList = treeFullData;
679
+ let optList = afterTreeList;
640
680
  while (stNodeid && optList && optList.length) {
641
681
  stNodeid = currentItems[chunkIndex++];
642
682
  const currOption = optList.find(item => stNodeid === getNodeId(item));
643
- optList = currOption ? currOption[childrenField] : [];
683
+ optList = currOption ? currOption[transform ? mapChildrenField : childrenField] : [];
644
684
  if (!optList || !optList.length) {
645
685
  break;
646
686
  }
@@ -650,7 +690,7 @@ export default defineVxeComponent({
650
690
  reactData.currentCunkList = currentCunkList;
651
691
  };
652
692
  const handleCurrentItems = () => {
653
- const { treeFullData } = internalData;
693
+ const { afterTreeList } = internalData;
654
694
  const selectVals = computeSelectVals.value;
655
695
  const childrenField = computeChildrenField.value;
656
696
  const mapChildrenField = computeMapChildrenField.value;
@@ -660,7 +700,7 @@ export default defineVxeComponent({
660
700
  const expandedMaps = {};
661
701
  if (selectVals.length) {
662
702
  const lastVal = enNodeValue(XEUtils.last(selectVals));
663
- const stRest = XEUtils.findTree(treeFullData, (item) => lastVal === getNodeId(item), { children: transform ? mapChildrenField : childrenField });
703
+ const stRest = XEUtils.findTree(afterTreeList, (item) => lastVal === getNodeId(item), { children: transform ? mapChildrenField : childrenField });
664
704
  if (stRest) {
665
705
  const { nodes } = stRest;
666
706
  nodes.forEach(item => {
@@ -766,10 +806,11 @@ export default defineVxeComponent({
766
806
  return { checkNodeKeys: checkKeys, checkNodes };
767
807
  });
768
808
  };
769
- const clearCheckboxNode = () => {
809
+ const clearSelectedNode = () => {
770
810
  internalData.indeterminateRowMaps = {};
771
811
  internalData.selectCheckboxMaps = {};
772
812
  reactData.updateCheckboxFlag++;
813
+ reactData.selectRadioKey = null;
773
814
  updateCheckboxStatus();
774
815
  return nextTick().then(() => {
775
816
  return { checkNodeKeys: [], checkNodes: [] };
@@ -811,7 +852,7 @@ export default defineVxeComponent({
811
852
  const { $event } = params;
812
853
  const { multiple, checkedClosable } = props;
813
854
  const value = multiple ? [] : null;
814
- clearCheckboxNode().then(() => {
855
+ clearSelectedNode().then(() => {
815
856
  if (checkedClosable) {
816
857
  hideOptionPanel($event);
817
858
  }
@@ -893,9 +934,12 @@ export default defineVxeComponent({
893
934
  const { nodeMaps } = internalData;
894
935
  const radioOpts = computeRadioOpts.value;
895
936
  const childrenField = computeChildrenField.value;
937
+ const treeOpts = computeTreeOpts.value;
938
+ const { transform } = treeOpts;
939
+ const mapChildrenField = computeMapChildrenField.value;
896
940
  const { checkMode, checkMethod } = radioOpts;
897
941
  const nodeid = getNodeId(node);
898
- const childList = node[childrenField];
942
+ const childList = node[transform ? mapChildrenField : childrenField];
899
943
  const isExistChild = childList && childList.length > 0;
900
944
  const nodeItem = nodeMaps[nodeid] || {};
901
945
  const nLevel = nodeItem.level;
@@ -1055,7 +1099,7 @@ export default defineVxeComponent({
1055
1099
  const childRowList = [];
1056
1100
  XEUtils.eachTree(afterTreeList, (node) => {
1057
1101
  const nodeid = getNodeId(node);
1058
- const childList = node[childrenField];
1102
+ const childList = node[transform ? mapChildrenField : childrenField];
1059
1103
  if (childList && childList.length && !childRowMaps[nodeid]) {
1060
1104
  childRowMaps[nodeid] = 1;
1061
1105
  childRowList.unshift([node, nodeid, childList]);
@@ -1159,7 +1203,7 @@ export default defineVxeComponent({
1159
1203
  const treeOpts = computeTreeOpts.value;
1160
1204
  const { transform } = treeOpts;
1161
1205
  const nodeid = getNodeId(node);
1162
- const childList = node[childrenField];
1206
+ const childList = node[transform ? mapChildrenField : childrenField];
1163
1207
  const isExistChild = childList && childList.length > 0;
1164
1208
  const nodeItem = nodeMaps[nodeid] || {};
1165
1209
  const nLevel = nodeItem.level;
@@ -1405,11 +1449,12 @@ export default defineVxeComponent({
1405
1449
  const { currentNode, selectRadioKey, updateCheckboxFlag, updateExpandedFlag } = reactData;
1406
1450
  const { nodeMaps, selectCheckboxMaps, indeterminateRowMaps, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
1407
1451
  const treeOpts = computeTreeOpts.value;
1408
- const { lazy, iconLoaded, iconOpen, iconClose } = treeOpts;
1452
+ const { lazy, transform, iconLoaded, iconOpen, iconClose } = treeOpts;
1409
1453
  const childrenField = computeChildrenField.value;
1454
+ const mapChildrenField = computeMapChildrenField.value;
1410
1455
  const labelField = computeLabelField.value;
1411
1456
  const hasChildField = computeHasChildField.value;
1412
- const childList = node[childrenField];
1457
+ const childList = node[transform ? mapChildrenField : childrenField];
1413
1458
  const isExistChild = childList && childList.length > 0;
1414
1459
  const iconSlot = slots.icon;
1415
1460
  const titleSlot = slots.title;
@@ -1591,7 +1636,7 @@ export default defineVxeComponent({
1591
1636
  h('div', {
1592
1637
  class: 'vxe-tree-select--header-button'
1593
1638
  }, [
1594
- showCheckedButton && showClearButton
1639
+ (showCheckedButton && multiple) || showClearButton
1595
1640
  ? h('div', {
1596
1641
  class: 'vxe-tree-select--selected-btns'
1597
1642
  }, [
@@ -1642,7 +1687,7 @@ export default defineVxeComponent({
1642
1687
  })
1643
1688
  ])
1644
1689
  ]),
1645
- footerSlot || showTotalButton || (showCloseButton && multiple)
1690
+ footerSlot || showTotalButton || showCloseButton
1646
1691
  ? h('div', {
1647
1692
  class: 'vxe-cascader--panel-footer'
1648
1693
  }, footerSlot
@@ -1656,7 +1701,7 @@ export default defineVxeComponent({
1656
1701
  class: 'vxe-cascader--total-btns'
1657
1702
  }, getI18n('vxe.treeSelect.total', [selectVals.length]))
1658
1703
  : renderEmptyElement($xeCascader),
1659
- showCloseButton && multiple
1704
+ showCloseButton
1660
1705
  ? h('div', {
1661
1706
  class: 'vxe-cascader--oper-btns'
1662
1707
  }, [
@@ -1698,9 +1743,6 @@ export default defineVxeComponent({
1698
1743
  });
1699
1744
  loadData(props.options || []);
1700
1745
  onMounted(() => {
1701
- if (props.filterable) {
1702
- errLog('vxe.error.notProp', ['filterable']);
1703
- }
1704
1746
  globalEvents.on($xeCascader, 'mousewheel', handleGlobalMousewheelEvent);
1705
1747
  globalEvents.on($xeCascader, 'mousedown', handleGlobalMousedownEvent);
1706
1748
  globalEvents.on($xeCascader, 'blur', handleGlobalBlurEvent);