Files
LinkPort/docs/workspace-pages.md

3.7 KiB

工作区子页面

页面行为

需要持续阅读、填写或确认的内容统一在工作区子页面中打开,不再使用带遮罩的居中弹框或侧边抽屉。子页面保留左侧导航和顶部工作区栏,正文使用稳定宽度、独立滚动区、固定标题与底部操作区;手机端沿用 52px 图标侧栏,正文占满剩余宽度。

标题左侧的返回按钮关闭当前子页面。Esc 只关闭最上层子页面;存在未保存内容时先打开“未保存的更改”确认页,选择继续编辑后保留草稿。嵌套流程按打开顺序叠放,例如从编辑页新建资产、查看影响范围后确认删除、从历史差异页确认恢复。关闭后焦点返回原入口。

确认和输入请求按队列逐页处理,当前页完成关闭后才显示下一页,重复点击不会操作下一项。确认页未处理完时忽略新的侧栏导航意图;退出登录或页面宿主卸载会取消尚未完成的请求。保存、导出或连接测试进行中时,相关编辑页禁止返回和取消,避免迟到结果写入已关闭的草稿。

以下交互均使用子页面:

  • 目标、网关、文件资产和连接资产的新建或编辑;
  • 连接示例、启动检查、连接测试、命令详情、版本信息和账号密码;
  • 资源搜索、菜单搜索、完整资源树、项目与环境维护、表格列设置;
  • 配置导出、导入预览、历史差异、模板内容和 Token 密钥;
  • 目标切换、测试账号选择、资产影响范围和所属项目;
  • 删除、停止、断开、同步冲突、SSH 指纹、未保存更改及密码输入等确认流程。

选择器下拉、操作菜单和悬停提示仍属于控件本身,不作为独立页面。成功、失败和进度消息仍使用短暂通知,不占用工作区导航层级。浏览器刷新或关闭时的未保存提醒继续使用浏览器原生机制。

安全与兼容

页面迁移不改变 API、请求顺序、权限判断、校验、资源 ID、数据库结构或配置文件格式,不需要数据迁移。秘密查看仍按原定时器自动清理,关闭密码或 Token 页面立即清空内存值;确认页不持久化输入。运行中的网关、引用关系、历史恢复和同步冲突保护保持不变。

本次沿用应用现有的内存工作区导航,没有引入 Vue Router 或可持久化的页面历史。刷新浏览器仍回到应用原有默认工作区,未保存草稿不会写入地址或本地存储。

验证

  • vue-tsc --noEmit 通过。
  • node tests/page-dialogs.test.mjs 的 2 项队列、输入校验和批量取消测试通过;node tests/workspace-pages.test.mjs 的源码禁止项检查通过。
  • 静态检查确认 web/src 不再使用 el-dialog、el-drawer、el-popover 或 ElMessageBox 实现独立弹层。
  • npm.cmd --prefix web run build 的类型检查阶段通过;Vite 在当前 Windows 沙箱启动 esbuild 时被 spawn EPERM 阻止,因此未生成新的前端产物。
  • Vite 开发服务器同样在加载配置时被 spawn EPERM 阻止,本轮没有可用的本地预览 URL。
  • Go 1.25.0、工作区内缓存/临时目录及串行编译下,go vet ./... 通过。go test -p=1 ./... -count=1 -timeout=120s 的其余包通过,但仍有 6 项既有 Windows 文件权限或 SQLite 快照环境失败,分布于 cmd/linkport、internal/api、internal/desktop、internal/security 和 internal/store;全量测试不记为通过。
  • Playwright 在工作区临时目录下成功发现 56 个文件、125 项用例。因无法生成新前端和新嵌入式可执行文件,未运行浏览器套件,也未把发现测试或旧程序结果作为本次验收。
  • 变更只涉及前端与文档,没有部署迁移、停止本地服务或修改 data。