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>
This commit is contained in:
@@ -33,7 +33,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
</view></view>
|
||||
<view class="field"><label>颜色/备注</label>
|
||||
<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>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
<!-- 记录饮食 -->
|
||||
@@ -46,7 +46,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<view class="seg-btn {{u.sel(segSel,'food',1,0)?'selected':''}}" data-group="food" data-index="1" bindtap="onSeg">偏少</view>
|
||||
<view class="seg-btn {{u.sel(segSel,'food',2,0)?'selected':''}}" data-group="food" data-index="2" bindtap="onSeg">不吃</view>
|
||||
</view></view>
|
||||
<button class="btn btn-primary btn-block" data-text="饮食记录:食欲正常" data-icon="🍽️" bindtap="onSave">保存记录</button>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
<!-- 异常观察 -->
|
||||
@@ -80,7 +80,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<view class="sheet-p"><text class="bold">建议:</text>{{riskData ? riskData.suggestion : '继续观察精神、食欲和排便;暂停新食物;记录呕吐或腹泻次数。'}}</view>
|
||||
<view class="sheet-p"><text class="bold">建议就医:</text>{{riskData ? riskData.seek_care : '如果持续超过 24 小时,或伴随便血、精神明显变差、频繁呕吐,建议尽快就医。'}}</view>
|
||||
<view class="sheet-actions">
|
||||
<button class="btn btn-ghost" data-text="异常观察:风险中" data-icon="🤒" bindtap="onSave">保存记录</button>
|
||||
<button class="btn btn-ghost" bindtap="onSave">保存记录</button>
|
||||
<button class="btn btn-primary" data-type="vetSummary" bindtap="goSheet">就医摘要</button>
|
||||
</view>
|
||||
</block>
|
||||
@@ -93,7 +93,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
当前体重:{{pet.weight}}
|
||||
近期重点:疫苗期、换粮观察、排便记录
|
||||
建议携带:排便/呕吐照片、饮食变化、疫苗驱虫记录。</view>
|
||||
<button class="btn btn-primary btn-block" data-text="生成就医前摘要" data-icon="📄" bindtap="onSave">保存摘要</button>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存摘要</button>
|
||||
</block>
|
||||
|
||||
<!-- 记录用药 -->
|
||||
@@ -101,7 +101,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<view class="sheet-h3">记录用药</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>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
<!-- 记一笔消费 -->
|
||||
@@ -114,7 +114,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<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" value="{{costNote}}" bindinput="onCostNote"/></view>
|
||||
<button class="btn btn-primary btn-block" data-text="消费记录:¥168" data-icon="💰" bindtap="onSave">保存记录</button>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存记录</button>
|
||||
</block>
|
||||
|
||||
<!-- 疫苗提醒 -->
|
||||
@@ -125,7 +125,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<picker mode="date" value="{{dateVals.vaccine}}" data-key="vaccine" bindchange="onDate">
|
||||
<view class="picker-box">{{dateVals.vaccine}}</view>
|
||||
</picker></view>
|
||||
<button class="btn btn-primary btn-block" data-text="疫苗提醒:7月21日" data-icon="💉" bindtap="onSave">保存提醒</button>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存提醒</button>
|
||||
</block>
|
||||
|
||||
<!-- 驱虫提醒 -->
|
||||
@@ -136,7 +136,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<picker mode="date" value="{{dateVals.deworm}}" data-key="deworm" bindchange="onDate">
|
||||
<view class="picker-box">{{dateVals.deworm}}</view>
|
||||
</picker></view>
|
||||
<button class="btn btn-primary btn-block" data-text="驱虫提醒:7月15日" data-icon="🛡️" bindtap="onSave">保存提醒</button>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSave">保存提醒</button>
|
||||
</block>
|
||||
|
||||
<!-- 成长照片 -->
|
||||
@@ -146,7 +146,7 @@ module.exports.sel = function (map, key, index, def) {
|
||||
<view class="poster" style="margin-bottom:28rpx">
|
||||
<view class="poster-avatar">{{pet.emoji}}</view>
|
||||
<view class="bold" style="font-size:30rpx">{{pet.name}} 的成长照片</view>
|
||||
<view class="muted" style="font-size:24rpx;margin-top:12rpx">模拟上传预览</view>
|
||||
<view class="muted" style="font-size:24rpx;margin-top:12rpx">支持 jpg / png,单张不超过 10MB</view>
|
||||
</view>
|
||||
<button class="btn btn-primary btn-block" bindtap="onSavePhoto">选择图片上传</button>
|
||||
</block>
|
||||
@@ -184,24 +184,6 @@ module.exports.sel = function (map, key, index, def) {
|
||||
</block>
|
||||
|
||||
<!-- 任务详情 -->
|
||||
<!-- 问问 AI -->
|
||||
<block wx:elif="{{innerType === 'ai'}}">
|
||||
<view class="sheet-h3">问问 AI</view>
|
||||
<scroll-view class="plan-chat" scroll-y="true" enhanced="{{true}}" show-scrollbar="{{false}}" style="max-height:660rpx" scroll-into-view="ai-bottom">
|
||||
<view wx:for="{{aiMessages}}" wx:key="index" class="msg {{item.role}}">{{item.text}}</view>
|
||||
<view id="ai-bottom"></view>
|
||||
</scroll-view>
|
||||
<view class="mini-options">
|
||||
<view class="option" data-text="猫咪今天吐了一次怎么办?" bindtap="sendAI">猫咪吐了一次</view>
|
||||
<view class="option" data-text="幼猫多久驱虫一次?" bindtap="sendAI">多久驱虫</view>
|
||||
<view class="option" data-text="换粮后软便怎么办?" bindtap="sendAI">换粮软便</view>
|
||||
</view>
|
||||
<view class="ai-input-row">
|
||||
<input class="input" placeholder="描述一下问题..." placeholder-class="placeholder"
|
||||
value="{{aiInput}}" bindinput="onAiInput" confirm-type="send" bindconfirm="sendAI"/>
|
||||
<button class="btn btn-primary ai-send" bindtap="sendAI">发</button>
|
||||
</view>
|
||||
</block>
|
||||
|
||||
<!-- 成长海报 -->
|
||||
<block wx:elif="{{innerType === 'poster'}}">
|
||||
|
||||
Reference in New Issue
Block a user