Files
FamilyBook_harmonyos/entry
laoyang 7d7973a319 名册编辑:表单取消分组、网址补常驻输入框、地址合一(#92)
用户 2026-11-06 的要求:
1. 「联系方式」这一句(分组标题)去掉;
2. 网址要跟邮箱一样有标签、有常驻空输入框;
3. 地址的格式跟邮箱/手机号一致:国家、省市、区县、详细地址
   都放进同一个输入框的 placeholder 里;
4. 「工作」「其它」两个分组标题也去掉,直接写单位和职务、直接写座右铭;
5. 不需要分多级,就是一层。

改动:
- 删掉全部 4 处 this.section() 调用与 section() 构建器(表单只剩一层);
- 新增 urlField():常驻「网址」标签 + 空输入框;服务端无「主网址」列,
  取 person_contacts kind=url 的第一条当主,提交时由 urlsOut() 拼回组首;
- 地址五级合成一个 addressField(),层级写进 placeholder;
  没改地址时原样回传旧的 address 列 + 旧五级,改了才整串写入并清空五级。

同时修掉验证时抓到的**数据损坏**(不是假想,已在真机复现):
从名册列表点「编辑」时传进来的是本地列表行,列表行缺
birth_rank / 补充联系方式 / 工作经历 / 完整地址,而服务端
replaceContacts / PersonJob::replace 是整组替换语义
⇒ 用户随手保存一次就会把这些字段清空(实测 birth_rank 2 → null)。
修法:编辑模式无条件补拉一次详情,逐字段/逐组只覆盖「用户没动过」的部分;
save() 先 await 补拉任务,未拿到权威值时对没动过的字段一律不提交。

附带:
- addressField()/urlField() 用内部直读字段的写法(@Builder 值参数不参与
  状态观察,异步回填刷不出来 —— 实测停在中途值);
- 保存时 contacts 增加「原本有条目、现在删空」与「动过任意一组」两个
  提交条件,否则删掉仅有的那条网址永远删不掉。
2026-11-06 12:40:04 +08:00
..