Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16a1a75ebb | ||
|
|
88dbfc80f8 | ||
|
|
25e2d59310 | ||
|
|
988b78a437 | ||
|
|
696423d656 | ||
|
|
9d963d8de3 | ||
|
|
8d1a405190 | ||
|
|
2ed18ca97f | ||
|
|
34015d5ba8 | ||
|
|
d86cd052c7 | ||
|
|
5ecd4a8e8f | ||
|
|
db0c9a522b | ||
|
|
9e1d69a55f | ||
|
|
1542bd673a | ||
|
|
b555aefe11 | ||
|
|
e31a5cc7b1 | ||
|
|
706bd9fd48 | ||
|
|
91b80ba547 | ||
|
|
eff3277513 | ||
|
|
d2b532a760 | ||
|
|
de415aeafa | ||
|
|
af2809ec73 | ||
|
|
2545739964 | ||
|
|
d052f60953 | ||
|
|
7f1e157dab | ||
|
|
ca57625cea | ||
|
|
64332a93dd | ||
|
|
ea37bb9dff | ||
|
|
939f92da38 | ||
|
|
40d24ae1af | ||
|
|
8b8bef1bff | ||
|
|
b48df2945b | ||
|
|
7cce654633 |
@@ -11,6 +11,7 @@ lerna-debug.log*
|
||||
coverage
|
||||
*.local
|
||||
|
||||
dist
|
||||
node_modules
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
|
||||
2
.github/workflows/deploy-gitee-pages.yml
vendored
2
.github/workflows/deploy-gitee-pages.yml
vendored
@@ -44,7 +44,7 @@ jobs:
|
||||
- name: Build
|
||||
run: pnpm run build-gitee-pages
|
||||
|
||||
- name: Deploy to Gitee Pages
|
||||
- name: Deploy to Github Pages
|
||||
uses: peaceiris/actions-gh-pages@v4
|
||||
with:
|
||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
4
.github/workflows/docker-image-ci.yml
vendored
4
.github/workflows/docker-image-ci.yml
vendored
@@ -37,5 +37,5 @@ jobs:
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64
|
||||
tags: |
|
||||
ghcr.io/${{ github.repository_owner }}/douyin:${{ steps.vars.outputs.version }}
|
||||
ghcr.io/${{ github.repository_owner }}/douyin:latest
|
||||
ghcr.io/${{ github.repository_owner }}/douyin-vue:${{ steps.vars.outputs.version }}
|
||||
ghcr.io/${{ github.repository_owner }}/douyin-vue:latest
|
||||
@@ -5,12 +5,13 @@ ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
RUN corepack enable
|
||||
|
||||
WORKDIR /app
|
||||
COPY . .
|
||||
WORKDIR /src
|
||||
COPY ./ ./
|
||||
|
||||
# RUN两次方便观察install和build, 也可以用pnpm cache and locked
|
||||
RUN pnpm install && pnpm run build
|
||||
RUN pnpm install
|
||||
RUN npm run build
|
||||
|
||||
FROM --platform=${BUILDPLATFORM:-linux/amd64,linux/arm64} ghcr.io/rookie-luochao/nginx-runner:latest
|
||||
|
||||
COPY --from=builder /app/dist .
|
||||
COPY --from=builder /src/dist /app
|
||||
16
README.md
16
README.md
@@ -44,17 +44,25 @@ Github Pages: [https://dy.ttentau.top/](https://dy.ttentau.top/)
|
||||
|
||||
【模仿抖音系列】一:[200行代码实现类似Swiper.js的轮播组件](https://juejin.cn/post/7360512664317018146)
|
||||
【模仿抖音系列】二:[实现抖音 “视频无限滑动“效果](https://juejin.cn/post/7361614921519054883)
|
||||
【模仿抖音系列】三:[Vue 路由使用介绍以及添加转场动画](https://juejin.cn/post/7362528152777130025)
|
||||
|
||||
更多文章正在准备中...
|
||||
【模仿抖音系列】三:[Vue 路由使用介绍以及添加转场动画](https://juejin.cn/post/7362528152777130025)
|
||||
【模仿抖音系列】四:[Vue 有条件路由缓存,就像传统新闻网站一样](https://juejin.cn/post/7365334891473240101)
|
||||
【模仿抖音系列】四:[Github Actions 部署 Pages、同步到 Gitee、翻译 README 、 打包 docker 镜像](https://juejin.cn/post/7365757742381957161)
|
||||
|
||||
## 运行
|
||||
注意:本项目仅适用于学习和研究,不得用于商业使用
|
||||
|
||||
### 快速部署至Vercel
|
||||
### 快速部署至 Vercel
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zyronon/douyin)
|
||||
|
||||
### 部署到 Docker
|
||||
```bash
|
||||
# pull Docker image
|
||||
docker pull ghcr.io/zyronon/douyin-vue:latest
|
||||
|
||||
# start container, nginx reverse proxy custom port, for example: docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
```
|
||||
### 本地开发
|
||||
**注意:必须 git 命令 clone 下来才能运行,下载 zip 包是无法运行的。如果 clone 速度太慢,推荐使用 gitee 地址**
|
||||
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
|
||||
## Online-Zugang
|
||||
|
||||
Gitee-Seiten:<https://zyronon.gitee.io/douyin/>(Es wird empfohlen, diese Adresse in China zu besuchen)
|
||||
Hinweis: Gitee-Seiten können derzeit nicht aktualisiert werden, da der Code nicht aktuell ist. Wenn Sie die Firewall umgehen können, empfehle ich den Besuch der folgenden Adresse:
|
||||
[//]: # "Gitee Pages: [https://zyronon.gitee.io/douyin/](https://zyronon.gitee.io/douyin/)(中国地区推荐访问这个地址) "
|
||||
|
||||
[//]: # "注意:Gitee Pages现在无法更新,代码不是最新的。如果你能翻墙推荐访问下面地址 "
|
||||
|
||||
Github-Seiten:<https://dy.ttentau.top/>
|
||||
|
||||
@@ -48,9 +49,8 @@ Github-Seiten:<https://dy.ttentau.top/>
|
||||
|
||||
\[Imitation Douyin-Serie] 1:[200 Codezeilen zur Implementierung einer Karussellkomponente ähnlich Swiper.js](https://juejin.cn/post/7360512664317018146)
|
||||
\[Imitation Douyin-Serie] 2:[Verwirklichen Sie den „unendlich gleitenden Video“-Effekt auf Douyin](https://juejin.cn/post/7361614921519054883)
|
||||
\[Imitation Douyin-Serie] Drei:[Einführung in die Verwendung von Vue-Routing und das Hinzufügen von Übergangsanimationen](https://juejin.cn/post/7362528152777130025)
|
||||
|
||||
Weitere Artikel sind in Vorbereitung...
|
||||
\[Imitation Douyin-Serie] Drei:[Einführung in die Verwendung des Vue-Routings und das Hinzufügen von Übergangsanimationen](https://juejin.cn/post/7362528152777130025)
|
||||
\[Imitation Douyin-Serie] Vier:[Bedingtes Routen-Caching von Vue, genau wie bei herkömmlichen Nachrichtenseiten](https://juejin.cn/post/7365334891473240101)\[Imitation Douyin-Serie] Vier:[Github-Aktionen stellen Seiten bereit, synchronisieren mit Gitee, übersetzen README, packen Docker-Image](https://juejin.cn/post/7365757742381957161)
|
||||
|
||||
## laufen
|
||||
|
||||
@@ -60,8 +60,20 @@ Hinweis: Dieses Projekt ist nur für Studien- und Forschungszwecke geeignet, nic
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zyronon/douyin)
|
||||
|
||||
### Auf Docker bereitstellen
|
||||
|
||||
```bash
|
||||
# pull Docker image
|
||||
docker pull ghcr.io/zyronon/douyin-vue:latest
|
||||
|
||||
# start container, nginx reverse proxy custom port, for example: docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
```
|
||||
|
||||
### lokale Entwicklung
|
||||
|
||||
**Hinweis: Der Git-Befehl muss geklont werden, damit er ausgeführt werden kann. Das Herunterladen des ZIP-Pakets ist nicht möglich. Wenn die Klongeschwindigkeit zu langsam ist, wird empfohlen, die Gitee-Adresse zu verwenden**
|
||||
|
||||
```bash
|
||||
git clone https://gitee.com/zyronon/douyin.git (中国使用)
|
||||
https://github.com/zyronon/douyin.git
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
|
||||
## Online access
|
||||
|
||||
Gitee Pages:<https://zyronon.gitee.io/douyin/>(It is recommended to visit this address in China)
|
||||
Note: Gitee Pages cannot be updated now, the code is not up to date. If you can circumvent the firewall, I recommend visiting the following address:
|
||||
[//]: # "Gitee Pages: [https://zyronon.gitee.io/douyin/](https://zyronon.gitee.io/douyin/)(中国地区推荐访问这个地址) "
|
||||
|
||||
[//]: # "注意:Gitee Pages现在无法更新,代码不是最新的。如果你能翻墙推荐访问下面地址 "
|
||||
|
||||
Github Pages:<https://dy.ttentau.top/>
|
||||
|
||||
@@ -46,11 +47,10 @@ Github Pages:<https://dy.ttentau.top/>
|
||||
|
||||
## Link
|
||||
|
||||
\[Imitation Douyin Series] 1:[200 lines of code to implement a carousel component similar to Swiper.js](https://juejin.cn/post/7360512664317018146)
|
||||
\[Imitation Douyin Series] 1:[200行代码实现类似Swiper.js的轮播组件](https://juejin.cn/post/7360512664317018146)
|
||||
\[Imitation Douyin Series] 2:[Realize the "infinite sliding video" effect on Douyin](https://juejin.cn/post/7361614921519054883)
|
||||
\[Imitation Douyin Series] Three:[Introduction to using Vue routing and adding transition animations](https://juejin.cn/post/7362528152777130025)
|
||||
|
||||
More articles are in preparation...
|
||||
\[Imitation Douyin Series] Three:[Introduction to using Vue routing and adding transition animations](https://juejin.cn/post/7362528152777130025)
|
||||
\[Imitation Douyin Series] Four:[Vue conditional route caching, just like traditional news sites](https://juejin.cn/post/7365334891473240101)\[Imitation Douyin Series] Four:[Github Actions deploy Pages, synchronize to Gitee, translate README, package docker image](https://juejin.cn/post/7365757742381957161)
|
||||
|
||||
## run
|
||||
|
||||
@@ -60,8 +60,20 @@ Note: This project is only suitable for study and research, not for commercial u
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zyronon/douyin)
|
||||
|
||||
### Deploy to Docker
|
||||
|
||||
```bash
|
||||
# pull Docker image
|
||||
docker pull ghcr.io/zyronon/douyin-vue:latest
|
||||
|
||||
# start container, nginx reverse proxy custom port, for example: docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
```
|
||||
|
||||
### local development
|
||||
|
||||
**Note: The git command must be cloned to run. Downloading the zip package cannot run. If the clone speed is too slow, it is recommended to use the gitee address**
|
||||
|
||||
```bash
|
||||
git clone https://gitee.com/zyronon/douyin.git (中国使用)
|
||||
https://github.com/zyronon/douyin.git
|
||||
@@ -101,7 +113,7 @@ The above content is all public information on the Internet
|
||||
The project is currently in the early stages of development, and new features are being added continuously. If you have any features or suggestions for the software, please feel free to contact us.`Issues`raised in
|
||||
If you also like the design ideas of this software, please submit it`PR`, thank you very much for your support!
|
||||
|
||||
## 联系我
|
||||
## contact me
|
||||
|
||||
You can contact my email<a href="mailto:zyronon@163.com">zyronon@163.com</a>
|
||||
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
|
||||
## Acceso en linea
|
||||
|
||||
Páginas de casas rurales:<https://zyronon.gitee.io/douyin/>(Se recomienda visitar esta dirección en China)
|
||||
Nota: Las páginas de Gitee no se pueden actualizar ahora, el código no está actualizado. Si puede eludir el firewall, le recomiendo visitar la siguiente dirección:
|
||||
[//]: # "Gitee Pages: [https://zyronon.gitee.io/douyin/](https://zyronon.gitee.io/douyin/)(中国地区推荐访问这个地址) "
|
||||
|
||||
[//]: # "注意:Gitee Pages现在无法更新,代码不是最新的。如果你能翻墙推荐访问下面地址 "
|
||||
|
||||
Páginas de Github:<https://dy.ttentau.top/>
|
||||
|
||||
@@ -48,9 +49,8 @@ Páginas de Github:<https://dy.ttentau.top/>
|
||||
|
||||
\[Serie Imitación Douyin] 1:[200 líneas de código para implementar un componente carrusel similar a Swiper.js](https://juejin.cn/post/7360512664317018146)
|
||||
\[Serie Imitación Douyin] 2:[Realice el efecto de "vídeo deslizante infinito" en Douyin](https://juejin.cn/post/7361614921519054883)
|
||||
\[Serie Imitación Douyin] Tres:[Introducción al uso del enrutamiento de Vue y la adición de animaciones de transición](https://juejin.cn/post/7362528152777130025)
|
||||
|
||||
Más artículos están en preparación...
|
||||
\[Serie Imitación Douyin] Tres:[Introducción al uso del enrutamiento de Vue y la adición de animaciones de transición](https://juejin.cn/post/7362528152777130025)
|
||||
\[Serie Imitación Douyin] Cuatro:[Almacenamiento en caché de rutas condicionales de Vue, al igual que los sitios de noticias tradicionales](https://juejin.cn/post/7365334891473240101)\[Serie Imitación Douyin] Cuatro:[Github Actions implementa páginas, sincroniza con Gitee, traduce README, empaqueta la imagen de la ventana acoplable](https://juejin.cn/post/7365757742381957161)
|
||||
|
||||
## correr
|
||||
|
||||
@@ -60,8 +60,20 @@ Nota: Este proyecto sólo es apto para estudio e investigación, no para uso com
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zyronon/douyin)
|
||||
|
||||
### Implementar en Docker
|
||||
|
||||
```bash
|
||||
# pull Docker image
|
||||
docker pull ghcr.io/zyronon/douyin-vue:latest
|
||||
|
||||
# start container, nginx reverse proxy custom port, for example: docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
```
|
||||
|
||||
### desarrollo local
|
||||
|
||||
**Nota: El comando git debe clonarse para ejecutarse. No se puede ejecutar la descarga del paquete zip. Si la velocidad de clonación es demasiado lenta, se recomienda utilizar la dirección del albergue**
|
||||
|
||||
```bash
|
||||
git clone https://gitee.com/zyronon/douyin.git (中国使用)
|
||||
https://github.com/zyronon/douyin.git
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<p align="center">
|
||||
<a href="README.en.md">English</a> | <a href="README.es.md">Spanish</a> | <a href="README.de.md">German</a> |
|
||||
<a href="README.fr.md">French</a> | <a href="../README.md">简体中文</a> | <a href="README.ja.md">日本語</a>
|
||||
<a href="README.fr.md">French</a> | <a href="README.md">简体中文</a> | <a href="README.ja.md">日本語</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -16,17 +16,18 @@
|
||||
`douyin-vue`est une parodie`抖音|TikTok`projet de courte vidéo mobile.`Vue`Des « bonnes pratiques » côté mobile, comparables au natif`App`Expérience soyeuse et douce. Utilisé le dernier`Vue`pile technologique, basée sur[`Vue3`](https://cn.vuejs.org/)、[`Vite5`](https://cn.vitejs.dev/)、[`Pinia`](https://pinia.vuejs.org/)accomplir. Les données sont enregistrées localement dans le projet via[`axios-mock-adapter`](https://github.com/ctimmerm/axios-mock-adapter)La bibliothèque intercepte l'API et renvoie des données json locales pour simuler de véritables requêtes backend.
|
||||
|
||||
<div>
|
||||
<img width="150px" src='imgs/1.gif' />
|
||||
<img width="150px" src='imgs/2.gif' />
|
||||
<img width="150px" src='imgs/3.gif' />
|
||||
<img width="150px" src='imgs/4.gif' />
|
||||
<img width="150px" src='imgs/5.gif' />
|
||||
<img width="150px" src='docs/imgs/1.gif' />
|
||||
<img width="150px" src='docs/imgs/2.gif' />
|
||||
<img width="150px" src='docs/imgs/3.gif' />
|
||||
<img width="150px" src='docs/imgs/4.gif' />
|
||||
<img width="150px" src='docs/imgs/5.gif' />
|
||||
</div>
|
||||
|
||||
## Accès en ligne
|
||||
|
||||
Pages du gîte :<https://zyronon.gitee.io/douyin/>(Il est recommandé de visiter cette adresse en Chine)
|
||||
Remarque : Les pages Gitee ne peuvent pas être mises à jour pour le moment, le code n'est pas à jour. Si vous pouvez contourner le pare-feu, je vous recommande de visiter l'adresse suivante :
|
||||
[//]: # "Gitee Pages: [https://zyronon.gitee.io/douyin/](https://zyronon.gitee.io/douyin/)(中国地区推荐访问这个地址) "
|
||||
|
||||
[//]: # "注意:Gitee Pages现在无法更新,代码不是最新的。如果你能翻墙推荐访问下面地址 "
|
||||
|
||||
Pages GitHub :<https://dy.ttentau.top/>
|
||||
|
||||
@@ -48,9 +49,8 @@ Pages GitHub :<https://dy.ttentau.top/>
|
||||
|
||||
\[Série Imitation Douyin] 1 :[200 lignes de code pour implémenter un composant carrousel similaire à Swiper.js](https://juejin.cn/post/7360512664317018146)
|
||||
\[Série Imitation Douyin] 2 :[Réaliser l'effet "vidéo coulissante infinie" sur Douyin](https://juejin.cn/post/7361614921519054883)
|
||||
\[Série Imitation Douyin] Trois :[Introduction à l'utilisation du routage Vue et à l'ajout d'animations de transition](https://juejin.cn/post/7362528152777130025)
|
||||
|
||||
D'autres articles sont en préparation...
|
||||
\[Série Imitation Douyin] Trois :[Introduction à l'utilisation du routage Vue et à l'ajout d'animations de transition](https://juejin.cn/post/7362528152777130025)
|
||||
\[Série Imitation Douyin] Quatre :[Mise en cache des routes conditionnelles Vue, tout comme les sites d'information traditionnels](https://juejin.cn/post/7365334891473240101)\[Série Imitation Douyin] Quatre :[Les actions Github déploient des pages, synchronisent avec Gitee, traduisent README, emballent l'image Docker](https://juejin.cn/post/7365757742381957161)
|
||||
|
||||
## courir
|
||||
|
||||
@@ -60,8 +60,20 @@ Remarque : ce projet convient uniquement à l'étude et à la recherche, et non
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zyronon/douyin)
|
||||
|
||||
### Déployer sur Docker
|
||||
|
||||
```bash
|
||||
# pull Docker image
|
||||
docker pull ghcr.io/zyronon/douyin-vue:latest
|
||||
|
||||
# start container, nginx reverse proxy custom port, for example: docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
```
|
||||
|
||||
### développement local
|
||||
|
||||
**Remarque : La commande git doit être clonée pour s'exécuter. Le téléchargement du package zip ne peut pas s'exécuter. Si la vitesse de clonage est trop lente, il est recommandé d'utiliser l'adresse du gîte**
|
||||
|
||||
```bash
|
||||
git clone https://gitee.com/zyronon/douyin.git (中国使用)
|
||||
https://github.com/zyronon/douyin.git
|
||||
@@ -101,7 +113,7 @@ Le contenu ci-dessus est toute l'information publique sur Internet
|
||||
Le projet en est actuellement aux premiers stades de développement et de nouvelles fonctionnalités sont ajoutées continuellement. Si vous avez des fonctionnalités ou des suggestions pour le logiciel, n'hésitez pas à nous contacter.`Issues`élevé dans
|
||||
Si vous aimez également les idées de conception de ce logiciel, veuillez le soumettre`PR`, Merci beaucoup pour votre soutient!
|
||||
|
||||
## Contactez moi
|
||||
## 联系我
|
||||
|
||||
Vous pouvez contacter mon email<a href="mailto:zyronon@163.com">zyronon@163.com</a>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<p align="center">
|
||||
<a href="README.en.md">English</a> | <a href="README.es.md">Spanish</a> | <a href="README.de.md">German</a> |
|
||||
<a href="README.fr.md">French</a> | <a href="../README.md">简体中文</a> | <a href="README.ja.md">日本語</a>
|
||||
<a href="README.fr.md">French</a> | <a href="README.md">简体中文</a> | <a href="README.ja.md">日本語</a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
@@ -16,17 +16,18 @@
|
||||
`douyin-vue`パロディです`抖音|TikTok`モバイルショートビデオプロジェクト。`Vue`ネイティブと同等のモバイル側の「ベスト プラクティス」`App`シルキーで滑らかな使い心地。最新のものを使用しました`Vue`テクノロジースタック、に基づく[`Vue3`](https://cn.vuejs.org/)、[`Vite5`](https://cn.vitejs.dev/)、[`Pinia`](https://pinia.vuejs.org/)成し遂げる。データはプロジェクト内でローカルに保存されます。[`axios-mock-adapter`](https://github.com/ctimmerm/axios-mock-adapter)ライブラリは API をインターセプトし、ローカルの JSON データを返して、実際のバックエンド リクエストをシミュレートします。
|
||||
|
||||
<div>
|
||||
<img width="150px" src='imgs/1.gif' />
|
||||
<img width="150px" src='imgs/2.gif' />
|
||||
<img width="150px" src='imgs/3.gif' />
|
||||
<img width="150px" src='imgs/4.gif' />
|
||||
<img width="150px" src='imgs/5.gif' />
|
||||
<img width="150px" src='docs/imgs/1.gif' />
|
||||
<img width="150px" src='docs/imgs/2.gif' />
|
||||
<img width="150px" src='docs/imgs/3.gif' />
|
||||
<img width="150px" src='docs/imgs/4.gif' />
|
||||
<img width="150px" src='docs/imgs/5.gif' />
|
||||
</div>
|
||||
|
||||
## オンラインアクセス
|
||||
|
||||
ジーティーページ:[hっtps://zyろのん。ぎてえ。いお/どうyいん/](https://zyronon.gitee.io/douyin/)(中国ではこのアドレスにアクセスすることをお勧めします)
|
||||
注: コードが最新ではないため、現在 Gitee ページを更新できません。ファイアウォールを回避できる場合は、次のアドレスにアクセスすることをお勧めします。
|
||||
[//]: # "Gitee Pages: [https://zyronon.gitee.io/douyin/](https://zyronon.gitee.io/douyin/)(中国地区推荐访问这个地址) "
|
||||
|
||||
[//]: # "注意:Gitee Pages现在无法更新,代码不是最新的。如果你能翻墙推荐访问下面地址 "
|
||||
|
||||
Github ページ:[hっtps://dy。ってんたう。とp/](https://dy.ttentau.top/)
|
||||
|
||||
@@ -48,9 +49,8 @@ Github ページ:[hっtps://dy。ってんたう。とp/](
|
||||
|
||||
【模倣同音シリーズ】 1:[Swiper.js に似たカルーセル コンポーネントを実装するための 200 行のコード](https://juejin.cn/post/7360512664317018146)
|
||||
【模倣同音シリーズ】2:[Douyinで「無限スライドビデオ」効果を実現](https://juejin.cn/post/7361614921519054883)
|
||||
【模倣同音シリーズ】その3:[Vue ルーティングの使用とトランジション アニメーションの追加の概要](https://juejin.cn/post/7362528152777130025)
|
||||
|
||||
さらなる記事も準備中です...
|
||||
【模倣同音シリーズ】その3:[Vue ルーティングの使用とトランジション アニメーションの追加の概要](https://juejin.cn/post/7362528152777130025)
|
||||
【模仿抖音系列】四:[従来のニュースサイトと同様に、Vue の条件付きルート キャッシュ](https://juejin.cn/post/7365334891473240101)【模倣同音シリーズ】 4:[Github Actions ページのデプロイ、Gitee への同期、README の翻訳、Docker イメージのパッケージ化](https://juejin.cn/post/7365757742381957161)
|
||||
|
||||
## 走る
|
||||
|
||||
@@ -60,8 +60,20 @@ Github ページ:[hっtps://dy。ってんたう。とp/](
|
||||
|
||||
[](https://vercel.com/new/clone?repository-url=https://github.com/zyronon/douyin)
|
||||
|
||||
### Dockerへのデプロイ
|
||||
|
||||
```bash
|
||||
# pull Docker image
|
||||
docker pull ghcr.io/zyronon/douyin-vue:latest
|
||||
|
||||
# start container, nginx reverse proxy custom port, for example: docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
docker run -d -p 80:80 ghcr.io/zyronon/douyin-vue:latest
|
||||
```
|
||||
|
||||
### 地域開発
|
||||
|
||||
**注: git コマンドを実行するには、クローンを作成する必要があります。zip パッケージのダウンロードは実行できません。クローン速度が遅すぎる場合は、gitee アドレスを使用することをお勧めします。**
|
||||
|
||||
```bash
|
||||
git clone https://gitee.com/zyronon/douyin.git (中国使用)
|
||||
https://github.com/zyronon/douyin.git
|
||||
|
||||
@@ -2,11 +2,12 @@
|
||||
"name": "douyin-vue",
|
||||
"version": "1.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite --host",
|
||||
"start": "vite --host",
|
||||
"serve": "vite --host",
|
||||
"build": "vite build --mode prod",
|
||||
"build": "vite build",
|
||||
"test-del-json": "node node/remove-dist-json.js",
|
||||
"build-uni-app": "vite build --mode uni",
|
||||
"build-gp-pages": "vite build --mode gp_pages",
|
||||
@@ -39,7 +40,7 @@
|
||||
"@rushstack/eslint-patch": "^1.3.3",
|
||||
"@tsconfig/node20": "^20.1.2",
|
||||
"@types/node": "^20.11.28",
|
||||
"@vitejs/plugin-vue": "4.0.0",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"@vitejs/plugin-vue-jsx": "^3.1.0",
|
||||
"@vue/eslint-config-prettier": "^8.0.0",
|
||||
"@vue/eslint-config-typescript": "^12.0.0",
|
||||
@@ -56,7 +57,7 @@
|
||||
"rollup-plugin-visualizer": "^5.9.2",
|
||||
"typescript": "5.3.3",
|
||||
"unplugin-vue-macros": "^2.9.1",
|
||||
"vite": "^5.1.7",
|
||||
"vite": "^5.2.0",
|
||||
"vite-plugin-cdn-import": "0.3.5",
|
||||
"vue-tsc": "^2.0.6"
|
||||
},
|
||||
|
||||
308
pnpm-lock.yaml
generated
308
pnpm-lock.yaml
generated
@@ -53,11 +53,11 @@ devDependencies:
|
||||
specifier: ^20.11.28
|
||||
version: 20.12.4
|
||||
'@vitejs/plugin-vue':
|
||||
specifier: 4.0.0
|
||||
version: 4.0.0(vite@5.1.7)(vue@3.4.21)
|
||||
specifier: ^5.0.4
|
||||
version: 5.0.4(vite@5.2.10)(vue@3.4.21)
|
||||
'@vitejs/plugin-vue-jsx':
|
||||
specifier: ^3.1.0
|
||||
version: 3.1.0(vite@5.1.7)(vue@3.4.21)
|
||||
version: 3.1.0(vite@5.2.10)(vue@3.4.21)
|
||||
'@vue/eslint-config-prettier':
|
||||
specifier: ^8.0.0
|
||||
version: 8.0.0(eslint@8.57.0)(prettier@3.2.5)
|
||||
@@ -102,10 +102,10 @@ devDependencies:
|
||||
version: 5.3.3
|
||||
unplugin-vue-macros:
|
||||
specifier: ^2.9.1
|
||||
version: 2.9.1(rollup@2.79.1)(typescript@5.3.3)(vite@5.1.7)(vue@3.4.21)
|
||||
version: 2.9.1(rollup@2.79.1)(typescript@5.3.3)(vite@5.2.10)(vue@3.4.21)
|
||||
vite:
|
||||
specifier: ^5.1.7
|
||||
version: 5.1.7(@types/node@20.12.4)(less@4.1.3)
|
||||
specifier: ^5.2.0
|
||||
version: 5.2.10(@types/node@20.12.4)(less@4.1.3)
|
||||
vite-plugin-cdn-import:
|
||||
specifier: 0.3.5
|
||||
version: 0.3.5(rollup@2.79.1)
|
||||
@@ -672,8 +672,8 @@ packages:
|
||||
chalk: 5.3.0
|
||||
dev: true
|
||||
|
||||
/@esbuild/aix-ppc64@0.19.12:
|
||||
resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
|
||||
/@esbuild/aix-ppc64@0.20.2:
|
||||
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [aix]
|
||||
@@ -681,8 +681,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm64@0.19.12:
|
||||
resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
|
||||
/@esbuild/android-arm64@0.20.2:
|
||||
resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
@@ -690,8 +690,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-arm@0.19.12:
|
||||
resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
|
||||
/@esbuild/android-arm@0.20.2:
|
||||
resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [android]
|
||||
@@ -699,8 +699,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/android-x64@0.19.12:
|
||||
resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
|
||||
/@esbuild/android-x64@0.20.2:
|
||||
resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [android]
|
||||
@@ -708,8 +708,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-arm64@0.19.12:
|
||||
resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
|
||||
/@esbuild/darwin-arm64@0.20.2:
|
||||
resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
@@ -717,8 +717,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/darwin-x64@0.19.12:
|
||||
resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
|
||||
/@esbuild/darwin-x64@0.20.2:
|
||||
resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
@@ -726,8 +726,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-arm64@0.19.12:
|
||||
resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
|
||||
/@esbuild/freebsd-arm64@0.20.2:
|
||||
resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [freebsd]
|
||||
@@ -735,8 +735,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/freebsd-x64@0.19.12:
|
||||
resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
|
||||
/@esbuild/freebsd-x64@0.20.2:
|
||||
resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
@@ -744,8 +744,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm64@0.19.12:
|
||||
resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
|
||||
/@esbuild/linux-arm64@0.20.2:
|
||||
resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
@@ -753,8 +753,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-arm@0.19.12:
|
||||
resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
|
||||
/@esbuild/linux-arm@0.20.2:
|
||||
resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
@@ -762,8 +762,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ia32@0.19.12:
|
||||
resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
|
||||
/@esbuild/linux-ia32@0.20.2:
|
||||
resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [linux]
|
||||
@@ -771,8 +771,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-loong64@0.19.12:
|
||||
resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
|
||||
/@esbuild/linux-loong64@0.20.2:
|
||||
resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [loong64]
|
||||
os: [linux]
|
||||
@@ -780,8 +780,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-mips64el@0.19.12:
|
||||
resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
|
||||
/@esbuild/linux-mips64el@0.20.2:
|
||||
resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [mips64el]
|
||||
os: [linux]
|
||||
@@ -789,8 +789,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-ppc64@0.19.12:
|
||||
resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
|
||||
/@esbuild/linux-ppc64@0.20.2:
|
||||
resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ppc64]
|
||||
os: [linux]
|
||||
@@ -798,8 +798,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-riscv64@0.19.12:
|
||||
resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
|
||||
/@esbuild/linux-riscv64@0.20.2:
|
||||
resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [riscv64]
|
||||
os: [linux]
|
||||
@@ -807,8 +807,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-s390x@0.19.12:
|
||||
resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
|
||||
/@esbuild/linux-s390x@0.20.2:
|
||||
resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [s390x]
|
||||
os: [linux]
|
||||
@@ -816,8 +816,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/linux-x64@0.19.12:
|
||||
resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
|
||||
/@esbuild/linux-x64@0.20.2:
|
||||
resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
@@ -825,8 +825,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/netbsd-x64@0.19.12:
|
||||
resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
|
||||
/@esbuild/netbsd-x64@0.20.2:
|
||||
resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [netbsd]
|
||||
@@ -834,8 +834,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/openbsd-x64@0.19.12:
|
||||
resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
|
||||
/@esbuild/openbsd-x64@0.20.2:
|
||||
resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [openbsd]
|
||||
@@ -843,8 +843,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/sunos-x64@0.19.12:
|
||||
resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
|
||||
/@esbuild/sunos-x64@0.20.2:
|
||||
resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [sunos]
|
||||
@@ -852,8 +852,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-arm64@0.19.12:
|
||||
resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
|
||||
/@esbuild/win32-arm64@0.20.2:
|
||||
resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
@@ -861,8 +861,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-ia32@0.19.12:
|
||||
resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
|
||||
/@esbuild/win32-ia32@0.20.2:
|
||||
resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
@@ -870,8 +870,8 @@ packages:
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/@esbuild/win32-x64@0.19.12:
|
||||
resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
|
||||
/@esbuild/win32-x64@0.20.2:
|
||||
resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
|
||||
engines: {node: '>=12'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
@@ -1356,7 +1356,7 @@ packages:
|
||||
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
|
||||
dev: true
|
||||
|
||||
/@vitejs/plugin-vue-jsx@3.1.0(vite@5.1.7)(vue@3.4.21):
|
||||
/@vitejs/plugin-vue-jsx@3.1.0(vite@5.2.10)(vue@3.4.21):
|
||||
resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
peerDependencies:
|
||||
@@ -1366,20 +1366,20 @@ packages:
|
||||
'@babel/core': 7.24.3
|
||||
'@babel/plugin-transform-typescript': 7.24.1(@babel/core@7.24.3)
|
||||
'@vue/babel-plugin-jsx': 1.1.5(@babel/core@7.24.3)
|
||||
vite: 5.1.7(@types/node@20.12.4)(less@4.1.3)
|
||||
vite: 5.2.10(@types/node@20.12.4)(less@4.1.3)
|
||||
vue: 3.4.21(typescript@5.3.3)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/@vitejs/plugin-vue@4.0.0(vite@5.1.7)(vue@3.4.21):
|
||||
resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==}
|
||||
engines: {node: ^14.18.0 || >=16.0.0}
|
||||
/@vitejs/plugin-vue@5.0.4(vite@5.2.10)(vue@3.4.21):
|
||||
resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==}
|
||||
engines: {node: ^18.0.0 || >=20.0.0}
|
||||
peerDependencies:
|
||||
vite: ^4.0.0
|
||||
vite: ^5.0.0
|
||||
vue: ^3.2.25
|
||||
dependencies:
|
||||
vite: 5.1.7(@types/node@20.12.4)(less@4.1.3)
|
||||
vite: 5.2.10(@types/node@20.12.4)(less@4.1.3)
|
||||
vue: 3.4.21(typescript@5.3.3)
|
||||
dev: true
|
||||
|
||||
@@ -1567,7 +1567,7 @@ packages:
|
||||
- rollup
|
||||
dev: true
|
||||
|
||||
/@vue-macros/devtools@0.2.0(typescript@5.3.3)(vite@5.1.7):
|
||||
/@vue-macros/devtools@0.2.0(typescript@5.3.3)(vite@5.2.10):
|
||||
resolution: {integrity: sha512-jHjvY1bFgQLe/2+5pBOG4fgmL5MPhsqQDj7Barhj8YN+Oe7U2hBImvfAyOGpqd2uucLOWQTP1cWrp3q9b1svsg==}
|
||||
engines: {node: '>=16.14.0'}
|
||||
peerDependencies:
|
||||
@@ -1577,7 +1577,7 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
sirv: 2.0.4
|
||||
vite: 5.1.7(@types/node@20.12.4)(less@4.1.3)
|
||||
vite: 5.2.10(@types/node@20.12.4)(less@4.1.3)
|
||||
vue: 3.4.21(typescript@5.3.3)
|
||||
transitivePeerDependencies:
|
||||
- typescript
|
||||
@@ -2367,35 +2367,44 @@ packages:
|
||||
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||
engines: {node: '>=0.12'}
|
||||
|
||||
/esbuild@0.19.12:
|
||||
resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
|
||||
/errno@0.1.8:
|
||||
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
prr: 1.0.1
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/esbuild@0.20.2:
|
||||
resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
|
||||
engines: {node: '>=12'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
optionalDependencies:
|
||||
'@esbuild/aix-ppc64': 0.19.12
|
||||
'@esbuild/android-arm': 0.19.12
|
||||
'@esbuild/android-arm64': 0.19.12
|
||||
'@esbuild/android-x64': 0.19.12
|
||||
'@esbuild/darwin-arm64': 0.19.12
|
||||
'@esbuild/darwin-x64': 0.19.12
|
||||
'@esbuild/freebsd-arm64': 0.19.12
|
||||
'@esbuild/freebsd-x64': 0.19.12
|
||||
'@esbuild/linux-arm': 0.19.12
|
||||
'@esbuild/linux-arm64': 0.19.12
|
||||
'@esbuild/linux-ia32': 0.19.12
|
||||
'@esbuild/linux-loong64': 0.19.12
|
||||
'@esbuild/linux-mips64el': 0.19.12
|
||||
'@esbuild/linux-ppc64': 0.19.12
|
||||
'@esbuild/linux-riscv64': 0.19.12
|
||||
'@esbuild/linux-s390x': 0.19.12
|
||||
'@esbuild/linux-x64': 0.19.12
|
||||
'@esbuild/netbsd-x64': 0.19.12
|
||||
'@esbuild/openbsd-x64': 0.19.12
|
||||
'@esbuild/sunos-x64': 0.19.12
|
||||
'@esbuild/win32-arm64': 0.19.12
|
||||
'@esbuild/win32-ia32': 0.19.12
|
||||
'@esbuild/win32-x64': 0.19.12
|
||||
'@esbuild/aix-ppc64': 0.20.2
|
||||
'@esbuild/android-arm': 0.20.2
|
||||
'@esbuild/android-arm64': 0.20.2
|
||||
'@esbuild/android-x64': 0.20.2
|
||||
'@esbuild/darwin-arm64': 0.20.2
|
||||
'@esbuild/darwin-x64': 0.20.2
|
||||
'@esbuild/freebsd-arm64': 0.20.2
|
||||
'@esbuild/freebsd-x64': 0.20.2
|
||||
'@esbuild/linux-arm': 0.20.2
|
||||
'@esbuild/linux-arm64': 0.20.2
|
||||
'@esbuild/linux-ia32': 0.20.2
|
||||
'@esbuild/linux-loong64': 0.20.2
|
||||
'@esbuild/linux-mips64el': 0.20.2
|
||||
'@esbuild/linux-ppc64': 0.20.2
|
||||
'@esbuild/linux-riscv64': 0.20.2
|
||||
'@esbuild/linux-s390x': 0.20.2
|
||||
'@esbuild/linux-x64': 0.20.2
|
||||
'@esbuild/netbsd-x64': 0.20.2
|
||||
'@esbuild/openbsd-x64': 0.20.2
|
||||
'@esbuild/sunos-x64': 0.20.2
|
||||
'@esbuild/win32-arm64': 0.20.2
|
||||
'@esbuild/win32-ia32': 0.20.2
|
||||
'@esbuild/win32-x64': 0.20.2
|
||||
dev: true
|
||||
|
||||
/escalade@3.1.1:
|
||||
@@ -2819,6 +2828,14 @@ packages:
|
||||
engines: {node: '>= 4'}
|
||||
dev: true
|
||||
|
||||
/image-size@0.5.5:
|
||||
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/import-fresh@3.3.0:
|
||||
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -3012,13 +3029,13 @@ packages:
|
||||
parse-node-version: 1.0.1
|
||||
tslib: 2.6.2
|
||||
optionalDependencies:
|
||||
errno: r2.cnpmjs.org/errno@0.1.8
|
||||
errno: 0.1.8
|
||||
graceful-fs: 4.2.11
|
||||
image-size: r2.cnpmjs.org/image-size@0.5.5
|
||||
make-dir: r2.cnpmjs.org/make-dir@2.1.0
|
||||
mime: r2.cnpmjs.org/mime@1.6.0
|
||||
image-size: 0.5.5
|
||||
make-dir: 2.1.0
|
||||
mime: 1.6.0
|
||||
needle: 3.3.1
|
||||
source-map: r2.cnpmjs.org/source-map@0.6.1
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/levn@0.4.1:
|
||||
@@ -3148,6 +3165,16 @@ packages:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
|
||||
/make-dir@2.1.0:
|
||||
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
|
||||
engines: {node: '>=6'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
pify: 4.0.1
|
||||
semver: 5.7.2
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/meow@12.1.1:
|
||||
resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==}
|
||||
engines: {node: '>=16.10'}
|
||||
@@ -3177,6 +3204,14 @@ packages:
|
||||
mime-db: 1.52.0
|
||||
dev: false
|
||||
|
||||
/mime@1.6.0:
|
||||
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/mimic-fn@2.1.0:
|
||||
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
||||
engines: {node: '>=6'}
|
||||
@@ -3428,6 +3463,15 @@ packages:
|
||||
picocolors: 1.0.0
|
||||
source-map-js: 1.0.2
|
||||
|
||||
/postcss@8.4.38:
|
||||
resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
|
||||
engines: {node: ^10 || ^12 || >=14}
|
||||
dependencies:
|
||||
nanoid: 3.3.7
|
||||
picocolors: 1.0.0
|
||||
source-map-js: 1.2.0
|
||||
dev: true
|
||||
|
||||
/prelude-ls@1.2.1:
|
||||
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
||||
engines: {node: '>= 0.8.0'}
|
||||
@@ -3678,6 +3722,18 @@ packages:
|
||||
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
/source-map-js@1.2.0:
|
||||
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/source-map@0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
/source-map@0.7.4:
|
||||
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
|
||||
engines: {node: '>= 8'}
|
||||
@@ -3836,7 +3892,7 @@ packages:
|
||||
engines: {node: '>= 10.0.0'}
|
||||
dev: true
|
||||
|
||||
/unplugin-combine@0.9.0(rollup@2.79.1)(vite@5.1.7):
|
||||
/unplugin-combine@0.9.0(rollup@2.79.1)(vite@5.2.10):
|
||||
resolution: {integrity: sha512-1bXgHXIhw/bNEFCwNnYRlOOcamsBNQObSWBuy3FcDcnMoFLIi4ZaMsi/L0cNxltfYBTS+QvGSZ1F+LgQ0vbcLg==}
|
||||
engines: {node: '>=16.14.0'}
|
||||
peerDependencies:
|
||||
@@ -3857,7 +3913,7 @@ packages:
|
||||
'@antfu/utils': 0.7.7
|
||||
rollup: 2.79.1
|
||||
unplugin: 1.10.1
|
||||
vite: 5.1.7(@types/node@20.12.4)(less@4.1.3)
|
||||
vite: 5.2.10(@types/node@20.12.4)(less@4.1.3)
|
||||
dev: true
|
||||
|
||||
/unplugin-vue-define-options@1.4.3(rollup@2.79.1)(vue@3.4.21):
|
||||
@@ -3872,7 +3928,7 @@ packages:
|
||||
- vue
|
||||
dev: true
|
||||
|
||||
/unplugin-vue-macros@2.9.1(rollup@2.79.1)(typescript@5.3.3)(vite@5.1.7)(vue@3.4.21):
|
||||
/unplugin-vue-macros@2.9.1(rollup@2.79.1)(typescript@5.3.3)(vite@5.2.10)(vue@3.4.21):
|
||||
resolution: {integrity: sha512-r9y6e5GhUgRGzHr+Od9X6S2irdzwSAdU2BvSz0dXN00tDHNm/Y/iCn/Iypdzbe4ai9b09lMfB5MFUpT3jfOlQA==}
|
||||
engines: {node: '>=16.14.0'}
|
||||
peerDependencies:
|
||||
@@ -3889,7 +3945,7 @@ packages:
|
||||
'@vue-macros/define-props-refs': 1.2.3(rollup@2.79.1)(vue@3.4.21)
|
||||
'@vue-macros/define-render': 1.5.3(rollup@2.79.1)(vue@3.4.21)
|
||||
'@vue-macros/define-slots': 1.1.3(rollup@2.79.1)(vue@3.4.21)
|
||||
'@vue-macros/devtools': 0.2.0(typescript@5.3.3)(vite@5.1.7)
|
||||
'@vue-macros/devtools': 0.2.0(typescript@5.3.3)(vite@5.2.10)
|
||||
'@vue-macros/export-expose': 0.1.3(rollup@2.79.1)(vue@3.4.21)
|
||||
'@vue-macros/export-props': 0.4.3(rollup@2.79.1)(vue@3.4.21)
|
||||
'@vue-macros/export-render': 0.2.3(rollup@2.79.1)(vue@3.4.21)
|
||||
@@ -3904,7 +3960,7 @@ packages:
|
||||
'@vue-macros/short-emits': 1.5.3(rollup@2.79.1)(vue@3.4.21)
|
||||
'@vue-macros/short-vmodel': 1.4.3(rollup@2.79.1)(vue@3.4.21)
|
||||
unplugin: 1.10.1
|
||||
unplugin-combine: 0.9.0(rollup@2.79.1)(vite@5.1.7)
|
||||
unplugin-combine: 0.9.0(rollup@2.79.1)(vite@5.2.10)
|
||||
unplugin-vue-define-options: 1.4.3(rollup@2.79.1)(vue@3.4.21)
|
||||
vue: 3.4.21(typescript@5.3.3)
|
||||
transitivePeerDependencies:
|
||||
@@ -3956,8 +4012,8 @@ packages:
|
||||
- rollup
|
||||
dev: true
|
||||
|
||||
/vite@5.1.7(@types/node@20.12.4)(less@4.1.3):
|
||||
resolution: {integrity: sha512-sgnEEFTZYMui/sTlH1/XEnVNHMujOahPLGMxn1+5sIT45Xjng1Ec1K78jRP15dSmVgg5WBin9yO81j3o9OxofA==}
|
||||
/vite@5.2.10(@types/node@20.12.4)(less@4.1.3):
|
||||
resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==}
|
||||
engines: {node: ^18.0.0 || >=20.0.0}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
@@ -3985,9 +4041,9 @@ packages:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@types/node': 20.12.4
|
||||
esbuild: 0.19.12
|
||||
esbuild: 0.20.2
|
||||
less: 4.1.3
|
||||
postcss: 8.4.35
|
||||
postcss: 8.4.38
|
||||
rollup: 4.14.0
|
||||
optionalDependencies:
|
||||
fsevents: 2.3.3
|
||||
@@ -4463,17 +4519,6 @@ packages:
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
|
||||
r2.cnpmjs.org/errno@0.1.8:
|
||||
resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/errno/-/errno-0.1.8.tgz}
|
||||
name: errno
|
||||
version: 0.1.8
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
prr: 1.0.1
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
r2.cnpmjs.org/error-ex@1.3.2:
|
||||
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/error-ex/-/error-ex-1.3.2.tgz}
|
||||
name: error-ex
|
||||
@@ -4657,16 +4702,6 @@ packages:
|
||||
version: 1.2.1
|
||||
dev: true
|
||||
|
||||
r2.cnpmjs.org/image-size@0.5.5:
|
||||
resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/image-size/-/image-size-0.5.5.tgz}
|
||||
name: image-size
|
||||
version: 0.5.5
|
||||
engines: {node: '>=0.10.0'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
r2.cnpmjs.org/import-fresh@3.3.0:
|
||||
resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/import-fresh/-/import-fresh-3.3.0.tgz}
|
||||
name: import-fresh
|
||||
@@ -4913,18 +4948,6 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
r2.cnpmjs.org/make-dir@2.1.0:
|
||||
resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/make-dir/-/make-dir-2.1.0.tgz}
|
||||
name: make-dir
|
||||
version: 2.1.0
|
||||
engines: {node: '>=6'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
pify: 4.0.1
|
||||
semver: 5.7.2
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
r2.cnpmjs.org/merge2@1.4.1:
|
||||
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/merge2/-/merge2-1.4.1.tgz}
|
||||
name: merge2
|
||||
@@ -4938,16 +4961,6 @@ packages:
|
||||
version: 2.1.1
|
||||
dev: true
|
||||
|
||||
r2.cnpmjs.org/mime@1.6.0:
|
||||
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/mime/-/mime-1.6.0.tgz}
|
||||
name: mime
|
||||
version: 1.6.0
|
||||
engines: {node: '>=4'}
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
r2.cnpmjs.org/mimic-fn@2.1.0:
|
||||
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz}
|
||||
name: mimic-fn
|
||||
@@ -5153,15 +5166,6 @@ packages:
|
||||
version: 2.1.2
|
||||
dev: true
|
||||
|
||||
r2.cnpmjs.org/source-map@0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/source-map/-/source-map-0.6.1.tgz}
|
||||
name: source-map
|
||||
version: 0.6.1
|
||||
engines: {node: '>=0.10.0'}
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
optional: true
|
||||
|
||||
r2.cnpmjs.org/string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, registry: https://r.cnpmjs.org/, tarball: https://r2.cnpmjs.org/string-width/-/string-width-4.2.3.tgz}
|
||||
name: string-width
|
||||
|
||||
58
src/App.vue
58
src/App.vue
@@ -1,22 +1,11 @@
|
||||
<template>
|
||||
<router-view v-slot="{ Component }">
|
||||
<transition :name="transitionName">
|
||||
<keep-alive :exclude="store.excludeRoutes">
|
||||
<keep-alive :exclude="store.excludeNames">
|
||||
<component :is="Component" />
|
||||
</keep-alive>
|
||||
</transition>
|
||||
</router-view>
|
||||
<BaseMask v-if="!isMobile" @click="isMobile = true" />
|
||||
<div v-if="!isMobile" class="guide">
|
||||
<Icon class="danger" icon="mynaui:danger-triangle" />
|
||||
<Icon class="close" icon="simple-line-icons:close" @click="isMobile = true" />
|
||||
<div class="txt">
|
||||
<h2>切换至手机模式获取最佳体验</h2>
|
||||
<h3>1. 按 F12 调出控制台</h3>
|
||||
<h3>2. 按 Ctrl+Shift+M,或点击下面图标</h3>
|
||||
</div>
|
||||
<img src="@/assets/img/guide.png" alt="" />
|
||||
</div>
|
||||
<Call />
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
@@ -35,7 +24,6 @@ import { BASE_URL } from '@/config'
|
||||
|
||||
const store = useBaseStore()
|
||||
const route = useRoute()
|
||||
const isMobile = ref(/Mobi|Android|iPhone/i.test(navigator.userAgent))
|
||||
const transitionName = ref('go')
|
||||
|
||||
// watch $route 决定使用哪种过渡
|
||||
@@ -78,14 +66,16 @@ onMounted(() => {
|
||||
location.href = BASE_URL + '/'
|
||||
setVh()
|
||||
})
|
||||
//禁止选中文字
|
||||
document.onselectstart = new Function('return false') as any
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
@import './assets/less/index';
|
||||
|
||||
* {
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
#app {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
@@ -102,44 +92,6 @@ onMounted(() => {
|
||||
}
|
||||
}
|
||||
|
||||
.guide {
|
||||
color: white;
|
||||
z-index: 999;
|
||||
background: var(--active-main-bg);
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
border-radius: 16rem;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
|
||||
.danger {
|
||||
margin-top: 10rem;
|
||||
font-size: 40rem;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.close {
|
||||
cursor: pointer;
|
||||
font-size: 18rem;
|
||||
color: white;
|
||||
position: absolute;
|
||||
right: 15rem;
|
||||
top: 15rem;
|
||||
}
|
||||
|
||||
.txt {
|
||||
text-align: left;
|
||||
padding: 0 24rem;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
width: 350rem;
|
||||
}
|
||||
}
|
||||
|
||||
.go-enter-from {
|
||||
transform: translate3d(100%, 0, 0);
|
||||
}
|
||||
|
||||
@@ -54,9 +54,7 @@
|
||||
},
|
||||
"cover": {
|
||||
"uri": "tos-cn-i-0813/oYVDeaFZyENAAAAKXCYfxD6hI4zADNAURgtySl",
|
||||
"url_list": [
|
||||
"jwWCPZVTIA4IKM-8WipLF.png"
|
||||
],
|
||||
"url_list": ["jwWCPZVTIA4IKM-8WipLF.png"],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
@@ -227,15 +225,11 @@
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/f2196ddaa37f3097932d8a29ff0d0ca5",
|
||||
"url_list": [
|
||||
"AiIEMkIA7Cb3s5c4e7e6g.png"
|
||||
]
|
||||
"url_list": ["AiIEMkIA7Cb3s5c4e7e6g.png"]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"aHzLr77vcdBMUil15rXBa.png"
|
||||
]
|
||||
"url_list": ["aHzLr77vcdBMUil15rXBa.png"]
|
||||
}
|
||||
],
|
||||
"district": "",
|
||||
@@ -258,9 +252,7 @@
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/oge0HBDnlBbbZHjeDc4WtAI7AA0xb88gd9Ipjc",
|
||||
"url_list": [
|
||||
"5jTb5yW0_50o6UaLR5hvo.png"
|
||||
]
|
||||
"url_list": ["5jTb5yW0_50o6UaLR5hvo.png"]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "216a001823018b74cedd",
|
||||
@@ -283,15 +275,11 @@
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/f2196ddaa37f3097932d8a29ff0d0ca5",
|
||||
"url_list": [
|
||||
"N_SVO2HXIpaY04hgsXYDI.png"
|
||||
]
|
||||
"url_list": ["N_SVO2HXIpaY04hgsXYDI.png"]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"Sfz4PgDDqyNYHkFyXub5g.png"
|
||||
]
|
||||
"url_list": ["Sfz4PgDDqyNYHkFyXub5g.png"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -348,9 +336,7 @@
|
||||
},
|
||||
"cover": {
|
||||
"uri": "2071800047c9d7f961529",
|
||||
"url_list": [
|
||||
"_T0vQPZKXrNC6ulECmMes.png"
|
||||
],
|
||||
"url_list": ["_T0vQPZKXrNC6ulECmMes.png"],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
@@ -478,15 +464,11 @@
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/f0e0fa1c47be6c2eedb3bbc077b2e89b",
|
||||
"url_list": [
|
||||
"eTzFhGSTt3FN9Wu_SwYfJ.png"
|
||||
]
|
||||
"url_list": ["eTzFhGSTt3FN9Wu_SwYfJ.png"]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"ycPju2wLo8QdUH3BhOHfP.png"
|
||||
]
|
||||
"url_list": ["ycPju2wLo8QdUH3BhOHfP.png"]
|
||||
}
|
||||
],
|
||||
"district": "",
|
||||
@@ -509,9 +491,7 @@
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/oMYiIAfY7PDPW4RWABzAIB6KeiygIB7AVxhctZ",
|
||||
"url_list": [
|
||||
"yynTGOW4ukH0o6ivqStEd.png"
|
||||
]
|
||||
"url_list": ["yynTGOW4ukH0o6ivqStEd.png"]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "3306001c73315193d5b5",
|
||||
@@ -534,15 +514,11 @@
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/f0e0fa1c47be6c2eedb3bbc077b2e89b",
|
||||
"url_list": [
|
||||
"3Lbs4vjci4a5PWPjuHqGO.png"
|
||||
]
|
||||
"url_list": ["3Lbs4vjci4a5PWPjuHqGO.png"]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"2QCe-HDrBnJc06gcYCeTW.png"
|
||||
]
|
||||
"url_list": ["2QCe-HDrBnJc06gcYCeTW.png"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -602,9 +578,7 @@
|
||||
},
|
||||
"cover": {
|
||||
"uri": "tos-cn-i-0813/oQKse1TDAG7fAI4EGEeLASDnAQEoABSnbJ2BvM",
|
||||
"url_list": [
|
||||
"NYLpBo9emIte6nynBBQNe.png"
|
||||
],
|
||||
"url_list": ["NYLpBo9emIte6nynBBQNe.png"],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
@@ -766,15 +740,11 @@
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/c029dcead6fbf261d15b1ab7de43bf2f",
|
||||
"url_list": [
|
||||
"2eFwyUS9yN8r7wJCXHUvb.png"
|
||||
]
|
||||
"url_list": ["2eFwyUS9yN8r7wJCXHUvb.png"]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"0yrHnPaNjbwpkaPNo7s4x.png"
|
||||
]
|
||||
"url_list": ["0yrHnPaNjbwpkaPNo7s4x.png"]
|
||||
}
|
||||
],
|
||||
"district": "",
|
||||
@@ -797,9 +767,7 @@
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/oceLdA0zALBI8CoyKiCfhU69IBlNq4RsbgzSAu",
|
||||
"url_list": [
|
||||
"qnOWDz5lUek2B1I5MPHa-.png"
|
||||
]
|
||||
"url_list": ["qnOWDz5lUek2B1I5MPHa-.png"]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "216a0023aa35c71d4381",
|
||||
@@ -822,15 +790,11 @@
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/c029dcead6fbf261d15b1ab7de43bf2f",
|
||||
"url_list": [
|
||||
"ejF34o5i413UeROTNoYFI.png"
|
||||
]
|
||||
"url_list": ["ejF34o5i413UeROTNoYFI.png"]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"x9tjnPkC-OscQ480dZZAR.png"
|
||||
]
|
||||
"url_list": ["x9tjnPkC-OscQ480dZZAR.png"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -890,9 +854,7 @@
|
||||
},
|
||||
"cover": {
|
||||
"uri": "tos-cn-i-0813/oAgAlhXilAAJ6u5MAzCgDBGefASENIN9XA3lyP",
|
||||
"url_list": [
|
||||
"dRGIZeauclEl_diysOXxZ.png"
|
||||
],
|
||||
"url_list": ["dRGIZeauclEl_diysOXxZ.png"],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
@@ -1093,15 +1055,11 @@
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/fc185d55c7e3c95a57f88ef99f6c5a63",
|
||||
"url_list": [
|
||||
"GH2GQ_6U9XovU9wyhraHy.png"
|
||||
]
|
||||
"url_list": ["GH2GQ_6U9XovU9wyhraHy.png"]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"Zd0yXNnpYUJtfs1PoJMQ2.png"
|
||||
]
|
||||
"url_list": ["Zd0yXNnpYUJtfs1PoJMQ2.png"]
|
||||
}
|
||||
],
|
||||
"district": null,
|
||||
@@ -1124,9 +1082,7 @@
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/o0lXhVW8g4D9AIzIlnIX23ftAOAzNet3BcBpzK",
|
||||
"url_list": [
|
||||
"ZRRKVy4ShmXRvpIEPMYoa.png"
|
||||
]
|
||||
"url_list": ["ZRRKVy4ShmXRvpIEPMYoa.png"]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "6f940019bd6b1c90b090",
|
||||
@@ -1149,15 +1105,11 @@
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/fc185d55c7e3c95a57f88ef99f6c5a63",
|
||||
"url_list": [
|
||||
"5mEqucAqJ1I440RfZH2t6.png"
|
||||
]
|
||||
"url_list": ["5mEqucAqJ1I440RfZH2t6.png"]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"72skmrYgEr7JkUqAbch-Q.png"
|
||||
]
|
||||
"url_list": ["72skmrYgEr7JkUqAbch-Q.png"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1217,9 +1169,7 @@
|
||||
},
|
||||
"cover": {
|
||||
"uri": "tos-cn-p-0015/e468ce3333034b1db0c987b00f2b5af3",
|
||||
"url_list": [
|
||||
"od74MFuaQhZyh-PZyPN1S.png"
|
||||
],
|
||||
"url_list": ["od74MFuaQhZyh-PZyPN1S.png"],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
@@ -1355,15 +1305,11 @@
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/c029dcead6fbf261d15b1ab7de43bf2f",
|
||||
"url_list": [
|
||||
"2eFwyUS9yN8r7wJCXHUvb.png"
|
||||
]
|
||||
"url_list": ["2eFwyUS9yN8r7wJCXHUvb.png"]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"0yrHnPaNjbwpkaPNo7s4x.png"
|
||||
]
|
||||
"url_list": ["0yrHnPaNjbwpkaPNo7s4x.png"]
|
||||
}
|
||||
],
|
||||
"district": "",
|
||||
@@ -1386,9 +1332,7 @@
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/oceLdA0zALBI8CoyKiCfhU69IBlNq4RsbgzSAu",
|
||||
"url_list": [
|
||||
"qnOWDz5lUek2B1I5MPHa-.png"
|
||||
]
|
||||
"url_list": ["qnOWDz5lUek2B1I5MPHa-.png"]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "216a0023aa35c71d4381",
|
||||
@@ -1411,15 +1355,11 @@
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-image-file/c029dcead6fbf261d15b1ab7de43bf2f",
|
||||
"url_list": [
|
||||
"ejF34o5i413UeROTNoYFI.png"
|
||||
]
|
||||
"url_list": ["ejF34o5i413UeROTNoYFI.png"]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"x9tjnPkC-OscQ480dZZAR.png"
|
||||
]
|
||||
"url_list": ["x9tjnPkC-OscQ480dZZAR.png"]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1479,9 +1419,7 @@
|
||||
},
|
||||
"cover": {
|
||||
"uri": "tos-cn-i-0813/5f0a61be754f42089db66c01854674bd",
|
||||
"url_list": [
|
||||
"Yo64h_V2GqTSG3CSkWOOY.png"
|
||||
],
|
||||
"url_list": ["Yo64h_V2GqTSG3CSkWOOY.png"],
|
||||
"width": 720,
|
||||
"height": 720
|
||||
},
|
||||
@@ -1654,15 +1592,11 @@
|
||||
"cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-file/4eec4c18569133d5990381a62ba49327",
|
||||
"url_list": [
|
||||
"fmO_JqQD-ukKguwbdyoiL.png"
|
||||
]
|
||||
"url_list": ["fmO_JqQD-ukKguwbdyoiL.png"]
|
||||
},
|
||||
{
|
||||
"uri": "c8510002be9a3a61aad2",
|
||||
"url_list": [
|
||||
"n3chqEY3p_JKnn2jSdd2b.png"
|
||||
]
|
||||
"url_list": ["n3chqEY3p_JKnn2jSdd2b.png"]
|
||||
}
|
||||
],
|
||||
"district": null,
|
||||
@@ -1685,9 +1619,7 @@
|
||||
"share_desc": "长按复制此条消息,打开抖音搜索,查看TA的更多作品。",
|
||||
"share_image_url": {
|
||||
"uri": "tos-cn-p-0015/o80AiAzNXCD7yDQlX88bABg7YfimvUQ49SneAq",
|
||||
"url_list": [
|
||||
"vE3YDSQkYb_YZdfgDRZU8.png"
|
||||
]
|
||||
"url_list": ["vE3YDSQkYb_YZdfgDRZU8.png"]
|
||||
},
|
||||
"share_qrcode_url": {
|
||||
"uri": "315100005802d9a7fc08a",
|
||||
@@ -1710,15 +1642,11 @@
|
||||
"white_cover_url": [
|
||||
{
|
||||
"uri": "douyin-user-file/4eec4c18569133d5990381a62ba49327",
|
||||
"url_list": [
|
||||
"OvKvfthk8TXKeVpwEkQNq.png"
|
||||
]
|
||||
"url_list": ["OvKvfthk8TXKeVpwEkQNq.png"]
|
||||
},
|
||||
{
|
||||
"uri": "318f1000413827e122102",
|
||||
"url_list": [
|
||||
"XIX6McGHe3ffHggOT8Rql.png"
|
||||
]
|
||||
"url_list": ["XIX6McGHe3ffHggOT8Rql.png"]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ export default {
|
||||
},
|
||||
radius: {
|
||||
type: String,
|
||||
default: '3'
|
||||
default: '6'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
@@ -159,9 +159,9 @@ export default {
|
||||
}
|
||||
|
||||
&.white {
|
||||
background: white;
|
||||
background: white !important;
|
||||
color: black;
|
||||
border: 1px solid gainsboro;
|
||||
border: 1px solid gainsboro !important;
|
||||
}
|
||||
|
||||
&.info {
|
||||
|
||||
@@ -14,7 +14,7 @@ export default {
|
||||
@import '../assets/less/index';
|
||||
|
||||
.NoMore {
|
||||
font-size: 12rem;
|
||||
font-size: 13rem;
|
||||
height: 60rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
<template>
|
||||
<Scroll :loading="state.loading" :full-loading="!state.list.length" @pulldown="loadData">
|
||||
<Scroll
|
||||
ref="scroll"
|
||||
:loading="state.loading"
|
||||
:full-loading="!state.list.length"
|
||||
@pulldown="loadData"
|
||||
>
|
||||
<slot :list="state.list"></slot>
|
||||
<NoMore v-if="state.total !== 0 && state.total === state.list.length" />
|
||||
</Scroll>
|
||||
@@ -10,6 +15,7 @@ import { onMounted, reactive } from 'vue'
|
||||
import { _notice } from '@/utils'
|
||||
import Scroll from '@/components/Scroll.vue'
|
||||
import NoMore from '@/components/NoMore.vue'
|
||||
import { useScroll } from '@/utils/hooks/useScroll.ts'
|
||||
|
||||
const props = defineProps({
|
||||
api: {
|
||||
@@ -19,6 +25,7 @@ const props = defineProps({
|
||||
}
|
||||
}
|
||||
})
|
||||
const scroll = useScroll()
|
||||
|
||||
const state = reactive({
|
||||
list: [],
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
mainScrollTop: 0
|
||||
}
|
||||
},
|
||||
activated() {
|
||||
if (this.$refs.mainScroll && this.$refs.mainScroll.wrapper) {
|
||||
this.$refs.mainScroll.wrapper.scrollTop = this.mainScrollTop
|
||||
}
|
||||
},
|
||||
deactivated() {
|
||||
if (this.$refs.mainScroll && this.$refs.mainScroll.wrapper) {
|
||||
this.mainScrollTop = this.$refs.mainScroll.wrapper.scrollTop
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,6 +196,18 @@
|
||||
</ConfirmDialog>
|
||||
|
||||
<ShareToFriend v-model="state.shareToFriend" />
|
||||
|
||||
<BaseMask v-if="!isMobile" @click="isMobile = true" />
|
||||
<div v-if="!isMobile" class="guide">
|
||||
<Icon class="danger" icon="mynaui:danger-triangle" />
|
||||
<Icon class="close" icon="simple-line-icons:close" @click="isMobile = true" />
|
||||
<div class="txt">
|
||||
<h2>切换至手机模式获取最佳体验</h2>
|
||||
<h3>1. 按 F12 调出控制台</h3>
|
||||
<h3>2. 按 Ctrl+Shift+M,或点击下面图标</h3>
|
||||
</div>
|
||||
<img src="@/assets/img/guide.png" alt="" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -226,10 +238,12 @@ import { DefaultUser } from '@/utils/const_var'
|
||||
import { _no } from '@/utils'
|
||||
import LongVideo from '@/pages/home/slide/LongVideo.vue'
|
||||
import { useBaseStore } from '@/store/pinia'
|
||||
import BaseMask from '@/components/BaseMask.vue'
|
||||
|
||||
const nav = useNav()
|
||||
const baseStore = useBaseStore()
|
||||
const uploader = ref()
|
||||
const isMobile = ref(/Mobi|Android|iPhone/i.test(navigator.userAgent))
|
||||
|
||||
const state = reactive({
|
||||
active: true,
|
||||
@@ -457,4 +471,42 @@ function dislike() {
|
||||
overflow: hidden;
|
||||
border-radius: 10rem;
|
||||
}
|
||||
|
||||
.guide {
|
||||
color: white;
|
||||
z-index: 999;
|
||||
background: var(--active-main-bg);
|
||||
position: fixed;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
border-radius: 16rem;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
|
||||
.danger {
|
||||
margin-top: 10rem;
|
||||
font-size: 40rem;
|
||||
color: red;
|
||||
}
|
||||
|
||||
.close {
|
||||
cursor: pointer;
|
||||
font-size: 18rem;
|
||||
color: white;
|
||||
position: absolute;
|
||||
right: 15rem;
|
||||
top: 15rem;
|
||||
}
|
||||
|
||||
.txt {
|
||||
text-align: left;
|
||||
padding: 0 24rem;
|
||||
}
|
||||
|
||||
img {
|
||||
display: block;
|
||||
width: 350rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -149,7 +149,7 @@ function showDetail(e, item) {
|
||||
let s = document.querySelector('.shadow')
|
||||
|
||||
_css(s, 'z-index', '1')
|
||||
_css(s, 'transition', '0s')
|
||||
_css(s, 'transition', 'all 0s')
|
||||
_css(s, 'top', domRect.top)
|
||||
_css(s, 'left', domRect.left)
|
||||
_css(s, 'width', domRect.width)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import { reactive, ref, watch } from 'vue'
|
||||
import { _checkImgUrl, _duration, _formatNumber, _stopPropagation } from '@/utils'
|
||||
import { recommendedLongVideo, recommendedVideo } from '@/api/videos'
|
||||
import { recommendedLongVideo } from '@/api/videos'
|
||||
import ScrollList from '@/components/ScrollList.vue'
|
||||
import { useNav } from '@/utils/hooks/useNav'
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="RequestUpdate" id="RequestUpdate">
|
||||
<BaseHeader>
|
||||
<BaseHeader :is-fixed="false">
|
||||
<template v-slot:center>
|
||||
<span class="f16">求更新</span>
|
||||
</template>
|
||||
@@ -112,9 +112,13 @@ function toggleRequestUpdate() {
|
||||
overflow: auto;
|
||||
color: white;
|
||||
font-size: 14rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.content {
|
||||
padding: 60rem 15rem 60rem 15rem;
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
padding: 15rem 15rem 60rem 15rem;
|
||||
|
||||
.none {
|
||||
display: flex;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div id="AllMessage">
|
||||
<BaseHeader>
|
||||
<BaseHeader :is-fixed="false">
|
||||
<template v-slot:center>
|
||||
<div class="center" @click="data.isShowType = !data.isShowType">
|
||||
<span class="f16">{{ showTypeText }}</span>
|
||||
@@ -43,112 +43,42 @@
|
||||
<div class="mask" @click="data.isShowType = false"></div>
|
||||
</div>
|
||||
</transition>
|
||||
<div class="content">
|
||||
<Loading v-if="data.loading" />
|
||||
<Scroll
|
||||
v-else
|
||||
ref="mainScroll"
|
||||
:use-refresh="true"
|
||||
:loading="data.loadingMore"
|
||||
@refresh="refresh"
|
||||
@pulldown="loadData"
|
||||
>
|
||||
<div class="messages">
|
||||
<div class="message" @click="nav('/message/visitors')">
|
||||
<div class="left">
|
||||
<img
|
||||
v-lazy="_checkImgUrl(store.userinfo.cover_url[0].url_list[0])"
|
||||
alt=""
|
||||
class="avatar"
|
||||
/>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="desc">
|
||||
<div class="top">
|
||||
<div class="name">主页访客</div>
|
||||
</div>
|
||||
<div class="desc-content">4人最近访问了你的主页,看看他们是谁</div>
|
||||
<div class="bottom">
|
||||
<div class="time">01-11</div>
|
||||
</div>
|
||||
</div>
|
||||
<img
|
||||
v-lazy="_checkImgUrl(store.userinfo.cover_url[0].url_list[0])"
|
||||
alt=""
|
||||
class="poster"
|
||||
/>
|
||||
</div>
|
||||
<Scroll ref="mainScroll">
|
||||
<div class="messages">
|
||||
<div
|
||||
class="message"
|
||||
v-for="(item, i) in store.friends.all"
|
||||
:key="i"
|
||||
@click="nav('/message/visitors')"
|
||||
>
|
||||
<div class="left">
|
||||
<img v-lazy="_checkImgUrl(item.avatar)" alt="" class="avatar" />
|
||||
</div>
|
||||
<div class="message" :key="i" v-for="(item, i) in showMessageList" @click="_no">
|
||||
<div class="left">
|
||||
<img v-lazy="_checkImgUrl(item.author.avatar)" alt="" class="avatar" />
|
||||
<img
|
||||
v-if="data.selectShowType === 2"
|
||||
src="@/assets/img/icon/message/love-message.webp"
|
||||
alt=""
|
||||
class="type"
|
||||
/>
|
||||
<img
|
||||
v-if="data.selectShowType === 3"
|
||||
src="@/assets/img/icon/message/call-message.webp"
|
||||
alt=""
|
||||
class="type"
|
||||
/>
|
||||
<img
|
||||
v-if="data.selectShowType === 4"
|
||||
src="@/assets/img/icon/message/comment-message.webp"
|
||||
alt=""
|
||||
class="type"
|
||||
/>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="desc">
|
||||
<div class="top">
|
||||
<div class="name">{{ item.author.nickname }}</div>
|
||||
<div class="tag">朋友</div>
|
||||
</div>
|
||||
<div class="desc-content">
|
||||
<span v-if="data.selectShowType === 1">好好看啊</span>
|
||||
<span v-if="data.selectShowType === 2">赞了你的作品</span>
|
||||
<span v-if="data.selectShowType === 3">@{{ store.userinfo.nickname }}</span>
|
||||
<span v-if="data.selectShowType === 4">好好看啊</span>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<div class="type" v-if="data.selectShowType === 3">在评论中提到了你</div>
|
||||
<div class="type" v-if="data.selectShowType === 4">回复了你的评论</div>
|
||||
<div class="time">01-11</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="desc">
|
||||
<div class="name">{{ item.name }}</div>
|
||||
<div class="bottom">
|
||||
<div class="desc-content">近期访问过你的主页</div>
|
||||
<div class="time">01-11</div>
|
||||
</div>
|
||||
<img
|
||||
v-lazy="_checkImgUrl(item.video + '?vframe/jpg/offset/0/w/300')"
|
||||
alt=""
|
||||
class="poster"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="look-all" v-if="!data.showAll" @click="data.showAll = true">
|
||||
<span>查看全部</span>
|
||||
<dy-back />
|
||||
<img
|
||||
v-lazy="_checkImgUrl(store.userinfo.cover_url[0].url_list[0])"
|
||||
alt=""
|
||||
class="poster"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="title">
|
||||
<span>朋友推荐</span>
|
||||
<img src="@/assets/img/icon/about-gray.png" alt="" />
|
||||
</div>
|
||||
<Peoples v-model:list="data.recommend" :loading="data.loadingMore" mode="recommend" />
|
||||
</Scroll>
|
||||
</div>
|
||||
</div>
|
||||
</Scroll>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import Scroll from '@/components/Scroll.vue'
|
||||
import Loading from '@/components/Loading.vue'
|
||||
import Peoples from '../people/components/Peoples.vue'
|
||||
import resource from '@/assets/data/resource.js'
|
||||
import { useBaseStore } from '@/store/pinia'
|
||||
import { _checkImgUrl, _no, _sleep, cloneDeep } from '@/utils'
|
||||
import { _checkImgUrl } from '@/utils'
|
||||
|
||||
import { computed, onMounted, reactive } from 'vue'
|
||||
import { computed, reactive } from 'vue'
|
||||
import { useNav } from '@/utils/hooks/useNav.js'
|
||||
|
||||
defineOptions({
|
||||
@@ -158,20 +88,10 @@ defineOptions({
|
||||
const store = useBaseStore()
|
||||
const nav = useNav()
|
||||
const data = reactive({
|
||||
loading: false,
|
||||
loadingMore: false,
|
||||
isShowType: false,
|
||||
showAll: false,
|
||||
recommend: [],
|
||||
fans: [],
|
||||
messages: [],
|
||||
selectShowType: 1
|
||||
})
|
||||
|
||||
onMounted(() => {
|
||||
getData()
|
||||
})
|
||||
|
||||
const showTypeText = computed(() => {
|
||||
switch (data.selectShowType) {
|
||||
case 1:
|
||||
@@ -187,52 +107,10 @@ const showTypeText = computed(() => {
|
||||
}
|
||||
})
|
||||
|
||||
const showMessageList = computed(() => {
|
||||
if (data.showAll) {
|
||||
return data.messages
|
||||
}
|
||||
return data.messages.slice(0, 2)
|
||||
})
|
||||
|
||||
async function getData() {
|
||||
data.loading = true
|
||||
await _sleep(800)
|
||||
data.loading = false
|
||||
data.recommend = cloneDeep(store.friends.all)
|
||||
data.fans = cloneDeep(store.friends.all)
|
||||
data.recommend.map((v) => {
|
||||
v.type = -1
|
||||
})
|
||||
data.messages = cloneDeep(resource.videos)
|
||||
}
|
||||
|
||||
function toggleShowType(index) {
|
||||
data.selectShowType = index
|
||||
data.isShowType = false
|
||||
}
|
||||
|
||||
// function remove(index) {
|
||||
// _notice('将不会再为你推荐该用户')
|
||||
// data.recommend.splice(index, 1)
|
||||
// }
|
||||
|
||||
async function refresh() {
|
||||
await _sleep(1000)
|
||||
//TODO
|
||||
// data.$refs.mainScroll.refreshEnd()
|
||||
}
|
||||
|
||||
async function loadData() {
|
||||
if (data.loadingMore) return
|
||||
data.loadingMore = true
|
||||
await _sleep(500)
|
||||
data.loadingMore = false
|
||||
let temp = cloneDeep(store.friends.all)
|
||||
temp.map((v) => {
|
||||
v.type = -1
|
||||
})
|
||||
data.recommend = data.recommend.concat(temp)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped lang="less">
|
||||
@@ -242,9 +120,12 @@ async function loadData() {
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
background: var(--color-message);
|
||||
overflow: auto;
|
||||
color: white;
|
||||
font-size: 14rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.center {
|
||||
display: flex;
|
||||
@@ -254,6 +135,7 @@ async function loadData() {
|
||||
width: 15rem;
|
||||
transform: rotate(180deg);
|
||||
transition: all 0.3s;
|
||||
margin-left: 3rem;
|
||||
}
|
||||
|
||||
.show {
|
||||
@@ -269,10 +151,12 @@ async function loadData() {
|
||||
margin-top: var(--common-header-height);
|
||||
|
||||
.dialog-content {
|
||||
background: var(--main-bg);
|
||||
border-radius: 0 0 4rem 4rem;
|
||||
background: var(--color-message);
|
||||
overflow: hidden;
|
||||
|
||||
img {
|
||||
width: 16rem;
|
||||
width: 18rem;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -285,121 +169,82 @@ async function loadData() {
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
padding: 0 var(--page-padding);
|
||||
padding-top: var(--common-header-height);
|
||||
.scroll {
|
||||
flex: 1;
|
||||
padding: 0 10rem;
|
||||
}
|
||||
|
||||
.scroll {
|
||||
height: calc(var(--vh, 1vh) * 100 - var(--common-header-height));
|
||||
}
|
||||
|
||||
.messages {
|
||||
.message {
|
||||
margin-bottom: 20rem;
|
||||
display: flex;
|
||||
|
||||
&:first-child {
|
||||
margin-top: 20rem;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
.avatar {
|
||||
width: 48rem;
|
||||
height: 48rem;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.type {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
bottom: 10rem;
|
||||
width: 17rem;
|
||||
padding: 2.5rem;
|
||||
border-radius: 50%;
|
||||
background: black;
|
||||
}
|
||||
|
||||
margin-right: 10rem;
|
||||
}
|
||||
|
||||
.right {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.desc {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
|
||||
.top {
|
||||
//margin-bottom: 10rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.tag {
|
||||
color: var(--second-text-color);
|
||||
padding: 1rem 4rem;
|
||||
margin-left: 10rem;
|
||||
border-radius: 2rem;
|
||||
background: var(--second-btn-color-tran);
|
||||
font-size: 10rem;
|
||||
}
|
||||
}
|
||||
|
||||
.bottom {
|
||||
//margin-top: 10rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 12rem;
|
||||
color: var(--second-text-color);
|
||||
|
||||
.type {
|
||||
margin-right: 10rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.poster {
|
||||
margin-left: 10rem;
|
||||
width: 64rem;
|
||||
height: 64rem;
|
||||
object-fit: cover;
|
||||
border-radius: 3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.look-all {
|
||||
font-size: 12rem;
|
||||
color: var(--second-text-color);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.close {
|
||||
margin-left: 10rem;
|
||||
transform: rotate(270deg) !important;
|
||||
width: 12rem;
|
||||
height: 12rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
margin-top: 15rem;
|
||||
margin-bottom: 10rem;
|
||||
font-size: 12rem;
|
||||
.messages {
|
||||
.message {
|
||||
margin-bottom: 20rem;
|
||||
display: flex;
|
||||
gap: 10rem;
|
||||
|
||||
&:first-child {
|
||||
margin-top: 20rem;
|
||||
}
|
||||
|
||||
.left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
|
||||
.avatar {
|
||||
width: 58rem;
|
||||
height: 58rem;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.right {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.desc {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
gap: 5rem;
|
||||
color: white;
|
||||
font-size: 16rem;
|
||||
|
||||
.bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 13rem;
|
||||
color: lightgrey;
|
||||
|
||||
.time {
|
||||
font-size: 12rem;
|
||||
margin-left: 10rem;
|
||||
color: var(--second-text-color);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.poster {
|
||||
margin-left: 10rem;
|
||||
width: 58rem;
|
||||
height: 70rem;
|
||||
object-fit: cover;
|
||||
border-radius: 3rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.look-all {
|
||||
font-size: 12rem;
|
||||
color: var(--second-text-color);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
img {
|
||||
margin-left: 5rem;
|
||||
width: 13rem;
|
||||
.close {
|
||||
margin-left: 10rem;
|
||||
transform: rotate(270deg) !important;
|
||||
width: 12rem;
|
||||
height: 12rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,6 +81,7 @@ onMounted(getData)
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
overflow: auto;
|
||||
background: var(--color-message);
|
||||
color: white;
|
||||
font-size: 14rem;
|
||||
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
</header>
|
||||
|
||||
<Scroll ref="mainScroll">
|
||||
<div class="friends pl1r">
|
||||
<div class="friends">
|
||||
<div
|
||||
class="friend pr1r pl1r"
|
||||
class="friend"
|
||||
@click="nav('/message/chat')"
|
||||
:key="index"
|
||||
v-for="(item, index) in store.friends.all"
|
||||
@@ -20,12 +20,13 @@
|
||||
</div>
|
||||
<span>{{ item.name }}</span>
|
||||
</div>
|
||||
<div class="friend pr10p">
|
||||
<img src="../../assets/img/icon/message/setting.png" alt="" />
|
||||
<span class="ml1r">状态设置</span>
|
||||
<div class="friend">
|
||||
<div class="avatar">
|
||||
<img src="../../assets/img/icon/message/setting.png" alt="" />
|
||||
</div>
|
||||
<span>状态设置</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="line mt2r"></div>
|
||||
<div class="messages">
|
||||
<!-- 粉丝-->
|
||||
<div class="message" @click="nav('/message/fans')">
|
||||
@@ -54,7 +55,7 @@
|
||||
<div class="name">
|
||||
<span>互动消息</span>
|
||||
</div>
|
||||
<div class="detail">xxx 赞了你的评论</div>
|
||||
<div class="detail">xxx 近期访问过你的主页</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<dy-back class="arrow" mode="gray" img="back" direction="right" />
|
||||
@@ -433,11 +434,13 @@ import { useBaseStore } from '@/store/pinia'
|
||||
import { computed, onMounted, reactive, watch } from 'vue'
|
||||
import { useNav } from '@/utils/hooks/useNav.js'
|
||||
import { _checkImgUrl, _sleep, cloneDeep } from '@/utils'
|
||||
import { useScroll } from '@/utils/hooks/useScroll'
|
||||
|
||||
defineOptions({
|
||||
name: 'Message'
|
||||
})
|
||||
|
||||
const mainScroll = useScroll()
|
||||
const store = useBaseStore()
|
||||
const nav = useNav()
|
||||
const data = reactive({
|
||||
@@ -521,6 +524,8 @@ async function loadRecommendData() {
|
||||
|
||||
.no-search {
|
||||
height: calc(var(--vh, 1vh) * 100);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
> header {
|
||||
padding: 0 20rem;
|
||||
@@ -772,36 +777,48 @@ async function loadRecommendData() {
|
||||
}
|
||||
|
||||
.scroll {
|
||||
height: calc(100% - var(--common-header-height) - var(--footer-height));
|
||||
flex: 1;
|
||||
padding-top: 10rem;
|
||||
padding-bottom: var(--footer-height);
|
||||
}
|
||||
|
||||
.friends {
|
||||
overflow-x: scroll;
|
||||
display: flex;
|
||||
font-size: 14rem;
|
||||
padding: 0 10rem;
|
||||
gap: 20rem;
|
||||
|
||||
.friend {
|
||||
@width: 70rem;
|
||||
width: @width;
|
||||
min-width: @width;
|
||||
|
||||
&:nth-last-child(1) {
|
||||
img {
|
||||
margin: 0 10rem;
|
||||
padding: 17rem;
|
||||
background: var(--second-btn-color-tran);
|
||||
width: 30rem;
|
||||
height: 30rem;
|
||||
.avatar {
|
||||
height: @width;
|
||||
border-radius: 50%;
|
||||
margin-bottom: 6rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: var(--second-btn-color-tran);
|
||||
margin-bottom: 10rem;
|
||||
|
||||
img {
|
||||
width: 35rem;
|
||||
height: 35rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.avatar {
|
||||
position: relative;
|
||||
margin-bottom: 6rem;
|
||||
width: 100%;
|
||||
|
||||
img {
|
||||
@width: 64rem;
|
||||
width: @width;
|
||||
height: @width;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
@@ -821,7 +838,7 @@ async function loadRecommendData() {
|
||||
span {
|
||||
width: 64rem;
|
||||
font-size: 12rem;
|
||||
color: lightgray;
|
||||
color: white;
|
||||
display: block;
|
||||
text-align: center;
|
||||
word-break: break-all;
|
||||
@@ -833,6 +850,8 @@ async function loadRecommendData() {
|
||||
}
|
||||
|
||||
.messages {
|
||||
margin-top: 20rem;
|
||||
|
||||
.message {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -874,12 +893,12 @@ async function loadRecommendData() {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
@padding: 14rem;
|
||||
@padding: 16rem;
|
||||
padding: @padding 0 @padding 0;
|
||||
|
||||
.left {
|
||||
.name {
|
||||
font-size: 14rem;
|
||||
font-size: 16rem;
|
||||
color: white;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
@@ -896,7 +915,7 @@ async function loadRecommendData() {
|
||||
|
||||
.detail {
|
||||
color: var(--second-text-color);
|
||||
font-size: 12rem;
|
||||
font-size: 14rem;
|
||||
margin-top: 4rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -68,11 +68,13 @@ import { nextTick, onMounted, reactive, watch } from 'vue'
|
||||
import Scroll from '@/components/Scroll.vue'
|
||||
import { useNav } from '@/utils/hooks/useNav.js'
|
||||
import { _no, _sleep } from '@/utils'
|
||||
import { useScroll } from '@/utils/hooks/useScroll'
|
||||
|
||||
defineOptions({
|
||||
name: 'SystemNotice'
|
||||
})
|
||||
|
||||
const mainScroll = useScroll()
|
||||
const nav = useNav()
|
||||
const data = reactive({
|
||||
loading: false,
|
||||
|
||||
@@ -30,24 +30,19 @@ router.beforeEach((to, from) => {
|
||||
if (toDepth > fromDepth) {
|
||||
if (to.matched && to.matched.length) {
|
||||
const toComponentName = to.matched[0].components?.default.name
|
||||
// store.commit('updateExcludeRoutes', {type: 'remove', value: toComponentName})
|
||||
baseStore.updateExcludeRoutes({ type: 'remove', value: toComponentName })
|
||||
// console.log('to', toComponentName)
|
||||
baseStore.updateExcludeNames({ type: 'remove', value: toComponentName })
|
||||
// console.log('前进')
|
||||
// console.log('删除', toComponentName)
|
||||
}
|
||||
} else {
|
||||
if (from.matched && from.matched.length) {
|
||||
const fromComponentName = from.matched[0].components?.default.name
|
||||
// store.commit('updateExcludeRoutes', {type: 'add', value: fromComponentName})
|
||||
baseStore.updateExcludeRoutes({ type: 'add', value: fromComponentName })
|
||||
baseStore.updateExcludeNames({ type: 'add', value: fromComponentName })
|
||||
|
||||
// console.log('后退')
|
||||
// console.log('添加', fromComponentName)
|
||||
}
|
||||
}
|
||||
// ...
|
||||
// 返回 false 以取消导航
|
||||
return true
|
||||
})
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ export const useBaseStore = defineStore('base', {
|
||||
maskDialog: false,
|
||||
maskDialogMode: 'dark',
|
||||
version: '17.1.0',
|
||||
excludeRoutes: [],
|
||||
excludeNames: [],
|
||||
judgeValue: 20,
|
||||
homeRefresh: 60,
|
||||
loading: false,
|
||||
@@ -78,18 +78,18 @@ export const useBaseStore = defineStore('base', {
|
||||
this.maskDialogMode = val.mode
|
||||
}
|
||||
},
|
||||
updateExcludeRoutes(val) {
|
||||
updateExcludeNames(val) {
|
||||
if (val.type === 'add') {
|
||||
if (!this.excludeRoutes.find((v) => v === val.value)) {
|
||||
this.excludeRoutes.push(val.value)
|
||||
if (!this.excludeNames.find((v) => v === val.value)) {
|
||||
this.excludeNames.push(val.value)
|
||||
}
|
||||
} else {
|
||||
const resIndex = this.excludeRoutes.findIndex((v) => v === val.value)
|
||||
const resIndex = this.excludeNames.findIndex((v) => v === val.value)
|
||||
if (resIndex !== -1) {
|
||||
this.excludeRoutes.splice(resIndex, 1)
|
||||
this.excludeNames.splice(resIndex, 1)
|
||||
}
|
||||
}
|
||||
// console.log('store.excludeRoutes', store.excludeRoutes,val)
|
||||
// console.log('store.excludeNames', store.excludeNames,val)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -142,7 +142,7 @@ export default class Dom {
|
||||
}
|
||||
|
||||
export function _css(el, key, value?) {
|
||||
const reg = /^\d+.?\d*(px|pt|em|rem|vw|vh|%|rpx|ms)$/i
|
||||
const reg = /^-?\d+.?\d*(px|pt|em|rem|vw|vh|%|rpx|ms)$/i
|
||||
if (value === undefined) {
|
||||
let val = null
|
||||
if ('getComputedStyle' in window) {
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
import { onActivated, onDeactivated } from 'vue'
|
||||
|
||||
export function useBase() {
|
||||
const mainScroll = $ref()
|
||||
const mainScrollTop = $ref(0)
|
||||
onActivated(() => {
|
||||
console.log('onActivated')
|
||||
})
|
||||
|
||||
onDeactivated(() => {
|
||||
console.log('onDeactivated')
|
||||
})
|
||||
}
|
||||
17
src/utils/hooks/useScroll.ts
Normal file
17
src/utils/hooks/useScroll.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { onActivated, onDeactivated, ref } from 'vue'
|
||||
|
||||
export function useScroll() {
|
||||
const mainScroll = ref()
|
||||
let mainScrollTop = $ref(0)
|
||||
onActivated(() => {
|
||||
if (mainScroll.value && mainScroll.value.wrapper) {
|
||||
mainScroll.value.wrapper.scrollTop = mainScrollTop
|
||||
}
|
||||
})
|
||||
onDeactivated(() => {
|
||||
if (mainScroll.value && mainScroll.value.wrapper) {
|
||||
mainScrollTop = mainScroll.value.wrapper.scrollTop
|
||||
}
|
||||
})
|
||||
return mainScroll
|
||||
}
|
||||
338
vite.config.ts
338
vite.config.ts
@@ -1,4 +1,4 @@
|
||||
import { defineConfig, PluginOption } from 'vite'
|
||||
import { defineConfig, PluginOption, UserConfig } from 'vite'
|
||||
import Vue from '@vitejs/plugin-vue'
|
||||
import VueJsx from '@vitejs/plugin-vue-jsx'
|
||||
import { visualizer } from 'rollup-plugin-visualizer'
|
||||
@@ -7,176 +7,176 @@ import { fileURLToPath, URL } from 'node:url'
|
||||
import { getLastCommit } from 'git-last-commit'
|
||||
import VueMacros from 'unplugin-vue-macros/vite'
|
||||
|
||||
// import viteImagemin from 'vite-plugin-imagemin'
|
||||
// import viteCompression from 'vite-plugin-compression'
|
||||
|
||||
const lifecycle = process.env.npm_lifecycle_event
|
||||
|
||||
// {
|
||||
// name: 'axios',
|
||||
// var: 'axios',
|
||||
// path: 'https://lib.baomitu.com/axios/1.6.8/axios.min.js'
|
||||
// },
|
||||
export default defineConfig((): Promise<UserConfig> => {
|
||||
let latestCommitHash = ''
|
||||
|
||||
export default defineConfig(async () => {
|
||||
const latestCommitHash = await new Promise<string>((resolve) => {
|
||||
return getLastCommit((err, commit) => (err ? 'unknown' : resolve(commit.shortHash)))
|
||||
})
|
||||
return {
|
||||
base: './',
|
||||
envDir: 'env',
|
||||
plugins: [
|
||||
VueMacros({
|
||||
plugins: {
|
||||
vue: Vue(),
|
||||
vueJsx: VueJsx() // if needed
|
||||
}
|
||||
// betterDefine: true,
|
||||
// reactivityTransform: {
|
||||
// exclude: [/node_modules/, /jQuery\.js/]
|
||||
// }
|
||||
}),
|
||||
// Vue(),
|
||||
// VueJsx(),
|
||||
lifecycle === 'report' ? (visualizer({ open: false }) as any as PluginOption) : null,
|
||||
importToCDN({
|
||||
modules: [
|
||||
{
|
||||
name: 'vue',
|
||||
var: 'Vue',
|
||||
path: `https://lib.baomitu.com/vue/3.4.21/vue.runtime.global.prod.min.js`
|
||||
},
|
||||
{
|
||||
name: 'vue-router',
|
||||
var: 'VueRouter',
|
||||
path: 'https://lib.baomitu.com/vue-router/4.3.0/vue-router.global.prod.min.js'
|
||||
},
|
||||
{
|
||||
name: 'vue-demi',
|
||||
var: 'VueDemi',
|
||||
path: 'https://lib.baomitu.com/vue-demi/0.14.7/index.iife.min.js'
|
||||
},
|
||||
{
|
||||
name: 'mockjs',
|
||||
var: 'Mock',
|
||||
path: 'https://lib.baomitu.com/Mock.js/1.0.1-beta3/mock-min.js'
|
||||
}
|
||||
]
|
||||
})
|
||||
// viteCompression({
|
||||
// verbose: false,
|
||||
// disable: false,
|
||||
// threshold: 10240,
|
||||
// algorithm: 'brotliCompress',
|
||||
// }),
|
||||
// viteCompression({
|
||||
// verbose: false,
|
||||
// disable: false,
|
||||
// algorithm: 'gzip',
|
||||
// threshold: 10240,
|
||||
// }),
|
||||
// viteImagemin({
|
||||
// gifsicle: {
|
||||
// optimizationLevel: 7,
|
||||
// interlaced: false,
|
||||
// },
|
||||
// optipng: {
|
||||
// optimizationLevel: 7,
|
||||
// },
|
||||
// mozjpeg: {
|
||||
// quality: 20,
|
||||
// },
|
||||
// pngquant: {
|
||||
// quality: [0.8, 0.9],
|
||||
// speed: 4,
|
||||
// },
|
||||
// svgo: {
|
||||
// plugins: [
|
||||
// {
|
||||
// name: 'removeViewBox',
|
||||
// },
|
||||
// {
|
||||
// name: 'removeEmptyAttrs',
|
||||
// active: false,
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// }),
|
||||
],
|
||||
define: {
|
||||
LATEST_COMMIT_HASH: JSON.stringify(
|
||||
latestCommitHash + (process.env.NODE_ENV === 'production' ? '' : ' (dev)')
|
||||
)
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||
},
|
||||
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
|
||||
},
|
||||
build: {
|
||||
sourcemap: false,
|
||||
rollupOptions: {
|
||||
// https://rollupjs.org/guide/en/#outputmanualchunks
|
||||
output: {
|
||||
manualChunks(id, { getModuleInfo }) {
|
||||
const reg = /(.*)\/src\/components\/(.*)/
|
||||
if (reg.test(id)) {
|
||||
const importersLen = getModuleInfo(id)?.importers.length ?? 0
|
||||
// 被多处引用
|
||||
if (importersLen > 1) return 'common'
|
||||
}
|
||||
if (id.includes('node_modules')) return 'vendor'
|
||||
|
||||
if (id.includes('/src/pages/home/Publish.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/home/Music.vue')) return 'other'
|
||||
if (id.includes('/src/pages/home/MusicRankList.vue')) return 'other'
|
||||
if (id.includes('/src/pages/home/LivePage.vue')) return 'other'
|
||||
if (id.includes('/src/pages/home/SearchPage.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/shop/Shop.vue')) return 'other'
|
||||
if (id.includes('/src/pages/shop/GoodsDetail.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/message/Message.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/Fans.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/AllMessage.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/DouyinHelper.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/SystemNotice.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/TaskNotice.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/LiveNotice.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/MoneyNotice.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/me/Me.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/Visitors.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/RequestUpdate.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/userinfo/EditUserInfo.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/userinfo/EditUserInfoItem.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/MyMusic.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/other/VideoDetail.vue')) return 'other'
|
||||
if (id.includes('/src/pages/other/AlbumDetail.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/people/FindAcquaintance.vue')) return 'other'
|
||||
if (id.includes('/src/pages/people/FollowAndFans.vue')) return 'other'
|
||||
},
|
||||
chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称
|
||||
entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
|
||||
assetFileNames: 'assets/[name]-[hash].[ext]' // 资源文件像 字体,图片等
|
||||
}
|
||||
},
|
||||
assetsInlineLimit: 2048
|
||||
},
|
||||
esbuild: {
|
||||
// drop: ['console', 'debugger']
|
||||
},
|
||||
server: {
|
||||
port: 3000,
|
||||
open: true,
|
||||
host: '0.0.0.0',
|
||||
fs: {
|
||||
strict: false
|
||||
return new Promise((resolve) => {
|
||||
getLastCommit((err, commit) => {
|
||||
if (!err) {
|
||||
latestCommitHash = commit.shortHash
|
||||
}
|
||||
}
|
||||
}
|
||||
resolve({
|
||||
base: './',
|
||||
envDir: 'env',
|
||||
plugins: [
|
||||
VueMacros({
|
||||
plugins: {
|
||||
vue: Vue(),
|
||||
vueJsx: VueJsx() // if needed
|
||||
}
|
||||
// betterDefine: true,
|
||||
// reactivityTransform: {
|
||||
// exclude: [/node_modules/, /jQuery\.js/]
|
||||
// }
|
||||
}),
|
||||
// Vue(),
|
||||
// VueJsx(),
|
||||
lifecycle === 'report' ? (visualizer({ open: false }) as any as PluginOption) : null,
|
||||
importToCDN({
|
||||
modules: [
|
||||
{
|
||||
name: 'vue',
|
||||
var: 'Vue',
|
||||
path: `https://lib.baomitu.com/vue/3.4.21/vue.runtime.global.prod.min.js`
|
||||
},
|
||||
{
|
||||
name: 'vue-router',
|
||||
var: 'VueRouter',
|
||||
path: 'https://lib.baomitu.com/vue-router/4.3.0/vue-router.global.prod.min.js'
|
||||
},
|
||||
{
|
||||
name: 'vue-demi',
|
||||
var: 'VueDemi',
|
||||
path: 'https://lib.baomitu.com/vue-demi/0.14.7/index.iife.min.js'
|
||||
},
|
||||
{
|
||||
name: 'mockjs',
|
||||
var: 'Mock',
|
||||
path: 'https://lib.baomitu.com/Mock.js/1.0.1-beta3/mock-min.js'
|
||||
}
|
||||
]
|
||||
})
|
||||
// viteCompression({
|
||||
// verbose: false,
|
||||
// disable: false,
|
||||
// threshold: 10240,
|
||||
// algorithm: 'brotliCompress',
|
||||
// }),
|
||||
// viteCompression({
|
||||
// verbose: false,
|
||||
// disable: false,
|
||||
// algorithm: 'gzip',
|
||||
// threshold: 10240,
|
||||
// }),
|
||||
// viteImagemin({
|
||||
// gifsicle: {
|
||||
// optimizationLevel: 7,
|
||||
// interlaced: false,
|
||||
// },
|
||||
// optipng: {
|
||||
// optimizationLevel: 7,
|
||||
// },
|
||||
// mozjpeg: {
|
||||
// quality: 20,
|
||||
// },
|
||||
// pngquant: {
|
||||
// quality: [0.8, 0.9],
|
||||
// speed: 4,
|
||||
// },
|
||||
// svgo: {
|
||||
// plugins: [
|
||||
// {
|
||||
// name: 'removeViewBox',
|
||||
// },
|
||||
// {
|
||||
// name: 'removeEmptyAttrs',
|
||||
// active: false,
|
||||
// },
|
||||
// ],
|
||||
// },
|
||||
// }),
|
||||
],
|
||||
resolve: {
|
||||
alias: {
|
||||
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||
},
|
||||
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']
|
||||
},
|
||||
build: {
|
||||
sourcemap: false,
|
||||
rollupOptions: {
|
||||
// https://rollupjs.org/guide/en/#outputmanualchunks
|
||||
output: {
|
||||
manualChunks(id: string, { getModuleInfo }: any) {
|
||||
const reg = /(.*)\/src\/components\/(.*)/
|
||||
if (reg.test(id)) {
|
||||
const importersLen = getModuleInfo(id)?.importers.length ?? 0
|
||||
// 被多处引用
|
||||
if (importersLen > 1) return 'common'
|
||||
}
|
||||
if (id.includes('node_modules')) return 'vendor'
|
||||
|
||||
if (id.includes('/src/pages/home/Publish.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/home/Music.vue')) return 'other'
|
||||
if (id.includes('/src/pages/home/MusicRankList.vue')) return 'other'
|
||||
if (id.includes('/src/pages/home/LivePage.vue')) return 'other'
|
||||
if (id.includes('/src/pages/home/SearchPage.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/shop/Shop.vue')) return 'other'
|
||||
if (id.includes('/src/pages/shop/GoodsDetail.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/message/Message.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/Fans.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/AllMessage.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/DouyinHelper.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/SystemNotice.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/TaskNotice.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/LiveNotice.vue')) return 'other'
|
||||
if (id.includes('/src/pages/message/notice/MoneyNotice.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/me/Me.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/Visitors.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/RequestUpdate.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/userinfo/EditUserInfo.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/userinfo/EditUserInfoItem.vue')) return 'other'
|
||||
if (id.includes('/src/pages/me/MyMusic.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/other/VideoDetail.vue')) return 'other'
|
||||
if (id.includes('/src/pages/other/AlbumDetail.vue')) return 'other'
|
||||
|
||||
if (id.includes('/src/pages/people/FindAcquaintance.vue')) return 'other'
|
||||
if (id.includes('/src/pages/people/FollowAndFans.vue')) return 'other'
|
||||
},
|
||||
chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称
|
||||
entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
|
||||
assetFileNames: 'assets/[name]-[hash].[ext]' // 资源文件像 字体,图片等
|
||||
}
|
||||
},
|
||||
assetsInlineLimit: 2048
|
||||
},
|
||||
define: {
|
||||
LATEST_COMMIT_HASH: JSON.stringify(
|
||||
latestCommitHash + (process.env.NODE_ENV === 'production' ? '' : ' (dev)')
|
||||
)
|
||||
},
|
||||
esbuild: {
|
||||
// drop: ['console', 'debugger']
|
||||
},
|
||||
server: {
|
||||
port: 3000,
|
||||
open: true,
|
||||
host: '0.0.0.0',
|
||||
fs: {
|
||||
strict: false
|
||||
}
|
||||
},
|
||||
preview: {
|
||||
port: 5555
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user