1 page - list of project

This commit is contained in:
Anastasia 2025-01-31 10:22:44 +03:00
commit 9686d49c44
33 changed files with 3359 additions and 0 deletions

24
.gitignore vendored Normal file
View File

@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["Vue.volar"]
}

5
README.md Normal file
View File

@ -0,0 +1,5 @@
# Vue 3 + Vite
This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).

162
bun.lock Normal file
View File

@ -0,0 +1,162 @@
{
"lockfileVersion": 1,
"workspaces": {
"": {
"name": "nastya-27-01-25",
"dependencies": {
"vue": "^3.5.13",
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.1",
"vite": "^6.0.5",
},
},
},
"packages": {
"@babel/helper-string-parser": ["@babel/helper-string-parser@7.25.9", "", {}, "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="],
"@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="],
"@babel/parser": ["@babel/parser@7.26.7", "", { "dependencies": { "@babel/types": "^7.26.7" }, "bin": "./bin/babel-parser.js" }, "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w=="],
"@babel/types": ["@babel/types@7.26.7", "", { "dependencies": { "@babel/helper-string-parser": "^7.25.9", "@babel/helper-validator-identifier": "^7.25.9" } }, "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.24.2", "", { "os": "aix", "cpu": "ppc64" }, "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA=="],
"@esbuild/android-arm": ["@esbuild/android-arm@0.24.2", "", { "os": "android", "cpu": "arm" }, "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q=="],
"@esbuild/android-arm64": ["@esbuild/android-arm64@0.24.2", "", { "os": "android", "cpu": "arm64" }, "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg=="],
"@esbuild/android-x64": ["@esbuild/android-x64@0.24.2", "", { "os": "android", "cpu": "x64" }, "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw=="],
"@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.24.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA=="],
"@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.24.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA=="],
"@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.24.2", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg=="],
"@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.24.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q=="],
"@esbuild/linux-arm": ["@esbuild/linux-arm@0.24.2", "", { "os": "linux", "cpu": "arm" }, "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA=="],
"@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.24.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg=="],
"@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.24.2", "", { "os": "linux", "cpu": "ia32" }, "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw=="],
"@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ=="],
"@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw=="],
"@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.24.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw=="],
"@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.24.2", "", { "os": "linux", "cpu": "none" }, "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q=="],
"@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.24.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw=="],
"@esbuild/linux-x64": ["@esbuild/linux-x64@0.24.2", "", { "os": "linux", "cpu": "x64" }, "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q=="],
"@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.24.2", "", { "os": "none", "cpu": "arm64" }, "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw=="],
"@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.24.2", "", { "os": "none", "cpu": "x64" }, "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw=="],
"@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.24.2", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A=="],
"@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.24.2", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA=="],
"@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.24.2", "", { "os": "sunos", "cpu": "x64" }, "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig=="],
"@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.24.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ=="],
"@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.24.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA=="],
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.24.2", "", { "os": "win32", "cpu": "x64" }, "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
"@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.32.0", "", { "os": "android", "cpu": "arm" }, "sha512-G2fUQQANtBPsNwiVFg4zKiPQyjVKZCUdQUol53R8E71J7AsheRMV/Yv/nB8giOcOVqP7//eB5xPqieBYZe9bGg=="],
"@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-qhFwQ+ljoymC+j5lXRv8DlaJYY/+8vyvYmVx074zrLsu5ZGWYsJNLjPPVJJjhZQpyAKUGPydOq9hRLLNvh1s3A=="],
"@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-44n/X3lAlWsEY6vF8CzgCx+LQaoqWGN7TzUfbJDiTIOjJm4+L2Yq+r5a8ytQRGyPqgJDs3Rgyo8eVL7n9iW6AQ=="],
"@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-F9ct0+ZX5Np6+ZDztxiGCIvlCaW87HBdHcozUfsHnj1WCUTBUubAoanhHUfnUHZABlElyRikI0mgcw/qdEm2VQ=="],
"@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.32.0", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-JpsGxLBB2EFXBsTLHfkZDsXSpSmKD3VxXCgBQtlPcuAqB8TlqtLcbeMhxXQkCDv1avgwNjF8uEIbq5p+Cee0PA=="],
"@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-wegiyBT6rawdpvnD9lmbOpx5Sph+yVZKHbhnSP9MqUEDX08G4UzMU+D87jrazGE7lRSyTRs6NEYHtzfkJ3FjjQ=="],
"@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-3pA7xecItbgOs1A5H58dDvOUEboG5UfpTq3WzAdF54acBbUM+olDJAPkgj1GRJ4ZqE12DZ9/hNS2QZk166v92A=="],
"@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-Y7XUZEVISGyge51QbYyYAEHwpGgmRrAxQXO3siyYo2kmaj72USSG8LtlQQgAtlGfxYiOwu+2BdbPjzEpcOpRmQ=="],
"@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-r7/OTF5MqeBrZo5omPXcTnjvv1GsrdH8a8RerARvDFiDwFpDVDnJyByYM/nX+mvks8XXsgPUxkwe/ltaX2VH7w=="],
"@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-HJbifC9vex9NqnlodV2BHVFNuzKL5OnsV2dvTw6e1dpZKkNjPG6WUq+nhEYV6Hv2Bv++BXkwcyoGlXnPrjAKXw=="],
"@rollup/rollup-linux-loongarch64-gnu": ["@rollup/rollup-linux-loongarch64-gnu@4.32.0", "", { "os": "linux", "cpu": "none" }, "sha512-VAEzZTD63YglFlWwRj3taofmkV1V3xhebDXffon7msNz4b14xKsz7utO6F8F4cqt8K/ktTl9rm88yryvDpsfOw=="],
"@rollup/rollup-linux-powerpc64le-gnu": ["@rollup/rollup-linux-powerpc64le-gnu@4.32.0", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Sts5DST1jXAc9YH/iik1C9QRsLcCoOScf3dfbY5i4kH9RJpKxiTBXqm7qU5O6zTXBTEZry69bGszr3SMgYmMcQ=="],
"@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.32.0", "", { "os": "linux", "cpu": "none" }, "sha512-qhlXeV9AqxIyY9/R1h1hBD6eMvQCO34ZmdYvry/K+/MBs6d1nRFLm6BOiITLVI+nFAAB9kUB6sdJRKyVHXnqZw=="],
"@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.32.0", "", { "os": "linux", "cpu": "s390x" }, "sha512-8ZGN7ExnV0qjXa155Rsfi6H8M4iBBwNLBM9lcVS+4NcSzOFaNqmt7djlox8pN1lWrRPMRRQ8NeDlozIGx3Omsw=="],
"@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-VDzNHtLLI5s7xd/VubyS10mq6TxvZBp+4NRWoW+Hi3tgV05RtVm4qK99+dClwTN1McA6PHwob6DEJ6PlXbY83A=="],
"@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-qcb9qYDlkxz9DxJo7SDhWxTWV1gFuwznjbTiov289pASxlfGbaOD54mgbs9+z94VwrXtKTu+2RqwlSTbiOqxGg=="],
"@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-pFDdotFDMXW2AXVbfdUEfidPAk/OtwE/Hd4eYMTNVVaCQ6Yl8et0meDaKNL63L44Haxv4UExpv9ydSf3aSayDg=="],
"@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.32.0", "", { "os": "win32", "cpu": "ia32" }, "sha512-/TG7WfrCAjeRNDvI4+0AAMoHxea/USWhAzf9PVDFHbcqrQ7hMMKp4jZIy4VEjk72AAfN5k4TiSMRXRKf/0akSw=="],
"@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-5hqO5S3PTEO2E5VjCePxv40gIgyS2KvO7E7/vvC/NbIW4SIRamkMr1hqj+5Y67fbBWv/bQLB6KelBQmXlyCjWA=="],
"@types/estree": ["@types/estree@1.0.6", "", {}, "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw=="],
"@vitejs/plugin-vue": ["@vitejs/plugin-vue@5.2.1", "", { "peerDependencies": { "vite": "^5.0.0 || ^6.0.0", "vue": "^3.2.25" } }, "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ=="],
"@vue/compiler-core": ["@vue/compiler-core@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/shared": "3.5.13", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q=="],
"@vue/compiler-dom": ["@vue/compiler-dom@3.5.13", "", { "dependencies": { "@vue/compiler-core": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA=="],
"@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.13", "", { "dependencies": { "@babel/parser": "^7.25.3", "@vue/compiler-core": "3.5.13", "@vue/compiler-dom": "3.5.13", "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.48", "source-map-js": "^1.2.0" } }, "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ=="],
"@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA=="],
"@vue/reactivity": ["@vue/reactivity@3.5.13", "", { "dependencies": { "@vue/shared": "3.5.13" } }, "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg=="],
"@vue/runtime-core": ["@vue/runtime-core@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/shared": "3.5.13" } }, "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw=="],
"@vue/runtime-dom": ["@vue/runtime-dom@3.5.13", "", { "dependencies": { "@vue/reactivity": "3.5.13", "@vue/runtime-core": "3.5.13", "@vue/shared": "3.5.13", "csstype": "^3.1.3" } }, "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog=="],
"@vue/server-renderer": ["@vue/server-renderer@3.5.13", "", { "dependencies": { "@vue/compiler-ssr": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "vue": "3.5.13" } }, "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA=="],
"@vue/shared": ["@vue/shared@3.5.13", "", {}, "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="],
"csstype": ["csstype@3.1.3", "", {}, "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="],
"entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
"esbuild": ["esbuild@0.24.2", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.24.2", "@esbuild/android-arm": "0.24.2", "@esbuild/android-arm64": "0.24.2", "@esbuild/android-x64": "0.24.2", "@esbuild/darwin-arm64": "0.24.2", "@esbuild/darwin-x64": "0.24.2", "@esbuild/freebsd-arm64": "0.24.2", "@esbuild/freebsd-x64": "0.24.2", "@esbuild/linux-arm": "0.24.2", "@esbuild/linux-arm64": "0.24.2", "@esbuild/linux-ia32": "0.24.2", "@esbuild/linux-loong64": "0.24.2", "@esbuild/linux-mips64el": "0.24.2", "@esbuild/linux-ppc64": "0.24.2", "@esbuild/linux-riscv64": "0.24.2", "@esbuild/linux-s390x": "0.24.2", "@esbuild/linux-x64": "0.24.2", "@esbuild/netbsd-arm64": "0.24.2", "@esbuild/netbsd-x64": "0.24.2", "@esbuild/openbsd-arm64": "0.24.2", "@esbuild/openbsd-x64": "0.24.2", "@esbuild/sunos-x64": "0.24.2", "@esbuild/win32-arm64": "0.24.2", "@esbuild/win32-ia32": "0.24.2", "@esbuild/win32-x64": "0.24.2" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA=="],
"estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="],
"fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
"magic-string": ["magic-string@0.30.17", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } }, "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA=="],
"nanoid": ["nanoid@3.3.8", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w=="],
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"postcss": ["postcss@8.5.1", "", { "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ=="],
"rollup": ["rollup@4.32.0", "", { "dependencies": { "@types/estree": "1.0.6" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.32.0", "@rollup/rollup-android-arm64": "4.32.0", "@rollup/rollup-darwin-arm64": "4.32.0", "@rollup/rollup-darwin-x64": "4.32.0", "@rollup/rollup-freebsd-arm64": "4.32.0", "@rollup/rollup-freebsd-x64": "4.32.0", "@rollup/rollup-linux-arm-gnueabihf": "4.32.0", "@rollup/rollup-linux-arm-musleabihf": "4.32.0", "@rollup/rollup-linux-arm64-gnu": "4.32.0", "@rollup/rollup-linux-arm64-musl": "4.32.0", "@rollup/rollup-linux-loongarch64-gnu": "4.32.0", "@rollup/rollup-linux-powerpc64le-gnu": "4.32.0", "@rollup/rollup-linux-riscv64-gnu": "4.32.0", "@rollup/rollup-linux-s390x-gnu": "4.32.0", "@rollup/rollup-linux-x64-gnu": "4.32.0", "@rollup/rollup-linux-x64-musl": "4.32.0", "@rollup/rollup-win32-arm64-msvc": "4.32.0", "@rollup/rollup-win32-ia32-msvc": "4.32.0", "@rollup/rollup-win32-x64-msvc": "4.32.0", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-JmrhfQR31Q4AuNBjjAX4s+a/Pu/Q8Q9iwjWBsjRH1q52SPFE2NqRMK6fUZKKnvKO6id+h7JIRf0oYsph53eATg=="],
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
"vite": ["vite@6.0.11", "", { "dependencies": { "esbuild": "^0.24.2", "postcss": "^8.4.49", "rollup": "^4.23.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "jiti", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg=="],
"vue": ["vue@3.5.13", "", { "dependencies": { "@vue/compiler-dom": "3.5.13", "@vue/compiler-sfc": "3.5.13", "@vue/runtime-dom": "3.5.13", "@vue/server-renderer": "3.5.13", "@vue/shared": "3.5.13" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ=="],
}
}

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Vue</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

1163
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

23
package.json Normal file
View File

@ -0,0 +1,23 @@
{
"name": "nastya-27-01-25",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "bunx --bun vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@tailwindcss/postcss": "^4.0.1",
"@tailwindcss/vite": "^4.0.1",
"vue": "^3.5.13",
"vue-router": "^4.5.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.2.1",
"autoprefixer": "^10.4.20",
"tailwindcss": "^4.0.1",
"vite": "^6.0.5"
}
}

View File

@ -0,0 +1,3 @@
<svg width="23" height="22" viewBox="0 0 23 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 0.833313C11.9245 0.833313 12.3178 1.05601 12.5362 1.41996L15.8862 7.00327L21.4037 8.10678C21.8406 8.19417 22.194 8.51498 22.3232 8.94149C22.4523 9.368 22.3362 9.83096 22.0211 10.1461L17.6451 14.5221L18.7266 19.9297C18.8171 20.3822 18.6419 20.8468 18.2751 21.1269C17.9084 21.407 17.4141 21.4538 17.0013 21.2474L11.5 18.4968L5.99875 21.2474C5.58597 21.4538 5.09167 21.407 4.72491 21.1269C4.35815 20.8468 4.18299 20.3822 4.2735 19.9297L5.355 14.5221L0.978943 10.1461C0.663837 9.83096 0.547742 9.368 0.676878 8.94149C0.806014 8.51498 1.15942 8.19417 1.59639 8.10678L7.11391 7.00327L10.4639 1.41996C10.6823 1.05601 11.0756 0.833313 11.5 0.833313ZM11.5 4.39022L8.91117 8.705C8.73601 8.99692 8.44584 9.20142 8.112 9.26818L4.28428 10.0337L7.52112 13.2706C7.8068 13.5562 7.9308 13.9658 7.85157 14.362L7.12776 17.981L10.9596 16.065C11.2998 15.895 11.7002 15.895 12.0404 16.065L15.8723 17.981L15.1485 14.362C15.0693 13.9658 15.1933 13.5562 15.4789 13.2706L18.7158 10.0337L14.8881 9.26818C14.5542 9.20142 14.2641 8.99692 14.0889 8.705L11.5 4.39022Z" fill="#3914AF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,4 @@
<svg width="23" height="22" viewBox="0 0 23 22" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.5 0.833313C11.9245 0.833313 12.3178 1.05601 12.5362 1.41996L15.8862 7.00327L21.4037 8.10678C21.8406 8.19417 22.194 8.51498 22.3232 8.94149C22.4523 9.368 22.3362 9.83096 22.0211 10.1461L17.6451 14.5221L18.7266 19.9297C18.8171 20.3822 18.6419 20.8468 18.2751 21.1269C17.9084 21.407 17.4141 21.4538 17.0013 21.2474L11.5 18.4968L5.99875 21.2474C5.58597 21.4538 5.09167 21.407 4.72491 21.1269C4.35815 20.8468 4.18299 20.3822 4.2735 19.9297L5.355 14.5221L0.978943 10.1461C0.663837 9.83096 0.547742 9.368 0.676878 8.94149C0.806014 8.51498 1.15942 8.19417 1.59639 8.10678L7.11391 7.00327L10.4639 1.41996C10.6823 1.05601 11.0756 0.833313 11.5 0.833313ZM11.5 4.39022L8.91117 8.705C8.73601 8.99692 8.44584 9.20142 8.112 9.26818L4.28428 10.0337L7.52112 13.2706C7.8068 13.5562 7.9308 13.9658 7.85157 14.362L7.12776 17.981L10.9596 16.065C11.2998 15.895 11.7002 15.895 12.0404 16.065L15.8723 17.981L15.1485 14.362C15.0693 13.9658 15.1933 13.5562 15.4789 13.2706L18.7158 10.0337L14.8881 9.26818C14.5542 9.20142 14.2641 8.99692 14.0889 8.705L11.5 4.39022Z"
fill="#351BA9" stroke="#351BA9" />
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

5
public/Menu.svg Normal file
View File

@ -0,0 +1,5 @@
<svg width="5" height="21" viewBox="0 0 5 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.49998 5.66666C1.16529 5.66666 0.0833129 4.58468 0.083313 3.24999C0.083313 1.91531 1.16529 0.833328 2.49998 0.833328C3.83467 0.833328 4.91665 1.91531 4.91665 3.24999C4.91665 4.58468 3.83467 5.66666 2.49998 5.66666Z" fill="#3914AF"/>
<path d="M2.49998 12.9167C1.16529 12.9167 0.0833129 11.8347 0.083313 10.5C0.083313 9.16531 1.16529 8.08333 2.49998 8.08333C3.83467 8.08333 4.91665 9.16531 4.91665 10.5C4.91665 11.8347 3.83467 12.9167 2.49998 12.9167Z" fill="#3914AF"/>
<path d="M2.49998 20.1667C1.16529 20.1667 0.0833129 19.0847 0.083313 17.75C0.083313 16.4153 1.16529 15.3333 2.49998 15.3333C3.83467 15.3333 4.91665 16.4153 4.91665 17.75C4.91665 19.0847 3.83467 20.1667 2.49998 20.1667Z" fill="#3914AF"/>
</svg>

After

Width:  |  Height:  |  Size: 817 B

12
public/Statistics.svg Normal file
View File

@ -0,0 +1,12 @@
<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="6.60742" y="8.3291" width="2" height="9" rx="1" fill="#3914AF" stroke="#3914AF" stroke-width="0.5"/>
<rect x="14.6074" y="6.3291" width="2" height="11" rx="1" fill="#3914AF" stroke="#3914AF" stroke-width="0.5"/>
<rect x="14.6074" y="2.3291" width="2" height="11" rx="1" fill="white" stroke="#3914AF" stroke-width="0.5"/>
<rect x="10.6074" y="13.3291" width="2" height="4" rx="1" fill="#3914AF" stroke="#3914AF" stroke-width="0.5"/>
<rect x="10.6074" y="13.3291" width="2" height="3" rx="1" fill="white" stroke="#3914AF" stroke-width="0.5"/>
<rect x="6.60742" y="8.3291" width="2" height="5" rx="1" fill="white" stroke="#3914AF" stroke-width="0.5"/>
<rect x="2.60742" y="0.329102" width="2" height="21" rx="1" fill="#3914AF"/>
<rect x="3.39941" width="2" height="5.49948" rx="1" transform="rotate(38.1793 3.39941 0)" fill="#3914AF"/>
<rect x="22.458" y="19.3291" width="2" height="5.70827" rx="1" transform="rotate(58.1871 22.458 19.3291)" fill="#3914AF"/>
<rect x="2.60742" y="19.3291" width="21" height="2" rx="1" fill="#3914AF"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

3
public/Summary.svg Normal file
View File

@ -0,0 +1,3 @@
<svg width="14" height="18" viewBox="0 0 14 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13 5V1H1L8.38462 9L1 17H13V13" stroke="#3914AF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 227 B

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

7
public/olimp/olimp.svg Normal file
View File

@ -0,0 +1,7 @@
<svg width="129" height="28" viewBox="0 0 129 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.27067 4.07039C5.41627 1.5593 8.46037 0.304932 12.4006 0.304932C16.3409 0.304932 19.3896 1.5593 21.5469 4.07039C23.7066 6.57914 24.7852 9.7806 24.7852 13.6701C24.7852 17.5877 23.7066 20.7938 21.5469 23.2909C19.3896 25.7879 16.3385 27.0376 12.4006 27.0376C8.46037 27.0376 5.41627 25.7856 3.27067 23.2909C1.12506 20.7938 0.0510864 17.5877 0.0510864 13.6701C0.0534262 9.7806 1.12506 6.57914 3.27067 4.07039ZM6.77103 20.3913C8.08834 22.1371 9.96253 23.01 12.4006 23.01C14.8598 23.01 16.748 22.1394 18.0676 20.3913C19.385 18.6478 20.0424 16.4058 20.0424 13.6701C20.0424 10.9343 19.385 8.69473 18.0676 6.9489C16.7503 5.20542 14.8598 4.33016 12.4006 4.33016C9.96487 4.33016 8.08834 5.20542 6.77103 6.9489C5.45605 8.69473 4.79622 10.9343 4.79622 13.6701C4.79622 16.4058 5.45605 18.6478 6.77103 20.3913Z" fill="#351BA9"/>
<path d="M44.931 0.681732C45.6563 0.681732 46.2155 0.90171 46.6063 1.34168C46.9947 1.78164 47.1889 2.33862 47.1889 3.0173V24.3674C47.1889 25.046 46.9947 25.5984 46.6063 26.0243C46.2155 26.4502 45.6586 26.6655 44.931 26.6655C44.2009 26.6655 43.6441 26.4525 43.2556 26.0243C42.8672 25.5984 42.673 25.046 42.673 24.3674V4.71163H35.7097C35.5834 11.943 35.0055 17.4028 33.9783 21.091C33.501 22.776 32.7756 24.1544 31.7952 25.2333C30.8149 26.3121 29.6239 26.8527 28.22 26.8527C27.1648 26.8527 26.3879 26.5719 25.8849 26.0079C25.3842 25.4416 25.2321 24.7442 25.4333 23.9181C25.6603 23.0147 26.3903 22.5631 27.6163 22.5631C28.6973 22.5631 29.4858 21.7206 29.9912 20.0403C30.9202 17.0518 31.4466 11.3813 31.5706 3.01964C31.594 2.28948 31.7976 1.7208 32.1743 1.30657C32.5487 0.892351 33.0658 0.68641 33.7162 0.68641H44.931V0.681732Z" fill="#351BA9"/>
<path d="M57.0535 18.7929L69.2135 1.96183C69.8429 1.1053 70.5683 0.679375 71.3989 0.679375C72.8285 0.679375 73.5445 1.45634 73.5445 3.0126V24.3627C73.5445 25.0414 73.3573 25.5936 72.9806 26.0196C72.6039 26.4455 72.0517 26.6608 71.3217 26.6608C70.5683 26.6608 69.9974 26.4408 69.6089 26.0032C69.2182 25.5632 69.024 25.0156 69.024 24.3627V8.62218L56.7891 25.3409C56.1129 26.2208 55.4086 26.6608 54.6809 26.6608C54.0047 26.6608 53.4759 26.4595 53.0992 26.0594C52.7225 25.6568 52.5353 25.0928 52.5353 24.3627V3.0126C52.5353 2.33627 52.7225 1.77695 53.0992 1.33698C53.4759 0.899358 54.0398 0.677032 54.7956 0.677032C55.5233 0.677032 56.0802 0.897017 56.4686 1.33698C56.8593 1.77695 57.0535 2.33627 57.0535 3.0126V18.7929Z" fill="#351BA9"/>
<path d="M91.3131 14.2738L98.8426 2.10924C99.4439 1.15442 100.186 0.679352 101.065 0.679352C101.742 0.679352 102.263 0.894652 102.628 1.32058C102.991 1.74416 103.174 2.3105 103.174 3.01258V24.3627C103.174 25.0413 102.979 25.5936 102.589 26.0195C102.2 26.4455 101.641 26.6608 100.913 26.6608C100.211 26.6608 99.6615 26.4478 99.2567 26.0195C98.8543 25.5936 98.6554 25.0413 98.6554 24.3627V9.03872L93.1592 17.9246C92.607 18.828 91.9167 19.282 91.0861 19.282C90.2344 19.282 89.5325 18.8444 88.9779 17.9621L83.4068 9.22828V24.3627C83.4068 25.8955 82.7049 26.6608 81.2986 26.6608C79.8924 26.6608 79.1905 25.8955 79.1905 24.3627V3.05236C79.1905 2.24965 79.3847 1.65289 79.7731 1.26207C80.1615 0.87359 80.6692 0.679352 81.2986 0.679352C82.251 0.679352 83.0301 1.16612 83.6338 2.14668L91.3131 14.2738Z" fill="#351BA9"/>
<path d="M108.82 3.01491C108.82 2.33624 109.014 1.77927 109.405 1.3393C109.795 0.901677 110.338 0.679352 111.042 0.679352H126.743C127.468 0.679352 128.027 0.899337 128.416 1.3393C128.806 1.77927 129 2.33624 129 3.01491V24.365C129 25.0437 128.806 25.596 128.416 26.0219C128.027 26.4478 127.468 26.6631 126.743 26.6631C126.013 26.6631 125.456 26.4502 125.067 26.0219C124.676 25.596 124.482 25.0437 124.482 24.365V4.70926H113.34V24.365C113.34 25.0437 113.137 25.596 112.736 26.0219C112.334 26.4478 111.782 26.6631 111.08 26.6631C110.352 26.6631 109.795 26.4502 109.405 26.0219C109.014 25.596 108.82 25.0437 108.82 24.365V3.01491Z" fill="#351BA9"/>
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,13 @@
<svg width="129" height="19" viewBox="0 0 129 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.54388 6.66064C2.48449 5.57477 3.79478 5.02948 5.47243 5.02948C7.14773 5.02948 8.45803 5.57477 9.40331 6.66064C10.3463 7.74652 10.8166 9.11322 10.8166 10.7584C10.8166 12.4036 10.3463 13.7703 9.40331 14.8585C8.45803 15.9444 7.15007 16.4827 5.47243 16.4827C3.79712 16.4827 2.48683 15.9421 1.54388 14.8585C0.600939 13.7703 0.128296 12.4036 0.128296 10.7584C0.128296 9.11322 0.600939 7.74652 1.54388 6.66064ZM2.50555 14.0816C3.22387 14.9053 4.21361 15.3172 5.47009 15.3172C6.72657 15.3172 7.71631 14.9053 8.43463 14.0816C9.15295 13.2578 9.51328 12.1509 9.51328 10.7584C9.51328 9.36597 9.15061 8.25903 8.43463 7.43526C7.71631 6.6115 6.72657 6.1996 5.47009 6.1996C4.21361 6.1996 3.22387 6.6115 2.50555 7.43526C1.78722 8.25903 1.42923 9.36597 1.42923 10.7584C1.43157 12.1509 1.78956 13.2578 2.50555 14.0816Z" fill="#351BA9"/>
<path d="M20.0308 2.38266C19.3054 2.64945 18.7111 2.88348 18.2455 3.08006L17.9086 3.21346C17.34 3.43812 16.8884 3.63938 16.5515 3.82192C16.2146 3.99978 15.8074 4.28763 15.3278 4.68547C14.8504 5.08331 14.4784 5.60753 14.2164 6.25578C13.9566 6.90871 13.8022 7.68099 13.7577 8.57965C14.2047 7.59206 14.8317 6.86892 15.6319 6.41257C16.4298 5.95623 17.3049 5.72688 18.2478 5.72688C19.8179 5.72688 21.0205 6.23705 21.8512 7.25271C22.6818 8.27306 23.0959 9.55085 23.0959 11.0954C23.0959 12.6517 22.621 13.9388 21.671 14.9545C20.7187 15.9748 19.4645 16.485 17.9086 16.485C14.4082 16.485 12.6557 14.2828 12.6557 9.88317C12.6557 8.29414 12.8312 7.007 13.1845 6.01941C13.5355 5.03183 14.0923 4.21741 14.8575 3.58321C15.6226 2.94666 16.6989 2.36862 18.0911 1.84206C18.18 1.81164 18.6058 1.65251 19.371 1.37168C20.1337 1.08617 20.6883 0.870862 21.0322 0.718745C21.5868 0.463658 21.9377 0.494083 22.0875 0.807676C22.2676 1.17041 22.1015 1.484 21.5961 1.75313C21.2779 1.90291 20.7561 2.11353 20.0308 2.38266ZM15.1242 14.2056C15.7981 14.9475 16.7246 15.3149 17.9086 15.3149C19.1206 15.3149 20.0729 14.9287 20.7608 14.1588C21.451 13.3888 21.795 12.3732 21.795 11.1165C21.795 9.84571 21.4604 8.82069 20.7936 8.05075C20.1291 7.28081 19.1814 6.89466 17.9554 6.89466C16.8182 6.89466 15.8917 7.29485 15.1827 8.09521C14.4714 8.89792 14.1157 9.94167 14.1157 11.2288C14.1134 12.4715 14.4527 13.4661 15.1242 14.2056Z" fill="#351BA9"/>
<path d="M24.4881 6.42425C24.0856 6.42425 23.8821 6.23235 23.8821 5.83919C23.8821 5.67537 23.9382 5.53729 24.0505 5.42496C24.1629 5.31263 24.3103 5.25647 24.4881 5.25647H27.586C28.0072 5.25647 28.2154 5.49752 28.2154 5.97727V9.18808C28.9337 9.06873 29.6076 9.00788 30.2347 9.00788C33.2296 9.00788 34.7248 10.2201 34.7248 12.6446C34.7248 13.0518 34.6616 13.438 34.5329 13.8124C34.4066 14.1892 34.1866 14.58 33.8707 14.9919C33.5572 15.4038 33.0658 15.7361 32.4013 15.9912C31.7345 16.2463 30.9296 16.3726 29.9866 16.3726C28.908 16.3726 28.1101 16.3048 27.5837 16.169C27.1648 16.0661 26.9543 15.7946 26.9543 15.3617V6.42191H24.4881V6.42425ZM32.4926 14.6338C33.1126 14.2524 33.4238 13.5878 33.4238 12.6446C33.4238 11.7764 33.1501 11.1469 32.6049 10.7584C32.0574 10.3699 31.2385 10.1733 30.1458 10.1733C29.638 10.1733 28.9946 10.2178 28.2154 10.3067V15.1136C28.8729 15.1768 29.4204 15.2049 29.8556 15.2049C30.9904 15.2049 31.8702 15.0153 32.4926 14.6338Z" fill="#351BA9"/>
<path d="M44.0208 14.6432C44.456 14.4326 44.7555 14.4724 44.9193 14.7556C45.0971 15.0691 45.0082 15.3547 44.6479 15.6098C43.7658 16.1948 42.6286 16.4873 41.2364 16.4873C39.5143 16.4873 38.2181 15.9912 37.3524 15.0013C36.4843 14.0137 36.0491 12.6236 36.0491 10.8239C36.0491 9.13428 36.5053 7.74652 37.4202 6.66065C38.3327 5.57243 39.5822 5.03183 41.1686 5.03183C42.5608 5.03183 43.6254 5.44372 44.3578 6.27684C45.0901 7.10763 45.4575 8.11394 45.4575 9.29577C45.4575 9.65851 45.4364 9.97678 45.3896 10.2646C45.2843 10.9971 44.8889 11.3622 44.1986 11.3622H37.329C37.4202 12.6376 37.7993 13.6135 38.4731 14.2945C39.1493 14.9755 40.0689 15.3149 41.2364 15.3149C42.1653 15.3149 43.0943 15.0926 44.0208 14.6432ZM38.4521 7.25506C37.7922 7.95948 37.4179 8.95643 37.329 10.2436H44.222C44.2525 10.047 44.2665 9.76381 44.2665 9.38937C44.2361 8.41583 43.9553 7.64121 43.4242 7.06551C42.893 6.4898 42.1092 6.19961 41.0773 6.19961C39.987 6.19961 39.1119 6.55065 38.4521 7.25506Z" fill="#351BA9"/>
<path d="M46.1314 15.6331C46.1314 15.467 46.1782 15.3359 46.2765 15.2376C46.3748 15.1393 46.4894 15.0925 46.6251 15.0925H47.3879C48.4806 13.4918 49.0281 10.4191 49.0281 5.88365C49.0281 5.7058 49.0819 5.55369 49.1966 5.43667C49.3089 5.31732 49.4539 5.25647 49.6341 5.25647H55.0695C55.3222 5.25647 55.5141 5.32667 55.6427 5.46943C55.7691 5.61218 55.8346 5.78068 55.8346 5.97259V15.0925H56.7542C57.1449 15.0925 57.3391 15.2844 57.3391 15.6776V18.2355C57.3391 18.7152 57.1449 18.9563 56.7542 18.9563C56.3658 18.9563 56.1715 18.7152 56.1715 18.2355V16.2603H47.3013V18.2355C47.3013 18.7152 47.1071 18.9563 46.7164 18.9563C46.328 18.9563 46.1338 18.7152 46.1338 18.2355V15.6331H46.1314ZM48.8035 15.0925H54.5735V6.42425H50.2635C50.1582 10.288 49.6715 13.1782 48.8035 15.0925Z" fill="#351BA9"/>
<path d="M67.5267 7.3674L60.7904 15.9444C60.6102 16.155 60.3926 16.258 60.1399 16.258C59.7211 16.258 59.5105 16.0216 59.5105 15.5395V5.97495C59.5105 5.4952 59.7211 5.25415 60.1399 5.25415C60.5587 5.25415 60.7693 5.4952 60.7693 5.97495V14.2149L67.5267 5.57008C67.7069 5.35946 67.9151 5.25649 68.1561 5.25649C68.5749 5.25649 68.7855 5.49754 68.7855 5.97729V15.5419C68.7855 16.0216 68.5749 16.2603 68.1561 16.2603C67.7373 16.2603 67.5267 16.024 67.5267 15.5419V7.3674Z" fill="#351BA9"/>
<path d="M79.607 5.97727C79.607 5.49752 79.8153 5.25647 80.2364 5.25647C80.6553 5.25647 80.8659 5.49752 80.8659 5.97727V15.5419C80.8659 16.0216 80.6529 16.2626 80.2364 16.2626C79.8176 16.2626 79.607 16.0216 79.607 15.5419V11.1633H73.0064V15.5419C73.0064 16.0216 72.7959 16.2626 72.377 16.2626C71.9582 16.2626 71.7476 16.0216 71.7476 15.5419V5.97727C71.7476 5.49752 71.9582 5.25647 72.377 5.25647C72.7959 5.25647 73.0064 5.49752 73.0064 5.97727V9.99547H79.607V5.97727Z" fill="#351BA9"/>
<path d="M91.2359 14.6432C91.6688 14.4326 91.9682 14.4724 92.1344 14.7556C92.3145 15.0691 92.2233 15.3547 91.8653 15.6098C90.9832 16.1948 89.846 16.4873 88.4538 16.4873C86.7294 16.4873 85.4355 15.9912 84.5674 15.0013C83.6993 14.0137 83.2665 12.6236 83.2665 10.8239C83.2665 9.13428 83.7227 7.74652 84.6353 6.66065C85.5501 5.57243 86.7996 5.03183 88.386 5.03183C89.7782 5.03183 90.8428 5.44372 91.5752 6.27684C92.3099 7.10763 92.6749 8.11394 92.6749 9.29577C92.6749 9.65851 92.6515 9.97678 92.607 10.2646C92.5041 10.9971 92.1063 11.3622 91.4161 11.3622H84.5464C84.6353 12.6376 85.0167 13.6135 85.6929 14.2945C86.3667 14.9755 87.2863 15.3149 88.4562 15.3149C89.3781 15.3149 90.307 15.0926 91.2359 14.6432ZM85.6671 7.25506C85.0073 7.95948 84.6329 8.95643 84.544 10.2436H91.4371C91.4675 10.047 91.4816 9.76381 91.4816 9.38937C91.4511 8.41583 91.1727 7.64121 90.6392 7.06551C90.1081 6.4898 89.3243 6.19961 88.2924 6.19961C87.202 6.19961 86.327 6.55065 85.6671 7.25506Z" fill="#351BA9"/>
<path d="M102.933 5.97727C102.933 5.49752 103.141 5.25647 103.562 5.25647C103.981 5.25647 104.191 5.49752 104.191 5.97727V15.5419C104.191 16.0216 103.981 16.2626 103.562 16.2626C103.143 16.2626 102.933 16.0216 102.933 15.5419V11.1633H96.332V15.5419C96.332 16.0216 96.1215 16.2626 95.7026 16.2626C95.2838 16.2626 95.0732 16.0216 95.0732 15.5419V5.97727C95.0732 5.49752 95.2838 5.25647 95.7026 5.25647C96.1215 5.25647 96.332 5.49752 96.332 5.97727V9.99547H102.933V5.97727Z" fill="#351BA9"/>
<path d="M115.17 7.3674L108.433 15.9444C108.253 16.155 108.036 16.258 107.783 16.258C107.364 16.258 107.154 16.0216 107.154 15.5395V5.97495C107.154 5.4952 107.364 5.25415 107.783 5.25415C108.202 5.25415 108.412 5.4952 108.412 5.97495V14.2149L115.17 5.57008C115.348 5.35946 115.558 5.25649 115.799 5.25649C116.218 5.25649 116.429 5.49754 116.429 5.97729V15.5419C116.429 16.0216 116.218 16.2603 115.799 16.2603C115.38 16.2603 115.17 16.024 115.17 15.5419V7.3674Z" fill="#351BA9"/>
<path d="M126.799 14.6432C127.232 14.4326 127.531 14.4724 127.697 14.7556C127.877 15.0691 127.786 15.3547 127.426 15.6098C126.544 16.1948 125.406 16.4873 124.014 16.4873C122.29 16.4873 120.996 15.9912 120.128 15.0013C119.26 14.0137 118.827 12.6236 118.827 10.8239C118.827 9.13428 119.283 7.74652 120.196 6.66065C121.111 5.57243 122.36 5.03183 123.946 5.03183C125.339 5.03183 126.403 5.44372 127.136 6.27684C127.868 7.10763 128.235 8.11394 128.235 9.29577C128.235 9.65851 128.212 9.97678 128.167 10.2646C128.064 10.9971 127.667 11.3622 126.976 11.3622H120.107C120.196 12.6376 120.577 13.6135 121.253 14.2945C121.927 14.9755 122.847 15.3149 124.017 15.3149C124.941 15.3149 125.87 15.0926 126.799 14.6432ZM121.23 7.25506C120.57 7.95948 120.196 8.95643 120.107 10.2436H127C127.03 10.047 127.044 9.76381 127.044 9.38937C127.014 8.41583 126.735 7.64121 126.202 7.06551C125.671 6.4898 124.887 6.19961 123.855 6.19961C122.765 6.19961 121.887 6.55065 121.23 7.25506Z" fill="#351BA9"/>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

46
public/olimp/vuetify.ts Normal file
View File

@ -0,0 +1,46 @@
import { createVuetify } from 'vuetify';
import '@mdi/font/css/materialdesignicons.css';
import 'vuetify/styles';
const myAllBlackTheme: ThemeDefinition = {
dark: false,
colors: {
background: '#000000',
surface: '#000000',
primary: '#000000',
'primary-darken-1': '#000000',
secondary: '#000000',
'secondary-darken-1': '#000000',
error: '#B00020',
info: '#2196F3',
success: '#4CAF50',
warning: '#FB8C00',
}
}
export default defineNuxtPlugin(nuxtApp => {
const vuetify = createVuetify({
// your config will come here
theme: {
defaultTheme: 'light',
// themes: {
// myAllBlackTheme,
// }
themes: {
light: {
background: '#FFFFFF',
surface: '#F2F5F8',
primary: '#6200EE',
secondary: '#03DAC6',
error: '#B00020',
info: '#2196F3',
success: '#4CAF50',
warning: '#FB8C00',
},
dark: myAllBlackTheme,
},
}
})
nuxtApp.vueApp.use(vuetify)
})

View File

@ -0,0 +1,3 @@
<svg width="143" height="144" viewBox="0 0 143 144" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.40009 141.994C8.01654 126.831 11.7345 111.407 15.7987 96.0922C19.4091 82.4789 22.865 68.4421 28.6794 55.5638C30.212 52.1681 32.3061 47.7005 35.1326 45.5803C35.6591 45.1871 36.2838 44.8805 36.5365 44.7963C37.3274 44.5365 38.1089 44.6091 39.3466 44.8524C42.1684 45.4094 43.6472 47.6537 45.6009 49.5072C48.8884 52.6267 54.1951 53.7641 57.5129 50.2608C60.4892 47.1201 62.3002 42.8071 64.062 38.9246C68.6691 28.7656 72.1672 17.6541 78.6016 8.44286C79.6288 6.97085 80.9368 5.39352 82.3336 4.42232C83.5925 3.54706 84.6267 3.29666 85.7849 3.53302C90.3218 4.45274 94.3743 8.57626 97.5822 11.6279C105.416 19.0863 112.218 27.6867 118.669 36.341C125.983 46.1513 132.808 56.3407 139.128 66.818C140.277 68.7183 143.288 67.0263 142.132 65.112C132.864 49.7436 122.562 34.8643 111.027 21.1036C106.464 15.6649 101.66 10.3151 96.1994 5.76328C93.1108 3.19135 88.9834 -0.164569 84.6945 0.00626928C80.7028 0.165406 77.771 3.66876 75.6418 6.66427C72.5135 11.0686 70.2508 16.1025 68.0655 21.0217C65.6882 26.3715 63.5122 31.8102 61.1045 37.1483C59.4409 40.8342 57.6322 45.2175 54.8596 48.0469C54.3261 48.5898 54.3308 48.6132 53.6382 48.9502C54.1295 48.7092 52.9199 49.0649 53.561 48.9923C52.7584 49.0813 51.8903 48.9268 51.1112 48.749C48.4274 48.1381 46.9908 45.7722 45.0745 44.038C41.5788 40.867 36.3704 40.1485 32.6594 43.1698C29.4188 45.8073 27.4136 50.0735 25.7219 53.7852C23.0685 59.5983 21.0212 65.6783 19.1119 71.7676C11.9451 94.6248 7.06189 118.123 0.0845744 141.034C-0.568233 143.171 2.75196 144.121 3.40009 141.994Z" fill="#351BA9"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,3 @@
<svg width="130" height="128" viewBox="0 0 130 128" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.13204 126.106C8.79061 111.201 12.5156 96.0221 16.8372 81.0211C18.8799 73.9348 21.0255 66.8626 23.5806 59.9424C25.4197 54.9647 27.4342 49.849 30.5392 45.5055C31.4681 44.2019 32.4999 43.0973 33.7938 42.4468C34.0606 42.3134 34.5917 42.194 34.9591 42.1987C36.756 42.2151 38.3799 42.7416 39.8657 43.7339C42.3365 45.3838 44.0048 47.1436 47.112 47.5485C49.3653 47.841 51.3939 47.3472 53.102 45.8986C56.366 43.1278 58.3876 38.5924 60.3226 34.8784C63.1023 29.5356 65.6831 24.0898 68.6243 18.8313C71.184 14.2561 74.0082 9.47032 78.0818 6.06994C81.1236 3.52843 83.8705 3.46758 86.9661 5.42169C91.4374 8.24637 95.008 12.6811 98.3048 16.7391C102.704 22.1498 106.7 27.881 110.605 33.6498C115.896 41.4662 120.802 49.5541 126.24 57.2699C127.51 59.0719 130.531 57.3869 129.244 55.5638C122.159 45.5125 115.851 34.9322 108.733 24.8949C104.901 19.4913 100.914 14.1508 96.4283 9.26905C93.3912 5.96462 89.8043 2.28107 85.4218 0.858204C81.3388 -0.468717 77.3143 1.94876 74.4574 4.68217C70.461 8.50379 67.5901 13.5283 64.9531 18.3305C62.0775 23.5703 59.5364 28.981 56.7474 34.2652C55.6196 36.3996 54.4474 38.5222 53.1043 40.5301C52.283 41.7564 51.1038 43.2331 50.1421 43.8111C49.6648 44.1013 50.0602 43.9047 49.6835 44.0077C49.0096 44.1926 48.2445 44.1505 47.5519 44.1271C46.2042 44.0802 45.0109 43.4226 43.979 42.6035C41.3304 40.502 38.9952 39.0604 35.5276 38.7702C31.6833 38.4473 28.9434 41.6558 27.0037 44.546C23.9105 49.1586 21.8819 54.5435 19.9819 59.7295C17.4269 66.7081 15.3 73.8412 13.2479 80.9789C9.03161 95.678 5.37448 110.543 0.814189 125.144C0.145003 127.276 3.46988 128.226 4.13204 126.106Z" fill="#73CA30"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,3 @@
<svg width="103" height="99" viewBox="0 0 103 99" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4.35089 97.1691C8.38473 83.357 11.3586 69.257 15.3574 55.4308C17.0374 49.6223 18.7828 43.6874 21.476 38.251C22.2902 36.6105 23.1887 34.9677 24.4873 33.7624C24.8336 33.4418 25.0957 33.2944 25.4958 33.2031C25.9169 33.1072 25.1191 33.2172 25.5472 33.2101C25.9076 33.2055 26.2749 33.2382 26.6282 33.3014C27.4004 33.4395 28.0742 33.7461 28.7317 34.1579C32.9644 36.8118 33.2429 44.1087 39.1509 44.3825C42.3775 44.5323 44.6237 39.5101 45.8545 37.2424C48.5523 32.2647 50.8406 27.0717 53.3395 21.9933C55.7519 17.0882 58.2274 11.9583 61.6669 7.67101C62.5982 6.51025 63.6721 5.33544 64.8935 4.5655C65.9909 3.87513 66.5805 3.80024 67.6802 4.15128C69.2643 4.65677 70.7501 5.90178 72.0159 6.98766C73.9907 8.682 75.783 10.5823 77.5262 12.5083C85.5985 21.441 92.3769 31.4713 99.4736 41.1693C100.772 42.9432 103.795 41.2629 102.478 39.4633C94.1926 28.1388 86.3753 16.0023 76.2556 6.19432C73.4526 3.47963 69.2526 -0.531558 64.9473 0.760259C60.8269 1.99591 58.0168 6.55237 55.8969 9.97381C52.7639 15.0241 50.2393 20.4464 47.6772 25.8009C45.5339 30.2801 43.524 34.9606 40.7373 39.0865C40.2974 39.7371 40.0962 40.0156 39.5393 40.5679C39.1416 40.9657 39.4808 40.6825 39.1696 40.8815C38.8842 41.064 39.2141 40.9283 39.1907 40.9283C37.1785 40.9821 35.9033 37.9047 35.0656 36.5075C33.6407 34.1205 31.9536 31.7451 29.3401 30.575C27.3817 29.6974 24.96 29.3183 23.0624 30.5282C19.8615 32.5689 18.219 36.8843 16.8314 40.2168C14.515 45.7843 12.8257 51.6185 11.1995 57.4177C7.58919 70.2914 4.77908 83.378 1.0307 96.212C0.405969 98.3533 3.72616 99.3058 4.35089 97.1691Z" fill="#C81818"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,3 @@
<svg width="116" height="112" viewBox="0 0 116 112" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.81991 110.216C7.64083 96.6238 10.9049 82.8772 14.9668 69.3482C16.9486 62.758 19.0895 56.1936 21.7546 49.8445C23.5492 45.5736 25.6387 40.8533 29.022 37.5816C30.0258 36.6104 31.2612 35.9552 32.1784 35.9294C34.3708 35.8639 37.3541 38.7026 39.4038 40.1325C42.0501 41.9813 45.5715 43.1234 48.4518 41.0405C49.9961 39.9242 51.0677 38.265 52.0247 36.6479C54.9121 31.7661 57.0038 26.407 59.3928 21.2771C61.7724 16.1684 64.2339 10.6711 68.0361 6.44231C69.2785 5.05922 70.7292 3.81655 72.5776 3.51232C74.15 3.25255 76.319 4.24716 77.7884 5.05688C82.9266 7.89326 87.0564 12.6135 90.7931 17.039C98.6268 26.3204 104.972 36.669 111.697 46.7461C111.915 47.0714 112.132 47.3943 112.357 47.7173C113.606 49.538 116.625 47.853 115.361 46.0136C108.73 36.3577 102.682 26.3648 95.3627 17.1864C91.4459 12.2719 87.1968 7.47436 82.1124 3.74166C78.5769 1.14633 73.9956 -1.04414 69.6716 0.825714C65.2119 2.75174 62.3129 8.09687 60.1041 12.1268C57.1372 17.5444 54.76 23.264 52.1441 28.8525C51.0818 31.1226 49.9821 33.3926 48.6671 35.5316C47.6797 37.1417 46.7531 38.6441 44.8696 38.7354C43.2528 38.815 41.6711 37.5325 40.438 36.6455C38.8188 35.4801 37.2839 34.2094 35.4846 33.3224C33.8093 32.4963 31.9796 32.2131 30.1849 32.8309C26.3429 34.1532 23.844 38.1503 21.9605 41.5039C18.9585 46.8467 16.8106 52.695 14.8241 58.4754C10.0696 72.2969 6.57621 86.5279 2.84187 100.642C2.08143 103.52 1.31164 106.394 0.504401 109.259C-0.101611 111.402 3.21858 112.357 3.81991 110.216Z" fill="#F2D131"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

1
public/vite.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

27
src/App.vue Normal file
View File

@ -0,0 +1,27 @@
<script setup>
import router from './router';
import FieldOne from './components/FieldOne.vue'
</script>
<template>
<div>
<router-view class="child-view"></router-view>
</div>
<FieldOne/>
</template>
<style scoped>
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

3
src/assets/css/main.css Normal file
View File

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

1
src/assets/vue.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

After

Width:  |  Height:  |  Size: 496 B

View File

@ -0,0 +1,27 @@
<script setup>
import { ref } from 'vue'
// defineProps({
// msg: String,
// })
const count = ref(0)
const curName = ref('')
</script>
<template>
<div>
<input type="text" id="name" name="name" v-model="curName" size="30"/>
<!-- <button type="button" @click="count++">count is {{ count }}</button> -->
<p>
Name:
<code>{{ curName }}</code>
</p>
</div>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>

View File

@ -0,0 +1,43 @@
<script setup>
import { ref } from 'vue'
defineProps({
msg: String,
})
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Learn more about IDE Support for Vue in the
<a
href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"
target="_blank"
>Vue Docs Scaling up Guide</a
>.
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>

View File

@ -0,0 +1,978 @@
<template>
<div class="layout-new flex-col justify-center items-center card bg-violet-100">
<!-- <v-card flat height="200" width="220" class="card-border rounded-lg"> -->
<div class="flex items-center justify-between my-3">
<h2 class="text-violet-800 text-2xl font-medium text-center mb-0">Новый проект</h2>
<button class="block text-primary rounded-xl focus:outline-none hover:text-bg-violet-500" @click="closeView">
<div class=" inset-y-0 flex items-center px-4 py-3 pointer-events-none">
<!-- <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none" class="rotate-90 ">
<rect x="8.28259" y="0.75" width="1.43478" height="16.5" rx="0.717391" fill="#3914AF" transform="rotate(-45 17.25 8.28262)"/>
<rect x="17.25" y="8.28262" width="1.43478" height="16.5" rx="0.717391" transform="rotate(45 17.25 8.28262)" fill="#3914AF"/>
</svg> -->
<svg xmlns="http://www.w3.org/2000/svg" height="2em" viewBox="0 0 384 512" fill="#5b21b6">
<path d="M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z"/>
</svg>
</div>
</button>
</div>
<div class="flex items-center py-3 gap-5">
<button v-for="n in CatEducation" :key="n.id" class="px-2 pr-1 outline-none text-violet-800 text-lg font-medium" @click="selectPage(n.id)" :class="[curpage === n.id? 'border-b-4 border-violet-800': '']">
{{ n.name }}
</button>
</div>
<div class="my-5">
<form ref="form"
@submit.prevent="saveNew">
<!-- v-model="valid"
lazy-validation -->
<template v-if="curpage== 'm'">
<div class="flex items-center justify-between gap-8">
<div class="avatar flex items-center justify-center">
<v-img
:src="avatar"
max-height="145"
max-width="145">
</v-img>
<!-- <v-icon>mdi-image-outline</v-icon> -->
</div>
<div class="flex-col justify-center content-between w-full">
<label for="idName" class="text-violet-800 text-lg font-medium">Название</label>
<input type="text" v-model="project.title" id="idName"
class="form-control
block
w-full
h-12
px-3
pl-0
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3 mt-1
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
placeholder="">
<label for="abbreviatio" class="text-violet-800 text-lg font-medium mt-3">Аббревиатура</label>
<div class="flex items-center gap-4">
<input type="text" v-model="project.abbreviation" id="abbreviation"
class="form-control
block
w-1/3
h-12
px-3
pl-0
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
placeholder="">
<transition name="fade">
<div v-show="showAbbreviat" class="py-10 align-self-center">
<div class="d-flex align-end">
<!-- <InfoIcon/> -->
<v-icon left inline>
mdi-lightbulb-on-10
</v-icon>
Аббревиатура- это ..</div>
</div>
</transition>
</div>
</div>
</div>
<transition name="fade">
<v-col cols="3" sm="4" v-show="showWords" class="pb-3 pt-0">
<div class="d-flex align-end">
<v-icon left inline class="d-inline-block">
mdi-lightbulb-on-10
</v-icon>
Ключевые слова - это ..</div>
</v-col>
</transition>
<div class=" mt-5">
<label for="keywords" class="text-violet-800 text-lg font-medium">Ключевые слова</label>
<input type="text" v-model="project.keywords" id="keywords"
class="form-control
block
w-full
h-12
px-3
pl-0
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3 mt-1
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
placeholder="">
</div>
<div class="flex items-center gap-4 mt-5">
<div class="flex-col justify-center w-full">
<label for="desc_full" class="text-violet-800 text-lg font-medium">Описание проекта</label>
<textarea v-model="project.desc_full"
class="
form-control
block
w-full
px-3
pl-0
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
m-0
focus:text-gray-700 focus:bg-white focus:border-zinc-400 focus:outline-none
"
id="desc_full"
rows="3"
placeholder=""
></textarea>
</div>
<transition name="fade">
<div v-show="showDescrip" class="py-10">
<div class="d-flex align-end">
<v-icon left inline>
mdi-lightbulb-on-10
</v-icon>
Краткое описание проекта - это ..</div>
</div>
</transition>
</div>
<div class="flex-col justify-center w-full">
<div class="flex items-center gap-6">
<label for="level_desc" class="text-violet-800 text-lg font-medium">Уровень сложности</label>
<div cols="5" class="d-flex align-center">
<div class="d-flex align-end">
<v-icon left inline>
mdi-lightbulb-on-10
</v-icon>
Уровень сложности проекта определяется ...</div>
</div>
</div>
<div class="flex items-center gap-0 w-full justify-between h-4 ">
<div v-for="i in levelsArr" :key="i+'l'" class="bg-violet-300 h-1 w-full y-1" :class="getLevel(i)" @click="setLevel(i)"></div>
</div>
<textarea v-model="project.level_desc"
class="
form-control
block
w-full
px-3
pl-0
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
m-0
focus:text-gray-700 focus:bg-white focus:border-zinc-400 focus:outline-none
"
id="level_desc"
rows="3"
placeholder=""
></textarea>
</div>
<div class="py-5 flex align-center w-1/3">
<SelectForm :options="allSections" type="2" @selected-value="getSection" :placeholder="'Разделы'"/>
</div>
</template>
<template v-else-if="curpage== 'a'">
<div class="flex-col items-center w-full">
<div class="flex items-center gap-4 mt-5">
<div class="flex-col justify-center w-1/2">
<label for="id_parent_project" class="text-violet-800 text-lg font-medium">Родительски проект</label>
<input type="text" v-model="project.id_parent_project" id="id_parent_project"
class="form-control
block
w-full
h-12
px-3
pl-0
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3 mt-1
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
placeholder="">
</div>
<transition name="fade">
<div v-show="showDescrip" class="flex align-end px-2">
<div class="flex align-end">
<v-icon left inline>
mdi-lightbulb-on-10
</v-icon>
Родительский проект- это ..</div>
</div>
</transition>
</div>
<div class="flex items-center gap-4 mt-5">
<div class="flex-col justify-center w-1/2">
<label for="typeParent" class="text-violet-800 text-lg font-medium">Тип наследования</label>
<input type="text" v-model="project.typeParent" id="typeParent"
class="form-control
block
w-full
h-12
px-3
pl-0
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3 mt-1
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
placeholder="">
</div>
<transition name="fade">
<div v-show="showDescrip" class="py-1">
<div class="d-flex align-end">
<v-icon left inline>
mdi-lightbulb-on-10
</v-icon>
Тип наследования зависит от ..</div>
</div>
</transition>
</div>
<div class="mb-[0.125rem] block min-h-[1.5rem] pl-[1.5rem] mt-5">
<input
class="relative float-left -ml-[1.5rem] mr-[6px] mt-[0.15rem] h-[1.125rem] w-[1.125rem] appearance-none rounded-[0.25rem] border-[0.125rem] border-solid border-neutral-300 outline-none before:pointer-events-none before:absolute before:h-[0.875rem] before:w-[0.875rem] before:scale-0 before:rounded-full before:bg-transparent before:opacity-0 before:shadow-[0px_0px_0px_13px_transparent] before:content-[''] checked:border-primary checked:bg-violet-800 checked:before:opacity-[0.16] checked:after:absolute checked:after:-mt-px checked:after:ml-[0.25rem] checked:after:block checked:after:h-[0.8125rem] checked:after:w-[0.375rem] checked:after:rotate-45 checked:after:border-[0.125rem] checked:after:border-l-0 checked:after:border-t-0 checked:after:border-solid checked:after:border-white checked:after:bg-transparent checked:after:content-[''] hover:cursor-pointer hover:before:opacity-[0.04] hover:before:shadow-[0px_0px_0px_13px_rgba(0,0,0,0.6)] focus:shadow-none focus:transition-[border-color_0.2s] focus:before:scale-100 focus:before:opacity-[0.12] focus:before:shadow-[0px_0px_0px_13px_rgba(0,0,0,0.6)] focus:before:transition-[box-shadow_0.2s,transform_0.2s] focus:after:absolute focus:after:z-[1] focus:after:block focus:after:h-[0.875rem] focus:after:w-[0.875rem] focus:after:rounded-[0.125rem] focus:after:content-[''] checked:focus:before:scale-100 checked:focus:before:shadow-[0px_0px_0px_13px_#3b71ca] checked:focus:before:transition-[box-shadow_0.2s,transform_0.2s] checked:focus:after:-mt-px checked:focus:after:ml-[0.25rem] checked:focus:after:h-[0.8125rem] checked:focus:after:w-[0.375rem] checked:focus:after:rotate-45 checked:focus:after:rounded-none checked:focus:after:border-[0.125rem] checked:focus:after:border-l-0 checked:focus:after:border-t-0 checked:focus:after:border-solid checked:focus:after:border-white checked:focus:after:bg-transparent dark:border-neutral-600 dark:checked:border-primary dark:checked:bg-primary dark:focus:before:shadow-[0px_0px_0px_13px_rgba(255,255,255,0.4)] dark:checked:focus:before:shadow-[0px_0px_0px_13px_#3b71ca]"
type="checkbox"
v-model="project.on_yarmarka"
id="onYarmarka" />
<label
class="inline-block pl-[0.15rem] hover:cursor-pointer"
for="onYarmarka">
Опубликовать на ярмарке
</label>
</div>
<div class="py-5 flex align-center w-1/2 my-5 gap-">
<label for="on_yarmarka" class="mr-3 d-inline-block">Цель публикации</label>
<SelectForm :options="goals" type="one" @selected-value="getGoal" :placeholder="'Разделы'" :disabled="!project.on_yarmarka"/>
</div>
<div class="flex-col items-center gap-6 mt-5">
<div class="flex items-center px-4 py-3 gap-7">
<div>Ключевые характеристики проекта</div>
<div class="flex items-center">
<svg xmlns="http://www.w3.org/2000/svg" height="1.25em" viewBox="0 0 512 512" fill="#5b21b6">
<path d="M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z"/>
</svg>
</div>
</div>
<transition name="fade">
<div v-show="showInformation" class="pt-1">
<p>
<v-icon left>
mdi-lightbulb-on-10
</v-icon>
Укажите характеристики, которые будут важны для человека, который найдет ваш проект</p>
</div>
</transition>
</div>
<div>
<div class="flex items-center mt-0">
<p v-if="project?.onYarmarka">Укажите ключевые характеристики вашего проекта, не менее 3 шт. (Обязательно для публикации на ярмарке)</p>
<p v-else>Укажите ключевые характеристики вашего проекта. (Не обязательно)
В случае, если Вы когда-нибудь захотите опубликовать свой проект на ярмарке - вам не придется делать это заново. Здорово же=)</p>
</div>
</div>
<div v-for="param in project.params" :key="param?.id" class="flex items-center my-0 gap-3">
<div class="py-5 w-1/3">
<input type="text" v-model="param.name" id="paramName"
class="form-control
block
w-full
h-12
px-3
pl-2
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3 mt-1
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
:required="project.onYarmarka && param?.id <=2"
:placeholder="param?.label">
</div>
<div class="py-5 w-2/3">
<input type="text" v-model="param.text" id="text"
class="form-control
block
w-full
h-12
px-3
pl-2
py-1
pr-5
text-base
font-normal
text-gray-700
bg-white bg-clip-padding
border-2 border-solid border-zinc-300
rounded-md
transition
ease-in-out
mb-3 mt-1
focus:text-gray-800 focus:bg-white focus:border-violet-800 focus:outline-none"
:required="project.onYarmarka && param?.id <=2"
:placeholder="param?.label2">
<!-- <v-text-field
type="text"
v-model.trim="param.text"
:label="param?.label2"
class="rounded-lg pa-0 ma-0"
outlined
clearable
height=30px
:required="project.onYarmarka"
color="blue darken-2"
onchange="validate"></v-text-field> -->
</div>
</div>
<button type="button" @click="add_param"
class="block text-primary relative rounded-xl bg-white border border-primary focus:outline-none hover:bg-gray-100">
<span class="block py-3 px-6">{{ 'Добавить еще характеристику +'}}</span>
</button>
<!-- <v-btn
text
@click="add_param"
class="d-block ml-0 my-5 px=0"
outlined
color="primary">Добавить еще характеристику +</v-btn> -->
<!-- </v-form> -->
</div>
</template>
<div class="flex items-center justify-end">
<button type="submit"
class="block text-white relative rounded-xl bg-violet-800 hover:bg-violet-700">
<span class="block py-3 px-6">{{ textSubmit }}</span>
</button>
</div>
</form>
</div>
<v-toolbar >
<!-- <v-row >
<v-col cols="12" class="d-flex justify-space-between align-center px-0">
<h2 class="primary--text font-weight-bold">Новый проект</h2>
<v-btn plain large class=" d-flex justify-end align-center mb-4 px-2" color="primary" @click="closeView" min-width="38px">
<v-icon>
mdi-close
</v-icon>
</v-btn>
</v-col>
</v-row> -->
<!-- <template v-slot:extension>
<v-tabs
v-model="tabs">
<v-tab
v-for="n in CatEducation"
:key="n"
>{{ n }}
</v-tab>
</v-tabs>
</template> -->
</v-toolbar>
<!-- <v-form ref="form"
@submit.prevent="saveNew"
v-model="valid"
lazy-validation>
<v-tabs-items v-model="tabs">
<v-tab-item>
<v-card flat class="pt-15">
<v-row>
<v-col cols="2"
class="py-0 d-inline-block">
<v-card class="avatar d-flex justify-center align-center" flat>
<v-img
:src="avatar"
max-height="145"
max-width="145">
</v-img>
</v-card>
<v-file-input
@change="uploadImage"
@click:clear="handlerClearableIcon"
accept="image/png, image/jpeg, image/bmp"
placeholder="Pick an avatar"
prepend-icon="mdi-camera"
v-model="project.href_avatar"
label="Выберете фото"/>
</v-col>
<v-col cols="8"
sm="8" class="py-0 d-inline-block">
</v-col>
</v-row>
<v-row>
<v-col cols="5" class="d-dlex justify-end align-center mt-3">
<v-slider
v-model="project.level"
step="1"
label="0"
ticks
max="7"
min="0"
thumb-label="always">
<template v-slot:append>
<p>7</p>
</template>
</v-slider>
</v-col>
</v-row>
</v-card>
</v-tab-item>
</v-tabs-items>
</v-form> -->
</div>
</template>
<script setup>
// const path = require('path');
// export default {
// data() {
// return {
// // card: {
// // border: '1px solid #3914AF',
// // 'border-radius': '12px',
// // margin: '40px',
// // },
let avatar = '';
const close = ref(false);
let title = "";
let keywords = "";
let complexity = 4;
let desc_short = "";
let desc_full = "";
let href_avatar = "";
let nextStep = false;
let tabs = null;
let text = 'Lorem ipsum dolor';
const showAbbreviat = ref(true);
let showDescrip = true;
let showWords = true;
let showParentProject = true;
let showTypeParent = true;
let showInformation = true;
let CatEducation = [
{name:'Основное', id: 'm'},
{name:'Дополнительное', id: 'a'},
{name:'Настройки доступа', id: 's'}
];
let levelsArr = ['1','2','3','4','5','6','7'];
let viewImage = '';
const project = ref({
id_add: 0,
title: "",
abbreviation: "",
keywords: "",
desc_short: "",
id_category: '',
href_avatar: "",
parent: '',
typeParent: '-',
id_parent_project: 'Оригинальный проект',
on_yarmarka: false,
goal: 'Расказать о проекте',
level: '3',
level_desc: '',
// key_features: '',
cat_tree: [],
tag: '',
params: [
{
id: 0,
name: '',
text: '',
label: "Характеристика А",
label2: 'Значение А'
},
{
id: 1,
name: '',
text: '',
label: "Характеристика Б",
label2: 'Значение Б'
},
{
id: 2,
name: '',
text: '',
label: "Характеристика В",
label2: 'Значение В'
}
]
});
let newPr = {
id_add: 0,
title: "",
abbreviation: "",
keywords: "",
desc_short: "",
id_category: '',
href_avatar: "",
parent: '',
typeParent: '-',
id_parent_project: 'Оригинальный проект',
on_yarmarka: false,
goal: 'Расказать о проекте',
level: '',
level_desc: '',
// key_features: '',
cat_tree: [],
tag: '',
params: [
{
id: 0,
name: '',
text: '',
label: "Характеристика А",
label2: 'Значение А'
},
{
id: 1,
name: '',
text: '',
label: "Характеристика Б",
label2: 'Значение Б'
},
{
id: 2,
name: '',
text: '',
label: "Характеристика В",
label2: 'Значение В'
}
]
};
let goals = [
{id: 1,value:'Расказать о проекте'},
{id: 2,value:'Привлечь разработчиков в команду'},
{id: 3,value:'Найти инвесторов'},
{id: 4,value:'Найти покупателей/заказчиков'},
{id: 5,value:'Вклад в OpenSourse сообщество'}
];
let nameRules = [
v => !!v || 'Поле должно быть заполнено',
// v => !v=='Название' || 'Поле должно быть заполнено',
v => (v && v.length <= 80) || 'Название образования не может быть больше 100 символов',
];
let wordsRules = [
v => !!v || 'Поле должно быть заполнено',
// v => !v=='Название' || 'Поле должно быть заполнено',
v => (v && v.length <= 100) || 'Ключевые слова не могут быть больше 100 символов',
];
let abbreviationRules = [
v => !!v || 'Поле должно быть заполнено',
v => (v && v.length <= 30) || 'Аббревиатура не может быть больше 30 символов',
];
let valid = true;
let alfavit = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'К', 'Л', 'М', 'Н'];
let items = ['Категория 1','Категория 2','Категория 3'];
let complexity_descr = ['Первый уровень сложности, справится человек из любой возрастной группы без специальной подотовки',
'Второй уровень сложности, возможно понадобится использовать знания в рамках школьной программы',
'Третий уровень сложности, возможно понадобится гуглить',
'Четвертый уровень сложности, возможно понадобится много гуглить',
'Пятый уровень сложности, возможно понадобится очень много гуглить',
'Шестой уровень сложности, возможно понадобится очень-очень много гуглить',
'Седьмой уровень сложности, возможно понадобится очень-очень-очень много гуглить и не факт что поможет',];
let allSections = [{id: 1,value: 'Конструирование'},
{id: 2,value: 'Схемотехника'},
{id: 3,value: 'Программирование'},
{id: 4,value: 'Менеджмент'}];
// color = ['#FF5F5F', '#3DD639', '#5FA8FF', '#FFA031']
const textSubmit = ref('Создать');
const curpage = ref('m');
// };
// },
// const prList = useProjectStore()
const props = defineProps({
parentProject: Object,
mode: String,
clonee: Number,
})
const emit = defineEmits(['returnAdd', 'returnClose']);
function selectPage(id) {
curpage.value = id;
console.log('select new view-page', id);
}
function getSection(e){
if (!Array.isArray(project.value.id_category)) project.value.id_category = [];
let match = project.value.id_category.findIndex(el => el == e?.option?.id);
if (match >= 0) {
project.value.id_category.splice(match, 1);
} else {
project.value.id_category.push(e?.option?.id);
}
console.log('getSection', e, project.value.id_category);
}
function getGoal(e) {
project.goal = (e?.value);
// console.log('getGoal', e, project.goal);
}
// methods: {
// onImgError: function(event) {
// this.failed_image = true;
// },
// handlerClearableIcon: function (e){
// if (!this.avatar) return
// console.log("This is handler ClearableIcon")
// let file = this.avatar.split('/').pop()
// this.deleteImage(file)
// console.log(file)
// console.log(this.project.href_avatar)
// this.avatar = "http://localhost:3010/build_project.png"
// },
// deleteImage: function(file){
// self = this
// console.log("deleteImage:", file)
// // console.log(self.avatar)
// // console.log(self.href_avatar)
// this.$axios.delete('/upload', {
// headers: {
// "Content-Type": "application/json",
// },
// data: {
// "filename": file
// },
// }).then(function (response) {
// if (response.data) {
// self.avatar = response.data.file
// self.project.href_avatar = response.data.file
// }
// console.log(response);
// }).catch(function (error) {
// console.log(error)
// })
// return null
// },
// uploadImage(e) {
// if (!e) {
// console.log("avatar:" , this.avatar)
// console.log("href_avatar:" , this.href_avatar)
// console.log("project.href_avatar:" , this.project.href_avatar)
// return;
// }
// const upload_server = this.$store.state.server.upload
// const self = this;
// console.log("Upload Image")
// console.log(e)
// const uploadFormData = new FormData()
// uploadFormData.append('files', e)
// this.$axios.post('/upload', uploadFormData, {
// headers: {
// "Content-Type": "multipart/form-data",
// }
// }).then(function (response) {
// if (response.data) {
// self.avatar = response.data.file
// //console.log(response.data.file.split('/').pop())
// self.href_avatar = response.data.file
// }
// console.log(response);
// }).catch(function (error) {
// console.log(error)
// })
// // const reader = new FileReader();
// // reader.onload = (event) => {
// // this.avatar = event.target.result;
// // console.log('значение поля аватар:', this.viewImage);
// // }
// // reader.readAsDataURL(file);
// },
// validate () {
// this.$refs.form.validate();
// },
function getLevel(level) {
let cl = '';
if (level<= project.value?.level || level <=1 ) return 'bg-violet-700 ';
if (cl && level> project.value?.level) cl = cl + 'slider-pick';
return cl;
}
function setLevel(l) {
project.value.level = String(l);
console.log(l,project.value.level, 'project.value.level change');
}
async function saveNew() {
console.log('saveNew start');
// const isValid = this.$refs.form.validate();
// if (isValid) {
const newProject = {
// id_project: Math.floor(Math.random() * 100000000),
title: project.value.title,// +++++
keywords: project.value.keywords ? project.value.keywords.split(" ").map((item) => item.trim()) : [],// +++++
abbreviation: project.value.abbreviation,// +++++
status: 1,// +++++
desc_full: project.value.desc_full,// +++++
desc_short: project.value.desc_full?.length ? project.value.desc_full.slice(0, 30)+'...' : '',// +++++
id_category: 2,// +++++
href_avatar: href_avatar,// +++++
is_favorites: false,// +++++
is_owner: true,// +++++
name_rev: "MK I",// +++++
dt_start: `${new Date(Date.now()).toISOString()}`,// +++++
dt_end: '',// +++++
last_changed: `${new Date(Date.now()).toISOString()}`,// +++++
last_changed_author: "",// +++++
// last_changed_status: 1,
actions: {},// +++++
id_parent_project: 0,// +++++
typeParent: project.value.typeParent,// +++++
on_yarmarka: project.value.on_yarmarka,// +++++
goal: project.value.goal,// +++++
params: ['str'],//project.value.params,// +++++
cat_tree: project.value.cat_tree,
// tag: "",
// level: '',
// level_desc: '',
};
if (!Array.isArray(project.value.keywords) && project.value.keywords) {
newProject.keywords = project.value.keywords?.length ? project.value.keywords.split(",").map((item) => item.trim()) : '' // +++++
}
console.log(newProject, '- new project');
let resultAdd;
// if (props.mode && !props.clonee) {
// resultAdd = this.$store.dispatch("project/editRpoject", newProject);
// } else {
// resultAdd = await prList.addNew(newProject);
// resultAdd = this.$store.dispatch("project/addNew", newProject);
// }
let mess = '';
console.log(resultAdd,'resultAdd');
if (!resultAdd?.length) {
mess = 0
} else {
mess = 1;
}
emit('returnAdd', { mess })
console.log(newProject, mess, 'save\edit Project');
};
function back() {
close.value = !close.value;
};
// mouseOverAbb(){
// this.showAbbreviat = !this.showAbbreviat;
// },
function add_param(){
let new_param = {
id: project.value.params.length,
name: '',
text: '',
label: `Характеристика ${alfavit[project.value.params.length]}`,
label2: `Значение ${alfavit[project.value.params.length]}`
};
project.value.params.push(new_param);
};
function closeView() {
emit('returnClose')
};
// findParentProject(id) {
// },
// loadFiles(input) {
// console.log(input);
// const file = input;
// const reader = new FileReader();
// reader.onload = (event) => {
// this.viewImage = event.target.result;
// console.log('значение поля аватар:', this.viewImage);
// }
// reader.readAsDataURL(file);
// },
// showInformation(){
// }
// },
// computed: {
// projectEdit() {
// if (this.mode) {
// return this.mode;
// } else {
// return {}
// }
// },
// ...mapGetters({
// projects: 'project/getProjects',
// favProjects: 'project/getFavProjects',
// })
// },
// watch: {
// mode: {
// handler(newVal, oldVal) {
// // Object.keys(newVal).length
// if (newVal) {
// for (let key in newVal) {
// this.project[key] = newVal[key];
// }
// if (this.clone) {
// this.project.title = this.project.title + ' (клонированный проект)';
// this.textSubmit = 'Создать';
// } else {
// this.textSubmit = 'Сохранить';
// }
// if (this.project.keywords && Array.isArray(this.project.keywords) && this.project.keywords?.length) {
// this.project.keywords = this.project.keywords.join(" ");
// }
// if (this.project.keywords) this.project.keywords = this.project.keywords?.length ? this.project.keywords.join(", ") : '';
// if (!this.clone) this.textSave = 'Сохранить';
// else this.textSave = 'Создать';
// } else {
// this.project = Object.assign(this.project, this.newPr);
// this.textSubmit = 'Создать';
// }
// console.log(this.project, 'this.project');
// },
// deep: true
// },
// },
// mounted () {
// if (this.mode) {
// for ( let key in this.mode) {
// this.project[key] = this.mode[key];
// console.log(this.mode, 'запись данных по проекту в объект', key);
// }
// if (this.clone) {
// this.project.title = this.project.title + ' (клонированный проект)';
// } else {
// this.textSubmit = 'Сохранить';
// }
// if (this.project.keywords && Array.isArray(this.project.keywords) && this.project.keywords?.length) {
// this.project.keywords = this.project.keywords.join(" ");
// }
// if (this.project.keywords) this.project.keywords = this.project.keywords?.length ? this.project.keywords.join(", ") : '';
// console.log(this.mode, 'данныt по проекту в объект записаны');
// if (!this.clone) this.textSave = 'Сохранить';
// else this.textSave = 'Создать';
// } else {
// this.project = Object.assign(this.project, this.newPr);
// this.textSave = 'Создать';
// console.log(this.project, 'this.project');
// }
// }
// }
</script>
<style scoped>
.close {
display: none;
}
.card {
border-radius: 14px!important;
border: solid 1px #3914AF!important;
padding: 10px 15px;
margin: 40px auto;
width: 82%;
}
.avatar {
border: dashed 2px rgb(97, 94, 94) !important;
border-radius: 10px !important;
height: 147px;
width: 147px;
}
.fade-enter-active, .fade-leave-active {
transition: opacity 0.7s;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
a:hover{
color:black;
}
.layout-new {
/* background: rgba(46, 16, 140, 0.2); */
position: absolute;
top: 0;
/* bottom: 0; */
left: 0;
right: 0;
z-index: 100;
padding-top: 30px;
}
.slider-pick {
position:relative;
/* width: 100%; */
::before {
content: "";
position: absolute;
right: 0;
width: 10;
height: 10;
border-radius: 50%;
/* border-width: 30px 30px 0; */
border-style: solid;
background-color: black;
}
}
</style>

9
src/main.js Normal file
View File

@ -0,0 +1,9 @@
import { createApp } from 'vue'
import router from './router';
import './style.css'
import App from './App.vue'
createApp(App)
.use(router)
.mount('#app')

617
src/pages/project/list.vue Normal file
View File

@ -0,0 +1,617 @@
<template>
<div class="projects pa-10">
<div>
<h3 class="text-xl font-medium">Список проектов</h3>
</div>
<NewProject v-if="showNew" :mode="editPr" @returnClose="closeImage" @returnAdd="addingProject" :clonee="sendPanent"/>
<div class="flex items-center justify-between my-8">
<button type="submit"
class="block text-primary relative rounded-xl border border-primary focus:outline-none hover:bg-gray-100" @click="openNew">
<div class="absolute inset-y-0 left-5 flex items-center pl-3.5 pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18" fill="none">
<rect x="8.28259" y="0.75" width="1.43478" height="16.5" rx="0.717391" fill="#3914AF"/>
<rect x="17.25" y="8.28262" width="1.43478" height="16.5" rx="0.717391" transform="rotate(90 17.25 8.28262)" fill="#3914AF"/>
</svg>
</div>
<span class="block py-3 pl-10 pr-4">Новый проект</span>
</button>
<div class="flex items-center">
<form class="relative">
<div class="absolute inset-y-0 left-5 flex items-center pl-3.5 pointer-events-none">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="26" viewBox="0 0 24 26" fill="none">
<path fill-rule="evenodd" clip-rule="evenodd" d="M11 3.77501C6.58172 3.77501 3 7.44627 3 11.975C3 16.5037 6.58172 20.175 11 20.175C15.4183 20.175 19 16.5037 19 11.975C19 7.44627 15.4183 3.77501 11 3.77501ZM1 11.975C1 6.31409 5.47715 1.72501 11 1.72501C16.5228 1.72501 21 6.31409 21 11.975C21 17.6359 16.5228 22.225 11 22.225C5.47715 22.225 1 17.6359 1 11.975Z" fill="#9896F9"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.2929 18.4252C17.6834 18.0249 18.3166 18.0249 18.7071 18.4252L22.7071 22.5252C23.0976 22.9255 23.0976 23.5745 22.7071 23.9748C22.3166 24.3751 21.6834 24.3751 21.2929 23.9748L17.2929 19.8748C16.9024 19.4745 16.9024 18.8255 17.2929 18.4252Z" fill="#9896F9"/>
</svg>
</div>
<!-- <span class="absolute inset-y-0 left-0 flex items-center pl-3.5 pointer-events-none">A</span> -->
<input id="poisktext"
type="text"
v-model.trim="poisktext"
class="border border-gray-300 rounded-lg block py-3 pl-10 pr-3"
placeholder="Что вы хотите найти">
</form>
</div>
</div>
<div class="flex items-center justify-between mb-5">
<div class="flex items-center gap-4">
<span :class="{selected: filter.isAuthorFilter}" class="cursor" @click="sort('isAuthorFilter')"> Руковожу </span>
<span :class="{selected: filter.isParticipantFilter}" class="cursor" @click="sort('isParticipantFilter')"> Участвую </span>
<span :class="{selected: filter.isFavoriteFilter}" class="cursor" @click="sort('isFavoriteFilter')"> Избранное </span>
</div>
<div class="flex items-center gap-4">
<span :class="{selected: filter.isRunningFilter}" class="cursor" @click="sort('isRunningFilter')"> В разработке </span>
<span :class="{selected: filter.isStoppedFilter}" class="cursor" @click="sort('isStoppedFilter')"> Отложены </span>
<span :class="{selected: filter.isFinishedFilter}" class="cursor" @click="sort('isFinishedFilter')"> Завершены </span>
<!-- <v-btn @click="pageView=false"
plain class="px-0">
<v-icon :color="pageView===true ? 'viewColor' : 'primary'">
mdi-view-grid
</v-icon>
</v-btn>
<v-btn @click="pageView=true"
plain class="px-0">
<v-icon :color="pageView===true ? 'primary' : 'viewColor'">
mdi-menu
</v-icon>
</v-btn> -->
</div>
</div>
<!-- -->
<div class="w-full mx-0 px-0 pb-0">
<div class="table-border bluedeep--text font-weight-light my-0 rounded-t-xs py-3 flex items-center justify-between">
<div cols="6" class="w-3/5 ma-0">
<span class="px-4 font-medium">Журнал проекта</span>
</div>
<div cols="1" class=" w-2/5 ma-0">
<span class="px-4 font-medium">Модификация</span>
<span class="px-4 font-medium">Последние изменения</span>
</div>
</div>
<div v-for="project in projectTable" :key="project?.id_project"
class="row-border flex items-center justify-end py-2 w-full">
<div class="py-0 flex items-center w-1/10 ">
<nuxt-link :to="`project/workbook/${project?.id_project}`" class="text-decoration-none bluedeep--text d-flex align-end">
<img v-if="project?.href_avatar" :src="project?.href_avatar" max-height="25" max-width="25" class="rounded-lg d-inline-block mx-2">
{{ project?.title }}</nuxt-link>
</div>
<div class="py-0 w-4/10 flex items-center">
<span class="center bluedeep--text font-weight-bold">
{{ project?.name_rev}}</span>
</div>
<div class="flex items-center py-0" cols="2">
<div class="flex items-center pr-5">
<!-- <v-tooltip top class="pa-2 align-self-center" v-if="project?.actions?.for_publ">
<template v-slot:activator="{ on, attrs }"> -->
<button
:class="colorStatus(project)">
<!-- <div v-bind="attrs" v-on="on" :class="colorStatus(project)"> -->
<!-- <span :class="project?.last_changed_status>='2' ? 'white--text' : 'black--text'">{{project?.actions?.for_publ + project?.actions?.for_moderation}}</span> -->
<!-- </div> -->
</button>
<!-- </template> -->
<!-- <span>{{promptness(project)}}</span> -->
<!-- </v-tooltip> -->
<div class="d-inline-block bluedeep--text ml-2">
{{ project?.last_changed }} <br/>
{{ project?.last_changed_author }}
</div>
</div>
</div>
<v-col class="flex justify-around items-center py-0" cols="3">
<div class=" px-5">
<!-- <v-tooltip top allow-overflow>
<template v-slot:activator="{ on, attrs }"> -->
<nuxt-link :to="`project/about_project/${project?.id_project}`" :project="project">
<img v-bind="attrs"
v-on="on" height="18" src="/Summary.svg">
</nuxt-link>
<!-- </template>
<span>О проекте</span>
</v-tooltip> -->
</div>
<div class=" px-5">
<!-- <v-tooltip top class="px-2">
<template v-slot:activator="{ on, attrs }"> -->
<nuxt-link :to="`project/statistics/${project?.id_project}`" :project="project">
<img v-bind="attrs"
v-on="on" height="23" src="/Statistics.svg">
</nuxt-link>
<!-- </template>
<span>Статистика</span>
</v-tooltip> -->
</div>
<div class="d-inline-block px-5">
<!-- <v-tooltip top v-if="project?.is_favorites">
<template v-slot:activator="{ on, attrs }"> -->
<img height="23" src="/Icon_star_solid.svg" v-if="project?.is_favorites" @click="makeNotFavorite(project)"
v-bind="attrs"
v-on="on">
<!-- </template>
<span>Убрать из избранного</span>
</v-tooltip> -->
<!-- <v-tooltip top v-if="!project?.is_favorites">
<template v-slot:activator="{ on, attrs }"> -->
<img height="23" src="/Icon_star_outline.svg" v-if="!project?.is_favorites" @click="makeFavorite(project)"
v-bind="attrs"
v-on="on">
<!-- </template>
<span>Добавить в избранное</span>
</v-tooltip> -->
</div>
<div class="relative " id="buttonAction">
<div class="flex justify-center items-center px-6 " @click="openMenu(project)">
<img height="20px" src="/Menu.svg">
</div>
<div v-if="project?.openMenu" class="flex flex-col items-center p-1 absolute inset-y-0 right-0">
<span class="py-1 px-2">Редактировать проект</span>
<span class="py-1 px-2">Клонировать проект</span>
<span class="py-1 px-2" v-if="project?.status===1" @click="stopProject(project)">Отложить проект</span>
<span class="py-1 px-2" v-else @click="runProject(project)">Вернуть проект в разработку</span>
<span class="py-1 px-2" @click="deleteProject(project)">Удалить проект</span>
<span class="py-1 px-2" @click="editProject(project)">Добавить участника</span>
</div>
<!-- <v-menu elevation="0"
:offset-y="true"
color="primary">
<template v-slot:activator="{ props }">
<v-btn
variant="plain"
v-bind="props"
@mouseover="hoverIcon3=true" @mouseleave="hoverIcon3=false"
class="hover-lined text-capitalize py-8 px-24 text-сormorant secondary--text d-none d-md-flex">
<v-list-item-icon class="my-0">
<img height="20px" src="/Menu.svg">
</v-list-item-icon>
</v-btn>
</template>
<v-list>
<v-list-item @click="editProject(project)">
<v-list-item-title>Редактировать проект</v-list-item-title>
</v-list-item>
<v-list-item @click="cloneProject(project)">
<v-list-item-title>Клонировать проект</v-list-item-title>
</v-list-item>
<template v-if="project?.status<3">
<v-list-item v-if="project.status===1" @click="stopProject(project)">
<v-list-item-title>Отложить проект</v-list-item-title>
</v-list-item>
<v-list-item v-else @click="runProject(project)">
<v-list-item-title>Вернуть проект в разработку</v-list-item-title>
</v-list-item>
</template> -->
<!-- <v-list-item-title>Удалить проект</v-list-item-title> -->
<!-- <v-dialog
v-model="dialog"
persistent
max-width="370">
<template v-slot:activator="{ on, attrs }">
<v-list-item>
<span v-bind="attrs" v-on="on">
Удалить проект
</span>
</v-list-item>
</template>
<v-card class="pa-5" >
<v-card-title class="text-subtitle-1 overflow-wrap">
Хотите удалить проект?<br> {{`${project?.title}`}}
</v-card-title>
<v-card-actions class="d-flex justify-center align-center">
<v-spacer></v-spacer>
<v-btn color="orange darken-1" text @click="deleteProject(project)">да
</v-btn>
<v-btn color="blue darken-1" text @click="dialog = false">Нет
</v-btn>
</v-card-actions>
</v-card>
</v-dialog> -->
<!-- <v-list-item @click="editProject(project)">
<v-list-item-title>Добавить участника</v-list-item-title>
</v-list-item> -->
<!-- </v-list>
</v-menu> -->
</div>
</v-col>
</div>
</div>
<v-alert density="compact" closable class="alert-style" v-if="showMessage"
transition="scale-transition"
:type="alertType">
{{messageAlert}}
</v-alert>
</div>
</template>
<script setup>
import { ref, computed } from 'vue';
import NewProject from "../../components/NewProject.vue";
// import { useProjectStore } from './store'
const prList = useProjectStore()
await prList.loadData()
const loadData = computed(() => { return prList.getProjects });
console.log(loadData);
// const { getProjects } = storeToRefs(prList)
// const { loadData } = prList;
// import { ProjectStore } from './project'
// import NewProjectView from '../../components/NewProject.vue';
// This will work in both `<script setup>` and `<script>`
// export default {
// data () {
// return {
const showNew = ref(true);
let pageView = true;
let poisktext = "";
let tab = null;
let valid = true;
let hovered = null;
let title = 'Проекты';
let picked_project = [];
let showSelection = false;
const filter = ref({
isAuthorFilter: true,
isParticipantFilter: false,
isFavoriteFilter: false,
isFinishedFilter: false,
isStoppedFilter: false,
isRunningFilter: false
});
const overlay = ref(false);
let absolute = true;
const dialog = ref(false);
const showMessage = ref(false);
let zIndex = 1;
let expanded = [];
let singleExpand = false;
let projectHeaders = [
{
text: 'Журнал проекта',
align: 'start',
sortable: false,
value: 'name',
},
{ text: 'Модификация', value: 'mode' },
{ text: 'Последние изменения', value: 'lastChange' }
];
const alertType = ref('success');
const messageAlert = ref('');
const editPr = ref('');
const keyNew = ref(0);
const sendPanent = ref(0);
// }
// },
// const projectTable = ref([]);
// projectTable.value = getProjects;
// console.log(getProjects, 'getProjects')
const projectTable = computed(() => {
if (filter.value.isFavoriteFilter) {
return prList.favProjects
} else if (filter.value.isAuthorFilter) {
return prList.authorProjects
} else if (filter.value.isFinishedFilter) {
return prList.finishedProjects
} else if (filter.value.isRunningFilter) {
return prList.runningProjects
} else if (filter.value.isParticipantFilter) {
return prList.participantProjects
} else if (filter.value.isStoppedFilter) {
return prList.stoppedProjects
} else {
return loadData;
}
});
async function getData () {
// await loadData();
}
onMounted(async () => {
await getData();
console.log(loadData, 'getProjects after load in store')
});
// methods: {
function validate () {
// this.$refs.form.validate();
}
function overlayToggle (id) {
projects.find(a => a.id_project === id).overlay = !this.projects.find(a => a.id_project === id).overlay
}
async function makeNotFavorite (project) {
let pr = Object.assign({},project);
if (project.keywords && !Array.isArray(project.keywords)) pr.keywords = project.keywords.split(" ").map((item) => item.trim());
pr.is_favorites = false;
resultAdd = await prList.fetchEditPr(pr);
}
async function makeFavorite (project) {
let pr = Object.assign({},project);
if (project.keywords && !Array.isArray(project.keywords)) pr.keywords = project.keywords.split(" ").map((item) => item.trim());
pr.is_favorites = true;
resultAdd = await prList.fetchEditPr(pr);
}
async function addingProject(mess) {
if (!mess) {
messageAlert.value = `Ошибка! Что-то пошло не по плану. Проект не удалось создать.`;
alertType.value = 'error';
showMessage.value = true;
setTimeout(() => {
showMessage.value= false;}, 8000);
} else {
// this.messageAlert = `Проект сохранен`;
await updateData();
showNew.value = false;
}
}
function deleteProject (project) {
dialog.value = false;
// let result = this.$store.dispatch('project/deleteProject', project);
console.log(result);
if (result) {
messageAlert.value = `Проект "${project.title}" удален`;
} else {
messageAlert.value = `Проект "${project.title}" не удалось удалить. Попробуйте позже.`;
alertType.value = 'error';
}
showMessage.value = true;
setTimeout(() => {
showMessage.value = false;}, 8000);
}
function deleteSeveralProjects () {
// this.picked_project.forEach(element => this.$store.dispatch('project/deleteProject', element))
picked_project.value = []
}
function showMenu (id) {
projects.find(a => a.id_project === id).menu = true
}
function hideMenu (id) {
projects.find(a => a.id_project === id).menu = false
}
function sort (f) {
filter.value[f] = !filter.value[f]
for (const key in filter.value) {
if (key === f) {
continue
}
filter.value[key] = false;
}
console.log('filter pr',filter.value, projectTable)
}
// renameProject(project) {
// this.overlay = false;
// },
function editProject(project) {
sendPanent.value = 0;
editPr.value = project;
keyNew.value += 1;
showNew.value = !showNew.value;
}
function cloneProject(project) {
editPr.value = project;
sendPanent.value = 1;
console.log('clone', sendPanent, editPr);
keyNew.value += 1;
showNew.value = !showNew.value;
}
function stopProject(project) {
let pr = Object.assign({},project);
if (project.keywords && !Array.isArray(project.keywords)) pr.keywords = project.keywords.split(" ").map((item) => item.trim());
// this.$store.dispatch('project/stopProject', pr);
}
function runProject(project) {
let pr = Object.assign({},project);
if (project.keywords && !Array.isArray(project.keywords)) pr.keywords = project.keywords.split(" ").map((item) => item.trim());
// this.$store.dispatch('project/runProject', pr);
}
function colorStatus(project) {
if (project?.last_changed_status==='3'){
return 'red ma-1 rounded-circle d-inline-block';
} else if (project?.last_changed_status==='2') {
return 'orange ma-1 rounded-circle d-inline-block';
} else {
return 'secondary ma-1 rounded-circle d-inline-block';
}
}
function overlayTrue(){
let listOfAction = document.querySelector('.actionProject');
listOfAction.style.display = "block";
console.log('вывод списка');
}
function promptness(project) {
if (project.last_changed_status==='3'){
return 'Срочный вопрос';
} else if (project.last_changed_status==='2') {
return 'Вопрос средней срочности';
} else {
return 'Не срочный вопрос';
}
}
function openNew() {
editPr.value = '';
sendPanent.value = 0;
showNew.value = true;
console.log(showNew.value, 'showNew is changed')
}
function closeImage() {
showNew.value = false;
}
async function updateData() {
// await store.dispatch('project/loadData');
}
function openMenu(project) {
}
// },
// computed: {
// },
// }
</script>
<style>
.space {
justify-content: space-between;
justify-content: space-around;
align-items: center;
}
.empty {
border: 1px solid red;
width: 40px;
height: 40px;
}
.hoverable {
position: relative;
}
.overlay {
background-color: #fff;
position: absolute;
top: 0; left: 0;
width: 100%;
height: 100%;
display: flex;
}
.menu-h {
position: relative;
display: inline-block;
}
.menu-h:hover .menu-list {
opacity: 1;
}
.menu-list {
position: absolute;
width: 120px;
bottom: 120%;
left: -30px;
z-index: 5;
opacity: 0;
background-color: white;
margin-left: -60px;
}
.overlay button {
width: 45%;
background-color: white;
height: 90%;
}
.projects-table {
display: flex;
}
li {
list-style: none;
}
h2 {
margin: 0;
margin: 0 0 20px;
}
input {
margin-top: 0;
}
input[type=text] {
margin-top: 0px !important;
margin: 0 5px;
/* padding: 5px !important; */
}
.projects {
padding: 10px;
display: flex;
flex-direction: column;
position: relative;
/* min-height: 100vh; */
}
.center {
display: table-cell;
text-align: center;
}
.smaller {
font-size: 14px;
}
.filters {
margin: 10px 0;
}
.filters span {
padding: 3px 5px;
}
.selected {
border-bottom: 2px solid #3914AF;
color: #3914AF;
font-weight: bold;
}
.project-filters {
margin: 0 0 20px;
display: flex;
align-items: center;
justify-content: space-between;
}
.btn-icon {
height: 40px;
background: transparent;
border: 1px solid #3914AF;
}
td {
padding: 5px;
border-bottom: 1px solid #C0B0F5;
}
.basil {
background-color: #FFFBE6
}
.actionProject {
position: absolute;
right: 5px;
bottom: 10px;
display: none;
}
#buttonAction {
overflow: visible
/* position: relative; */
}
.table-border {
border-bottom: 1px solid;
border-color: #C0B0F5 !important;
background-color: #F5F5FF;
}
.row-border {
border-bottom: 1px solid;
border-color: #C0B0F5 !important;
}
#square {
width: 9px;
height: 9px;
background: red;
}
.new-project {
position: absolute;
}
.closeNew {
display: hide;
}
.cursor {
cursor: pointer;
}
.alert-style {
position: fixed;
top: 50%;
right: 30%;
z-index: 105;
width: 26wh;
}
</style>

38
src/router/index.js Normal file
View File

@ -0,0 +1,38 @@
// import VueRouter from 'vue-router'
import { createRouter, createWebHistory } from 'vue-router'
import ProjectList from "../pages/project/list.vue";
const routes = [
{
path: '/',
name: 'Index',
component: '',
props: {
rootState: 'Index',
pageTitle: 'Olimp',
},
},
{ path: '/project', component: ProjectList },
// {
// path: '/project',
// name: 'ProjectList',
// component: ProjectList,
// props: {
// pageTitle: 'Проекты',
// },
// },
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default router;

81
src/style.css Normal file
View File

@ -0,0 +1,81 @@
@import "tailwindcss";
:root {
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
.card {
padding: 2em;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}

25
tailwind.config.js Normal file
View File

@ -0,0 +1,25 @@
module.exports = {
// content: [
// "./components/**/*.{js,vue,ts}",
// "./layouts/**/*.vue",
// "./pages/**/*.vue",
// "./plugins/**/*.{js,ts}",
// "./app.vue",
// "./error.vue",
// ],
darkMode: false,
theme: {
extend: {
colors: {
primary: 'violet-900',
purple: 'violet-300',
}
},
},
plugins: [],
variants: {
extend: {},
},
plugins: [],
}

11
vite.config.js Normal file
View File

@ -0,0 +1,11 @@
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite'
// https://vite.dev/config/
export default defineConfig({
plugins: [
vue(),
tailwindcss()
]
})