bkui-vue 2.0.2-beta.84 → 2.0.2-beta.86

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/lib/index.js CHANGED
@@ -3,5 +3,5 @@ export * from './hooks';
3
3
  export { default } from './preset';
4
4
  export * from './config-provider';
5
5
  export * from './directives';
6
- export const version = "2.0.2-beta.84";
6
+ export const version = "2.0.2-beta.86";
7
7
  window.__bkui_vue_version__ = version;
@@ -4817,6 +4817,8 @@ var popContainerId = "id_".concat(esm_browser_v4());
4817
4817
  updateBoundary();
4818
4818
  updatePopover(null, props);
4819
4819
  };
4820
+ // 监听父元素(Modal/Dialog)的可见性变化
4821
+ var parentVisibilityObserver = null;
4820
4822
  var onMountedFn = function onMountedFn() {
4821
4823
  if (props.disabled) {
4822
4824
  return;
@@ -4831,20 +4833,78 @@ var popContainerId = "id_".concat(esm_browser_v4());
4831
4833
  initPopInstance();
4832
4834
  document.body.addEventListener('fullscreenchange', handleFullscreenChange);
4833
4835
  document.addEventListener('click', handleClickOutside);
4836
+ // 监听父元素的可见性变化
4837
+ var _resolvePopElements4 = resolvePopElements(),
4838
+ elReference = _resolvePopElements4.elReference,
4839
+ root = _resolvePopElements4.root;
4840
+ var element = elReference || root;
4841
+ if (element) {
4842
+ var targetNode = element.closest('.bk-modal, .bk-dialog');
4843
+ if (targetNode) {
4844
+ parentVisibilityObserver = new MutationObserver(function () {
4845
+ if (checkParentVisibility() && localIsShow.value) {
4846
+ hideFn();
4847
+ }
4848
+ });
4849
+ parentVisibilityObserver.observe(targetNode, {
4850
+ attributes: true,
4851
+ attributeFilter: ['style', 'class'],
4852
+ subtree: true
4853
+ });
4854
+ }
4855
+ }
4834
4856
  };
4835
4857
  var onUnmountedFn = function onUnmountedFn() {
4836
4858
  beforeInstanceUnmount();
4837
4859
  // 清理父节点上的 data-pnode-id 属性
4838
- var _resolvePopElements4 = resolvePopElements(),
4839
- root = _resolvePopElements4.root;
4860
+ var _resolvePopElements5 = resolvePopElements(),
4861
+ root = _resolvePopElements5.root;
4840
4862
  clearParentNodeId(root);
4841
4863
  document.body.removeEventListener('fullscreenchange', handleFullscreenChange);
4842
4864
  document.removeEventListener('click', handleClickOutside);
4865
+ // 清理父元素可见性监听器
4866
+ if (parentVisibilityObserver) {
4867
+ parentVisibilityObserver.disconnect();
4868
+ parentVisibilityObserver = null;
4869
+ }
4843
4870
  };
4844
4871
  var isClickInside = function isClickInside(target) {
4845
4872
  var _refContent$value$$el, _refContent$value, _refContent$value$con;
4846
4873
  return (_refContent$value$$el = (_refContent$value = refContent.value) === null || _refContent$value === void 0 || (_refContent$value = _refContent$value.$el) === null || _refContent$value === void 0 || (_refContent$value$con = _refContent$value.contains) === null || _refContent$value$con === void 0 ? void 0 : _refContent$value$con.call(_refContent$value, target)) !== null && _refContent$value$$el !== void 0 ? _refContent$value$$el : false;
4847
4874
  };
4875
+ /**
4876
+ * 检查父元素(Modal/Dialog)是否被隐藏
4877
+ * 如果父元素被隐藏,应该关闭 Popover
4878
+ */
4879
+ var checkParentVisibility = function checkParentVisibility() {
4880
+ if (!localIsShow.value) return false;
4881
+ var _resolvePopElements6 = resolvePopElements(),
4882
+ elReference = _resolvePopElements6.elReference,
4883
+ root = _resolvePopElements6.root;
4884
+ var element = elReference || root;
4885
+ if (!element) return false;
4886
+ // 查找最近的 Modal 或 Dialog 父元素
4887
+ var parent = element.parentElement;
4888
+ while (parent && parent !== document.body) {
4889
+ if (parent.classList.contains('bk-modal') || parent.classList.contains('bk-dialog')) {
4890
+ // 检查 Modal wrapper 是否被隐藏(Dialog 关闭时 wrapper 会被 v-show 隐藏)
4891
+ var wrapper = parent.querySelector('.bk-modal-wrapper');
4892
+ if (wrapper) {
4893
+ var wrapperStyle = window.getComputedStyle(wrapper);
4894
+ if (wrapperStyle.display === 'none' || wrapperStyle.visibility === 'hidden') {
4895
+ return true; // 父元素被隐藏
4896
+ }
4897
+ }
4898
+ // 检查父元素本身是否被隐藏
4899
+ var style = window.getComputedStyle(parent);
4900
+ if (style.display === 'none' || style.visibility === 'hidden') {
4901
+ return true; // 父元素被隐藏
4902
+ }
4903
+ }
4904
+ parent = parent.parentElement;
4905
+ }
4906
+ return false;
4907
+ };
4848
4908
  /**
4849
4909
  * 处理点击外部区域的事件
4850
4910
  * @param e - 事件对象
@@ -4859,6 +4919,13 @@ var popContainerId = "id_".concat(esm_browser_v4());
4859
4919
  e.stopImmediatePropagation();
4860
4920
  return;
4861
4921
  }
4922
+ // 检查父元素(Modal/Dialog)是否被隐藏,如果隐藏则关闭 Popover
4923
+ if (checkParentVisibility()) {
4924
+ if (localIsShow.value) {
4925
+ hideFn();
4926
+ }
4927
+ return;
4928
+ }
4862
4929
  var commonFunc = function commonFunc() {
4863
4930
  ctx.emit(EMIT_EVENTS.CLICK_OUTSIDE, {
4864
4931
  isShow: localIsShow.value,
package/lib/tree/index.js CHANGED
@@ -19190,7 +19190,9 @@ var use_node_action_this = undefined;
19190
19190
  setSelect: setSelect,
19191
19191
  setOpen: setOpen,
19192
19192
  setNodeAttribute: setNodeAttribute,
19193
- isIndeterminate: isIndeterminate
19193
+ isIndeterminate: isIndeterminate,
19194
+ deepUpdateChildNode: deepUpdateChildNode,
19195
+ updateParentChecked: updateParentChecked
19194
19196
  };
19195
19197
  });
19196
19198
  ;// CONCATENATED MODULE: external "lodash/throttle"
@@ -20226,7 +20228,9 @@ var use_tree_init_this = undefined;
20226
20228
  setSelect = _useNodeAction.setSelect,
20227
20229
  asyncNodeClick = _useNodeAction.asyncNodeClick,
20228
20230
  setNodeAttribute = _useNodeAction.setNodeAttribute,
20229
- isIndeterminate = _useNodeAction.isIndeterminate;
20231
+ isIndeterminate = _useNodeAction.isIndeterminate,
20232
+ deepUpdateChildNode = _useNodeAction.deepUpdateChildNode,
20233
+ updateParentChecked = _useNodeAction.updateParentChecked;
20230
20234
  var handleSearch = (0,shared_namespaceObject.debounce)(120, function () {
20231
20235
  matchedNodePath.length = 0;
20232
20236
  flatData.data.forEach(function (item) {
@@ -20254,14 +20258,42 @@ var use_tree_init_this = undefined;
20254
20258
  });
20255
20259
  /**
20256
20260
  * 设置指定节点是否选中
20257
- * @param item Node item | Node Id
20261
+ * @param item Node item | Node Id | Array of Node items or Node Ids
20258
20262
  * @param checked
20259
20263
  * @param triggerEvent 是否触发抛出事件
20260
20264
  */
20261
20265
  var setChecked = function setChecked(item) {
20262
20266
  var checked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
20263
20267
  var triggerEvent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
20264
- setNodeAction(resolveNodeItem(item), NODE_ATTRIBUTES.IS_CHECKED, checked);
20268
+ // 将 item 转换为 TreeNode 数组
20269
+ var resolveToNodes = function resolveToNodes(input) {
20270
+ if (Array.isArray(input)) {
20271
+ return input.map(function (i) {
20272
+ if (typeof i === 'string' || typeof i === 'number') {
20273
+ return getNodeById(i);
20274
+ }
20275
+ return i;
20276
+ }).filter(Boolean);
20277
+ }
20278
+ if (typeof input === 'string' || typeof input === 'number') {
20279
+ var node = getNodeById(input);
20280
+ return node ? [node] : [];
20281
+ }
20282
+ return [input].filter(Boolean);
20283
+ };
20284
+ var nodes = resolveToNodes(item);
20285
+ nodes.forEach(function (node) {
20286
+ var resolvedNode = resolveNodeItem(node);
20287
+ setNodeAction(resolvedNode, NODE_ATTRIBUTES.IS_CHECKED, checked);
20288
+ if (checked) {
20289
+ setNodeAction(resolvedNode, NODE_ATTRIBUTES.IS_INDETERMINATE, false);
20290
+ }
20291
+ // 如果设置了 checkStrictly,需要同步更新子节点和父节点的状态
20292
+ if (props.checkStrictly) {
20293
+ deepUpdateChildNode(resolvedNode, [NODE_ATTRIBUTES.IS_CHECKED, NODE_ATTRIBUTES.IS_INDETERMINATE], [checked, false]);
20294
+ updateParentChecked(resolvedNode, checked);
20295
+ }
20296
+ });
20265
20297
  if (triggerEvent) {
20266
20298
  ctx.emit(EVENTS.NODE_CHECKED, flatData.data.filter(function (t) {
20267
20299
  return isNodeChecked(t);
@@ -20311,7 +20343,17 @@ var use_tree_init_this = undefined;
20311
20343
  (0,external_vue_namespaceObject.watch)(function () {
20312
20344
  return [props.checked];
20313
20345
  }, function () {
20346
+ // 先清除所有节点的选中和半选状态
20347
+ flatData.data.forEach(function (node) {
20348
+ if (isNodeChecked(node) || isIndeterminate(node)) {
20349
+ setNodeAction(node, NODE_ATTRIBUTES.IS_CHECKED, false);
20350
+ setNodeAction(node, NODE_ATTRIBUTES.IS_INDETERMINATE, false);
20351
+ }
20352
+ });
20353
+ // 再设置新的选中节点
20314
20354
  setChecked(props.checked, true);
20355
+ }, {
20356
+ immediate: true
20315
20357
  });
20316
20358
  var reset = function reset() {
20317
20359
  var _root$value;
@@ -11,5 +11,7 @@ declare const _default: (props: TreePropTypes, ctx: any, flatData: IFlatData, _r
11
11
  setOpen: (item: TreeNode, isOpen?: boolean, autoOpenParents?: boolean) => void;
12
12
  setNodeAttribute: (node: TreeNode, attrName: string | string[], value: (boolean | number | string)[] | boolean | number | string, loopParent?: boolean) => void;
13
13
  isIndeterminate: (item: TreeNode) => any;
14
+ deepUpdateChildNode: (node: TreeNode, attr: string | string[], value: unknown | unknown[]) => void;
15
+ updateParentChecked: (item: TreeNode, isChecked: any) => void;
14
16
  };
15
17
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bkui-vue",
3
- "version": "2.0.2-beta.84",
3
+ "version": "2.0.2-beta.86",
4
4
  "workspaces": [
5
5
  "packages/**",
6
6
  "scripts/cli",