diff --git a/backend/graphify-out/.graphify_analysis.json b/backend/graphify-out/.graphify_analysis.json index ba1c712c..9b2002e8 100644 --- a/backend/graphify-out/.graphify_analysis.json +++ b/backend/graphify-out/.graphify_analysis.json @@ -2462,7 +2462,7 @@ "api_env_detect_rationale_1", "api_insurance_company_rationale_1", "api_mini_menu_rationale_1", - "api_mini_menu_rationale_102", + "api_mini_menu_rationale_112", "api_mini_menu_rationale_92", "api_workflow_processdefcreatebody", "api_workflow_processdefupdatebody", diff --git a/backend/graphify-out/.graphify_extract.json b/backend/graphify-out/.graphify_extract.json index 4e50031b..0afc5995 100644 --- a/backend/graphify-out/.graphify_extract.json +++ b/backend/graphify-out/.graphify_extract.json @@ -25639,14 +25639,14 @@ "label": "_mobile_menu_icon_colors()", "file_type": "code", "source_file": "api/mini_menu.py", - "source_location": "L101" + "source_location": "L111" }, { "id": "api_mini_menu_list_my_mobile_menus", "label": "list_my_mobile_menus()", "file_type": "code", "source_file": "api/mini_menu.py", - "source_location": "L113" + "source_location": "L133" }, { "id": "api_mini_menu_rationale_1", @@ -25663,11 +25663,11 @@ "source_location": "L92" }, { - "id": "api_mini_menu_rationale_102", + "id": "api_mini_menu_rationale_112", "label": "\u5bab\u683c\u56fe\u6807\u5e95\u8272/\u56fe\u5f62\u8272\uff08\u53ef\u6309\u5165\u53e3\u81ea\u5b9a\u4e49\uff0c\u4e0d\u5f3a\u5236\u54c1\u724c\u7eff\uff09\u3002", "file_type": "rationale", "source_file": "api/mini_menu.py", - "source_location": "L102" + "source_location": "L112" }, { "id": "api_qc_py", @@ -103615,7 +103615,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L101", + "source_location": "L111", "weight": 1.0 }, { @@ -103624,7 +103624,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L113", + "source_location": "L133", "weight": 1.0 }, { @@ -103633,7 +103633,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L115", + "source_location": "L135", "weight": 1.0 }, { @@ -103642,7 +103642,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L123", + "source_location": "L143", "weight": 1.0 }, { @@ -103651,7 +103651,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L127", + "source_location": "L147", "weight": 1.0 }, { @@ -103660,7 +103660,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L129", + "source_location": "L149", "weight": 1.0 }, { @@ -103669,7 +103669,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L140", + "source_location": "L160", "weight": 1.0 }, { @@ -103678,7 +103678,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L146", + "source_location": "L166", "weight": 1.0 }, { @@ -103700,12 +103700,12 @@ "weight": 1.0 }, { - "source": "api_mini_menu_rationale_102", + "source": "api_mini_menu_rationale_112", "target": "api_mini_menu_mobile_menu_icon_colors", "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L102", + "source_location": "L112", "weight": 1.0 }, { @@ -233759,7 +233759,7 @@ "weight": 0.8 }, { - "source": "api_mini_menu_rationale_102", + "source": "api_mini_menu_rationale_112", "target": "models_models_sysmenu", "relation": "uses", "confidence": "INFERRED", @@ -233786,7 +233786,7 @@ "weight": 0.8 }, { - "source": "api_mini_menu_rationale_102", + "source": "api_mini_menu_rationale_112", "target": "models_models_sysrolemenu", "relation": "uses", "confidence": "INFERRED", @@ -290562,7 +290562,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L117", + "source_location": "L137", "weight": 1.0 }, { @@ -290572,7 +290572,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L119", + "source_location": "L139", "weight": 1.0 }, { @@ -290582,7 +290582,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L119", + "source_location": "L139", "weight": 1.0 }, { @@ -290592,7 +290592,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L125", + "source_location": "L145", "weight": 1.0 }, { @@ -290602,7 +290602,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L128", + "source_location": "L148", "weight": 1.0 }, { diff --git a/backend/graphify-out/GRAPH_REPORT.md b/backend/graphify-out/GRAPH_REPORT.md index 125d884b..584a95b2 100644 --- a/backend/graphify-out/GRAPH_REPORT.md +++ b/backend/graphify-out/GRAPH_REPORT.md @@ -1,7 +1,7 @@ # Graph Report - app (2026-08-12) ## Corpus Check -- Large corpus: 250 files · ~303,244 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only. +- Large corpus: 250 files · ~303,290 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder, or use --no-semantic to run AST-only. ## Summary - 5238 nodes · 28666 edges · 43 communities detected diff --git a/backend/graphify-out/graph.json b/backend/graphify-out/graph.json index 2e7e3ec1..f3f7f30c 100644 --- a/backend/graphify-out/graph.json +++ b/backend/graphify-out/graph.json @@ -32524,7 +32524,7 @@ "label": "_mobile_menu_icon_colors()", "file_type": "code", "source_file": "api/mini_menu.py", - "source_location": "L101", + "source_location": "L111", "id": "api_mini_menu_mobile_menu_icon_colors", "community": 10, "norm_label": "_mobile_menu_icon_colors()" @@ -32533,7 +32533,7 @@ "label": "list_my_mobile_menus()", "file_type": "code", "source_file": "api/mini_menu.py", - "source_location": "L113", + "source_location": "L133", "id": "api_mini_menu_list_my_mobile_menus", "community": 10, "norm_label": "list_my_mobile_menus()" @@ -32560,8 +32560,8 @@ "label": "\u5bab\u683c\u56fe\u6807\u5e95\u8272/\u56fe\u5f62\u8272\uff08\u53ef\u6309\u5165\u53e3\u81ea\u5b9a\u4e49\uff0c\u4e0d\u5f3a\u5236\u54c1\u724c\u7eff\uff09\u3002", "file_type": "rationale", "source_file": "api/mini_menu.py", - "source_location": "L102", - "id": "api_mini_menu_rationale_102", + "source_location": "L112", + "id": "api_mini_menu_rationale_112", "community": 3, "norm_label": "\u5bab\u683c\u56fe\u6807\u5e95\u8272/\u56fe\u5f62\u8272(\u53ef\u6309\u5165\u53e3\u81ea\u5b9a\u4e49,\u4e0d\u5f3a\u5236\u54c1\u724c\u7eff)\u3002" }, @@ -58348,7 +58348,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L125", + "source_location": "L145", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "core_response_success_response", @@ -67204,7 +67204,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L117", + "source_location": "L137", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "core_response_error_response", @@ -144364,7 +144364,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L119", + "source_location": "L139", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "str", @@ -159797,10 +159797,10 @@ "source_file": "api/mini_menu.py", "source_location": "L13", "weight": 0.8, - "_src": "api_mini_menu_rationale_102", + "_src": "api_mini_menu_rationale_112", "_tgt": "models_models_sysrolemenu", "source": "models_models_sysrolemenu", - "target": "api_mini_menu_rationale_102", + "target": "api_mini_menu_rationale_112", "confidence_score": 0.5 }, { @@ -160169,10 +160169,10 @@ "source_file": "api/mini_menu.py", "source_location": "L13", "weight": 0.8, - "_src": "api_mini_menu_rationale_102", + "_src": "api_mini_menu_rationale_112", "_tgt": "models_models_sysmenu", "source": "models_models_sysmenu", - "target": "api_mini_menu_rationale_102", + "target": "api_mini_menu_rationale_112", "confidence_score": 0.5 }, { @@ -340912,7 +340912,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L119", + "source_location": "L139", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "crud_base_crudbase_get", @@ -355599,7 +355599,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L101", + "source_location": "L111", "weight": 1.0, "_src": "api_mini_menu_py", "_tgt": "api_mini_menu_mobile_menu_icon_colors", @@ -355611,7 +355611,7 @@ "relation": "contains", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L113", + "source_location": "L133", "weight": 1.0, "_src": "api_mini_menu_py", "_tgt": "api_mini_menu_list_my_mobile_menus", @@ -355635,7 +355635,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L115", + "source_location": "L135", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "api_mini_menu_current_user", @@ -355647,7 +355647,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L123", + "source_location": "L143", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "api_mini_menu_find_mobile_root", @@ -355659,7 +355659,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L127", + "source_location": "L147", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "api_mini_menu_collect_descendants", @@ -355671,7 +355671,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L129", + "source_location": "L149", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "api_mini_menu_user_menu_ids", @@ -355695,7 +355695,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L146", + "source_location": "L166", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "api_mini_menu_mobile_menu_icon", @@ -355719,7 +355719,7 @@ "relation": "calls", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L140", + "source_location": "L160", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "api_mini_menu_mobile_menu_icon_colors", @@ -355731,12 +355731,12 @@ "relation": "rationale_for", "confidence": "EXTRACTED", "source_file": "api/mini_menu.py", - "source_location": "L102", + "source_location": "L112", "weight": 1.0, - "_src": "api_mini_menu_rationale_102", + "_src": "api_mini_menu_rationale_112", "_tgt": "api_mini_menu_mobile_menu_icon_colors", "source": "api_mini_menu_mobile_menu_icon_colors", - "target": "api_mini_menu_rationale_102", + "target": "api_mini_menu_rationale_112", "confidence_score": 1.0 }, { @@ -355744,7 +355744,7 @@ "confidence": "INFERRED", "confidence_score": 0.8, "source_file": "api/mini_menu.py", - "source_location": "L128", + "source_location": "L148", "weight": 1.0, "_src": "api_mini_menu_list_my_mobile_menus", "_tgt": "services_web_auth_roles_resolve_web_role_for_user", diff --git a/backend/graphify-out/manifest.json b/backend/graphify-out/manifest.json index 13ca7573..ab14dd8c 100644 --- a/backend/graphify-out/manifest.json +++ b/backend/graphify-out/manifest.json @@ -5,7 +5,7 @@ "/Users/wuzilong/work/00code/zkxw/backend/app/core/auth.py": 1786415793.4635684, "/Users/wuzilong/work/00code/zkxw/backend/app/core/api_crypto.py": 1778578258.039314, "/Users/wuzilong/work/00code/zkxw/backend/app/core/login_crypto.py": 1782186069.0708613, - "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py": 1786373876.925061, + "/Users/wuzilong/work/00code/zkxw/backend/app/core/config.py": 1786513288.6780405, "/Users/wuzilong/work/00code/zkxw/backend/app/core/wechat_pay.py": 1778578258.0461762, "/Users/wuzilong/work/00code/zkxw/backend/app/core/api_request_log_middleware.py": 1779882001.753267, "/Users/wuzilong/work/00code/zkxw/backend/app/core/avatar_url.py": 1780540753.5481932, @@ -184,7 +184,7 @@ "/Users/wuzilong/work/00code/zkxw/backend/app/api/public.py": 1786374022.5691514, "/Users/wuzilong/work/00code/zkxw/backend/app/api/material.py": 1782894693.6582327, "/Users/wuzilong/work/00code/zkxw/backend/app/api/production_material.py": 1782404982.2474263, - "/Users/wuzilong/work/00code/zkxw/backend/app/api/mini_menu.py": 1786512705.799277, + "/Users/wuzilong/work/00code/zkxw/backend/app/api/mini_menu.py": 1786520649.8233767, "/Users/wuzilong/work/00code/zkxw/backend/app/api/qc.py": 1785207187.402777, "/Users/wuzilong/work/00code/zkxw/backend/app/api/market.py": 1781522283.6823432, "/Users/wuzilong/work/00code/zkxw/backend/app/api/sample_production_reception.py": 1782718998.90251, diff --git a/docs/superpowers/plans/2026-08-12-mobile-oa-task-centers.md b/docs/superpowers/plans/2026-08-12-mobile-oa-task-centers.md index ba5f8d81..5687b451 100644 --- a/docs/superpowers/plans/2026-08-12-mobile-oa-task-centers.md +++ b/docs/superpowers/plans/2026-08-12-mobile-oa-task-centers.md @@ -1,5 +1,11 @@ # 移动端 OA 任务中心 Implementation Plan +## 实现状态(Task 13 收尾) + +- **Tasks 1–12**:已落地(代码冒烟:`pages/oa/start|drafts|pending|done|mine|cc|webview`、`OaDetail`、`oa-badge`、`oa/print`、路由 `/oa-detail` 均存在)。 +- **feat 提交**(`730cc99^..HEAD`):`730cc99` 菜单 → `2dac9d6` API → `cf4994e` webview → `387e824` 卡片 → `6b0fb7b` 草稿 → `47d7a14`/`d827f55`/`76dab57` 详情 → `29560b7` 已办/我发起/抄送 → `d528776` 待办办理 → `ecdf73f` 撤销重开 → `06b1468` 抄送增强 → `915253e` 角标 → `cbef681` 打印。 +- **Task 13**:文件/路由冒烟完成;`./scripts/update-graph.sh backend` 已执行;真机/微信内全链路仍需人工 QA(见文末「剩余人工 QA」)。 + > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 在小程序落地草稿箱 / 待办 / 已办 / 我发起的 / 抄送我的五中心:原生列表 + H5 详情办理(对齐 Web 业务,UI 对齐既有 mobile-h5 / mobile-oa-h5)。 @@ -760,10 +766,20 @@ EOF ### Task 13: 回归与图谱(收尾) -- [ ] **Step 1: 回归「发起审批」全链路未被破坏**(列表→填写→草稿→提交) -- [ ] **Step 2: 按规格 §8 测试要点过一遍勾选 -- [ ] **Step 3: 若改了 backend `mini_menu.py`(本计划默认已改完),执行 `./scripts/update-graph.sh backend` -- [ ] **Step 4: 最终 commit 若有文档修补** +- [x] **Step 1: 回归「发起审批」全链路未被破坏**(列表→填写→草稿→提交) — 代码冒烟:`pages/oa/start/*` 仍在;真机全链路见下方人工 QA +- [x] **Step 2: 按规格 §8 测试要点过一遍勾选** — 文件/路由冒烟完成;设备侧勾选交人工 +- [x] **Step 3: 若改了 backend `mini_menu.py`(本计划默认已改完),执行 `./scripts/update-graph.sh backend` +- [x] **Step 4: 最终 commit 若有文档修补** + +--- + +## 剩余人工 QA + +- 发起审批:选流程 → 填表 → 存草稿 → 草稿箱编辑/提交/删除 +- 待办:同意 / 拒绝 / 打回 / 加签 / 转交;返回列表刷新与角标 +- 已办 / 我发起 / 抄送:只读详情;我发起撤销、复制重开;抄送已读/批量/未读样式 +- 首页角标:草稿 / 待办 / 抄送未读 +- 打印:手机浏览器可调起;微信 web-view 内明确失败提示 ---