// ===== 全局样式入口 ===== // CSS Reset 已由 ant-design-vue 的 reset.css 提供,这里补充全局变量与基础样式 // 全局 less 变量 @primary-color: #1677ff; @text-color: rgba(0, 0, 0, 0.88); @border-color: #f0f0f0; @bg-color: #f5f5f5; // 基础重置 * { box-sizing: border-box; } html, body, #app { height: 100%; margin: 0; padding: 0; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif; font-size: 14px; color: @text-color; background-color: @bg-color; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } a { color: @primary-color; text-decoration: none; &:hover { opacity: 0.85; } } // 滚动条美化 ::-webkit-scrollbar { width: 6px; height: 6px; } ::-webkit-scrollbar-thumb { background: rgba(0, 0, 0, 0.2); border-radius: 3px; } ::-webkit-scrollbar-track { background: transparent; } // ===== 页面布局公共类 ===== // 页面容器:纵向 flex,占满高度;筛选区与表格区作为直接子元素 .page-container { display: flex; flex-direction: column; height: 100%; } // 页面筛选区域:横向 flex,可换行 .page-filter { display: flex; flex-wrap: wrap; align-items: center; column-gap: 16px; row-gap: 12px; flex-shrink: 0; padding: 16px; background-color: #fff; border-radius: 10px; } // 筛选区域操作按钮组:横向 flex .page-filter-actions { display: flex; align-items: center; gap: 10px; margin-left: 0; } // 表格显示区域:纵向 flex,占据剩余高度。 // overflow: hidden 防止子元素撑开容器,滚动由 Table 的 scroll.x/y 接管。 // 分页组件作为独立子元素置于 Table 下方,不占用 Table 的 scroll 空间。 .page-table { display: flex; flex-direction: column; flex: 1; background-color: #fff; min-height: 0; min-width: 0; margin-top: 16px; overflow: hidden; border-radius: 10px; } .page-pagination { flex-shrink: 0; display: flex; justify-content: flex-end; padding: 14px; } // ===== antd 组件覆盖 ===== // Tag 默认 margin-right: 8px,会挤开表格列或卡片内间距,统一去掉 .ant-tag { margin-right: 0; } // ===== 页面切换动画(KeepAlive + RouterView) ===== .page-fade-slide-enter-active, .page-fade-slide-leave-active { width: 100%; height: 100%; min-height: 0; transition: opacity 0.22s cubic-bezier(0.4, 0, 0.2, 1), transform 0.22s cubic-bezier(0.4, 0, 0.2, 1); } .page-fade-slide-enter-from { opacity: 0; transform: translateX(12px); } .page-fade-slide-leave-to { opacity: 0; transform: translateX(-12px); } .page-fade-slide-leave-active { position: absolute; inset: 0; width: 100%; overflow: hidden; }