feat(audit): connect rule center to live asset APIs

This commit is contained in:
caoxiaozhu
2026-05-11 06:32:38 +00:00
parent 9b39df6277
commit e9eeb2e41d
4 changed files with 2099 additions and 839 deletions

View File

@@ -27,9 +27,11 @@
}
.skill-list {
display: grid;
grid-template-rows: auto auto auto minmax(0, 1fr);
display: flex;
flex-direction: column;
min-height: 0;
padding: 18px 20px;
overflow: hidden;
}
.status-tabs {
@@ -73,13 +75,15 @@
.filter-set {
display: flex;
align-items: center;
gap: 10px;
flex: 1 1 auto;
flex-wrap: wrap;
}
.search-filter {
width: 260px;
min-height: 36px;
width: 280px;
min-height: 38px;
display: inline-flex;
align-items: center;
gap: 8px;
@@ -109,23 +113,150 @@
color: #94a3b8;
}
.filter-btn,
.search-filter:focus-within {
border-color: rgba(16, 185, 129, 0.48);
box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);
}
.picker-trigger,
.ghost-filter-btn,
.create-btn,
.row-action {
min-height: 36px;
min-height: 38px;
border-radius: 8px;
font-size: 13px;
font-weight: 760;
}
.filter-btn {
.picker-filter {
position: relative;
}
.picker-trigger {
min-width: 124px;
display: inline-flex;
align-items: center;
gap: 6px;
padding: 0 12px;
justify-content: space-between;
gap: 8px;
padding: 0 34px 0 12px;
border: 1px solid #d7e0ea;
background: #fff;
color: #334155;
white-space: nowrap;
}
.picker-label {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.picker-trigger .mdi {
position: absolute;
right: 12px;
top: 50%;
transform: translateY(-50%);
color: #64748b;
pointer-events: none;
}
.picker-trigger:hover,
.picker-filter.open .picker-trigger {
border-color: rgba(16, 185, 129, 0.34);
background: #f6fffb;
color: #0f9f78;
}
.picker-popover {
position: absolute;
top: calc(100% + 8px);
left: 0;
width: 224px;
z-index: 40;
display: grid;
gap: 14px;
padding: 16px;
border: 1px solid #d7e0ea;
border-radius: 12px;
background: #fff;
box-shadow: 0 18px 42px rgba(15, 23, 42, 0.16);
}
.picker-popover header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
}
.picker-popover header strong {
color: #0f172a;
font-size: 15px;
}
.picker-popover header button {
width: 30px;
height: 30px;
display: grid;
place-items: center;
border: 0;
border-radius: 8px;
background: transparent;
color: #64748b;
}
.picker-popover header button:hover {
background: #f1f5f9;
color: #0f172a;
}
.picker-option-list {
display: grid;
gap: 8px;
max-height: 240px;
overflow-y: auto;
}
.picker-option {
min-height: 36px;
display: inline-flex;
align-items: center;
padding: 0 12px;
border: 1px solid #d7e0ea;
border-radius: 8px;
background: #fff;
color: #334155;
font-size: 13px;
font-weight: 750;
text-align: left;
}
.picker-option:hover,
.picker-option.active {
border-color: rgba(16, 185, 129, 0.32);
background: rgba(16, 185, 129, 0.08);
color: #059669;
}
.toolbar-actions {
display: flex;
align-items: center;
gap: 10px;
}
.ghost-filter-btn {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 0 12px;
border: 1px solid #d7e0ea;
background: #fff;
color: #475569;
}
.ghost-filter-btn:hover {
border-color: rgba(16, 185, 129, 0.28);
color: #059669;
}
.create-btn {
@@ -139,6 +270,13 @@
box-shadow: 0 8px 18px rgba(5, 150, 105, 0.18);
}
.create-btn:disabled {
background: #cbd5e1;
color: #f8fafc;
box-shadow: none;
cursor: not-allowed;
}
.hint {
display: inline-flex;
align-items: center;
@@ -152,13 +290,113 @@
color: #94a3b8;
}
.active-filter-strip {
display: flex;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 12px;
}
.active-filter-chip {
min-height: 28px;
display: inline-flex;
align-items: center;
padding: 0 10px;
border-radius: 999px;
background: rgba(16, 185, 129, 0.1);
color: #047857;
font-size: 12px;
font-weight: 800;
}
.table-wrap {
flex: 1 1 auto;
position: relative;
min-height: 0;
overflow: auto;
border: 1px solid #edf2f7;
border-radius: 12px;
}
.table-state,
.detail-inline-state {
min-height: 220px;
display: grid;
place-items: center;
gap: 12px;
padding: 28px 24px;
text-align: center;
color: #64748b;
}
.detail-inline-state {
min-height: 180px;
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
text-align: left;
}
.table-state i,
.detail-inline-state i {
font-size: 28px;
color: #94a3b8;
}
.table-state.error i,
.detail-inline-state.error i {
color: #dc2626;
}
.table-state.empty i {
color: #0ea5e9;
}
.table-state p,
.detail-inline-state p {
margin-top: 6px;
font-size: 13px;
line-height: 1.6;
}
.detail-inline-state strong {
color: #0f172a;
font-size: 14px;
font-weight: 850;
}
.detail-inline-state > div {
flex: 1 1 auto;
}
.state-action {
height: 36px;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 14px;
border: 1px solid rgba(16, 185, 129, 0.28);
border-radius: 8px;
background: #fff;
color: #059669;
font-size: 13px;
font-weight: 760;
}
.list-foot {
display: flex;
align-items: center;
justify-content: flex-end;
padding-top: 12px;
}
.page-summary {
color: #64748b;
font-size: 12px;
font-weight: 700;
}
table {
width: 100%;
min-width: 1120px;
@@ -268,6 +506,16 @@ tbody tr.spotlight {
color: #6366f1;
}
.status-pill.danger {
background: #fee2e2;
color: #dc2626;
}
.status-pill.disabled {
background: #e2e8f0;
color: #475569;
}
.row-action {
padding: 0 12px;
border: 1px solid rgba(16, 185, 129, 0.32);
@@ -275,6 +523,10 @@ tbody tr.spotlight {
color: #059669;
}
.row-action:hover {
background: rgba(16, 185, 129, 0.08);
}
.detail-scroll {
height: 100%;
overflow: auto;
@@ -285,6 +537,8 @@ tbody tr.spotlight {
.detail-hero {
display: grid;
grid-template-columns: minmax(0, 1fr) 320px;
align-items: start;
gap: 10px;
padding: 16px 20px;
}
@@ -336,6 +590,34 @@ tbody tr.spotlight {
margin-top: 10px;
}
.review-note-block {
display: grid;
gap: 6px;
margin-top: 12px;
padding: 12px 14px;
border: 1px solid rgba(16, 185, 129, 0.16);
border-radius: 12px;
background: linear-gradient(180deg, #f8fffc, #ffffff);
}
.review-note-block strong {
color: #0f172a;
font-size: 13px;
font-weight: 850;
}
.review-note-block p,
.review-note-block span {
color: #64748b;
font-size: 12px;
line-height: 1.6;
}
.review-note-block.muted {
border-color: #e2e8f0;
background: #f8fafc;
}
.hero-review-meta span {
display: inline-flex;
align-items: center;
@@ -491,6 +773,13 @@ tbody tr.spotlight {
resize: vertical;
}
.field input[readonly],
.field textarea[readonly],
.prompt-block textarea[readonly] {
background: #f8fafc;
color: #334155;
}
.markdown-card {
min-height: 620px;
display: grid;
@@ -511,6 +800,39 @@ tbody tr.spotlight {
white-space: pre;
}
.markdown-editor.disabled {
background: #f8fafc;
color: #475569;
}
.subtle-banner,
.editor-foot {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
flex-wrap: wrap;
}
.subtle-banner {
min-height: 38px;
margin-bottom: 10px;
padding: 0 12px;
border: 1px solid #e0f2fe;
border-radius: 10px;
background: #f0f9ff;
color: #0369a1;
font-size: 12px;
font-weight: 700;
}
.editor-foot {
margin-top: 12px;
color: #64748b;
font-size: 12px;
line-height: 1.5;
}
.skill-review-side {
align-content: start;
padding-right: 8px;
@@ -637,6 +959,21 @@ tbody tr.spotlight {
line-height: 1.5;
}
.empty-side-note {
min-height: 120px;
display: grid;
place-items: center;
gap: 8px;
color: #64748b;
font-size: 13px;
text-align: center;
}
.empty-side-note i {
font-size: 24px;
color: #94a3b8;
}
.modal-backdrop {
position: fixed;
inset: 0;
@@ -830,6 +1167,26 @@ tbody tr.spotlight {
color: #ea580c;
}
.test-state.danger,
.tool-state.danger {
background: #fee2e2;
color: #dc2626;
}
.review-action-strip {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-top: 16px;
}
.action-help {
margin-top: 12px;
color: #64748b;
font-size: 12px;
line-height: 1.6;
}
.tag-list {
display: flex;
gap: 8px;
@@ -919,6 +1276,16 @@ tbody tr.spotlight {
color: #334155;
}
.minor-action.success-action {
border-color: rgba(5, 150, 105, 0.26);
color: #059669;
}
.minor-action.danger-action {
border-color: rgba(220, 38, 38, 0.2);
color: #dc2626;
}
.major-action {
border: 1px solid #059669;
background: #059669;
@@ -926,8 +1293,50 @@ tbody tr.spotlight {
box-shadow: 0 4px 12px rgba(5, 150, 105, .16);
}
.back-action:hover,
.minor-action:hover,
.major-action:hover,
.mini-btn:hover {
transform: translateY(-1px);
}
.back-action:disabled,
.minor-action:disabled,
.major-action:disabled,
.mini-btn:disabled {
opacity: 0.52;
cursor: not-allowed;
transform: none;
box-shadow: none;
}
.detail-meta-actions {
align-items: center;
}
.footer-note {
color: #64748b;
font-size: 12px;
font-weight: 700;
}
.mini-btn {
min-height: 36px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 0 12px;
border: 1px solid #d7e0ea;
border-radius: 8px;
background: #fff;
color: #334155;
font-size: 13px;
font-weight: 760;
}
.mini-btn.primary {
border-color: transparent;
border-color: #059669;
background: #059669;
color: #fff;
}
@@ -950,6 +1359,14 @@ tbody tr.spotlight {
.detail-grid.skill-md-detail-grid {
grid-template-columns: 1fr;
}
.skill-review-side {
padding-right: 0;
}
.review-card {
position: static;
}
}
@media (max-width: 860px) {
@@ -963,7 +1380,9 @@ tbody tr.spotlight {
.list-toolbar,
.card-head,
.detail-actions,
.detail-action-group {
.detail-action-group,
.toolbar-actions,
.detail-inline-state {
flex-direction: column;
align-items: stretch;
}
@@ -973,12 +1392,36 @@ tbody tr.spotlight {
overflow-x: auto;
}
.search-filter,
.picker-trigger,
.picker-filter,
.toolbar-actions > * {
width: 100%;
}
.picker-popover {
width: min(100vw - 64px, 320px);
}
.hero-stats,
.form-grid,
.contract-grid {
grid-template-columns: 1fr;
}
.review-action-strip,
.modal-actions {
flex-direction: column;
}
.version-modal-summary {
grid-template-columns: 1fr;
}
.version-modal-summary i {
transform: rotate(90deg);
}
.field.span-2 {
grid-column: span 1;
}