diff --git a/angular/README.md b/angular/README.md index f1f8aad..e425b14 100644 --- a/angular/README.md +++ b/angular/README.md @@ -1,4 +1,4 @@ -# FashionLogica +# CoffeeLike This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.0.6. diff --git a/angular/angular.json b/angular/angular.json index 046bb7b..76e1e77 100644 --- a/angular/angular.json +++ b/angular/angular.json @@ -4,7 +4,7 @@ "version": 1, "newProjectRoot": "projects", "projects": { - "fashion-logica": { + "coffee-like": { "projectType": "application", "schematics": { "@schematics/angular:component": { @@ -19,7 +19,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "/var/www/html/lk.crm4retail.ru/fashion-logica", + "outputPath": "/var/www/html/lk.crm4retail.ru/coffee-like", "baseHref": "/", "index": "src/index.html", "main": "src/main.ts", @@ -35,6 +35,7 @@ "src/sw-custom.js" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/purple-green.css", "node_modules/primeng/resources/themes/bootstrap4-light-blue/theme.css", "node_modules/primeicons/primeicons.css", "node_modules/primeng/resources/primeng.min.css", @@ -83,10 +84,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "fashion-logica:build:production" + "browserTarget": "coffee-like:build:production" }, "development": { - "browserTarget": "fashion-logica:build:development" + "browserTarget": "coffee-like:build:development" } }, "defaultConfiguration": "development" @@ -94,7 +95,7 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "fashion-logica:build" + "browserTarget": "coffee-like:build" } }, "test": { @@ -112,6 +113,7 @@ "src/manifest.webmanifest" ], "styles": [ + "./node_modules/@angular/material/prebuilt-themes/purple-green.css", "src/styles.scss" ], "scripts": [] diff --git a/angular/package-lock.json b/angular/package-lock.json index 9b8ef07..4b1a00f 100644 --- a/angular/package-lock.json +++ b/angular/package-lock.json @@ -1,12 +1,12 @@ { - "name": "fashion-logica", - "version": "0.0.4", + "name": "coffee-like", + "version": "0.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "fashion-logica", - "version": "0.0.4", + "name": "coffee-like", + "version": "0.0.1", "dependencies": { "@angular/animations": "^14.0.0", "@angular/cdk": "^14.2.1", @@ -15,6 +15,7 @@ "@angular/core": "^14.0.0", "@angular/fire": "^7.4.1", "@angular/forms": "^14.0.0", + "@angular/material": "^14.2.1", "@angular/platform-browser": "^14.0.0", "@angular/platform-browser-dynamic": "^14.0.0", "@angular/router": "^14.0.0", @@ -25,11 +26,11 @@ "@fortawesome/free-solid-svg-icons": "^6.2.0", "@types/uuid": "^8.3.4", "angular-moment-timezone": "^1.7.1", - "angularx-qrcode": "^14.0.0", "barcode-2-svg": "^0.3.3", "firebase": "^9.9.3", "google-libphonenumber": "^3.2.30", "jsbarcode": "^3.11.5", + "ng-qrcode": "^7.0.0", "ngx-sharebuttons": "^11.0.0", "primeicons": "^5.0.0", "primeng": "^14.0.1", @@ -665,6 +666,23 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@angular/material": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.1.tgz", + "integrity": "sha512-e7DkKJTuqrSpKPhxahrqkZt6AeU5ld5/aSeCamq2dcdqfZ8otmgiajzN0cXZGwSCT2Lth6c+QV3yn8ufTJQpTw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^14.0.0 || ^15.0.0", + "@angular/cdk": "14.2.1", + "@angular/common": "^14.0.0 || ^15.0.0", + "@angular/core": "^14.0.0 || ^15.0.0", + "@angular/forms": "^14.0.0 || ^15.0.0", + "@angular/platform-browser": "^14.0.0 || ^15.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, "node_modules/@angular/platform-browser": { "version": "14.1.3", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.1.3.tgz", @@ -2444,20 +2462,6 @@ "node": ">=0.1.90" } }, - "node_modules/@cordobo/qrcode": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@cordobo/qrcode/-/qrcode-1.5.0.tgz", - "integrity": "sha512-aZ5n3MYw10t4v68EGvRGE1DL7iWfAiTUy4MSZRoqjHTRYdjX40sYgJf48NZa6zZeXVuJOEB/1Ni9KzS+C/EC0w==", - "dependencies": { - "dijkstrajs": "^1.0.1", - "encode-utf8": "^1.0.3", - "pngjs": "^5.0.0", - "yargs": "^17.3.1" - }, - "bin": { - "qrcode": "bin/qrcode" - } - }, "node_modules/@csstools/postcss-cascade-layers": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz", @@ -4480,18 +4484,6 @@ "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.29.tgz", "integrity": "sha512-mla2acNCMkWXBD+c+yeUrBUrzOxYMNFdQ6FGfigGGtEVBPJx07BQeJekjt9DmH1FtZek4E9rE1eRR9qQpxACOQ==" }, - "node_modules/angularx-qrcode": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-14.0.0.tgz", - "integrity": "sha512-PfWPz6YpKnTeIYzBjLniKXy/Y4/id0v/dDASQi4756+WYLu94cUMYFndGTFigjeBuk8i5BG0Q8ePHgYYvHbk2w==", - "dependencies": { - "@cordobo/qrcode": "1.5.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/core": "^14.0.0" - } - }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -5027,7 +5019,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, "engines": { "node": ">=6" } @@ -5845,6 +5836,14 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -7070,7 +7069,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -8916,7 +8914,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -9626,6 +9623,19 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/ng-qrcode": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-7.0.0.tgz", + "integrity": "sha512-Mx7nf8rtGMVYxGe2qfy8/JNiCnxKD7uFsqpP2Hm5eJSQrOEapQl9FR0yuK0I4MMQorJ7s8mZZDxmszQiH8R2Kg==", + "dependencies": { + "qrcode": "^1.5.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@angular/common": ">=14 <15", + "@angular/core": ">=14 <15" + } + }, "node_modules/ngx-sharebuttons": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ngx-sharebuttons/-/ngx-sharebuttons-11.0.0.tgz", @@ -10264,7 +10274,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -10279,7 +10288,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -10328,7 +10336,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } @@ -10459,7 +10466,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "engines": { "node": ">=8" } @@ -11367,6 +11373,114 @@ "node": ">=0.9" } }, + "node_modules/qrcode": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", + "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -11601,6 +11715,11 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -12174,8 +12293,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setimmediate": { "version": "1.0.5", @@ -13563,6 +13681,11 @@ "which": "bin/which" } }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -13708,6 +13831,7 @@ "version": "17.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -13725,6 +13849,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } @@ -14157,6 +14282,14 @@ "tslib": "^2.3.0" } }, + "@angular/material": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.2.1.tgz", + "integrity": "sha512-e7DkKJTuqrSpKPhxahrqkZt6AeU5ld5/aSeCamq2dcdqfZ8otmgiajzN0cXZGwSCT2Lth6c+QV3yn8ufTJQpTw==", + "requires": { + "tslib": "^2.3.0" + } + }, "@angular/platform-browser": { "version": "14.1.3", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.1.3.tgz", @@ -15391,17 +15524,6 @@ "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" }, - "@cordobo/qrcode": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@cordobo/qrcode/-/qrcode-1.5.0.tgz", - "integrity": "sha512-aZ5n3MYw10t4v68EGvRGE1DL7iWfAiTUy4MSZRoqjHTRYdjX40sYgJf48NZa6zZeXVuJOEB/1Ni9KzS+C/EC0w==", - "requires": { - "dijkstrajs": "^1.0.1", - "encode-utf8": "^1.0.3", - "pngjs": "^5.0.0", - "yargs": "^17.3.1" - } - }, "@csstools/postcss-cascade-layers": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.0.5.tgz", @@ -16999,15 +17121,6 @@ } } }, - "angularx-qrcode": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/angularx-qrcode/-/angularx-qrcode-14.0.0.tgz", - "integrity": "sha512-PfWPz6YpKnTeIYzBjLniKXy/Y4/id0v/dDASQi4756+WYLu94cUMYFndGTFigjeBuk8i5BG0Q8ePHgYYvHbk2w==", - "requires": { - "@cordobo/qrcode": "1.5.0", - "tslib": "^2.3.0" - } - }, "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -17399,8 +17512,7 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "caniuse-lite": { "version": "1.0.30001378", @@ -18002,6 +18114,11 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", @@ -18846,7 +18963,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -20196,7 +20312,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -20738,6 +20853,15 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "ng-qrcode": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-7.0.0.tgz", + "integrity": "sha512-Mx7nf8rtGMVYxGe2qfy8/JNiCnxKD7uFsqpP2Hm5eJSQrOEapQl9FR0yuK0I4MMQorJ7s8mZZDxmszQiH8R2Kg==", + "requires": { + "qrcode": "^1.5.0", + "tslib": "^2.4.0" + } + }, "ngx-sharebuttons": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/ngx-sharebuttons/-/ngx-sharebuttons-11.0.0.tgz", @@ -21210,7 +21334,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -21219,7 +21342,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -21254,8 +21376,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pacote": { "version": "13.3.0", @@ -21361,8 +21482,7 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", @@ -21916,6 +22036,92 @@ "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, + "qrcode": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.1.tgz", + "integrity": "sha512-nS8NJ1Z3md8uTjKtP+SGGhfqmTCs5flU/xR623oI0JX+Wepz9R8UrRVCTBTJm3qGw3rH6jJ6MUHjkDx15cxSSg==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -22096,6 +22302,11 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -22531,8 +22742,7 @@ "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "setimmediate": { "version": "1.0.5", @@ -23541,6 +23751,11 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -23647,6 +23862,7 @@ "version": "17.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -23660,7 +23876,8 @@ "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true }, "zone.js": { "version": "0.11.8", diff --git a/angular/package.json b/angular/package.json index 8071257..d3d91df 100644 --- a/angular/package.json +++ b/angular/package.json @@ -1,6 +1,6 @@ { - "name": "fashion-logica", - "version": "0.0.4", + "name": "coffee-like", + "version": "0.0.1", "scripts": { "ng": "ng", "start": "ng serve --host 192.168.0.14", @@ -17,6 +17,7 @@ "@angular/core": "^14.0.0", "@angular/fire": "^7.4.1", "@angular/forms": "^14.0.0", + "@angular/material": "^14.2.1", "@angular/platform-browser": "^14.0.0", "@angular/platform-browser-dynamic": "^14.0.0", "@angular/router": "^14.0.0", @@ -27,11 +28,11 @@ "@fortawesome/free-solid-svg-icons": "^6.2.0", "@types/uuid": "^8.3.4", "angular-moment-timezone": "^1.7.1", - "angularx-qrcode": "^14.0.0", "barcode-2-svg": "^0.3.3", "firebase": "^9.9.3", "google-libphonenumber": "^3.2.30", "jsbarcode": "^3.11.5", + "ng-qrcode": "^7.0.0", "ngx-sharebuttons": "^11.0.0", "primeicons": "^5.0.0", "primeng": "^14.0.1", diff --git a/angular/src/app/app-routing.module.ts b/angular/src/app/app-routing.module.ts index 0297262..0764816 100644 --- a/angular/src/app/app-routing.module.ts +++ b/angular/src/app/app-routing.module.ts @@ -1,7 +1,22 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; +import { MainComponent } from './pages/main/main.component'; +import { GuestCardComponent } from './pages/guest-card/guest-card.component'; +import { LoginComponent } from './pages/login/login.component'; +import { AuthGuard } from './guards/auth-guard.guard'; -const routes: Routes = []; +const routes: Routes = [ + { + path: '', + component: GuestCardComponent, + canActivate: [AuthGuard] + }, + { + path: 'login', + component: LoginComponent + } + // { path: '**', component: NotFoundComponent } +]; @NgModule({ imports: [RouterModule.forRoot(routes)], diff --git a/angular/src/app/app.component.html b/angular/src/app/app.component.html index 0680b43..4cca73f 100644 --- a/angular/src/app/app.component.html +++ b/angular/src/app/app.component.html @@ -1 +1,2 @@ + diff --git a/angular/src/app/app.component.spec.ts b/angular/src/app/app.component.spec.ts index 3d2ba4f..7a983ae 100644 --- a/angular/src/app/app.component.spec.ts +++ b/angular/src/app/app.component.spec.ts @@ -20,16 +20,16 @@ describe('AppComponent', () => { expect(app).toBeTruthy(); }); - it(`should have as title 'fashion-logica'`, () => { + it(`should have as title 'coffee-like'`, () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.componentInstance; - expect(app.title).toEqual('fashion-logica'); + expect(app.title).toEqual('coffee-like'); }); it('should render title', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('fashion-logica app is running!'); + expect(compiled.querySelector('.content span')?.textContent).toContain('coffee-like app is running!'); }); }); diff --git a/angular/src/app/app.component.ts b/angular/src/app/app.component.ts index ddeca86..4fe43c3 100644 --- a/angular/src/app/app.component.ts +++ b/angular/src/app/app.component.ts @@ -6,5 +6,5 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.scss'] }) export class AppComponent { - title = 'Fashionlogica'; + title = 'Coffee Like'; } diff --git a/angular/src/app/app.module.ts b/angular/src/app/app.module.ts index f714d39..c48e111 100644 --- a/angular/src/app/app.module.ts +++ b/angular/src/app/app.module.ts @@ -28,12 +28,20 @@ import { MessageService } from 'primeng/api'; import { FooterButtonsComponent } from './components/footer-buttons/footer-buttons.component'; import { UserDataComponent } from './pages/account/user-data/user-data.component'; import { RefSystemComponent } from './pages/account/ref-system/ref-system.component'; -import { QRCodeModule } from 'angularx-qrcode'; import { ShareButtonsModule } from 'ngx-sharebuttons/buttons'; import { ShareIconsModule } from 'ngx-sharebuttons/icons'; import { MessagingService } from './services/messaging.service'; import { NotFoundComponent } from './pages/not-found/not-found.component'; import { DownloadAppDirective } from './directives/download-app.directive'; +import {MatIconModule} from '@angular/material/icon'; +import { GuestCardComponent } from './pages/guest-card/guest-card.component'; +import { QrCodeModule } from 'ng-qrcode'; +import { AccordionComponent } from './components/accordion/accordion.component'; +import { LastOrderComponent } from './components/last-order/last-order.component'; +import { InviteFriendsComponent } from './components/invite-friends/invite-friends.component'; +import { FooterComponent } from './components/footer/footer.component'; +import { SocialMediaButtonsComponent } from './components/social-media-buttons/social-media-buttons.component'; +import { LoginComponent } from './pages/login/login.component'; @NgModule({ declarations: [ @@ -51,18 +59,18 @@ import { DownloadAppDirective } from './directives/download-app.directive'; UserDataComponent, RefSystemComponent, NotFoundComponent, - DownloadAppDirective + DownloadAppDirective, + GuestCardComponent, + AccordionComponent, + LastOrderComponent, + InviteFriendsComponent, + FooterComponent, + SocialMediaButtonsComponent, + LoginComponent ], imports: [ BrowserModule, AppRoutingModule, - RouterModule.forRoot([ - { - path: '**', - component: MainComponent - }, - // { path: '**', component: NotFoundComponent } - ]), InputMaskModule, ProgressSpinnerModule, FormsModule, @@ -79,11 +87,12 @@ import { DownloadAppDirective } from './directives/download-app.directive'; AngularFireMessagingModule, ToastModule, ReactiveFormsModule, - QRCodeModule, ShareButtonsModule.withConfig({ debug: true }), - ShareIconsModule + ShareIconsModule, + MatIconModule, + QrCodeModule ], providers: [DialogService, MessageService, MessagingService ], bootstrap: [AppComponent] diff --git a/angular/src/app/components/accordion/accordion.component.html b/angular/src/app/components/accordion/accordion.component.html new file mode 100644 index 0000000..3af52b9 --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.html @@ -0,0 +1,7 @@ +
+ + +
+ +
+
diff --git a/angular/src/app/components/accordion/accordion.component.scss b/angular/src/app/components/accordion/accordion.component.scss new file mode 100644 index 0000000..68f274d --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.scss @@ -0,0 +1,85 @@ +:host { + width: 100%; +} + +.tab { + position: relative; + margin-bottom: 1px; + width: 100%; + color: #fff; + overflow: hidden; + border-bottom: solid 1px #bdbdbd; +} +.tab input { + position: absolute; + opacity: 0; + z-index: -1; +} +.tab label { + display: block; + padding: 20px 26px; + position: relative; + background: #ffffff00; + font-weight: 400; + font-size: 12px; + line-height: 14px; + letter-spacing: -0.5px; + cursor: pointer; +} +// .tab label:before { +// display: block; +// content: " "; +// padding-top: 5px; +// } +.tab-content { + max-height: 0; + overflow: hidden; + background: #292929; + -webkit-transition: all 0.35s; + -o-transition: all 0.35s; + transition: all 0.35s; + border-top: solid 1px #bdbdbd; + font-style: normal; + font-weight: 400; + font-size: 12px; + + p { + margin: 0; + } +} +.tab-content p { + margin: 1em; +} +/* :checked */ +.tab input:checked ~ .tab-content { + padding: 16px 26px; + max-height: 100vh; +} + +/* Icon */ +.tab label::after { + position: absolute; + right: 0; + top: 0; + line-height: 3; + text-align: center; + -webkit-transition: all 0.35s; + -o-transition: all 0.35s; + transition: all 0.35s; + height: 100%; + margin-right: 12px; + display: flex; + align-items: center; +} +.tab input[type="checkbox"] + label::after { + content: "+"; +} +.tab input[type="radio"] + label::after { + content: "\25BC"; +} +.tab input[type="checkbox"]:checked + label::after { + transform: rotate(315deg); +} +.tab input[type="radio"]:checked + label::after { + transform: rotateX(180deg); +} diff --git a/angular/src/app/components/accordion/accordion.component.spec.ts b/angular/src/app/components/accordion/accordion.component.spec.ts new file mode 100644 index 0000000..73cc3e3 --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AccordionComponent } from './accordion.component'; + +describe('AccordionComponent', () => { + let component: AccordionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AccordionComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AccordionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/accordion/accordion.component.ts b/angular/src/app/components/accordion/accordion.component.ts new file mode 100644 index 0000000..1958e5e --- /dev/null +++ b/angular/src/app/components/accordion/accordion.component.ts @@ -0,0 +1,23 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { v4 as uuidv4 } from 'uuid'; + +export interface IAccordionData { + header: string; + body: string; +} + +@Component({ + selector: 'app-accordion[header]', + templateUrl: './accordion.component.html', + styleUrls: ['./accordion.component.scss'] +}) +export class AccordionComponent implements OnInit { + @Input() header!: string + public guid: string = uuidv4() + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/exit/exit.component.scss b/angular/src/app/components/exit/exit.component.scss index a8d444c..97f229d 100644 --- a/angular/src/app/components/exit/exit.component.scss +++ b/angular/src/app/components/exit/exit.component.scss @@ -2,7 +2,7 @@ button { margin-right: 1rem; padding: 4px 21px; margin-top: 8px; - background-color: #09467f; + background-color: var(--main-color); color: #fff; border-radius: 3px; border: none; diff --git a/angular/src/app/components/footer-buttons/footer-buttons.component.scss b/angular/src/app/components/footer-buttons/footer-buttons.component.scss index a027c25..67d0f72 100644 --- a/angular/src/app/components/footer-buttons/footer-buttons.component.scss +++ b/angular/src/app/components/footer-buttons/footer-buttons.component.scss @@ -15,7 +15,7 @@ align-items: center; width: 60px; height: 60px; - background: #09467f; + background: var(--main-color); border: solid #fff 1px !important; color: #fff; border-radius: 100%; diff --git a/angular/src/app/components/footer/footer.component.html b/angular/src/app/components/footer/footer.component.html new file mode 100644 index 0000000..a3bb425 --- /dev/null +++ b/angular/src/app/components/footer/footer.component.html @@ -0,0 +1,4 @@ +Логотип +

Горячая линия

+8 (800) 333-41-30 + diff --git a/angular/src/app/components/footer/footer.component.scss b/angular/src/app/components/footer/footer.component.scss new file mode 100644 index 0000000..04b6b18 --- /dev/null +++ b/angular/src/app/components/footer/footer.component.scss @@ -0,0 +1,27 @@ +:host { + display: flex; + flex-direction: column; + align-items: center; + gap: 20px; + padding-bottom: 100px; + h3 { + margin: 0; + font-style: normal; + font-weight: 400; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.24px; + color: #6a737c; + } + .phone-number { + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + text-align: center; + letter-spacing: -0.408px; + color: #d9d9d9; + text-decoration: none; + } +} diff --git a/angular/src/app/components/footer/footer.component.spec.ts b/angular/src/app/components/footer/footer.component.spec.ts new file mode 100644 index 0000000..953b22c --- /dev/null +++ b/angular/src/app/components/footer/footer.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FooterComponent } from './footer.component'; + +describe('FooterComponent', () => { + let component: FooterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ FooterComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(FooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/footer/footer.component.ts b/angular/src/app/components/footer/footer.component.ts new file mode 100644 index 0000000..c7a7ec5 --- /dev/null +++ b/angular/src/app/components/footer/footer.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'] +}) +export class FooterComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/invite-friends/invite-friends.component.html b/angular/src/app/components/invite-friends/invite-friends.component.html new file mode 100644 index 0000000..5a52e20 --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.html @@ -0,0 +1,15 @@ +

Пригласи друзей!

+
+

+ Пригласи друзей зарегистрироваться в приложении по твоему уникальному коду и + получи бонусы, когда они совершат первую покупку. +

+ +
diff --git a/angular/src/app/components/invite-friends/invite-friends.component.scss b/angular/src/app/components/invite-friends/invite-friends.component.scss new file mode 100644 index 0000000..0ff76c3 --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.scss @@ -0,0 +1,33 @@ +:host { + padding: 16px; + h2 { + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + letter-spacing: -0.408px; + } + + & .container { + width: 100%; + display: flex; + flex-direction: row; + gap: 16px; + + p { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + color: #ffffff; + } + + .share { + width: 72px; + height: 48px; + background: #28af49; + padding: 8px 26px; + border: none; + } + } +} diff --git a/angular/src/app/components/invite-friends/invite-friends.component.spec.ts b/angular/src/app/components/invite-friends/invite-friends.component.spec.ts new file mode 100644 index 0000000..2c9c394 --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { InviteFriendsComponent } from './invite-friends.component'; + +describe('InviteFriendsComponent', () => { + let component: InviteFriendsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ InviteFriendsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(InviteFriendsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/invite-friends/invite-friends.component.ts b/angular/src/app/components/invite-friends/invite-friends.component.ts new file mode 100644 index 0000000..8f48f3d --- /dev/null +++ b/angular/src/app/components/invite-friends/invite-friends.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-invite-friends', + templateUrl: './invite-friends.component.html', + styleUrls: ['./invite-friends.component.scss'] +}) +export class InviteFriendsComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/last-order/last-order.component.html b/angular/src/app/components/last-order/last-order.component.html new file mode 100644 index 0000000..deb5430 --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.html @@ -0,0 +1,11 @@ +

Ваш предыдущий заказ

+
+

Дата: 25 марта 2023 года

+

На сумму: 230 ₽

+
+ +

+ Списание бонусов возможно на любые категории. Бонусами можно оплатить 100% + суммы покупки. Бонусы начисляются только на напитки с учётом добавок. + Неиспользованные бонусы сгорают в течение 90 дней. +

diff --git a/angular/src/app/components/last-order/last-order.component.scss b/angular/src/app/components/last-order/last-order.component.scss new file mode 100644 index 0000000..0184346 --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.scss @@ -0,0 +1,45 @@ +:host { + padding: 24px 16px 56px; + + & > h2 { + font-style: normal; + font-weight: 700; + font-size: 15px; + line-height: 20px; + letter-spacing: -0.24px; + } + + & > .info-order { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + span { + color: #828282; + } + } + + .evaluate-order { + margin: 24px 0; + width: 100%; + padding: 12px; + text-align: center; + border: 2px solid #28af49; + border-radius: 6px; + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + letter-spacing: -0.408px; + background-color: transparent; + color: #28af49; + } + + .info { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + color: rgba(255, 255, 255, 0.5); + } +} diff --git a/angular/src/app/components/last-order/last-order.component.spec.ts b/angular/src/app/components/last-order/last-order.component.spec.ts new file mode 100644 index 0000000..101c8ed --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LastOrderComponent } from './last-order.component'; + +describe('LastOrderComponent', () => { + let component: LastOrderComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LastOrderComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LastOrderComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/last-order/last-order.component.ts b/angular/src/app/components/last-order/last-order.component.ts new file mode 100644 index 0000000..d5746d2 --- /dev/null +++ b/angular/src/app/components/last-order/last-order.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-last-order', + templateUrl: './last-order.component.html', + styleUrls: ['./last-order.component.scss'] +}) +export class LastOrderComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/components/navbar/navbar.component.html b/angular/src/app/components/navbar/navbar.component.html index 398caac..af71b4c 100644 --- a/angular/src/app/components/navbar/navbar.component.html +++ b/angular/src/app/components/navbar/navbar.component.html @@ -1,3 +1,5 @@
- Логотип + +

{{title}}

+
diff --git a/angular/src/app/components/navbar/navbar.component.scss b/angular/src/app/components/navbar/navbar.component.scss index d7f8be2..3e52122 100644 --- a/angular/src/app/components/navbar/navbar.component.scss +++ b/angular/src/app/components/navbar/navbar.component.scss @@ -1,14 +1,29 @@ .container { - box-sizing: border-box; - padding: 7px 0 0 5px; - width: 100%; - height: 39px; - background: #09467F; - color: #fff; + box-sizing: border-box; + padding: 12px 16px; + width: 100%; + background: #231f20; + box-shadow: 0px 8px 16px rgba(17, 17, 17, 0.5); + color: #fff; + display: flex; + align-items: center; + justify-content: space-between; + .back-arrow { + font-size: 16px; + display: flex; + align-items: center; + justify-content: center; + } + .plug { + height: 24px; + width: 24px; + visibility: hidden; + } + .title { + font-family: "Gotham Pro", sans-serif; + font-weight: 700; + font-size: 17px; + line-height: 22px; + margin: 0; + } } - -.title { - font-weight: 400; - font-size: 18px; - margin-left: 12px; -} \ No newline at end of file diff --git a/angular/src/app/components/navbar/navbar.component.ts b/angular/src/app/components/navbar/navbar.component.ts index 6a9bec8..c58fad0 100644 --- a/angular/src/app/components/navbar/navbar.component.ts +++ b/angular/src/app/components/navbar/navbar.component.ts @@ -1,11 +1,12 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input, OnInit } from '@angular/core'; @Component({ - selector: 'app-navbar', + selector: 'app-navbar[title]', templateUrl: './navbar.component.html', styleUrls: ['./navbar.component.scss'] }) export class NavbarComponent implements OnInit { + @Input() title: string = 'Название не задано' constructor() { } diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.html b/angular/src/app/components/social-media-buttons/social-media-buttons.component.html new file mode 100644 index 0000000..98fc383 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.html @@ -0,0 +1,3 @@ + + + diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.scss b/angular/src/app/components/social-media-buttons/social-media-buttons.component.scss new file mode 100644 index 0000000..6cd7512 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.scss @@ -0,0 +1,15 @@ +:host { + display: flex; + flex-direction: row; + gap: 16px; + justify-content: space-between; + a { + width: 48px; + height: 48px; + border-radius: 100%; + background: #333333; + display: flex; + align-items: center; + justify-content: center; + } +} \ No newline at end of file diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts b/angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts new file mode 100644 index 0000000..b8cd680 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SocialMediaButtonsComponent } from './social-media-buttons.component'; + +describe('SocialMediaButtonsComponent', () => { + let component: SocialMediaButtonsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ SocialMediaButtonsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(SocialMediaButtonsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/components/social-media-buttons/social-media-buttons.component.ts b/angular/src/app/components/social-media-buttons/social-media-buttons.component.ts new file mode 100644 index 0000000..2c659b0 --- /dev/null +++ b/angular/src/app/components/social-media-buttons/social-media-buttons.component.ts @@ -0,0 +1,38 @@ +import { Component, OnInit } from '@angular/core'; + +export interface ISocialMediaLink { + url: string; + imgUrl: string; + label: string; +} + +@Component({ + selector: 'app-social-media-buttons', + templateUrl: './social-media-buttons.component.html', + styleUrls: ['./social-media-buttons.component.scss'] +}) +export class SocialMediaButtonsComponent implements OnInit { + public links: ISocialMediaLink[] = [ + { + label: 'Инстаграм', + url: 'https://www.instagram.com/', + imgUrl: '/assets/social-media-icons/instagram.svg' + }, + { + label: 'ВК', + url: 'https://vk.com/coffeelike_com', + imgUrl: '/assets/social-media-icons/vk.svg' + }, + { + label: 'Youtube', + url: 'https://www.youtube.com/c/coffeelikeru', + imgUrl: '/assets/social-media-icons/youtube.svg' + } + ] + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/angular/src/app/guards/auth-guard.guard.spec.ts b/angular/src/app/guards/auth-guard.guard.spec.ts new file mode 100644 index 0000000..29c9ce4 --- /dev/null +++ b/angular/src/app/guards/auth-guard.guard.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { AuthGuard } from './auth-guard.guard'; + +describe('AuthGuardGuard', () => { + let guard: AuthGuard; + + beforeEach(() => { + TestBed.configureTestingModule({}); + guard = TestBed.inject(AuthGuard); + }); + + it('should be created', () => { + expect(guard).toBeTruthy(); + }); +}); diff --git a/angular/src/app/guards/auth-guard.guard.ts b/angular/src/app/guards/auth-guard.guard.ts new file mode 100644 index 0000000..8691ed4 --- /dev/null +++ b/angular/src/app/guards/auth-guard.guard.ts @@ -0,0 +1,47 @@ +import { Injectable } from '@angular/core'; +import { + ActivatedRouteSnapshot, + CanActivate, + CanActivateChild, + Router, + RouterStateSnapshot, + UrlTree, +} from '@angular/router'; +import { Observable, of } from 'rxjs'; +import { CookiesService } from '../services/cookies.service'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate, CanActivateChild { + constructor(private cookiesService: CookiesService, private router: Router) {} + + canActivate( + route: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): + | Observable + | Promise + | boolean + | UrlTree + { + if (this.cookiesService.getItem('token')) { + return of(true); + } else { + this.router.navigate(['/login']); + return of(false); + } + } + + canActivateChild( + childRoute: ActivatedRouteSnapshot, + state: RouterStateSnapshot + ): + | boolean + | UrlTree + | Observable + | Promise + { + return this.canActivate(childRoute, state); + } +} diff --git a/angular/src/app/pages/account/account.component.html b/angular/src/app/pages/account/account.component.html index 39afb06..d536ebe 100644 --- a/angular/src/app/pages/account/account.component.html +++ b/angular/src/app/pages/account/account.component.html @@ -4,7 +4,7 @@ 'auth-page': currentPage.code === PageCode.Auth }" > -
@@ -68,7 +68,7 @@ /> @@ -84,7 +84,7 @@ - + --> - + > --> console.log('Successful share')) diff --git a/angular/src/app/pages/guest-card/guest-card.component.html b/angular/src/app/pages/guest-card/guest-card.component.html new file mode 100644 index 0000000..abf93cf --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.html @@ -0,0 +1,134 @@ + +
+
+ +
+
+ За период с 11.01.2023 по 31.03.2023 вам начислено 360 бонусов +
+ +

+ Расчет начисления бонусов - 10% от суммы покупок за период с 11.01.2023г. + по 31.03.2023 г. +

+

+ За период с 11.01.2023г. по 31.03.2023 г. сумма ваших покупок составила + 3700 руб. +

+

Начисляемый бонус 10% от суммы покупок

+
+ +

+ Участник может использовать Бонусы для «оплаты» до 100% стоимости любой + покупки. +

+

+ Списание Бонусов происходит из расчета 1:1 (один Бонус дает скидку 1 + российский рубль / 1 тенге / 1 белорусский рубль. Скидка, предоставляемая + Участнику при списании Бонусов, уменьшает цену товаров в заказе в + соответствии с условиями ПЛ. +

+

+ Для списания Бонусов Участник должен попросить об этом в кофе-баре сети + «COFFEE LIKE» кассира до момента пробития фискального чека, после чего им + будет проверена возможность списания Бонусов. +

+

+ Для всех Участников возможно списание без использования мобильного + приложения. +

+

Полученные Бонусы не подлежат обмену на денежные средства.

+
+ +

+ Начисленные на счет бонусы сгорают по прошествии 90 дней с момента + совершения последней покупки с начислением или списанием бонусов. +

+ +
    + Возврат покупки, за которую бонусы были начислены: +
  • + В случае, если бонусов на счету достаточно для списания, бонусы + списываются в полном ранее начисленном за возвращаемый товар объеме. +
  • +
  • + В случае, если бонусов на счету недостаточно, формируется минусовой + баланс. +
  • +
+ +
    + Возврат покупки, которая была оплачена бонусами: +
  • + В случае предъявления Участником кассового или товарного чека, сумма + бонусов, списанная для оплаты возвращаемого товара, зачисляется на счет + участника. +
  • +
  • + В случае возврата товара с применением оплаты бонусами, клиенту + возвращается денежная сумма в размере, внесенном Участником в оплату + товара при покупке, за вычетом суммы, оплаченной бонусами. +
  • +
+
+ +
+ Сумма ваших покупок за период с 01.04.2023г. - 1200 руб. +
+ +

+ Начисление Бонусных баллов происходит по дифференцированной шкале в + зависимости от уровня: +

+ +
    + Уровень 1 +
  • Сумма покупок за предыдущий период 0-1600 руб.
  • +
  • Начисляемый бонус 3% от суммы покупки
  • +
+
+
    + Уровень 2 +
  • Сумма покупок за предыдущий период 1601-3600 руб.
  • +
  • Начисляемый бонус 6% от суммы покупки
  • +
+
+
    + Уровень 3 +
  • Сумма покупок за предыдущий период  3601-8600 руб.
  • +
  • Начисляемый бонус 10% от суммы покупки
  • +
+
+
    + Уровень 4 +
  • Сумма покупок за предыдущий период — от 8601 руб.
  • +
  • Начисляемый бонус, в % от суммы покупки - 15%
  • +
+
+ +
+

+ До следующего уровня за период с 01.04.2023 по 30.06.2023г осталось + совершить покупки на 401 рублей +

+ + +

Узнать условия начисления бонусов

+
+
+ +
+ +
+
+ Скачай приложение +
+ Подробнее о правилах
Программы лояльности
+
diff --git a/angular/src/app/pages/guest-card/guest-card.component.scss b/angular/src/app/pages/guest-card/guest-card.component.scss new file mode 100644 index 0000000..1ad1850 --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.scss @@ -0,0 +1,191 @@ +:host { + .guest-card { + display: flex; + flex-direction: column; + align-items: center; + padding: 8px 0 0; + max-width: 600px; + margin: 0 auto; + + &__qr { + padding: 10px; + width: fit-content; + background-image: linear-gradient( + #fff 33%, + transparent 0px, + transparent 67%, + #fff 0px + ), + linear-gradient( + 90deg, + #ffe 33%, + transparent 0px, + transparent 66%, + #fff 0px + ), + linear-gradient(#fff 33%, transparent 0px, transparent 67%, #fff 0), + linear-gradient(90deg, #fff 33%, transparent 0, transparent 66%, #fff 0); + background-size: 1px 100%, 100% 1px, 1px 100%, 100% 1px; + background-position: 0 0, 0 0, 100% 100%, 100% 100%; + background-repeat: no-repeat, no-repeat, no-repeat, no-repeat; + cursor: pointer; + } + + &__user-description { + margin: 18px 0 0; + padding: 14px 24px; + width: 100%; + text-align: left; + border-top: 1px solid #fff; + border-bottom: 1px solid #fff; + // font-family: "Goldman"; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 19px; + letter-spacing: -0.5px; + + span { + color: #f2994a; + } + } + + &__purchases-description { + margin: 0; + padding: 14px 24px; + width: 100%; + text-align: left; + border-bottom: 1px solid #fff; + // font-family: "Goldman"; + font-style: normal; + font-weight: 400; + font-size: 16px; + line-height: 19px; + letter-spacing: -0.5px; + + span { + color: #219653; + } + } + + &__level-info { + padding: 36px; + + h2 { + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + text-align: center; + letter-spacing: -0.408px; + } + + input[type="range"] { + -webkit-appearance: none; + width: 100%; + height: 6px; + border-radius: 5px; + display: block; + position: relative; + background: #231f20; + box-shadow: 0px 0px 3px #f2c94c59; + background-image: linear-gradient(#f2c94c, #f2c94c); + background-size: 70% 100%; + background-repeat: no-repeat; + + &::before, + &::after { + content: " "; + display: block; + width: 16px; + height: 16px; + border-radius: 100%; + position: absolute; + top: -5px; + } + + &::before { + background-color: #f2c94c; + left: 0px; + } + + &::after { + background-color: #f2c94c; + right: 0px; + } + + &::-webkit-slider-thumb { + -webkit-appearance: none; + background: #f2c94c; + width: 16px; + height: 16px; + border-radius: 100%; + } + + &::-ms-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: #f2c94c; + cursor: ew-resize; + box-shadow: 0 0 2px 0 #555; + transition: background 0.3s ease-in-out; + } + + &::-moz-range-thumb { + -webkit-appearance: none; + height: 20px; + width: 20px; + border-radius: 50%; + background: #f2c94c; + cursor: ew-resize; + box-shadow: 0 0 2px 0 #555; + transition: background 0.3s ease-in-out; + } + } + + & > .show-more { + margin-top: 42px; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + text-align: center; + color: #28af49; + } + } + + &__download-app { + width: 100%; + position: relative; + margin-top: 32px; + display: flex; + justify-content: flex-end; + img { + width: 100%; + max-width: calc(100% - 16px); + } + } + + &__loyalty-program { + text-align: center; + color: rgba(255, 255, 255, 0.5); + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + text-decoration: none; + margin: 17px 0 22px; + } + } +} + +app-accordion { + ul { + li { + list-style-type: disc; + margin-left: 16px; + } + } +} diff --git a/angular/src/app/pages/guest-card/guest-card.component.spec.ts b/angular/src/app/pages/guest-card/guest-card.component.spec.ts new file mode 100644 index 0000000..f9a4d88 --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { GuestCardComponent } from './guest-card.component'; + +describe('GuestCardComponent', () => { + let component: GuestCardComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ GuestCardComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(GuestCardComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/pages/guest-card/guest-card.component.ts b/angular/src/app/pages/guest-card/guest-card.component.ts new file mode 100644 index 0000000..1ea6044 --- /dev/null +++ b/angular/src/app/pages/guest-card/guest-card.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { IAccordionData } from 'src/app/components/accordion/accordion.component'; + +@Component({ + selector: 'app-guest-card', + templateUrl: './guest-card.component.html', + styleUrls: ['./guest-card.component.scss'], +}) +export class GuestCardComponent implements OnInit { + public qrCodeSize: number = 85; + private isQrCodeClicked: boolean = false; + + public discountLevel: number = 4.2; + + constructor() {} + + ngOnInit(): void {} + + qrCodeClick() { + this.isQrCodeClicked = !this.isQrCodeClicked; + this.qrCodeSize = this.isQrCodeClicked ? 180 : 85; + } +} diff --git a/angular/src/app/pages/login/login.component.html b/angular/src/app/pages/login/login.component.html new file mode 100644 index 0000000..7f6f7f2 --- /dev/null +++ b/angular/src/app/pages/login/login.component.html @@ -0,0 +1,26 @@ +

Участвуй в программе лояльности COFFEE LIKE

+

Начни получать бонусы прямо сейчас

+
+
+ + +
+
+ + +
+

+ Используя приложение, вы принимаете условия в соглашениях и + соглашаетесь на получение рекламно-информационных сообщений +

+ +
+ + +

Введите код из SMS

+
+ + +
+

Не пришло SMS?
Отправим повторно через секунд

+
diff --git a/angular/src/app/pages/login/login.component.scss b/angular/src/app/pages/login/login.component.scss new file mode 100644 index 0000000..2f200ea --- /dev/null +++ b/angular/src/app/pages/login/login.component.scss @@ -0,0 +1,137 @@ +:host { + padding-top: 48px; + display: flex; + flex-direction: column; + align-items: center; + max-width: 600px; + margin: 0 auto 52px; + + h1 { + width: 302px; + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + text-align: center; + letter-spacing: -0.408px; + } + + h2 { + margin-top: 44px; + font-style: normal; + font-weight: 700; + font-size: 20px; + line-height: 24px; + text-align: center; + letter-spacing: 0.38px; + } + + .description { + width: 180px; + font-style: normal; + font-weight: 400; + font-size: 15px; + line-height: 20px; + text-align: center; + letter-spacing: -0.24px; + margin-top: 16px; + } + + form { + display: flex; + flex-direction: column; + align-items: center; + margin-top: 35px; + + .offer { + margin-top: 10px; + padding: 0 16px; + font-family: "Gowun Dodum"; + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 17px; + text-align: center; + span { + color: #13a538; + } + } + + .input-container { + position: relative; + width: 100%; + + label { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + color: #6a737c; + text-align: left; + position: absolute; + top: 10px; + left: 16px; + } + + input { + width: 100%; + padding: 24px 16px 8px; + background-color: #252323; + margin-bottom: 16px; + border: none; + border-top: solid #6a737c 1px; + border-bottom: solid #6a737c 1px; + color: #6a737c; + font-style: normal; + font-weight: 400; + font-size: 22px; + line-height: 28px; + } + } + + button { + height: 46px; + width: calc(100% - 32px); + padding: 10px 24px; + background: #28af49; + border-radius: 6px; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + border: none; + letter-spacing: -0.408px; + color: #ffffff; + font-style: normal; + font-weight: 700; + font-size: 17px; + line-height: 22px; + } + } + + .code-form { + width: 100%; + input { + width: 100%; + padding: 24px 16px 8px; + background-color: #252323; + margin-bottom: 16px; + border: none; + border-top: solid #6a737c 1px; + border-bottom: solid #6a737c 1px; + color: #6a737c; + font-style: normal; + font-weight: 400; + font-size: 22px; + line-height: 28px; + } + } + + .resend-code { + font-style: normal; + font-weight: 400; + font-size: 12px; + line-height: 16px; + text-align: center; + } +} diff --git a/angular/src/app/pages/login/login.component.spec.ts b/angular/src/app/pages/login/login.component.spec.ts new file mode 100644 index 0000000..10eca24 --- /dev/null +++ b/angular/src/app/pages/login/login.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginComponent } from './login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ LoginComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/angular/src/app/pages/login/login.component.ts b/angular/src/app/pages/login/login.component.ts new file mode 100644 index 0000000..a1ff1fc --- /dev/null +++ b/angular/src/app/pages/login/login.component.ts @@ -0,0 +1,25 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { CookiesService } from 'src/app/services/cookies.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.scss'], +}) +export class LoginComponent implements OnInit { + isShowNumber: boolean = true; + + constructor(private cookiesService: CookiesService, private router: Router) {} + + ngOnInit(): void {} + + submitNumber() { + this.isShowNumber = false; + } + + submitCode() { + this.cookiesService.setCookie('token', 'test') + this.router.navigate(['/']) + } +} diff --git a/angular/src/app/pages/main/main.component.html b/angular/src/app/pages/main/main.component.html index 7e1c743..2b74341 100644 --- a/angular/src/app/pages/main/main.component.html +++ b/angular/src/app/pages/main/main.component.html @@ -1,7 +1,7 @@
- + -
\ No newline at end of file + \ No newline at end of file diff --git a/angular/src/app/pages/not-found/not-found.component.html b/angular/src/app/pages/not-found/not-found.component.html index 65401b6..79333bd 100644 --- a/angular/src/app/pages/not-found/not-found.component.html +++ b/angular/src/app/pages/not-found/not-found.component.html @@ -1,5 +1,5 @@
- +

404

Упс, что-то пошло не так!

diff --git a/angular/src/app/pages/not-found/not-found.component.scss b/angular/src/app/pages/not-found/not-found.component.scss index 0f45331..f4a3750 100644 --- a/angular/src/app/pages/not-found/not-found.component.scss +++ b/angular/src/app/pages/not-found/not-found.component.scss @@ -6,14 +6,14 @@ h1 { font-size: 108px; font-weight: 600; - color: #09467f; + color: var(--main-color); } p { margin: 16px 0; font-size: 14px; } button { - background-color: #09467f; + background-color: var(--main-color); color: #fff; border-radius: 8px; display: flex; diff --git a/angular/src/assets/404.gif b/angular/src/assets/404.gif new file mode 100644 index 0000000..cf3f75e Binary files /dev/null and b/angular/src/assets/404.gif differ diff --git a/angular/src/assets/download-app.png b/angular/src/assets/download-app.png new file mode 100644 index 0000000..a70e559 Binary files /dev/null and b/angular/src/assets/download-app.png differ diff --git a/angular/src/assets/download-app.svg b/angular/src/assets/download-app.svg new file mode 100644 index 0000000..04d7655 --- /dev/null +++ b/angular/src/assets/download-app.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/assets/logo.svg b/angular/src/assets/logo.svg index 8ac9adb..335e233 100644 --- a/angular/src/assets/logo.svg +++ b/angular/src/assets/logo.svg @@ -1,9 +1,9 @@ - - + + - + - + diff --git a/angular/src/assets/social-media-icons/instagram.svg b/angular/src/assets/social-media-icons/instagram.svg new file mode 100644 index 0000000..533dde1 --- /dev/null +++ b/angular/src/assets/social-media-icons/instagram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/angular/src/assets/social-media-icons/vk.svg b/angular/src/assets/social-media-icons/vk.svg new file mode 100644 index 0000000..39c8c45 --- /dev/null +++ b/angular/src/assets/social-media-icons/vk.svg @@ -0,0 +1,3 @@ + + + diff --git a/angular/src/assets/social-media-icons/youtube.svg b/angular/src/assets/social-media-icons/youtube.svg new file mode 100644 index 0000000..dc1aa75 --- /dev/null +++ b/angular/src/assets/social-media-icons/youtube.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/angular/src/environments/environment.prod.ts b/angular/src/environments/environment.prod.ts index 88ca8e9..ca311d1 100644 --- a/angular/src/environments/environment.prod.ts +++ b/angular/src/environments/environment.prod.ts @@ -7,7 +7,7 @@ export const environment = { appWPEndpoint: 'http://213.239.210.240:4500/wp-json/woofood/v1/', hasBonusProgram: true, systemId: 'g6zyv8tj53w28ov7cl', - defaultUrl: 'https://fashionlogica.lk.crm4retail.ru', + defaultUrl: 'https://coffee-like.lk.crm4retail.ru', firebase: { apiKey: "AIzaSyCnKvln5itnrBj62POCPHxshAN_Vmd0zds", authDomain: "fashionlogicanotification.firebaseapp.com", @@ -20,5 +20,5 @@ export const environment = { version: packageJson.version, appleWalletEndpoint: 'https://apple-push-notifications.it-retail.tech/apns/api', appleWalletSecret: 'Token F5mbzEERAznGKVbB6l', - clientName: 'fashionlogica' + clientName: 'coffeeLike' } diff --git a/angular/src/environments/environment.ts b/angular/src/environments/environment.ts index d14cf8d..6059fbc 100644 --- a/angular/src/environments/environment.ts +++ b/angular/src/environments/environment.ts @@ -20,5 +20,5 @@ export const environment = { version: packageJson.version, appleWalletEndpoint: 'http://192.168.0.179:4200/apns/api', appleWalletSecret: 'Token F5mbzEERAznGKVbB6l', - clientName: 'fashionlogica' + clientName: 'coffeeLike' }; diff --git a/angular/src/index.html b/angular/src/index.html index c890b74..6195f09 100644 --- a/angular/src/index.html +++ b/angular/src/index.html @@ -2,7 +2,7 @@ - Fashionlogica + Coffee Like @@ -13,8 +13,11 @@ + + + - + diff --git a/angular/src/manifest.webmanifest b/angular/src/manifest.webmanifest index 651c69c..a2def98 100644 --- a/angular/src/manifest.webmanifest +++ b/angular/src/manifest.webmanifest @@ -1,6 +1,6 @@ { - "name": "Fashionlogica", - "short_name": "Fashionlogica", + "name": "Coffee Like", + "short_name": "Coffee Like", "theme_color": "#1976d2", "background_color": "#fafafa", "display": "standalone", diff --git a/angular/src/styles.scss b/angular/src/styles.scss index bac2ba7..d7d2e69 100644 --- a/angular/src/styles.scss +++ b/angular/src/styles.scss @@ -1,15 +1,37 @@ // Сброс стилей html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:middle} article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block} -html{height:100%;color:#000;} +html{height:100%;color:#fff;} body{line-height:1} ol,ul{list-style:none} blockquote,q{quotes:none} blockquote:before,blockquote:after,q:before,q:after{content:'';content:none} table{border-collapse:collapse;border-spacing:0} +// @import url('./app/styles/_fonts.scss'); +@import url('https://fonts.cdnfonts.com/css/gotham-pro'); + + * { - font-family: 'Raleway', sans-serif; + font-family: 'Gotham Pro'; +} + +body { + background-color: #231F20; +} + +:root { + --main-color: #00b26b; + --main-border-radius: 35px; +} + +hr { + width: 100%; + border-top: 1px solid#BDBDBD; +} + +qr-code canvas { + transition: all 0.3s ease 0s; } .p-inputtext { @@ -38,11 +60,11 @@ button { .p-toast-message-custom { background-color: #fff; - border: solid #09467F; + border: solid var(--main-color); border-width: 0 0 0 6px; color: #000; .p-toast-icon-close { - color: #09467F; + color: var(--main-color); } } @@ -64,3 +86,6 @@ button { input::-webkit-date-and-time-value { text-align: left; } + +html, body { height: 100%; } +body { margin: 0; }