Blizzard
7a55ee0f2e
feat(community): 评论改为独立二级页面 + 评论内容安全审核 + 评论数按实发实时纠正
...
前端:
- 新增 pages/comments 独立评论页(列表 + 底部输入条 + 回复),社区卡片点评论改为 navigateTo
- 输入条用普通流式布局 + 原生 adjust-position 做键盘避让,聚焦期间不 setData 碰输入框
- 评论只能配 1 张图;底部常驻「审核后公开」提示;发送按钮在途「审核中…」防连点
- 发布结果按状态区分:过审即时展示,其余提示「已提交,审核通过后展示」
- 评论页把已发布评论数回传社区列表,卡片数字实时更新
后端:
- CreateComment 文本判为违规时直接拒收(ErrContentRejected),不入库
- 社区列表/用户帖子列表用「已发布评论实时条数」覆盖 comment_count,
修正异步过审/删待审/后台改状态导致的计数漂移
- IDCard 手机号返回完整号码(上一批遗留)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-03 16:04:21 +08:00
Blizzard
93fc9bc5da
style(fe): 成长报告海报预览卡排版打磨
...
- 头像改圆形 + 白边(和保存的图一致)
- 周期做成小胶囊;数据清单每行「绿勾 + 项目 + 数值右对齐」,更整齐
- 健康状态做成绿色徽章;生成自弱化
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 16:16:38 +08:00
Blizzard
931fb69ef2
fix(fe): 海报预览卡(wxml)也显示真实头像 + 统计周期
...
之前只改了导出用的 canvas,但弹层里看到的预览卡是 wxml 渲染的,
头像写死 emoji、也没周期。现在预览卡:有照片用照片(poster.pet_avatar_url
兜底 pet.avatar_url)、加「近 7 天 · 日期」周期行,和导出图一致。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 16:10:42 +08:00
Blizzard
c890732410
feat: 成长报告海报改周报口径 + 显示统计周期
...
- 海报四项统计原来是全部累计,和「周报告」不符;改成近 7 天口径
(和报告页本周概览一致),高风险异常也按本周真实统计(原来写死 0)
- Poster 加 period 字段,海报上画出「近 7 天 · 07.25 - 07.31」
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 15:33:12 +08:00
Blizzard
95471d0549
style(fe): 我的顶部卡片重排——左对齐紧凑布局
...
- 没设头图时不再留一块空橙色 banner(和整页暖橘背景撞色的怪感消除)
- 身份行改左对齐:头像 + 昵称/签名并排;社交数(帖子/关注/粉丝)缩成
一小行内联;养宠数据保留高亮带。头图设了才显示
- 主题色/头图/签名/展示开关都照常生效
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 15:28:23 +08:00
Blizzard
1610fd6814
style(fe): 装扮/预览两个按钮改一行两列、缩小文字
...
装扮按钮从 profile-head 挪到「我的」页,和「看看别人眼里的我」并成
一行两列(装扮主页 / 别人眼里的我),字号缩小、图标小一号;
profile-head 只保留别人主页的关注键。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 15:22:22 +08:00
Blizzard
4c9fbc4a88
fix(fe+be): 我的页去重宠物墙 + 养宠天数按到家日算
...
- 养宠天数原来按建档日算,重新建档会被重置成 1(和首页「第869天」矛盾);
改成按最早那只的到家日算(无到家日退建档日),和首页口径一致
- 「我的」页 profile-head 传 hideWall,藏掉社交宠物墙(下面「我的毛孩子」
卡更详细,重复了);宠物墙只在别人访问/预览时出现,受「展示我的毛孩子」
开关控制,语义更对(那开关本来就是给别人看的)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 15:11:59 +08:00
Blizzard
4a1b5e66d3
fix: 成长报告海报用宠物真实头像(没传才用 emoji)
...
- 后端 Poster 增 pet_avatar_url(取 pet.AvatarURL,和身份卡同一可靠路径)
- 海报 canvas 优先用它、store 兜底;有照片画圆形头像、没有才 emoji
- 头像九参数居中裁剪,竖图/横图都不压扁
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 15:00:47 +08:00
Blizzard
a91f5e39ca
feat: 发帖去身份用昵称、标签对齐筛选、图片限2、无类型任务也留痕
...
- 发帖去掉「发布身份」选择,统一用发布者昵称(后端按 user 取昵称)
- 发帖标签改成 晒宠/新手求助/经验,和社区顶部筛选完全一致;
tabTag 新手求助→新手求助(原来映射成「求助」对不上)
- 内容输入框:点整块 field 都聚焦(原生 textarea 在 scroll-view 里
命中区域会偏,只有 placeholder 处能点)
- 发帖图片上限 3→2,文案标注「最多 2 张」
- 无记录类型的自定义任务完成后,补一条 note 记录,最近记录里留痕
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 14:12:52 +08:00
Blizzard
b52729dec8
feat(fe): 整站改品牌暖橘竖向淡出渐变,取代独立色块
...
- page 背景换成顶部品牌橘 → 约半屏褪到米白的竖向淡出,铺全部页面,
没有色块接缝问题,整屏更一体
- nav-bar 默认改透明 + 深棕字(顶部本身就暖,不再铺奶白毛玻璃);
去掉 Step4 的 tone 属性和独立 .brand-band
- 带切换条的页面(首页/报告/历史/计划)统一 on-band:chip 半透明白、
选中实白,在暖底上更清晰
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 13:59:05 +08:00
Blizzard
bbc34c5bd6
feat(fe): Step4 门面品牌色带(方案A)+ nav-bar tone
...
- nav-bar 加 tone="brand":透明底 + 深棕字,压在色带上;默认分支不动
- 首页/记录页顶部加 252rpx 品牌橘色带(下沿大圆角,z-index:-1 垫背后),
盖住 nav + 切换条,门面卡在色带下方
- 切换条压在色带上:chip 半透明白 + 深棕字,选中实白
- page 加 position:relative 供色带绝对定位锚定
- 新增 --band-a/--band-b/--band-ink token(取自 preview-v3 定稿)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 13:42:11 +08:00
Blizzard
603bd5773e
feat: 用户可见自己帖子的审核状态
...
- 发帖后若未直接过审,弹窗明确「审核中,通过后才出现在社区」,
不再让用户以为发失败/是 bug
- 后端 ListUserPosts:看自己主页时返回待审核/未通过的帖子(带状态),
看别人仍只返回已发布
- 个人主页帖子加「审核中/未通过」状态标 + 说明
- 我的页加「我的帖子」入口,进自己主页看审核状态
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 08:49:20 +08:00
Blizzard
c852817363
fix(fe): 修社区图片撑破网格;发帖限 3 张;上传偶发失败自动重试
...
- .photo-tile 补 width:100%+min-width:0:微信 image 默认 320x240,
不给宽高会冲破 photo-grid(社区帖子图片"爆炸")
- 发帖图片上限从 9 张改成 3 张
- uploadFile 三重兜底:冷启动没 token 先续期、40100 续期重试、
网络/网关瞬时错误自动重试一次(后端 MD5 去重,重传安全)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-31 08:32:22 +08:00
Blizzard
c48e241fe1
feat(fe): 评论改小红书式展开输入面板;FAB 统一暖橘;顶部去冗余入口
...
- 评论:底部平时一条细「说点什么」,点开才展开大写评论面板
(大输入框+工具栏+发送,浮在键盘上方)。失焦时有草稿保持展开,
避免点发送因面板收起而丢点击
- FAB 主题色统一:社区发帖 FAB 从深色改成和首页肉垫一致的暖橘圆钮
- 报告页顶部筛选去掉「添加」(报告页不需要建档入口)
- 社区去掉顶部「发布」按钮,发帖统一走右下角悬浮按钮
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 18:13:41 +08:00
Blizzard
4f52a7d3a1
style(fe): 评论弹窗重做——空态加图标、输入区合成圆角输入栏
...
- 空态从一行飘字改成 图标+两行文案 居中
- 相机/输入框/发送合成一条聊天式圆角输入栏,字数只在输入时显示
- 头部标题加粗
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 18:05:25 +08:00
Blizzard
396f531023
feat(fe): 肉垫 FAB + 冷启动闪屏;顶部筛选改纯文字对齐
...
- FAB 重设计成肉垫造型(呼应「肉垫计划」),修 fab.js 漏声明
icon 属性导致的兜底文档图标;社区发帖 FAB 保持图标
- onboarding 加冷启动闪屏,登录+拉宠物在闪屏期完成再进首页,
不再闪一下建档向导;欢迎屏 logo 换肉垫、去掉过时 AI 文案
- 顶部宠物筛选去掉头像改纯文字(带图/emoji 时高度对不齐),
固定高度 + vertical-align:middle 彻底对齐,添加用「+」文字
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 17:57:06 +08:00
Blizzard
e2ce56680a
fix(fe): 修切换条头像撑大 chip;我的页菜单只留设置
...
- pet-switch 头像 flex:none 锁死 52rpx,真机上图片固有尺寸不再撑大 chip
- 我的毛孩子去掉「+添加」(首页切换条可加)
- 菜单区只留「设置」,档案/计划/多宠都从首页和宠物卡进
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 17:20:02 +08:00
Blizzard
11c4d490e6
feat(fe): 宠物照片替代默认头像,身份卡移到首页门面卡
...
- 首页/我的/切换条:上传过照片就用照片,没有才退回 emoji
- 报告页分享海报:先异步加载头像再开画,画成圆形头像
- 一起生活的天数改成从到家日期算,没填就显示「-」并可点去补
- 身份卡入口从「我的」页移到首页门面卡右上角
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 17:08:32 +08:00
Blizzard
6fd4977f46
feat(fe): 建档挑方案、计划页套方案、阶段漂移提示
...
后端上一轮做完了但小程序上看不到,这次接上。
## 建档第四步:挑方案
方案按阶段取,所以必须排在「资料」之后(阶段是第三步定的)。卡片上按重复方式
分开报数(每天 3 项 / 每周 2 项 / 一次性 2 项),不报一个总数——4 条「每天」
套一整月就是 120 多条,只给总数用户会以为出 bug。
「先空着,我自己排」是个平等的选项,和方案卡长一样、就在下面一眼能看到,
不是藏起来的退路:已经养熟的宠物主人有自己的节奏,硬塞一套只会被删掉。
默认选第一套——多数用户是新手,给一个合理默认比让他面对空白好。
编辑档案时不出现第四步:改档案不该顺手改计划。
套方案失败不算建档失败:档案已经建好了,方案之后在计划页还能套,
不该把用户退回表单。
## 计划页:空月份和平时都能套
空月份的提示条带「套一套方案」按钮 —— 空着让用户从零排,多数人会直接退出去。
但「+ 加一件」始终在,不能只给套用。
浮层里写明「套用是往里加,不会覆盖你已经排好的」,因为服务端就是按
「日期+标题」去重的,这句话是真的。套完 toast 报排了几件;一件都没排
(全都已存在)时说「这个月已经有这些安排了」,不说「成功」。
## 阶段漂移提示
首页门面卡下面一张卡:「钞票已经 17个月,从幼年期进入成年期了」,
带上新阶段的划分依据、养护重点和体型说明,点进去到建档页改。
用主色不用红色 —— 这是「可以做一下」不是「出问题了」。
改完回首页 onShow 重拉一次,卡片自然消失。
不在首页直接改阶段:改完要不要套新方案是同一件事,放在建档页一起做才连贯。
## 顺手把合并的尾巴清了
manageTasks 那一支删了:它管的是 DailyTask,而今日任务已经并进计划节点,
增删改都在计划页。留着会出现「这里加的任务」和「计划页加的节点」进不同的表。
连带清掉 7 个死方法 + taskSheets + 一个死 require(简易表单那套早随记录表单
搬到 pages/addrecord 了)。首页现在一个弹层都不开,bottom-sheet 组件也去掉了。
弹层累计:js 1110 → 689 行,wxml 485 → 278 行。
## 验证(预生产库实跑)
建档四步 6 个月柯基 → 幼年期 → 拉到「幼犬标准照护」→ 套用本月 7 条
→ 首页今日任务 4 条
先空着 今日任务 0 条,疫苗驱虫提醒仍然建
计划页套用 0 → 7 条;重复套用 0 条(去重生效)
漂移检测 17 个月柯基存着幼年期 → drifted=true,给出依据/重点/体型
改成成年期 → drifted=false
没生日 → 不提示(算不出就不猜)
「刚到家」→ 不提示(叠加层不是年龄段)
第一版验证脚本把阶段改成了和算出来一样的值,drifted=False 是对的,
但我的 print 无条件打了提示文案,看着像 bug。重测才验到真的。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 12:59:27 +08:00
Blizzard
aefb1bc103
feat: 建档改成三步向导页,品种改成后台可配的选择器
...
## pages/petform 三步向导
① 名字 + 传头像
② 猫还是狗 → 选品种
③ 性别 / 生日 / 到家日期 / 体重 / 毛色 / 阶段
**编辑时不分步**,一屏全放开:用户是来改某一项的,不该被按顺序走一遍。
同一个页面两种形态,靠 ?id= 区分。
每一步只校验这一步的东西。三步全填完才校验的话,用户在第三步才被告知
第一步没填名字,还得翻回去。
进度条没用 seg-tabs:那是「可以随意切」的语义,这里有顺序,
点第三步跳过前两步会拿到一份没名字的档案。
## 生日和到家日期分开
原来是一个「生日 / 到家时间」字段。领养的成年猫狗生日常常是不知道的,
而「一起生活了多少天」要按到家日算——合成一个字段两件事都说不准。
验过:到家 4 个月前 → 第 121 天;按生日算会是 801 天。
模型里 Birthday 和 ArrivedAt 本来就是两个字段,只是表单没露出来。
## 品种:自由文本 → 后台可配的选择器
原来品种是个输入框,用户手打「柯基」「柯基犬」「威尔士柯基」算三个品种,
以后想按品种做体重基准、常见病提示这类事就没法做。
新增 breeds 表,预置 34 种猫 + 45 种狗,按首字母分组、右侧 A-Z 索引跳转、
首字母吸顶。留了「不确定」——领养的串串确实说不出品种,逼着选一个只会
得到假数据。换物种会清掉已选品种(原来那个一定不对了)。
**首字母存字段不运行时算**:Go 没有标准拼音库,而多音字自动转常出错——
「藏獒」按 cang 还是 zang 分组、「柴犬」的柴,人来定比库来猜靠谱。
后台新增品种时手填这一位,服务端校验必须是单个 A-Z。
已有档案在用的品种不许删(删了那些档案的品种就变成查不到的字符串),
想隐藏用 enabled=false。同物种下不许重名——品种是统计口径,重名会把
同一种猫劈成两半。
预置数据自己填错了两条,实跑时看出来的:「苏格兰柯利犬」我按「柯利」
填了 K,应该按「苏格兰」算 S;「双血统边牧」根本不是品种,是血统描述。
seed 源和库里都改了。
## 弹层继续瘦
addPet/editPet 两支删掉,连带 10 个方法、ageFromBirthday/GENDERS/STAGES
和 5 个 add* 字段。累计(从记录表单搬走那次算起):
js 1110 → 734 行
wxml 485 → 307 行
多宠管理里「点某只去编辑」原来是 setType('editPet'),那支没了会开一个
空白弹层——改成关弹层再跳页。8 个页面的入口全换完,grep 无残留。
## 验证(预生产库实跑)
品种接口 猫 34 种 16 个首字母、狗 45 种 17 个首字母;非法 species 返回 []
建档 生日 / 到家日期 分别落库,品种毛色阶段都对
编辑 只改名字,到家日期没被冲掉
修正 柯利犬 K→S、双血统边牧已删
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 11:26:51 +08:00
Blizzard
9b30bfaaff
feat: 计划按自然月管理,加「应用到每天」和下月未排提醒
...
## 为什么不是「从计划开始日起 30 天」
上一版是那样做的,截图一看就不对:计划是月中建的,日历显示
「7月26日 — 8月25日」,既不像本月也不像下月,用户想问「这个月还剩什么」
根本对不上。改成自然月,日历就是一眼能认的月历。
能翻到下月 —— 否则「做下月计划」这件事本身做不了。
## 校验从「Day 上限」改成「日期」
PlanTask.Day 是相对计划开始日的,月份边界是相对今天的,两者会错开。
原来卡 Day<=30,计划建了几天之后下月末就换算成 Day=40 多,
用户在日历上明明看得到那格、点进去却存不了。
现在的规则:不早于计划开始日(下界放到开始日而不是本月 1 号——模板生成的
历史节点可能在上个月,那些要允许原地改),不晚于下月月底。
## 应用到每天
一天建一条,不做「一条 + repeat 字段读时展开」:勾选状态是按天的,
展开方案还得再开一张表记「哪天打过勾」,而直接建 N 条天然就有这个能力。
范围止于**这一天所在那个月**的月底,不跨月——「应用到每天」说的是这个月每天,
跨过去就变成用户没要求的事了。只有新增能选,已有的那条改成每天等于凭空
复制 N 份(用户想要的是「以后每天」,不是「把这条撒开」)。
## 首页那个提醒
GET /pets/:id/plan/month-status 返回本月件数/剩余、下月件数、need_next。
need_next 只在**月末最后 7 天**且下月为空时为真:月初就催「排下个月」太早,
用户会当成噪音。角标做在图标上而不是弹 toast——每次进首页弹一下很烦,
而这件事不紧急、看见就行。
副标题有优先级:「8 月计划还没排」压过「本月都做完了」,因为前者有时效。
四种状态实跑验过,包括让位关系。
## 顺手
pet-switch 加 show-add 属性。计划页只需要在既有宠物之间切,建档入口在首页
和「我的」就够了,到处摆一个「添加」会让这条 chip 变得很长。
本月/下月的切换用新的 .link-tabs 而不是挂在 .head-links 上:首页的
「管理 / 全部完成」也用 head-links,那是两个并列动作,不该有一个是灰的。
## 验证(预生产库实跑)
月边界 本月末通过、下月末通过、下下月拒(报出具体日期)
应用到每天 今天→本月末 2 条,没跨月
month-status 下月清空 → need_next 翻 true;补一条 → 翻回 false
四种副标题 下月未排 / 本月还有 N 件 / 本月都做完了 / 还没有安排,含优先级
测试数据全部还原
上一条 cd 打错目录,导致「日期窗口」那次改动没写进文件、只有批量那半截进去了,
所以中间出现过一次 planWindow undefined。这次一并改对。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 11:09:06 +08:00
Blizzard
30b190363e
fix(fe): 修弹层编译不过(链首被删),检查器补上 wx:if 链校验
...
## Bug
上一批把 9 个记录分支从弹层整体搬到 addrecord 页时,连带删掉了带 wx:if 的
第一支(weight),整条链从 wx:elif 开头。小程序直接报
Bad attr `wx:elif` with message: `wx:if not found, then something must be wrong`
整个组件编译不过 —— 不是少个样式,是弹层完全打不开。把现在的链首
(就医前摘要)改成 wx:if。
## 检查器补这一条
这种错「删对了 9 支、漏改 1 个属性」就会发生,而且是编译期爆炸,
检查器原来完全看不见。
判断必须靠真正的标签栈。中间走错两次,都值得写下来:
**① 按缩进深度分链 —— 不行。** 这个项目里 scroll-view 和它的子节点缩进
是一样深的,「同层」判断会把父节点当兄弟节点。而且更糟的是它不报错:
前一条链的 wx:if 被当成这一条的链首,注入错误也查不出来,是个假绿。
**② 给 void 标签列白名单 —— 不行。** wxml 里 <image></image> 是显式闭合的,
把它当 void 就变成「开标签不入栈、闭标签却弹栈」,一路把父级弹光,8 个误报。
只认 /> 就够。
**③ 自闭合不能用单独的捕获组。** 属性那段是贪婪的,会把 /> 里的 / 一起吃掉,
(\/?) 永远匹配空。多行写的 <input ... /> 因此被当成非自闭合入了栈,
把整份栈层级带偏,7 个误报。改成从 attrs 尾部 /\/\s*$/ 判断。
## 自测
把链首改回 wx:elif → 精确报第 96 行那一处,其余 24 个 wxml 零误报;
还原 → 恢复绿。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 10:49:23 +08:00
Blizzard
3ea50efb7d
feat: 添加记录独立成页,表单字段由后端配置驱动
...
## 弹层里塞 24 个表单是走不通的
弹层高度受 .sheet-scroll 的 78vh 限制,字段一多就变成内滚;24 项的选择器
挤在弹层里更难看(用户原话「很丑」)。整体搬成页面。
## pages/addrecord —— 一个页面吃掉全部 24 种
形态:记录宠物 / 记录时间 / 类型专属字段 / 描述 + 照片 / 底部固定保存键。
关键在「类型专属字段」整段是后端驱动的:前端不认识「体重」「金额」这些业务词,
只认识 number / options / text 三种渲染方式,以及每个字段的值该落到哪儿。
record_types 加了 fields 列,后台用紧凑写法配(一行一个):
number:体重:kg 数值 → num_value
options:状态:正常|软便|拉稀 单选 → category
options:症状:呕吐|拉稀|精神差:- 末尾 - 表示不落 category,只进标题
text:吃了什么 文本 → 只进标题
(空) 只要 时间+描述+照片
解析放服务端不放前端:配错了要在后台保存时就报出来(第几行、错在哪),
不能等用户点开表单才发现渲染不出东西。读取时解析失败只让这一种事项没有额外
字段并打 warn,不让一条烂配置把整个记录页打空。
## 那个 - 开关不是过度设计
异常观察有两个单选(症状 + 严重程度),而 category 只有一个坑,
周报的高风险数按 category='高' 统计(report.go:46)——必须能指定谁占这个坑。
同理账单按 cost 的 category 分组聚合(report.go:134),
食便相关性排除 poop 的 category='正常'。这三处口径都得严丝合缝对上。
## 记录页瘦成纯列表
只留分组宫格。健康洞察 / 体重趋势 / 健康时间轴整页搬到 pages/history,
从报告页「记录与趋势」进——报告页才是看数据的地方,而一个「我要记一笔」的
页面上摆三块只读图表,用户每次都得先滚过去才能找到要点的东西。
**没有直接删掉那三块**:时间轴是唯一能看和删历史记录的地方,报告页只有
周报/账单这些聚合。删了用户就再也看不到自己记过什么。搬页面用的是 git 里
改动前的完整版复制,比往 report.js 里合并代码安全。
## 弹层瘦了一圈
9 个记录分支删掉,连带 17 个方法、SIMPLE_HINT、buildRecord 的 7 个 case
和一批只有它们在用的 data 字段。
js 1089 → 857 行
wxml 480 → 335 行
弹层现在只管「不是记一笔」的事:提醒、海报、档案、发帖、评论、导出、反馈。
buildRecord 只剩 vetSummary 一个分支(它写一条 note 留痕,不是用户填的表单)。
## 验证(预生产库实跑)
24 种的字段配置逐个核对解析结果,然后照 addrecord 的 buildBody 组装落库:
体重 title='体重:4.6kg' num=4.6 → 宠物档案回写成 4.6kg ✓
记账 title='记账:128元 医疗' num=128 cat=医疗 → 账单 total=128 分类[(医疗,128)] ✓
异常 title='异常:呕吐 高' cat=高 → 周报 high_risk_count=1 ✓
排便 cat=软便 食便相关性口径保住
饮食 title='饮食:幼猫粮 45g 偏少' cat=偏少
喝水 num=180(新类型带数值,老代码没有它的分支也不影响)
洗澡 title='洗澡'(无额外字段)
看病 num=320(两个字段:文本+数值)
体重趋势 1 个点、值 4.6,没被其他 7 条污染。
回填踩过一次坑:fields 列是服务启动时 AutoMigrate 才建的,我在启动前就跑了
回填,Update 报错被忽略、13 行静默没写进去。第二版加了 HasColumn 前置检查
和逐行错误统计才发现。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 10:25:42 +08:00
Blizzard
29d2cd3faf
refactor(fe): 记录从 tab 降级成页面,tabBar 减到 4 个
...
## tabBar
首页 / 报告 / 社区 / 我的。记录不再是 tab。
因为高亮是 tabBar 组件按当前路由自己算的(Phase A 那次改的),删一个 tab
只需要动 LIST 一处,四个页面一行都没改。
## 快速记录独立成页 —— 但没有新建页面
弹层里塞 24 项确实挤(用户原话「很丑」)。撤掉上一版加的 quickRecord 分支。
**pages/record/record 本身就是那个页面**:它顶部已经是 24 项 4 组宫格,
下面接着健康洞察、体重趋势、健康时间轴。再单独建一个只放宫格的页面,等于同一个
宫格维护两份,而且那页除了宫格什么都没有,进去点一下就得退出来。
所以把它从 tab 降级成二级页:nav 标题从「快速记录」改成「记录」+ 返回键,
移除 tabBar 同步。首页右下角悬浮键直接跳它,落地就是宫格。
pet-switch 保留 —— 时间轴/趋势/洞察都是按宠物看的,而且计划页作为二级页
也是这么处理的,一致。
## 入口
首页悬浮键 → 记录页(全部 24 项)
首页「快速记录」卡 → 8 个高频项直接开表单,「更多」→ 记录页
文章页 / 设置页 → 记录页
三处 switchTab 改成 navigateTo(记录页已经不是 tab,switchTab 会静默失败)。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 09:55:52 +08:00
Blizzard
7636454650
feat: 下掉用户端 AI,首页悬浮键改成快速记录
...
## 只砍入口,后端一行不动
10 个 AI 路由、service/ai_*.go、后台配额配置页、ai_usages / ai_messages
两张表全部保留。api.js 里那 5 个方法注释掉而不是删——想开回来解注释、
把入口接上就行,不用重写。
## 5 处露出
pages/ai 聊天页 删页面 + 从 app.json 移除
首页「AI 今日建议」卡 整张删(含「问问 AI 养宠助手」按钮)
计划页「AI 计划」tab 删 tab + wxml 分支 + ?tab 深链;只剩「路线图」一项后
整条 seg-tabs 也藏了——单选的 tab 条是个没用的控件
异常观察的 AI 风险评估 见下
引导页「AI 日历」文案 改成「养护日历」
## 异常观察这一处差点做错
原链路是:symptom 只收集表单 → AI 风险评估 → 用户在 risk 页再点保存 →
buildRecord 的 case 'risk' 才真正落库。**symptom 自己从来不落库。**
拆掉中间环节如果只删 risk,结果就是「记了异常但没存下来」,而且不报错。
补了 case 'symptom' 让它自己存。连带发现第二个问题:category 存的是 AI 给的
风险等级,而 report.go:46 按 category='高' 统计周报的高风险数——不写这个字段
周报会永远是 0。改成让用户自己选严重程度(轻微/需留意/严重 → 低/中/高):
谁看着它谁最清楚,比规则化猜一个准,还顺手保住了周报。
## FAB
首页 → 打开 24 项分组选择器(弹层新增 quickRecord 分支,
点某一项在同一个弹层内 setType 切过去,不关不跳)
社区 → 改成发帖(它本来就不该是记录入口)
记录/报告/我的/计划/学习 → 直接去掉,底部留白从 pad-b-fab 换成 pad-b-plain,
不然白留 330rpx
fab 组件原来图标写死成 ai,加了 icon 属性——按钮干什么事图标就得是什么。
顺手删了 settings.js 里一个死的 onFab(Phase A 拆页时漏的,页面上根本没有 fab)。
.tg 分组样式从 record.wxss 提到 app.wxss:记录页和快速记录弹层都在用,
页面级 wxss 跨不了页(这个项目已经栽过三次)。
## 顺手修了周报两个先前就有的 bug
验证时撞上的,和 AI 无关,但 AI 建议卡拆掉后周报权重变高了:
1. 摘要把「无高风险异常记录」写死,和它自己刚算出来的 highRisk 自相矛盾——
记了 2 条高风险,摘要还说没有
2. next_week_focus 是一整句静态文案「第 2 针疫苗提醒、继续观察体重趋势、
避免频繁更换食物」,不管谁的宠物多大年纪都是这句,而「第 2 针疫苗」
对成年猫狗根本不适用。改成按真实数据拼:未来 7 天到期的提醒 +
有高风险就提就医 + 一周没称体重就提醒补记
## 验证(预生产库实跑)
异常观察三档 低/中/高 各存一条,category 正确落库
周报 summary「有 2 条高风险异常记录」,不再自相矛盾
next_week_focus 有高风险的宠物 → 「继续观察上周记录的异常,必要时就医」
新建幼犬(提醒都在 7 天外、没称过体重)→ 「本周还没称体重,补记一次」
症状聚类洞察 仍然工作(insight.go 按 symptom 过滤,没受影响)
全站 grep 无 pages/ai / onFab / riskData / onGenRisk 残留
FAB 只剩首页(plus)和社区(edit)两处
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 09:50:33 +08:00
Blizzard
3fc3cbc7d2
feat(fe): 记录页 24 种 4 组,弹层加通用简易表单
...
## 通用简易表单
洗护/清洁那 15 种只需要「什么时候 + 备注 + 可选照片」。弹层现在是 28 个
wx:elif 手写分支(402 行),各写一个会推到 700 行,而且每加一种类型都要发版。
加一个 wx:elif="{{isSimple}}",isSimple 由 JS 按后端返回的 form 字段算,
和上面那 9 种永不重叠。插在 photo 之后、提醒中心之前,没动任何现有分支的顺序。
备注给了逐类型的具体占位提示(「用了什么沐浴露、有没有吹干」),
比「请输入备注」有用得多——用户看到提示才知道这栏该写什么。
## 一个不写就会静默出错的地方
dayToISO():后端用 time.Parse(time.RFC3339) 解 occurred_at,只给日期
("2026-07-30")它解不出来会**静默回退成 time.Now()**——用户选「昨天洗澡」
会存成今天,而且不报错。
时区必须带真实偏移:转成 UTC 的 Z 形式,落库再转回本地时会把边界日期挪一天
(首页任务重复生成那个 bug 就是这么来的)。取正午同样是为了远离日界。
## 四处写死的类型列表全删
RECORD_ITEMS record.js 记录页 9 宫格
QUICK_ITEMS home.js 首页 8 宫格
TYPE_TONE record.js 时间轴色调(9 种写死,新类型会全掉到橙色一片分不清)
TASK_SHEETS 弹层 任务关联记录类型的下拉(只有 6 种,加了类型选不到)
全部改成读 utils/recordTypes.js 这份共用缓存。缓存 load() 只真正请求一次,
并发调用共用同一个 promise;isSimple/label/groups 是同步的,弹层打开时
不该再等一次网络。
首页 8 宫格改成取后端前 8 个(按分组顺序再按 sort),后台调 sort 就能换首屏
露出哪几个;全部 24 种在记录页。
分组色系(daily橙/health绿/care紫/clean蓝)留在前端,后端只存 group key——
改配色不用动数据。
## 联调(预生产库实跑)
15 种新类型 全部落库,且选「昨天」没被存成今天(15/15)
原有 9 种 逐一回归,写库 emoji 原样;weight 回写宠物档案 → 4.5kg ✓
时间轴 24 条混排,色调分布 6/7/5/6,没有一条查不到类型
体重趋势 仍只有 1 个点(没被 24 条记录污染)
周报/首页汇总 正常
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 09:44:07 +08:00
Blizzard
6d49d28e1a
fix(fe): 修 Phase D 三个渲染问题
...
## 1. tabBar 高亮不跟着切(进「我的」还亮在「首页」)
Phase A 我把高亮改成 custom-tab-bar 自己在 pageLifetimes.show 里按路由算,
想省掉五个页面的硬编码。实测不行:自定义 tabBar 不在页面节点树里,
pageLifetimes 拿不到可靠时机,selected 一直停在默认的 0。
回到官方那套「页面 onShow 推一把」,但索引仍然由 tabBar 按当前路由自己算
(utils/tabbar.js → syncSelected),页面这边不写死 0/1/2/3/4。
调 tab 顺序还是只改一个 LIST,五个页面一行都不用动——原来想要的收益保住了,
只是多了五行 syncTabBar(this)。
## 2. 头像被头图盖住,只露出下半个
.pf-bg 带了 position:relative,定位元素会盖过静态的兄弟节点,DOM 顺序在后
也没用。给 .pf-av 加 position:relative + z-index,同时把 .pf-bg 上那个没人
用的 position 去掉。头图高度 220 → 180rpx,纯渐变时不至于占掉半屏。
## 3.「我的」页四个入口整个散架,图标文字箭头各占一行
.profile-list / .profile-row / .pr-ic / .pr-label / .pr-val 全在
settings.wxss 里——Phase A 从 profile 拆页时留在了设置页,mine 用同一批
class 但样式跨不了页,于是完全裸奔。提到 app.wxss。
这是这个项目第二次踩「页面级 wxss 跨页用」了(上次是 .post-card 在用户
主页裸奔)。两个页面共用的 class 就不该留在任一页的 wxss 里。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-30 08:22:17 +08:00
Blizzard
1584aabcc5
feat(fe): Phase D —— 主页装扮,「我的」和「宠友主页」共用一套渲染
...
## profile-head 组件
头图 / 头像 / 昵称 / 签名 / 帖子关注粉丝 / 养宠数据 / 宠物名片墙,
pages/mine 和 pages/user 用的是同一个组件、同一个接口
(GET /users/:id/profile)。
这件事必须一开始就做对:自己看和别人看要是两套渲染,会慢慢长歪,
装扮功能也就失去意义了——你调半天颜色,结果只有自己那页变了。
两边唯一的差别是底部按钮:自己看是「装扮我的主页」,别人看是「关注 TA」。
顺带把 mine 的头部从 /user/summary 切到了 /users/:id/profile。原来两边
字段对不上,装扮效果在「我的」页根本预览不到。
主题只在组件 wxss 里定义 --pf-a/--pf-b/--pf-ink 三个变量,下面所有着色
都走变量。后端存 key 不存色值,就是为了这套配色随时能在前端改。
## pages/decorate 装扮页
头图上传 / 五套主题色 / 个性签名 60 字 / 宠物墙开关,顶部实时预览。
预览用的就是 profile-head 本身,不是仿一个——仿的迟早会和真的长得不一样。
喂给它一份改过的 card 就行,组件那边不需要知道自己在被预览。
头图有个坑单独处理了:bg_file_id 只在真动过的时候才传。新上传带新 id,
点「恢复默认渐变」带空串,都没动就不传字段。否则「只改个主题色」会把
已有头图冲掉。上传时先用本地临时路径顶上,不让用户对着转圈等。
联调验证(本地 9090,真上传了一张图走完存储链路):
上传 → file id + MinIO url
保存装扮 → bg_url 落库,主题 violet,签名落库
主页读回 → bio/theme/show_pets/bg_url/宠物墙/养宠数据 全对
只改主题 → theme 变 sky,头图还在(没被冲掉)
恢复默认渐变 → bg_url 清空,theme 和 bio 都没被动
别人视角 → is_self=false、followed=false,装扮和宠物墙都能看到
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 18:02:07 +08:00
Blizzard
fe420ba47c
feat(fe): 评论改成小红书那套交互——点评论直接唤起输入
...
上一版做成了居中弹窗,参考图给的是另一种范式:输入栏常驻底部,点任意
一条评论就把它激活并填上「回复 @xxx」。按参考图重做,居中那套一并删掉,
不留死代码。
结构从「一个滚动容器装所有东西」改成三段式:
固定头(共 N 条评论)+ 滚动列表 + 常驻输入栏
输入栏必须在滚动区外——放进去的话列表一滚它就跟着走,点完评论还得再
把输入框找回来,正是这次要解决的问题。
交互:
- 点评论或回复的任意位置 → 输入框获得焦点,placeholder 变「回复 @xxx」,
上方出现可取消的橙色提示条。不用再单独点一个「回复」按钮
- 删除从长按改成显式的「删除」文字,只在自己的评论上出现——长按是
隐藏交互,没人会发现
- 回复带首字头像并缩进一层,「甲 回复 乙」的指向关系显示在昵称行
键盘处理用 adjust-position=false + bindfocus 拿键盘高度自己顶:弹层是
fixed 定位,交给系统调整会把整块推出屏幕。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 16:39:36 +08:00
Blizzard
9fc61e878e
feat: 评论支持回复(两级 + @某人)
...
不做无限层级——手机屏幕撑不住层层缩进,读到第四层就没法看了。
微信、小红书、B站清一色是两级:一级评论 + 其下的回复列表,回复里
用「回复 @某人」表达指向谁。
数据结构:comments 加 parent_id + reply_to_name。回复的回复会被
压平到同一条一级评论下(parent_id 取爷爷的),同时把被回复人的名字
记进 reply_to_name —— 这样既保住两级,又不丢「在跟谁说话」的信息。
几个容易做错的地方:
- 一次查完这一页所有一级评论的回复,不是每条一次查询(N+1)
- 一级评论默认只带 3 条回复,其余点「展开全部 N 条」再拉,避免热门
评论一次返回几百条
- 删一级评论要连它下面的回复一起删,否则回复变成挂在空处的孤儿;
帖子的 comment_count 也要按实际删除条数减,不是减 1
- total 统计含回复,和帖子上显示的数字对得上
- replies 为空时返回 [],不是 null
实测四条评论(含一条回复的回复):
▸ 甲:一级评论 (2 条回复)
└ 乙:多久了?
└ 甲 回复 乙:三天了
▸ 乙:另一条一级评论 (0 条回复)
删掉第一条一级评论后 total 4→1,comment_count 同步。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 16:33:50 +08:00
Blizzard
535ef08da7
fix: 评论配图整条链路补全 + 宠物切换条吸顶
...
## 评论图片传了等于没传
上次只做了一半:model 加了 Images 字段、前端做了上传 UI,但
handler 的 commentReq 没有 images、service 的 CreateComment 连
参数都没有,图片上传完就丢了;评论列表也从没渲染过图片。
补齐:请求体 → service 落库(JSON 数组) → 列表回显 → 点击大图预览。
实测带两张图的评论和纯文字评论各存各的,互不影响。
## 宠物切换条吸顶
首页/计划/记录/报告四页的 pet-switch 原本在 scroll-view 里,滚下去
就找不到了。而切宠物是随时要用的动作——多宠用户看着 A 的数据想切到
B,还得先滚回顶部。
移出滚动区,放在导航栏下方做成固定的一条,带毛玻璃和分隔线。首页的
问候语留在滚动区里,滚走就滚走,反正它只在刚进页面时有意义。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 16:19:32 +08:00
Blizzard
5b2f8e50bc
fix: 带 date 查任务时区错位导致重复生成 + 评论弹窗重做 + AI 每日次数上限
...
## 首页添加的任务不显示(根因比表象严重)
time.Parse("2006-01-02", q) 返回的是 UTC 时间,dayStart 又保留了
t.Location(),于是带 ?date= 查询时:
查询区间 = 07-29 00:00 UTC ~ 次日 = CST 的 08:00 ~ 次日 08:00
已有任务的 task_date 是 07-29 00:00 CST,落在区间外
后果不只是「新任务不显示」——ensureDayTasks 因此认为今天没有任务,
每刷一次首页就重新生成一批。用户手动加的那条(00:00 CST)永远不在
那个错位窗口里,所以管理页看得到、首页看不到。
全项目 7 处 time.Parse 日期解析统一换成 ParseInLocation + time.Local
(任务、日计划、生日、到家日期、提醒到期日都受影响)。
实测:加一条后带 date 查得到 4 条,连查 4 次仍是 4 条不再增长。
## 评论弹窗
- 改成居中弹出。评论以输入为主,贴底弹层会被键盘顶掉大半屏
- 单行 input 换成自动撑高的 textarea,最多 500 字,带字数
- 支持配图,最多 3 张(评论表加 images 字段)
- 空评论原来会直接把弹层关掉,看起来像发成功了,改成明确提示
- 发完就地刷新列表,不再关闭弹层——连着回复更顺
## AI 每日次数上限
AI 调用是真金白银,不设上限等于把钱包交给用户。新增按「用户 + 自然日
+ 功能」计的额度,后台「社区运营」页可配问问 AI / 异常评估 / AI 计划
三档,改完立即生效。
两个刻意的设计:
- 扣额度在请求大模型之前,失败也算用掉一次。否则刷接口空转照样烧钱
- 配置读不到时回落到保守默认值,绝不「读不到就不限制」——那正是配置
出问题时最不该发生的事
超限返回业务码 42900,小程序端明确说明「明天 0 点恢复」,不当成网络
错误让用户反复重试。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 15:50:38 +08:00
Blizzard
c7135424e5
fix(fe): 保存到相册的方法根本没写进去 + 重构社区版式
...
## 保存到相册点了没反应
上次改的时候,插入方法的锚点用的是「// AI 聊天」那段注释,而它在
AI 独立成页时已经被删掉了 —— 替换没匹配上,onSavePoster / drawPoster /
saveToAlbum 三个方法一个都没进 js,按钮绑了个不存在的方法。
我的检查器没拦住,是因为「事件绑定是否有实现」那条写在临时的 audit.js
里,日常只跑 check.js。已经把这条并进 check.js —— 加完立刻抓出了本次
新写的 13 处缺样式 class,说明它管用。
## 社区
帖子操作栏原来是 space-around 排三个宽度不一的项:点赞数从 9 变 10
整行就会跳。改成三等分,图标 32rpx 居中对齐,没有数字时显示「点赞/评论」
而不是一个孤零零的 0,加了按下态。
帖子头部原来副标题固定写死「宠友」两个字,等于没有信息。换成发布时间
(刚刚 / 12 分钟前 / 3 天前)。
评论弹层原来拿 .record-row 当评论用 —— 那是个「左右两端对齐」的行,
昵称在左内容在右,评论一长就被挤扁,完全不是评论该有的样子。重做成
头像 + 昵称/时间 + 内容的正常结构;没有头像字段就用昵称首字做色块,
比一律显示同一个 emoji 强。发送按钮有输入才点亮,支持键盘回车发送。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 15:25:18 +08:00
Blizzard
0dee6e27d2
fix(fe): 成长海报的「保存/分享」原来是个装饰按钮
...
报告页 → 分享卡片,弹层底部那个「保存 / 分享卡片」按钮绑的是
bindtap="close" —— 点了只是把弹层关掉,既不保存也不分享。按钮文案
承诺了两件事,一件也没做。
拆成两个真按钮:
- 分享给朋友:走微信原生 open-type="share",转发标题带上宠物名
- 保存到相册:把海报画进离屏 canvas 再存相册
canvas 部分的几个坑:
- 画布用 position:fixed 挪到屏幕外,不能 display:none —— 那样
selectorQuery 取不到节点
- 按 pixelRatio 放大再 scale,否则高分屏上导出的图是糊的
- 相册权限被拒过一次后 wx.authorize 不会再弹,必须 wx.openSetting
引导,否则这里会永远静默失败——正是这次要修的那类问题
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 15:08:56 +08:00
Blizzard
e446019546
fix(fe): 补齐无宠物状态 + 用户操作失败不再静默
...
自查发现的四处,都属于「不报错但用户懵」:
1. record/plan/report 三页在 currentPetId 为空时直接 return,留下一堆
空卡片却不解释——用户以为坏了。加统一的 .no-pet 引导块,说清建档后
会有什么,并给一个建档按钮。
2. 首页门面卡在没建档时点击会打开「编辑宠物」的空表单。改成没档案就走
「添加」,文案也跟着变成「点这里建一份档案」。
3. 没建档时在快速记录弹层点「保存」,createAndClose 因为拿不到 petID
直接 close 掉——用户以为存上了,其实什么都没发生。改成明确提示。
4. 用户主动触发的操作失败不再静默:勾任务、全部完成、勾计划节点、点赞
四处的 .catch(() => {}) 换成 toast。后台加载类的静默保持不变——
那些失败了重进页面会自愈,弹 toast 反而是噪音。
事件绑定做了一次全量扫描:18 个 wxml 里所有 bind/catch 绑的方法在对应
js 里都有实现,没有「点了没反应」的死按钮。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 14:23:58 +08:00
Blizzard
35fc57e8de
feat(fe): AI 独立成页(打字机)+ 修快速记录 6 处问题 + 导航栏去接缝
...
AI 从底部弹层改成独立页面 pages/ai/ai:
- 整屏聊天,输入框固定在底部,不再是「问题都打不完」的小格子
- 回复逐字吐出(30ms/2 字),点一下可跳过
- 会话 session 从 sheet 改为 chat,历史拉 50 条
- 组件里对应的 ai 分支和 aiMessages/aiInput/sendAI 一并删掉,
避免两套实现并存
快速记录九个入口逐个排查,修掉 6 处:
1. 疫苗/驱虫的默认日期写死成 2026-07-21 / 2026-07-15,早已是过去的
日期 —— 改成打开时按今天 +30 / +90 天算
2. 异常观察没选症状时,optIdx 返回 0 会被当成选了「呕吐」,等于替
用户瞎填 —— 加 optPicked 判断,没选就提示
3. 体重为空时会静默存成「上次的体重」,凭空造一条假数据 —— 改为必填校验
4. 消费金额为空会存成 ¥0 —— 必填校验
5. 用药药品名为空 —— 必填校验
6. 照片弹层里「模拟上传预览」是没删掉的假文案
顺带清理:保存按钮上的 data-text / data-icon 从来没被读过(onSave 只用
buildRecord 的返回值),是纯误导的死属性,删掉。我上一条 commit 把它们
说成「写库值」是说错了 —— 真正写库的是 buildRecord 里的 icon 字段,那部分
仍然没动。
导航栏原来是一整条半透明色块,底边和页面渐变硬碰硬,屏幕上横着一道接缝。
改成上实下虚的渐变,并用同一条 mask 把毛玻璃一起淡出(只淡背景不淡 blur
的话,接缝会从色差变成糊边)。返回键做成圆形,和右上角胶囊视觉对称。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 11:10:41 +08:00
Blizzard
cab8b9ee28
feat(fe): 弹层样式对齐 token(不动结构,不动写库值)
...
bottom-sheet 是 1245 行 / 28 种 type 的上帝组件,任何结构改动都会把
UI 重构变成功能重构,两类风险叠加后无法定位。所以这次严格限定:
改了:组件私有样式的值(圆角/字号/间距/配色走 token)
改了:wxml 里 5 处纯展示的 emoji → pt-icon(风险等级 ⚠️ 、勾选 ✓、
删图 ×、加图 +、已开通 Pro ✓)
没动:innerType 分发链、wx:if/elif 顺序、任何 data-*、onSave 的 payload
没动:8 处 data-icon="💩 " 和 bottom-sheet.js 里 36 处 icon 字面量
—— 这些是写进数据库的值,改了会让历史数据和新数据分裂成两套且
回滚不回来。清理它需要给 HealthRecord 加 icon 枚举 + migration,
是独立任务。
sheet-scroll 上限从 78vh 提到 80vh:圆角和间距变化后,exportData /
manageTasks / comments 这三型最容易从「内滚」变成被截断。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 10:55:43 +08:00
Blizzard
2fd25e26ef
feat(fe): 其余 8 页 + 三个薄组件套用新设计语言
...
页面:
- record:3×3 emoji 九宫格(184rpx 高、全站最大的点击块)换成图标 + 4 色分类,
和首页的 8 宫格合并成同一套 .quick-grid,此前它俩是同一个东西的两个副本
- record/plan/community:三套横向切换全部换成 seg-tabs
- record/plan/community/report/learn:砍掉与 nav-bar 重复的 46rpx 大标题,
每页白赚约 130rpx 首屏
- 时间轴图标改按 HealthRecord.Type 取(9 值枚举,可靠),老数据里的 emoji
只作兜底;写库的 icon 字段一个字符没动
- profile:设置行加分类图标 + 右侧箭头换图标
- community/report:主操作改深色 CTA,btn-primary 继续留给弹层的「保存」
- 6 套空态写法统一成 .empty
组件:
- nav-bar 的 ‹ 和 fab 的 "AI" 文字换成图标;fab 从蓝渐变改深色,
和全站唯一主 CTA 的语义对齐
- pet-switch 的「+」换图标;宠物自己的 emoji 是用户数据,保留
pt-icon 开了 virtualHost,组件标签上的 class 不生效,需要定位的地方
(profile 行图标、箭头)都用外层 view 包了一层。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 10:54:18 +08:00
Blizzard
15ff59e6db
feat(fe): 新增 seg-tabs 与 stat-ring 组件
...
seg-tabs 合并三套长得像但尺寸各不同的横向切换:plan 的 .inline-tabs
(灰槽白块)、community 的 .feed-tab(白药丸+阴影)、record 的 .rf-chip
(白药丸无阴影,高度还差 10rpx)。variant="solid|pill" 二选一,items
同时支持字符串数组和 {key,label} 数组。
stat-ring 是首页门面用的完成度环。用 SVG data-uri 画,和 record 页的
体重折线图同一套路——canvas 在 scroll-view 里的层级、滚动跟随和截图
行为全是坑。中心内容走 slot。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 10:36:35 +08:00
Blizzard
b4a4a4b3c0
feat(fe): 引入线性图标体系,tabBar 去 emoji,清掉 172KB 死资源
...
图标不走字体走 mask-image。Tabler 的 outline 图标是 stroke+fill:none,
字形只认填充轮廓,直接转字体会生成空字形——真机表现和「字体没加载」
一模一样,很容易往错方向排查。mask 走渲染 alpha,描边正常参与,
同样支持 currentColor 染色,没有这个坑。
- styles/iconfont.wxss:38 个图标内联 base64,19.9KB
- components/pt-icon:name 支持图标名 / 记录类型 / 老数据里的 emoji,
三层降级兜底,绝不留空白;virtualHost 避免多一层节点破坏 flex
- custom-tab-bar:🏠 📅 ✍️ 📊 🐾 换成图标,顺手把抄了一遍的三个色值换回 var()
- project.config.json:packOptions.ignore 排掉 preview.html、6 个候选 logo
等 172KB 死资源,之前它们全打进包里
preview-v2.html 是设计验证页,本身也不参与打包。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-07-29 10:28:48 +08:00
Blizzard
2e3345cdfc
feat: 记录删除与筛选、用户侧内容删除、AI 聊天历史
...
修复雪花 ID 精度丢失(真 bug)
- bottom-sheet 的 postId 声明为 Number,而 ID 是 18 位雪花字符串,
超出 JS 安全整数范围:339346584095428608 会被转成 ...600,
评论弹层实际查的是不存在的帖子。改为 String
记录
- 后端 DELETE /records/:id 早已就绪但前端从未调用,记错了删不掉。
时间轴支持长按删除
- 时间轴加类型筛选(体重/便便/饮食/异常/用药/疫苗/消费/照片),
后端 ?type= 本就支持
用户侧内容删除(UGC 合规:用户应能删除自己发布的内容)
- 新增 DELETE /posts/:id 与 DELETE /comments/:id,仅限本人,
越权返回 40300;帖子软删除,评论删除同步递减 comment_count
- 评论列表返回 is_self;社区长按自己的帖子、长按自己的评论可删
AI 聊天历史
- ai_messages 一直在写但没有查询接口,每次打开弹层都是空白。
新增 GET /api/ai/messages,弹层打开时接在开场白后加载
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-28 17:42:14 +08:00
Blizzard
77beb9ca96
fix(pro): 会员改为「即将开放」,堵住点一下白拿会员的漏洞
...
原先 /api/pro/activate 直接写库开通一年会员,没有任何支付校验,
任何人调一次接口就是会员。支付暂不接入,这里必须在服务端拒绝,
只改 UI 挡不住直接调接口。
- ActivatePro 一律返回 ErrPayNotReady;真正写库的逻辑保留为
activateProAfterPaid,等接微信支付时在校验支付单据后调用
- handler 对该错误返回参数错而非 500,前端直接展示提示文案
- 小程序 Pro 弹层按钮置灰为「即将开放」,我的页入口改为
「Pro 会员(即将开放)」
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-25 18:15:38 +08:00
Blizzard
3fde90e97b
feat: 补齐五块缺失功能(记录丢数据/文章正文/提醒管理/我的页入口/分享/关注)
...
P0 修数据问题
- 记录弹层有 5 个输入框从未绑定,用户填的便便备注、饮食内容、药品名称、
剂量、消费备注全部丢弃;用药记录因此只存下「用药记录」四个字。已全部绑定并入库
- 异常观察保存时写死「风险中」,AI 实际判定的等级被丢掉。改为使用 riskData
的真实 risk_level,并把成因与建议存进备注
文章正文
- 早期 seed 的 4 篇文章 Content 全空,点开只是打开关联记录弹层,内容运营等于白做
- 补写 4 篇真实正文(疫苗驱虫/软便判断/换粮方案/养宠花销),遵循不诊断、
异常必提就医的护栏;对已存在的空正文做幂等回填
- 新增文章详情页,学习页与首页卡片改为打开正文
提醒管理
- 后端 CRUD 早已具备但小程序只读,用户改不了疫苗驱虫日期。提醒弹层支持增删改
- 修复后端 UpdateReminder 漏掉 type 字段导致改类型不生效
「我的」页 7 个死入口接活
- 提醒设置、健康记录、多宠物管理、会员权益分别落到对应功能
- 数据导出:汇总档案与记录为文本,可复制发给医生
- 意见反馈:新增 feedback 表与提交接口,后台加「意见反馈」管理页
- 关于我们:应用说明与免责声明
分享
- 各页面补 onShareAppMessage/onShareTimeline
- 帖子分享按钮改用微信原生 open-type="share",删除原来点了没反应的空壳弹层
社区关注
- 新增 follows 表与关注/取关接口,「关注」tab 此前等同「推荐」,
现只显示已关注用户的帖子;帖子头部可直接关注,标记 followed / is_self
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-25 18:11:08 +08:00
Blizzard
3816cd1b02
chore: 小程序更名为「肉垫计划」
...
- 原名「毛孩子计划」在微信已被占用,全项目 24 处替换(导航标题、
AI 提示词身份、社区官方号、后台登录页、logo 横版文案)
- logo 英文副标同步改为 PAW PAD · CARE PLAN
- 新增 小程序资料.md:后台要填的简介(多长度版本)、关键词、
服务类目建议与审核避雷要点
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-25 16:46:21 +08:00
Blizzard
28b95a6468
feat: 每日任务顺延与增删改 + 计划到期续期 + 靠谱养护模板 + 图片URL修复
...
后端
- 每日任务惰性生成:某天为空则从最近一天顺延复制(done 重置),首天用模板
- 任务增删改 API(POST /pets/:id/tasks、PUT/DELETE /tasks/:id),改动自动顺延
- 30 天计划到期自动归档并按当前阶段生成新一轮
- 内置养护模板重写为兽医常识向:狗每阶段含遛狗/牵引/狂犬,猫含猫砂/梳毛/饮水
- 文件 URL 改为按 object_name + 当前配置动态拼接,换 IP/域名不再有旧地址
小程序
- 首页今日任务加「管理」入口:增删改任务弹层
- 记录时间轴显示照片缩略图(可全屏预览)+ 拍照成功提示
- 社区发布条精简为单个「发布图文」按钮,去掉头像/输入框误触
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-06 10:06:13 +08:00
Blizzard
2f5dd6eefc
feat: 养护模板/社区运营/体重趋势/计划日历 + 雪花ID重构 + 文件表与图片上传
...
后端
- 主键改雪花字符串 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 >
2026-07-06 08:48:15 +08:00
Blizzard
609f7d06cf
init: 毛孩子计划 小程序 + Go 后端 + 内嵌后台
...
- pets-fe: 微信原生小程序(首页/计划/记录/报告/社区/引导),
服务端驱动、无假数据;弹层改用 scroll-view,打开时隐藏自定义 tabBar
- pets-be: Gin + GORM(MySQL, sundynix_ 前缀) + MinIO,统一响应/分页,
微信 code2session 登录,provider-neutral AI(DeepSeek),go:embed React 后台
- 修复:分段选择类型不匹配(字符串 vs 数字)导致选不中
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-07-03 15:36:55 +08:00