Aurora Admin v1.2.0: 79 components x 5 ends, doc site, contracts batch 1, playground, regression, deploy ready
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
<template>
|
||||
<div class="aa-sign">
|
||||
<div class="aa-sign-pad" ref="pad">
|
||||
<canvas ref="canvas" class="aa-sign-canvas" @mousedown="down" @mousemove="move" @mouseup="up" @touchstart="down" @touchmove="move" @touchend="up"></canvas>
|
||||
<div class="aa-sign-placeholder" v-show="!hasInk">请在此处签名</div>
|
||||
</div>
|
||||
<div class="aa-sign-actions">
|
||||
<button class="aa-btn" @click="undo">撤销</button>
|
||||
<button class="aa-btn" @click="clear">清除</button>
|
||||
<button class="aa-btn aa-btn--primary" @click="save">保存</button>
|
||||
<span class="aa-sign-preview" v-if="saved">{{ saved }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'AaSignaturePad',
|
||||
data() {
|
||||
return { drawing: false, last: null, strokes: [], cur: [], hasInk: false, saved: '' };
|
||||
},
|
||||
mounted() { this.fit(); window.addEventListener('resize', this.fit); this.$once('hook:beforeDestroy', () => window.removeEventListener('resize', this.fit)); },
|
||||
methods: {
|
||||
fit() { var r = this.$refs.pad.getBoundingClientRect(); this.$refs.canvas.width = r.width; this.$refs.canvas.height = r.height; this.redraw(); },
|
||||
pos(e) { var r = this.$refs.canvas.getBoundingClientRect(); var t = e.touches && e.touches[0]; return { x: (t ? t.clientX : e.clientX) - r.left, y: (t ? t.clientY : e.clientY) - r.top }; },
|
||||
down(e) { e.preventDefault(); this.drawing = true; this.last = this.pos(e); this.cur = [this.last]; this.strokes.push(this.cur); this.hasInk = true; },
|
||||
move(e) { if (!this.drawing) return; e.preventDefault(); var p = this.pos(e); this.ctx().lineTo(p.x, p.y); this.ctx().stroke(); this.cur.push(p); },
|
||||
up() { this.drawing = false; this.last = null; },
|
||||
ctx() { return this.$refs.canvas.getContext('2d'); },
|
||||
undo() { this.strokes.pop(); this.redraw(); if (!this.strokes.length) this.hasInk = false; },
|
||||
clear() { this.strokes = []; this.redraw(); this.hasInk = false; this.saved = ''; },
|
||||
save() { this.saved = '已导出(' + this.$refs.canvas.width + '×' + this.$refs.canvas.height + ')'; },
|
||||
redraw() {
|
||||
var c = this.$refs.canvas, x = c.getContext('2d');
|
||||
x.clearRect(0, 0, c.width, c.height);
|
||||
x.strokeStyle = '#1F2329'; x.lineWidth = 2; x.lineCap = 'round'; x.lineJoin = 'round';
|
||||
this.strokes.forEach(function (s) {
|
||||
x.beginPath();
|
||||
s.forEach(function (p, i) { i ? x.lineTo(p.x, p.y) : x.moveTo(p.x, p.y); });
|
||||
x.stroke();
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style src="./SignaturePad.css"></style>
|
||||
Reference in New Issue
Block a user