@liuzengwei/element-ui 2.15.5-xn.52 → 2.15.5-xn.53

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 (70) hide show
  1. package/lib/alert.js +2 -2
  2. package/lib/area-picker.js +2 -2
  3. package/lib/aside.js +2 -2
  4. package/lib/backtop.js +2 -2
  5. package/lib/badge.js +2 -2
  6. package/lib/breadcrumb-item.js +2 -2
  7. package/lib/breadcrumb.js +2 -2
  8. package/lib/button-group.js +2 -2
  9. package/lib/button.js +2 -2
  10. package/lib/calendar.js +2 -2
  11. package/lib/card.js +2 -2
  12. package/lib/carousel-item.js +2 -2
  13. package/lib/carousel.js +2 -2
  14. package/lib/cascader-panel.js +2 -2
  15. package/lib/cascader.js +4 -4
  16. package/lib/checkbox-button.js +2 -2
  17. package/lib/checkbox-group.js +2 -2
  18. package/lib/checkbox.js +2 -2
  19. package/lib/collapse-item.js +2 -2
  20. package/lib/collapse.js +2 -2
  21. package/lib/color-picker.js +4 -4
  22. package/lib/container.js +2 -2
  23. package/lib/date-picker.js +5 -5
  24. package/lib/dialog.js +2 -2
  25. package/lib/divider.js +2 -2
  26. package/lib/drawer.js +423 -23
  27. package/lib/dropdown-item.js +2 -2
  28. package/lib/dropdown-menu.js +2 -2
  29. package/lib/element-ui.common.js +393 -14
  30. package/lib/footer.js +2 -2
  31. package/lib/form.js +2 -2
  32. package/lib/header.js +2 -2
  33. package/lib/icon.js +2 -2
  34. package/lib/image.js +2 -2
  35. package/lib/index.js +1 -1
  36. package/lib/input-number.js +2 -2
  37. package/lib/link.js +2 -2
  38. package/lib/loading.js +2 -2
  39. package/lib/main.js +2 -2
  40. package/lib/menu-item-group.js +2 -2
  41. package/lib/menu-item.js +2 -2
  42. package/lib/message-box.js +4 -4
  43. package/lib/message.js +2 -2
  44. package/lib/notification.js +2 -2
  45. package/lib/option-group.js +2 -2
  46. package/lib/page-header.js +2 -2
  47. package/lib/pagination.js +2 -2
  48. package/lib/popover.js +2 -2
  49. package/lib/progress.js +2 -2
  50. package/lib/radio-button.js +2 -2
  51. package/lib/radio-group.js +2 -2
  52. package/lib/radio.js +9 -9
  53. package/lib/rate.js +2 -2
  54. package/lib/select.js +2 -2
  55. package/lib/spinner.js +2 -2
  56. package/lib/step.js +2 -2
  57. package/lib/steps.js +2 -2
  58. package/lib/switch.js +2 -2
  59. package/lib/tab-pane.js +2 -2
  60. package/lib/table.js +4 -4
  61. package/lib/time-picker.js +5 -5
  62. package/lib/time-select.js +2 -2
  63. package/lib/timeline-item.js +2 -2
  64. package/lib/tooltip.js +2 -2
  65. package/lib/transfer.js +2 -2
  66. package/lib/trigger.js +5 -5
  67. package/lib/upload.js +8 -8
  68. package/package.json +1 -1
  69. package/packages/drawer/src/main.vue +184 -9
  70. package/src/index.js +1 -1
package/lib/trigger.js CHANGED
@@ -275,7 +275,7 @@ var vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);
275
275
  var dom_ = __webpack_require__(2);
276
276
 
277
277
  // EXTERNAL MODULE: external "vue"
278
- var external_vue_ = __webpack_require__(7);
278
+ var external_vue_ = __webpack_require__(6);
279
279
  var external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);
280
280
 
281
281
  // CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/trigger/src/main.vue?vue&type=script&lang=js&
@@ -907,17 +907,17 @@ module.exports = require("@liuzengwei/element-ui/lib/utils/vue-popper");
907
907
 
908
908
  /***/ }),
909
909
 
910
- /***/ 64:
910
+ /***/ 6:
911
911
  /***/ (function(module, exports) {
912
912
 
913
- module.exports = require("@liuzengwei/element-ui/lib/utils/popper");
913
+ module.exports = require("vue");
914
914
 
915
915
  /***/ }),
916
916
 
917
- /***/ 7:
917
+ /***/ 64:
918
918
  /***/ (function(module, exports) {
919
919
 
920
- module.exports = require("vue");
920
+ module.exports = require("@liuzengwei/element-ui/lib/utils/popper");
921
921
 
922
922
  /***/ })
923
923
 
package/lib/upload.js CHANGED
@@ -210,13 +210,6 @@ module.exports = require("@liuzengwei/element-ui/lib/progress");
210
210
 
211
211
  /***/ }),
212
212
 
213
- /***/ 6:
214
- /***/ (function(module, exports) {
215
-
216
- module.exports = require("@liuzengwei/element-ui/lib/mixins/locale");
217
-
218
- /***/ }),
219
-
220
213
  /***/ 69:
221
214
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
222
215
 
@@ -387,7 +380,7 @@ upload_listvue_type_template_id_173fedf5_render._withStripped = true
387
380
  // CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&
388
381
 
389
382
  // EXTERNAL MODULE: external "@liuzengwei/element-ui/lib/mixins/locale"
390
- var locale_ = __webpack_require__(6);
383
+ var locale_ = __webpack_require__(7);
391
384
  var locale_default = /*#__PURE__*/__webpack_require__.n(locale_);
392
385
 
393
386
  // EXTERNAL MODULE: external "@liuzengwei/element-ui/lib/progress"
@@ -1393,6 +1386,13 @@ src.install = function (Vue) {
1393
1386
 
1394
1387
  /* harmony default export */ var packages_upload = __webpack_exports__["default"] = (src);
1395
1388
 
1389
+ /***/ }),
1390
+
1391
+ /***/ 7:
1392
+ /***/ (function(module, exports) {
1393
+
1394
+ module.exports = require("@liuzengwei/element-ui/lib/mixins/locale");
1395
+
1396
1396
  /***/ })
1397
1397
 
1398
1398
  /******/ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liuzengwei/element-ui",
3
- "version": "2.15.5-xn.52",
3
+ "version": "2.15.5-xn.53",
4
4
  "description": "A Component Library for Vue.js (Fork of Element UI).",
5
5
  "main": "lib/element-ui.common.js",
6
6
  "files": [
@@ -5,6 +5,7 @@
5
5
  @after-leave="afterLeave">
6
6
  <div
7
7
  :class="referenceMode ? 'el-drawer__wrapper-reference' : 'el-drawer__wrapper'"
8
+ :style="wrapperStyle"
8
9
  tabindex="-1"
9
10
  v-show="visible">
10
11
  <div
@@ -48,6 +49,8 @@
48
49
 
49
50
  <script>
50
51
  import Popup from 'element-ui/src/utils/popup';
52
+ import PopupManager from 'element-ui/src/utils/popup/popup-manager';
53
+ import { getStyle } from 'element-ui/src/utils/dom';
51
54
  import emitter from 'element-ui/src/mixins/emitter';
52
55
 
53
56
  export default {
@@ -112,7 +115,7 @@ export default {
112
115
  default: true
113
116
  },
114
117
  reference: {
115
- type: [String, Object],
118
+ type: [String, Object, typeof window !== 'undefined' ? window.HTMLElement : Object],
116
119
  default: null
117
120
  },
118
121
  placement: {
@@ -150,6 +153,13 @@ export default {
150
153
  }
151
154
  return this.direction;
152
155
  },
156
+ wrapperStyle() {
157
+ // 在 reference 模式下,将 z-index 设置在 wrapper 上,与全局模式保持一致
158
+ if (this.referenceMode && this.drawerZIndex) {
159
+ return { zIndex: this.drawerZIndex };
160
+ }
161
+ return null;
162
+ },
153
163
  drawerStyle() {
154
164
  if (this.referenceMode) {
155
165
  const style = { ...this.position };
@@ -168,7 +178,9 @@ export default {
168
178
  return {
169
179
  closed: false,
170
180
  prevActiveElement: null,
171
- position: {}
181
+ position: {},
182
+ drawerZIndex: null,
183
+ modalZIndex: null
172
184
  };
173
185
  },
174
186
  watch: {
@@ -177,19 +189,36 @@ export default {
177
189
  this.closed = false;
178
190
  this.$emit('open');
179
191
  if (this.referenceMode) {
192
+ // z-index 已经通过 drawerStyle computed 属性设置
180
193
  const referenceEl = this.getReferenceElement();
181
194
  if (referenceEl) {
182
195
  referenceEl.appendChild(this.$el);
183
196
  }
184
- } else if (this.appendToBody) {
185
- document.body.appendChild(this.$el);
186
- }
187
- this.prevActiveElement = document.activeElement;
188
- if (this.referenceMode) {
197
+ // drawer 挂载后创建 modal
189
198
  this.$nextTick(() => {
199
+ // drawer 的 z-index 已经在 appendChild 前设置
200
+
201
+ // 创建/显示 modal(使用预分配的较低值)
202
+ if (this.modal) {
203
+ this.createReferenceModal({
204
+ modalClass: this.modalClass,
205
+ modalFade: this.modalFade
206
+ });
207
+ }
208
+
209
+ // 更新位置
190
210
  this.updatePosition();
211
+
212
+ // 清理可能被 PopupManager 创建的全局 modal
213
+ // 延迟执行,确保全局 modal 已经被创建后再移除
214
+ setTimeout(() => {
215
+ this.removeGlobalModal();
216
+ }, 300);
191
217
  });
218
+ } else if (this.appendToBody) {
219
+ document.body.appendChild(this.$el);
192
220
  }
221
+ this.prevActiveElement = document.activeElement;
193
222
  } else {
194
223
  if (!this.closed) {
195
224
  this.$emit('close');
@@ -197,6 +226,10 @@ export default {
197
226
  this.rendered = false;
198
227
  }
199
228
  }
229
+ // 关闭 reference 模式的 modal
230
+ if (this.referenceMode) {
231
+ this.closeReferenceModal();
232
+ }
200
233
  this.$nextTick(() => {
201
234
  if (this.prevActiveElement) {
202
235
  this.prevActiveElement.focus();
@@ -206,6 +239,118 @@ export default {
206
239
  }
207
240
  },
208
241
  methods: {
242
+ doOpen(props) {
243
+ // 在 reference 模式下,需要让遮罩层挂载到参考元素而不是 body
244
+ if (this.referenceMode) {
245
+ // 手动实现 doOpen 的逻辑,但将 modal 挂载到 reference 元素
246
+ if (this.$isServer) return;
247
+ if (this.willOpen && !this.willOpen()) return;
248
+ if (this.opened) return;
249
+
250
+ this._opening = true;
251
+
252
+ const dom = this.$el;
253
+ const zIndex = props.zIndex;
254
+
255
+ if (zIndex) {
256
+ PopupManager.zIndex = zIndex;
257
+ }
258
+
259
+ // modal 的创建已经移到 watch visible 中,在 drawer 挂载后执行
260
+ // 这里预先分配 z-index,确保 modal 和 drawer 的层级关系正确
261
+ // 每次打开都重新分配,避免复用时的 z-index 错乱
262
+ this.modalZIndex = PopupManager.nextZIndex();
263
+ this.drawerZIndex = PopupManager.nextZIndex();
264
+
265
+ if (getStyle(dom, 'position') === 'static') {
266
+ dom.style.position = 'absolute';
267
+ }
268
+
269
+ // z-index 的设置已经移到 watch visible 中,在 modal 创建后设置
270
+ this.opened = true;
271
+
272
+ this.onOpen && this.onOpen();
273
+
274
+ this.doAfterOpen();
275
+ } else {
276
+ // 非 reference 模式,使用原始的 doOpen
277
+ this.$options.mixins[0].methods.doOpen.call(this, props);
278
+ }
279
+ },
280
+ createReferenceModal(props) {
281
+ // 创建并挂载 modal 到 reference 元素
282
+ const referenceEl = this.getReferenceElement();
283
+ if (!referenceEl) return;
284
+
285
+ // 创建或复用 modal DOM
286
+ let modalDom = this._referenceModalDom;
287
+ if (!modalDom) {
288
+ modalDom = document.createElement('div');
289
+ modalDom.className = 'v-modal';
290
+ modalDom.tabIndex = 0;
291
+
292
+ // 使用预先分配的 modal z-index,确保 drawer 已经有更高的 z-index
293
+ const modalZIndex = this.modalZIndex || PopupManager.nextZIndex();
294
+ modalDom.style.zIndex = modalZIndex;
295
+
296
+ // 关键:在 reference 模式下使用 absolute 定位,而不是 fixed
297
+ modalDom.style.position = 'absolute';
298
+ modalDom.style.left = '0';
299
+ modalDom.style.top = '0';
300
+ modalDom.style.width = '100%';
301
+ modalDom.style.height = '100%';
302
+
303
+ if (props.modalClass) {
304
+ const classArr = props.modalClass.trim().split(/\s+/);
305
+ classArr.forEach(cls => modalDom.classList.add(cls));
306
+ }
307
+
308
+ // 添加淡入动画
309
+ if (props.modalFade) {
310
+ modalDom.classList.add('v-modal-enter');
311
+ setTimeout(() => {
312
+ modalDom.classList.remove('v-modal-enter');
313
+ }, 200);
314
+ }
315
+
316
+ // 直接挂载到 reference 元素内部
317
+ referenceEl.appendChild(modalDom);
318
+
319
+ // 点击 modal 时的处理
320
+ modalDom.addEventListener('click', () => {
321
+ if (this.closeOnClickModal) {
322
+ this.closeDrawer();
323
+ }
324
+ });
325
+
326
+ // 保存引用以便后续清理
327
+ this._referenceModalDom = modalDom;
328
+ } else {
329
+ // 复用 modal 时,使用预分配的 z-index
330
+ modalDom.style.display = '';
331
+ modalDom.style.zIndex = this.modalZIndex || PopupManager.nextZIndex();
332
+ }
333
+ },
334
+ closeReferenceModal() {
335
+ // 关闭 reference 模式的 modal
336
+ if (this._referenceModalDom) {
337
+ this._referenceModalDom.style.display = 'none';
338
+ }
339
+ },
340
+ removeGlobalModal() {
341
+ // 移除 PopupManager 可能创建的全局 modal(在 body 下的)
342
+ // 只在 reference 模式下调用此方法
343
+ if (this.referenceMode) {
344
+ // 查找并移除 body 下与此 drawer 关联的 modal
345
+ const globalModals = document.body.querySelectorAll('.v-modal');
346
+ globalModals.forEach(modal => {
347
+ // 移除 body 下的所有 modal(它们不应该存在)
348
+ if (modal.parentNode === document.body) {
349
+ document.body.removeChild(modal);
350
+ }
351
+ });
352
+ }
353
+ },
209
354
  afterEnter() {
210
355
  this.$emit('opened');
211
356
  },
@@ -307,6 +452,16 @@ export default {
307
452
  }
308
453
  }
309
454
  },
455
+ beforeMount() {
456
+ // 在 reference 模式下,我们不使用 PopupManager 的 modal
457
+ // 设置一个内部标志来阻止 PopupManager 创建 modal
458
+ if (this.referenceMode) {
459
+ // 保存原始的 modal 属性
460
+ this._originalModal = this.modal;
461
+ // 临时将 modal 设为 false,这样 Popup mixin 的逻辑不会调用 PopupManager.openModal
462
+ // 注意:这个技巧可能不work,因为 modal 是 prop
463
+ }
464
+ },
310
465
  mounted() {
311
466
  if (this.visible) {
312
467
  this.rendered = true;
@@ -324,8 +479,23 @@ export default {
324
479
  window.addEventListener('scroll', this.handleScroll, true);
325
480
  window.addEventListener('resize', this.handleResize);
326
481
  }
327
- },
328
- destroyed() {
482
+ }, beforeDestroy() {
483
+ // 在 reference 模式下,不使用 PopupManager 管理 modal
484
+ // 所以需要阻止 Popup mixin 的 beforeDestroy 调用 PopupManager.closeModal
485
+ if (!this.referenceMode) {
486
+ // 非 reference 模式,调用 mixin 的 beforeDestroy
487
+ if (this.$options.mixins && this.$options.mixins[0].beforeDestroy) {
488
+ this.$options.mixins[0].beforeDestroy.call(this);
489
+ }
490
+ } else {
491
+ // reference 模式,只执行必要的清理
492
+ if (this._popupId) {
493
+ PopupManager.deregister(this._popupId);
494
+ // 不调用 PopupManager.closeModal,因为我们用的是自定义 modal
495
+ }
496
+ this.restoreBodyStyle();
497
+ }
498
+ }, destroyed() {
329
499
  // if appendToBody is true, remove DOM node after destroy
330
500
  if (this.appendToBody && this.$el && this.$el.parentNode) {
331
501
  this.$el.parentNode.removeChild(this.$el);
@@ -333,6 +503,11 @@ export default {
333
503
  if (this.referenceMode && this.$el && this.$el.parentNode) {
334
504
  this.$el.parentNode.removeChild(this.$el);
335
505
  }
506
+ // 清理 reference modal
507
+ if (this.referenceMode && this._referenceModalDom && this._referenceModalDom.parentNode) {
508
+ this._referenceModalDom.parentNode.removeChild(this._referenceModalDom);
509
+ this._referenceModalDom = null;
510
+ }
336
511
  if (this.referenceMode) {
337
512
  window.removeEventListener('scroll', this.handleScroll, true);
338
513
  window.removeEventListener('resize', this.handleResize);
package/src/index.js CHANGED
@@ -232,7 +232,7 @@ if (typeof window !== 'undefined' && window.Vue) {
232
232
  }
233
233
 
234
234
  export default {
235
- version: '2.15.5-xn.52',
235
+ version: '2.15.5-xn.53',
236
236
  locale: locale.use,
237
237
  i18n: locale.i18n,
238
238
  install,