bricks/aidocs/views.md
2025-10-05 06:39:58 +08:00

176 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

以下是为提供的代码编写的 **Markdown 格式技术文档**,清晰地描述了代码的功能、结构、类与函数说明,并对 `uitype` 类型进行了归纳。
---
# 技术文档UI 类型视图系统View System
## 概述
本模块实现了一个基于 JavaScript 的轻量级 UI 视图渲染系统,用于根据不同的字段类型(`uitype`)生成对应的显示组件。系统支持多种数据类型的可视化展示,如字符串、密码、数字、邮箱等,并通过注册机制将特定 `uitype` 映射到对应的视图类。
该系统适用于表单字段、数据展示界面或低代码平台中的动态 UI 渲染场景。
---
## 支持的 uitype 类型
以下为系统预定义并可扩展的字段类型(`uitype`),用于控制如何渲染数据:
| uitype | 说明 |
|--------------|------|
| `str` | 普通字符串,直接显示文本内容 |
| `password` | 密码字段,显示为 `****` 隐藏实际值 |
| `int` | 整数类型(暂未实现具体视图) |
| `float` | 浮点数类型(暂未实现具体视图) |
| `tel` | 电话号码(暂未实现具体视图) |
| `email` | 邮箱地址(暂未实现具体视图) |
| `file` | 文件上传/链接(暂未实现具体视图) |
| `'check` | 布尔检查框(可能为拼写错误,应为 `check``checkbox`|
| `checkbox` | 复选框(布尔值)|
| `date` | 日期类型(暂未实现具体视图) |
| `text` | 多行文本(暂未实现具体视图) |
| `code` | 代码块显示(暂未实现具体视图) |
| `video` | 视频媒体(暂未实现具体视图) |
| `audio` | 音频媒体(暂未实现具体视图) |
> 注:当前仅实现了 `str` 和 `password` 两种类型的视图组件。
---
## 核心 API 说明
### `ViewStr(desc) → Widget`
创建一个用于显示字符串字段的文本组件。
#### 参数
- `desc` (Object): 字段描述对象,包含以下属性:
- `value` (string): 要显示的字符串值。
- `row_data` (optional, any): 关联的原始行数据(可用于后续交互)。
#### 返回值
- `Widget`: 一个 `Text` 类型的 UI 组件,左对齐显示文本。
#### 示例
```js
var widget = ViewStr({ value: "Hello World", row_data: { id: 1 } });
// 渲染出显示 "Hello World" 的文本组件
```
#### 内部逻辑
- 使用 `Text({ text: ..., halign: 'left' })` 创建文本控件。
-`desc.row_data` 存在,则将其附加到返回组件的 `data` 属性上,便于后续操作。
> ⚠️ 注意:当前版本中 `w.desc_object = desc;` 在 `ViewStr` 中设置的是 `desc_object`,而在 `ViewPassword` 中是 `data`,建议统一命名以避免混淆。
---
### `ViewPassword(desc) → Widget`
创建一个用于显示密码字段的安全文本组件,隐藏真实值。
#### 参数
- `desc` (Object): 字段描述对象,包含以下属性:
- `value` (string): 实际密码值(不会显示)。
- `row_data` (optional, any): 关联的原始行数据(可用于点击后查看明文或其他行为)。
#### 返回值
- `Widget`: 一个显示 `"****"``Text` 组件,左对齐。
#### 示例
```js
var widget = ViewPassword({ value: "secret123", row_data: userRecord });
// 显示为 "****",保护隐私
```
#### 内部逻辑
- 文本固定显示为 `"****"`,防止泄露密码。
- 若存在 `row_data`,则挂载至组件 `data` 属性,可用于事件回调。
---
### `uitypesdef.setViewKlass(uitype, viewClass)`
注册指定 `uitype` 对应的视图构造函数。
#### 示例用法
```js
uitypesdef.setViewKlass('str', ViewStr);
```
`str` 类型字段的视图类设置为 `ViewStr`
> 此方法属于外部依赖 `uitypesdef` 对象,需确保其已全局可用。
---
## 类定义
### `class ViewType extends JsWidget`
所有视图类的基类,继承自 `JsWidget`
#### 构造函数
```js
constructor(opts)
```
调用父类构造函数,初始化基础组件选项。
> 当前无额外逻辑,作为扩展基类使用。
---
### `class ViewStr extends ViewType`
`str` 类型字段的具体视图类(目前为空实现,功能由工厂函数完成)。
> ⚠️ 当前存在不一致:`ViewStr` 同时以函数和类的形式出现,可能导致命名冲突或维护困难。
#### 建议改进
- 移除 `ViewStr` 函数,完全使用类构造;
- 或重命名函数为 `createViewStr`,保持类名唯一性。
---
## 设计问题与改进建议
| 问题 | 描述 | 建议 |
|------|------|-------|
| 1. 工厂函数与类同名 | `ViewStr` 既是函数又是类,易造成混淆 | 区分命名,例如函数改为 `createViewStr()` |
| 2. 属性命名不一致 | `ViewStr` 设置 `desc_object``ViewPassword` 设置 `data` | 统一为 `data``sourceDesc` |
| 3. `'check` 类型异常 | 类型名以单引号开头,可能是笔误 | 应修正为 `check``switch` |
| 4. 缺乏事件处理 | 所有视图均为静态显示 | 可添加点击显示密码等功能 |
| 5. 未实现多数 uitype | 列出 13 种类型但仅实现 2 种 | 应逐步补全或标记为“待实现” |
---
## 使用示例
```js
// 显示用户名
const nameField = { value: "Alice", row_data: userData };
const nameLabel = ViewStr(nameField);
// 显示密码(隐藏)
const pwdField = { value: "p@ssw0rd", row_data: userData };
const pwdLabel = ViewPassword(pwdField);
// 注册到系统
uitypesdef.setViewKlass('str', ViewStr);
uitypesdef.setViewKlass('password', ViewPassword);
```
---
## 总结
本模块构建了一个灵活的 UI 视图映射框架,允许根据不同字段类型动态渲染合适的显示组件。尽管目前仅实现了部分功能,但其设计具备良好的扩展性,适合进一步发展为完整的低代码前端渲染引擎。
---
> ✅ **状态**:原型阶段,核心机制可行,需优化命名一致性与完整性。
> 📦 **适用场景**:表单预览、后台管理系统、配置面板等需要动态 UI 渲染的场合。
---
*文档版本1.0*
*最后更新2025-04-05*