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>
This commit is contained in:
@@ -32,7 +32,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<view class="seg-btn {{u.sel(segSel,'poopState',2,0)?'selected':''}}" data-group="poopState" data-index="2" bindtap="onSeg">拉稀</view>
|
||||
</view></view>
|
||||
<view class="field"><label>颜色/备注</label>
|
||||
<textarea class="textarea" placeholder="颜色、次数、是否带血、是否有异味等" placeholder-class="placeholder"></textarea></view>
|
||||
<textarea class="textarea" placeholder="颜色、次数、是否带血、是否有异味等" placeholder-class="placeholder" value="{{poopNote}}" bindinput="onPoopNote"></textarea></view>
|
||||
<button class="btn btn-primary btn-block" data-text="排便记录:正常" data-icon="💩" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
@@ -40,7 +40,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<block wx:elif="{{innerType === 'food'}}">
|
||||
<view class="sheet-h3">记录饮食</view>
|
||||
<view class="field"><label>今天吃了什么?</label>
|
||||
<input class="input" placeholder="例如:幼猫粮 45g" placeholder-class="placeholder"/></view>
|
||||
<input class="input" placeholder="例如:幼猫粮 45g" placeholder-class="placeholder" value="{{foodText}}" bindinput="onFoodText"/></view>
|
||||
<view class="field"><label>食欲</label><view class="seg">
|
||||
<view class="seg-btn {{u.sel(segSel,'food',0,0)?'selected':''}}" data-group="food" data-index="0" bindtap="onSeg">正常</view>
|
||||
<view class="seg-btn {{u.sel(segSel,'food',1,0)?'selected':''}}" data-group="food" data-index="1" bindtap="onSeg">偏少</view>
|
||||
@@ -99,8 +99,8 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<!-- 记录用药 -->
|
||||
<block wx:elif="{{innerType === 'medicine'}}">
|
||||
<view class="sheet-h3">记录用药</view>
|
||||
<view class="field"><label>药品名称</label><input class="input" placeholder="例如:体内驱虫药" placeholder-class="placeholder"/></view>
|
||||
<view class="field"><label>剂量/备注</label><input class="input" placeholder="例如:按 2.8kg 剂量" placeholder-class="placeholder"/></view>
|
||||
<view class="field"><label>药品名称</label><input class="input" placeholder="例如:体内驱虫药" placeholder-class="placeholder" value="{{medName}}" bindinput="onMedName"/></view>
|
||||
<view class="field"><label>剂量/备注</label><input class="input" placeholder="例如:按 2.8kg 剂量" placeholder-class="placeholder" value="{{medDose}}" bindinput="onMedDose"/></view>
|
||||
<button class="btn btn-primary btn-block" data-text="用药记录" data-icon="💊" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
@@ -113,7 +113,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<view class="seg-btn {{u.sel(segSel,'cost',1,0)?'selected':''}}" data-group="cost" data-index="1" bindtap="onSeg">医疗</view>
|
||||
<view class="seg-btn {{u.sel(segSel,'cost',2,0)?'selected':''}}" data-group="cost" data-index="2" bindtap="onSeg">用品</view>
|
||||
</view></view>
|
||||
<view class="field"><label>备注</label><input class="input" placeholder="例如:幼猫粮" placeholder-class="placeholder"/></view>
|
||||
<view class="field"><label>备注</label><input class="input" placeholder="例如:幼猫粮" placeholder-class="placeholder" value="{{costNote}}" bindinput="onCostNote"/></view>
|
||||
<button class="btn btn-primary btn-block" data-text="消费记录:¥168" data-icon="💰" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
@@ -154,9 +154,33 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<!-- 提醒中心 -->
|
||||
<block wx:elif="{{innerType === 'reminders'}}">
|
||||
<view class="sheet-h3">提醒中心</view>
|
||||
<view wx:for="{{reminders}}" wx:key="title" class="record-row"><text class="bold">{{item.title}}</text><text class="muted">{{item.when}}</text></view>
|
||||
<view wx:if="{{!reminders.length}}" class="sheet-p">暂无提醒</view>
|
||||
<button class="btn btn-primary btn-block" style="margin-top:24rpx" bindtap="close">完成</button>
|
||||
<view class="sheet-p">疫苗、驱虫这些别靠记,设好日期到时候提醒你。</view>
|
||||
|
||||
<view wx:for="{{reminders}}" wx:key="id" class="mtask-row">
|
||||
<view class="mtask-body">
|
||||
<text class="mtask-b">{{item.title}}</text>
|
||||
<view class="mtask-p">{{item.when}}</view>
|
||||
</view>
|
||||
<view class="mtask-op" catchtap="onEditReminder" data-index="{{index}}">改</view>
|
||||
<view class="mtask-op del" catchtap="onDeleteReminder" data-index="{{index}}">删</view>
|
||||
</view>
|
||||
<view wx:if="{{!reminders.length}}" class="sheet-p">还没有提醒,下面加一条吧。</view>
|
||||
|
||||
<view class="field" style="margin-top:12rpx"><label>{{remForm.id ? '修改提醒' : '新增提醒'}}</label>
|
||||
<input class="input" placeholder="提醒名,例如:第 3 针疫苗" placeholder-class="placeholder" value="{{remForm.title}}" bindinput="onRemTitle"/></view>
|
||||
<view class="field"><label>类型 / 到期日</label>
|
||||
<view class="mtask-form-row">
|
||||
<picker mode="selector" range="{{remTypeLabels}}" value="{{remForm.typeIdx}}" bindchange="onRemType">
|
||||
<view class="picker-box">{{remTypeLabels[remForm.typeIdx]}}</view>
|
||||
</picker>
|
||||
<picker mode="date" value="{{remForm.date}}" bindchange="onRemDate">
|
||||
<view class="picker-box">{{remForm.date || '选择到期日'}}</view>
|
||||
</picker>
|
||||
</view>
|
||||
</view>
|
||||
<view class="field"><label>重复频率(可选)</label>
|
||||
<input class="input" placeholder="例如:每月一次;填了可不选到期日" placeholder-class="placeholder" value="{{remForm.freq}}" bindinput="onRemFreq"/></view>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSaveReminder">{{remForm.id ? '保存修改' : '添加提醒'}}</button>
|
||||
</block>
|
||||
|
||||
<!-- 任务详情 -->
|
||||
@@ -312,12 +336,59 @@ module.exports.sel = function (map, key, index, def) {
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<!-- 分享帖子 -->
|
||||
<block wx:elif="{{innerType === 'sharePost'}}">
|
||||
<view class="sheet-h3">分享帖子</view>
|
||||
<view class="sheet-p">转发给微信好友、微信群,或生成一张分享卡片。</view>
|
||||
<button class="btn btn-primary btn-block" bindtap="close">生成分享卡片</button>
|
||||
<!-- 多宠物管理 -->
|
||||
<block wx:elif="{{innerType === 'managePets'}}">
|
||||
<view class="sheet-h3">多宠物管理</view>
|
||||
<view class="sheet-p">点一只切换为当前宠物,或编辑它的档案。</view>
|
||||
<view wx:for="{{myPets}}" wx:key="id" class="mtask-row">
|
||||
<view class="mtask-body" catchtap="onSwitchPet" data-id="{{item.id}}">
|
||||
<text class="mtask-b">{{item.emoji}} {{item.name}}<text wx:if="{{item.current}}" class="mtask-pri">当前</text></text>
|
||||
<view class="mtask-p">{{item.meta}}</view>
|
||||
</view>
|
||||
<view class="mtask-op" catchtap="onEditPetFromList" data-id="{{item.id}}">编辑</view>
|
||||
</view>
|
||||
<view wx:if="{{!myPets.length}}" class="sheet-p">还没有毛孩子。</view>
|
||||
<button class="btn btn-primary btn-block" style="margin-top:16rpx" data-type="addPet" bindtap="goSheet">+ 添加毛孩子</button>
|
||||
</block>
|
||||
|
||||
<!-- 导出健康档案 -->
|
||||
<block wx:elif="{{innerType === 'exportData'}}">
|
||||
<view class="sheet-h3">导出健康档案</view>
|
||||
<view class="sheet-p">整理成一段文字,可复制后发给医生或存到备忘录。</view>
|
||||
<view class="export-box">{{exportText || '正在整理…'}}</view>
|
||||
<button class="btn btn-primary btn-block" bindtap="onCopyExport">复制全部内容</button>
|
||||
</block>
|
||||
|
||||
<!-- 意见反馈 -->
|
||||
<block wx:elif="{{innerType === 'feedback'}}">
|
||||
<view class="sheet-h3">意见反馈</view>
|
||||
<block wx:if="{{!fbDone}}">
|
||||
<view class="sheet-p">用着哪儿别扭、想要什么功能,都可以告诉我们。</view>
|
||||
<view class="field"><label>你的反馈</label>
|
||||
<textarea class="textarea" placeholder="例如:希望能记录洗澡时间" placeholder-class="placeholder" value="{{fbContent}}" bindinput="onFbContent"></textarea></view>
|
||||
<view class="field"><label>联系方式(可选)</label>
|
||||
<input class="input" placeholder="微信号或邮箱,方便回复你" placeholder-class="placeholder" value="{{fbContact}}" bindinput="onFbContact"/></view>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSubmitFeedback" disabled="{{saving}}">{{saving ? '提交中…' : '提交反馈'}}</button>
|
||||
</block>
|
||||
<block wx:else>
|
||||
<view class="sheet-p">已收到,谢谢你的反馈 🐾</view>
|
||||
<button class="btn btn-primary btn-block" bindtap="close">好的</button>
|
||||
</block>
|
||||
</block>
|
||||
|
||||
<!-- 关于我们 -->
|
||||
<block wx:elif="{{innerType === 'about'}}">
|
||||
<view class="sheet-h3">关于肉垫计划</view>
|
||||
<view class="sheet-p pre">肉垫计划是给新手养宠人做的照护记录工具。
|
||||
|
||||
按猫狗的品类和成长阶段生成每日照护任务和养护计划,随手记录体重、饮食、排便、用药、疫苗和开支,疫苗驱虫到期前提醒你,并把这些整理成成长报告。
|
||||
|
||||
版本:v0.2
|
||||
反馈:我的 → 意见反馈</view>
|
||||
<view class="sheet-p" style="color:var(--muted);font-size:24rpx">本小程序提供的是记录与观察建议,不能替代医生诊断。宠物出现持续异常请及时就医。</view>
|
||||
<button class="btn btn-primary btn-block" bindtap="close">知道了</button>
|
||||
</block>
|
||||
|
||||
</scroll-view>
|
||||
|
||||
</view>
|
||||
|
||||
Reference in New Issue
Block a user