# P10-NS4-03:数据导出功能的规范 ## 简要结论 - 状态:❌ 未解决 - 租户管理后台(tenant-admin)无任何业务数据导出功能。后端无导出端点,前端无导出按钮,数据库无导出日志表。现有的"下载"功能仅限 Excel 空白模板下载和系统管理后台的环境配置导出,均与业务数据导出无关。 ## 详细审查 ### 数据库端 搜索范围:`db/zqyy_app/` 全部 SQL 文件 结果: - **无导出日志表**:`biz` schema 下无 `export_log`、`download_log` 等导出记录表 - **现有表**:`biz.excel_upload_log` 仅记录 Excel **上传**操作(upload_type: expense/platform_income/salary_adj/recharge_commission),无导出相关字段 - **无导出审计字段**:任何现有表均未包含导出时间、导出人、导出格式等审计字段 ### 后端代码 搜索范围:`apps/backend/app/routers/` 全部 tenant_*.py 文件 + 全部路由文件 逐文件审查结果: | 路由文件 | 导出相关端点 | 说明 | |----------|-------------|------| | `tenant_auth.py` | 无 | 仅登录/鉴权 | | `tenant_users.py` | 无 | 用户审核+管理,无导出 | | `tenant_excel.py` | `GET /template/{type}` | **模板下载**(空白 Excel 模板),非数据导出 | | `tenant_clues.py` | 无 | 线索 CRUD,无导出 | | `env_config.py` | `GET /export` | **环境配置导出**(admin-web 专用),非业务数据 | 关键发现: 1. `tenant_excel.py` 包含 `download_template()` 函数,使用 `openpyxl` + `StreamingResponse` 生成空白模板文件,仅含表头和格式说明,不含任何业务数据 2. 后端无通用导出工具模块(无 `export_to_excel`、`export_to_csv` 等工具函数) 3. 全局搜索 `def.*export` 仅命中 `env_config.py` 的 `export_env_config()`(系统管理后台功能) ### 前端代码 #### tenant-admin(租户管理后台) 搜索范围:`apps/tenant-admin/src/` 全部文件 页面清单与导出功能: | 页面 | 路径 | 导出按钮 | 说明 | |------|------|---------|------| | Login | `pages/Login/` | 无 | 登录页 | | UserApproval | `pages/UserApproval/` | 无 | 用户审核 | | UserManagement | `pages/UserManagement/` | 无 | 用户管理 | | ExcelUpload | `pages/ExcelUpload/` | 无 | 仅有模板**下载**按钮(`DownloadOutlined` + `handleDownloadTemplate`) | | RetentionClues | `pages/RetentionClues/` | 无 | 维客线索管理 | 结论:5 个页面均无数据导出功能。ExcelUpload 页面的 `DownloadOutlined` 图标用于下载空白模板,非数据导出。 #### admin-web(系统管理后台,参考) 搜索范围:`apps/admin-web/src/` 全部文件 - `EnvConfig.tsx`:有"导出"按钮,调用 `exportEnvConfig()` 导出去敏感值的 `.env` 配置文件 → 运维功能,非业务数据导出 - `OpsPanel.tsx`:`CloudDownloadOutlined` 用于 Git Pull 操作 → 非数据导出 - **无业务数据导出功能可参考** ### 差距分析 review-report.md 中 P10→NS4 缺失项 #3 指出:P10 §数据导出 位置隐含了管理后台应支持数据导出,但 NS4 完全未提及。 作为管理后台,以下场景存在合理的导出需求但均未实现: | 导出场景 | 数据源 | 潜在用户需求 | 当前状态 | |----------|--------|-------------|---------| | 用户列表导出 | `auth.users` | 租户管理员需要离线查看/统计用户信息 | ❌ 无 | | 审核记录导出 | `auth.user_applications` | 审核工作量统计、合规审计 | ❌ 无 | | Excel 上传历史导出 | `biz.excel_upload_log` | 上传操作追溯、数据核对 | ❌ 无 | | 维客线索导出 | `member_retention_clue` | 线索数据离线分析、交接 | ❌ 无 | | 助教奖罚明细导出 | `biz.salary_adjustments` | 工资核算、财务对账 | ❌ 无 | 补充说明: - P10 spec 本身也未明确列出"数据导出"功能(无 AC、无任务项),但 review-report 将其标记为隐含需求 - P7-NS1-10 审查(绩效明细导出)结论同样为 ❌ 未解决,说明整个项目目前缺乏通用的数据导出基础设施 ### 建议 1. **明确需求优先级**:数据导出为隐含需求,建议在 NS4 spec 中明确标注为"后续迭代项"或"MVP 不含",避免歧义 2. **如需实现,建议分两步**: - **Step 1 — 通用导出基础设施**: - 后端新增 `apps/backend/app/utils/export_helper.py`,封装 openpyxl 生成 Excel 的通用逻辑(列定义、数据填充、StreamingResponse 包装) - 新建 `biz.export_log` 表记录导出操作(who/when/what/row_count),满足审计要求 - **Step 2 — 逐页面接入**: - 用户列表:`GET /api/tenant/users/export?format=xlsx` - 审核记录:`GET /api/tenant/applications/export?status=&format=xlsx` - 维客线索:`GET /api/tenant/customers/{member_id}/clues/export` - 上传历史:`GET /api/tenant/excel/logs/export` 3. **权限控制**:导出操作应复用现有的 `require_tenant_admin()` 鉴权 + `site_id IN (管辖列表)` 数据隔离,确保导出数据不越权 4. **导出格式**:建议统一 `.xlsx`(已有 openpyxl 依赖),暂不支持 CSV(避免中文编码问题) 5. **NS4 spec 补充建议**:在 NS4 文档"三、功能详细设计"中新增 §3.5 数据导出,定义支持导出的页面清单、导出格式、权限规则、导出日志记录要求