跳到主要内容

页面源码开发

大多数页面工作可以在 Design、Inspector 和 AI Command Center 中完成,不需要先学习前端框架。只有在需要精确状态逻辑、自定义事件、复杂样式或可复用 Component 时,才需要进入 Source

源码技术

Page (.qp) 与 Component (.qpc) 使用 Svelte 5 源码,并支持标准 HTML、CSS 和 TypeScript。DesignSource 编辑的是同一份页面内容:在任一模式保存后,另一种模式会读取相同结果。

常见源码能力包括:

  • $state 保存当前 Page 实例的临时界面状态;
  • 用 TypeScript 函数处理页面事件;
  • 用 props、事件或 callback 连接 Page 与 Component;
  • .qp.qpc 通过相对路径导入 App Component;
  • 使用 @theseus/qp-core 与已安装功能包公开的 Component。
<script lang="ts">
let running = $state(false);

function toggleRunning() {
running = !running;
}
</script>

<button onclick={toggleRunning}>
{running ? "停止模拟" : "开始模拟"}
</button>

Component 根与权限

App 自定义 .qpc@theseus/qp-core/Widget 作为唯一可测量根,通过 props 接收业务值,通过事件或 callback 把用户动作交给 Page,并转发 classstyle、必要的 DOM 属性、requiredRolesunauthorized

角色列表为空时所有人可见;多个角色按任意匹配,App Admin 始终匹配。未匹配时,hidden 隐藏整个根,disabled 保留显示但禁止交互。原生 HTML 元素不直接拥有这些 Component 权限属性。界面显示规则不能替代 Object、Query、文件或 Safety 能力自己的授权。

.qp 或另一个 .qpc 使用相对路径导入 App Component。功能包 Component 使用其公开模块路径;不要复制功能包内部源码。

使用 App 能力

页面源码通过 getApp() 使用 App 级 Query、Variable 和导航。外部服务地址和认证仍应集中放在 Settings → 查询,不要散落到多个 Page。多语言文案通过 @qx/i18n 使用;语言和消息仍在 Settings → 多语言(I18n) 中维护。

需要显示或切换当前操作员时,使用 CurrentUser,并把它放在不会被自身角色规则隐藏的位置:

<script lang="ts">
import CurrentUser from "@theseus/qp-core/CurrentUser";
import { m } from "@qx/i18n";
</script>

<CurrentUser signedOutLabel={m.not_signed_in()} />

CurrentUser 只管理 App user,不会切换 Qixin 账号或运行目标账户。

工程边界

  • 页面事件只负责界面协调;设备步骤、等待、超时、恢复和安全联锁应放在 Object、QG 或经过审核的 Provider 中。
  • $state 属于当前页面实例,刷新或重新进入页面后会重置。耐久数据应使用明确的 App 或 Object 存储能力。
  • App 只能使用已安装功能包公开的模块,不要引入项目未管理的外部依赖或复制功能包内部源码。
  • 实时标记跟随当前打开文档;Problems 保存最近一次 Build 对已保存工程文件的诊断。交付前必须保存、Build,并在真实运行页或 Player 中验收。

继续学习