From 6bc21f3afb5992925bb16e0837fe2fdfb4e009ed Mon Sep 17 00:00:00 2001 From: megavrilinvv Date: Mon, 24 Apr 2023 16:59:27 +0300 Subject: [PATCH 1/2] =?UTF-8?q?[WIP]=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20?= =?UTF-8?q?=D1=81=D0=B6=D0=B0=D1=82=D0=B8=D1=8F=20=D0=B8=D0=B7=D0=BE=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/base/BaseUploadPhoto.vue | 43 ++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/components/base/BaseUploadPhoto.vue b/src/components/base/BaseUploadPhoto.vue index 9b22f9d..1aed717 100644 --- a/src/components/base/BaseUploadPhoto.vue +++ b/src/components/base/BaseUploadPhoto.vue @@ -8,10 +8,12 @@ type="file", id="image-upload", accept="image/.jpg,.jpeg,.png, .jpg", + class="image-field", @change="(e)=>previewImage(e)", + @click="compressed" ) .avatar.flex.absolute.items-center.gap-x-6 - img.avatar.object-cover(for="image-upload", :src="image") + img.avatar.object-cover(for="image-upload", :src="image" ) q-btn( round, color="primary", @@ -31,6 +33,7 @@ export default { data() { return { image: addImageIcon, + imageFile: null, }; }, mixins: [v_model], @@ -41,6 +44,44 @@ export default { }, }, methods: { + compressed() { + const compressImage = async (file, { quality = 1, type = file.type }) => { + const imageBitmap = await createImageBitmap(file); + const canvas = document.createElement("canvas"); + canvas.width = imageBitmap.width; + canvas.height = imageBitmap.height; + const ctx = canvas.getContext("2d"); + ctx.drawImage(imageBitmap, 0, 0); + + const blob = await new Promise((resolve) => + canvas.toBlob(resolve, type, quality) + ); + + return new File([blob], file.name, { + type: blob.type, + }); + }; + + const inputFile = document.querySelector(".image-field"); + inputFile.addEventListener("change", async (e) => { + const { files } = e.target; + if (!files.length) return; + const dataTransfer = new DataTransfer(); + + for (const file of files) { + if (!file.type.startsWith("image")) { + dataTransfer.items.add(file); + continue; + } + const compressedFile = await compressImage(file, { + quality: 0.5, + type: "image/jpeg", + }); + dataTransfer.items.add(compressedFile); + } + this.imageData = [...dataTransfer.files]; + }); + }, previewImage(event) { let picture = event.target.files; let reader = new FileReader(); From 298f563238d93c6e7a3e1f9ea033d6c2c2b9e1d5 Mon Sep 17 00:00:00 2001 From: megavrilinvv Date: Mon, 24 Apr 2023 17:28:25 +0300 Subject: [PATCH 2/2] =?UTF-8?q?[WIP]=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D1=81=D0=BA=D1=80=D1=83=D0=B3=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D0=BE=D1=82=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../newMedicalCard/components/BasicDataForms/DocumentsForm.vue | 2 +- .../newMedicalCard/components/BasicDataForms/InsuranceForm.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/newMedicalCard/components/BasicDataForms/DocumentsForm.vue b/src/pages/newMedicalCard/components/BasicDataForms/DocumentsForm.vue index 40cd6ae..f025c2b 100644 --- a/src/pages/newMedicalCard/components/BasicDataForms/DocumentsForm.vue +++ b/src/pages/newMedicalCard/components/BasicDataForms/DocumentsForm.vue @@ -17,7 +17,7 @@ .label-field.font-sm.text-sm.whitespace-nowrap {{`${field.label} :`}} .photo-field.flex.gap-3.items-center(v-if="field.type === 'photo'") q-avatar( - square, + rounded, size="40px", v-if="docData[data.dataKey][field.key]?.photo" ) diff --git a/src/pages/newMedicalCard/components/BasicDataForms/InsuranceForm.vue b/src/pages/newMedicalCard/components/BasicDataForms/InsuranceForm.vue index 5976211..258e3f3 100644 --- a/src/pages/newMedicalCard/components/BasicDataForms/InsuranceForm.vue +++ b/src/pages/newMedicalCard/components/BasicDataForms/InsuranceForm.vue @@ -19,7 +19,7 @@ .label-field.font-sm.text-sm.whitespace-nowrap {{`${field.label} :`}} .avatar-field.flex.gap-3.items-center.h-10.w-10(v-if="field.type === 'avatar'") .flex.w-10.h-10.relative(v-if="basic[insurance.insuranceKey][field.key]?.photo") - img.avatar.object-cover( + img.rounded.avatar.object-cover( :src="basic[insurance.insuranceKey][field.key].photo", alt="AV" )