Widget

集成控件相关数据和方法

控件生成方式

拖拽生成控件

  • 场景: 制作模板时设置控件、合同发起前设置控件、签署时拖拽加盖签章等场景,拖拽页面元素到合同页面上生成控件。

  • 方法: 使用 Widget.setWidgetTransfer 方法来设置拖拽的控件数据。FaContract 会在合同页面的 drop 事件中解析数据,并关联文档页面和坐标信息,进而生成 widget,并 push 到 FaContract 参数的 widgets 数组中。

示例 1:制作模板或发起时设置控件

<div @drag="dragInput">单行文本</div>
1
import { Widget, WidgetType, WidgetMode, ActorData } from 'fdd-contract'

/** 控件指定的参与方 */
const actor: ActorData = {
  id: '2342342',
  name: '深圳市xxx公司',
  index: 0
}

/** 制作模板或发起前:拖拽单行文本控件 */
function dragInput(e: DragEvent) {
  Widget.setWidgetTransfer(e, {
    type: WidgetType.INPUT,
    // 指定参与方
    actor
  })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

示例 2:拖拽并加盖印章

<div @drag="dragSeal">
  <img :src="seal.img" />
</div>
1
2
3
import { Widget, WidgetType, WidgetMode, ActorData, SignData } from 'fdd-contract'

/** 当前签署方 */
const actor: ActorData = {
  id: '2342342',
  name: '深圳市xxx公司',
  index: 0
}

/** 印章数据 */
const seal: SignData = {
  /** 签章 id */
  id: '345345345',
  /** 签章名称 */
  name: '财务章',
  /** 图片地址 */
  img: 'https://fadada.com/pic/seal/345345345.png'
}

/** 不指定位置签署:拖拽并加盖印章 */
function dragSeal(e: DragEvent) {
  Widget.setWidgetTransfer(e, {
    type: WidgetType.SEAL,
    // 拖拽加盖印章需要使用模式
    mode: WidgetMode.USE,
    // 指定参与方
    actor,
    // 签章数据
    sign: seal
  })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

JSON 原始控件

  • 场景: 目前后端是 JSON 方式存储控件数据的,我们需要将 JSON 原始数据快速还原生成控件。

  • 方法: 使用 Widget.createRawWidget 方法来转换后端控件数据。

  • 示例:

import { Widget, WidgetMode, ActorData } from 'fdd-contract'

/** 控件绑定的参与方 */
const actor: ActorData = {
  id: '2342342',
  name: '深圳市xxx公司',
  index: 0
}

/** 后端取到的控件数据 */
const rawField =
  '{"h": 60, "p": 0, "w": 200, "x": 466.7999877929687, "y": 220, "id": "ff0msq6lcco", "name": "参与方2", "type": 4, "align": "center", "label": "多行文本控件", "fontSize": 18, "fontType": 3, "signStyle": 3, "isRequired": true, "widgetName": "多行文本控件", "widgetValue": ""}'

const widget = Widget.createRawWidget(JSON.parse(rawField), {
  // 填写阶段为使用模式
  // 如果是制作模板或发起前设置控件,应当设置为 WidgetMode.SET
  mode: WidgetMode.USE,
  actor,
  docId: '345345345'
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

生成 Widget 实例

import { Widget, WidgetMode, ActorData } from 'fdd-contract'

/** 控件绑定的参与方 */
const actor: ActorData = {
  id: '2342342',
  name: '深圳市xxx公司',
  index: 0
}

// 签署控件
const sealWidget = new Widget({
  name: '骑缝控件1',
  type: WidgetType.SEAL,
  mode: WidgetMode.USE,
  // 骑缝控件
  kind: WidgetKind.RIDING,
  actor,
  docId: '345345345',
  x: 200,
  y: 150
})

// 填写控件
const textareaWidget = new Widget({
  name: '多行文本控件1',
  type: WidgetType.TEXTAREA,
  mode: WidgetMode.USE,
  actor,
  docId: '345345345',
  p: 1,
  w: 170,
  h: 60,
  x: 200,
  y: 150,
  // 非必填
  required: false,
  // 默认值
  value: '这是很长的一段文本'
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39

属性

基本信息

属性说明类型默认值
id控件 id,如果未设置则自动生成string
name控件名称string
displayName readonly控件展示名称,如未设置控件名称
则显示控件选项的名称
string
className控件元素类名,用于自定义控件类名string
type控件类型WidgetTypeWidgetType.UNKNOWN
isFill readonly是否填写控件boolean
isSign readonly是否签署控件boolean
option readonly控件配置选项WidgetOption
component readonly控件组件vueComponent
mode控件模式,用于区分控件的状态WidgetModeWidgetMode.USE
isSet readonly是否设置模式,如指定控件位置和设置控件信息boolean
isUse readonly是否使用模式,如填写和签署boolean
isView readonly是否查看模式,如控件预览boolean
isDone readonly是否完成模式,如预览已填写定稿的控件boolean
kind控件种类,用于区分控件是否骑缝、批量等WidgetKind
actor参与方,引用值,应该直接赋值而非修改子属性ActorData{ id: '', name: '', index: -1 }
actorColor readonly参与方颜色string
label readonly控件 label 展示string
labelUsing readonly控件使用中 label 文案,用于快捷填写string
labelTips readonly控件 label 次级提示string
tips控件提示信息string
extra额外数据,用于扩展额外的字段object{}

尺寸和定位

属性说明类型默认值
docId控件所在文档 idstring
doc readonly控件所在文档DocData | undefinedundefined
p控件所在页码,从 0 开始number0
page readonly控件所在页面
骑缝控件关联第一页数据
PageData
applyPage应用的页面,用于批量和骑缝控件undefined: 全部页
'ODD': 奇数页
'EVEN': 偶数页
'1, 2, 5-8': 指定页(仅批量控件,从 1 开始)
undefined
pages readonly所在页面列表
谨慎使用,避免超多页面文档性能问题
number[]
linkId控件关联 idstring
w宽度number0
h高度number0
x水平位置number0
y纵向位置number0
ox控件中心定位 x,后端通常使用中心定位number
oy控件中心定位 ynumber
aspectRatio readonly宽高比例,0 则不约束number0
range readonly定位范围object

操作控制

属性说明类型默认值
fixed是否指定位置
用于指定位置签署的控件
booleanfalse
deletable是否可以删除
控件是可拖动的,此字段才生效
booleantrue
isFixed readonly是否固定控件
不允许删除、移动、调整尺寸
boolean
resizable readonly是否允许调整大小boolean
removable readonly是否允许删除boolean

错误信息

属性说明类型默认值
error readonly校验错误信息boolean
errorSetting readonly设置错误boolean
errorUsing readonly使用错误boolean
customError自定义错误消息string

签署控件

属性说明类型默认值
isRiding readonly是否骑缝控件booleanfalse
sign签章数据,设置模式用来展示签章SignData | DateSign{ id: '', img: '' }
followSignSize签章控件是否跟随签章图片规格尺寸booleantrue
keepSignAspect签章控件自定义规格时是否保持比例
followSignSizefalse 时生效
booleanfalse
assignedSignId指定印章 IDstring
assignedSignName指定印章名称string
signTag签章控件标签string | TagPropsundefined

填写控件

属性说明类型默认值
value填写控件值string''
hasFillValue readonly检测控件是否有填写值boolean
required填写控件是否必填booleantrue
source控件数据来源WidgetSource | string
sources readonly可用来源列表WidgetSourceItem[][]
sourceItem readonly匹配到的控件数据来源项WidgetSourceItem | undefined
text文本控件文本信息,例如字体、字号、居中等TextDataFddContract.config.textDefault
fontSizeValue readonly文本控件字号大小值string
fontFamilyValue readonly文本控件字体样式值string
numberFixedLimit数字控件是否限制数字小数点位数booleanfalse
numberFixed数字控件保留小数点位数,0 ~ 10number2
thousands数字控件是否显示千分位booleanfalse
dateFormat日期填写控件日期格式DateFormatDateFormat.LOCAL
checkOptions单选框、复选框选项CheckOption[][]
activeOption readonly单、复选框当前选项CheckOption | undefinedundefined
selectOptions下拉选择选项string[][]
attachment附件数据AttachmentData{ fileName: '', loading: false, progress: 0 }
image图片数据ImageData
tableOptions表格控件选项TableOptionsTableDefault
tableFields表格控件字段TableField[]
tableData表格数据TableItem[]
tableColWidths表格列宽number[]

方法

方法名说明参数返回类型
constructorWidget 构造data: WidgetData
init初始化数据raw: WidgetData
clear清除控件数据
getRawField生成原始控件数据(提供给后端)RawField
getBatchField生成批量控件的原始数据
将单个批量控件按页码生成多份(提供给后端)
RawField[]
isInPage控件是否在指定页p: number, docId = this.docIdboolean
move控件按距离移动x: number = 0, y: number = 0, adjust = true
moveTo控件移动到指定位置x: number = this.x, y: number = this.y, adjust = true
adjust适应位置以免超出边界
fixDropLocation修复跨页移动后的坐标和页码
clone克隆控件
生成的新控件会丢弃 extra 数据
Widget

静态方法

方法名说明参数返回类型
defineWidget定义控件选项
用以更改控件选项,或者自定义新的控件
type: WidgetType | number,
option: Partial<WidgetOption> | WidgetOption
getWidgetOption获取控件配置选项type: WidgetTypeWidgetOption
getWidgetOptions获取控件配置选项列表WidgetOption[]
createRawWidget根据后端记录的 JSON 原始控件数据创建控件data: RawField,
extra?: Partial<WidgetData>
Widget
setWidgetTransfer设置拖拽的控件数据(拖拽开始 @drag)e: DragEvent, data: WidgetData
getWidgetTransfer获取拖拽的控件数据(拖入)e: DragEvent, area: Element, zoom: numberWidgetData
getActorColor获取参与方颜色index: numberstring