feat: preview file

This commit is contained in:
zzs 2025-02-27 17:16:50 +08:00
parent 59eae74619
commit 4da8b47371
7 changed files with 254 additions and 27 deletions
package.jsonpnpm-lock.yaml
src
components/Description/src
views
base/login
infra

View File

@ -52,6 +52,7 @@
"@videojs-player/vue": "^1.0.0",
"@vue/runtime-core": "^3.3.8",
"@vueuse/core": "^10.6.1",
"@vueuse/router": "^12.7.0",
"@zxcvbn-ts/core": "^3.0.4",
"ant-design-vue": "^4.0.7",
"axios": "^1.6.8",

View File

@ -32,6 +32,9 @@ importers:
'@vueuse/core':
specifier: ^10.6.1
version: 10.6.1(vue@3.3.8(typescript@5.2.2))
'@vueuse/router':
specifier: ^12.7.0
version: 12.7.0(typescript@5.2.2)(vue-router@4.2.5(vue@3.3.8(typescript@5.2.2)))
'@zxcvbn-ts/core':
specifier: ^3.0.4
version: 3.0.4
@ -445,10 +448,18 @@ packages:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
'@babel/helper-string-parser@7.25.9':
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.22.20':
resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-identifier@7.25.9':
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.22.15':
resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
engines: {node: '>=6.9.0'}
@ -470,6 +481,11 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/parser@7.26.9':
resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==}
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15':
resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
engines: {node: '>=6.9.0'}
@ -920,6 +936,10 @@ packages:
resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
engines: {node: '>=6.9.0'}
'@babel/types@7.26.9':
resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==}
engines: {node: '>=6.9.0'}
'@commitlint/cli@18.4.1':
resolution: {integrity: sha512-4+jljfd29Udw9RDDyigavLO9LvdbmB8O9xjDzVZ0R3lJuG7nCeyHgnKWIVpFaN590isZMV/cMeQK0gH7hRF40A==}
engines: {node: '>=v18'}
@ -1266,6 +1286,9 @@ packages:
'@jridgewell/sourcemap-codec@1.4.15':
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
'@jridgewell/sourcemap-codec@1.5.0':
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
'@jridgewell/trace-mapping@0.3.20':
resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
@ -1811,24 +1834,30 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
'@vue/compiler-core@3.3.7':
resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==}
'@vue/compiler-core@3.3.8':
resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==}
'@vue/compiler-dom@3.3.7':
resolution: {integrity: sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==}
'@vue/compiler-core@3.5.13':
resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
'@vue/compiler-dom@3.3.8':
resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==}
'@vue/compiler-dom@3.5.13':
resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
'@vue/compiler-sfc@3.3.8':
resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==}
'@vue/compiler-sfc@3.5.13':
resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
'@vue/compiler-ssr@3.3.8':
resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==}
'@vue/compiler-ssr@3.5.13':
resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
'@vue/devtools-api@6.5.1':
resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
@ -1846,19 +1875,30 @@ packages:
'@vue/reactivity@3.3.8':
resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==}
'@vue/reactivity@3.5.13':
resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
'@vue/runtime-core@3.3.8':
resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==}
'@vue/runtime-core@3.5.13':
resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
'@vue/runtime-dom@3.3.8':
resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==}
'@vue/runtime-dom@3.5.13':
resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
'@vue/server-renderer@3.3.8':
resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==}
peerDependencies:
vue: 3.3.8
'@vue/shared@3.3.7':
resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==}
'@vue/server-renderer@3.5.13':
resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
peerDependencies:
vue: 3.5.13
'@vue/shared@3.3.8':
resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==}
@ -1872,9 +1912,17 @@ packages:
'@vueuse/metadata@10.6.1':
resolution: {integrity: sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==}
'@vueuse/router@12.7.0':
resolution: {integrity: sha512-Jp6dIel54oc2nh++zqjY06ipCcTT6YWDCNQ8dSSnqRwx90wIl7w7MQP7Wpp1wrDwXEoqhelfeZf2gjfrkAhq3g==}
peerDependencies:
vue-router: '>=4.0.0-rc.1'
'@vueuse/shared@10.6.1':
resolution: {integrity: sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==}
'@vueuse/shared@12.7.0':
resolution: {integrity: sha512-coLlUw2HHKsm7rPN6WqHJQr18WymN4wkA/3ThFaJ4v4gWGWAQQGK+MJxLuJTBs4mojQiazlVWAKNJNpUWGRkNw==}
'@xmldom/xmldom@0.8.10':
resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==}
engines: {node: '>=10.0.0'}
@ -2453,6 +2501,9 @@ packages:
csstype@3.1.2:
resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
cz-git@1.7.1:
resolution: {integrity: sha512-NMe4REukCS7op1YA1jixRXOgII8Um2/Ii8TeyFEOISgp2ZzeobzkMOP8dXSrTQ3bvmm7YpPOdr2301yJkOJcbA==}
engines: {node: '>=v12.20.0'}
@ -3840,6 +3891,9 @@ packages:
magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
magic-string@0.30.5:
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
engines: {node: '>=12'}
@ -4004,6 +4058,11 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanoid@3.3.8:
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
nanomatch@1.2.13:
resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==}
engines: {node: '>=0.10.0'}
@ -4220,6 +4279,9 @@ packages:
picocolors@1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
picocolors@1.1.1:
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
@ -4309,6 +4371,10 @@ packages:
resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
engines: {node: ^10 || ^12 || >=14}
postcss@8.5.3:
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
posthtml-parser@0.2.1:
resolution: {integrity: sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==}
@ -4707,6 +4773,10 @@ packages:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
source-map-resolve@0.5.3:
resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==}
deprecated: See https://github.com/lydell/source-map-resolve#deprecated
@ -5345,6 +5415,14 @@ packages:
typescript:
optional: true
vue@3.5.13:
resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
vuedraggable@4.1.0:
resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==}
peerDependencies:
@ -5737,8 +5815,12 @@ snapshots:
'@babel/helper-string-parser@7.22.5': {}
'@babel/helper-string-parser@7.25.9': {}
'@babel/helper-validator-identifier@7.22.20': {}
'@babel/helper-validator-identifier@7.25.9': {}
'@babel/helper-validator-option@7.22.15': {}
'@babel/helper-wrap-function@7.22.20':
@ -5765,6 +5847,10 @@ snapshots:
dependencies:
'@babel/types': 7.23.0
'@babel/parser@7.26.9':
dependencies:
'@babel/types': 7.26.9
'@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.2)':
dependencies:
'@babel/core': 7.23.2
@ -6308,6 +6394,11 @@ snapshots:
'@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
'@babel/types@7.26.9':
dependencies:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
'@commitlint/cli@18.4.1(typescript@5.2.2)':
dependencies:
'@commitlint/format': 18.4.0
@ -6653,6 +6744,8 @@ snapshots:
'@jridgewell/sourcemap-codec@1.4.15': {}
'@jridgewell/sourcemap-codec@1.5.0': {}
'@jridgewell/trace-mapping@0.3.20':
dependencies:
'@jridgewell/resolve-uri': 3.1.1
@ -7361,13 +7454,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@vue/compiler-core@3.3.7':
dependencies:
'@babel/parser': 7.23.0
'@vue/shared': 3.3.7
estree-walker: 2.0.2
source-map-js: 1.0.2
'@vue/compiler-core@3.3.8':
dependencies:
'@babel/parser': 7.23.0
@ -7375,16 +7461,24 @@ snapshots:
estree-walker: 2.0.2
source-map-js: 1.0.2
'@vue/compiler-dom@3.3.7':
'@vue/compiler-core@3.5.13':
dependencies:
'@vue/compiler-core': 3.3.7
'@vue/shared': 3.3.7
'@babel/parser': 7.26.9
'@vue/shared': 3.5.13
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
'@vue/compiler-dom@3.3.8':
dependencies:
'@vue/compiler-core': 3.3.8
'@vue/shared': 3.3.8
'@vue/compiler-dom@3.5.13':
dependencies:
'@vue/compiler-core': 3.5.13
'@vue/shared': 3.5.13
'@vue/compiler-sfc@3.3.8':
dependencies:
'@babel/parser': 7.23.0
@ -7398,19 +7492,36 @@ snapshots:
postcss: 8.4.31
source-map-js: 1.0.2
'@vue/compiler-sfc@3.5.13':
dependencies:
'@babel/parser': 7.26.9
'@vue/compiler-core': 3.5.13
'@vue/compiler-dom': 3.5.13
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
estree-walker: 2.0.2
magic-string: 0.30.17
postcss: 8.5.3
source-map-js: 1.2.1
'@vue/compiler-ssr@3.3.8':
dependencies:
'@vue/compiler-dom': 3.3.8
'@vue/shared': 3.3.8
'@vue/compiler-ssr@3.5.13':
dependencies:
'@vue/compiler-dom': 3.5.13
'@vue/shared': 3.5.13
'@vue/devtools-api@6.5.1': {}
'@vue/language-core@1.8.22(typescript@5.2.2)':
dependencies:
'@volar/language-core': 1.10.5
'@volar/source-map': 1.10.5
'@vue/compiler-dom': 3.3.7
'@vue/shared': 3.3.8
'@vue/compiler-dom': 3.3.8
'@vue/shared': 3.5.13
computeds: 0.0.1
minimatch: 9.0.3
muggle-string: 0.3.1
@ -7430,24 +7541,44 @@ snapshots:
dependencies:
'@vue/shared': 3.3.8
'@vue/reactivity@3.5.13':
dependencies:
'@vue/shared': 3.5.13
'@vue/runtime-core@3.3.8':
dependencies:
'@vue/reactivity': 3.3.8
'@vue/shared': 3.3.8
'@vue/runtime-core@3.5.13':
dependencies:
'@vue/reactivity': 3.5.13
'@vue/shared': 3.5.13
'@vue/runtime-dom@3.3.8':
dependencies:
'@vue/runtime-core': 3.3.8
'@vue/shared': 3.3.8
csstype: 3.1.2
'@vue/runtime-dom@3.5.13':
dependencies:
'@vue/reactivity': 3.5.13
'@vue/runtime-core': 3.5.13
'@vue/shared': 3.5.13
csstype: 3.1.3
'@vue/server-renderer@3.3.8(vue@3.3.8(typescript@5.2.2))':
dependencies:
'@vue/compiler-ssr': 3.3.8
'@vue/shared': 3.3.8
vue: 3.3.8(typescript@5.2.2)
'@vue/shared@3.3.7': {}
'@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.2.2))':
dependencies:
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
vue: 3.5.13(typescript@5.2.2)
'@vue/shared@3.3.8': {}
@ -7465,6 +7596,14 @@ snapshots:
'@vueuse/metadata@10.6.1': {}
'@vueuse/router@12.7.0(typescript@5.2.2)(vue-router@4.2.5(vue@3.3.8(typescript@5.2.2)))':
dependencies:
'@vueuse/shared': 12.7.0(typescript@5.2.2)
vue: 3.5.13(typescript@5.2.2)
vue-router: 4.2.5(vue@3.3.8(typescript@5.2.2))
transitivePeerDependencies:
- typescript
'@vueuse/shared@10.6.1(vue@3.3.8(typescript@5.2.2))':
dependencies:
vue-demi: 0.14.6(vue@3.3.8(typescript@5.2.2))
@ -7472,6 +7611,12 @@ snapshots:
- '@vue/composition-api'
- vue
'@vueuse/shared@12.7.0(typescript@5.2.2)':
dependencies:
vue: 3.5.13(typescript@5.2.2)
transitivePeerDependencies:
- typescript
'@xmldom/xmldom@0.8.10': {}
'@zxcvbn-ts/core@3.0.4':
@ -8066,6 +8211,8 @@ snapshots:
csstype@3.1.2: {}
csstype@3.1.3: {}
cz-git@1.7.1: {}
czg@1.7.1: {}
@ -9546,6 +9693,10 @@ snapshots:
dependencies:
sourcemap-codec: 1.4.8
magic-string@0.30.17:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.0
magic-string@0.30.5:
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
@ -9732,6 +9883,8 @@ snapshots:
nanoid@3.3.6: {}
nanoid@3.3.8: {}
nanomatch@1.2.13:
dependencies:
arr-diff: 4.0.0
@ -9973,6 +10126,8 @@ snapshots:
picocolors@1.0.0: {}
picocolors@1.1.1: {}
picomatch@2.3.1: {}
pidtree@0.6.0: {}
@ -10051,6 +10206,12 @@ snapshots:
picocolors: 1.0.0
source-map-js: 1.0.2
postcss@8.5.3:
dependencies:
nanoid: 3.3.8
picocolors: 1.1.1
source-map-js: 1.2.1
posthtml-parser@0.2.1:
dependencies:
htmlparser2: 3.10.1
@ -10468,6 +10629,8 @@ snapshots:
source-map-js@1.0.2: {}
source-map-js@1.2.1: {}
source-map-resolve@0.5.3:
dependencies:
atob: 2.1.2
@ -11203,6 +11366,16 @@ snapshots:
optionalDependencies:
typescript: 5.2.2
vue@3.5.13(typescript@5.2.2):
dependencies:
'@vue/compiler-dom': 3.5.13
'@vue/compiler-sfc': 3.5.13
'@vue/runtime-dom': 3.5.13
'@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.2.2))
'@vue/shared': 3.5.13
optionalDependencies:
typescript: 5.2.2
vuedraggable@4.1.0(vue@3.3.8(typescript@5.2.2)):
dependencies:
sortablejs: 1.14.0

View File

@ -10,7 +10,8 @@ export function useDescription(props?: Partial<DescriptionProps>): UseDescReturn
const loaded = ref(false)
function register(instance: DescInstance) {
if (unref(loaded) && isProdMode() && instance == unref(desc))
console.warn('111 loaded')
if (unref(loaded) && isProdMode() && instance === unref(desc))
return
desc.value = instance

View File

@ -43,7 +43,7 @@ const captchaType = ref('blockPuzzle') // blockPuzzle 滑块 clickWord 点击文
const formData = reactive({
tenantName: '芋道源码',
username: 'admin',
password: 'admin123',
password: '',
captchaVerification: '',
})
@ -123,7 +123,7 @@ async function handleLogin(params) {
v-show="getShow" ref="formRef" class="enter-x p-4" :model="formData" :rules="getFormRules"
@keypress.enter="handleLogin"
>
<FormItem name="tenantName" class="enter-x">
<FormItem v-show="false" name="tenantName" class="enter-x">
<Input
v-if="tenantEnable === 'true'"
v-model:value="formData.tenantName"

View File

@ -41,9 +41,6 @@ export const columns: BasicColumn[] = [
title: '文件类型',
dataIndex: 'type',
width: 100,
customRender: ({ text }) => {
return useRender.renderTag(text)
},
},
{
title: '文件内容',

View File

@ -1,5 +1,6 @@
<script lang="ts" setup>
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { columns, searchFormSchema } from './file.data'
import { useI18n } from '@/hooks/web/useI18n'
import { useMessage } from '@/hooks/web/useMessage'
@ -11,6 +12,7 @@ import { getAccessToken, getTenantId } from '@/utils/auth'
import { copyText } from '@/utils/copyTextToClipboard'
import { uploadApi } from '@/api/base/upload'
import { DocAlert } from '@/components/DocAlert'
import { getConfigKey } from '@/api/infra/config'
defineOptions({ name: 'InfraFile' })
@ -51,6 +53,29 @@ async function handleDelete(record: Recordable) {
createMessage.success(t('common.delSuccessText'))
reload()
}
const router = useRouter()
async function handleOnlineView(record: Recordable, type: 'openNewTab' | 'iframe') {
console.warn(record)
console.warn(type)
const fileType = record.name.substring(record.name.lastIndexOf('.') + 1)
if (!'docx xlsx pptx'.includes(fileType)) {
createMessage.success(`暂不支持预览 ${fileType} 格式文件!`)
return
}
const wopi_client = await getConfigKey('wopi_client_addr')
const wopi_server = await getConfigKey('wopi_server_ip_addr')
const previewUlr = `${wopi_client}?lang=zh-cn&WOPISrc=${wopi_server}/admin-api/infra/file/preview/wopi/files/${record.id}`
if (type === 'openNewTab')
window.open(previewUlr)
if (type === 'iframe') {
const encode = encodeURIComponent(previewUlr)
router.push(`/infra/file/file-preview?url=${encode}`)
}
}
</script>
<template>
@ -74,7 +99,6 @@ async function handleDelete(record: Recordable) {
<template v-if="column.key === 'action'">
<TableAction
:actions="[
{ icon: IconEnum.VIEW, label: '复制链接', onClick: handleCopy.bind(null, record) },
{
icon: IconEnum.DELETE,
danger: true,
@ -87,6 +111,11 @@ async function handleDelete(record: Recordable) {
},
},
]"
:drop-down-actions="[
{ icon: IconEnum.VIEW, label: '复制下载链接', onClick: handleCopy.bind(null, record) },
{ icon: IconEnum.VIEW, label: '在线预览(新页签)', onClick: handleOnlineView.bind(null, record, 'openNewTab') },
{ icon: IconEnum.VIEW, label: '在线预览IFrame', onClick: handleOnlineView.bind(null, record, 'iframe') },
]"
/>
</template>
</template>

View File

@ -0,0 +1,26 @@
<script setup lang="ts">
import { useRouter } from 'vue-router'
import { onMounted, ref } from 'vue'
import { IFrame } from '@/components/IFrame'
import { useMessage } from '@/hooks/web/useMessage'
defineOptions({ name: 'InfraFilePreview' })
const { createMessage } = useMessage()
const rouer = useRouter()
const previewUrl = ref<string | undefined>(undefined)
onMounted(() => {
if (!previewUrl.value)
createMessage.success('未知文件地址!')
})
previewUrl.value = rouer.currentRoute.value.query?.url as string
</script>
<template>
<div>
<i-frame v-if="previewUrl" :src="previewUrl" />
</div>
</template>