2f5dd6eefc
后端
- 主键改雪花字符串 ID(pkg/idgen + Base.BeforeCreate),全表外键/JWT/中间件随之调整
- 新增 files 表:/api/upload 按 MD5 去重,返回 {id,url,md5},服务端只收图片
- 头像/记录附图/帖子图改 file_id 关联,读取解析为 URL
- 养护模板(物种×阶段)后台可配 + AI 生成草稿;建档按模板生成任务/计划/提醒
- 社区 AI 运营:虚拟账号池 + 每日定时/手动生成,帖子带 AI 标
- 计划路线图节点带真实日期;首页周历与计划日历同源;新增 day-plan 当日安排
- 体重趋势接口带备注;记录列表分页
小程序
- 公共图片上传 utils/upload.js(仅图片);记录拍照/我的头像/社区发图三处接入
- 首页日历点选查当日任务;记录页体重趋势可点看备注 + 时间轴分页折叠
- 计划页日历点选查当日计划;自定义 tabBar 高度调整
后台(React)
- 新增「养护模板」「社区运营」页;用户管理加机器人筛选
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
62 lines
2.8 KiB
Plaintext
62 lines
2.8 KiB
Plaintext
.page-body{padding:8rpx 36rpx calc(210rpx + env(safe-area-inset-bottom))}
|
|
|
|
.top-row{display:flex;align-items:center;justify-content:space-between;margin:4rpx 0 28rpx}
|
|
.greet-h2{font-size:44rpx;line-height:1.15;letter-spacing:-.8rpx;font-weight:800}
|
|
.greet-p{font-size:26rpx;color:var(--muted);margin-top:10rpx}
|
|
.icon-stack{display:flex;gap:18rpx}
|
|
.icon-btn{
|
|
width:80rpx;height:80rpx;border-radius:50%;background:#fff;box-shadow:var(--shadow);
|
|
font-size:36rpx;display:flex;align-items:center;justify-content:center;
|
|
}
|
|
|
|
.hero-card{
|
|
background:
|
|
radial-gradient(circle at 95% 16%, rgba(245,169,71,.25), transparent 30%),
|
|
linear-gradient(135deg,#FFFFFF,#FFF5E6);
|
|
min-height:340rpx;
|
|
}
|
|
.pet-row{display:flex;align-items:center;gap:26rpx;margin-bottom:28rpx}
|
|
.pet-main{flex:1}
|
|
.pet-name-b{font-size:42rpx;letter-spacing:-.4rpx;font-weight:800}
|
|
.pet-meta{color:var(--muted);font-size:26rpx;margin-top:8rpx}
|
|
|
|
.insight-row{white-space:nowrap;margin-top:24rpx}
|
|
.insight{
|
|
display:inline-block;min-width:224rpx;border-radius:32rpx;
|
|
background:rgba(255,255,255,.72);border:1rpx solid rgba(255,255,255,.9);
|
|
padding:20rpx;font-size:24rpx;margin-right:16rpx;vertical-align:top;
|
|
}
|
|
.insight-b{display:block;font-size:28rpx;margin-bottom:8rpx;font-weight:900}
|
|
|
|
.date-strip{display:grid;grid-template-columns:repeat(7,1fr);gap:14rpx;margin-bottom:28rpx}
|
|
.day{
|
|
background:#fff;border-radius:32rpx;min-height:116rpx;text-align:center;padding:16rpx 8rpx;
|
|
border:1rpx solid var(--line);color:var(--muted);font-size:22rpx;
|
|
}
|
|
.day-b{display:block;color:var(--text);font-size:30rpx;margin-top:8rpx;font-weight:700}
|
|
.day.active{border-color:#FFD39A;background:#FFF4E4;color:var(--primary-dark)}
|
|
.day.sel{border-color:var(--primary);background:#FFEFD6;color:var(--primary-dark);box-shadow:0 0 0 2rpx rgba(245,169,71,.35)}
|
|
.day.has-dot::after{content:"";display:block;width:10rpx;height:10rpx;border-radius:50%;background:var(--green);margin:8rpx auto 0}
|
|
.task-empty{padding:36rpx 8rpx;text-align:center;color:var(--muted);font-size:26rpx}
|
|
|
|
.tt-b{font-size:28rpx;font-weight:700}
|
|
.tt-p{font-size:24rpx;color:var(--muted);margin-top:8rpx;line-height:1.45}
|
|
|
|
.quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18rpx}
|
|
.quick{
|
|
background:#FBFAF8;border-radius:32rpx;min-height:132rpx;
|
|
display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12rpx;
|
|
font-weight:900;color:var(--text);font-size:24rpx;
|
|
}
|
|
.q-ic{font-size:44rpx}
|
|
|
|
.ai-banner{background:linear-gradient(135deg,#F2FAF6,#FFFFFF)}
|
|
.ai-text{color:#59635D;font-size:28rpx;line-height:1.6}
|
|
|
|
.ac-b{font-size:30rpx;font-weight:700}
|
|
.ac-p{color:var(--muted);font-size:24rpx;line-height:1.45;margin-top:10rpx}
|
|
|
|
/* 页面不自身滚动,改由 page-scroll 承载滚动(隐藏滚动条)*/
|
|
page{height:100vh;overflow:hidden;display:flex;flex-direction:column}
|
|
.page-scroll{flex:1;min-height:0}
|