/* 安全组管理:规则表单、批量操作、组详情及快捷规则网格。 */ /* 导入方: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-foot > .list-bulk[data-v-fe145bae]:empty { display: none; } [data-v-fe145bae] .p-tag { font-size: 0.875rem; font-weight: 500; } .field[data-v-fe145bae] { gap: 7px; } .field label[data-v-fe145bae] { font-size: 0.875rem; } .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; } }