diff --git a/seller/src/styles/element.scss b/seller/src/styles/element.scss index 56f235b4f..509c3f2d4 100644 --- a/seller/src/styles/element.scss +++ b/seller/src/styles/element.scss @@ -144,3 +144,40 @@ url("data:image/svg+xml;utf8,"); } } + + +/* + * 商家端固定左侧 300px 菜单布局下的 Dialog 弹窗居中与边界保护 (Issue #IKUDFL) + * 1. 扣除左侧 300px 菜单宽度,将弹窗容器限定在右侧内容工作区内,使得弹窗自然以工作区为中心水平居中,不再全屏居中; + * 2. 弹窗最大宽度限制在 calc(100% - 40px),在中低分辨率(如 1440px/1600px)下左右预留各 20px 边距,避免大尺寸弹窗(如 1200px)溢出或贴紧菜单; + * 3. 兼容未挂载至 body 的弹窗,当内容区内弹窗展开时提升 .single-page-con 层级,避免被菜单(z-index: 21)遮挡。 + */ +body.seller-has-sidebar, +.main { + .el-overlay-dialog { + left: 300px; + width: calc(100vw - 300px); + box-sizing: border-box; + } + + .el-overlay-dialog .el-dialog { + max-width: calc(100% - 40px); + box-sizing: border-box; + } +} + +/* 移动端/极窄屏兜底:若宽度小于等于 768px 则恢复全屏居中 */ +@media (max-width: 768px) { + body.seller-has-sidebar, + .main { + .el-overlay-dialog { + left: 0; + width: 100vw; + } + } +} + +/* 未使用 append-to-body 挂载的局部弹窗,在打开时提升内容区层叠上下文,避免被菜单栏或顶栏压盖 */ +.single-page-con:has(.el-overlay:not([style*="display: none"])) { + z-index: 2000; +} diff --git a/seller/src/views/Main.vue b/seller/src/views/Main.vue index 2af63aaa1..f1dd42233 100644 --- a/seller/src/views/Main.vue +++ b/seller/src/views/Main.vue @@ -317,12 +317,14 @@ watch(() => appStore.tagsList, () => { appStore.setOpenedList(); onMounted(() => { + document.body.classList.add("seller-has-sidebar"); init(); resize(); window.addEventListener("resize", resize); }); onBeforeUnmount(() => { + document.body.classList.remove("seller-has-sidebar"); window.removeEventListener("resize", resize); }); diff --git a/seller/src/views/order/order/orderDetail.vue b/seller/src/views/order/order/orderDetail.vue index 55d83ba54..ff661b091 100644 --- a/seller/src/views/order/order/orderDetail.vue +++ b/seller/src/views/order/order/orderDetail.vue @@ -559,7 +559,7 @@ - +
整单发货