Aurora Admin v1.2.0: 79 components x 5 ends, doc site, contracts batch 1, playground, regression, deploy ready

This commit is contained in:
aurora-admin
2026-09-10 19:21:56 +08:00
commit 51ce3a28f7
654 changed files with 49082 additions and 0 deletions
+47
View File
@@ -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>