3fde90e97b
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>
101 lines
4.8 KiB
Plaintext
101 lines
4.8 KiB
Plaintext
<nav-bar title="肉垫计划"></nav-bar>
|
||
|
||
<scroll-view class="page-scroll" scroll-y="{{true}}" enhanced="{{true}}" show-scrollbar="{{false}}">
|
||
<view class="page-body">
|
||
<view class="top-row">
|
||
<view class="greeting">
|
||
<view class="greet-h2">{{summary.greeting || '你好'}}</view>
|
||
<view class="greet-p">今天也要照顾好 {{pet.name}} 🐾</view>
|
||
</view>
|
||
<view class="icon-stack">
|
||
<view class="icon-btn" data-type="reminders" bindtap="openSheet">🔔</view>
|
||
<view class="icon-btn" bindtap="goProfile">⚙</view>
|
||
</view>
|
||
</view>
|
||
|
||
<pet-switch bind:add="onAddPet"></pet-switch>
|
||
|
||
<view class="card hero-card">
|
||
<view class="pet-row" bindtap="onEditPet">
|
||
<view class="avatar">{{pet.emoji}}</view>
|
||
<view class="pet-main">
|
||
<view class="pet-name-b">{{pet.name}}</view>
|
||
<view class="pet-meta">{{pet.age}}|{{pet.weight}}|{{pet.stage}}</view>
|
||
</view>
|
||
<view class="tag">{{summary.health_status || '正常'}}</view>
|
||
</view>
|
||
<view class="progress-row"><text>本周健康完成度</text><text>{{summary.health_pct}}%</text></view>
|
||
<view class="bar"><view class="bar-fill" style="width:{{summary.health_pct}}%"></view></view>
|
||
<scroll-view wx:if="{{summary.insights.length}}" class="insight-row" scroll-x="true" enhanced="{{true}}" show-scrollbar="{{false}}">
|
||
<view wx:for="{{summary.insights}}" wx:key="text" class="insight"><text class="insight-b">{{item.bold}}</text>{{item.text}}</view>
|
||
</scroll-view>
|
||
</view>
|
||
|
||
<view class="date-strip">
|
||
<view wx:for="{{summary.week}}" wx:key="date"
|
||
class="day {{item.active ? 'active' : ''}} {{item.date === selectedDate ? 'sel' : ''}} {{item.has_dot ? 'has-dot' : ''}}"
|
||
data-date="{{item.date}}" data-active="{{item.active}}" bindtap="onTapDay">
|
||
<text>{{item.weekday}}</text><text class="day-b">{{item.day}}</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="card">
|
||
<view class="section-head">
|
||
<view class="sh-title">{{taskLabel}}</view>
|
||
<view class="head-links">
|
||
<view class="link" data-type="manageTasks" bindtap="openSheet">管理</view>
|
||
<view wx:if="{{selectedDate && selectedDate !== todayDate}}" class="link" bindtap="backToToday">回今天</view>
|
||
<view wx:else class="link" bindtap="completeTasks">全部完成</view>
|
||
</view>
|
||
</view>
|
||
<view class="task-list">
|
||
<view wx:for="{{tasks}}" wx:key="title" class="task {{item.done ? 'done' : ''}}" data-index="{{index}}" bindtap="onTapTask">
|
||
<view class="circle">✓</view>
|
||
<view class="task-text"><text class="tt-b">{{item.title}}</text><view class="tt-p">{{item.sub}}</view></view>
|
||
<view wx:if="{{item.priority}}" class="priority">{{item.priority}}</view>
|
||
</view>
|
||
<view wx:if="{{tasks.length === 0}}" class="task-empty">这天没有任务记录</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="card">
|
||
<view class="section-head">
|
||
<view class="sh-title">快速记录</view>
|
||
<view class="link" bindtap="goRecord">更多</view>
|
||
</view>
|
||
<view class="quick-grid">
|
||
<view class="quick" data-type="weight" bindtap="openSheet"><text class="q-ic">⚖️</text>体重</view>
|
||
<view class="quick" data-type="poop" bindtap="openSheet"><text class="q-ic">💩</text>便便</view>
|
||
<view class="quick" data-type="food" bindtap="openSheet"><text class="q-ic">🍽️</text>饮食</view>
|
||
<view class="quick" data-type="symptom" bindtap="openSheet"><text class="q-ic">🤒</text>异常</view>
|
||
<view class="quick" data-type="cost" bindtap="openSheet"><text class="q-ic">💰</text>消费</view>
|
||
<view class="quick" data-type="medicine" bindtap="openSheet"><text class="q-ic">💊</text>用药</view>
|
||
<view class="quick" data-type="photo" bindtap="openSheet"><text class="q-ic">📷</text>照片</view>
|
||
<view class="quick" data-type="vaccine" bindtap="openSheet"><text class="q-ic">💉</text>疫苗</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="card ai-banner">
|
||
<view class="section-head">
|
||
<view class="sh-title">AI 今日建议</view>
|
||
<view class="link" data-type="ai" bindtap="openSheet">问问 AI</view>
|
||
</view>
|
||
<view class="ai-text">{{summary.advice || '正在生成今日建议…'}}</view>
|
||
</view>
|
||
|
||
<view class="card">
|
||
<view class="section-head">
|
||
<view class="sh-title">新手内容</view>
|
||
<view class="link" bindtap="goLearn">查看</view>
|
||
</view>
|
||
<view wx:if="{{firstArticle}}" class="article-card no-shadow" style="margin-bottom:0" bindtap="openFirstArticle">
|
||
<view class="article-icon">{{firstArticle.icon}}</view>
|
||
<view><text class="ac-b">{{firstArticle.title}}</text><view class="ac-p">{{firstArticle.desc}}</view></view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
<fab bind:tap="onFab"></fab>
|
||
<bottom-sheet show="{{sheetShow}}" type="{{sheetType}}" bind:close="closeSheet" bind:save="onSheetSave"></bottom-sheet>
|