Files
console-dev/app/assets/styles/groups.Buw8nwl1.css
T
cneicy 42dfead9cd
前端验证 / verify (push) Failing after 15m3s
feat(ui): 优化控制台响应式布局与视觉体验
- 统一页面标题、圆角、字体和响应式断点,调整暗色主题及图表配色
- 新增表格列标签插件,在窄屏下将表格转换为卡片布局,优化实例、订单、工单等列表展示
- 支持移动端点击订单行进入详情,并完善订单凭据的打印布局
- 在财务中心展示本月及累计消费,补充充值关闭时的提示
- 优化工单详情布局,将附件上传入口整合至富文本编辑器工具栏
- 调整实例操作按钮、SSH 密钥操作及安全菜单图标
- 为多个页面显式导入 definePageMeta,完善页面元数据声明
2026-11-07 00:09:57 +08:00

295 lines
6.4 KiB
CSS

/* 安全组管理:规则表单、批量操作、组详情及快捷规则网格。 */
/* 导入方:app/pages/security/groups/index.vue。 */
.row-actions[data-v-fe145bae] {
align-items: center;
gap: 4px;
display: flex;
}
.form[data-v-fe145bae] {
gap: 14px;
}
.field[data-v-fe145bae],
.form[data-v-fe145bae] {
flex-direction: column;
display: flex;
}
.field label[data-v-fe145bae] {
color: var(--p-text-color, #334155);
font-size: 0.9375rem;
}
.req[data-v-fe145bae] {
color: #ef4444;
}
/* 安全组规则编辑区域;端口/协议/CIDR校验由业务脚本和后端执行。 */
.rules[data-v-fe145bae] {
gap: 12px;
}
.dlg-tabs[data-v-fe145bae] {
background: var(--p-content-hover-background);
border-radius: var(--radius-md);
align-self: flex-start;
gap: 4px;
padding: 3px;
display: flex;
}
.dlg-tabs button[data-v-fe145bae] {
color: var(--p-text-muted-color, #64748b);
cursor: pointer;
background: 0 0;
border: 0;
border-radius: var(--radius-md);
padding: 6px 18px;
font-size: 0.9375rem;
}
.dlg-tabs button.active[data-v-fe145bae] {
background: var(--p-content-background);
color: var(--p-text-color);
font-weight: 500;
}
.batch-dlg[data-v-fe145bae] {
flex-direction: column;
gap: 12px;
display: flex;
}
.batch-hint[data-v-fe145bae] {
color: var(--p-text-muted-color, #94a3b8);
margin: 0;
font-size: 0.875rem;
line-height: 1.9;
}
.batch-hint code[data-v-fe145bae] {
background: var(--p-content-hover-background);
border-radius: var(--radius-sm);
padding: 1px 5px;
font-size: 0.875rem;
}
.sg-note[data-v-fe145bae] {
color: var(--p-text-muted-color, #94a3b8);
margin: 10px 0 0;
font-size: 0.875rem;
line-height: 1.8;
}
.rule-add[data-v-fe145bae] {
border: 1px dashed var(--p-content-border-color, #e2e8f0);
border-radius: var(--radius-lg);
padding: 12px;
}
.rule-form[data-v-fe145bae] {
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.rule-error[data-v-fe145bae] {
margin-top: 10px;
}
.w-90[data-v-fe145bae] {
width: 90px;
}
.w-100[data-v-fe145bae] {
width: 100px;
}
.w-port[data-v-fe145bae] {
width: 170px;
}
.w-160[data-v-fe145bae] {
width: 160px;
}
.grow[data-v-fe145bae] {
flex: 1;
min-width: 140px;
}
.mono[data-v-fe145bae] {
font-family: var(--font-mono);
font-size: 0.875rem;
}
.empty-rule[data-v-fe145bae] {
text-align: center;
color: var(--p-text-muted-color, #94a3b8);
padding: 20px 0;
font-size: 0.9375rem;
}
.list-page[data-v-fe145bae] {
gap: 21px;
}
.list-head h2[data-v-fe145bae],
.page-head h2[data-v-fe145bae] {
margin: 0;
font-size: var(--page-title-size);
font-weight: 600;
line-height: 24.5px;
}
.list-toolbar[data-v-fe145bae],
.list-toolbar-right[data-v-fe145bae] {
justify-content: flex-start;
gap: 7px;
}
.list-search[data-v-fe145bae],
.list-select[data-v-fe145bae] {
width: 280px;
}
.list-table[data-v-fe145bae] {
border-radius: var(--radius-md);
box-shadow: 0 1px 3px #0f172a12;
}
.list-foot[data-v-fe145bae] {
justify-content: center;
}
.list-foot > .list-bulk[data-v-fe145bae]:empty {
display: none;
}
[data-v-fe145bae] .p-datatable-header-cell {
background: var(--p-content-hover-background);
padding: 10.5px 14px;
font-size: 1rem;
font-weight: 600;
}
[data-v-fe145bae] .p-datatable-tbody > tr > td {
padding: 10.5px 14px;
font-size: 1rem;
}
[data-v-fe145bae] .p-tag {
font-size: 0.875rem;
font-weight: 500;
}
[data-v-fe145bae] .list-empty {
gap: 14px;
min-height: 300px;
padding: 42px 21px;
}
[data-v-fe145bae] .list-empty i {
opacity: 1;
font-size: 1.875rem;
}
[data-v-fe145bae] .list-empty-title {
font-size: 1rem;
}
[data-v-fe145bae] .list-empty-desc {
font-size: 0.875rem;
}
.field[data-v-fe145bae] {
gap: 7px;
}
.field label[data-v-fe145bae] {
font-size: 0.875rem;
}
/* 视口条件 (width<=768px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */
@media (width<=768px) {
.list-search[data-v-fe145bae],
.list-select[data-v-fe145bae],
.list-toolbar-right[data-v-fe145bae] {
width: 100%;
}
}
.detail-back[data-v-fe145bae],
.group-name[data-v-fe145bae] {
color: inherit;
font: inherit;
cursor: pointer;
background: 0 0;
border: 0;
padding: 0;
}
.group-name[data-v-fe145bae]:hover {
color: var(--p-primary-color);
}
.detail-back[data-v-fe145bae] {
color: var(--p-text-muted-color);
margin-bottom: 14px;
font-size: 0.875rem;
}
.group-detail[data-v-fe145bae] {
min-width: 0;
}
.group-detail-head[data-v-fe145bae] {
justify-content: space-between;
align-items: center;
gap: 21px;
margin-bottom: 21px;
display: flex;
}
.group-detail-head h2[data-v-fe145bae] {
margin: 0 0 14px;
font-size: 1.125rem;
}
.group-detail-head h2 small[data-v-fe145bae] {
font-weight: 400;
}
.group-detail-head h2 small[data-v-fe145bae],
.group-meta[data-v-fe145bae] {
color: var(--p-text-muted-color);
font-size: 0.875rem;
}
.group-meta[data-v-fe145bae] {
gap: 28px;
display: flex;
}
.group-meta b[data-v-fe145bae] {
color: var(--p-text-color);
font-weight: 400;
}
.rules[data-v-fe145bae] {
flex-direction: column;
gap: 21px;
display: flex;
}
.dlg-tabs[data-v-fe145bae] {
border-bottom: 1px solid var(--p-content-border-color);
background: 0 0;
border-radius: 0;
gap: 0;
padding: 0;
}
.dlg-tabs button[data-v-fe145bae] {
border-radius: 0;
padding: 14px;
}
.dlg-tabs button.active[data-v-fe145bae] {
color: var(--p-primary-color);
border-bottom: 2px solid var(--p-primary-color);
box-shadow: none;
background: 0 0;
}
.rule-toolbar[data-v-fe145bae] {
gap: 7px;
display: flex;
}
.rule-form[data-v-fe145bae] {
flex-direction: column;
align-items: stretch;
gap: 14px;
margin-top: 21px;
display: flex;
}
.rule-form[data-v-fe145bae] > * {
width: 100%;
}
.quick-grid[data-v-fe145bae] {
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
display: grid;
}
.quick-grid label[data-v-fe145bae] {
align-items: center;
gap: 7px;
font-size: 0.875rem;
display: flex;
}
.group-detail[data-v-fe145bae] .p-datatable {
border: 1px solid var(--p-content-border-color);
background: var(--p-content-background);
border-radius: var(--radius-md);
}
/* 视口条件 (width<=768px) 下的响应式覆盖;保留相对基础规则的层叠顺序。 */
@media (width<=768px) {
.group-detail-head[data-v-fe145bae] {
flex-direction: column;
align-items: flex-start;
}
.quick-grid[data-v-fe145bae] {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.group-detail-head .row-actions[data-v-fe145bae] {
flex-wrap: wrap;
}
}