mirror of
https://github.com/Spythere/station-manager-2.0.git
synced 2026-05-03 13:38:13 +00:00
Migracja projektu na Vite
This commit is contained in:
+26
@@ -0,0 +1,26 @@
|
|||||||
|
# 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?
|
||||||
|
|
||||||
|
.vscode
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
# Stacjownik Station Manager 2.0
|
||||||
|
|
||||||
|
Wersja pomigracyjna (Vite + TypeScript)
|
||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<title>Stacjownik Station Manager v2.0</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.ts"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"name": "station-manager-2.0",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.0.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vue-tsc --noEmit && vite build",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.27.2",
|
||||||
|
"pinia": "^2.0.18",
|
||||||
|
"sass": "^1.54.4",
|
||||||
|
"vue": "^3.2.37",
|
||||||
|
"vue-router": "^4.1.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vitejs/plugin-vue": "^3.0.3",
|
||||||
|
"typescript": "^4.6.4",
|
||||||
|
"vite": "^3.0.7",
|
||||||
|
"vue-tsc": "^0.39.5"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="512" height="512" rx="256" fill="#0066FF"/>
|
||||||
|
<rect width="512" height="512" rx="256" stroke="#FF0000"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.112 194L137.004 233.319C130.273 235.283 123.875 238.033 117.917 241.463L85.1512 219.86L61.8467 243.242L83.6668 276.557C80.7268 281.974 78.3947 287.635 76.6707 293.439L38 301.467V334.533L76.0869 342.44C77.8539 348.963 80.3806 355.323 83.6668 361.378L61.8469 394.693L85.1514 418.074L118.159 396.312C124.274 399.728 130.709 402.356 137.316 404.195L145.112 442H178.888L186.684 404.195C193.291 402.356 199.726 399.728 205.841 396.312L238.849 418.074L262.153 394.693L240.333 361.378C243.619 355.323 246.146 348.963 247.913 342.44L286 334.533V301.467L247.329 293.439C245.605 287.635 243.273 281.974 240.333 276.557L262.153 243.242L238.849 219.86L206.083 241.463C200.124 238.033 193.727 235.283 186.996 233.319L178.888 194H145.112ZM162.409 362.089C186.678 362.089 206.352 342.35 206.352 318C206.352 293.65 186.678 273.911 162.409 273.911C138.14 273.911 118.465 293.65 118.465 318C118.465 342.35 138.14 362.089 162.409 362.089Z" fill="black" stroke="white" stroke-width="10.0613"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M332.624 70L324.516 109.319C317.785 111.283 311.388 114.033 305.429 117.463L272.663 95.8603L249.359 119.242L271.179 152.556C268.239 157.974 265.907 163.635 264.183 169.439L225.512 177.467V210.533L263.599 218.439C265.366 224.963 267.893 231.323 271.179 237.378L249.359 270.692L272.664 294.074L305.671 272.312C311.786 275.728 318.221 278.356 324.828 280.195L332.624 318H366.4L374.196 280.195C380.803 278.356 387.238 275.728 393.353 272.312L426.361 294.074L449.665 270.692L427.845 237.378C431.132 231.323 433.658 224.963 435.425 218.439L473.512 210.533V177.467L434.841 169.439C433.117 163.635 430.785 157.974 427.845 152.556L449.665 119.242L426.361 95.8603L393.595 117.463C387.637 114.033 381.239 111.283 374.508 109.319L366.4 70H332.624ZM349.921 238.089C374.19 238.089 393.865 218.35 393.865 194C393.865 169.65 374.19 149.911 349.921 149.911C325.652 149.911 305.978 169.65 305.978 194C305.978 218.35 325.652 238.089 349.921 238.089Z" fill="black" stroke="white" stroke-width="10.0613"/>
|
||||||
|
<rect x="325.818" y="405.665" width="7.11086" height="143.867" rx="3.55543" transform="rotate(90 325.818 405.665)" fill="white"/>
|
||||||
|
<rect x="361.785" y="430.553" width="10.6663" height="208.608" rx="5.33314" transform="rotate(90 361.785 430.553)" fill="white"/>
|
||||||
|
<g filter="url(#filter0_d_459_41)">
|
||||||
|
<rect width="25.0328" height="117.468" rx="12.5164" transform="matrix(0.711174 0.703016 -0.711174 0.703016 211.54 363)" fill="white"/>
|
||||||
|
</g>
|
||||||
|
<g filter="url(#filter1_d_459_41)">
|
||||||
|
<rect width="25.0328" height="117.468" rx="12.5164" transform="matrix(-0.711174 0.703016 0.711174 0.703016 300.46 363)" fill="white"/>
|
||||||
|
</g>
|
||||||
|
<g filter="url(#filter2_d_459_41)">
|
||||||
|
<rect x="139.352" y="65.4912" width="232.66" height="325.893" rx="41.5866" stroke="#7A7A7A" stroke-width="8.31733"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M135.193 107.078C135.193 81.8134 155.674 61.3325 180.938 61.3325H330.425C355.69 61.3325 376.171 81.8134 376.171 107.078V349.797C376.171 375.062 355.69 395.543 330.426 395.543H180.938C155.674 395.543 135.193 375.062 135.193 349.797V107.078ZM208.217 338.656C208.217 352.401 196.774 363.544 182.659 363.544C168.543 363.544 157.1 352.401 157.1 338.656C157.1 324.91 168.543 313.768 182.659 313.768C196.774 313.768 208.217 324.91 208.217 338.656ZM328.706 363.544C342.821 363.544 354.264 352.401 354.264 338.656C354.264 324.91 342.821 313.768 328.706 313.768C314.591 313.768 303.148 324.91 303.148 338.656C303.148 352.401 314.591 363.544 328.706 363.544ZM248.38 136.323C248.38 132.07 244.932 128.622 240.679 128.622H164.802C160.549 128.622 157.101 132.07 157.101 136.323V203.223C157.101 207.476 160.549 210.924 164.802 210.924H240.679C244.932 210.924 248.38 207.476 248.38 203.223V136.323ZM346.563 128.622C350.817 128.622 354.265 132.07 354.265 136.323V203.223C354.265 207.476 350.817 210.924 346.563 210.924H270.686C266.433 210.924 262.985 207.476 262.985 203.223V136.323C262.985 132.07 266.433 128.622 270.686 128.622H346.563Z" fill="white"/>
|
||||||
|
<ellipse cx="255.682" cy="64.888" rx="25.5582" ry="24.888" fill="#F3F1F1"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<filter id="filter0_d_459_41" x="106.676" y="341.617" width="143.99" height="142.947" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||||
|
<feOffset/>
|
||||||
|
<feGaussianBlur stdDeviation="13.269"/>
|
||||||
|
<feComposite in2="hardAlpha" operator="out"/>
|
||||||
|
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||||
|
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_459_41"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_459_41" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
<filter id="filter1_d_459_41" x="261.334" y="341.617" width="143.99" height="142.947" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||||
|
<feOffset/>
|
||||||
|
<feGaussianBlur stdDeviation="13.269"/>
|
||||||
|
<feComposite in2="hardAlpha" operator="out"/>
|
||||||
|
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||||
|
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_459_41"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_459_41" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
<filter id="filter2_d_459_41" x="110.241" y="15.048" width="290.882" height="405.446" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||||
|
<feOffset/>
|
||||||
|
<feGaussianBlur stdDeviation="12.476"/>
|
||||||
|
<feComposite in2="hardAlpha" operator="out"/>
|
||||||
|
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||||
|
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_459_41"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_459_41" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.3 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white" width="18px" height="18px"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
|
||||||
|
After Width: | Height: | Size: 256 B |
@@ -0,0 +1,51 @@
|
|||||||
|
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<rect width="512" height="512" rx="256" fill="#0066FF"/>
|
||||||
|
<rect width="512" height="512" rx="256" stroke="#FF0000"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M145.112 194L137.004 233.319C130.273 235.283 123.875 238.033 117.917 241.463L85.1512 219.86L61.8467 243.242L83.6668 276.557C80.7268 281.974 78.3947 287.635 76.6707 293.439L38 301.467V334.533L76.0869 342.44C77.8539 348.963 80.3806 355.323 83.6668 361.378L61.8469 394.693L85.1514 418.074L118.159 396.312C124.274 399.728 130.709 402.356 137.316 404.195L145.112 442H178.888L186.684 404.195C193.291 402.356 199.726 399.728 205.841 396.312L238.849 418.074L262.153 394.693L240.333 361.378C243.619 355.323 246.146 348.963 247.913 342.44L286 334.533V301.467L247.329 293.439C245.605 287.635 243.273 281.974 240.333 276.557L262.153 243.242L238.849 219.86L206.083 241.463C200.124 238.033 193.727 235.283 186.996 233.319L178.888 194H145.112ZM162.409 362.089C186.678 362.089 206.352 342.35 206.352 318C206.352 293.65 186.678 273.911 162.409 273.911C138.14 273.911 118.465 293.65 118.465 318C118.465 342.35 138.14 362.089 162.409 362.089Z" fill="black" stroke="white" stroke-width="10.0613"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M332.624 70L324.516 109.319C317.785 111.283 311.388 114.033 305.429 117.463L272.663 95.8603L249.359 119.242L271.179 152.556C268.239 157.974 265.907 163.635 264.183 169.439L225.512 177.467V210.533L263.599 218.439C265.366 224.963 267.893 231.323 271.179 237.378L249.359 270.692L272.664 294.074L305.671 272.312C311.786 275.728 318.221 278.356 324.828 280.195L332.624 318H366.4L374.196 280.195C380.803 278.356 387.238 275.728 393.353 272.312L426.361 294.074L449.665 270.692L427.845 237.378C431.132 231.323 433.658 224.963 435.425 218.439L473.512 210.533V177.467L434.841 169.439C433.117 163.635 430.785 157.974 427.845 152.556L449.665 119.242L426.361 95.8603L393.595 117.463C387.637 114.033 381.239 111.283 374.508 109.319L366.4 70H332.624ZM349.921 238.089C374.19 238.089 393.865 218.35 393.865 194C393.865 169.65 374.19 149.911 349.921 149.911C325.652 149.911 305.978 169.65 305.978 194C305.978 218.35 325.652 238.089 349.921 238.089Z" fill="black" stroke="white" stroke-width="10.0613"/>
|
||||||
|
<rect x="325.818" y="405.665" width="7.11086" height="143.867" rx="3.55543" transform="rotate(90 325.818 405.665)" fill="white"/>
|
||||||
|
<rect x="361.785" y="430.553" width="10.6663" height="208.608" rx="5.33314" transform="rotate(90 361.785 430.553)" fill="white"/>
|
||||||
|
<g filter="url(#filter0_d_459_41)">
|
||||||
|
<rect width="25.0328" height="117.468" rx="12.5164" transform="matrix(0.711174 0.703016 -0.711174 0.703016 211.54 363)" fill="white"/>
|
||||||
|
</g>
|
||||||
|
<g filter="url(#filter1_d_459_41)">
|
||||||
|
<rect width="25.0328" height="117.468" rx="12.5164" transform="matrix(-0.711174 0.703016 0.711174 0.703016 300.46 363)" fill="white"/>
|
||||||
|
</g>
|
||||||
|
<g filter="url(#filter2_d_459_41)">
|
||||||
|
<rect x="139.352" y="65.4912" width="232.66" height="325.893" rx="41.5866" stroke="#7A7A7A" stroke-width="8.31733"/>
|
||||||
|
<path fill-rule="evenodd" clip-rule="evenodd" d="M135.193 107.078C135.193 81.8134 155.674 61.3325 180.938 61.3325H330.425C355.69 61.3325 376.171 81.8134 376.171 107.078V349.797C376.171 375.062 355.69 395.543 330.426 395.543H180.938C155.674 395.543 135.193 375.062 135.193 349.797V107.078ZM208.217 338.656C208.217 352.401 196.774 363.544 182.659 363.544C168.543 363.544 157.1 352.401 157.1 338.656C157.1 324.91 168.543 313.768 182.659 313.768C196.774 313.768 208.217 324.91 208.217 338.656ZM328.706 363.544C342.821 363.544 354.264 352.401 354.264 338.656C354.264 324.91 342.821 313.768 328.706 313.768C314.591 313.768 303.148 324.91 303.148 338.656C303.148 352.401 314.591 363.544 328.706 363.544ZM248.38 136.323C248.38 132.07 244.932 128.622 240.679 128.622H164.802C160.549 128.622 157.101 132.07 157.101 136.323V203.223C157.101 207.476 160.549 210.924 164.802 210.924H240.679C244.932 210.924 248.38 207.476 248.38 203.223V136.323ZM346.563 128.622C350.817 128.622 354.265 132.07 354.265 136.323V203.223C354.265 207.476 350.817 210.924 346.563 210.924H270.686C266.433 210.924 262.985 207.476 262.985 203.223V136.323C262.985 132.07 266.433 128.622 270.686 128.622H346.563Z" fill="white"/>
|
||||||
|
<ellipse cx="255.682" cy="64.888" rx="25.5582" ry="24.888" fill="#F3F1F1"/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<filter id="filter0_d_459_41" x="106.676" y="341.617" width="143.99" height="142.947" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||||
|
<feOffset/>
|
||||||
|
<feGaussianBlur stdDeviation="13.269"/>
|
||||||
|
<feComposite in2="hardAlpha" operator="out"/>
|
||||||
|
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||||
|
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_459_41"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_459_41" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
<filter id="filter1_d_459_41" x="261.334" y="341.617" width="143.99" height="142.947" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||||
|
<feOffset/>
|
||||||
|
<feGaussianBlur stdDeviation="13.269"/>
|
||||||
|
<feComposite in2="hardAlpha" operator="out"/>
|
||||||
|
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||||
|
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_459_41"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_459_41" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
<filter id="filter2_d_459_41" x="110.241" y="15.048" width="290.882" height="405.446" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||||
|
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||||
|
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||||
|
<feOffset/>
|
||||||
|
<feGaussianBlur stdDeviation="12.476"/>
|
||||||
|
<feComposite in2="hardAlpha" operator="out"/>
|
||||||
|
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
|
||||||
|
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_459_41"/>
|
||||||
|
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_459_41" result="shape"/>
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.3 KiB |
@@ -0,0 +1,7 @@
|
|||||||
|
<svg width="51" height="68" viewBox="0 0 51 68" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M45.3056 7.42893H36.8794V5.32619C36.8792 2.3894 34.5721 0 31.736 0H19.4491C16.6131 0 14.3059 2.3894 14.3059 5.32619V7.42893H5.87905C2.96388 7.42893 0.592331 9.8849 0.592331 12.9038V18.5715C0.592331 19.7781 1.53696 20.7563 2.70213 20.7563H3.78909V65.5921C3.78909 66.7988 4.73372 67.777 5.89888 67.777H45.2858C46.4509 67.777 47.3956 66.7988 47.3956 65.5921V20.7563H48.4825C49.6477 20.7563 50.5923 19.7781 50.5923 18.5715V12.9038C50.5922 9.8849 48.2206 7.42893 45.3056 7.42893ZM18.5254 5.32619C18.5254 4.79876 18.9398 4.36979 19.4491 4.36979H31.736C32.2453 4.36979 32.6596 4.7989 32.6596 5.32619V7.42893H18.5254V5.32619V5.32619ZM4.81206 12.9038C4.81206 12.2944 5.2907 11.7987 5.87919 11.7987H45.3056C45.8941 11.7987 46.3727 12.2944 46.3727 12.9038V16.3866H4.81206V12.9038ZM43.176 63.4072H8.00868V20.7563H43.176V63.4072Z" fill="white"/>
|
||||||
|
<path d="M12.1958 60.228C12.9726 60.228 13.6023 59.5759 13.6023 58.7714V24.2519C13.6023 23.4474 12.9726 22.7953 12.1958 22.7953C11.4189 22.7953 10.7892 23.4474 10.7892 24.2519V58.7714C10.7892 59.5759 11.4189 60.228 12.1958 60.228Z" fill="white"/>
|
||||||
|
<path d="M21.1268 60.228C21.9036 60.228 22.5333 59.5759 22.5333 58.7714V24.2519C22.5333 23.4474 21.9036 22.7953 21.1268 22.7953C20.35 22.7953 19.7203 23.4474 19.7203 24.2519V58.7714C19.7203 59.5759 20.35 60.228 21.1268 60.228Z" fill="white"/>
|
||||||
|
<path d="M30.0579 60.228C30.8347 60.228 31.4644 59.5759 31.4644 58.7714V24.2519C31.4644 23.4474 30.8347 22.7953 30.0579 22.7953C29.281 22.7953 28.6513 23.4474 28.6513 24.2519V58.7714C28.6513 59.5759 29.281 60.228 30.0579 60.228Z" fill="white"/>
|
||||||
|
<path d="M38.9889 60.228C39.7657 60.228 40.3954 59.5759 40.3954 58.7714V24.2519C40.3954 23.4474 39.7657 22.7953 38.9889 22.7953C38.2121 22.7953 37.5824 23.4474 37.5824 24.2519V58.7714C37.5824 59.5759 38.2121 60.228 38.9889 60.228Z" fill="white"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
+88
@@ -0,0 +1,88 @@
|
|||||||
|
<template>
|
||||||
|
<PopUpCard v-if="store.alertMessage || store.confirmMessage" />
|
||||||
|
|
||||||
|
<router-view></router-view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import dataMixin from './mixins/dataMixin';
|
||||||
|
import { useStore } from './store';
|
||||||
|
import PopUpCard from './components/PopUpCard.vue';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
mixins: [dataMixin],
|
||||||
|
components: { PopUpCard },
|
||||||
|
setup() {
|
||||||
|
const store = useStore();
|
||||||
|
return {
|
||||||
|
store,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async autoLogin() {
|
||||||
|
const token = window.localStorage.getItem('auth-token');
|
||||||
|
if (token) {
|
||||||
|
this.store.isAuthorized = true;
|
||||||
|
this.store.token = token;
|
||||||
|
this.store.user = JSON.parse(window.localStorage.getItem('user')!);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.autoLogin();
|
||||||
|
if (window.localStorage.getItem('notifyDiscord') !== null) {
|
||||||
|
this.store.notifyDiscord = Boolean(Number(window.localStorage.getItem('notifyDiscord')));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@500;600&display=swap');
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:visited {
|
||||||
|
color: rgb(124, 164, 218);
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: 'Inter', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
html {
|
||||||
|
padding: 0 0.25em;
|
||||||
|
margin: 0;
|
||||||
|
background-color: #1e263f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
appearance: none;
|
||||||
|
outline: none;
|
||||||
|
|
||||||
|
background-color: #151515;
|
||||||
|
color: white;
|
||||||
|
border: 1px solid white;
|
||||||
|
|
||||||
|
padding: 0.35rem 0.75rem;
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 100ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #505050;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus-within {
|
||||||
|
border: 1px solid gold;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<template>
|
||||||
|
<div class="bg-dimmer"></div>
|
||||||
|
<div class="popup-card">
|
||||||
|
<div class="card_content">
|
||||||
|
<p>{{ store.alertMessage || store.confirmMessage }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card_actions">
|
||||||
|
<span v-if="store.alertMessage">
|
||||||
|
<button @click="closeCard">OK!</button>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span v-else-if="store.confirmMessage">
|
||||||
|
<button @click="confirm">OK!</button>
|
||||||
|
<button @click="closeCard">Anuluj</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
emits: ['confirm'],
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
store: useStore(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
closeCard() {
|
||||||
|
this.store.alertMessage = '';
|
||||||
|
this.store.confirmMessage = '';
|
||||||
|
},
|
||||||
|
|
||||||
|
confirm() {
|
||||||
|
this.$emit('confirm');
|
||||||
|
this.closeCard();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.bg-dimmer {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 998;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100vw;
|
||||||
|
height: 100vh;
|
||||||
|
|
||||||
|
background-color: #0000004f;
|
||||||
|
}
|
||||||
|
.popup-card {
|
||||||
|
position: fixed;
|
||||||
|
z-index: 999;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
|
||||||
|
width: 80%;
|
||||||
|
max-width: 350px;
|
||||||
|
|
||||||
|
padding: 0.5em 1em;
|
||||||
|
margin-top: 1em;
|
||||||
|
|
||||||
|
font-size: 1.35em;
|
||||||
|
|
||||||
|
background-color: #2a2a2a;
|
||||||
|
box-shadow: 2px 0 10px 2px #1f1f1f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card_content {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card_actions {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,340 @@
|
|||||||
|
<template>
|
||||||
|
<div class="routes-modal" v-if="store.currentStation">
|
||||||
|
<div class="exit" @click="closeRoutesModal">
|
||||||
|
<img src="/icon-exit.svg" alt="exit icon" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-wrapper">
|
||||||
|
<h1>Szlaki na scenerii {{ store.currentStation.name }}</h1>
|
||||||
|
|
||||||
|
<ul class="route-list">
|
||||||
|
<li class="route" v-for="(route, i) in computedRouteList" :key="route.routeName + i">
|
||||||
|
<img @click="removeRoute(i)" class="route-delete" src="/icon-trash.svg" alt="icon trash" />
|
||||||
|
|
||||||
|
<form>
|
||||||
|
<div>Szlak: <input type="text" v-model="route.routeName" /></div>
|
||||||
|
<div>
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
:name="`${route.routeName}-internal`"
|
||||||
|
:id="`${route.routeName}-internal`"
|
||||||
|
v-model="route.routeIsInternal"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-internal`">Szlak wewnętrzny</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span>Liczba torów: </span>
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-tracks`"
|
||||||
|
:id="`${route.routeName}-track1`"
|
||||||
|
:value="Number(1)"
|
||||||
|
:checked="route.routeTracks == 1"
|
||||||
|
v-model="route.routeTracks"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-track1`">1</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-tracks`"
|
||||||
|
:id="`${route.routeName}-track2`"
|
||||||
|
:value="Number(2)"
|
||||||
|
:checked="route.routeTracks == 2"
|
||||||
|
v-model="route.routeTracks"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-track2`">2</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span>Elektryfikacja: </span>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-electr`"
|
||||||
|
:id="`${route.routeName}-E`"
|
||||||
|
:checked="route.routeElectrification == 'E'"
|
||||||
|
value="E"
|
||||||
|
v-model="route.routeElectrification"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-E`">Tak</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-electr`"
|
||||||
|
:id="`${route.routeName}-N`"
|
||||||
|
:checked="route.routeElectrification == 'N'"
|
||||||
|
value="N"
|
||||||
|
v-model="route.routeElectrification"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-N`">Nie</label>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span>Typ blokady: </span>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-block`"
|
||||||
|
:id="`${route.routeName}-PBL`"
|
||||||
|
:checked="route.routeBlockType == 'P'"
|
||||||
|
value="P"
|
||||||
|
v-model="route.routeBlockType"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-PBL`">PBL</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-block`"
|
||||||
|
:id="`${route.routeName}-SBL`"
|
||||||
|
:checked="route.routeBlockType == 'S'"
|
||||||
|
value="S"
|
||||||
|
v-model="route.routeBlockType"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-SBL`">SBL</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span>Blokada dwukierunkowa: </span>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-2twb`"
|
||||||
|
:id="`${route.routeName}-twb`"
|
||||||
|
:checked="route.routeHasTwoWayBlock"
|
||||||
|
:value="true"
|
||||||
|
v-model="route.routeHasTwoWayBlock"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-twb`">Tak</label>
|
||||||
|
|
||||||
|
<input
|
||||||
|
type="radio"
|
||||||
|
:name="`${route.routeName}-2twb`"
|
||||||
|
:id="`${route.routeName}-notwb`"
|
||||||
|
:checked="!route.routeHasTwoWayBlock"
|
||||||
|
:value="false"
|
||||||
|
v-model="route.routeHasTwoWayBlock"
|
||||||
|
/>
|
||||||
|
<label :for="`${route.routeName}-notwb`">Nie</label>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="routes-actions">
|
||||||
|
<button @click="saveRoutes">Zapisz</button>
|
||||||
|
<button @click="addNewRoute">Dodaj szlak</button>
|
||||||
|
<button @click="closeRoutesModal">Zamknij</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">import { defineComponent } from 'vue';
|
||||||
|
import changeMixin from '../mixins/changeMixin';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
store: useStore(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
mixins: [changeMixin],
|
||||||
|
|
||||||
|
data: () => ({
|
||||||
|
currentRoutes: '',
|
||||||
|
routeBackup: '',
|
||||||
|
}),
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
computedRouteList() {
|
||||||
|
if (!this.store.currentStation) return [];
|
||||||
|
|
||||||
|
if (this.currentRoutes.length == 0) return [];
|
||||||
|
|
||||||
|
return this.currentRoutes.split(';').map((route) => {
|
||||||
|
/*
|
||||||
|
Route: !Oc_2EPB
|
||||||
|
! - szlak wewnętrzny (! - tak, brak wykrzyknika - nie)
|
||||||
|
Oc - nazwa scenerii
|
||||||
|
2 - liczba torów (1 lub 2)
|
||||||
|
E - elektryfikacja (E - tak, N - nie)
|
||||||
|
P - rodzaj blokady (P - PBL, S - SBL)
|
||||||
|
B - blokada dwukierunkowa (B - tak, brak litery - nie)
|
||||||
|
*/
|
||||||
|
const routeProps = route.split('_');
|
||||||
|
const routeIsInternal = routeProps[0].startsWith('!');
|
||||||
|
const routeName = routeIsInternal ? routeProps[0].replace('!', '') : routeProps[0];
|
||||||
|
|
||||||
|
const routeSpecs = routeProps[1];
|
||||||
|
return {
|
||||||
|
routeName,
|
||||||
|
routeTracks: Number(routeSpecs[0]),
|
||||||
|
routeElectrification: routeSpecs[1],
|
||||||
|
routeBlockType: routeSpecs[2],
|
||||||
|
routeHasTwoWayBlock: routeSpecs[3] ? true : false,
|
||||||
|
routeIsInternal,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
if (this.store.currentStation) {
|
||||||
|
this.currentRoutes = this.store.currentStation.routes;
|
||||||
|
this.routeBackup = this.currentRoutes;
|
||||||
|
}
|
||||||
|
// console.log(this.currentRoutes + " git");
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
closeRoutesModal() {
|
||||||
|
this.store.currentStation = null;
|
||||||
|
this.currentRoutes = '';
|
||||||
|
},
|
||||||
|
|
||||||
|
addNewRoute() {
|
||||||
|
this.currentRoutes += (this.currentRoutes.length != 0 ? ';' : '') + `-_1EP`;
|
||||||
|
this.saveRoutes();
|
||||||
|
},
|
||||||
|
|
||||||
|
removeRoute(index: number) {
|
||||||
|
this.currentRoutes = this.currentRoutes
|
||||||
|
.split(';')
|
||||||
|
.filter((_, i) => i != index)
|
||||||
|
.join(';');
|
||||||
|
|
||||||
|
this.saveRoutes();
|
||||||
|
},
|
||||||
|
|
||||||
|
saveRoutes() {
|
||||||
|
const index = this.store.stationList.findIndex((station) => station.name === this.store.currentStation?.name);
|
||||||
|
|
||||||
|
if (index == -1) return;
|
||||||
|
|
||||||
|
const routeString = this.computedRouteList
|
||||||
|
.map(
|
||||||
|
(route) =>
|
||||||
|
`${route.routeIsInternal ? '!' : ''}${route.routeName.trim()}_${route.routeTracks}${
|
||||||
|
route.routeElectrification
|
||||||
|
}${route.routeBlockType}${route.routeHasTwoWayBlock ? 'B' : ''}`
|
||||||
|
)
|
||||||
|
.join(';');
|
||||||
|
|
||||||
|
this.store.stationList[index]['routes'] = routeString;
|
||||||
|
this.currentRoutes = routeString;
|
||||||
|
|
||||||
|
this.addChange(this.store.currentStation!.name, 'routes', this.routeBackup, routeString);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.routes-modal {
|
||||||
|
position: fixed;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
|
||||||
|
width: 90%;
|
||||||
|
max-width: 800px;
|
||||||
|
|
||||||
|
height: 95%;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0.5em 0;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
z-index: 100;
|
||||||
|
|
||||||
|
background-color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-wrapper {
|
||||||
|
overflow: auto;
|
||||||
|
flex-grow: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.routes-modal h1 {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
|
||||||
|
z-index: 100;
|
||||||
|
|
||||||
|
background-color: #333;
|
||||||
|
padding: 0.5em 2em;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.routes-modal label {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.routes-modal .exit {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: 101;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 0.5em 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exit img {
|
||||||
|
width: 2.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.routes-modal input {
|
||||||
|
display: inline;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0.5em 0;
|
||||||
|
|
||||||
|
color: black;
|
||||||
|
font-size: 1em;
|
||||||
|
|
||||||
|
max-width: 120px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0 1em;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul li {
|
||||||
|
padding: 0.65em;
|
||||||
|
margin: 0.5em 0;
|
||||||
|
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
background-color: #222;
|
||||||
|
}
|
||||||
|
|
||||||
|
.route-delete {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
margin: 0.5em;
|
||||||
|
width: 1.15em;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.routes-actions {
|
||||||
|
background-color: #333;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
margin-top: 0.5em;
|
||||||
|
padding: 0.5em 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.routes-actions button {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,279 @@
|
|||||||
|
<template>
|
||||||
|
<div class="table-actions">
|
||||||
|
<div class="pane info-pane">
|
||||||
|
<div>
|
||||||
|
<span v-if="store.user">
|
||||||
|
Zalogowany jako <b>{{ store.user.name }}</b>
|
||||||
|
</span>
|
||||||
|
•
|
||||||
|
<span class="info-file" :class="store.dataState">
|
||||||
|
<span v-if="store.dataState == 'LOADING'">Ładowanie danych...</span>
|
||||||
|
<span v-if="store.dataState == 'LOADED'">Załadowano dane z bazy!</span>
|
||||||
|
<span v-if="store.dataState == 'ERROR'">Błąd podczas pobierania danych!</span>
|
||||||
|
</span>
|
||||||
|
//
|
||||||
|
<span class="file-changes" style="color: salmon" v-if="store.unsavedChanges">Niezapisane zmiany!</span>
|
||||||
|
<span class="file-changes" style="color: #aaa" v-else>Brak niezapisanych zmian</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pane actions-pane">
|
||||||
|
<button @click="addNewStation">Dodaj nową stację</button>
|
||||||
|
<button @click="confirmLoadData">Odśwież dane</button>
|
||||||
|
|
||||||
|
<button @click="confirmUpdateList" :data-disabled="!store.unsavedChanges" :disabled="!store.unsavedChanges">
|
||||||
|
Zapisz zmiany
|
||||||
|
</button>
|
||||||
|
<button @click="signOut">Wyloguj się</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pane notify-pane">
|
||||||
|
<label id="notify">
|
||||||
|
<input
|
||||||
|
type="checkbox"
|
||||||
|
v-model="store.notifyDiscord"
|
||||||
|
@input="onNotifyCheckboxChange(($event.target as HTMLInputElement)!.checked)"
|
||||||
|
/>
|
||||||
|
<span>
|
||||||
|
Powiadom o zmianach: <b>{{ store.notifyDiscord ? 'TAK' : 'NIE' }}</b>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pane search-pane">
|
||||||
|
<input
|
||||||
|
class="search"
|
||||||
|
ref="search"
|
||||||
|
type="text"
|
||||||
|
v-model="store.searchedSceneryName"
|
||||||
|
placeholder="Wpisz nazwę scenerii..."
|
||||||
|
width="350"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<button style="margin-left: 0.5em" @click="clearInput">Wyczyść</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import axios from 'axios';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import dataMixin from '../mixins/dataMixin';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
import { SceneryRowItem } from '../types/types';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
store: useStore(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
mixins: [dataMixin],
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
confirmLoadData() {
|
||||||
|
const confirmed = confirm('Czy na pewno chcesz odświeżyć dane? Wszelkie niezapisane zmiany zostaną utracone!');
|
||||||
|
|
||||||
|
if (confirmed) this.loadData();
|
||||||
|
},
|
||||||
|
|
||||||
|
confirmRestoreList() {
|
||||||
|
const confirmed = confirm(
|
||||||
|
'Czy na pewno chcesz zresetować listę do ustawień z pliku? Wszelkie niezapisane zmiany zostaną utracone!'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (confirmed) this.restoreList();
|
||||||
|
},
|
||||||
|
|
||||||
|
confirmUpdateList() {
|
||||||
|
const confirmed = confirm('Czy na pewno chcesz wprowadzić obecne zmiany?');
|
||||||
|
|
||||||
|
if (confirmed) this.updateListToDb();
|
||||||
|
},
|
||||||
|
|
||||||
|
signOut() {
|
||||||
|
this.store.token = null;
|
||||||
|
this.store.isAuthorized = false;
|
||||||
|
|
||||||
|
window.localStorage.removeItem('auth-token');
|
||||||
|
window.localStorage.removeItem('user');
|
||||||
|
|
||||||
|
this.$router.push('/login');
|
||||||
|
},
|
||||||
|
|
||||||
|
onNotifyCheckboxChange(value: boolean) {
|
||||||
|
window.localStorage.setItem('notifyDiscord', Number(value).toString());
|
||||||
|
},
|
||||||
|
|
||||||
|
async updateListToDb() {
|
||||||
|
try {
|
||||||
|
const mappedChangeList = Object.entries(this.store.changeList).map(([k, v]) => {
|
||||||
|
return { name: k, ...v };
|
||||||
|
});
|
||||||
|
|
||||||
|
await axios.post(
|
||||||
|
`${this.API_URL}/manager/updateSceneryList`,
|
||||||
|
{
|
||||||
|
changeList: mappedChangeList,
|
||||||
|
token: this.store.token,
|
||||||
|
notify: this.store.notifyDiscord,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${this.store.token}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
alert('Zapisano do bazy!');
|
||||||
|
this.loadData();
|
||||||
|
} catch (error) {
|
||||||
|
this.store.alertMessage = 'Ups! Wystąpił błąd podczas zapisywania danych!';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
addNewStation() {
|
||||||
|
const name = prompt('Nazwa nowej scenerii');
|
||||||
|
if (!name) return;
|
||||||
|
|
||||||
|
if (
|
||||||
|
this.store.stationList.some(
|
||||||
|
(station) => station.name.toLocaleLowerCase('pl-PL') == name.toLocaleLowerCase('pl-PL')
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
this.store.alertMessage = 'Sceneria o takiej nazwie już istnieje!';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.store.newStationsCount++;
|
||||||
|
|
||||||
|
const newSt: SceneryRowItem = {
|
||||||
|
name,
|
||||||
|
url: '',
|
||||||
|
lines: '',
|
||||||
|
project: null,
|
||||||
|
reqLevel: -1,
|
||||||
|
signalType: 'współczesna',
|
||||||
|
controlType: 'SCS',
|
||||||
|
SUP: false,
|
||||||
|
routes: 'Test_1EPB"',
|
||||||
|
checkpoints: '',
|
||||||
|
authors: '',
|
||||||
|
availability: 'default',
|
||||||
|
};
|
||||||
|
|
||||||
|
this.store.changeList[name] = { ...newSt };
|
||||||
|
this.store.changeBackupList[name] = null;
|
||||||
|
this.store.searchedSceneryName = name;
|
||||||
|
|
||||||
|
this.store.unsavedChanges = true;
|
||||||
|
|
||||||
|
this.store.stationList.unshift(newSt);
|
||||||
|
},
|
||||||
|
|
||||||
|
restoreList() {
|
||||||
|
if (this.store.backupList.length == 0) return;
|
||||||
|
|
||||||
|
this.store.stationList = JSON.parse(this.store.backupList);
|
||||||
|
this.store.changeList = {};
|
||||||
|
this.store.changeBackupList = {};
|
||||||
|
this.store.stationsToRemove = [];
|
||||||
|
this.store.unsavedChanges = false;
|
||||||
|
this.store.searchedSceneryName = '';
|
||||||
|
},
|
||||||
|
|
||||||
|
clearInput() {
|
||||||
|
this.store.searchedSceneryName = '';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
button {
|
||||||
|
&[data-disabled='true'] {
|
||||||
|
user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-file {
|
||||||
|
color: greenyellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-file.LOADING {
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-file.ERROR {
|
||||||
|
color: salmon;
|
||||||
|
}
|
||||||
|
|
||||||
|
#notify-checkbox:checked + label {
|
||||||
|
color: gold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search {
|
||||||
|
color: black;
|
||||||
|
|
||||||
|
border: 1px solid white;
|
||||||
|
outline: none;
|
||||||
|
appearance: none;
|
||||||
|
|
||||||
|
padding: 0.35em 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pane {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions-pane {
|
||||||
|
margin-top: 1em;
|
||||||
|
|
||||||
|
button {
|
||||||
|
margin: 0.5em 0.5em 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.notify-pane {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-pane {
|
||||||
|
margin-top: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
label#notify {
|
||||||
|
cursor: pointer;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
color: #000;
|
||||||
|
|
||||||
|
span {
|
||||||
|
padding: 0.3em 0.25em;
|
||||||
|
background-color: salmon;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
display: none;
|
||||||
|
|
||||||
|
&:checked + span {
|
||||||
|
background-color: lightblue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 550px) {
|
||||||
|
.pane {
|
||||||
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { createApp } from 'vue';
|
||||||
|
import router from './router';
|
||||||
|
|
||||||
|
import App from './App.vue';
|
||||||
|
|
||||||
|
import { createPinia } from 'pinia';
|
||||||
|
|
||||||
|
createApp(App).use(router).use(createPinia()).mount('#app');
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
store: useStore(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
addChange(stationName: string, propName: string, oldValue: any, newValue: any) {
|
||||||
|
if (oldValue === newValue) return;
|
||||||
|
|
||||||
|
if (this.store.changeList[stationName] === null || !(stationName in this.store.changeList))
|
||||||
|
this.store.changeList[stationName] = {};
|
||||||
|
|
||||||
|
if (propName === 'name') {
|
||||||
|
const station = this.store.stationList[this.store.stationList.findIndex((v) => v.name == newValue)];
|
||||||
|
console.log(oldValue, newValue, station);
|
||||||
|
|
||||||
|
this.store.changeBackupList[oldValue] = { ...station, name: oldValue };
|
||||||
|
this.store.changeBackupList[newValue] = null;
|
||||||
|
|
||||||
|
this.store.changeList[oldValue] = null;
|
||||||
|
this.store.changeList[newValue] = { ...station };
|
||||||
|
} else {
|
||||||
|
this.store.changeList[stationName][propName] = newValue;
|
||||||
|
|
||||||
|
if (!this.store.changeBackupList[stationName]) this.store.changeBackupList[stationName] = {};
|
||||||
|
|
||||||
|
if (this.store.changeBackupList[stationName][propName] === undefined)
|
||||||
|
this.store.changeBackupList[stationName][propName] = oldValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.store.changeList[stationName][propName] == this.store.changeBackupList[stationName][propName]) {
|
||||||
|
delete this.store.changeList[stationName][propName];
|
||||||
|
delete this.store.changeBackupList[stationName][propName];
|
||||||
|
|
||||||
|
if (Object.keys(this.store.changeList[stationName]).length == 0) delete this.store.changeList[stationName];
|
||||||
|
|
||||||
|
if (Object.keys(this.store.changeBackupList[stationName]).length == 0)
|
||||||
|
delete this.store.changeBackupList[stationName];
|
||||||
|
}
|
||||||
|
|
||||||
|
this.store.unsavedChanges = Object.keys(this.store.changeList).length != 0;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
store: useStore(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
API_URL: import.meta.env.PROD ? 'https://stacjownik.eu-4.evennode.com' : import.meta.env.VITE_API_URL,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
async loadData() {
|
||||||
|
try {
|
||||||
|
this.store.dataState = 'LOADING';
|
||||||
|
|
||||||
|
const data = (
|
||||||
|
await axios.get(`${this.API_URL}/api/getSceneries?time=${Date.now()}`, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: `Bearer ${this.store.token}`,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).data;
|
||||||
|
|
||||||
|
this.store.backupList = JSON.stringify(data);
|
||||||
|
this.store.stationList = data;
|
||||||
|
this.store.unsavedChanges = false;
|
||||||
|
this.store.changeList = [];
|
||||||
|
this.store.changeBackupList = [];
|
||||||
|
|
||||||
|
this.store.dataState = 'LOADED';
|
||||||
|
} catch (error) {
|
||||||
|
this.store.dataState = 'ERROR';
|
||||||
|
this.store.token = '';
|
||||||
|
this.store.isAuthorized = false;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
|
||||||
|
|
||||||
|
const routes: Array<RouteRecordRaw> = [
|
||||||
|
{
|
||||||
|
path: '/',
|
||||||
|
name: 'ManagerView',
|
||||||
|
component: () => import('./views/ManagerView.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/login',
|
||||||
|
name: 'LoginView',
|
||||||
|
component: () => import('./views/LoginView.vue'),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const router = createRouter({
|
||||||
|
history: createWebHistory(),
|
||||||
|
routes,
|
||||||
|
});
|
||||||
|
|
||||||
|
router.beforeEach((to, from, next) => {
|
||||||
|
const token = window.localStorage.getItem('auth-token');
|
||||||
|
|
||||||
|
if (!token && to.path != '/login') return next({ path: '/login' });
|
||||||
|
|
||||||
|
if (token && to.path == '/login') return next({ path: '/' });
|
||||||
|
// else if (to.path == '/login') return next({ path: '/' });
|
||||||
|
|
||||||
|
return next();
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
import { defineStore } from 'pinia';
|
||||||
|
import { IStore } from './types/types';
|
||||||
|
|
||||||
|
export const useStore = defineStore('store', {
|
||||||
|
state: () =>
|
||||||
|
({
|
||||||
|
dataState: 'LOADING',
|
||||||
|
unsavedChanges: false,
|
||||||
|
stationList: [],
|
||||||
|
backupList: '',
|
||||||
|
stationsToRemove: [],
|
||||||
|
searchedSceneryName: '',
|
||||||
|
changeList: {},
|
||||||
|
changeBackupList: {},
|
||||||
|
newStationsCount: 0,
|
||||||
|
routesModalVisible: true,
|
||||||
|
currentStation: null,
|
||||||
|
selectedStationName: '',
|
||||||
|
token: null,
|
||||||
|
user: null,
|
||||||
|
isAuthorized: false,
|
||||||
|
notifyDiscord: true,
|
||||||
|
alertMessage: '',
|
||||||
|
confirmMessage: '',
|
||||||
|
} as IStore),
|
||||||
|
});
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
export type Availability = 'default' | 'unavailable' | 'nonPublic' | 'abandoned' | 'nonDefault';
|
||||||
|
|
||||||
|
export interface SceneryRowItem {
|
||||||
|
name: string;
|
||||||
|
url: string;
|
||||||
|
lines: string;
|
||||||
|
project: string | null;
|
||||||
|
reqLevel: number;
|
||||||
|
signalType: string;
|
||||||
|
controlType: string;
|
||||||
|
SUP: boolean;
|
||||||
|
routes: string;
|
||||||
|
checkpoints: string;
|
||||||
|
authors: string;
|
||||||
|
availability: Availability;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface IStore {
|
||||||
|
dataState: string;
|
||||||
|
unsavedChanges: boolean;
|
||||||
|
stationList: SceneryRowItem[];
|
||||||
|
backupList: string;
|
||||||
|
stationsToRemove: string[];
|
||||||
|
searchedSceneryName: string;
|
||||||
|
changeList: { [key: string]: any };
|
||||||
|
changeBackupList: { [key: string]: any };
|
||||||
|
newStationsCount: number;
|
||||||
|
routesModalVisible: boolean;
|
||||||
|
currentStation: SceneryRowItem | null;
|
||||||
|
selectedStationName: string;
|
||||||
|
token: string | null;
|
||||||
|
user: { name: string; id: string } | null;
|
||||||
|
isAuthorized: boolean;
|
||||||
|
notifyDiscord: boolean;
|
||||||
|
alertMessage: string;
|
||||||
|
confirmMessage: string;
|
||||||
|
}
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
<template>
|
||||||
|
<div class="login">
|
||||||
|
<div class="login-header">
|
||||||
|
<img src="/icon-logo.svg" alt="logo" />
|
||||||
|
<h1>Stacjownik Station Manager</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form @submit="signIn">
|
||||||
|
<label for="name">Nick</label>
|
||||||
|
<br />
|
||||||
|
<input type="text" id="name" v-model="name" />
|
||||||
|
<br />
|
||||||
|
<label for="password">Hasło</label>
|
||||||
|
<br />
|
||||||
|
<input type="password" id="password" v-model="password" />
|
||||||
|
<br />
|
||||||
|
<button>Zaloguj</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import axios from 'axios';
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import dataMixin from '../mixins/dataMixin';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
|
||||||
|
interface LoginResponse {
|
||||||
|
token: string;
|
||||||
|
user: {
|
||||||
|
name: string;
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
mixins: [dataMixin],
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
return {
|
||||||
|
name: '',
|
||||||
|
password: '',
|
||||||
|
store: useStore(),
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
async signIn(e: Event) {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
console.log(import.meta.env.VITE_API_URL);
|
||||||
|
|
||||||
|
try {
|
||||||
|
const data: LoginResponse = (
|
||||||
|
await axios.post(
|
||||||
|
`${this.API_URL}/auth/login`,
|
||||||
|
{ username: this.name, password: this.password },
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
).data;
|
||||||
|
|
||||||
|
this.store.isAuthorized = true;
|
||||||
|
this.store.token = data.token;
|
||||||
|
this.store.user = data.user;
|
||||||
|
|
||||||
|
window.localStorage.setItem('auth-token', this.store.token);
|
||||||
|
window.localStorage.setItem('user', JSON.stringify(this.store.user));
|
||||||
|
|
||||||
|
this.loadData();
|
||||||
|
this.$router.push('/');
|
||||||
|
} catch (e: any) {
|
||||||
|
const response = e.response;
|
||||||
|
const status: number = response.status;
|
||||||
|
|
||||||
|
if (status == 401) {
|
||||||
|
this.store.alertMessage = 'Nieprawidłowe dane!';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.store.alertMessage = 'Wystąpił błąd podczas łączenia z serwerem!';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.login {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
|
||||||
|
flex-direction: column;
|
||||||
|
height: 100vh;
|
||||||
|
|
||||||
|
&-header {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
input {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
padding: 0.25em 0.3em;
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
margin: 1rem 0;
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,253 @@
|
|||||||
|
<template>
|
||||||
|
<div class="manager">
|
||||||
|
<RoutesModal v-if="store.currentStation" />
|
||||||
|
|
||||||
|
<hr color="white" />
|
||||||
|
<TableActions />
|
||||||
|
<hr color="white" />
|
||||||
|
|
||||||
|
<div class="table_container">
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<th v-for="header in headerNameList">{{ header }}</th>
|
||||||
|
<th>Dostępność</th>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="(station, row) in sortedStationList" tabindex="0">
|
||||||
|
<td v-for="(value, propName) in headerNameList" @click="changeProperty(station, row, propName as string)">
|
||||||
|
<span v-if="propName === 'url'" :style="station.url ? 'color: gold' : 'color: gray;'">URL</span>
|
||||||
|
<span v-else-if="propName === 'checkpoints'">{{ station[propName] ? 'POKAŻ' : 'DODAJ' }}</span>
|
||||||
|
<span v-else-if="propName === 'routes'" v-html="getRouteNames(station)"></span>
|
||||||
|
<span v-else-if="typeof (station as any)[propName] === 'boolean' && propName !== 'supportersOnly'">
|
||||||
|
{{ (station as any)[propName] ? '✅' : '❌' }}
|
||||||
|
</span>
|
||||||
|
<span v-else>{{ (station as any)[propName] }}</span>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>
|
||||||
|
<select
|
||||||
|
name="availability"
|
||||||
|
:id="`select-${row}`"
|
||||||
|
v-model="sortedStationList[row]['availability']"
|
||||||
|
@input="(e) => changeAvailability(station.name, sortedStationList[row]['availability'], e)"
|
||||||
|
>
|
||||||
|
<option value="default">dostępna (w paczce)</option>
|
||||||
|
<option value="nonDefault">dostępna (poza paczką)</option>
|
||||||
|
<option value="unavailable">niedostępna</option>
|
||||||
|
<option value="nonPublic">niepubliczna</option>
|
||||||
|
<option value="abandoned">wycofana</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
import changeMixin from '../mixins/changeMixin';
|
||||||
|
import dataMixin from '../mixins/dataMixin';
|
||||||
|
import { useStore } from '../store';
|
||||||
|
import { SceneryRowItem, Availability } from '../types/types';
|
||||||
|
import RoutesModal from '../components/RoutesModal.vue';
|
||||||
|
import TableActions from '../components/TableActions.vue';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
components: { RoutesModal, TableActions },
|
||||||
|
mixins: [dataMixin, changeMixin],
|
||||||
|
|
||||||
|
data: () => ({
|
||||||
|
headerNameList: {
|
||||||
|
name: 'Nazwa',
|
||||||
|
url: 'URL',
|
||||||
|
lines: 'Linie',
|
||||||
|
project: 'Projekt',
|
||||||
|
reqLevel: 'Wym. poziom',
|
||||||
|
signalType: 'Sygnalizacja',
|
||||||
|
controlType: 'Sterowanie',
|
||||||
|
SUP: 'SUP',
|
||||||
|
authors: 'Autorzy',
|
||||||
|
routes: 'Szlaki',
|
||||||
|
checkpoints: 'Posterunki',
|
||||||
|
} as {
|
||||||
|
[key: string]: string;
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
const store = useStore();
|
||||||
|
return {
|
||||||
|
store,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
mounted() {
|
||||||
|
this.loadData();
|
||||||
|
},
|
||||||
|
|
||||||
|
computed: {
|
||||||
|
sortedStationList() {
|
||||||
|
const sortedList = this.store.stationList.sort((a, b) => (a.name > b.name ? 1 : -1));
|
||||||
|
if (!this.store.searchedSceneryName || this.store.searchedSceneryName == '') return sortedList;
|
||||||
|
|
||||||
|
return sortedList.filter((station) =>
|
||||||
|
station.name.toLowerCase().startsWith(this.store.searchedSceneryName.toLowerCase())
|
||||||
|
);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
addNewStation() {
|
||||||
|
this.store.newStationsCount++;
|
||||||
|
const newSt: SceneryRowItem = {
|
||||||
|
name: `${this.store.newStationsCount}_Sceneria`,
|
||||||
|
url: '',
|
||||||
|
lines: '',
|
||||||
|
project: null,
|
||||||
|
reqLevel: 0,
|
||||||
|
signalType: '',
|
||||||
|
controlType: '',
|
||||||
|
SUP: false,
|
||||||
|
routes: '',
|
||||||
|
checkpoints: '',
|
||||||
|
authors: '',
|
||||||
|
availability: 'default',
|
||||||
|
};
|
||||||
|
this.store.stationList.unshift(newSt);
|
||||||
|
},
|
||||||
|
|
||||||
|
getRouteNames(station: SceneryRowItem) {
|
||||||
|
if (!station.routes) return '';
|
||||||
|
return station.routes
|
||||||
|
.split(';')
|
||||||
|
.map((route) => {
|
||||||
|
// !Oc_2EPB
|
||||||
|
const props1 = route.split('_')[0];
|
||||||
|
const props2 = route.split('_')[1];
|
||||||
|
const isInternal = props1.startsWith('!');
|
||||||
|
const name = isInternal ? props1.replace('!', '') : props1;
|
||||||
|
return `${isInternal ? '<u>' + name + '</u>' : name} <span style='color: #aaa'>(${props2[0]}/${props2[1]}/${
|
||||||
|
props2[2]
|
||||||
|
}${props2[3] ? '/B' : ''})</span>`;
|
||||||
|
})
|
||||||
|
.join(', ');
|
||||||
|
},
|
||||||
|
|
||||||
|
changeProperty(station: SceneryRowItem, row: number, propertyName: string) {
|
||||||
|
this.store.selectedStationName = station.name;
|
||||||
|
if (propertyName == 'name') return;
|
||||||
|
if (propertyName == 'checkpoints') {
|
||||||
|
this.changeCheckpoints(row);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (propertyName == 'routes') {
|
||||||
|
this.showRoutesModal(station);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const stationListRow = this.store.stationList.findIndex(
|
||||||
|
(station) => station.name == this.sortedStationList[row].name
|
||||||
|
);
|
||||||
|
if (stationListRow == -1) return;
|
||||||
|
const oldValue = (this.store.stationList[stationListRow] as any)[propertyName];
|
||||||
|
if (typeof oldValue === 'boolean') {
|
||||||
|
(this.store.stationList[stationListRow] as any)[propertyName] = !oldValue;
|
||||||
|
// this.$set(this.stationList[stationListRow], propertyName, !oldValue);
|
||||||
|
this.addChange(station.name, propertyName, oldValue, !oldValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let newValue = prompt(`Zmień wartość dla rubryki ${this.headerNameList[propertyName]}`, oldValue);
|
||||||
|
if (newValue == null) return;
|
||||||
|
(this.store.stationList[stationListRow] as any)[propertyName] =
|
||||||
|
typeof oldValue === 'number' ? parseInt(newValue) : newValue;
|
||||||
|
// this.$set(this.stationList[stationListRow], propertyName, parseInt(newValue));
|
||||||
|
this.addChange(
|
||||||
|
station.name,
|
||||||
|
propertyName,
|
||||||
|
oldValue,
|
||||||
|
typeof oldValue === 'number' ? parseInt(newValue) : newValue
|
||||||
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
changeCheckpoints(row: number) {
|
||||||
|
const stationListRow = this.store.stationList.findIndex(
|
||||||
|
(station) => station.name == this.sortedStationList[row].name
|
||||||
|
);
|
||||||
|
if (stationListRow == -1) return;
|
||||||
|
const oldCheckpoints = this.store.stationList[stationListRow].checkpoints;
|
||||||
|
const newCheckpoints = prompt('Wpisz posterunki (oddzielone średnikiem):', oldCheckpoints);
|
||||||
|
if (newCheckpoints === null) return;
|
||||||
|
this.store.stationList[stationListRow]['checkpoints'] = newCheckpoints;
|
||||||
|
this.addChange(this.sortedStationList[row].name, 'checkpoints', oldCheckpoints, newCheckpoints);
|
||||||
|
},
|
||||||
|
|
||||||
|
changeAvailability(stationName: string, availability: Availability, e: Event) {
|
||||||
|
const selectedAvailability: Availability = (e.target as HTMLSelectElement).value as Availability;
|
||||||
|
this.addChange(stationName, 'availability', availability, selectedAvailability);
|
||||||
|
},
|
||||||
|
|
||||||
|
showRoutesModal(station: SceneryRowItem) {
|
||||||
|
this.store.currentStation = station;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.table_container {
|
||||||
|
overflow: auto;
|
||||||
|
height: 100vh;
|
||||||
|
margin: 0.5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
text-align: center;
|
||||||
|
color: white;
|
||||||
|
position: relative;
|
||||||
|
border-collapse: collapse;
|
||||||
|
|
||||||
|
width: 100%;
|
||||||
|
max-width: 2000px;
|
||||||
|
min-width: 1450px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table thead {
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table th {
|
||||||
|
padding: 0.4rem 0.45rem;
|
||||||
|
background-color: #151b24;
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr {
|
||||||
|
background-color: #2c394b;
|
||||||
|
transition: background-color 100ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr.current {
|
||||||
|
outline: 1px solid white;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr:nth-child(even) {
|
||||||
|
background-color: #334756;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr:hover {
|
||||||
|
background-color: #1a293b;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr td {
|
||||||
|
padding: 0.3rem 0.5rem;
|
||||||
|
border: 1px solid #2c2c2c;
|
||||||
|
overflow: auto;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Vendored
+7
@@ -0,0 +1,7 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
|
|
||||||
|
declare module '*.vue' {
|
||||||
|
import type { DefineComponent } from 'vue'
|
||||||
|
const component: DefineComponent<{}, {}, any>
|
||||||
|
export default component
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ESNext",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "Node",
|
||||||
|
"strict": true,
|
||||||
|
"jsx": "preserve",
|
||||||
|
"sourceMap": true,
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"lib": ["ESNext", "DOM"],
|
||||||
|
"skipLibCheck": true
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
|
||||||
|
"references": [{ "path": "./tsconfig.node.json" }]
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"composite": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "Node",
|
||||||
|
"allowSyntheticDefaultImports": true
|
||||||
|
},
|
||||||
|
"include": ["vite.config.ts"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import vue from '@vitejs/plugin-vue'
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [vue()]
|
||||||
|
})
|
||||||
@@ -0,0 +1,628 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@babel/parser@^7.16.4":
|
||||||
|
version "7.18.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9"
|
||||||
|
integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==
|
||||||
|
|
||||||
|
"@esbuild/linux-loong64@0.14.54":
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028"
|
||||||
|
integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==
|
||||||
|
|
||||||
|
"@vitejs/plugin-vue@^3.0.3":
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-3.0.3.tgz#7e3e401ccb30b4380d2279d9849281413f1791ef"
|
||||||
|
integrity sha512-U4zNBlz9mg+TA+i+5QPc3N5lQvdUXENZLO2h0Wdzp56gI1MWhqJOv+6R+d4kOzoaSSq6TnGPBdZAXKOe4lXy6g==
|
||||||
|
|
||||||
|
"@volar/code-gen@0.39.5":
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/code-gen/-/code-gen-0.39.5.tgz#971aad44cf9cfaf047c39dbc495ac061c66989da"
|
||||||
|
integrity sha512-vQr5VoCH8T2NHmqLc/AA1/4F8l41WB+24+I+VjxBaev/Hmwjye9K0GlmMHAOl84WB3hWGOqpHaPX6JkqzRNjJg==
|
||||||
|
dependencies:
|
||||||
|
"@volar/source-map" "0.39.5"
|
||||||
|
|
||||||
|
"@volar/source-map@0.39.5":
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/source-map/-/source-map-0.39.5.tgz#0ee7308f718bc0fb280c22f3252968d04750fac6"
|
||||||
|
integrity sha512-IVOX+v++Sr5Kok4/cLbDJp2vf1ia1rChpV7adgcnMle6uORBuGFEur234UzamK0iHRCcfFFRz7z+hSPf2CO23Q==
|
||||||
|
|
||||||
|
"@volar/typescript-faster@0.39.5":
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/typescript-faster/-/typescript-faster-0.39.5.tgz#433b1d8caa981f6e5ff1ccc6fde4a1bdb9b25db8"
|
||||||
|
integrity sha512-IzLqlxefmKkjNKXC/8aFiqPcTqnj6RG31D2f9cIWxmW9pvUYJxLED+y9phnOxNxq0OmeRtQ3Pfmvu85tUBoZsQ==
|
||||||
|
dependencies:
|
||||||
|
semver "^7.3.7"
|
||||||
|
|
||||||
|
"@volar/vue-code-gen@0.39.5":
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/vue-code-gen/-/vue-code-gen-0.39.5.tgz#b16e52de668bd465e3b74a5785dda712979a1bcc"
|
||||||
|
integrity sha512-y+QUV9MuuasiIuRoGKQl+gMhDaAX6XNhckAyJCvD1FZ8f2eJuPY2VtoFxmu/Z2bGWBdtUW/g98jaeKJ+j3wwOw==
|
||||||
|
dependencies:
|
||||||
|
"@volar/code-gen" "0.39.5"
|
||||||
|
"@volar/source-map" "0.39.5"
|
||||||
|
"@vue/compiler-core" "^3.2.37"
|
||||||
|
"@vue/compiler-dom" "^3.2.37"
|
||||||
|
"@vue/shared" "^3.2.37"
|
||||||
|
|
||||||
|
"@volar/vue-language-core@0.39.5":
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/vue-language-core/-/vue-language-core-0.39.5.tgz#9f4d83c452f6d5a1a67b3cf2e95e0b456e86549c"
|
||||||
|
integrity sha512-m+e1tYuL/WRPhSeC7hZ0NuSwHsfnnGJVxCBHLaP7jR0f6xcC0DAegP3QF+gfu9ZJFPGznpZYFKadngMjuhQS9Q==
|
||||||
|
dependencies:
|
||||||
|
"@volar/code-gen" "0.39.5"
|
||||||
|
"@volar/source-map" "0.39.5"
|
||||||
|
"@volar/vue-code-gen" "0.39.5"
|
||||||
|
"@vue/compiler-sfc" "^3.2.37"
|
||||||
|
"@vue/reactivity" "^3.2.37"
|
||||||
|
|
||||||
|
"@volar/vue-typescript@0.39.5":
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@volar/vue-typescript/-/vue-typescript-0.39.5.tgz#3c57befd4c996fef8df70d171ba531871f215535"
|
||||||
|
integrity sha512-ckhWD1xOi0OMr702XVkv/Npsb9FKAp5gvhxyLv0QqWekPdSo04t4KrZfwosJLGERIEcyr50SuB7HqBp8ndQmzA==
|
||||||
|
dependencies:
|
||||||
|
"@volar/code-gen" "0.39.5"
|
||||||
|
"@volar/typescript-faster" "0.39.5"
|
||||||
|
"@volar/vue-language-core" "0.39.5"
|
||||||
|
|
||||||
|
"@vue/compiler-core@3.2.37", "@vue/compiler-core@^3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.37.tgz#b3c42e04c0e0f2c496ff1784e543fbefe91e215a"
|
||||||
|
integrity sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.16.4"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@vue/compiler-dom@3.2.37", "@vue/compiler-dom@^3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz#10d2427a789e7c707c872da9d678c82a0c6582b5"
|
||||||
|
integrity sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-core" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
|
||||||
|
"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4"
|
||||||
|
integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.16.4"
|
||||||
|
"@vue/compiler-core" "3.2.37"
|
||||||
|
"@vue/compiler-dom" "3.2.37"
|
||||||
|
"@vue/compiler-ssr" "3.2.37"
|
||||||
|
"@vue/reactivity-transform" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
magic-string "^0.25.7"
|
||||||
|
postcss "^8.1.10"
|
||||||
|
source-map "^0.6.1"
|
||||||
|
|
||||||
|
"@vue/compiler-ssr@3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz#4899d19f3a5fafd61524a9d1aee8eb0505313cff"
|
||||||
|
integrity sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-dom" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
|
||||||
|
"@vue/devtools-api@^6.1.4", "@vue/devtools-api@^6.2.1":
|
||||||
|
version "6.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
|
||||||
|
integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
|
||||||
|
|
||||||
|
"@vue/reactivity-transform@3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz#0caa47c4344df4ae59f5a05dde2a8758829f8eca"
|
||||||
|
integrity sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/parser" "^7.16.4"
|
||||||
|
"@vue/compiler-core" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
estree-walker "^2.0.2"
|
||||||
|
magic-string "^0.25.7"
|
||||||
|
|
||||||
|
"@vue/reactivity@3.2.37", "@vue/reactivity@^3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.37.tgz#5bc3847ac58828e2b78526e08219e0a1089f8848"
|
||||||
|
integrity sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==
|
||||||
|
dependencies:
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
|
||||||
|
"@vue/runtime-core@3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz#7ba7c54bb56e5d70edfc2f05766e1ca8519966e3"
|
||||||
|
integrity sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/reactivity" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
|
||||||
|
"@vue/runtime-dom@3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz#002bdc8228fa63949317756fb1e92cdd3f9f4bbd"
|
||||||
|
integrity sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==
|
||||||
|
dependencies:
|
||||||
|
"@vue/runtime-core" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
csstype "^2.6.8"
|
||||||
|
|
||||||
|
"@vue/server-renderer@3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz#840a29c8dcc29bddd9b5f5ffa22b95c0e72afdfc"
|
||||||
|
integrity sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-ssr" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
|
||||||
|
"@vue/shared@3.2.37", "@vue/shared@^3.2.37":
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.37.tgz#8e6adc3f2759af52f0e85863dfb0b711ecc5c702"
|
||||||
|
integrity sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==
|
||||||
|
|
||||||
|
anymatch@~3.1.2:
|
||||||
|
version "3.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
|
||||||
|
integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
|
||||||
|
dependencies:
|
||||||
|
normalize-path "^3.0.0"
|
||||||
|
picomatch "^2.0.4"
|
||||||
|
|
||||||
|
asynckit@^0.4.0:
|
||||||
|
version "0.4.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
|
axios@^0.27.2:
|
||||||
|
version "0.27.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972"
|
||||||
|
integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==
|
||||||
|
dependencies:
|
||||||
|
follow-redirects "^1.14.9"
|
||||||
|
form-data "^4.0.0"
|
||||||
|
|
||||||
|
binary-extensions@^2.0.0:
|
||||||
|
version "2.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
|
||||||
|
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
|
||||||
|
|
||||||
|
braces@~3.0.2:
|
||||||
|
version "3.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
|
||||||
|
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
|
||||||
|
dependencies:
|
||||||
|
fill-range "^7.0.1"
|
||||||
|
|
||||||
|
"chokidar@>=3.0.0 <4.0.0":
|
||||||
|
version "3.5.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
|
||||||
|
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
|
||||||
|
dependencies:
|
||||||
|
anymatch "~3.1.2"
|
||||||
|
braces "~3.0.2"
|
||||||
|
glob-parent "~5.1.2"
|
||||||
|
is-binary-path "~2.1.0"
|
||||||
|
is-glob "~4.0.1"
|
||||||
|
normalize-path "~3.0.0"
|
||||||
|
readdirp "~3.6.0"
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
combined-stream@^1.0.8:
|
||||||
|
version "1.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||||
|
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||||
|
dependencies:
|
||||||
|
delayed-stream "~1.0.0"
|
||||||
|
|
||||||
|
csstype@^2.6.8:
|
||||||
|
version "2.6.20"
|
||||||
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda"
|
||||||
|
integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==
|
||||||
|
|
||||||
|
delayed-stream@~1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||||
|
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
|
||||||
|
|
||||||
|
esbuild-android-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz#505f41832884313bbaffb27704b8bcaa2d8616be"
|
||||||
|
integrity sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==
|
||||||
|
|
||||||
|
esbuild-android-arm64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz#8ce69d7caba49646e009968fe5754a21a9871771"
|
||||||
|
integrity sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==
|
||||||
|
|
||||||
|
esbuild-darwin-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz#24ba67b9a8cb890a3c08d9018f887cc221cdda25"
|
||||||
|
integrity sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==
|
||||||
|
|
||||||
|
esbuild-darwin-arm64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz#3f7cdb78888ee05e488d250a2bdaab1fa671bf73"
|
||||||
|
integrity sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==
|
||||||
|
|
||||||
|
esbuild-freebsd-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz#09250f997a56ed4650f3e1979c905ffc40bbe94d"
|
||||||
|
integrity sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==
|
||||||
|
|
||||||
|
esbuild-freebsd-arm64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz#bafb46ed04fc5f97cbdb016d86947a79579f8e48"
|
||||||
|
integrity sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==
|
||||||
|
|
||||||
|
esbuild-linux-32@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz#e2a8c4a8efdc355405325033fcebeb941f781fe5"
|
||||||
|
integrity sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==
|
||||||
|
|
||||||
|
esbuild-linux-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz#de5fdba1c95666cf72369f52b40b03be71226652"
|
||||||
|
integrity sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==
|
||||||
|
|
||||||
|
esbuild-linux-arm64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz#dae4cd42ae9787468b6a5c158da4c84e83b0ce8b"
|
||||||
|
integrity sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==
|
||||||
|
|
||||||
|
esbuild-linux-arm@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz#a2c1dff6d0f21dbe8fc6998a122675533ddfcd59"
|
||||||
|
integrity sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==
|
||||||
|
|
||||||
|
esbuild-linux-mips64le@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz#d9918e9e4cb972f8d6dae8e8655bf9ee131eda34"
|
||||||
|
integrity sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==
|
||||||
|
|
||||||
|
esbuild-linux-ppc64le@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz#3f9a0f6d41073fb1a640680845c7de52995f137e"
|
||||||
|
integrity sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==
|
||||||
|
|
||||||
|
esbuild-linux-riscv64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz#618853c028178a61837bc799d2013d4695e451c8"
|
||||||
|
integrity sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==
|
||||||
|
|
||||||
|
esbuild-linux-s390x@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz#d1885c4c5a76bbb5a0fe182e2c8c60eb9e29f2a6"
|
||||||
|
integrity sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==
|
||||||
|
|
||||||
|
esbuild-netbsd-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz#69ae917a2ff241b7df1dbf22baf04bd330349e81"
|
||||||
|
integrity sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==
|
||||||
|
|
||||||
|
esbuild-openbsd-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz#db4c8495287a350a6790de22edea247a57c5d47b"
|
||||||
|
integrity sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==
|
||||||
|
|
||||||
|
esbuild-sunos-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz#54287ee3da73d3844b721c21bc80c1dc7e1bf7da"
|
||||||
|
integrity sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==
|
||||||
|
|
||||||
|
esbuild-windows-32@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz#f8aaf9a5667630b40f0fb3aa37bf01bbd340ce31"
|
||||||
|
integrity sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==
|
||||||
|
|
||||||
|
esbuild-windows-64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz#bf54b51bd3e9b0f1886ffdb224a4176031ea0af4"
|
||||||
|
integrity sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==
|
||||||
|
|
||||||
|
esbuild-windows-arm64@0.14.54:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz#937d15675a15e4b0e4fafdbaa3a01a776a2be982"
|
||||||
|
integrity sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==
|
||||||
|
|
||||||
|
esbuild@^0.14.47:
|
||||||
|
version "0.14.54"
|
||||||
|
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.54.tgz#8b44dcf2b0f1a66fc22459943dccf477535e9aa2"
|
||||||
|
integrity sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==
|
||||||
|
optionalDependencies:
|
||||||
|
"@esbuild/linux-loong64" "0.14.54"
|
||||||
|
esbuild-android-64 "0.14.54"
|
||||||
|
esbuild-android-arm64 "0.14.54"
|
||||||
|
esbuild-darwin-64 "0.14.54"
|
||||||
|
esbuild-darwin-arm64 "0.14.54"
|
||||||
|
esbuild-freebsd-64 "0.14.54"
|
||||||
|
esbuild-freebsd-arm64 "0.14.54"
|
||||||
|
esbuild-linux-32 "0.14.54"
|
||||||
|
esbuild-linux-64 "0.14.54"
|
||||||
|
esbuild-linux-arm "0.14.54"
|
||||||
|
esbuild-linux-arm64 "0.14.54"
|
||||||
|
esbuild-linux-mips64le "0.14.54"
|
||||||
|
esbuild-linux-ppc64le "0.14.54"
|
||||||
|
esbuild-linux-riscv64 "0.14.54"
|
||||||
|
esbuild-linux-s390x "0.14.54"
|
||||||
|
esbuild-netbsd-64 "0.14.54"
|
||||||
|
esbuild-openbsd-64 "0.14.54"
|
||||||
|
esbuild-sunos-64 "0.14.54"
|
||||||
|
esbuild-windows-32 "0.14.54"
|
||||||
|
esbuild-windows-64 "0.14.54"
|
||||||
|
esbuild-windows-arm64 "0.14.54"
|
||||||
|
|
||||||
|
estree-walker@^2.0.2:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||||
|
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||||
|
|
||||||
|
fill-range@^7.0.1:
|
||||||
|
version "7.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||||
|
integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
|
||||||
|
dependencies:
|
||||||
|
to-regex-range "^5.0.1"
|
||||||
|
|
||||||
|
follow-redirects@^1.14.9:
|
||||||
|
version "1.15.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5"
|
||||||
|
integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==
|
||||||
|
|
||||||
|
form-data@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||||
|
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||||
|
dependencies:
|
||||||
|
asynckit "^0.4.0"
|
||||||
|
combined-stream "^1.0.8"
|
||||||
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
|
fsevents@~2.3.2:
|
||||||
|
version "2.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
|
||||||
|
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
|
||||||
|
|
||||||
|
function-bind@^1.1.1:
|
||||||
|
version "1.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||||
|
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||||
|
|
||||||
|
glob-parent@~5.1.2:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||||
|
integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
|
||||||
|
dependencies:
|
||||||
|
is-glob "^4.0.1"
|
||||||
|
|
||||||
|
has@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
|
||||||
|
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
|
||||||
|
dependencies:
|
||||||
|
function-bind "^1.1.1"
|
||||||
|
|
||||||
|
immutable@^4.0.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.1.0.tgz#f795787f0db780183307b9eb2091fcac1f6fafef"
|
||||||
|
integrity sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==
|
||||||
|
|
||||||
|
is-binary-path@~2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||||
|
integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
|
||||||
|
dependencies:
|
||||||
|
binary-extensions "^2.0.0"
|
||||||
|
|
||||||
|
is-core-module@^2.9.0:
|
||||||
|
version "2.10.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
|
||||||
|
integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
|
||||||
|
dependencies:
|
||||||
|
has "^1.0.3"
|
||||||
|
|
||||||
|
is-extglob@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||||
|
integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
|
||||||
|
|
||||||
|
is-glob@^4.0.1, is-glob@~4.0.1:
|
||||||
|
version "4.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||||
|
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||||
|
dependencies:
|
||||||
|
is-extglob "^2.1.1"
|
||||||
|
|
||||||
|
is-number@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||||
|
integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
|
||||||
|
|
||||||
|
lru-cache@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||||
|
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
|
||||||
|
dependencies:
|
||||||
|
yallist "^4.0.0"
|
||||||
|
|
||||||
|
magic-string@^0.25.7:
|
||||||
|
version "0.25.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
|
||||||
|
integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
|
||||||
|
dependencies:
|
||||||
|
sourcemap-codec "^1.4.8"
|
||||||
|
|
||||||
|
mime-db@1.52.0:
|
||||||
|
version "1.52.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||||
|
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||||
|
|
||||||
|
mime-types@^2.1.12:
|
||||||
|
version "2.1.35"
|
||||||
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||||
|
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||||
|
dependencies:
|
||||||
|
mime-db "1.52.0"
|
||||||
|
|
||||||
|
nanoid@^3.3.4:
|
||||||
|
version "3.3.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
|
||||||
|
integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
|
||||||
|
|
||||||
|
normalize-path@^3.0.0, normalize-path@~3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
|
||||||
|
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||||
|
|
||||||
|
path-parse@^1.0.7:
|
||||||
|
version "1.0.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||||
|
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||||
|
|
||||||
|
picocolors@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
|
||||||
|
integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
|
||||||
|
|
||||||
|
picomatch@^2.0.4, picomatch@^2.2.1:
|
||||||
|
version "2.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||||
|
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||||
|
|
||||||
|
pinia@^2.0.18:
|
||||||
|
version "2.0.18"
|
||||||
|
resolved "https://registry.yarnpkg.com/pinia/-/pinia-2.0.18.tgz#b29ed34bcb4c032b7da7c24c10db18b88d9254d8"
|
||||||
|
integrity sha512-I5MW05UVX6a5Djka136oH3VzYFiZUgeOApBwFjMx6pL91eHtGVlE3adjNUKLgtwGnrxiBRuJ8+4R3LKJKwnyZg==
|
||||||
|
dependencies:
|
||||||
|
"@vue/devtools-api" "^6.2.1"
|
||||||
|
vue-demi "*"
|
||||||
|
|
||||||
|
postcss@^8.1.10, postcss@^8.4.16:
|
||||||
|
version "8.4.16"
|
||||||
|
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c"
|
||||||
|
integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
|
||||||
|
dependencies:
|
||||||
|
nanoid "^3.3.4"
|
||||||
|
picocolors "^1.0.0"
|
||||||
|
source-map-js "^1.0.2"
|
||||||
|
|
||||||
|
readdirp@~3.6.0:
|
||||||
|
version "3.6.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
|
||||||
|
integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
|
||||||
|
dependencies:
|
||||||
|
picomatch "^2.2.1"
|
||||||
|
|
||||||
|
resolve@^1.22.1:
|
||||||
|
version "1.22.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
|
||||||
|
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
|
||||||
|
dependencies:
|
||||||
|
is-core-module "^2.9.0"
|
||||||
|
path-parse "^1.0.7"
|
||||||
|
supports-preserve-symlinks-flag "^1.0.0"
|
||||||
|
|
||||||
|
"rollup@>=2.75.6 <2.77.0 || ~2.77.0":
|
||||||
|
version "2.77.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.3.tgz#8f00418d3a2740036e15deb653bed1a90ee0cc12"
|
||||||
|
integrity sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
sass@^1.54.4:
|
||||||
|
version "1.54.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/sass/-/sass-1.54.4.tgz#803ff2fef5525f1dd01670c3915b4b68b6cba72d"
|
||||||
|
integrity sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==
|
||||||
|
dependencies:
|
||||||
|
chokidar ">=3.0.0 <4.0.0"
|
||||||
|
immutable "^4.0.0"
|
||||||
|
source-map-js ">=0.6.2 <2.0.0"
|
||||||
|
|
||||||
|
semver@^7.3.7:
|
||||||
|
version "7.3.7"
|
||||||
|
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f"
|
||||||
|
integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==
|
||||||
|
dependencies:
|
||||||
|
lru-cache "^6.0.0"
|
||||||
|
|
||||||
|
"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
|
||||||
|
integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
|
||||||
|
|
||||||
|
source-map@^0.6.1:
|
||||||
|
version "0.6.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
|
||||||
|
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
|
||||||
|
|
||||||
|
sourcemap-codec@^1.4.8:
|
||||||
|
version "1.4.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
|
||||||
|
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
|
||||||
|
|
||||||
|
supports-preserve-symlinks-flag@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||||
|
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||||
|
|
||||||
|
to-regex-range@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
|
||||||
|
integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
|
||||||
|
dependencies:
|
||||||
|
is-number "^7.0.0"
|
||||||
|
|
||||||
|
typescript@^4.6.4:
|
||||||
|
version "4.7.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235"
|
||||||
|
integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==
|
||||||
|
|
||||||
|
vite@^3.0.7:
|
||||||
|
version "3.0.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.8.tgz#aa095ad8e3e5da46d9ec7e878f262678965d6531"
|
||||||
|
integrity sha512-AOZ4eN7mrkJiOLuw8IA7piS4IdOQyQCA81GxGsAQvAZzMRi9ZwGB3TOaYsj4uLAWK46T5L4AfQ6InNGlxX30IQ==
|
||||||
|
dependencies:
|
||||||
|
esbuild "^0.14.47"
|
||||||
|
postcss "^8.4.16"
|
||||||
|
resolve "^1.22.1"
|
||||||
|
rollup ">=2.75.6 <2.77.0 || ~2.77.0"
|
||||||
|
optionalDependencies:
|
||||||
|
fsevents "~2.3.2"
|
||||||
|
|
||||||
|
vue-demi@*:
|
||||||
|
version "0.13.8"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.13.8.tgz#5c568fb3b4d8f848acc658dfccd3d875035b5653"
|
||||||
|
integrity sha512-Vy1zbZhCOdsmvGR6tJhAvO5vhP7eiS8xkbYQSoVa7o6KlIy3W8Rc53ED4qI4qpeRDjv3mLfXSEpYU6Yq4pgXRg==
|
||||||
|
|
||||||
|
vue-router@^4.1.3:
|
||||||
|
version "4.1.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.1.3.tgz#f8dc7931a2253cc5aa9b740f8b98969d08ca283c"
|
||||||
|
integrity sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==
|
||||||
|
dependencies:
|
||||||
|
"@vue/devtools-api" "^6.1.4"
|
||||||
|
|
||||||
|
vue-tsc@^0.39.5:
|
||||||
|
version "0.39.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-0.39.5.tgz#0b75f5c3574b70fb448982702db2aa532a7fad6e"
|
||||||
|
integrity sha512-jhTsrKhZkafpIeN4Cbhr1K53hNfa/oesSrlh7hUaeHyCk55VhZT6oJkwJbtqN4MYkWZIwPrm3/xTwsELuf2ocg==
|
||||||
|
dependencies:
|
||||||
|
"@volar/vue-language-core" "0.39.5"
|
||||||
|
"@volar/vue-typescript" "0.39.5"
|
||||||
|
|
||||||
|
vue@^3.2.37:
|
||||||
|
version "3.2.37"
|
||||||
|
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.37.tgz#da220ccb618d78579d25b06c7c21498ca4e5452e"
|
||||||
|
integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==
|
||||||
|
dependencies:
|
||||||
|
"@vue/compiler-dom" "3.2.37"
|
||||||
|
"@vue/compiler-sfc" "3.2.37"
|
||||||
|
"@vue/runtime-dom" "3.2.37"
|
||||||
|
"@vue/server-renderer" "3.2.37"
|
||||||
|
"@vue/shared" "3.2.37"
|
||||||
|
|
||||||
|
yallist@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
|
||||||
|
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
|
||||||
Reference in New Issue
Block a user