chore(oa): note mobile task centers plan status and refresh graph

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-08-12 16:41:14 +08:00
1 parent cbef68199b
commit e4934dc64e
6 files changed
+69 -53

No files matched your search

+1 -1
View File
@@ -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",
+21 -21
View File
@@ -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
},
{
+1 -1
View File
@@ -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
+24 -24
View File
@@ -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",
+2 -2
View File
@@ -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,
@@ -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 内明确失败提示
---