aefb1bc103
## 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>
54 lines
2.7 KiB
Plaintext
54 lines
2.7 KiB
Plaintext
<nav-bar title="我的"></nav-bar>
|
||
|
||
<scroll-view class="page-scroll" scroll-y="{{true}}" enhanced="{{true}}" show-scrollbar="{{false}}">
|
||
<view class="page-body no-fab">
|
||
<!-- 和「宠友主页」同一个组件。自己看到的就是别人看到的,装扮才有意义 -->
|
||
<profile-head card="{{card}}" bind:relations="goRelations"
|
||
bind:decorate="goDecorate" bind:pet="onPickPet"></profile-head>
|
||
|
||
<view class="btn btn-ghost btn-block me-preview" bindtap="previewPublic">
|
||
<pt-icon name="user" size="{{30}}"></pt-icon>看看别人眼里的我
|
||
</view>
|
||
|
||
<!-- 我的毛孩子 -->
|
||
<view class="card">
|
||
<view class="section-head">
|
||
<view class="sh-title">我的毛孩子</view>
|
||
<view class="link" bindtap="onAddPet">+ 添加</view>
|
||
</view>
|
||
<view wx:for="{{pets}}" wx:key="id" class="pet-row" data-id="{{item.id}}" bindtap="onPickPet">
|
||
<view class="pet-emoji">{{item.emoji}}</view>
|
||
<view class="pet-info">
|
||
<view class="tt-b">{{item.name}}</view>
|
||
<view class="tt-p">{{item.age}}|{{item.weight}}|{{item.stage}}</view>
|
||
</view>
|
||
<view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
|
||
</view>
|
||
<view wx:if="{{!pets.length}}" class="empty">还没有毛孩子,先建一份档案</view>
|
||
</view>
|
||
|
||
<!-- 常用入口。设置类的都收进设置页了,这里只留高频的 -->
|
||
<view class="profile-list">
|
||
<view class="profile-row" bindtap="goPetForm">
|
||
<view class="pr-ic"><pt-icon name="user" size="{{34}}"></pt-icon></view>
|
||
<text class="pr-label">宠物档案</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
|
||
</view>
|
||
<view class="profile-row" bindtap="goPlan">
|
||
<view class="pr-ic"><pt-icon name="plan" size="{{34}}"></pt-icon></view>
|
||
<text class="pr-label">养护计划</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
|
||
</view>
|
||
<view class="profile-row" data-type="managePets" bindtap="openSheet">
|
||
<view class="pr-ic"><pt-icon name="community" size="{{34}}"></pt-icon></view>
|
||
<text class="pr-label">多宠物管理</text><text class="pr-val">{{card.stats.pet_count || 0}} 只</text>
|
||
<view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
|
||
</view>
|
||
<view class="profile-row" bindtap="goSettings">
|
||
<view class="pr-ic"><pt-icon name="settings" size="{{34}}"></pt-icon></view>
|
||
<text class="pr-label">设置</text><view class="pr-arrow"><pt-icon name="next" size="{{28}}"></pt-icon></view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
<bottom-sheet show="{{sheetShow}}" type="{{sheetType}}" bind:close="closeSheet"></bottom-sheet>
|