| 
					
				 | 
			
			
				@@ -0,0 +1,210 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  <view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    <view class="wrapper"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <view class="handBtn"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <view class="left"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <u-button @click="retDraw">重写</u-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <u-button @click="previewCanvasImg">预览</u-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <view class="right"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          <u-button @click="subCanvas" type="primary">完成</u-button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <view class="handCenter"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <canvas 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          class="handWriting" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          :disable-scroll="true" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          @touchstart="uploadScaleStart" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          @touchmove="uploadScaleMove" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          canvas-id="handWriting" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ></canvas> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      <view class="handRight"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        <view class="handTitle">请签名</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  </view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      canvasName: 'handWriting', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      ctx: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      startX: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      startY: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      canvasWidth: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      canvasHeight: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      selectColor: 'black', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      lineColor: '#1A1A1A', // 颜色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      lineSize: 5, // 笔记倍数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      isWrite: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  onLoad() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.ctx = uni.createCanvasContext(this.canvasName) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    this.$nextTick(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      uni 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .createSelectorQuery() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .select('.handCenter') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .boundingClientRect(rect => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.canvasWidth = rect.width 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.canvasHeight = rect.height 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          /* 将canvas背景设置为 白底,不设置  导出的canvas的背景为透明 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.setCanvasBg('#fff') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        .exec() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 笔迹开始 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uploadScaleStart(e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.startX = e.changedTouches[0].x 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.startY = e.changedTouches[0].y 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //设置画笔参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //画笔颜色 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.setStrokeStyle(this.lineColor) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //设置线条粗细 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.setLineWidth(this.lineSize) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //设置线条的结束端点样式 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.setLineCap('round') //'butt'、'round'、'square' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //开始画笔 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.beginPath() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 笔迹移动 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    uploadScaleMove(e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //取点 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let temX = e.changedTouches[0].x 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      let temY = e.changedTouches[0].y 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //画线条 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.moveTo(this.startX, this.startY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.lineTo(temX, temY) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.stroke() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.startX = temX 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.startY = temY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.draw(true) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.isWrite = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 重写 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    retDraw() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.clearRect(0, 0, 700, 730) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.draw() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //设置canvas背景 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.setCanvasBg('#fff') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.isWrite = false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 完成 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    subCanvas() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (!this.isWrite) return this.$toast('请签名') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      uni.canvasToTempFilePath({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        canvasId: 'handWriting', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fileType: 'png', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        quality: 1, //图片质量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        success: res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          uni.$emit('finishSign', res.tempFilePath) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          this.$backPage(1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    // 预览 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    previewCanvasImg() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      uni.canvasToTempFilePath({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        canvasId: 'handWriting', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        fileType: 'jpg', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        quality: 1, //图片质量 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        success(res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          uni.previewImage({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            urls: [res.tempFilePath] //预览图片 数组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //设置canvas背景色  不设置  导出的canvas的背景为透明 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    //@params:字符串  color 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    setCanvasBg(color) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      /* 将canvas背景设置为 白底,不设置  导出的canvas的背景为透明 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //rect() 参数说明  矩形路径左上角的横坐标,左上角的纵坐标, 矩形路径的宽度, 矩形路径的高度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      //这里是 canvasHeight - 4 是因为下边盖住边框了,所以手动减了写 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.rect(0, 0, this.canvasWidth, this.canvasHeight - 4) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      // ctx.setFillStyle('red') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.setFillStyle(color) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.fill() //设置填充 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.ctx.draw() //开画 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<style scoped lang="scss"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+page { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  background: #fbfbfb; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  height: auto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  overflow: hidden; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.wrapper { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  height: 95vh; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  margin: 30rpx 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  overflow: hidden; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  align-content: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  flex-direction: row; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  justify-content: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  font-size: 28rpx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.handWriting { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  background: #fff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  height: 95vh; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.handRight { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: inline-flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.handCenter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  border: 4rpx dashed #e9e9e9; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  flex: 5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  overflow: hidden; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  box-sizing: border-box; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.handTitle { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  transform: rotate(90deg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  flex: 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  color: #666; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.handBtn button { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  font-size: 28rpx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+.handBtn { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  height: 95vh; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  flex-direction: column; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  justify-content: space-between; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  flex: 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  .left { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    display: flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    flex-direction: column; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  ::v-deep .u-button { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    flex-shrink: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    transform: rotate(90deg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    margin-bottom: 30rpx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    margin-top: 30rpx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</style> 
			 |