@liuzengwei/element-ui 2.15.5-xn.52 → 2.15.5-xn.54
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/alert.js +2 -2
- package/lib/area-picker.js +2 -2
- package/lib/aside.js +2 -2
- package/lib/backtop.js +2 -2
- package/lib/badge.js +2 -2
- package/lib/breadcrumb-item.js +2 -2
- package/lib/breadcrumb.js +2 -2
- package/lib/button-group.js +2 -2
- package/lib/button.js +2 -2
- package/lib/calendar.js +2 -2
- package/lib/card.js +2 -2
- package/lib/carousel-item.js +2 -2
- package/lib/carousel.js +2 -2
- package/lib/cascader-panel.js +2 -2
- package/lib/cascader.js +4 -4
- package/lib/checkbox-button.js +2 -2
- package/lib/checkbox-group.js +2 -2
- package/lib/checkbox.js +2 -2
- package/lib/collapse-item.js +2 -2
- package/lib/collapse.js +2 -2
- package/lib/color-picker.js +4 -4
- package/lib/container.js +2 -2
- package/lib/date-picker.js +5 -5
- package/lib/dialog.js +2 -2
- package/lib/divider.js +2 -2
- package/lib/drawer.js +423 -23
- package/lib/dropdown-item.js +2 -2
- package/lib/dropdown-menu.js +2 -2
- package/lib/element-ui.common.js +393 -14
- package/lib/footer.js +2 -2
- package/lib/form.js +2 -2
- package/lib/header.js +2 -2
- package/lib/icon.js +2 -2
- package/lib/image.js +2 -2
- package/lib/index.js +1 -1
- package/lib/input-number.js +2 -2
- package/lib/link.js +2 -2
- package/lib/loading.js +2 -2
- package/lib/main.js +2 -2
- package/lib/menu-item-group.js +2 -2
- package/lib/menu-item.js +2 -2
- package/lib/message-box.js +4 -4
- package/lib/message.js +2 -2
- package/lib/notification.js +2 -2
- package/lib/option-group.js +2 -2
- package/lib/page-header.js +2 -2
- package/lib/pagination.js +2 -2
- package/lib/popover.js +2 -2
- package/lib/progress.js +2 -2
- package/lib/radio-button.js +2 -2
- package/lib/radio-group.js +2 -2
- package/lib/radio.js +9 -9
- package/lib/rate.js +2 -2
- package/lib/select.js +2 -2
- package/lib/spinner.js +2 -2
- package/lib/step.js +2 -2
- package/lib/steps.js +2 -2
- package/lib/switch.js +2 -2
- package/lib/tab-pane.js +2 -2
- package/lib/table.js +4 -4
- package/lib/time-picker.js +5 -5
- package/lib/time-select.js +2 -2
- package/lib/timeline-item.js +2 -2
- package/lib/tooltip.js +2 -2
- package/lib/transfer.js +2 -2
- package/lib/trigger.js +5 -5
- package/lib/upload.js +8 -8
- package/package.json +1 -1
- package/packages/drawer/src/main.vue +184 -9
- 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__(
|
|
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
|
-
/***/
|
|
910
|
+
/***/ 6:
|
|
911
911
|
/***/ (function(module, exports) {
|
|
912
912
|
|
|
913
|
-
module.exports = require("
|
|
913
|
+
module.exports = require("vue");
|
|
914
914
|
|
|
915
915
|
/***/ }),
|
|
916
916
|
|
|
917
|
-
/***/
|
|
917
|
+
/***/ 64:
|
|
918
918
|
/***/ (function(module, exports) {
|
|
919
919
|
|
|
920
|
-
module.exports = require("
|
|
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__(
|
|
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
|
@@ -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
|
-
|
|
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
|
-
|
|
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);
|