zjs_project 3 miesięcy temu
rodzic
commit
04cd17b06a

+ 4 - 0
desktop.ini

@@ -0,0 +1,4 @@
+[ViewState]
+Mode=
+Vid=
+FolderType=Generic

+ 358 - 44
package-lock.json

@@ -1278,6 +1278,123 @@
         "fastq": "^1.6.0"
       }
     },
+    "@parcel/watcher": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher/-/watcher-2.5.1.tgz",
+      "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "@parcel/watcher-android-arm64": "2.5.1",
+        "@parcel/watcher-darwin-arm64": "2.5.1",
+        "@parcel/watcher-darwin-x64": "2.5.1",
+        "@parcel/watcher-freebsd-x64": "2.5.1",
+        "@parcel/watcher-linux-arm-glibc": "2.5.1",
+        "@parcel/watcher-linux-arm-musl": "2.5.1",
+        "@parcel/watcher-linux-arm64-glibc": "2.5.1",
+        "@parcel/watcher-linux-arm64-musl": "2.5.1",
+        "@parcel/watcher-linux-x64-glibc": "2.5.1",
+        "@parcel/watcher-linux-x64-musl": "2.5.1",
+        "@parcel/watcher-win32-arm64": "2.5.1",
+        "@parcel/watcher-win32-ia32": "2.5.1",
+        "@parcel/watcher-win32-x64": "2.5.1",
+        "detect-libc": "^1.0.3",
+        "is-glob": "^4.0.3",
+        "micromatch": "^4.0.5",
+        "node-addon-api": "^7.0.0"
+      }
+    },
+    "@parcel/watcher-android-arm64": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
+      "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-darwin-arm64": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
+      "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-darwin-x64": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
+      "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-freebsd-x64": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
+      "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm-glibc": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
+      "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm-musl": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
+      "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm64-glibc": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
+      "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-arm64-musl": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
+      "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-x64-glibc": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
+      "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-linux-x64-musl": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
+      "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-win32-arm64": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
+      "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-win32-ia32": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
+      "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
+      "dev": true,
+      "optional": true
+    },
+    "@parcel/watcher-win32-x64": {
+      "version": "2.5.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
+      "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
+      "dev": true,
+      "optional": true
+    },
     "@polka/url": {
       "version": "1.0.0-next.29",
       "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.29.tgz",
@@ -1852,6 +1969,49 @@
         "webpack-merge": "^5.7.3",
         "webpack-virtual-modules": "^0.4.2",
         "whatwg-fetch": "^3.6.2"
+      },
+      "dependencies": {
+        "@vue/vue-loader-v15": {
+          "version": "npm:vue-loader@15.11.1",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/vue-loader/-/vue-loader-15.11.1.tgz",
+          "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",
+          "dev": true,
+          "requires": {
+            "@vue/component-compiler-utils": "^3.1.0",
+            "hash-sum": "^1.0.2",
+            "loader-utils": "^1.1.0",
+            "vue-hot-reload-api": "^2.3.0",
+            "vue-style-loader": "^4.1.0"
+          },
+          "dependencies": {
+            "hash-sum": {
+              "version": "1.0.2",
+              "resolved": "https://mirrors.huaweicloud.com/repository/npm/hash-sum/-/hash-sum-1.0.2.tgz",
+              "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
+              "dev": true
+            }
+          }
+        },
+        "json5": {
+          "version": "1.0.2",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/json5/-/json5-1.0.2.tgz",
+          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        },
+        "loader-utils": {
+          "version": "1.4.2",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/loader-utils/-/loader-utils-1.4.2.tgz",
+          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+          "dev": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^1.0.1"
+          }
+        }
       }
     },
     "@vue/cli-shared-utils": {
@@ -2010,47 +2170,6 @@
       "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
       "dev": true
     },
-    "@vue/vue-loader-v15": {
-      "version": "npm:vue-loader@15.11.1",
-      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz",
-      "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==",
-      "dev": true,
-      "requires": {
-        "@vue/component-compiler-utils": "^3.1.0",
-        "hash-sum": "^1.0.2",
-        "loader-utils": "^1.1.0",
-        "vue-hot-reload-api": "^2.3.0",
-        "vue-style-loader": "^4.1.0"
-      },
-      "dependencies": {
-        "hash-sum": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz",
-          "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==",
-          "dev": true
-        },
-        "json5": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz",
-          "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
-          "dev": true,
-          "requires": {
-            "minimist": "^1.2.0"
-          }
-        },
-        "loader-utils": {
-          "version": "1.4.2",
-          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz",
-          "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
-          "dev": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^1.0.1"
-          }
-        }
-      }
-    },
     "@vue/web-component-wrapper": {
       "version": "1.3.0",
       "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz",
@@ -2395,6 +2514,12 @@
       "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
       "dev": true
     },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+      "dev": true
+    },
     "at-least-node": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -2415,6 +2540,16 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
+    "axios": {
+      "version": "0.27.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/axios/-/axios-0.27.2.tgz",
+      "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+      "dev": true,
+      "requires": {
+        "follow-redirects": "^1.14.9",
+        "form-data": "^4.0.0"
+      }
+    },
     "babel-loader": {
       "version": "8.4.1",
       "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.4.1.tgz",
@@ -2839,6 +2974,15 @@
       "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
       "dev": true
     },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dev": true,
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
     "commander": {
       "version": "2.20.3",
       "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz",
@@ -3015,6 +3159,52 @@
         "yaml": "^1.10.0"
       }
     },
+    "cross-env": {
+      "version": "7.0.3",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/cross-env/-/cross-env-7.0.3.tgz",
+      "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==",
+      "requires": {
+        "cross-spawn": "^7.0.1"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "7.0.6",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/cross-spawn/-/cross-spawn-7.0.6.tgz",
+          "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+          "requires": {
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
+          }
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/path-key/-/path-key-3.1.1.tgz",
+          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/shebang-command/-/shebang-command-2.0.0.tgz",
+          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/shebang-regex/-/shebang-regex-3.0.0.tgz",
+          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/which/-/which-2.0.2.tgz",
+          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
+      }
+    },
     "cross-spawn": {
       "version": "6.0.6",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz",
@@ -3384,6 +3574,12 @@
         "object-keys": "^1.1.1"
       }
     },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "dev": true
+    },
     "depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz",
@@ -3396,6 +3592,13 @@
       "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
       "dev": true
     },
+    "detect-libc": {
+      "version": "1.0.3",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/detect-libc/-/detect-libc-1.0.3.tgz",
+      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
+      "dev": true,
+      "optional": true
+    },
     "detect-node": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz",
@@ -3638,6 +3841,18 @@
         "es-errors": "^1.3.0"
       }
     },
+    "es-set-tostringtag": {
+      "version": "2.1.0",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+      "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+      "dev": true,
+      "requires": {
+        "es-errors": "^1.3.0",
+        "get-intrinsic": "^1.2.6",
+        "has-tostringtag": "^1.0.2",
+        "hasown": "^2.0.2"
+      }
+    },
     "es6-promise": {
       "version": "4.2.8",
       "resolved": "https://mirrors.huaweicloud.com/repository/npm/es6-promise/-/es6-promise-4.2.8.tgz",
@@ -4295,6 +4510,18 @@
       "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
       "dev": true
     },
+    "form-data": {
+      "version": "4.0.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/form-data/-/form-data-4.0.2.tgz",
+      "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+      "dev": true,
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "es-set-tostringtag": "^2.1.0",
+        "mime-types": "^2.1.12"
+      }
+    },
     "forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz",
@@ -4502,6 +4729,15 @@
       "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
       "dev": true
     },
+    "has-tostringtag": {
+      "version": "1.0.2",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+      "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+      "dev": true,
+      "requires": {
+        "has-symbols": "^1.0.3"
+      }
+    },
     "hash-sum": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
@@ -4741,6 +4977,12 @@
       "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
       "dev": true
     },
+    "immutable": {
+      "version": "5.1.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/immutable/-/immutable-5.1.1.tgz",
+      "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==",
+      "dev": true
+    },
     "import-fresh": {
       "version": "3.3.1",
       "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz",
@@ -4905,8 +5147,7 @@
     "isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
-      "dev": true
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
     },
     "isobject": {
       "version": "3.0.1",
@@ -5569,6 +5810,13 @@
         "tslib": "^2.0.3"
       }
     },
+    "node-addon-api": {
+      "version": "7.1.1",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/node-addon-api/-/node-addon-api-7.1.1.tgz",
+      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+      "dev": true,
+      "optional": true
+    },
     "node-fetch": {
       "version": "2.7.0",
       "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -6700,6 +6948,44 @@
       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
       "dev": true
     },
+    "sass": {
+      "version": "1.86.3",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/sass/-/sass-1.86.3.tgz",
+      "integrity": "sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==",
+      "dev": true,
+      "requires": {
+        "@parcel/watcher": "^2.4.1",
+        "chokidar": "^4.0.0",
+        "immutable": "^5.0.2",
+        "source-map-js": ">=0.6.2 <2.0.0"
+      },
+      "dependencies": {
+        "chokidar": {
+          "version": "4.0.3",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/chokidar/-/chokidar-4.0.3.tgz",
+          "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
+          "dev": true,
+          "requires": {
+            "readdirp": "^4.0.1"
+          }
+        },
+        "readdirp": {
+          "version": "4.1.2",
+          "resolved": "https://mirrors.huaweicloud.com/repository/npm/readdirp/-/readdirp-4.1.2.tgz",
+          "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
+          "dev": true
+        }
+      }
+    },
+    "sass-loader": {
+      "version": "16.0.5",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/sass-loader/-/sass-loader-16.0.5.tgz",
+      "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==",
+      "dev": true,
+      "requires": {
+        "neo-async": "^2.6.2"
+      }
+    },
     "schema-utils": {
       "version": "2.7.1",
       "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz",
@@ -7176,6 +7462,18 @@
       "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
       "dev": true
     },
+    "style-resources-loader": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/style-resources-loader/-/style-resources-loader-1.5.0.tgz",
+      "integrity": "sha512-fIfyvQ+uvXaCBGGAgfh+9v46ARQB1AWdaop2RpQw0PBVuROsTBqGvx8dj0kxwjGOAyq3vepe4AOK3M6+Q/q2jw==",
+      "dev": true,
+      "requires": {
+        "glob": "^7.2.0",
+        "loader-utils": "^2.0.0",
+        "schema-utils": "^2.7.0",
+        "tslib": "^2.3.1"
+      }
+    },
     "stylehacks": {
       "version": "5.1.1",
       "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz",
@@ -7582,6 +7880,12 @@
         }
       }
     },
+    "vue-cli-plugin-style-resources-loader": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npmmirror.com/vue-cli-plugin-style-resources-loader/-/vue-cli-plugin-style-resources-loader-0.1.5.tgz",
+      "integrity": "sha512-LluhjWTZmpGl3tiXg51EciF+T70IN/9t6UvfmgluJBqxbrb6OV9i7L5lTd+OKtcTeghDkhcBmYhtTxxU4w/8sQ==",
+      "dev": true
+    },
     "vue-eslint-parser": {
       "version": "8.3.0",
       "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz",
@@ -7640,7 +7944,7 @@
     },
     "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",
+      "resolved": "https://mirrors.huaweicloud.com/repository/npm/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz",
       "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },
@@ -7655,6 +7959,11 @@
         "watchpack": "^2.4.0"
       }
     },
+    "vue-router": {
+      "version": "3.6.5",
+      "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz",
+      "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ=="
+    },
     "vue-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz",
@@ -7709,6 +8018,11 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "vuex": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz",
+      "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw=="
+    },
     "watchpack": {
       "version": "2.4.2",
       "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.2.tgz",

+ 15 - 5
package.json

@@ -3,24 +3,34 @@
   "version": "0.1.0",
   "private": true,
   "scripts": {
-    "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
+    "serve": "cross-env NODE_ENV=development vue-cli-service serve",
+    "build": "cross-env NODE_ENV=production vue-cli-service build",
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
     "core-js": "^3.8.3",
-    "vue": "^2.6.14"
+    "cross-env": "^7.0.3",
+    "vue": "^2.6.14",
+    "vue-router": "^3.5.1",
+    "vuex": "^3.6.2"
   },
   "devDependencies": {
     "@babel/core": "^7.12.16",
     "@babel/eslint-parser": "^7.12.16",
     "@vue/cli-plugin-babel": "~5.0.0",
     "@vue/cli-plugin-eslint": "~5.0.0",
+    "@vue/cli-plugin-router": "^5.0.8",
+    "@vue/cli-plugin-vuex": "^5.0.8",
     "@vue/cli-service": "~5.0.0",
+    "axios": "^0.27.2",
     "eslint": "^7.32.0",
     "eslint-plugin-vue": "^8.0.3",
     "flv.js": "^1.6.2",
     "hls.js": "^1.6.2",
+    "sass": "^1.86.3",
+    "sass-loader": "^16.0.5",
+    "style-resources-loader": "^1.4.1",
+    "vue-cli-plugin-style-resources-loader": "~0.1.5",
     "vue-template-compiler": "^2.6.14"
   },
   "eslintConfig": {
@@ -36,8 +46,8 @@
       "parser": "@babel/eslint-parser"
     },
     "rules": {
-        "no-unused-vars": "off",
-        "no-extra-semi": "off"
+      "no-unused-vars": "off",
+      "no-extra-semi": "off"
     }
   },
   "browserslist": [

+ 29 - 37
src/App.vue

@@ -1,43 +1,35 @@
 <template>
-    <div id="app">
-        <!-- <img alt="Vue logo" src="./assets/logo.png"> -->
-        <!-- <HelloWorld msg="Welcome to Your Vue.js App"/> -->
-        <VideoPlayer :videoUrl="videoUrl" :videoType="videoType" />
-    </div>
+  <div id="app">
+    <!-- <nav>
+      <router-link to="/">Home</router-link> |
+      <router-link to="/about">About</router-link>
+    </nav> -->
+    <router-view/>
+  </div>
 </template>
 
-<script>
-    // import HelloWorld from './components/HelloWorld.vue'
-    import VideoPlayer from './components/VideoPlayer.vue';
+<style>
+#app {
+  font-family: Avenir, Helvetica, Arial, sans-serif;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+  text-align: center;
+  color: #2c3e50;
+}
 
-    export default {
-        name: 'App',
-        components: {
-            VideoPlayer
-        },
-        data() {
-            return {
-                // https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8
-                // videoUrl: 'https://gcalic.v.myalicdn.com/gc/zyqcdx01_1/index.m3u8', // HLS 流地址
-                // videoType: 'hls', // 或 'flv'
-                // 快手直播里面的
-                videoUrl: 'https://ws-origin.pull.yximgs.com/gifshow/kwai_actL_ksle_20250411142108_GwU_strL_hd2000.flv?wsTime=67fa1bac&wsSecret=c09f848b129c9e352a4eab5ce2e06a80&stat=HKoB%2BwNN2oCYt7Rc2VlNANkgzdjg%2BiPBuC2zPQcpCqA6tJusJ0cQ%2BhKEfVoBjqV7&tsc=origin&oidc=watchmen&sidc=2062&no_script=1&srcStrm=lytuRPfcqgM&fd=0&ss=s20&tfc_buyer=0&kabr_spts=-5000', // HLS 流地址
-                videoType: 'flv', // 或 'flv'
-            };
-        },
-        methods:{
-            
-        },
-    }
-</script>
+nav {
+  padding: 30px;
+}
 
-<style>
-    #app {
-        font-family: Avenir, Helvetica, Arial, sans-serif;
-        -webkit-font-smoothing: antialiased;
-        -moz-osx-font-smoothing: grayscale;
-        text-align: center;
-        color: #2c3e50;
-        margin-top: 0px;
-    }
+nav a {
+  font-weight: bold;
+  color: #2c3e50;
+}
+
+nav a.router-link-exact-active {
+  color: #42b983;
+}
+</style>
+<style lang="scss">
+    @use "@/assets/common.scss";
 </style>

+ 42 - 0
src/assets/common.scss

@@ -0,0 +1,42 @@
+.rows {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+}
+
+.rows-between {
+  justify-content: space-between;
+}
+
+.columns {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.eslipe {
+  overflow: hidden;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.justify-center {
+  justify-content: center;
+}
+.justify-start {
+  justify-content: flex-start;
+}
+.flex-start {
+  align-items: flex-start;
+}
+
+.flex-end {
+  align-items: flex-end;
+}
+
+::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+  color: transparent;
+}

Plik diff jest za duży
+ 1063 - 0
src/assets/iconfont.css


+ 23 - 2
src/main.js

@@ -1,8 +1,29 @@
+console.log('***process.env***', process.env);
+if (process.env.NODE_ENV == 'production' || process.env.NODE_ENV == 'uat') {
+    if (location.protocol == 'http:') {
+        location.href = location.href.replace(/^http:/, 'https:');
+    }
+}
+window.env = process.env.NODE_ENV;
+let env = window.env == 'development' ? 'test2' : env;
+const api = require('@/utils/config.js');
+window.WEB_CONF = api(env);
+console.log(window.env, window.WEB_CONF);
+
 import Vue from 'vue'
 import App from './App.vue'
-
+import axios from 'axios';
+import router from './router'
+import store from './store'
+import "./assets/iconfont.css" //引用公共icon库
+window.axios = axios;
+Vue.prototype.axios = axios;
 Vue.config.productionTip = false
 
+
+
 new Vue({
-  render: h => h(App),
+  router,
+  store,
+  render: h => h(App)
 }).$mount('#app')

+ 27 - 0
src/router/index.js

@@ -0,0 +1,27 @@
+import Vue from 'vue'
+import VueRouter from 'vue-router'
+import HomeView from '../views/HomeView.vue'
+
+Vue.use(VueRouter)
+
+const routes = [
+  {
+    path: '/',
+    name: 'home',
+    component: HomeView
+  },
+  {
+    path: '/about',
+    name: 'about',
+    // route level code-splitting
+    // this generates a separate chunk (about.[hash].js) for this route
+    // which is lazy-loaded when the route is visited.
+    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
+  }
+]
+
+const router = new VueRouter({
+  routes
+})
+
+export default router

+ 14 - 0
src/store/index.js

@@ -0,0 +1,14 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+
+Vue.use(Vuex)
+
+export default new Vuex.Store({
+    state: {
+        loading: false,
+    },
+    getters: {},
+    mutations: {},
+    actions: {},
+    modules: {}
+})

+ 165 - 0
src/utils/config.js

@@ -0,0 +1,165 @@
+module.exports=function (env) {
+    let WEB_CONF={}
+    if(env==='test'){
+        WEB_CONF={
+            miniAppUrl:'https://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://101.132.138.87:5555',  //文件上传
+            api_url:'https://gatewaytest.elab-plus.vip',//測試
+            //   api_url:'http://192.168.50.32:5555',//測試
+            // api_url:'http://192.168.4.237:5555',//測試
+            // api_url:'http://192.168.50.132:5555',//測試
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',//允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'https://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'https://h5test1.elab-plus.com/touFangBao/#/pages/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html', //用户协议
+            host:'https://h5test.elab-plus.com/adver',
+            // touFangBao_url:'http://localhost:9099/#/pages/',  //投放宝Url
+        }
+    }else if(env==='test2'){
+        WEB_CONF={
+            miniAppUrl:'https://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://106.14.187.241:5555',  //文件上传
+            api_url:'https://gatewaytest1.elab-plus.com/',//測試
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',//允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'https://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'https://h5test1.elab-plus.com/touFangBao/#/pages/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html', //用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }
+    else if(env==='test3'){
+        WEB_CONF={
+            miniAppUrl:'https://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://106.14.187.241:5555',  //文件上传
+            api_url:'https://gatewaytest3.skyforestcity.com',//測試
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',//允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'https://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'https://h5test1.elab-plus.com/touFangBao/#/pages/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html', //用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }
+    else if(env==='test4'){
+        WEB_CONF={
+            miniAppUrl:'https://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://106.14.187.241:5555',  //文件上传
+            api_url:'https://gatewaytest4.skyforestcity.com',//測試
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',//允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'https://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'https://h5test1.elab-plus.com/touFangBao/#/pages/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html', //用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }
+    else if(env==='dev'){
+        WEB_CONF={
+            miniAppUrl:'http://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://192.168.0.16:5555',  //文件上传
+            api_url:'http://192.168.4.212:5555',//开发
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',  //允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'http://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'http://h5test.elab-plus.com/touFangBao/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html',//用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }else if(env==='dev1'){
+        WEB_CONF={
+            miniAppUrl:'http://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://192.168.0.16:5555',  //文件上传
+            api_url:'http://101.231.166.56:16666',//开发
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',  //允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'http://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'http://h5test.elab-plus.com/touFangBao/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html',//用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }else if(env==='dev2'){
+        WEB_CONF={
+            miniAppUrl:'http://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://192.168.0.16:5555',  //文件上传
+            api_url:'http://101.231.166.56:16667',//开发
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',  //允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'http://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'http://h5test.elab-plus.com/touFangBao/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html',//用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }else if(env==='dev3'){
+        WEB_CONF={
+            miniAppUrl:'http://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://192.168.0.16:5555',  //文件上传
+            api_url:'http://101.231.166.56:16668',//开发
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',  //允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'http://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'http://h5test.elab-plus.com/touFangBao/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html',//用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }else if(env==='dev4'){
+        WEB_CONF={
+            miniAppUrl:'http://h5test.elab-plus.com/',
+            zipUrl:'http://139.196.5.59:5307',
+            uploadUrl:'http://192.168.0.16:5555',  //文件上传
+            api_url:'http://101.231.166.56:16669',//开发
+            author_url:'https://h5test.elab-plus.com/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',  //允许的链接域名
+            qrcode:"https://h5test.elab-plus.com/",//生成二维码
+            message_url:'http://h5test.elab-plus.com/barleyBackstage/message.html',  //资讯的地址
+            touFangBao_url:'http://h5test.elab-plus.com/touFangBao/',  //投放宝Url
+            agreement_url:'http://h5test.elab-plus.com/barleyBackstage/agreement.html',//用户协议
+            host:'https://h5test.elab-plus.com/adver',
+        }
+    }else if(env==='uat'){
+        WEB_CONF={
+            miniAppUrl:'https://mng-uat.elaber.cn/',
+            uploadUrl:'https://api-uat.elaber.cn', //文件上传地址
+            api_url:'https://api-uat.elaber.cn',//堡垒 接口地址https://dm.static.elab-plus.com/Kq3t1c3IDV.txt
+            author_url:'https://api-uat.elaber.cn/,https://dm.static.elab-plus.com/,https://mng-uat.elaber.cn/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',//允许的链接域名
+            qrcode:"https://mng-uat.elaber.cn/",//生成二维码
+            message_url:'https://mng-uat.elaber.cn/web/message.html',//资讯的地址https://api-uat.elaber.cn/elab-marketing-system/message.html
+            touFangBao_url:'https://mng-uat.elaber.cn/touFangBao/index.html#/pages/',  //投放宝Url
+            agreement_url:'https://mng-uat.elaber.cn/web/agreement.html',
+            host:'https://mng-uat.elaber.cn/adverProgram',
+        }
+    }else if(env==='uat3'){
+        WEB_CONF={
+            miniAppUrl:'https://mng-uat3.elaber.cn/',
+            uploadUrl:'https://api-uat3.elaber.cn', //文件上传地址
+            api_url:'https://api-uat3.elaber.cn',//堡垒 接口地址https://dm.static.elab-plus.com/Kq3t1c3IDV.txt
+            author_url:'https://api-uat3.elaber.cn/,https://dm.static.elab-plus.com/,https://mng-uat.elaber.cn/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn',//允许的链接域名
+            qrcode:"https://mng-uat3.elaber.cn/",//生成二维码
+            message_url:'https://mng-uat3.elaber.cn/web/message.html',//资讯的地址https://api-uat.elaber.cn/elab-marketing-system/message.html
+            touFangBao_url:'https://mng-uat3.elaber.cn/touFangBao/index.html#/pages/',  //投放宝Url
+            agreement_url:'https://mng-uat3.elaber.cn/web/agreement.html',
+            host:'https://mng-uat.elaber.cn/adverProgram',
+        }
+    }else if(env==='production'){
+        WEB_CONF={
+            miniAppUrl:'https://dm-mng.elab-plus.com.cn/',
+            api_url:'https://dm-api.elab-plus.cn',     //接口地址
+            uploadUrl:'https://dm-api.elab-plus.cn',   //文件上传
+            author_url:'https://dm-api.elab-plus.cn/,https://dm.static.elab-plus.com/,https://dm-mng.elab-plus.cn/,https://dm-project.elab-plus.cn,https://wuhoujinmaofu.ideamake.cn', //允许的链接域名
+            qrcode:"https://dm-mng.elab-plus.cn/",//生成二维码
+            message_url:'https://dm-mng.elab-plus.cn/web/message.html',//资讯的地址https://dm-api.elab-plus.cn/elab-marketing-system/message.html
+            touFangBao_url:'https://dm-mng.elab-plus.cn/touFangBao/index.html#/pages/',  //投放宝Url
+            agreement_url:'https://dm-mng.elab-plus.cn/web/agreement.html',//用户协议
+            host:'https://dm-mng.elab-plus.com.cn/adverProgram',
+        }
+    }
+    return WEB_CONF
+}

+ 52 - 0
src/utils/localStorage.js

@@ -0,0 +1,52 @@
+/**
+ * set storage
+ * @param key
+ * @param value
+ */
+export function setStorage(key, value) {
+	if (!window.localStorage) {
+		throw new Error('该浏览器不支持localStorage')
+	} else {
+		if (typeof value === 'object') {
+			if (key == "brandId" || key == "accountName" || key == "accountNo" || key == "houseName" || key == "houseId") {
+				window.sessionStorage.setItem(key, window.JSON.stringify(value))
+			} else {
+				window.localStorage.setItem(key, window.JSON.stringify(value))
+			}
+		} else {
+			if (key == "brandId" || key == "accountName" || key == "accountNo" || key == "houseName" || key == "houseId") {
+				window.sessionStorage.setItem(key, value)
+			} else {
+				window.localStorage.setItem(key, value)
+			}
+		}
+	}
+}
+/**
+ * get storage
+ * @param key
+ */
+export function getStorage(key) {
+	if (!window.localStorage) {
+		throw new Error('该浏览器不支持localStorage')
+	} else {
+		if (key == "brandId" || key == "accountName" || key == "accountNo" || key == "houseName" || key == "houseId") {
+			return window.sessionStorage.getItem(key)
+		} else {
+			return window.localStorage.getItem(key)
+		}
+
+	}
+}
+/**
+ * remove by key
+ * @param key
+ */
+export function removeItem(key) {
+	window.localStorage.removeItem(key)
+}
+
+// clear all storage
+export function clearAll() {
+	window.localStorage.clear()
+}

+ 63 - 0
src/utils/request.js

@@ -0,0 +1,63 @@
+import store from "@/store";
+import {setStorage , getStorage} from '@/utils/localStorage'
+import axios from 'axios';
+import router from '@/router'
+var requestCount = 0;//记录下同时的请求数
+var that = this;
+axios.defaults.headers.post['elabEnvironment'] = '4'; //axios默认的请求方式,可以自己设置
+axios.defaults.headers.post['token'] = ""; //token
+axios.defaults.headers.post['userType'] = '1000'; //axios默认的请求方式,可以自己设置
+axios.interceptors.request.use(function (config) {
+    let accountNo = getStorage('accountNo');
+
+	if(!config.url.includes('/elab-marketing-user/aysn/task/byone')&&!config.url.includes('/elab-marketing-content/news/queryNewsById')){
+		store.state.loading = true;
+	}
+    requestCount ++;
+	// this.$store.dispatch('loading',true)
+    if(config.url.includes('http')){
+		return config;
+	}
+	else{
+		console.log("requestUrl:",window.WEB_CONF.api_url + config.url)
+		config.url = window.WEB_CONF.api_url + config.url;
+		if(config.url.includes('elab-marketing-user/manager/login')){
+			// axios.defaults.headers.post['userId'] = ""; //axios默认的请求方式,可以自己设置
+			config.headers['userId']="";
+			config.headers['ip']="";
+		}
+		else{
+			config.headers['userId'] = getStorage('id');
+			config.headers['ip'] = getStorage('ip');
+		}
+	}
+    return config;
+    //console.log(config)
+}, function (error) {
+    console.log(error)
+});
+
+axios.interceptors.response.use(function (response) {
+	// console.log("***response***",response,requestCount)
+    requestCount = requestCount - 1;
+    if(requestCount<1){
+        store.state.loading = false;
+    }
+	let result = response;
+    return result;
+}, function (error) {
+	console.log("***error***",error,requestCount)
+    requestCount = requestCount - 1;
+    if(requestCount<1){
+        store.state.loading = false;
+    }
+	//如果返回的状态码是401则需要返回到登录
+	if(error.response && error.response.status && error.response.status==401){
+		// router.push({ name: "Login"});
+		error.response.message = "账号已失效,无法登录";
+		error.response.data.message = "账号已失效,无法登录";
+	}
+    let result = error.response;
+    return result;
+    //console.log(error)
+});

+ 48 - 0
src/utils/requestConfig.js

@@ -0,0 +1,48 @@
+import request from './request';
+import util from './util.js';
+var endpoints = {
+    upload: 'elab-marketing-system/behavior/brandMiniWeb/upload', //埋点接口
+    login: 'elab-marketing-user/login/xcxLogin', //小程序登录接口
+    brandXcxLogin: 'elab-marketing-user/applet/login', //集团小程序登录
+    webXcxLogin: 'elab-marketing-user/htmlLogin/login', //H5平台小程序登录
+    getIpAddr: 'elab-marketing-user/ipAddr/getIpAddr',
+    getWebsdkLink: "elab-marketing-sms/qly/getWebsdkLink",            // 获取监控视频地址
+};
+var doubleClickList = [];
+export default async (endpoint, options, isHideLoading = null, preventDoubleClick = false, method = 'POST') => {
+    if (!endpoints.hasOwnProperty(endpoint)) {
+        console.error(`no such endpoint: ${endpoint}`);
+        return {
+            message: "不存在该接口"
+        };
+    }
+    const requestOptions = {
+        path: endpoints[endpoint],
+        data: options,
+        method: method || "POST",
+    };
+    if(requestOptions.method == 'get'){
+        requestOptions.path = requestOptions.path + util.converToUrl(options)
+    }
+    if (preventDoubleClick) {
+        //说明该接口需要防止连击
+        if (doubleClickList[requestOptions.path] && doubleClickList[requestOptions.path].isRunning) {
+            console.log(`${requestOptions.path}触发连击,屏蔽该请求`)
+            return
+        } else {
+            console.log(`${requestOptions.path}触发连击,通过`)
+            doubleClickList[requestOptions.path] = {
+                isRunning: true
+            }
+        }
+    }
+    console.log(`获取${requestOptions.path}请求的参数:`, requestOptions.data)
+    const response = await window.axios.post(requestOptions.path, requestOptions.data);
+    //说明该接口需要防止连击
+    if (preventDoubleClick && doubleClickList[requestOptions.path] && doubleClickList[requestOptions.path].isRunning) {
+        console.log(`${requestOptions.path}连击接口已返回,清空连击数组`)
+        doubleClickList[requestOptions.path].isRunning = false
+    }
+    console.log('返回' + requestOptions.path + '请求的结果:', response)
+    return response;
+}

+ 318 - 0
src/utils/util.js

@@ -0,0 +1,318 @@
+const config = require('./config.js');
+let setIntervalKey;
+
+function formatNumber(n) {
+    n = n.toString()
+    return n[1] ? n : '0' + n
+}
+
+var util = {
+    formatTime: function(date) {
+        var year = date.getFullYear()
+        var month = date.getMonth() + 1
+        var day = date.getDate()
+
+        var hour = date.getHours()
+        var minute = date.getMinutes()
+        var second = date.getSeconds()
+        return [year, month, day].map(formatNumber).join('-') + ' ' + [hour, minute, second].map(formatNumber)
+            .join(
+                ':')
+    },
+    formatCNTime: function(val) {
+        const year = val.getFullYear();
+        const month = val.getMonth() + 1;
+        const day = val.getDate();
+        const hour = val.getHours();
+        const minute = val.getMinutes();
+        const second = val.getSeconds();
+        return year + '年' + (month > 9 ? month : '0' + month) + '月' + day + '日' + hour + '时' + (minute > 9 ?
+            minute : '0' +
+            minute) + '分' + second + '秒';
+    },
+    formatCNTime1: function(val) {
+        const year = val.getFullYear();
+        const month = val.getMonth() + 1;
+        const day = val.getDate();
+        const hour = val.getHours();
+        const minute = val.getMinutes();
+        const second = val.getSeconds();
+        return year + '年' + (month > 9 ? month : '0' + month) + '月' + (day > 9 ? day : '0' + day) + '日';
+    },
+    buttonClicked(self, time) {
+        self.buttonClicked = false;
+        setTimeout(function() {
+            self.buttonClicked = true;
+        }, time)
+    },
+    formatTodayTime: function(val) {
+        if (typeof val !== 'object') {
+            console.log('时间格式不对,不予转换')
+            return val
+        }
+        const year = val.getFullYear();
+        const month = val.getMonth() + 1;
+        const day = val.getDate();
+        const hour = val.getHours();
+        const minute = val.getMinutes();
+        const second = val.getSeconds();
+        if (month == new Date().getMonth() + 1 && day + 1 == new Date().getDate()) {
+            return '昨天' + hour + ':' + (minute > 9 ? minute : '0' + minute);
+        } else if (month == new Date().getMonth() + 1 && day == new Date().getDate()) {
+            return hour + ':' + (minute > 9 ? minute : '0' + minute) + ':' + (second > 9 ? second : '0' +
+                second);
+        } else {
+            return year + '-' + (month > 9 ? month : '0' + month) + '-' + (day > 9 ? day : '0' + day) + ' ' +
+                hour + ':' + (
+                    minute > 9 ? minute : '0' + minute) + ':' + (second > 9 ? second : '0' + second);
+        }
+    },
+    formatMinuteTime: function(val) {
+        const year = val.getFullYear();
+        const month = val.getMonth() + 1;
+        const day = val.getDate();
+        const hour = val.getHours();
+        const minute = val.getMinutes();
+        const second = val.getSeconds();
+        return year + '.' + (month > 9 ? month : '0' + month) + '.' + (day > 9 ? day : '0' + day) + ' ' + hour +
+            ':' + (
+                minute > 9 ? minute : '0' + minute)
+
+    },
+    formatSucTime: function(val) {
+        const year = val.getFullYear();
+        const month = val.getMonth() + 1;
+        const day = val.getDate();
+        const hour = val.getHours();
+        const minute = val.getMinutes();
+
+        if (month == new Date().getMonth() + 1 && day + 1 == new Date().getDate()) {
+            return '昨天' + hour + ':' + (minute > 9 ? minute : '0' + minute);
+        } else if (month == new Date().getMonth() + 1 && day == new Date().getDate()) {
+            return hour + ':' + (minute > 9 ? minute : '0' + minute);
+        } else {
+            return year + '-' + (month > 9 ? month : '0' + month) + '-' + day + ' ' + hour + ':' + (minute > 9 ?
+                minute : '0' +
+                minute);
+        }
+    },
+
+    //此时此刻日期转化
+    timesData: function(timestamp) {
+        var date = new Date(timestamp);
+        var Y = date.getFullYear() + '/';
+        var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '/';
+        var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
+        // var h = (date.getHours() < 10 ? '0'+(date.getHours()) : date.getHours()) + ':';
+        // var m = (date.getMinutes() < 10 ? '0'+(date.getMinutes()) : date.getMinutes());
+        return Y + M + D;
+    },
+    //此时此刻日期转化格式
+    dateFormat: function(timestamp) {
+        var date = new Date(timestamp);
+        var Y = date.getFullYear() + '年';
+        var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月';
+        var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + '日 ';
+        var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+        var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':';
+        var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds());
+        return Y + M + D + h + m + s;
+    },
+    //此时此刻日期转化格式
+    dateFormats: function(timestamp) {
+        var date = new Date(timestamp);
+        var Y = date.getFullYear() + '年';
+        var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月';
+        var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + '日 ';
+        return Y + M + D;
+    },
+    //此时此刻时间转化
+    timestampToTime: function(timestamp) {
+        var date = new Date(timestamp);
+        var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':';
+        var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes());
+        return h + m;
+    },
+    formatDate: function(date, fmt) {
+        if (/(y+)/.test(fmt)) {
+            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
+        }
+        let o = {
+            'M+': date.getMonth() + 1,
+            'd+': date.getDate(),
+            'h+': date.getHours(),
+            'm+': date.getMinutes(),
+            's+': date.getSeconds()
+        }
+        for (let k in o) {
+            if (new RegExp(`(${k})`).test(fmt)) {
+                let str = o[k] + ''
+                fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : this.padLeftZero(str))
+            }
+        }
+        return fmt
+    },
+
+    padLeftZero: function(str) {
+        return ('00' + str).substr(str.length)
+    },
+    hexToRgba(hex, opacity) {
+        if (!hex || !opacity) {
+            return hex
+        }
+        var values;
+        let RGBA;
+        if (hex.includes('#') && hex.length == 7) {
+            RGBA = "rgba(" + parseInt("0x" + hex.slice(1, 3)) + "," + parseInt("0x" + hex.slice(3, 5)) + "," +
+                parseInt("0x" + hex.slice(5, 7)) + "," + opacity + ")";
+        } else if (hex.includes('rgb(')) {
+            values = hex
+                .replace(/rgb?\(/, '')
+                .replace(/\)/, '')
+                .replace(/[\s+]/g, '')
+                .split(',')
+            return `rgba(${values[0]},${values[1]},${values[2]},${opacity})`
+        } else if (hex.includes('rgba(')) {
+            values = hex
+                .replace(/rgba?\(/, '')
+                .replace(/\)/, '')
+                .replace(/[\s+]/g, '')
+                .split(',')
+            return `rgba(${values[0]},${values[1]},${values[2]},${opacity})`
+        } else {
+            return hex
+        }
+        return RGBA
+    },
+    deepEqual(obj1, obj2) {
+        if (obj1 === obj2) {
+            return true; // 引用相同或都为 null  
+        }
+
+        if (typeof obj1 !== 'object' || obj1 === null || typeof obj2 !== 'object' || obj2 === null) {
+            return false; // 其中一个不是对象  
+        }
+
+        const keys1 = Object.keys(obj1);
+        const keys2 = Object.keys(obj2);
+
+        if (keys1.length !== keys2.length) {
+            return false; // 属性数量不同  
+        }
+
+        for (const key of keys1) {
+            if (!keys2.includes(key) || !this.deepEqual(obj1[key], obj2[key])) {
+                return false; // 属性名或属性值不同  
+            }
+        }
+
+        return true;
+    },
+    getHexColor(color) {
+        var values = color
+            .replace(/rgba?\(/, '')
+            .replace(/\)/, '')
+            .replace(/[\s+]/g, '')
+            .split(',')
+        var a = parseFloat(values[3] || 1),
+            r = Math.floor(a * parseInt(values[0]) + (1 - a) * 255),
+            g = Math.floor(a * parseInt(values[1]) + (1 - a) * 255),
+            b = Math.floor(a * parseInt(values[2]) + (1 - a) * 255)
+        return '#' +
+            ('0' + r.toString(16)).slice(-2) +
+            ('0' + g.toString(16)).slice(-2) +
+            ('0' + b.toString(16)).slice(-2)
+    },
+    // websocket 返回的数据转义成object类型
+    parseWSData(data) {
+        if (data.startsWith("a[")) {
+            let endLength = data.length - 6;
+            let textData = data.substr(3, endLength);
+
+            let request = textData.split("\\n\\n");
+            let headerBody = request[0];
+            let body = request[1];
+            let headerArray = headerBody.split("\\n");
+            let header = {};
+            for (let i = 1; i < headerArray.length; i++) {
+                let body = headerArray[i];
+                let resultBody = body.split(":");
+                header[resultBody[0]] = resultBody[1];
+            }
+            let result = {};
+            result["command"] = headerArray[0];
+            result["header"] = header;
+            if (body) {
+                try {
+                    // let bd = body.replaceAll(/\\+/ig, "");
+                    // let bd = body.replace(/\\"/g, '"') // 将 \\" 替换为 "
+                    //   .replace(/\\n/g, '\n'); // 将 \\n 替换为实际的换行符
+                    // result["body"] = JSON.parse(bd);
+
+                    let cleanBody = body
+                        .replace(/\\\\/g, '\\')
+                        .replace(/\\"/g, '"');
+
+                    // 使用更精确的正则表达式匹配
+                    const eventMatch = cleanBody.match(/"event"\s*:\s*"([^"]+)"/);
+                    let dataMatch = cleanBody.replaceAll(/\\u([\dA-Fa-f]{4})/g, (_, p1) =>
+                        String.fromCharCode(parseInt(p1, 16))
+                    ).match(/"data"\s*:\s*"([\s\S]*?)(?="\s*})/);
+                    result["body"] = {
+                        event: eventMatch ? eventMatch[1] : '',
+                        data: dataMatch ? dataMatch[1]
+                            .replace(/\\n/g, '\n') // 处理换行符
+                            .replace(/\\"/g, '"') // 处理引号
+                            .replace(/\\\\/g, '\\') // 处理反斜杠
+                            .replace(/\\t/g, '\t') // 处理制表符
+                            .replace(/\\r/g, '') // 移除回车符
+                            .replace(/\\u000/g, '') // 移除 \u000
+                            .trim() : ''
+                    };
+                } catch (e) {
+                    result["body"] = body;
+                }
+            }
+            return result;
+        }
+        return data;
+    },
+    converToUrl(requestParams) {
+        let params = [];
+        Object.entries(requestParams).forEach(([key, value]) => {
+            let param = key + '=' + value;
+            params.push(param);
+        });
+        return '?' + params.join('&');
+    },
+    /**
+     * 解析页面路由参数
+     * @param name
+     * @returns {null}
+     */
+    getQueryString(url, name) {
+        let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
+        let arr = url.split('?');
+        let result = null;
+        arr.forEach((item, index) => {
+            let res = item.match(reg);
+            if (res != null) {
+                result = unescape(res[2]);
+            }
+        })
+        return result
+    },
+    /**
+     * 数字取整
+     * 例如:145返回100  452返回400
+     * @param num
+     * @returns {number}
+     */
+    getMaxNum(num) {
+        let str = num.toString();
+        let len = str.length;
+        return Math.floor(num / Math.pow(10, len - 1)) * Math.pow(10, len - 1);
+    },
+};
+
+module.exports = util;

+ 5 - 0
src/views/AboutView.vue

@@ -0,0 +1,5 @@
+<template>
+  <div class="about">
+    <h1>This is an about page</h1>
+  </div>
+</template>

+ 44 - 0
src/views/HomeView.vue

@@ -0,0 +1,44 @@
+<template>
+    <div class="home">
+        <!-- <img alt="Vue logo" src="../assets/logo.png">
+        <HelloWorld msg="Welcome to Your Vue.js App"/> -->
+        <VideoPlayer :videoUrl="videoUrl" :videoType="videoType" />
+    </div>
+</template>
+
+<script>
+    // @ is an alias to /src
+    // import HelloWorld from '@/components/HelloWorld.vue'
+    import VideoPlayer from '@/components/VideoPlayer.vue';
+    import requestConfig from '@/utils/requestConfig';
+    export default {
+        name: 'HomeView',
+        components: {
+            // HelloWorld,
+            VideoPlayer
+        },
+        data() {
+            return {
+                // https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8
+                videoUrl: 'https://gcalic.v.myalicdn.com/gc/zyqcdx01_1/index.m3u8', // HLS 流地址
+                videoType: 'hls', // 或 'flv'
+                // 快手直播里面的
+                // videoUrl: 'https://ws-origin.pull.yximgs.com/gifshow/kwai_actL_ksle_20250411142108_GwU_strL_hd2000.flv?wsTime=67fa1bac&wsSecret=c09f848b129c9e352a4eab5ce2e06a80&stat=HKoB%2BwNN2oCYt7Rc2VlNANkgzdjg%2BiPBuC2zPQcpCqA6tJusJ0cQ%2BhKEfVoBjqV7&tsc=origin&oidc=watchmen&sidc=2062&no_script=1&srcStrm=lytuRPfcqgM&fd=0&ss=s20&tfc_buyer=0&kabr_spts=-5000', // HLS 流地址
+                // videoType: 'flv', // 或 'flv'
+            };
+        },
+        mounted() {
+            this.getIpAddr()
+        },
+        methods: {
+            // 获取客户端小程序IP地址
+            async getIpAddr() {
+                const res = await requestConfig('getIpAddr', {}, true);
+                if (res.data && res.data.success && res.data.single) {
+                    // this.globalData.ip = res.single;
+                    console.log("***app.js-onLaunch-getIpAddr***", res.data.single)
+                }
+            },
+        },
+    }
+</script>

+ 8 - 1
vue.config.js

@@ -1,4 +1,11 @@
 const { defineConfig } = require('@vue/cli-service')
 module.exports = defineConfig({
-  transpileDependencies: true
+  transpileDependencies: true,
+lintOnSave: false, // 禁用 ESLint 检查
+  pluginOptions: {
+    'style-resources-loader': {
+      preProcessor: 'scss',
+      patterns: []
+    }
+  }
 })