diff --git a/index.html b/index.html index ecb6019..45ad93c 100644 --- a/index.html +++ b/index.html @@ -4,11 +4,11 @@ - Vite App + NBA在线
- + diff --git a/package.json b/package.json index ade19da..862c808 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,9 @@ "element-plus": "^2.9.7", "flv.js": "^1.6.2", "hls.js": "^1.6.2", + "pinia": "^3.0.2", "router": "^2.2.0", + "video.js": "^8.22.0", "vue": "^3.5.13", "vue-router": "4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ad7742..c446bd0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -26,9 +26,15 @@ importers: hls.js: specifier: ^1.6.2 version: 1.6.2 + pinia: + specifier: ^3.0.2 + version: 3.0.2(vue@3.5.13) router: specifier: ^2.2.0 version: 2.2.0 + video.js: + specifier: ^8.22.0 + version: 8.22.0 vue: specifier: ^3.5.13 version: 3.5.13 @@ -182,6 +188,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.0': resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} engines: {node: '>=6.9.0'} @@ -528,6 +538,19 @@ packages: '@types/web-bluetooth@0.0.16': resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + '@videojs/http-streaming@3.17.0': + resolution: {integrity: sha512-Ch1P3tvvIEezeZXyK11UfWgp4cWKX4vIhZ30baN/lRinqdbakZ5hiAI3pGjRy3d+q/Epyc8Csz5xMdKNNGYpcw==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + video.js: ^8.19.0 + + '@videojs/vhs-utils@4.1.1': + resolution: {integrity: sha512-5iLX6sR2ownbv4Mtejw6Ax+naosGvoT9kY+gcuHzANyUZZ+4NpeNdKMUhb6ag0acYej1Y7cmr/F2+4PrggMiVA==} + engines: {node: '>=8', npm: '>=5'} + + '@videojs/xhr@2.7.0': + resolution: {integrity: sha512-giab+EVRanChIupZK7gXjHy90y3nncA2phIOyG3Ne5fvpiMJzvqYwiTOnEVW2S4CoYcuKJkomat7bMXA/UoUZQ==} + '@vitejs/plugin-vue@5.2.3': resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -566,6 +589,9 @@ packages: '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/devtools-api@7.7.5': + resolution: {integrity: sha512-HYV3tJGARROq5nlVMJh5KKHk7GU8Au3IrrmNNqr978m0edxgpHgYPDoNUGrvEgIbObz09SQezFR3A1EVmB5WZg==} + '@vue/devtools-core@7.7.5': resolution: {integrity: sha512-ElKr0NDor57gVaT+gMQ8kcVP4uFGqHcxuuQndW/rPwh6aHWvEcUL3sxL8cEk+e1Rdt28kS88erpsiIMO6hEENQ==} peerDependencies: @@ -603,6 +629,13 @@ packages: '@vueuse/shared@9.13.0': resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + aes-decrypter@4.0.2: + resolution: {integrity: sha512-lc+/9s6iJvuaRe5qDlMTpCFjnwpkeOXp8qP3oiZ5jsj1MRg+SBVUmmICrhxHvc8OELSmc+fEyyxAuppY6hrWzw==} + async-validator@4.2.5: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} @@ -693,6 +726,9 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + dom-walk@0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dplayer@1.27.1: resolution: {integrity: sha512-2laBMXs5V1B9zPwJ7eAIw/OBo+Xjvy03i4GHTk3Cg+IWbrq8rKMFO0fFr6ClAYotYOCcFGOvaJDkOZcgKllsCA==} @@ -809,6 +845,9 @@ packages: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} + global@4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -854,6 +893,9 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true + is-function@1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -920,6 +962,9 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + m3u8-parser@7.2.0: + resolution: {integrity: sha512-CRatFqpjVtMiMaKXxNvuI3I++vUumIXVVT/JpCpdU/FynV/ceVw1qpPyyBNindL+JlPMSesx+WX1QJaZEJSaMQ==} + magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} @@ -938,9 +983,16 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + min-document@2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + mitt@3.0.1: resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + mpd-parser@1.3.1: + resolution: {integrity: sha512-1FuyEWI5k2HcmhS1HkKnUAQV7yFPfXPht2DnRRGtoiiAAW+ESTbtEXIDpRkwdU+XyrQuwrIym7UkoPKsZ0SyFw==} + hasBin: true + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -948,6 +1000,11 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mux.js@7.1.0: + resolution: {integrity: sha512-NTxawK/BBELJrYsZThEulyUMDVlLizKdxyAsMuzoCD1eFj97BVaA8D/CvKsKu6FOLYkFojN5CbM9h++ZTZtknA==} + engines: {node: '>=8', npm: '>=5'} + hasBin: true + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1005,6 +1062,19 @@ packages: resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} engines: {node: '>=12'} + pinia@3.0.2: + resolution: {integrity: sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==} + peerDependencies: + typescript: '>=4.4.4' + vue: ^2.7.0 || ^3.5.11 + peerDependenciesMeta: + typescript: + optional: true + + pkcs7@1.0.4: + resolution: {integrity: sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==} + hasBin: true + postcss@8.5.3: resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} @@ -1013,12 +1083,19 @@ packages: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + promise-polyfill@8.3.0: resolution: {integrity: sha512-H5oELycFml5yto/atYqmjyigJoAo3+OXwolYiH7OfQuYlAqhxNvTfiNMbV9hsC6Yp83yE5r2KTVmtrG6R9i6Pg==} proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} @@ -1239,6 +1316,21 @@ packages: varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} + video.js@8.22.0: + resolution: {integrity: sha512-xge2kpjsvC0zgFJ1cqt+wTqsi21+huFswlonPFh7qiplypsb4FN/D2Rz6bWdG/S9eQaPHfWHsarmJL/7D3DHoA==} + + videojs-contrib-quality-levels@4.1.0: + resolution: {integrity: sha512-TfrXJJg1Bv4t6TOCMEVMwF/CoS8iENYsWNKip8zfhB5kTcegiFYezEA0eHAJPU64ZC8NQbxQgOwAsYU8VXbOWA==} + engines: {node: '>=16', npm: '>=8'} + peerDependencies: + video.js: ^8 + + videojs-font@4.2.0: + resolution: {integrity: sha512-YPq+wiKoGy2/M7ccjmlvwi58z2xsykkkfNMyIg4xb7EZQQNwB71hcSsB3o75CqQV7/y5lXkXhI/rsGAS7jfEmQ==} + + videojs-vtt.js@0.15.5: + resolution: {integrity: sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==} + vite-hot-client@2.0.4: resolution: {integrity: sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==} peerDependencies: @@ -1519,6 +1611,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + '@babel/template@7.27.0': dependencies: '@babel/code-frame': 7.26.2 @@ -1739,6 +1835,28 @@ snapshots: '@types/web-bluetooth@0.0.16': {} + '@videojs/http-streaming@3.17.0(video.js@8.22.0)': + dependencies: + '@babel/runtime': 7.27.0 + '@videojs/vhs-utils': 4.1.1 + aes-decrypter: 4.0.2 + global: 4.4.0 + m3u8-parser: 7.2.0 + mpd-parser: 1.3.1 + mux.js: 7.1.0 + video.js: 8.22.0 + + '@videojs/vhs-utils@4.1.1': + dependencies: + '@babel/runtime': 7.27.0 + global: 4.4.0 + + '@videojs/xhr@2.7.0': + dependencies: + '@babel/runtime': 7.27.0 + global: 4.4.0 + is-function: 1.0.2 + '@vitejs/plugin-vue@5.2.3(vite@6.3.0(sass-embedded@1.86.3))(vue@3.5.13)': dependencies: vite: 6.3.0(sass-embedded@1.86.3) @@ -1805,6 +1923,10 @@ snapshots: '@vue/devtools-api@6.6.4': {} + '@vue/devtools-api@7.7.5': + dependencies: + '@vue/devtools-kit': 7.7.5 + '@vue/devtools-core@7.7.5(vite@6.3.0(sass-embedded@1.86.3))(vue@3.5.13)': dependencies: '@vue/devtools-kit': 7.7.5 @@ -1874,6 +1996,15 @@ snapshots: - '@vue/composition-api' - vue + '@xmldom/xmldom@0.8.10': {} + + aes-decrypter@4.0.2: + dependencies: + '@babel/runtime': 7.27.0 + '@videojs/vhs-utils': 4.1.1 + global: 4.4.0 + pkcs7: 1.0.4 + async-validator@4.2.5: {} asynckit@0.4.0: {} @@ -1957,6 +2088,8 @@ snapshots: depd@2.0.0: {} + dom-walk@0.1.2: {} + dplayer@1.27.1: dependencies: axios: 1.2.3 @@ -2122,6 +2255,11 @@ snapshots: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 + global@4.4.0: + dependencies: + min-document: 2.19.0 + process: 0.11.10 + globals@11.12.0: {} gopd@1.2.0: {} @@ -2150,6 +2288,8 @@ snapshots: is-docker@3.0.0: {} + is-function@1.0.2: {} + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 @@ -2198,6 +2338,12 @@ snapshots: dependencies: yallist: 3.1.1 + m3u8-parser@7.2.0: + dependencies: + '@babel/runtime': 7.27.0 + '@videojs/vhs-utils': 4.1.1 + global: 4.4.0 + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -2212,12 +2358,28 @@ snapshots: dependencies: mime-db: 1.52.0 + min-document@2.19.0: + dependencies: + dom-walk: 0.1.2 + mitt@3.0.1: {} + mpd-parser@1.3.1: + dependencies: + '@babel/runtime': 7.27.0 + '@videojs/vhs-utils': 4.1.1 + '@xmldom/xmldom': 0.8.10 + global: 4.4.0 + mrmime@2.0.1: {} ms@2.1.3: {} + mux.js@7.1.0: + dependencies: + '@babel/runtime': 7.27.0 + global: 4.4.0 + nanoid@3.3.11: {} nanoid@5.1.5: {} @@ -2256,6 +2418,15 @@ snapshots: picomatch@4.0.2: {} + pinia@3.0.2(vue@3.5.13): + dependencies: + '@vue/devtools-api': 7.7.5 + vue: 3.5.13 + + pkcs7@1.0.4: + dependencies: + '@babel/runtime': 7.27.0 + postcss@8.5.3: dependencies: nanoid: 3.3.11 @@ -2266,10 +2437,14 @@ snapshots: dependencies: parse-ms: 4.0.0 + process@0.11.10: {} + promise-polyfill@8.3.0: {} proxy-from-env@1.1.0: {} + regenerator-runtime@0.14.1: {} + rfdc@1.4.1: {} rollup@4.40.0: @@ -2463,6 +2638,32 @@ snapshots: varint@6.0.0: {} + video.js@8.22.0: + dependencies: + '@babel/runtime': 7.27.0 + '@videojs/http-streaming': 3.17.0(video.js@8.22.0) + '@videojs/vhs-utils': 4.1.1 + '@videojs/xhr': 2.7.0 + aes-decrypter: 4.0.2 + global: 4.4.0 + m3u8-parser: 7.2.0 + mpd-parser: 1.3.1 + mux.js: 7.1.0 + videojs-contrib-quality-levels: 4.1.0(video.js@8.22.0) + videojs-font: 4.2.0 + videojs-vtt.js: 0.15.5 + + videojs-contrib-quality-levels@4.1.0(video.js@8.22.0): + dependencies: + global: 4.4.0 + video.js: 8.22.0 + + videojs-font@4.2.0: {} + + videojs-vtt.js@0.15.5: + dependencies: + global: 4.4.0 + vite-hot-client@2.0.4(vite@6.3.0(sass-embedded@1.86.3)): dependencies: vite: 6.3.0(sass-embedded@1.86.3) diff --git a/public/favicon.ico b/public/favicon.ico index df36fcf..0da8d36 100644 Binary files a/public/favicon.ico and b/public/favicon.ico differ diff --git a/src/api/nba.js b/src/api/nba.js index 5a90448..cf4d87d 100644 --- a/src/api/nba.js +++ b/src/api/nba.js @@ -1,7 +1,8 @@ import request from "./request"; import axios from 'axios' + const nbaapi = axios.create({ - baseURL: 'http://localhost:9005/api', + baseURL: 'http://api.new9.me/api', // baseURL: 'http://110.42.255.182:8080', timeout: 2000, }) @@ -11,30 +12,73 @@ const urls = async () => { url: '/urls', method: 'get', }) - .then((response) => { - // console.log(response.data); // 可选:调试用 - return response.data; // 返回数据 - }) - .catch((error) => { - console.error('获取直播URL失败:', error); - throw error; // 可以选择抛出错误或返回默认值,比如 return [] - }); + .then((response) => { + return response.data; + }) + .catch((error) => { + console.error('获取直播URL失败:', error); + throw error; + }); }; -const games = () => { - nbaapi({ - url: '/games', - method: 'get', - }).then((response) => { - console.log(response.data); - }) - } - const schedule =(params) => { - return request({ - url: '/game/schedule', - method: 'get', - params: params, - }); - } +const games = async () => { + return await nbaapi({ + url: '/games', + method: 'get', + }) + .then((response) => { + // console.log(response.data); // 调试用 + return response.data; // 确保返回数据 + }) + .catch((error) => { + console.error('获取赛事数据失败:', error); + throw error; // 或者返回空数组 return [] + }); +}; - export {schedule,games,urls}; \ No newline at end of file +const go = async (pwd) => { + return await nbaapi({ + url: '/go', + method: 'get', + params: { + // 这里可以添加请求参数 + pwd: pwd, + }, + }) + .then((response) => { + // console.log(response.data); // 调试用 + return response.data; // 确保返回数据 + }) + .catch((error) => { + console.error('获取赛事数据失败:', error); + throw error; // 或者返回空数组 return [] + }); +}; + +const schedule = (params) => { + return request({ + url: '/game/schedule', + method: 'get', + params: params, + }); +}; + +const addUrls = async (gameId, urls) => { + return await nbaapi({ + url: '/addUrls', + method: 'post', + data: { + gameId: gameId, + urls: urls + } + }) + .then((response) => { + return response.data; + }) + .catch((error) => { + console.error('添加直播URL失败:', error); + throw error; + }); +}; + +export { schedule, games, urls, go,addUrls }; \ No newline at end of file diff --git a/src/components/LiveStream.vue b/src/components/LiveStream.vue index f5d8fb2..4cbc3f9 100644 --- a/src/components/LiveStream.vue +++ b/src/components/LiveStream.vue @@ -1,196 +1,296 @@ \ No newline at end of file diff --git a/src/components/NBASchedule.vue b/src/components/NBASchedule.vue index f1dbc69..497c86e 100644 --- a/src/components/NBASchedule.vue +++ b/src/components/NBASchedule.vue @@ -2,12 +2,12 @@
@@ -49,7 +49,10 @@
- -
- + + + + \ No newline at end of file diff --git a/src/views/Test.vue b/src/views/Test.vue new file mode 100644 index 0000000..3d155ac --- /dev/null +++ b/src/views/Test.vue @@ -0,0 +1,161 @@ + + + + + \ No newline at end of file