瀏覽代碼

feat(frontend): 新增 v2 通用组件类(data-toolbar/data-table/compare-grid-3 等)

wangkangyjy 3 周之前
父節點
當前提交
2294c13d96
共有 1 個文件被更改,包括 228 次插入0 次删除
  1. 228 0
      frontend/src/styles/components.css

+ 228 - 0
frontend/src/styles/components.css

@@ -133,3 +133,231 @@
   border-radius: var(--radius-sm);
   font-size: 12px;
 }
+
+/* ===== v2 信息架构通用组件 ===== */
+
+/* 工具栏顶栏(替代 page-hero)*/
+.data-toolbar {
+  display: flex;
+  align-items: center;
+  gap: 12px;
+  height: var(--toolbar-height);
+  padding: 0 16px;
+  background: var(--toolbar-bg);
+  border-bottom: 1px solid var(--toolbar-border);
+  font-size: var(--font-size-base, 14px);
+}
+.data-toolbar__title {
+  font-size: 13px;
+  font-weight: 600;
+  color: var(--color-text);
+  letter-spacing: 0.2px;
+}
+.data-toolbar__sep {
+  color: var(--toolbar-border);
+}
+.data-toolbar__meta {
+  color: var(--color-text-secondary);
+  font-size: 12px;
+}
+.data-toolbar__spacer {
+  margin-left: auto;
+}
+
+/* 状态标签(色点 + 文字,复用现有 .status-dot)*/
+.status-label {
+  display: inline-flex;
+  align-items: center;
+  gap: 5px;
+  font-size: 11px;
+  font-weight: 500;
+}
+
+/* 大写小字标签 */
+.uppercase-label {
+  text-transform: var(--label-uppercase);
+  letter-spacing: var(--label-letter-spacing);
+  font-size: var(--label-font-size);
+  font-weight: 600;
+  color: var(--color-text-muted);
+}
+
+/* 区段色带标题 */
+.section-band {
+  padding: 7px 14px;
+  background: var(--section-band-bg);
+  color: var(--section-band-color);
+  font-size: var(--section-band-font-size);
+  font-weight: 700;
+  letter-spacing: var(--section-band-letter-spacing);
+  border-bottom: 1px solid var(--table-border);
+}
+
+/* 表格化数据容器 */
+.data-table {
+  width: 100%;
+  font-size: 12px;
+  background: var(--color-surface);
+}
+.data-table__header {
+  display: grid;
+  padding: 7px 16px;
+  background: var(--table-header-bg);
+  border-bottom: 1px solid var(--toolbar-border);
+  text-transform: var(--label-uppercase);
+  letter-spacing: var(--label-letter-spacing);
+  font-size: var(--label-font-size);
+  font-weight: 600;
+  color: var(--color-text-muted);
+}
+.data-table__row {
+  display: grid;
+  align-items: center;
+  padding: 7px 16px;
+  border-bottom: 1px solid var(--table-border);
+  min-height: var(--table-row-height-compact);
+  position: relative;
+}
+.data-table__row--group {
+  background: var(--table-row-group-bg);
+  font-weight: 600;
+  min-height: var(--table-row-height);
+}
+.data-table__row--child {
+  padding-left: 44px;
+  color: var(--color-text-secondary);
+}
+.data-table__row--child::before {
+  content: '└';
+  position: absolute;
+  margin-left: -20px;
+  color: var(--color-text-muted);
+}
+.data-table__row:hover {
+  background: var(--table-row-hover);
+}
+.data-table__row--clickable {
+  cursor: pointer;
+}
+
+/* 三列对照网格(评分页)*/
+.compare-grid-3 {
+  display: grid;
+  grid-template-columns: 1.4fr 70px 1fr;
+  align-items: center;
+  padding: 7px 14px;
+  border-bottom: 1px solid var(--table-border);
+  min-height: var(--table-row-height-compact);
+}
+.compare-grid-3__self {
+  text-align: center;
+  font-weight: 700;
+  font-size: 13px;
+}
+.compare-grid-3__header {
+  display: grid;
+  grid-template-columns: 1.4fr 70px 1fr;
+  padding: 6px 14px;
+  background: var(--table-header-bg);
+  border-bottom: 1px solid var(--toolbar-border);
+  text-transform: var(--label-uppercase);
+  letter-spacing: var(--label-letter-spacing);
+  font-size: var(--label-font-size);
+  font-weight: 600;
+  color: var(--color-text-muted);
+}
+
+/* 水平数据条(构成展示)*/
+.metric-bar {
+  margin-bottom: 10px;
+}
+.metric-bar__head {
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 4px;
+  font-size: 12px;
+}
+.metric-bar__label {
+  color: var(--color-text);
+  font-weight: 500;
+}
+.metric-bar__value {
+  color: var(--color-text);
+  font-weight: 600;
+}
+.metric-bar__value--muted {
+  color: var(--color-text-muted);
+  font-weight: 400;
+}
+.metric-bar__track {
+  height: 5px;
+  background: var(--color-border-soft);
+  border-radius: 3px;
+  overflow: hidden;
+}
+.metric-bar__fill {
+  height: 100%;
+  border-radius: 3px;
+}
+
+/* 侧边抽屉内容区 */
+.side-drawer__content {
+  padding: 0;
+}
+
+/* 底部固定总览栏(评分页)*/
+.review-summary-bar {
+  position: sticky;
+  bottom: 0;
+  display: flex;
+  align-items: center;
+  gap: 16px;
+  padding: 10px 14px;
+  background: var(--toolbar-bg);
+  border-top: 2px solid var(--color-brand);
+  z-index: 10;
+}
+.review-summary-bar__score {
+  font-size: 20px;
+  font-weight: 700;
+  color: var(--color-brand-strong);
+}
+
+/* 下划线式输入框(登录页,覆盖 Element Plus)*/
+.underline-input :deep(.el-input__wrapper) {
+  background: transparent;
+  box-shadow: none;
+  border-radius: 0;
+  border-bottom: 1px solid var(--toolbar-border);
+  padding: 4px 0;
+}
+.underline-input :deep(.el-input__wrapper.is-focus),
+.underline-input :deep(.el-input__wrapper:hover) {
+  border-bottom-color: var(--color-accent);
+  box-shadow: none;
+}
+.underline-input :deep(.el-input__inner) {
+  border: none;
+}
+
+/* 历史趋势 mini bar chart */
+.history-trend {
+  display: flex;
+  align-items: flex-end;
+  gap: 16px;
+  height: 48px;
+}
+.history-trend__item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 4px;
+}
+.history-trend__bar {
+  width: 24px;
+  border-radius: 2px;
+  background: var(--color-text-muted);
+}
+.history-trend__bar--current {
+  background: var(--color-brand);
+}