87 Commits

Author SHA1 Message Date
zyc
43228d255e fix celery 2026-04-04 10:15:23 +08:00
seaislee1209
a4c36e4fee fix: v0.15.1 生成记录软删除 + 双重结算修复
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 4m50s
1. 软删除:GenerationRecord 新增 is_deleted 字段,DELETE 接口改为标记不真删,
   用户生成列表/资产页/任务详情过滤已删除记录,消费记录和管理后台不过滤
2. 双重结算修复:前端轮询(video_task_detail_view)不再调火山API和结算,
   只读数据库状态,结算完全交给 Celery
3. _settle_payment 加防重入检查(frozen_amount==0 直接 return)
4. 部署需跑 migration 0016_add_is_deleted_to_generationrecord

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 20:05:08 +08:00
seaislee1209
b50ad147cd feat: v0.15.0 Seedance 2.0 Fast 模型上线 + 四档计费
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m0s
- Fast 模型:取消隐藏 Toolbar 选项,用户可选 AirDrama / AirDrama Fast
- 四档计费:按模型+有无视频参考选单价(2.0: 46/28, Fast: 37/22 元/百万tokens)
- QuotaConfig 新增 base_token_price_fast / base_token_price_fast_video 字段
- 系统设置页 4 个价格输入框(Seedance 2.0 + Fast 各两个)
- 前端预估动态选价:根据当前选的模型和有无视频参考实时计算
- 推理接入点:Fast EP ep-m-20260329211530-68999
- 消费记录表格+CSV+详情弹窗加"模型"列
- 轮询间隔改为全程固定 5 秒

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 20:33:02 +08:00
seaislee1209
7a358ea9ef fix: v0.14.3 GenerationRecord 加 updated_at + 轮询改固定5秒
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m25s
- GenerationRecord 加 updated_at 字段(之前只在 QuotaConfig 上,Celery 查 GenerationRecord 报 FieldError)
- 后端轮询间隔从渐进式(5s→15s→30s)改为全程固定 5 秒(RPM 12000 足够,400 并发仅用 40%)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 18:33:29 +08:00
seaislee1209
1b707282ae fix: Docker 构建加 --no-cache 禁用缓存(修复 Celery 镜像代码过期)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m37s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 17:21:25 +08:00
seaislee1209
99c7e9f4bb chore: 触发重新构建镜像(修复 Celery updated_at FieldError)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m38s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 17:01:22 +08:00
seaislee1209
57270a7faf fix: 重新添加 updated_at migration(修复线上 IntegrityError)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m13s
Model 有 updated_at 字段但线上数据库缺少该列,INSERT 时报
"Field 'updated_at' doesn't have a default value",导致视频生成 500。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 04:09:47 +08:00
seaislee1209
4138d374df Revert "fix: 添加 GenerationRecord.updated_at 字段(修复 Celery 僵尸任务恢复报错)"
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m14s
This reverts commit 81f9cc923a9c6458f7ac49dd382a7d32ab404ef8.
2026-03-29 03:58:28 +08:00
seaislee1209
81f9cc923a fix: 添加 GenerationRecord.updated_at 字段(修复 Celery 僵尸任务恢复报错)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m32s
recover_stuck_tasks 和 poll_video_task 依赖 updated_at 字段判断僵尸任务,
但该字段未在 model 中定义,导致 Celery worker 持续报 FieldError,所有异步轮询失败。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 03:46:10 +08:00
seaislee1209
b25d1f3e8c fix: v0.14.2 修复长提示词标签被挤出可视区域
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m16s
- 截断计算时预留mention标签的额外渲染宽度(每个约24px),防止标签被overflow:hidden裁掉

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 02:55:02 +08:00
seaislee1209
973a4f049d feat: v0.14.2 推理接入点EP + 参考图片上限9张 + reEdit标签修复
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m34s
- 推理接入点:model字段优先使用EP接入点ID(ARK_ENDPOINT_SEEDANCE环境变量),无EP降级到模型ID
- 参考图片上限:提交时校验image类型不超过9张,超限返回友好中文提示
- 上传图片标签编号:接着已有素材编号,不再从1重新计数
- 轮询同步assetMentions:polling完成时同时更新references和assetMentions
- reEdit标签修复:用纯文本prompt重建标签,避免blob:URL失效导致图片标签丢失

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 01:43:35 +08:00
zyc
6853b08fc9 refactor: 切换 Celery broker 为火山引擎 Redis + 僵尸任务自动恢复
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m16s
- Redis 从阿里云切换到火山引擎(同区域低延迟)
- delay() 失败改为 warning 日志 + 重试一次(不再静默吞异常)
- 新增 recover_stuck_tasks 定时任务,每10分钟扫描卡住的任务重新派发
- 轮询时每次 touch updated_at,防止活跃任务被误判为僵尸
- Celery worker 启用内嵌 Beat 调度器(-B 参数)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 10:26:04 +08:00
seaislee1209
3cdeb55367 chore: 移除误创建的 docs 文件(正确位置在仓库外 AirDrama 根目录)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 4m7s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:34:51 +08:00
seaislee1209
b219c01ea7 docs: 更新版本管理和项目总览(v0.14.1)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 4m47s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:28:20 +08:00
seaislee1209
f3f8d08b56 feat: v0.14.1 视频参考双单价 + Token刷新防抖 + CSV导出上限
- 计费双单价:含视频输入28元/百万tokens,不含视频输入46元/百万tokens
- QuotaConfig 加 base_token_price_video 字段,系统设置页两个并排输入框
- 预估费用和实际结算按参考素材类型自动选择单价
- Token 刷新加锁:同页面内并发 401 共用一次 refresh 请求
- 关闭 BLACKLIST_AFTER_ROTATION:防止快速刷新导致误登出
- ProtectedRoute 容错:请求中断时自动重试,不误跳转
- CSV 导出上限从 100 提升到 10000

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 23:25:58 +08:00
zyc
35ebb55893 refactor: 切换 Celery broker 为阿里云 Redis,移除自建 Redis Pod
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m28s
复用现有阿里云 Tair 实例(db8),减少集群内 Pod 数量和运维负担。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 13:32:47 +08:00
seaislee1209
60713ea009 feat: v0.14.0 后端异步轮询(Celery + Redis)
Some checks failed
Build and Deploy / build-and-deploy (push) Has been cancelled
- Celery 异步任务:任务提交后后端持续轮询火山 API 直到拿到终态,用户关浏览器也不会丢视频
- 渐进式轮询:前2分钟每5秒、2-10分钟每15秒、10分钟后每30秒
- 优雅降级:无 Redis 时静默跳过,不影响现有前端轮询
- K8s:新增 Redis Deployment + Service、Celery Worker Deployment
- CI/CD:deploy.yaml 自动部署 Redis/Celery,每次推代码自动重启 celery worker
- 兜底:poll_stuck_tasks management command 清理僵尸任务

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 13:27:16 +08:00
seaislee1209
911f3c158b feat: v0.13.3 消费记录详情弹窗 + 参考素材预览下载 + CSV 全量导出
Some checks failed
Build and Deploy / build-and-deploy (push) Has been cancelled
- 消费记录点击行弹出任务详情弹窗(任务ID、状态、错误原因+原始错误、基本信息、完整提示词、参考素材)
- ReferenceList 共用组件:图片点击大图、视频/音频点击播放、下载按钮
- VideoDetailModal 参考素材加播放和下载按钮
- 素材库引用图片修复:用 thumb_url 替代 asset:// 显示,轮询时也更新 references
- raw_error 字段:存储火山原始错误信息,仅管理员弹窗可见
- CSV 导出扩充至 21 列(超管)/ 17 列(团管):新增任务ID、完成时间、视频时长、比例、种子值、原始错误、参考素材数

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 13:10:28 +08:00
seaislee1209
49616128da feat: v0.13.2 消费记录增加耗时列
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m31s
- GenerationRecord 新增 completed_at 字段,任务完成/失败时记录时间
- 超管/团管/个人消费记录 API 返回 completed_at
- RecordsPage、TeamRecordsPage 表格新增"耗时"列
- CSV 导出包含耗时字段
- 历史记录 completed_at 为空显示"-"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 01:56:26 +08:00
seaislee1209
7a0be57227 fix: v0.13.1 烂图修复 + 额度检查修正
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m46s
【烂图修复】
①backendToFrontend 过滤空 URL 引用
②@ 弹窗音频显示音符符号而非烂图
③hover 预览音频显示音符而非烂图
④视频详情空 previewUrl 显示「无预览」

【额度检查修正】
⑤spending_limit 检查:已完成用 cost_amount,处理中用 frozen_amount
⑥超限提示改为显示总额度/已消费/剩余/本次预估

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 00:47:23 +08:00
seaislee1209
727be720b4 feat: v0.13.0 主副管理员 + 素材引用 bug 修复 + admin 保护
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 17m15s
【主副管理员】
①User 加 is_team_owner 字段,现有团管自动升为主管
②主管可指定/取消副管理员,副管不能再指定别人
③副管不能禁用/修改其他管理员
④超管团队详情支持三种角色显示和切换

【素材引用 bug 修复】
⑤span.replaceWith('') → span.remove(),删除引用后标签真正移除
⑥switchMode 时清空 assetMentions,切换模式不带旧素材
⑦fallback 只在纯文本时生效,用户删标签后不再偷偷加回
⑧后端跳过未解析的 asset:// URL,不发给火山 API

【admin 保护】
⑨admin 账号不可被任何人禁用
⑩admin 密码不可被其他超管重置

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 00:14:58 +08:00
seaislee1209
f4255a04ee fix: 公告弹窗改为 CSS Module 规范
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 10m8s
inline style 改为 CSS Module,z-index/圆角/关闭按钮与其他弹窗统一

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 22:13:42 +08:00
seaislee1209
0ab5523ed1 feat: v0.12.6 公告弹窗 + HTML 编辑器
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m5s
①公告改为弹窗(用户未读自动弹出,已读不再弹)
②生成页右上角小铃铛按钮可重新查看公告
③公告支持 HTML 渲染(加粗/红字/蓝字/标题/分割线/列表)
④超管公告编辑器加格式工具栏 + 预览按钮
⑤去掉旧的公告横幅

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:57:58 +08:00
seaislee1209
a026c04310 feat: v0.12.5 admin 保护 + 管理员角色切换 + 团队详情加宽
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m37s
①admin 账号不可被禁用(包括自己,防误操作)
②admin 密码不可被其他超管重置(admin 自己可以)
③超管可在团队详情点击角色切换成员/管理员
④团队详情弹窗宽度 1080→1280px

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 20:16:57 +08:00
seaislee1209
969283690f fix: 素材 API 错误信息中文映射(同 Seedance 模式)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m27s
AssetsAPIError 加 user_message,按 code/关键词映射中文提示,用户不再看到英文错误

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:26:45 +08:00
seaislee1209
0a1a3a266c feat: v0.12.4 素材库优化 + UI 修复
①素材组名字自动从火山同步(打开素材库时一次 API 调用)
②空素材组显示「暂无图片」替代烂图(列表页 + @搜索弹窗)
③@搜索支持英文角色名(去掉中文正则限制)
④素材上传页显示图片尺寸要求红字提示
⑤图片尺寸报错改为白话文案
⑥个人中心页面支持滚动

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 18:18:06 +08:00
zyc
6d4142fff0 fix picture upload
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m59s
2026-03-23 14:24:52 +08:00
zyc
9113cdafc3 Add logs by api
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 3m0s
2026-03-23 14:16:59 +08:00
zyc
27012a8809 Fix IP and video sources
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 4m1s
2026-03-23 14:06:59 +08:00
seaislee1209
aa538443b6 feat: v0.12.3 种子值支持 + UI 修复
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m10s
①Seed 种子值全链路(后端传入/保存火山返回的seed/API返回,详情弹窗显示)
②前端种子值控件暂禁用(样式待调整)
③空页面文案改为品牌彩蛋 Every frame was once just air.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 23:22:22 +08:00
seaislee1209
493b30c6b9 fix: source map 禁用 + MD5 改 SHA256
①vite build sourcemap: false,防止源码泄露
②tos_client.py 文件去重哈希从 MD5 改为 SHA256

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 21:58:52 +08:00
seaislee1209
9a6a8c964a fix: S6 错误信息泄露修复 — str(e) 改为通用中文提示
4处直接返回给用户的 str(e) 改为通用提示,详细错误仅记日志

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 21:55:58 +08:00
seaislee1209
c381784207 feat: v0.12.2 收藏功能 + UI 修复
①视频收藏(is_favorited + toggle API + 卡片/详情页收藏按钮 + 资产页「我的收藏」筛选)
②联网搜索按钮永久禁用(待开放)
③音频标签加音符符号,hover 不弹预览
④轮询完成后自动更新 token/费用(不用刷新页面)
⑤超管/团管内容资产页视频详情加上下切换箭头

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 21:36:20 +08:00
seaislee1209
afcff9455f feat: v0.12.1 安全加固补充 + 短信测试按钮
①Refresh Token 轮换(ROTATE_REFRESH_TOKENS + BLACKLIST_AFTER_ROTATION)
②前端 token 刷新时保存新 refresh token(auth store + axios 拦截器)
③短信告警测试按钮(/admin/test-sms + 系统设置页按钮)
④安全审查完成:S2 git 历史无泄露、S4 无攻击面、S7 nginx 已配、S10 全接口有权限

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 19:38:42 +08:00
seaislee1209
203603f69a feat: v0.12.0 用户总额度 + 并发控制 + 团管消费记录 + 安全加固
①用户总消费额度(User.spending_limit,默认-1不限,花完即停,含冻结中任务)
②团队并发任务控制(Team.max_concurrent_tasks,默认5,超限拒绝)
③额度检查竞态修复(Layer 1-4 全部移入 transaction.atomic + select_for_update)
④查询参数类型保护(_safe_int 替换所有裸 int() 调用,防 500)
⑤团管消费记录页(/team/records,按用户/日期筛选 + CSV 导出)
⑥超管用户页/团管成员页新增总额度列和编辑
⑦超管团队页新增并发列和内联编辑
⑧失败原因 tooltip 改右对齐防裁剪

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 18:53:56 +08:00
seaislee1209
6a5ddbaf78 feat: v0.11.2 图片缩略图优化 + 素材库修复 + UI 细节
图片缩略图优化:
- 新增 tosThumb() 工具函数,TOS 图片按显示尺寸 2x 加载缩略图
- 所有小图(任务卡片、mention 标签、hover 预览、素材库、输入栏参考图)全部走缩略图
- 原图仅在 ImageLightbox 大图预览和提交生成时使用
- tosThumb 只匹配 airdrama-media 桶,不影响火山内部桶 URL

素材库修复:
- 旧数据图片从火山桶同步到我们 TOS 桶(一次性脚本)
- 素材详情页图片支持点击看大图(ImageLightbox)
- 弹窗高度固定 85vh,三个视图高度一致
- 列表页点击图片进素材组,不触发预览
- 视频敏感内容错误码映射补充

UI 细节:
- 任务卡片参考图 hover 预览(上方弹出)
- 详细信息弹窗延迟关闭(鼠标可移到弹窗上)
- 删除@后 mention 弹窗自动关闭
- 导航箭头禁用时不触发关闭弹窗

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 16:13:04 +08:00
seaislee1209
328cbc147d fix: v0.11.1 隐藏 AirDrama Fast 选项(火山未开通)
- Toolbar modelItems 注释掉 Fast 选项,用户只能选标准版
- 外部团队测试时选 Fast 会报 model not found 错误

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 03:29:54 +08:00
seaislee1209
6c364f4c3f feat: v0.11.0 素材库功能 + 生成页面 UI 优化
素材库(虚拟人像):
- 后端:AssetGroup/Asset 模型 + 火山 Assets API 客户端 + 7 个 API 端点
- 前端:素材库管理弹窗(上传/浏览/追加/改名/状态轮询)
- PromptInput:@ 搜索素材库 + mention 标签(缩略图+名字)
- 提交生成时提取 asset:// 引用并去重
- 打开素材详情时自动检查云端状态,已删除的自动清理
- 后端 reference_snapshots 存储 thumb_url,刷新后标签缩略图和 hover 预览正常

生成页面 UI:
- 提示词 hover 即梦风格:原位展开玻璃底覆盖视频,不弹浮层
- 标签(AirDrama/时长/比例)inline 排列,溢出时 canvas 截断
- 详细信息弹窗支持鼠标移上去不消失(延迟关闭),增加 token/费用信息
- 任务卡片/视频详情页提示词标签化(renderPromptWithMentions)
- 视频详情页底部去掉重复按钮,信息栏 flex-wrap 自动换行

mention 标签:
- 输入框内剪切/复制粘贴保留标签(handlePaste 检测 text/html)
- 拖拽标签跟手(caretRangeFromPoint + drop 位置精确插入)
- 拖拽时 hover 预览自动关闭,InputBar 蓝边仅外部文件拖入时触发

其他:
- 联网搜索按钮(暂禁用,等火山确认 API)
- card max-width 800→1024,参考图缩略图 48→56px 居中对齐
- 导航箭头禁用时不触发关闭(去掉 pointer-events:none)
- API 错误信息附带原始报错便于排查

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 03:11:05 +08:00
seaislee1209
5bb49b5940 feat: v0.10.3 用户在线状态 + logout 会话清理
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m19s
- 用户管理/团队详情/内容资产页用户名前显示在线状态(绿点/灰点)
- 基于 ActiveSession 表判断在线状态(Exists 子查询)
- 新增 POST /auth/logout 接口,退出时清除 ActiveSession
- 前端退出登录时先用 fetch 发 logout 请求再清 token,确保会话被正确删除

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 01:30:30 +08:00
seaislee1209
b25a839d44 fix: updateTeam 类型定义补充 markup_percentage,修复线上构建失败
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m40s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 01:23:00 +08:00
seaislee1209
62356c7e3f Merge branch 'main' of https://gitea.airlabs.art/zyc/video-shuoshan
Some checks failed
Build and Deploy / build-and-deploy (push) Failing after 2m56s
2026-03-21 00:44:22 +08:00
seaislee1209
699a390f45 fix: v0.10.2 — admin重新编辑隐藏/frozen防负数/进度条刷新保持/navigate修正
- admin资产页视频详情隐藏「重新编辑」按钮(hideReEdit prop)
- 团管重新编辑跳转修正:navigate('/') → navigate('/app')
- _release_freeze 防止 frozen_amount 变负数
- 生成进度条用 sessionStorage 持久化,刷新页面后从之前位置继续

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 00:24:14 +08:00
seaislee1209
ef2212e345 fix: v0.10.1 验收修复 — 重新编辑按钮/Decimal序列化/仪表盘布局/.env.local自动加载
- 视频详情弹窗「重新编辑」按钮改为所有视角可见(admin/团管点击跳转生成页回填数据)
- 团队详情月消费限额/加价率支持内联编辑,保存后列表同步刷新
- 修复 Decimal not JSON serializable(审计日志 before/after 字段)
- 允许月消费限额输入 -1(不限制),fmtMoney 显示「不限」
- 仪表盘利润卡片移至第二行,团队/用户排行显示有秒数消耗的历史数据
- 资产页视频详情显示参考图片缩略图(reference_urls→references映射)
- Toolbar 预估消耗仅在有内容时显示,全部清空与预估文字对齐
- settings.py 自动加载 backend/.env.local(本地开发免手动source)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 22:38:44 +08:00
seaislee1209
9259988094 feat: v0.10.0 计费体系重构 — 秒数→金额+次数,token追踪,利润分析
## 计费体系
- 团队额度从秒数改为金额(余额/冻结/月消费上限)
- 用户限额从秒数改为次数(每日50次/每月1500次)
- 新增 billing.py 工具模块(分辨率→像素映射 + token/费用计算)
- 扣费流程:预扣制→冻结制(提交冻结预估金额,完成按实际tokens扣费,失败释放)
- 允许小额透支(实际费用超预估时余额可变负)
- 团队加价比例(markup_percentage),创建团队时必填

## Token 追踪
- GenerationRecord 新增 tokens_consumed/cost_amount/base_cost_amount
- 任务完成时从 Seedance API usage.total_tokens 获取精确值
- 生成页显示预估消耗(tokens + 金额),按团队售价计算

## 管理后台
- 仪表盘新增利润分析板块(总收入/成本/利润/利润率 + 团队利润排行)
- 消费记录新增 Tokens/售价/成本/利润列
- 团队管理:充值改为充金额,新增加价比例设置
- 系统设置:默认限额改为次数,新增基础token单价配置

## Bug 修复
- 登录弹窗:拖选输入框内容不再误关闭(onClick→mousedown+mouseup)
- 视频详情弹窗:遮罩层覆盖全视口(left:76px→0),admin/团管侧栏不再露出

## UI 增强
- 图片大图预览:上传区和视频详情弹窗的图片支持点击查看大图(ImageLightbox)
- 移除 adaptive 比例和智能时长选项,确保 token 预估可精确计算
- 视频详情弹窗显示实际消耗 tokens 和费用

## 前端全量更新
- 所有页面秒数显示替换为金额(元)和次数(次)
- TypeScript 类型全量更新
- API 调用参数同步更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 20:32:12 +08:00
seaislee1209
277de4651f fix: 管理后台 UI 优化 — 表格撑满全屏 + 弹窗实心背景 + 设置页/仪表盘双列布局
- 所有表格页面移除 max-width: 1200px,撑满可用宽度
- 表格 td 加 white-space: nowrap 防止长文本折行
- AdminLayout 修改密码弹窗 background 改为实心 #16161e(修复半透明看不清)
- 系统设置页改为双列 grid(配额+设备限制并排,公告+异常检测整行)
- 仪表盘改为撑满 + 团队/用户排行双列并排

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 16:47:41 +08:00
zyc
a389495ee7 add change host
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m21s
2026-03-20 16:25:22 +08:00
zyc
e04712cc79 feat: 接入阿里云短信告警通知(dysmsapi)
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m10s
异常检测触发时,在飞书告警基础上同时发送短信通知。
签名:广州气元科技,模板:SMS_503445109。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 17:23:36 +08:00
seaislee1209
6a0311d599 fix: LoginRecord 创建时显式传 geo 空字段,修复 MySQL 严格模式 IntegrityError
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m24s
MySQL 严格模式下 CharField 即使模型定义了 default='',CREATE 不传字段仍报错。
显式传入 geo_country/geo_province/geo_city/geo_source='' 解决。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 16:16:46 +08:00
zyc
cc8cfe60cf Switch deployment from kubectl to SSH for EC certificate compatibility
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 2m33s
K3s uses EC certificates which CI kubectl cannot parse. Deploy via SSH
to server where local kubectl works natively.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:57:01 +08:00
zyc
ecde54b8d8 Upgrade kubectl to v1.34.1 for EC certificate compatibility
Some checks failed
Build and Deploy / build-and-deploy (push) Failing after 3m36s
K3s uses elliptic curve certificates which older kubectl versions cannot parse.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-19 14:50:05 +08:00