2023-08-01 17:28:15 +08:00
< template >
2023-08-24 16:22:29 +08:00
< view class = "sign" >
2023-09-23 20:16:54 +08:00
< head -view title = "单证签名" :url ="backUrl" > < / h e a d - v i e w >
2023-11-01 18:40:05 +08:00
< view class = "container contentFixed" >
2023-08-24 16:22:29 +08:00
< view class = "sign-box" >
< canvas class = "mycanvas" : style = "{width:width +'px',height:height +'px'}" canvas -id = " mycanvas "
@ touchstart = "touchstart" @ touchmove = "touchmove" @ touchend = "touchend" > < / canvas >
< canvas canvas -id = " camCacnvs " : style = "{width:height +'px',height:width +'px'}"
class = "canvsborder" > < / canvas >
< / view >
< view class = "sigh-btns" >
2023-12-22 17:48:52 +08:00
< view class = "btn qx" @click ="handleCancel" > 取 消 < / view >
< view class = "btn qc" @click ="handleReset" > 清 除 < / view >
< view class = "btn bc" @click ="handleConfirm" > 保 存 < / view >
2023-08-24 16:22:29 +08:00
< / view >
2023-08-01 17:28:15 +08:00
< / view >
< / view >
< / template >
< script >
2023-09-23 20:16:54 +08:00
import {
pathToBase64 ,
base64ToPath
} from '../../js_sdk/mmmm-image-tools/index.js'
import {
compressImgBySize
} from '@/common/compressImg'
import sqlite from "../../common/sqlite.js"
import api from "../../common/api.js"
import {
v4 as uuidv4
} from 'uuid' ;
2023-08-01 17:28:15 +08:00
var x = 20 ;
var y = 20 ;
var tempPoint = [ ] ; //用来存放当前画纸上的轨迹点
var id = 0 ;
var type = '' ;
let that ;
let canvasw ;
let canvash ;
export default {
data ( ) {
return {
ctx : '' , //绘图图像
points : [ ] , //路径点集合,
width : 0 ,
2023-08-23 17:42:44 +08:00
height : 0 ,
2023-09-23 20:16:54 +08:00
sginId : "" ,
signImgUrl : "" ,
nextUrl : "" ,
signType : "" ,
signTable : "" ,
backUrl : "" ,
2023-11-01 18:40:05 +08:00
tabsValue : 0 ,
vvyId : "" ,
2023-08-01 17:28:15 +08:00
} ;
} ,
onLoad ( option ) {
2023-09-23 20:16:54 +08:00
this . sginId = JSON . parse ( decodeURIComponent ( option . params ) ) . id
this . nextUrl = JSON . parse ( decodeURIComponent ( option . params ) ) . url
this . signType = JSON . parse ( decodeURIComponent ( option . params ) ) . signType
this . signTable = JSON . parse ( decodeURIComponent ( option . params ) ) . signTable
this . tabsValue = JSON . parse ( decodeURIComponent ( option . params ) ) . tabsValue
2023-11-01 18:40:05 +08:00
this . vvyId = JSON . parse ( decodeURIComponent ( option . params ) ) . vvyId
2023-09-23 20:16:54 +08:00
this . backUrl = ` /pages/shipWork/ ${ this . nextUrl } `
2023-11-24 15:55:58 +08:00
this . vtpId = uni . getStorageSync ( 'vtpId' )
2023-08-01 17:28:15 +08:00
that = this ;
id = option . id ;
type = option . type ;
this . ctx = uni . createCanvasContext ( 'mycanvas' , this ) ; //创建绘图对象
//设置画笔样式
this . ctx . lineWidth = 4 ;
this . ctx . lineCap = 'round' ;
this . ctx . lineJoin = 'round' ;
uni . getSystemInfo ( {
success : function ( res ) {
that . width = res . windowWidth * 0.8 ;
that . height = res . windowHeight * 0.85 ;
}
} ) ;
} ,
methods : {
//触摸开始,获取到起点
touchstart : function ( e ) {
let startX = e . changedTouches [ 0 ] . x ;
let startY = e . changedTouches [ 0 ] . y ;
let startPoint = {
X : startX ,
Y : startY
} ;
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 由于uni对canvas的实现有所不同 , 这里需要把起点存起来
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
this . points . push ( startPoint ) ;
//每次触摸开始,开启新的路径
this . ctx . beginPath ( ) ;
} ,
//触摸移动,获取到路径点
touchmove : function ( e ) {
let moveX = e . changedTouches [ 0 ] . x ;
let moveY = e . changedTouches [ 0 ] . y ;
let movePoint = {
X : moveX ,
Y : moveY
} ;
this . points . push ( movePoint ) ; //存点
let len = this . points . length ;
if ( len >= 2 ) {
this . draw ( ) ; //绘制路径
}
tempPoint . push ( movePoint ) ;
} ,
// 触摸结束,将未绘制的点清空防止对后续路径产生干扰
touchend : function ( ) {
this . points = [ ] ;
} ,
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
# 绘制笔迹
# 1. 为保证笔迹实时显示 , 必须在移动的同时绘制笔迹
# 2. 为保证笔迹连续 , 每次从路径集合中区两个点作为起点 ( moveTo ) 和终点 ( lineTo )
# 3. 将上一次的终点作为下一次绘制的起点 ( 即清除第一个点 )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
draw : function ( ) {
let point1 = this . points [ 0 ] ;
let point2 = this . points [ 1 ] ;
this . points . shift ( ) ;
this . ctx . moveTo ( point1 . X , point1 . Y ) ;
this . ctx . lineTo ( point2 . X , point2 . Y ) ;
this . ctx . stroke ( ) ;
this . ctx . draw ( true ) ;
} ,
handleCancel ( ) {
uni . navigateBack ( {
delta : 1
} ) ;
} ,
//清空画布
handleReset : function ( ) {
that . ctx . clearRect ( 0 , 0 , that . width , that . height ) ;
that . ctx . draw ( true ) ;
tempPoint = [ ] ;
} ,
//将签名笔迹上传到服务器,并将返回来的地址存到本地
handleConfirm : function ( ) {
2023-09-23 20:16:54 +08:00
that = this
2023-08-01 17:28:15 +08:00
if ( tempPoint . length == 0 ) {
uni . showToast ( {
title : '请先签名' ,
icon : 'none' ,
duration : 2000
} ) ;
return ;
2023-09-23 20:16:54 +08:00
} else {
2023-11-01 18:40:05 +08:00
let signId = that . sginId
2023-09-23 20:16:54 +08:00
uni . canvasToTempFilePath ( {
canvasId : 'mycanvas' ,
success : function ( res ) {
setTimeout ( function ( ) {
pathToBase64 ( res . tempFilePath )
. then ( base64 => {
compressImgBySize ( base64 , 1200 ) . then ( baseImg => {
// 输出图片base64
that . signImgUrl = baseImg
let date = new Date ( ) . getTime ( )
let webId = uuidv4 ( )
let webDate = api . getDate ( date )
2024-04-19 16:21:28 +08:00
// 供给签名,系解揽签名,指导员作业布置签名
if ( that . nextUrl == 'untieSign' || that . nextUrl == 'supplySign' || that . nextUrl == 'workAssignSign' ) {
let sql2 = ` DELETE FROM workSignTable WHERE bizId = ' ${ signId } '; `
sqlite . executeSqlCeshi ( sql2 ) . then ( ( ) => {
console . log ( '------' ) ;
} ) . catch ( ( error ) => {
// 在reject时执行的回调函数
console . error ( error ) ;
} ) ;
}
2024-05-09 11:12:03 +08:00
// 去除签名 -
if ( that . nextUrl == 'mixSign' ) {
signId = signId . split ( '-' )
signId = signId [ 0 ] + signId [ 1 ] + signId [ 2 ]
}
2023-09-23 20:16:54 +08:00
let sql =
2023-11-24 15:55:58 +08:00
` insert into workSignTable values(' ${ webId } ',' ${ that . vtpId } ',' ${ signId } ',' ${ that . signImgUrl } ',' ${ that . signTable } ',' ${ that . signType } ',' ${ that . vvyId } ',' ${ webDate } ') `
2023-09-23 20:16:54 +08:00
sqlite . executeSqlCeshi ( sql ) . then ( (
value ) => {
// 在resolve时执行的回调函数
let obj = {
tabsValue : that
2023-11-01 18:40:05 +08:00
. tabsValue ,
2023-09-23 20:16:54 +08:00
}
const params =
encodeURIComponent ( JSON
. stringify ( obj ) ) ;
uni . navigateTo ( {
url : ` /pages/shipWork/ ${ that . nextUrl } ?params= ${ params } `
} )
} ) . catch ( ( error ) => {
// 在reject时执行的回调函数
console . error ( error ) ;
} ) ;
} )
} )
. catch ( error => {
console . error ( error )
} )
} , 1000 )
}
} ) ;
2023-08-01 17:28:15 +08:00
}
2023-09-23 20:16:54 +08:00
} ,
2023-08-01 17:28:15 +08:00
}
} ;
< / script >
< style lang = "scss" scoped >
2023-12-22 17:48:52 +08:00
page {
background - color : # fff ;
}
2023-08-01 17:28:15 +08:00
. container {
2023-08-24 16:22:29 +08:00
height : calc ( 100 vh - 68 px ) ;
2023-08-01 17:28:15 +08:00
padding - bottom : 30 px ;
background - color : # fff ;
}
. sign - box {
2023-08-24 16:22:29 +08:00
width : 100 % ;
2023-08-01 17:28:15 +08:00
height : 90 % ;
2023-08-24 16:22:29 +08:00
margin - left : 10 % ;
2023-08-01 17:28:15 +08:00
display : flex ;
flex - direction : column ;
text - align : center ;
}
. sign - view {
height : 100 % ;
}
. sigh - btns {
display : flex ;
justify - content : center ;
2023-12-22 17:48:52 +08:00
width : 100 % ;
height : 80 px ;
background : # FFFFFF ;
box - shadow : 0 - 3 px 7 px 0 rgba ( 0 , 0 , 0 , 0.10 ) ;
position : fixed ;
bottom : 0 ;
2023-08-01 17:28:15 +08:00
}
. btn {
2023-12-22 17:48:52 +08:00
margin : 15.5 px 17 px ;
width : 200 px ;
height : 49 px ;
border - radius : 2 px ;
font - size : 18 px ;
text - align : center ;
line - height : 49 px ;
2023-08-01 17:28:15 +08:00
}
2023-12-22 17:48:52 +08:00
. qx {
background - color : # eee ;
}
. qc {
color : # 0067 CF ;
background - color : rgba ( 0 , 103 , 207 , 0.10 ) ;
2023-08-01 17:28:15 +08:00
}
2023-12-22 17:48:52 +08:00
. bc {
color : # fff ;
background : # 0067 CF ;
}
2023-08-01 17:28:15 +08:00
. mycanvas {
margin : auto 0 rpx ;
2023-12-22 17:48:52 +08:00
background - color : # fbfbfb ;
border : 1 px dashed # eee ;
2023-08-01 17:28:15 +08:00
}
. canvsborder {
border : 1 rpx solid # 333 ;
position : fixed ;
top : 0 ;
left : 10000 rpx ;
}
2023-07-24 16:56:46 +08:00
< / style >