|
|
3e2a497cd4
|
🎨 将app.html全面改为暗色主题
- 添加CSS变量系统(背景色、边框色、文字颜色、强调色)
- 页面背景改为深色渐变效果
- 卡片、弹窗使用毛玻璃效果(backdrop-filter blur)
- 导航栏改为暗色玻璃样式
- 表单、按钮、表格全部适配暗色主题
- 添加自定义滚动条样式
- 统一警告/成功/错误提示框为半透明风格
- 全局替换浅色背景和文字颜色
与index.html保持一致的暗色毛玻璃设计风格
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 22:16:28 +08:00 |
|
|
|
c411ffac19
|
fix(admin): 调整角色列宽度防止换行
|
2025-11-27 20:52:31 +08:00 |
|
|
|
599fa2c550
|
feat(admin): 用户列表添加角色列
- 新增"角色"列,显示"管理员"或"用户"标签
- 管理员显示紫色渐变背景+皇冠图标
- 普通用户显示灰色背景+用户图标
- 调整列宽适配新增列
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:47:47 +08:00 |
|
|
|
4f29bbe631
|
feat(admin): 管理员页面改为标签页模式
- 添加5个标签页:概览、设置、监控、用户、工具
- 概览:调试模式开关、服务器存储统计
- 设置:系统设置、SMTP邮件配置
- 监控:健康检测、系统日志
- 用户:用户管理列表
- 工具:上传工具管理
优化管理员页面布局,减少滚动,提升使用体验
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 20:31:26 +08:00 |
|
|
|
c3bc58a88b
|
feat(admin): 添加系统日志功能
## 新功能
1. **系统日志数据库**
- 新增 system_logs 表
- 支持日志级别:debug/info/warn/error
- 支持日志分类:auth/user/file/share/system/security
- 记录用户ID、用户名、IP地址、User-Agent
2. **日志记录**
- 用户注册成功/失败
- 用户登录成功/失败(密码错误)
- 系统操作(日志清理等)
3. **管理员API**
- GET /api/admin/logs - 查询日志(支持分页和筛选)
- GET /api/admin/logs/stats - 获取日志统计
- POST /api/admin/logs/cleanup - 清理旧日志
4. **前端界面**
- 日志列表展示(时间、级别、分类、内容、用户、IP)
- 筛选功能(级别、分类、关键词搜索)
- 分页导航
- 清理旧日志功能
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 19:54:46 +08:00 |
|
|
|
1dde17bb04
|
feat(admin): 添加系统健康检测功能
新增管理员健康检测面板,可检测以下配置项:
- 安全配置:JWT密钥、CORS、HTTPS、管理员账号、登录防爆破
- 服务状态:SMTP邮件、数据库连接、存储目录
- 运行配置:反向代理支持、Node环境
修改文件:
- backend/auth.js: 新增 isJwtSecretSecure() 函数
- backend/server.js: 新增 /api/admin/health-check API
- frontend/app.js: 新增健康检测数据和方法
- frontend/app.html: 新增健康检测UI界面
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 19:37:42 +08:00 |
|
|
|
d2aa115b5b
|
fix: SFTP下载使用新窗口打开直链
- app.js downloadFile: SFTP有直链时用window.open新窗口打开
- share.html downloadFile: 分享页面同样处理
- 本地存储下载保持原有方式不变
- 解决HTTPS页面下载HTTP直链的Mixed Content问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 15:24:20 +08:00 |
|
|
|
482a610420
|
Revert "fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题"
This reverts commit a4c94b1f68.
|
2025-11-27 15:20:11 +08:00 |
|
|
|
a4c94b1f68
|
fix: 修复HTTPS页面下载HTTP直链的Mixed Content问题
- downloadFile: 检测Mixed Content自动降级到后端代理下载
- getMediaUrl: 媒体预览同样处理Mixed Content
- 当HTTPS页面遇到HTTP直链时,自动使用服务器代理
- 添加Toast提示用户正在使用代理下载
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 14:59:09 +08:00 |
|
|
|
6305129e4f
|
chore: 更新app.js版本号强制刷新缓存
|
2025-11-27 13:47:37 +08:00 |
|
|
|
4f9b281039
|
feat: 添加SFTP空间使用统计功能
- 新增 /api/user/sftp-usage API,递归统计SFTP服务器空间使用情况
- 返回总使用空间、文件数、文件夹数
- 在设置页面显示SFTP空间统计信息
- 支持手动刷新统计数据
- 适配"仅SFTP"和"用户可选"两种权限模式的UI
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-27 13:39:51 +08:00 |
|
|
|
93050a23d9
|
🎨 优化管理员系统设置页面布局
在"最大上传大小"设置旁边添加保存按钮,使其更明显
添加提示:修改后需要重启服务才能生效
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 10:39:05 +08:00 |
|
|
|
d7a0e8cb9f
|
🐛 修复页面刷新时短暂显示混乱UI的问题
使用 Vue 的 v-cloak 指令,在 Vue 初始化完成前隐藏页面内容,
避免用户看到原始模板标记(FOUC问题)
- app.html: 添加 v-cloak
- share.html: 添加 v-cloak
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 10:30:50 +08:00 |
|
|
|
47fe1466a4
|
🔒 修复中高危安全漏洞并增强文件安全验证
**关键安全修复:**
1. 修复弱随机数生成器(中危)
- 分享码生成从Math.random()改为crypto.randomBytes()
- 防止分享链接被预测或暴力猜测
2. 增强文件上传安全验证(中危)
- 新增isSafePathSegment()函数验证文件名
- 禁止路径遍历字符(..、/、\、控制字符)
- 添加上传路径规范化和安全检查
**功能改进:**
- 管理员界面显示用户邮箱验证状态
- 优化用户状态展示(已封禁/未激活/正常)
**安全影响:**
- 消除分享链接可预测性风险
- 防止文件上传路径遍历攻击
- 提升文件系统访问控制安全性
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 01:37:02 +08:00 |
|
|
|
b4d32476e3
|
🎨 简化存储管理界面,移除重复按钮
前端优化:
- 移除顶部的快速切换按钮
- 只保留下方详细的卡片式按钮
- 保留视觉指示器(进度条动画)
- 减少界面冗余,提升简洁性
视觉改进:
- 界面更加简洁清爽
- 避免重复的操作按钮
- 用户操作更加明确
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 21:26:31 +08:00 |
|
|
|
220cc2341e
|
💄 优化存储管理卡片布局对齐
前端优化:
- 使用 flexbox 布局确保卡片等高
- 按钮自动对齐到卡片底部
- 添加 align-items: stretch 确保卡片高度一致
- 使用 margin-top: auto 将按钮区域推到底部
视觉改进:
- 两个存储卡片高度保持一致
- 操作按钮在同一水平线上对齐
- 整体布局更加美观和协调
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 21:11:48 +08:00 |
|
|
|
19a6c70d42
|
✨ 优化 SFTP 配置流程和界面
前端优化:
- 重新设计 SFTP 配置引导弹窗,采用渐变色头部
- 新增独立的 SFTP 配置弹窗,支持导入 .inf 配置文件
- 移除 forceSftpConfigVisible 标志,改用弹窗方式
- 简化存储切换逻辑,提升用户体验
- 优化配置表单布局和提示文字
交互改进:
- 支持拖拽导入配置文件
- 优化配置流程,更加直观
- 改进错误提示和操作引导
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 19:30:00 +08:00 |
|
|
|
db520f931e
|
📝 重写 README 文档 & ✨ 优化前端功能
文档更新:
- 完全重写 README.md,更加详细和专业
- 添加一键部署命令(curl 和 wget 两种方式)
- 详细介绍双存储模式、邮件系统、安全防护等特性
- 添加完整的使用指南和常见问题解答
- 更新项目结构和技术栈说明
- 添加版本更新日志
前端优化:
- 优化存储管理界面交互
- 改进文件管理功能
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 19:21:39 +08:00 |
|
|
|
02f0f3aa24
|
🔥 移除旧密码重置审核系统 & ✨ 优化存储管理UI
后端改进:
- 移除需要管理员审核的密码重置请求功能
- 简化密码重置流程,直接使用邮件重置
- 删除 password_reset_requests 表及相关代码
前端优化:
- 重新设计存储管理界面,采用现代化渐变风格
- 改进存储方式切换交互,添加动画效果
- 优化视觉层次和信息展示
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 19:12:57 +08:00 |
|
|
|
cfbb134587
|
🐛 修复邮箱验证和密码重置的时间戳问题
后端修复:
- 修改时间戳存储格式:从 ISO 字符串改为数值时间戳(毫秒)
- 优化时间戳比较逻辑:兼容新旧格式的时间戳
- 修复 VerificationDB.consumeVerificationToken() 的时间比较
- 修复 PasswordResetTokenDB.use() 的时间比较
- 统一使用 Date.now() 生成时间戳
前端改进:
- 新增 verifyMessage 独立显示验证相关提示
- 优化邮箱验证成功后的用户体验(自动切换到登录表单)
- 优化密码重置成功后的用户体验(自动切换到登录表单)
- 改进提示信息显示方式
技术细节:
- SQLite 时间比较:strftime('%s','now')*1000 获取当前毫秒时间戳
- 兼容旧数据:同时支持字符串和数值时间戳比较
这个修复解决了邮箱验证令牌一直提示过期的问题。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 15:48:32 +08:00 |
|
|
|
6958655d6e
|
✉️ 添加完整的邮件系统功能
后端新增功能:
- 集成 nodemailer 支持 SMTP 邮件发送
- 新增邮箱验证系统(VerificationDB)
- 新增密码重置令牌系统(PasswordResetTokenDB)
- 实现邮件发送限流(30分钟3次,全天10次)
- 添加 SMTP 配置管理接口
- 支持邮箱激活和密码重置邮件发送
前端新增功能:
- 注册时邮箱必填并需验证
- 邮箱验证激活流程
- 重发激活邮件功能
- 基于邮箱的密码重置流程(替代管理员审核)
- 管理后台 SMTP 配置界面
- SMTP 测试邮件发送功能
安全改进:
- 邮件发送防刷限流保护
- 验证令牌随机生成(48字节)
- 重置链接有效期限制
- 支持 SSL/TLS 加密传输
支持的邮箱服务:QQ邮箱、163邮箱、企业邮箱等主流SMTP服务
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 14:28:35 +08:00 |
|
|
|
fca00aa9fa
|
🔄 更新前端版本号 - 强制刷新浏览器缓存
## 问题
浏览器缓存了旧版本的app.js,新的axios配置无法生效
## 修改
app.js?v=20251110001 → app.js?v=20251121001
## 说明
版本号更新后,浏览器会自动下载新的app.js文件,
包含最新的axios withCredentials配置
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:46:58 +00:00 |
|
|
|
61c99ce5c0
|
✨ 添加登录验证码功能 - 增强系统安全性
## 新增功能
- 密码输错2次后自动显示验证码
- 4位数字验证码,点击可刷新
- 验证码有效期5分钟
- 基于IP和用户名双重防护
- 前台和后台登录均支持
## 后端改动
- 新增验证码生成API: GET /api/captcha
- 修改登录API支持验证码验证
- 添加session管理验证码
- 增强RateLimiter防爆破机制
## 前端改动
- 登录表单添加验证码输入框(条件显示)
- 验证码图片展示和刷新功能
- 自动触发验证码显示逻辑
## 依赖更新
- 新增: svg-captcha (验证码生成)
- 新增: express-session (session管理)
## 文档
- CAPTCHA_FEATURE.md - 详细功能文档
- CAPTCHA_README.md - 快速开始指南
- test_captcha.sh - 自动化测试脚本
- 更新说明_验证码功能.txt - 中文说明
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-21 16:32:32 +00:00 |
|
|
|
eee07d3820
|
优化检测逻辑,减少误判
修复了正常访问时也提示"检测到开发者工具"的问题。
核心改进:
1. 提高检测阈值,避免误判
- 窗口尺寸差异从160px提高到200px
- 要求console和其他方法同时检测到才触发
2. 降低检测频率
- 从每1秒改为每2秒检测一次
- 减少性能消耗和误判概率
3. 严格判定条件
- console检测为主要依据
- debugger和窗口尺寸作为辅助确认
检测逻辑:
- consoleOpen && (debuggerPause || windowSizeAbnormal)
- 必须console明确检测到,且至少有一个辅助条件满足
说明:
前端防护无法完全阻止技术人员查看源代码(Network面板、
右键查看源代码等),但可以有效防止普通用户使用F12。
真正的安全依赖于后端验证和权限控制。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 21:01:57 +08:00 |
|
|
|
019b213178
|
终极防护:在页面渲染前检测开发者工具
解决了用户打开控制台后能看到源代码的问题。
核心改进:
1. 将检测代码移到<head>最前面,在页面渲染前执行
2. 使用document.write()立即阻止页面加载
3. 检测到开发者工具时throw Error阻止后续脚本
4. 删除底部重复的检测代码,统一在头部处理
5. 优化检测逻辑,使用console.log触发toString
工作原理:
- 页面加载第一时间就执行检测
- 如果检测到开发者工具,立即用document.write替换页面
- throw Error阻止后续所有脚本和Vue应用加载
- 用户无法看到真实页面内容和源代码
测试场景:
✅ 先打开F12再访问 → 立即显示警告,页面不加载
✅ 访问后按F12 → 快捷键被禁用
✅ 调试模式 → 所有保护自动禁用
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 20:40:13 +08:00 |
|
|
|
4324d886d8
|
重构开发者工具检测机制 - 使用多重检测方法
修复了控制台在其他页面打开后仍能在本站显示的问题。
核心改进:
1. 新增Console对象toString检测(最有效)
2. 优化debugger暂停时间检测
3. 保留窗口尺寸检测作为补充
4. 综合多种方法,提高检测准确率
5. 页面加载时立即执行检测
6. 持续监控确保实时防护
检测原理:
- console.log会触发对象的toString方法
- 当控制台打开时,这个方法会被调用
- 通过标志位检测到调用,即可判断控制台已打开
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 20:33:01 +08:00 |
|
|
|
69e864bcfb
|
增强开发者工具检测防护功能
修复了用户可以在其他页面先打开F12控制台,然后访问网站时绕过禁用的问题。
主要改进:
- 页面加载时立即检测开发者工具是否已打开
- 新增 debugger 断点检测机制,检测更灵敏
- 检测到开发者工具时显示美观的全屏警告页面
- 防止重复警告显示
- 调试模式下所有保护机制自动禁用
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-17 19:57:02 +08:00 |
|
WanWanYun
|
0bb7bd5219
|
fix: 修复文件夹详情功能 + 添加文件夹分享
修复内容:
1. 【文件夹详情无反应】
- 问题: folder-info API中变量名冲突
- 原因: API参数名'path'与Node.js的'path'模块冲突
- 具体: 第1193行 `const itemPath = path.join(dirPath, item.name)`
这里的path被当作API参数(字符串)而不是模块
- 修复:
* API参数改为 `const { path: dirPath, folderName }`
* 使用dirPath替代path
* countFiles函数参数改为countDirPath避免混淆
- 效果: 查看详情功能现在正常工作
新功能:
2. 【文件夹分享】
- 移除分享功能的文件限制
- 右键菜单"分享"选项对文件和文件夹都显示
- 文件夹分享后可访问该文件夹下所有文件
- 与现有分享API完全兼容(share_type支持file和all)
技术细节:
- backend/server.js:
* 第1138行: path参数改为dirPath
* 第1186行: countFiles函数参数改为countDirPath
* 第1193行: 使用path.join正确引用模块
- frontend/app.html:
* 移除 `v-if="!contextMenuFile.isDirectory"` 限制
* 文件夹也显示"分享"菜单项
使用方式:
1. 右键文件夹 → "查看详情" → 显示大小、文件数、子文件夹数
2. 右键文件夹 → "分享" → 分享整个文件夹
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:15:43 +08:00 |
|
WanWanYun
|
f64f86cd78
|
fix: 修复文件夹右键菜单问题 + 新增文件夹详情功能
修复内容:
1. 【文件夹右键菜单无法显示】
- 问题: showFileContextMenu() 中仍有 `if (file.isDirectory) return` 阻止代码
- 原因: 之前的修复脚本替换失败,代码仍在
- 修复: 手动移除这行限制代码
- 效果: 文件夹现在可以正常右键操作(重命名、删除、查看详情)
新功能:
2. 【文件夹详情查看】
后端API (POST /api/files/folder-info):
- 接收参数: path(当前路径), folderName(文件夹名称)
- 计算文件夹总大小(递归统计所有文件)
- 统计文件数量和子文件夹数量
- 返回数据: name, path, size, fileCount, folderCount
- 仅支持本地存储
前端功能:
- 右键菜单新增"查看详情"选项(仅文件夹显示)
- 详情弹窗显示:
* 文件夹名称
* 文件夹路径
* 总大小(格式化显示)
* 文件数量
* 子文件夹数量
- 加载中状态提示
- 错误处理和提示
使用方式:
1. 右键点击任意文件夹
2. 选择"查看详情"
3. 弹窗显示文件夹统计信息
技术改动:
- backend/server.js: +100行 (新增folder-info API)
- frontend/app.html: +40行 (详情弹窗UI + 菜单项)
- frontend/app.js: +30行 (状态 + showFolderInfo方法)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-16 00:07:21 +08:00 |
|
WanWanYun
|
560b90f7f7
|
fix: 修复文件夹功能的多个严重bug
问题修复:
1. 【文件夹无法重命名和删除】
- 原因: showFileContextMenu 函数中 `if (file.isDirectory) return` 阻止了文件夹显示右键菜单
- 修复: 移除这个限制,允许文件夹显示右键菜单
- 效果: 文件夹现在可以右键重命名和删除
2. 【进入文件夹后无法返回上一页】
- 原因: 页面没有路径导航条(面包屑导航)
- 修复: 在文件列表上方添加完整的路径导航组件
- 功能:
* 显示当前路径层级
* 点击路径中的任意层级可快速跳转
* "返回上一级"按钮
* "返回根目录"按钮
- 新增 navigateUp() 方法处理返回上一级
3. 【上传文件到子文件夹路径错误(undefined文件夹)】
- 原因: loadFiles() 调用时未传递 path 参数,导致 currentPath 变为 undefined
- 修复:
* loadFiles 开头添加安全检查: `this.currentPath = path || '/'`
* createFolder 成功后调用 loadFiles 时传递 currentPath
- 效果: 路径不会变成undefined,文件正确上传到当前目录
4. 【优化删除确认提示】
- 旧提示: "只能删除空文件夹"(错误信息)
- 新提示: "⚠️ 警告:文件夹内所有文件将被永久删除!"(准确描述行为)
技术改动:
- frontend/app.html: +15行 (路径导航条UI)
- frontend/app.js: +10行 (navigateUp方法 + 安全检查)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-15 23:59:08 +08:00 |
|
WanWanYun
|
e5c932a351
|
feat: 新增本地存储文件夹管理功能
新功能概述:
- 支持在本地存储模式下创建文件夹
- 支持删除文件夹(递归删除)
- 支持重命名文件夹(已有功能,天然支持)
- 文件夹配额计算正确
后端改动:
1. 新增创建文件夹API (backend/server.js)
- POST /api/files/mkdir
- 参数: path(当前路径), folderName(文件夹名称)
- 安全检查: 禁止特殊字符(/ \ .. :),防止路径遍历攻击
- 仅限本地存储使用
- 创建前检查文件夹是否已存在
2. 改进删除功能 (backend/storage.js)
- LocalStorageClient.delete() 现在支持删除文件夹
- 使用 fs.rmSync(path, { recursive: true }) 递归删除
- 新增 calculateFolderSize() 方法计算文件夹总大小
- 删除文件夹时正确更新配额使用情况
前端改动:
1. 新建文件夹按钮 (frontend/app.html)
- 在"上传文件"按钮旁新增"新建文件夹"按钮
- 仅本地存储模式显示
2. 新建文件夹弹窗 (frontend/app.html)
- 简洁的创建表单
- 支持回车键快速创建
- 使用优化的弹窗关闭逻辑(防止拖动选择文本时误关闭)
3. 前端API调用 (frontend/app.js)
- 新增 createFolderForm 状态
- 新增 createFolder() 方法
- 前端参数验证
- 创建成功后自动刷新文件列表
4. 右键菜单优化 (frontend/app.html)
- 文件夹不显示"下载"按钮(文件夹暂不支持打包下载)
- 文件夹不显示"分享"按钮(分享单个文件夹暂不支持)
- 文件夹支持"重命名"和"删除"操作
安全性:
- 文件夹名称严格验证,禁止包含 / \ .. : 等特殊字符
- 路径安全检查,防止目录遍历攻击
- 仅限本地存储模式使用(SFTP存储使用上传工具管理)
配额管理:
- 空文件夹不占用配额
- 删除文件夹时正确释放配额(计算所有子文件大小)
- 删除非空文件夹会递归删除所有内容
使用方式:
1. 登录后切换到本地存储模式
2. 点击"新建文件夹"按钮
3. 输入文件夹名称,点击创建
4. 双击文件夹进入,支持多级目录
5. 右键文件夹可重命名或删除
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-15 23:46:20 +08:00 |
|
WanWanYun
|
3977e72c9e
|
fix: 修复弹窗交互问题和拖放上传UI重复显示
问题描述:
1. 弹窗点击外部关闭时,选择文本拖动鼠标到窗口外会误触关闭
2. 拖放文件上传的提示UI重复显示了两次
修复内容:
【弹窗交互优化】
- 将所有模态框的 @click 事件改为 @mousedown.self + @mouseup.self 组合
- 新增 handleModalMouseDown 和 handleModalMouseUp 方法
- 只有在同一个overlay元素上按下和释放鼠标时才关闭弹窗
- 解决了选择文本时拖动鼠标导致弹窗意外关闭的问题
- 受影响的弹窗:
* 重命名文件弹窗
* 分享所有文件弹窗
* 分享单个文件弹窗
* 忘记密码弹窗
* 文件审查弹窗
* 编辑存储权限弹窗
【拖放UI修复】
- 删除了重复的拖放上传提示层(原第670-677行)
- 保留文件列表区域内的拖放提示层(第711-718行)
- 现在拖放上传提示只显示一次
技术改进:
- mousedown.self: 只在overlay本身被按下时触发
- mouseup.self: 只在overlay本身被释放时触发
- 记录mousedown的目标,只有目标一致才执行关闭
- 提升了用户体验,避免误操作
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-15 22:32:50 +08:00 |
|
|
|
f02bcee646
|
fix: 彻底修复所有表格和列表的文字溢出问题
关键修复:
1. 所有表格添加 table-layout: fixed
2. 表格列头添加明确的宽度百分比控制
3. 文件列表 - 修复 display: flex 导致的溢出
- 将 flex 从 td 移到内部 div
- 文件名使用 flex: 1 + min-width: 0
- 所有图标添加 flex-shrink: 0
4. 分享列表 - 移除 max-width,使用列头宽度控制
5. 用户列表 - 移除 max-width,使用列头宽度控制
所有表格现在都能正确处理长文本,不会溢出容器
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 20:30:22 +08:00 |
|
|
|
d99568e418
|
fix: 修复前端所有页面的文字溢出问题
修复内容:
1. 文件列表 - 列表视图文件名溢出控制
2. 用户列表 - 用户名和邮箱溢出控制
3. 分享列表 - 文件路径和分享链接溢出控制
所有长文本现在都会正确显示省略号,不会导致UI布局异常
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 19:47:36 +08:00 |
|
|
|
f9d0a30d46
|
fix: 修复移动端分享列表长文件名导致UI溢出问题
## 问题
在移动端"我的分享"的列表视图下,长文件名会导致:
- 表格宽度被撑开
- 分享链接等内容溢出到容器外
- 页面布局错乱
## 修复
为分享列表的表格添加文字溢出处理:
1. 文件路径列:
- 限制max-width: 200px
- 超出部分显示省略号(text-overflow: ellipsis)
- 鼠标悬停显示完整路径(title属性)
2. 分享链接列:
- 限制max-width: 250px
- 超出部分显示省略号
- 鼠标悬停显示完整链接
## 其他位置检查
- 大图标视图已有溢出处理(-webkit-line-clamp: 2),无需修改
- 文件列表视图也已有完善的溢出处理
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 17:12:15 +08:00 |
|
|
|
bce225ec5c
|
feat: 添加管理员可控的F12调试模式开关
## 功能说明
- 管理员登录后可在管理后台页面看到"调试模式"卡片
- 点击开关按钮可启用/禁用F12和开发者工具
- 调试模式状态保存在localStorage,页面刷新后保持
- 同时控制主应用(app.html)和分享页面(share.html)的调试权限
## 技术实现
1. app.js新增debugMode配置和toggleDebugMode方法
2. app.html添加调试模式开关UI,并修改防调试代码支持debugMode控制
3. share.html添加防调试代码,受localStorage中的debugMode控制
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 16:04:17 +08:00 |
|
|
|
692b495005
|
feat: 添加分享到期时间显示功能
新增功能:
- 在分享列表表格中添加"到期时间"列,清晰显示每个分享的有效期
- 在分享创建成功后显示到期时间信息
- 添加友好的时间格式化显示(永久有效/今天过期/明天过期/X天后过期)
- 使用颜色区分不同状态:
* 绿色: 永久有效
* 蓝色: 正常有效期
* 黄色: 即将过期(3天内)
* 红色: 已过期
技术实现:
- frontend/app.html: 添加到期时间显示UI(表格列+分享结果)
- frontend/app.js: 添加3个辅助方法
* formatExpireTime(): 格式化到期时间显示
* isExpiringSoon(): 判断是否即将过期(3天内)
* isExpired(): 判断是否已过期
改进用户体验:
- 用户可以直观看到分享何时过期
- 即将过期的分享会有醒目的黄色提醒
- 鼠标悬停显示完整的ISO时间戳
- 时间显示本地化,使用中文格式
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-14 12:23:41 +08:00 |
|
WanWanYun
|
cfcbc22ae7
|
修复: 使用临时状态变量兼容SFTP配置显示逻辑
问题描述:
- 用户希望本地存储模式时隐藏SFTP配置区域
- 但点击"切换到SFTP"时需要能看到SFTP配置表单进行填写
解决方案:
1. 添加forceSftpConfigVisible状态变量用于临时强制显示
2. 修改HTML v-if条件,增加forceSftpConfigVisible的判断
3. 在switchStorage中设置forceSftpConfigVisible为true
4. 在updateFtpConfig成功后重置为false
5. 在switchView切换视图时自动重置
效果:
- 本地存储模式:SFTP配置默认隐藏
- 点击切换到SFTP:临时显示SFTP配置区域并滚动到该区域
- 配置成功:自动切换到SFTP模式,标志自动重置
- 切换视图:标志自动重置
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 23:31:26 +08:00 |
|
WanWanYun
|
1c58e498c5
|
修复: 解决切换到SFTP配置页面无响应的根本问题
问题分析:
1. SFTP配置区域的v-if条件包含了storageType检查
2. 当用户为local存储时,SFTP配置区域被隐藏
3. 即使跳转到settings页面,用户也看不到SFTP配置表单
修复内容:
1. 移除SFTP配置区域v-if中的storageType检查
2. 只要用户权限允许SFTP,配置区域就始终可见
3. 添加id属性,方便定位和滚动
4. 在switchStorage中添加平滑滚动到SFTP配置区域的逻辑
5. 使用$nextTick确保DOM更新后再滚动
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 23:20:06 +08:00 |
|
WanWanYun
|
e5ba17329c
|
功能: 添加管理员上传工具检测和上传功能
- 后端: 添加 GET /api/admin/check-upload-tool 检测工具是否存在
- 后端: 添加 POST /api/admin/upload-tool 允许管理员手动上传exe
- 前端: 管理员界面新增上传工具管理卡片
- 前端: 支持检测工具状态、显示文件信息、手动上传
- 验证: 文件必须是.exe格式且大小>20MB
|
2025-11-12 20:45:17 +08:00 |
|
WanWanYun
|
1e19b41f48
|
优化: 切换视图时自动刷新数据,解决切换存储方式后需要手动刷新的问题
问题描述:
- 用户在设置页面切换存储方式(本地 ↔ SFTP)
- 点击导航栏回到"我的文件"页面
- 文件列表不会自动刷新,显示的还是旧存储方式的文件
- 需要手动刷新浏览器才能看到新存储方式的文件
解决方案:
1. 新增 switchView(view) 方法统一管理视图切换
- 切换到 files 视图:自动加载文件列表
- 切换到 shares 视图:自动加载分享列表
- 切换到 admin 视图:自动加载用户列表和存储统计
- 切换到 settings 视图:无需加载数据
- 防止重复切换:如果已在当前视图则跳过
2. 修改导航栏点击事件
- 从 @click="currentView = 'xxx'"
- 改为 @click="switchView('xxx')"
- 应用到所有4个导航按钮
改进效果:
✅ 用户切换存储方式后,点击"我的文件"立即看到新数据
✅ 所有视图切换都会自动刷新对应数据
✅ 提升用户体验,无需手动刷新页面
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-12 15:49:02 +08:00 |
|
WanWanYun
|
175087c894
|
修复: SFTP存储切换问题 & 添加开发者工具保护
- 修复SFTP按钮被错误禁用的问题
- 用户选择本地存储后可以正常切换回SFTP
- 切换到SFTP时检查是否已配置,未配置则跳转到设置页面
- 添加右键菜单禁用
- 添加F12和开发者工具快捷键禁用
- 添加开发者工具打开检测
- 生产环境禁用console输出
|
2025-11-12 09:13:12 +08:00 |
|
WanWanYun
|
016879885c
|
修复: 移动端UI和部署配置优化
1. 移动端文件列表图片图标大小修复
- 添加响应式CSS规则,图片缩略图自动适配屏幕尺寸
- 移除内联样式,统一使用CSS类管理
- 移动端(768px): 48px x 48px
- 小屏幕(480px): 40px x 40px
2. 设置页面存储切换UI优化
- 用户选择本地存储时自动隐藏SFTP配置表单
- 用户选择SFTP时显示SFTP配置表单
- 优化用户体验,避免混淆
3. install.sh自动配置PUBLIC_PORT
- 部署时自动添加PUBLIC_PORT环境变量
- 非标准端口部署时分享链接自动包含端口号
- 解决IP模式部署分享链接无法访问的问题
|
2025-11-11 23:41:17 +08:00 |
|
|
|
230937eba8
|
修复: 添加原密码验证UI并修复中文文件名乱码
## 问题1: 修改密码缺少原密码验证UI
后端已有current_password验证,但前端没有输入框:
- 用户无法输入当前密码
- 导致密码修改功能无法正常使用
修复内容(前端):
1. app.html: 添加当前密码输入框
2. app.js:
- 添加current_password字段到data
- 添加current_password必填验证
- 请求体中包含current_password
- 成功后清空current_password
## 问题2: 中文文件名上传后乱码
原因:
- multer默认将文件名从UTF-8转换为Latin1编码
- req.file.originalname获取到的是乱码
修复内容(后端):
1. 配置multer.diskStorage自定义文件名处理
2. 在filename回调中将Latin1转回UTF-8:
Buffer.from(file.originalname, 'latin1').toString('utf8')
3. 在上传路由中同样转换originalname
4. 临时文件名使用时间戳+随机数+原始文件名避免冲突
影响范围:
- 所有文件上传操作
- 中文、日文、韩文等非ASCII文件名
测试建议:
- 上传中文文件名文件(如测试文档.pdf)
- 上传emoji文件名
- 修改密码功能完整流程测试
|
2025-11-11 16:09:49 +08:00 |
|
WanWanYun
|
0f133962dc
|
Initial commit - 玩玩云文件管理系统 v1.0.0
- 完整的前后端代码
- 支持本地存储和SFTP存储
- 文件分享功能
- 上传工具源代码
- 完整的部署文档
- Nginx配置模板
技术栈:
- 后端: Node.js + Express + SQLite
- 前端: Vue.js 3 + Axios
- 存储: 本地存储 / SFTP远程存储
|
2025-11-10 21:50:16 +08:00 |
|