feat(miniprogram): 初始化 Taro 4 + React 小程序项目
Some checks failed
CI / rust-check (push) Has been cancelled
CI / rust-test (push) Has been cancelled
CI / frontend-build (push) Has been cancelled
CI / security-audit (push) Has been cancelled

- 手动创建 Taro 4.2 + React 18 + TypeScript 项目骨架
- 配置 webpack5 编译、SCSS 样式、医疗清新主题
- 实现 API 请求层(JWT 自动注入 + token 刷新)
- 实现 auth store(微信登录 + 手机号绑定 + 就诊人管理)
- 实现登录页(微信一键登录 + 手机号授权绑定)
- 实现首页(问候栏 + 今日健康卡片 + 快捷服务 + 即将到来)
- 实现我的页面(个人信息 + 功能菜单 + 退出登录)
- 健康/预约/资讯占位页
- TabBar 5 个入口:首页/健康/预约/资讯/我的
This commit is contained in:
iven
2026-04-24 00:28:38 +08:00
parent 47817bae7d
commit 0f84c881ef
30 changed files with 17555 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
@import '../../styles/variables.scss';
.index-page {
padding-bottom: 20px;
}
.greeting-bar {
background: linear-gradient(135deg, $pri 0%, $pri-d 100%);
padding: 40px 32px 60px;
color: white;
}
.greeting-text {
margin-bottom: 8px;
}
.greeting-hello {
font-size: 36px;
font-weight: bold;
}
.greeting-name {
font-size: 36px;
font-weight: bold;
margin-left: 12px;
}
.greeting-date {
font-size: 24px;
opacity: 0.8;
}
.health-card {
background: $card;
border-radius: $r;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
margin: -30px 24px 24px;
padding: 28px;
}
.section-title {
font-size: 30px;
font-weight: bold;
color: $tx;
margin-bottom: 20px;
display: block;
}
.health-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px;
}
.health-item {
background: $bg;
border-radius: $r-sm;
padding: 20px;
text-align: center;
}
.health-label {
font-size: 24px;
color: $tx2;
display: block;
}
.health-value {
font-size: 36px;
font-weight: bold;
color: $pri;
display: block;
margin: 8px 0 4px;
}
.health-unit {
font-size: 22px;
color: $tx3;
}
.quick-services {
margin: 0 24px 24px;
}
.service-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.service-item {
display: flex;
flex-direction: column;
align-items: center;
padding: 20px 0;
}
.service-icon {
font-size: 48px;
margin-bottom: 8px;
}
.service-label {
font-size: 24px;
color: $tx2;
}
.upcoming {
margin: 0 24px;
}
.empty-hint {
background: $card;
border-radius: $r;
padding: 40px;
text-align: center;
}
.empty-text {
font-size: 26px;
color: $tx3;
}