装备详情页与 SelectorBar 验证
日期:2026-09-27。此次交付范围为管理员和玩家桌面的装备编辑导航、表单及权限联调。
页面行为
点击战甲或其他可编辑库存行,或选中后点击「编辑」,进入独立装备详情页。页面使用原生 WinUI SelectorBar 切换基础属性、装备特性、源力石、Umbra 回响、活力注入、移植技能和物品管理;具体分类由装备类型及授权操作决定。武器、MOD、伙伴等复用同一页面,只显示适用分类。
管理员和玩家共用 Client/SharedUI/EquipmentEditorView.cs、EquipmentEditorModel.cs 及社区 SettingsCard / SettingsExpander 表单,角色页面仅提供各自的 API 和导航。选择栏在窄窗口可水平滚动;内容独立滚动。实现参考 Microsoft SelectorBar 文档。
各操作独立保存、重置;分类切换保留输入,保存一个操作不会丢弃其他操作的草稿。返回时保留列表搜索、分页和选中目标。有未保存输入时,离开详情页需确认;外部存档更新会保留草稿并暂停保存。异步读取期间显示加载动画。
服务器设置和账号规则继续直接编辑,按用途使用社区 SettingsExpander 收纳 SettingsCard。服务器的 75 项设置分为 15 组,周次按具体活动分别归组;63 项账号规则和玩家编辑权限也按用途分组。搜索同时匹配设置名、字段标识和分组名,自动展开命中组;清除搜索恢复原展开状态,折叠和搜索均不丢失待保存输入。两端偏好设置将两项语言选项归为「语言与区域」,主题和记住账号仍可直接设置。批量操作、创建物品等原有弹窗保持原交互。控件结构参考 Community Toolkit SettingsExpander 文档。
移植技能的技能字段固定使用原生 AutoSuggestBox,不再根据候选数量切换控件。未移植时显示技能名称搜索提示,输入框带搜索图标,获得焦点后显示候选项;输入名称或路径后筛选。选择候选或提交唯一完整名称/路径后保留技能标识,未匹配输入不能保存。管理员和玩家共用此实现,保留移除移植技能的候选选项。事件处理参考 Microsoft AutoSuggestBox 文档。
权限
管理员「玩家编辑权限」新增社区设置卡片「允许用户编辑物品」,用于统一启用或关闭已有的装备单项权限,也可继续逐项限制。添加物品、添加货币、存档导入导出和账号管理仍各自授权。
库存列表根据服务端返回的 canEdit 决定是否提供详情页入口;详情页根据服务端过滤后的操作生成分类。仅有添加物品或导出权限不会开放战甲编辑。玩家请求始终限定为自己的账号,服务端继续验证具体操作权限及库存版本。
正在编辑时撤销部分权限,会移除对应分类和控件。若同时发生库存修改,仍保留有权限部分的草稿并提示冲突;全部撤销或退出账号后清空编辑控件。
验证结果
- 服务端 Release 组件测试:254 通过,0 失败,0 跳过;新增授权后两端操作一致、仅添加/导出不能编辑、撤销后直接请求返回 403 的用例。
- 客户端 Release 组件测试:42 通过,0 失败,0 跳过。
- 原生管理员桌面联调:26 组通过;玩家桌面:31 组通过;只读玩家检查通过。
- 详情页在 1400、1024、800 宽度下构造、切换全部可用分类;实际触发原生保存、重置按钮,并从隔离服务器回读。测试覆盖不同分类的草稿保留、另一操作保存、外部版本冲突及返回列表。
- 玩家详情页打开期间,通过隔离管理 API 限制为仅经验编辑,验证分类过滤;同时更新库存验证冲突保护;随后撤销全部权限并确认原生选择栏清空,再恢复授权重新读取。
- 两端沿用分类路由检查:管理端 58 类、玩家端 47 类;只读玩家隐藏未授权操作。
原始报告:artifacts/test-results/core-tests.trx、client-tests.trx,以及 artifacts/desktop-smoke-3b2e7a1181ee4c038952c9533fc852e7/ 中的 Admin.json、Player.json、PlayerReadOnly.json。
技能搜索的交互验证必须在激活的原生窗口中运行。隐藏窗口仅验证控件构造,报告明确区分这两种范围;未加载的 AutoSuggestBox 不会可靠地发出原生输入事件,因此不再用隐藏窗口的偶发通过作为输入验收。可见窗口检查覆盖名称候选筛选、无匹配时清除旧值并拒绝保存、原生查询按钮提交、保存按钮触发和服务器回读。
技能搜索与设置分组的补充验证:artifacts/desktop-smoke-a96fe1adf56c4a99915524b20b678e9a/,管理员 27 组、玩家 32 组和只读玩家检查通过。服务器 75 项设置完整分入 15 个社区折叠组,122 项权限完整分组;验证直接切换后保存、按字段和活动分组搜索、无匹配结果、清除搜索恢复展开状态,以及隐藏的待保存修改仍能正确写入。63 项账号规则也核对了分组完整性。原生输入测试等待实际 TextChanged 事件,避免将获得焦点时的候选更新误认为输入已处理;每套配置按自身操作身份定位,避免读取切换动画中旧表单的控件。
复现:pwsh -File scripts/Smoke-Desktop.ps1 -Configuration Debug -VerifyDialogs。脚本使用临时端口、隔离服务器、测试账号及独立桌面配置。pwsh -File scripts/Publish.ps1 -VerifyDialogs 用最终发布的可执行文件运行 HTTP、可见原生桌面、只读玩家和 NativeAOT 自检,结果位于发布包 validation/;不带此选项时只进行隐藏桌面检查。
桌面自动操控已按用户的停止操作结束。最终 SelectorBar 版本完成了上述原生控件联调,没有另行执行截图外观验收。本轮没有启动游戏或修改正式存档,结果不代表完整 OpenWF 运行时或全部游戏内编辑分支验收。
后续自动建议、原生事件生命周期与系列任务添加的验证以 搜索与任务验证记录 为准;多宽度布局与可见输入测试分别执行。