Appearance
分页、排序与运行时 Helper
题目场景除了四个单题组件之外,通常还会配合 qxs-page-end、qxs-subject-sortable 和 runtime helpers 使用。
分页边界
qxs-page-end 负责分页边界的展示和宿主操作入口。
它不会参与最终导出,只参与页码换算和页面分段。
loading
排序器
qxs-subject-sortable 只负责排序 UI,不维护题目数据。
宿主需要接收 sort-change 后返回的新数组,并自己保存顺序。
loading
运行时 Helper
运行时 helper 会直接面向当前 DOM 里的题目组件和分页边界工作。
推荐让宿主直接维护最终提交数据;这套 API 适合在“保存草稿”或“发布”之前统一校验,必要时再从当前 DOM 回收题目结果。
loading
使用说明
分页边界不参与导出
qxs-page-end 只参与页码计算和宿主渲染,不会出现在最终导出的题目数组里。
排序器只负责 UI
qxs-subject-sortable 只返回新的排序结果,不负责保存状态。宿主需要自己维护排序后的数组。
运行时 API
qxs-page-end 属性
| 名称 | 说明 | 类型 | 默认值 |
|---|---|---|---|
custom-id | 分页边界唯一标识 | string | '' |
current-page-index | 当前页码 | number | 1 |
total-page | 总页数 | number | 1 |
show-action | 是否显示操作区 | boolean | true |
show-add | 是否显示“继续添加”入口 | boolean | true |
show-delete-action | 是否显示内置删除按钮 | boolean | true |
qxs-page-end 插槽
| 名称 | 说明 |
|---|---|
action | 自定义底部操作区 |
qxs-subject-sortable 属性
| 名称 | 说明 | 类型 | 默认值 |
|---|---|---|---|
items | 轻量题目数组,至少包含 customId / answerType / title | SubjectLikeItem[] | [] |
label-renderer | 自定义排序项标题渲染函数 | (item: SubjectLikeItem, index: number) => string | - |
qxs-subject-sortable 事件
| 名称 | 说明 | Detail |
|---|---|---|
sort-change | 排序完成后触发 | { items, orderedIds, oldIndex, newIndex } |
运行时 Helper
| 名称 | 说明 | 类型 |
|---|---|---|
collectSubjectElements(root) | 从宿主容器收集所有题目组件和分页边界 | (root: ParentNode) => SubjectElement[] |
validateSubjectElements(elements) | 汇总执行每个元素的 validate() | (elements: Iterable<SubjectElement>) => { valid: boolean; errors: SubjectError[] } |
serializeSubjectElements(elements) | 当宿主没有直接维护提交态数据时,汇总执行每个元素的 toJSON(),并自动换算 pageIndex | (elements: Iterable<SubjectElement>) => Promise<any[]> |
insertPageBreak(items, index?) | 在指定位置插入分页符 | (items: SubjectLikeItem[], index?: number) => SubjectLikeItem[] |
removePageBreak(items, customId) | 按 customId 删除分页符 | (items: SubjectLikeItem[], customId: string) => SubjectLikeItem[] |
rebuildPageBreaksFromPageIndex(items) | 把带 pageIndex 的题目数组恢复成带分页边界的渲染数组 | (items: SubjectLikeItem[]) => SubjectLikeItem[] |
serializeSubjectsWithPageIndex(items) | 把渲染数组中的分页符换算成真实题目的 pageIndex | (items: SubjectLikeItem[]) => SubjectLikeItem[] |
getPaginationMeta(items) | 获取每个分页符对应的页码信息 | (items: SubjectLikeItem[]) => PaginationMeta[] |