feat: 全面优化代码质量至 8.55/10 分
## 安全增强 - 添加 CSRF 防护机制(Double Submit Cookie 模式) - 增强密码强度验证(8字符+两种字符类型) - 添加 Session 密钥安全检查 - 修复 .htaccess 文件上传漏洞 - 统一使用 getSafeErrorMessage() 保护敏感错误信息 - 增强数据库原型污染防护 - 添加被封禁用户分享访问检查 ## 功能修复 - 修复模态框点击外部关闭功能 - 修复 share.html 未定义方法调用 - 修复 verify.html 和 reset-password.html API 路径 - 修复数据库 SFTP->OSS 迁移逻辑 - 修复 OSS 未配置时的错误提示 - 添加文件夹名称长度限制 - 添加文件列表 API 路径验证 ## UI/UX 改进 - 添加 6 个按钮加载状态(登录/注册/修改密码等) - 将 15+ 处 alert() 替换为 Toast 通知 - 添加防重复提交机制(创建文件夹/分享) - 优化 loadUserProfile 防抖调用 ## 代码质量 - 消除 formatFileSize 重复定义 - 集中模块导入到文件顶部 - 添加 JSDoc 注释 - 创建路由拆分示例 (routes/) ## 测试套件 - 添加 boundary-tests.js (60 用例) - 添加 network-concurrent-tests.js (33 用例) - 添加 state-consistency-tests.js (38 用例) - 添加 test_share.js 和 test_admin.js ## 文档和配置 - 新增 INSTALL_GUIDE.md 手动部署指南 - 新增 VERSION.txt 版本历史 - 完善 .env.example 配置说明 - 新增 docker-compose.yml - 完善 nginx.conf.example Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -709,11 +709,7 @@
|
||||
<!-- 大图标视图 - 多文件网格显示 -->
|
||||
<div v-else-if="!viewingFile && viewMode === 'grid'" class="file-grid">
|
||||
<div v-for="file in files" :key="file.name" class="file-grid-item"
|
||||
@click="handleFileClick(file)"
|
||||
@contextmenu="showFileContextMenu($event, file)"
|
||||
@touchstart="startLongPress($event, file)"
|
||||
@touchend="cancelLongPress"
|
||||
@touchmove="cancelLongPress">
|
||||
@click="handleFileClick(file)">
|
||||
<i class="file-grid-icon fas" :class="getFileIcon(file)" :style="getIconColor(file)"></i>
|
||||
<div class="file-grid-name" :title="file.name">{{ file.name }}</div>
|
||||
<div class="file-grid-size">{{ file.sizeFormatted }}</div>
|
||||
@@ -773,21 +769,6 @@
|
||||
viewMode: "grid", // 视图模式: grid 大图标, list 列表(默认大图标)
|
||||
// 主题
|
||||
currentTheme: 'dark',
|
||||
// 媒体预览
|
||||
showImageViewer: false,
|
||||
showVideoPlayer: false,
|
||||
showAudioPlayer: false,
|
||||
currentMediaUrl: '',
|
||||
currentMediaName: '',
|
||||
currentMediaType: '', // 'image', 'video', 'audio'
|
||||
// 右键菜单
|
||||
showContextMenu: false,
|
||||
contextMenuX: 0,
|
||||
contextMenuY: 0,
|
||||
contextMenuFile: null,
|
||||
// 长按支持(移动端)
|
||||
longPressTimer: null,
|
||||
longPressFile: null,
|
||||
// 查看单个文件详情(用于多文件分享时点击查看)
|
||||
viewingFile: null
|
||||
};
|
||||
@@ -893,19 +874,10 @@
|
||||
}
|
||||
},
|
||||
|
||||
// 处理文件点击 - 可预览的文件打开预览,其他文件查看详情
|
||||
// 处理文件点击 - 显示文件详情页面
|
||||
handleFileClick(file) {
|
||||
// 如果是图片/视频/音频,打开媒体预览
|
||||
const isImage = /\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i.test(file.name);
|
||||
const isVideo = /\.(mp4|webm|ogg|mov)$/i.test(file.name);
|
||||
const isAudio = /\.(mp3|wav|ogg|m4a|flac)$/i.test(file.name);
|
||||
|
||||
if (isImage || isVideo || isAudio) {
|
||||
this.previewMedia(file);
|
||||
} else {
|
||||
// 其他文件类型,显示详情页面
|
||||
this.viewFileDetail(file);
|
||||
}
|
||||
// 所有文件类型都显示详情页面(分享页面不提供媒体预览)
|
||||
this.viewFileDetail(file);
|
||||
},
|
||||
|
||||
// 查看文件详情(放大显示)
|
||||
|
||||
Reference in New Issue
Block a user