Files
reimburse/PROJECT-ADMIN.md
T
2026-09-13 15:20:40 +08:00

67 lines
6.5 KiB
Markdown

# 管理端接入
## 已批准报销导出 PPT
报销审批页新增“导出 PPT”弹窗。自动分页加载当前项目/组别权限范围内的已批准申请,不局限于审批列表已加载的 100 条;支持按组别、账户和提交日期(含起止当天)筛选、逐条勾选、全选筛选结果及跨筛选累计选择。相同姓名通过账户 ID 区分。审批列表已有选择会带入弹窗,但待审核、退回的申请不会带入。
默认按项目/组别、姓名/账户、提交日期升序排列,也可改为人员优先或日期优先;并列记录按申请编号排序。弹窗列表与输出使用同一排序。底部显示已选数量、金额及当前筛选外的已选数量,避免切换筛选后误解导出范围。每批最多 100 笔,原始附件合计不超过 200 MB;分页超过 10,000 条时明确报错,需缩小组别范围,不静默截断。
导出前重新查询每笔申请的管理权限、批准状态和版本,附件仍经原有鉴权下载接口获取。复用本地贴票的 1280×720 PPT 版式:每笔附归属信息页,发票逐页大图、付款凭证最多四张一页;已上传照片与自定义材料自动贴入,PDF 全页展开(单份最多 100 页、合计最多 1,000 个材料页,超过时拒绝并提示分批)。不同申请的凭证不混排;没有附件时明确注明。日期是提交日期,不是审批时间或票面时间。
可取消、失败后保留选择、成功后在 Finder 中显示文件。中间文件使用独立临时目录并清理,完成后才原子写入所选位置;不改动本地贴票工作区,不执行 OCR 自动匹配,也不改变报销状态。原本地贴票导出逻辑保持不变。
本功能不需改后端或迁移数据库。因新增本地引擎指令 `approved-ppt`,更新后必须先运行 `bash native-engine/build-engine.sh` 再重新构建 Mac 应用,不能只更新 Swift 界面而沿用旧引擎。
回归验证:`.build-tools/bin/python -m unittest discover -s native-engine/tests -v`;使用匹配的 Xcode 工具链运行 `swiftc reimburse/AdminModels.swift tests/AdminPPTSelectionTests.swift -o /tmp/admin-ppt-selection-tests && /tmp/admin-ppt-selection-tests`。真机需验收多页 PDF、同名不同账户、跨组勾选、网络失败、取消及保存目录权限。
## 报销类型页面布局
报销类型页面采用左侧搜索/选择类型、右侧编辑规则的分栏布局。类型列表和规则区域分别滚动,底部保存栏始终可见;保存成功显示反馈,继续修改后恢复保存提示。新增类型固定在左下方,重命名/删除集中在详情标题的更多菜单中。
基本信息包含明确的说明和提示标签;上传材料逐行配置不使用/选填/必填,编辑与删除位于该行更多菜单。添加、编辑材料使用弹窗,保存材料时也保存当前类型规则。只读权限及删除确认保持不变。全局类型页面不显示无关的项目/组别筛选。
保存规则只合并当前类型的服务端结果,不覆盖其他类型尚未保存的编辑。切换类型不会自动保存;刷新或退出前仍应主动保存。
回归验证:`swiftc reimburse/AdminModels.swift reimburse/AdminStore.swift tests/AdminPolicyEditorTests.swift -o /tmp/admin-policy-editor-tests && /tmp/admin-policy-editor-tests`
## 报销类型管理
“报销类型”页新增“类型管理”区域,可查看全部启用/停用类型。平台管理员可新增、重命名或确认删除,普通管理账号只读。新增名称限制 1–40 字且不可重名,默认停用;创建后在下方配置规则、勾选启用并保存。删除立即生效,不是停用;历史报销记录及附件保留,历史类型名称不随重命名改变。类型配置对所有项目生效。
服务端拒绝时弹窗保留输入并显示错误;成功后更新列表和当前选择,不清空其他类型尚未保存的规则。需同步更新 Go 服务和微信小程序,无需为本功能修改数据库结构。
## 删除材料与不使用
“报销类型”中的垃圾桶会确认后调用材料类型删除接口,立即从全局材料列表及所有报销类型的材料规则中删除该材料,不删除历史报销附件。即使材料已选“不使用”,也保留删除入口。删除失败不会在本机假装移除;成功后保留其他尚未保存的规则编辑。
“不使用”只改变当前报销类型是否需要此材料,需要点击“保存规则”生效,不删除材料类型。
## 多附件兼容
项目管理详情现在展示每个材料分类下的全部附件,并支持逐份预览、下载和 ZIP 导出。新版本同时解码旧服务的单附件对象和新服务的附件数组;多附件服务上线时需同步重新构建 Mac 应用。本地 OCR 和 Office 导出不受此次改动影响。
独立模型兼容测试:`swiftc reimburse/AdminModels.swift tests/AdminAttachmentsTests.swift -o /tmp/admin-attachments-tests && /tmp/admin-attachments-tests`
应用新增“项目管理”入口,原“本地贴票”入口及 OCR、核对、配对、Office 导出保持原样。
## 使用
1. 先启动 `scoopex-expense-api`,执行其数据库迁移。
2. 微信小程序登录后查看“我的”账户 ID,由服务器操作者初始化首位平台管理员。
3. 打开管理端,设置 API 地址,生成微信登录码,在手机小程序中确认。
4. 平台管理员创建项目,按账户 ID 任命项目负责人。
5. 项目负责人选择项目、创建组别,按账户 ID 勾选多个组授权管理员。
6. 管理员选择具体组别,生成邀请二维码,审核扫码入组申请。
7. 成员提交报销后,在报销审批列表打开详情,查看/下载凭证并批准或退回。
“全部授权组”汇总数据;单个组筛选用于成员和邀请管理。二维码和登录票据不是管理员授权渠道。
登录凭证保存于 macOS 钥匙串;网络不使用代理。HTTP 仅允许本机地址,部署必须使用 HTTPS。
平台管理员默认没有项目发票读取权限,需另行指定为项目负责人才能进入该项目业务。
## 构建
Xcode 工程已开启出站网络沙盒权限。
该仓库当前没有 `native-engine/dist/receipt-engine-helper.app`,完整应用构建仍需按 README 重建原有 OCR 引擎。新增 Swift 管理界面可独立进行类型检查;不能把类型检查当作完整 OCR 安装包验收。
完整接口、初始化命令、部署注意事项见 Go 项目的 `PROJECT-ACCESS.md`