前端优化

arm-ffmpeg DockerFile
This commit is contained in:
jianzhichu
2025-11-26 01:18:14 +08:00
parent 5b41e5eaeb
commit 6bde9b75ff
6 changed files with 86 additions and 59 deletions
+4 -10
View File
@@ -1,24 +1,18 @@
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. # 使用 Ubuntu 20.04 的 .NET 6 运行时镜像
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal AS base
FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal-arm64v8 AS base
WORKDIR /app WORKDIR /app
EXPOSE 10101 EXPOSE 10101
RUN echo "deb http://mirrors.aliyun.com/debian/ bookworm main non-free contrib" > /etc/apt/sources.list && \ # 安装 ffmpeg (Ubuntu 的 universe 仓库包含 ffmpeg)
echo "deb http://mirrors.aliyun.com/debian-security/ bookworm-security main" >> /etc/apt/sources.list && \ RUN apt-get update && \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-updates main non-free contrib" >> /etc/apt/sources.list && \
echo "deb http://mirrors.aliyun.com/debian/ bookworm-backports main non-free contrib" >> /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends ffmpeg && \ apt-get install -y --no-install-recommends ffmpeg && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
RUN ffmpeg -version RUN ffmpeg -version
COPY . . COPY . .
ENV ASPNETCORE_URLS=http://*:10101 ENV ASPNETCORE_URLS=http://*:10101
ENV TZ=Asia/Shanghai ENV TZ=Asia/Shanghai
ENV DOWN_IMGVIDEO=1 ENV DOWN_IMGVIDEO=1
ENTRYPOINT ["dotnet", "dy.net.dll"] ENTRYPOINT ["dotnet", "dy.net.dll"]
@@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
<Project> <Project>
<PropertyGroup> <PropertyGroup>
<_PublishTargetUrl>E:\code\dysync\bin\Release\net6.0\publish\</_PublishTargetUrl> <_PublishTargetUrl>E:\code\dysync\bin\Release\net6.0\publish\</_PublishTargetUrl>
<History>True|2025-11-25T06:08:53.3850967Z||;True|2025-11-24T23:53:54.4283003+08:00||;True|2025-11-24T23:41:15.8248332+08:00||;True|2025-11-24T23:33:57.1844427+08:00||;True|2025-11-24T23:31:54.9228836+08:00||;True|2025-11-24T23:24:15.8681502+08:00||;True|2025-11-24T23:22:57.9046229+08:00||;True|2025-11-24T23:18:04.1131647+08:00||;True|2025-11-24T22:47:54.1336448+08:00||;True|2025-11-24T22:47:18.3613833+08:00||;True|2025-11-24T08:17:50.3994607+08:00||;True|2025-11-24T08:07:00.9951205+08:00||;True|2025-11-23T23:34:50.0030826+08:00||;True|2025-11-23T23:32:36.7452616+08:00||;True|2025-11-22T23:18:56.3202345+08:00||;True|2025-11-22T22:52:51.7203302+08:00||;True|2025-11-22T22:52:42.9620946+08:00||;True|2025-11-22T22:52:09.8257640+08:00||;True|2025-11-22T22:39:31.5894141+08:00||;True|2025-11-22T22:31:11.0704815+08:00||;True|2025-11-22T22:20:36.4579131+08:00||;True|2025-11-22T22:19:10.2281364+08:00||;True|2025-11-22T19:34:45.9336901+08:00||;True|2025-11-12T23:06:38.7834109+08:00||;False|2025-11-12T23:01:02.2269478+08:00||;True|2025-10-22T22:08:11.6423148+08:00||;True|2025-10-22T21:54:24.7180547+08:00||;True|2025-10-22T21:40:03.5194315+08:00||;True|2025-10-22T21:28:28.8962766+08:00||;True|2025-10-22T21:22:47.9631689+08:00||;True|2025-10-22T21:18:24.5274318+08:00||;True|2025-10-22T21:14:51.6386326+08:00||;False|2025-10-22T21:14:07.6282769+08:00||;True|2025-10-22T21:03:48.9892860+08:00||;True|2025-10-22T21:00:56.3617243+08:00||;False|2025-10-22T21:00:30.5472941+08:00||;True|2025-10-22T20:51:29.6155916+08:00||;False|2025-10-22T20:50:47.1882956+08:00||;True|2025-10-22T15:01:04.1668366+08:00||;True|2025-10-22T14:49:43.6340569+08:00||;True|2025-10-22T14:38:39.4685603+08:00||;True|2025-10-21T18:35:28.8392541+08:00||;True|2025-10-20T10:31:05.5865212+08:00||;True|2025-10-20T10:20:41.5717101+08:00||;True|2025-10-19T10:08:33.6669332+08:00||;False|2025-10-19T10:07:22.3337545+08:00||;False|2025-10-19T10:05:22.9484805+08:00||;True|2025-10-10T16:54:27.1472888+08:00||;False|2025-10-10T16:53:44.1700030+08:00||;False|2025-10-10T16:52:48.1740453+08:00||;False|2025-10-10T16:51:21.5067253+08:00||;False|2025-10-10T16:50:19.2140597+08:00||;False|2025-10-10T16:49:21.2213290+08:00||;False|2025-10-10T16:48:47.7229948+08:00||;False|2025-10-10T16:48:15.1258700+08:00||;True|2025-09-30T13:29:42.2354235+08:00||;True|2025-09-25T11:44:52.6858389+08:00||;True|2025-09-25T11:08:27.8810109+08:00||;True|2025-09-25T09:28:50.2563374+08:00||;True|2025-09-24T16:14:02.3072184+08:00||;True|2025-09-23T22:38:52.4414757+08:00||;True|2025-09-23T22:19:07.1006356+08:00||;True|2025-09-23T22:18:01.5945225+08:00||;True|2025-09-23T22:06:15.6293613+08:00||;True|2025-09-23T21:53:14.2977444+08:00||;True|2025-09-23T21:46:55.2322411+08:00||;False|2025-09-23T21:45:23.7858854+08:00||;False|2025-09-23T21:03:51.8325689+08:00||;True|2025-09-23T10:03:32.2251920+08:00||;False|2025-09-23T09:38:08.2372201+08:00||;False|2025-09-23T09:37:49.9390545+08:00||;True|2024-03-11T21:31:45.8102398+08:00||;True|2024-03-11T07:26:24.7660541+08:00||;True|2024-03-08T22:08:40.0154831+08:00||;True|2024-03-03T10:14:36.8109114+08:00||;True|2024-03-02T18:44:57.3288537+08:00||;True|2024-01-24T17:51:37.9164415+08:00||;True|2024-01-24T16:36:50.5612157+08:00||;True|2024-01-24T15:51:35.7556653+08:00||;True|2024-01-17T23:40:40.7526618+08:00||;True|2024-01-17T23:36:10.3692844+08:00||;True|2024-01-17T23:22:03.2378834+08:00||;True|2024-01-03T11:35:44.7118292+08:00||;True|2024-01-03T11:11:23.4270453+08:00||;True|2024-01-03T11:04:35.2081526+08:00||;True|2024-01-03T10:57:03.7053107+08:00||;True|2024-01-03T10:51:50.7463989+08:00||;False|2024-01-03T10:50:24.9775312+08:00||;True|2024-01-03T10:47:30.1128183+08:00||;True|2024-01-03T10:42:55.8640657+08:00||;True|2024-01-03T09:24:24.3436056+08:00||;True|2024-01-02T23:40:38.2001198+08:00||;True|2024-01-02T23:08:36.7230444+08:00||;True|2024-01-02T22:53:43.9658255+08:00||;True|2024-01-02T22:25:38.5545279+08:00||;False|2024-01-02T22:24:42.6577609+08:00||;True|2024-01-02T22:04:33.4708889+08:00||;True|2024-01-02T21:49:57.9249898+08:00||;True|2023-12-28T22:42:58.5976180+08:00||;True|2023-12-28T22:24:09.2051205+08:00||;</History> <History>True|2025-11-25T16:00:42.1507258Z||;True|2025-11-26T00:00:17.0107229+08:00||;True|2025-11-25T23:42:07.4349629+08:00||;False|2025-11-25T23:41:56.9328658+08:00||;True|2025-11-25T23:19:32.5262917+08:00||;True|2025-11-25T14:08:53.3850967+08:00||;True|2025-11-24T23:53:54.4283003+08:00||;True|2025-11-24T23:41:15.8248332+08:00||;True|2025-11-24T23:33:57.1844427+08:00||;True|2025-11-24T23:31:54.9228836+08:00||;True|2025-11-24T23:24:15.8681502+08:00||;True|2025-11-24T23:22:57.9046229+08:00||;True|2025-11-24T23:18:04.1131647+08:00||;True|2025-11-24T22:47:54.1336448+08:00||;True|2025-11-24T22:47:18.3613833+08:00||;True|2025-11-24T08:17:50.3994607+08:00||;True|2025-11-24T08:07:00.9951205+08:00||;True|2025-11-23T23:34:50.0030826+08:00||;True|2025-11-23T23:32:36.7452616+08:00||;True|2025-11-22T23:18:56.3202345+08:00||;True|2025-11-22T22:52:51.7203302+08:00||;True|2025-11-22T22:52:42.9620946+08:00||;True|2025-11-22T22:52:09.8257640+08:00||;True|2025-11-22T22:39:31.5894141+08:00||;True|2025-11-22T22:31:11.0704815+08:00||;True|2025-11-22T22:20:36.4579131+08:00||;True|2025-11-22T22:19:10.2281364+08:00||;True|2025-11-22T19:34:45.9336901+08:00||;True|2025-11-12T23:06:38.7834109+08:00||;False|2025-11-12T23:01:02.2269478+08:00||;True|2025-10-22T22:08:11.6423148+08:00||;True|2025-10-22T21:54:24.7180547+08:00||;True|2025-10-22T21:40:03.5194315+08:00||;True|2025-10-22T21:28:28.8962766+08:00||;True|2025-10-22T21:22:47.9631689+08:00||;True|2025-10-22T21:18:24.5274318+08:00||;True|2025-10-22T21:14:51.6386326+08:00||;False|2025-10-22T21:14:07.6282769+08:00||;True|2025-10-22T21:03:48.9892860+08:00||;True|2025-10-22T21:00:56.3617243+08:00||;False|2025-10-22T21:00:30.5472941+08:00||;True|2025-10-22T20:51:29.6155916+08:00||;False|2025-10-22T20:50:47.1882956+08:00||;True|2025-10-22T15:01:04.1668366+08:00||;True|2025-10-22T14:49:43.6340569+08:00||;True|2025-10-22T14:38:39.4685603+08:00||;True|2025-10-21T18:35:28.8392541+08:00||;True|2025-10-20T10:31:05.5865212+08:00||;True|2025-10-20T10:20:41.5717101+08:00||;True|2025-10-19T10:08:33.6669332+08:00||;False|2025-10-19T10:07:22.3337545+08:00||;False|2025-10-19T10:05:22.9484805+08:00||;True|2025-10-10T16:54:27.1472888+08:00||;False|2025-10-10T16:53:44.1700030+08:00||;False|2025-10-10T16:52:48.1740453+08:00||;False|2025-10-10T16:51:21.5067253+08:00||;False|2025-10-10T16:50:19.2140597+08:00||;False|2025-10-10T16:49:21.2213290+08:00||;False|2025-10-10T16:48:47.7229948+08:00||;False|2025-10-10T16:48:15.1258700+08:00||;True|2025-09-30T13:29:42.2354235+08:00||;True|2025-09-25T11:44:52.6858389+08:00||;True|2025-09-25T11:08:27.8810109+08:00||;True|2025-09-25T09:28:50.2563374+08:00||;True|2025-09-24T16:14:02.3072184+08:00||;True|2025-09-23T22:38:52.4414757+08:00||;True|2025-09-23T22:19:07.1006356+08:00||;True|2025-09-23T22:18:01.5945225+08:00||;True|2025-09-23T22:06:15.6293613+08:00||;True|2025-09-23T21:53:14.2977444+08:00||;True|2025-09-23T21:46:55.2322411+08:00||;False|2025-09-23T21:45:23.7858854+08:00||;False|2025-09-23T21:03:51.8325689+08:00||;True|2025-09-23T10:03:32.2251920+08:00||;False|2025-09-23T09:38:08.2372201+08:00||;False|2025-09-23T09:37:49.9390545+08:00||;True|2024-03-11T21:31:45.8102398+08:00||;True|2024-03-11T07:26:24.7660541+08:00||;True|2024-03-08T22:08:40.0154831+08:00||;True|2024-03-03T10:14:36.8109114+08:00||;True|2024-03-02T18:44:57.3288537+08:00||;True|2024-01-24T17:51:37.9164415+08:00||;True|2024-01-24T16:36:50.5612157+08:00||;True|2024-01-24T15:51:35.7556653+08:00||;True|2024-01-17T23:40:40.7526618+08:00||;True|2024-01-17T23:36:10.3692844+08:00||;True|2024-01-17T23:22:03.2378834+08:00||;True|2024-01-03T11:35:44.7118292+08:00||;True|2024-01-03T11:11:23.4270453+08:00||;True|2024-01-03T11:04:35.2081526+08:00||;True|2024-01-03T10:57:03.7053107+08:00||;True|2024-01-03T10:51:50.7463989+08:00||;False|2024-01-03T10:50:24.9775312+08:00||;True|2024-01-03T10:47:30.1128183+08:00||;True|2024-01-03T10:42:55.8640657+08:00||;True|2024-01-03T09:24:24.3436056+08:00||;True|2024-01-02T23:40:38.2001198+08:00||;True|2024-01-02T23:08:36.7230444+08:00||;True|2024-01-02T22:53:43.9658255+08:00||;True|2024-01-02T22:25:38.5545279+08:00||;</History>
<LastFailureDetails /> <LastFailureDetails />
</PropertyGroup> </PropertyGroup>
</Project> </Project>
+25 -27
View File
@@ -66,21 +66,19 @@ Cookie 及 `sec_user_id` 是同步功能的核心,需严格按步骤获取,
--- ---
## 🚀 4. 运行方式(推荐 Docker Compose,更易维护 ## 🚀 4. 运行方式(推荐 Docker Compose
# Dysync.net Docker 镜像版本说明 # Dysync.net Docker 镜像版本说明
本文档详细描述了 `jianzhichu/dysync.net` Docker 镜像的各个版本、其功能特性、适用架构以及镜像大小。 ## 镜像版本
## 镜像版本总览
| 镜像标签 | 架构 | 功能描述 | 镜像大小 | 适用场景 | | 镜像标签 | 架构 | 功能描述 | 镜像大小 | 适用场景 |
|-----------------------------------|----------------|--------------------------------------------------------------------------|-----------|------------------------------| |-----------------------------------|----------------|--------------------------------------------------------------------------|-----------|------------------------------|
| `jianzhichu/dysync.net:latest` | x86_64 (amd64) | **标准版**<br>- 包含核心功能<br>- **不含 FFmpeg**<br>- 不能下载图文视频 | ~200M | 仅需基础功能,追求轻量部署 | | `jianzhichu/dysync.net:latest` | x86_64 (amd64) | **标准版**<br>- 包含核心功能<br>- **不含 FFmpeg**<br>- 不能下载图文视频 | ~200M | 仅需基础功能,追求轻量部署 |
| `jianzhichu/dysync.net:full_latest` | x86_64 (amd64) | **完整版**<br>- 包含全部核心功能<br>- **内置 FFmpeg**<br>- 支持图文视频下载与合成 | ~700M | 需要完整媒体处理能力的场景 | | `jianzhichu/dysync.net:full_latest` | x86_64 (amd64) | **完整版**<br>- 包含全部核心功能<br>- **内置 FFmpeg**<br>- 支持图文视频下载与合成 | ~700M | 需要完整媒体处理能力的场景 |
| `jianzhichu/dysync.net:arm_latest` | ARM64 | **ARM 标准版**<br>- 核心功能(与 `latest` 一致)<br>- **适配 ARM 架构** | ~200M | ARM 设备(如树莓派)的轻量部署 | | `jianzhichu/dysync.net:arm_latest` | ARM64 | **ARM 标准版**<br>- 核心功能(与 `latest` 一致)<br>- **适配 ARM 架构** | ~200M | ARM 设备(如树莓派)的轻量部署 |
| `jianzhichu/dysync.net:full_arm_latest` | ARM64 | **ARM 完整版**<br>- 完整功能(与 `full_latest` 一致)<br>- **适配 ARM 架构** | ~700M | ARM 设备的完整功能部署 | | `jianzhichu/dysync.net:full_arm_latest` | ARM64 | **ARM 完整版**<br>- 完整功能(与 `full_latest` 一致)<br>- **适配 ARM 架构** | ~500M | ARM 设备的完整功能部署 |
| `jianzhichu/dysync.net:beta_1.0` | x86_64 (amd64) | **测试版 v1.0**<br>- 包含最新开发特性<br>- 功能可能不稳定<br>- 不含 FFmpeg | ~200M | 开发测试、尝鲜新功能 | | `jianzhichu/dysync.net:beta_1.0` | x86_64 (amd64) | **测试版 v1.0**<br>- 包含最新开发特性<br>- 功能可能不稳定<br>- 不含 FFmpeg | ~200M | 开发测试、尝鲜新功能 |
## 构建命令示例 ## 构建命令示例
@@ -93,43 +91,43 @@ Cookie 及 `sec_user_id` 是同步功能的核心,需严格按步骤获取,
将下方命令中的「本地路径」替换为你的实际路径,终端执行即可: 将下方命令中的「本地路径」替换为你的实际路径,终端执行即可:
```bash ```bash
### Arm设备请使用 registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:arm_1.0 版本镜像
### 方式一:Docker 命令行 ### 方式一:Docker 命令行
docker run -d --restart=always \ docker run -d --restart=always \
-v /你的/本地/收藏视频路径:/app/collect \ -v /opt/dysync/coll:/app/collect \
-v /你的/本地/喜欢视频路径:/app/favorite \ -v /opt/dysync/favorite \
-v /你的/本地/数据库路径:/app/db \ -v /opt/dysync/db:/app/db \
-v /你的/本地/博主视频路径:/app/uper \ -v /opt/dysync/imgs:/app/images \
-p 10101:10101 \ -v /opt/dysync/uper:/app/uper \
--name dysync2025 \ -p 10103:10101 \
registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net --name dysync_arm_full \
registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
# 注意:-p 后面的容器端口必须为 10101(源码固定) # 注意:-p 后面的容器端口必须为 10101(源码固定)
### 方式二:Docker Compose 运行(推荐) ### 方式二:Docker Compose 运行(推荐)
### Arm设备请使用 registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:arm_1.0 版本镜像
创建 docker-compose.yml 文件,复制以下内容,替换「本地路径」后执行 docker-compose up -d 创建 docker-compose.yml 文件,复制以下内容,替换「本地路径」后执行 docker-compose up -d
version: '3.8' version: '3.8'
services: services:
dysync: dysync:
image: registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net image: registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:latest
container_name: dysync2025 container_name: dysync_arm_full # 容器名称
restart: always restart: always # 总是重启
ports: ports:
- "10101:10101" - "10101:10101" # 端口映射
volumes: volumes:
- /volume1/docker/dysync/db:/app/db - /opt/dysync/db:/app/db # 数据库目录
- /opt/dysync/coll:/app/collect # 收集目录
- /volume2/mediay/dysync:/app/collect - /opt/dysync/favorite:/app/favorite # 收藏目录(补充了容器内路径)
- /volume2/mediay/dysync_fav:/app/favorite - /opt/dysync/imgs:/app/images # 图片目录
- /volume2/mediay/dysync_up:/app/uper - /opt/dysync/uper:/app/uper # 上传目录
# 下面是多账号路径映射示例(可选) # 下面是多账号路径映射示例(可选)
- /volume2/mediay/dysync2:/app/yeyeye - /opt/dysync/coll2:/app/collect # 收集目录
- /volume2/mediay/dysync2_fav:/app/yeyeye_fav - /opt/dysync/favorite2:/app/favorite # 收藏目录(补充了容器内路径)
- /volume2/mediay/dysync2_up:/app/yeyeye_up - /opt/dysync/imgs2:/app/images # 图片目录
# 配置DNS服务器(解决域名解析失败导致的无法访问外网) - /opt/dysync/uper2:/app/uper # 上传目录
# 配置DNS服务器(可选)
network_mode: bridge network_mode: bridge
dns: dns:
- 8.8.8.8 # Google DNS - 8.8.8.8 # Google DNS
+1
View File
@@ -148,6 +148,7 @@ function submit() {
loading.value = false; loading.value = false;
if (res.code === 0) { if (res.code === 0) {
showModal.value = false; showModal.value = false;
message.success('修改成功,同步任务将在5-10秒按新配置运行...');
reset(); reset();
GetRecords(); GetRecords();
} }
+2 -2
View File
@@ -190,7 +190,7 @@ const onSubmit = () => {
.apiUpdateConfig(toRaw(formState)) .apiUpdateConfig(toRaw(formState))
.then((res) => { .then((res) => {
if (res.code === 0) { if (res.code === 0) {
message.success('配置修改生效,同步任务将按照新的规则执行'); message.success('修改成功,同步任务将在5-10秒按新配置运行...');
componentDisabled.value = true; componentDisabled.value = true;
} else { } else {
message.error(res.erro || '更新配置失败', 8); message.error(res.erro || '更新配置失败', 8);
@@ -198,7 +198,7 @@ const onSubmit = () => {
}) })
.catch((error) => { .catch((error) => {
console.error('更新配置失败:', error); console.error('更新配置失败:', error);
message.error('更新配置失败,请稍后重试', 8); message.error('修改失败,请稍后重试', 8);
}); });
}) })
.catch((error) => { .catch((error) => {
+51 -17
View File
@@ -19,7 +19,14 @@
<a-form-item :wrapper-col="{ offset: 8, span: 16 }"> <a-form-item :wrapper-col="{ offset: 8, span: 16 }">
<a-space> <a-space>
<a-button type="primary" @click="GetRecords">查询</a-button> <a-button type="primary" @click="GetRecords">查询</a-button>
<a-button type="danger" @click="StartNow">立即同步</a-button> <!-- 核心修改点绑定 disabled 属性 -->
<a-button type="danger" @click="StartNow" :disabled="isSyncing">
<!-- 可选添加加载状态提示 -->
<template #icon>
<a-spin v-if="isSyncing" size="small" />
</template>
立即同步
</a-button>
</a-space> </a-space>
</a-form-item> </a-form-item>
</a-form> </a-form>
@@ -27,6 +34,7 @@
</a-table> </a-table>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { defineComponent, reactive, ref } from 'vue'; import { defineComponent, reactive, ref } from 'vue';
import { useApiStore } from '@/store'; import { useApiStore } from '@/store';
@@ -34,50 +42,45 @@ import type { UnwrapRef } from 'vue';
import { onMounted } from 'vue'; import { onMounted } from 'vue';
import dayjs, { Dayjs } from 'dayjs'; import dayjs, { Dayjs } from 'dayjs';
import locale from 'ant-design-vue/es/date-picker/locale/zh_CN'; import locale from 'ant-design-vue/es/date-picker/locale/zh_CN';
import { message, Spin } from 'ant-design-vue'; // 引入 Spin 用于显示加载图标
type RangeValue = [Dayjs, Dayjs]; type RangeValue = [Dayjs, Dayjs];
import 'dayjs/locale/zh-cn'; import 'dayjs/locale/zh-cn';
dayjs.locale('zh-cn'); dayjs.locale('zh-cn');
// ... (columns, loading, DataItem, datas, showImageViedo, QuaryParam, value1, ranges, quaryData 的定义保持不变)
const columns = ref([ const columns = ref([
{ {
title: '同步时间', title: '同步时间',
dataIndex: 'syncTimeStr', dataIndex: 'syncTimeStr',
// sorter: true,
align: 'center', align: 'center',
width: 180, width: 180,
}, },
{ {
title: '同步类型', title: '同步类型',
dataIndex: 'viedoTypeStr', dataIndex: 'viedoTypeStr',
// sorter: true,
align: 'center', align: 'center',
width: 100, width: 100,
}, },
{ {
title: '博主', title: '博主',
dataIndex: 'author', dataIndex: 'author',
// sorter: true,
align: 'center', align: 'center',
width: 150, width: 150,
}, },
{ {
title: '视频类型', title: '视频类型',
dataIndex: 'viedoCate', dataIndex: 'viedoCate',
// sorter: true,
width: 300, width: 300,
align: 'center', align: 'center',
}, },
{ {
title: '视频标题', title: '视频标题',
dataIndex: 'videoTitle', dataIndex: 'videoTitle',
// sorter: true,
align: 'left', align: 'left',
}, },
{ {
title: 'Cookie', title: 'CK名称',
dataIndex: 'dyUser', dataIndex: 'dyUser',
// sorter: true,
align: 'center', align: 'center',
width: 200, width: 200,
}, },
@@ -108,6 +111,7 @@ const quaryData: UnwrapRef<QuaryParam> = reactive({
tag: '', tag: '',
viedoType: '*', viedoType: '*',
}); });
const GetRecords = () => { const GetRecords = () => {
loading.value = true; loading.value = true;
quaryData.pageIndex = pagination.value.current; quaryData.pageIndex = pagination.value.current;
@@ -125,9 +129,12 @@ const GetRecords = () => {
} }
}); });
}; };
onMounted(() => { onMounted(() => {
GetRecords(); GetRecords();
getConfig(); // 在 onMounted 中调用 getConfig
}); });
const pagination = ref({ const pagination = ref({
current: 1, current: 1,
defaultPageSize: 10, defaultPageSize: 10,
@@ -140,9 +147,9 @@ const getConfig = () => {
.apiGetConfig() .apiGetConfig()
.then((res) => { .then((res) => {
if (res.code === 0) { if (res.code === 0) {
// 监听环境变量配置,控制是否显示图片视频下载选项
showImageViedo.value = res.data.downImageVideoFromEnv; showImageViedo.value = res.data.downImageVideoFromEnv;
} else { } else {
// 可以在这里添加配置获取失败的处理
} }
}) })
.catch((error) => { .catch((error) => {
@@ -151,31 +158,58 @@ const getConfig = () => {
}; };
const handleTableChange = (e) => { const handleTableChange = (e) => {
console.log(e);
pagination.value.current = e.current; pagination.value.current = e.current;
pagination.value.defaultPageSize = e.defaultPageSize; pagination.value.defaultPageSize = e.defaultPageSize;
pagination.value.total = e.total; // 通常 total 是由后端返回的,这里不需要手动设置
pagination.value.showTotal = () => `${e.total}`;
GetRecords(); GetRecords();
}; };
// 核心修改点:添加一个 ref 来控制按钮状态
const isSyncing = ref(false);
const StartNow = () => { const StartNow = () => {
// 如果正在同步中,则直接返回,防止重复点击
if (isSyncing.value) {
return;
}
message.success('请耐心等待,同步任务正在启动...');
isSyncing.value = true; // 开始同步,禁用按钮
useApiStore() useApiStore()
.StartJobNow() .StartJobNow()
.then((res) => {}); .then((res) => {
// 根据后端返回的状态码判断是否真正成功
if (res.code === 0) {
message.success('同步任务启动成功!');
} else {
message.error(`同步任务启动失败: ${res.message || '未知错误'}`);
}
})
.catch((error) => {
console.error('同步任务API调用失败:', error);
message.error('同步任务启动失败,请检查网络或联系管理员。');
})
.finally(() => {
isSyncing.value = false; // 无论成功失败,都恢复按钮状态
});
}; };
const datePicked = (ref, dateArry) => { const datePicked = (ref, dateArry) => {
// 注意:dateArry 是 Dayjs 对象数组,如果后端需要字符串,需要格式化
// quaryData.dates = dateArry.map(date => date.format('YYYY-MM-DD'));
quaryData.dates = dateArry; quaryData.dates = dateArry;
console.log(dateArry); console.log(dateArry);
}; };
const dataSource = ref(datas); const dataSource = ref(datas);
const onViedoTypeChanged = (e) => { const onViedoTypeChanged = (e) => {
// console.log(e.target.value);
quaryData.viedoType = e.target.value; quaryData.viedoType = e.target.value;
pagination.value.current = 1; pagination.value.current = 1; // 切换类型后,重置页码到第一页
GetRecords(); GetRecords();
}; };
</script> </script>
<style scoped> <style scoped>
</style> </style>