diff --git a/__debug_bin1282941245 b/__debug_bin1282941245 deleted file mode 100755 index faf2c62..0000000 Binary files a/__debug_bin1282941245 and /dev/null differ diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000..de12787 --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,31 @@ +# EditorConfig is awesome: https://editorconfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true + +# Matches multiple files with brace expansion notation +# Set default charset +[*.{js,vue,json}] +indent_style = space +indent_size = 2 + + +# 4 space indentation +[*.py] +indent_style = space +indent_size = 4 + +# Tab indentation (no size specified) +[Makefile] +indent_style = tab + +# Matches the exact files either package.json or .travis.yml +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/frontend/.fun.yaml b/frontend/.fun.yaml deleted file mode 100644 index 64ee32d..0000000 --- a/frontend/.fun.yaml +++ /dev/null @@ -1,10 +0,0 @@ -gen: - model: - dsn: __DSN - source: postgres - schema: public - path: ./database - ignores: [] # ignore tables - types: - kube_pods: # table name - labels: functl/pkg/pg.JsonMap # column type diff --git a/frontend/.gitignore b/frontend/.gitignore index a547bf3..8ee54e8 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -8,17 +8,23 @@ 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 -.DS_Store *.suo *.ntvs* *.njsproj *.sln *.sw? + +*.tsbuildinfo diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/frontend/README.md b/frontend/README.md index 33895ab..6a017e8 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,5 +1,29 @@ -# Vue 3 + TypeScript + Vite +# b -This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` + diff --git a/frontend/jsconfig.json b/frontend/jsconfig.json new file mode 100644 index 0000000..5a1f2d2 --- /dev/null +++ b/frontend/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + }, + "exclude": ["node_modules", "dist"] +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 828a07f..977059f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,30 +1,26 @@ { - "name": "tg-show", + "name": "b", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "tg-show", + "name": "b", "version": "0.0.0", "dependencies": { "@headlessui/vue": "^1.7.23", "@heroicons/vue": "^2.1.5", "axios": "^1.7.7", - "vue": "^3.4.37", - "vue-router": "^4.4.5" + "pinia": "^2.1.7", + "vue": "^3.4.29", + "vue-router": "^4.3.3" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.1.2", + "@vitejs/plugin-vue": "^5.0.5", "autoprefixer": "^10.4.20", - "nodemon": "^3.1.6", "postcss": "^8.4.47", "tailwindcss": "^3.4.12", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.5.3", - "vite": "^5.4.1", - "vue-tsc": "^2.0.29" + "vite": "^5.3.1" } }, "node_modules/@alloc/quick-lru": { @@ -87,30 +83,6 @@ "node": ">=6.9.0" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -646,9 +618,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.3.tgz", - "integrity": "sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.0.tgz", + "integrity": "sha512-/IZQvg6ZR0tAkEi4tdXOraQoWeJy9gbQ/cx4I7k9dJaCk9qrXEcdouxRVz5kZXt5C2bQ9pILoAA+KB4C/d3pfw==", "cpu": [ "arm" ], @@ -660,9 +632,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.3.tgz", - "integrity": "sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.0.tgz", + "integrity": "sha512-ETHi4bxrYnvOtXeM7d4V4kZWixib2jddFacJjsOjwbgYSRsyXYtZHC4ht134OsslPIcnkqT+TKV4eU8rNBKyyQ==", "cpu": [ "arm64" ], @@ -674,9 +646,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.3.tgz", - "integrity": "sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.0.tgz", + "integrity": "sha512-ZWgARzhSKE+gVUX7QWaECoRQsPwaD8ZR0Oxb3aUpzdErTvlEadfQpORPXkKSdKbFci9v8MJfkTtoEHnnW9Ulng==", "cpu": [ "arm64" ], @@ -688,9 +660,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.3.tgz", - "integrity": "sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.0.tgz", + "integrity": "sha512-h0ZAtOfHyio8Az6cwIGS+nHUfRMWBDO5jXB8PQCARVF6Na/G6XS2SFxDl8Oem+S5ZsHQgtsI7RT4JQnI1qrlaw==", "cpu": [ "x64" ], @@ -702,9 +674,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.3.tgz", - "integrity": "sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.0.tgz", + "integrity": "sha512-9pxQJSPwFsVi0ttOmqLY4JJ9pg9t1gKhK0JDbV1yUEETSx55fdyCjt39eBQ54OQCzAF0nVGO6LfEH1KnCPvelA==", "cpu": [ "arm" ], @@ -716,9 +688,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.3.tgz", - "integrity": "sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.0.tgz", + "integrity": "sha512-YJ5Ku5BmNJZb58A4qSEo3JlIG4d3G2lWyBi13ABlXzO41SsdnUKi3HQHe83VpwBVG4jHFTW65jOQb8qyoR+qzg==", "cpu": [ "arm" ], @@ -730,9 +702,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.3.tgz", - "integrity": "sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.0.tgz", + "integrity": "sha512-U4G4u7f+QCqHlVg1Nlx+qapZy+QoG+NV6ux+upo/T7arNGwKvKP2kmGM4W5QTbdewWFgudQxi3kDNST9GT1/mg==", "cpu": [ "arm64" ], @@ -744,9 +716,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.3.tgz", - "integrity": "sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.0.tgz", + "integrity": "sha512-aQpNlKmx3amwkA3a5J6nlXSahE1ijl0L9KuIjVOUhfOh7uw2S4piR3mtpxpRtbnK809SBtyPsM9q15CPTsY7HQ==", "cpu": [ "arm64" ], @@ -758,9 +730,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.3.tgz", - "integrity": "sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.0.tgz", + "integrity": "sha512-9fx6Zj/7vve/Fp4iexUFRKb5+RjLCff6YTRQl4CoDhdMfDoobWmhAxQWV3NfShMzQk1Q/iCnageFyGfqnsmeqQ==", "cpu": [ "ppc64" ], @@ -772,9 +744,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.3.tgz", - "integrity": "sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.0.tgz", + "integrity": "sha512-VWQiCcN7zBgZYLjndIEh5tamtnKg5TGxyZPWcN9zBtXBwfcGSZ5cHSdQZfQH/GB4uRxk0D3VYbOEe/chJhPGLQ==", "cpu": [ "riscv64" ], @@ -786,9 +758,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.3.tgz", - "integrity": "sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.0.tgz", + "integrity": "sha512-EHmPnPWvyYqncObwqrosb/CpH3GOjE76vWVs0g4hWsDRUVhg61hBmlVg5TPXqF+g+PvIbqkC7i3h8wbn4Gp2Fg==", "cpu": [ "s390x" ], @@ -800,9 +772,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.3.tgz", - "integrity": "sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.0.tgz", + "integrity": "sha512-tsSWy3YQzmpjDKnQ1Vcpy3p9Z+kMFbSIesCdMNgLizDWFhrLZIoN21JSq01g+MZMDFF+Y1+4zxgrlqPjid5ohg==", "cpu": [ "x64" ], @@ -814,9 +786,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.3.tgz", - "integrity": "sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.0.tgz", + "integrity": "sha512-anr1Y11uPOQrpuU8XOikY5lH4Qu94oS6j0xrulHk3NkLDq19MlX8Ng/pVipjxBJ9a2l3+F39REZYyWQFkZ4/fw==", "cpu": [ "x64" ], @@ -828,9 +800,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.3.tgz", - "integrity": "sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.0.tgz", + "integrity": "sha512-7LB+Bh+Ut7cfmO0m244/asvtIGQr5pG5Rvjz/l1Rnz1kDzM02pSX9jPaS0p+90H5I1x4d1FkCew+B7MOnoatNw==", "cpu": [ "arm64" ], @@ -842,9 +814,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.3.tgz", - "integrity": "sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.0.tgz", + "integrity": "sha512-+3qZ4rer7t/QsC5JwMpcvCVPRcJt1cJrYS/TMJZzXIJbxWFQEVhrIc26IhB+5Z9fT9umfVc+Es2mOZgl+7jdJQ==", "cpu": [ "ia32" ], @@ -856,9 +828,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz", - "integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.0.tgz", + "integrity": "sha512-YdicNOSJONVx/vuPkgPTyRoAPx3GbknBZRCOUkK84FJ/YTfs/F0vl/YsMscrB6Y177d+yDRcj+JWMPMCgshwrA==", "cpu": [ "x64" ], @@ -895,34 +867,6 @@ "vue": "^2.7.0 || ^3.0.0" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@types/estree/-/estree-1.0.5.tgz", @@ -930,17 +874,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://npm.hub.ipao.vip/repository/npm/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.19.2" - } - }, "node_modules/@vitejs/plugin-vue": { "version": "5.1.4", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@vitejs/plugin-vue/-/plugin-vue-5.1.4.tgz", @@ -955,35 +888,6 @@ "vue": "^3.2.25" } }, - "node_modules/@volar/language-core": { - "version": "2.4.5", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@volar/language-core/-/language-core-2.4.5.tgz", - "integrity": "sha512-F4tA0DCO5Q1F5mScHmca0umsi2ufKULAnMOVBfMsZdT4myhVl4WdKRwCaKcfOkIEuyrAVvtq1ESBdZ+rSyLVww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.5" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.5", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@volar/source-map/-/source-map-2.4.5.tgz", - "integrity": "sha512-varwD7RaKE2J/Z+Zu6j3mNNJbNT394qIxXwdvz/4ao/vxOfyClZpSDtLKkwWmecinkOVos5+PWkWraelfMLfpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.5", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@volar/typescript/-/typescript-2.4.5.tgz", - "integrity": "sha512-mcT1mHvLljAEtHviVcBuOyAwwMKz1ibXTi5uYtP/pf4XxoAzpdkQ+Br2IC0NPCvLCbjPZmbf3I0udndkfB1CDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.5", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, "node_modules/@vue/compiler-core": { "version": "3.5.6", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@vue/compiler-core/-/compiler-core-3.5.6.tgz", @@ -1034,48 +938,12 @@ "@vue/shared": "3.5.6" } }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, "node_modules/@vue/devtools-api": { "version": "6.6.4", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@vue/devtools-api/-/devtools-api-6.6.4.tgz", "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", "license": "MIT" }, - "node_modules/@vue/language-core": { - "version": "2.1.6", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@vue/language-core/-/language-core-2.1.6.tgz", - "integrity": "sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "~2.4.1", - "@vue/compiler-dom": "^3.4.0", - "@vue/compiler-vue2": "^2.7.16", - "@vue/shared": "^3.4.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, "node_modules/@vue/reactivity": { "version": "3.5.6", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/@vue/reactivity/-/reactivity-3.5.6.tgz", @@ -1126,32 +994,6 @@ "integrity": "sha512-eidH0HInnL39z6wAt6SFIwBrvGOpDWsDxlw3rCgo1B+CQ1781WzQUSU3YjxgdkcJo9Q8S6LmXTkvI+cLHGkQfA==", "license": "MIT" }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://npm.hub.ipao.vip/repository/npm/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ansi-regex": { "version": "6.1.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/ansi-regex/-/ansi-regex-6.1.0.tgz", @@ -1208,7 +1050,7 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/asynckit/-/asynckit-0.4.0.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "license": "MIT" }, @@ -1252,7 +1094,7 @@ }, "node_modules/axios": { "version": "1.7.7", - "resolved": "https://npm.hub.ipao.vip/repository/npm/axios/-/axios-1.7.7.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/axios/-/axios-1.7.7.tgz", "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "license": "MIT", "dependencies": { @@ -1348,9 +1190,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "version": "1.0.30001662", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", + "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", "dev": true, "funding": [ { @@ -1428,7 +1270,7 @@ }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://npm.hub.ipao.vip/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", "dependencies": { @@ -1448,27 +1290,6 @@ "node": ">= 6" } }, - "node_modules/computeds": { - "version": "0.0.1", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1503,34 +1324,9 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://npm.hub.ipao.vip/repository/npm/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "license": "MIT", "engines": { @@ -1544,16 +1340,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://npm.hub.ipao.vip/repository/npm/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/dlv/-/dlv-1.1.3.tgz", @@ -1704,7 +1490,7 @@ }, "node_modules/follow-redirects": { "version": "1.15.9", - "resolved": "https://npm.hub.ipao.vip/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { @@ -1741,7 +1527,7 @@ }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/form-data/-/form-data-4.0.0.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "license": "MIT", "dependencies": { @@ -1826,16 +1612,6 @@ "node": ">=10.13.0" } }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/hasown/-/hasown-2.0.2.tgz", @@ -1849,23 +1625,6 @@ "node": ">= 0.4" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true, - "license": "ISC" - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1971,19 +1730,6 @@ "jiti": "bin/jiti.js" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://npm.hub.ipao.vip/repository/npm/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/lilconfig": { "version": "2.1.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/lilconfig/-/lilconfig-2.1.0.tgz", @@ -2017,13 +1763,6 @@ "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://npm.hub.ipao.vip/repository/npm/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/merge2/-/merge2-1.4.1.tgz", @@ -2050,7 +1789,7 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/mime-db/-/mime-db-1.52.0.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { @@ -2059,7 +1798,7 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://npm.hub.ipao.vip/repository/npm/mime-types/-/mime-types-2.1.35.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { @@ -2085,16 +1824,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://npm.hub.ipao.vip/repository/npm/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/minipass/-/minipass-7.1.2.tgz", @@ -2105,20 +1834,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://npm.hub.ipao.vip/repository/npm/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/mz/-/mz-2.7.0.tgz", @@ -2156,59 +1871,6 @@ "dev": true, "license": "MIT" }, - "node_modules/nodemon": { - "version": "3.1.6", - "resolved": "https://npm.hub.ipao.vip/repository/npm/nodemon/-/nodemon-3.1.6.tgz", - "integrity": "sha512-C8ymJbXpTTinxjWuMfMxw0rZhTn/r7ypSGldQyqPEgDEaVwAthqC0aodsMwontnAInN9TuPwRLeBoyhmfv+iSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://npm.hub.ipao.vip/repository/npm/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://npm.hub.ipao.vip/repository/npm/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2256,13 +1918,6 @@ "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/path-key/-/path-key-3.1.1.tgz", @@ -2326,6 +1981,58 @@ "node": ">=0.10.0" } }, + "node_modules/pinia": { + "version": "2.2.2", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/pinia/-/pinia-2.2.2.tgz", + "integrity": "sha512-ja2XqFWZC36mupU4z1ZzxeTApV7DOw44cV4dhQ9sGwun+N89v/XP7+j7q6TanS1u1tdbK4r+1BUx7heMaIdagA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/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/pirates": { "version": "4.0.6", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/pirates/-/pirates-4.0.6.tgz", @@ -2500,17 +2207,10 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://npm.hub.ipao.vip/repository/npm/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true, - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2585,9 +2285,9 @@ } }, "node_modules/rollup": { - "version": "4.21.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/rollup/-/rollup-4.21.3.tgz", - "integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==", + "version": "4.22.0", + "resolved": "https://npm.hub.ipao.vip:88/repository/npm/rollup/-/rollup-4.22.0.tgz", + "integrity": "sha512-W21MUIFPZ4+O2Je/EU+GP3iz7PH4pVPUXSbEZdatQnxo29+3rsUjgrJmzuAZU24z7yRAnFN6ukxeAhZh/c7hzg==", "dev": true, "license": "MIT", "dependencies": { @@ -2601,22 +2301,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.3", - "@rollup/rollup-android-arm64": "4.21.3", - "@rollup/rollup-darwin-arm64": "4.21.3", - "@rollup/rollup-darwin-x64": "4.21.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.3", - "@rollup/rollup-linux-arm-musleabihf": "4.21.3", - "@rollup/rollup-linux-arm64-gnu": "4.21.3", - "@rollup/rollup-linux-arm64-musl": "4.21.3", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.3", - "@rollup/rollup-linux-riscv64-gnu": "4.21.3", - "@rollup/rollup-linux-s390x-gnu": "4.21.3", - "@rollup/rollup-linux-x64-gnu": "4.21.3", - "@rollup/rollup-linux-x64-musl": "4.21.3", - "@rollup/rollup-win32-arm64-msvc": "4.21.3", - "@rollup/rollup-win32-ia32-msvc": "4.21.3", - "@rollup/rollup-win32-x64-msvc": "4.21.3", + "@rollup/rollup-android-arm-eabi": "4.22.0", + "@rollup/rollup-android-arm64": "4.22.0", + "@rollup/rollup-darwin-arm64": "4.22.0", + "@rollup/rollup-darwin-x64": "4.22.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.0", + "@rollup/rollup-linux-arm-musleabihf": "4.22.0", + "@rollup/rollup-linux-arm64-gnu": "4.22.0", + "@rollup/rollup-linux-arm64-musl": "4.22.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.0", + "@rollup/rollup-linux-riscv64-gnu": "4.22.0", + "@rollup/rollup-linux-s390x-gnu": "4.22.0", + "@rollup/rollup-linux-x64-gnu": "4.22.0", + "@rollup/rollup-linux-x64-musl": "4.22.0", + "@rollup/rollup-win32-arm64-msvc": "4.22.0", + "@rollup/rollup-win32-ia32-msvc": "4.22.0", + "@rollup/rollup-win32-x64-msvc": "4.22.0", "fsevents": "~2.3.2" } }, @@ -2644,19 +2344,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2693,19 +2380,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/source-map-js/-/source-map-js-1.2.1.tgz", @@ -2819,16 +2493,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/sucrase/-/sucrase-3.35.0.tgz", @@ -2852,19 +2516,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -2961,16 +2612,6 @@ "node": ">=8.0" } }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "dev": true, - "license": "ISC", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -2978,101 +2619,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://npm.hub.ipao.vip/repository/npm/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/arg": { - "version": "4.1.3", - "resolved": "https://npm.hub.ipao.vip/repository/npm/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://npm.hub.ipao.vip/repository/npm/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://npm.hub.ipao.vip/repository/npm/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://npm.hub.ipao.vip/repository/npm/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT", - "peer": true - }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", @@ -3111,13 +2657,6 @@ "dev": true, "license": "MIT" }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, "node_modules/vite": { "version": "5.4.6", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/vite/-/vite-5.4.6.tgz", @@ -3178,13 +2717,6 @@ } } }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true, - "license": "MIT" - }, "node_modules/vue": { "version": "3.5.6", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/vue/-/vue-3.5.6.tgz", @@ -3221,24 +2753,6 @@ "vue": "^3.2.0" } }, - "node_modules/vue-tsc": { - "version": "2.1.6", - "resolved": "https://npm.hub.ipao.vip:88/repository/npm/vue-tsc/-/vue-tsc-2.1.6.tgz", - "integrity": "sha512-f98dyZp5FOukcYmbFpuSCJ4Z0vHSOSmxGttZJCsFeX0M4w/Rsq0s4uKXjcSRsZqsRgQa6z7SfuO+y0HVICE57Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "~2.4.1", - "@vue/language-core": "2.1.6", - "semver": "^7.5.4" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://npm.hub.ipao.vip:88/repository/npm/which/-/which-2.0.2.tgz", @@ -3365,16 +2879,6 @@ "engines": { "node": ">= 14" } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://npm.hub.ipao.vip/repository/npm/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } } } } diff --git a/frontend/package.json b/frontend/package.json index 034f5b5..3fcf7fc 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,30 +1,26 @@ { - "name": "tg-show", - "private": true, + "name": "b", "version": "0.0.0", + "private": true, "type": "module", "scripts": { "dev": "vite --host 0.0.0.0", - "build": "vue-tsc -b && vite build", + "build": "vite build", "preview": "vite preview" }, "dependencies": { "@headlessui/vue": "^1.7.23", "@heroicons/vue": "^2.1.5", "axios": "^1.7.7", - "vue": "^3.4.37", - "vue-router": "^4.4.5" + "pinia": "^2.1.7", + "vue": "^3.4.29", + "vue-router": "^4.3.3" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.1.2", + "@vitejs/plugin-vue": "^5.0.5", "autoprefixer": "^10.4.20", - "nodemon": "^3.1.6", "postcss": "^8.4.47", "tailwindcss": "^3.4.12", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.5.3", - "vite": "^5.4.1", - "vue-tsc": "^2.0.29" + "vite": "^5.3.1" } } diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/frontend/public/favicon.ico differ diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/frontend/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/src/.gitignore b/frontend/src/.gitignore deleted file mode 100644 index 25fa0c7..0000000 --- a/frontend/src/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ - -*.js -*.vue.js \ No newline at end of file diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 7051ad1..8fa1f12 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,11 +1,15 @@ - - + + diff --git a/frontend/src/style.css b/frontend/src/assets/main.css similarity index 100% rename from frontend/src/style.css rename to frontend/src/assets/main.css diff --git a/frontend/src/components/ListItem.vue b/frontend/src/components/ListItem.vue index 9017bf6..a992a25 100644 --- a/frontend/src/components/ListItem.vue +++ b/frontend/src/components/ListItem.vue @@ -1,19 +1,20 @@ - diff --git a/frontend/src/components/MediaItem.vue b/frontend/src/components/MediaItem.vue index a2e5c6a..7c5fbc7 100644 --- a/frontend/src/components/MediaItem.vue +++ b/frontend/src/components/MediaItem.vue @@ -1,19 +1,13 @@ - diff --git a/frontend/src/components/MediaPhoto.vue b/frontend/src/components/MediaPhoto.vue index de5f584..5affdb0 100644 --- a/frontend/src/components/MediaPhoto.vue +++ b/frontend/src/components/MediaPhoto.vue @@ -1,28 +1,18 @@ - diff --git a/frontend/src/data.ts b/frontend/src/data.ts deleted file mode 100644 index 3ae572c..0000000 --- a/frontend/src/data.ts +++ /dev/null @@ -1,37 +0,0 @@ -export default [ - { - "photo": "https://picsum.photos/300/300", - "msg_id": 26701, - "asset_id": 6330272214070443931 - }, - { - "photo": "https://picsum.photos/300/300", - "msg_id": 26702, - "asset_id": 6330272214070443932 - }, - { - "photo": "https://picsum.photos/300/300", - "msg_id": 26703, - "asset_id": 6330272214070443933 - }, - { - "photo": "https://picsum.photos/300/300", - "msg_id": 26704, - "asset_id": 6330272214070443934 - }, - { - "msg_id": 26705, - "asset_id": 6330272213614202883, - "document": { - "Ext": ".mp4", - "Size": 2235348, - "Video": { - "Width": 576, - "Height": 1280, - "Duration": 25.147 - }, - "Filename": "", - "MimeType": "video/mp4" - } - } -] \ No newline at end of file diff --git a/frontend/src/fixtures/channels.js b/frontend/src/fixtures/channels.js new file mode 100644 index 0000000..0d96b4b --- /dev/null +++ b/frontend/src/fixtures/channels.js @@ -0,0 +1,200 @@ +export default [ + { + "ID": 17, + "UUID": 1811965783, + "Username": "zhudayigebaipiao", + "Title": "𝖥𝗋𝖾𝖾 𝖢𝗁𝖺𝗇𝗇𝖾𝗅🐸", + "CreatedAt": "2024-09-12T10:26:09.874+08:00", + "UpdatedAt": "2024-09-12T10:26:09.874+08:00", + "Offset": 501, + "MinID": 501, + "ExportMedia": false + }, + { + "ID": 3, + "UUID": 1674292882, + "Username": "Aliyun_4K_Movies", + "Title": "阿里云盘4K影视", + "CreatedAt": "2024-09-02T18:59:18.782+08:00", + "UpdatedAt": "2024-09-02T18:59:18.782+08:00", + "Offset": 27022, + "MinID": 27022, + "ExportMedia": false + }, + { + "ID": 19, + "UUID": 1855542885, + "Username": "meinvshouji", + "Title": "美女收集器👗", + "CreatedAt": "2024-09-13T08:52:07.72+08:00", + "UpdatedAt": "2024-09-13T08:52:07.72+08:00", + "Offset": 1339, + "MinID": 1339, + "ExportMedia": true + }, + { + "ID": 8, + "UUID": 1117480027, + "Username": "ruyoblog", + "Title": "如有乐享", + "CreatedAt": "2024-09-02T19:46:24.462+08:00", + "UpdatedAt": "2024-09-02T19:46:24.462+08:00", + "Offset": 4306, + "MinID": 4306, + "ExportMedia": false + }, + { + "ID": 4, + "UUID": 1651435712, + "Username": "abskoop", + "Title": "ahhhhfs|A姐分享", + "CreatedAt": "2024-09-02T19:10:15.728+08:00", + "UpdatedAt": "2024-09-02T19:10:15.728+08:00", + "Offset": 8628, + "MinID": 8628, + "ExportMedia": false + }, + { + "ID": 5, + "UUID": 1469109660, + "Username": "shareAliyun", + "Title": "阿里云盘发布频道", + "CreatedAt": "2024-09-02T19:13:23.865+08:00", + "UpdatedAt": "2024-09-02T19:13:23.865+08:00", + "Offset": 66151, + "MinID": 66151, + "ExportMedia": false + }, + { + "ID": 10, + "UUID": 2081161978, + "Username": "hackerNewsSummary007", + "Title": "Hacker News 中文摘要", + "CreatedAt": "2024-09-02T23:07:22.335+08:00", + "UpdatedAt": "2024-09-02T23:07:22.335+08:00", + "Offset": 1522, + "MinID": 1522, + "ExportMedia": false + }, + { + "ID": 15, + "UUID": 1361351430, + "Username": "chiguamaopao", + "Title": "吃瓜冒泡吧", + "CreatedAt": "2024-09-12T10:14:06.746+08:00", + "UpdatedAt": "2024-09-12T10:14:06.746+08:00", + "Offset": 11634, + "MinID": 11634, + "ExportMedia": true + }, + { + "ID": 11, + "UUID": 1166415755, + "Username": "buliang00", + "Title": "不良林", + "CreatedAt": "2024-09-02T23:09:25.094+08:00", + "UpdatedAt": "2024-09-02T23:09:25.094+08:00", + "Offset": 192, + "MinID": 192, + "ExportMedia": false + }, + { + "ID": 18, + "UUID": 1443355998, + "Username": "biubiubiuchat", + "Title": "小岛电波", + "CreatedAt": "2024-09-12T10:39:38.504+08:00", + "UpdatedAt": "2024-09-12T10:39:38.504+08:00", + "Offset": 948, + "MinID": 948, + "ExportMedia": true + }, + { + "ID": 20, + "UUID": 1723117448, + "Username": "yunying23", + "Title": "自媒体运营秘籍", + "CreatedAt": "2024-09-13T09:16:22.942+08:00", + "UpdatedAt": "2024-09-13T09:16:22.942+08:00", + "Offset": 3937, + "MinID": 3937, + "ExportMedia": true + }, + { + "ID": 14, + "UUID": 2041671763, + "Username": "cgblz", + "Title": "吃瓜爆料站(苹果看不了👉🏾@cgbl8)", + "CreatedAt": "2024-09-03T00:30:15.126+08:00", + "UpdatedAt": "2024-09-03T00:30:15.126+08:00", + "Offset": 26805, + "MinID": 26805, + "ExportMedia": true + }, + { + "ID": 16, + "UUID": 1851814415, + "Username": "plmmyyds", + "Title": "妹子即正义😘", + "CreatedAt": "2024-09-12T10:18:39.159+08:00", + "UpdatedAt": "2024-09-12T10:18:39.159+08:00", + "Offset": 9519, + "MinID": 9519, + "ExportMedia": true + }, + { + "ID": 13, + "UUID": 2023304596, + "Username": "", + "Title": "爆料瓜田", + "CreatedAt": "2024-09-02T23:34:26.949+08:00", + "UpdatedAt": "2024-09-02T23:34:26.949+08:00", + "Offset": 2874, + "MinID": 2874, + "ExportMedia": true + }, + { + "ID": 6, + "UUID": 1604423588, + "Username": "meizitu3", + "Title": "朱颜别镜 | 妹子图 | 美女图", + "CreatedAt": "2024-09-02T19:16:04.812+08:00", + "UpdatedAt": "2024-09-02T19:16:04.812+08:00", + "Offset": 7177, + "MinID": 7177, + "ExportMedia": true + }, + { + "ID": 12, + "UUID": 1341930464, + "Username": "woshadiao", + "Title": "每日沙雕墙", + "CreatedAt": "2024-09-02T23:18:11.31+08:00", + "UpdatedAt": "2024-09-02T23:18:11.31+08:00", + "Offset": 163088, + "MinID": 163088, + "ExportMedia": true + }, + { + "ID": 7, + "UUID": 1320622866, + "Username": "DNSPODT", + "Title": "LoopDNS资讯播报", + "CreatedAt": "2024-09-02T19:34:57.663+08:00", + "UpdatedAt": "2024-09-02T19:34:57.663+08:00", + "Offset": 5507, + "MinID": 5507, + "ExportMedia": false + }, + { + "ID": 2, + "UUID": 1762530683, + "Username": "yunpanshare", + "Title": "网盘资源收藏(夸克)", + "CreatedAt": "2024-09-02T18:33:38.418+08:00", + "UpdatedAt": "2024-09-02T18:33:38.418+08:00", + "Offset": 71495, + "MinID": 71495, + "ExportMedia": false + } +] diff --git a/frontend/src/fixtures/index.js b/frontend/src/fixtures/index.js new file mode 100644 index 0000000..cb26170 --- /dev/null +++ b/frontend/src/fixtures/index.js @@ -0,0 +1,4 @@ +import channels from "./channels" +import messages from "./messages" + +export default { channels, messages } diff --git a/frontend/src/fixtures/messages.js b/frontend/src/fixtures/messages.js new file mode 100644 index 0000000..703cb97 --- /dev/null +++ b/frontend/src/fixtures/messages.js @@ -0,0 +1,122 @@ +export default [ + { + "ID": 197357, + "ChannelID": 2023304596, + "UUID": 2903, + "Content": "东湾 溜冰 千万不要别人的男朋友,你老公知道的下场有多么的恐怖 #打女人", + "Media": "[{\"msg_id\": 2903, \"asset_id\": 6282933363250565939, \"document\": {\"Ext\": \".mp4\", \"Size\": 6459613, \"Video\": {\"Width\": 720, \"Height\": 1280, \"Duration\": 21.134}, \"Filename\": \"IMG_5451.MP4\", \"MimeType\": \"video/mp4\"}}]", + "PublishedAt": "2024-09-20T18:01:06+08:00", + "CreatedAt": "2024-09-20T18:06:37.863+08:00", + "GroupID": 0, + "Published": false, + "Like": false + }, + { + "ID": 197316, + "ChannelID": 2023304596, + "UUID": 2902, + "Content": "#斑斑园区 #校长 #枫哥 #辉哥 #火枪\n\n推监狱生涯人情冷暖 \n\n老板:校长,枫哥 ,辉哥,克拉克班班园区,刚开始出事的时候还说会管,工资也不发,饭也不管了,这边也出不去,也无法回到国内,微信支付宝都被司法冻结,工资不发就算了,现在我们只想吃一口饱饭,能够正常的活下去,没有别的需求.\n\n联系公司的领导消息都是已读不回,过中秋节都是饿着肚子,真的让人寒心,这么大的老板几个人都管不起了吗?格局就这么小?每天都是饿着肚子睡觉,上厕所都是半个月上一次,上多了怕饿,我们也不奢求什么了,只求吃一口饱饭!!\n\n公司领导,校长,枫哥,辉哥,盘口主管火枪!\n\nPS:吃不饱了 ?好可怜\n\n------------------------------------\n⚡️ 查看: 凤凰娱乐已在爆料瓜田上押70000U保证金 🙏 点击\n\n群主担保: 000999c.com 放心娱乐\n\n☎️ 免费投稿爆料: @TT9533", + "Media": "[{\"photo\": \"6294249687703731203.jpg\", \"msg_id\": 2902, \"asset_id\": 6294249687703731203}]", + "PublishedAt": "2024-09-20T17:01:51+08:00", + "CreatedAt": "2024-09-20T17:03:11.268+08:00", + "GroupID": 0, + "Published": false, + "Like": false + }, + { + "ID": 196959, + "ChannelID": 2023304596, + "UUID": 2901, + "Content": "#凤凰娱乐 ❗️ 巨额出款无忧❗️❗️\n东南亚最大线上博彩平台❤️ ❤️❤️❤️❤️\n\n\n\n⚡️ 查看: 凤凰娱乐已在爆料瓜田上押70000U保证金 🙏 点击\n\n凤凰娱乐大会员再创新高\n\n逆天之举:4月3号会员本金2600赢走58万 🙏\n史无前例:国内江苏某行业老板30天赢走568万 🙏\n赌神附体:6月7号PG麻将大爆91万提款 🙏\n再创新高:8月14号某盘口老板单笔提款163万 🙏\n怒杀狗庄:8月15号某盘口管理怒提203万 🙏\n天降好运:8月18号天降彩金2888爆赢78万 🙏\n\n❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️全球性顶级博彩盘口!支持USDT存出款、微信、支付宝、银行卡以及多种电子钱包存取款。东南亚国家地区通通不限ip  U存U取(无须实名绑卡) \n\n\n巨额出款稳定 U存提款 每日提款不限额度800/1000万+随便提 欢迎各位大佬休闲娱乐❗️\n\n客服专员: @VIP360 ❤️\n代理专员: @Lafei (拉菲)\n注册网址: 000999c.com", + "Media": "[{\"photo\": \"6210809064531805472.jpg\", \"msg_id\": 2901, \"asset_id\": 6210809064531805472}]", + "PublishedAt": "2024-09-20T16:29:06+08:00", + "CreatedAt": "2024-09-20T17:01:43.656+08:00", + "GroupID": 0, + "Published": false, + "Like": false + }, + { + "ID": 196958, + "ChannelID": 2023304596, + "UUID": 2898, + "Content": "石家庄 正定当街 #抓小三", + "Media": "[{\"msg_id\": 2898, \"asset_id\": 6287331963812450638, \"document\": {\"Ext\": \".mp4\", \"Size\": 37600341, \"Video\": {\"Width\": 464, \"Height\": 848, \"Duration\": 99.354}, \"Filename\": \"IMG_5669.MP4\", \"MimeType\": \"video/mp4\"}}, {\"msg_id\": 2899, \"asset_id\": 6287331963812450639, \"document\": {\"Ext\": \".mp4\", \"Size\": 6529727, \"Video\": {\"Width\": 720, \"Height\": 1280, \"Duration\": 18.5}, \"Filename\": \"IMG_5670.MP4\", \"MimeType\": \"video/mp4\"}}, {\"msg_id\": 2900, \"asset_id\": 6287331963812450640, \"document\": {\"Ext\": \".mp4\", \"Size\": 2397718, \"Video\": {\"Width\": 720, \"Height\": 1280, \"Duration\": 6.234}, \"Filename\": \"IMG_5671.MP4\", \"MimeType\": \"video/mp4\"}}]", + "PublishedAt": "2024-09-20T16:01:06+08:00", + "CreatedAt": "2024-09-20T17:01:33.203+08:00", + "GroupID": 13814554131228860, + "Published": false, + "Like": false + }, + { + "ID": 196957, + "ChannelID": 2023304596, + "UUID": 2897, + "Content": "🇰🇭柬埔寨旅游部长和监察部长互换职位\n\n9月20日上午,柬埔寨国会召开特别会议,批准柬埔寨旅游部长宋速甘和监察部长何哈互换职位,即何哈出任旅游部长,宋速甘出任监察部长。\n\n宋速甘(图左)出任旅游部长,何哈(图右)出任监察部长\n\n此次会议由国会主席昆素达丽主持,106名国会议员全部投票支持原旅游部长宋速甘改任监察部长、原监察部长何哈改任旅游部长。\n\n对此,洪马耐表示:部长职位的调整旨在更好地适应政府的需要,确保各项工作的顺利进行。\n\n据了解,宋速甘是已故副总理宋安之子,其岳父是原工业部部长占比塞,其哥哥宋卜提武是洪森女婿。\n\n何哈是洪森夫人洪文拉妮的侄女婿。", + "Media": "[{\"photo\": \"6298423987893551139.jpg\", \"msg_id\": 2897, \"asset_id\": 6298423987893551139}]", + "PublishedAt": "2024-09-20T15:33:06+08:00", + "CreatedAt": "2024-09-20T16:59:46.494+08:00", + "GroupID": 0, + "Published": false, + "Like": false + }, + { + "ID": 196956, + "ChannelID": 2023304596, + "UUID": 2895, + "Content": "#群友投稿 \n\n#我要匿名投诉华泰11楼B区24号办公室。这逼阴险歹毒,对上边领导殷勤奉承,对下诋毁挤兑。通过各种蛇形走位鸭形走位爬到组长的位置,管理一团糟。\n\n调戏已经有男朋友的泰国女同事和越南女同事,搞得对方上班不自在。没办法,他故意把组内的女同事调到自己身边,完全无视人家有男朋友这个事实。对组里的同事说话直接就是能干就干,不能干就滚。自己上班就是经常睡觉,但是我们愣着电脑屏幕都不行。自己唯一拿得出手的活儿就是操纵别人,搞对方心理,有一点小问题就要搞你。我们管理平台运营,本来就是要有点是非判断。\n\n现在只要他看不顺眼,主播就是工资全扣,白干走人。主播辛辛苦苦一个月,一分工资拿不到,或者就是十天半个月的扣工资。以前没有权利的时候就已经不是人了,这权利到手还不张扬跋扈,公泄私愤?被打压的主播就在圈子里报平台黑料,因为他一个人,搞得我们的工作越来越难做。\n\n平时对我们各种施压,一幅小人得志的嘴脸。平台让这样的人上位,早晚要完蛋。这个人工作名字叫长生,但是我们私下里都叫他CS(畜生)。\n\n------------------------------------\n⚡️ 查看: 凤凰娱乐已在爆料瓜田上押70000U保证金 🙏 点击\n\n群主担保: 000999c.com 放心娱乐\n\n☎️ 免费投稿爆料: @TT9533", + "Media": "[{\"photo\": \"6291948676154768953.jpg\", \"msg_id\": 2895, \"asset_id\": 6291948676154768953}, {\"photo\": \"6291948676154768954.jpg\", \"msg_id\": 2896, \"asset_id\": 6291948676154768954}]", + "PublishedAt": "2024-09-20T15:02:07+08:00", + "CreatedAt": "2024-09-20T16:59:45.405+08:00", + "GroupID": 13814525816373596, + "Published": false, + "Like": false + }, + { + "ID": 196955, + "ChannelID": 2023304596, + "UUID": 2892, + "Content": "【 湖南省 财政厅 厅长 刘文杰 意外 去世 】2024年9月19日上午,湖南省财政厅党组书记、厅长刘文杰意外去世。此事或涉及刑事案件。9月19日下午,包括刘文杰的同事在内的多位知情人士告知了记者这一消息。", + "Media": "[{\"photo\": \"6296265990165611162.jpg\", \"msg_id\": 2892, \"asset_id\": 6296265990165611162}, {\"photo\": \"6296265990165611163.jpg\", \"msg_id\": 2893, \"asset_id\": 6296265990165611163}, {\"photo\": \"6296265990165611164.jpg\", \"msg_id\": 2894, \"asset_id\": 6296265990165611164}]", + "PublishedAt": "2024-09-20T14:55:06+08:00", + "CreatedAt": "2024-09-20T16:59:44.085+08:00", + "GroupID": 13814522448560924, + "Published": false, + "Like": false + }, + { + "ID": 196954, + "ChannelID": 2023304596, + "UUID": 2889, + "Content": "#每日眼力考试\n\n屌大的都看的到,看到的评论区发个6,不然都是小屌子~\n\n#抖音 #快手 #直播 #露点 #网红", + "Media": "[{\"msg_id\": 2889, \"asset_id\": 4976560077386285696, \"document\": {\"Ext\": \".mp4\", \"Size\": 2732376, \"Video\": {\"Width\": 576, \"Height\": 1280, \"Duration\": 6}, \"Filename\": \"VID_20230702_172252_533.mp4\", \"MimeType\": \"video/mp4\"}}]", + "PublishedAt": "2024-09-20T14:29:06+08:00", + "CreatedAt": "2024-09-20T16:59:43.625+08:00", + "GroupID": 0, + "Published": false, + "Like": false + }, + { + "ID": 196953, + "ChannelID": 2023304596, + "UUID": 2888, + "Content": "前两天从厦门驾驶快艇 #偷渡 到 #台湾 的哥们。", + "Media": "[{\"msg_id\": 2888, \"asset_id\": 6287331963812450416, \"document\": {\"Ext\": \".mp4\", \"Size\": 17103391, \"Video\": {\"Width\": 848, \"Height\": 496, \"Duration\": 82.802222222222}, \"Filename\": \"IMG_5556.MP4\", \"MimeType\": \"video/mp4\"}}]", + "PublishedAt": "2024-09-20T14:01:06+08:00", + "CreatedAt": "2024-09-20T16:59:40.273+08:00", + "GroupID": 0, + "Published": false, + "Like": false + }, + { + "ID": 196952, + "ChannelID": 2023304596, + "UUID": 2887, + "Content": "#群友投稿 妈的昨晚上去珍珠收了一下尾款遭遇抢劫\n\n大意了坐了出租车想着也不远,走到半路这狗司机不讲武德:给,我来了先来了句:你好,我没搭理,又给我来了句:kuya,我特么就想着不对劲了,回了句yes,妈的直接给我锁车门了,拉到个贫民窟给我洗劫了二部手机,六万p现金,让我雨中凌乱,我恳求他给我😞退我一部手机,该说不说给了我一部手机和50p现金让我自己想办法离开那里.\n\n没办法了我特么走路3公里走到shore找了个地方手机充电找了个朋友帮忙一下,所以以后各位多打出租车,让这些出租车司机吃饱喝足,只有这样了才会源源不断的抢劫,最后提醒一下出租车的车牌:NIK90136\n\n已经报警了,说安排查出租车公司,但是希望不大,车能找回来,人和钱肯定是找不到了\n\nPS:白色出租车 ?\n\n------------------------------------\n⚡️ 查看: 凤凰娱乐已在爆料瓜田上押70000U保证金 🙏 点击\n\n群主担保: 000999c.com 放心娱乐\n\n☎️ 免费投稿爆料: @TT9533", + "Media": "[{\"photo\": \"6003642163117802028.jpg\", \"msg_id\": 2887, \"asset_id\": 6003642163117802028}]", + "PublishedAt": "2024-09-20T13:02:06+08:00", + "CreatedAt": "2024-09-20T16:59:02.3+08:00", + "GroupID": 0, + "Published": false, + "Like": false + } +] diff --git a/frontend/src/main.js b/frontend/src/main.js new file mode 100644 index 0000000..23952f0 --- /dev/null +++ b/frontend/src/main.js @@ -0,0 +1,13 @@ +import './assets/main.css' + +import { createPinia } from 'pinia' +import { createApp } from 'vue' + +import App from './App.vue' +import router from './router' + +const app = createApp(App) + +app.use(createPinia()) +app.use(router) +app.mount('#app') \ No newline at end of file diff --git a/frontend/src/main.ts b/frontend/src/main.ts deleted file mode 100644 index d6fb815..0000000 --- a/frontend/src/main.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { createApp } from 'vue' -import App from './App.vue' -import './style.css' - -import { createRouter, createWebHistory } from 'vue-router' - -import ChannelMessages from './views/ChannelMessages.vue' -import FavoritesMessages from './views/FavoritesMessages.vue' -import Home from './views/Home.vue' - -const routes = [ - { path: '/', component: Home, name: 'home' }, - { path: '/favorites', component: FavoritesMessages, name: 'favorites' }, - // { path: '/channels', component: Channel, name: 'channels' }, - { path: '/channels/:channel/messages', component: ChannelMessages, name: 'channel-messages' }, -] - -const router = createRouter({ - history: createWebHistory(), - routes, -}) - -createApp(App) -.use(router) -.mount('#app') diff --git a/frontend/src/router/index.js b/frontend/src/router/index.js new file mode 100644 index 0000000..7fe077c --- /dev/null +++ b/frontend/src/router/index.js @@ -0,0 +1,25 @@ +import { createRouter, createWebHistory } from 'vue-router' + + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: [ + { + path: '/', + name: 'home', + component: () => import('@/views/Home.vue'), + }, + { + path: '/favorites', + name: 'favorites', + component: () => import('@/views/FavoriteMessages.vue'), + }, + { + path: '/channels/:channel/messages', + name: 'channel-messages', + component: () => import('@/views/ChannelMessages.vue'), + }, + ] +}) + +export default router diff --git a/frontend/src/services/channels.js b/frontend/src/services/channels.js new file mode 100644 index 0000000..402809e --- /dev/null +++ b/frontend/src/services/channels.js @@ -0,0 +1,15 @@ +import { http } from './http'; + +export async function getChannels() { + // return mock('channels') + + const resp = await http.get('/channels'); + return resp.data; +} + +export async function getChannel(channelId) { + // return mock('channels', (data) => data[0]) + + const resp = await http.get(`/channels/${channelId}`); + return resp.data; +} diff --git a/frontend/src/services/http.js b/frontend/src/services/http.js new file mode 100644 index 0000000..fb7d12a --- /dev/null +++ b/frontend/src/services/http.js @@ -0,0 +1,22 @@ +import fixtures from '@/fixtures/index.js'; +import axios from 'axios'; + +const http = axios.create({ + baseURL: '/api', + headers: { + "Access-Control-Allow-Origin": "*", + } +}); + +const mock = async (fixture, process) => { + let data = fixtures[fixture] + if (typeof process === 'function') { + data = process(data); + } + + console.log('mock', fixture, data); + return data +} + +export { http, mock }; + diff --git a/frontend/src/services/messages.js b/frontend/src/services/messages.js new file mode 100644 index 0000000..ea58a0a --- /dev/null +++ b/frontend/src/services/messages.js @@ -0,0 +1,38 @@ +import { http } from './http'; + +function processResponseMessage(data) { + // let copyData = JSON.parse(JSON.stringify(data)); + return data.map((item) => { + console.log(typeof item.Media) + let media = item.Media.replace(/"asset_id":\s(\d+)/g, (match, p1, p2, p3, offset, string) => { + return `"asset_id": "${p1}"` + }) + + item.Media = JSON.parse(media).filter((item) => { + return Object.keys(item).length > 0; + }); + + return item + }); +} + +export async function toggleFavorite(messageId) { + // return mock('messages', processResponseMessage) + + const resp = await http.patch('/messages/' + messageId + '/favorite'); + return resp.data; +} + +export async function getChannelMessages(channelId, params) { + // return mock('messages', processResponseMessage) + + const resp = await http.get(`/channels/${channelId}/messages`, { params }); + return processResponseMessage(resp.data); +} + +export async function getFavoriteMessages(params) { + // return mock('messages', processResponseMessage) + + const resp = await http.get(`/favorites`, { params }); + return processResponseMessage(resp.data); +} diff --git a/frontend/src/stores/counter.js b/frontend/src/stores/counter.js new file mode 100644 index 0000000..69a97a2 --- /dev/null +++ b/frontend/src/stores/counter.js @@ -0,0 +1,12 @@ +import { defineStore } from 'pinia' +import { computed, ref } from 'vue' + +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/frontend/src/stores/navigation.js b/frontend/src/stores/navigation.js new file mode 100644 index 0000000..e4e2c1d --- /dev/null +++ b/frontend/src/stores/navigation.js @@ -0,0 +1,17 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; + +export const useNavigationStore = defineStore('navigation', () => { + const links = ref([ + { name: "Home", href: "/", current: true }, + { name: "Favorites", href: "/favorites", current: false }, + ]); + + function setActive(name) { + links.value.forEach(link => { + link.current = link.name === name; + }); + } + + return { links, setActive } +}) diff --git a/frontend/src/types.ts b/frontend/src/types.ts deleted file mode 100644 index 66cad91..0000000 --- a/frontend/src/types.ts +++ /dev/null @@ -1,37 +0,0 @@ -export interface Channel { - UUID: number; - Username: string; - Title: string; - CreatedAt: Date; - UpdatedAt: Date; - Offset: number; - MinID: number; - ExportMedia: boolean; -} - -export interface PostItem { - id: number; - content: string; - medias: Array; -} - -export interface Media { - photo?: string; - msg_id: number; - asset_id: number; - document?: Document; -} - -export interface Document { - Ext: string; - Size: number; - Video: Video; - Filename: string; - MimeType: string; -} - -export interface Video { - Width: number; - Height: number; - Duration: number; -} diff --git a/frontend/src/views/ChannelMessages.vue b/frontend/src/views/ChannelMessages.vue index 1cb3743..5344eee 100644 --- a/frontend/src/views/ChannelMessages.vue +++ b/frontend/src/views/ChannelMessages.vue @@ -1,37 +1,40 @@ diff --git a/frontend/src/views/FavoriteMessages.vue b/frontend/src/views/FavoriteMessages.vue new file mode 100644 index 0000000..a24e856 --- /dev/null +++ b/frontend/src/views/FavoriteMessages.vue @@ -0,0 +1,31 @@ + + + diff --git a/frontend/src/views/FavoritesMessages.vue b/frontend/src/views/FavoritesMessages.vue deleted file mode 100644 index eed0c84..0000000 --- a/frontend/src/views/FavoritesMessages.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - \ No newline at end of file diff --git a/frontend/src/views/Home.vue b/frontend/src/views/Home.vue index 72eb52e..0c40bd1 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/views/Home.vue @@ -1,27 +1,21 @@ - diff --git a/frontend/src/views/Tag.vue b/frontend/src/views/Tag.vue deleted file mode 100644 index 7159f88..0000000 --- a/frontend/src/views/Tag.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/frontend/src/views/Tags.vue b/frontend/src/views/Tags.vue deleted file mode 100644 index 5e14bb3..0000000 --- a/frontend/src/views/Tags.vue +++ /dev/null @@ -1,4 +0,0 @@ - - \ No newline at end of file diff --git a/frontend/src/vite-env.d.ts b/frontend/src/vite-env.d.ts deleted file mode 100644 index 4bf48cd..0000000 --- a/frontend/src/vite-env.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -/// - -declare module '*.vue' { - - import { DefineComponent } from 'vue' - - const component: DefineComponent<{}, {}, any> - - export default component - -} - -// Remove the relative module declaration \ No newline at end of file diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index fb649ae..ffc58ee 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -13,4 +13,4 @@ export default { }, }, plugins: [], -} \ No newline at end of file +} diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json deleted file mode 100644 index c54e602..0000000 --- a/frontend/tsconfig.app.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - "jsx": "preserve", - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] -} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json deleted file mode 100644 index 2751dfe..0000000 --- a/frontend/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "./", - "paths": { - "@/*": [ - "./src/*" - ] - } - }, - "include": [ - "src/**/*.ts", - "src/**/*.d.ts", - "src/**/*.tsx", - "src/**/*.vue" - ], - "exclude": [ - "node_modules" - ] -} \ No newline at end of file diff --git a/frontend/tsconfig.node.json b/frontend/tsconfig.node.json deleted file mode 100644 index 0d3d714..0000000 --- a/frontend/tsconfig.node.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2022", - "lib": ["ES2023"], - "module": "ESNext", - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "isolatedModules": true, - "moduleDetection": "force", - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["vite.config.ts"] -} diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo deleted file mode 100644 index 91172a5..0000000 --- a/frontend/tsconfig.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"root":["./src/data.ts","./src/main.ts","./src/types.ts","./src/vite-env.d.ts","./src/App.vue","./src/components/ListItem.vue","./src/components/MediaDocument.vue","./src/components/MediaGrid.vue","./src/components/MediaItem.vue","./src/components/MediaPhoto.vue","./src/components/Navigation.vue","./src/views/ChannelMessages.vue","./src/views/FavoritesMessages.vue","./src/views/Home.vue","./src/views/Tag.vue","./src/views/Tags.vue"],"version":"5.6.2"} \ No newline at end of file diff --git a/frontend/vite.config.ts b/frontend/vite.config.js similarity index 72% rename from frontend/vite.config.ts rename to frontend/vite.config.js index da94f98..063a12f 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.js @@ -1,19 +1,19 @@ +import { fileURLToPath, URL } from 'node:url' + import vue from '@vitejs/plugin-vue' import { defineConfig } from 'vite' // https://vitejs.dev/config/ export default defineConfig({ - optimizeDeps: { - include: ['linked-dep'], + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } }, - build: { - commonjsOptions: { - include: [], - }, - }, - plugins: [vue()], server: { - proxy: { '/api': { target: "http://127.0.0.1:3000/", //目标域名 @@ -25,4 +25,4 @@ export default defineConfig({ }, }, }, -}) \ No newline at end of file +}) diff --git a/internal/cmd_serve.go b/internal/cmd_serve.go index 8773efc..1ce2cc6 100644 --- a/internal/cmd_serve.go +++ b/internal/cmd_serve.go @@ -2,35 +2,21 @@ package internal import ( "fmt" + "net/http" "strconv" "exporter/database/telegram_resource/public/model" "exporter/database/telegram_resource/public/table" + "exporter/frontend/dist" . "github.com/go-jet/jet/v2/postgres" "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/favicon" + "github.com/gofiber/fiber/v2/middleware/filesystem" "github.com/gofiber/fiber/v2/middleware/recover" "github.com/spf13/cobra" ) -type Pagination struct { - Page int64 `json:"page"` - Limit int64 `json:"limit"` - Offset int64 `json:"-"` -} - -func (p *Pagination) Format() { - if p.Limit == 0 { - p.Limit = 10 - } - - if p.Page == 0 { - p.Offset = 0 - } else { - p.Offset = (p.Page - 1) * p.Limit - } -} - func ServeCmd() *cobra.Command { cmd := &cobra.Command{ Use: "serve", @@ -54,11 +40,24 @@ func serveCmd(cmd *cobra.Command, args []string) error { app := fiber.New() app.Static("/medias", "/share/telegram/outputs") - app.Static("/", "/public") + + app.Use(favicon.New(favicon.Config{ + Data: dist.Favicon, + })) + + app.Use("/assets", filesystem.New(filesystem.Config{ + Root: http.FS(dist.StaticDist), + PathPrefix: "assets", + })) // Initialize default config app.Use(recover.New()) + app.Get("/", func(c *fiber.Ctx) error { + c.Context().SetContentType("text/html") + return c.SendString(dist.IndexPage) + }) + group := app.Group("/api") // get channel list @@ -101,21 +100,20 @@ func serveCmd(cmd *cobra.Command, args []string) error { return err } - var p Pagination - if err := c.QueryParser(&p); err != nil { - return err - } - p.Format() + offsetPk := c.QueryInt("offset", 0) var messages []model.ChannelMessages tbl := table.ChannelMessages + cond := tbl.ChannelID.EQ(Int64(int64(channelID))) + if offsetPk > 0 { + cond = cond.AND(tbl.ID.LT(Int64(int64(offsetPk)))) + } err = tbl. SELECT(tbl.AllColumns). - WHERE(tbl.ChannelID.EQ(Int64(int64(channelID)))). + WHERE(cond). + LIMIT(5). ORDER_BY(tbl.ID.DESC()). - LIMIT(p.Limit). - OFFSET(p.Offset). QueryContext(c.Context(), db, &messages) if err != nil { return err @@ -126,25 +124,24 @@ func serveCmd(cmd *cobra.Command, args []string) error { // favorite messages group.Get("/favorites", func(c *fiber.Ctx) error { - var p Pagination - if err := c.QueryParser(&p); err != nil { - return err + offsetPk := c.QueryInt("offset", 0) + + tbl := table.ChannelMessages + cond := tbl.ChannelID.EQ(Int64(int64(channelID))).AND( + tbl.Like.EQ(Bool(true)), + ) + + if offsetPk > 0 { + cond = cond.AND(tbl.ID.LT(Int64(int64(offsetPk)))) } - p.Format() var messages []model.ChannelMessages - tbl := table.ChannelMessages err = tbl. SELECT(tbl.AllColumns). - WHERE( - tbl.ChannelID.EQ(Int64(int64(channelID))).AND( - tbl.Like.EQ(Bool(true)), - ), - ). + WHERE(cond). + LIMIT(5). ORDER_BY(tbl.ID.DESC()). - LIMIT(p.Limit). - OFFSET(p.Offset). QueryContext(c.Context(), db, &messages) if err != nil { return err diff --git a/tg.tgz b/tg.tgz deleted file mode 100755 index e743d83..0000000 Binary files a/tg.tgz and /dev/null differ