@chenghongyu/xpt-file-viewer 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (274) hide show
  1. package/.vscode/extensions.json +3 -0
  2. package/README.md +5 -0
  3. package/auto-imports.d.ts +12 -0
  4. package/components.d.ts +45 -0
  5. package/dist.zip +0 -0
  6. package/index.html +13 -0
  7. package/package.json +100 -0
  8. package/presets/eslint/.eslintrc-auto-import.json +462 -0
  9. package/presets/plugins/html.ts +14 -0
  10. package/presets/shared/env.ts +46 -0
  11. package/presets/shared/resolvers.ts +29 -0
  12. package/presets/tov.ts +132 -0
  13. package/presets/types/auto-imports.d.ts +806 -0
  14. package/presets/types/components.d.ts +164 -0
  15. package/presets/types/env.d.ts +17 -0
  16. package/public/favicon.svg +1 -0
  17. package/public/icons.svg +24 -0
  18. package/public/testfile/README.md +5 -0
  19. package/public/testfile/useFileContextMenu.js +74 -0
  20. package/public/testfile//345/217/221/347/245/250.pdf +0 -0
  21. package/public/testfile//346/216/245/346/224/266/345/207/275.docx +0 -0
  22. package/public/testfile//350/247/204/346/240/274/345/236/213/345/217/2671.txt +263 -0
  23. package/public/testfile//350/247/206/351/242/2211.mp4 +0 -0
  24. package/public/testfile//351/237/263/351/242/2211.mp3 +0 -0
  25. package/src/App.vue +8 -0
  26. package/src/api/admin/admin-2fa.js +18 -0
  27. package/src/api/admin/admin-download-log.js +37 -0
  28. package/src/api/admin/admin-login-log.js +9 -0
  29. package/src/api/admin/admin-permission.js +9 -0
  30. package/src/api/admin/admin-setting.js +121 -0
  31. package/src/api/admin/admin-share.js +20 -0
  32. package/src/api/admin/admin-short-link.js +49 -0
  33. package/src/api/admin/admin-sso.js +38 -0
  34. package/src/api/admin/admin-storage.js +189 -0
  35. package/src/api/admin/admin-user.js +61 -0
  36. package/src/api/home/common.js +9 -0
  37. package/src/api/home/file-operator.js +89 -0
  38. package/src/api/home/home.js +87 -0
  39. package/src/api/home/install.js +18 -0
  40. package/src/api/home/login.js +9 -0
  41. package/src/api/home/only-office.js +10 -0
  42. package/src/api/home/share.js +115 -0
  43. package/src/api/home/user.js +74 -0
  44. package/src/api/tools/tools-115.js +17 -0
  45. package/src/api/tools/tools-gd.js +13 -0
  46. package/src/api/tools/tools-s3.js +25 -0
  47. package/src/api/tools/tools-sharepoint.js +19 -0
  48. package/src/assets/hero.png +0 -0
  49. package/src/assets/icons/401.svg +1 -0
  50. package/src/assets/icons/403.svg +45 -0
  51. package/src/assets/icons/404.svg +1 -0
  52. package/src/assets/icons/500.svg +1 -0
  53. package/src/assets/icons/admin-login.svg +1 -0
  54. package/src/assets/icons/document.svg +1 -0
  55. package/src/assets/icons/empty.svg +145 -0
  56. package/src/assets/icons/file-type-apk.svg +1 -0
  57. package/src/assets/icons/file-type-archive.svg +1 -0
  58. package/src/assets/icons/file-type-audio.svg +1 -0
  59. package/src/assets/icons/file-type-back.svg +1 -0
  60. package/src/assets/icons/file-type-css.svg +1 -0
  61. package/src/assets/icons/file-type-deb.svg +1 -0
  62. package/src/assets/icons/file-type-dll.svg +1 -0
  63. package/src/assets/icons/file-type-doc.svg +1 -0
  64. package/src/assets/icons/file-type-document.svg +1 -0
  65. package/src/assets/icons/file-type-docx.svg +1 -0
  66. package/src/assets/icons/file-type-exe.svg +1 -0
  67. package/src/assets/icons/file-type-expression.svg +1 -0
  68. package/src/assets/icons/file-type-file.svg +1 -0
  69. package/src/assets/icons/file-type-folder.svg +1 -0
  70. package/src/assets/icons/file-type-html.svg +1 -0
  71. package/src/assets/icons/file-type-image.svg +1 -0
  72. package/src/assets/icons/file-type-java.svg +1 -0
  73. package/src/assets/icons/file-type-js.svg +1 -0
  74. package/src/assets/icons/file-type-less.svg +1 -0
  75. package/src/assets/icons/file-type-md.svg +1 -0
  76. package/src/assets/icons/file-type-office.svg +1 -0
  77. package/src/assets/icons/file-type-pdf.svg +1 -0
  78. package/src/assets/icons/file-type-php.svg +1 -0
  79. package/src/assets/icons/file-type-ppt.svg +1 -0
  80. package/src/assets/icons/file-type-pptx.svg +1 -0
  81. package/src/assets/icons/file-type-py.svg +1 -0
  82. package/src/assets/icons/file-type-rb.svg +1 -0
  83. package/src/assets/icons/file-type-root.svg +1 -0
  84. package/src/assets/icons/file-type-rpm.svg +1 -0
  85. package/src/assets/icons/file-type-rust.svg +1 -0
  86. package/src/assets/icons/file-type-script.svg +1 -0
  87. package/src/assets/icons/file-type-text.svg +1 -0
  88. package/src/assets/icons/file-type-three3d.svg +5 -0
  89. package/src/assets/icons/file-type-vbs.svg +1 -0
  90. package/src/assets/icons/file-type-video.svg +1 -0
  91. package/src/assets/icons/file-type-xls.svg +1 -0
  92. package/src/assets/icons/file-type-xlsx.svg +1 -0
  93. package/src/assets/icons/file-type-xml.svg +1 -0
  94. package/src/assets/icons/file-type-yaml.svg +1 -0
  95. package/src/assets/icons/file-upload.svg +1 -0
  96. package/src/assets/icons/github.svg +1 -0
  97. package/src/assets/icons/install-step.svg +40 -0
  98. package/src/assets/icons/reset-password.svg +1 -0
  99. package/src/assets/icons/storage-aliyun.svg +1 -0
  100. package/src/assets/icons/storage-baidu.svg +1 -0
  101. package/src/assets/icons/storage-doge-cloud.svg +207 -0
  102. package/src/assets/icons/storage-ftp.svg +13 -0
  103. package/src/assets/icons/storage-google-drive.svg +8 -0
  104. package/src/assets/icons/storage-huawei.svg +1 -0
  105. package/src/assets/icons/storage-local.svg +11 -0
  106. package/src/assets/icons/storage-minio.svg +1 -0
  107. package/src/assets/icons/storage-onedrive-china.svg +18 -0
  108. package/src/assets/icons/storage-onedrive.svg +4 -0
  109. package/src/assets/icons/storage-open115.svg +23 -0
  110. package/src/assets/icons/storage-qiniu.svg +1 -0
  111. package/src/assets/icons/storage-s3.svg +5 -0
  112. package/src/assets/icons/storage-sftp.svg +13 -0
  113. package/src/assets/icons/storage-sharepoint-china.svg +23 -0
  114. package/src/assets/icons/storage-sharepoint.svg +1 -0
  115. package/src/assets/icons/storage-tencent.svg +9 -0
  116. package/src/assets/icons/storage-ufile.svg +14 -0
  117. package/src/assets/icons/storage-upyun.svg +1 -0
  118. package/src/assets/icons/storage-webdav.svg +1 -0
  119. package/src/assets/icons/upload.svg +50 -0
  120. package/src/assets/icons/zfile-basic.svg +17 -0
  121. package/src/assets/icons/zfile-horizontal.svg +16 -0
  122. package/src/assets/icons/zfile.svg +1 -0
  123. package/src/assets/vite.svg +1 -0
  124. package/src/assets/vue.svg +1 -0
  125. package/src/components/HelloWorld.vue +319 -0
  126. package/src/components/common/QrCodePreview.vue +118 -0
  127. package/src/components/common/dialog/ZDialog.vue +171 -0
  128. package/src/components/common/dialog/types.ts +19 -0
  129. package/src/components/common/dialog/useDialog.ts +18 -0
  130. package/src/components/common/dialog/useDialogWithForm.ts +21 -0
  131. package/src/components/copy.vue +133 -0
  132. package/src/components/file/preview/AudioPlayer.vue +333 -0
  133. package/src/components/file/preview/CopyCode.vue +47 -0
  134. package/src/components/file/preview/FileGallery.vue +199 -0
  135. package/src/components/file/preview/ImageViewer.vue +432 -0
  136. package/src/components/file/preview/KkFileViewer.vue +86 -0
  137. package/src/components/file/preview/KkFileViewerDialog.vue +42 -0
  138. package/src/components/file/preview/MarkdownViewer.vue +102 -0
  139. package/src/components/file/preview/MarkdownViewerAsyncLoading.vue +17 -0
  140. package/src/components/file/preview/MarkdownViewerDialogAsyncLoading.vue +12 -0
  141. package/src/components/file/preview/OfficeViewer.vue +76 -0
  142. package/src/components/file/preview/OfficeViewerDialog.vue +55 -0
  143. package/src/components/file/preview/PdfViewer.vue +157 -0
  144. package/src/components/file/preview/PdfViewerDialog.vue +41 -0
  145. package/src/components/file/preview/TextViewer.vue +232 -0
  146. package/src/components/file/preview/TextViewerAsyncLoading.vue +22 -0
  147. package/src/components/file/preview/TextViewerDialog.vue +53 -0
  148. package/src/components/file/preview/Three3dPreview.vue +114 -0
  149. package/src/components/file/preview/Three3dPreviewDialog.vue +50 -0
  150. package/src/components/file/preview/VideoPlayer.vue +341 -0
  151. package/src/components/file/preview/VideoPlayerAsyncLoading.vue +45 -0
  152. package/src/components/file/preview/VideoPlayerDialog.vue +51 -0
  153. package/src/components/file/selectFolder/SelectFolder.vue +208 -0
  154. package/src/components/file/selectFolder/index.ts +50 -0
  155. package/src/components/file/selectFolder/types.ts +5 -0
  156. package/src/components/fileReview/AudioPlayer-copy.vue +333 -0
  157. package/src/components/fileReview/PdfViewer-copy.vue +157 -0
  158. package/src/components/fileReview/TextViewer-copy.vue +44 -0
  159. package/src/components/fileReview/VideoPlayer-copy.vue +341 -0
  160. package/src/components/messageBox/confirm/confirm.vue +137 -0
  161. package/src/components/messageBox/confirm/index.ts +27 -0
  162. package/src/components/messageBox/confirm/types.ts +15 -0
  163. package/src/components/messageBox/messageBox.ts +9 -0
  164. package/src/components/messageBox/prompt/index.ts +27 -0
  165. package/src/components/messageBox/prompt/prompt.vue +178 -0
  166. package/src/components/messageBox/prompt/types.ts +24 -0
  167. package/src/components/vue-codemirror/editor.vue +212 -0
  168. package/src/components/vue-codemirror/encodings.ts +27 -0
  169. package/src/components/vue-codemirror/index.vue +380 -0
  170. package/src/components/vue-codemirror/lang-code/cpp/index.ts +3 -0
  171. package/src/components/vue-codemirror/lang-code/css/index.ts +2 -0
  172. package/src/components/vue-codemirror/lang-code/dockerfile/index.ts +5 -0
  173. package/src/components/vue-codemirror/lang-code/erlang/index.ts +6 -0
  174. package/src/components/vue-codemirror/lang-code/go/index.ts +5 -0
  175. package/src/components/vue-codemirror/lang-code/html/index.ts +3 -0
  176. package/src/components/vue-codemirror/lang-code/java/index.ts +3 -0
  177. package/src/components/vue-codemirror/lang-code/javascript/index.ts +3 -0
  178. package/src/components/vue-codemirror/lang-code/json/index.ts +3 -0
  179. package/src/components/vue-codemirror/lang-code/jsx/index.ts +3 -0
  180. package/src/components/vue-codemirror/lang-code/lua/index.ts +6 -0
  181. package/src/components/vue-codemirror/lang-code/markdown/index.ts +2 -0
  182. package/src/components/vue-codemirror/lang-code/mysql/index.ts +3 -0
  183. package/src/components/vue-codemirror/lang-code/nginx/index.ts +6 -0
  184. package/src/components/vue-codemirror/lang-code/perl/index.ts +5 -0
  185. package/src/components/vue-codemirror/lang-code/pgsql/index.ts +2 -0
  186. package/src/components/vue-codemirror/lang-code/php/index.ts +3 -0
  187. package/src/components/vue-codemirror/lang-code/powershell/index.ts +3 -0
  188. package/src/components/vue-codemirror/lang-code/python/index.ts +2 -0
  189. package/src/components/vue-codemirror/lang-code/r/index.ts +5 -0
  190. package/src/components/vue-codemirror/lang-code/ruby/index.ts +5 -0
  191. package/src/components/vue-codemirror/lang-code/rust/index.ts +2 -0
  192. package/src/components/vue-codemirror/lang-code/shell/index.ts +5 -0
  193. package/src/components/vue-codemirror/lang-code/sql/index.ts +3 -0
  194. package/src/components/vue-codemirror/lang-code/stylus/index.ts +3 -0
  195. package/src/components/vue-codemirror/lang-code/swift/index.ts +4 -0
  196. package/src/components/vue-codemirror/lang-code/toml/index.ts +3 -0
  197. package/src/components/vue-codemirror/lang-code/tsx/index.ts +2 -0
  198. package/src/components/vue-codemirror/lang-code/typescript/index.ts +2 -0
  199. package/src/components/vue-codemirror/lang-code/vb/index.ts +3 -0
  200. package/src/components/vue-codemirror/lang-code/vbscript/index.ts +3 -0
  201. package/src/components/vue-codemirror/lang-code/xml/index.ts +2 -0
  202. package/src/components/vue-codemirror/lang-code/yaml/index.ts +3 -0
  203. package/src/components/vue-codemirror/languages.ts +8 -0
  204. package/src/components/vue-codemirror/themes.ts +5 -0
  205. package/src/components/vue-codemirror/toolbar.vue +183 -0
  206. package/src/components/vue-codemirror/types.ts +12 -0
  207. package/src/components.d.ts +49 -0
  208. package/src/composables/admin/layout/admin-layout.js +53 -0
  209. package/src/composables/admin/link/useLinkSetting.js +16 -0
  210. package/src/composables/admin/sso/baseSsoConfig.js +54 -0
  211. package/src/composables/admin/sso/useSsoConfig.js +176 -0
  212. package/src/composables/admin/storage/storage-copy.js +89 -0
  213. package/src/composables/admin/storage/storage-filter.js +64 -0
  214. package/src/composables/admin/storage/storage-list.js +202 -0
  215. package/src/composables/admin/storage/storage-password.js +101 -0
  216. package/src/composables/admin/storage/storage-readme.js +102 -0
  217. package/src/composables/admin/storage/utils/open115-util.js +61 -0
  218. package/src/composables/admin/useAdminSetting.js +60 -0
  219. package/src/composables/admin/useClientInfo.js +20 -0
  220. package/src/composables/admin/user/user-copy.js +79 -0
  221. package/src/composables/file/useBatchOperatorResult.js +19 -0
  222. package/src/composables/file/useFileContextMenu.js +74 -0
  223. package/src/composables/file/useFileData.js +243 -0
  224. package/src/composables/file/useFileLink.js +175 -0
  225. package/src/composables/file/useFileLoading.js +41 -0
  226. package/src/composables/file/useFileLongPressEvent.js +71 -0
  227. package/src/composables/file/useFileOperator.js +347 -0
  228. package/src/composables/file/useFilePreview.js +99 -0
  229. package/src/composables/file/useFilePwd.js +138 -0
  230. package/src/composables/file/useFileSelect.js +105 -0
  231. package/src/composables/file/useFileShare.js +39 -0
  232. package/src/composables/file/useFileUpload.js +1045 -0
  233. package/src/composables/file/useKkFileViewDialog.js +24 -0
  234. package/src/composables/file/useOfficeViewerDialog.js +20 -0
  235. package/src/composables/file/usePdfViewerDialog.js +22 -0
  236. package/src/composables/file/useShareActions.js +94 -0
  237. package/src/composables/file/useShareTableOperator.js +84 -0
  238. package/src/composables/file/useTableOperator.js +211 -0
  239. package/src/composables/file/useTextViewerDialog.js +22 -0
  240. package/src/composables/file/useThree3dPreviewDialog.js +23 -0
  241. package/src/composables/file/useVideoPlayerDialog.js +19 -0
  242. package/src/composables/header/useHeaderBreadcrumb.js +111 -0
  243. package/src/composables/header/useHeaderStorageList.js +150 -0
  244. package/src/composables/header/useSetting.js +58 -0
  245. package/src/composables/share/useShareData.js +178 -0
  246. package/src/composables/useDarks.ts +4 -0
  247. package/src/composables/useRouterData.js +41 -0
  248. package/src/constant/index.js +193 -0
  249. package/src/http/index.js +153 -0
  250. package/src/http/request.js +31 -0
  251. package/src/main.ts +23 -0
  252. package/src/stores/file-data.ts +108 -0
  253. package/src/stores/global-config.ts +115 -0
  254. package/src/stores/storage-config.ts +123 -0
  255. package/src/style.css +296 -0
  256. package/src/styles/admin.scss +91 -0
  257. package/src/styles/code-editor-variables.scss +52 -0
  258. package/src/styles/element-plus.scss +22 -0
  259. package/src/styles/error-page.css +26 -0
  260. package/src/styles/main.css +142 -0
  261. package/src/styles/tailwind/index.scss +33 -0
  262. package/src/utils/index.ts +7 -0
  263. package/src/utils/models/base.ts +34 -0
  264. package/src/utils/models/file.ts +95 -0
  265. package/src/utils/models/path.ts +117 -0
  266. package/src/utils/models/qrcode.ts +21 -0
  267. package/src/utils/models/time.ts +132 -0
  268. package/src/utils/models/util.ts +42 -0
  269. package/src/utils/models/window.ts +14 -0
  270. package/stats.html +4950 -0
  271. package/tsconfig.app.json +16 -0
  272. package/tsconfig.json +7 -0
  273. package/tsconfig.node.json +26 -0
  274. package/vite.config.ts +57 -0
@@ -0,0 +1,50 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="782.04441" height="701.88002"
2
+ viewBox="0 0 782.04441 701.88002" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <path d="M609.48783,100.59015l-25.44631,6.56209L270.53735,187.9987,245.091,194.56079A48.17927,48.17927,0,0,0,210.508,253.17865L320.849,681.05606a48.17924,48.17924,0,0,0,58.61776,34.58317l.06572-.01695,364.26536-93.93675.06572-.01695a48.17923,48.17923,0,0,0,34.58309-58.6178l-110.341-427.87741A48.17928,48.17928,0,0,0,609.48783,100.59015Z"
4
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
5
+ <path d="M612.94784,114.00532l-30.13945,7.77236L278.68955,200.20385l-30.139,7.77223a34.30949,34.30949,0,0,0-24.6275,41.74308l110.341,427.87741a34.30946,34.30946,0,0,0,41.7431,24.62736l.06572-.01695,364.26536-93.93674.06619-.01707a34.30935,34.30935,0,0,0,24.627-41.7429l-110.341-427.87741A34.30938,34.30938,0,0,0,612.94784,114.00532Z"
6
+ transform="translate(-208.9778 -99.05999)" fill="#fff"/>
7
+ <path d="M590.19,252.56327,405.917,300.08359a8.01411,8.01411,0,0,1-4.00241-15.52046l184.273-47.52033A8.01412,8.01412,0,0,1,590.19,252.56327Z"
8
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
9
+ <path d="M628.955,270.49906,412.671,326.27437a8.01411,8.01411,0,1,1-4.00241-15.52046l216.284-55.77531a8.01411,8.01411,0,0,1,4.00242,15.52046Z"
10
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
11
+ <path d="M620.45825,369.93676l-184.273,47.52032a8.01411,8.01411,0,1,1-4.00242-15.52046l184.273-47.52032a8.01411,8.01411,0,1,1,4.00241,15.52046Z"
12
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
13
+ <path d="M659.22329,387.87255l-216.284,55.77531a8.01411,8.01411,0,1,1-4.00242-15.52046l216.284-55.77531a8.01411,8.01411,0,0,1,4.00242,15.52046Z"
14
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
15
+ <path d="M650.72653,487.31025l-184.273,47.52033a8.01412,8.01412,0,0,1-4.00242-15.52047l184.273-47.52032a8.01411,8.01411,0,0,1,4.00242,15.52046Z"
16
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
17
+ <path d="M689.49156,505.246l-216.284,55.77532a8.01412,8.01412,0,1,1-4.00241-15.52047l216.284-55.77531a8.01411,8.01411,0,0,1,4.00242,15.52046Z"
18
+ transform="translate(-208.9778 -99.05999)" fill="#f2f2f2"/>
19
+ <path d="M374.45884,348.80871l-65.21246,16.817a3.847,3.847,0,0,1-4.68062-2.76146L289.5963,304.81607a3.847,3.847,0,0,1,2.76145-4.68061l65.21247-16.817a3.847,3.847,0,0,1,4.68061,2.76145l14.96947,58.04817A3.847,3.847,0,0,1,374.45884,348.80871Z"
20
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
21
+ <path d="M404.72712,466.1822l-65.21247,16.817a3.847,3.847,0,0,1-4.68062-2.76146l-14.96946-58.04816A3.847,3.847,0,0,1,322.626,417.509l65.21246-16.817a3.847,3.847,0,0,1,4.68062,2.76145l14.96946,58.04817A3.847,3.847,0,0,1,404.72712,466.1822Z"
22
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
23
+ <path d="M434.99539,583.55569l-65.21246,16.817a3.847,3.847,0,0,1-4.68062-2.76145l-14.96946-58.04817a3.847,3.847,0,0,1,2.76145-4.68062l65.21247-16.817a3.847,3.847,0,0,1,4.68061,2.76146l14.96947,58.04816A3.847,3.847,0,0,1,434.99539,583.55569Z"
24
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
25
+ <path d="M863.63647,209.0517H487.31811a48.17928,48.17928,0,0,0-48.125,48.12512V699.05261a48.17924,48.17924,0,0,0,48.125,48.12507H863.63647a48.17924,48.17924,0,0,0,48.125-48.12507V257.17682A48.17928,48.17928,0,0,0,863.63647,209.0517Z"
26
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
27
+ <path d="M863.637,222.90589H487.31811a34.30948,34.30948,0,0,0-34.271,34.27093V699.05261a34.30947,34.30947,0,0,0,34.271,34.27088H863.637a34.30936,34.30936,0,0,0,34.27051-34.27088V257.17682A34.30937,34.30937,0,0,0,863.637,222.90589Z"
28
+ transform="translate(-208.9778 -99.05999)" fill="#fff"/>
29
+ <circle cx="694.19401" cy="614.02963" r="87.85039" fill="#5a9cf8"/>
30
+ <path d="M945.18722,701.63087H914.63056V671.07421a11.45875,11.45875,0,0,0-22.9175,0v30.55666H861.1564a11.45875,11.45875,0,0,0,0,22.9175h30.55666V755.105a11.45875,11.45875,0,1,0,22.9175,0V724.54837h30.55666a11.45875,11.45875,0,0,0,0-22.9175Z"
31
+ transform="translate(-208.9778 -99.05999)" fill="#fff"/>
32
+ <path d="M807.00068,465.71551H616.699a8.01412,8.01412,0,1,1,0-16.02823H807.00068a8.01412,8.01412,0,0,1,0,16.02823Z"
33
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
34
+ <path d="M840.05889,492.76314H616.699a8.01412,8.01412,0,1,1,0-16.02823H840.05889a8.01411,8.01411,0,1,1,0,16.02823Z"
35
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
36
+ <path d="M807.00068,586.929H616.699a8.01412,8.01412,0,1,1,0-16.02823H807.00068a8.01411,8.01411,0,0,1,0,16.02823Z"
37
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
38
+ <path d="M840.05889,613.97661H616.699a8.01412,8.01412,0,1,1,0-16.02823H840.05889a8.01412,8.01412,0,1,1,0,16.02823Z"
39
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
40
+ <path d="M574.07028,505.04162H506.72434a3.847,3.847,0,0,1-3.84278-3.84278V441.25158a3.847,3.847,0,0,1,3.84278-3.84278h67.34594a3.847,3.847,0,0,1,3.84278,3.84278v59.94726A3.847,3.847,0,0,1,574.07028,505.04162Z"
41
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
42
+ <path d="M574.07028,626.25509H506.72434a3.847,3.847,0,0,1-3.84278-3.84278V562.46505a3.847,3.847,0,0,1,3.84278-3.84278h67.34594a3.847,3.847,0,0,1,3.84278,3.84278v59.94726A3.847,3.847,0,0,1,574.07028,626.25509Z"
43
+ transform="translate(-208.9778 -99.05999)" fill="#e6e6e6"/>
44
+ <path d="M807.21185,330.781H666.91017a8.01411,8.01411,0,0,1,0-16.02823H807.21185a8.01411,8.01411,0,0,1,0,16.02823Z"
45
+ transform="translate(-208.9778 -99.05999)" fill="#ccc"/>
46
+ <path d="M840.27007,357.82862H666.91017a8.01411,8.01411,0,1,1,0-16.02822h173.3599a8.01411,8.01411,0,0,1,0,16.02822Z"
47
+ transform="translate(-208.9778 -99.05999)" fill="#ccc"/>
48
+ <path d="M635.85911,390.6071H506.51316a3.847,3.847,0,0,1-3.84277-3.84277V285.81706a3.847,3.847,0,0,1,3.84277-3.84277H635.85911a3.847,3.847,0,0,1,3.84277,3.84277V386.76433A3.847,3.847,0,0,1,635.85911,390.6071Z"
49
+ transform="translate(-208.9778 -99.05999)" fill="#5a9cf8"/>
50
+ </svg>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="287px" height="252px" viewBox="0 0 287 252" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>logo 纵向</title>
4
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="logo-纵向" fill-rule="nonzero">
6
+ <g id="ZFILE" transform="translate(8.300000, 167.600000)">
7
+ <polygon id="路径" fill="#595BB3" points="1.42108547e-14 69.4 55.5 69.4 55.5 56.2 18.3 56.2 18.3 55.6 52.9 13.1 52.9 -2.84217094e-14 1.9 -2.84217094e-14 1.9 13.1 34.1 13.1 34.2 13.7 1.42108547e-14 55.8"></polygon>
8
+ <polygon id="路径" fill="#000000" points="115.4 13.2 115.4 -2.84217094e-14 73 -2.84217094e-14 73 69.4 88.2 69.4 88.2 42.4 113.4 42.4 113.4 29.3 88.2 29.3 88.2 13.2"></polygon>
9
+ <polygon id="路径" fill="#000000" points="132.6 69.4 147.8 69.4 147.8 -2.84217094e-14 132.6 -2.84217094e-14"></polygon>
10
+ <polygon id="路径" fill="#000000" points="184.1 56.2 184.1 -2.84217094e-14 168.9 -2.84217094e-14 168.9 69.4 211.7 69.4 211.7 56.2"></polygon>
11
+ <polygon id="路径" fill="#000000" points="242.6 56.2 242.6 40.2 267.8 40.2 267.8 27.5 242.6 27.5 242.6 13.2 269.8 13.2 269.8 -2.84217094e-14 227.4 -2.84217094e-14 227.4 69.4 271.2 69.4 271.2 56.2"></polygon>
12
+ </g>
13
+ <path d="M155.303566,34.8843743 C143.014443,29.7463611 128.839849,32.5252418 119.400426,41.9230624 C109.961003,51.3208831 107.119541,65.4830638 112.203222,77.7947622 C117.286904,90.1064605 129.29251,98.1383638 142.612485,98.1383638 C151.319007,98.1578447 159.676691,94.7178188 165.846729,88.5749741 C172.016767,82.4321294 175.493676,74.0897209 175.513125,65.3831971 C175.57119,52.0633514 167.59269,40.0223874 155.303566,34.8843743 Z" id="路径" fill="#F4CA1C"></path>
14
+ <path d="M234.965485,82.8451971 C234.902832,69.0287019 228.809887,55.9284521 218.283833,46.9784997 C207.757779,38.0285474 193.848266,34.1213759 180.201485,36.2811971 C174.82387,18.3284796 159.76454,4.9549997 141.30214,1.73652475 C122.839739,-1.4819502 104.143536,6.00706534 93.0084849,21.0811971 C86.5932216,29.7336192 83.2301823,40.2701107 83.4464849,51.0391971 C62.9603859,54.3195973 48.4484851,72.812069 50.1328507,93.4906615 C51.8172162,114.169254 69.1305536,130.069415 89.8774849,129.991484 L192.958485,129.991484 C193.963224,129.984369 194.951497,129.735329 195.839485,129.265197 C218.406796,125.316997 234.894863,105.75517 234.965485,82.8451971 L234.965485,82.8451971 Z M187.615485,117.474699 L89.8774849,117.474699 C80.1121566,117.533383 71.0631901,112.357596 66.1633607,103.9103 C61.2635313,95.4630038 61.2635313,85.0383905 66.1633607,76.5910944 C71.0631901,68.1437983 80.1121566,62.9680114 89.8774849,63.0271971 C90.4535248,63.0187072 91.0256184,62.9305375 91.5774849,62.7651971 C94.7965405,62.0685748 96.9207179,58.9910781 96.4304849,55.7341971 C94.9630708,46.1041774 97.3863191,36.2859503 103.165872,28.444563 C108.945424,20.6031757 117.606596,15.3826562 127.239485,13.9341971 C145.453006,11.1172622 162.942487,22.2047025 168.165485,39.8791971 C151.224797,47.4677777 140.306113,64.2825514 140.265485,82.8451971 C140.265485,86.3163068 143.079375,89.1301971 146.550485,89.1301971 C150.021595,89.1301971 152.835485,86.3163068 152.835485,82.8451971 C152.774757,68.7650048 161.209669,56.0374193 174.200642,50.6069386 C187.191615,45.1764578 202.17514,48.114679 212.153069,58.0492876 C222.130997,67.9838962 225.134384,82.9544952 219.760479,95.9689735 C214.386573,108.983452 201.695808,117.474699 187.615485,117.474699 L187.615485,117.474699 Z" id="形状" fill="#595BB3"></path>
15
+ </g>
16
+ </g>
17
+ </svg>
@@ -0,0 +1,16 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="538px" height="143px" viewBox="0 0 538 143" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <title>logo 横向</title>
4
+ <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
5
+ <g id="logo-横向" fill-rule="nonzero">
6
+ <g id="ZFILE" transform="translate(248.300000, 38.600000)">
7
+ <path d="M52.9,0 L52.9,13.1 L18.3,55.6 L18.3,56.2 L55.5,56.2 L55.5,69.4 L0,69.4 L0,55.8 L34.2,13.7 L34.1,13.1 L1.9,13.1 L1.9,0 L52.9,0 Z M115.4,0 L115.4,13.2 L88.2,13.2 L88.2,29.3 L113.4,29.3 L113.4,42.4 L88.2,42.4 L88.2,69.4 L73,69.4 L73,0 L115.4,0 Z" id="路径-2" fill="#595BB3"></path>
8
+ <polygon id="路径" fill="#000000" points="132.6 69.4 147.8 69.4 147.8 0 132.6 0"></polygon>
9
+ <polygon id="路径" fill="#000000" points="184.1 56.2 184.1 0 168.9 0 168.9 69.4 211.7 69.4 211.7 56.2"></polygon>
10
+ <polygon id="路径" fill="#000000" points="242.6 56.2 242.6 40.2 267.8 40.2 267.8 27.5 242.6 27.5 242.6 13.2 269.8 13.2 269.8 0 227.4 0 227.4 69.4 271.2 69.4 271.2 56.2"></polygon>
11
+ </g>
12
+ <path d="M128.512807,71.3831971 C128.57119,58.0633514 120.59269,46.0223874 108.303566,40.8843743 C96.0144427,35.7463611 81.8398493,38.5252418 72.4004264,47.9230624 C62.9610034,57.3208831 60.1195406,71.4830638 65.2032225,83.7947622 C70.2869044,96.1064605 82.2925097,104.138281 95.6124849,104.138281 C104.319007,104.157845 112.676691,100.717819 118.846729,94.5749741 C125.016767,88.4321294 128.493676,80.0897209 128.512807,71.3831971 L128.512807,71.3831971 Z" id="路径" fill="#F4CA1C"></path>
13
+ <path d="M187.965485,88.8451971 C187.902832,75.0287019 181.809887,61.9284521 171.283833,52.9784997 C160.757779,44.0285474 146.848266,40.1213759 133.201485,42.2811971 C127.82387,24.3284796 112.76454,10.9549997 94.3021397,7.73652475 C75.8397393,4.5180498 57.1435358,12.0070653 46.0084849,27.0811971 C39.5932216,35.7336192 36.2301823,46.2701107 36.4464849,57.0391971 C15.9603859,60.3195973 1.44848513,78.812069 3.13285068,99.4906615 C4.81721623,120.169254 22.1305536,136.069415 42.8774849,135.991484 L145.958485,135.991484 C146.963224,135.984369 147.951497,135.735329 148.839485,135.265197 C171.406796,131.316997 187.894863,111.75517 187.965485,88.8451971 L187.965485,88.8451971 Z M140.615485,123.474699 L42.8774849,123.474699 C33.1121566,123.533383 24.0631901,118.357596 19.1633607,109.9103 C14.2635313,101.463004 14.2635313,91.0383905 19.1633607,82.5910944 C24.0631901,74.1437983 33.1121566,68.9680114 42.8774849,69.0271971 C43.4535248,69.0187072 44.0256184,68.9305375 44.5774849,68.7651971 C47.7965405,68.0685748 49.9207179,64.9910781 49.4304849,61.7341971 C47.9630708,52.1041774 50.3863191,42.2859503 56.1658718,34.444563 C61.9454244,26.6031757 70.6065959,21.3826562 80.2394849,19.9341971 C98.4530058,17.1172622 115.942487,28.2047025 121.165485,45.8791971 C104.224797,53.4677777 93.3061126,70.2825514 93.2654849,88.8451971 C93.2654849,92.3163068 96.0793752,95.1301971 99.5504849,95.1301971 C103.021595,95.1301971 105.835485,92.3163068 105.835485,88.8451971 C105.774757,74.7650048 114.209669,62.0374193 127.200642,56.6069386 C140.191615,51.1764578 155.17514,54.114679 165.153069,64.0492876 C175.130997,73.9838962 178.134384,88.9544952 172.760479,101.968973 C167.386573,114.983452 154.695808,123.474699 140.615485,123.474699 L140.615485,123.474699 Z" id="形状" fill="#595BB3"></path>
14
+ </g>
15
+ </g>
16
+ </svg>
@@ -0,0 +1 @@
1
+ <svg t="1641979577685" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6856" width="200" height="200"><path d="M678.64064 514.00704a168.448 168.448 0 1 0-168.448 167.7056 168.06912 168.06912 0 0 0 168.448-167.7056z" fill="#F4CA1C" p-id="6857"></path><path d="M983.04 603.41248a242.48832 242.48832 0 0 0-280.39168-238.40768 253.32224 253.32224 0 0 0-446.42816-77.824 249.13408 249.13408 0 0 0-48.95744 153.38496A203.39712 203.39712 0 0 0 240.18944 844.8h527.77472a31.98976 31.98976 0 0 0 14.75072-3.71712A242.03776 242.03776 0 0 0 983.04 603.41248z m-242.432 177.30048H240.18944a139.38688 139.38688 0 1 1 0-278.76864 31.96928 31.96928 0 0 0 8.704-1.34144 31.96416 31.96416 0 0 0 24.84736-35.99872 187.81184 187.81184 0 0 1 157.74208-214.016A188.46208 188.46208 0 0 1 641.024 383.42656a241.62816 241.62816 0 0 0-142.848 219.98592 32.1792 32.1792 0 0 0 64.3584 0 178.06848 178.06848 0 1 1 178.0736 177.30048z" fill="#595BB3" p-id="6858"></path></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="77" height="47" fill="none" aria-labelledby="vite-logo-title" viewBox="0 0 77 47"><title id="vite-logo-title">Vite</title><style>.parenthesis{fill:#000}@media (prefers-color-scheme:dark){.parenthesis{fill:#fff}}</style><path fill="#9135ff" d="M40.151 45.71c-.663.844-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.493c-.92 0-1.457-1.04-.92-1.788l7.479-10.471c1.07-1.498 0-3.578-1.842-3.578H15.443c-.92 0-1.456-1.04-.92-1.788l9.696-13.576c.213-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.472c-1.07 1.497 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.087.89 1.83L40.153 45.712z"/><mask id="a" width="48" height="47" x="14" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M40.047 45.71c-.663.843-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.389c-.92 0-1.457-1.04-.92-1.788l7.479-10.472c1.07-1.497 0-3.578-1.842-3.578H15.34c-.92 0-1.456-1.04-.92-1.788l9.696-13.575c.213-.297.556-.474.92-.474H53.93c.92 0 1.456 1.04.92 1.788L47.37 13.03c-1.07 1.498 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.088.89 1.831L40.049 45.712z"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#eee6ff" rx="5.508" ry="14.704" transform="rotate(269.814 20.96 11.29)scale(-1 1)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#eee6ff" rx="10.399" ry="29.851" transform="rotate(89.814 -16.902 -8.275)scale(1 -1)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#8900ff" rx="5.508" ry="30.487" transform="rotate(89.814 -19.197 -7.127)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.928 4.177)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.738 5.52)scale(1 -1)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#eee6ff" rx="14.072" ry="22.078" transform="rotate(93.35 31.245 55.578)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx="14.592" cy="9.743" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(39.51 14.592 9.743)"/></g><g filter="url(#k)"><ellipse cx="61.728" cy="-5.321" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 61.728 -5.32)"/></g><g filter="url(#l)"><ellipse cx="55.618" cy="7.104" fill="#00c2ff" rx="5.971" ry="9.665" transform="rotate(37.892 55.618 7.104)"/></g><g filter="url(#m)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#n)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#o)"><ellipse cx="49.857" cy="30.678" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 49.857 30.678)"/></g><g filter="url(#p)"><ellipse cx="52.623" cy="33.171" fill="#00c2ff" rx="5.971" ry="15.297" transform="rotate(37.892 52.623 33.17)"/></g></g><path d="M6.919 0c-9.198 13.166-9.252 33.575 0 46.789h6.215c-9.25-13.214-9.196-33.623 0-46.789zm62.424 0h-6.215c9.198 13.166 9.252 33.575 0 46.789h6.215c9.25-13.214 9.196-33.623 0-46.789" class="parenthesis"/><defs><filter id="b" width="60.045" height="41.654" x="-5.564" y="16.92" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-40.407" y="-6.762" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-35.435" y="2.801" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-30.84" y="20.8" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-29.307" y="21.949" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="29.961" y="-17.13" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-13.43" y="-22.082" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="34.321" y="-37.644" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="38.847" y="-10.552" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="22.45" y="-1.645" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="32.919" y="11.36" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter></defs></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
@@ -0,0 +1,319 @@
1
+ <script setup lang="ts">
2
+ import { ref, computed, watch, nextTick } from 'vue'
3
+ import { getFileType } from '~/utils'
4
+ import PdfViewer from '~/components/file/preview/PdfViewer.vue'
5
+ import VideoPlayer from '~/components/file/preview/VideoPlayer.vue'
6
+ import AudioPlayer from '~/components/file/preview/AudioPlayer.vue'
7
+ import ImageViewer from '~/components/file/preview/ImageViewer.vue'
8
+ import OfficeViewer from '~/components/file/preview/OfficeViewer.vue'
9
+ import KkFileViewer from '~/components/file/preview/KkFileViewer.vue'
10
+ import Three3dPreview from '~/components/file/preview/Three3dPreview.vue'
11
+ // import TextViewer from '~/components/file/preview/TextViewer.vue'
12
+ // import MarkdownViewer from '~/components/file/preview/MarkdownViewer.vue'
13
+
14
+ // 定义文件类型接口
15
+ interface FileInfo {
16
+ name: string
17
+ path: string
18
+ type?: string
19
+ fileType?: string
20
+ }
21
+
22
+ // 定义 Props
23
+ const props = withDefaults(defineProps<{
24
+ fileList?: FileInfo[]
25
+ fileName?: string
26
+ filePath?: string
27
+ defaultIndex?: number
28
+ showFileList?: boolean
29
+ }>(), {
30
+ fileList: () => [],
31
+ defaultIndex: 0,
32
+ showFileList: true
33
+ })
34
+
35
+ // 定义 Emits
36
+ const emit = defineEmits<{
37
+ fileSelect: [file: FileInfo | null]
38
+ fileLoaded: [file: FileInfo]
39
+ fileError: [error: Error]
40
+ }>()
41
+
42
+ // 当前文件类型
43
+ const fileType = ref<string>('')
44
+
45
+ // 当前选中的文件
46
+ const selectedFile = ref<FileInfo | null>(null)
47
+
48
+ // 预览组件的 key,用于强制重新渲染
49
+ const previewKey = ref<number>(0)
50
+
51
+ // 处理文件列表,支持单个文件或文件列表
52
+ const files = computed<FileInfo[]>(() => {
53
+ if (props.fileName && props.filePath) {
54
+ return [{
55
+ name: props.fileName,
56
+ path: props.filePath,
57
+ type: 'FILE'
58
+ }]
59
+ }
60
+ return props.fileList || []
61
+ })
62
+
63
+ // 获取唯一标识
64
+ const getUniqueKey = (file: FileInfo, index: number): string => {
65
+ return `${file.path}_${index}_${Date.now()}`
66
+ }
67
+
68
+ // 监听外部传入的文件变化
69
+ watch(() => [props.fileName, props.filePath], ([newName, newPath]) => {
70
+ if (newName && newPath) {
71
+ const file: FileInfo = { name: newName, path: newPath, type: 'FILE' }
72
+ selectedFile.value = file
73
+ fileType.value = getFileType(newName)
74
+ previewKey.value++
75
+ nextTick(() => {
76
+ emit('fileSelect', file)
77
+ })
78
+ }
79
+ }, { immediate: true })
80
+
81
+ // 监听文件列表变化,自动选中默认文件
82
+ watch(() => props.fileList, (newList) => {
83
+ if (newList && newList.length > 0 && !selectedFile.value) {
84
+ const index = props.defaultIndex ?? 0
85
+ if (newList[index]) {
86
+ selectFile(newList[index])
87
+ }
88
+ }
89
+ }, { immediate: true })
90
+
91
+ // 处理文件点击事件
92
+ const selectFile = (file: FileInfo) => {
93
+ if (!file) return
94
+ selectedFile.value = file
95
+ fileType.value = getFileType(file.name)
96
+ previewKey.value++
97
+ nextTick(() => {
98
+ emit('fileSelect', file)
99
+ })
100
+ }
101
+
102
+ // 处理预览加载完成
103
+ const handleFileLoaded = () => {
104
+ if (selectedFile.value) {
105
+ emit('fileLoaded', selectedFile.value)
106
+ }
107
+ }
108
+
109
+ // 处理预览加载失败
110
+ const handleFileError = (error: Error) => {
111
+ emit('fileError', error)
112
+ }
113
+ </script>
114
+
115
+ <template>
116
+ <div class="file-viewer-container">
117
+ <!-- 文件列表(可选显示) -->
118
+ <div v-if="showFileList && files.length > 1" class="file-list">
119
+ <h3>文件列表</h3>
120
+ <ul>
121
+ <li
122
+ v-for="(file, index) in files"
123
+ :key="getUniqueKey(file, index)"
124
+ @click="selectFile(file)"
125
+ :class="{ active: selectedFile?.path === file.path }"
126
+ role="button"
127
+ tabindex="0"
128
+ @keydown.enter="selectFile(file)"
129
+ >
130
+ {{ file.name }}
131
+ </li>
132
+ </ul>
133
+ </div>
134
+
135
+ <!-- 预览区域 -->
136
+ <div class="preview-area">
137
+ <!-- PDF 预览 -->
138
+ <PdfViewer
139
+ v-if="fileType === 'pdf' && selectedFile"
140
+ :key="previewKey"
141
+ :file-name="selectedFile.name"
142
+ :file-url="selectedFile.path"
143
+ @load="handleFileLoaded"
144
+ @error="handleFileError"
145
+ />
146
+
147
+ <!-- 视频预览 -->
148
+ <VideoPlayer
149
+ v-else-if="fileType === 'video' && selectedFile"
150
+ :key="previewKey"
151
+ :file-name="selectedFile.name"
152
+ :file-url="selectedFile.path"
153
+ @load="handleFileLoaded"
154
+ @error="handleFileError"
155
+ />
156
+
157
+ <!-- 音频预览 -->
158
+ <AudioPlayer
159
+ v-else-if="fileType === 'audio' && selectedFile"
160
+ :key="previewKey"
161
+ :file-name="selectedFile.name"
162
+ :file-url="selectedFile.path"
163
+ @load="handleFileLoaded"
164
+ @error="handleFileError"
165
+ />
166
+
167
+ <!-- 图片预览 -->
168
+ <ImageViewer
169
+ v-else-if="fileType === 'image' && selectedFile"
170
+ :key="previewKey"
171
+ :file-name="selectedFile.name"
172
+ :file-url="selectedFile.path"
173
+ @load="handleFileLoaded"
174
+ @error="handleFileError"
175
+ />
176
+ <!-- 文本预览 -->
177
+ <div v-else-if="fileType === 'text' && selectedFile">
178
+ <!-- <TextViewer
179
+ :key="selectedFile?.path"
180
+ :file-name="selectedFile.name"
181
+ :file-url="selectedFile.path"
182
+ v-if="selectedFile.name.indexOf('.md') === -1" />
183
+ <MarkdownViewer :file-name="selectedFile.name"
184
+ :file-url="selectedFile.path"
185
+ v-if="selectedFile.name.indexOf('.md') !== -1"></MarkdownViewer> -->
186
+ </div>
187
+ <!-- Office 文档预览 -->
188
+ <OfficeViewer
189
+ v-else-if="fileType === 'office' && selectedFile"
190
+ :key="previewKey"
191
+ :file-name="selectedFile.name"
192
+ :file-url="selectedFile.path"
193
+ @load="handleFileLoaded"
194
+ @error="handleFileError"
195
+ />
196
+
197
+ <!-- 其他类型预览 -->
198
+ <KkFileViewer
199
+ v-else-if="fileType === 'kkfileview' && selectedFile"
200
+ :key="previewKey"
201
+ :file-name="selectedFile.name"
202
+ :file-url="selectedFile.path"
203
+ @load="handleFileLoaded"
204
+ @error="handleFileError"
205
+ />
206
+
207
+ <Three3dPreview
208
+ v-else-if="fileType === 'three3d' && selectedFile"
209
+ :key="previewKey"
210
+ :file-name="selectedFile.name"
211
+ :file-url="selectedFile.path"
212
+ @load="handleFileLoaded"
213
+ @error="handleFileError"
214
+ />
215
+
216
+ <!-- 不支持预览 -->
217
+ <div v-else-if="selectedFile" class="not-supported">
218
+ <p>当前文件不支持预览</p>
219
+ </div>
220
+
221
+ <!-- 未选择文件 -->
222
+ <div v-else class="no-file">
223
+ <p>请选择一个文件进行预览</p>
224
+ </div>
225
+ </div>
226
+ </div>
227
+ </template>
228
+
229
+ <style scoped>
230
+ .file-viewer-container {
231
+ display: flex;
232
+ /* gap: 20px; */
233
+ /* padding: 20px; */
234
+ height: 100%;
235
+ /* box-sizing: border-box; */
236
+ }
237
+
238
+ .file-list {
239
+ border: 1px solid #ddd;
240
+ border-radius: 8px;
241
+ padding: 15px;
242
+ width: 250px;
243
+ flex-shrink: 0;
244
+ background: #fff;
245
+ }
246
+
247
+ .file-list h3 {
248
+ margin-top: 0;
249
+ margin-bottom: 15px;
250
+ font-size: 16px;
251
+ color: #333;
252
+ }
253
+
254
+ .file-list ul {
255
+ list-style: none;
256
+ padding: 0;
257
+ margin: 0;
258
+ max-height: calc(100% - 50px);
259
+ overflow-y: auto;
260
+ }
261
+
262
+ .file-list li {
263
+ padding: 10px;
264
+ cursor: pointer;
265
+ border-bottom: 1px solid #eee;
266
+ white-space: nowrap;
267
+ overflow: hidden;
268
+ text-overflow: ellipsis;
269
+ border-radius: 4px;
270
+ transition: background-color 0.2s;
271
+ }
272
+
273
+ .file-list li:hover {
274
+ background-color: #f5f5f5;
275
+ }
276
+
277
+ .file-list li.active {
278
+ background-color: #e6f7ff;
279
+ font-weight: bold;
280
+ color: #1890ff;
281
+ }
282
+
283
+ .file-list li:focus {
284
+ outline: 2px solid #1890ff;
285
+ outline-offset: -2px;
286
+ }
287
+
288
+ .preview-area {
289
+ flex: 1;
290
+ border: 1px solid #ddd;
291
+ border-radius: 8px;
292
+ padding: 15px;
293
+ min-height: 500px;
294
+ background: #fff;
295
+ position: relative;
296
+ }
297
+
298
+ .not-supported,
299
+ .no-file {
300
+ display: flex;
301
+ align-items: center;
302
+ justify-content: center;
303
+ height: 100%;
304
+ color: #999;
305
+ font-size: 14px;
306
+ }
307
+
308
+ /* 响应式布局 */
309
+ @media (max-width: 768px) {
310
+ .file-viewer-container {
311
+ flex-direction: column;
312
+ }
313
+
314
+ .file-list {
315
+ width: 100%;
316
+ max-height: 200px;
317
+ }
318
+ }
319
+ </style>
@@ -0,0 +1,118 @@
1
+ <template>
2
+ <div class="relative inline-block group" v-bind="attrs">
3
+ <el-image
4
+ :src="props.src"
5
+ :alt="props.alt"
6
+ :fit="props.imgFit"
7
+ class="block w-full h-full"
8
+ />
9
+ <el-tooltip v-if="props.showDownload" content="下载二维码" placement="top">
10
+ <span
11
+ class="absolute top-2 right-2 inline-flex items-center justify-center w-8 h-8 rounded-full bg-white/80 backdrop-blur-sm text-blue-400 shadow ring-1 ring-blue-200/60 transition duration-200 opacity-0 scale-90 cursor-pointer group-hover:opacity-100 group-hover:scale-100 group-hover:bg-blue-50 group-hover:text-blue-500 group-hover:ring-blue-200 focus-visible:opacity-100 focus-visible:scale-100 focus-visible:bg-blue-50 focus-visible:text-blue-500 focus-visible:ring-blue-200 group-focus-within:opacity-100 group-focus-within:scale-100"
12
+ :class="downloading ? 'pointer-events-none opacity-70' : ''"
13
+ role="button"
14
+ tabindex="0"
15
+ aria-label="下载二维码"
16
+ :aria-busy="downloading"
17
+ @click.stop="downloadAsPng"
18
+ @keydown.stop="handleKeydown"
19
+ >
20
+ <i-mdi-download class="text-base" />
21
+ </span>
22
+ </el-tooltip>
23
+ </div>
24
+ </template>
25
+
26
+ <script setup>
27
+ import { ref, useAttrs } from 'vue'
28
+
29
+ defineOptions({ inheritAttrs: false })
30
+
31
+ const props = defineProps({
32
+ src: {
33
+ type: String,
34
+ required: true
35
+ },
36
+ showDownload: {
37
+ type: Boolean,
38
+ default: true
39
+ },
40
+ filename: {
41
+ type: String,
42
+ default: 'qrcode.png'
43
+ },
44
+ alt: {
45
+ type: String,
46
+ default: ''
47
+ },
48
+ imgFit: {
49
+ type: String,
50
+ default: 'contain'
51
+ }
52
+ })
53
+
54
+ const attrs = useAttrs()
55
+ const downloading = ref(false)
56
+
57
+ const handleKeydown = (event) => {
58
+ if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar' || event.key === 'Space') {
59
+ event.preventDefault()
60
+ downloadAsPng()
61
+ }
62
+ }
63
+
64
+ const downloadAsPng = async () => {
65
+ if (!props.src || downloading.value) {
66
+ return
67
+ }
68
+ downloading.value = true
69
+ try {
70
+ const image = await loadImage(props.src)
71
+ const canvas = document.createElement('canvas')
72
+ canvas.width = image.naturalWidth || image.width
73
+ canvas.height = image.naturalHeight || image.height
74
+ const ctx = canvas.getContext('2d')
75
+ if (!ctx) {
76
+ throw new Error('Canvas not supported')
77
+ }
78
+ ctx.drawImage(image, 0, 0)
79
+ const blob = await canvasToBlob(canvas)
80
+ const url = URL.createObjectURL(blob)
81
+ const link = document.createElement('a')
82
+ link.href = url
83
+ link.download = props.filename || 'qrcode.png'
84
+ document.body.appendChild(link)
85
+ link.click()
86
+ document.body.removeChild(link)
87
+ URL.revokeObjectURL(url)
88
+ } catch (error) {
89
+ console.error('Failed to download QR code', error)
90
+ if (typeof ElMessage !== 'undefined') {
91
+ ElMessage.error('二维码下载失败,请重试')
92
+ }
93
+ } finally {
94
+ downloading.value = false
95
+ }
96
+ }
97
+
98
+ const loadImage = (src) => {
99
+ return new Promise((resolve, reject) => {
100
+ const img = new Image()
101
+ img.onload = () => resolve(img)
102
+ img.onerror = reject
103
+ img.src = src
104
+ })
105
+ }
106
+
107
+ const canvasToBlob = (canvas) => {
108
+ return new Promise((resolve, reject) => {
109
+ canvas.toBlob((blob) => {
110
+ if (blob) {
111
+ resolve(blob)
112
+ } else {
113
+ reject(new Error('Failed to convert canvas to blob'))
114
+ }
115
+ }, 'image/png')
116
+ })
117
+ }
118
+ </script>