1071 lines
24 KiB
CSS
1071 lines
24 KiB
CSS
/*
|
||
* SaaSShop Admin Components
|
||
* 说明:用于承接 Blade 中零散的 inline style,便于后续统一美化与治理。
|
||
*
|
||
* 美化方向:Ant Design Pro 风格(规整、企业中后台范式)
|
||
*/
|
||
|
||
/* Toast(渐进增强:配合 admin.js 展示更友好的反馈提示) */
|
||
.toast-container{
|
||
position:fixed;
|
||
top:16px;
|
||
right:16px;
|
||
z-index:999;
|
||
display:flex;
|
||
flex-direction:column;
|
||
gap:10px;
|
||
width:min(420px, calc(100vw - 32px));
|
||
}
|
||
|
||
.toast{
|
||
background:var(--adm-bg-container, #ffffff);
|
||
border:1px solid var(--adm-border-color, #e5e7eb);
|
||
border-left-width:4px;
|
||
border-radius:var(--adm-radius, 12px);
|
||
padding:12px 12px;
|
||
color:var(--adm-text, #0f172a);
|
||
box-shadow:var(--adm-shadow-popover);
|
||
display:flex;
|
||
align-items:flex-start;
|
||
justify-content:space-between;
|
||
gap:12px;
|
||
}
|
||
|
||
.toast-success{border-left-color:var(--adm-success, #16a34a);}
|
||
.toast-warning{border-left-color:var(--adm-warning, #f59e0b);}
|
||
.toast-error{border-left-color:var(--adm-error, #ef4444);}
|
||
|
||
.toast-content{
|
||
font-size:13px;
|
||
line-height:1.45;
|
||
word-break:break-word;
|
||
}
|
||
|
||
.toast-close{
|
||
appearance:none;
|
||
border:none;
|
||
background:transparent;
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
font-size:18px;
|
||
line-height:1;
|
||
cursor:pointer;
|
||
padding:2px 6px;
|
||
border-radius:8px;
|
||
}
|
||
|
||
.toast-close:hover{
|
||
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
|
||
color:var(--adm-text, #0f172a);
|
||
}
|
||
|
||
.form-inline-row{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:8px;
|
||
}
|
||
|
||
.text-danger{
|
||
color:#b42318;
|
||
}
|
||
|
||
/* 平台订单:退款状态治理区块 */
|
||
.refund-governance-block{
|
||
margin-top:12px;
|
||
border:1px dashed var(--adm-error-border-strong, rgba(239, 68, 68, .45));
|
||
background:var(--adm-error-bg, #fef2f2);
|
||
}
|
||
|
||
.refund-governance-title{
|
||
margin-bottom:6px;
|
||
}
|
||
|
||
.refund-governance-meta{
|
||
margin-bottom:8px;
|
||
}
|
||
|
||
/* 平台订单:治理提示块(用于 BMPA / 同步订阅 等动作前的安全阀说明) */
|
||
.governance-block{
|
||
margin-top:10px;
|
||
width:100%;
|
||
border:1px solid var(--adm-error-border-soft, rgba(239, 68, 68, .25));
|
||
background:var(--adm-error-bg, #fef2f2);
|
||
}
|
||
|
||
.governance-block-title{
|
||
margin:0;
|
||
}
|
||
|
||
.governance-block-body{
|
||
margin-top:6px;
|
||
font-size:12px;
|
||
line-height:1.5;
|
||
}
|
||
|
||
/* 可复用:治理提示块内的说明/脚注文本 */
|
||
.governance-block-footnote{
|
||
margin-top:6px;
|
||
font-size:12px;
|
||
line-height:1.5;
|
||
}
|
||
|
||
/* 可复用:折叠面板(参考 Ant Design Pro 的筛选区交互:可折叠、摘要做成一条可点 Header) */
|
||
|
||
/* 可复用:Filters Card(平台订单/订阅等列表页共用:统一筛选区观感) */
|
||
.filters-card{
|
||
padding:0;
|
||
}
|
||
|
||
.filters-summary{
|
||
padding:14px 16px;
|
||
}
|
||
|
||
.filters-body{
|
||
padding:14px 16px 16px;
|
||
border-top:1px solid var(--adm-border-color, #e5e7eb);
|
||
}
|
||
|
||
.filters-grid{
|
||
margin:0;
|
||
}
|
||
|
||
/* 可复用:List Card(列表页统一卡片:标题区/操作区/表格区) */
|
||
.list-card{
|
||
padding:0;
|
||
}
|
||
|
||
/* 可复用:Pagination(中后台分页,参考 Ant Design Pro) */
|
||
.adm-pagination{
|
||
margin-top:16px;
|
||
}
|
||
|
||
/* 强制去掉分页区域下划线:避免被全局 a:hover{text-decoration:underline;} 影响 */
|
||
.adm-pagination a,
|
||
.adm-pagination a:hover,
|
||
.adm-pagination a:focus,
|
||
.adm-pagination a:active{
|
||
text-decoration:none !important;
|
||
}
|
||
|
||
.adm-pagination-inner{
|
||
display:flex;
|
||
align-items:center;
|
||
justify-content:space-between;
|
||
gap:12px;
|
||
flex-wrap:wrap;
|
||
}
|
||
|
||
.adm-page-list{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
flex-wrap:wrap;
|
||
}
|
||
|
||
.adm-page-btn,
|
||
.adm-page-num,
|
||
.adm-page-ellipsis{
|
||
display:inline-flex;
|
||
align-items:center;
|
||
justify-content:center;
|
||
min-width:32px;
|
||
height:32px;
|
||
padding:0 10px;
|
||
border-radius:10px;
|
||
border:1px solid var(--adm-border-color, #e5e7eb);
|
||
background:var(--adm-bg-container, #ffffff);
|
||
color:var(--adm-text, #0f172a);
|
||
text-decoration:none;
|
||
box-shadow:var(--adm-shadow-sm);
|
||
}
|
||
|
||
.adm-page-ellipsis{
|
||
border-color:transparent;
|
||
background:transparent;
|
||
box-shadow:none;
|
||
min-width:auto;
|
||
padding:0 6px;
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
}
|
||
|
||
.adm-page-num.is-active{
|
||
border-color:var(--adm-primary-border-45, rgba(22, 119, 255, .45));
|
||
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
|
||
color:var(--adm-text, #0f172a);
|
||
font-weight:700;
|
||
}
|
||
|
||
.adm-page-btn:hover,
|
||
.adm-page-num:hover{
|
||
text-decoration:none;
|
||
border-color:var(--adm-primary-border-35, rgba(22, 119, 255, .35));
|
||
background:var(--adm-primary-tint-06, rgba(22, 119, 255, .06));
|
||
}
|
||
|
||
.adm-page-btn.is-disabled{
|
||
opacity:.55;
|
||
cursor:not-allowed;
|
||
}
|
||
|
||
.adm-page-meta{
|
||
margin-left:auto;
|
||
}
|
||
|
||
.list-card-header{
|
||
padding:14px 16px;
|
||
display:flex;
|
||
align-items:flex-start;
|
||
justify-content:space-between;
|
||
gap:12px;
|
||
}
|
||
|
||
.list-card-title{
|
||
margin:0;
|
||
}
|
||
|
||
.list-card-subtitle{
|
||
margin-top:6px;
|
||
}
|
||
|
||
.list-card-body{
|
||
border-top:1px solid var(--adm-border-color, #e5e7eb);
|
||
padding:0;
|
||
overflow:hidden;
|
||
}
|
||
|
||
.list-card-table{
|
||
margin:0;
|
||
border-collapse:separate;
|
||
border-spacing:0;
|
||
}
|
||
|
||
.list-card-table tbody tr:last-child td{
|
||
border-bottom:none;
|
||
}
|
||
|
||
.list-card-table th,
|
||
.list-card-table td{
|
||
padding:12px 12px;
|
||
}
|
||
|
||
.list-card-table thead th{
|
||
background:var(--adm-table-header-bg, #fafafa);
|
||
}
|
||
|
||
.list-card-table tbody tr:hover td{
|
||
background:var(--adm-table-row-hover-bg, rgba(22, 119, 255, .04));
|
||
}
|
||
|
||
.list-card-table .table-empty{
|
||
padding:24px 12px;
|
||
text-align:center;
|
||
background:var(--adm-surface-tint);
|
||
}
|
||
|
||
/* 可复用:PageHeader(参考 Ant Design Pro:标题区 + 描述 + 右侧操作区) */
|
||
.page-header{
|
||
width:100%;
|
||
padding:16px;
|
||
border:1px solid var(--adm-border-color, #e5e7eb);
|
||
border-radius:var(--adm-radius, 12px);
|
||
background:var(--adm-bg-container, #ffffff);
|
||
}
|
||
|
||
.page-header-main{
|
||
display:flex;
|
||
align-items:flex-start;
|
||
justify-content:space-between;
|
||
gap:12px;
|
||
}
|
||
|
||
.page-header-title{
|
||
font-size:18px;
|
||
font-weight:700;
|
||
color:var(--adm-text, #0f172a);
|
||
line-height:1.2;
|
||
}
|
||
|
||
.page-header-subtitle{
|
||
margin-top:6px;
|
||
font-size:13px;
|
||
color:var(--adm-text-secondary, #64748b);
|
||
line-height:1.45;
|
||
}
|
||
|
||
.page-header-actions{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:10px;
|
||
flex-wrap:wrap;
|
||
}
|
||
|
||
.page-header-meta{
|
||
margin-top:12px;
|
||
display:flex;
|
||
flex-wrap:wrap;
|
||
gap:12px;
|
||
color:var(--adm-text-secondary, #64748b);
|
||
font-size:12px;
|
||
}
|
||
|
||
/* 可复用:KPI 卡片栅格(参考 Ant Design Pro Analysis:第一行 4 个等宽卡片) */
|
||
|
||
/* 可复用:迷你图表/排行/占比(渐进增强:由 admin.js 渲染,页面无 JS 时为空但不影响表格) */
|
||
.adm-mini-chart,
|
||
.adm-mini-rank,
|
||
.adm-mini-share{
|
||
margin-top:10px;
|
||
width:100%;
|
||
padding:10px 10px;
|
||
border:1px solid var(--adm-border-color, #e5e7eb);
|
||
border-radius:var(--adm-radius, 12px);
|
||
background:var(--adm-surface-tint);
|
||
box-shadow:var(--adm-shadow-sm);
|
||
}
|
||
|
||
/* 迷你图表的摘要行(用于展示合计/峰值等口径,参考 Ant Design Pro 的 card extra/meta 文案) */
|
||
.adm-mini-meta{
|
||
margin-top:8px;
|
||
display:flex;
|
||
flex-wrap:wrap;
|
||
gap:6px;
|
||
align-items:center;
|
||
color:var(--adm-text-secondary, #64748b);
|
||
font-size:12px;
|
||
}
|
||
|
||
.adm-mini-meta-item strong{
|
||
color:var(--adm-text, #0f172a);
|
||
}
|
||
|
||
.adm-mini-meta-sep{
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
}
|
||
|
||
.adm-mini-chart.is-empty,
|
||
.adm-mini-rank.is-empty,
|
||
.adm-mini-share.is-empty{
|
||
align-items:center;
|
||
justify-content:center;
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
font-size:12px;
|
||
}
|
||
|
||
.adm-mini-chart{
|
||
/* 高度加大:避免 bar 与容器 padding/边框挤压,提升可读性 */
|
||
height:110px;
|
||
display:flex;
|
||
align-items:flex-end;
|
||
gap:8px;
|
||
}
|
||
|
||
.adm-mini-chart-bar{
|
||
flex:1;
|
||
min-width:0;
|
||
height:10px;
|
||
border-radius:10px 10px 4px 4px;
|
||
border:1px solid var(--adm-primary-border-35, rgba(22, 119, 255, .35));
|
||
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
|
||
position:relative;
|
||
overflow:hidden;
|
||
}
|
||
|
||
.adm-mini-chart-bar::after{
|
||
content:"";
|
||
position:absolute;
|
||
inset:0;
|
||
background:linear-gradient(180deg, rgba(22, 119, 255, .22), rgba(22, 119, 255, .04));
|
||
}
|
||
|
||
.adm-mini-chart-bar:hover{
|
||
border-color:var(--adm-primary-border-45, rgba(22, 119, 255, .45));
|
||
background:var(--adm-primary-tint-06, rgba(22, 119, 255, .06));
|
||
}
|
||
|
||
/* 趋势迷你图:bar 可点击(JS 渐进增强把 bar 渲染为 <a>) */
|
||
.adm-mini-chart-bar-link{
|
||
display:block;
|
||
cursor:pointer;
|
||
text-decoration:none;
|
||
}
|
||
|
||
.adm-mini-chart-bar-link:hover{
|
||
text-decoration:none;
|
||
}
|
||
|
||
/* 可复用:迷你排行(渐进增强:由 admin.js 渲染,页面无 JS 时为空但不影响表格) */
|
||
.adm-mini-rank{
|
||
display:flex;
|
||
flex-direction:column;
|
||
gap:8px;
|
||
}
|
||
|
||
.adm-mini-rank-row{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:10px;
|
||
}
|
||
|
||
/* 迷你排行:整行可点击(JS 渐进增强把 row 渲染为 <a>) */
|
||
.adm-mini-rank-row-link{
|
||
color:inherit;
|
||
text-decoration:none;
|
||
border-radius:10px;
|
||
padding:2px 4px;
|
||
}
|
||
|
||
.adm-mini-rank-row-link:hover{
|
||
background:var(--adm-primary-tint-06, rgba(22, 119, 255, .06));
|
||
text-decoration:none;
|
||
}
|
||
|
||
/* 迷你占比:整行可点击(JS 渐进增强把 row 渲染为 <a>) */
|
||
.adm-mini-share-row-link{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:10px;
|
||
color:inherit;
|
||
text-decoration:none;
|
||
border-radius:10px;
|
||
padding:2px 4px;
|
||
}
|
||
|
||
.adm-mini-share-row-link:hover{
|
||
background:var(--adm-primary-tint-06, rgba(22, 119, 255, .06));
|
||
text-decoration:none;
|
||
}
|
||
|
||
.adm-mini-rank-name{
|
||
width:72px;
|
||
min-width:72px;
|
||
max-width:72px;
|
||
font-size:12px;
|
||
color:var(--adm-text-secondary, #64748b);
|
||
white-space:nowrap;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
}
|
||
|
||
.adm-mini-rank-bar-wrap{
|
||
flex:1;
|
||
min-width:0;
|
||
height:12px;
|
||
border-radius:999px;
|
||
background:rgba(15, 23, 42, .06);
|
||
overflow:hidden;
|
||
}
|
||
|
||
.adm-mini-rank-bar{
|
||
height:100%;
|
||
border-radius:999px;
|
||
background:linear-gradient(90deg, rgba(22, 119, 255, .55), rgba(22, 119, 255, .18));
|
||
}
|
||
|
||
.adm-mini-rank-value{
|
||
width:92px;
|
||
min-width:92px;
|
||
text-align:right;
|
||
font-size:12px;
|
||
color:var(--adm-text, #0f172a);
|
||
}
|
||
|
||
/* 可复用:迷你占比(Top5)(渐进增强:由 admin.js 渲染,页面无 JS 时为空但不影响表格) */
|
||
.adm-mini-share{
|
||
display:flex;
|
||
flex-direction:column;
|
||
gap:8px;
|
||
}
|
||
|
||
.adm-mini-share-row{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:10px;
|
||
}
|
||
|
||
.adm-mini-share-name{
|
||
width:72px;
|
||
min-width:72px;
|
||
max-width:72px;
|
||
font-size:12px;
|
||
color:var(--adm-text-secondary, #64748b);
|
||
white-space:nowrap;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
}
|
||
|
||
.adm-mini-share-bar-wrap{
|
||
flex:1;
|
||
min-width:0;
|
||
height:12px;
|
||
border-radius:999px;
|
||
background:rgba(15, 23, 42, .06);
|
||
overflow:hidden;
|
||
}
|
||
|
||
.adm-mini-share-bar{
|
||
height:100%;
|
||
border-radius:999px;
|
||
background:linear-gradient(90deg, rgba(245, 158, 11, .45), rgba(245, 158, 11, .16));
|
||
}
|
||
|
||
.adm-mini-share-value{
|
||
width:92px;
|
||
min-width:92px;
|
||
text-align:right;
|
||
font-size:12px;
|
||
color:var(--adm-text, #0f172a);
|
||
}
|
||
|
||
.kpi-grid{
|
||
display:grid;
|
||
grid-template-columns:repeat(4,minmax(0,1fr));
|
||
gap:12px;
|
||
align-items:stretch; /* 关键:保证同一行 KPI 卡片等高 */
|
||
}
|
||
|
||
/*
|
||
* 重要:admin-base.css 有全局规则 `.card + .card{margin-top:20px;}` 用于“纵向堆叠卡片”。
|
||
* 但在 grid(KPI / two-col 等)里会导致“第二张卡片整体下沉”,出现你看到的“站点在中间、其它在底部”的错位。
|
||
* 因此:在 KPI grid 场景显式清零 margin-top。
|
||
*/
|
||
.kpi-grid .card{
|
||
margin-top:0;
|
||
}
|
||
|
||
/* KPI 卡片:统一为竖向 flex,保证标题/数值/脚注布局稳定且等高 */
|
||
.kpi-grid .card{
|
||
display:flex;
|
||
flex-direction:column;
|
||
height:100%;
|
||
}
|
||
.kpi-grid .stat-card-footnote{
|
||
margin-top:auto; /* 把脚注推到底部,进一步锁定等高视觉 */
|
||
}
|
||
|
||
/* Dashboard 两列卡片:同样清理“纵向堆叠 margin-top”对 grid 的干扰,确保“趋势/排行/工作台/定位/最近订单/占比”顶边对齐 */
|
||
.two-col .card{
|
||
margin-top:0;
|
||
}
|
||
|
||
/* 通用:所有 grid 容器内的卡片,都应清理 `.card + .card{margin-top:20px;}` 的纵向堆叠规则。
|
||
* 否则会出现“同一行/同一网格里的第2张卡开始整体下沉”的错位。
|
||
*/
|
||
.grid > .card,
|
||
.grid-2 > .card,
|
||
.grid-3 > .card,
|
||
.grid-4 > .card,
|
||
.grid-5 > .card,
|
||
.grid-6 > .card{
|
||
margin-top:0;
|
||
}
|
||
|
||
@media (max-width: 1024px){
|
||
.kpi-grid{
|
||
grid-template-columns:repeat(2,minmax(0,1fr));
|
||
}
|
||
}
|
||
|
||
@media (max-width: 640px){
|
||
.kpi-grid{
|
||
grid-template-columns:1fr;
|
||
}
|
||
}
|
||
|
||
.stat-card-title{
|
||
font-size:12px;
|
||
color:var(--adm-text-secondary, #64748b);
|
||
}
|
||
|
||
.stat-card-value{
|
||
margin-top:10px;
|
||
font-size:22px;
|
||
font-weight:800;
|
||
color:var(--adm-text, #0f172a);
|
||
letter-spacing:.2px;
|
||
}
|
||
|
||
.stat-card-footnote{
|
||
margin-top:8px;
|
||
font-size:12px;
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
}
|
||
|
||
/* mini bar(纯 CSS,占比可视化,增强说服力)
|
||
* - 订阅列表页:订阅到期治理 Top10
|
||
* - 仪表盘:订阅到期治理占比
|
||
*/
|
||
.adm-mini-bar{
|
||
height:8px;
|
||
margin-top:6px;
|
||
border-radius:999px;
|
||
background:var(--adm-bg-elevated, rgba(148, 163, 184, .12));
|
||
overflow:hidden;
|
||
}
|
||
|
||
.adm-mini-bar-fill{
|
||
display:block;
|
||
height:100%;
|
||
background:linear-gradient(90deg, var(--adm-color-primary, #1677ff), rgba(22, 119, 255, .35));
|
||
}
|
||
|
||
.adm-mini-bar-row{
|
||
display:grid;
|
||
grid-template-columns:minmax(88px, 120px) 1fr minmax(54px, 96px);
|
||
gap:10px;
|
||
align-items:center;
|
||
}
|
||
|
||
.adm-mini-bar-row-link{
|
||
text-decoration:none;
|
||
color:inherit;
|
||
border-radius:10px;
|
||
padding:4px 6px;
|
||
margin-left:-6px;
|
||
margin-right:-6px;
|
||
}
|
||
|
||
.adm-mini-bar-row-link:hover{
|
||
background:var(--adm-primary-tint, rgba(22, 119, 255, .08));
|
||
}
|
||
|
||
.adm-mini-bar-row-link:focus{
|
||
outline:none;
|
||
box-shadow:0 0 0 3px var(--adm-primary-focus-ring, rgba(22, 119, 255, .12)), var(--adm-shadow-sm);
|
||
}
|
||
|
||
.adm-mini-bar-label{
|
||
font-size:12px;
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
white-space:nowrap;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
min-width:0; /* for css grid ellipsis */
|
||
}
|
||
|
||
.adm-mini-bar-value{
|
||
text-align:right;
|
||
font-size:12px;
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
white-space:nowrap;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
min-width:0; /* for css grid ellipsis */
|
||
}
|
||
|
||
.collapsible > summary{
|
||
list-style:none;
|
||
cursor:pointer;
|
||
}
|
||
|
||
.collapsible > summary::-webkit-details-marker{
|
||
display:none;
|
||
}
|
||
|
||
.collapsible-summary{
|
||
user-select:none;
|
||
}
|
||
|
||
.collapsible-body{
|
||
margin-top:10px;
|
||
}
|
||
|
||
/* 平台订单:工具区(两列分组卡片化,避免表单散落) */
|
||
.tool-grid{
|
||
display:grid;
|
||
grid-template-columns:repeat(2,minmax(0,1fr));
|
||
gap:12px;
|
||
align-items:stretch;
|
||
}
|
||
|
||
/* 工具区:统一“被治理阻断”提示样式(避免 Blade 内散落的 class 组合) */
|
||
.adm-tool-blocked-hint{
|
||
margin-top:6px;
|
||
font-size:12px;
|
||
line-height:1.5;
|
||
color:var(--adm-error, #ef4444);
|
||
}
|
||
|
||
/* 工具区:按钮被禁用时的“软提示”视觉(更像 Ant Design Pro 的 disabled + hint 组合) */
|
||
.tool-group button[disabled]{
|
||
opacity:.55;
|
||
cursor:not-allowed;
|
||
}
|
||
.tool-group button[disabled] + .adm-tool-blocked-hint{
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
}
|
||
|
||
/* 防止 focus-box(border) + 内部 form 宽度造成列间“压线/重叠” */
|
||
.tool-grid > *{
|
||
min-width:0;
|
||
}
|
||
|
||
@media (max-width: 768px){
|
||
.tool-grid{
|
||
grid-template-columns:1fr;
|
||
}
|
||
}
|
||
|
||
.tool-group{
|
||
width:100%;
|
||
height:100%;
|
||
display:flex;
|
||
flex-direction:column;
|
||
}
|
||
|
||
.tool-group-title{
|
||
font-size:12px;
|
||
color:#94a3b8;
|
||
text-transform:uppercase;
|
||
letter-spacing:.08em;
|
||
font-weight:700;
|
||
margin:0 0 10px;
|
||
}
|
||
|
||
.tool-group-subtitle{
|
||
margin:0 0 6px;
|
||
}
|
||
|
||
/* 平台订单列表:避免列太多导致内容挤压成“竖排/断字” */
|
||
.table-wrap{
|
||
width:100%;
|
||
overflow-x:auto;
|
||
}
|
||
|
||
.table-wrap table.platform-orders-table{
|
||
min-width:1600px;
|
||
}
|
||
|
||
/* 平台订单列表:根据视图控制 min-width(精简视图更紧凑,full 视图更宽) */
|
||
.platform-orders-table.is-compact{
|
||
min-width:1400px;
|
||
}
|
||
|
||
.platform-orders-table.is-full{
|
||
min-width:2000px;
|
||
}
|
||
|
||
.table-nowrap th,
|
||
.table-nowrap td{
|
||
white-space:nowrap;
|
||
word-break:normal;
|
||
}
|
||
|
||
/* 平台订单列表:精简视图(默认隐藏部分列,避免列表过长) */
|
||
.platform-orders-table .col-optional{
|
||
display:none;
|
||
}
|
||
|
||
.platform-orders-table.is-full .col-optional{
|
||
display:table-cell;
|
||
}
|
||
|
||
/* 平台订单列表(精简视图):进一步收敛信息密度 */
|
||
.platform-orders-table.is-compact td{
|
||
padding-top:8px;
|
||
padding-bottom:8px;
|
||
}
|
||
|
||
.platform-orders-table.is-compact .muted-xs{
|
||
font-size:12px;
|
||
}
|
||
|
||
/* 平台订单列表:二行辅助信息(例如 线索/订阅ID) */
|
||
.platform-orders-table .row-meta{
|
||
margin-top:2px;
|
||
}
|
||
|
||
/* 平台订单列表:行内治理提示(精简视图主要入口) */
|
||
.platform-orders-table .row-warn{
|
||
margin-top:4px;
|
||
padding:4px 6px;
|
||
border-left:3px solid var(--adm-error, #ef4444);
|
||
background:#fff9f9;
|
||
border-radius:4px;
|
||
cursor:help;
|
||
}
|
||
|
||
/* Dashboard 最近平台订单:同类提示块样式(额外增加横向滚动以保持同一行) */
|
||
[data-page="admin.dashboard"] .row-warn{
|
||
margin-top:4px;
|
||
padding:4px 6px;
|
||
border-left:3px solid var(--adm-error, #ef4444);
|
||
background:#fff9f9;
|
||
border-radius:4px;
|
||
cursor:help;
|
||
|
||
/* 最近平台订单:提示块内通常是“标签 + 多个短链接”,应尽量保持同一行,避免“进入集合”被挤到换行导致观感不稳 */
|
||
white-space:nowrap;
|
||
overflow-x:auto;
|
||
-webkit-overflow-scrolling:touch;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .row-warn::-webkit-scrollbar{
|
||
height:6px;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .row-warn::-webkit-scrollbar-thumb{
|
||
background:rgba(239, 68, 68, .25);
|
||
border-radius:6px;
|
||
}
|
||
|
||
.platform-orders-table .row-warn a.link{
|
||
color:var(--adm-error, #ef4444);
|
||
text-decoration:underline;
|
||
}
|
||
|
||
.platform-orders-table .row-warn a.link:hover{
|
||
text-decoration:none;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .row-warn a.link{
|
||
color:var(--adm-error, #ef4444);
|
||
text-decoration:underline;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .row-warn a.link:hover{
|
||
text-decoration:none;
|
||
}
|
||
|
||
.platform-orders-table .row-warn-prefix{
|
||
font-weight:600;
|
||
display:inline-block;
|
||
padding:1px 6px;
|
||
border-radius:10px;
|
||
background:var(--adm-error-tint, rgba(239, 68, 68, .12));
|
||
color:var(--adm-error, #ef4444);
|
||
margin-right:4px;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .row-warn-prefix{
|
||
font-weight:600;
|
||
display:inline-block;
|
||
padding:1px 6px;
|
||
border-radius:10px;
|
||
background:var(--adm-error-tint, rgba(239, 68, 68, .12));
|
||
color:var(--adm-error, #ef4444);
|
||
margin-right:4px;
|
||
}
|
||
|
||
/* 仪表盘最近订单:避免内容把表格/卡片撑破导致横向溢出 */
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"]{
|
||
table-layout:fixed;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] th:nth-child(1),
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] td:nth-child(1){
|
||
width:140px;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] th:nth-child(3),
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] td:nth-child(3){
|
||
width:110px;
|
||
white-space:nowrap;
|
||
}
|
||
|
||
/* 仪表盘最近订单:避免「支付」表头在窄宽下被拆成竖排(CJK 可在任意字间断行) */
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] th:nth-child(4),
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] td:nth-child(4){
|
||
width:86px;
|
||
white-space:nowrap;
|
||
min-width:56px;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] th:nth-child(5),
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] td:nth-child(5){
|
||
width:140px;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] [data-role="recent-platform-orders-table"] td:nth-child(1) a.link{
|
||
display:block;
|
||
max-width:100%;
|
||
overflow:hidden;
|
||
text-overflow:ellipsis;
|
||
white-space:nowrap;
|
||
}
|
||
|
||
/* 仪表盘最近订单:扫描信息行(用于快速判断治理状态,不替代下方治理提示入口) */
|
||
[data-page="admin.dashboard"] .adm-order-scanline{
|
||
margin-top:3px;
|
||
line-height:1.4;
|
||
/* 避免 "BMPA:正常|订阅:缺" 等短标签在窄屏下被拆行造成抖动 */
|
||
white-space:nowrap;
|
||
overflow-x:auto;
|
||
-webkit-overflow-scrolling:touch;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .adm-order-scanitem strong{
|
||
font-weight:700;
|
||
}
|
||
|
||
[data-page="admin.dashboard"] .adm-order-scansep{
|
||
color:var(--adm-text-muted, #94a3b8);
|
||
padding:0 2px;
|
||
}
|
||
|
||
/* 平台订单详情页:锚点直达高亮(从仪表盘/集合跳转时更清晰) */
|
||
#relation-subscription:target,
|
||
#sync-failed:target,
|
||
#bmpa-failed:target,
|
||
#payment-receipts:target,
|
||
#add-payment-receipt:target,
|
||
#refund-receipts:target,
|
||
#add-refund-receipt:target{
|
||
scroll-margin-top:90px;
|
||
box-shadow:0 0 0 3px var(--adm-primary-focus-ring, rgba(22, 119, 255, .12)), var(--adm-shadow-sm);
|
||
}
|
||
|
||
/* 平台订单列表:精简视图也要可达的治理提示(对账/退款不一致) */
|
||
.platform-orders-table .governance-hints{
|
||
margin-bottom:6px;
|
||
}
|
||
|
||
.platform-orders-table .governance-hint{
|
||
line-height:1.4;
|
||
}
|
||
|
||
/* 总台管理:顶部导航(顶部主菜单保留,但视觉对齐 Ant Design Pro Header) */
|
||
.sidebar.topnav{
|
||
white-space:normal;
|
||
overflow-x:visible;
|
||
background:var(--adm-bg-header, #ffffff);
|
||
border-bottom:1px solid var(--adm-border-color, #e5e7eb);
|
||
box-shadow:var(--adm-shadow-header, none);
|
||
}
|
||
|
||
.topnav-row{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:16px;
|
||
flex-wrap:wrap;
|
||
}
|
||
|
||
.topnav-brand{
|
||
display:inline-flex;
|
||
align-items:center;
|
||
font-weight:800;
|
||
color:var(--adm-text, #0f172a);
|
||
padding:8px 10px;
|
||
border-radius:var(--adm-radius-sm, 10px);
|
||
}
|
||
|
||
.topnav-brand:hover{
|
||
text-decoration:none;
|
||
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
|
||
}
|
||
|
||
.topnav-menu{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:8px;
|
||
flex:1;
|
||
flex-wrap:wrap;
|
||
}
|
||
|
||
.topnav-link,
|
||
.topnav-summary{
|
||
display:inline-flex;
|
||
align-items:center;
|
||
gap:6px;
|
||
padding:8px 10px;
|
||
border-radius:var(--adm-radius-sm, 10px);
|
||
color:var(--adm-text-secondary, #64748b);
|
||
}
|
||
|
||
.topnav-link:hover,
|
||
.topnav-summary:hover{
|
||
text-decoration:none;
|
||
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
|
||
color:var(--adm-text, #0f172a);
|
||
}
|
||
|
||
.topnav-item{
|
||
position:relative;
|
||
}
|
||
|
||
.topnav-item > summary::-webkit-details-marker{
|
||
display:none;
|
||
}
|
||
|
||
.topnav-item > summary{
|
||
list-style:none;
|
||
cursor:pointer;
|
||
user-select:none;
|
||
}
|
||
|
||
.topnav-dropdown{
|
||
position:absolute;
|
||
top:calc(100% + 8px);
|
||
left:0;
|
||
min-width:180px;
|
||
background:var(--adm-bg-container, #ffffff);
|
||
border:1px solid var(--adm-border-color, #e5e7eb);
|
||
border-radius:var(--adm-radius, 12px);
|
||
padding:10px;
|
||
box-shadow:var(--adm-shadow-popover);
|
||
z-index:100;
|
||
}
|
||
|
||
/* details 未展开时不展示下拉 */
|
||
.topnav-item:not([open]) .topnav-dropdown{
|
||
display:none;
|
||
}
|
||
|
||
.topnav-sub{
|
||
display:block;
|
||
padding:9px 10px;
|
||
border-radius:var(--adm-radius-sm, 10px);
|
||
color:var(--adm-text, #0f172a);
|
||
margin:0;
|
||
}
|
||
|
||
.topnav-sub:hover{
|
||
text-decoration:none;
|
||
background:var(--adm-primary-tint-08, rgba(22, 119, 255, .08));
|
||
}
|
||
|
||
.topnav-actions{
|
||
display:flex;
|
||
align-items:center;
|
||
gap:10px;
|
||
}
|
||
|
||
.topnav-meta{
|
||
margin-top:6px;
|
||
}
|
||
|
||
/* 移动端:下拉改为文档流(避免 absolute 导致溢出) */
|
||
@media (max-width: 768px){
|
||
.topnav-row{gap:10px;}
|
||
.topnav-dropdown{
|
||
position:static;
|
||
min-width:auto;
|
||
box-shadow:none;
|
||
margin-top:6px;
|
||
}
|
||
}
|
||
|
||
/* 兼容:旧的左侧导航二级分组样式(保留但不再作为主形态) */
|
||
.sidebar .nav-group{
|
||
margin:10px 0;
|
||
}
|
||
|
||
.sidebar .nav-group-title{
|
||
cursor:pointer;
|
||
user-select:none;
|
||
color:#94a3b8;
|
||
font-size:12px;
|
||
text-transform:uppercase;
|
||
letter-spacing:.08em;
|
||
font-weight:700;
|
||
margin:0 0 6px;
|
||
list-style:none;
|
||
}
|
||
|
||
.sidebar .nav-group summary::-webkit-details-marker{
|
||
display:none;
|
||
}
|
||
|
||
.sidebar .nav-item--sub{
|
||
display:block;
|
||
padding-left:12px;
|
||
}
|