From db68bd299325eac7fdc412a12f44e0137bce19a6 Mon Sep 17 00:00:00 2001 From: puriphatt Date: Wed, 26 Mar 2025 18:02:35 +0700 Subject: [PATCH] feat: add canvas manipulation functions and integrate signature submission in MainLayout (unfinished) --- src/components/CanvasComponent.vue | 14 ++++++++++---- src/layouts/MainLayout.vue | 14 +++++++++++++- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/components/CanvasComponent.vue b/src/components/CanvasComponent.vue index e53554d4..72e63c4d 100644 --- a/src/components/CanvasComponent.vue +++ b/src/components/CanvasComponent.vue @@ -4,7 +4,7 @@ import { useQuasar } from 'quasar'; import SignaturePad from 'signature_pad'; import Cropper from 'cropperjs'; -defineExpose({ clearCanvas, clearUpload }); +defineExpose({ setCanvas, getCanvas, clearCanvas, clearUpload }); const $q = useQuasar(); const isDarkActive = computed(() => $q.dark.isActive); @@ -44,9 +44,6 @@ async function initializeSignaturePad() { if (canvas) { signaturePad.value = new SignaturePad(canvas, { - backgroundColor: isDarkActive.value - ? 'rgb(21,25,29)' - : 'rgb(248,249,250)', penColor: 'blue', }); } else { @@ -79,6 +76,15 @@ function changeColor(color: string) { currentColor.value = color; } +function setCanvas() { + const data = signaturePad.value.toDataURL('image/png'); + return data; +} + +function getCanvas(signature: string) { + signaturePad.value.fromDataURL(signature); +} + function clearCanvas() { signaturePad.value.clear(); } diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index 1adc55a9..c09effed 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -50,7 +50,6 @@ const leftDrawerMini = ref(false); const unread = computed( () => notificationData.value.filter((v) => !v.read).length || 0, ); -// const filterRole = ref(); const userImage = ref(); const userGender = ref(''); const canvasRef = ref(); @@ -124,6 +123,17 @@ function readNoti(id: string) { } } +function signatureSubmit() { + const signature = canvasRef.value.setCanvas(); + userStore.setSignature(signature); + canvasModal.value = false; +} + +async function signatureFetch() { + const ret = await userStore.getSignature(); + if (ret) canvasRef.value.getCanvas(ret); +} + onMounted(async () => { initTheme(); initLang(); @@ -502,6 +512,8 @@ onMounted(async () => { no-app-box :title="$t('menu.profile.addSignature')" :close="() => (canvasModal = false)" + :submit="signatureSubmit" + :show="signatureFetch" >