Files
lehuo/apps/miniprogram/miniprogram/pages/application-form/application-form.wxss
T
admin 7e71455c6b 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 忽略,不进入版本库。
2026-09-24 19:50:07 +08:00

268 lines
4.2 KiB
Plaintext

.progress-card {
margin-bottom: 24rpx;
padding: 24rpx 28rpx;
border-radius: 24rpx;
background: #ffffff;
}
.progress-meta {
display: flex;
margin-bottom: 16rpx;
justify-content: space-between;
color: var(--color-text-secondary);
font-size: 26rpx;
}
.progress-track {
height: 12rpx;
overflow: hidden;
border-radius: 999rpx;
background: #eceef1;
}
.progress-value {
height: 100%;
border-radius: inherit;
background: var(--color-primary);
transition: width 180ms ease;
}
.step-1 {
width: 25%;
}
.step-2 {
width: 50%;
}
.step-3 {
width: 75%;
}
.step-4 {
width: 100%;
}
.form-title,
.form-hint {
display: block;
}
.form-title {
font-size: 40rpx;
font-weight: 600;
}
.form-hint {
margin: 12rpx 0 28rpx;
color: var(--color-text-secondary);
font-size: 28rpx;
line-height: 1.7;
}
.selection-card {
display: flex;
width: 100%;
min-height: 128rpx;
margin: 0 0 20rpx;
padding: 24rpx;
align-items: center;
gap: 20rpx;
border: 2rpx solid var(--color-border);
border-radius: 24rpx;
color: var(--color-text);
background: #ffffff;
text-align: left;
}
.selection-card--selected {
border-color: var(--color-primary);
background: var(--color-primary-soft);
}
.selection-card--simple {
min-height: 96rpx;
}
.selection-content {
display: flex;
min-width: 0;
flex: 1;
flex-direction: column;
}
.selection-title {
font-size: 34rpx;
font-weight: 600;
}
.selection-description {
margin-top: 6rpx;
color: var(--color-text-secondary);
font-size: 27rpx;
line-height: 1.5;
}
.selection-status {
color: var(--color-primary-pressed);
font-size: 26rpx;
}
.field-label {
display: block;
margin: 28rpx 0 12rpx;
font-weight: 600;
}
.field-input,
.field-textarea {
width: 100%;
border: 2rpx solid #cfd2d8;
border-radius: 20rpx;
background: #ffffff;
box-sizing: border-box;
font-size: 32rpx;
}
.field-input {
min-height: 96rpx;
padding: 20rpx 24rpx;
}
.field-textarea {
height: 280rpx;
padding: 24rpx;
line-height: 1.7;
}
.character-count {
display: block;
margin-top: 8rpx;
color: var(--color-text-secondary);
font-size: 26rpx;
text-align: right;
}
.switch-row {
display: flex;
min-height: 112rpx;
margin-top: 20rpx;
padding: 20rpx 0;
align-items: center;
justify-content: space-between;
border-top: 2rpx solid #ebedf0;
}
.switch-title,
.switch-hint {
display: block;
}
.switch-title {
font-weight: 600;
}
.switch-hint {
margin-top: 6rpx;
color: var(--color-text-secondary);
font-size: 26rpx;
}
.emergency-note {
margin-top: 24rpx;
padding: 20rpx;
border-radius: 16rpx;
color: #704c00;
background: #fff6d8;
font-size: 28rpx;
line-height: 1.6;
}
.summary-list {
border-top: 2rpx solid #ebedf0;
}
.summary-row {
display: flex;
min-height: 88rpx;
padding: 16rpx 0;
align-items: center;
justify-content: space-between;
gap: 24rpx;
border-bottom: 2rpx solid #ebedf0;
}
.summary-row text:first-child {
color: var(--color-text-secondary);
}
.summary-row text:last-child {
text-align: right;
}
.description-summary {
display: flex;
margin-top: 24rpx;
flex-direction: column;
gap: 12rpx;
line-height: 1.7;
}
.summary-label {
color: var(--color-text-secondary);
font-weight: 600;
}
.consent-row {
display: flex;
min-height: 96rpx;
margin-top: 28rpx;
align-items: flex-start;
gap: 16rpx;
font-size: 28rpx;
line-height: 1.65;
}
.form-actions {
display: flex;
gap: 20rpx;
}
.action-button {
flex: 1;
}
@media (prefers-reduced-motion: reduce) {
.progress-value {
transition: none;
}
}
.application-banner {
display: flex;
min-height: 126rpx;
margin: -32rpx -32rpx 24rpx;
padding: 28rpx 30rpx;
flex-direction: column;
justify-content: center;
border-radius: 30rpx 30rpx 16rpx 16rpx;
color: #e84e1e;
background: linear-gradient(120deg, #fff0e7, #fff8f3);
font-weight: 800;
}
.application-banner text:last-child {
margin-top: 7rpx;
color: #7b6257;
font-size: 24rpx;
font-weight: 400;
}
.selection-photo {
width: 148rpx;
height: 104rpx;
flex: 0 0 auto;
border-radius: 18rpx;
object-fit: cover;
}
.selection-photo--fallback {
display: flex;
align-items: center;
justify-content: center;
color: #7c6d65;
background: #f4f1ee;
font-size: 22rpx;
}