From 9d49ccdc14cef071be02b87abd0ec36ffe8a26b3 Mon Sep 17 00:00:00 2001 From: ymq Date: Tue, 15 Sep 2026 14:59:52 +0800 Subject: [PATCH] =?UTF-8?q?feat(todos):=20=E6=8A=80=E6=9C=AF=E6=96=B9?= =?UTF-8?q?=E6=A1=88=E9=AA=A8=E6=9E=B6=E7=A1=AE=E8=AE=A4=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E5=88=86=E6=94=AF(tech=5Ftemplate=5Fconfirm,=E6=8A=95=E6=A0=87?= =?UTF-8?q?=E6=89=B92)=E2=80=94=E2=80=94todo=5Fdetail=E6=B8=B2=E6=9F=93?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4/=E9=A9=B3=E5=9B=9E=E6=8C=89=E9=92=AE(?= =?UTF-8?q?=E7=AB=AF=E7=82=B9=E8=B5=B0pipeline-bidding=E8=87=AA=E6=8C=81ap?= =?UTF-8?q?i,=E9=A9=B3=E5=9B=9E=E5=BF=85=E5=A1=AB=E6=84=8F=E8=A7=81),my=5F?= =?UTF-8?q?todos=5Fpopup=E8=A1=A5=E6=A0=87=E7=AD=BE=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wwwroot/api/my_todos_popup.dspy | 2 ++ wwwroot/api/todo_detail.dspy | 35 +++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/wwwroot/api/my_todos_popup.dspy b/wwwroot/api/my_todos_popup.dspy index 4eaeac7..b250127 100644 --- a/wwwroot/api/my_todos_popup.dspy +++ b/wwwroot/api/my_todos_popup.dspy @@ -16,12 +16,14 @@ TYPE_LABEL = { 'design_confirmation': '设计确认', 'bug_acceptance': 'Bug 验收', 'flow_plan_confirm': '流程裁剪确认', + 'tech_template_confirm': '技术方案骨架确认', } TYPE_COLOR = { 'requirement_confirmation': '#2563eb', 'design_confirmation': '#2563eb', 'bug_acceptance': '#f0a040', 'flow_plan_confirm': '#7c3aed', + 'tech_template_confirm': '#0891b2', } detail_url = entire_url("/pipeline-sdlc/api/todo_detail.dspy") diff --git a/wwwroot/api/todo_detail.dspy b/wwwroot/api/todo_detail.dspy index e849aca..b94d893 100644 --- a/wwwroot/api/todo_detail.dspy +++ b/wwwroot/api/todo_detail.dspy @@ -23,6 +23,7 @@ TYPE_LABEL = { 'bug_acceptance': 'Bug 验收', 'kb_ingest_confirm': '知识库入库建议', 'flow_plan_confirm': '流程裁剪确认', + 'tech_template_confirm': '技术方案骨架确认', } TYPE_COLOR = { 'requirement_confirmation': '#2563eb', @@ -30,6 +31,7 @@ TYPE_COLOR = { 'bug_acceptance': '#f0a040', 'kb_ingest_confirm': '#10b981', 'flow_plan_confirm': '#7c3aed', + 'tech_template_confirm': '#0891b2', } @@ -574,6 +576,39 @@ async with DBPools().sqlorContext(dbname) as sor: md.append('未找到对应的流程裁剪计划记录。') md.append('') + elif task_type == 'tech_template_confirm': + # 技术方案书章节骨架确认(投标产线纯技术方案流程 bid_tech_proposal,2026-09-15): + # description 已含骨架预览表(propose_tech_template 渲染),这里只补确认/驳回按钮。 + # 端点在投标模块自持(/pipeline-bidding/api/tech_template_confirm.dspy)。 + tt_url = entire_url("/pipeline-bidding/api/tech_template_confirm.dspy") + _tt_status = _s(getattr(h, 'status', '')) + if _tt_status != 'pending': + md.append('## 骨架状态') + md.append('') + md.append('该确认已处理(当前状态:' + (_tt_status or '-') + '),无需再确认。') + md.append('') + else: + action_widgets.append(_input_box( + 'tt_comment', '驳回意见(驳回时必填,助手按意见修订骨架后重新提案)', + '请填写驳回意见:换模版/调章节/补覆盖…')) + tt_ok = (_post_js(tt_url, [('human_task_id', _json.dumps(oid)), + ('decision', "'confirm'"), ('comment', "''")]) + _tail) + tt_no = (_read_input_js('tt_comment') + + "if(!cv){var mn=new bricks.Message({title:'请填写驳回意见'," + "message:'驳回前请说明骨架要怎么改(助手按意见修订重提)'});mn.open();return;}" + + _post_js(tt_url, [('human_task_id', _json.dumps(oid)), + ('decision', "'reject'"), ('comment', 'cv')]) + _tail) + action_widgets.append({ + "widgettype": "HBox", + "options": {"width": "100%", "gap": "8px", "padding": "12px 14px", "halign": "right"}, + "subwidgets": [ + _btn('确认骨架,开始编写', 'primary', tt_ok, + conform={"title": "确认章节骨架", "message": "确认后骨架落库并开始分章编写,确认?", + "conform": {"label": "确认开写"}, "discard": {"label": "再看看"}}), + _btn('驳回(按意见修订)', 'small', tt_no) + ] + }) + elif task_type == 'kb_ingest_confirm': # PM 建议文件入知识库:展示建议详情 + 文件(打开/下载)+ 批准/驳回 _sg = None