feat(app-iced): M107 DLVRAIL —— 版本管理页三栏侧栏 + 跨类型搜索
用户令(信息架构):这一页从「下载」改称「版本管理」,版面从「一排 tab + 平铺列表」 改成**页面内三栏**:版本类型栏 + 主版本栏 + 列表/详情,并加搜索框。 - **三栏几何**(`pages/layout/rails.rs`,纯函数 + 数值表):类型栏 140/64、主版本栏 140/64、 间距 24、列表列下限 424(行宽红线)。四档由**可用宽**裁决:Wide ≥888 / Narrow ≥676 / Compact ≥600 / Chips <600,三个门槛都是 `栏宽 + 间距 + 424` 算出来的,不是拍的 - **主版本分组规则**(`download/group.rs`):正式版/预发布按 `major.minor`(`1.21.9-pre3` → `1.21`)、 周更按年桶(`24w14a` → `24w`)、远古版**没有主版本**(`rd-132211`/`a1.2.6` → 第二级只有「全部」); 判据用真实版本样本钉住,不按「第一个点」切 - **跨类型搜索**(`search_bar` + 清空 + 命中数):查询词写进 `AppState.download_query`(页面无状态, 只能这么活),`hits` 是**跨分类**读数;三条口径分开:「有命中」/「没有匹配」/「命中在别的类型里」 - 两级侧栏都用 `navigation::list_item` / `tabs` / `chip` / `buttons::icon`:Tab 可达、hover/pressed/ 选中态全部来自组件,页面不自己写状态层 - 右栏展开(M104 `content_width` 852)⇒ 可用宽 716 ⇒ Narrow 档,列表 464(任务书那句 492 漏扣 96px 的页边距与栏间距,报告里给了完整数值表) - 文案 11 条中英进 `crates/i18n`(新域宏接在装配链末尾 ⇒ `Key::ALL` 只追加,金表只追加) - 护栏:两层侧栏都存在 + 列表按第二级选中态过滤(变异可证)、三档门槛、424 下限扫描、 版本行单行宽账、搜索条真的装着 - `install.rs` 只动了「已装」分支(加一句「已安装」解释禁用按钮),没碰 M105 的选项区 取证:`DevDocs/artifacts/m107/`(10 张:三档 × 浅深 + 搜索命中 + 空 + 异地 + 远古版)
This commit is contained in:
1 parent
72b0c9d465
commit
89a51a63b1
24 files changed
+2000
-340
No files matched your search
@@ -51,6 +51,21 @@ pub enum Message {
|
||||
CancelInstall,
|
||||
/// 切换下载页分类(M94;app 层翻成 `AppCommand::ListVersions`,`All` 只画现有快照)。
|
||||
SetCategory(Category),
|
||||
/// 搜索版本号(**M107**):查询词写进 `AppState.download_query`,页面走同一条重建路径过滤。
|
||||
///
|
||||
/// 为什么不是「页面自己存一份查询」:下载页是**无状态视图**(每帧由快照重建),页面持有的
|
||||
/// 字段活不过下一次事件;查询词只有落在 presenter 的快照里才能跨帧存活,而
|
||||
/// `Download::from_snapshot` 本来就读 `download_query` —— 复用这条路,过滤只有一份真相。
|
||||
SetVersionQuery(String),
|
||||
/// 清空搜索框(**M107**)。与 [`Self::SetVersionQuery`] 同一支的 `""` 特例,
|
||||
/// 单独一个变体是为了让「清空」这个意图在日志与测试里一眼可辨。
|
||||
ClearVersionQuery,
|
||||
/// 选中第二级侧栏的一个主版本桶(**M107**;`None` = 全部版本)。
|
||||
///
|
||||
/// **纯视图态**(与 [`Self::SelectVersion`] 同一类):不派业务命令,app 层只改视图模型。
|
||||
SelectMajor(Option<String>),
|
||||
/// 折叠 / 展开第一级(版本类型)侧栏(**M107**)。纯视图态。
|
||||
ToggleTypeRail,
|
||||
/// 把现成文本塞进剪贴板(**M95**:诊断卡片的一行摘要,文本由页面造,app 只搬)。
|
||||
CopySummary(String),
|
||||
/// 设置页的一组消息(**M101 `SETTINGSMSG`**):设置页的**唯一**投递口。
|
||||
|
||||
Reference in new issue
Block a user