fastapiadmin
4554ce943c
Merge pull request #532 from fastapiadmin/dev
...
security(deploy): 生产凭据轮换 + 镜像不再携带口令
2026-10-04 06:40:53 +08:00
zhangtao
1e9e12489d
security(deploy): 生产凭据轮换 + 镜像不再携带口令
...
轮换(MySQL 应用用户 / MySQL root / Redis,实测旧值被拒)
- 旧 MySQL app 口令 → ERROR 1045 (28000) Access denied;旧 root 同被拒
- 旧 Redis 口令 → AUTH failed: WRONGPASS
- 新口令:容器内直连成功;应用健康 db_status=1 / redis_status=1;四端 200;容器全 healthy
- .env 保持 600,轮换前备份 .env.bak-rotate-*
镜像卫生(审计 B3 根治)
- deploy-artifacts.sh 构建时剔除 DATABASE_PASSWORD / REDIS_PASSWORD /
SECRET_KEY / DATA_ENCRYPTION_KEY / DATA_ENCRYPTION_OLD_KEYS / MYSQL_* 口令键,
仅保留主机、端口等非敏感项;口令全部由 compose 运行时注入
- 重建后镜像内 /home/env/.env.prod 口令类键命中 0 条;容器 env 仍持有 4 个密钥且应用正常
- 本地 backend/env/.env.prod 中泄露值清空并 chmod 600
文档
- DEPLOYMENT.md 新增「凭据轮换」标准步骤(含 mysql/redis 健康检查需一并重建、
docker exec -i 会吞脚本 stdin 的排查提示)
- AUDIT-REPORT.md 记录公开仓库历史暴露面与待用户侧吊销项(OpenAI Key)
说明:仓库为 public,历史中真实出现过 OpenAI Key 与旧口令;旧口令本轮已失效,
OpenAI Key 需到控制台吊销(第三方无法代办)。是否用 git-filter-repo 清洗历史见报告 §10。
2026-10-04 06:39:30 +08:00
fastapiadmin
39606882a6
Merge pull request #531 from fastapiadmin/dev
...
审计与修复:安全默认值、异常与错误码统一、部署链路、CI
2026-10-04 06:20:41 +08:00
zhangtao
07795461cd
ci(frontend): 类型检查前先执行生产构建以生成自动导入声明
...
干净检出下 src/types/{auto-imports,components}.d.ts 不存在(由 unplugin-* 在 vite
运行时生成、仓库不跟踪),vue-tsc 会因缺少自动导入声明报大量 TS2304
(ref / h / onMounted / ElMessage / useTable…),导致 web job 在 CI 上必然失败;
本地因存在生成文件而一直为绿。
修复:在「类型检查」前增加「生产构建」步骤(顺便把生产构建纳入 CI 校验)。
已验证:清空生成文件 → build:prod 退出码 0 且重新生成 d.ts → type-check 0 错误
→ vitest 41 passed;app job 不需要生成文件,保持不变。
2026-10-04 06:16:59 +08:00
zhangtao
896320c83e
docs(audit): 补充收尾状态(提交/部署版本、最终验证结果、团队归档与遗留人工项)
2026-10-04 06:02:08 +08:00
zhangtao
a4e8727a86
chore(backend): 新增 basedpyright 校准配置,并修复它暴露的三处真缺陷
...
背景:仓库此前没有 pyright/basedpyright 配置,basedpyright 使用自身默认(≈recommended),
在 app/ 下产生 247 errors / 3799 warnings,其中 143 条是 reportMissingTypeArgument
(未参数化泛型)这类注解完整度噪音,会把真缺陷淹没(例如 OSS 的 Client.uploader 方法误用)。
配置(backend/pyrightconfig.json)
- typeCheckingMode: basic;显式把能抓真缺陷的规则保持为 error
(reportAttributeAccessIssue / reportArgumentType / reportOptionalMemberAccess /
reportIncompatibleMethodOverride / reportConstantRedefinition / reportMissingImports 等)
- 关闭注解完整度与风格类规则;tests/ 用 executionEnvironments 单独放宽(extraPaths 保证 app 可解析)
- 结果:app + main.py + tests 全量 0 errors
- 红绿验证:合成「str | None 传参」「MethodType 上取属性」「Optional 成员访问」三类
仍全部报 error,证明校准没有把真缺陷一起关掉
修复配置暴露的三处真缺陷
1) template_safety.py:_SQLALCHEMY_TYPE_WHITELIST 对全大写常量二次赋值 → 合并为一次成型
2) template_safety.py:normalize_column_type 假定 _TYPE_BASE_RE 必命中(用 # type: ignore 盖住,
None 时 .group() 会崩)→ 改为 None 安全,去掉 type-ignore
3) node/service.py ×2:CustomException(msg=reason) 中 reason 为 str | None,客户端可能收到空文案
→ 新增 SchedulerUtil.require_schedulable() 收敛「判定 + 抛异常 + 兜底文案」,调用点改为一行
验证:basedpyright 0 errors(原 247);ruff All checks passed;pytest 97 passed;
已部署并线上复验(四端 200、Host 收窄、伪造令牌被拒、验证码过期 400 保留业务文案、
容器内 require_schedulable 与 OSS 调用修正均已生效)
2026-10-04 06:00:16 +08:00
zhangtao
b3882559de
fix(storage): 修复类型检查暴露的三处缺陷(含 OSS 上传运行时 bug)
...
basedpyright 报出的三处,逐条定位后发现都不是「标注问题」:
1) oss_adapter.py:70 —— 真运行时 bug
SDK 里 `Client.uploader` 是**方法**(`def uploader(self, **kwargs) -> Uploader`),
原写法 `self.client.uploader.upload_file(...)` 是在绑定方法上取属性,运行时必抛
AttributeError —— 即 OSS 上传链路从未成功过(生产未配 OSS 源,故未暴露)。
已改为 `self.client.uploader().upload_file(...)`,并按 SDK 签名核对
`upload_file(request, filepath, part_size=..., parallel_num=...)` 参数正确。
2) sftp_adapter.py:45 —— 缺主机校验
`config.host` 为 `str | None`(对象存储可不填),却直接传给 paramiko
`connect(hostname: str)`。已把 host 并入既有的用户名/密码守卫,
缺主机时返回业务异常 400「SFTP 存储源必须配置主机、用户名与密码」。
3) ftp_ftps_adapter.py:58 —— 同上
`_new_client()` 增加主机守卫(400「FTP 存储源必须配置主机地址」,并补 CustomException 导入);
顺带修复同文件 `_ImplicitFTP_TLS.connect` 覆写签名与 ftplib.FTP 不兼容
(timeout: float、source_address: tuple[str, int] | None),消除该文件最后一条 error。
验证:basedpyright 这三个文件 0 errors(修复前 4 条);ruff 全绿;pytest 97 passed;
运行时探针:缺主机 → 拦截为 400 业务异常;配主机 → 守卫放行并进入真实连接(ConnectionRefused 如期)。
2026-10-04 05:49:27 +08:00
zhangtao
a8c992cdd3
docs(audit): 更新修复进展——错误码收敛、异常写法统一、前端文案修复与残余项
2026-10-04 05:44:26 +08:00
zhangtao
b95e24618e
fix(web): 错误提示改为后端 msg 优先,去掉业务码白名单耦合
...
- 普通错误分支与 handleError 统一为「data.msg → 业务码兜底 → 状态码兜底 → 通用」,
不再只在 code ∈ {1, 401, -1} 时展示后端文案(此前 4500/404/409 会退化为通用「请求失败」)
- Blob 下载错误分支同样优先解析错误体 msg;401 显式排除在解析外,避免影响令牌静默续期;
非 JSON Blob / 读取失败仍按状态码兜底且不抛额外异常
- 成功下载分支零改动(diff 中 responseType 判断增删行为 0)
背景:后端把错误码收敛为单一事实来源后,内部故障 code 由 -1 变为 4500、资源不存在变为 404,
旧的前端白名单会吞掉这些文案;此处改为 msg 优先后,后端可保持单一事实来源而不牺牲诊断信息。
验证:type-check exit 0;vitest 41 用例(含 HTTP 500+4500 → 「分页查询失败: 连接已断开」、
HTTP 404+404 → 「数据表 tables_0 不存在」、409+未知码 4090、Blob 各态、401 续期不回归)。
2026-10-04 05:44:26 +08:00
zhangtao
644d262cad
refactor(backend): 错误码收敛为单一事实来源,统一异常写法
...
错误码(t16)
- HTTP 语义只由 core/exceptions.py 的 RET.code → fastapi.status 映射决定;
映射表显式登记 -1→400 与全部「数值即 HTTP 状态」的 RET 成员,_DEFAULT_BUSINESS_STATUS
降为「新增码忘登记」的安全网
- 移除冗余 status_code:131 处调用点改为纯 code 表达;security.py/dependencies.py
的 status_code=401/403 去除(映射表已给);get_or_404 → code=RET.NOT_FOUND.code
- 新增静态护栏(AST):app/ 下除 exceptions.py 外不得出现 status_code 传参,
路由装饰器 201 白名单显式放行并断言白名单非空
异常写法统一(t19)
- 删除 CustomException.internal 及 132 处包装:意外异常直接冒泡,由全局
@app.exception_handler(Exception) 统一映射 5xx + 通用文案 + 日志;
需要运维上下文处改为 logger.exception("<业务动作>失败") + raise
- 构造器不再接受 status_code 参数(属性保留,由 code 派生)→ 结构上杜绝第二来源
- 修复 6 处「宽泛 except 把 400 包成 500」的语义反转(补 except CustomException: raise),
并加 AST 护栏防止回潮
- 全局 SQLAlchemyError:非完整性错误由 400 改为 503(连接类)/500(其它),
不再把驱动原文/异常类型拼进客户端 msg;顺带修掉不存在的
status.HTTP_403_SERVICE_UNAVAILABLE 常量(命中即 AttributeError→500)
验证:pytest 97 passed / ruff 全绿;AST 审计残留 0;护栏红绿测试通过;
线上实测验证码过期仍 400 并保留业务文案、无令牌 401。
2026-10-04 05:44:21 +08:00
zhangtao
c73daa7eae
chore(deploy): 健康检查发正确 Host、list 型配置改 JSON、Host 校验收窄
...
- backend 健康检查改为发送正确的 Host 头(而非放宽 ALLOWED_HOSTS);
配合 ALLOW_LOCALHOST_HOSTS=false,Host: localhost 现在返回 400,容器自检仍 exit 0
- OAUTH_ALLOWED_HOSTS / CORS_STRICT_STARTUP / SCHEDULER_ALLOW_CODE_EXEC 接入 compose 注入
- ⚠️ OAUTH_ALLOWED_HOSTS 是 list[str],必须写 JSON 数组:本次部署曾因写成逗号分隔字符串
导致启动期 SettingsError、容器重启、网关 502(已修复,并在 compose 默认值中固化 JSON 形态)
- DEPLOYMENT.md 新增「配置取值格式」章节记录该坑与排查方法
- AUDIT-REPORT.md 更新修复进展(含复核 t12 驳回与 t13/t14 通过、残余项)
线上验证:四端 200;Host=localhost → 400;健康检查 exit 0;公网 docs/.DS_Store → 403
2026-10-04 05:12:37 +08:00
zhangtao
07fa789d2e
fix(backend): 安全默认值、异常语义、代码生成注入面与定时任务内置处理器
...
本批为 t10 → t13 → t15 三轮实现 + 一轮复核驳回整改的最终形态(pytest 83 passed / ruff clean,
已部署并线上验证)。
异常语义
- CustomException 默认状态码 500 → 400(约 433 处裸调用不再被计为服务端故障),
且「包装底层异常」的 130 处显式恢复 500;get_or_404 → 404;响应体结构不变
代码生成注入面(复核 blocker F1,二次修复)
- column_type 不再做字符串拼接:改为常量白名单派生(类型名 ∈ DB_TO_SQLALCHEMY ∪ {Boolean},
长度仅取数字/正则捕获),彻底移除 split("(")[1]
- 列类型加形状白名单;字符串/注释/文档字符串用 \uXXXX,标识符过 safe_ident(含 Python/JS 关键字),
.vue 文本与静态属性改 HTML 实体
- 落盘闸门由 ast.parse 升级为 assert_python_structure(语法 + 顶层语句白名单 + 与哨兵骨架逐节点比对)
与 assert_text_structure(.vue/.ts/.toml 行结构);U+2028/2029 与 C1 控制符纳入转义
安全默认值
- 生产 CORS 不再回落 ["*"](未配置即拒绝跨域,可选 CORS_STRICT_STARTUP 直接启动失败)
- OAUTH_ALLOWED_HOSTS 不再默认 "*";新增 ALLOW_LOCALHOST_HOSTS 控制 Host 校验范围
- ALLOWED_HOSTS 收窄为按配置派生;健康检查暴露 code_exec_enabled / cors_origins_configured
定时任务
- SCHEDULER_ALLOW_CODE_EXEC 默认 False;新增 builtin:<模块名>[.<函数名>] 内置处理器路线(不经 exec)
- 判定收敛到 describe_schedulability;列表返回 schedulable / unschedulable_reason;
启动 reconcile 与状态查询对「已启用但不可调度」打 WARN(去重、恢复后清除)
- 加固:内置处理器必须在本模块内定义或经 HANDLERS 声明,拒绝模块内导入的外部对象(复核 R1)
- 顺带修复:_WARNED_UNSCHEDULABLE 的 set.pop TypeError、job.next_run_time 缺失导致的列表 500
测试:新增 tests/test_generator_template_safety.py、test_security_defaults.py、
test_scheduler_schedulability.py(含恶意载荷、闸门红绿、静态护栏)
2026-10-04 05:12:32 +08:00
zhangtao
007864051a
fix(frontend): 修复 5 条 P0(生产构建开关、令牌刷新、上传路径、WS 与开发地址)
...
- web/vite.config.ts:生产判据由 `mode === "prod"`(恒 false)改为 `production || prod`,
压缩/去 console/剔除 vue-devtools 插件真正生效;同时修正 terser `comments: true`
(是「保留全部注释」,与注释文字相反)为 `"some"`,保留 @license 等版权声明
- app 刷新令牌:改为发送 JSON 字符串(后端为 Body(str)),与 web 端已知可用实现一致,
修掉移动端 token 过期必然 422 强制登出
- app 上传:路径补 /common(真实路径 /api/v1/common/file/upload),并改走统一 http 层的
wd-upload upload-method 钩子,Authorization 由 http 层注入,不再页面自拼 URL
- app 生产 WS:ws://localhost:5180/ws → wss://service.fastapiadmin.com;开发 WS 指向本机
- app 开发接口地址:改为 http://127.0.0.1:8001,与 web 端开发策略一致
复核证据(队长独立执行):web/app type-check 均 exit 0;build:prod 与 build:h5 均 exit 0;
生产包内第一方 console 特征串 9/9 全部 0 命中(剩余 5 处 console 为字符串文案或
第三方 typeof 守卫,非可执行调用);H5 产物内 localhost:5180 命中 0、wss 域名命中 1、
裸 /file/upload 命中 0、/common/file/upload 命中 1。
2026-10-04 04:33:42 +08:00
zhangtao
fb05defb82
docs(env): 补齐密钥与安全相关占位项
...
compose 现在强制要求 SECRET_KEY 等键(fail-closed),.env.example 必须同步提供
占位项,否则照抄示例启动会直接失败。同时移除未被 compose 使用的 HEALTHCHECK_START_PERIOD。
2026-10-04 04:26:27 +08:00
zhangtao
28bf232761
docs(audit): 全栈审计报告(7 份分报告 + 总报告)
...
由 7 名成员并行审计 + 队长线上实测复核产出,合计约 3,600 行:
- backend/audit-backend.md 后端架构与代码质量(22 条)
- backend/audit-security.md 认证/授权/敏感信息(23 条)
- backend/audit-testing.md 测试与可验证性(含真实命令输出)
- backend/audit-requirements.md 需求覆盖对照(多租户规格错位)
- frontend/audit-frontend.md 前端与移动端工程(32 条)
- frontend/audit-uxui.md 交互与视觉一致性
- docker/audit-deploy.md 容器化与部署链路
- AUDIT-REPORT.md 总报告:止血项、修复路线、待决策事项、对既有结论的修正
各报告均标注级别、文件:行号、影响、建议修法,并单列未验证项与抽样边界。
2026-10-04 04:26:11 +08:00
zhangtao
ce9401196a
chore(deploy): 成品部署链路、依赖分组与运维基建
...
部署方式:服务器不再接收源码、不执行构建,改为本地构建成品后交付
- deploy-artifacts.sh:构建→备份→校验→原子替换,支持回滚、镜像/备份轮转、
mysql 与 postgres 双变体镜像;后端以 docker save|ssh|docker load 交付
- 依赖分组:requirements/{base,storage}.txt + db/{mysql,postgres,sqlite}.txt,
镜像按所选数据库只装对应驱动(MySQL 变体 565MB → 521MB)
编排与运行时加固
- compose:MySQL/Redis/backend 端口仅绑 127.0.0.1;密钥(SECRET_KEY、
DATA_ENCRYPTION_KEY、DATA_ENCRYPTION_OLD_KEYS)、PROD_CORS_ORIGINS、
FORWARDED_ALLOW_IPS、DEMO_ENABLE 一律由 docker/.env 注入
- Dockerfile:对齐依赖分组、以非 root(uid=1000) 运行;.dockerignore 排除全部真实 .env.*
- nginx:静态资源长缓存、隐藏文件拒绝、接口文档仅内网可访问、放行 ACME http-01 校验路径
工程基建
- 新增 CI:backend(uv sync + ruff + pytest)与 frontend(web type-check+vitest、app type-check)
- 新增 DEPLOYMENT.md 运维手册(部署/回滚/密钥轮换/每日巡检/证书/排查)
2026-10-04 04:26:03 +08:00
fastapiadmin
1cd12c726a
Merge pull request #530 from fastapiadmin/dev
...
fix(frontend,backend): 修复两处配置与逻辑问题
2026-09-17 20:57:18 +08:00
zhangtao
0cf2e24b92
fix(frontend,backend): 修复两处配置与逻辑问题
...
1. 修复前端节点选择框选项显示异常问题,将字符串数组转为标准label-value格式
2. 简化后端alembic配置文件,移除冗余注释与废弃配置项
2026-09-17 20:56:18 +08:00
fastapiadmin
39767fd0f3
Merge pull request #529 from fastapiadmin/dev
...
Dev
2026-09-14 01:19:33 +08:00
zhangtao
740e334d9e
feat(router): add route invariant checks for deep skip rendering
...
1. add route config check for directory nodes with component in dev mode
2. add runtime guard in page content layout
3. add comprehensive unit tests for route invariants
4. fix vitest config to match vite alias and define app info
2026-09-14 01:18:18 +08:00
zhangtao
24589ad9cd
refactor(router): simplify route cache logic, remove nested parent component
...
重写多级目录路由处理逻辑,移除冗余的NestedRouterParent壳组件,改用RouterView深度跳级直接渲染叶子页面,简化KeepAlive缓存实现,修复多缓存实例导致的重复请求问题。
2026-09-14 01:06:20 +08:00
fastapiadmin
1f8757f826
Merge pull request #528 from fastapiadmin/dev
...
refactor(frontend): 统一组件名匹配KeepAlive缓存逻辑,重构路由缓存机制
2026-09-14 00:33:08 +08:00
zhangtao
2d393247cc
refactor(frontend): 统一组件名匹配KeepAlive缓存逻辑,重构路由缓存机制
...
1. 调整所有页面组件的name为路由/菜单对应的route_name,适配KeepAlive匹配规则
2. 重构路由嵌套缓存逻辑,修复多标签页下重复挂载页面导致接口并发请求的问题
3. 移除冗余的onMounted自动请求代码,统一数据加载逻辑
4. 优化缓存键生成和KeepAlive包含排除规则,确保缓存精准生效
2026-09-14 00:30:06 +08:00
fastapiadmin
4d4a8b3a1f
Merge pull request #527 from fastapiadmin/dev
...
fix: 修复主键类型非Integer时的模型生成与导入问题
2026-09-13 22:18:43 +08:00
zhangtao
f12a40090a
fix: 修复主键类型非Integer时的模型生成与导入问题
...
1. 前端将MySQL主键默认类型从bigint改为int,同步后端代码适配
2. 增加SQLAlchemy主键类型自动导入逻辑,当主键类型不是Integer时自动添加对应导入
3. 重构模型模板,当主键类型与基类不一致时显式覆盖id字段定义
2026-09-13 22:17:49 +08:00
fastapiadmin
cf344383e4
Merge pull request #526 from fastapiadmin/dev
...
refactor(frontend): 优化列表页缓存与数据刷新逻辑
2026-09-13 14:43:31 +08:00
zhangtao
8291c1a494
refactor(frontend): 优化列表页缓存与数据刷新逻辑
...
1. 为详情、评论接口添加禁用缓存配置,获取实时数据
2. 重构useListPage,新增refreshData和reload方法统一数据刷新逻辑
3. 替换原有loadData调用,统一列表页数据更新流程
4. 移除冗余的force缓存配置,通过method.config自定义缓存策略
2026-09-13 14:40:14 +08:00
fastapiadmin
3413b6b58b
Merge pull request #525 from fastapiadmin/dev
...
feat(ticket,monitor): add ticket stats api and optimize server ip fetch
2026-09-12 12:34:14 +08:00
zhangtao
f15fdb86c0
feat(ticket,monitor): add ticket stats api and optimize server ip fetch
...
1. add TicketStatsSchema for work status aggregate
2. add stats method to TicketService to count pending/processing/done tickets
3. add ticket stats api endpoint
4. optimize server local ip detection with fallback logic
2026-09-12 12:33:00 +08:00
fastapiadmin
d9096a1a87
Merge pull request #524 from fastapiadmin/dev
...
refactor: 移除数据大屏页面及相关组件,更新滚动容器逻辑与配置
2026-09-12 01:31:26 +08:00
zhangtao
8d7efb6c58
refactor: 移除数据大屏页面及相关组件,更新滚动容器逻辑与配置
...
1. 移除dashboard数据大屏页面及全部依赖的图表、统计组件
2. 重构主滚动容器选择逻辑,统一使用getMainScrollEl获取滚动元素
3. 更新配置项,添加TRUSTED_PROXY_HOPS与IP2REGION相关配置
4. 替换IP归属地查询为离线本地解析,移除相关HTTP请求配置
5. 简化OAuth与微信小程序登录的background_tasks参数传递
6. 修复系统参数描述与前端提示文案,更新alembic版本清理逻辑
7. 简化页面滚动重置逻辑,过滤隐藏标签页
2026-09-12 01:16:03 +08:00
fastapiadmin
54c23f547b
Merge pull request #523 from fastapiadmin/dev
...
feat(generator): add python plugin template and fix frontend static path
2026-09-10 21:25:00 +08:00
zhangtao
8b63042ecf
feat(generator): add python plugin template and fix frontend static path
...
1. 新增python包初始化模板和插件元数据模板
2. 修复前端静态文件挂载路径硬编码问题,使用配置中的FRONTEND_DIST_DIR
3. 优化代码生成模板中日期验证器的计算逻辑,改用jinja2过滤器一次性计算
4. 新增toml文件的文件图标适配
5. 更新文档说明代码生成后需要重启后端以及静态托管的注意事项
2026-09-10 21:22:09 +08:00
fastapiadmin
954e21e85c
Merge pull request #522 from fastapiadmin/dev
...
refactor: 优化前端缓存与WebSocket连接处理,新增开发指南文档
2026-09-10 00:36:59 +08:00
zhangtao
e39a369bac
refactor: 优化前端缓存与WebSocket连接处理,新增开发指南文档
...
1. 调整FastAPI前端挂载配置,简化目录路径并添加目录检查关闭注释
2. 修复工作标签页清空时的KeepAlive缓存泄漏问题,正确驱逐非固定标签缓存
3. 优化AI聊天页WebSocket连接逻辑,避免连接泄漏与竞态问题,添加生命周期缓存清理
4. 新增全栈开发指南SKILL.md,覆盖工程结构、命令、约定与常见坑点
2026-09-10 00:35:17 +08:00
fastapiadmin
f7f5fb61a5
Merge pull request #521 from fastapiadmin/dev
...
Dev
2026-09-07 02:07:19 +08:00
zhangtao
8cb5f17811
chore: 移除全局 API 与 WS 限流并修复代理配置
...
移除 fastapi-limiter 依赖及相关限流逻辑,更新健康检查请求头并信任反向代理转发头,避免生产环境 HTTPS 误判导致 301 循环。
2026-09-07 01:54:13 +08:00
zhangtao
37b7b8e09c
chore(docker): 调整 dockerignore 排除上传目录
2026-09-07 01:38:38 +08:00
fastapiadmin
60eb7cfbbe
Merge pull request #520 from fastapiadmin/dev
...
chore: 移除 deploy.bat 和 deploy.sh 部署脚本
2026-09-07 01:01:15 +08:00
zhangtao
bddb177d36
chore: 移除 deploy.bat 和 deploy.sh 部署脚本
2026-09-07 01:00:27 +08:00
fastapiadmin
beac011eef
Merge pull request #519 from fastapiadmin/dev
...
feat(work): 支持工单、公告、AI模型页面下拉刷新
2026-09-07 00:22:54 +08:00
zhangtao
14428bffb3
feat(work): 支持工单、公告、AI模型页面下拉刷新
2026-09-07 00:22:02 +08:00
fastapiadmin
89f14d3e62
Merge pull request #518 from fastapiadmin/dev
...
fix(frontend): 修复 el-tabs 受控绑定方式
2026-09-07 00:15:11 +08:00
zhangtao
594c3f63fa
fix(frontend): 修复 el-tabs 受控绑定方式
2026-09-07 00:13:15 +08:00
fastapiadmin
a8ec72dfc9
Merge pull request #517 from fastapiadmin/dev
...
Dev
2026-09-07 00:08:42 +08:00
zhangtao
a8d29d4ab4
fix: 修复多项后端缺陷并加固安全与限流
...
- 修正 AI 会话表初始化及异步数据库 URI 处理
- 新增全局 API 与 WS 聊天限流,健康检查豁免
- 修复忘记密码接口防用户枚举与参数校验
- 修复 SSE 推送数据重复编码问题
- 修复 Cron 表达式 Quartz 问号兼容
- 修复存储模块权限标识前缀
- 新增过期日志清理与任务错误中文提示
2026-09-07 00:08:00 +08:00
zhangtao
30dfc7097b
docs: 更新贡献指南,补充小程序开发说明
2026-09-06 21:19:58 +08:00
zhangtao
45a00334c0
docs: add SaaS multi-tenant platform requirements
2026-09-06 21:19:50 +08:00
zhangtao
e340053efa
docs(readme): 更新项目说明与界面截图
...
补充移动端截图、Docker 部署说明与 Star History,同时更新后端技术栈版本和项目结构描述。
2026-09-06 20:52:11 +08:00
zhangtao
9e80f970d0
refactor(task): 重构定时任务与存储路由
...
- 移除各路由文件顶部冗余注释
- 将 JobRouter/NodeRouter 重命名为 CornJobRouter/CornJobNodeRouter
- 新增存储浏览、节点、传输、工作流路由注册
- 调整路由导入来源与任务表名
- 优化 main.py 启动方式及环境配置加载
2026-09-06 04:14:17 +08:00