Files
Alfred/src/web/styles.css
lanyuanxiaoyao d5a0ba9e9e feat: 增加项目管理功能
引入 SQLite 数据库(Drizzle ORM + bun:sqlite),实现项目 CRUD 与归档/恢复/删除
生命周期管理,新增项目管理前端页面,migration 嵌入单文件构建产物保持部署体验。

- src/server/db: schema、connection、migration 执行器、项目数据访问层
- src/server/routes/projects: 7 个 API 端点(列表/创建/详情/更新/归档/恢复/删除)
- src/web: 项目管理页面(TDesign Table/Tabs/Dialog/Form),TanStack Query hooks
- scripts: 构建时嵌入 migration SQL,开发期独立 generate-migrations-data 脚本
- tests: 60 个后端测试 + 27 个前端测试,覆盖 DB/migration/API/路由/页面
- docs: 更新架构、后端、发布、配置、部署、使用文档
2026-05-27 18:54:44 +08:00

124 lines
2.3 KiB
CSS

:root {
--td-brand-color: var(--td-brand-color-7);
}
.app-layout {
min-height: 100vh;
background: var(--td-bg-color-page);
width: 100%;
}
.app-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 var(--td-comp-paddingLR-l);
background: var(--td-bg-color-container);
border-bottom: 1px solid var(--td-component-border);
height: 64px;
}
.app-header-left {
display: inline-flex;
align-items: center;
gap: var(--td-comp-margin-l);
}
.app-header-right {
display: inline-flex;
align-items: center;
gap: var(--td-comp-margin-s);
}
.app-brand-group {
display: inline-flex;
align-items: baseline;
gap: var(--td-comp-margin-s);
}
.app-brand {
margin: 0;
color: var(--td-text-color-primary);
font-size: calc(var(--td-font-size-title-large) + 6px);
font-weight: 700;
line-height: 1;
}
.app-version {
color: var(--td-text-color-placeholder);
font-size: var(--td-font-size-body-small);
font-weight: 400;
line-height: 1;
}
.app-sidebar-collapse-btn {
width: 100%;
justify-content: center;
color: var(--td-text-color-secondary);
}
.app-page-title {
color: var(--td-text-color-secondary);
font-size: var(--td-font-size-title-medium);
font-weight: 500;
}
.app-sidebar {
background: var(--td-bg-color-container);
border-right: 1px solid var(--td-component-border);
height: calc(100vh - 64px);
overflow: hidden;
}
.app-sidebar-menu {
height: 100%;
}
.app-content {
box-sizing: border-box;
padding: var(--td-comp-paddingTB-xl) var(--td-comp-paddingLR-xl);
min-height: calc(100vh - 64px);
}
.meta-response {
background: var(--td-bg-color-component);
border-radius: var(--td-radius-default);
padding: var(--td-comp-paddingTB-l) var(--td-comp-paddingLR-l);
font-size: var(--td-font-size-body-medium);
color: var(--td-text-color-primary);
overflow-x: auto;
}
.error-boundary-fallback {
padding-top: 20vh;
width: 100%;
}
.full-width {
width: 100%;
}
.text-disabled {
color: var(--td-text-color-disabled);
}
.full-width-space {
width: 100%;
}
.not-found-icon {
color: var(--td-warning-color);
}
.tabular-nums {
font-variant-numeric: tabular-nums;
}
.projects-header {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: var(--td-comp-margin-l);
}