from pathlib import Path
from html import escape as e
import json,markdown
R=Path(__file__).parent
ucs=json.loads((R/'use-cases.json').read_text());qs=json.loads((R/'decisions.json').read_text())
requirements=''
for i,u in enumerate(ucs,1):
 requirements+=f'<details class="requirement"><summary><span>{u["id"]}</span>{e(u["name"])}<span>查看流程与验收 ＋</span></summary><div class="body"><p>{e(u["trigger"])}</p><h4>主流程</h4><ul>'+''.join('<li>'+e(s)+'</li>' for s in u['main'])+'</ul><h4>异常与恢复</h4><ul>'+''.join('<li>'+e(s)+'</li>' for s in u['err']+u['recovery'])+'</ul><h4>确认时重点看</h4><ul>'+''.join('<li>'+e(s)+'</li>' for s in u['ac'])+f'</ul><p><span class="chip warn">正式开发待确认 {u["q"]}</span></p></div></details>'
questions=''
for q in qs:
 questions+=f'<article class="card question" data-question="{q["id"]}" data-confirmed="{str(q["status"]=="用户已确认").lower()}"><p class="meta">{q["id"]} · {q["priority"]}</p><h3>{e(q["title"])}</h3><p>{e(q["proposal"])}</p><p class="impact">{e(q["impact"])}</p><small>待确认角色：{e(q["owner"])} · 正式开发前</small><label>我的评审意见<select data-decision><option value="pending">待讨论</option><option value="accept">同意本条提议</option><option value="change">需要修改</option></select></label><label>补充规则、修改原因或负责人<textarea data-note placeholder="写清楚确认的规则，或哪里需要调整"></textarea></label></article>'
html=f'''<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>膳食记录原页复用 · v0.3</title><link rel="stylesheet" href="review.css"></head><body class="webpage"><div class="page"><div class="brandbar"><strong>CPT<span>AI运动营养师 × 智慧食堂管理平台</span></strong><span>v0.3 · 真实演示系统为基准</span></div><nav class="nav"><a href="#scope">复用结论</a><a href="#prototype">看原型</a><a href="#flows">两类流程</a><a href="#requirements">用例</a><a href="#decisions">确认事项</a></nav><section class="hero"><div><p class="kicker">REUSE THE EXISTING PAGE</p><h1>已有膳食记录页，<br><span>就把明细补在这里。</span></h1><p class="lede">PC复用你提供的演示系统；手机沿用AI运动营养师，不改页面。后台自动识别，上传结果对应到人和每一次进食。</p><div class="hero-links"><a class="btn primary" href="http://127.0.0.1:8790/food-record-reuse.html">打开原页局部补充原型 ↗</a><a class="btn" href="https://zhct.yyangpt.cn/dist/#/homeMain" target="_blank" rel="noopener">真实演示系统 ↗</a></div></div><div class="overview-card"><p>已经登录实页并核对源码</p><h2 style="margin:20px 0">膳食监控 → 个体监控<br>→ 查看分析 → 膳食记录</h2><p>已有人员头像、日期筛选、九类分析标签、三餐卡片、食物图、重量与热量。</p><div class="confirmed" style="margin-top:22px">不新建菜单或一级页面；仅在原页增加上传明细入口及弹窗。</div></div></section><section id="scope" class="content-section"><div class="section-head"><h2>这次明确保留和补充什么</h2></div><div class="grid g3"><article class="card"><h3>手机端：不改</h3><p>使用现有AI运动营养师的图片入口与发送流程作示意。撤下前轮新增的手机图片交互，不新增表单。</p></article><article class="card"><h3>PC端：原页局部补充</h3><p>保留白色顶栏、蓝色菜单、人员头像、日期和三餐卡片。点击“查看上传明细”，再看原图和各项数据。</p></article><article class="card"><h3>后台：自动识别与对应</h3><p>识别食物和四项营养，关联人员、日期和餐次。加餐、零食是独立上传；异常保留状态，不强行猜测。</p></article></div><div class="review-banner">正确PC基准是store的Vue2 / Element UI页面。前两版ai_store式PC工作台只作历史，不再指导本次实施。当前已证实头像字段head_img；跨系统人员ID映射仍需核验。</div></section><section id="prototype" class="content-section"><div class="section-head"><h2>看同一个页面的局部变化</h2><p>顶部可切换“已有页面结构 / 查看局部补充”；三餐卡片结构保留。所有内容为合成样例，未修改演示环境。</p></div><iframe class="prototype-preview" style="height:1000px" src="http://127.0.0.1:8790/food-record-reuse.html" title="store现有膳食记录页局部补充"></iframe><div class="docs"><a class="btn primary" href="http://127.0.0.1:8790/food-record-reuse.html">独立打开PC原型</a><a class="btn" href="https://img.kxunpt.cn/public/ai-marketing-platform/work_store/2026-09-11-diet-photo-record-reuse/mini-program-review.html">手机原页面示意（不改）</a><a class="btn" href="http://127.0.0.1:8790/implementation-slice.md">Codex精确实施位置</a></div></section><section id="flows" class="content-section"><div class="section-head"><h2>两类用户流程</h2><p>上传沿用原操作；PC在已有膳食记录内查看。保持自动识别和异常保留。</p></div><div class="flow-switch"><button class="active" data-flow="participant">受试者：手机不改</button><button data-flow="staff">项目人员：原页查看明细</button></div><div class="flow-shell"><a id="flow-link" href="participant-flow.svg" target="_blank" rel="noopener"><img id="flow-image" src="participant-flow.svg" alt="受试者现有流程"></a><p class="flow-caption" id="flow-caption">现有AI运动营养师上传与发送，后台自动处理；手机页面不改。</p></div></section><section id="requirements" class="content-section"><div class="section-head"><h2>用例与执行说明</h2><p>编号继续保留，PC实施位置更新为实际演示系统的已有页面。</p></div>{requirements}<div class="docs"><a href="requirements.html">完整需求</a><a href="contracts.html">数据契约</a><a href="codex-handoff.html">实施边界</a><a href="http://127.0.0.1:8790/README.md">实页复用证据</a></div></section><section id="decisions" class="content-section"><div class="section-head"><h2>剩余确认事项</h2><p>手机不改、PC已有页复用已经明确；算法和跨系统映射单独确认。</p></div><div id="draft-warning" hidden class="review-banner"></div><div class="grid g2">{questions}</div><div class="hero-links"><button id="export-decisions" class="btn primary">导出评审JSON</button><button id="export-markdown" class="btn">导出评审Markdown</button></div><p id="draft-status" class="lede" style="font-size:12px"></p></section><footer class="footer">原环境仅登录及只读查看；密码未写入文件。当前是Vue2/ElementUI可交互原型，真实识别、落库、跨系统映射未实施。<a href="http://127.0.0.1:8790/verification.md">本轮验证</a></footer></div><script src="review.js"></script></body></html>'''
R.joinpath('diet-weight-review.html').write_text(html)
for name in ['requirements','contracts','codex-handoff','system-evidence','source-audit','verification']:
 p=R/(name+'.md')
 if not p.exists():continue
 body=markdown.markdown(p.read_text(),extensions=['tables','fenced_code']).replace('../../../work_store/2026-09-11-diet-photo-record-reuse/implementation-slice.md','http://127.0.0.1:8790/implementation-slice.md')
 R.joinpath(name+'.html').write_text(f'<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>{e(name)} · 饮食与体测需求</title><link rel="stylesheet" href="review.css"></head><body><main class="reading"><a href="diet-weight-review.html">← 返回需求与原型评审</a>{body}</main></body></html>')
print('review and reading pages generated')
