From 931b0cc9762a4817bae8144bfdd57d4665d42956 Mon Sep 17 00:00:00 2001 From: Vasilii Mikhailovskii Date: Mon, 18 Nov 2024 18:26:28 +0200 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20qr-=D0=BA=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components.d.ts | 15 ++ package-lock.json | 212 +++++++++++++++++- package.json | 2 + .../create/CreateActionsSection.vue | 27 +++ .../create/CreateDeliverySection.vue | 32 +++ .../create/CreateMessagesSection.vue | 94 ++++++++ .../create/CreatePlacementSection.vue | 37 +++ src/components/create/CreateReadySection.vue | 91 ++++++++ src/components/create/CreateSection.vue | 44 ++++ .../create/CreateSummarySection.vue | 72 ++++++ src/components/icons/IconCommunity.vue | 7 - src/components/icons/IconDocumentation.vue | 7 - src/components/icons/IconEcosystem.vue | 7 - src/components/icons/IconSupport.vue | 7 - src/components/icons/IconTooling.vue | 19 -- src/dbs.ts | 6 + src/router/index.ts | 10 +- src/types/DBDocumentTypes/BaseDocument.ts | 14 ++ src/types/DBDocumentTypes/MessageDocument.ts | 30 +++ src/types/DBDocumentTypes/QRCodeDocument.ts | 33 +++ src/types/DBDocumentTypes/UserDocument.ts | 25 +++ src/types/DBDocumentTypes/index.ts | 4 + src/views/CreateActionsView.vue | 4 + src/views/CreateView.vue | 117 ++++++---- 24 files changed, 813 insertions(+), 103 deletions(-) create mode 100644 src/components/create/CreateActionsSection.vue create mode 100644 src/components/create/CreateDeliverySection.vue create mode 100644 src/components/create/CreateMessagesSection.vue create mode 100644 src/components/create/CreatePlacementSection.vue create mode 100644 src/components/create/CreateReadySection.vue create mode 100644 src/components/create/CreateSection.vue create mode 100644 src/components/create/CreateSummarySection.vue delete mode 100644 src/components/icons/IconCommunity.vue delete mode 100644 src/components/icons/IconDocumentation.vue delete mode 100644 src/components/icons/IconEcosystem.vue delete mode 100644 src/components/icons/IconSupport.vue delete mode 100644 src/components/icons/IconTooling.vue create mode 100644 src/dbs.ts create mode 100644 src/types/DBDocumentTypes/BaseDocument.ts create mode 100644 src/types/DBDocumentTypes/MessageDocument.ts create mode 100644 src/types/DBDocumentTypes/QRCodeDocument.ts create mode 100644 src/types/DBDocumentTypes/UserDocument.ts create mode 100644 src/types/DBDocumentTypes/index.ts create mode 100644 src/views/CreateActionsView.vue diff --git a/components.d.ts b/components.d.ts index 92a9951..152143e 100644 --- a/components.d.ts +++ b/components.d.ts @@ -8,6 +8,15 @@ export {} declare module 'vue' { export interface GlobalComponents { Button: typeof import('primevue/button')['default'] + Checkbox: typeof import('primevue/checkbox')['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'] + CreatePlacementSection: typeof import('./src/components/create/CreatePlacementSection.vue')['default'] + CreateReadySection: typeof import('./src/components/create/CreateReadySection.vue')['default'] + CreateSection: typeof import('./src/components/create/CreateSection.vue')['default'] + CreateSummarySection: typeof import('./src/components/create/CreateSummarySection.vue')['default'] + Dropdown: typeof import('primevue/dropdown')['default'] ExamplesSection: typeof import('./src/components/TheWelcome/ExamplesSection.vue')['default'] HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] IconCommunity: typeof import('./src/components/icons/IconCommunity.vue')['default'] @@ -15,9 +24,15 @@ declare module 'vue' { IconEcosystem: typeof import('./src/components/icons/IconEcosystem.vue')['default'] IconSupport: typeof import('./src/components/icons/IconSupport.vue')['default'] IconTooling: typeof import('./src/components/icons/IconTooling.vue')['default'] + InputText: typeof import('primevue/inputtext')['default'] + QRCodeReadySection: typeof import('./src/components/create/CreateReadySection.vue')['default'] RadioButton: typeof import('primevue/radiobutton')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] + Select: typeof import('primevue/select')['default'] + SelectActions: typeof import('./src/components/create/SelectActions.vue')['default'] + SelecteActions: typeof import('./src/components/create/SelecteActions.vue')['default'] + SelectPlacement: typeof import('./src/components/create/SelectPlacement.vue')['default'] TheWelcome: typeof import('./src/components/TheWelcome/TheWelcome.vue')['default'] WelcomeItem: typeof import('./src/components/WelcomeItem.vue')['default'] } diff --git a/package-lock.json b/package-lock.json index d0b62c1..05ce6ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,8 @@ "pouchdb-browser": "^9.0.0", "primeicons": "^7.0.0", "primevue": "^4.2.1", + "qr-code-styling": "^1.8.4", + "svgo": "^3.3.2", "tailwindcss-primeui": "^0.3.4", "vue": "^3.5.12", "vue-router": "^4.4.5" @@ -1122,9 +1124,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", - "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1752,6 +1754,15 @@ "win32" ] }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@tsconfig/node20": { "version": "20.1.4", "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz", @@ -2795,7 +2806,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true, "license": "ISC" }, "node_modules/brace-expansion": { @@ -3088,9 +3098,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.4.tgz", - "integrity": "sha512-9KdyVPPtLHjPAD7tcuzSFs64UfHlLJt7U6qP4/bFVLyjLceyizj6s6jO6YBaV5d0G7g/9KnY/dOpLR4Rcg8YDg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -3101,6 +3111,47 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3113,6 +3164,39 @@ "node": ">=4" } }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "license": "MIT", + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "license": "CC0-1.0" + }, "node_modules/cssstyle": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.1.0.tgz", @@ -3260,6 +3344,61 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "license": "MIT" }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -4691,6 +4830,12 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "license": "CC0-1.0" + }, "node_modules/memorystream": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", @@ -5020,7 +5165,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" @@ -5631,6 +5775,24 @@ "node": ">=6" } }, + "node_modules/qr-code-styling": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/qr-code-styling/-/qr-code-styling-1.8.4.tgz", + "integrity": "sha512-uxykNuvXaPDK/jGDERDIdDvvocefbHu1oxVYi6K87FUdPPAezkBdcIeFJ8XVX2HSsyLFINile5uzfOMYpGu5ZA==", + "license": "MIT", + "dependencies": { + "qrcode-generator": "^1.4.4" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==", + "license": "MIT" + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6145,6 +6307,40 @@ "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", diff --git a/package.json b/package.json index 498380e..310773c 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,8 @@ "pouchdb-browser": "^9.0.0", "primeicons": "^7.0.0", "primevue": "^4.2.1", + "qr-code-styling": "^1.8.4", + "svgo": "^3.3.2", "tailwindcss-primeui": "^0.3.4", "vue": "^3.5.12", "vue-router": "^4.4.5" diff --git a/src/components/create/CreateActionsSection.vue b/src/components/create/CreateActionsSection.vue new file mode 100644 index 0000000..43050d9 --- /dev/null +++ b/src/components/create/CreateActionsSection.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/create/CreateDeliverySection.vue b/src/components/create/CreateDeliverySection.vue new file mode 100644 index 0000000..7481002 --- /dev/null +++ b/src/components/create/CreateDeliverySection.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/create/CreateMessagesSection.vue b/src/components/create/CreateMessagesSection.vue new file mode 100644 index 0000000..cd803ad --- /dev/null +++ b/src/components/create/CreateMessagesSection.vue @@ -0,0 +1,94 @@ + + + diff --git a/src/components/create/CreatePlacementSection.vue b/src/components/create/CreatePlacementSection.vue new file mode 100644 index 0000000..377b933 --- /dev/null +++ b/src/components/create/CreatePlacementSection.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/create/CreateReadySection.vue b/src/components/create/CreateReadySection.vue new file mode 100644 index 0000000..85cc39b --- /dev/null +++ b/src/components/create/CreateReadySection.vue @@ -0,0 +1,91 @@ + + + diff --git a/src/components/create/CreateSection.vue b/src/components/create/CreateSection.vue new file mode 100644 index 0000000..d217edc --- /dev/null +++ b/src/components/create/CreateSection.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/create/CreateSummarySection.vue b/src/components/create/CreateSummarySection.vue new file mode 100644 index 0000000..327b7ac --- /dev/null +++ b/src/components/create/CreateSummarySection.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue deleted file mode 100644 index 2dc8b05..0000000 --- a/src/components/icons/IconCommunity.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue deleted file mode 100644 index 6d4791c..0000000 --- a/src/components/icons/IconDocumentation.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue deleted file mode 100644 index c3a4f07..0000000 --- a/src/components/icons/IconEcosystem.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue deleted file mode 100644 index 7452834..0000000 --- a/src/components/icons/IconSupport.vue +++ /dev/null @@ -1,7 +0,0 @@ - diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue deleted file mode 100644 index 660598d..0000000 --- a/src/components/icons/IconTooling.vue +++ /dev/null @@ -1,19 +0,0 @@ - - diff --git a/src/dbs.ts b/src/dbs.ts new file mode 100644 index 0000000..5201fea --- /dev/null +++ b/src/dbs.ts @@ -0,0 +1,6 @@ +import PouchDB from 'pouchdb-browser' +import { type QRCodeDocument } from '@/types/DBDocumentTypes' + +export const qrCodeDb = new PouchDB('https://hereconnect.condev.ru/api/qr', { + skip_setup: true, +}) diff --git a/src/router/index.ts b/src/router/index.ts index 73713c7..80c3d1c 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -17,11 +17,11 @@ const routes = [ name: 'create', component: () => import('@/views/CreateView.vue'), // Первый шаг создания QR-кода }, - // { - // path: 'actions', - // name: 'create-actions', - // component: () => import('@/views/CreateActionsView.vue'), // Второй шаг создания QR-кода - // }, + { + path: ':placement/actions', + name: 'create-actions', + component: () => import('@/views/CreateActionsView.vue'), // Второй шаг создания QR-кода + }, ], }, // { diff --git a/src/types/DBDocumentTypes/BaseDocument.ts b/src/types/DBDocumentTypes/BaseDocument.ts new file mode 100644 index 0000000..583949c --- /dev/null +++ b/src/types/DBDocumentTypes/BaseDocument.ts @@ -0,0 +1,14 @@ +/** + * Базовый интерфейс для всех документов в базе данных. + * Содержит общие поля, такие как идентификатор, тип и дату создания. + */ +export interface BaseDocument { + /** Уникальный идентификатор документа */ + _id: string + + /** Тип документа */ + type: string + + /** Дата создания документа в формате ISO */ + created_at: string +} diff --git a/src/types/DBDocumentTypes/MessageDocument.ts b/src/types/DBDocumentTypes/MessageDocument.ts new file mode 100644 index 0000000..7fcb5e3 --- /dev/null +++ b/src/types/DBDocumentTypes/MessageDocument.ts @@ -0,0 +1,30 @@ +import { type BaseDocument } from './BaseDocument' + +/** + * Интерфейс для документа сообщения. + * Используется для хранения сообщений, отправленных через QR-код, с поддержкой вложений. + */ +export interface MessageDocument extends BaseDocument { + /** Тип документа, всегда 'message' */ + type: 'message' + + /** Идентификатор QR-кода, к которому относится сообщение */ + qr_code: string + + /** Идентификатор чата для связывания сообщений */ + chat: string + + /** Отправитель сообщения ('guest' или 'owner') */ + from: 'guest' | 'owner' + + /** Содержимое сообщения */ + body: string + + /** Опциональная геопозиция (широта и долгота) */ + location?: { lat: number; lng: number } + + /** Вложения, такие как фото */ + // _attachments?: { + // [key: string]: Attachment + // } +} diff --git a/src/types/DBDocumentTypes/QRCodeDocument.ts b/src/types/DBDocumentTypes/QRCodeDocument.ts new file mode 100644 index 0000000..eb63a60 --- /dev/null +++ b/src/types/DBDocumentTypes/QRCodeDocument.ts @@ -0,0 +1,33 @@ +import type { BaseDocument } from './BaseDocument' + +/** + * Интерфейс для документа QR-кода. + * Представляет QR-код, созданный пользователем, и информацию о привязанном объекте. + */ +export interface QRCodeDocument extends BaseDocument { + /** Тип документа, всегда 'qr_code' */ + type: 'qr_code' + + /** Уникальный URL для настройки и взаимодействия */ + uri: string + + /** Ссылка на QR-код */ + url: string + + /** Идентификатор пользователя, который создал QR-код */ + user_uuid: string + + /** Название объекта, для которого создан QR-код, например "Мой автомобиль" */ + name: string + + deliveryMethod: 'telegram' | 'webPushSubscription' + + /** Тип объекта, для которого создан QR-код, например "car" */ + placement: 'car' | 'pet' | 'door' | 'store' | 'restaurant_table' | 'other' + + /** Доступные действия для гостей (например, ["send_message"]) */ + actions: string[] + + /** Предустановленное сообщение для гостей */ + predefinedMessage?: string[] +} diff --git a/src/types/DBDocumentTypes/UserDocument.ts b/src/types/DBDocumentTypes/UserDocument.ts new file mode 100644 index 0000000..e033564 --- /dev/null +++ b/src/types/DBDocumentTypes/UserDocument.ts @@ -0,0 +1,25 @@ +import type { BaseDocument } from './BaseDocument' + +/** + * Интерфейс для документа пользователя. + * Содержит данные, такие как имя пользователя, уникальный UUID, email и роли. + */ +export interface UserDocument extends BaseDocument { + /** Тип документа, всегда 'user' */ + type: 'user' + + /** Имя пользователя */ + name: string + + /** Уникальный UUID пользователя, не связанный с _id */ + user_uuid: string + + /** Email пользователя */ + email: string + + /** Роли пользователя (например, ['admin', 'user']) */ + roles: string[] + + /** Пароль пользователя (должен храниться в зашифрованном виде) */ + password: string +} diff --git a/src/types/DBDocumentTypes/index.ts b/src/types/DBDocumentTypes/index.ts new file mode 100644 index 0000000..35fda95 --- /dev/null +++ b/src/types/DBDocumentTypes/index.ts @@ -0,0 +1,4 @@ +export * from './BaseDocument' +export * from './QRCodeDocument' +export * from './MessageDocument' +export * from './UserDocument' diff --git a/src/views/CreateActionsView.vue b/src/views/CreateActionsView.vue new file mode 100644 index 0000000..08e88dd --- /dev/null +++ b/src/views/CreateActionsView.vue @@ -0,0 +1,4 @@ + + diff --git a/src/views/CreateView.vue b/src/views/CreateView.vue index f38b53d..ac75678 100644 --- a/src/views/CreateView.vue +++ b/src/views/CreateView.vue @@ -1,55 +1,86 @@