mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-08-28 03:28:05 +08:00
fix: 修复 svelte 升级后 status-editor 按钮无法点击的问题 (#603)
This commit is contained in:
@@ -11,11 +11,19 @@
|
|||||||
import type { StatusUpdate, UpdateFilteredVideoStatusRequest } from '$lib/types';
|
import type { StatusUpdate, UpdateFilteredVideoStatusRequest } from '$lib/types';
|
||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
|
|
||||||
export let open = false;
|
let {
|
||||||
export let hasFilters = false;
|
open = $bindable(false),
|
||||||
export let loading = false;
|
hasFilters = false,
|
||||||
export let filterDescriptionParts: string[] = [];
|
loading = false,
|
||||||
export let onsubmit: (request: UpdateFilteredVideoStatusRequest) => void;
|
filterDescriptionParts = [],
|
||||||
|
onsubmit
|
||||||
|
}: {
|
||||||
|
open?: boolean;
|
||||||
|
hasFilters?: boolean;
|
||||||
|
loading?: boolean;
|
||||||
|
filterDescriptionParts?: string[];
|
||||||
|
onsubmit: (request: UpdateFilteredVideoStatusRequest) => void;
|
||||||
|
} = $props();
|
||||||
|
|
||||||
// 视频任务名称(与后端 VideoStatus 对应)
|
// 视频任务名称(与后端 VideoStatus 对应)
|
||||||
const videoTaskNames = ['视频封面', '视频信息', 'UP 主头像', 'UP 主信息', '分页下载'];
|
const videoTaskNames = ['视频封面', '视频信息', 'UP 主头像', 'UP 主信息', '分页下载'];
|
||||||
@@ -27,29 +35,25 @@
|
|||||||
type StatusValue = null | 0 | 7;
|
type StatusValue = null | 0 | 7;
|
||||||
|
|
||||||
// 视频任务状态,默认都是 null(未选择)
|
// 视频任务状态,默认都是 null(未选择)
|
||||||
let videoStatuses: StatusValue[] = Array(5).fill(null);
|
let videoStatuses = $state<StatusValue[]>(Array(5).fill(null));
|
||||||
|
|
||||||
// 分页任务状态,默认都是 null(未选择)
|
// 分页任务状态,默认都是 null(未选择)
|
||||||
let pageStatuses: StatusValue[] = Array(5).fill(null);
|
let pageStatuses = $state<StatusValue[]>(Array(5).fill(null));
|
||||||
|
|
||||||
function setVideoStatus(taskIndex: number, value: StatusValue) {
|
function setVideoStatus(taskIndex: number, value: StatusValue) {
|
||||||
videoStatuses[taskIndex] = value;
|
videoStatuses[taskIndex] = value;
|
||||||
videoStatuses = [...videoStatuses];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function setPageStatus(taskIndex: number, value: StatusValue) {
|
function setPageStatus(taskIndex: number, value: StatusValue) {
|
||||||
pageStatuses[taskIndex] = value;
|
pageStatuses[taskIndex] = value;
|
||||||
pageStatuses = [...pageStatuses];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetVideoStatus(taskIndex: number) {
|
function resetVideoStatus(taskIndex: number) {
|
||||||
videoStatuses[taskIndex] = null;
|
videoStatuses[taskIndex] = null;
|
||||||
videoStatuses = [...videoStatuses];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetPageStatus(taskIndex: number) {
|
function resetPageStatus(taskIndex: number) {
|
||||||
pageStatuses[taskIndex] = null;
|
pageStatuses[taskIndex] = null;
|
||||||
pageStatuses = [...pageStatuses];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function resetAllStatuses() {
|
function resetAllStatuses() {
|
||||||
@@ -57,13 +61,16 @@
|
|||||||
pageStatuses = Array(5).fill(null);
|
pageStatuses = Array(5).fill(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasAnyChanges(): boolean {
|
function hasVideoChanges(): boolean {
|
||||||
return (
|
return videoStatuses.some((status) => status !== null);
|
||||||
videoStatuses.some((status) => status !== null) ||
|
|
||||||
pageStatuses.some((status) => status !== null)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function hasPageChanges(): boolean {
|
||||||
|
return pageStatuses.some((status) => status !== null);
|
||||||
|
}
|
||||||
|
|
||||||
|
let hasAnyChanges = $derived(hasVideoChanges() || hasPageChanges());
|
||||||
|
|
||||||
function buildRequest(): UpdateFilteredVideoStatusRequest {
|
function buildRequest(): UpdateFilteredVideoStatusRequest {
|
||||||
const request: UpdateFilteredVideoStatusRequest = {};
|
const request: UpdateFilteredVideoStatusRequest = {};
|
||||||
|
|
||||||
@@ -99,7 +106,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleSubmit() {
|
function handleSubmit() {
|
||||||
if (!hasAnyChanges()) {
|
if (!hasAnyChanges) {
|
||||||
toast.info('请至少选择一个状态进行修改');
|
toast.info('请至少选择一个状态进行修改');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -108,9 +115,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 当 Sheet 关闭时重置状态
|
// 当 Sheet 关闭时重置状态
|
||||||
$: if (!open) {
|
$effect(() => {
|
||||||
resetAllStatuses();
|
if (!open) {
|
||||||
}
|
resetAllStatuses();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function getStatusInfo(status: StatusValue) {
|
function getStatusInfo(status: StatusValue) {
|
||||||
if (status === 0) {
|
if (status === 0) {
|
||||||
@@ -305,14 +314,14 @@
|
|||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onclick={resetAllStatuses}
|
onclick={resetAllStatuses}
|
||||||
disabled={!hasAnyChanges() || loading}
|
disabled={!hasAnyChanges || loading}
|
||||||
class="flex-1 cursor-pointer"
|
class="flex-1 cursor-pointer"
|
||||||
>
|
>
|
||||||
重置所有状态
|
重置所有状态
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onclick={handleSubmit}
|
onclick={handleSubmit}
|
||||||
disabled={loading || !hasAnyChanges()}
|
disabled={loading || !hasAnyChanges}
|
||||||
class="flex-1 cursor-pointer"
|
class="flex-1 cursor-pointer"
|
||||||
>
|
>
|
||||||
{loading ? '提交中...' : '提交更改'}
|
{loading ? '提交中...' : '提交更改'}
|
||||||
|
|||||||
@@ -12,11 +12,19 @@
|
|||||||
import type { VideoInfo, PageInfo, StatusUpdate, UpdateVideoStatusRequest } from '$lib/types';
|
import type { VideoInfo, PageInfo, StatusUpdate, UpdateVideoStatusRequest } from '$lib/types';
|
||||||
import { toast } from 'svelte-sonner';
|
import { toast } from 'svelte-sonner';
|
||||||
|
|
||||||
export let open = false;
|
let {
|
||||||
export let video: VideoInfo;
|
open = $bindable(false),
|
||||||
export let pages: PageInfo[] = [];
|
video,
|
||||||
export let loading = false;
|
pages = [],
|
||||||
export let onsubmit: (request: UpdateVideoStatusRequest) => void;
|
loading = false,
|
||||||
|
onsubmit
|
||||||
|
}: {
|
||||||
|
open?: boolean;
|
||||||
|
video: VideoInfo;
|
||||||
|
pages?: PageInfo[];
|
||||||
|
loading?: boolean;
|
||||||
|
onsubmit: (request: UpdateVideoStatusRequest) => void;
|
||||||
|
} = $props();
|
||||||
|
|
||||||
// 视频任务名称(与后端 VideoStatus 对应)
|
// 视频任务名称(与后端 VideoStatus 对应)
|
||||||
const videoTaskNames = ['视频封面', '视频信息', 'UP 主头像', 'UP 主信息', '分页下载'];
|
const videoTaskNames = ['视频封面', '视频信息', 'UP 主头像', 'UP 主信息', '分页下载'];
|
||||||
@@ -24,28 +32,13 @@
|
|||||||
// 分页任务名称(与后端 PageStatus 对应)
|
// 分页任务名称(与后端 PageStatus 对应)
|
||||||
const pageTaskNames = ['视频封面', '视频内容', '视频信息', '视频弹幕', '视频字幕'];
|
const pageTaskNames = ['视频封面', '视频内容', '视频信息', '视频弹幕', '视频字幕'];
|
||||||
|
|
||||||
// 重置单个视频任务到原始状态
|
let videoStatuses = $state<number[]>([]);
|
||||||
function resetVideoTask(taskIndex: number) {
|
let pageStatuses = $state<Record<number, number[]>>({});
|
||||||
videoStatuses[taskIndex] = originalVideoStatuses[taskIndex];
|
|
||||||
videoStatuses = [...videoStatuses];
|
|
||||||
}
|
|
||||||
|
|
||||||
// 重置单个分页任务到原始状态
|
let originalVideoStatuses = $state<number[]>([]);
|
||||||
function resetPageTask(pageId: number, taskIndex: number) {
|
let originalPageStatuses = $state<Record<number, number[]>>({});
|
||||||
if (!pageStatuses[pageId]) {
|
|
||||||
pageStatuses[pageId] = [];
|
|
||||||
}
|
|
||||||
pageStatuses[pageId][taskIndex] = originalPageStatuses[pageId]?.[taskIndex] ?? 0;
|
|
||||||
pageStatuses = { ...pageStatuses };
|
|
||||||
}
|
|
||||||
|
|
||||||
let videoStatuses: number[] = [];
|
$effect(() => {
|
||||||
let pageStatuses: Record<number, number[]> = {};
|
|
||||||
|
|
||||||
let originalVideoStatuses: number[] = [];
|
|
||||||
let originalPageStatuses: Record<number, number[]> = {};
|
|
||||||
|
|
||||||
$: {
|
|
||||||
videoStatuses = [...video.download_status];
|
videoStatuses = [...video.download_status];
|
||||||
originalVideoStatuses = [...video.download_status];
|
originalVideoStatuses = [...video.download_status];
|
||||||
|
|
||||||
@@ -68,6 +61,19 @@
|
|||||||
pageStatuses = {};
|
pageStatuses = {};
|
||||||
originalPageStatuses = {};
|
originalPageStatuses = {};
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 重置单个视频任务到原始状态
|
||||||
|
function resetVideoTask(taskIndex: number) {
|
||||||
|
videoStatuses[taskIndex] = originalVideoStatuses[taskIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重置单个分页任务到原始状态
|
||||||
|
function resetPageTask(pageId: number, taskIndex: number) {
|
||||||
|
if (!pageStatuses[pageId]) {
|
||||||
|
pageStatuses[pageId] = [];
|
||||||
|
}
|
||||||
|
pageStatuses[pageId][taskIndex] = originalPageStatuses[pageId]?.[taskIndex] ?? 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
function handleVideoStatusChange(taskIndex: number, newValue: number) {
|
function handleVideoStatusChange(taskIndex: number, newValue: number) {
|
||||||
@@ -108,9 +114,8 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasAnyChanges(): boolean {
|
// 使用 $derived 创建派生状态
|
||||||
return hasVideoChanges() || hasPageChanges();
|
let hasAnyChanges = $derived(hasVideoChanges() || hasPageChanges());
|
||||||
}
|
|
||||||
|
|
||||||
function buildRequest(): UpdateVideoStatusRequest {
|
function buildRequest(): UpdateVideoStatusRequest {
|
||||||
const request: UpdateVideoStatusRequest = {};
|
const request: UpdateVideoStatusRequest = {};
|
||||||
@@ -151,7 +156,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleSubmit() {
|
function handleSubmit() {
|
||||||
if (!hasAnyChanges()) {
|
if (!hasAnyChanges) {
|
||||||
toast.info('没有状态变更需要提交');
|
toast.info('没有状态变更需要提交');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -231,14 +236,14 @@
|
|||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onclick={resetAllStatuses}
|
onclick={resetAllStatuses}
|
||||||
disabled={!hasAnyChanges()}
|
disabled={!hasAnyChanges}
|
||||||
class="flex-1 cursor-pointer"
|
class="flex-1 cursor-pointer"
|
||||||
>
|
>
|
||||||
重置所有状态
|
重置所有状态
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
onclick={handleSubmit}
|
onclick={handleSubmit}
|
||||||
disabled={loading || !hasAnyChanges()}
|
disabled={loading || !hasAnyChanges}
|
||||||
class="flex-1 cursor-pointer"
|
class="flex-1 cursor-pointer"
|
||||||
>
|
>
|
||||||
{loading ? '提交中...' : '提交更改'}
|
{loading ? '提交中...' : '提交更改'}
|
||||||
|
|||||||
Reference in New Issue
Block a user