|
| 1 | +# 画布 # 自定义组件开发说明 |
| 2 | + |
| 3 | +## 前提条件 |
| 4 | + |
| 5 | +* 开发工具建议使用 VSCode |
| 6 | + |
| 7 | +* 基础环境: Node.js 版本 >= 18, npm 版本 >= 10 |
| 8 | + |
| 9 | +* React 组件建议使用 Ant Design (版本: 4.24.13) |
| 10 | + |
| 11 | +## 操作步骤 |
| 12 | + |
| 13 | +### 约束条件 |
| 14 | + |
| 15 | +上传的组件包必须是 zip 压缩包,解压后文件大小不得超过 5M,且必须包含三部分: |
| 16 | + |
| 17 | +* build 文件夹: 表单代码打包后的静态资源 |
| 18 | + |
| 19 | +* config.json: 表单的输入输出参配置文件 |
| 20 | + |
| 21 | +* form.jpg/png/jpeg: 表单预览图,大小不得超过 1M |
| 22 | + |
| 23 | +## 开发组件代码 |
| 24 | + |
| 25 | +### 创建文件 |
| 26 | + |
| 27 | +* 在 `/src/components` 目录下创建 `.tsx` 类型的组件文件 |
| 28 | + |
| 29 | +### 表单获取流程数据 |
| 30 | + |
| 31 | +用于初始化表单数据: |
| 32 | + |
| 33 | +```tsx |
| 34 | +const { data, terminateClick, resumingClick, restartClick } = useContext(DataContext); |
| 35 | +``` |
| 36 | + |
| 37 | +`data` 为 json 数据,结构与 config.json 的输入参配置一致 |
| 38 | + |
| 39 | +### 表单调用内置接口 |
| 40 | + |
| 41 | +**1. 终止对话 `terminateClick()`** |
| 42 | + |
| 43 | +```tsx |
| 44 | +<Button onClick={onTerminateClick}>终止对话</Button> |
| 45 | + |
| 46 | +const onTerminateClick = () => { |
| 47 | + terminateClick({ content: "终止会话" }); |
| 48 | +} |
| 49 | +``` |
| 50 | + |
| 51 | +**注意:结束节点不能调用 `terminateClick`** |
| 52 | + |
| 53 | +**2. 继续对话 `resumingClick()`** |
| 54 | + |
| 55 | +```tsx |
| 56 | +<Button onClick={onResumeClick}>继续对话</Button> |
| 57 | + |
| 58 | +const onResumeClick = () => { |
| 59 | + resumingClick({ params: { a: "hello", b: 1 } }); |
| 60 | +} |
| 61 | +``` |
| 62 | + |
| 63 | +**注意:结束节点不能调用 `resumingClick`** |
| 64 | + |
| 65 | +**3. 重新对话 `restartClick()`** |
| 66 | + |
| 67 | +```tsx |
| 68 | +<Button onClick={onRestartClick}>重新对话</Button> |
| 69 | + |
| 70 | +const onRestartClick = () => { |
| 71 | + restartClick({ params: { a: "hello", b: 1 } }); |
| 72 | +} |
| 73 | +``` |
| 74 | + |
| 75 | +**注意:如果在智能表单节点使用,需先调 `terminateClick` 再 `restartClick`** |
| 76 | + |
| 77 | +### 调用外部接口 |
| 78 | + |
| 79 | +* 要求接口支持跨域 |
| 80 | + |
| 81 | +### 使用图片 |
| 82 | + |
| 83 | +* 图片文件放在 `/src/assets/images` |
| 84 | + |
| 85 | +* 路径: `./src/assets/images/xxx.png` |
| 86 | + |
| 87 | +```tsx |
| 88 | +<img src="./src/assets/images/empty.png" alt="" height="100px" width="100px"/> |
| 89 | +``` |
| 90 | + |
| 91 | +### 表单样式文件 |
| 92 | + |
| 93 | +* 可以在 `/src/styles` 目录下添加 `.scss` 样式文件 |
| 94 | + |
| 95 | +### 调试表单 |
| 96 | + |
| 97 | +```bash |
| 98 | +npm install |
| 99 | +npm start |
| 100 | +``` |
| 101 | + |
| 102 | +* 模拟数据 `app.tsx`: |
| 103 | + |
| 104 | +```ts |
| 105 | +receiveData: { |
| 106 | + data: { a: "你好", b: "Demo1" }, |
| 107 | + uniqueId: 10, |
| 108 | + origin: "http://127.0.0.1:3350", |
| 109 | + tenantId: "fh47kl" |
| 110 | +} |
| 111 | +``` |
| 112 | + |
| 113 | +### 打包 |
| 114 | + |
| 115 | +```bash |
| 116 | +npm run build |
| 117 | +``` |
| 118 | + |
| 119 | +## 表单输入输出参 config.json |
| 120 | + |
| 121 | +### 基础规范 |
| 122 | + |
| 123 | +* 格式需符合[json schema规范](https://json-schema.apifox.cn/) |
| 124 | + |
| 125 | +* 格式示例: |
| 126 | + |
| 127 | +```json |
| 128 | +{ |
| 129 | + "schema": { |
| 130 | + "parameters": { |
| 131 | + "type": "object", |
| 132 | + "required": ["a", "b"], |
| 133 | + "properties": { |
| 134 | + "a": { "type": "string", "default": "haha" }, |
| 135 | + "b": { "type": "string", "default": "heihei" } |
| 136 | + } |
| 137 | + }, |
| 138 | + "return": { |
| 139 | + "type": "object", |
| 140 | + "properties": { |
| 141 | + "a": { "type": "string" }, |
| 142 | + "b": { "type": "string" } |
| 143 | + } |
| 144 | + } |
| 145 | + } |
| 146 | +} |
| 147 | +``` |
| 148 | + |
| 149 | +* 最外层 `parameters` 字段是入参,入参第一层必须 `type` 为 `object`。 |
| 150 | + |
| 151 | +* 必须包含 `name`,支持中文、英文、数字、空格、中划线、下划线组合。 |
| 152 | + |
| 153 | +* 可以包含 `description`,对参数进行描述。 |
| 154 | + |
| 155 | +* 必须包含 `parameters`。 |
| 156 | + |
| 157 | +* 必须包含 `required`,内容不可以为 `properties` 下参数名之外的参数名。 |
| 158 | + |
| 159 | +* 可以包含 `order`,若写必须为 `properties` 下所有参数名的列表;若不写,则默认按照 `properties` 下所有参数名的顺序。 |
| 160 | + |
| 161 | +* 必须包含 `return`,`return` 字段是出参。 |
| 162 | + |
| 163 | +## 表单预览图 |
| 164 | + |
| 165 | +* 名称: form.jpg/png/jpeg |
| 166 | + |
| 167 | +* 大小: 不超过 1M |
| 168 | + |
| 169 | +## 打包规则 |
| 170 | + |
| 171 | +* 包含 build/、config.json、form.png |
| 172 | + |
| 173 | +* 将build文件夹、config.json、form.png打成zip压缩包,压缩包名称支持大小写英文、中文和数字的字符串,可以包含中划线(-)和下划线(_),但不能以中划线(-)和下划线(_)开头或结尾。 |
0 commit comments