diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..4abd5d8 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,65 @@ +name: Deploy to AWS Elastic Beanstalk + +permissions: + contents: read + pull-requests: write + +on: + pull_request: + types: [opened, reopened, synchronize] + push: + branches: + - "main" + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v2 + with: + node-version: "20" + + - name: Install dependencies + run: npm install + + - name: Build project + run: npm run build + + - name: Install AWS CLI + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install --update + + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 + with: + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ap-northeast-2 + + - name: Generate deployment package + run: | + mkdir -p deploy + cp -r dist deploy/ # dist 디렉토리를 포함 + cp package.json deploy/ + cp server.js deploy/ + cp Procfile deploy/Procfile + cd deploy && zip -r deploy.zip . + + - name: Beanstalk Deploy + uses: einaregilsson/beanstalk-deploy@v22 + with: + aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + application_name: inflow-v6 + environment_name: Inflow-v6-env + version_label: github-action-${{ github.sha }} + region: ap-northeast-2 + deployment_package: deploy/deploy.zip + wait_for_environment_recovery: 180 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8ee54e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*.tsbuildinfo diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..7ac4dbc --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: npm install express && npm start \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 8f425fd..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -# Front-Deploy-Test diff --git a/index.html b/index.html new file mode 100644 index 0000000..ed72939 --- /dev/null +++ b/index.html @@ -0,0 +1,17 @@ + + + + + + + + Inflow + + +
+ + + diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..130b379 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2782 @@ +{ + "name": "veb_proj", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "veb_proj", + "version": "0.0.0", + "dependencies": { + "axios": "^1.7.7", + "express": "^4.21.2", + "fastapi": "^0.0.8", + "html2canvas": "^1.4.1", + "html2pdf.js": "^0.10.2", + "jspdf": "^2.5.2", + "marked": "^15.0.3", + "pdfmake": "^0.2.15", + "pinia": "^2.2.6", + "prismjs": "^1.29.0", + "vue": "^3.5.12", + "vue-password-toggle": "^1.3.3", + "vue-router": "^4.4.5", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz" + }, + "devDependencies": { + "@types/pdfmake": "^0.2.9", + "@types/prismjs": "^1.26.5", + "@vitejs/plugin-vue": "^5.1.4", + "vite": "^5.4.10" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.2.tgz", + "integrity": "sha512-IfB5EiIb+GZk+77TRB86AHroVaqfq8JRFlUbz0WEwsInyCG0epX2tCPOy+UfaWPju30DeVoUAXfzWXmhn753KA==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brotli": "^1.2.0", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.2.tgz", + "integrity": "sha512-ZPohpxxbuKNE0l/5iBJnOAfUaMACwvUIKCvqtWGKIMv1lPYoNjYXRfhi9FeeV9McBkBLxsMFWTVVhHJA8cyzvg==", + "license": "MIT", + "dependencies": { + "base64-js": "1.3.1", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.15.1.tgz", + "integrity": "sha512-4Cq2onHZAhThIfzv3/AFTPALqHzbmV8uNvgRELULWNbsZATgVeqEL4zHOzCyblLfX6tMXVO2BVaPcXboIxGjiw==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.2", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.2.0", + "jpeg-exif": "^1.1.4", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.4.tgz", + "integrity": "sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.4.tgz", + "integrity": "sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.4.tgz", + "integrity": "sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.4.tgz", + "integrity": "sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.24.4.tgz", + "integrity": "sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.24.4.tgz", + "integrity": "sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.4.tgz", + "integrity": "sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.4.tgz", + "integrity": "sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.4.tgz", + "integrity": "sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.4.tgz", + "integrity": "sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.4.tgz", + "integrity": "sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.4.tgz", + "integrity": "sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.4.tgz", + "integrity": "sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.4.tgz", + "integrity": "sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.4.tgz", + "integrity": "sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.4.tgz", + "integrity": "sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.4.tgz", + "integrity": "sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.4.tgz", + "integrity": "sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.1.tgz", + "integrity": "sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/pdfkit": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.13.7.tgz", + "integrity": "sha512-qIV2V2cnunHEVa51ISkoXlTsAnuQpTXhE7is3CWvV5lKSItRDLL7VLg/j0AkvAr3lG5ZBK2IWIl5iTfqf+obuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/pdfmake": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@types/pdfmake/-/pdfmake-0.2.10.tgz", + "integrity": "sha512-6EV2+hiYqXO4/INnGObeXgTvzh2DuwiPkfjqYppHmKSgyVcXFvraLLNKFdvJEbrCoe0HqsKFDHc0I7M50hn4/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/pdfkit": "*" + } + }, + "node_modules/@types/prismjs": { + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/raf": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.3.tgz", + "integrity": "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw==", + "license": "MIT", + "optional": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz", + "integrity": "sha512-N2XSI2n3sQqp5w7Y/AN/L2XDjBIRGqXko+eDp42sydYSBeJuSm5a1sLf8zakmo8u7tA8NmBgoDLA1HeOESjp9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", + "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.12", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", + "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", + "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.12", + "@vue/compiler-dom": "3.5.12", + "@vue/compiler-ssr": "3.5.12", + "@vue/shared": "3.5.12", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.47", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", + "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz", + "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.12" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz", + "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz", + "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.12", + "@vue/runtime-core": "3.5.12", + "@vue/shared": "3.5.12", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz", + "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.12", + "@vue/shared": "3.5.12" + }, + "peerDependencies": { + "vue": "3.5.12" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", + "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/axios": { + "version": "1.7.9", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.9.tgz", + "integrity": "sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "license": "(MIT OR Apache-2.0)", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/canvg": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.10.tgz", + "integrity": "sha512-qwR2FRNO9NlzTeKIPIKpnTY6fqwuYSequ8Ru8c0YkYU7U0oW+hLUvWadLvAu1Rl72OMNiFhoLu4f8eUjQ7l/+Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/canvg/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "optional": true + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/core-js": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", + "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "license": "MIT", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==", + "license": "MIT" + }, + "node_modules/dompurify": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.5.7.tgz", + "integrity": "sha512-2q4bEI+coQM8f5ez7kt2xclg1XsecaV9ASJk/54vwlfRRNQfDqJz2pzQ8t0Ix/ToBpXlVjrRIx7pFC/o8itG2Q==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optional": true + }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fastapi": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/fastapi/-/fastapi-0.0.8.tgz", + "integrity": "sha512-I3nKZeqsvHIirIvkZrH+kpRZUE3YMvQ+wumC5KTn2pgOEI8SzC7NW8S4Fv83+ZD/93PRelIJfxybzF1P4tLS/Q==", + "license": "ISC", + "dependencies": { + "bluebird": "^3.4.6", + "body-parser": "^1.15.2", + "commander": "^2.9.0", + "express": "^4.14.0", + "lodash": "^4.15.0", + "morgan": "^1.7.0" + }, + "bin": { + "fastapi": "lib/cli.js" + } + }, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "license": "MIT" + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.5.tgz", + "integrity": "sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "license": "MIT", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/html2pdf.js": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/html2pdf.js/-/html2pdf.js-0.10.2.tgz", + "integrity": "sha512-WyHVeMb18Bp7vYTmBv1GVsThH//K7SRfHdSdhHPkl4JvyQarNQXnailkYn0QUbRRmnN5rdbbmSIGEsPZtzPy2Q==", + "license": "MIT", + "dependencies": { + "es6-promise": "^4.2.5", + "html2canvas": "^1.0.0", + "jspdf": "^2.3.1" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.0.tgz", + "integrity": "sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "gopd": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jpeg-exif": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/jpeg-exif/-/jpeg-exif-1.1.4.tgz", + "integrity": "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ==", + "license": "MIT" + }, + "node_modules/jspdf": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.2.tgz", + "integrity": "sha512-myeX9c+p7znDWPk0eTrujCzNjT+CXdXyk7YmJq5nD5V7uLLKmSXnlQ/Jn/kuo3X09Op70Apm0rQSnFWyGK8uEQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.2", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.8.1" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.5.4", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/marked": { + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.3.tgz", + "integrity": "sha512-Ai0cepvl2NHnTcO9jYDtcOEtVBNVYR31XnEA3BndO7f5As1wzpcOceSUM8FDkNLJNIODcLpDTWay/qQhqbuMvg==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==", + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/pdfmake": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.15.tgz", + "integrity": "sha512-Ryef9mjxo6q8dthhbssAK0zwCsPZ6Pl7kCHnIEXOvQdd79LUGZD6SHGi21YryFXczPjvw6V009uxQwp5iritcA==", + "license": "MIT", + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.2", + "@foliojs-fork/pdfkit": "^0.15.1", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.3.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pdfmake/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/pinia": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz", + "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw==", + "license": "MIT OR SEE LICENSE IN FEEL-FREE.md", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rollup": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.4.tgz", + "integrity": "sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.4", + "@rollup/rollup-android-arm64": "4.24.4", + "@rollup/rollup-darwin-arm64": "4.24.4", + "@rollup/rollup-darwin-x64": "4.24.4", + "@rollup/rollup-freebsd-arm64": "4.24.4", + "@rollup/rollup-freebsd-x64": "4.24.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.4", + "@rollup/rollup-linux-arm-musleabihf": "4.24.4", + "@rollup/rollup-linux-arm64-gnu": "4.24.4", + "@rollup/rollup-linux-arm64-musl": "4.24.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.4", + "@rollup/rollup-linux-riscv64-gnu": "4.24.4", + "@rollup/rollup-linux-s390x-gnu": "4.24.4", + "@rollup/rollup-linux-x64-gnu": "4.24.4", + "@rollup/rollup-linux-x64-musl": "4.24.4", + "@rollup/rollup-win32-arm64-msvc": "4.24.4", + "@rollup/rollup-win32-ia32-msvc": "4.24.4", + "@rollup/rollup-win32-x64-msvc": "4.24.4", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackblur-canvas": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.7.0.tgz", + "integrity": "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "license": "MIT", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "license": "MIT", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "license": "MIT", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz", + "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.12", + "@vue/compiler-sfc": "3.5.12", + "@vue/runtime-dom": "3.5.12", + "@vue/server-renderer": "3.5.12", + "@vue/shared": "3.5.12" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-password-toggle": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/vue-password-toggle/-/vue-password-toggle-1.3.3.tgz", + "integrity": "sha512-nfsiG81tv7c+okcgzm9QvyqkGqblZBqr+0IVkSXB9aOulM1le9T/CyI0RQcTqHMT+p4cREOIrgHFqSVYTbFjTg==", + "license": "MIT", + "dependencies": { + "vue": "^3.3.11" + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/xlsx": { + "version": "0.20.3", + "resolved": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz", + "integrity": "sha512-oLDq3jw7AcLqKWH2AhCpVTZl8mf6X2YReP+Neh0SJUzV/BdZYjth94tG5toiMB1PPrYtxOCfaoUCkvtuH+3AJA==", + "license": "Apache-2.0", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xmldoc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.3.0.tgz", + "integrity": "sha512-y7IRWW6PvEnYQZNZFMRLNJw+p3pezM4nKYPfr15g4OOW9i8VpeydycFuipE2297OvZnh3jSb2pxOt9QpkZUVng==", + "license": "MIT", + "dependencies": { + "sax": "^1.2.4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..799e1d6 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "inflow", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "start": "node server.js", + "preview": "vite preview", + "lint": "eslint . --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "axios": "^1.7.7", + "express": "^4.21.2", + "fastapi": "^0.0.8", + "html2canvas": "^1.4.1", + "html2pdf.js": "^0.10.2", + "jspdf": "^2.5.2", + "marked": "^15.0.3", + "pdfmake": "^0.2.15", + "pinia": "^2.2.6", + "prismjs": "^1.29.0", + "vue": "^3.5.12", + "vue-password-toggle": "^1.3.3", + "vue-router": "^4.4.5", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz" + }, + "devDependencies": { + "@types/pdfmake": "^0.2.9", + "@types/prismjs": "^1.26.5", + "@vitejs/plugin-vue": "^5.1.4", + "vite": "^5.4.10" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..7857c55 Binary files /dev/null and b/public/favicon.ico differ diff --git a/server.js b/server.js new file mode 100644 index 0000000..c1fc40a --- /dev/null +++ b/server.js @@ -0,0 +1,21 @@ +import express from 'express'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { dirname } from 'path'; + +const app = express(); +const port = process.env.PORT || 8080; // Elastic Beanstalk가 사용하는 포트 + +// __dirname을 ES 모듈에서 사용할 수 있도록 설정 +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +app.use(express.static(path.join(__dirname, 'dist'))); + +app.get('*', (req, res) => { + res.sendFile(path.resolve(__dirname, 'dist', 'index.html')); +}); + +app.listen(port, () => { + console.log(`Server is running on port ${port}`); +}); diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..a44ab87 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,3 @@ + diff --git a/src/api/attendance.js b/src/api/attendance.js new file mode 100644 index 0000000..a1727d4 --- /dev/null +++ b/src/api/attendance.js @@ -0,0 +1,327 @@ +import apiClient from '@/api/axios'; // Axios 설정이 적용된 apiClient 사용 + +// 1. 사원 ID와 날짜(yyyy-MM)로 월별 출퇴근 내역 조회 +export const getCommutesByEmployeeId = async (eid, date) => { + try { + const response = await apiClient.get(`/commutes?eid=${eid}&date=${date}`); + return response.data; + } catch (error) { + console.error('getCommutesByEmployeeId 에러:', error); + throw error; + } +}; + +// 2. 재택근무 신청 +export const createRemoteRequest = async (formData) => { + try { + const response = await apiClient.post( + `/attendance-requests/commute/remote`, + formData + ); + return response.data; + } catch (error) { + console.error('createRemoteRequest 에러:', error); + throw error; + } +}; + +// 3. 사원 ID로 재택근무 최근 신청 내역 조회 +export const getRemoteRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/attendance-requests/commute/remote/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getRemoteRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 4. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 재택근무 전체 신청 내역 페이지별 조회 +export const getRemoteRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/attendance-requests/commute/remote?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getRemoteRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 5. 초과근무 신청 +export const createOvertimeRequest = async (formData) => { + try { + const response = await apiClient.post( + `/attendance-requests/commute/overtime`, + formData + ); + return response.data; + } catch (error) { + console.error('createOvertimeRequest 에러:', error); + throw error; + } +}; + +// 6. 사원 ID로 초과근무 최근 신청 내역 조회 +export const getOvertimeRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/attendance-requests/commute/overtime/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getOvertimeRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 7. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 초과근무 전체 신청 내역 페이지별 조회 +export const getOvertimeRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/attendance-requests/commute/overtime?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getOvertimeRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 8. 출장 신청 +export const createBusinessTripRequest = async (formData) => { + try { + const response = await apiClient.post( + `/attendance-requests/business-trip`, + formData + ); + return response.data; + } catch (error) { + console.error('createBusinessTripRequest 에러:', error); + throw error; + } +}; + +// 9. 사원 ID로 출장 최근 신청 내역 조회 +export const getBusinessTripRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/attendance-requests/business-trip/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getBusinessTripRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 10. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 출장 전체 신청 내역 페이지별 조회 +export const getBusinessTripRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/attendance-requests/business-trip?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getBusinessTripRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 11. 파견 신청 +export const createDispatchRequest = async (formData) => { + try { + const response = await apiClient.post( + `/attendance-requests/dispatch`, + formData + ); + return response.data; + } catch (error) { + console.error('createDispatchRequest 에러:', error); + throw error; + } +}; + +// 12. 사원 ID로 파견 최근 신청 내역 조회 +export const getDispatchRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/attendance-requests/dispatch/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getDispatchRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 13. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 파견 전체 신청 내역 페이지별 조회 +export const getDispatchRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/attendance-requests/dispatch?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getDispatchRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 14. 휴직 신청 +export const createLeaveRequest = async (formData) => { + try { + const response = await apiClient.post( + `/attendance-requests/leave`, + formData, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + } + ); + return response.data; + } catch (error) { + console.error('createLeaveRequest 에러:', error); + throw error; + } +}; + +// 15. 사원 ID로 휴직 최근 신청 내역 조회 +export const getLeaveRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/attendance-requests/leave/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getLeaveRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 16. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 휴직 전체 신청 내역 페이지별 조회 +export const getLeaveRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/attendance-requests/leave?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getLeaveRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 17. 복직 신청 +export const createReturnRequest = async (formData) => { + try { + const response = await apiClient.post( + `/attendance-requests/return`, + formData, + { + headers: { + 'Content-Type': 'multipart/form-data', + }, + } + ); + return response.data; + } catch (error) { + console.error('createReturnRequest 에러:', error); + throw error; + } +}; + +// 18. 사원 ID로 복직 최근 신청 내역 조회 +export const getReturnRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/attendance-requests/return/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getReturnRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 19. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 복직 전체 신청 내역 페이지별 조회 +export const getReturnRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/attendance-requests/return?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getReturnRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 20. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 휴복직 전체 내역 페이지별 조회 +export const getLeaveReturnsByEmployeeId = async (eid, page) => { + try { + const response = await apiClient.get( + `/leave-returns?eid=${eid}&page=${page}` + ); + return response.data; + } catch (error) { + console.error('getLeaveReturnsByEmployeeId 에러:', error); + throw error; + } +}; + +// 21. 근태 취소 신청 +export const cancelAttendanceRequest = async (id, formData) => { + try { + const response = await apiClient.patch( + `/attendance-requests/${id}`, + formData + ); + return response.data; + } catch (error) { + console.error('cancelAttendanceRequest 에러:', error); + throw error; + } +}; + +// 22. 초과근무 연장 신청 +export const extendOvertime = async (id, formData) => { + try { + const response = await apiClient.patch( + `/attendance-requests/commute/overtime/${id}`, + formData + ); + return response.data; + } catch (error) { + console.error('extendOvertime 에러:', error); + throw error; + } +}; + +// 23. 사원 ID와 날짜(yyyy-MM)로 월별 초과근무 내역 조회 +export const getOvertimesByEmployeeId = async (eid, date) => { + try { + const response = await apiClient.get( + `/commutes/overtime?eid=${eid}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getOvertimesByEmployeeId 에러:', error); + throw error; + } +}; + +// 24. 출근 +export const checkAndUpdateCommute = async (eid) => { + try { + const response = await apiClient.post(`/commutes?eid=${eid}`); + return response.data; + } catch (error) { + console.error('checkAndUpdateCommute 에러:', error); + throw error; + } +}; diff --git a/src/api/axios.js b/src/api/axios.js new file mode 100644 index 0000000..11acf96 --- /dev/null +++ b/src/api/axios.js @@ -0,0 +1,80 @@ +import axios from 'axios'; + +// Axios 인스턴스 생성 +const apiClient = axios.create({ + baseURL: 'http://localhost:5000/api', // API 기본 경로 +}); + +// 요청 인터셉터: 모든 요청에 Authorization 헤더 추가 +apiClient.interceptors.request.use( + (config) => { + const token = localStorage.getItem('accessToken'); + console.log('인터셉터에서 읽어온 토큰:', token); + + // 액세스 토큰이 있는 경우 Authorization 헤더에 추가 + if (token) { + config.headers.Authorization = `Bearer ${token}`; + } + return config; + }, + (error) => Promise.reject(error) +); + +// 응답 인터셉터: 401 오류 시 리프레시 토큰으로 재발급 처리 +apiClient.interceptors.response.use( + (response) => response, // 응답이 성공적인 경우 그대로 반환 + async (error) => { + const originalRequest = error.config; + + // 401 Unauthorized 에러 처리 + if ( + error.response && + error.response.status === 401 && + !originalRequest._retry + ) { + originalRequest._retry = true; // 무한 루프 방지 + + try { + const refreshToken = localStorage.getItem('refreshToken'); + + if (!refreshToken) { + console.error('리프레시 토큰이 없습니다.'); + return Promise.reject(error); + } + + // 리프레시 토큰으로 새로운 액세스 토큰 요청 + const { data } = await axios.post( + 'http://localhost:5000/api/auth/refresh-token', + { refresh_token: refreshToken }, // JSON 형식으로 데이터 전달 + { + headers: { + 'Content-Type': 'application/json', + }, + } + ); + + const { access_token: newAccessToken, refresh_token: newRefreshToken } = + data.content; + + // 새로운 토큰 저장 + if (newAccessToken) { + localStorage.setItem('accessToken', newAccessToken); + } + if (newRefreshToken) { + localStorage.setItem('refreshToken', newRefreshToken); + } + + // 원래 요청을 새로운 액세스 토큰으로 재시도 + originalRequest.headers.Authorization = `Bearer ${newAccessToken}`; + return apiClient(originalRequest); // 재요청 + } catch (refreshError) { + console.error('리프레시 토큰 요청 실패:', refreshError); + return Promise.reject(refreshError); + } + } + + return Promise.reject(error); // 다른 오류는 그대로 반환 + } +); + +export default apiClient; diff --git a/src/api/chatbot.js b/src/api/chatbot.js new file mode 100644 index 0000000..ceb77b7 --- /dev/null +++ b/src/api/chatbot.js @@ -0,0 +1,12 @@ +import apiClient from '@/api/axios'; + +// 챗봇 질문 +export const chatbotQuery = async (formData) => { + try { + const response = await apiClient.post(`/chatbot/query`, formData); + return response.data; + } catch (error) { + console.error('chatbotQuery 에러:', error); + throw error; + } +}; diff --git a/src/api/department.js b/src/api/department.js new file mode 100644 index 0000000..7f96076 --- /dev/null +++ b/src/api/department.js @@ -0,0 +1,53 @@ +import apiClient from '@/api/axios'; + +// 1. 사원 전체 조회(검색) +export const getAllDepartmentMembers = async () => { + try { + const response = await apiClient.get(`/departments/search/all-members`); + return response.data; + } catch (error) { + console.error('getAllDepartmentMembers 에러:', error); + throw error; + } +}; + +// 2. 키워드로 사원 검색 +export const getEmployeesByKeywordOrDepartmentCode = async (keyword) => { + try { + const response = await apiClient.get( + `/departments/search/members?keyword=${keyword}` + ); + return response.data; + } catch (error) { + console.error('getEmployeesByKeywordOrDepartmentCode 에러:', error); + throw error; + } +}; + +// 3. 부서 구성원 조회(일반) +export const getEmployeesByDepartmentCode = async (dcode) => { + try { + const response = await apiClient.get( + `/departments/search/members?departmentCode=${dcode}` + ); + return response.data; + } catch (error) { + console.error('getEmployeesByDepartmentCode 에러:', error); + throw error; + } +}; + +// 4. 부서 구성원 조회(팀장) +export const getMyDepartmentMemberListByDepartmentCode = async ( + departmentCode +) => { + try { + const response = await apiClient.get( + `/departments/my-department/${departmentCode}/members` + ); + return response.data; + } catch (error) { + console.error('getMyDepartmentMemberListByDepartmentCode 에러:', error); + throw error; + } +}; diff --git a/src/api/emp_attach.js b/src/api/emp_attach.js new file mode 100644 index 0000000..bc82566 --- /dev/null +++ b/src/api/emp_attach.js @@ -0,0 +1,261 @@ +import apiClient from '@/api/axios'; + +export const getDoc = async (fileType) => { + try { + const response = await apiClient.get( + `/forms/download?file_type=${fileType}` + ); + return response.data; + } catch (error) { + console.error('양식 다운로드 에러:', error.response?.data || error.message); + throw error; + } +}; + +export const saveData = async (data, name) => { + try { + let response; + if (name !== null) { + if (name === 'appointments') + response = await apiClient.post(`/appointments`, data); + else response = await apiClient.post(`/employees/${name}`, data); + } else { + response = await apiClient.post(`/employees`, data); + } + return response.data.content; + } catch (error) { + console.error( + '사원 정보 등록 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const updateData = async (list, data, name) => { + try { + let response; + await apiClient.delete(`/employees/${name}`, { + data: list, + }); + response = await apiClient.post(`/employees/${name}`, data); + return response.data.content; + } catch (error) { + console.error('수정 요청 에러:', error.response?.data || error.message); + throw error; + } +}; + +export const getValidData = async () => { + try { + const response = await apiClient.get(`/validations/`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getAllEmpId = async () => { + try { + const response = await apiClient.get(`/employees/`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getEmpByNum = async (empNum) => { + try { + const response = await apiClient.get(`/employees/number/${empNum}`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getEmpId = async (empCodes) => { + try { + const response = await apiClient.post(`/employees/numbers`, empCodes); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getEducationsById = async (empId) => { + try { + const response = await apiClient.get(`/employees/educations/${empId}`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getQualifications = async () => { + try { + const response = await apiClient.get(`/employees/qualifications`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getQualificationsById = async (empId) => { + try { + const response = await apiClient.get(`/employees/qualifications/${empId}`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getLanguageTests = async () => { + try { + const response = await apiClient.get(`/employees/language-tests`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getLanguageTestsById = async (empId) => { + try { + const response = await apiClient.get(`/employees/language-tests/${empId}`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getLangCode = async () => { + try { + const response = await apiClient.get(`/employees/language-tests/languages`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getRelationships = async () => { + try { + const response = await apiClient.get( + `/employees/family-members/relationships` + ); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getFamilyById = async (empId) => { + try { + const response = await apiClient.get(`/employees/family-members/${empId}`); + return response.data; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getAppHistoryByMonth = async (year, month) => { + try { + const response = await apiClient.get( + `/appointments/history?year=${year}&month=${month}&appointment_item_code=all` + ); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getAppHistoryByPeriod = async (year, month, type) => { + try { + const response = await apiClient.get( + `/appointments/history?year=${year}&month=${month}&appointment_item_code=${type}` + ); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getCareersById = async (empId) => { + try { + const response = await apiClient.get(`/employees/careers/${empId}`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; + +export const getDisciplineReward = async (empId) => { + try { + const response = await apiClient.get(`/employees/attached/${empId}`); + return response.data.content; + } catch (error) { + console.error( + '유효성 검사 데이터 조회 에러:', + error.response?.data || error.message + ); + throw error; + } +}; diff --git a/src/api/emp_info.js b/src/api/emp_info.js new file mode 100644 index 0000000..7d141a4 --- /dev/null +++ b/src/api/emp_info.js @@ -0,0 +1,251 @@ +// 사원 기본 관련 api 모음 + +import apiClient from '@/api/axios'; // Axios 설정이 적용된 apiClient 사용 +import router from '@/router'; + +// 설명. 홈 화면 일정 조회 +export const getHomeInfo = async (employeeId, month) => { + try { + const response = await apiClient.get( + `/home?employeeId=${employeeId}&month=${month}` + ); + return response.data; + } catch (error) { + console.error('getHomeInfo 에러:', error); + throw error; // 에러를 호출한 쪽으로 전달 + } +}; + +// 설명. 1. 사원 ID로 사원 정보 조회하기 +export const getEmployeeById = async (employeeId, token) => { + try { + console.log('사원 ID로 조회 시작, 전달된 토큰:', token); + const response = await apiClient.get(`/employees/id/${employeeId}`, { + headers: { + Authorization: `Bearer ${token}`, // Bearer 토큰 헤더 추가 + }, + }); + console.log('사원 조회 응답 데이터:', response.data); + return response.data.content; // 사원 정보를 반환 + } catch (error) { + console.error('getEmployeeById 에러:', error.response?.data || error); + router.push("/login"); + throw error; // 에러를 호출한 쪽으로 전달 + } +}; + +// 설명. 1.1. 사원 ID로 사원 정보 조인해서 상세 조회하기 +export const getEmployeeDetailById = async (employeeId, token) => { + try { + const response = await apiClient.get(`/employees/detail/${employeeId}`, { + headers: { + Authorization: `Bearer ${token}`, // Bearer 토큰 헤더 추가 + }, + }); + return response.data.content; // 상세 사원 정보 반환 + } catch (error) { + console.error('getEmployeeDetailById 에러:', error); + throw error; // 에러를 호출한 쪽으로 전달 + } +}; + +// 설명. 2. 비밀번호 재설정하기 +export const resetEmployeePassword = async (employeeId, newPassword, token) => { + try { + const response = await apiClient.patch( + '/employees/re-password', + { + employee_id: employeeId, // 사원 ID + new_password: newPassword, // 새 비밀번호 + }, + { + headers: { + Authorization: `Bearer ${token}`, // Bearer 토큰 헤더 추가 + }, + } + ); + + return response.data; // API 응답 데이터를 반환 + } catch (error) { + console.error('resetEmployeePassword 에러:', error.response || error); + throw error; // 에러를 호출한 쪽으로 전달 + } +}; + +// 설명. 3. 사원 리스트 전체 조회하기 +export const getAllEmployees = async (token) => { + try { + const response = await apiClient.get('/employees/', { + headers: { + Authorization: `Bearer ${token}`, // Bearer 토큰 헤더 추가 + }, + }); + return response.data.content; // 사원 리스트 반환 + } catch (error) { + console.error('getAllEmployees 에러:', error); + throw error; + } +}; + +// 설명. 4. 이름으로 사원 리스트 조회하기 +export const getEmployeesByName = async (name, token) => { + try { + const response = await apiClient.get(`/employees/name`, { + params: { name }, // 이름을 파라미터로 추가 + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response.data.content; // 사원 리스트 반환 + } catch (error) { + console.error('getEmployeesByName 에러:', error); + throw error; + } +}; + +// 설명. 5. 사번으로 사원 정보 조회하기 +export const getEmployeeByNumber = async (employeeNumber, token) => { + try { + const response = await apiClient.get( + `/employees/number/${employeeNumber}`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + return response.data.content; // 사원 정보 반환 + } catch (error) { + console.error('getEmployeeByNumber 에러:', error); + throw error; + } +}; + +// 설명. 6. 재직증명서 정보 조회하기 +export const getEmploymentCertificate = async (employeeId, purpose, token) => { + try { + const response = await apiClient.post( + '/employees/employment-certificate', + { + employee_id: employeeId, // 사원 id + purpose: purpose, // 증명서 용도 + }, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + return response.data.content; // 재직증명서 정보 반환 + } catch (error) { + console.error('getEmploymentCertificate 에러:', error); + throw error; + } +}; + +// 설명. 7. 근로 계약서 정보 조회하기 +export const getEmploymentContract = async (employeeId, token) => { + try { + const response = await apiClient.get( + `/employees/${employeeId}/employment-contract`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + return response.data.content; // 근로 계약서 정보 반환 + } catch (error) { + console.error('getEmploymentContract 에러:', error); + throw error; + } +}; + +// 설명. 8. 비밀 유지 서약서 정보 조회하기 +export const getSecurityAgreement = async (employeeId, token) => { + try { + const response = await apiClient.get( + `/employees/${employeeId}/security-agreement`, + { + headers: { + Authorization: `Bearer ${token}`, + }, + } + ); + return response.data.content; // 비밀 유지 서약서 정보 반환 + } catch (error) { + console.error('getSecurityAgreement 에러:', error); + throw error; + } +}; + +// 설명. 9. 서명된 계약서 리스트 조회하기 +export const getContractList = async (employeeId, token) => { + try { + const response = await apiClient.get(`/employees/${employeeId}/contracts`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response.data.content; // 계약서 리스트 반환 + } catch (error) { + console.error('getContractList 에러:', error); + throw error; + } +}; + +// 설명. 10. 특정 계약서 정보 조회하기 +export const getContract = async (contractId, token) => { + try { + const response = await apiClient.get(`/employees/contracts/${contractId}`, { + headers: { + Authorization: `Bearer ${token}`, + }, + }); + return response.data.content; // 계약서 정보 반환 + } catch (error) { + console.error('getContract 에러:', error); + throw error; + } +}; + +// 설명. 11. 사원 정보 수정하기 +export const updateEmployeeInfo = async (employeeId, formData, token) => { + try { + const response = await apiClient.patch( + `/employees/employee-id/${employeeId}`, + formData, + { + headers: { + Authorization: `Bearer ${token}`, // Bearer 토큰 헤더 추가 + 'Content-Type': 'multipart/form-data', // form-data 처리 + }, + } + ); + return response.data.content; // 수정된 사원 정보 반환 + } catch (error) { + console.error('updateEmployeeInfo 에러:', error.response || error); + throw error; // 에러를 호출한 쪽으로 전달 + } +}; + +// 설명. 12. 사원별 계약서 등록 +export const registerEmployeeContract = async (contractId, file, token) => { + try { + const formData = new FormData(); + formData.append('contract_id', contractId); // 계약서 ID + formData.append('contract_file', file); // 파일 + + const response = await apiClient.post('/employees/contracts', formData, { + headers: { + Authorization: `Bearer ${token}`, + 'Content-Type': 'multipart/form-data', // form-data 처리 + }, + }); + + return response.data; // 성공 메시지 반환 + } catch (error) { + console.error('registerEmployeeContract 에러:', error.response || error); + throw error; // 에러 전달 + } +}; diff --git a/src/api/evaluation.js b/src/api/evaluation.js new file mode 100644 index 0000000..2ebe8b8 --- /dev/null +++ b/src/api/evaluation.js @@ -0,0 +1,434 @@ +// evaluation.js +import apiClient from '@/api/axios'; + +// 과제별 평가 조회 - ( 자기평가&리더평가에 해당하는 과제별 평가 리스트 모두 조회 ) +export const getTaskEvaluation = async (empId, year, half) => { + try { + const response = await apiClient.get(`/evaluations/taskEval/find`, { + params: { + empId, + year, + half, + }, + }); + return response.data; + } catch (error) { + console.error('getTaskEvaluation 에러:', error); + throw error; + } +}; + +// 평가ID로 과제별 평가 List 조회 ( 개인평가 조회에 사용 ) +export const findIndividualTaskListByEvaluationId = async ( + empId, + year, + half +) => { + try { + const response = await apiClient.get( + '/evaluations/taskEval/individualTaskList', + { + params: { + year: year, + half: half, + empId: empId, + }, + } + ); + return response.data; + } catch (error) { + console.error('자기평가 과제 리스트 조회 중 에러 발생:', error); + throw error; + } +}; + +// 평가ID로 과제별 평가 List 조회 ( 리더평가 조회에 사용 ) +export const findTaskEvalByEvaluationId = async (evaluationId) => { + try { + const response = await apiClient.get( + `/evaluations/taskEval/byEvaluationId/${evaluationId}` + ); + return response.data; + } catch (error) { + console.error('평가ID로 과제별 평가 리스트 조회 중 에러 발생:', error); + throw error; + } +}; + +// 과제별 평가 수정 +export const updateTaskEval = async (taskEvalId, updateTaskEvalRequestDTO) => { + try { + const response = await apiClient.patch( + `/evaluations/taskEval/${taskEvalId}`, + updateTaskEvalRequestDTO + ); + return response.data; + } catch (error) { + console.error('과제별 평가 수정 중 에러 발생:', error); + throw error; + } +}; + +// 모든 과제 유형 조회 +export const getAllTaskTypes = async () => { + try { + const response = await apiClient.get(`/evaluations/taskType/allTaskType`); + return response.data; + } catch (error) { + console.error('getAllTaskTypes 에러:', error); + throw error; + } +}; + +// 과제 유형 삭제 함수 +export const deleteTaskTypeById = async (taskTypeId) => { + try { + const response = await apiClient.delete( + `/evaluations/taskType/${taskTypeId}` + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('deleteTaskTypeById 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 개인 과제 항목 리스트 조회 +export const getIndividualTaskItems = async (empId, year, half) => { + try { + const response = await apiClient.get( + `/evaluations/taskItem/individualTasks`, + { + params: { + empId, + year, + half, + }, + } + ); + return response.data; + } catch (error) { + console.error('getIndividualTaskItems 에러:', error); + throw error; + } +}; + +// 부서 과제 항목 리스트 조회 +export const findDepartmentTaskItems = async (year, half, empId) => { + try { + const response = await apiClient.get( + '/evaluations/taskItem/departmentTasks', + { + params: { + year, + half, + empId, + }, + } + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findDepartmentTaskItems 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 과제 생성 +export const createTaskItem = async ( + year, + half, + taskTypeId, + createTaskItemRequestDTO +) => { + try { + const response = await apiClient.post( + `/evaluations/taskItem/taskItemCreation`, + createTaskItemRequestDTO, + { + params: { + year, + half, + taskTypeId, + }, + } + ); + return response.data; + } catch (error) { + console.error('createTaskItem 에러:', error); + throw error; + } +}; + +// 모든 과제 유형에 대한 과제 리스트 조회 +export const findAllTaskItemsByEmpId = async (empId, year, half) => { + try { + const response = await apiClient.get(`/evaluations/taskItem/AllTaskItems`, { + params: { + empId, + year, + half, + }, + }); + return response.data; + } catch (error) { + console.error('findAllTaskItemsByEmpId 에러:', error); + throw error; + } +}; + +// 과제 항목별 평가 생성 +export const createTaskEval = async ( + createTaskEvalRequestDTO, + year, + half, + employeeId +) => { + try { + const response = await apiClient.post( + '/evaluations/taskEval/taskEvalCreation', + createTaskEvalRequestDTO, + { + params: { + year, + half, + employeeId, + }, + } + ); + return response.data; + } catch (error) { + console.error('createTaskEval 에러:', error); + throw error; + } +}; + +// 최종 평가 조회 +export const findFinalGrade = async (empId, year, half) => { + try { + const response = await apiClient.get('/evaluations/evaluation/leader', { + params: { + empId, + year, + half, + }, + }); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findFinalGrade 에러:', error); + throw error; + } +}; + +// 자기 평가 조회 +export const findEvaluationByEmpIdAndYearAndHalf = async ( + year, + half, + empId +) => { + try { + const response = await apiClient.get('/evaluations/evaluation/mine', { + params: { + year: year, + half: half, + empId: empId, + }, + }); + return response.data; + } catch (error) { + console.error('자기 평가 조회 중 에러 발생:', error); + throw error; + } +}; + +// 피드백 생성 +export const createFeedback = async (createFeedbackRequestDTO) => { + try { + const response = await apiClient.post( + '/evaluations/feedback/feedbackCreation', + createFeedbackRequestDTO + ); + return response.data; + } catch (error) { + console.error('피드백 생성 중 에러 발생:', error); + throw error; + } +}; + +// 피드백 조회 +export const findFeedbacks = async (empId, year, half) => { + try { + const response = await apiClient.get('/evaluations/feedback/find', { + params: { + empId, + year, + half, + }, + }); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findFeedbacks 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 피드백 수정 +export const updateFeedback = async (feedbackId, updateFeedbackRequestDTO) => { + try { + const response = await apiClient.patch( + `/evaluations/feedback/${feedbackId}`, + updateFeedbackRequestDTO + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('updateFeedback 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 과제 유형 등록 +export const createTaskType = async (createTaskTypeRequestDTO) => { + try { + const response = await apiClient.post( + `/evaluations/taskType/create`, + createTaskTypeRequestDTO + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('createTaskType 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 모든 과제 유형 조회 +export const findAllTaskTypes = async () => { + try { + const response = await apiClient.get(`/evaluations/taskType/allTaskType`); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findAllTaskTypes 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 년도 및 반기별 평가 등급 리스트 조회 +export const findGradeByYearAndHalf = async (year, half) => { + try { + const response = await apiClient.get(`/evaluations/grade/find`, { + params: { + year, + half, + }, + }); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findGradeByYearAndHalf 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 등급 생성 함수 +export const createGrade = async (createGradeRequestDTO, year, half) => { + try { + const response = await apiClient.post( + `/evaluations/grade/gradeCreation`, + createGradeRequestDTO, + { + params: { + year, + half, + }, + } + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('createGrade 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 등급 수정 함수 +export const updateGrade = async (gradeId, updateGradeRequestDTO) => { + try { + const response = await apiClient.patch( + `/evaluations/grade/${gradeId}`, + updateGradeRequestDTO + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('updateGrade 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 평가 정책 생성 함수 +export const createEvaluationPolicy = async ( + createEvaluationPolicyRequestDTO +) => { + try { + const response = await apiClient.post( + '/evaluations/evaluationPolicy/policyCreation', + createEvaluationPolicyRequestDTO + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('createEvaluationPolicy 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 평가 정책 리스트 조회 +export const findEvaluationPolicyByYearAndHalf = async (year, half) => { + try { + const response = await apiClient.get('/evaluations/evaluationPolicy/find', { + params: { + year, + half, + }, + }); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findEvaluationPolicyByYearAndHalf 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 평가 정책 단건 조회 함수 +export const findEvaluationPolicyById = async (evaluationPolicyId) => { + try { + const response = await apiClient.get( + `/evaluations/evaluationPolicy/${evaluationPolicyId}` + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findEvaluationPolicyById 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 평가 정책 수정 함수 +export const updateEvaluationPolicy = async ( + evaluationPolicyId, + updateEvaluationPolicyRequestDTO +) => { + try { + const response = await apiClient.patch( + `/evaluations/evaluationPolicy/${evaluationPolicyId}`, + updateEvaluationPolicyRequestDTO + ); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('updateEvaluationPolicy 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; + +// 평가등급 단건 조회 함수 +export const findGradeByGradeId = async (gradeId) => { + try { + const response = await apiClient.get(`/evaluations/grade/${gradeId}`); + return response.data; // API 응답 데이터 반환 + } catch (error) { + console.error('findGradeByGradeId 에러:', error); + throw error; // 에러를 다시 throw해서 호출한 쪽에서 처리할 수 있도록 함 + } +}; diff --git a/src/api/payroll.js b/src/api/payroll.js new file mode 100644 index 0000000..a82667b --- /dev/null +++ b/src/api/payroll.js @@ -0,0 +1,147 @@ +import apiClient from '@/api/axios'; + +apiClient.defaults.headers.common['Authorization'] = + `Bearer ${localStorage.getItem('accessToken')}`; + +/* 1. 사원별 연월별 급여 명세서 조회 */ +export const getPaymentByEmployeeIdAndYearAndMonth = async ( + eid, + year, + month +) => { + if (!eid || !year || !month) { + throw new Error( + `유효하지 않은 파라미터: eid=${eid}, year=${year}, month=${month}` + ); + } + try { + const response = await apiClient.get(`/payrolls/details/${eid}`, { + params: { year, month }, + }); + return response.data; + } catch (error) { + console.error('getPaymentByEmployeeIdAndYearAndMonth 에러: ', error); + throw error; + } +}; + +export const getPeriodicPayments = async (employeeId, startDate, endDate) => { + if (!employeeId || !startDate || !endDate) { + throw new Error( + `유효하지 않은 파라미터: employeeId=${employeeId}, startMonth=${startDate}, endMonth=${endDate}` + ); + } + try { + const response = await apiClient.get('/payrolls/period', { + params: { employeeId, startDate, endDate }, + }); + return response.data; + } catch (error) { + console.error('getPeriodicPayments 오류: ', error); + throw error; + } +}; + +export const getPaymentsByYear = async (employeeId, year) => { + if (!employeeId || !year) { + throw new Error( + `유효하지 않은 파라미터: employeeId=${employeeId}, year=${year}` + ); + } + try { + const response = await apiClient.get('/payrolls/list', { + params: { employeeId, year }, + }); + return response.data; + } catch (error) { + console.error('getPaymentsByYear 오류: ', error); + throw error; + } +}; + +export const getAllPayments = async (employeeId, page) => { + if (!employeeId || !page) { + throw new Error( + `유효하지 않은 파라미터: employeeId=${employeeId}, page=${page}` + ); + } + try { + const response = await apiClient.get(`/payrolls/all/${employeeId}`, { + params: { page }, + }); + return response.data; + } catch (error) { + console.error('getAllPayments 에러: ', error); + throw error; + } +}; + +export const getEstimateWorkingDays = async (employeeId) => { + if (!employeeId) { + throw new Error(`유효하지 않은 파라미터: employeeId=${employeeId}`); + } + try { + const response = await apiClient.get( + `/severance-pay/estimate/${employeeId}` + ); + return response.data; + } catch (error) { + console.error('getEstimateWorkingDays 에러: ', error); + throw error; + } +}; + +export const calculateSeverancePay = async (employeeId) => { + if (!employeeId) { + throw new Error(`유효하지 않은 파라미터: employeeId=${employeeId}`); + } + try { + const response = await apiClient.get( + `/severance-pay/calculate/${employeeId}` + ); + return response.data; + } catch (error) { + console.error('calculateSeverancePay 에러: ', error); + throw error; + } +}; + +export const createIrregularAllowance = async (formData) => { + try { + const response = await apiClient.post('irregular-allowances', formData); + return response.data; + } catch (error) { + console.error('createIrregularAllowance 오류: ', error); + } +}; + +export const getIrregularAllowance = async (page) => { + try { + const response = await apiClient.get(`/irregular-allowances`, { + params: { page }, + }); + return response.data; + } catch (error) { + console.error('getIrregularAllowance 오류: ', error); + } +}; + +export const getNonTaxablePayrolls = async (page) => { + try { + const response = await apiClient.get('/non-taxable-payrolls', { + params: { page }, + }); + return response.data; + } catch (error) { + console.error('getNonTaxablePayrolls 오류: ', error); + } +}; + +export const createNonTaxable = async (formData) => { + try { + const response = await apiClient.post('/non-taxable-payrolls', formData); + return response.data; + } catch (error) { + console.error('createNonTaxable 오류: ', error); + } +}; diff --git a/src/api/statistics.js b/src/api/statistics.js new file mode 100644 index 0000000..e69de29 diff --git a/src/api/vacation.js b/src/api/vacation.js new file mode 100644 index 0000000..d1bb9f7 --- /dev/null +++ b/src/api/vacation.js @@ -0,0 +1,161 @@ +import apiClient from '@/api/axios'; // Axios 설정이 적용된 apiClient 사용 + +// 1. 휴가 신청 +export const createVacationRequest = async (formData) => { + try { + const response = await apiClient.post(`/vacation-requests`, formData, { + headers: { + 'Content-Type': 'multipart/form-data', + }, + }); + return response.data; + } catch (error) { + console.error('createVacationRequest 에러:', error); + throw error; + } +}; + +// 2. 사원 ID로 휴가 최근 신청 내역 조회 +export const getVacationRequestPreviewsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get( + `/vacation-requests/preview?eid=${eid}` + ); + return response.data; + } catch (error) { + console.error('getVacationRequestPreviewsByEmployeeId 에러:', error); + throw error; + } +}; + +// 3. 사원 ID, 페이지번호, 날짜(yyyy-MM)로 휴가 전체 신청 내역 페이지별 조회 +export const getVacationRequestsByEmployeeId = async (eid, page, date) => { + try { + const response = await apiClient.get( + `/vacation-requests?eid=${eid}&page=${page}&date=${date}` + ); + return response.data; + } catch (error) { + console.error('getVacationRequestsByEmployeeId 에러:', error); + throw error; + } +}; + +// 4. 휴가 정책 등록 +export const createVacationPolicy = async (formData) => { + try { + const response = await apiClient.post(`/vacation-policies`, formData); + return response.data; + } catch (error) { + console.error('createVacationPolicy 에러:', error); + throw error; + } +}; + +// 5. 휴가 정책 수정 +export const updateVacationPolicy = async (id, formData) => { + try { + const response = await apiClient.put(`/vacation-policies/${id}`, formData); + return response.data; + } catch (error) { + console.error('updateVacationPolicy 에러:', error); + throw error; + } +}; + +// 6. 연도별 휴가 정책 조회 +export const getVacationPoliciesByYear = async (year) => { + try { + const response = await apiClient.get(`/vacation-policies?year=${year}`); + return response.data; + } catch (error) { + console.error('getVacationPoliciesByYear 에러:', error); + throw error; + } +}; + +// 7. 연도별 비정기 휴가 정책 조회 +export const getIrregularVacationPoliciesByYear = async (year) => { + try { + const response = await apiClient.get( + `/vacation-policies/irregular?year=${year}` + ); + return response.data; + } catch (error) { + console.error('getIrregularVacationPoliciesByYear 에러:', error); + throw error; + } +}; + +// 8. 휴가 종류 조회 +export const getVacationTypes = async () => { + try { + const response = await apiClient.get(`/vacation-types`); + return response.data; + } catch (error) { + console.error('getVacationTypes 에러:', error); + throw error; + } +}; + +// 9. 휴가 지급 +export const createVacation = async (formData) => { + try { + const response = await apiClient.post(`/vacations`, formData); + return response.data; + } catch (error) { + console.error('createVacation 에러:', error); + throw error; + } +}; + +// 10. 사원별 잔여 휴가 조회 +export const getLeftVacationsByEmployeeId = async (eid, page) => { + try { + const response = await apiClient.get( + `/vacations/left?eid=${eid}&page=${page}` + ); + return response.data; + } catch (error) { + console.error('getLeftVacationsByEmployeeId 에러:', error); + throw error; + } +}; + +// 11. 사원별 사용 휴가 조회 +export const getUsedVacationsByEmployeeId = async (eid, page) => { + try { + const response = await apiClient.get( + `/vacations/used?eid=${eid}&page=${page}` + ); + return response.data; + } catch (error) { + console.error('getUsedVacationsByEmployeeId 에러:', error); + throw error; + } +}; + +// 12. 사원별 잔여 휴가 전체 조회 +export const getLeftAllVacationsByEmployeeId = async (eid) => { + try { + const response = await apiClient.get(`/vacations/left-all?eid=${eid}`); + return response.data; + } catch (error) { + console.error('getLeftAllVacationsByEmployeeId 에러:', error); + throw error; + } +}; + +// 13. 휴가 신청 취소 +export const cancelVacationRequest = async (id, formData) => { + try { + const response = await apiClient.patch( + `/vacation-requests/${id}`, + formData + ); + return response.data; + } catch (error) { + console.error('createVacation 에러:', error); + throw error; + } +}; diff --git a/src/assets/Inflow_profile_img.png b/src/assets/Inflow_profile_img.png new file mode 100644 index 0000000..f3fbb31 Binary files /dev/null and b/src/assets/Inflow_profile_img.png differ diff --git a/src/assets/admin_default_profile.png b/src/assets/admin_default_profile.png new file mode 100644 index 0000000..51f90fc Binary files /dev/null and b/src/assets/admin_default_profile.png differ diff --git a/src/assets/company_logo.svg b/src/assets/company_logo.svg new file mode 100644 index 0000000..71d40bd --- /dev/null +++ b/src/assets/company_logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/emp_basic_profile.png b/src/assets/emp_basic_profile.png new file mode 100644 index 0000000..876aabf Binary files /dev/null and b/src/assets/emp_basic_profile.png differ diff --git a/src/assets/icons/company_icon.png b/src/assets/icons/company_icon.png new file mode 100644 index 0000000..2b610b6 Binary files /dev/null and b/src/assets/icons/company_icon.png differ diff --git a/src/assets/icons/excel_icon.png b/src/assets/icons/excel_icon.png new file mode 100644 index 0000000..fdb9e96 Binary files /dev/null and b/src/assets/icons/excel_icon.png differ diff --git a/src/assets/icons/eye_closed.png b/src/assets/icons/eye_closed.png new file mode 100644 index 0000000..637b646 Binary files /dev/null and b/src/assets/icons/eye_closed.png differ diff --git a/src/assets/icons/eye_open.png b/src/assets/icons/eye_open.png new file mode 100644 index 0000000..ecd9957 Binary files /dev/null and b/src/assets/icons/eye_open.png differ diff --git a/src/assets/icons/file_close.png b/src/assets/icons/file_close.png new file mode 100644 index 0000000..81d5f89 Binary files /dev/null and b/src/assets/icons/file_close.png differ diff --git a/src/assets/icons/file_open.png b/src/assets/icons/file_open.png new file mode 100644 index 0000000..b0333d6 Binary files /dev/null and b/src/assets/icons/file_open.png differ diff --git a/src/assets/icons/fold.png b/src/assets/icons/fold.png new file mode 100644 index 0000000..2a5b79b Binary files /dev/null and b/src/assets/icons/fold.png differ diff --git a/src/assets/icons/minus_icon.png b/src/assets/icons/minus_icon.png new file mode 100644 index 0000000..8dd5791 Binary files /dev/null and b/src/assets/icons/minus_icon.png differ diff --git a/src/assets/icons/plus_icon.png b/src/assets/icons/plus_icon.png new file mode 100644 index 0000000..b3f4c5f Binary files /dev/null and b/src/assets/icons/plus_icon.png differ diff --git a/src/assets/icons/unfold.png b/src/assets/icons/unfold.png new file mode 100644 index 0000000..78e14ea Binary files /dev/null and b/src/assets/icons/unfold.png differ diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..7565660 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..e0b1bc5 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,133 @@ +/* Noto Sans KR 글꼴을 import */ +@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;500;700&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap'); + +:root { + font-size: 10px; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: inherit; +} + +html, +body { + width: 100%; + height: 100%; + font-size: 100%; + font-family: 'Noto Sans KR', sans-serif, 'inter'; +} + +button, +input, +textarea, +select { + font: inherit; /* 폰트 스타일 상속 */ + color: inherit; + background: none; + border: none; + outline: none; + padding: 0; + margin: 0; + appearance: none; /* 브라우저 기본 스타일 제거 */ +} + +ul, +ol { + list-style: none; /* 리스트 스타일 제거 */ +} + +a { + text-decoration: none; /* 링크 밑줄 제거 */ + color: inherit; /* 부모 색상 상속 */ +} + +img, +video { + max-width: 100%; + height: auto; /* 반응형 크기 */ + display: block; +} + +table { + border-collapse: collapse; /* 테이블 경계선 겹치기 제거 */ + border-spacing: 0; +} + +blockquote, +q { + quotes: none; /* 인용 부호 제거 */ +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; +} + +button { + cursor: pointer; /* 버튼 기본 커서 설정 */ + background: transparent; /* 기본 배경 제거 */ +} + +pre[class*='language-'] { + border-radius: 0.6rem; +} + +@media screen and (max-width: 1600px) { + :root { + font-size: 9.5px; + } +} + +@media screen and (max-width: 1400px) { + :root { + font-size: 9px; + } +} + +@media screen and (max-width: 1200px) { + :root { + font-size: 8.5px; + } +} + +@media screen and (max-width: 1000px) { + :root { + font-size: 8px; + } +} + +@media screen and (max-width: 800px) { + :root { + font-size: 7.5px; + } +} + +@media screen and (max-width: 600px) { + :root { + font-size: 7px; + } +} + +@media screen and (max-width: 400px) { + :root { + font-size: 6px; + } +} + +@media screen and (max-width: 350px) { + :root { + font-size: 5.5px; + } +} + +@media screen and (max-width: 300px) { + :root { + font-size: 5px; + } +} diff --git a/src/components/attendance/CancelRequestModal.vue b/src/components/attendance/CancelRequestModal.vue new file mode 100644 index 0000000..7c1cebe --- /dev/null +++ b/src/components/attendance/CancelRequestModal.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/components/buttons/ArrowLeftButton.vue b/src/components/buttons/ArrowLeftButton.vue new file mode 100644 index 0000000..fa23094 --- /dev/null +++ b/src/components/buttons/ArrowLeftButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/ArrowUpButton.vue b/src/components/buttons/ArrowUpButton.vue new file mode 100644 index 0000000..eb27333 --- /dev/null +++ b/src/components/buttons/ArrowUpButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/CaretLeftButton.vue b/src/components/buttons/CaretLeftButton.vue new file mode 100644 index 0000000..4ad8566 --- /dev/null +++ b/src/components/buttons/CaretLeftButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/CaretRightButton.vue b/src/components/buttons/CaretRightButton.vue new file mode 100644 index 0000000..9977a18 --- /dev/null +++ b/src/components/buttons/CaretRightButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/CheckButton.vue b/src/components/buttons/CheckButton.vue new file mode 100644 index 0000000..3c09c1c --- /dev/null +++ b/src/components/buttons/CheckButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/ChevronLeftButton.vue b/src/components/buttons/ChevronLeftButton.vue new file mode 100644 index 0000000..174e61a --- /dev/null +++ b/src/components/buttons/ChevronLeftButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/ChevronRightButton.vue b/src/components/buttons/ChevronRightButton.vue new file mode 100644 index 0000000..6b61642 --- /dev/null +++ b/src/components/buttons/ChevronRightButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/CopyButton.vue b/src/components/buttons/CopyButton.vue new file mode 100644 index 0000000..d783065 --- /dev/null +++ b/src/components/buttons/CopyButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/HomeButton.vue b/src/components/buttons/HomeButton.vue new file mode 100644 index 0000000..7118039 --- /dev/null +++ b/src/components/buttons/HomeButton.vue @@ -0,0 +1,35 @@ + + + diff --git a/src/components/buttons/MoreListButton.vue b/src/components/buttons/MoreListButton.vue new file mode 100644 index 0000000..22e432a --- /dev/null +++ b/src/components/buttons/MoreListButton.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/components/buttons/SearchButton.vue b/src/components/buttons/SearchButton.vue new file mode 100644 index 0000000..1c6242e --- /dev/null +++ b/src/components/buttons/SearchButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/buttons/SettingButton.vue b/src/components/buttons/SettingButton.vue new file mode 100644 index 0000000..598fd62 --- /dev/null +++ b/src/components/buttons/SettingButton.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/components/buttons/XmarkButton.vue b/src/components/buttons/XmarkButton.vue new file mode 100644 index 0000000..b8ed605 --- /dev/null +++ b/src/components/buttons/XmarkButton.vue @@ -0,0 +1,27 @@ + + + diff --git a/src/components/common/BubbleBackground.vue b/src/components/common/BubbleBackground.vue new file mode 100644 index 0000000..4c5b62f --- /dev/null +++ b/src/components/common/BubbleBackground.vue @@ -0,0 +1,148 @@ + + + diff --git a/src/components/common/ChangeMonthComponent.vue b/src/components/common/ChangeMonthComponent.vue new file mode 100644 index 0000000..b3a0c6c --- /dev/null +++ b/src/components/common/ChangeMonthComponent.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/src/components/common/ChangeYearComponent.vue b/src/components/common/ChangeYearComponent.vue new file mode 100644 index 0000000..abbc9e8 --- /dev/null +++ b/src/components/common/ChangeYearComponent.vue @@ -0,0 +1,74 @@ + + + + diff --git a/src/components/common/CheckCircle.vue b/src/components/common/CheckCircle.vue new file mode 100644 index 0000000..a80e53f --- /dev/null +++ b/src/components/common/CheckCircle.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/src/components/common/CommonArticle.vue b/src/components/common/CommonArticle.vue new file mode 100644 index 0000000..c0b2f6a --- /dev/null +++ b/src/components/common/CommonArticle.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/common/CommonHeader.vue b/src/components/common/CommonHeader.vue new file mode 100644 index 0000000..c8194a3 --- /dev/null +++ b/src/components/common/CommonHeader.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/src/components/common/CommonMenu.vue b/src/components/common/CommonMenu.vue new file mode 100644 index 0000000..37e65e5 --- /dev/null +++ b/src/components/common/CommonMenu.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/common/CommonNav.vue b/src/components/common/CommonNav.vue new file mode 100644 index 0000000..d4aa3a3 --- /dev/null +++ b/src/components/common/CommonNav.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/components/common/CompanyLogo.vue b/src/components/common/CompanyLogo.vue new file mode 100644 index 0000000..749396d --- /dev/null +++ b/src/components/common/CompanyLogo.vue @@ -0,0 +1,21 @@ + + + diff --git a/src/components/common/CompanyName.vue b/src/components/common/CompanyName.vue new file mode 100644 index 0000000..115d965 --- /dev/null +++ b/src/components/common/CompanyName.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/components/common/DepartmentMemberInfoComponent.vue b/src/components/common/DepartmentMemberInfoComponent.vue new file mode 100644 index 0000000..a4d1738 --- /dev/null +++ b/src/components/common/DepartmentMemberInfoComponent.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/src/components/common/FileItem.vue b/src/components/common/FileItem.vue new file mode 100644 index 0000000..d638864 --- /dev/null +++ b/src/components/common/FileItem.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/components/common/InfoCircle.vue b/src/components/common/InfoCircle.vue new file mode 100644 index 0000000..832ed2d --- /dev/null +++ b/src/components/common/InfoCircle.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/common/LoadingOverlay.vue b/src/components/common/LoadingOverlay.vue new file mode 100644 index 0000000..b3c353a --- /dev/null +++ b/src/components/common/LoadingOverlay.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/components/common/LoginSection.vue b/src/components/common/LoginSection.vue new file mode 100644 index 0000000..a7b3f72 --- /dev/null +++ b/src/components/common/LoginSection.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/src/components/common/MyInfoComponent.vue b/src/components/common/MyInfoComponent.vue new file mode 100644 index 0000000..427d448 --- /dev/null +++ b/src/components/common/MyInfoComponent.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/common/PaginationComponent.vue b/src/components/common/PaginationComponent.vue new file mode 100644 index 0000000..ab1e974 --- /dev/null +++ b/src/components/common/PaginationComponent.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/components/common/SearchEmployeeComponent.vue b/src/components/common/SearchEmployeeComponent.vue new file mode 100644 index 0000000..3cfe923 --- /dev/null +++ b/src/components/common/SearchEmployeeComponent.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/common/SelectAppTypeComponent.vue b/src/components/common/SelectAppTypeComponent.vue new file mode 100644 index 0000000..26fcf81 --- /dev/null +++ b/src/components/common/SelectAppTypeComponent.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/common/SelectPeriodComponent.vue b/src/components/common/SelectPeriodComponent.vue new file mode 100644 index 0000000..37dbd14 --- /dev/null +++ b/src/components/common/SelectPeriodComponent.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/src/components/common/SelectYearMonthComponent.vue b/src/components/common/SelectYearMonthComponent.vue new file mode 100644 index 0000000..5c87cfe --- /dev/null +++ b/src/components/common/SelectYearMonthComponent.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/components/dropdowns/AccountDropdown.vue b/src/components/dropdowns/AccountDropdown.vue new file mode 100644 index 0000000..2d5d0c7 --- /dev/null +++ b/src/components/dropdowns/AccountDropdown.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/src/components/dropdowns/AppointmentHisDropDown.vue b/src/components/dropdowns/AppointmentHisDropDown.vue new file mode 100644 index 0000000..15db790 --- /dev/null +++ b/src/components/dropdowns/AppointmentHisDropDown.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/components/dropdowns/DateDropDown.vue b/src/components/dropdowns/DateDropDown.vue new file mode 100644 index 0000000..63bdd67 --- /dev/null +++ b/src/components/dropdowns/DateDropDown.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/components/dropdowns/DisciplineRewardTypeDropDown.vue b/src/components/dropdowns/DisciplineRewardTypeDropDown.vue new file mode 100644 index 0000000..fa84eca --- /dev/null +++ b/src/components/dropdowns/DisciplineRewardTypeDropDown.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/components/dropdowns/DropdownItem.vue b/src/components/dropdowns/DropdownItem.vue new file mode 100644 index 0000000..8258410 --- /dev/null +++ b/src/components/dropdowns/DropdownItem.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/src/components/dropdowns/HalfDropdown.vue b/src/components/dropdowns/HalfDropdown.vue new file mode 100644 index 0000000..bd82bf9 --- /dev/null +++ b/src/components/dropdowns/HalfDropdown.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/dropdowns/PeriodDropDown.vue b/src/components/dropdowns/PeriodDropDown.vue new file mode 100644 index 0000000..cbc74f4 --- /dev/null +++ b/src/components/dropdowns/PeriodDropDown.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/components/dropdowns/ThirtyMinuteDropDown.vue b/src/components/dropdowns/ThirtyMinuteDropDown.vue new file mode 100644 index 0000000..dfe5e86 --- /dev/null +++ b/src/components/dropdowns/ThirtyMinuteDropDown.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/components/dropdowns/TimeDropDown.vue b/src/components/dropdowns/TimeDropDown.vue new file mode 100644 index 0000000..e5d4e25 --- /dev/null +++ b/src/components/dropdowns/TimeDropDown.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/src/components/dropdowns/YearDropDown.vue b/src/components/dropdowns/YearDropDown.vue new file mode 100644 index 0000000..17505c7 --- /dev/null +++ b/src/components/dropdowns/YearDropDown.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/components/dropdowns/YearMonthDropDown.vue b/src/components/dropdowns/YearMonthDropDown.vue new file mode 100644 index 0000000..a12c5ae --- /dev/null +++ b/src/components/dropdowns/YearMonthDropDown.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/components/employee-search/DepartmentHeirarchy.vue b/src/components/employee-search/DepartmentHeirarchy.vue new file mode 100644 index 0000000..66adb12 --- /dev/null +++ b/src/components/employee-search/DepartmentHeirarchy.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/components/employee-search/EmployeeDetail.vue b/src/components/employee-search/EmployeeDetail.vue new file mode 100644 index 0000000..5a1e6fe --- /dev/null +++ b/src/components/employee-search/EmployeeDetail.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/components/employee-search/EmployeeList.vue b/src/components/employee-search/EmployeeList.vue new file mode 100644 index 0000000..27994c5 --- /dev/null +++ b/src/components/employee-search/EmployeeList.vue @@ -0,0 +1,125 @@ + + + + + \ No newline at end of file diff --git a/src/components/employee-search/SearchBar.vue b/src/components/employee-search/SearchBar.vue new file mode 100644 index 0000000..aebd281 --- /dev/null +++ b/src/components/employee-search/SearchBar.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/components/employee-search/TreeNode.vue b/src/components/employee-search/TreeNode.vue new file mode 100644 index 0000000..c222fdf --- /dev/null +++ b/src/components/employee-search/TreeNode.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/components/icons/AddressBookIcon.vue b/src/components/icons/AddressBookIcon.vue new file mode 100644 index 0000000..ad5cb1d --- /dev/null +++ b/src/components/icons/AddressBookIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ArrowLeftIcon.vue b/src/components/icons/ArrowLeftIcon.vue new file mode 100644 index 0000000..c5ad9fd --- /dev/null +++ b/src/components/icons/ArrowLeftIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ArrowUpIcon.vue b/src/components/icons/ArrowUpIcon.vue new file mode 100644 index 0000000..36cbe50 --- /dev/null +++ b/src/components/icons/ArrowUpIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/BuildingIcon.vue b/src/components/icons/BuildingIcon.vue new file mode 100644 index 0000000..3ab36b2 --- /dev/null +++ b/src/components/icons/BuildingIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/CaretDownIcon.vue b/src/components/icons/CaretDownIcon.vue new file mode 100644 index 0000000..9ed8999 --- /dev/null +++ b/src/components/icons/CaretDownIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/CaretLeftIcon.vue b/src/components/icons/CaretLeftIcon.vue new file mode 100644 index 0000000..fdf45f6 --- /dev/null +++ b/src/components/icons/CaretLeftIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/CaretRightIcon.vue b/src/components/icons/CaretRightIcon.vue new file mode 100644 index 0000000..d42ae24 --- /dev/null +++ b/src/components/icons/CaretRightIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/CaretUpIcon.vue b/src/components/icons/CaretUpIcon.vue new file mode 100644 index 0000000..83e5349 --- /dev/null +++ b/src/components/icons/CaretUpIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ChartIcon.vue b/src/components/icons/ChartIcon.vue new file mode 100644 index 0000000..b31e930 --- /dev/null +++ b/src/components/icons/ChartIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/CheckIcon.vue b/src/components/icons/CheckIcon.vue new file mode 100644 index 0000000..f902b59 --- /dev/null +++ b/src/components/icons/CheckIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ChevronDownIcon.vue b/src/components/icons/ChevronDownIcon.vue new file mode 100644 index 0000000..3899799 --- /dev/null +++ b/src/components/icons/ChevronDownIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ChevronLeftIcon.vue b/src/components/icons/ChevronLeftIcon.vue new file mode 100644 index 0000000..603348a --- /dev/null +++ b/src/components/icons/ChevronLeftIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ChevronRightIcon.vue b/src/components/icons/ChevronRightIcon.vue new file mode 100644 index 0000000..5d365af --- /dev/null +++ b/src/components/icons/ChevronRightIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ChevronUpIcon.vue b/src/components/icons/ChevronUpIcon.vue new file mode 100644 index 0000000..25819d0 --- /dev/null +++ b/src/components/icons/ChevronUpIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ClockIcon.vue b/src/components/icons/ClockIcon.vue new file mode 100644 index 0000000..3c5f1af --- /dev/null +++ b/src/components/icons/ClockIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/CopyIcon.vue b/src/components/icons/CopyIcon.vue new file mode 100644 index 0000000..574c072 --- /dev/null +++ b/src/components/icons/CopyIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/EvaluationIcon.vue b/src/components/icons/EvaluationIcon.vue new file mode 100644 index 0000000..943e9dc --- /dev/null +++ b/src/components/icons/EvaluationIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/ExcelIcon.vue b/src/components/icons/ExcelIcon.vue new file mode 100644 index 0000000..976af3d --- /dev/null +++ b/src/components/icons/ExcelIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/FolderCloseIcon.vue b/src/components/icons/FolderCloseIcon.vue new file mode 100644 index 0000000..2ff6f3d --- /dev/null +++ b/src/components/icons/FolderCloseIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/FolerOpenIcon.vue b/src/components/icons/FolerOpenIcon.vue new file mode 100644 index 0000000..cb4405f --- /dev/null +++ b/src/components/icons/FolerOpenIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/GearIcon.vue b/src/components/icons/GearIcon.vue new file mode 100644 index 0000000..c40fc8e --- /dev/null +++ b/src/components/icons/GearIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/HomeIcon.vue b/src/components/icons/HomeIcon.vue new file mode 100644 index 0000000..e21b6a2 --- /dev/null +++ b/src/components/icons/HomeIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/MenuIcon.vue b/src/components/icons/MenuIcon.vue new file mode 100644 index 0000000..70951de --- /dev/null +++ b/src/components/icons/MenuIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/MinusIcon.vue b/src/components/icons/MinusIcon.vue new file mode 100644 index 0000000..80f5269 --- /dev/null +++ b/src/components/icons/MinusIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/PaperClipIcon.vue b/src/components/icons/PaperClipIcon.vue new file mode 100644 index 0000000..a8a6818 --- /dev/null +++ b/src/components/icons/PaperClipIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/PlusIcon.vue b/src/components/icons/PlusIcon.vue new file mode 100644 index 0000000..37ebc1c --- /dev/null +++ b/src/components/icons/PlusIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/QuestionIcon.vue b/src/components/icons/QuestionIcon.vue new file mode 100644 index 0000000..8dafcb5 --- /dev/null +++ b/src/components/icons/QuestionIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/RobotIcon.vue b/src/components/icons/RobotIcon.vue new file mode 100644 index 0000000..b1619cd --- /dev/null +++ b/src/components/icons/RobotIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/SearchIcon.vue b/src/components/icons/SearchIcon.vue new file mode 100644 index 0000000..0c761a8 --- /dev/null +++ b/src/components/icons/SearchIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/UserIcon.vue b/src/components/icons/UserIcon.vue new file mode 100644 index 0000000..eb0a86a --- /dev/null +++ b/src/components/icons/UserIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/icons/XmarkIcon.vue b/src/components/icons/XmarkIcon.vue new file mode 100644 index 0000000..4c5b424 --- /dev/null +++ b/src/components/icons/XmarkIcon.vue @@ -0,0 +1,3 @@ + diff --git a/src/components/modals/CrudModal.vue b/src/components/modals/CrudModal.vue new file mode 100644 index 0000000..26a2fd4 --- /dev/null +++ b/src/components/modals/CrudModal.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/components/modals/ModalBackground.vue b/src/components/modals/ModalBackground.vue new file mode 100644 index 0000000..5fe20de --- /dev/null +++ b/src/components/modals/ModalBackground.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/src/components/modals/ModalItem.vue b/src/components/modals/ModalItem.vue new file mode 100644 index 0000000..d4752e0 --- /dev/null +++ b/src/components/modals/ModalItem.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/modals/NoticeModal.vue b/src/components/modals/NoticeModal.vue new file mode 100644 index 0000000..4b47185 --- /dev/null +++ b/src/components/modals/NoticeModal.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/modals/ResetPasswordModal.vue b/src/components/modals/ResetPasswordModal.vue new file mode 100644 index 0000000..e4cfa60 --- /dev/null +++ b/src/components/modals/ResetPasswordModal.vue @@ -0,0 +1,268 @@ + + + + + + diff --git a/src/components/modals/SettingModal.vue b/src/components/modals/SettingModal.vue new file mode 100644 index 0000000..c9e3f0b --- /dev/null +++ b/src/components/modals/SettingModal.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/components/nav/MenuNav.vue b/src/components/nav/MenuNav.vue new file mode 100644 index 0000000..12fb9ae --- /dev/null +++ b/src/components/nav/MenuNav.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/components/nav/MonthSelectNav.vue b/src/components/nav/MonthSelectNav.vue new file mode 100644 index 0000000..ae4995f --- /dev/null +++ b/src/components/nav/MonthSelectNav.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/src/components/nav/SubMenuNav.vue b/src/components/nav/SubMenuNav.vue new file mode 100644 index 0000000..4a60c60 --- /dev/null +++ b/src/components/nav/SubMenuNav.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/components/salarytable/SalaryTable.vue b/src/components/salarytable/SalaryTable.vue new file mode 100644 index 0000000..83b308e --- /dev/null +++ b/src/components/salarytable/SalaryTable.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/components/semantic/ArticleItem.vue b/src/components/semantic/ArticleItem.vue new file mode 100644 index 0000000..2f14d45 --- /dev/null +++ b/src/components/semantic/ArticleItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/ButtonItem.vue b/src/components/semantic/ButtonItem.vue new file mode 100644 index 0000000..2db09a6 --- /dev/null +++ b/src/components/semantic/ButtonItem.vue @@ -0,0 +1,83 @@ + + + diff --git a/src/components/semantic/FigcaptionItem.vue b/src/components/semantic/FigcaptionItem.vue new file mode 100644 index 0000000..78c5d1a --- /dev/null +++ b/src/components/semantic/FigcaptionItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/FigureItem.vue b/src/components/semantic/FigureItem.vue new file mode 100644 index 0000000..ab25b01 --- /dev/null +++ b/src/components/semantic/FigureItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/FlexItem.vue b/src/components/semantic/FlexItem.vue new file mode 100644 index 0000000..b8389f2 --- /dev/null +++ b/src/components/semantic/FlexItem.vue @@ -0,0 +1,86 @@ + + + diff --git a/src/components/semantic/FooterItem.vue b/src/components/semantic/FooterItem.vue new file mode 100644 index 0000000..3de7e4e --- /dev/null +++ b/src/components/semantic/FooterItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/GridItem.vue b/src/components/semantic/GridItem.vue new file mode 100644 index 0000000..176c63b --- /dev/null +++ b/src/components/semantic/GridItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/HeaderItem.vue b/src/components/semantic/HeaderItem.vue new file mode 100644 index 0000000..1e96192 --- /dev/null +++ b/src/components/semantic/HeaderItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/LiItem.vue b/src/components/semantic/LiItem.vue new file mode 100644 index 0000000..4f0abef --- /dev/null +++ b/src/components/semantic/LiItem.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/components/semantic/MainItem.vue b/src/components/semantic/MainItem.vue new file mode 100644 index 0000000..1a8d959 --- /dev/null +++ b/src/components/semantic/MainItem.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/semantic/NavItem.vue b/src/components/semantic/NavItem.vue new file mode 100644 index 0000000..fb040f7 --- /dev/null +++ b/src/components/semantic/NavItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/SectionItem.vue b/src/components/semantic/SectionItem.vue new file mode 100644 index 0000000..ae23499 --- /dev/null +++ b/src/components/semantic/SectionItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/semantic/TableCell.vue b/src/components/semantic/TableCell.vue new file mode 100644 index 0000000..7b9a5f6 --- /dev/null +++ b/src/components/semantic/TableCell.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/components/semantic/TableItem.vue b/src/components/semantic/TableItem.vue new file mode 100644 index 0000000..4fa6bb3 --- /dev/null +++ b/src/components/semantic/TableItem.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/components/semantic/TableRow.vue b/src/components/semantic/TableRow.vue new file mode 100644 index 0000000..bee4b64 --- /dev/null +++ b/src/components/semantic/TableRow.vue @@ -0,0 +1,11 @@ + + + diff --git a/src/components/semantic/UlItem.vue b/src/components/semantic/UlItem.vue new file mode 100644 index 0000000..39ccb29 --- /dev/null +++ b/src/components/semantic/UlItem.vue @@ -0,0 +1,81 @@ + + + diff --git a/src/components/widgets/MyAttendanceWidget.vue b/src/components/widgets/MyAttendanceWidget.vue new file mode 100644 index 0000000..9d2ac7a --- /dev/null +++ b/src/components/widgets/MyAttendanceWidget.vue @@ -0,0 +1,182 @@ + + + diff --git a/src/components/widgets/MyScheduleWidget.vue b/src/components/widgets/MyScheduleWidget.vue new file mode 100644 index 0000000..26c2f01 --- /dev/null +++ b/src/components/widgets/MyScheduleWidget.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/src/components/widgets/MyTeamMemberWidget.vue b/src/components/widgets/MyTeamMemberWidget.vue new file mode 100644 index 0000000..d5b9a75 --- /dev/null +++ b/src/components/widgets/MyTeamMemberWidget.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/components/widgets/ScheduleDdayWidget.vue b/src/components/widgets/ScheduleDdayWidget.vue new file mode 100644 index 0000000..d0b20d1 --- /dev/null +++ b/src/components/widgets/ScheduleDdayWidget.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/src/components/widgets/WidgetItem.vue b/src/components/widgets/WidgetItem.vue new file mode 100644 index 0000000..9f51517 --- /dev/null +++ b/src/components/widgets/WidgetItem.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..6bbd655 --- /dev/null +++ b/src/main.js @@ -0,0 +1,17 @@ +import './assets/main.css'; + +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; + +import App from './App.vue'; +import router from './router'; + +// import '@fortawesome/fontawesome-free/css/all.css'; +// import '@fortawesome/fontawesome-free/js/all.js'; + +const app = createApp(App); + +app.use(createPinia()); +app.use(router); + +app.mount('#app'); diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..df8e87e --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,661 @@ +import { createRouter, createWebHistory } from 'vue-router'; +import HomeView from '../views/home/HomeView.vue'; +import ChatbotView from '@/views/chatbot/ChatbotView.vue'; +import MyInfoView from '@/views/hr-basic/MyInfoView.vue'; +import AttendanceView from '@/views/hr-basic/AttendanceView.vue'; +import SalaryView from '@/views/hr-basic/SalaryView.vue'; +import ContractView from '@/views/hr-basic/ContractView.vue'; +import PersonalEvalView from '@/views/evaluation/PersonalEvalView.vue'; +import PersonalEvalFindView from '@/views/evaluation/PersonalEvalFindView.vue'; +import PersonalEvalCreateAndFindView from '@/views/evaluation/PersonalEvalCreateAndFindView.vue'; +import FeedbackManageView from '@/views/evaluation/leader/FeedbackManageView.vue'; +import LeaderEvalListView from '@/views/evaluation/leader/LeaderEvalListView.vue'; +import LeaderEvalView from '@/views/evaluation/LeaderEvalView.vue'; +import EvalTaskView from '@/views/evaluation/EvalTaskView.vue'; +import EvalTypeManagementView from '@/views/evaluation/EvalTypeManagementView.vue'; +import EvalPolicyView from '@/views/evaluation/EvalPolicyView.vue'; +import EvalGradeView from '@/views/evaluation/EvalGradeView.vue'; +import EmployeeInfoView from '@/views/hr-management/EmployeeInfoView.vue'; +import EmployeeUploadView from '@/views/hr-management/EmployeeUploadView.vue'; +import DepartmentManagementView from '@/views/hr-management/DepartmentManagementView .vue'; +import AppointmentManagementView from '@/views/hr-management/AppointmentManagementView.vue'; +import VacationManagementView from '@/views/hr-management/VacationManagementView.vue'; +import EmployeeSearchView from '@/views/emp-search/EmployeeSearchView.vue'; +import LoginView from '@/views/login/LoginView.vue'; +import CommuteView from '@/views/hr-basic/attendance/CommuteView.vue'; +import RemoteView from '@/views/hr-basic/attendance/RemoteView.vue'; +import OvertimeView from '@/views/hr-basic/attendance/OvertimeView.vue'; +import LeaveView from '@/views/hr-basic/attendance/LeaveView.vue'; +import ReturnView from '@/views/hr-basic/attendance/ReturnView.vue'; +import BusinessTripView from '@/views/hr-basic/attendance/BusinessTripView.vue'; +import DispatchView from '@/views/hr-basic/attendance/DispatchView.vue'; +import VacationView from '@/views/hr-basic/attendance/VacationView.vue'; +import VacationPaymentView from '@/views/hr-management/vacation/VacationPaymentView.vue'; +import VacationPolicyView from '@/views/hr-management/vacation/VacationPolicyView.vue'; +import CareerInfoUploadView from '@/views/hr-management/employee-upload/CareerInfoUploadView.vue'; +import EducationInfoUploadView from '@/views/hr-management/employee-upload/EducationInfoUploadView.vue'; +import QualificationInfoUploadView from '@/views/hr-management/employee-upload/QualificationInfoUploadView.vue'; +import LanguageTestInfoUploadView from '@/views/hr-management/employee-upload/LanguageTestInfoUploadView.vue'; +import DisciplineRewardInfoUploadView from '@/views/hr-management/employee-upload/DisciplineRewardInfoUploadView.vue'; +import FamilyMemberInfoUploadView from '@/views/hr-management/employee-upload/FamilyMemberInfoUploadView.vue'; +import MyDepartmentView from '@/views/hr-basic/MyDepartmentView.vue'; +import EmployeeInfoUploadView from '@/views/hr-management/employee-upload/EmployeeInfoUploadView.vue'; +import RemoteRequestsView from '@/views/hr-basic/attendance/RemoteRequestsView.vue'; +import OvertimeRequestsView from '@/views/hr-basic/attendance/OvertimeRequestsView.vue'; +import VacationRequestsView from '@/views/hr-basic/attendance/VacationRequestsView.vue'; +import LeaveRequestsView from '@/views/hr-basic/attendance/LeaveRequestsView.vue'; +import ReturnRequestsView from '@/views/hr-basic/attendance/ReturnRequestsView.vue'; +import BusinessTripRequestsView from '@/views/hr-basic/attendance/BusinessTripRequestsView.vue'; +import DispatchRequestsView from '@/views/hr-basic/attendance/DispatchRequestsView.vue'; +import SalaryManagementView from '@/views/hr-management/SalaryManagementView.vue'; +import AppointmentsUploadView from '@/views/hr-management/appointment/AppointmentUploadView.vue'; +import AppointmentsHistoryView from '@/views/hr-management/appointment/AppointmentHistoryView.vue'; +import SalaryDetailView from '@/views/hr-basic/salary/SalaryDetailView.vue'; +import SalaryListView from '@/views/hr-basic/salary/SalaryListView.vue'; +import SeverancePayView from '@/views/hr-basic/salary/SeverancePayView.vue'; + +// 인사기본- 사원 +import ProfileView from '@/views/hr-basic/employee/ProfileView.vue'; +import DisciplineRewardInfoView from '@/views/hr-basic/employee/DisciplineRewardInfoView.vue'; +import EducationInfoView from '@/views/hr-basic/employee/EducationInfoView.vue'; +import FamilyMemberInfoView from '@/views/hr-basic/employee/FamilyMemberInfoView.vue'; +import LanguageTestInfoView from '@/views/hr-basic/employee/LanguageTestInfoView.vue'; +import QualificationInfoView from '@/views/hr-basic/employee/QualificationInfoView.vue'; +import QualificationInfoUpdateView from '@/views/hr-basic/employee/QualificationInfoUpdateView.vue'; +import LanguageTestInfoUpdateView from '@/views/hr-basic/employee/LanguageTestInfoUpdateView.vue'; +import FamilyMemberInfoUpdateView from '@/views/hr-basic/employee/FamilyMemberInfoUpdateView.vue'; +import CareerInfoView from '@/views/hr-basic/employee/CareerInfoVIew.vue'; +import CareerInfoUpdateView from '@/views/hr-basic/employee/CareerInfoUpdateVIew.vue'; +import EducationInfoUpdateView from '@/views/hr-basic/employee/EducationInfoUpdateVIew.vue'; + +// 인사기본- 계약서 +import ContractSignView from '@/views/hr-basic/document/ContractSignView.vue'; +import CertificateView from '@/views/hr-basic/document/CertificateView.vue'; +import EvalPolicyManagementView from '@/views/evaluation/EvalPolicyManagementView.vue'; +import EmployeeSalaryListView from '@/views/hr-management/Salary/EmployeeSalaryListView.vue'; +import IrregularAllowanceView from '@/views/hr-management/Salary/IrregularAllowanceView.vue'; +import DeptTaskUploadView from '@/views/evaluation/leader/DeptTaskUploadView.vue'; +import DeptTaskAssignView from '@/views/evaluation/leader/DeptTaskAssignView.vue'; +import NonTaxableView from '@/views/hr-management/Salary/NonTaxableView.vue'; + +// 인사관리 - 부서 +import DepartmentManagementInformationView from '@/views/hr-management/department/DepartmentManagementInformationView.vue'; +import DepartmentManagementAddView from '@/views/hr-management/department/DepartmentManagementAddView.vue'; +import PeriodicSalaryView from '@/views/hr-basic/salary/PeriodicSalaryView.vue'; + +const routes = [ + { + path: '/', + name: 'home', + component: HomeView, + }, + { + path: '/login', + name: 'login', + component: LoginView, + }, + { + path: '/emp-search', + name: 'emp-search', + component: EmployeeSearchView, + }, + { + path: '/chatbot', + name: 'chatbot', + component: ChatbotView, + }, + { + path: '/hr-basic', + name: 'hr-basic', + redirect: '/hr-basic/my-info/careers', + component: MyInfoView, + }, + // 인사기본- 사원 + { + path: '/hr-basic/my-info', + name: 'hr-basic-my-info', + redirect: '/hr-basic/my-info/careers', + component: MyInfoView, + children: [ + { + path: 'careers', + name: 'hr-basic-career', + component: CareerInfoView, + }, + { + path: 'careers/update', + name: 'hr-basic-career-update', + component: CareerInfoUpdateView, + }, + { + path: 'disciplinerewards', + name: 'hr-basic-discipline-reward', + component: DisciplineRewardInfoView, + }, + { + path: 'educations', + name: 'hr-basic-education', + component: EducationInfoView, + }, + { + path: 'educations/update', + name: 'hr-basic-education-update', + component: EducationInfoUpdateView, + }, + { + path: 'familymembers', + name: 'hr-basic-family-member', + component: FamilyMemberInfoView, + }, + { + path: 'familymembers/update', + name: 'hr-basic-family-member-update', + component: FamilyMemberInfoUpdateView, + }, + { + path: 'languagetests', + name: 'hr-basic-language-test', + component: LanguageTestInfoView, + }, + { + path: 'languagetests/update', + name: 'hr-basic-language-test-update', + component: LanguageTestInfoUpdateView, + }, + { + path: 'qualifications', + name: 'hr-basic-qualification', + component: QualificationInfoView, + }, + { + path: 'qualifications/update', + name: 'hr-basic-qualification-update', + component: QualificationInfoUpdateView, + }, + ], + }, + { + path: '/hr-basic/attendance', + name: 'hr-basic-attendance', + component: AttendanceView, + children: [ + { + path: '', + name: 'hr-basic-attendance-default', + component: CommuteView, + }, + { + path: 'commute', + name: 'hr-basic-attendance-commute', + component: CommuteView, + }, + { + path: 'remote', + name: 'hr-basic-attendance-remote', + component: RemoteView, + }, + { + path: 'remote/requests', + name: 'hr-basic-attendance-remote-requests', + component: RemoteRequestsView, + }, + { + path: 'overtime', + name: 'hr-basic-attendance-overtime', + component: OvertimeView, + }, + { + path: 'overtime/requests', + name: 'hr-basic-attendance-overtime-requests', + component: OvertimeRequestsView, + }, + { + path: 'vacation', + name: 'hr-basic-attendance-vacation', + component: VacationView, + }, + { + path: 'vacation/requests', + name: 'hr-basic-attendance-vacation-requests', + component: VacationRequestsView, + }, + { + path: 'leave', + name: 'hr-basic-attendance-leave', + component: LeaveView, + }, + { + path: 'leave/requests', + name: 'hr-basic-attendance-leave-requests', + component: LeaveRequestsView, + }, + { + path: 'return', + name: 'hr-basic-attendance-return', + component: ReturnView, + }, + { + path: 'return/requests', + name: 'hr-basic-attendance-return-requests', + component: ReturnRequestsView, + }, + { + path: 'business-trip', + name: 'hr-basic-attendance-business-trip', + component: BusinessTripView, + }, + { + path: 'business-trip/requests', + name: 'hr-basic-attendance-business-trip-requests', + component: BusinessTripRequestsView, + }, + { + path: 'dispatch', + name: 'hr-basic-attendance-dispatch', + component: DispatchView, + }, + { + path: 'dispatch/requests', + name: 'hr-basic-attendance-dispatch-requests', + component: DispatchRequestsView, + }, + ], + }, + { + path: '/hr-basic/salary', + name: 'hr-basic-salary', + component: SalaryView, + children: [ + { + path: '', + name: 'hr-basic-salary-default', + component: SalaryListView, + }, + { + path: 'detail/:employeeId', + name: 'hr-basic-salary-detail', + component: SalaryDetailView, + }, + { + path: 'list/:employeeId', + name: 'hr-basic-salary-list', + component: SalaryListView, + }, + { + path: 'severance-pay/:employeeId', + name: 'hr-basic-severance-pay', + component: SeverancePayView, + }, + { + path: 'period', + name: 'hr-basic-salary-period', + component: PeriodicSalaryView, + }, + ], + }, + // 인사기본- 계약서서명 및 재직 증명서 + { + path: '/hr-basic/document', + name: 'hr-basic-document', + component: ContractView, + children: [ + { + path: '', + name: 'hr-basic-document-default', + component: ContractSignView, + }, + { + path: 'contract', + name: 'hr-basic-document-contract', + component: ContractSignView, + }, + { + path: 'certificate', + name: 'hr-basic-document-certificate', + component: CertificateView, + }, + ], + }, + { + path: '/hr-basic/my-department', + name: 'hr-basic-my-department', + props: true, + redirect: '/hr-basic/my-department/info/careers', + component: MyDepartmentView, + children: [ + { + path: 'info/careers', + name: 'dept-mem-career', + props: true, + component: CareerInfoView, + }, + { + path: 'info/disciplinerewards', + name: 'dept-mem-discipline-reward', + props: true, + component: DisciplineRewardInfoView, + }, + { + path: 'info/educations', + name: 'dept-mem-education', + props: true, + component: EducationInfoView, + }, + { + path: 'info/familymembers', + name: 'dept-mem-family-member', + props: true, + component: FamilyMemberInfoView, + }, + { + path: 'info/languagetests', + name: 'dept-mem-language-test', + props: true, + component: LanguageTestInfoView, + }, + { + path: 'info/qualifications', + name: 'dept-mem-qualification', + props: true, + component: QualificationInfoView, + }, + ], + }, + { + path: '/hr-management', + name: 'hr-management', + redirect: '/hr-management/employee/info/careers', + component: EmployeeInfoView, + }, + { + path: '/hr-management/employee/info', + name: 'hr-management-employee-info', + redirect: '/hr-management/employee/info/careers', + component: EmployeeInfoView, + children: [ + { + path: 'careers', + name: 'career', + props: true, + component: CareerInfoView, + }, + { + path: 'disciplinerewards', + name: 'discipline-reward', + props: true, + component: DisciplineRewardInfoView, + }, + { + path: 'educations', + name: 'education', + props: true, + component: EducationInfoView, + }, + { + path: 'familymembers', + name: 'family-member', + props: true, + component: FamilyMemberInfoView, + }, + { + path: 'languagetests', + name: 'language-test', + props: true, + component: LanguageTestInfoView, + }, + { + path: 'qualifications', + name: 'qualification', + props: true, + component: QualificationInfoView, + }, + ], + }, + { + path: '/hr-management/employee/upload', + name: 'hr-management-employee-upload', + redirect: '/hr-management/employee/upload/employees', + component: EmployeeUploadView, + children: [ + { + path: 'employees', + name: 'EmployeeInfo', + component: EmployeeInfoUploadView, + }, + { + path: 'careers', + name: 'CareerInfo', + component: CareerInfoUploadView, + }, + { + path: 'educations', + name: 'EducationInfo', + component: EducationInfoUploadView, + }, + { + path: 'qualifications', + name: 'QualificationInfo', + component: QualificationInfoUploadView, + }, + { + path: 'languagetests', + name: 'LanguageTestInfo', + component: LanguageTestInfoUploadView, + }, + { + path: 'disciplinerewards', + name: 'DisciplineRewardInfo', + component: DisciplineRewardInfoUploadView, + }, + { + path: 'familymembers', + name: 'FamilyMemberInfo', + component: FamilyMemberInfoUploadView, + }, + ], + }, + { + path: '/hr-management/department', + name: 'hr-management-department', + redirect: '/hr-management/department/info', + component: DepartmentManagementView, + children: [ + { + path: '', + name: 'hr-management-department-default', + component: DepartmentManagementInformationView, + redirect: '/hr-management/department/info', + }, + { + path: 'info', + name: 'hr-management-department-info', + component: DepartmentManagementInformationView, + }, + { + path: 'add', + name: 'hr-management-department-add', + component: DepartmentManagementAddView, + }, + ], + }, + { + path: '/hr-management/appointment', + name: 'hr-management-appointment', + redirect: '/hr-management/appointment/upload', + component: AppointmentManagementView, + children: [ + { + path: 'upload', + name: 'upload', + component: AppointmentsUploadView, + }, + { + path: 'history', + name: 'history', + component: AppointmentsHistoryView, + }, + ], + }, + { + path: '/hr-management/vacation', + name: 'hr-management-vacation', + component: VacationManagementView, + children: [ + { + path: '', + name: 'hr-management-vacation-default', + component: VacationPaymentView, + }, + { + path: 'payment', + name: 'hr-management-vacation-payment', + component: VacationPaymentView, + }, + { + path: 'policy', + name: 'hr-management-vacation-policy', + component: VacationPolicyView, + }, + ], + }, + { + path: '/hr-management/salary', + name: 'hr-management-salary', + component: SalaryManagementView, + children: [ + { + path: '', + name: 'hr-management-salary-default', + component: EmployeeSalaryListView, + }, + { + path: 'salary-list', + name: 'hr-management-salary-list', + component: EmployeeSalaryListView, + }, + { + path: 'irregular-allowance', + name: 'hr-management-salary-irregular-allowance', + component: IrregularAllowanceView, + }, + { + path: 'non-taxable-payrolls', + name: 'hr-management-salary-non-taxable-payrolls', + component: NonTaxableView, + }, + ], + }, + { + path: '/evaluation', + name: 'evaluation', + redirect: '/evaluation/personal', + }, + { + path: '/evaluation/personal', + name: 'personal-evaluation', + component: PersonalEvalView, + children: [ + { + path: '', + name: 'evaluation-personal-default', + component: PersonalEvalFindView, + }, + { + path: '1', + name: 'self-evaluation-management', + component: PersonalEvalFindView, + }, + { + path: '2', + name: 'submenu2', + component: PersonalEvalCreateAndFindView, + }, + ], + }, + { + path: '/evaluation/leader', + name: 'leader-evaluation', + component: LeaderEvalView, + children: [ + { + path: '', + name: 'leader-evaluation-default', + component: LeaderEvalListView, + }, + { + path: 'eval-list', + name: 'leader-evaluation-list', + component: LeaderEvalListView, + }, + { + path: 'dept-task/upload', + name: 'dept-task-upload', + component: DeptTaskUploadView, + }, + { + path: 'dept-task/assign', + name: 'dept-task-assign', + component: DeptTaskAssignView, + }, + { + path: 'feedback', + name: 'feedback-management', + component: FeedbackManageView, + }, + ], + }, + { + path: '/evaluation/task', + name: 'evaluation-task', + component: EvalTaskView, + children: [ + { + path: '', + name: 'evaluation-task-default', + component: PersonalEvalCreateAndFindView, + }, + { + path: 'register', + name: 'TaskEvalCreate-view', + component: PersonalEvalCreateAndFindView, + }, + ], + }, + { + path: '/evaluation/policy', + name: 'evaluation-policy', + component: EvalPolicyView, + children: [ + { + path: '', + name: 'eval-policy-default', + component: EvalTypeManagementView, + }, + { + path: 'eval-type', + name: 'eval-type-management', + component: EvalTypeManagementView, + }, + { + path: 'eval-policy', + name: 'eval-policy-management', + component: EvalPolicyManagementView, + }, + { + path: 'eval-grade', + name: 'eval-grade-management', + component: EvalGradeView, + }, + ], + }, +]; + +const router = createRouter({ + history: createWebHistory(), + routes, + scrollBehavior() { + return { top: 0 }; + }, +}); + +export default router; diff --git a/src/stores/counter.js b/src/stores/counter.js new file mode 100644 index 0000000..e884e6d --- /dev/null +++ b/src/stores/counter.js @@ -0,0 +1,12 @@ +import { ref, computed } from 'vue'; +import { defineStore } from 'pinia'; + +export const useCounterStore = defineStore('counter', () => { + const count = ref(0); + const doubleCount = computed(() => count.value * 2); + function increment() { + count.value++; + } + + return { count, doubleCount, increment }; +}); diff --git a/src/views/chatbot/ChatbotView.vue b/src/views/chatbot/ChatbotView.vue new file mode 100644 index 0000000..0ed0db7 --- /dev/null +++ b/src/views/chatbot/ChatbotView.vue @@ -0,0 +1,359 @@ + + + + + diff --git a/src/views/emp-search/EmployeeSearchView.vue b/src/views/emp-search/EmployeeSearchView.vue new file mode 100644 index 0000000..9a7ac38 --- /dev/null +++ b/src/views/emp-search/EmployeeSearchView.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/src/views/evaluation/EvalGradeUpdateModalView.vue b/src/views/evaluation/EvalGradeUpdateModalView.vue new file mode 100644 index 0000000..641619e --- /dev/null +++ b/src/views/evaluation/EvalGradeUpdateModalView.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/views/evaluation/EvalGradeView.vue b/src/views/evaluation/EvalGradeView.vue new file mode 100644 index 0000000..749d5c2 --- /dev/null +++ b/src/views/evaluation/EvalGradeView.vue @@ -0,0 +1,408 @@ + + + + + diff --git a/src/views/evaluation/EvalPolicyManagementView.vue b/src/views/evaluation/EvalPolicyManagementView.vue new file mode 100644 index 0000000..b92aa89 --- /dev/null +++ b/src/views/evaluation/EvalPolicyManagementView.vue @@ -0,0 +1,545 @@ + + + + + + diff --git a/src/views/evaluation/EvalPolicyUpdateAndViewModal.vue b/src/views/evaluation/EvalPolicyUpdateAndViewModal.vue new file mode 100644 index 0000000..8048fb0 --- /dev/null +++ b/src/views/evaluation/EvalPolicyUpdateAndViewModal.vue @@ -0,0 +1,387 @@ + + + + + + diff --git a/src/views/evaluation/EvalPolicyView.vue b/src/views/evaluation/EvalPolicyView.vue new file mode 100644 index 0000000..1b11742 --- /dev/null +++ b/src/views/evaluation/EvalPolicyView.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/evaluation/EvalTaskView.vue b/src/views/evaluation/EvalTaskView.vue new file mode 100644 index 0000000..8e2ae5a --- /dev/null +++ b/src/views/evaluation/EvalTaskView.vue @@ -0,0 +1,118 @@ + + + + + + diff --git a/src/views/evaluation/EvalTypeManagementView.vue b/src/views/evaluation/EvalTypeManagementView.vue new file mode 100644 index 0000000..a332ee0 --- /dev/null +++ b/src/views/evaluation/EvalTypeManagementView.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/src/views/evaluation/LeaderEvalView.vue b/src/views/evaluation/LeaderEvalView.vue new file mode 100644 index 0000000..8a3ee55 --- /dev/null +++ b/src/views/evaluation/LeaderEvalView.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/evaluation/PersonalEvalCreateAndFindView.vue b/src/views/evaluation/PersonalEvalCreateAndFindView.vue new file mode 100644 index 0000000..aff04f3 --- /dev/null +++ b/src/views/evaluation/PersonalEvalCreateAndFindView.vue @@ -0,0 +1,366 @@ + + + + + diff --git a/src/views/evaluation/PersonalEvalFindView.vue b/src/views/evaluation/PersonalEvalFindView.vue new file mode 100644 index 0000000..f6ebc25 --- /dev/null +++ b/src/views/evaluation/PersonalEvalFindView.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/views/evaluation/PersonalEvalView.vue b/src/views/evaluation/PersonalEvalView.vue new file mode 100644 index 0000000..ecf22a7 --- /dev/null +++ b/src/views/evaluation/PersonalEvalView.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/views/evaluation/TaskEvalModal.vue b/src/views/evaluation/TaskEvalModal.vue new file mode 100644 index 0000000..81d53d3 --- /dev/null +++ b/src/views/evaluation/TaskEvalModal.vue @@ -0,0 +1,255 @@ + + + + + + diff --git a/src/views/evaluation/leader/LeaderEvalListView.vue b/src/views/evaluation/leader/LeaderEvalListView.vue new file mode 100644 index 0000000..33952a3 --- /dev/null +++ b/src/views/evaluation/leader/LeaderEvalListView.vue @@ -0,0 +1,244 @@ + + + + + diff --git a/src/views/evaluation/leader/TaskEvalCreateAndUpdateModal.vue b/src/views/evaluation/leader/TaskEvalCreateAndUpdateModal.vue new file mode 100644 index 0000000..77ff313 --- /dev/null +++ b/src/views/evaluation/leader/TaskEvalCreateAndUpdateModal.vue @@ -0,0 +1,172 @@ + + + + + + diff --git a/src/views/home/HomeView.vue b/src/views/home/HomeView.vue new file mode 100644 index 0000000..33b5662 --- /dev/null +++ b/src/views/home/HomeView.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/hr-basic/AttendanceView.vue b/src/views/hr-basic/AttendanceView.vue new file mode 100644 index 0000000..a392574 --- /dev/null +++ b/src/views/hr-basic/AttendanceView.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/views/hr-basic/ContractView.vue b/src/views/hr-basic/ContractView.vue new file mode 100644 index 0000000..030ebeb --- /dev/null +++ b/src/views/hr-basic/ContractView.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/hr-basic/MyDepartmentView.vue b/src/views/hr-basic/MyDepartmentView.vue new file mode 100644 index 0000000..ab5753e --- /dev/null +++ b/src/views/hr-basic/MyDepartmentView.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/views/hr-basic/MyInfoView.vue b/src/views/hr-basic/MyInfoView.vue new file mode 100644 index 0000000..51e1d44 --- /dev/null +++ b/src/views/hr-basic/MyInfoView.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/views/hr-basic/SalaryView.vue b/src/views/hr-basic/SalaryView.vue new file mode 100644 index 0000000..64bb75f --- /dev/null +++ b/src/views/hr-basic/SalaryView.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/views/hr-basic/attendance/BusinessTripRequestsView.vue b/src/views/hr-basic/attendance/BusinessTripRequestsView.vue new file mode 100644 index 0000000..6675630 --- /dev/null +++ b/src/views/hr-basic/attendance/BusinessTripRequestsView.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/hr-basic/attendance/BusinessTripView.vue b/src/views/hr-basic/attendance/BusinessTripView.vue new file mode 100644 index 0000000..4586c8a --- /dev/null +++ b/src/views/hr-basic/attendance/BusinessTripView.vue @@ -0,0 +1,349 @@ + + + + + diff --git a/src/views/hr-basic/attendance/CommuteView.vue b/src/views/hr-basic/attendance/CommuteView.vue new file mode 100644 index 0000000..1a2f136 --- /dev/null +++ b/src/views/hr-basic/attendance/CommuteView.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/src/views/hr-basic/attendance/DispatchRequestsView.vue b/src/views/hr-basic/attendance/DispatchRequestsView.vue new file mode 100644 index 0000000..9839c74 --- /dev/null +++ b/src/views/hr-basic/attendance/DispatchRequestsView.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/hr-basic/attendance/DispatchView.vue b/src/views/hr-basic/attendance/DispatchView.vue new file mode 100644 index 0000000..0b6eafb --- /dev/null +++ b/src/views/hr-basic/attendance/DispatchView.vue @@ -0,0 +1,349 @@ + + + + + diff --git a/src/views/hr-basic/attendance/LeaveRequestsView.vue b/src/views/hr-basic/attendance/LeaveRequestsView.vue new file mode 100644 index 0000000..ba738e8 --- /dev/null +++ b/src/views/hr-basic/attendance/LeaveRequestsView.vue @@ -0,0 +1,272 @@ + + + + + diff --git a/src/views/hr-basic/attendance/LeaveView.vue b/src/views/hr-basic/attendance/LeaveView.vue new file mode 100644 index 0000000..f5c04d4 --- /dev/null +++ b/src/views/hr-basic/attendance/LeaveView.vue @@ -0,0 +1,413 @@ + + + + + diff --git a/src/views/hr-basic/attendance/OvertimeRequestsView.vue b/src/views/hr-basic/attendance/OvertimeRequestsView.vue new file mode 100644 index 0000000..d29ed45 --- /dev/null +++ b/src/views/hr-basic/attendance/OvertimeRequestsView.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/src/views/hr-basic/attendance/OvertimeView.vue b/src/views/hr-basic/attendance/OvertimeView.vue new file mode 100644 index 0000000..15487d0 --- /dev/null +++ b/src/views/hr-basic/attendance/OvertimeView.vue @@ -0,0 +1,539 @@ + + + + + diff --git a/src/views/hr-basic/attendance/RemoteRequestsView.vue b/src/views/hr-basic/attendance/RemoteRequestsView.vue new file mode 100644 index 0000000..c38a5a7 --- /dev/null +++ b/src/views/hr-basic/attendance/RemoteRequestsView.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/src/views/hr-basic/attendance/RemoteView.vue b/src/views/hr-basic/attendance/RemoteView.vue new file mode 100644 index 0000000..2715654 --- /dev/null +++ b/src/views/hr-basic/attendance/RemoteView.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/src/views/hr-basic/attendance/ReturnRequestsView.vue b/src/views/hr-basic/attendance/ReturnRequestsView.vue new file mode 100644 index 0000000..b2313e8 --- /dev/null +++ b/src/views/hr-basic/attendance/ReturnRequestsView.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/src/views/hr-basic/attendance/ReturnView.vue b/src/views/hr-basic/attendance/ReturnView.vue new file mode 100644 index 0000000..6d36dcb --- /dev/null +++ b/src/views/hr-basic/attendance/ReturnView.vue @@ -0,0 +1,430 @@ + + + + + diff --git a/src/views/hr-basic/attendance/VacationRequestsView.vue b/src/views/hr-basic/attendance/VacationRequestsView.vue new file mode 100644 index 0000000..b7d8859 --- /dev/null +++ b/src/views/hr-basic/attendance/VacationRequestsView.vue @@ -0,0 +1,272 @@ + + + + + diff --git a/src/views/hr-basic/attendance/VacationView.vue b/src/views/hr-basic/attendance/VacationView.vue new file mode 100644 index 0000000..1dd1798 --- /dev/null +++ b/src/views/hr-basic/attendance/VacationView.vue @@ -0,0 +1,456 @@ + + + + + diff --git a/src/views/hr-basic/document/CertificateModal.vue b/src/views/hr-basic/document/CertificateModal.vue new file mode 100644 index 0000000..16e76fa --- /dev/null +++ b/src/views/hr-basic/document/CertificateModal.vue @@ -0,0 +1,608 @@ + + + + + diff --git a/src/views/hr-basic/document/CertificateView.vue b/src/views/hr-basic/document/CertificateView.vue new file mode 100644 index 0000000..ca2acc0 --- /dev/null +++ b/src/views/hr-basic/document/CertificateView.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/views/hr-basic/document/ContractSignView.vue b/src/views/hr-basic/document/ContractSignView.vue new file mode 100644 index 0000000..2ce8d9c --- /dev/null +++ b/src/views/hr-basic/document/ContractSignView.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/src/views/hr-basic/document/EmployeeContractModal.vue b/src/views/hr-basic/document/EmployeeContractModal.vue new file mode 100644 index 0000000..739eb08 --- /dev/null +++ b/src/views/hr-basic/document/EmployeeContractModal.vue @@ -0,0 +1,871 @@ + + + + + diff --git a/src/views/hr-basic/document/SecurityContractModal.vue b/src/views/hr-basic/document/SecurityContractModal.vue new file mode 100644 index 0000000..39c3a2c --- /dev/null +++ b/src/views/hr-basic/document/SecurityContractModal.vue @@ -0,0 +1,724 @@ + + + + + diff --git a/src/views/hr-basic/employee/CareerInfoUpdateVIew.vue b/src/views/hr-basic/employee/CareerInfoUpdateVIew.vue new file mode 100644 index 0000000..4b0edc0 --- /dev/null +++ b/src/views/hr-basic/employee/CareerInfoUpdateVIew.vue @@ -0,0 +1,431 @@ + + + + + diff --git a/src/views/hr-basic/employee/CareerInfoVIew.vue b/src/views/hr-basic/employee/CareerInfoVIew.vue new file mode 100644 index 0000000..6beb3df --- /dev/null +++ b/src/views/hr-basic/employee/CareerInfoVIew.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/src/views/hr-basic/employee/DisciplineRewardInfoView.vue b/src/views/hr-basic/employee/DisciplineRewardInfoView.vue new file mode 100644 index 0000000..6b51361 --- /dev/null +++ b/src/views/hr-basic/employee/DisciplineRewardInfoView.vue @@ -0,0 +1,182 @@ + + + + + diff --git a/src/views/hr-basic/employee/EducationInfoUpdateVIew.vue b/src/views/hr-basic/employee/EducationInfoUpdateVIew.vue new file mode 100644 index 0000000..d377e4c --- /dev/null +++ b/src/views/hr-basic/employee/EducationInfoUpdateVIew.vue @@ -0,0 +1,436 @@ + + + + + diff --git a/src/views/hr-basic/employee/EducationInfoView.vue b/src/views/hr-basic/employee/EducationInfoView.vue new file mode 100644 index 0000000..11c0320 --- /dev/null +++ b/src/views/hr-basic/employee/EducationInfoView.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/src/views/hr-basic/employee/FamilyMemberInfoUpdateView.vue b/src/views/hr-basic/employee/FamilyMemberInfoUpdateView.vue new file mode 100644 index 0000000..910dafe --- /dev/null +++ b/src/views/hr-basic/employee/FamilyMemberInfoUpdateView.vue @@ -0,0 +1,449 @@ + + + + + diff --git a/src/views/hr-basic/employee/FamilyMemberInfoView.vue b/src/views/hr-basic/employee/FamilyMemberInfoView.vue new file mode 100644 index 0000000..59e7473 --- /dev/null +++ b/src/views/hr-basic/employee/FamilyMemberInfoView.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/views/hr-basic/employee/LanguageTestInfoUpdateView.vue b/src/views/hr-basic/employee/LanguageTestInfoUpdateView.vue new file mode 100644 index 0000000..eb8f9c2 --- /dev/null +++ b/src/views/hr-basic/employee/LanguageTestInfoUpdateView.vue @@ -0,0 +1,480 @@ + + + + + diff --git a/src/views/hr-basic/employee/LanguageTestInfoView.vue b/src/views/hr-basic/employee/LanguageTestInfoView.vue new file mode 100644 index 0000000..ba7e218 --- /dev/null +++ b/src/views/hr-basic/employee/LanguageTestInfoView.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/src/views/hr-basic/employee/ProfileView.vue b/src/views/hr-basic/employee/ProfileView.vue new file mode 100644 index 0000000..38da084 --- /dev/null +++ b/src/views/hr-basic/employee/ProfileView.vue @@ -0,0 +1,751 @@ + + + + + diff --git a/src/views/hr-basic/employee/QualificationInfoUpdateView.vue b/src/views/hr-basic/employee/QualificationInfoUpdateView.vue new file mode 100644 index 0000000..2514740 --- /dev/null +++ b/src/views/hr-basic/employee/QualificationInfoUpdateView.vue @@ -0,0 +1,446 @@ + + + + + diff --git a/src/views/hr-basic/employee/QualificationInfoView.vue b/src/views/hr-basic/employee/QualificationInfoView.vue new file mode 100644 index 0000000..ffc03ab --- /dev/null +++ b/src/views/hr-basic/employee/QualificationInfoView.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/views/hr-basic/my-department/MyDepartmentAttendance.vue b/src/views/hr-basic/my-department/MyDepartmentAttendance.vue new file mode 100644 index 0000000..1ff3c9e --- /dev/null +++ b/src/views/hr-basic/my-department/MyDepartmentAttendance.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/views/hr-basic/my-department/SearchDepartmentMember.vue b/src/views/hr-basic/my-department/SearchDepartmentMember.vue new file mode 100644 index 0000000..5d20294 --- /dev/null +++ b/src/views/hr-basic/my-department/SearchDepartmentMember.vue @@ -0,0 +1,294 @@ + + + + diff --git a/src/views/hr-basic/salary/PeriodicSalaryView.vue b/src/views/hr-basic/salary/PeriodicSalaryView.vue new file mode 100644 index 0000000..fb811c8 --- /dev/null +++ b/src/views/hr-basic/salary/PeriodicSalaryView.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/src/views/hr-basic/salary/SalaryDetailView.vue b/src/views/hr-basic/salary/SalaryDetailView.vue new file mode 100644 index 0000000..477e198 --- /dev/null +++ b/src/views/hr-basic/salary/SalaryDetailView.vue @@ -0,0 +1,444 @@ + + + + + diff --git a/src/views/hr-basic/salary/SalaryListView.vue b/src/views/hr-basic/salary/SalaryListView.vue new file mode 100644 index 0000000..3380c12 --- /dev/null +++ b/src/views/hr-basic/salary/SalaryListView.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/hr-basic/salary/SeverancePayView.vue b/src/views/hr-basic/salary/SeverancePayView.vue new file mode 100644 index 0000000..e1a3e3a --- /dev/null +++ b/src/views/hr-basic/salary/SeverancePayView.vue @@ -0,0 +1,282 @@ + + + + + diff --git a/src/views/hr-management/AppointmentManagementView.vue b/src/views/hr-management/AppointmentManagementView.vue new file mode 100644 index 0000000..904c34b --- /dev/null +++ b/src/views/hr-management/AppointmentManagementView.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/src/views/hr-management/ContractManagementView.vue b/src/views/hr-management/ContractManagementView.vue new file mode 100644 index 0000000..670e3cd --- /dev/null +++ b/src/views/hr-management/ContractManagementView.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/views/hr-management/DepartmentManagementView .vue b/src/views/hr-management/DepartmentManagementView .vue new file mode 100644 index 0000000..fd97edc --- /dev/null +++ b/src/views/hr-management/DepartmentManagementView .vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/views/hr-management/EmployeeInfoView.vue b/src/views/hr-management/EmployeeInfoView.vue new file mode 100644 index 0000000..0206f20 --- /dev/null +++ b/src/views/hr-management/EmployeeInfoView.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/src/views/hr-management/EmployeeUploadView.vue b/src/views/hr-management/EmployeeUploadView.vue new file mode 100644 index 0000000..695464f --- /dev/null +++ b/src/views/hr-management/EmployeeUploadView.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/src/views/hr-management/Salary/EmployeeSalaryListView.vue b/src/views/hr-management/Salary/EmployeeSalaryListView.vue new file mode 100644 index 0000000..37ba63a --- /dev/null +++ b/src/views/hr-management/Salary/EmployeeSalaryListView.vue @@ -0,0 +1,206 @@ + + + + diff --git a/src/views/hr-management/Salary/IrregularAllowanceView.vue b/src/views/hr-management/Salary/IrregularAllowanceView.vue new file mode 100644 index 0000000..6db3267 --- /dev/null +++ b/src/views/hr-management/Salary/IrregularAllowanceView.vue @@ -0,0 +1,167 @@ + + + + diff --git a/src/views/hr-management/Salary/NonTaxableView.vue b/src/views/hr-management/Salary/NonTaxableView.vue new file mode 100644 index 0000000..c8fc817 --- /dev/null +++ b/src/views/hr-management/Salary/NonTaxableView.vue @@ -0,0 +1,164 @@ + + + + diff --git a/src/views/hr-management/SalaryManagementView.vue b/src/views/hr-management/SalaryManagementView.vue new file mode 100644 index 0000000..f66265b --- /dev/null +++ b/src/views/hr-management/SalaryManagementView.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/src/views/hr-management/VacationManagementView.vue b/src/views/hr-management/VacationManagementView.vue new file mode 100644 index 0000000..abc9c82 --- /dev/null +++ b/src/views/hr-management/VacationManagementView.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/views/hr-management/appointment/AppointmentHistoryView.vue b/src/views/hr-management/appointment/AppointmentHistoryView.vue new file mode 100644 index 0000000..982f90d --- /dev/null +++ b/src/views/hr-management/appointment/AppointmentHistoryView.vue @@ -0,0 +1,349 @@ + + + + + diff --git a/src/views/hr-management/appointment/AppointmentUploadView.vue b/src/views/hr-management/appointment/AppointmentUploadView.vue new file mode 100644 index 0000000..5958a43 --- /dev/null +++ b/src/views/hr-management/appointment/AppointmentUploadView.vue @@ -0,0 +1,535 @@ + + + + + diff --git a/src/views/hr-management/department/DepartmentManagementAddView.vue b/src/views/hr-management/department/DepartmentManagementAddView.vue new file mode 100644 index 0000000..ce4443a --- /dev/null +++ b/src/views/hr-management/department/DepartmentManagementAddView.vue @@ -0,0 +1,310 @@ + + + + + + diff --git a/src/views/hr-management/department/DepartmentManagementInformationView.vue b/src/views/hr-management/department/DepartmentManagementInformationView.vue new file mode 100644 index 0000000..357e308 --- /dev/null +++ b/src/views/hr-management/department/DepartmentManagementInformationView.vue @@ -0,0 +1,449 @@ + + + + + + + diff --git a/src/views/hr-management/department/DepartmentSearch.vue b/src/views/hr-management/department/DepartmentSearch.vue new file mode 100644 index 0000000..d7d3e6e --- /dev/null +++ b/src/views/hr-management/department/DepartmentSearch.vue @@ -0,0 +1,187 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/CareerInfoUploadView.vue b/src/views/hr-management/employee-upload/CareerInfoUploadView.vue new file mode 100644 index 0000000..e41f884 --- /dev/null +++ b/src/views/hr-management/employee-upload/CareerInfoUploadView.vue @@ -0,0 +1,496 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/DisciplineRewardInfoUploadView.vue b/src/views/hr-management/employee-upload/DisciplineRewardInfoUploadView.vue new file mode 100644 index 0000000..77c7c21 --- /dev/null +++ b/src/views/hr-management/employee-upload/DisciplineRewardInfoUploadView.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/EducationInfoUploadView.vue b/src/views/hr-management/employee-upload/EducationInfoUploadView.vue new file mode 100644 index 0000000..5e9b293 --- /dev/null +++ b/src/views/hr-management/employee-upload/EducationInfoUploadView.vue @@ -0,0 +1,498 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/EmployeeInfoUploadView.vue b/src/views/hr-management/employee-upload/EmployeeInfoUploadView.vue new file mode 100644 index 0000000..ee42969 --- /dev/null +++ b/src/views/hr-management/employee-upload/EmployeeInfoUploadView.vue @@ -0,0 +1,524 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/FamilyMemberInfoUploadView.vue b/src/views/hr-management/employee-upload/FamilyMemberInfoUploadView.vue new file mode 100644 index 0000000..11f8e99 --- /dev/null +++ b/src/views/hr-management/employee-upload/FamilyMemberInfoUploadView.vue @@ -0,0 +1,520 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/LanguageTestInfoUploadView.vue b/src/views/hr-management/employee-upload/LanguageTestInfoUploadView.vue new file mode 100644 index 0000000..9276d15 --- /dev/null +++ b/src/views/hr-management/employee-upload/LanguageTestInfoUploadView.vue @@ -0,0 +1,537 @@ + + + + + diff --git a/src/views/hr-management/employee-upload/QualificationInfoUploadView.vue b/src/views/hr-management/employee-upload/QualificationInfoUploadView.vue new file mode 100644 index 0000000..ebd0d3c --- /dev/null +++ b/src/views/hr-management/employee-upload/QualificationInfoUploadView.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/src/views/hr-management/vacation/VacationPaymentView.vue b/src/views/hr-management/vacation/VacationPaymentView.vue new file mode 100644 index 0000000..bd33d3f --- /dev/null +++ b/src/views/hr-management/vacation/VacationPaymentView.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/src/views/hr-management/vacation/VacationPolicyView.vue b/src/views/hr-management/vacation/VacationPolicyView.vue new file mode 100644 index 0000000..f54192a --- /dev/null +++ b/src/views/hr-management/vacation/VacationPolicyView.vue @@ -0,0 +1,419 @@ + + + + + diff --git a/src/views/login/LoginView.vue b/src/views/login/LoginView.vue new file mode 100644 index 0000000..cf53cdd --- /dev/null +++ b/src/views/login/LoginView.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..63d1997 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,16 @@ +import { fileURLToPath, URL } from 'node:url' + +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, + }, +})