bkui-vue 2.0.2-beta.4 → 2.0.2-beta.41
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.
- package/dist/cli.css +1 -0
- package/dist/index.cjs.js +132 -132
- package/dist/index.esm.js +15822 -14471
- package/dist/index.umd.js +132 -132
- package/dist/style.variable.css +1 -1
- package/lib/cascader/cascader.css +26 -24
- package/lib/cascader/cascader.d.ts +12 -0
- package/lib/cascader/cascader.less +78 -76
- package/lib/cascader/cascader.variable.css +26 -24
- package/lib/cascader/index.d.ts +26 -0
- package/lib/cascader/index.js +110 -60
- package/lib/checkbox/index.js +1 -1
- package/lib/color-picker/index.js +20 -16
- package/lib/components.d.ts +1 -2
- package/lib/components.js +1 -2
- package/lib/date-picker/index.js +53 -58
- package/lib/date-picker/panel/time.d.ts +1 -1
- package/lib/date-picker/utils.d.ts +5 -17
- package/lib/directives/index.js +17 -13
- package/lib/dropdown/dropdown.d.ts +1 -0
- package/lib/dropdown/index.d.ts +3 -0
- package/lib/dropdown/index.js +11 -6
- package/lib/form/form-item.d.ts +19 -0
- package/lib/form/form.css +16 -4
- package/lib/form/form.less +24 -6
- package/lib/form/form.variable.css +16 -4
- package/lib/form/index.d.ts +13 -0
- package/lib/form/index.js +33 -25
- package/lib/image/index.js +7 -10
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/input/index.d.ts +39 -20
- package/lib/input/index.js +25 -22
- package/lib/input/input.d.ts +30 -16
- package/lib/message/index.js +1 -1
- package/lib/modal/index.js +2 -1
- package/lib/pop-confirm/index.d.ts +600 -2
- package/lib/pop-confirm/index.js +20 -8
- package/lib/pop-confirm/pop-confirm.d.ts +297 -1
- package/lib/pop-confirm/props.d.ts +146 -0
- package/lib/popover/index.js +7 -10
- package/lib/search-select/index.d.ts +21 -3
- package/lib/search-select/index.js +62 -30
- package/lib/search-select/input.d.ts +3 -0
- package/lib/search-select/search-select.d.ts +7 -1
- package/lib/search-select/selected.d.ts +6 -0
- package/lib/select/index.d.ts +19 -0
- package/lib/select/index.js +15 -16
- package/lib/select/select.d.ts +10 -0
- package/lib/sideslider/index.js +3 -1
- package/lib/slider/index.js +2 -1
- package/lib/tab/index.js +7 -10
- package/lib/table/index.js +7 -15
- package/lib/tag-input/index.d.ts +3 -0
- package/lib/tag-input/index.js +35 -24
- package/lib/tag-input/tag-input.d.ts +1 -0
- package/lib/tree/constant.d.ts +2 -0
- package/lib/tree/index.d.ts +48 -0
- package/lib/tree/index.js +209 -59
- package/lib/tree/props.d.ts +20 -0
- package/lib/tree/tree.css +46 -0
- package/lib/tree/tree.d.ts +22 -0
- package/lib/tree/tree.less +57 -2
- package/lib/tree/tree.variable.css +46 -0
- package/lib/tree/use-node-action.d.ts +2 -2
- package/package.json +1 -1
- package/dist/style.css +0 -1
- package/lib/plugin-popover/index.d.ts +0 -27
- package/lib/plugin-popover/index.js +0 -65
- package/lib/plugins/index.d.ts +0 -1
- package/lib/plugins/index.js +0 -64
package/lib/tree/index.js
CHANGED
@@ -12,6 +12,7 @@ import * as __WEBPACK_EXTERNAL_MODULE_lodash_isElement_e6b2a6ce__ from "lodash/i
|
|
12
12
|
import * as __WEBPACK_EXTERNAL_MODULE_bkui_vue_lib_checkbox_13b1cb4a__ from "../checkbox";
|
13
13
|
import "../checkbox/checkbox.less";
|
14
14
|
import * as __WEBPACK_EXTERNAL_MODULE_bkui_vue_lib_icon_a97c79c3__ from "../icon";
|
15
|
+
import * as __WEBPACK_EXTERNAL_MODULE_lodash_throttle_a7b7506a__ from "lodash/throttle";
|
15
16
|
/******/ // The require scope
|
16
17
|
/******/ var __webpack_require__ = {};
|
17
18
|
/******/
|
@@ -168,6 +169,7 @@ function _defineProperty(obj, key, value) {
|
|
168
169
|
}
|
169
170
|
;// CONCATENATED MODULE: ../../packages/tree/src/constant.ts
|
170
171
|
|
172
|
+
var _TreeEmitEventsType;
|
171
173
|
/*
|
172
174
|
* Tencent is pleased to support the open source community by making
|
173
175
|
* 蓝鲸智云PaaS平台社区版 (BlueKing PaaS Community Edition) available.
|
@@ -200,6 +202,7 @@ var EVENTS;
|
|
200
202
|
EVENTS["NODE_COLLAPSE"] = "nodeCollapse";
|
201
203
|
EVENTS["NODE_DRAG_LEAVE"] = "nodeDragLeave";
|
202
204
|
EVENTS["NODE_DRAG_OVER"] = "nodeDragOver";
|
205
|
+
EVENTS["NODE_DRAG_SORT"] = "nodeDragSort";
|
203
206
|
EVENTS["NODE_DRAG_START"] = "nodeDragStart";
|
204
207
|
EVENTS["NODE_DROP"] = "nodeDrop";
|
205
208
|
EVENTS["NODE_ENTER_VIEW"] = "nodeEnterView";
|
@@ -209,7 +212,7 @@ var EVENTS;
|
|
209
212
|
var EMPTY = function EMPTY() {
|
210
213
|
return true;
|
211
214
|
};
|
212
|
-
var TreeEmitEventsType = _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(
|
215
|
+
var TreeEmitEventsType = (_TreeEmitEventsType = {}, _defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_TreeEmitEventsType, EVENTS.NODE_CLICK, EMPTY), EVENTS.NODE_COLLAPSE, EMPTY), EVENTS.NODE_EXPAND, EMPTY), EVENTS.NODE_CHECKED, EMPTY), EVENTS.NODE_DRAG_START, EMPTY), EVENTS.NODE_DRAG_OVER, EMPTY), EVENTS.NODE_DRAG_LEAVE, EMPTY), EVENTS.NODE_DRAG_SORT, EMPTY), EVENTS.NODE_DROP, EMPTY), EVENTS.NODE_ENTER_VIEW, EMPTY), _defineProperty(_TreeEmitEventsType, EVENTS.NODE_SELECTED, EMPTY));
|
213
216
|
/**
|
214
217
|
* 节点扩展属性
|
215
218
|
*/
|
@@ -338,7 +341,12 @@ var treeProps = {
|
|
338
341
|
* 可选值:once 只在初始化是执行一次
|
339
342
|
* every 每次数据更新都执行
|
340
343
|
*/
|
341
|
-
deepAutoOpen: (0,external_vue_types_namespaceObject.toType)('columnType', {}).def(ColumnTypeEnum.ONCE)
|
344
|
+
deepAutoOpen: (0,external_vue_types_namespaceObject.toType)('columnType', {}).def(ColumnTypeEnum.ONCE),
|
345
|
+
/**
|
346
|
+
* 触发异步加载的时机
|
347
|
+
* 可选值:'expand', 'click', 'checked'
|
348
|
+
*/
|
349
|
+
trigger: shared_namespaceObject.PropTypes.arrayOf(shared_namespaceObject.PropTypes.oneOf(['expand', 'click', 'checked'])).def(null)
|
342
350
|
}),
|
343
351
|
/**
|
344
352
|
* 每个节点偏移左侧距离
|
@@ -376,10 +384,23 @@ var treeProps = {
|
|
376
384
|
draggable: shared_namespaceObject.PropTypes.bool.def(false),
|
377
385
|
disableDrag: shared_namespaceObject.PropTypes.func,
|
378
386
|
disableDrop: shared_namespaceObject.PropTypes.func,
|
387
|
+
/**
|
388
|
+
* 拖拽阈值
|
389
|
+
* 用于判断拖拽时鼠标位置与节点的距离
|
390
|
+
* 当鼠标位置与节点的距离大于此值时,才会触发拖拽
|
391
|
+
*/
|
392
|
+
dragThreshold: shared_namespaceObject.PropTypes.number.def(0.2),
|
379
393
|
/**
|
380
394
|
* 节点拖拽时可交换位置(开启拖拽可交换位置后将不支持改变层级)
|
381
395
|
*/
|
382
396
|
dragSort: shared_namespaceObject.PropTypes.bool.def(false),
|
397
|
+
/**
|
398
|
+
* 拖拽排序模式
|
399
|
+
* - any: 允许拖拽到任意位置
|
400
|
+
* - next: 只允许拖拽到同级节点的前后位置
|
401
|
+
* 默认 any
|
402
|
+
*/
|
403
|
+
dragSortMode: shared_namespaceObject.PropTypes.oneOf(['any', 'next']).def('any'),
|
383
404
|
/**
|
384
405
|
* 节点是否可以选中
|
385
406
|
*/
|
@@ -835,10 +856,14 @@ const icon_namespaceObject = icon_x({ ["DownShape"]: () => __WEBPACK_EXTERNAL_MO
|
|
835
856
|
});
|
836
857
|
};
|
837
858
|
var getParentNodeData = function getParentNodeData(node) {
|
838
|
-
|
859
|
+
var target = node;
|
860
|
+
if (typeof target === 'string') {
|
861
|
+
target = getSourceNodeByUID(target);
|
862
|
+
}
|
863
|
+
if (isRootNode(target)) {
|
839
864
|
return _defineProperty({}, props.children, props.data);
|
840
865
|
}
|
841
|
-
return getParentNode(
|
866
|
+
return getParentNode(target);
|
842
867
|
};
|
843
868
|
/**
|
844
869
|
* 处理scoped slot 透传数据
|
@@ -1460,6 +1485,14 @@ var use_node_action_this = undefined;
|
|
1460
1485
|
deepUpdateChildNode(chid, attr, value);
|
1461
1486
|
});
|
1462
1487
|
};
|
1488
|
+
var isRemoteFnExec = function isRemoteFnExec(event) {
|
1489
|
+
var _props$async;
|
1490
|
+
if ((_props$async = props.async) !== null && _props$async !== void 0 && (_props$async = _props$async.trigger) !== null && _props$async !== void 0 && _props$async.length) {
|
1491
|
+
var _props$async2;
|
1492
|
+
return (_props$async2 = props.async) === null || _props$async2 === void 0 ? void 0 : _props$async2.trigger.includes(event);
|
1493
|
+
}
|
1494
|
+
return true;
|
1495
|
+
};
|
1463
1496
|
var handleNodeItemCheckboxChange = function handleNodeItemCheckboxChange(item, value, event) {
|
1464
1497
|
event === null || event === void 0 || event.preventDefault();
|
1465
1498
|
event === null || event === void 0 || event.stopImmediatePropagation();
|
@@ -1477,7 +1510,7 @@ var use_node_action_this = undefined;
|
|
1477
1510
|
}), flatData.data.filter(function (t) {
|
1478
1511
|
return isIndeterminate(t);
|
1479
1512
|
}));
|
1480
|
-
handleNodeContentClick(item, event);
|
1513
|
+
handleNodeContentClick(item, event, 'checked');
|
1481
1514
|
};
|
1482
1515
|
var isIndeterminate = function isIndeterminate(item) {
|
1483
1516
|
return isNodeChecked(item) && getNodeAttr(item, NODE_ATTRIBUTES.IS_INDETERMINATE);
|
@@ -1487,6 +1520,7 @@ var use_node_action_this = undefined;
|
|
1487
1520
|
return null;
|
1488
1521
|
}
|
1489
1522
|
return (0,external_vue_namespaceObject.createVNode)("span", {
|
1523
|
+
"class": "node-check-box",
|
1490
1524
|
"onClick": handleNodeCheckboxClick
|
1491
1525
|
}, [(0,external_vue_namespaceObject.createVNode)(checkbox_namespaceObject["default"], {
|
1492
1526
|
"indeterminate": isIndeterminate(item),
|
@@ -1586,25 +1620,27 @@ var use_node_action_this = undefined;
|
|
1586
1620
|
* 节点点击
|
1587
1621
|
* @param item
|
1588
1622
|
*/
|
1589
|
-
var handleTreeNodeClick = function handleTreeNodeClick(item, e) {
|
1623
|
+
var handleTreeNodeClick = function handleTreeNodeClick(item, e, event) {
|
1590
1624
|
var isOpen = isItemOpen(item);
|
1591
1625
|
if (isOpen) {
|
1592
1626
|
setNodeOpened(item, false, e, true);
|
1593
1627
|
return;
|
1594
1628
|
}
|
1595
|
-
|
1596
|
-
|
1597
|
-
|
1598
|
-
|
1599
|
-
|
1600
|
-
|
1601
|
-
|
1602
|
-
|
1603
|
-
|
1604
|
-
|
1605
|
-
|
1606
|
-
|
1607
|
-
|
1629
|
+
if (isRemoteFnExec(event)) {
|
1630
|
+
/** 如果是异步请求加载 */
|
1631
|
+
asyncNodeClick(item)["finally"](function () {
|
1632
|
+
if (getNodeAttr(item, NODE_ATTRIBUTES.IS_LOADING)) {
|
1633
|
+
registerNextLoop('setNodeOpenedAfterLoading', {
|
1634
|
+
type: 'once',
|
1635
|
+
fn: function fn() {
|
1636
|
+
return setNodeOpened(item, true, e, true);
|
1637
|
+
}
|
1638
|
+
});
|
1639
|
+
} else {
|
1640
|
+
setNodeOpened(item, true, e, true);
|
1641
|
+
}
|
1642
|
+
});
|
1643
|
+
}
|
1608
1644
|
};
|
1609
1645
|
/**
|
1610
1646
|
* 点击树形节点展开、收起图标处理事件
|
@@ -1615,7 +1651,7 @@ var use_node_action_this = undefined;
|
|
1615
1651
|
e.stopImmediatePropagation();
|
1616
1652
|
e.stopPropagation();
|
1617
1653
|
e.preventDefault();
|
1618
|
-
handleTreeNodeClick(node, e);
|
1654
|
+
handleTreeNodeClick(node, e, 'expand');
|
1619
1655
|
};
|
1620
1656
|
/**
|
1621
1657
|
* 设置节点选中状态
|
@@ -1629,6 +1665,7 @@ var use_node_action_this = undefined;
|
|
1629
1665
|
var selected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
1630
1666
|
var autoOpen = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
1631
1667
|
var triggerEvent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
1668
|
+
var event = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
|
1632
1669
|
var nodeList = Array.isArray(nodes) ? nodes : [nodes];
|
1633
1670
|
if (!nodeList.length) {
|
1634
1671
|
return;
|
@@ -1673,12 +1710,14 @@ var use_node_action_this = undefined;
|
|
1673
1710
|
* 处理异步节点多层级展开选中
|
1674
1711
|
*/
|
1675
1712
|
if (getNodeAttr(resolvedItem, NODE_ATTRIBUTES.IS_ASYNC)) {
|
1676
|
-
|
1677
|
-
(
|
1678
|
-
|
1679
|
-
|
1713
|
+
if (isRemoteFnExec(event)) {
|
1714
|
+
asyncNodeClick(resolvedItem).then(function () {
|
1715
|
+
(0,external_vue_namespaceObject.nextTick)(function () {
|
1716
|
+
nodeList.shift();
|
1717
|
+
setSelect(nodeList, selected, autoOpen, triggerEvent, event);
|
1718
|
+
});
|
1680
1719
|
});
|
1681
|
-
}
|
1720
|
+
}
|
1682
1721
|
}
|
1683
1722
|
};
|
1684
1723
|
var resolveNodeAction = function resolveNodeAction(node) {
|
@@ -1699,19 +1738,19 @@ var use_node_action_this = undefined;
|
|
1699
1738
|
* 点击节点事件
|
1700
1739
|
* @param item
|
1701
1740
|
*/
|
1702
|
-
var handleNodeContentClick = function handleNodeContentClick(item, e) {
|
1741
|
+
var handleNodeContentClick = function handleNodeContentClick(item, e, event) {
|
1703
1742
|
var nodeActions = resolveNodeAction(item);
|
1704
1743
|
if (nodeActions.includes('selected')) {
|
1705
|
-
setSelect(item, true, true, true);
|
1744
|
+
setSelect(item, true, true, true, event);
|
1706
1745
|
}
|
1707
1746
|
if (nodeActions.includes('expand')) {
|
1708
1747
|
if (!isNodeOpened(item)) {
|
1709
|
-
handleTreeNodeClick(item, e);
|
1748
|
+
handleTreeNodeClick(item, e, event);
|
1710
1749
|
}
|
1711
1750
|
}
|
1712
1751
|
if (nodeActions.includes('collapse')) {
|
1713
1752
|
if (isNodeOpened(item)) {
|
1714
|
-
handleTreeNodeClick(item, e);
|
1753
|
+
handleTreeNodeClick(item, e, event);
|
1715
1754
|
}
|
1716
1755
|
}
|
1717
1756
|
if (nodeActions.includes('click')) {
|
@@ -1805,6 +1844,7 @@ var use_node_action_this = undefined;
|
|
1805
1844
|
var renderTreeNode = function renderTreeNode(item) {
|
1806
1845
|
var _ctx$slots$nodeAppend, _ctx$slots4;
|
1807
1846
|
var showTree = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
1847
|
+
var child = getActionIcon(item);
|
1808
1848
|
return (0,external_vue_namespaceObject.createVNode)("div", {
|
1809
1849
|
"key": getNodeId(item),
|
1810
1850
|
"class": getNodeRowClass(item, flatData.schema),
|
@@ -1813,14 +1853,14 @@ var use_node_action_this = undefined;
|
|
1813
1853
|
"style": getNodeItemStyle(item, props, flatData, showTree),
|
1814
1854
|
"class": getNodeItemClass(item, flatData.schema, props, showTree),
|
1815
1855
|
"onClick": function onClick(e) {
|
1816
|
-
return handleNodeContentClick(item, e);
|
1856
|
+
return handleNodeContentClick(item, e, 'click');
|
1817
1857
|
}
|
1818
1858
|
}, [(0,external_vue_namespaceObject.createVNode)("div", {
|
1819
|
-
"class": [resolveClassName('node-action')],
|
1859
|
+
"class": [resolveClassName('node-action'), child ? '' : 'empty-child'],
|
1820
1860
|
"onClick": function onClick(e) {
|
1821
1861
|
return handleNodeActionClick(e, item);
|
1822
1862
|
}
|
1823
|
-
}, [
|
1863
|
+
}, [child]), (0,external_vue_namespaceObject.createVNode)("div", {
|
1824
1864
|
"class": resolveClassName('node-content')
|
1825
1865
|
}, [[getCheckboxRender(item), getNodePrefixIcon(item)], (0,external_vue_namespaceObject.createVNode)("span", {
|
1826
1866
|
"class": resolveClassName('node-text')
|
@@ -1839,6 +1879,10 @@ var use_node_action_this = undefined;
|
|
1839
1879
|
isIndeterminate: isIndeterminate
|
1840
1880
|
};
|
1841
1881
|
});
|
1882
|
+
;// CONCATENATED MODULE: external "lodash/throttle"
|
1883
|
+
var throttle_x = y => { var x = {}; __webpack_require__.d(x, y); return x; }
|
1884
|
+
var throttle_y = x => () => x
|
1885
|
+
const throttle_namespaceObject = throttle_x({ ["default"]: () => __WEBPACK_EXTERNAL_MODULE_lodash_throttle_a7b7506a__["default"] });
|
1842
1886
|
;// CONCATENATED MODULE: ../../packages/tree/src/use-node-drag.tsx
|
1843
1887
|
var use_node_drag_this = undefined;
|
1844
1888
|
/*
|
@@ -1870,6 +1914,7 @@ var use_node_drag_this = undefined;
|
|
1870
1914
|
|
1871
1915
|
|
1872
1916
|
|
1917
|
+
|
1873
1918
|
/* harmony default export */ const use_node_drag = (function (props, ctx, root, flatData) {
|
1874
1919
|
var _useNodeAttribute = use_node_attribute(flatData, props),
|
1875
1920
|
getSourceNodeByUID = _useNodeAttribute.getSourceNodeByUID,
|
@@ -1877,8 +1922,8 @@ var use_node_drag_this = undefined;
|
|
1877
1922
|
getNodeParentIdById = _useNodeAttribute.getNodeParentIdById,
|
1878
1923
|
extendNodeAttr = _useNodeAttribute.extendNodeAttr,
|
1879
1924
|
getNodeAttrById = _useNodeAttribute.getNodeAttrById,
|
1880
|
-
|
1881
|
-
|
1925
|
+
isRootNode = _useNodeAttribute.isRootNode,
|
1926
|
+
setNodeAttrById = _useNodeAttribute.setNodeAttrById;
|
1882
1927
|
var _usePrefix = (0,config_provider_namespaceObject.usePrefix)(),
|
1883
1928
|
resolveClassName = _usePrefix.resolveClassName;
|
1884
1929
|
var isNeedCheckDraggable = (0,external_vue_namespaceObject.computed)(function () {
|
@@ -1887,7 +1932,10 @@ var use_node_drag_this = undefined;
|
|
1887
1932
|
var isNeedCheckDroppable = (0,external_vue_namespaceObject.computed)(function () {
|
1888
1933
|
return typeof props.disableDrop === 'function';
|
1889
1934
|
});
|
1935
|
+
var dragThreshold = props.dragThreshold || 0.2; // 新增配置项,默认值为 0.2
|
1890
1936
|
var dragNodeId = '';
|
1937
|
+
var draggedItem = null;
|
1938
|
+
var nodeRectMap = new WeakMap();
|
1891
1939
|
var getTargetTreeNode = function getTargetTreeNode(e) {
|
1892
1940
|
var target = e.target;
|
1893
1941
|
return target.closest('[data-tree-node]');
|
@@ -1897,6 +1945,14 @@ var use_node_drag_this = undefined;
|
|
1897
1945
|
var uid = targetNode === null || targetNode === void 0 || (_targetNode$dataset = targetNode.dataset) === null || _targetNode$dataset === void 0 ? void 0 : _targetNode$dataset.treeNode;
|
1898
1946
|
return getSourceNodeByUID(uid);
|
1899
1947
|
};
|
1948
|
+
var updateDropStyles = function updateDropStyles(targetNode, stylesToAdd, stylesToRemove) {
|
1949
|
+
stylesToRemove.forEach(function (style) {
|
1950
|
+
return targetNode.classList.remove(style);
|
1951
|
+
});
|
1952
|
+
stylesToAdd.forEach(function (style) {
|
1953
|
+
return targetNode.classList.add(style);
|
1954
|
+
});
|
1955
|
+
};
|
1900
1956
|
var handleTreeNodeMouseup = function handleTreeNodeMouseup(e) {
|
1901
1957
|
var targetNode = getTargetTreeNode(e);
|
1902
1958
|
targetNode.removeEventListener('mouseup', handleTreeNodeMouseup);
|
@@ -1911,10 +1967,37 @@ var use_node_drag_this = undefined;
|
|
1911
1967
|
targetNode.setAttribute('draggable', 'true');
|
1912
1968
|
targetNode.addEventListener('mouseup', handleTreeNodeMouseup);
|
1913
1969
|
};
|
1914
|
-
var
|
1970
|
+
var dropBefore = 'drop-before';
|
1971
|
+
var dropAfter = 'drop-after';
|
1972
|
+
var dropInner = 'drop-inner';
|
1973
|
+
var dragOverItem = null;
|
1974
|
+
var handleTreeNodeDragover = (0,throttle_namespaceObject["default"])(function (e) {
|
1915
1975
|
e.preventDefault();
|
1976
|
+
if (!draggedItem) return;
|
1916
1977
|
var targetNode = getTargetTreeNode(e);
|
1978
|
+
if (dragOverItem !== targetNode) {
|
1979
|
+
var _dragOverItem;
|
1980
|
+
(_dragOverItem = dragOverItem) === null || _dragOverItem === void 0 || _dragOverItem.classList.remove(dropBefore, dropAfter, dropInner);
|
1981
|
+
dragOverItem = targetNode;
|
1982
|
+
}
|
1917
1983
|
var data = extendNodeAttr(getNodeByTargetTreeNode(targetNode));
|
1984
|
+
// 如果目标节点不在缓存中,重新计算并缓存
|
1985
|
+
if (!nodeRectMap.has(targetNode)) {
|
1986
|
+
nodeRectMap.set(targetNode, targetNode.getBoundingClientRect());
|
1987
|
+
}
|
1988
|
+
var clientY = e.clientY;
|
1989
|
+
var _nodeRectMap$get = nodeRectMap.get(targetNode),
|
1990
|
+
top = _nodeRectMap$get.top,
|
1991
|
+
height = _nodeRectMap$get.height;
|
1992
|
+
var threshold = height * dragThreshold; // 使用配置项
|
1993
|
+
var offsetY = clientY - top;
|
1994
|
+
if (offsetY < threshold) {
|
1995
|
+
updateDropStyles(targetNode, [dropBefore], [dropAfter, dropInner]);
|
1996
|
+
} else if (offsetY > height - threshold) {
|
1997
|
+
updateDropStyles(targetNode, [dropAfter], [dropBefore, dropInner]);
|
1998
|
+
} else {
|
1999
|
+
updateDropStyles(targetNode, [dropInner], [dropBefore, dropAfter]);
|
2000
|
+
}
|
1918
2001
|
ctx.emit(EVENTS.NODE_DRAG_OVER, e, targetNode, data);
|
1919
2002
|
if (isNeedCheckDroppable.value && props !== null && props !== void 0 && props.disableDrop(data)) {
|
1920
2003
|
e.dataTransfer.effectAllowed = 'move';
|
@@ -1929,7 +2012,7 @@ var use_node_drag_this = undefined;
|
|
1929
2012
|
var transferEffect = isNodeSortable(sourceNodeId, targetNodeId) ? 'move' : 'none';
|
1930
2013
|
e.dataTransfer.effectAllowed = transferEffect;
|
1931
2014
|
e.dataTransfer.dropEffect = transferEffect;
|
1932
|
-
};
|
2015
|
+
});
|
1933
2016
|
var handleTreeNodeDragStart = function handleTreeNodeDragStart(e) {
|
1934
2017
|
e.dataTransfer.effectAllowed = 'move';
|
1935
2018
|
e.dataTransfer.dropEffect = 'move';
|
@@ -1937,49 +2020,104 @@ var use_node_drag_this = undefined;
|
|
1937
2020
|
e.dataTransfer.setData('text/plain', '');
|
1938
2021
|
var nodeId = targetNode.getAttribute('data-tree-node');
|
1939
2022
|
dragNodeId = nodeId;
|
2023
|
+
draggedItem = targetNode;
|
1940
2024
|
e.dataTransfer.setData('node-id', nodeId);
|
1941
2025
|
ctx.emit(EVENTS.NODE_DRAG_START, e, targetNode);
|
1942
2026
|
};
|
1943
2027
|
var handleTreeNodeDrop = function handleTreeNodeDrop(e) {
|
2028
|
+
var _dragOverItem5;
|
1944
2029
|
/** firefox的drop事件必须调用preventDefault()和stopPropagation(), 否则会自动重定向 */
|
1945
2030
|
e.preventDefault();
|
1946
2031
|
e.stopPropagation();
|
1947
2032
|
var targetNode = getTargetTreeNode(e);
|
2033
|
+
if (!targetNode) return;
|
1948
2034
|
targetNode.classList.remove("".concat(resolveClassName('tree-drop-active')), "".concat(resolveClassName('tree-drop-disabled')));
|
1949
2035
|
var data = extendNodeAttr(getNodeByTargetTreeNode(targetNode));
|
1950
2036
|
if (isNeedCheckDroppable.value && props.disableDrop(data)) {
|
1951
2037
|
return;
|
1952
2038
|
}
|
1953
|
-
var sourceNodeId = dragNodeId;
|
2039
|
+
var sourceNodeId = dragNodeId;
|
1954
2040
|
var targetNodeId = targetNode.getAttribute('data-tree-node');
|
1955
|
-
|
1956
|
-
|
2041
|
+
if (sourceNodeId !== targetNodeId) {
|
2042
|
+
var _dragOverItem2, _dragOverItem3, _dragOverItem4;
|
2043
|
+
if ((_dragOverItem2 = dragOverItem) !== null && _dragOverItem2 !== void 0 && _dragOverItem2.classList.contains(dropInner)) {
|
2044
|
+
Reflect.apply(dragAsChildNode, use_node_drag_this, [sourceNodeId, targetNodeId]);
|
2045
|
+
} else if ((_dragOverItem3 = dragOverItem) !== null && _dragOverItem3 !== void 0 && _dragOverItem3.classList.contains(dropAfter) || (_dragOverItem4 = dragOverItem) !== null && _dragOverItem4 !== void 0 && _dragOverItem4.classList.contains(dropBefore)) {
|
2046
|
+
Reflect.apply(dragSortData, use_node_drag_this, [sourceNodeId, targetNodeId]);
|
2047
|
+
}
|
2048
|
+
ctx.emit(EVENTS.NODE_DROP, e, targetNode, data);
|
2049
|
+
}
|
2050
|
+
nodeRectMap = new WeakMap();
|
2051
|
+
(_dragOverItem5 = dragOverItem) === null || _dragOverItem5 === void 0 || _dragOverItem5.classList.remove(dropAfter, dropBefore, dropInner);
|
2052
|
+
dragOverItem = null;
|
1957
2053
|
};
|
1958
2054
|
var isNodeSortable = function isNodeSortable(sourceId, targetId) {
|
1959
|
-
|
1960
|
-
var targetPath = getNodePathById(targetId);
|
1961
|
-
// if (!sourcePath || targetPath) {
|
1962
|
-
// return false;
|
1963
|
-
// }
|
1964
|
-
var sourceParentNodeId = getNodeParentIdById(sourceId);
|
1965
|
-
var targetParentNode = getNodeParentIdById(targetId);
|
1966
|
-
if (sourceParentNodeId === targetParentNode) {
|
1967
|
-
return true;
|
1968
|
-
}
|
1969
|
-
return sourcePath.indexOf(targetPath) === -1 && targetPath.indexOf(sourcePath) === -1;
|
2055
|
+
return sourceId !== targetId;
|
1970
2056
|
};
|
1971
2057
|
var dragSortData = function dragSortData(sourceId, targetId) {
|
1972
|
-
|
2058
|
+
var _dragOverItem6, _dragOverItem7;
|
2059
|
+
if (!props.dragSort || !isNodeSortable(sourceId, targetId)) {
|
1973
2060
|
return;
|
1974
2061
|
}
|
1975
|
-
var sourceNodeData =
|
1976
|
-
var targetNodeData =
|
2062
|
+
var sourceNodeData = getSourceNodeByUID(sourceId);
|
2063
|
+
var targetNodeData = getSourceNodeByUID(targetId);
|
2064
|
+
if (!sourceNodeData || !targetNodeData) return;
|
1977
2065
|
var sourceNodeParent = getParentNodeData(sourceId);
|
1978
2066
|
var targetNodeParent = getParentNodeData(targetId);
|
1979
|
-
|
1980
|
-
|
1981
|
-
|
1982
|
-
|
2067
|
+
if (!sourceNodeParent || !targetNodeParent) return;
|
2068
|
+
// 只允许同父节点下排序
|
2069
|
+
if (props.dragSortMode === 'next') {
|
2070
|
+
if (sourceNodeParent !== targetNodeParent) return;
|
2071
|
+
}
|
2072
|
+
var childrenKey = props.children;
|
2073
|
+
var sourceSiblings = sourceNodeParent[childrenKey];
|
2074
|
+
var targetSlibings = targetNodeParent[childrenKey];
|
2075
|
+
if (!Array.isArray(sourceSiblings)) return;
|
2076
|
+
var sourceNodeIndex = sourceSiblings.findIndex(function (item) {
|
2077
|
+
return item === sourceNodeData;
|
2078
|
+
});
|
2079
|
+
var targetNodeIndex = targetSlibings.findIndex(function (item) {
|
2080
|
+
return item === targetNodeData;
|
2081
|
+
});
|
2082
|
+
if (sourceNodeIndex === -1 || targetNodeIndex === -1) return;
|
2083
|
+
// 先移除源节点
|
2084
|
+
sourceSiblings.splice(sourceNodeIndex, 1);
|
2085
|
+
// 计算插入位置
|
2086
|
+
if ((_dragOverItem6 = dragOverItem) !== null && _dragOverItem6 !== void 0 && _dragOverItem6.classList.contains(dropAfter)) {
|
2087
|
+
// 如果源节点在目标节点前面,移除后 targetNodeIndex 需要减 1
|
2088
|
+
if (sourceNodeIndex < targetNodeIndex) {
|
2089
|
+
targetNodeIndex = targetNodeIndex - 1;
|
2090
|
+
}
|
2091
|
+
targetNodeIndex = targetNodeIndex + 1;
|
2092
|
+
} else if ((_dragOverItem7 = dragOverItem) !== null && _dragOverItem7 !== void 0 && _dragOverItem7.classList.contains(dropBefore)) {
|
2093
|
+
// 如果源节点在目标节点后面,移除后 targetNodeIndex 不变
|
2094
|
+
if (sourceNodeIndex > targetNodeIndex) {
|
2095
|
+
// do nothing
|
2096
|
+
}
|
2097
|
+
}
|
2098
|
+
// 插入节点
|
2099
|
+
targetSlibings.splice(targetNodeIndex, 0, sourceNodeData);
|
2100
|
+
// 更新所有兄弟节点的 INDEX
|
2101
|
+
targetSlibings.forEach(function (item, idx) {
|
2102
|
+
var nodeId = getNodeAttrById(item[NODE_ATTRIBUTES.UUID], NODE_ATTRIBUTES.UUID) || item[NODE_ATTRIBUTES.UUID];
|
2103
|
+
if (nodeId) {
|
2104
|
+
setNodeAttrById(nodeId, NODE_ATTRIBUTES.INDEX, idx);
|
2105
|
+
}
|
2106
|
+
});
|
2107
|
+
sourceSiblings.forEach(function (item, idx) {
|
2108
|
+
var nodeId = getNodeAttrById(item[NODE_ATTRIBUTES.UUID], NODE_ATTRIBUTES.UUID) || item[NODE_ATTRIBUTES.UUID];
|
2109
|
+
if (nodeId) {
|
2110
|
+
setNodeAttrById(nodeId, NODE_ATTRIBUTES.INDEX, idx);
|
2111
|
+
}
|
2112
|
+
});
|
2113
|
+
// 触发更新
|
2114
|
+
ctx.emit(EVENTS.NODE_DRAG_SORT, {
|
2115
|
+
sourceNode: sourceNodeData,
|
2116
|
+
targetNode: targetNodeData,
|
2117
|
+
sourceIndex: sourceNodeIndex,
|
2118
|
+
targetIndex: targetNodeIndex,
|
2119
|
+
targetSlibings: targetSlibings
|
2120
|
+
});
|
1983
2121
|
};
|
1984
2122
|
var dragAsChildNode = function dragAsChildNode(sourceNodeId, targetNodeId) {
|
1985
2123
|
var sourceNodeData = getSourceNodeByUID(sourceNodeId);
|
@@ -2004,11 +2142,16 @@ var use_node_drag_this = undefined;
|
|
2004
2142
|
var handleTreeNodeDragLeave = function handleTreeNodeDragLeave(e) {
|
2005
2143
|
e.preventDefault();
|
2006
2144
|
var targetNode = getTargetTreeNode(e);
|
2145
|
+
// 移除目标节点的缓存
|
2146
|
+
if (nodeRectMap.has(targetNode)) {
|
2147
|
+
nodeRectMap["delete"](targetNode);
|
2148
|
+
}
|
2007
2149
|
targetNode.classList.remove("".concat(resolveClassName('tree-drop-active')), "".concat(resolveClassName('tree-drop-disabled')));
|
2150
|
+
targetNode.classList.remove(dropAfter, dropBefore, dropInner);
|
2008
2151
|
ctx.emit(EVENTS.NODE_DRAG_LEAVE, e, targetNode);
|
2009
2152
|
};
|
2010
2153
|
(0,external_vue_namespaceObject.onMounted)(function () {
|
2011
|
-
if (props.draggable && root.value) {
|
2154
|
+
if ((props.draggable || props.dragSort) && root.value) {
|
2012
2155
|
var rootTree = root.value.$el;
|
2013
2156
|
rootTree.addEventListener('mousedown', handleTreeNodeMousedown);
|
2014
2157
|
rootTree.addEventListener('dragstart', handleTreeNodeDragStart);
|
@@ -2018,7 +2161,7 @@ var use_node_drag_this = undefined;
|
|
2018
2161
|
}
|
2019
2162
|
});
|
2020
2163
|
(0,external_vue_namespaceObject.onUnmounted)(function () {
|
2021
|
-
if (props.draggable && root.value) {
|
2164
|
+
if ((props.draggable || props.dragSort) && root.value) {
|
2022
2165
|
var rootTree = root.value.$el;
|
2023
2166
|
rootTree.removeEventListener('mousedown', handleTreeNodeMousedown);
|
2024
2167
|
rootTree.removeEventListener('dragstart', handleTreeNodeDragStart);
|
@@ -2650,6 +2793,7 @@ var use_tree_init_this = undefined;
|
|
2650
2793
|
getNodePath = _useNodeAttribute.getNodePath,
|
2651
2794
|
getNodeId = _useNodeAttribute.getNodeId,
|
2652
2795
|
getNodeAttr = _useNodeAttribute.getNodeAttr,
|
2796
|
+
getNodeById = _useNodeAttribute.getNodeById,
|
2653
2797
|
getParentNode = _useNodeAttribute.getParentNode,
|
2654
2798
|
getIntersectionResponse = _useNodeAttribute.getIntersectionResponse;
|
2655
2799
|
var _useSearch = use_search(props),
|
@@ -2795,6 +2939,11 @@ var use_tree_init_this = undefined;
|
|
2795
2939
|
return;
|
2796
2940
|
}
|
2797
2941
|
};
|
2942
|
+
var setCheckedById = function setCheckedById(id) {
|
2943
|
+
var checked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
2944
|
+
var triggerEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
2945
|
+
setChecked(getNodeById(id), checked, triggerEvent);
|
2946
|
+
};
|
2798
2947
|
ctx.expose({
|
2799
2948
|
handleTreeNodeClick: handleTreeNodeClick,
|
2800
2949
|
isNodeChecked: isNodeChecked,
|
@@ -2804,6 +2953,7 @@ var use_tree_init_this = undefined;
|
|
2804
2953
|
hasChildNode: hasChildNode,
|
2805
2954
|
setOpen: setOpen,
|
2806
2955
|
setChecked: setChecked,
|
2956
|
+
setCheckedById: setCheckedById,
|
2807
2957
|
setNodeAction: setNodeAction,
|
2808
2958
|
setNodeOpened: setOpen,
|
2809
2959
|
setSelect: setSelect,
|
package/lib/tree/props.d.ts
CHANGED
@@ -132,6 +132,16 @@ export declare const treeProps: {
|
|
132
132
|
disableDrop: import("vue-types").VueTypeValidableDef<(...args: any[]) => any> & {
|
133
133
|
default: (...args: any[]) => any;
|
134
134
|
};
|
135
|
+
/**
|
136
|
+
* 拖拽阈值
|
137
|
+
* 用于判断拖拽时鼠标位置与节点的距离
|
138
|
+
* 当鼠标位置与节点的距离大于此值时,才会触发拖拽
|
139
|
+
*/
|
140
|
+
dragThreshold: import("vue-types").VueTypeValidableDef<number> & {
|
141
|
+
default: number;
|
142
|
+
} & {
|
143
|
+
default: number;
|
144
|
+
};
|
135
145
|
/**
|
136
146
|
* 节点拖拽时可交换位置(开启拖拽可交换位置后将不支持改变层级)
|
137
147
|
*/
|
@@ -140,6 +150,15 @@ export declare const treeProps: {
|
|
140
150
|
} & {
|
141
151
|
default: boolean;
|
142
152
|
};
|
153
|
+
/**
|
154
|
+
* 拖拽排序模式
|
155
|
+
* - any: 允许拖拽到任意位置
|
156
|
+
* - next: 只允许拖拽到同级节点的前后位置
|
157
|
+
* 默认 any
|
158
|
+
*/
|
159
|
+
dragSortMode: import("vue-types").VueTypeDef<string> & {
|
160
|
+
default: string;
|
161
|
+
};
|
143
162
|
/**
|
144
163
|
* 节点是否可以选中
|
145
164
|
*/
|
@@ -240,6 +259,7 @@ type AsyncOption = {
|
|
240
259
|
callback: (item: any, cb: any) => Promise<VNode | string>;
|
241
260
|
cache: boolean;
|
242
261
|
deepAutoOpen?: string;
|
262
|
+
trigger?: string[];
|
243
263
|
};
|
244
264
|
export type IIntersectionObserver = {
|
245
265
|
enabled: boolean;
|
package/lib/tree/tree.css
CHANGED
@@ -257,13 +257,33 @@
|
|
257
257
|
}
|
258
258
|
.bk-tree {
|
259
259
|
font-size: 14px;
|
260
|
+
position: relative;
|
260
261
|
}
|
261
262
|
.bk-tree .bk-node-row {
|
262
263
|
padding-left: calc(var(--offset-left));
|
264
|
+
position: relative;
|
263
265
|
}
|
264
266
|
.bk-tree .bk-node-row.is-selected {
|
265
267
|
background-color: #ebf2ff;
|
266
268
|
}
|
269
|
+
.bk-tree .bk-node-row.drop-before::before {
|
270
|
+
content: '';
|
271
|
+
position: absolute;
|
272
|
+
top: 0;
|
273
|
+
left: 0;
|
274
|
+
right: 0;
|
275
|
+
height: 1px;
|
276
|
+
background-color: #2196F3;
|
277
|
+
}
|
278
|
+
.bk-tree .bk-node-row.drop-after::before {
|
279
|
+
content: '';
|
280
|
+
position: absolute;
|
281
|
+
bottom: 0;
|
282
|
+
left: 0;
|
283
|
+
right: 0;
|
284
|
+
height: 1px;
|
285
|
+
background-color: #2196F3;
|
286
|
+
}
|
267
287
|
.bk-tree-node {
|
268
288
|
position: relative;
|
269
289
|
display: flex;
|
@@ -276,6 +296,20 @@
|
|
276
296
|
.bk-tree-node:not(.is-root) {
|
277
297
|
margin-left: calc(var(--depth)*var(--indent));
|
278
298
|
}
|
299
|
+
.bk-tree-node:not(.is-root).level-line .bk-node-action.empty-child {
|
300
|
+
position: relative;
|
301
|
+
}
|
302
|
+
.bk-tree-node:not(.is-root).level-line .bk-node-action.empty-child::before {
|
303
|
+
position: absolute;
|
304
|
+
top: calc(50% + 1px);
|
305
|
+
left: 0;
|
306
|
+
right: 0;
|
307
|
+
z-index: 1;
|
308
|
+
height: 0;
|
309
|
+
pointer-events: none;
|
310
|
+
border-bottom: var(--level-line);
|
311
|
+
content: '';
|
312
|
+
}
|
279
313
|
.bk-tree-node:not(.is-root).level-line::before {
|
280
314
|
position: absolute;
|
281
315
|
top: calc(50% + 1px);
|
@@ -309,6 +343,7 @@
|
|
309
343
|
.bk-tree-node .bk-node-action {
|
310
344
|
margin-right: 6px;
|
311
345
|
color: #979ba5;
|
346
|
+
min-width: 14px;
|
312
347
|
}
|
313
348
|
.bk-tree-node .bk-tree-icon {
|
314
349
|
margin: 0 6px 0 4px;
|
@@ -319,6 +354,9 @@
|
|
319
354
|
align-items: center;
|
320
355
|
min-width: 0;
|
321
356
|
}
|
357
|
+
.bk-tree-node .bk-node-content .node-check-box {
|
358
|
+
display: inline-flex;
|
359
|
+
}
|
322
360
|
.bk-tree-node .bk-node-content .bk-checkbox {
|
323
361
|
margin: 0;
|
324
362
|
}
|
@@ -340,3 +378,11 @@
|
|
340
378
|
.bk-tree-drop-disabled .bk-tree-node {
|
341
379
|
cursor: no-drop;
|
342
380
|
}
|
381
|
+
.bk-tree .insert-line {
|
382
|
+
position: absolute;
|
383
|
+
height: 2px;
|
384
|
+
background: #2196F3;
|
385
|
+
display: none;
|
386
|
+
pointer-events: none;
|
387
|
+
z-index: 999;
|
388
|
+
}
|