chore(release): freeze v0.2.0
版本冻结 v0.2.0,固化 2026-09-24 本轮全部变更。 admin-web: - 修复旧物善用管理页缺失样式类 .workspace-view / .view-header / .table-wrap, 此前页面无内边距导致内容被侧边栏遮挡、窄屏表格无横向滚动 - 修复服务统计页缺失样式类 .dashboard-grid / .dashboard-card / .stat-row, 此前 8 个指标卡退化为裸文本堆叠 - 补齐未定义的 --shadow-card 变量(财务编辑面板阴影此前失效) - 侧边栏 13 项导航由手写重复改为 NAV_ITEMS 数据驱动,并按业务顺序重排 - AdminIcon 补齐 coins / phone / volunteer / flag / calendar / recycle 语义图标 - 侧边栏行高与间距压缩使 13 项一屏放下,滚动条隐藏 - 小于等于 760px 断点导航由 display:none 改为横向滚动,移动端恢复可切换 api: - prisma.config.ts 显式加载仓库根 .env,修复 prisma generate / migrate 取不到 DATABASE_URL - dev / bootstrap:admin / test:integration 增加 tsx --env-file-if-exists=../../.env miniprogram: - custom-tab-bar 选中态与申请表单分步流程抽为可测纯函数并补充单测 - 页面完整性门禁脚本增强 工程: - 版本统一升位 0.1.0 到 0.2.0(根与 4 个 workspace 包) - .gitignore 增加 .pnpm-store/、.workbuddy/、微信开发者工具私人配置 与仓库根目录误生成的工程配置,避免本地产物与机器相关信息入库 验证:pnpm lint 通过、pnpm test:unit 19 个用例通过、miniprogram typecheck 通过、 admin-web typecheck 与 build 通过、pnpm install --frozen-lockfile 未改写 lockfile、 无头浏览器端到端登录复验通过、待提交内容密钥扫描无命中。 说明:本轮定位并排除了一起 Prisma 生成目录残缺事故——API 开发进程与并发的 prisma generate 争抢同一输出目录,Windows 文件锁导致只生成 34/56 个模型文件, 使 TS 全量类型解析失败并产生数千条 lint 报错;停止竞争进程后干净重新生成即恢复。 该生成目录已被 .gitignore 忽略,不进入版本库。
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
--color-background: var(--primitive-gray-50);
|
||||
--color-border: var(--primitive-gray-200);
|
||||
--color-sidebar: var(--primitive-navy-900);
|
||||
--shadow-card: 0 3px 12px rgb(0 0 0 / 4%);
|
||||
--focus-ring: 0 0 0 3px rgb(255 107 53 / 28%);
|
||||
color: var(--color-text);
|
||||
background: var(--color-background);
|
||||
@@ -694,13 +695,19 @@ input[aria-invalid='true'] {
|
||||
}
|
||||
.admin-sidebar nav {
|
||||
margin-top: 28px;
|
||||
min-height: 0;
|
||||
flex: 1 1 auto;
|
||||
overflow-y: auto;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
.admin-sidebar nav::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.nav-item {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
min-height: 48px;
|
||||
padding: 10px 14px;
|
||||
min-height: 42px;
|
||||
padding: 8px 14px;
|
||||
border: 0;
|
||||
border-radius: 10px;
|
||||
color: #e8edf2;
|
||||
@@ -723,7 +730,7 @@ input[aria-invalid='true'] {
|
||||
}
|
||||
.admin-sidebar nav {
|
||||
display: grid;
|
||||
gap: 6px;
|
||||
gap: 4px;
|
||||
}
|
||||
.inline-actions {
|
||||
display: flex;
|
||||
@@ -735,6 +742,7 @@ input[aria-invalid='true'] {
|
||||
}
|
||||
.phase-note {
|
||||
margin-top: auto;
|
||||
flex-shrink: 0;
|
||||
padding: 14px;
|
||||
border-radius: 10px;
|
||||
color: #cbd3dc;
|
||||
@@ -1016,6 +1024,31 @@ input[aria-invalid='true'] {
|
||||
margin: 0 auto;
|
||||
padding: 28px;
|
||||
}
|
||||
.workspace-view {
|
||||
width: min(1440px, 100%);
|
||||
margin: 0 auto;
|
||||
padding: 28px;
|
||||
}
|
||||
.view-header {
|
||||
display: flex;
|
||||
margin-bottom: 22px;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 24px;
|
||||
}
|
||||
.view-header h1 {
|
||||
margin: 0;
|
||||
font-size: 28px;
|
||||
line-height: 1.3;
|
||||
}
|
||||
.view-header p {
|
||||
margin: 8px 0 0;
|
||||
color: var(--color-text-secondary);
|
||||
line-height: 1.6;
|
||||
}
|
||||
.table-wrap {
|
||||
overflow-x: auto;
|
||||
}
|
||||
.page-header {
|
||||
display: flex;
|
||||
margin-bottom: 22px;
|
||||
@@ -1316,6 +1349,38 @@ tbody tr:hover {
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 16px;
|
||||
}
|
||||
.dashboard-grid {
|
||||
display: grid;
|
||||
margin-bottom: 20px;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 16px;
|
||||
}
|
||||
.dashboard-card {
|
||||
display: grid;
|
||||
padding: 18px;
|
||||
gap: 6px;
|
||||
border: 1px solid var(--color-border);
|
||||
border-radius: 14px;
|
||||
background: var(--color-surface);
|
||||
box-shadow: var(--shadow-card);
|
||||
}
|
||||
.dashboard-card span {
|
||||
color: var(--color-text-secondary);
|
||||
}
|
||||
.dashboard-card strong {
|
||||
font-size: 32px;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
.stat-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 12px 0;
|
||||
border-bottom: 1px solid #ebecef;
|
||||
}
|
||||
.stat-row:last-of-type {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.summary-card {
|
||||
display: grid;
|
||||
min-height: 126px;
|
||||
@@ -1466,6 +1531,9 @@ button.summary-card:hover {
|
||||
.summary-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
.dashboard-grid {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
.dashboard-charts {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
@@ -1487,7 +1555,27 @@ button.summary-card:hover {
|
||||
.brand-block {
|
||||
min-height: 52px;
|
||||
}
|
||||
.admin-sidebar nav,
|
||||
.admin-sidebar nav {
|
||||
display: flex;
|
||||
margin-top: 12px;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
gap: 8px;
|
||||
padding-bottom: 4px;
|
||||
scrollbar-width: none;
|
||||
}
|
||||
.admin-sidebar nav::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
.nav-item {
|
||||
width: auto;
|
||||
flex: 0 0 auto;
|
||||
min-height: 44px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.nav-item--active {
|
||||
box-shadow: inset 0 -3px var(--color-primary);
|
||||
}
|
||||
.phase-note {
|
||||
display: none;
|
||||
}
|
||||
@@ -1497,6 +1585,9 @@ button.summary-card:hover {
|
||||
.content-area {
|
||||
padding: 20px 16px;
|
||||
}
|
||||
.workspace-view {
|
||||
padding: 20px 16px;
|
||||
}
|
||||
.page-header {
|
||||
flex-direction: column;
|
||||
}
|
||||
@@ -1519,6 +1610,9 @@ button.summary-card:hover {
|
||||
.summary-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.dashboard-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
.quick-actions {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user