tnblog
首页
视频
资源
登录

vue3 微信小程序,uni-app 签字版插件sp-sign-board。上传图片

304人阅读 2025/2/10 16:57 总访问:824567 评论:0 收藏:0 手机
分类: 前端

插件地址:https://ext.dcloud.net.cn/plugin?id=14966

文档:https://sonvee.github.io/sv-app-docs/docs-github/src/plugins/sp-sign-board/sp-sign-board.html

组件的引入

直接下载下来放到这个组件文件夹下就可以了

基础使用

  1. <template>
  2. <view class="upLoadSigns-container">
  3. <view class="sign-area">
  4. <sp-sign-board
  5. ref="signBoardRef"
  6. sid="sign-board"
  7. :horizontal="false"
  8. bgColor="#ffffff"
  9. :mark-text="markText"
  10. :needBack="false"
  11. @reset="reset"
  12. @firstTouchStart="firstTouchStart"
  13. @confirm = "signConfirm"
  14. ></sp-sign-board>
  15. </view>
  16. </view>
  17. </template>
  18. <script setup lang="ts">
  19. import { ref, reactive, onMounted } from 'vue'
  20. import { onLoad,onUnload } from '@dcloudio/uni-app'
  21. const markText = ref([] as any)
  22. const signBoardRef = ref()
  23. onLoad(() => {
  24. // 图片签字完成后执行的方法
  25. uni.$on('getSignImg', (e) => {
  26. console.log("签字完成了",e)
  27. })
  28. refreshMark()
  29. })
  30. // 页面关闭的时候把监听的事件注销掉,不然下次在进入页面的时候会多次触发
  31. onUnload(()=>{
  32. console.log("页面关闭了....")
  33. uni.$off('getSignImg')
  34. })
  35. function refreshMark() {
  36. const currentDate = new Date()
  37. const year = currentDate.getFullYear()
  38. const month = String(currentDate.getMonth() + 1).padStart(2, '0')
  39. const day = String(currentDate.getDate()).padStart(2, '0')
  40. const hours = String(currentDate.getHours()).padStart(2, '0')
  41. const minutes = String(currentDate.getMinutes()).padStart(2, '0')
  42. const seconds = String(currentDate.getSeconds()).padStart(2, '0')
  43. // markText.value = [`${year}-${month}-${day}`, `${hours}:${minutes}:${seconds}`]
  44. markText.value = ["tnblog"]
  45. }
  46. const signConfirm = ()=>{
  47. console.log("点击了确认....")
  48. }
  49. function firstTouchStart() {
  50. // 在第一次开始触碰时,更新一下时间水印,防止滞留时间太长造成时间误差(非必要)
  51. refreshMark()
  52. // 手动调用组件内绘制水印方法重新绘制
  53. signBoardRef.value.drawMark(markText.value)
  54. }
  55. function reset() {
  56. refreshMark()
  57. }
  58. </script>
  59. <style lang="scss">
  60. /* 为页面根元素设置背景颜色
  61. page {
  62. background-color: #f7f7f8;
  63. }*/
  64. </style>
  65. <style lang="scss" scoped>
  66. .sign-area {
  67. width: 100%;
  68. height: calc(100vh - 44px);
  69. }
  70. </style>

包含上传图片的

  1. <template>
  2. <view class="upLoadSigns-container">
  3. <view class="sign-area">
  4. <sp-sign-board
  5. ref="signBoardRef"
  6. sid="sign-board"
  7. :horizontal="false"
  8. bgColor="#ffffff"
  9. :mark-text="markText"
  10. :needBack="false"
  11. @reset="reset"
  12. @firstTouchStart="firstTouchStart"
  13. @confirm="signConfirm"
  14. ></sp-sign-board>
  15. </view>
  16. </view>
  17. </template>
  18. <script setup lang="ts">
  19. import { ref, reactive, onMounted } from 'vue'
  20. import { onLoad, onUnload } from '@dcloudio/uni-app'
  21. import { ApiBaseUrl } from '@/common/sysconfig'
  22. import request from '@/common/Http'
  23. const markText = ref([] as any)
  24. const signBoardRef = ref()
  25. onLoad((_params) => {
  26. state.subTrainingId = _params?.subTrainingId
  27. // 图片签字完成后执行的方法
  28. uni.$on('getSignImg', (e) => {
  29. // console.log('签字完成了', e)
  30. // e.base64可以拿到base64的格式。e.path可以拿到临时路径,这里使用临时路径直接上传图片更加方便一些
  31. uploadFile(e.path)
  32. })
  33. refreshMark()
  34. })
  35. // 页面关闭的时候把监听的事件注销掉,不然下次在进入页面的时候会多次触发
  36. onUnload(() => {
  37. uni.$off('getSignImg')
  38. })
  39. const state = reactive({
  40. subTrainingId:"",
  41. UpLoadData: {} as any
  42. })
  43. const getToken = () => {
  44. let info = uni.getStorageSync('loginInfo')
  45. let token = info?.resData?.access_token
  46. return token
  47. }
  48. // 上传签字图片
  49. const uploadFile = (_filePath:any)=>{
  50. uni.uploadFile({
  51. // 请求接口地址
  52. url: ApiBaseUrl + '/oss/api/SmartFiles/UpLoadFormXXX',
  53. filePath: _filePath,
  54. name: 'file',
  55. header: {
  56. 'Authorization': `Bearer ${getToken()}`,
  57. },
  58. formData: {
  59. 'bucketName': 'teacher-certification',
  60. 'filePath': 'teacherTraining',
  61. 'fileType': '1'
  62. },
  63. success: (uploadFileRes:any) => {
  64. let result = JSON.parse(uploadFileRes.data)
  65. // 下面是图片上传成功之后配合其他接口的操作
  66. // state.UpLoadData.Sign = result.data.id
  67. // submitUpload()
  68. }
  69. });
  70. }
  71. const submitUpload = async () => {
  72. // 提交签字
  73. state.UpLoadData.SubProgramId = state.subTrainingId
  74. const result: any = await request.post('/teacherCertifiApi/api/ProjectMembersResult/XXX', state.UpLoadData)
  75. }
  76. function refreshMark() {
  77. const currentDate = new Date()
  78. const year = currentDate.getFullYear()
  79. const month = String(currentDate.getMonth() + 1).padStart(2, '0')
  80. const day = String(currentDate.getDate()).padStart(2, '0')
  81. const hours = String(currentDate.getHours()).padStart(2, '0')
  82. const minutes = String(currentDate.getMinutes()).padStart(2, '0')
  83. const seconds = String(currentDate.getSeconds()).padStart(2, '0')
  84. // markText.value = [`${year}-${month}-${day}`, `${hours}:${minutes}:${seconds}`]
  85. markText.value = ['足下科教集团']
  86. }
  87. const signConfirm = () => {
  88. console.log('点击了确认....')
  89. }
  90. function firstTouchStart() {
  91. // 在第一次开始触碰时,更新一下时间水印,防止滞留时间太长造成时间误差(非必要)
  92. refreshMark()
  93. // 手动调用组件内绘制水印方法重新绘制
  94. signBoardRef.value.drawMark(markText.value)
  95. }
  96. function reset() {
  97. refreshMark()
  98. }
  99. </script>
  100. <style lang="scss">
  101. /* 为页面根元素设置背景颜色
  102. page {
  103. background-color: #f7f7f8;
  104. }*/
  105. </style>
  106. <style lang="scss" scoped>
  107. .sign-area {
  108. width: 100%;
  109. height: calc(100vh - 44px);
  110. }
  111. </style>

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

vue3,vue组件,props给一个对象参数。vue组件间传参数vue父组件给子组件传参数。组件参数类型。父组件调用子组件的方法。vue组件事件监听,给子组件传递方法,子组件调用父组件方法

[TOC]组件可以使用props给组件传值,可以同时传递多个,可以是任意类型,比如字符串或者对象。 下面是个简单的例子: &lt...

vue3最基础的数据加载,表格table

vue3表格加载一点静态数据 &lt;template&gt; &lt;el-table :data=&quot;tableData&quot; style=&quot;width: 100%&quot...

vue3 Element Plus 表单输入框放到一行

当垂直方向空间受限且表单较简单时,可以在一行内放置表单。 通过设置 inline 属性为 true 可以让表单域变为行内的表单域...

vue3 Element ui Plus 表格 分页,vue3 el-pagination分页

其实就是el-pagination控件的使用而已 &lt;template&gt; &lt;div&gt; &lt;el-table :data=&quot;tableData&quot; ...

vue触发a标签的点击事件。vue3 dom操作 触发点击事件 。文件选择库只会触发一次change事件的问题

[TOC]vue触发a标签的点击事件直接操作dom节点的方式比较简单 &lt;button @click=&quot;handleBtnClick&quot;&gt;点击按钮&...

vue3 ref的使用多个ref的使用。通过ref触发点击事件

多个ref获取的方法可以使用一样的,通过变量名来区分就行了 const vabUploadRef = ref() const multipleTableRef = ref() ...

vue elementui,vue3 element plus 文件上传的时候设置其他参数。后台.net接收传递的额外参数。图片上传

比如上传文件的时候额外传递两个select选择的值 前台前面上传文件的时候要提供默认参数很简单,el-upload绑定一个data即可...

vue,vue3 打开新页面,页面跳转。vue跳转到一个新页面。vue路由传参,vue3路由传参,vue3 获取路由参数

[TOC]VUE页面跳转本地页面跳转 goApplicationCenter() { //进行页面跳转 let path = &quot;/application-center&quo...

vuevue3组件封装,vue组件模板。简单组件模板。基础组件模板。vue引入自定义的组件。vue使用自定义的组件。插槽slot使用。vue封装格子效果,一块一块的grid布局效果

[TOC]vue封装组件的简单模板贴一个简单模板方便自定义组件的时候直接复制 &lt;template&gt; &lt;div class=&quot;app...

.net6 Signalr+vue3 的运用(上)

.net6 Signalr+Vue3 的运用(上)[TOC] 什么是 SignalR?ASP.NET Core SignalR 是一个开放源代码库,可用于简化向应用添加...

.net6 Signalr+vue3 的运用(下)

.net6 Signalr+Vue3 的运用(下)[TOC] 上篇链接:https://www.tnblog.net/hb/article/details/7961SignalR 中的用户 Sig...

.net6 Signalr+vue3 配合Ingress Nginx的运用

.net6 Signalr+Vue3 配合Ingress Nginx的运用[TOC] 结合上篇:https://www.tnblog.net/hb/article/details/7963 项目打...

vue3 Element Plus 表格使用vue3常用界面搭配。vue3基础模板使用

一个简单的表格加时间搜索界面效果如下: 代码如下: &lt;template&gt; &lt;div class=&quot;app-container&quot;&g...

vue3 如何加prototype。vue3使用globalProperties

在2.X版本中创建一个vue 实例是通过 new Vue()来实现的,到了3.X中则是通过使用createApp这个 API返回一个应用实例,并且可...
这一生多幸运赶上过你.
排名
8
文章
221
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术