lvkun996 2 роки тому
батько
коміт
3aee6fe9d9

+ 1 - 0
components.d.ts

@@ -10,6 +10,7 @@ declare module '@vue/runtime-core' {
     LuojigouBoard: typeof import('./src/components/LuojigouBoard/index.vue')['default']
     RouterLink: typeof import('vue-router')['RouterLink']
     RouterView: typeof import('vue-router')['RouterView']
+    VanActionSheet: typeof import('vant/es')['ActionSheet']
     VanOverlay: typeof import('vant/es')['Overlay']
     VanProgress: typeof import('vant/es')['Progress']
   }

+ 1 - 0
del_node_modules.bat

@@ -0,0 +1 @@
+rd /s /q node_modules


+ 184 - 235
package-lock.json

@@ -555,6 +555,11 @@
         "untyped": "^1.2.2"
       }
     },
+    "@rive-app/canvas": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmmirror.com/@rive-app/canvas/-/canvas-1.1.4.tgz",
+      "integrity": "sha512-Pw6xXxxXG2rH2GPUin5P4uejUcRCYTVuz+XiqRTYpWHDcs/+meUBTZBQctAaSEYzsNZcvn/+H1SOemHrQlHB2g=="
+    },
     "@rollup/pluginutils": {
       "version": "5.0.2",
       "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
@@ -682,11 +687,6 @@
         "@types/node": "*"
       }
     },
-    "@types/js-cookie": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmmirror.com/@types/js-cookie/-/js-cookie-3.0.3.tgz",
-      "integrity": "sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww=="
-    },
     "@types/json-schema": {
       "version": "7.0.11",
       "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz",
@@ -1077,123 +1077,6 @@
         "tslint": "^5.20.1",
         "webpack": "^4.0.0",
         "yorkie": "^2.0.0"
-      },
-      "dependencies": {
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "cosmiconfig": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
-          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@types/parse-json": "^4.0.0",
-            "import-fresh": "^3.1.0",
-            "parse-json": "^5.0.0",
-            "path-type": "^4.0.0",
-            "yaml": "^1.7.2"
-          }
-        },
-        "deepmerge": {
-          "version": "4.3.1",
-          "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz",
-          "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
-          "dev": true,
-          "optional": true
-        },
-        "fork-ts-checker-webpack-plugin-v5": {
-          "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
-          "resolved": "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
-          "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@babel/code-frame": "^7.8.3",
-            "@types/json-schema": "^7.0.5",
-            "chalk": "^4.1.0",
-            "cosmiconfig": "^6.0.0",
-            "deepmerge": "^4.2.2",
-            "fs-extra": "^9.0.0",
-            "memfs": "^3.1.2",
-            "minimatch": "^3.0.4",
-            "schema-utils": "2.7.0",
-            "semver": "^7.3.2",
-            "tapable": "^1.0.0"
-          }
-        },
-        "fs-extra": {
-          "version": "9.1.0",
-          "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
-          "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "at-least-node": "^1.0.0",
-            "graceful-fs": "^4.2.0",
-            "jsonfile": "^6.0.1",
-            "universalify": "^2.0.0"
-          }
-        },
-        "jsonfile": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
-          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "graceful-fs": "^4.1.6",
-            "universalify": "^2.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
-          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "yallist": "^4.0.0"
-          }
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz",
-          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
-        },
-        "semver": {
-          "version": "7.4.0",
-          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.4.0.tgz",
-          "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "lru-cache": "^6.0.0"
-          }
-        },
-        "universalify": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
-          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
-          "dev": true,
-          "optional": true
-        }
       }
     },
     "@vue/cli-plugin-vuex": {
@@ -1266,17 +1149,6 @@
         "webpack-merge": "^4.2.2"
       },
       "dependencies": {
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
         "cliui": {
           "version": "6.0.0",
           "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz",
@@ -1288,37 +1160,6 @@
             "wrap-ansi": "^6.2.0"
           }
         },
-        "json5": {
-          "version": "2.2.3",
-          "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
-          "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "vue-loader-v16": {
-          "version": "npm:vue-loader@16.8.3",
-          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
-          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "hash-sum": "^2.0.0",
-            "loader-utils": "^2.0.0"
-          }
-        },
         "wrap-ansi": {
           "version": "6.2.0",
           "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
@@ -2851,6 +2692,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz",
       "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "get-intrinsic": "^1.0.2"
@@ -4078,7 +3920,8 @@
     "decode-uri-component": {
       "version": "0.2.2",
       "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
-      "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ=="
+      "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+      "dev": true
     },
     "dedent": {
       "version": "0.7.0",
@@ -5685,11 +5528,6 @@
         }
       }
     },
-    "filter-obj": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz",
-      "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="
-    },
     "finalhandler": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz",
@@ -5925,6 +5763,123 @@
         }
       }
     },
+    "fork-ts-checker-webpack-plugin-v5": {
+      "version": "npm:fork-ts-checker-webpack-plugin@5.2.1",
+      "resolved": "https://registry.npmmirror.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-5.2.1.tgz",
+      "integrity": "sha512-SVi+ZAQOGbtAsUWrZvGzz38ga2YqjWvca1pXQFUArIVXqli0lLoDQ8uS0wg0kSpcwpZmaW5jVCZXQebkyUQSsw==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "@babel/code-frame": "^7.8.3",
+        "@types/json-schema": "^7.0.5",
+        "chalk": "^4.1.0",
+        "cosmiconfig": "^6.0.0",
+        "deepmerge": "^4.2.2",
+        "fs-extra": "^9.0.0",
+        "memfs": "^3.1.2",
+        "minimatch": "^3.0.4",
+        "schema-utils": "2.7.0",
+        "semver": "^7.3.2",
+        "tapable": "^1.0.0"
+      },
+      "dependencies": {
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "cosmiconfig": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
+          "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/parse-json": "^4.0.0",
+            "import-fresh": "^3.1.0",
+            "parse-json": "^5.0.0",
+            "path-type": "^4.0.0",
+            "yaml": "^1.7.2"
+          }
+        },
+        "deepmerge": {
+          "version": "4.3.1",
+          "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-4.3.1.tgz",
+          "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+          "dev": true,
+          "optional": true
+        },
+        "fs-extra": {
+          "version": "9.1.0",
+          "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz",
+          "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "at-least-node": "^1.0.0",
+            "graceful-fs": "^4.2.0",
+            "jsonfile": "^6.0.1",
+            "universalify": "^2.0.0"
+          }
+        },
+        "jsonfile": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz",
+          "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.6",
+            "universalify": "^2.0.0"
+          }
+        },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
+        "schema-utils": {
+          "version": "2.7.0",
+          "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.0.tgz",
+          "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "@types/json-schema": "^7.0.4",
+            "ajv": "^6.12.2",
+            "ajv-keywords": "^3.4.1"
+          }
+        },
+        "semver": {
+          "version": "7.4.0",
+          "resolved": "https://registry.npmmirror.com/semver/-/semver-7.4.0.tgz",
+          "integrity": "sha512-RgOxM8Mw+7Zus0+zcLEUn8+JfoLpj/huFTItQy2hsM4khuC1HYRDp0cU482Ewn/Fcy6bCjufD8vAj7voC66KQw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "lru-cache": "^6.0.0"
+          }
+        },
+        "universalify": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz",
+          "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+          "dev": true,
+          "optional": true
+        }
+      }
+    },
     "form-data": {
       "version": "2.3.3",
       "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz",
@@ -6034,7 +5989,8 @@
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz",
-      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
     },
     "function.prototype.name": {
       "version": "1.1.5",
@@ -6131,6 +6087,7 @@
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
       "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
@@ -6428,6 +6385,7 @@
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz",
       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1"
       }
@@ -6471,7 +6429,8 @@
     "has-symbols": {
       "version": "1.0.3",
       "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz",
-      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "dev": true
     },
     "has-tostringtag": {
       "version": "1.0.0",
@@ -7117,11 +7076,6 @@
       "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
       "dev": true
     },
-    "intersection-observer": {
-      "version": "0.12.2",
-      "resolved": "https://registry.npmmirror.com/intersection-observer/-/intersection-observer-0.12.2.tgz",
-      "integrity": "sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg=="
-    },
     "ip": {
       "version": "1.1.8",
       "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz",
@@ -7604,11 +7558,6 @@
       "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
       "dev": true
     },
-    "js-cookie": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.1.tgz",
-      "integrity": "sha512-+0rgsUXZu4ncpPxRL+lNEptWMOWl9etvPHc/koSRp6MPwpRYAhmk0dUG00J4bxVV3r9uUzfo24wW0knS07SKSw=="
-    },
     "js-message": {
       "version": "1.0.7",
       "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz",
@@ -8151,7 +8100,8 @@
     "lodash": {
       "version": "4.17.21",
       "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+      "dev": true
     },
     "lodash._reinterpolate": {
       "version": "3.0.0",
@@ -8358,11 +8308,6 @@
         "object-visit": "^1.0.0"
       }
     },
-    "marked": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmmirror.com/marked/-/marked-4.3.0.tgz",
-      "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A=="
-    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz",
@@ -8387,9 +8332,9 @@
       "dev": true
     },
     "memfs": {
-      "version": "3.4.13",
-      "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.4.13.tgz",
-      "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==",
+      "version": "3.5.0",
+      "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.0.tgz",
+      "integrity": "sha512-yK6o8xVJlQerz57kvPROwTMgx5WtGwC2ZxDtOUsnGl49rHjYkfQoPNZPCKH73VdLE1BwBu/+Fx/NL8NYMUw2aA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -9104,7 +9049,8 @@
     "object-inspect": {
       "version": "1.12.3",
       "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.3.tgz",
-      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+      "dev": true
     },
     "object-is": {
       "version": "1.1.5",
@@ -10484,6 +10430,7 @@
       "version": "6.11.0",
       "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz",
       "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "dev": true,
       "requires": {
         "side-channel": "^1.0.4"
       }
@@ -11119,11 +11066,6 @@
         "ajv-keywords": "^3.1.0"
       }
     },
-    "screenfull": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmmirror.com/screenfull/-/screenfull-5.2.0.tgz",
-      "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA=="
-    },
     "scss-tokenizer": {
       "version": "0.2.3",
       "resolved": "https://registry.npmmirror.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
@@ -11397,6 +11339,7 @@
       "version": "1.0.4",
       "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz",
       "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "dev": true,
       "requires": {
         "call-bind": "^1.0.0",
         "get-intrinsic": "^1.0.2",
@@ -11764,11 +11707,6 @@
         }
       }
     },
-    "split-on-first": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz",
-      "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw=="
-    },
     "split-string": {
       "version": "3.1.0",
       "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz",
@@ -13314,39 +13252,6 @@
         "semver": "^6.3.0"
       }
     },
-    "vue-hooks-plus": {
-      "version": "1.6.5",
-      "resolved": "https://registry.npmmirror.com/vue-hooks-plus/-/vue-hooks-plus-1.6.5.tgz",
-      "integrity": "sha512-cnertUm686N3CNpmbycF4Y1lfCXVHZZkTXnXP0s2YPvB0vNWtla4Xb7WNwU3S5Ri/J5TAmZljN2ECut9Iyrr+g==",
-      "requires": {
-        "@types/js-cookie": "^3.0.1",
-        "intersection-observer": "^0.12.2",
-        "js-cookie": "^3.0.1",
-        "lodash": "^4.17.21",
-        "marked": "^4.0.17",
-        "qs": "^6.11.0",
-        "query-string": "^7.1.1",
-        "screenfull": "^5.0.0"
-      },
-      "dependencies": {
-        "query-string": {
-          "version": "7.1.3",
-          "resolved": "https://registry.npmmirror.com/query-string/-/query-string-7.1.3.tgz",
-          "integrity": "sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg==",
-          "requires": {
-            "decode-uri-component": "^0.2.2",
-            "filter-obj": "^1.1.0",
-            "split-on-first": "^1.0.0",
-            "strict-uri-encode": "^2.0.0"
-          }
-        },
-        "strict-uri-encode": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz",
-          "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ=="
-        }
-      }
-    },
     "vue-hot-reload-api": {
       "version": "2.3.4",
       "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
@@ -13374,6 +13279,50 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "json5": {
+          "version": "2.2.3",
+          "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz",
+          "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        }
+      }
+    },
     "vue-router": {
       "version": "4.1.6",
       "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.1.6.tgz",

+ 1 - 1
package.json

@@ -10,6 +10,7 @@
     "upload:dev": "python upload.py /usr/share/nginx/html/ app_web dev"
   },
   "dependencies": {
+    "@rive-app/canvas": "^1.1.4",
     "@types/qrcode": "^1.5.0",
     "axios": "^1.3.4",
     "dayjs": "^1.11.7",
@@ -23,7 +24,6 @@
     "vconsole": "^3.15.0",
     "vue": "^3.0.0",
     "vue-class-component": "^8.0.0-0",
-    "vue-hooks-plus": "^1.6.5",
     "vue-router": "^4.0.0-0"
   },
   "devDependencies": {

+ 1 - 0
public/index.html

@@ -13,5 +13,6 @@
     </noscript>
     <div id="app"></div>
     <!-- built files will be auto injected -->
+
   </body>
 </html>

+ 2 - 2
src/api/learnPlan.ts

@@ -7,7 +7,7 @@ import request from '@/service/index'
  * @param data 
  * @returns 
  */
- export const getReportByUser = (data: {itemId: string, userId: string}) => {
+ export const getReportByUser = (data: any) => {
   return request<API.LearnPlan.Task>({
     url: '/app/game-course/data/task4',
     method: 'post',
@@ -21,7 +21,7 @@ import request from '@/service/index'
  * @param data 
  * @returns 
  */
-export const shareUserReport = (data: {itemId: string, userId: string}) => {
+export const shareUserReport = (data: any) => {
   return request<API.LearnPlan.Task>({
     url: '/app/game-course/data/task4/share',
     method: 'post',

BIN
src/assets/component/common/photo.png


BIN
src/assets/component/common/wechat.png


+ 27 - 2
src/hook/appHook.ts

@@ -25,13 +25,29 @@ const back = (path = '') => {
 
 
 const getToken = () => {
-  window.returnToken = token => useTokenStore().set(token)
   try {
     window.getToken.postMessage(JSON.stringify({}))
   } catch (error) {
     
   }
-  
+
+  return new Promise( (resolve) => {
+    window.returnToken = token => {
+      useTokenStore().set(token) 
+      resolve(token)
+    }
+  })
+}
+
+
+const shareWx = (url: string) => {
+  const prams = JSON.stringify({callname: url})
+  window.sharePoster.postMessage(prams)
+}
+
+const savePoster = (url: string) => {
+  const prams = JSON.stringify({callname: url})
+  window.savePoster.postMessage(prams)
 }
 
 export const useAppRouter = () => {
@@ -44,3 +60,12 @@ export const useAppRouter = () => {
 
   return router
 }
+
+export const useAppFunc = () => {
+
+  return {
+    shareWx,
+    savePoster
+  }
+
+}

+ 39 - 0
src/hook/index.ts

@@ -168,6 +168,8 @@ export const useDeviceDire = (): [(cb: (dire: 'H' | 'V') => void) => void ] => {
   return [direChange]
 }
 
+
+
 export const useDrag = (
   el: HTMLElement,
   options: {
@@ -300,3 +302,40 @@ export const useDrag = (
 
   return []
 }
+
+
+/**
+ * useLocalStorage 函数允许在 TypeScript 的本地存储中存储和检索数据。
+ * @param {string} key - 一个字符串,表示将在其下将值存储在本地存储中的键。
+ * @param {any} defalutValue - 默认值是初始值,如果给定键没有现有值,则将存储在本地存储中。
+ * @returns 具有两个元素的数组:存储在本地存储中的给定键的当前值,以及可用于更新存储在本地存储中的给定键值的函数。
+ */
+export const useLocalStorage = (key: string): [any, (value: any) => void] => {
+
+  let value = null
+  
+  const fn = (value: any) => {
+    if (typeof value == 'object') {
+      window.localStorage.setItem(key, JSON.stringify(value))
+    } else if (typeof value == 'string') {
+      console.log('set:', value);
+      
+      window.localStorage.setItem(key, value)
+    }  
+  }
+
+  const _get = () => {
+    const r = window.localStorage.getItem(key)
+    console.log("_getToken:", r);
+    
+    try {
+      value = JSON.parse(r!)
+    } catch (error) {
+      value = r
+    }
+    return value
+  }
+  
+  return [ _get(), fn]
+
+}

+ 6 - 0
src/hook/types.d.ts

@@ -64,6 +64,12 @@ declare global {
     getToken: {
       postMessage: (params?: string) => void,
     },
+    sharePoster: {
+      postMessage: (params?: string) => void,
+    },
+    savePoster: {
+      postMessage: (params?: string) => void,
+    }
     returnToken: (token: string) => void
     $audio: HTMLAudioElement
   }

+ 3 - 0
src/pages/LearnPlan/main.ts

@@ -4,6 +4,9 @@ import router from './router'
 import 'lib-flexible'
 import 'normalize.css'
 import * as Pinia from 'pinia'
+import VConsole from 'vconsole'
 // import store from './store'
 
+new VConsole()
+
 createApp(App).use(router).use(Pinia.createPinia()).mount('#LearnPlan')

+ 1 - 0
src/pages/LearnPlan/public/index.html

@@ -12,6 +12,7 @@
       <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
     </noscript>
     <div id="LearnPlan"></div>
+    <script src="https://unpkg.com/@rive-app/canvas@1.0.102"></script>
     <!-- built files will be auto injected -->
   </body>
 </html>

+ 119 - 33
src/pages/LearnPlan/views/LearnReport/index.vue

@@ -25,7 +25,8 @@
       <div class="learn-preview-data" >
         <div class="data-item"  >
           <div class="staticsc" >
-            <span>{{ state.report?.totalStudyDays}}</span>
+            <!-- <span>{{ state.report?.totalStudyDays}}</span> -->
+            <span>1</span>
             <div class="unit" >分钟</div>
           </div>
           <div class="data-item-desc" >
@@ -34,7 +35,8 @@
         </div>
         <div class="data-item"  >
           <div class="staticsc" >
-            <span>{{state.report?.totalStars}}</span>
+            <!-- <span>{{state.report?.totalStars}}</span> -->
+            <span>12</span>
             <div class="unit" >颗</div>
           </div>
           <div class="data-item-desc" >
@@ -43,7 +45,8 @@
         </div>
         <div class="data-item"  >
           <div class="staticsc" >
-            <span>{{state.report?.totalQuantity}}</span>
+            <!-- <span>{{state.report?.totalQuantity}}</span> -->
+            <span>7</span>
             <div class="unit" >%</div>
           </div>
           <div class="data-item-desc" >
@@ -83,7 +86,7 @@
       </div>
 
     </div>
-
+    <!-- v-if="state.report?.exerciseCardResultList"  -->
     <!-- 练习分析 -->
     <div class="learn-any learn-modle" >
       <div class="learn-modle-title" >
@@ -119,7 +122,7 @@
           </div>
         </div>
       </div>
-      <div class="qrcode" >
+      <div class="qrcode" v-show="posterShowState">
         <div class="qrcode-img" >
           <img :src="qrcode" alt="">
         </div>
@@ -132,7 +135,7 @@
 
     <!-- 生成报告 -->
     <div class="create-poster" v-if="!posterShowState" >
-      <div class="create-button" @click="_shareUserReport">
+      <div class="create-button" @click="openModal">
         <div class="text" >晒报告   <span v-if="!state.shared" >+5</span> </div>
         <img v-if="!state.shared" :src="staticImg.dogCoin" alt="">
       </div>
@@ -146,11 +149,31 @@
 
   </div>
 
-    <van-overlay :show="posterShowState" :lock-scroll="false"  :z-index="10">
-      <div class="wrapper" @click="posterShowState = false">
+    <van-overlay :show="posterShowState" :lock-scroll="false"  :z-index="10"  @click="posterShowState = false">
+      <div class="wrapper" >
         <div  class="poster-container" ref="learnReportRef" ></div>
+        <!-- 点击晒报告 晒报告 -->
+        <van-action-sheet :overlay="false" v-model:show="shareShowState" :closeable="false" :z-index="11" title="晒报告">
+          <div class="share-dialog" >
+            <div class="share-content" >
+              <div class="share-item" @click.stop="savePoster">
+                <img :src="staticImg.photo" alt="">
+                <span>保存海报</span>
+              </div>
+              <div class="share-item" @click.stop="shareWx">
+                <img :src="staticImg.wechat" alt="">
+                <span>微信好友</span>
+              </div>
+            </div>
+            <div class="cancel-butuon" @click="shareShowState = false" >
+              取消
+            </div>
+          </div>
+        </van-action-sheet>
       </div>
+      
     </van-overlay>
+
   </div>
 
 </template>
@@ -162,19 +185,12 @@ import AbleChart from '../../components/AbleChart.vue'
 import { screenShot, createQrcode } from '@/utils/utils'
 import { getReportByUser, shareUserReport } from "@/api/learnPlan"
 import { useRoute } from 'vue-router'
-import { useAppRouter } from '@/hook/appHook'
-
-export interface P {
-  submitUrl: string,
-  data: {
-    collectionId: string,
-    cardId?: string,
-  },
-  attach: {
-    itemId: string,
-    recordId: string,
-    userId: string
-  }
+import { useAppRouter, useAppFunc } from '@/hook/appHook'
+import { useTokenStore } from '@/store'
+
+export interface QueryParams {
+  i: string,
+  u?: string
 }
 
 const staticImg = {
@@ -185,7 +201,9 @@ const staticImg = {
   learnAny: require('@LP/assets/learn-any.png'),
   strategy: require('@LP/assets/strategy.png'),
   learnReportDecator: require('@LP/assets/learn-report-decator.png'),
-  dogCoin: require('@LP/assets/dog-coin.png')
+  dogCoin: require('@LP/assets/dog-coin.png'),
+  photo: require('@/assets/component/common/photo.png'),
+  wechat: require('@/assets/component/common/wechat.png')
 }
 
 const [fco, atx] = useAudioManager({
@@ -193,34 +211,60 @@ const [fco, atx] = useAudioManager({
   format: 'mm:ss'
 })
 
-const queryParams = useRoute().query as unknown as P
+const queryParams = useRoute().query as unknown as QueryParams
+
+// queryParams.i = "1630466274125459458"
+// queryParams.u = "1430026961974345730"
+
+console.log(window.location.href);
+
+console.log("queryParams:", queryParams);
 
 const appRouter = useAppRouter()
 
-appRouter.getToken()
+const appFunc = useAppFunc()
 
 const qrcode = ref('')
 
 const posterShowState = ref(false)
 
+const shareShowState = ref(false)
+
 const learnReportRef = ref()
 
-const playAudio = () => {
-  fco.play()
-}
+const posterblob = ref('')
+
+const playAudio = () => fco.play()
 
 const state = reactive<Partial<API.LearnPlan.Task>>({})
 
+const openModal = () => {
+  posterShowState.value = true
+  shareShowState.value = true
+  _shareUserReport()
+}
+
+const savePoster = () => {
+  appFunc.savePoster(posterblob.value)
+}
+
 const _shareUserReport = async () => {
-  const data = await shareUserReport({ "itemId": queryParams.attach.itemId, "userId": queryParams.attach.userId })
+  const data = await shareUserReport({ "itemId": queryParams.i, "userId": queryParams.u! })
   console.log(data);
   createPoster()
 }
 
+// 分享海报到微信
+const shareWx = () => {
+  appFunc.shareWx(posterblob.value)
+}
+
 // 获取用户报告信息
 const _getReportByUser = async () => {
-  const { data } = await getReportByUser({ "itemId": queryParams.attach.itemId, "userId": queryParams.attach.userId })
-  fco.src = data.report.task3Audio
+  console.log('获取用户报告信息', useTokenStore().get());
+  
+  const { data } = await getReportByUser({ "itemId": queryParams.i, "userId": queryParams.u! })
+  fco.src = data.report.userLearnShareAudio
   state.report = data.report
 }
 
@@ -229,6 +273,8 @@ const createPoster = async () => {
   nextTick(async () => {
     if (Array.from(learnReportRef.value.children).length === 0) {
       const posterEl = await screenShot('learn-report')
+      console.log('posterEl.src:', posterEl.src);
+      posterblob.value = posterEl.src
       posterEl.style.transform = 'scale(0.8)'
       learnReportRef.value.append(posterEl)
     }
@@ -239,7 +285,9 @@ const getQrcodeUrl = async () => {
   qrcode.value = await createQrcode(window.location.href)
 }
 
-onMounted(() => {
+onMounted(async () => {
+  await appRouter.getToken()
+  
   getQrcodeUrl()
   _getReportByUser()
 })
@@ -269,7 +317,7 @@ onMounted(() => {
       height: 39px;
       display: block;
       position: absolute;
-      top: 68px;
+      top: 78px;
       left: 17px;
     }
     .user-name {
@@ -278,7 +326,7 @@ onMounted(() => {
       font-weight: 400;
       color: #FFFFFF;
       position: absolute;
-      top: 116px;
+      top: 126px;
       left: 20px;
     }
   }
@@ -409,6 +457,7 @@ onMounted(() => {
       border-radius: 20px;
       margin-top: 30px;
       position: relative;
+      background-size: 100% 100%;
       .audio-time-total {
         width: 56px;
         height: 24px;
@@ -510,6 +559,7 @@ onMounted(() => {
     margin: 0 auto;
     margin-top: 16px;
     box-sizing: border-box;
+    padding-bottom: 18px;
     .able-any {
       margin-top: 20px;
     }
@@ -648,6 +698,42 @@ onMounted(() => {
     z-index: 40;
     .poster-container {
       margin-top: -100px;
+      padding-bottom: 300px;
+    }
+  }
+
+  .share-dialog {
+    padding: 0px 86px;
+    box-sizing: border-box;
+    height: 236px;
+    width: 100%;
+    position: relative;
+    background-color: #fff;
+    .share-content {
+      display: flex;
+      justify-content: space-between;
+      .share-item {
+        display: flex;
+        flex-direction: column;
+        margin-top: 18px;
+        img {
+          width: 51px;
+          height: 51px;
+          display: block;
+          margin-bottom: 3px;
+        }
+      }
+    }
+    .cancel-butuon {
+      font-size: 14px;
+      font-family: PingFangSC-Regular, PingFang SC;
+      font-weight: 600;
+      color: #333333;
+      position: absolute;
+      bottom: 40px;
+      left: 50%;
+      transform: translateX(-50%);
     }
+    
   }
 </style>

+ 44 - 3
src/pages/LearnPlan/views/TPage/index.vue

@@ -1,8 +1,10 @@
 <template>
+  
   <div class="t-page-v t-page" v-if="dire == 'V'" :style="{background: `url(${staticImg.bgV})`}" >
     <div class="back-icon" >
       <img :src="staticImg.backIcon" alt="" @click="backAppPage" >
     </div>
+    <div id="rive-ani"><canvas width="375" height="375"  id="rive-canvas" style="scale: 0.6;" ></canvas></div>
     <div class="countdown-container" >
       <div class="countdown" >{{countDown}}s</div>
       <div class="desc" >即将进入下一个环节</div>
@@ -16,6 +18,9 @@
     <div class="back-icon" >
       <img :src="staticImg.backIcon" alt="" @click="backAppPage" >
     </div>
+    <div id="rive-ani" >
+      <canvas width="200" height="200"  id="rive-canvas" style="scale: 1;" ></canvas>
+    </div>
     <div class="countdown-container" >
       <div class="countdown" >{{countDown}}s</div>
       <div class="desc" >即将进入下一个环节</div>
@@ -27,13 +32,16 @@
   </div>
 </template>
 
-<script setup lang="ts">
+<script setup lang="ts" name="Rive">
 import { ref } from 'vue'
 import LearnPlanButton from '../../components/LearnPlanButton.vue'
 import { useAppRouter } from '@/hook/appHook'
-import { useDeviceDire, useScheduler } from '@/hook/index'
+import { useDeviceDire, useScheduler, useSchedulerOnce } from '@/hook/index'
 import { onMounted } from 'vue';
 import { useRouter, useRoute } from "vue-router"
+import { Rive } from "@rive-app/canvas"
+// console.log('Rive:', Rive);
+// console.log(rive);
 
 const staticImg = {
   backIcon: require('@LP/assets/back-icon.png'),
@@ -68,7 +76,6 @@ if (!from) {
   from = FromEnum.ani
 }
 
-console.log("from:", from);
 const appRouter = useAppRouter()
 
 const [direChange] = useDeviceDire()
@@ -77,6 +84,25 @@ const dire = ref<'H' | 'V'>('V')
 
 const countDown = ref(5)
 
+// 1. 初始化rive动画
+const initRive = () => {
+console.log(document.getElementById('rive-canvas'));
+
+const a = new Rive({
+  src: "https://res-game.luojigou.vip/qiqiu2.riv",
+  canvas: document.getElementById('rive-canvas'),
+  autoplay: false,
+  stateMachines: "bumpy",
+  artboard:'reqiqiu-dog',
+  onLoad: () => {
+    a.resizeToCanvas()
+    a.play('idle')
+    console.log('你妈的');
+  },
+});
+
+}
+
 direChange((_dire) => {
   console.log('触发了方向')
   document.documentElement.style.fontSize = '37.5px'
@@ -133,6 +159,10 @@ const pageInfo = () => {
   }
 }
 
+onMounted(() => {
+  useSchedulerOnce({cb: initRive, delay: 4})
+})
+
 
 </script>
 
@@ -141,6 +171,7 @@ const pageInfo = () => {
 .t-page {
   width: 100vw;
   height: 100vh;
+  overflow: hidden;
   .back-icon {
     img {
       width: 38px;
@@ -164,6 +195,16 @@ const pageInfo = () => {
   }
 }
 
+#rive-ani {
+  width: 100vw;
+  // height: 300px;
+  position: absolute;
+  left: 50%;
+  transform: translateX(-50%);
+  display: flex;
+  justify-content: center;
+}
+
 .t-page-v {
 
   .back-icon {

+ 6 - 1
src/service/request.ts

@@ -1,8 +1,13 @@
 import { useTokenStore } from '@/store'
 import axios, { AxiosResponse } from 'axios'
 
+
+const baseURL = process.env.NODE_ENV === 'development' ? '/api' : '/zd-api'
+
+// 'https://open.api.luojigou.vip/'
+
 const instance = axios.create({
-  baseURL: '/api',
+  baseURL: baseURL,
   timeout: 1000
 })
 

+ 3 - 6
src/store/token.ts

@@ -1,16 +1,13 @@
 import { StoreEnum } from '@/enum/store'
+import { useLocalStorage } from '@/hook'
 import { defineStore } from 'pinia'
-import { useLocalStorageState } from "vue-hooks-plus"
-
 
 export const useTokenStore = defineStore(StoreEnum.TOKEN, () => {
 
-  const [ state, setState ] = useLocalStorageState(StoreEnum.TOKEN, {
-    defaultValue: ''
-  })
+  const [ state, setState ] = useLocalStorage(StoreEnum.TOKEN)
 
   return {
-    get: () => state.value,
+    get: () => state,
     set: (token: string) => setState(token)
   }