
插件地址: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
组件的引入
直接下载下来放到这个组件文件夹下就可以了
基础使用
<template>
<view class="upLoadSigns-container">
<view class="sign-area">
<sp-sign-board
ref="signBoardRef"
sid="sign-board"
:horizontal="false"
bgColor="#ffffff"
:mark-text="markText"
:needBack="false"
@reset="reset"
@firstTouchStart="firstTouchStart"
@confirm = "signConfirm"
></sp-sign-board>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { onLoad,onUnload } from '@dcloudio/uni-app'
const markText = ref([] as any)
const signBoardRef = ref()
onLoad(() => {
// 图片签字完成后执行的方法
uni.$on('getSignImg', (e) => {
console.log("签字完成了",e)
})
refreshMark()
})
// 页面关闭的时候把监听的事件注销掉,不然下次在进入页面的时候会多次触发
onUnload(()=>{
console.log("页面关闭了....")
uni.$off('getSignImg')
})
function refreshMark() {
const currentDate = new Date()
const year = currentDate.getFullYear()
const month = String(currentDate.getMonth() + 1).padStart(2, '0')
const day = String(currentDate.getDate()).padStart(2, '0')
const hours = String(currentDate.getHours()).padStart(2, '0')
const minutes = String(currentDate.getMinutes()).padStart(2, '0')
const seconds = String(currentDate.getSeconds()).padStart(2, '0')
// markText.value = [`${year}-${month}-${day}`, `${hours}:${minutes}:${seconds}`]
markText.value = ["tnblog"]
}
const signConfirm = ()=>{
console.log("点击了确认....")
}
function firstTouchStart() {
// 在第一次开始触碰时,更新一下时间水印,防止滞留时间太长造成时间误差(非必要)
refreshMark()
// 手动调用组件内绘制水印方法重新绘制
signBoardRef.value.drawMark(markText.value)
}
function reset() {
refreshMark()
}
</script>
<style lang="scss">
/* 为页面根元素设置背景颜色
page {
background-color: #f7f7f8;
}*/
</style>
<style lang="scss" scoped>
.sign-area {
width: 100%;
height: calc(100vh - 44px);
}
</style>
包含上传图片的
<template>
<view class="upLoadSigns-container">
<view class="sign-area">
<sp-sign-board
ref="signBoardRef"
sid="sign-board"
:horizontal="false"
bgColor="#ffffff"
:mark-text="markText"
:needBack="false"
@reset="reset"
@firstTouchStart="firstTouchStart"
@confirm="signConfirm"
></sp-sign-board>
</view>
</view>
</template>
<script setup lang="ts">
import { ref, reactive, onMounted } from 'vue'
import { onLoad, onUnload } from '@dcloudio/uni-app'
import { ApiBaseUrl } from '@/common/sysconfig'
import request from '@/common/Http'
const markText = ref([] as any)
const signBoardRef = ref()
onLoad((_params) => {
state.subTrainingId = _params?.subTrainingId
// 图片签字完成后执行的方法
uni.$on('getSignImg', (e) => {
// console.log('签字完成了', e)
// e.base64可以拿到base64的格式。e.path可以拿到临时路径,这里使用临时路径直接上传图片更加方便一些
uploadFile(e.path)
})
refreshMark()
})
// 页面关闭的时候把监听的事件注销掉,不然下次在进入页面的时候会多次触发
onUnload(() => {
uni.$off('getSignImg')
})
const state = reactive({
subTrainingId:"",
UpLoadData: {} as any
})
const getToken = () => {
let info = uni.getStorageSync('loginInfo')
let token = info?.resData?.access_token
return token
}
// 上传签字图片
const uploadFile = (_filePath:any)=>{
uni.uploadFile({
// 请求接口地址
url: ApiBaseUrl + '/oss/api/SmartFiles/UpLoadFormXXX',
filePath: _filePath,
name: 'file',
header: {
'Authorization': `Bearer ${getToken()}`,
},
formData: {
'bucketName': 'teacher-certification',
'filePath': 'teacherTraining',
'fileType': '1'
},
success: (uploadFileRes:any) => {
let result = JSON.parse(uploadFileRes.data)
// 下面是图片上传成功之后配合其他接口的操作
// state.UpLoadData.Sign = result.data.id
// submitUpload()
}
});
}
const submitUpload = async () => {
// 提交签字
state.UpLoadData.SubProgramId = state.subTrainingId
const result: any = await request.post('/teacherCertifiApi/api/ProjectMembersResult/XXX', state.UpLoadData)
}
function refreshMark() {
const currentDate = new Date()
const year = currentDate.getFullYear()
const month = String(currentDate.getMonth() + 1).padStart(2, '0')
const day = String(currentDate.getDate()).padStart(2, '0')
const hours = String(currentDate.getHours()).padStart(2, '0')
const minutes = String(currentDate.getMinutes()).padStart(2, '0')
const seconds = String(currentDate.getSeconds()).padStart(2, '0')
// markText.value = [`${year}-${month}-${day}`, `${hours}:${minutes}:${seconds}`]
markText.value = ['足下科教集团']
}
const signConfirm = () => {
console.log('点击了确认....')
}
function firstTouchStart() {
// 在第一次开始触碰时,更新一下时间水印,防止滞留时间太长造成时间误差(非必要)
refreshMark()
// 手动调用组件内绘制水印方法重新绘制
signBoardRef.value.drawMark(markText.value)
}
function reset() {
refreshMark()
}
</script>
<style lang="scss">
/* 为页面根元素设置背景颜色
page {
background-color: #f7f7f8;
}*/
</style>
<style lang="scss" scoped>
.sign-area {
width: 100%;
height: calc(100vh - 44px);
}
</style>
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价
排名
8
文章
221
粉丝
7
评论
7
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术