diff --git a/app.json b/app.json
index 29a7aec..f204f24 100644
--- a/app.json
+++ b/app.json
@@ -32,7 +32,9 @@
"pages": [
"renewalApplication/renewalApplication",
"policy/index/index",
- "policy/detail/detail"
+ "policy/detail/detail",
+ "checkOutConfirm/index/index",
+ "checkOutConfirm/sign/sign"
]
}
],
diff --git a/project.private.config.json b/project.private.config.json
index 6f01b2f..b260d13 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -14,6 +14,13 @@
"condition": {
"miniprogram": {
"list": [
+ {
+ "name": "subpages/index/checkOutConfirm/sign/sign",
+ "pathName": "subpages/index/checkOutConfirm/sign/sign",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
{
"name": "subpages/OCRCard/pages/deposit/deposit",
"pathName": "subpages/OCRCard/pages/deposit/deposit",
diff --git a/subpages/index/checkOutConfirm/index/index.js b/subpages/index/checkOutConfirm/index/index.js
new file mode 100644
index 0000000..ee42168
--- /dev/null
+++ b/subpages/index/checkOutConfirm/index/index.js
@@ -0,0 +1,66 @@
+// subpages/index/checkOutConfirm/index/index.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload() {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh() {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom() {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage() {
+
+ }
+})
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/index/index.json b/subpages/index/checkOutConfirm/index/index.json
new file mode 100644
index 0000000..3e703bb
--- /dev/null
+++ b/subpages/index/checkOutConfirm/index/index.json
@@ -0,0 +1,11 @@
+{
+ "navigationStyle": "custom",
+ "usingComponents": {
+ "navigationBar": "/components/navigationBar/navigationBar",
+ "van-image": "@vant/weapp/image/index",
+ "van-button": "@vant/weapp/button/index",
+ "van-tab": "@vant/weapp/tab/index",
+ "van-tabs": "@vant/weapp/tabs/index",
+ "van-divider": "@vant/weapp/divider/index"
+ }
+ }
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/index/index.wxml b/subpages/index/checkOutConfirm/index/index.wxml
new file mode 100644
index 0000000..2a83026
--- /dev/null
+++ b/subpages/index/checkOutConfirm/index/index.wxml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/index/index.wxss b/subpages/index/checkOutConfirm/index/index.wxss
new file mode 100644
index 0000000..835a8a4
--- /dev/null
+++ b/subpages/index/checkOutConfirm/index/index.wxss
@@ -0,0 +1 @@
+/* subpages/index/checkOutConfirm/index/index.wxss */
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/sign/sign.js b/subpages/index/checkOutConfirm/sign/sign.js
new file mode 100644
index 0000000..1be4ae1
--- /dev/null
+++ b/subpages/index/checkOutConfirm/sign/sign.js
@@ -0,0 +1,446 @@
+// subpages/index/checkOutConfirm/sign/sign.js
+
+
+Page({
+ data: {
+ canvasName: 'signCanvas',
+ ctx: '',
+ canvas: '',
+ canvasWidth: 0,
+ canvasHeight: 0,
+ transparent: 1,
+ selectColor: 'black',
+ lineColor: '#1A1A1A',
+ lineSize: 1.5,
+ lineMin: 0.5,
+ lineMax: 4,
+ pressure: 1,
+ smoothness: 60,
+ currentPoint: {},
+ currentLine: [],
+ firstTouch: true,
+ radius: 1,
+ cutArea: { top: 0, right: 0, bottom: 0, left: 0 },
+ bethelPoint: [],
+ lastPoint: 0,
+ chirography: [],
+ currentChirography: {},
+ linePrack: [],
+ isDraw: false,
+ upPageNumber: 0,
+ offCanvas: '',
+ offCtx: '',
+ dpr: ''
+ },
+
+ onLoad: function (options) {
+ this.data.dpr = wx.getSystemInfoSync().pixelRatio
+ const query = wx.createSelectorQuery()
+ query
+ .select('.handCenter')
+ .boundingClientRect(rect => {
+ this.data.canvasWidth = rect.width * this.data.dpr
+ this.data.canvasHeight = rect.height * this.data.dpr
+ })
+ .exec()
+ const query1 = wx.createSelectorQuery()
+ query1
+ .select('#signCanvas')
+ .fields({ node: true, size: true })
+ .exec(res => {
+ const canvas = res[0].node
+ this.data.ctx = canvas.getContext('2d')
+ canvas.width = this.data.canvasWidth
+ canvas.height = this.data.canvasHeight
+
+ this.data.canvas = canvas
+
+ this.data.ctx.scale(this.data.dpr, this.data.dpr)
+ this.setCanvasBg('#fff')
+ })
+ const query2 = wx.createSelectorQuery()
+ query2
+ .select('#offCanvas')
+ .fields({ node: true, size: true })
+ .exec(res => {
+ const canvas = res[0].node
+ const ctx = canvas.getContext('2d')
+ canvas.width = this.data.canvasHeight
+ canvas.height = this.data.canvasWidth
+ this.data.offCanvas = canvas
+ this.data.offCtx = ctx
+ this.data.offCtx.scale(this.data.dpr, this.data.dpr)
+ })
+ },
+
+ retDraw() {
+ this.data.ctx.clearRect(0, 0, 700, 730)
+ this.setCanvasBg('#fff')
+ this.data.isDraw = false
+ this.data.currentPoint = {}
+ },
+
+ pointToLine(line) {
+ this.calcBethelLine(line)
+ return
+ },
+
+ uploadScaleStart(e) {
+ if (e.type != 'touchstart') return false
+ let ctx = this.data.ctx
+ ctx.fillStyle = this.data.lineColor
+ ctx.globalAlpha = this.data.transparent
+ let currentPoint = {
+ x: e.touches[0].x,
+ y: e.touches[0].y
+ }
+ let currentLine = this.data.currentLine
+ currentLine.unshift({
+ time: new Date().getTime(),
+ dis: 0,
+ x: currentPoint.x,
+ y: currentPoint.y
+ })
+ this.setData({
+ currentPoint
+ })
+ if (this.data.firstTouch) {
+ this.setData({
+ cutArea: {
+ top: currentPoint.y,
+ right: currentPoint.x,
+ bottom: currentPoint.y,
+ left: currentPoint.x
+ },
+ firstTouch: false
+ })
+ }
+ this.pointToLine(currentLine)
+ },
+
+ uploadScaleMove(e) {
+ if (e.type != 'touchmove') return false
+ if (e.cancelable) {
+
+ if (!e.defaultPrevented) {
+ e.preventDefault()
+ }
+ }
+ let point = {
+ x: e.touches[0].x,
+ y: e.touches[0].y
+ }
+
+ if (point.y < this.data.cutArea.top) {
+ this.data.cutArea.top = point.y
+ }
+ if (point.y < 0) this.data.cutArea.top = 0
+
+ if (point.x > this.data.cutArea.right) {
+ this.data.cutArea.right = point.x
+ }
+ if (this.data.canvasWidth - point.x <= 0) {
+ this.data.cutArea.right = this.data.canvasWidth
+ }
+ if (point.y > this.data.cutArea.bottom) {
+ this.data.cutArea.bottom = point.y
+ }
+ if (this.data.canvasHeight - point.y <= 0) {
+ this.data.cutArea.bottom = this.data.canvasHeight
+ }
+ if (point.x < this.data.cutArea.left) {
+ this.data.cutArea.left = point.x
+ }
+ if (point.x < 0) this.data.cutArea.left = 0
+
+ this.setData({
+ lastPoint: this.data.currentPoint,
+ currentPoint: point
+ })
+ let currentLine = this.data.currentLine
+ currentLine.unshift({
+ time: new Date().getTime(),
+ dis: this.distance(this.data.currentPoint, this.data.lastPoint),
+ x: point.x,
+ y: point.y
+ })
+ // this.setData({
+ // currentLine
+ // })
+ this.pointToLine(currentLine)
+ },
+
+ uploadScaleEnd(e) {
+ if (e.type != 'touchend') return 0
+ let point = {
+ x: e.changedTouches[0].x,
+ y: e.changedTouches[0].y
+ }
+ this.setData({
+ lastPoint: this.data.currentPoint,
+ currentPoint: point
+ })
+ let currentLine = this.data.currentLine
+ currentLine.unshift({
+ time: new Date().getTime(),
+ dis: this.distance(this.data.currentPoint, this.data.lastPoint),
+ x: point.x,
+ y: point.y
+ })
+ // this.setData({
+ // currentLine
+ // })
+ if (currentLine.length > 2) {
+ var info =
+ (currentLine[0].time - currentLine[currentLine.length - 1].time) / currentLine.length
+ }
+
+ this.pointToLine(currentLine)
+ var currentChirography = {
+ lineSize: this.data.lineSize,
+ lineColor: this.data.lineColor
+ }
+ var chirography = this.data.chirography
+ chirography.unshift(currentChirography)
+ this.setData({
+ chirography
+ })
+ var linePrack = this.data.linePrack
+ linePrack.unshift(this.data.currentLine)
+ this.setData({
+ linePrack,
+ currentLine: []
+ })
+ this.data.isDraw = true
+ },
+
+ calcBethelLine(line) {
+ if (line.length <= 1) {
+ line[0].r = this.data.radius
+ return
+ }
+ let x0,
+ x1,
+ x2,
+ y0,
+ y1,
+ y2,
+ r0,
+ r1,
+ r2,
+ len,
+ lastRadius,
+ dis = 0,
+ time = 0,
+ curveValue = 0.5
+ if (line.length <= 2) {
+ x0 = line[1].x
+ y0 = line[1].y
+ x2 = line[1].x + (line[0].x - line[1].x) * curveValue
+ y2 = line[1].y + (line[0].y - line[1].y) * curveValue
+ x1 = x0 + (x2 - x0) * curveValue
+ y1 = y0 + (y2 - y0) * curveValue
+ } else {
+ x0 = line[2].x + (line[1].x - line[2].x) * curveValue
+ y0 = line[2].y + (line[1].y - line[2].y) * curveValue
+ x1 = line[1].x
+ y1 = line[1].y
+ x2 = x1 + (line[0].x - x1) * curveValue
+ y2 = y1 + (line[0].y - y1) * curveValue
+ }
+
+ len = this.distance({ x: x2, y: y2 }, { x: x0, y: y0 })
+ lastRadius = this.data.radius
+ for (let n = 0; n < line.length - 1; n++) {
+ dis += line[n].dis
+ time += line[n].time - line[n + 1].time
+ if (dis > this.data.smoothness) break
+ }
+ this.setData({
+ radius:
+ Math.min((time / len) * this.data.pressure + this.data.lineMin, this.data.lineMax) *
+ this.data.lineSize
+ })
+ line[0].r = this.data.radius
+
+ if (line.length <= 2) {
+ r0 = (lastRadius + this.data.radius) / 2
+ r1 = r0
+ r2 = r1
+ } else {
+ r0 = (line[2].r + line[1].r) / 2
+ r1 = line[1].r
+ r2 = (line[1].r + line[0].r) / 2
+ }
+ let n = 5
+ let point = []
+ for (let i = 0; i < n; i++) {
+ let t = i / (n - 1)
+ let x = (1 - t) * (1 - t) * x0 + 2 * t * (1 - t) * x1 + t * t * x2
+ let y = (1 - t) * (1 - t) * y0 + 2 * t * (1 - t) * y1 + t * t * y2
+ let r = lastRadius + ((this.data.radius - lastRadius) / n) * i
+ point.push({ x: x, y: y, r: r })
+ if (point.length == 3) {
+ let a = this.ctaCalc(
+ point[0].x,
+ point[0].y,
+ point[0].r,
+ point[1].x,
+ point[1].y,
+ point[1].r,
+ point[2].x,
+ point[2].y,
+ point[2].r
+ )
+ a[0].color = this.data.lineColor
+ this.bethelDraw(a, 1)
+ point = [{ x: x, y: y, r: r }]
+ }
+ }
+ this.setData({
+ currentLine: line
+ })
+ },
+
+ distance(a, b) {
+ let x = b.x - a.x
+ let y = b.y - a.y
+ return Math.sqrt(x * x + y * y)
+ },
+
+ ctaCalc(x0, y0, r0, x1, y1, r1, x2, y2, r2) {
+ let a = [],
+ vx01,
+ vy01,
+ norm,
+ n_x0,
+ n_y0,
+ vx21,
+ vy21,
+ n_x2,
+ n_y2
+ vx01 = x1 - x0
+ vy01 = y1 - y0
+ norm = Math.sqrt(vx01 * vx01 + vy01 * vy01 + 0.0001) * 2
+ vx01 = (vx01 / norm) * r0
+ vy01 = (vy01 / norm) * r0
+ n_x0 = vy01
+ n_y0 = -vx01
+ vx21 = x1 - x2
+ vy21 = y1 - y2
+ norm = Math.sqrt(vx21 * vx21 + vy21 * vy21 + 0.0001) * 2
+ vx21 = (vx21 / norm) * r2
+ vy21 = (vy21 / norm) * r2
+ n_x2 = -vy21
+ n_y2 = vx21
+ a.push({ mx: x0 + n_x0, my: y0 + n_y0, color: '#1A1A1A' })
+ a.push({
+ c1x: x1 + n_x0,
+ c1y: y1 + n_y0,
+ c2x: x1 + n_x2,
+ c2y: y1 + n_y2,
+ ex: x2 + n_x2,
+ ey: y2 + n_y2
+ })
+ a.push({
+ c1x: x2 + n_x2 - vx21,
+ c1y: y2 + n_y2 - vy21,
+ c2x: x2 - n_x2 - vx21,
+ c2y: y2 - n_y2 - vy21,
+ ex: x2 - n_x2,
+ ey: y2 - n_y2
+ })
+ a.push({
+ c1x: x1 - n_x2,
+ c1y: y1 - n_y2,
+ c2x: x1 - n_x0,
+ c2y: y1 - n_y0,
+ ex: x0 - n_x0,
+ ey: y0 - n_y0
+ })
+ a.push({
+ c1x: x0 - n_x0 - vx01,
+ c1y: y0 - n_y0 - vy01,
+ c2x: x0 + n_x0 - vx01,
+ c2y: y0 + n_y0 - vy01,
+ ex: x0 + n_x0,
+ ey: y0 + n_y0
+ })
+ a[0].mx = a[0].mx.toFixed(1)
+ a[0].mx = parseFloat(a[0].mx)
+ a[0].my = a[0].my.toFixed(1)
+ a[0].my = parseFloat(a[0].my)
+ for (let i = 1; i < a.length; i++) {
+ a[i].c1x = a[i].c1x.toFixed(1)
+ a[i].c1x = parseFloat(a[i].c1x)
+ a[i].c1y = a[i].c1y.toFixed(1)
+ a[i].c1y = parseFloat(a[i].c1y)
+ a[i].c2x = a[i].c2x.toFixed(1)
+ a[i].c2x = parseFloat(a[i].c2x)
+ a[i].c2y = a[i].c2y.toFixed(1)
+ a[i].c2y = parseFloat(a[i].c2y)
+ a[i].ex = a[i].ex.toFixed(1)
+ a[i].ex = parseFloat(a[i].ex)
+ a[i].ey = a[i].ey.toFixed(1)
+ a[i].ey = parseFloat(a[i].ey)
+ }
+ return a
+ },
+
+ bethelDraw(point, is_fill, color) {
+ let ctx = this.data.ctx
+ ctx.beginPath()
+ ctx.moveTo(point[0].mx, point[0].my)
+ if (undefined != color) {
+ ctx.fillStyle = color
+ ctx.strokeStyle = color
+ } else {
+ ctx.fillStyle = point[0].color
+ ctx.strokeStyle = point[0].color
+ }
+ for (let i = 1; i < point.length; i++) {
+ ctx.bezierCurveTo(
+ point[i].c1x,
+ point[i].c1y,
+ point[i].c2x,
+ point[i].c2y,
+ point[i].ex,
+ point[i].ey
+ )
+ }
+ ctx.stroke()
+ if (undefined != is_fill) {
+ ctx.fill()
+ }
+ },
+
+ setCanvasBg(color) {
+ this.data.ctx.rect(0, 0, this.data.canvasWidth, this.data.canvasHeight - 4)
+ this.data.ctx.fillStyle = color
+ this.data.ctx.fill()
+ },
+
+ subCanvas() {
+ if (Object.keys(this.data.currentPoint).length == 0) {
+ wx.showModal({
+ title: "提示",
+ content: "签名内容不能为空!",
+ showCancel: false
+ });
+ } else {
+ console.log('========sub')
+ let imgSrc = this.data.canvas.toDataURL('image/png', 1)
+ console.log(imgSrc);
+ wx.showLoading({
+ title: '正在跳转',
+ })
+ setTimeout(function () {
+ wx.hideLoading()
+ wx.navigateTo({
+ url: '/subpages/index/checkOutConfirm/index/index',
+ })
+ }, 1500)
+ }
+
+ },
+})
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/sign/sign.json b/subpages/index/checkOutConfirm/sign/sign.json
new file mode 100644
index 0000000..3928faa
--- /dev/null
+++ b/subpages/index/checkOutConfirm/sign/sign.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/sign/sign.wxml b/subpages/index/checkOutConfirm/sign/sign.wxml
new file mode 100644
index 0000000..5bb40a4
--- /dev/null
+++ b/subpages/index/checkOutConfirm/sign/sign.wxml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 请签字
+
+
+
+
+
\ No newline at end of file
diff --git a/subpages/index/checkOutConfirm/sign/sign.wxss b/subpages/index/checkOutConfirm/sign/sign.wxss
new file mode 100644
index 0000000..461a07d
--- /dev/null
+++ b/subpages/index/checkOutConfirm/sign/sign.wxss
@@ -0,0 +1,66 @@
+/* subpages/index/checkOutConfirm/sign/sign.wxss */
+
+
+.container {
+ width: 100%;
+ height: 100vh;
+ padding: 30rpx 0;
+ overflow: hidden;
+ display: flex;
+ align-content: center;
+ flex-direction: row;
+ justify-content: center;
+ font-size: 28rpx;
+ box-sizing: border-box;
+}
+
+.handleBtn {
+ display: inline-flex;
+ flex-direction: column;
+ justify-content: space-between;
+ align-content: space-between;
+ flex: 1;
+ padding-right: 20rpx;
+ box-sizing: border-box;
+ overflow: hidden;
+}
+
+.handleBtn button {
+ text-align: center;
+ transform: rotate(90deg);
+}
+ .handleBtn button:not([size="mini"]) {
+ width: 160rpx;
+ margin-top: 130rpx;
+ margin-bottom: 130rpx;
+}
+.handleBtn .clear {
+ margin-right:32rpx;
+ background-color: #eee;
+ }
+
+ .handleBtn .confirm {
+ color: #fff;
+ background-color: #42d9d3;
+ }
+.handCenter {
+ border: 4rpx dashed #e9e9e9;
+ flex: 5;
+ overflow: hidden;
+ box-sizing: border-box;
+}
+.handRight {
+ display: inline-flex;
+ align-items: center;
+}
+.handRight .handTitle {
+ transform: rotate(90deg);
+ flex: 1;
+ color: #666;
+}
+.handWriting {
+ background: #fff;
+ width: 100%;
+ height: 95vh;
+ flex: 2;
+}
\ No newline at end of file