Forráskód Böngészése

图表避免多次上传,添加 打印 按钮显示二维码弹窗

kumu 7 hónapja
szülő
commit
6b3ab90bf0

+ 1 - 0
package.json

@@ -25,6 +25,7 @@
     "p5": "^1.11.0",
     "pinia": "^2.2.4",
     "pinia-plugin-persistedstate": "^4.1.1",
+    "qrcode.vue": "^3.6.0",
     "svg-pathdata": "^7.1.0",
     "vant": "4",
     "vconsole": "^3.15.1",

+ 154 - 116
pnpm-lock.yaml

@@ -13,10 +13,10 @@ importers:
         version: 2.0.7(alova@3.0.20)
       '@vueuse/core':
         specifier: ^11.1.0
-        version: 11.1.0(vue@3.5.11)
+        version: 11.1.0(vue@3.5.11(typescript@5.6.2))
       '@vueuse/router':
         specifier: ^11.1.0
-        version: 11.1.0(vue-router@4.4.5)(vue@3.5.11)
+        version: 11.1.0(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))
       alova:
         specifier: ^3.0.20
         version: 3.0.20
@@ -40,16 +40,19 @@ importers:
         version: 1.11.0
       pinia:
         specifier: ^2.2.4
-        version: 2.2.4(typescript@5.6.2)(vue@3.5.11)
+        version: 2.2.4(typescript@5.6.2)(vue@3.5.11(typescript@5.6.2))
       pinia-plugin-persistedstate:
         specifier: ^4.1.1
-        version: 4.1.1(pinia@2.2.4)
+        version: 4.1.1(pinia@2.2.4(typescript@5.6.2)(vue@3.5.11(typescript@5.6.2)))(rollup@4.24.0)
+      qrcode.vue:
+        specifier: ^3.6.0
+        version: 3.6.0(vue@3.5.11(typescript@5.6.2))
       svg-pathdata:
         specifier: ^7.1.0
         version: 7.1.0
       vant:
         specifier: '4'
-        version: 4.9.8(vue@3.5.11)
+        version: 4.9.8(vue@3.5.11(typescript@5.6.2))
       vconsole:
         specifier: ^3.15.1
         version: 3.15.1
@@ -58,10 +61,10 @@ importers:
         version: 3.5.11(typescript@5.6.2)
       vue-echarts:
         specifier: ^7.0.3
-        version: 7.0.3(echarts@5.5.1)(vue@3.5.11)
+        version: 7.0.3(@vue/runtime-core@3.5.11)(echarts@5.5.1)(vue@3.5.11(typescript@5.6.2))
       vue-router:
         specifier: ^4.4.5
-        version: 4.4.5(vue@3.5.11)
+        version: 4.4.5(vue@3.5.11(typescript@5.6.2))
     devDependencies:
       '@rushstack/eslint-patch':
         specifier: ^1.8.0
@@ -80,16 +83,16 @@ importers:
         version: 1.2.1
       '@vitejs/plugin-vue':
         specifier: ^5.0.5
-        version: 5.1.4(vite@5.4.8)(vue@3.5.11)
+        version: 5.1.4(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))
       '@vitejs/plugin-vue-jsx':
         specifier: ^4.0.0
-        version: 4.0.1(vite@5.4.8)(vue@3.5.11)
+        version: 4.0.1(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))
       '@vue/eslint-config-prettier':
         specifier: ^10.0.0
-        version: 10.0.0(eslint@9.12.0)(prettier@3.3.3)
+        version: 10.0.0(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3)
       '@vue/eslint-config-typescript':
         specifier: ^14.0.0
-        version: 14.0.0(eslint-plugin-vue@9.28.0)(eslint@9.12.0)(typescript@5.6.2)
+        version: 14.0.0(eslint-plugin-vue@9.28.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
       '@vue/tsconfig':
         specifier: ^0.5.1
         version: 0.5.1
@@ -98,10 +101,10 @@ importers:
         version: 10.4.20(postcss@8.4.47)
       eslint:
         specifier: ^9.12.0
-        version: 9.12.0
+        version: 9.12.0(jiti@2.3.3)
       eslint-plugin-vue:
         specifier: ^9.28.0
-        version: 9.28.0(eslint@9.12.0)
+        version: 9.28.0(eslint@9.12.0(jiti@2.3.3))
       npm-run-all2:
         specifier: ^6.2.3
         version: 6.2.3
@@ -125,19 +128,19 @@ importers:
         version: 5.6.2
       unplugin-auto-import:
         specifier: ^0.18.3
-        version: 0.18.3(@vueuse/core@11.1.0)
+        version: 0.18.3(@nuxt/kit@3.13.2(rollup@4.24.0))(@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.2)))(rollup@4.24.0)
       unplugin-vue-components:
         specifier: ^0.27.4
-        version: 0.27.4(vue@3.5.11)
+        version: 0.27.4(@babel/parser@7.25.7)(@nuxt/kit@3.13.2(rollup@4.24.0))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2))
       vite:
         specifier: ^5.4.8
         version: 5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)
       vite-plugin-mkcert:
         specifier: ^1.17.6
-        version: 1.17.6(vite@5.4.8)
+        version: 1.17.6(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))
       vite-plugin-vue-devtools:
         specifier: ^7.4.6
-        version: 7.4.6(vite@5.4.8)(vue@3.5.11)
+        version: 7.4.6(@nuxt/kit@3.13.2(rollup@4.24.0))(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))
       vue-tsc:
         specifier: ^2.1.6
         version: 2.1.6(typescript@5.6.2)
@@ -1956,6 +1959,11 @@ packages:
     resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
     engines: {node: '>=6'}
 
+  qrcode.vue@3.6.0:
+    resolution: {integrity: sha512-vQcl2fyHYHMjDO1GguCldJxepq2izQjBkDEEu9NENgfVKP6mv/e2SU62WbqYHGwTgWXLhxZ1NCD1dAZKHQq1fg==}
+    peerDependencies:
+      vue: ^3.0.0
+
   queue-microtask@1.2.3:
     resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
 
@@ -2870,9 +2878,9 @@ snapshots:
   '@esbuild/win32-x64@0.21.5':
     optional: true
 
-  '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)':
+  '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0(jiti@2.3.3))':
     dependencies:
-      eslint: 9.12.0
+      eslint: 9.12.0(jiti@2.3.3)
       eslint-visitor-keys: 3.4.3
 
   '@eslint-community/regexpp@4.11.1': {}
@@ -2958,9 +2966,9 @@ snapshots:
       '@nodelib/fs.scandir': 2.1.5
       fastq: 1.17.1
 
-  '@nuxt/kit@3.13.2':
+  '@nuxt/kit@3.13.2(rollup@4.24.0)':
     dependencies:
-      '@nuxt/schema': 3.13.2
+      '@nuxt/schema': 3.13.2(rollup@4.24.0)
       c12: 1.11.2
       consola: 3.2.3
       defu: 6.1.4
@@ -2978,7 +2986,7 @@ snapshots:
       semver: 7.6.3
       ufo: 1.5.4
       unctx: 2.3.1
-      unimport: 3.13.1
+      unimport: 3.13.1(rollup@4.24.0)
       untyped: 1.5.1
     transitivePeerDependencies:
       - magicast
@@ -2986,7 +2994,7 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/schema@3.13.2':
+  '@nuxt/schema@3.13.2(rollup@4.24.0)':
     dependencies:
       compatx: 0.1.8
       consola: 3.2.3
@@ -2998,7 +3006,7 @@ snapshots:
       std-env: 3.7.0
       ufo: 1.5.4
       uncrypto: 0.1.3
-      unimport: 3.13.1
+      unimport: 3.13.1(rollup@4.24.0)
       untyped: 1.5.1
     transitivePeerDependencies:
       - rollup
@@ -3075,11 +3083,13 @@ snapshots:
 
   '@polka/url@1.0.0-next.28': {}
 
-  '@rollup/pluginutils@5.1.2':
+  '@rollup/pluginutils@5.1.2(rollup@4.24.0)':
     dependencies:
       '@types/estree': 1.0.6
       estree-walker: 2.0.2
       picomatch: 2.3.1
+    optionalDependencies:
+      rollup: 4.24.0
 
   '@rollup/rollup-android-arm-eabi@4.24.0':
     optional: true
@@ -3147,31 +3157,33 @@ snapshots:
 
   '@types/web-bluetooth@0.0.20': {}
 
-  '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1)(eslint@9.12.0)(typescript@5.6.2)':
+  '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)':
     dependencies:
       '@eslint-community/regexpp': 4.11.1
-      '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
+      '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
       '@typescript-eslint/scope-manager': 8.8.1
-      '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
+      '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
       '@typescript-eslint/visitor-keys': 8.8.1
-      eslint: 9.12.0
+      eslint: 9.12.0(jiti@2.3.3)
       graphemer: 1.4.0
       ignore: 5.3.2
       natural-compare: 1.4.0
       ts-api-utils: 1.3.0(typescript@5.6.2)
+    optionalDependencies:
       typescript: 5.6.2
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.2)':
+  '@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)':
     dependencies:
       '@typescript-eslint/scope-manager': 8.8.1
       '@typescript-eslint/types': 8.8.1
       '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2)
       '@typescript-eslint/visitor-keys': 8.8.1
       debug: 4.3.7
-      eslint: 9.12.0
+      eslint: 9.12.0(jiti@2.3.3)
+    optionalDependencies:
       typescript: 5.6.2
     transitivePeerDependencies:
       - supports-color
@@ -3181,12 +3193,13 @@ snapshots:
       '@typescript-eslint/types': 8.8.1
       '@typescript-eslint/visitor-keys': 8.8.1
 
-  '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.6.2)':
+  '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)':
     dependencies:
       '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
       debug: 4.3.7
       ts-api-utils: 1.3.0(typescript@5.6.2)
+    optionalDependencies:
       typescript: 5.6.2
     transitivePeerDependencies:
       - eslint
@@ -3204,17 +3217,18 @@ snapshots:
       minimatch: 9.0.5
       semver: 7.6.3
       ts-api-utils: 1.3.0(typescript@5.6.2)
+    optionalDependencies:
       typescript: 5.6.2
     transitivePeerDependencies:
       - supports-color
 
-  '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.6.2)':
+  '@typescript-eslint/utils@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)':
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3))
       '@typescript-eslint/scope-manager': 8.8.1
       '@typescript-eslint/types': 8.8.1
       '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.2)
-      eslint: 9.12.0
+      eslint: 9.12.0(jiti@2.3.3)
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -3228,11 +3242,11 @@ snapshots:
 
   '@vant/popperjs@1.3.0': {}
 
-  '@vant/use@1.6.0(vue@3.5.11)':
+  '@vant/use@1.6.0(vue@3.5.11(typescript@5.6.2))':
     dependencies:
       vue: 3.5.11(typescript@5.6.2)
 
-  '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.8)(vue@3.5.11)':
+  '@vitejs/plugin-vue-jsx@4.0.1(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))':
     dependencies:
       '@babel/core': 7.25.7
       '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7)
@@ -3242,7 +3256,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@vitejs/plugin-vue@5.1.4(vite@5.4.8)(vue@3.5.11)':
+  '@vitejs/plugin-vue@5.1.4(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))':
     dependencies:
       vite: 5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)
       vue: 3.5.11(typescript@5.6.2)
@@ -3263,7 +3277,6 @@ snapshots:
 
   '@vue/babel-plugin-jsx@1.2.5(@babel/core@7.25.7)':
     dependencies:
-      '@babel/core': 7.25.7
       '@babel/helper-module-imports': 7.25.7
       '@babel/helper-plugin-utils': 7.25.7
       '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7)
@@ -3274,6 +3287,8 @@ snapshots:
       '@vue/babel-plugin-resolve-type': 1.2.5(@babel/core@7.25.7)
       html-tags: 3.3.1
       svg-tags: 1.0.0
+    optionalDependencies:
+      '@babel/core': 7.25.7
     transitivePeerDependencies:
       - supports-color
 
@@ -3325,14 +3340,14 @@ snapshots:
 
   '@vue/devtools-api@6.6.4': {}
 
-  '@vue/devtools-core@7.4.6(vite@5.4.8)(vue@3.5.11)':
+  '@vue/devtools-core@7.4.6(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))':
     dependencies:
       '@vue/devtools-kit': 7.4.6
       '@vue/devtools-shared': 7.4.6
       mitt: 3.0.1
       nanoid: 3.3.7
       pathe: 1.1.2
-      vite-hot-client: 0.2.3(vite@5.4.8)
+      vite-hot-client: 0.2.3(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))
       vue: 3.5.11(typescript@5.6.2)
     transitivePeerDependencies:
       - vite
@@ -3351,24 +3366,25 @@ snapshots:
     dependencies:
       rfdc: 1.4.1
 
-  '@vue/eslint-config-prettier@10.0.0(eslint@9.12.0)(prettier@3.3.3)':
+  '@vue/eslint-config-prettier@10.0.0(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3)':
     dependencies:
-      eslint: 9.12.0
-      eslint-config-prettier: 9.1.0(eslint@9.12.0)
-      eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0)(eslint@9.12.0)(prettier@3.3.3)
+      eslint: 9.12.0(jiti@2.3.3)
+      eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@2.3.3))
+      eslint-plugin-prettier: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3)
       prettier: 3.3.3
     transitivePeerDependencies:
       - '@types/eslint'
 
-  '@vue/eslint-config-typescript@14.0.0(eslint-plugin-vue@9.28.0)(eslint@9.12.0)(typescript@5.6.2)':
+  '@vue/eslint-config-typescript@14.0.0(eslint-plugin-vue@9.28.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)':
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1)(eslint@9.12.0)(typescript@5.6.2)
-      '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
-      eslint: 9.12.0
-      eslint-plugin-vue: 9.28.0(eslint@9.12.0)
+      '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+      '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+      eslint: 9.12.0(jiti@2.3.3)
+      eslint-plugin-vue: 9.28.0(eslint@9.12.0(jiti@2.3.3))
+      typescript-eslint: 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+      vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3))
+    optionalDependencies:
       typescript: 5.6.2
-      typescript-eslint: 8.8.1(eslint@9.12.0)(typescript@5.6.2)
-      vue-eslint-parser: 9.4.3(eslint@9.12.0)
     transitivePeerDependencies:
       - supports-color
 
@@ -3382,6 +3398,7 @@ snapshots:
       minimatch: 9.0.5
       muggle-string: 0.4.1
       path-browserify: 1.0.1
+    optionalDependencies:
       typescript: 5.6.2
 
   '@vue/reactivity@3.5.11':
@@ -3400,7 +3417,7 @@ snapshots:
       '@vue/shared': 3.5.11
       csstype: 3.1.3
 
-  '@vue/server-renderer@3.5.11(vue@3.5.11)':
+  '@vue/server-renderer@3.5.11(vue@3.5.11(typescript@5.6.2))':
     dependencies:
       '@vue/compiler-ssr': 3.5.11
       '@vue/shared': 3.5.11
@@ -3410,30 +3427,30 @@ snapshots:
 
   '@vue/tsconfig@0.5.1': {}
 
-  '@vueuse/core@11.1.0(vue@3.5.11)':
+  '@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.2))':
     dependencies:
       '@types/web-bluetooth': 0.0.20
       '@vueuse/metadata': 11.1.0
-      '@vueuse/shared': 11.1.0(vue@3.5.11)
-      vue-demi: 0.14.10(vue@3.5.11)
+      '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.2))
+      vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2))
     transitivePeerDependencies:
       - '@vue/composition-api'
       - vue
 
   '@vueuse/metadata@11.1.0': {}
 
-  '@vueuse/router@11.1.0(vue-router@4.4.5)(vue@3.5.11)':
+  '@vueuse/router@11.1.0(vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)))(vue@3.5.11(typescript@5.6.2))':
     dependencies:
-      '@vueuse/shared': 11.1.0(vue@3.5.11)
-      vue-demi: 0.14.10(vue@3.5.11)
-      vue-router: 4.4.5(vue@3.5.11)
+      '@vueuse/shared': 11.1.0(vue@3.5.11(typescript@5.6.2))
+      vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2))
+      vue-router: 4.4.5(vue@3.5.11(typescript@5.6.2))
     transitivePeerDependencies:
       - '@vue/composition-api'
       - vue
 
-  '@vueuse/shared@11.1.0(vue@3.5.11)':
+  '@vueuse/shared@11.1.0(vue@3.5.11(typescript@5.6.2))':
     dependencies:
-      vue-demi: 0.14.10(vue@3.5.11)
+      vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2))
     transitivePeerDependencies:
       - '@vue/composition-api'
       - vue
@@ -3729,28 +3746,29 @@ snapshots:
 
   escape-string-regexp@5.0.0: {}
 
-  eslint-config-prettier@9.1.0(eslint@9.12.0):
+  eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)):
     dependencies:
-      eslint: 9.12.0
+      eslint: 9.12.0(jiti@2.3.3)
 
-  eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0)(eslint@9.12.0)(prettier@3.3.3):
+  eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.12.0(jiti@2.3.3)))(eslint@9.12.0(jiti@2.3.3))(prettier@3.3.3):
     dependencies:
-      eslint: 9.12.0
-      eslint-config-prettier: 9.1.0(eslint@9.12.0)
+      eslint: 9.12.0(jiti@2.3.3)
       prettier: 3.3.3
       prettier-linter-helpers: 1.0.0
       synckit: 0.9.2
+    optionalDependencies:
+      eslint-config-prettier: 9.1.0(eslint@9.12.0(jiti@2.3.3))
 
-  eslint-plugin-vue@9.28.0(eslint@9.12.0):
+  eslint-plugin-vue@9.28.0(eslint@9.12.0(jiti@2.3.3)):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0)
-      eslint: 9.12.0
+      '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3))
+      eslint: 9.12.0(jiti@2.3.3)
       globals: 13.24.0
       natural-compare: 1.4.0
       nth-check: 2.1.1
       postcss-selector-parser: 6.1.2
       semver: 7.6.3
-      vue-eslint-parser: 9.4.3(eslint@9.12.0)
+      vue-eslint-parser: 9.4.3(eslint@9.12.0(jiti@2.3.3))
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
@@ -3769,9 +3787,9 @@ snapshots:
 
   eslint-visitor-keys@4.1.0: {}
 
-  eslint@9.12.0:
+  eslint@9.12.0(jiti@2.3.3):
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0(jiti@2.3.3))
       '@eslint-community/regexpp': 4.11.1
       '@eslint/config-array': 0.18.0
       '@eslint/core': 0.6.0
@@ -3806,6 +3824,8 @@ snapshots:
       natural-compare: 1.4.0
       optionator: 0.9.4
       text-table: 0.2.0
+    optionalDependencies:
+      jiti: 2.3.3
     transitivePeerDependencies:
       - supports-color
 
@@ -3892,7 +3912,7 @@ snapshots:
   flatted@3.3.1: {}
 
   follow-redirects@1.15.9(debug@4.3.7):
-    dependencies:
+    optionalDependencies:
       debug: 4.3.7
 
   foreground-child@3.3.0:
@@ -4302,25 +4322,27 @@ snapshots:
 
   pify@2.3.0: {}
 
-  pinia-plugin-persistedstate@4.1.1(pinia@2.2.4):
+  pinia-plugin-persistedstate@4.1.1(pinia@2.2.4(typescript@5.6.2)(vue@3.5.11(typescript@5.6.2)))(rollup@4.24.0):
     dependencies:
-      '@nuxt/kit': 3.13.2
+      '@nuxt/kit': 3.13.2(rollup@4.24.0)
       deep-pick-omit: 1.2.1
       defu: 6.1.4
       destr: 2.0.3
-      pinia: 2.2.4(typescript@5.6.2)(vue@3.5.11)
+    optionalDependencies:
+      pinia: 2.2.4(typescript@5.6.2)(vue@3.5.11(typescript@5.6.2))
     transitivePeerDependencies:
       - magicast
       - rollup
       - supports-color
       - webpack-sources
 
-  pinia@2.2.4(typescript@5.6.2)(vue@3.5.11):
+  pinia@2.2.4(typescript@5.6.2)(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       '@vue/devtools-api': 6.6.4
-      typescript: 5.6.2
       vue: 3.5.11(typescript@5.6.2)
-      vue-demi: 0.14.10(vue@3.5.11)
+      vue-demi: 0.14.10(vue@3.5.11(typescript@5.6.2))
+    optionalDependencies:
+      typescript: 5.6.2
 
   pirates@4.0.6: {}
 
@@ -4352,8 +4374,9 @@ snapshots:
   postcss-load-config@4.0.2(postcss@8.4.47):
     dependencies:
       lilconfig: 3.1.2
-      postcss: 8.4.47
       yaml: 2.5.1
+    optionalDependencies:
+      postcss: 8.4.47
 
   postcss-nested@6.2.0(postcss@8.4.47):
     dependencies:
@@ -4385,6 +4408,10 @@ snapshots:
 
   punycode@2.3.1: {}
 
+  qrcode.vue@3.6.0(vue@3.5.11(typescript@5.6.2)):
+    dependencies:
+      vue: 3.5.11(typescript@5.6.2)
+
   queue-microtask@1.2.3: {}
 
   rate-limiter-flexible@5.0.3: {}
@@ -4711,11 +4738,12 @@ snapshots:
 
   type-fest@0.20.2: {}
 
-  typescript-eslint@8.8.1(eslint@9.12.0)(typescript@5.6.2):
+  typescript-eslint@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2):
     dependencies:
-      '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1)(eslint@9.12.0)(typescript@5.6.2)
-      '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
-      '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.2)
+      '@typescript-eslint/eslint-plugin': 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2))(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+      '@typescript-eslint/parser': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+      '@typescript-eslint/utils': 8.8.1(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.2)
+    optionalDependencies:
       typescript: 5.6.2
     transitivePeerDependencies:
       - eslint
@@ -4740,9 +4768,9 @@ snapshots:
 
   unicorn-magic@0.1.0: {}
 
-  unimport@3.13.1:
+  unimport@3.13.1(rollup@4.24.0):
     dependencies:
-      '@rollup/pluginutils': 5.1.2
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       acorn: 8.12.1
       escape-string-regexp: 5.0.0
       estree-walker: 3.0.3
@@ -4763,25 +4791,27 @@ snapshots:
 
   universalify@2.0.1: {}
 
-  unplugin-auto-import@0.18.3(@vueuse/core@11.1.0):
+  unplugin-auto-import@0.18.3(@nuxt/kit@3.13.2(rollup@4.24.0))(@vueuse/core@11.1.0(vue@3.5.11(typescript@5.6.2)))(rollup@4.24.0):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.2
-      '@vueuse/core': 11.1.0(vue@3.5.11)
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       fast-glob: 3.3.2
       local-pkg: 0.5.0
       magic-string: 0.30.11
       minimatch: 9.0.5
-      unimport: 3.13.1
+      unimport: 3.13.1(rollup@4.24.0)
       unplugin: 1.14.1
+    optionalDependencies:
+      '@nuxt/kit': 3.13.2(rollup@4.24.0)
+      '@vueuse/core': 11.1.0(vue@3.5.11(typescript@5.6.2))
     transitivePeerDependencies:
       - rollup
       - webpack-sources
 
-  unplugin-vue-components@0.27.4(vue@3.5.11):
+  unplugin-vue-components@0.27.4(@babel/parser@7.25.7)(@nuxt/kit@3.13.2(rollup@4.24.0))(rollup@4.24.0)(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.2
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       chokidar: 3.6.0
       debug: 4.3.7
       fast-glob: 3.3.2
@@ -4791,6 +4821,9 @@ snapshots:
       mlly: 1.7.2
       unplugin: 1.14.1
       vue: 3.5.11(typescript@5.6.2)
+    optionalDependencies:
+      '@babel/parser': 7.25.7
+      '@nuxt/kit': 3.13.2(rollup@4.24.0)
     transitivePeerDependencies:
       - rollup
       - supports-color
@@ -4825,10 +4858,10 @@ snapshots:
 
   util-deprecate@1.0.2: {}
 
-  vant@4.9.8(vue@3.5.11):
+  vant@4.9.8(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       '@vant/popperjs': 1.3.0
-      '@vant/use': 1.6.0(vue@3.5.11)
+      '@vant/use': 1.6.0(vue@3.5.11(typescript@5.6.2))
       '@vue/shared': 3.5.11
       vue: 3.5.11(typescript@5.6.2)
 
@@ -4841,14 +4874,14 @@ snapshots:
       core-js: 3.38.1
       mutation-observer: 1.0.3
 
-  vite-hot-client@0.2.3(vite@5.4.8):
+  vite-hot-client@0.2.3(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)):
     dependencies:
       vite: 5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)
 
-  vite-plugin-inspect@0.8.7(vite@5.4.8):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(rollup@4.24.0))(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.2
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       debug: 4.3.7
       error-stack-parser-es: 0.1.5
       fs-extra: 11.2.0
@@ -4857,11 +4890,13 @@ snapshots:
       picocolors: 1.1.0
       sirv: 2.0.4
       vite: 5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)
+    optionalDependencies:
+      '@nuxt/kit': 3.13.2(rollup@4.24.0)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-mkcert@1.17.6(vite@5.4.8):
+  vite-plugin-mkcert@1.17.6(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)):
     dependencies:
       '@octokit/rest': 20.1.1
       axios: 1.7.7(debug@4.3.7)
@@ -4871,23 +4906,23 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-vue-devtools@7.4.6(vite@5.4.8)(vue@3.5.11):
+  vite-plugin-vue-devtools@7.4.6(@nuxt/kit@3.13.2(rollup@4.24.0))(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2)):
     dependencies:
-      '@vue/devtools-core': 7.4.6(vite@5.4.8)(vue@3.5.11)
+      '@vue/devtools-core': 7.4.6(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))(vue@3.5.11(typescript@5.6.2))
       '@vue/devtools-kit': 7.4.6
       '@vue/devtools-shared': 7.4.6
       execa: 8.0.1
       sirv: 2.0.4
       vite: 5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)
-      vite-plugin-inspect: 0.8.7(vite@5.4.8)
-      vite-plugin-vue-inspector: 5.2.0(vite@5.4.8)
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(rollup@4.24.0))(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))
+      vite-plugin-vue-inspector: 5.2.0(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4))
     transitivePeerDependencies:
       - '@nuxt/kit'
       - rollup
       - supports-color
       - vue
 
-  vite-plugin-vue-inspector@5.2.0(vite@5.4.8):
+  vite-plugin-vue-inspector@5.2.0(vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4)):
     dependencies:
       '@babel/core': 7.25.7
       '@babel/plugin-proposal-decorators': 7.25.7(@babel/core@7.25.7)
@@ -4904,36 +4939,38 @@ snapshots:
 
   vite@5.4.8(@types/node@20.16.11)(sass-embedded@1.79.4):
     dependencies:
-      '@types/node': 20.16.11
       esbuild: 0.21.5
       postcss: 8.4.47
       rollup: 4.24.0
-      sass-embedded: 1.79.4
     optionalDependencies:
+      '@types/node': 20.16.11
       fsevents: 2.3.3
+      sass-embedded: 1.79.4
 
   vscode-uri@3.0.8: {}
 
-  vue-demi@0.13.11(vue@3.5.11):
+  vue-demi@0.13.11(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       vue: 3.5.11(typescript@5.6.2)
 
-  vue-demi@0.14.10(vue@3.5.11):
+  vue-demi@0.14.10(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       vue: 3.5.11(typescript@5.6.2)
 
-  vue-echarts@7.0.3(echarts@5.5.1)(vue@3.5.11):
+  vue-echarts@7.0.3(@vue/runtime-core@3.5.11)(echarts@5.5.1)(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       echarts: 5.5.1
       vue: 3.5.11(typescript@5.6.2)
-      vue-demi: 0.13.11(vue@3.5.11)
+      vue-demi: 0.13.11(vue@3.5.11(typescript@5.6.2))
+    optionalDependencies:
+      '@vue/runtime-core': 3.5.11
     transitivePeerDependencies:
       - '@vue/composition-api'
 
-  vue-eslint-parser@9.4.3(eslint@9.12.0):
+  vue-eslint-parser@9.4.3(eslint@9.12.0(jiti@2.3.3)):
     dependencies:
       debug: 4.3.7
-      eslint: 9.12.0
+      eslint: 9.12.0(jiti@2.3.3)
       eslint-scope: 7.2.2
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
@@ -4943,7 +4980,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  vue-router@4.4.5(vue@3.5.11):
+  vue-router@4.4.5(vue@3.5.11(typescript@5.6.2)):
     dependencies:
       '@vue/devtools-api': 6.6.4
       vue: 3.5.11(typescript@5.6.2)
@@ -4960,8 +4997,9 @@ snapshots:
       '@vue/compiler-dom': 3.5.11
       '@vue/compiler-sfc': 3.5.11
       '@vue/runtime-dom': 3.5.11
-      '@vue/server-renderer': 3.5.11(vue@3.5.11)
+      '@vue/server-renderer': 3.5.11(vue@3.5.11(typescript@5.6.2))
       '@vue/shared': 3.5.11
+    optionalDependencies:
       typescript: 5.6.2
 
   webpack-virtual-modules@0.6.2: {}

+ 7 - 1
src/modules/report/NavBar.vue

@@ -17,6 +17,9 @@ interface Tabbar {
 const route = useRoute();
 const router = useRouter();
 
+const props = defineProps<{ uploading?: boolean; }>();
+const emits = defineEmits<{ print: []; }>();
+
 const isScheme = ref(false);
 const tabbar = shallowRef<Tabbar[]>([]);
 
@@ -44,6 +47,8 @@ function handle(key: string) {
     case 'report':
       router.replace(route.fullPath.replace('/scheme', ''));
       break;
+    case 'print':
+      emits('print');
   }
 }
 </script>
@@ -54,7 +59,8 @@ function handle(key: string) {
       v-for="nav in tabbar" :key="nav.key"
       @click="handle(nav.key)"
     >
-      <img :src="nav.icon" :alt="nav.label">
+      <van-loading v-if="props.uploading && nav.label === '打印'" color="#38ff6e" style="font-size: 24px;" />
+      <img v-else :src="nav.icon" :alt="nav.label">
       <div class="mt-2">{{ nav.label }}</div>
     </div>
   </div>

+ 3 - 0
src/modules/report/PhysiqueChart.vue

@@ -81,8 +81,11 @@ watchEffect(() => {
 
 const chart = useTemplateRef<InstanceType<typeof VChart>>('chart');
 
+let loaded = false;
 function onFinished() {
+  if (loaded || !snapshot.value.startsWith(`data:image/`)) return;
   snapshot.value = chart.value?.getDataURL() ?? '';
+  loaded = true;
 }
 </script>
 <template>

+ 42 - 0
src/modules/report/ReportPreview.vue

@@ -0,0 +1,42 @@
+<script setup lang="ts">
+import QrcodeVue from 'qrcode.vue';
+import { getClientURL } from '@/tools';
+
+const props = defineProps<{ url: string }>();
+const show = defineModel('show', { default: false });
+const config = reactive({
+  size: 300,
+  margin: 2,
+  background: '#0f2925',
+  foreground: '#38ff6e',
+});
+
+const url = computed(() => {
+  const value = `${getClientURL('/pdf/preview.html')}?url=${encodeURIComponent(props.url)}`
+  console.log(value);
+  return value;
+});
+</script>
+
+<template>
+  <van-dialog
+    v-model:show="show"
+    title="扫一扫 获取报告"
+    cancel-button-text="好的"
+    show-cancel-button
+    :show-confirm-button="false"
+    close-on-click-overlay
+  >
+    <div class="content">
+      <qrcode-vue :value="url" v-bind="config"></qrcode-vue>
+    </div>
+  </van-dialog>
+</template>
+
+<style scoped lang="scss">
+.content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+</style>

+ 3 - 0
src/modules/report/SyndromeChart.vue

@@ -54,8 +54,11 @@ watchEffect(() => {
 
 const chart = useTemplateRef<InstanceType<typeof VChart>>('chart');
 
+let loaded = false;
 function onFinished() {
+  if (loaded || !snapshot.value.startsWith(`data:image/`)) return;
   snapshot.value = chart.value?.getDataURL() ?? '';
+  loaded = true;
 }
 </script>
 <template>

+ 18 - 2
src/modules/report/report.page.vue

@@ -2,6 +2,7 @@
 import NavBar                                  from '@/modules/report/NavBar.vue';
 import PhysiqueChart                           from '@/modules/report/PhysiqueChart.vue';
 import SyndromeChart                           from '@/modules/report/SyndromeChart.vue';
+import { Notify }                              from '@/platform';
 import { getReportMethod, updateReportMethod } from '@/request/api/report.api';
 import { useRouteParams }                      from '@vueuse/router';
 import { useRequest, useWatcher }              from 'alova/client';
@@ -26,7 +27,20 @@ const { loading: uploading, send: upload } = useRequest(() => updateReportMethod
     const hasFactorItemRadarImg = data.value[ '中医证素' ]?.length ? data.value.factorItemRadarImg : true;
     if ( hasConstitutionGroupImg && hasFactorItemRadarImg ) { next(); }
   },
-});
+}).onSuccess(({ data: url }) => { data.value.reportURL = url; });
+
+let ReportPreview: Component;
+const showReportPreview = ref(false);
+async function print() {
+  let url = data.value.reportURL;
+  if (!url) url = await upload();
+  if (!url) {
+    Notify.warning(`未获取到报告地址,请联系管理员或重试`);
+    return;
+  }
+  ReportPreview = defineAsyncComponent(() => import('./ReportPreview.vue'));
+  showReportPreview.value = true;
+}
 </script>
 <template>
   <div>
@@ -170,7 +184,9 @@ const { loading: uploading, send: upload } = useRequest(() => updateReportMethod
           </div>
         </div>
       </van-skeleton>
-      <NavBar class="flex-none"></NavBar>
+      <NavBar class="flex-none" :uploading @print="print"></NavBar>
+
+      <Component :is="ReportPreview" v-model:show="showReportPreview" :url="data.reportURL"></Component>
     </div>
   </div>
 </template>

+ 1 - 0
src/request/model/report.model.ts

@@ -56,6 +56,7 @@ export function fromReportData(data: Record<string, any>) {
 
     constitutionGroupImg: data?.constitutionGroupImg,
     factorItemRadarImg: data?.factorItemRadarImg,
+    reportURL: data?.reportPdfUrl,
   };
 }