OP
|
6696e03910
|
fix: 修复 purposeIdx 未定义导致导入失败
- doImport 中 purposeIdx 变量未定义
- 添加 purposeIdx=header.indexOf('用途') 定义
- 现在导入功能正常工作
|
2026-06-29 01:01:04 +08:00 |
|
OP
|
cab06fb77f
|
fix: 修复导入列名与导出不匹配
- 导入时年利率(%) → 年化率(%)
- 现在导出再导入数据可以正常匹配
|
2026-06-29 00:56:59 +08:00 |
|
OP
|
00d1b96415
|
fix: 导出数据按用户权限过滤
- 普通用户只能导出自己的数据
- 管理员可以导出所有用户数据
- 添加 getVisibleLoans() 函数统一过滤逻辑
|
2026-06-29 00:50:20 +08:00 |
|
OP
|
e5acd0115e
|
fix: 修复导出列顺序,用途移到最后一列
- CSV/JSON/HTML 导出:用途列移到最后
- 下载模板示例数据同步更新
- 导入时正确对应各列数据
|
2026-06-29 00:45:16 +08:00 |
|
OP
|
7a9c19e5c5
|
fix: 更新导出导入字段名
- 借款人 → 债权人
- 年利率 → 年化率
- 新增「用途」列
- 更新下载模板示例数据
- 导入时读取用途字段
|
2026-06-29 00:41:36 +08:00 |
|
OP
|
1aac03b7a4
|
feat: 新增个人中心功能
- 修改昵称改为个人中心
- 个人中心包含:账号(只读)、昵称、邮箱
- 修改邮箱需要旧邮箱验证码验证
- 后端新增 /auth/verify-email 和 /auth/change-email API
- 两个页面同步更新
|
2026-06-29 00:35:47 +08:00 |
|
OP
|
b9b7e2637a
|
fix: analysis.html 同步用户菜单完整功能
- 添加修改昵称/修改密码模态框
- 添加 showChangeNick/showChangePwd/doChangeNick/doChangePwd 函数
- 添加 modal CSS 样式
- 两个页面现在功能完全一致
|
2026-06-29 00:31:49 +08:00 |
|
OP
|
c5697f8b7b
|
fix: 恢复用户菜单(修改昵称/修改密码)
- userInfo 添加 onclick 触发用户菜单
- 添加 userMenu 下拉菜单(修改昵称/修改密码)
- 点击页面其他位置关闭菜单
|
2026-06-29 00:28:42 +08:00 |
|
OP
|
5d5ee9ecdc
|
fix: analysis.html 添加用户昵称显示
- checkAuth 中添加 .textContent 设置
- 分析页面导航栏现在显示用户昵称
|
2026-06-29 00:25:43 +08:00 |
|
OP
|
d27c855e62
|
fix: 删除 analysis.html 重复的导出/导入/退出
|
2026-06-29 00:24:03 +08:00 |
|
OP
|
bc5ce695d2
|
fix: 删除重复的导出/导入/退出元素
- 之前正则替换失败导致两套 header 元素
- 手动删除重复的 export/import/退出
- 现在只有一套正确的导航栏
|
2026-06-29 00:22:13 +08:00 |
|
OP
|
018913f337
|
fix: 恢复 Image 2 的正确导航栏样式
- 恢复原来的 header-inner 布局(space-between)
- 左侧:标题 + 导航标签
- 右侧:通知铃铛 + 用户名 + 管理 + 导出 + 导入 + 退出
- 两个页面样式完全一致
|
2026-06-29 00:18:58 +08:00 |
|
OP
|
3da97f7dd5
|
fix: 修复导航栏布局,元素不再换行
- header-inner 改用 gap 布局,移除 space-between
- max-width 从 1200px 增加到 1400px
- 所有子元素设置 flex-shrink:0
- 三个区域在一行内显示
|
2026-06-29 00:14:57 +08:00 |
|
OP
|
27ad9b6901
|
feat: 恢复导航栏完整功能(通知/导出/导入)
- 两个页面 header 统一添加:通知铃铛、导出按钮、导入按钮、用户信息
- 添加通知相关 JS 函数到 analysis.html
- 添加导出/导入相关 JS 函数到 analysis.html
- 导航栏布局:Logo + 标题 | 首页/分析 | 用户名+通知+导出+导入+管理+退出
|
2026-06-29 00:10:20 +08:00 |
|
OP
|
1aa2f529e7
|
fix: Chart.js 改为本地加载,修复分析页面无数据
- 下载 chart.min.js 到本地(200KB)
- analysis.html 引用改为 /chart.min.js
- Dockerfile 添加 chart.min.js 复制
- 避免 CDN 访问问题导致图表无法渲染
|
2026-06-29 00:07:36 +08:00 |
|
OP
|
d183ca9207
|
fix: 添加 userInfo 元素到 header,修复首页数据加载
- 之前移除 header 时误删了 userInfo span
- JS 中 .textContent 会报错导致页面无法加载
|
2026-06-29 00:04:32 +08:00 |
|
OP
|
f69c8bf510
|
fix: 统一首页和分析页面导航栏为三栏式布局
- 左侧:Logo + 系统名称
- 中间:首页/分析 导航
- 右侧:管理/退出
- 两个页面 header HTML 和 CSS 完全一致
|
2026-06-28 23:56:11 +08:00 |
|
OP
|
156bcb9505
|
fix: 同步 analysis.html 导航栏为三栏式布局
- 添加 header-left (Logo + 系统名称)
- 更新 CSS 为三栏式布局
- 现在两个页面导航栏完全一致
|
2026-06-28 23:50:24 +08:00 |
|
OP
|
8379126f9d
|
style: 优化导航栏布局为三栏式
- 左侧:Logo图标 + 系统名称「债务管理」
- 中间:页面导航(首页/分析)
- 右侧:用户信息和操作按钮
- 增加间距和圆角,视觉更舒适
- header 高度从52px增加到56px
- 导航按钮增加 hover 效果
- 用户名区域增加浅色背景
|
2026-06-28 23:48:33 +08:00 |
|
OP
|
664b845cef
|
fix: 以 analysis.html 为准统一导航栏样式
- 移除 index.html 多余的 -webkit-backdrop-filter 和 padding:0
- 移除 .hdr-btn 样式(analysis.html 无此样式)
- 两个页面 header CSS 现在完全一致
|
2026-06-28 23:46:16 +08:00 |
|
OP
|
012de577d7
|
fix: 统一首页和分析页面的导航栏样式
- analysis.html header-inner 改用 gap 布局
- 添加 white-space:nowrap 防止标题换行
- 添加 flex-shrink:0 防止元素被挤压
- 两个页面的导航栏现在完全一致
|
2026-06-28 23:43:06 +08:00 |
|
OP
|
2d91e73063
|
fix: 修复导航栏布局,确保导航可见
- header-inner 改用 gap 替代 space-between
- h1/nav-tabs/header-right 都设置 flex-shrink:0
- 确保三个元素不会被挤压
|
2026-06-28 23:41:25 +08:00 |
|
OP
|
1bb826e7ac
|
feat: 新增数据分析页面
- 添加导航栏:首页(原有功能)+ 分析(新页面)
- 分析页面包含 5 个专业图表:
- 借款总额 vs 已还总额(环形图)
- 债权人分布(柱状图)
- 还款方式分布(环形图)
- 利率分布(柱状图)
- 月度还款计划(柱状图)
- 使用 Chart.js 图表库
- 首页和分析页面共享导航栏样式
|
2026-06-28 23:38:47 +08:00 |
|
OP
|
a49a5a7cff
|
build: 添加 x86 和 arm64 双架构部署包
- 构建 x86 (linux/amd64) backend 和 frontend 镜像
- 导出 arm64 和 x86 两种架构的 tar.gz 镜像包
- 添加 docker-compose.x86.yml 和 docker-compose.arm64.yml
- install.sh 自动检测架构并加载对应镜像
- 部署包约 200MB (backend 75M x2 + frontend 24M x2 + postgres 106M)
|
2026-06-28 23:07:06 +08:00 |
|
OP
|
75875606a2
|
fix: 修复 admin.html 通知函数引号嵌套错误导致 JS 解析失败
- renderNotifList/renderNotifBadge/loadNotifications 等函数使用了双引号嵌套
- 导致整个 script 块解析失败,所有函数(包括 loadStats/loadGroups/loadUsers)无法执行
- 统一改为单引号,修复管理后台数据不显示和退出按钮失效问题
v2.2
|
2026-06-28 23:01:28 +08:00 |
|
OP
|
498d29dfa9
|
security: 全面安全加固 v2.1
严重修复:
- C1: JWT密钥生成64字节随机字符串替代硬编码占位符
- C2: 数据库密码改为随机强密码,移除宿主机端口映射
- C3: 管理员默认密码改为强密码
高危修复:
- H1: 移除数据库54326端口映射,仅内部网络访问
- H3: 添加X-Frame-Options/CSP/XSS-Protection等安全头
- H4: 前端所有innerHTML拼接处添加escapeHtml转义防XSS
- H5: SMTP密码在API响应中脱敏显示
- H6: 债务列表接口添加用户隔离,普通用户只能看自己的数据
- H7: 债务详情/计划/记录接口添加归属校验
- H8: 账户级暴力破解锁定(5次失败锁定5分钟)
- H9: 速率限制数据增加过期清理机制防内存泄漏
中危修复:
- M1: 注册/重置密码接口添加后端密码强度校验(最少8位)
- M4: 添加全局异常处理器,500错误不再暴露堆栈
- M5: Docker容器改为非root用户运行
- M6: 添加.dockerignore排除pyc和敏感文件
- M7: 管理员操作写入审计日志
- M8: CORS限制为实际使用的HTTP方法和头
其他:
- Nginx隐藏版本号(server_tokens off)
- 管理员角色修改添加枚举校验
- 密码重置验证码接口返回统一错误信息
|
2026-06-28 22:46:24 +08:00 |
|
OP
|
ead41e2b8e
|
fix: 修复注册接口和 refresh 接口账号枚举漏洞
- /register: 已存在账号返回相同成功消息,不再暴露账号是否存在
- /refresh: 将 'User not found' 改为 'Token 无效'
- 防止攻击者通过错误提示枚举有效账号
|
2026-06-28 22:37:18 +08:00 |
|
OP
|
4f9a5af306
|
fix: 修复找回密码接口账号枚举漏洞
- verify-reset-code: 将'账号不存在'改为'验证码错误或已过期'
- reset-password: 将'账号不存在'改为'验证码错误或已过期'
- 防止攻击者通过错误提示枚举有效账号
|
2026-06-28 22:35:21 +08:00 |
|
OP
|
ffca168dbe
|
v2.1: 新增通知提醒功能和安全增强
功能:
- 通知提醒系统: 还款日提醒、逾期提醒、系统消息横幅、登录时通知
- 通知中心UI: 铃铛图标 + 下拉列表 + 未读徽章
- 定时任务: APScheduler 每小时检查即将到期的还款
- 邮件通知: SMTP 发送还款提醒和安全警告
- 异常登录通知: 3/5/10次失败触发网页和邮件通知
安全:
- 登录安全告警: 异常登录次数达到阈值时发送通知
- 密码重置链接: 一次性使用, 5分钟有效期
- 登录频率限制: IP级和账户级限制
技术:
- 后端: FastAPI + SQLAlchemy + PostgreSQL
- 前端: 纯 HTML/CSS/JS
- 部署: Docker Compose (新增 build 配置)
|
2026-06-28 18:06:56 +08:00 |
|