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:
@@ -0,0 +1,28 @@
|
||||
<nav-bar title="AI 养宠助手" show-back="{{true}}"></nav-bar>
|
||||
|
||||
<scroll-view class="chat-scroll" scroll-y="{{true}}" enhanced="{{true}}" show-scrollbar="{{false}}"
|
||||
scroll-into-view="{{scrollInto}}" scroll-with-animation="{{true}}" bindtap="onSkip">
|
||||
<view class="chat-body">
|
||||
<view wx:for="{{messages}}" wx:key="index" class="row row-{{item.role}}">
|
||||
<view wx:if="{{item.role === 'ai'}}" class="ai-avatar"><pt-icon name="ai" size="{{34}}"></pt-icon></view>
|
||||
<view class="bubble bubble-{{item.role}}">
|
||||
<text>{{item.text}}</text><text wx:if="{{item.pending}}" class="caret">▌</text>
|
||||
</view>
|
||||
</view>
|
||||
<view id="chat-bottom" class="chat-bottom"></view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
|
||||
<view class="dock">
|
||||
<scroll-view wx:if="{{!sending}}" class="presets" scroll-x="{{true}}" enhanced="{{true}}" show-scrollbar="{{false}}">
|
||||
<view wx:for="{{presets}}" wx:key="*this" class="preset" data-text="{{item}}" bindtap="onSend">{{item}}</view>
|
||||
</scroll-view>
|
||||
<view class="input-row">
|
||||
<input class="input" placeholder="描述一下 {{pet.name || '毛孩子'}} 的情况…" placeholder-class="placeholder"
|
||||
value="{{input}}" bindinput="onInput" confirm-type="send" bindconfirm="onSend"
|
||||
adjust-position="{{true}}" cursor-spacing="20"/>
|
||||
<view class="send {{input ? 'on' : ''}}" bindtap="onSend">
|
||||
<pt-icon name="{{sending ? 'clock' : 'next'}}" size="{{34}}"></pt-icon>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
Reference in New Issue
Block a user