From 389cb31df4d5ec6a39d2512566e78d213ca1045d Mon Sep 17 00:00:00 2001 From: laoyang Date: Thu, 5 Nov 2026 20:19:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=B1=BB=E4=B8=8B=E6=8B=89=EF=BC=9A?= =?UTF-8?q?=E4=BF=AE=E3=80=8C=E6=B0=B8=E8=BF=9C=E6=9C=AA=E5=88=86=E7=B1=BB?= =?UTF-8?q?=E3=80=8D+=20=E8=8F=9C=E5=8D=95=E5=90=8C=E5=AE=BD=20+=20?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E8=89=B2=20(#84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户 2026-11-05 三点: 1.「分类那个地方没带进来。明明是有分类的,但是它却显示的是未分类。」 2.「分类弹出来的框太窄了,应该和输入框一样宽。」 3.「颜色也不对…文字颜色是主题色,背景色是比主题色浅一点的那个主题色。」 ① tskCats 永远是空数组 `FbHomePage.loadTaskMeta()` 开头: if (this.tskBoards.length > 0) { return; } **只看看板有没有值**。这个方法跑过一次、看板填上之后, 以后再进来直接返回 ⇒ `tskCats` 永远停在上一次的赋值上; 如果第一次调用时 cats 恰好是空(或 #83 之前的版本压根没赋过), 就再也补不上 ⇒ 下拉里只有「未分类」。 ⇒ 改成 `if (boards.length > 0 && cats.length > 0) return;` "两样都有值才跳过"。 ⚠️ 不能只判 cats:新家庭可能真的一条分类都没建,那样每次都重拉。 ⚠️ 任务页的 `loadMeta()` 没有这个提前返回,不用改。 ② 下拉菜单太窄 `width(100%)` 管的是**控件本身**;弹出的选项菜单有独立宽度 (`optionWidth`),不给就按选项文字撑开 ⇒ 很窄。 ⇒ `.optionWidth(OptionWidthMode.FIT_TRIGGER)` 让它跟触发器同宽。 ⚠️ 顺手试过 `.optionHeight(auto)` —— SDK 里 `optionHeight` 只收 `Dimension`,传 auto 直接编译报 "No overload matches this call"。 ③ 颜色改主题色 文字 `this.accent` + `weight: Medium`; 底色 `fbAlpha(this.accent, 0.10)`(浅一档的主题色)。 与面板里「+ 添加附件」那颗胶囊同一套 —— 整面板"可操作控件"观感一致。 选项列表里:选中项用主题色、其余用墨色(全主题色会失去对比)。 编译通过,已装真机。 --- entry/src/main/ets/components/FbTaskPanel.ets | 36 ++++++++++++++----- entry/src/main/ets/pages/home/FbHomePage.ets | 14 +++++++- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/entry/src/main/ets/components/FbTaskPanel.ets b/entry/src/main/ets/components/FbTaskPanel.ets index 63765e0..91898d3 100644 --- a/entry/src/main/ets/components/FbTaskPanel.ets +++ b/entry/src/main/ets/components/FbTaskPanel.ets @@ -1472,16 +1472,31 @@ export struct FbTaskPanel { .backgroundColor(FbColors.inputBg) .borderRadius(FbMetric.radiusS) } else { + /* 🔴 #84(用户 2026-11-05): + 「分类弹出来的框太窄了,应该和输入框一样宽。」 + 「颜色也不对。它的颜色应该是主题色:里面的文字颜色是主题色, + 背景色是比主题色浅一点的那个主题色。」 + + · `width('100%')` 管的是**控件本身**;弹出来的下拉菜单 + 还有自己的宽度(`optionWidth`),不给就按内容撑 ⇒ 很窄。 + 用 `optionWidth(OptionWidthMode.FIT_TRIGGER)` 让它跟触发器同宽。 + · 文字 `this.accent`、底色 `fbAlpha(this.accent, 0.10)` + —— 与面板里「+ 添加附件」那颗胶囊同一套(主题色 + 淡底), + 这样"可操作"的控件在全面板观感一致。 */ Select(this.catOptions()) .selected(this.catIndex()) .value(this.categoryOf() !== '' ? this.categoryOf() : '未分类') - .font({ size: FbMetric.fontSmall }) - .fontColor(FbColors.ink) - .selectedOptionFont({ size: FbMetric.fontSmall }) + .font({ size: FbMetric.fontSmall, weight: FontWeight.Medium }) + .fontColor(this.accent) + .selectedOptionFont({ size: FbMetric.fontSmall, weight: FontWeight.Medium }) + .selectedOptionFontColor(this.accent) .optionFont({ size: FbMetric.fontSmall }) + .optionFontColor(FbColors.ink) + .optionWidth(OptionWidthMode.FIT_TRIGGER) .width('100%') .height(40) - .backgroundColor(FbColors.inputBg) + .padding({ left: 4, right: 4 }) + .backgroundColor(fbAlpha(this.accent, 0.10)) .borderRadius(FbMetric.radiusS) .onSelect((idx: number): void => { /* index 0 = 「未分类」→ category_id 传 0 */ @@ -1507,16 +1522,21 @@ export struct FbTaskPanel { .backgroundColor(FbColors.inputBg) .borderRadius(FbMetric.radiusS) } else { + /* #84:与分类同一套(主题色文字 + 淡主题底色 + 菜单同宽) */ Select(this.repeatOptions()) .selected(this.repeatIndex()) .value(this.repeatOf() !== '' ? this.repeatWordOf(this.repeatOf()) : '不循环') - .font({ size: FbMetric.fontSmall }) - .fontColor(FbColors.ink) - .selectedOptionFont({ size: FbMetric.fontSmall }) + .font({ size: FbMetric.fontSmall, weight: FontWeight.Medium }) + .fontColor(this.accent) + .selectedOptionFont({ size: FbMetric.fontSmall, weight: FontWeight.Medium }) + .selectedOptionFontColor(this.accent) .optionFont({ size: FbMetric.fontSmall }) + .optionFontColor(FbColors.ink) + .optionWidth(OptionWidthMode.FIT_TRIGGER) .width('100%') .height(40) - .backgroundColor(FbColors.inputBg) + .padding({ left: 4, right: 4 }) + .backgroundColor(fbAlpha(this.accent, 0.10)) .borderRadius(FbMetric.radiusS) .onSelect((idx: number): void => { const rk: string = idx === 0 ? '' : FbTaskPanel.REPEAT_KEYS[idx - 1]; diff --git a/entry/src/main/ets/pages/home/FbHomePage.ets b/entry/src/main/ets/pages/home/FbHomePage.ets index c2691b5..52abdad 100644 --- a/entry/src/main/ets/pages/home/FbHomePage.ets +++ b/entry/src/main/ets/pages/home/FbHomePage.ets @@ -835,7 +835,19 @@ export struct FbHomePage { /** 拉全部看板 + 分类(面板的"挪分组"、表单的"分类"都要用) */ private async loadTaskMeta(): Promise { - if (this.tskBoards.length > 0) { + /* 🔴 #84(用户 2026-11-05):「鸿蒙端的分类那个地方没带进来。 + 明明是有分类的,但是它却显示的是未分类。」 + + **就是这个提前返回**:只看 `tskBoards` 有没有值。 + 而这个方法一旦先跑过一次、看板填上了,以后再进来就直接返回 —— + `tskCats`(分类)**永远停在上一次的赋值上**;如果第一次调用时 + `m.cats` 恰好是空(或被 #83 之前的版本错过了),就永远补不上。 + + ⇒ 改成"两样都有值才跳过"。任何一个为空就再拉一次 + (接口很轻:`?view=boards` 不带任务列表)。 + ⚠️ 不能只判 `tskCats.length`:新家庭可能真的一条分类都没建, + 那样每次都重拉。两条一起判才是"数据齐了"。 */ + if (this.tskBoards.length > 0 && this.tskCats.length > 0) { return; } await loadPath('tasks_meta', '/api/v1/tasks?view=boards', parseTaskMeta,