Skip to content

SignaturePad 签名板

基于 signature_pad 库封装的 Canvas 签名面板,支持 v-model 双向绑定、多种操作按钮布局(layout)、撤销/重做(undo/redo)和多种保存格式(png/jpeg/svg)。


基础用法

在面板上绘制签名后点击确认获取 Base64 DataURL。

vue

<TSignaturePad v-model="signature" />

自定义颜色与尺寸

通过 pen-color:width:height 自定义笔迹颜色和画布尺寸。

vue

<TSignaturePad pen-color="#0ca678" :width="300" :height="150" />
<TSignaturePad pen-color="#d63939" :width="300" :height="150" />

禁用状态

设置 disabled 禁止绘制,适合查看已签署的签名。

vue

<TSignaturePad disabled />

笔画粗细

通过 TSlider 范围滑块同时控制最小/最大线宽。

vue

<TSlider v-model="range" :min="0.5" :max="10" :step="0.5" range />
<TSignaturePad :min-width="range[0]" :max-width="range[1]" />

撤销 / 重做

通过 ref 调用 undo() / redo() 方法撤销或重做笔画,hasUndo / hasRedo 控制按钮禁用态。

vue

<TSignaturePad ref="padRef">
  <template #footer>
    <button :disabled="!padRef?.hasUndo" @click="padRef?.undo()">撤销</button>
    <button :disabled="!padRef?.hasRedo" @click="padRef?.redo()">重做</button>
    <button @click="padRef?.clear()">清空</button>
  </template>
</TSignaturePad>

自定义布局

通过 :layout 属性控制底部操作按钮的组合。默认 ['ok','res'](确认 + 重签),可选 'undo'(撤销)、'redo'(恢复)、'width'(笔画粗细滑块)。

vue

<TSignaturePad :layout="['ok','res','undo','redo','width']" />

保存格式

通过 save-format 控制确认时输出的图片格式,支持 'png'(默认)、'jpeg''svg'

vue

<TSignaturePad save-format="svg" @confirm="handleConfirm" />

自定义底部插槽

通过 #footer 插槽完全自定义底部操作区域。配合 expose 的方法(clearundoredo)和 emit 事件(@confirm@end-stroke)实现完整自定义交互。

此处仅展示自定义底部操作区域,实际使用中请自行实现签名保存等对应逻辑。

vue

<TSignaturePad ref="padRef" @confirm="onConfirm">
  <template #footer>
    <!-- 集成滑块控制笔画粗细 -->
    <TSlider v-model="range" :min="0.5" :max="6" :step="0.5" range />
    <!-- 调用 expose 方法 -->
    <button @click="padRef?.undo()">撤销</button>
    <button @click="padRef?.clear()">重签</button>
  </template>
</TSignaturePad>

API

Props

属性类型默认值说明
model-value / v-modelstring''签名结果的 DataURL
widthnumber | string'100%'Canvas 宽度(传数字为 px,传字符串为 CSS 值,如 '100%'
heightnumber | string200Canvas 高度(传数字为 px,传字符串为 CSS 值)
pen-colorstring'#000000'笔迹颜色
background-colorstring'rgba(0,0,0,0)'背景色
min-widthnumber0.5最小线宽
max-widthnumber2.5最大线宽
throttlenumber16节流毫秒数
disabledbooleanfalse禁用签名
save-format'png' | 'jpeg' | 'svg''png'确认时输出的图片格式
confirm-textstring'确认'确认按钮文案
layout('ok'|'res'|'undo'|'redo'|'width')[]['ok','res']底部操作栏布局项

Emits

事件参数说明
update:model-valuedataURL: string | nullv-model 更新
confirmdataURL: string用户确认签名
clear用户清空签名
end-strokeisEmpty: boolean每笔绘制结束,传出是否为空

Expose

方法说明
isEmpty()签名是否为空
toDataURL(type?, encoderOptions?)获取签名 DataURL
toSVG()获取签名 SVG 字符串
fromDataURL(dataURL)从 DataURL 加载签名
clear()清空签名
undo()撤销上一笔
redo()重做被撤销的笔画
hasUndo是否可撤销(ref 响应式)
hasRedo是否可重做(ref 响应式)

Slots

插槽说明
footer自定义底部操作按钮区