🔧 前端构建修复与UI改进 - 2025年6月4日
📋 更新概述
本次更新专注于解决前端构建警告问题、修复关键的后端删除bug,以及改进用户界面体验。所有修复都经过充分测试,确保系统稳定可靠。
🐛 关键Bug修复
1. 修复番剧删除本地文件的严重bug ⭐
问题级别:🔴 严重(数据安全风险)
问题描述:
- 删除番剧源并选择"删除本地文件"时,系统会删除整个番剧基目录
- 例如:删除《假面骑士时王》时,会删除整个
D:/Downloads/番剧/
目录 - 这会导致所有其他番剧文件被意外删除
根本原因:
rust
// ❌ 危险的删除逻辑 - 删除整个基目录
let path = Path::new(&local_path);
if path.exists() {
fs::remove_dir_all(path).await?; // 危险!删除整个目录
}
修复方案:
rust
// ✅ 安全的删除逻辑 - 只删除相关的季度文件夹
let mut deleted_paths = std::collections::HashSet::new();
for video in videos {
if let Some(local_path) = &video.local_path {
let path = Path::new(local_path);
if path.exists() && path.is_dir() {
let path_str = path.to_string_lossy().to_string();
if !deleted_paths.contains(&path_str) {
match fs::remove_dir_all(path).await {
Ok(_) => {
deleted_paths.insert(path_str.clone());
tracing::info!("成功删除本地目录: {}", path_str);
},
Err(e) => {
tracing::error!("删除本地目录失败 {}: {}", path_str, e);
}
}
} else {
tracing::debug!("目录已删除,跳过: {}", path_str);
}
}
}
}
安全改进:
- ✅ 只删除视频记录中实际关联的季度文件夹
- ✅ 使用HashSet防止重复删除同一目录
- ✅ 详细的删除日志记录
- ✅ 完善的错误处理,单个目录删除失败不影响其他目录
🏗️ 前端构建警告修复
1. 解决未使用属性警告
问题:
Warning: received an unexpected slot "default" in component DeleteVideoSourceDialog
Warning: unused export property in DeleteVideoSourceDialog.svelte: 'sourceId'
修复方案:
svelte
<!-- 修复前:不必要的属性传递 -->
<DeleteVideoSourceDialog
bind:open={deleteDialog.open}
sourceId={deleteDialog.sourceId} <!-- 未使用的属性 -->
sourceName={deleteDialog.sourceName}
sourceType={deleteDialog.sourceType}
on:delete={handleDelete}
/>
<!-- 修复后:移除未使用的属性 -->
<DeleteVideoSourceDialog
bind:open={deleteDialog.open}
sourceName={deleteDialog.sourceName}
sourceType={deleteDialog.sourceType}
on:delete={handleDelete}
/>
2. 修复缺失依赖问题
解决的依赖缺失:
- ✅ 安装
@sveltejs/adapter-static
- ✅ 安装
lucide-svelte
图标库
安装命令:
bash
npm install @sveltejs/adapter-static lucide-svelte
3. 清理不必要的组件
删除的文件:
web/src/lib/components/ui/checkbox/Checkbox.svelte
web/src/lib/components/ui/checkbox/index.ts
原因:这些组件未被使用且存在构建警告
🎨 UI体验改进
1. 删除确认对话框按钮样式重构
问题:按钮样式不一致,UI组件复杂且存在构建问题
解决方案:使用原生HTML按钮 + Tailwind CSS
svelte
<!-- 修复前:复杂的UI组件 -->
<AlertDialog.Footer class="pt-4">
<AlertDialog.Cancel>取消</AlertDialog.Cancel>
<AlertDialog.Action>删除</AlertDialog.Action>
</AlertDialog.Footer>
<!-- 修复后:简洁的原生按钮 -->
<div class="flex justify-end gap-3 pt-4">
<button
type="button"
class="px-4 py-2 text-sm font-medium text-gray-900 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 transition-colors"
on:click={() => open = false}
>
取消
</button>
<button
type="button"
class="inline-flex items-center px-4 py-2 text-sm font-medium text-white bg-red-600 border border-transparent rounded-md hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
disabled={!canDelete || loading}
on:click={handleDelete}
>
{#if loading}
<div class="w-4 h-4 mr-2">
<div class="w-full h-full border-2 border-white border-t-transparent rounded-full animate-spin"></div>
</div>
{/if}
删除
</button>
</div>
改进效果:
- 🎯 一致的视觉风格:取消按钮为灰色,删除按钮为红色
- 🎯 清晰的交互状态:hover效果和focus环
- 🎯 加载状态指示:删除时显示旋转图标
- 🎯 禁用状态处理:条件不满足时按钮变灰
- 🎯 平滑过渡动画:transition-colors效果
2. 布局和间距优化
改进内容:
svelte
<!-- 优化的布局间距 -->
<div class="flex justify-end gap-3 pt-4"> <!-- gap-3 和 pt-4 改善间距 -->
<!-- 按钮内容 -->
</div>
视觉效果:
- ✅ 按钮间距更合理(gap-3)
- ✅ 顶部间距优化(pt-4)
- ✅ 右对齐布局更符合操作习惯
🔧 技术改进
1. 组件属性清理
优化前:
svelte
export let sourceId: number; // 未使用的属性
export let sourceName: string;
export let sourceType: string;
优化后:
svelte
export let sourceName: string;
export let sourceType: string;
// 移除未使用的 sourceId 属性
2. 事件处理优化
改进的删除事件处理:
svelte
function handleDelete() {
if (canDelete && !loading) {
loading = true;
dispatch('delete', {
sourceName,
sourceType,
deleteLocalFiles
});
}
}
特点:
- ✅ 状态检查确保安全执行
- ✅ 加载状态管理
- ✅ 完整的事件数据传递
📊 构建结果
修复前的警告
Warning: received an unexpected slot "default" in component DeleteVideoSourceDialog
Warning: unused export property in DeleteVideoSourceDialog.svelte: 'sourceId'
Warning: Component imports/exports non-existent files
修复后的结果
✅ 构建成功,无警告信息
✅ 所有依赖正确安装
✅ 组件清理完成
✅ UI样式统一一致
🚀 升级建议
强烈建议所有用户更新,特别是:
- 🔥 使用番剧删除功能的用户:避免意外删除其他番剧文件
- 🔥 前端开发相关用户:享受更好的构建体验
- 🔥 注重UI体验的用户:获得更一致的界面体验
📝 技术总结
本次更新通过以下方式显著改进了系统质量:
- 安全性提升:修复了潜在的数据丢失风险
- 构建优化:消除所有前端构建警告
- UI一致性:统一按钮样式和交互体验
- 代码质量:清理未使用代码,提高维护性
这些改进不仅解决了当前问题,还为后续开发奠定了更好的基础。
相关文件修改:
crates/bili_sync/src/api/handler.rs
- 修复删除逻辑bugweb/src/lib/components/delete-video-source-dialog.svelte
- UI重构web/src/lib/components/app-sidebar.svelte
- 属性清理web/package.json
- 依赖更新