特易招,招聘小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

240 lines
4.9 KiB

<template>
<view class="page">
<navbar title="电子合同"
leftClick
@leftClick="$utils.navigateBack"/>
<view style="padding: 25rpx;">
<canvas-drag ref="canvasRef"
id="canvas-drag"
:graph="graph"
:width="width"
:height="height"
bgColor="#fff"
enableUndo="true"></canvas-drag>
<!-- <canvas
canvas-id="mycanvas"
class="mycanvas"
v-if="!imagePath"
:style="{height : height + 'rpx', width : width + 'rpx'}"
disable-scroll="true"></canvas> -->
<image :src="imagePath"
v-if="imagePath"
style="width: 700rpx;"
mode="widthFix"></image>
</view>
<!-- <view class="uni-color-btn"
@click.stop="onChangeBgImage">
导入合同
</view> -->
<view class="uni-color-btn"
@click.stop="toSignature">
签名
</view>
<!-- <view class="uni-color-btn"
@click.stop="onExportJSON">
保存合同
</view> -->
<view class="uni-color-btn"
@click.stop="showPDF">
查看完整内容
</view>
</view>
</template>
<script>
import canvasDrag from "../components/canvas-drag/index";
import setData from "../components/canvas-drag/setData.js";
export default {
components: {
canvasDrag
},
mixins : [setData],
data() {
return {
id : 0,
detail : {},
height: 750,
width: 700,
ctx : null,
imagePath : 0,
}
},
onLoad({id}) {
this.id = id
this.getDetail()
},
onShow() {
this.initCanvas()
this.syntheticSignature()
},
methods: {
// 获取合同内容
getDetail(){
let data = {
contractId: this.id
}
if (uni.getStorageSync('token')) {
// data.token = uni.getStorageSync('token')
}
this.$api('queryContracById', data, res => {
if (res.code == 200) {
this.detail = res.result
}
})
},
showPDF(){
uni.downloadFile({
url : this.detail.contract,
success : res => {
uni.openDocument({
filePath: res.tempFilePath,
})
}
})
},
initCanvas() {
this.ctx = uni.createCanvasContext("mycanvas")
},
// 去签名
toSignature(){
console.log('toSignature');
uni.showModal({
title: '签署前请熟知合同完整内容!',
cancelText: '已知晓',
confirmText: '查看完整内容',
success : e => {
if(e.confirm){
this.showPDF()
}else{
uni.navigateTo({
url: `/pages_order/contract/electronicSignature?id=${this.id}&signature=1`
})
}
}
})
},
// 导出合同
onExportJSON() {
uni.showLoading({
title: '保存中...'
})
this.$refs.canvasRef.exportFun().then(image => {
console.log(image);
uni.hideLoading()
// this.imagePath = image
uni.previewImage({
urls: [image],
current: 0,
})
}).catch(e => {
uni.hideLoading()
console.error(e);
});
},
/**
* 导入合同
*/
onChangeBgImage() {
let self = this
wx.chooseImage({
success: res => {
uni.getImageInfo({
src: res.tempFilePaths[0],
success: image => {
let allwh = image.height + image.width
let imgw = (image.width / allwh).toFixed(2)
let imgh = (image.height / allwh).toFixed(2)
self.height = imgh * Math.ceil(this.width / imgw)
// this.width = image.width
// this.height = image.height
self.$nextTick(() => {
this.$refs.canvasRef.changeBgImage(image.path)
// this.ctx.drawImage(image.path, 0, 0, this.ctx.width, this.ctx.height)
// this.ctx.stroke();
// this.ctx.draw(false, () => {
// wx.canvasToTempFilePath({
// canvasId: 'mycanvas',
// success: res => {
// // this.imagePath = res.tempFilePath
// uni.previewImage({
// urls: [res.tempFilePath],
// current: 0,
// })
// },
// fail: e => {
// }
// }, this);
// });
})
}
})
}
});
},
// 合成签名
syntheticSignature(){
let url = uni.getStorageSync('electronicSignature')
if(!url) return
uni.removeStorageSync('electronicSignature')
let graph = {}
if(this.role){
graph = JSON.parse(this.form.bossPosition)
this.detail.bossImage = url
this.detail.bossStatus = 1
}else{
graph = JSON.parse(this.form.employeePosition)
this.detail.employeeImage = url
this.detail.employeeStatus = 1
}
for(let k in graph){
graph[k] = this.$utils.screenSystemInfoInt(graph[k]) - 0
}
this.setData({
graph: {
w: graph.w,
h: graph.h,
x : graph.x,
y : graph.y,
type: 'image',
url,
permitSelected : true,
}
});
this.$nextTick(() => {
this.onExportJSON()
})
},
}
}
</script>
<style scoped lang="scss">
.page{
.mycanvas{
background-color: #fff;
}
}
</style>