【本回复由 AI 根据产品文档自动生成】
您好,关于不同流程节点手写签字如何共存的问题,在 M3-1.6.0SP10 版本中,手写签字控件(HandwritingField)已标记为 `@Deprecated`(废弃),不存储值。以下是解决方案:
## 原因分析
1. `HandwritingField`(手写签名)在平台中已废弃,**不存值**(`VALUE_TYPE` 无),签字数据不会持久化到业务表
2. 不同流程节点的签字数据如果使用同一个控件,后节点的签字会覆盖前节点的签字
3. 1.6 版本的签字数据存储在文档的 `SIGN` 系统固定列和 `KINGGRIDSIGNATURE` 列中,不支持多节点独立存储
## 方案1:使用多个图片上传控件替代(推荐)
为每个流程节点配置独立的图片上传控件(ImageUploadField),通过隐藏条件脚本控制只在对应节点显示:
```javascript
// 节点1的签字控件隐藏条件 - 仅在非节点1时隐藏
(function() {
var stateLabel = getCurrentDocument().getStateLabel();
// 假设节点1的状态标签为 "经理审批"
return stateLabel !== "经理审批";
})()
```
```javascript
// 节点2的签字控件隐藏条件 - 仅在非节点2时隐藏
(function() {
var stateLabel = getCurrentDocument().getStateLabel();
// 假设节点2的状态标签为 "总监审批"
return stateLabel !== "总监审批";
})()
```
这样每个节点的签字数据存储在各自独立的 `ITEM_` 列中,不会互相覆盖。
## 方案2:使用自定义控件 + 手写签名图片 Base64 存储
使用 CustomField(自定义控件)嵌入前端手写签名 JS 库(如 signature_pad),将签名图片转为 Base64 存储到字段中:
```javascript
// 自定义控件的 htmlScript 中嵌入前端手写签名
(function() {
var html = '<canvas id="signaturePad" width="400" height="200" style="border:1px solid #ccc;"></canvas>' +
'<button onclick="saveSignature()">保存签名</button>' +
'<button onclick="clearSignature()">清除</button>' +
'<script>' +
'function saveSignature() {' +
' var canvas = document.getElementById("signaturePad");' +
' var dataURL = canvas.toDataURL("image/png");' +
' // 将Base64写入隐藏字段' +
' var hiddenField = document.querySelector("[name=item_签字]");' +
' if (hiddenField) hiddenField.value = dataURL;' +
'}' +
'function clearSignature() {' +
' var canvas = document.getElementById("signaturePad");' +
' var ctx = canvas.getContext("2d");' +
' ctx.clearRect(0, 0, canvas.width, canvas.height);' +
'}' +
'</script>';
return html;
})()
```
为每个流程节点配置独立的自定义控件,通过隐藏条件控制显示。
## 方案3:使用富文本编辑器(HTMLEditorField)嵌入签字
在富文本编辑器中嵌入签字图片,每个节点使用独立的 HTMLEditorField 字段存储签字内容。
## 方案4:使用附件上传控件
为每个节点配置独立的附件上传控件,用户手写签名后截图上传,通过隐藏条件脚本按节点显示。
## 注意事项
- `HandwritingField` 已废弃,不建议在新项目中使用
- 系统固定列 `SIGN` 和 `KINGGRIDSIGNATURE` 用于存储平台级签名/签章数据,不支持多节点独立管理
- 使用图片上传控件方案时,签字图片以 JSON 数组字符串形式存储在 `TLK_` 表的 `ITEM_` 列中
- 隐藏条件脚本 `true` = 隐藏,`false` = 可见(注意方向)
- 升级到 4.x 版本后可使用更丰富的前端组件实现手写签名
参考文档:
http://docs.myapps.cn/design/core-component/dyna-form-field/
http://docs.myapps.cn/iscript-guid/scene/03-permission-visibility/
http://docs.myapps.cn/design/core-component/dyna-form/ |