跨端: 「我的」页段顺序对齐 WebUI(拆掉那两个焊在一起的 section)
用户「都做啊」的第二件 = 继续逐页对齐 WebUI。这一轮做「我的」页。
## 先比对,再动手(不是凭印象说"八段一一对应")
文件头注释一直写着「八个 section 与 WebUI 一一对应」,实测逐段列出后
**顺序并不对应**:
WebUI(AccountPage.tsx,按出现位置)
基本资料 → 权限范围 → 修改密码 → 多账号 → 客户端连接密钥 → 外观
→ 登录状态 → 管理
鸿蒙(改前)
ProfileSection(基本资料+权限范围) → 多账号 → 外观 → 系统通知
→ 密钥 → SecuritySection(修改密码+退出) → 管理
⇒ 三处实质差异:
① **「修改密码」与「登录状态」被焊成一个 `SecuritySection`**
—— WebUI 那边它们是**两个独立 `<section>`**,中间还夹着三段。
顺序错位的**根因就是这一处**:焊在一起就没法插东西进去。
② 「外观」被排到「密钥」**之前**(WebUI 是密钥在前)。
③ 「多账号」在「修改密码」之后、而不是之前。
## 改动
· `SecuritySection` → 拆成 `PasswordSection` + `LoginSection`(各带自己的圆角卡)。
· 顺序改成与 WebUI 逐段相同。
## 「系统通知」保留,但**标明它是鸿蒙独有**
`PushSection`(HarmonyOS Push Kit:新邮件由系统弹通知、点通知直达)
在 WebUI 侧**没有对应物** —— 全仓 grep「推送/通知设置」为 0 处。
浏览器里没有等价能力,所以**这不是分叉,是平台差异**。
已就地写明理由,并把它放在外观之后、登录状态之前(与"账号自身"那几段分开)。
★ 这类"我方多一段"的情况,本仓的处理口径是**写清楚它不是漏做的**,
而不是删掉去凑一致 —— 与 §7.12「有意差异表」同一形状。
## 设备验证(不是只看代码)
改前: 我的 → 用户名 → … → 修改密码 → 保存 → **多账号 → 外观 → 系统通知 → 密钥 → (改密+退出)**
改后: 我的 → 用户名 → … → **修改密码 → 多账号 → 客户端连接密钥 → 外观 → 系统通知 → 登录状态 → 管理**
第二屏实测(`uitest dumpLayout` + fling):
「多账号 → jianf → 默认 → 删除 → 客户端连接密钥 → 新建 → … → 外观 → 已同步 → 跟随系统」
⇒ 与 WebUI 的 `多账号 → 密钥 → 外观` 逐段一致。进程存活(20970),无新 jscrash。
This commit is contained in:
@ -636,10 +636,11 @@ export struct SettingsPane {
|
||||
/* 基本资料 / 权限范围(对齐 WebUI 的前两个 section) */
|
||||
this.ProfileSection()
|
||||
|
||||
/*
|
||||
* ── 多账号(对齐 WebUI 的 AccountList section)──
|
||||
*/
|
||||
Column() {
|
||||
/* 修改密码 */
|
||||
this.PasswordSection()
|
||||
|
||||
/* 多账号(对齐 WebUI 的 AccountList section) */
|
||||
Column() {
|
||||
Text('多账号').fontSize(14).fontWeight(FontWeight.Bold).fontColor(Theme.textPrimary)
|
||||
.width('100%')
|
||||
if (this.accounts.length === 0) {
|
||||
@ -676,17 +677,23 @@ export struct SettingsPane {
|
||||
.attributeModifier(GlassCardModifier.of(this.bgActive))
|
||||
.borderRadius(Theme.radiusCard)
|
||||
|
||||
/* 外观(主题 / 壁纸) */
|
||||
this.AppearanceSection()
|
||||
|
||||
/* 系统通知 */
|
||||
this.PushSection()
|
||||
|
||||
/* 客户端连接密钥(对齐 WebUI 的 KeyPanel section) */
|
||||
this.KeySection()
|
||||
|
||||
/* 修改密码 + 退出登录(对齐 WebUI 的「修改密码」与「登录状态」两段) */
|
||||
this.SecuritySection()
|
||||
/* 外观(主题 / 壁纸) */
|
||||
this.AppearanceSection()
|
||||
|
||||
/*
|
||||
* 系统通知 —— **鸿蒙独有**(WebUI 侧没有这一段的对应物)。
|
||||
*
|
||||
* 理由:推送是**平台能力**(HarmonyOS Push Kit / 通知直达),
|
||||
* WebUI 跑在浏览器里、没有等价物。这不是分叉,是平台差异。
|
||||
* 位置放在外观之后、登录状态之前 —— 与"账号自身"那几段分开。
|
||||
*/
|
||||
this.PushSection()
|
||||
|
||||
/* 登录状态(退出登录) */
|
||||
this.LoginSection()
|
||||
|
||||
/* 管理入口(仅管理员) */
|
||||
this.AdminSection()
|
||||
@ -1110,8 +1117,15 @@ export struct SettingsPane {
|
||||
* 这里合并为一片连续区域,因为两者都是「账号自身」且都是低频动作 ——
|
||||
* 但**内容与顺序**与 WebUI 一致:先密码、后退出。
|
||||
*/
|
||||
/**
|
||||
* 修改密码(对齐 WebUI `AccountPage` 的「修改密码」section)。
|
||||
*
|
||||
* ★ 2026-09-21 从 `SecuritySection` 拆出来 —— WebUI 那边「修改密码」与
|
||||
* 「登录状态」是**两个独立的 <section>**,中间还夹着多账号/密钥/外观。
|
||||
* 我们原来把两者焊成一个,于是顺序上就没法对齐了(这是顺序错位的根因)。
|
||||
*/
|
||||
@Builder
|
||||
SecuritySection() {
|
||||
PasswordSection() {
|
||||
Column() {
|
||||
Row() {
|
||||
AmIcon({ iconName: 'lock', iconSize: 16, iconColor: Theme.textMuted })
|
||||
@ -1156,15 +1170,29 @@ export struct SettingsPane {
|
||||
.enabled(!this.pwBusy)
|
||||
.onClick(() => { this.changePassword(); })
|
||||
|
||||
Divider().color(Theme.border).margin({ top: 16, bottom: 14 })
|
||||
}
|
||||
.width('100%').alignItems(HorizontalAlign.Start)
|
||||
.padding(16).margin({ top: 8 })
|
||||
.attributeModifier(GlassCardModifier.of(this.bgActive))
|
||||
.borderRadius(Theme.radiusCard)
|
||||
}
|
||||
|
||||
/*
|
||||
* 退出登录。
|
||||
*
|
||||
* WebUI 把它放在「我的」页底部(`AccountPage` 的「登录状态」section),
|
||||
* 理由原话:「低频且不可逆的动作,与密码、密钥同属『账号自身』」;
|
||||
* 「窄屏下这也是唯一的退出口」。
|
||||
*/
|
||||
/**
|
||||
* 登录状态(退出登录)—— 对齐 WebUI `AccountPage` 的「登录状态」section。
|
||||
*
|
||||
* ★ 2026-09-21 从 `SecuritySection` 拆出来,并**挪到外观之后**:
|
||||
* WebUI 的段顺序是
|
||||
* 基本资料 → 权限范围 → 修改密码 → 多账号 → 密钥 → 外观 → 登录状态 → 管理
|
||||
* 我们原来是「… 密钥 → (改密+退出) → 管理」—— 既少了多账号/外观的位置,
|
||||
* 又把两个独立 section 焊在一起(见 `PasswordSection` 的注释)。
|
||||
*
|
||||
* WebUI 把它放倒数第二的理由(原文):「低频且不可逆的动作,与密码、密钥
|
||||
* 同属『账号自身』」;「窄屏下这也是唯一的退出口」——所以必须**能滚到**,
|
||||
* 靠的是外层 Scroll 的 `.align(Alignment.Top)` + `contentEndOffset`。
|
||||
*/
|
||||
@Builder
|
||||
LoginSection() {
|
||||
Column() {
|
||||
Text('登录状态').fontSize(11).fontColor(Theme.textMuted).width('100%')
|
||||
Button() {
|
||||
Row() {
|
||||
|
||||
Reference in New Issue
Block a user