From 2c82a71cb842f073d9d8a050e6a8f8aa95d06fb5 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 19 Nov 2025 10:44:49 +0800 Subject: [PATCH] bugfix --- docs/ai/audio.md | 75 +++++++++++++++++++++++++++ docs/ai/form.md | 122 ++++++++++++++++++++++++++++++++++++++++++++ docs/ai/recorder.md | 110 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 307 insertions(+) create mode 100644 docs/ai/audio.md create mode 100644 docs/ai/form.md create mode 100644 docs/ai/recorder.md diff --git a/docs/ai/audio.md b/docs/ai/audio.md new file mode 100644 index 0000000..49d571b --- /dev/null +++ b/docs/ai/audio.md @@ -0,0 +1,75 @@ +以下是根据你提供的源码,为其中定义的三个控件编写的符合要求的 **Markdown 格式控件文档**。每个控件均按照“一级标题为控件名称”、“包含控件功能、类型、父类”,以及“二级标题:初始化参数、主要事件”的格式编写。 + +--- + +# AudioPlayer + +**控件功能**:用于播放音频文件,支持本地 URL 或流式加载,具备播放、暂停、自动播放、播放队列和状态检测等功能。 +**类型**:普通控件 +**父类控件**:`bricks.JsWidget` + +## 初始化参数 + +| 参数名 | 类型 | 说明 | +|----------|--------|------| +| `url` | String | 音频资源的 URL 地址,可选。构造时传入则立即加载。 | +| `autoplay`| Boolean| 是否在音频可播放后自动开始播放,默认为 `false`。 | + +## 主要事件 + +| 事件名 | 触发条件 | +|--------|---------| +| `ended` | 当前音频播放结束且播放列表为空时触发。 | + +--- + +# AudioRecorder + +**控件功能**:实现音频录制功能,基于浏览器麦克风权限进行 WAV 格式录音,提供开始/停止录音、实时时间显示、录音上传和下载功能。依赖第三方库 Recorder.js(WAV 格式)。 +**类型**:容器控件(继承自 HBox,包含按钮与文本) +**父类控件**:`bricks.HBox` + +## 初始化参数 + +| 参数名 | 类型 | 说明 | +|-------------|--------|------| +| `upload_url` | String | 录音结束后自动上传的目标 URL 地址,可选。 | +| `start_icon` | String | 开始录音按钮显示的 SVG 图标路径,默认使用内置资源。 | +| `stop_icon` | String | 停止录音按钮显示的 SVG 图标路径,默认使用内置资源。 | +| `icon_rate` | Number | SVG 图标缩放比例,传递给内部 `Svg` 控件。 | + +## 主要事件 + +| 事件名 | 触发条件 | +|----------------|---------| +| `record_started` | 用户点击开始录音,麦克风授权成功后触发。 | +| `record_ended` | 用户停止录音,生成 blob 数据后触发,携带 `{data, url, duration}` 参数。 | +| `uploaded` | 成功上传录音文件到服务器后触发,携带服务器返回结果。 | + +> ⚠️ 注意:需引入外部库 [Recorder.js](https://gitee.com/xiangyuecn/Recorder) 支持录音功能。 + +--- + +# TextedAudioPlayer + +**控件功能**:结合音频播放与文本展示的复合控件,适用于语音朗读+字幕同步场景。支持从流式响应中逐段加载音频与对应文本,并自动顺序播放。 +**类型**:容器控件(垂直布局 VBox) +**父类控件**:`bricks.VBox` + +## 初始化参数 + +无独立初始化参数,内部自动创建子控件: + +- `AudioPlayer` 实例用于播放音频。 +- `Text` 实例用于显示对应文本内容。 +- `VScrollPanel` 提供文本区域滚动能力。 + +## 主要事件 + +无直接对外暴露的自定义事件。其行为由内部 `AudioPlayer` 的 `ended` 事件驱动,自动调用 `playnext()` 播放下一段内容。 + +> 内部通过 `set_stream_urls(response)` 接收流式 JSON 数据,每项应包含 `audio`(Base64 编码音频)、`text`(对应文字)、`done`(是否结束)字段。 + +--- + +> ✅ 所有控件均已通过 `bricks.Factory.register` 注册,可在模板或配置中通过字符串名称实例化。 \ No newline at end of file diff --git a/docs/ai/form.md b/docs/ai/form.md new file mode 100644 index 0000000..55864e1 --- /dev/null +++ b/docs/ai/form.md @@ -0,0 +1,122 @@ +以下是根据你提供的源码中定义的控件,按照要求编写的 **Markdown 格式控件文档**。每个控件均以一级标题命名,并包含其功能、类型、父类,以及“初始化参数”和“主要事件”两个二级标题。 + +--- + +# InlineForm + +**控件功能**:用于在行内嵌入一个可提交的表单,支持字段输入、验证及工具栏操作(提交、重置、取消)。适用于需要轻量级表单嵌入的场景。 +**类型**:普通控件 +**父类控件**:`bricks.FormBase` + +## 初始化参数 + +| 参数名 | 类型 | 说明 | +|--------|------|------| +| `fields` | Array | 表单字段配置数组,每个字段对象包含 name、label、uitype 等信息。 | +| `height` | String | 可选,默认为 `"100%"`,设置控件高度。 | +| `width` | String | 可选,默认为 `"100%"`,设置控件宽度。 | +| `overflow` | String | 可选,默认为 `"auto"`,控制内容溢出时的显示方式。 | + +> 注意:所有选项通过 `opts` 传入构造函数。 + +## 主要事件 + +| 事件名 | 触发条件 | 回调参数 | +|--------|----------|---------| +| `submit(data)` | 用户点击“提交”按钮后,数据通过校验时触发。 | `data`: FormData 对象或普通对象,包含表单数据。 | +| `submited(resp)` | 提交请求完成后(无论成功或失败)触发。 | `resp`: 响应对象,可通过 `await resp.json()` 获取返回内容。 | +| `cancel` | 用户点击“取消”按钮时触发。 | 无参数。 | +| `reset` | 用户点击“重置”按钮时触发。 | 无参数。 | +| 自定义命令事件 | 当工具栏添加了自定义按钮且设置了 `action` 或名称时触发。 | `event.params` 包含按钮信息。 | + +--- + +# Form + +**控件功能**:完整的表单容器控件,支持标题、描述、多字段布局、文本与非文本字段分离、自动构建工具栏,并可配置提交 URL 和方法。适合独立页面或弹窗中的完整表单使用。 +**类型**:容器控件 +**父类控件**:`bricks.FormBase` + +## 初始化参数 + +| 参数名 | 类型 | 说明 | +|--------|------|------| +| `title` | String | 可选,表单标题,显示为大号文字。 | +| `description` | String | 可选,表单描述信息,显示在标题下方。 | +| `fields` | Array | 必填,字段配置列表,结构同 InlineForm。 | +| `submit_url` | String | 可选,表单提交的目标 URL,若提供则自动发起 HTTP 请求。 | +| `method` | String | 可选,HTTP 方法,默认为 `'POST'`。 | +| `notoolbar` | Boolean | 可选,默认 `false`,是否隐藏默认工具栏(提交/重置/取消)。 | +| `toolbar` | Object | 可选,扩展或替换默认工具栏配置。结构 `{ tools: [...] }`。 | +| `input_layout` | String | 可选,输入框布局方式,支持 `"VBox"`(垂直)或 `"HBox"`(水平),默认 `"VBox"`。 | +| `dataurl` | String | (预留)可能用于加载初始数据的接口地址(当前未直接使用)。 | + +## 主要事件 + +| 事件名 | 触发条件 | 回调参数 | +|--------|----------|---------| +| `submit(data)` | 表单提交前,验证通过后触发。可用于拦截或预处理数据。 | `data`: 提交的数据对象或 FormData。 | +| `submited(resp)` | 向 `submit_url` 发送请求完成后触发。 | `resp`: Response 对象,可用于处理响应结果。 | +| `cancel` | 用户点击“取消”按钮时触发。 | 无参数。 | +| `reset` | 用户点击“重置”按钮时触发。 | 无参数。 | +| 自定义事件 | 工具栏中自定义按钮被点击且定义了 `action` 或事件名时触发。 | `event.params` 包含按钮元数据。 | + +--- + +# FormBody + +**控件功能**:`Form` 内部使用的主体内容区域,负责渲染所有非文本字段(通过 `FieldGroup`)和文本字段(只读展示),是实际输入区域的承载容器。 +**类型**:容器控件 +**父类控件**:`bricks.VScrollPanel` + +## 初始化参数 + +| 参数名 | 类型 | 说明 | +|--------|------|------| +| `form` | Object | 所属的表单实例,用于访问字段定义、name_inputs 等状态。 | +| `opts` | Object | 配置项,会自动设置 `width: '100%'`, `height: '100%'`。 | + +> 注:此控件通常不由开发者直接创建,而是由 `Form` 构造过程中内部实例化。 + +## 主要事件 + +该控件本身不对外派发事件,但作为容器继承了 `VScrollPanel` 的滚动相关能力,主要用于视觉呈现。 + +- 不主动触发业务事件。 +- 其子控件(如输入框)的变化会影响父级 `Form` 的状态。 + +--- + +# FieldGroup + +**控件功能**:辅助类,用于递归构建表单中的字段组(支持嵌套 group 结构),将字段按布局规则组织成动态列(DynamicColumn)和输入框容器(VBox/HBox)。 +**类型**:普通控件(逻辑组件) +**父类控件**:无(基础类) + +## 初始化参数 + +| 参数名 | 类型 | 说明 | +|--------|------|------| +| `opts` | Object | 目前未实际使用,保留扩展性。 | + +> 注:该类不是 UI 控件,不直接渲染 DOM,仅作为构建逻辑模块存在。 + +## 主要事件 + +该类无事件机制,仅为同步方法调用服务: + +- `build_fields(form, parent, fields)`:核心方法,递归生成字段 UI 并挂载到指定父容器。 + +--- + +> ✅ **说明总结**: +> +> - `InlineForm` 和 `Form` 是用户可直接使用的表单控件; +> - `FormBody` 和 `FieldGroup` 是内部实现组件,一般无需单独文档化使用; +> - 所有表单控件共享统一的数据收集、验证和提交流程; +> - 支持文件类字段(file/audio/video)自动识别需使用 `FormData`; +> - 工具栏支持高度定制化扩展。 + +--- + +如需进一步生成 API 文档或导出 JSON Schema 模板,请告知。 \ No newline at end of file diff --git a/docs/ai/recorder.md b/docs/ai/recorder.md new file mode 100644 index 0000000..27fdb58 --- /dev/null +++ b/docs/ai/recorder.md @@ -0,0 +1,110 @@ +```markdown +# SysCamera + +**控件功能**: 用于通过系统摄像头拍摄静态照片,支持实时预览并可在拍照后将图片以 `data URL` 和 `File` 对象形式返回。 +**类型**: 普通控件 +**父类控件**: `bricks.SysVideoRecorder` + +## 初始化参数 + +- 无显式自定义初始化参数(继承自父类 `MediaRecorder`)。 +- 实际使用时需在创建实例时传入 `widgetid` 等可能被父类使用的选项(但本类未直接使用)。 + +## 主要事件 + +- **`shot`** + 触发时机:用户点击录制按钮进行拍照后触发。 + 回调数据: + ```js + { + url: string, // 图片的 data URL,可用于 `` 显示 + file: File // 文件对象,可用于上传或保存 + } + ``` + +--- + +# WidgetRecorder + +**控件功能**: 录制页面中指定 widget(如 `