diff --git a/package.json b/package.json index b1ad447..6128ca6 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,16 @@ "version": "1.0.0", "private": true, "scripts": { - "dev": "NODE_OPTIONS=--max-old-space-size=4096 vite", + "dev": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vite", "serve": "pnpm dev", - "build": "rimraf dist && NODE_OPTIONS=--max-old-space-size=8192 vite build", + "build": "rimraf dist && cross-env NODE_OPTIONS=--max-old-space-size=8192 vite build", "build:staging": "rimraf dist && vite build --mode staging", "report": "rimraf dist && vite build", "preview": "vite preview", "preview:build": "pnpm build && vite preview", "typecheck": "tsc --noEmit && vue-tsc --noEmit --skipLibCheck", "svgo": "svgo -f src/assets/svg -o src/assets/svg", - "cloc": "NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML", + "cloc": "cross-env NODE_OPTIONS=--max-old-space-size=4096 cloc . --exclude-dir=node_modules --exclude-lang=YAML", "clean:cache": "rimraf node_modules && rimraf .eslintcache && pnpm install", "lint:eslint": "eslint --cache --max-warnings 0 \"{src,mock,build}/**/*.{vue,js,ts,tsx}\" --fix", "lint:prettier": "prettier --write \"src/**/*.{js,ts,json,tsx,css,scss,vue,html,md}\"", @@ -82,6 +82,7 @@ "@vue/eslint-config-typescript": "^11.0.3", "autoprefixer": "^10.4.14", "cloc": "^2.11.0", + "cross-env": "^7.0.3", "cssnano": "^6.0.1", "eslint": "^8.43.0", "eslint-plugin-prettier": "^4.2.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index df17bfd..785dfde 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -127,7 +127,7 @@ importers: version: 1.0.10 "@types/node": specifier: ^20.3.1 - version: 20.19.17 + version: 20.19.19 "@types/nprogress": specifier: 0.2.0 version: 0.2.0 @@ -145,10 +145,10 @@ importers: version: 5.62.0(eslint@8.57.1)(typescript@5.0.4) "@vitejs/plugin-vue": specifier: ^4.2.3 - version: 4.6.2(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4)) + version: 4.6.2(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4)) "@vitejs/plugin-vue-jsx": specifier: ^3.0.1 - version: 3.1.0(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4)) + version: 3.1.0(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4)) "@vue/eslint-config-prettier": specifier: ^7.1.0 version: 7.1.0(eslint@8.57.1)(prettier@2.8.8) @@ -161,6 +161,9 @@ importers: cloc: specifier: ^2.11.0 version: 2.11.0 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 cssnano: specifier: ^6.0.1 version: 6.1.2(postcss@8.5.6) @@ -211,7 +214,7 @@ importers: version: 1.93.2 sass-loader: specifier: ^13.3.2 - version: 13.3.3(sass@1.93.2)(webpack@5.101.3) + version: 13.3.3(sass@1.93.2)(webpack@5.102.1) stylelint: specifier: ^15.9.0 version: 15.11.0(typescript@5.0.4) @@ -250,7 +253,7 @@ importers: version: 3.3.2 tailwindcss: specifier: ^3.3.2 - version: 3.4.17(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2)) + version: 3.4.18 terser: specifier: ^5.18.1 version: 5.44.0 @@ -259,16 +262,16 @@ importers: version: 5.0.4 vite: specifier: ^4.3.9 - version: 4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0) + version: 4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0) vite-plugin-cdn-import: specifier: ^0.3.5 version: 0.3.5(rollup@3.29.5) vite-plugin-compression: specifier: ^0.5.1 - version: 0.5.1(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0)) + version: 0.5.1(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0)) vite-plugin-mock: specifier: 2.9.6 - version: 2.9.6(mockjs@1.1.0)(rollup@3.29.5)(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0)) + version: 2.9.6(mockjs@1.1.0)(rollup@3.29.5)(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0)) vite-plugin-remove-console: specifier: ^2.1.1 version: 2.2.0 @@ -1027,10 +1030,10 @@ packages: } engines: { node: ">= 8" } - "@nuxt/kit@3.19.2": + "@nuxt/kit@3.19.3": resolution: { - integrity: sha512-+QiqO0WcIxsKLUqXdVn3m4rzTRm2fO9MZgd330utCAaagGmHsgiMJp67kE14boJEPutnikfz3qOmrzBnDIHUUg== + integrity: sha512-ze46EW5xW+UxDvinvPkYt2MzR355Az1lA3bpX8KDialgnCwr+IbkBij/udbUEC6ZFbidPkfK1eKl4ESN7gMY+w== } engines: { node: ">=18.12.0" } @@ -1357,10 +1360,10 @@ packages: integrity: sha512-SXgrhajHG7boLv6oU93CcmdDm0HYRiceuz6b+7z+/2lCJPTWDv0V5YiwFHT2ejE4bQqgSXQiVPQYPWv7LGsK1g== } - "@types/node@20.19.17": + "@types/node@20.19.19": resolution: { - integrity: sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ== + integrity: sha512-pb1Uqj5WJP7wrcbLU7Ru4QtA0+3kAXrkutGiD26wUKzSMgNNaPARTUDQmElUXp64kh3cWdou3Q0C7qwwxqSFmg== } "@types/node@20.5.1": @@ -2032,10 +2035,10 @@ packages: integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA== } - baseline-browser-mapping@2.8.6: + baseline-browser-mapping@2.8.14: resolution: { - integrity: sha512-wrH5NNqren/QMtKUEEJf7z86YjfqW/2uw3IL3/xpqZUC95SSVIFXYQeeGjL6FT/X68IROu6RMehZQS5foy2BXw== + integrity: sha512-GM9c0cWWR8Ga7//Ves/9KRgTS8nLausCkP3CGiFLrnwA2CDUluXgaQqvrULoR2Ujrd/mz/lkX87F5BHFsNr5sQ== } hasBin: true @@ -2071,10 +2074,10 @@ packages: } engines: { node: ">=8" } - browserslist@4.26.2: + browserslist@4.26.3: resolution: { - integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A== + integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w== } engines: { node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7 } hasBin: true @@ -2172,10 +2175,10 @@ packages: integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== } - caniuse-lite@1.0.30001745: + caniuse-lite@1.0.30001749: resolution: { - integrity: sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ== + integrity: sha512-0rw2fJOmLfnzCRbkm8EyHL8SvI2Apu5UbnQuTsJ0ClgrH8hcwFooJ1s5R0EP8o8aVrFu8++ae29Kt9/gZAZp/Q== } cfb@1.2.2: @@ -2468,6 +2471,14 @@ packages: integrity: sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA== } + cross-env@7.0.3: + resolution: + { + integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + } + engines: { node: ">=10.14", npm: ">=6", yarn: ">=1" } + hasBin: true + cross-spawn@7.0.6: resolution: { @@ -2849,10 +2860,10 @@ packages: } engines: { node: ">=8" } - dotenv@17.2.2: + dotenv@17.2.3: resolution: { - integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q== + integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w== } engines: { node: ">=12" } @@ -2881,10 +2892,10 @@ packages: integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== } - electron-to-chromium@1.5.223: + electron-to-chromium@1.5.233: resolution: { - integrity: sha512-qKm55ic6nbEmagFlTFczML33rF90aU+WtrJ9MdTCThrcvDNdUHN4p6QfVN78U06ZmguqXIyMPyYhw2TrbDUwPQ== + integrity: sha512-iUdTQSf7EFXsDdQsp8MwJz5SVk4APEFqXU/S47OtQ0YLqacSwPXdZ5vRlMX3neb07Cy2vgioNuRnWUXFwuslkg== } element-plus@2.3.6: @@ -3902,10 +3913,10 @@ packages: } hasBin: true - jiti@2.6.0: + jiti@2.6.1: resolution: { - integrity: sha512-VXe6RjJkBPj0ohtqaO8vSWP3ZhAKo66fKrFNCll4BTcwljPLz03pCbaNKfzGP5MbrCYcbJ7v0nOYYwUzTEIdXQ== + integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== } hasBin: true @@ -4091,10 +4102,10 @@ packages: enquirer: optional: true - loader-runner@4.3.0: + loader-runner@4.3.1: resolution: { - integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q== } engines: { node: ">=6.11.5" } @@ -4511,10 +4522,10 @@ packages: integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q== } - node-releases@2.0.21: + node-releases@2.0.23: resolution: { - integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw== + integrity: sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg== } normalize-package-data@2.5.0: @@ -5047,19 +5058,25 @@ packages: peerDependencies: postcss: ^8.4.21 - postcss-load-config@4.0.2: + postcss-load-config@6.0.1: resolution: { - integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== + integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== } - engines: { node: ">= 14" } + engines: { node: ">= 18" } peerDependencies: + jiti: ">=1.21.0" postcss: ">=8.0.9" - ts-node: ">=9.0.0" + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: + jiti: + optional: true postcss: optional: true - ts-node: + tsx: + optional: true + yaml: optional: true postcss-media-query-parser@0.2.3: @@ -5851,10 +5868,10 @@ packages: engines: { node: ">=14.0.0" } hasBin: true - schema-utils@4.3.2: + schema-utils@4.3.3: resolution: { - integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ== + integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== } engines: { node: ">= 10.13.0" } @@ -5886,10 +5903,10 @@ packages: engines: { node: ">=10" } hasBin: true - semver@7.7.2: + semver@7.7.3: resolution: { - integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== } engines: { node: ">=10" } hasBin: true @@ -6179,10 +6196,10 @@ packages: } engines: { node: ">=8" } - strip-literal@3.0.0: + strip-literal@3.1.0: resolution: { - integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA== + integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg== } style-search@0.1.0: @@ -6402,18 +6419,18 @@ packages: } engines: { node: ">=10.0.0" } - tailwindcss@3.4.17: + tailwindcss@3.4.18: resolution: { - integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== + integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ== } engines: { node: ">=14.0.0" } hasBin: true - tapable@2.2.3: + tapable@2.3.0: resolution: { - integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg== + integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg== } engines: { node: ">=6" } @@ -6634,10 +6651,10 @@ packages: engines: { node: ">=12.20" } hasBin: true - typescript@5.9.2: + typescript@5.9.3: resolution: { - integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A== + integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== } engines: { node: ">=14.17" } hasBin: true @@ -6660,10 +6677,10 @@ packages: integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== } - unimport@5.4.0: + unimport@5.4.1: resolution: { - integrity: sha512-g/OLFZR2mEfqbC6NC9b2225eCJGvufxq34mj6kM3OmI5gdSL0qyqtnv+9qmsGpAmnzSl6x0IWZj4W+8j2hLkMA== + integrity: sha512-wMZ2JKUCleCK2zfRHeWcbrUHKXOC3SVBYkyn/wTGzh0THX6sT4hSjuKXxKANN4/WMbT6ZPM4JzcDcnhD2x9Bpg== } engines: { node: ">=18.12.0" } @@ -6681,10 +6698,10 @@ packages: } engines: { node: ">= 0.8" } - unplugin-utils@0.3.0: + unplugin-utils@0.3.1: resolution: { - integrity: sha512-JLoggz+PvLVMJo+jZt97hdIIIZ2yTzGgft9e9q8iMrC4ewufl62ekeW7mixBghonn2gVb/ICjyvlmOCUBnJLQg== + integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog== } engines: { node: ">=20.19.0" } @@ -6919,10 +6936,10 @@ packages: integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== } - webpack@5.101.3: + webpack@5.102.1: resolution: { - integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A== + integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ== } engines: { node: ">=10.13.0" } hasBin: true @@ -7062,14 +7079,6 @@ packages: } engines: { node: ">= 14" } - yaml@2.8.1: - resolution: - { - integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== - } - engines: { node: ">= 14.6" } - hasBin: true - yargs-parser@18.1.3: resolution: { @@ -7172,7 +7181,7 @@ snapshots: dependencies: "@babel/compat-data": 7.28.4 "@babel/helper-validator-option": 7.27.1 - browserslist: 4.26.2 + browserslist: 4.26.3 lru-cache: 5.1.1 semver: 6.3.1 @@ -7356,14 +7365,14 @@ snapshots: "@commitlint/types": 17.8.1 "@types/node": 20.5.1 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.9.2) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.0.4))(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.0.4))(typescript@5.9.2) + cosmiconfig: 8.3.6(typescript@5.9.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.0.4))(ts-node@10.9.2(@types/node@20.19.19)(typescript@5.0.4))(typescript@5.9.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.2) - typescript: 5.9.2 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.3) + typescript: 5.9.3 transitivePeerDependencies: - "@swc/core" - "@swc/wasm" @@ -7613,7 +7622,7 @@ snapshots: "@nodelib/fs.scandir": 2.1.5 fastq: 1.19.1 - "@nuxt/kit@3.19.2": + "@nuxt/kit@3.19.3": dependencies: c12: 3.3.0 consola: 3.4.2 @@ -7622,7 +7631,7 @@ snapshots: errx: 0.1.0 exsolve: 1.0.7 ignore: 7.0.5 - jiti: 2.6.0 + jiti: 2.6.1 klona: 2.0.6 knitwork: 1.2.0 mlly: 1.8.0 @@ -7631,12 +7640,12 @@ snapshots: pkg-types: 2.3.0 rc9: 2.1.2 scule: 1.3.0 - semver: 7.7.2 + semver: 7.7.3 std-env: 3.9.0 tinyglobby: 0.2.15 ufo: 1.6.1 unctx: 2.4.1 - unimport: 5.4.0 + unimport: 5.4.1 untyped: 2.0.0 transitivePeerDependencies: - magicast @@ -7814,7 +7823,7 @@ snapshots: "@types/mockjs@1.0.10": {} - "@types/node@20.19.17": + "@types/node@20.19.19": dependencies: undici-types: 6.21.0 @@ -7828,7 +7837,7 @@ snapshots: "@types/resolve@1.17.1": dependencies: - "@types/node": 20.19.17 + "@types/node": 20.19.19 "@types/semver@7.7.1": {} @@ -7852,7 +7861,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 - semver: 7.7.2 + semver: 7.7.3 tsutils: 3.21.0(typescript@5.0.4) optionalDependencies: typescript: 5.0.4 @@ -7897,7 +7906,7 @@ snapshots: debug: 4.4.3 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.7.2 + semver: 7.7.3 tsutils: 3.21.0(typescript@5.0.4) optionalDependencies: typescript: 5.0.4 @@ -7914,7 +7923,7 @@ snapshots: "@typescript-eslint/typescript-estree": 5.62.0(typescript@5.0.4) eslint: 8.57.1 eslint-scope: 5.1.1 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color - typescript @@ -7926,19 +7935,19 @@ snapshots: "@ungap/structured-clone@1.3.0": {} - "@vitejs/plugin-vue-jsx@3.1.0(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4))": + "@vitejs/plugin-vue-jsx@3.1.0(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4))": dependencies: "@babel/core": 7.28.4 "@babel/plugin-transform-typescript": 7.28.0(@babel/core@7.28.4) "@vue/babel-plugin-jsx": 1.5.0(@babel/core@7.28.4) - vite: 4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0) + vite: 4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0) vue: 3.5.22(typescript@5.0.4) transitivePeerDependencies: - supports-color - "@vitejs/plugin-vue@4.6.2(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4))": + "@vitejs/plugin-vue@4.6.2(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0))(vue@3.5.22(typescript@5.0.4))": dependencies: - vite: 4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0) + vite: 4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0) vue: 3.5.22(typescript@5.0.4) "@volar/language-core@1.11.1": @@ -8106,7 +8115,7 @@ snapshots: style-value-types: 5.1.2 vue: 3.5.22(typescript@5.0.4) optionalDependencies: - "@nuxt/kit": 3.19.2 + "@nuxt/kit": 3.19.3 transitivePeerDependencies: - "@vue/composition-api" - magicast @@ -8292,8 +8301,8 @@ snapshots: autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.26.2 - caniuse-lite: 1.0.30001745 + browserslist: 4.26.3 + caniuse-lite: 1.0.30001749 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 @@ -8312,7 +8321,7 @@ snapshots: balanced-match@2.0.0: {} - baseline-browser-mapping@2.8.6: {} + baseline-browser-mapping@2.8.14: {} binary-extensions@2.3.0: {} @@ -8331,13 +8340,13 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.26.2: + browserslist@4.26.3: dependencies: - baseline-browser-mapping: 2.8.6 - caniuse-lite: 1.0.30001745 - electron-to-chromium: 1.5.223 - node-releases: 2.0.21 - update-browserslist-db: 1.1.3(browserslist@4.26.2) + baseline-browser-mapping: 2.8.14 + caniuse-lite: 1.0.30001749 + electron-to-chromium: 1.5.233 + node-releases: 2.0.23 + update-browserslist-db: 1.1.3(browserslist@4.26.3) buffer-from@1.1.2: {} @@ -8348,10 +8357,10 @@ snapshots: chokidar: 4.0.3 confbox: 0.2.2 defu: 6.1.4 - dotenv: 17.2.2 + dotenv: 17.2.3 exsolve: 1.0.7 giget: 2.0.0 - jiti: 2.6.0 + jiti: 2.6.1 ohash: 2.0.11 pathe: 2.0.3 perfect-debounce: 2.0.0 @@ -8394,12 +8403,12 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.26.2 - caniuse-lite: 1.0.30001745 + browserslist: 4.26.3 + caniuse-lite: 1.0.30001749 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001745: {} + caniuse-lite@1.0.30001749: {} cfb@1.2.2: dependencies: @@ -8541,12 +8550,12 @@ snapshots: core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.0.4))(ts-node@10.9.2(@types/node@20.19.17)(typescript@5.0.4))(typescript@5.9.2): + cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6(typescript@5.0.4))(ts-node@10.9.2(@types/node@20.19.19)(typescript@5.0.4))(typescript@5.9.3): dependencies: "@types/node": 20.5.1 - cosmiconfig: 8.3.6(typescript@5.9.2) - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.2) - typescript: 5.9.2 + cosmiconfig: 8.3.6(typescript@5.9.3) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.3) + typescript: 5.9.3 cosmiconfig@8.3.6(typescript@5.0.4): dependencies: @@ -8557,14 +8566,14 @@ snapshots: optionalDependencies: typescript: 5.0.4 - cosmiconfig@8.3.6(typescript@5.9.2): + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 optionalDependencies: - typescript: 5.9.2 + typescript: 5.9.3 crc-32@1.2.2: {} @@ -8572,6 +8581,10 @@ snapshots: cropperjs@1.6.2: {} + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -8660,7 +8673,7 @@ snapshots: cssnano-preset-default@6.1.2(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 css-declaration-sorter: 7.3.0(postcss@8.5.6) cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 @@ -8829,7 +8842,7 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@17.2.2: + dotenv@17.2.3: optional: true dunder-proto@1.0.1: @@ -8847,7 +8860,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.223: {} + electron-to-chromium@1.5.233: {} element-plus@2.3.6(vue@3.5.22(typescript@5.0.4)): dependencies: @@ -8883,7 +8896,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.3 + tapable: 2.3.0 entities@2.2.0: {} @@ -8969,7 +8982,7 @@ snapshots: natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 - semver: 7.7.2 + semver: 7.7.3 vue-eslint-parser: 9.4.3(eslint@8.57.1) xml-name-validator: 4.0.0 transitivePeerDependencies: @@ -9466,13 +9479,13 @@ snapshots: jest-worker@27.5.1: dependencies: - "@types/node": 20.19.17 + "@types/node": 20.19.19 merge-stream: 2.0.0 supports-color: 8.1.1 jiti@1.21.7: {} - jiti@2.6.0: + jiti@2.6.1: optional: true js-cookie@3.0.5: {} @@ -9570,7 +9583,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 8.1.0 - loader-runner@4.3.0: {} + loader-runner@4.3.1: {} local-pkg@1.1.2: dependencies: @@ -9782,7 +9795,7 @@ snapshots: node-fetch-native@1.6.7: optional: true - node-releases@2.0.21: {} + node-releases@2.0.23: {} normalize-package-data@2.5.0: dependencies: @@ -9795,7 +9808,7 @@ snapshots: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.16.1 - semver: 7.7.2 + semver: 7.7.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -9999,7 +10012,7 @@ snapshots: postcss-colormin@5.3.1(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -10007,7 +10020,7 @@ snapshots: postcss-colormin@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.5.6 @@ -10015,13 +10028,13 @@ snapshots: postcss-convert-values@5.1.3(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-convert-values@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -10076,13 +10089,12 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.5.6 - postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2)): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.8.1 optionalDependencies: + jiti: 1.21.7 postcss: 8.5.6 - ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.9.2) postcss-media-query-parser@0.2.3: {} @@ -10100,7 +10112,7 @@ snapshots: postcss-merge-rules@5.1.4(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -10108,7 +10120,7 @@ snapshots: postcss-merge-rules@6.1.1(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 caniuse-api: 3.0.0 cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 @@ -10140,14 +10152,14 @@ snapshots: postcss-minify-params@5.1.4(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 cssnano-utils: 3.1.0(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-minify-params@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 cssnano-utils: 4.0.2(postcss@8.5.6) postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -10227,13 +10239,13 @@ snapshots: postcss-normalize-unicode@5.1.1(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 postcss-normalize-unicode@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 postcss: 8.5.6 postcss-value-parser: 4.2.0 @@ -10272,13 +10284,13 @@ snapshots: postcss-reduce-initial@5.1.2(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 caniuse-api: 3.0.0 postcss: 8.5.6 postcss-reduce-initial@6.1.0(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 caniuse-api: 3.0.0 postcss: 8.5.6 @@ -10532,10 +10544,10 @@ snapshots: safe-buffer@5.2.1: {} - sass-loader@13.3.3(sass@1.93.2)(webpack@5.101.3): + sass-loader@13.3.3(sass@1.93.2)(webpack@5.102.1): dependencies: neo-async: 2.6.2 - webpack: 5.101.3 + webpack: 5.102.1 optionalDependencies: sass: 1.93.2 @@ -10547,7 +10559,7 @@ snapshots: optionalDependencies: "@parcel/watcher": 2.5.1 - schema-utils@4.3.2: + schema-utils@4.3.3: dependencies: "@types/json-schema": 7.0.15 ajv: 8.17.1 @@ -10565,7 +10577,7 @@ snapshots: dependencies: lru-cache: 6.0.0 - semver@7.7.2: {} + semver@7.7.3: {} serialize-javascript@6.0.2: dependencies: @@ -10718,7 +10730,7 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.0.0: + strip-literal@3.1.0: dependencies: js-tokens: 9.0.1 optional: true @@ -10732,13 +10744,13 @@ snapshots: stylehacks@5.1.1(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 postcss: 8.5.6 postcss-selector-parser: 6.1.2 stylehacks@6.1.1(postcss@8.5.6): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 postcss: 8.5.6 postcss-selector-parser: 6.1.2 @@ -10773,7 +10785,7 @@ snapshots: stylelint-config-recommended-vue@1.6.1(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)): dependencies: postcss-html: 1.8.0 - semver: 7.7.2 + semver: 7.7.3 stylelint: 15.11.0(typescript@5.0.4) stylelint-config-html: 1.1.0(postcss-html@1.8.0)(stylelint@15.11.0(typescript@5.0.4)) stylelint-config-recommended: 12.0.0(stylelint@15.11.0(typescript@5.0.4)) @@ -10925,7 +10937,7 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - tailwindcss@3.4.17(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2)): + tailwindcss@3.4.18: dependencies: "@alloc/quick-lru": 5.2.0 arg: 5.0.2 @@ -10944,24 +10956,25 @@ snapshots: postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) postcss-js: 4.1.0(postcss@8.5.6) - postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2)) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 resolve: 1.22.10 sucrase: 3.35.0 transitivePeerDependencies: - - ts-node + - tsx + - yaml - tapable@2.2.3: {} + tapable@2.3.0: {} - terser-webpack-plugin@5.3.14(webpack@5.101.3): + terser-webpack-plugin@5.3.14(webpack@5.102.1): dependencies: "@jridgewell/trace-mapping": 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.44.0 - webpack: 5.101.3 + webpack: 5.102.1 terser@5.44.0: dependencies: @@ -11011,7 +11024,7 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.2): + ts-node@10.9.2(@types/node@20.5.1)(typescript@5.9.3): dependencies: "@cspotcode/source-map-support": 0.8.1 "@tsconfig/node10": 1.0.11 @@ -11025,7 +11038,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.9.2 + typescript: 5.9.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -11062,7 +11075,7 @@ snapshots: typescript@5.0.4: {} - typescript@5.9.2: {} + typescript@5.9.3: {} ufo@1.6.1: optional: true @@ -11077,7 +11090,7 @@ snapshots: undici-types@6.21.0: {} - unimport@5.4.0: + unimport@5.4.1: dependencies: acorn: 8.15.0 escape-string-regexp: 5.0.0 @@ -11089,17 +11102,17 @@ snapshots: picomatch: 4.0.3 pkg-types: 2.3.0 scule: 1.3.0 - strip-literal: 3.0.0 + strip-literal: 3.1.0 tinyglobby: 0.2.15 unplugin: 2.3.10 - unplugin-utils: 0.3.0 + unplugin-utils: 0.3.1 optional: true universalify@2.0.1: {} unpipe@1.0.0: {} - unplugin-utils@0.3.0: + unplugin-utils@0.3.1: dependencies: pathe: 2.0.3 picomatch: 4.0.3 @@ -11117,14 +11130,14 @@ snapshots: dependencies: citty: 0.1.6 defu: 6.1.4 - jiti: 2.6.0 + jiti: 2.6.1 knitwork: 1.2.0 scule: 1.3.0 optional: true - update-browserslist-db@1.1.3(browserslist@4.26.2): + update-browserslist-db@1.1.3(browserslist@4.26.3): dependencies: - browserslist: 4.26.2 + browserslist: 4.26.3 escalade: 3.2.0 picocolors: 1.1.1 @@ -11155,16 +11168,16 @@ snapshots: transitivePeerDependencies: - rollup - vite-plugin-compression@0.5.1(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0)): + vite-plugin-compression@0.5.1(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0)): dependencies: chalk: 4.1.2 debug: 4.4.3 fs-extra: 10.1.0 - vite: 4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0) + vite: 4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0) transitivePeerDependencies: - supports-color - vite-plugin-mock@2.9.6(mockjs@1.1.0)(rollup@3.29.5)(vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0)): + vite-plugin-mock@2.9.6(mockjs@1.1.0)(rollup@3.29.5)(vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0)): dependencies: "@rollup/plugin-node-resolve": 13.3.0(rollup@3.29.5) "@types/mockjs": 1.0.10 @@ -11176,7 +11189,7 @@ snapshots: fast-glob: 3.3.3 mockjs: 1.1.0 path-to-regexp: 6.3.0 - vite: 4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0) + vite: 4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0) transitivePeerDependencies: - rollup - supports-color @@ -11188,13 +11201,13 @@ snapshots: "@vue/compiler-sfc": 3.5.22 svgo: 3.3.2 - vite@4.5.14(@types/node@20.19.17)(sass@1.93.2)(terser@5.44.0): + vite@4.5.14(@types/node@20.19.19)(sass@1.93.2)(terser@5.44.0): dependencies: esbuild: 0.18.20 postcss: 8.5.6 rollup: 3.29.5 optionalDependencies: - "@types/node": 20.19.17 + "@types/node": 20.19.19 fsevents: 2.3.3 sass: 1.93.2 terser: 5.44.0 @@ -11212,7 +11225,7 @@ snapshots: espree: 9.6.1 esquery: 1.6.0 lodash: 4.17.21 - semver: 7.7.2 + semver: 7.7.3 transitivePeerDependencies: - supports-color @@ -11235,7 +11248,7 @@ snapshots: dependencies: "@volar/typescript": 1.11.1 "@vue/language-core": 1.8.27(typescript@5.0.4) - semver: 7.7.2 + semver: 7.7.3 typescript: 5.0.4 vue-types@5.1.3(vue@3.5.22(typescript@5.0.4)): @@ -11264,7 +11277,7 @@ snapshots: webpack-virtual-modules@0.6.2: optional: true - webpack@5.101.3: + webpack@5.102.1: dependencies: "@types/eslint-scope": 3.7.7 "@types/estree": 1.0.8 @@ -11274,7 +11287,7 @@ snapshots: "@webassemblyjs/wasm-parser": 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.26.2 + browserslist: 4.26.3 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -11283,12 +11296,12 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.3 - terser-webpack-plugin: 5.3.14(webpack@5.101.3) + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(webpack@5.102.1) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -11361,8 +11374,6 @@ snapshots: yaml@2.3.1: {} - yaml@2.8.1: {} - yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 diff --git a/src/api/reader/index.ts b/src/api/reader/index.ts new file mode 100644 index 0000000..e9fcc47 --- /dev/null +++ b/src/api/reader/index.ts @@ -0,0 +1,88 @@ +import { http } from "@/utils/http"; + +export interface TextFileQuery extends BasePageQuery { + fileName: string; + status: number; +} + +export type TextFileDTO = { + fileId: number; + fileName: string; + originalFileName: string; + filePath: string; + fileSize: number; + description: string; + status: number; + uploadUserId: number; + uploadUserName: string; + createTime: Date; + updateTime: Date; +}; + +export type TextFileContentDTO = { + fileId: number; + fileName: string; + content: string; + fileSize: number; +}; + +/** 获取文本文件列表 */ +export const getTextFileListApi = (params?: TextFileQuery) => { + return http.request>("get", "/reader/file/list", { + params + }); +}; + +/** 上传文本文件 */ +export const uploadTextFileApi = (formData: FormData) => { + return http.request>("post", "/reader/file/upload", { + data: formData, + headers: { + "Content-Type": "multipart/form-data" + } + }); +}; + +/** 获取文件详情 */ +export const getTextFileDetailApi = (fileId: number) => { + return http.request>( + "get", + `/reader/file/detail/${fileId}` + ); +}; + +/** 删除文件 */ +export const deleteTextFileApi = (fileId: number) => { + return http.request>("delete", `/reader/file/${fileId}`); +}; + +/** 批量删除文件 */ +export const deleteBatchTextFileApi = (fileIds: Array) => { + return http.request>("delete", "/reader/file/batch", { + data: fileIds + }); +}; + +/** 更新文件状态 */ +export const updateTextFileStatusApi = (fileId: number, status: number) => { + return http.request>( + "put", + `/reader/file/${fileId}/status/${status}` + ); +}; + +/** 获取所有可用文件(用户端) */ +export const getAllTextFilesApi = () => { + return http.request>>( + "get", + "/reader/public/files" + ); +}; + +/** 读取文件内容 */ +export const readTextFileApi = (fileId: number) => { + return http.request>( + "get", + `/reader/public/read/${fileId}` + ); +}; diff --git a/src/views/login/index.vue b/src/views/login/index.vue index 3c09c56..929017d 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -97,10 +97,25 @@ const onLogin = async (formEl: FormInstance | undefined) => { // 登录成功后 将token存储到sessionStorage中 setTokenFromBackend(data); // 获取后端路由 - initRouter().then(() => { - router.push(getTopMenu(true).path); - message("登录成功", { type: "success" }); - }); + initRouter() + .then(() => { + const topMenu = getTopMenu(true); + if (topMenu && topMenu.path) { + router.push(topMenu.path); + message("登录成功", { type: "success" }); + } else { + // 如果没有菜单权限,跳转到欢迎页 + router.push("/welcome"); + message("登录成功,但未分配菜单权限,请联系管理员", { + type: "warning" + }); + } + }) + .catch(error => { + console.error("路由初始化失败", error); + router.push("/welcome"); + message("登录成功,但路由初始化失败", { type: "warning" }); + }); if (isRememberMe.value) { savePassword(ruleForm.password); } @@ -143,8 +158,13 @@ async function fetchConfig() { useUserStoreHook().SET_DICTIONARY(res.data.dictionary); return true; } catch (error) { - console.error("获取系统配置失败:", error); - return false; + console.warn("获取系统配置失败,使用默认配置:", error); + // 使用默认配置,不影响登录 + isCaptchaOn.value = false; + isPhoneRegisterOn.value = false; + clientId.value = "1"; + useUserStoreHook().SET_DICTIONARY({}); + return true; // 返回true,允许继续 } } diff --git a/src/views/reader/file/index.vue b/src/views/reader/file/index.vue new file mode 100644 index 0000000..9dec742 --- /dev/null +++ b/src/views/reader/file/index.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/src/views/reader/file/utils/hook.tsx b/src/views/reader/file/utils/hook.tsx new file mode 100644 index 0000000..3a89e80 --- /dev/null +++ b/src/views/reader/file/utils/hook.tsx @@ -0,0 +1,221 @@ +import { message } from "@/utils/message"; +import { + getTextFileListApi, + deleteTextFileApi, + deleteBatchTextFileApi, + updateTextFileStatusApi, + type TextFileQuery, + type TextFileDTO +} from "@/api/reader"; +import { type PaginationProps } from "@pureadmin/table"; +import { reactive, ref, onMounted } from "vue"; +import { ElMessageBox, ElMessage } from "element-plus"; + +export function useTextFileHook() { + const searchFormParams = reactive({ + fileName: "", + status: undefined, + pageNum: 1, + pageSize: 10 + }); + + const dataList = ref>([]); + const pageLoading = ref(true); + const multipleSelection = ref([]); + + const columns: TableColumnList = [ + { + type: "selection", + align: "left" + }, + { + label: "序号", + type: "index", + index: (index: number) => { + return ( + (searchFormParams.pageNum - 1) * searchFormParams.pageSize + index + 1 + ); + }, + width: 70 + }, + { + label: "文件名", + prop: "originalFileName", + minWidth: 200 + }, + { + label: "文件大小", + prop: "fileSize", + minWidth: 100, + cellRenderer: ({ row }) => { + const size = row.fileSize; + if (size < 1024) { + return `${size} B`; + } else if (size < 1024 * 1024) { + return `${(size / 1024).toFixed(2)} KB`; + } else { + return `${(size / (1024 * 1024)).toFixed(2)} MB`; + } + } + }, + { + label: "文件描述", + prop: "description", + minWidth: 200 + }, + { + label: "状态", + prop: "status", + minWidth: 100, + cellRenderer: ({ row }) => { + return ( + + {row.status === 0 ? "正常" : "禁用"} + + ); + } + }, + { + label: "上传者", + prop: "uploadUserName", + minWidth: 120 + }, + { + label: "上传时间", + prop: "createTime", + minWidth: 160 + }, + { + label: "操作", + fixed: "right", + width: 180, + slot: "operation" + } + ]; + + const pagination = reactive({ + total: 0, + pageSize: 10, + currentPage: 1, + pageSizes: [10, 20, 50, 100], + background: true + }); + + const defaultSort = ref({ + prop: "createTime", + order: "descending" + }); + + async function onSearch() { + pageLoading.value = true; + try { + const response = await getTextFileListApi(searchFormParams); + // 后端直接返回PageR对象 + const pageData = response.data || response; + dataList.value = pageData.rows || []; + pagination.total = pageData.total || 0; + pagination.currentPage = searchFormParams.pageNum; + pagination.pageSize = searchFormParams.pageSize; + } catch (error) { + console.error("获取文件列表失败", error); + dataList.value = []; + pagination.total = 0; + } finally { + pageLoading.value = false; + } + } + + const resetForm = (formEl, tableRef) => { + if (!formEl) return; + formEl.resetFields(); + if (tableRef) { + tableRef.getTableRef().clearSort(); + tableRef.getTableRef().clearFilter(); + } + onSearch(); + }; + + function handleDelete(row: TextFileDTO) { + ElMessageBox.confirm(`确认删除文件"${row.originalFileName}"吗?`, "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(async () => { + await deleteTextFileApi(row.fileId); + message("删除成功", { type: "success" }); + onSearch(); + }) + .catch(() => {}); + } + + function handleBulkDelete() { + if (multipleSelection.value.length === 0) { + ElMessage.warning("请至少选择一条数据"); + return; + } + const fileIds = multipleSelection.value.map((item: any) => item.fileId); + const fileNames = multipleSelection.value + .map((item: any) => item.originalFileName) + .join("、"); + + ElMessageBox.confirm(`确认删除文件"${fileNames}"吗?`, "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(async () => { + await deleteBatchTextFileApi(fileIds); + message("删除成功", { type: "success" }); + onSearch(); + }) + .catch(() => {}); + } + + async function handleStatusChange(row: TextFileDTO) { + const newStatus = row.status === 0 ? 1 : 0; + try { + await updateTextFileStatusApi(row.fileId, newStatus); + message("状态更新成功", { type: "success" }); + onSearch(); + } catch (error) { + message("状态更新失败", { type: "error" }); + } + } + + const handleSelectionChange = val => { + multipleSelection.value = val; + }; + + const handleSizeChange = (val: number) => { + searchFormParams.pageSize = val; + onSearch(); + }; + + const handleCurrentChange = (val: number) => { + searchFormParams.pageNum = val; + onSearch(); + }; + + onMounted(() => { + onSearch(); + }); + + return { + searchFormParams, + pageLoading, + columns, + dataList, + pagination, + defaultSort, + multipleSelection, + onSearch, + resetForm, + handleDelete, + handleBulkDelete, + handleStatusChange, + handleSelectionChange, + handleSizeChange, + handleCurrentChange + }; +}