<template>
|
|
<div class="contain">
|
|
<navbar
|
|
title="电子签名"
|
|
v-if="!crosswise"
|
|
leftClick
|
|
@leftClick="$utils.navigateBack"/>
|
|
|
|
<view
|
|
class="electronic-contract"
|
|
:class="{crosswise}">
|
|
<canvas
|
|
canvas-id="mycanvas"
|
|
class="mycanvas"
|
|
:style="{height, width}"
|
|
disable-scroll="true"
|
|
@touchstart="ontouchstart"
|
|
@touchmove="touchmove"></canvas>
|
|
<view class="title"
|
|
v-if="crosswise">
|
|
请旋转屏幕,按文字方向开始签名
|
|
</view>
|
|
</view>
|
|
|
|
<view class="btn-list">
|
|
<view class="uni-color-btn" @click="clear">
|
|
清除
|
|
</view>
|
|
<view class="uni-color-btn" @click="close">
|
|
完成
|
|
</view>
|
|
</view>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
oc: null,
|
|
points: [], //路径点集合
|
|
show: true,
|
|
height : '350rpx',
|
|
width : '700rpx',
|
|
crosswise : false,
|
|
options : {},
|
|
detail : {},
|
|
}
|
|
},
|
|
onReady() {
|
|
this.open()
|
|
},
|
|
onLoad(options) {
|
|
this.options = options
|
|
},
|
|
onShow() {
|
|
this.initPM()
|
|
this.getDetail()
|
|
},
|
|
methods: {
|
|
// 获取合同内容
|
|
getDetail(){
|
|
let data = {
|
|
contractId: this.options.id
|
|
}
|
|
if (uni.getStorageSync('token')) {
|
|
// data.token = uni.getStorageSync('token')
|
|
}
|
|
this.$api('queryContracById', data, res => {
|
|
if (res.code == 200) {
|
|
this.detail = res.result
|
|
}
|
|
})
|
|
},
|
|
initPM(){
|
|
if(!this.crosswise) return
|
|
let info = uni.getSystemInfoSync();
|
|
console.log(info.windowWidth);
|
|
console.log(info.windowHeight);
|
|
},
|
|
open() {
|
|
this.initCanvas();
|
|
},
|
|
async save(imagePath){
|
|
let graph = {}, pageNo = 1;
|
|
|
|
if(this.role){
|
|
graph = JSON.parse(this.detail.bossPosition)
|
|
this.detail.bossImage = imagePath
|
|
this.detail.bossStatus = 1
|
|
pageNo = this.detail.bossPage
|
|
}else{
|
|
graph = JSON.parse(this.detail.employeePosition)
|
|
this.detail.employeeImage = imagePath
|
|
this.detail.employeeStatus = 1
|
|
pageNo = this.detail.employeePage
|
|
}
|
|
|
|
for(let k in graph){
|
|
graph[k] = (parseFloat(graph[k]) / 700.0).toFixed(2)
|
|
}
|
|
|
|
let res = await this.$api('signPdf', {
|
|
imageHeight : graph.h,
|
|
imageWidth : graph.w,
|
|
positionX : graph.x,
|
|
positonY : graph.y,
|
|
// pdfPath : this.detail.contract,
|
|
// imagePath,
|
|
pdfPath : 'https://augcl.oss-cn-guangzhou.aliyuncs.com/test/mytest.pdf',
|
|
imagePath : 'https://augcl.oss-cn-guangzhou.aliyuncs.com/test/image.png',
|
|
pageNo : parseInt(pageNo) + 1,
|
|
})
|
|
|
|
// uni.downloadFile({
|
|
// url : res.result,
|
|
// success : res => {
|
|
// uni.openDocument({
|
|
// filePath: res.tempFilePath,
|
|
// })
|
|
// }
|
|
// })
|
|
|
|
// return
|
|
|
|
delete this.detail.createBy
|
|
delete this.detail.createTime
|
|
delete this.detail.updateBy
|
|
delete this.detail.updateTime
|
|
|
|
this.detail.contract = res.result
|
|
|
|
this.$api('updateContract', this.detail)
|
|
.then(res => {
|
|
if(res.code == 200){
|
|
uni.navigateBack(-1)
|
|
}
|
|
})
|
|
|
|
},
|
|
close() {
|
|
let self = this
|
|
uni.canvasToTempFilePath({
|
|
canvasId: "mycanvas",
|
|
success: (res) => {
|
|
console.log(res.tempFilePath);
|
|
const imagePath = res.tempFilePath;
|
|
|
|
// uni.setStorageSync('electronicSignature', imagePath)
|
|
// let o = this.options
|
|
// uni.navigateBack(-1)
|
|
|
|
self.$Oss.ossUpload(imagePath).then(url => {
|
|
self.save(url)
|
|
})
|
|
|
|
},
|
|
fail(error) {
|
|
console.error("转化图片错误!", error)
|
|
}
|
|
});
|
|
},
|
|
|
|
initCanvas() {
|
|
this.oc = uni.createCanvasContext("mycanvas");
|
|
},
|
|
|
|
ontouchstart(e) {
|
|
this.points = []
|
|
|
|
const startX = e.changedTouches[0].x;
|
|
const startY = e.changedTouches[0].y;
|
|
|
|
let startPoint = {
|
|
X: startX,
|
|
Y: startY,
|
|
};
|
|
this.points.push(startPoint);
|
|
},
|
|
|
|
touchmove(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(); //绘制路径
|
|
}
|
|
},
|
|
|
|
draw() {
|
|
if (this.points.length < 2) return;
|
|
|
|
this.oc.beginPath();
|
|
this.oc.moveTo(this.points[0].X, this.points[0].Y);
|
|
|
|
// for (let i = 1; i < this.points.length; i++) {
|
|
// let point = this.points[i];
|
|
// this.oc.lineTo(point.X, point.Y);
|
|
// }
|
|
|
|
this.oc.lineTo(this.points[1].X, this.points[1].Y);
|
|
|
|
this.points.shift()
|
|
|
|
this.oc.setStrokeStyle('#000000');
|
|
this.oc.setLineWidth(5);
|
|
this.oc.setLineCap('round');
|
|
this.oc.setLineJoin('round');
|
|
this.oc.stroke();
|
|
this.oc.draw(true);
|
|
},
|
|
//清空画布
|
|
clear() {
|
|
let that = this;
|
|
uni.getSystemInfo({
|
|
success: (res) => {
|
|
let canvasw = res.windowWidth;
|
|
let canvash = res.windowHeight;
|
|
that.oc.clearRect(0, 0, canvasw, canvash);
|
|
that.oc.draw(true);
|
|
},
|
|
});
|
|
},
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.contain {
|
|
position: relative;
|
|
.mycanvas {
|
|
background-color: #fff;
|
|
border-radius: 20rpx;
|
|
}
|
|
.electronic-contract{
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
margin: 25rpx;
|
|
}
|
|
.crosswise{
|
|
.title{
|
|
writing-mode: vertical-lr; /* 垂直从上到下 */
|
|
transform: skewY(180deg); /* 颠倒文本 */
|
|
display: inline-block; /* 需要设置为内联块 */
|
|
}
|
|
}
|
|
.btn-list {
|
|
display: flex;
|
|
padding: 20rpx;
|
|
justify-content: space-around;
|
|
|
|
.uni-color-btn {
|
|
border-radius: 10rpx;
|
|
margin: 0;
|
|
padding: 20rpx 40rpx;
|
|
}
|
|
}
|
|
}
|
|
</style>
|