java-mall-app/seller/order/autograph.vue
2024-11-01 16:35:40 +08:00

277 lines
5.6 KiB
Vue

<template>
<view class='contents'>
<canvas class='firstCanvas' canvas-id="firstCanvas" @touchmove='move' @touchstart='start($event)' @touchend='end'
@touchcancel='cancel' @longtap='tap' disable-scroll='true' @error='error'>
</canvas>
<view class="caozuo">
<view class="chongqian" @tap='clearClick'>
{{__('重签')}}
</view>
<view class="over" @tap="overSign">
{{__('完成签名')}}
</view>
</view>
</view>
</template>
<script>
import {
mapState,
mapMutations
} from 'vuex'
var content = null;
var touchs = [];
var canvasw = 0;
var canvash = 0;
var _that;
//获取系统信息
uni.getSystemInfo({
success: function(res) {
canvasw = res.windowWidth;
canvash = res.windowHeight;
},
})
export default {
data() {
return {
signImage: '',
isEnd: false, // 是否签名
order_id:'',
autograph:''
}
},
computed: mapState(['Config', 'StateCode', 'notice', 'plantformInfo', 'shopInfo', 'userInfo', 'hasLogin']),
methods: {
overSign: function() {
var that = this;
if (this.isEnd) {
uni.canvasToTempFilePath({
canvasId: 'firstCanvas',
fileType: "png",
success: function(res) {
//打印图片路径
//console.log(res)
that.$.showLoading();
var r = res.tempFilePath;
that.$.uploadFile({
url: that.Config.URL.upload,
method: "POST",
filePath: r[0],
name: "upfile",
// header: {
// "content-type": "multipart/form-data"
// },
success: function(n) {
//console.log(n.data)
that.$.hideLoading();
var up_res = that.$.parseJSON(n.data);
var s = up_res.data.url;
//console.log(s)
that.setData({
autograph: s
})
that.setautograph()
},
fail: function(e) {
that.$.hideLoading()
},
complete: function(e) {
that.$.hideLoading()
}
})
//console.log('完成签名')
//设置图片
_that.signImage = res.tempFilePath
}
})
} else {
uni.showToast({
title: that.__('请先完成签名'),
icon: "none",
duration: 1500,
mask: true
})
}
},
setautograph: function() {
var that =this;
var params = {
order_id: that.order_id,
autograph: that.autograph
}
that.$.request({
url: this.Config.URL.seller.autograph,
data: params,
success: function(data, status, msg, code) {
if(status ==200){
that.$.confirm(that.__("收款成功"), function (a) {
that.getOrderlist()
})
}
}
})
},
// 画布的触摸移动开始手势响应
start: function(event) {
//console.log("触摸开始" + event.changedTouches[0].x)
//console.log("触摸开始" + event.changedTouches[0].y)
//获取触摸开始的 x,y
let point = {
x: event.changedTouches[0].x,
y: event.changedTouches[0].y
}
// //console.log(point)
touchs.push(point);
},
// 画布的触摸移动手势响应
move: function(e) {
let point = {
x: e.touches[0].x,
y: e.touches[0].y
}
// //console.log(point)
touchs.push(point)
if (touchs.length >= 2) {
this.draw(touchs)
}
},
// 画布的触摸移动结束手势响应
end: function(e) {
//console.log("触摸结束" + e)
// 设置为已经签名
this.isEnd = true
// 清空轨迹数组
for (let i = 0; i < touchs.length; i++) {
touchs.pop()
}
},
// 画布的触摸取消响应
cancel: function(e) {
//console.log("触摸取消" + e)
},
// 画布的长按手势响应
tap: function(e) {
//console.log("长按手势" + e)
},
error: function(e) {
//console.log("画布触摸错误" + e)
},
//绘制
draw: function(touchs) {
//console.log(touchs[0],touchs[1])
let point1 = touchs[0]
let point2 = touchs[1]
touchs.shift()
content.moveTo(point1.x, point1.y)
content.lineTo(point2.x, point2.y)
content.stroke()
content.draw(true)
},
//清除操作
clearClick: function() {
// 设置为未签名
this.isEnd = false
//清除画布
content.clearRect(0, 0, canvasw, canvash)
content.draw(true)
},
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function(options) {
_that = this
//获得Canvas的上下文
content = wx.createCanvasContext('firstCanvas')
//设置线的颜色
content.setStrokeStyle("#000")
//设置线的宽度
content.setLineWidth(5)
//设置线两端端点样式更加圆润
content.setLineCap('round')
//设置两条线连接处更加圆润
content.setLineJoin('round')
this.setData({
order_id:options.order_id
})
},
}
</script>
<style>
.ts {
color: #FF485D;
font-size: 30rpx;
height: 100rpx;
line-height: 100rpx;
padding-left: 20rpx;
}
canvas {
background-color: #DDDDDD;
width: 700rpx;
margin: 0 25rpx;
height: calc(100vh - 140rpx);
}
.contents {
padding-top: 20rpx;
padding-bottom: 100rpx;
box-sizing: border-box;
}
#signatureImg {
background-color: #EEEEEE;
}
.caozuo {
display: flex;
height: 100rpx;
width: 750rpx;
position: fixed;
left: 0;
bottom: 0;
}
.caozuo view {
width: 375rpx;
text-align: center;
height: 100rpx;
line-height: 100rpx;
color: #FFFFFF;
}
.caozuo view:active {
background-color: #CCCCCC;
color: #333333;
}
.chongqian {
background-color: #FF8F58;
}
.over {
background-color: #0599D7;
}
</style>