feat(web): 搭建 Web 壳层与 UI 包基线
React 19 + Vite 6 + Router 7 + TanStack Query + Zustand;Semi 二次封装与 Remix 图标统一出口;顶部模块 + 左侧功能菜单布局、Cloud Blue 主题、登录页与 401/403/404/500 页面;请求层含 token 注入、单飞刷新与统一错误提示。
This commit is contained in:
1 parent
23067edb8f
commit
073d210a92
51 files changed
+4452
No files matched your search
@@ -0,0 +1,100 @@
|
||||
/* 灵犀 UI 包组件样式:只使用 tokens.css 中的语义变量,不写颜色字面量 */
|
||||
.lx-empty {
|
||||
padding: 48px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lx-empty__action {
|
||||
margin-top: var(--lx-space-4);
|
||||
}
|
||||
|
||||
.lx-error-state {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: var(--lx-space-2);
|
||||
padding: 64px var(--lx-space-6);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.lx-error-state__icon {
|
||||
color: var(--lx-color-danger);
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.lx-error-state__title {
|
||||
margin: var(--lx-space-2) 0 0;
|
||||
color: var(--lx-color-text-primary);
|
||||
font-size: var(--lx-font-size-lg);
|
||||
line-height: var(--lx-line-height-tight);
|
||||
}
|
||||
|
||||
.lx-error-state__message {
|
||||
margin: 0;
|
||||
max-width: 42ch;
|
||||
color: var(--lx-color-text-secondary);
|
||||
font-size: var(--lx-font-size-sm);
|
||||
}
|
||||
|
||||
.lx-error-state__trace {
|
||||
margin: 0;
|
||||
color: var(--lx-color-text-tertiary);
|
||||
font-family: var(--lx-font-mono);
|
||||
font-size: var(--lx-font-size-xs);
|
||||
}
|
||||
|
||||
.lx-error-state__retry {
|
||||
margin-top: var(--lx-space-3);
|
||||
}
|
||||
|
||||
.lx-page-skeleton {
|
||||
padding: var(--lx-space-4) 0;
|
||||
}
|
||||
|
||||
.lx-query-form {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: var(--lx-space-4);
|
||||
margin-bottom: var(--lx-space-4);
|
||||
}
|
||||
|
||||
.lx-query-form__fields {
|
||||
display: flex;
|
||||
flex: 1 1 auto;
|
||||
flex-wrap: wrap;
|
||||
gap: var(--lx-space-2) var(--lx-space-4);
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.lx-query-form__actions {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
.lx-data-table .semi-table-container {
|
||||
border: 1px solid var(--lx-color-border);
|
||||
border-radius: var(--lx-radius-md);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.lx-data-table .semi-table-thead > .semi-table-row > .semi-table-row-head {
|
||||
background: var(--lx-color-bg-panel);
|
||||
color: var(--lx-color-text-secondary);
|
||||
font-size: var(--lx-font-size-xs);
|
||||
font-weight: 500;
|
||||
letter-spacing: 0.04em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.lx-data-table .semi-table-tbody > .semi-table-row > .semi-table-row-cell {
|
||||
border-bottom: 1px solid var(--lx-color-border);
|
||||
}
|
||||
|
||||
.lx-data-table .semi-table-tbody > .semi-table-row:hover > .semi-table-row-cell {
|
||||
background: var(--lx-color-bg-hover);
|
||||
}
|
||||
|
||||
.lx-form-modal .semi-modal-content {
|
||||
background: var(--lx-color-bg-elevated);
|
||||
}
|
||||
Reference in new issue
Block a user