From fd6b661980ba0f2d3ac4616fb6cf887cc48f3fdf Mon Sep 17 00:00:00 2001 From: Vasilii Mikhailovskii Date: Tue, 19 Nov 2024 00:51:11 +0200 Subject: [PATCH] add contact info --- components.d.ts | 4 + package-lock.json | 36 +++++++ package.json | 1 + src/components/read/ReadContactInfo.vue | 110 ++++++++++++++++++++++ src/components/read/ReadMessageSender.vue | 86 +++++++++++++++++ src/views/ManageQRCodeReadyView.vue | 5 +- src/views/ReadQRCodeView.vue | 95 +++---------------- 7 files changed, 255 insertions(+), 82 deletions(-) create mode 100644 src/components/read/ReadContactInfo.vue create mode 100644 src/components/read/ReadMessageSender.vue diff --git a/components.d.ts b/components.d.ts index 7bb457b..c7442fe 100644 --- a/components.d.ts +++ b/components.d.ts @@ -9,6 +9,7 @@ declare module 'vue' { export interface GlobalComponents { Button: typeof import('primevue/button')['default'] Checkbox: typeof import('primevue/checkbox')['default'] + ContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default'] CreateActionsSection: typeof import('./src/components/create/CreateActionsSection.vue')['default'] CreateDeliverySection: typeof import('./src/components/create/CreateDeliverySection.vue')['default'] CreateMessagesSection: typeof import('./src/components/create/CreateMessagesSection.vue')['default'] @@ -26,8 +27,11 @@ declare module 'vue' { IconSupport: typeof import('./src/components/icons/IconSupport.vue')['default'] IconTooling: typeof import('./src/components/icons/IconTooling.vue')['default'] InputText: typeof import('primevue/inputtext')['default'] + MessageSender: typeof import('./src/components/read/ReadMessageSender.vue')['default'] QRCodeReadySection: typeof import('./src/components/create/CreateReadySection.vue')['default'] RadioButton: typeof import('primevue/radiobutton')['default'] + ReadContactInfo: typeof import('./src/components/read/ReadContactInfo.vue')['default'] + ReadMessageSender: typeof import('./src/components/read/ReadMessageSender.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Select: typeof import('primevue/select')['default'] diff --git a/package-lock.json b/package-lock.json index 05ce6ee..a2efdf2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@primevue/forms": "^4.2.1", "@primevue/themes": "^4.2.1", "events": "^3.3.0", + "md5": "^2.3.0", "pinia": "^2.2.6", "pouchdb-browser": "^9.0.0", "primeicons": "^7.0.0", @@ -2962,6 +2963,15 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", @@ -3111,6 +3121,15 @@ "node": ">= 8" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -4374,6 +4393,12 @@ "node": ">=8" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -4830,6 +4855,17 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", diff --git a/package.json b/package.json index 310773c..6735baa 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@primevue/forms": "^4.2.1", "@primevue/themes": "^4.2.1", "events": "^3.3.0", + "md5": "^2.3.0", "pinia": "^2.2.6", "pouchdb-browser": "^9.0.0", "primeicons": "^7.0.0", diff --git a/src/components/read/ReadContactInfo.vue b/src/components/read/ReadContactInfo.vue new file mode 100644 index 0000000..d3e395f --- /dev/null +++ b/src/components/read/ReadContactInfo.vue @@ -0,0 +1,110 @@ + + + diff --git a/src/components/read/ReadMessageSender.vue b/src/components/read/ReadMessageSender.vue new file mode 100644 index 0000000..2b0bf94 --- /dev/null +++ b/src/components/read/ReadMessageSender.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/views/ManageQRCodeReadyView.vue b/src/views/ManageQRCodeReadyView.vue index fdfb409..7a7d52c 100644 --- a/src/views/ManageQRCodeReadyView.vue +++ b/src/views/ManageQRCodeReadyView.vue @@ -52,7 +52,10 @@ const svgUrl = ref(null) // Получение имени файла const sanitizedFileName = computed(() => { - const sanitized = qrCodeData.value?.name.replace(/[^a-zA-Z0-9-_]/g, '').trim() + const sanitized = qrCodeData.value?.name + .replace(/[<>:"/\\|?*\x00-\x1F]/g, '') // Убираем запрещённые символы + .replace(/\s+/g, '_') // Заменяем пробелы на подчёркивания + .trim() return sanitized ? `${sanitized}_QR-Code_HereConnect` : 'QR-Code_HereConnect' }) diff --git a/src/views/ReadQRCodeView.vue b/src/views/ReadQRCodeView.vue index d9c67ba..a6cc9ea 100644 --- a/src/views/ReadQRCodeView.vue +++ b/src/views/ReadQRCodeView.vue @@ -1,50 +1,16 @@