{
  "schema_version": "2.0",
  "product": "英语默写AI版",
  "handoff_version": "0.12.3",
  "date": "2026-10-13",
  "id": "B-5",
  "name": "下载弹层",
  "module": "默写单-教材默写单与打印",
  "purpose": "选择练习卷/答案卷和文件格式后导出；显示本次文件数与扣次数，提供微信分享或本地打开。",
  "entry": {
    "from": [
      "B-4：生成/配置成功",
      "B-6：用原配置再印"
    ],
    "preconditions": [
      "拥有配置/所选词或历史记录；真正文件是否已经生成及生成节点待确认。"
    ],
    "rule_status": "confirmed",
    "source": "原 UE B-5/B-6；用户已确认历史来源保留。"
  },
  "ui_elements": [
    {
      "id": "B-5.backdrop",
      "type": "surface",
      "label": "遮罩与纸卷预览",
      "description": "原下载弹层背景；点遮罩可关闭。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.back",
      "type": "button",
      "label": "返回/关闭",
      "description": "配置来源回 B-4；历史来源回 B-6，按确认来源动态。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.content",
      "type": "segmented-control",
      "label": "练习卷 / 答案卷 / 两份都要",
      "description": "源3内容选择。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.format",
      "type": "segmented-control",
      "label": "PDF / Word / 长图",
      "description": "源3格式；Word一期与长图多页策略待确认。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.explanation",
      "type": "text",
      "label": "PDF打印效果最好 · Word可改 · 长图可发群",
      "description": "源说明是使用建议，不能证明真实渲染能力。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.share",
      "type": "button",
      "label": "微信分享",
      "description": "真实系统分享调用待接入，完成后留本页。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.open",
      "type": "button",
      "label": "本地打开",
      "description": "真实系统预览待接入，返回留本页。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5.quota",
      "type": "status",
      "label": "剩余出单次数",
      "description": "源余量2与不限次数为演示/权益文案，精确计次待确认。",
      "rule_status": "pending"
    },
    {
      "id": "B-5.vip",
      "type": "button",
      "label": "会员不限次 / 去开通",
      "description": "源横幅→E-2，价格、完整权益与支付不在本模块。",
      "rule_status": "confirmed"
    }
  ],
  "data_source": [
    {
      "name": "出题服务",
      "data": [
        "按内容/格式输出文件"
      ],
      "contract_status": "pending"
    },
    {
      "name": "当前任务或原历史配置",
      "data": [
        "词表",
        "版式/方向/标题/顺序"
      ],
      "contract_status": "pending"
    },
    {
      "name": "会员与当日额度状态",
      "data": [
        "权益/剩余额度"
      ],
      "contract_status": "pending"
    },
    {
      "name": "系统分享/预览能力",
      "data": [
        "文件交付及系统调用结果"
      ],
      "contract_status": "pending"
    }
  ],
  "data_model": [
    {
      "id": "contentSelection",
      "type": "enum",
      "description": "practice/answer/both 仅字段建议。",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "fileFormat",
      "type": "enum",
      "description": "pdf/word/image，Word一期未定。",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "returnRoute",
      "type": "string",
      "description": "B-4/B-6 来源，由用户确认历史保持。",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "generationTaskContext",
      "type": "object",
      "description": "建议识别任务/重复导出，尚非 API。",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "exportStatus",
      "type": "enum",
      "description": "建议 ready/exporting/error；演示不证明文件存在。",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "remainingQuota",
      "type": "integer|null",
      "description": "真实计次契约未定。",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "draftContext",
      "type": "object",
      "description": "建议用教材ID、范围ID隔离单元/词条/顺序/配置/滚动草稿；不作为API字段",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "expectedFileCount",
      "type": "integer",
      "description": "PDF/Word双卷1文件；图片按每卷实际页数求和",
      "rule_status": "proposed",
      "contract_status": "pending"
    },
    {
      "id": "generationResults",
      "type": "object[]",
      "description": "建议逐文件记录成功/失败与计次结果；多图片部分成功仅计成功文件；重试失败文件按新增成功数扣次",
      "rule_status": "proposed",
      "contract_status": "pending"
    }
  ],
  "interactions": [
    {
      "id": "B-5-I-01",
      "trigger": "切换内容/格式",
      "condition": "三种格式均保留；Word/PDF双卷合成一个文件，图片每页一张",
      "effect": "更新内容、格式、预计文件数及本次计次，不立即生成或扣次",
      "destination": "B-5",
      "payload": [
        "内容",
        "格式"
      ],
      "rule_status": "confirmed",
      "source": "原UE选项与用户2026-10-12导出确认",
      "prototype_behavior": "选中态可切换，未知文件能力不冒称已输出。"
    },
    {
      "id": "B-5-I-02",
      "trigger": "点击微信分享",
      "condition": "可用次数足够且文件成功生成",
      "effect": "按成功文件数扣次，随后调用系统分享或预览；返回留本页；再次导出重新计次",
      "destination": "B-5",
      "payload": [
        "输出文件",
        "分享结果概念"
      ],
      "rule_status": "confirmed",
      "source": "原UE终点操作与用户2026-10-12按成功文件数计次",
      "prototype_behavior": "模拟生成状态与本地演示次数变化，不创建真实文件、不调用真实系统服务"
    },
    {
      "id": "B-5-I-03",
      "trigger": "点击本地打开",
      "condition": "可用次数足够且文件成功生成",
      "effect": "按成功文件数扣次，随后调用系统分享或预览；返回留本页；再次导出重新计次",
      "destination": "B-5",
      "payload": [
        "输出文件"
      ],
      "rule_status": "confirmed",
      "source": "原UE终点操作与用户2026-10-12按成功文件数计次",
      "prototype_behavior": "模拟生成状态与本地演示次数变化，不创建真实文件、不调用真实系统服务"
    },
    {
      "id": "B-5-I-04",
      "trigger": "点返回/遮罩",
      "condition": "配置或历史来源明确",
      "effect": "回实际进入来源，不丢配置/历史上下文",
      "destination": "entry.returnRoute：B-4 / B-6",
      "payload": [
        "returnRoute",
        "配置上下文"
      ],
      "rule_status": "confirmed",
      "source": "源默认 B-4；用户 2026-10-11 确认从历史再印返回 B-6。",
      "prototype_behavior": "配置关闭回 B-4，历史再印关闭回 B-6；保存选择为建议。"
    },
    {
      "id": "B-5-I-05",
      "trigger": "点击会员横幅",
      "condition": "用户主动选择开通",
      "effect": "进入会员权益购买",
      "destination": "E-2",
      "payload": [
        "origin=B-5"
      ],
      "rule_status": "confirmed",
      "source": "原 UE 横幅→E-2。",
      "prototype_behavior": "E-2明确边界，不编价格/支付结果。"
    },
    {
      "id": "B-5-I-06",
      "trigger": "导出失败/余量为零",
      "condition": "生成失败，或本次成功文件所需次数超过余量",
      "effect": "生成失败不扣次数并保留选项；余量不足时展示本次需次数并禁止导出，可调整内容格式或主动开通会员",
      "destination": "B-5 / E-2（待确认）",
      "payload": [],
      "rule_status": "proposed",
      "source": "不扣失败文件已确认；余量不足提示和拦截设计为建议",
      "prototype_behavior": "生成错误/次数不足可切换，重试回可导出态；会员页为边界"
    }
  ],
  "back_behavior": {
    "destination": "B-4 / B-6（按 returnRoute）",
    "rule_status": "confirmed",
    "preserve": "建议保留内容/格式、任务配置；历史回 B-6 保留分类位置。",
    "source": "源 B-5 默认回 B-4；用户2026-10-11确认历史来源动态返回。",
    "prototype_behavior": "分享/打开只是选择动作，本页仍在；返回真实来源而非固定 B-4。"
  },
  "states": [
    {
      "id": "ready",
      "description": "选择下载内容与格式",
      "rule_status": "confirmed"
    },
    {
      "id": "exporting",
      "description": "文件生成中",
      "rule_status": "proposed"
    },
    {
      "id": "export-error",
      "description": "文件生成失败",
      "rule_status": "proposed"
    },
    {
      "id": "share-cancelled",
      "description": "分享已取消",
      "rule_status": "proposed"
    },
    {
      "id": "open-error",
      "description": "本地打开失败",
      "rule_status": "proposed"
    }
  ],
  "acceptance_criteria": [
    {
      "id": "B-5-AC-01",
      "given": "配置来源/历史来源",
      "when": "关闭弹层",
      "then": "分别回 B-4/B-6。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5-AC-02",
      "given": "真实文件已可用",
      "when": "调用分享/本地打开",
      "then": "系统动作后仍留 B-5。",
      "rule_status": "confirmed"
    },
    {
      "id": "B-5-AC-03",
      "given": "离线预览",
      "when": "点击两个动作",
      "then": "只有本地选择反馈，不宣称文件生成/分享成功。",
      "rule_status": "proposed"
    },
    {
      "given": "预览选中数为0",
      "when": "点击下一步",
      "then": "按钮禁用，不能进入空词表生成流程",
      "rule_status": "proposed"
    },
    {
      "given": "从下一步返回",
      "when": "回本页",
      "then": "同一教材与范围保持草稿；不同范围重新核对",
      "rule_status": "proposed"
    },
    {
      "given": "网络或音源失败",
      "when": "重试或返回",
      "then": "保留可恢复数据，不伪造成功结果",
      "rule_status": "proposed"
    },
    {
      "given": "选择PDF或Word且两份都要",
      "when": "成功导出",
      "then": "合成1个文件并扣1次",
      "rule_status": "confirmed"
    },
    {
      "given": "图片共N页",
      "when": "N个图片文件成功生成",
      "then": "扣N次，失败文件不扣",
      "rule_status": "confirmed"
    },
    {
      "given": "文件成功生成",
      "when": "分享取消或系统预览失败",
      "then": "保持本页，已经生成的文件按数量计次",
      "rule_status": "confirmed"
    }
  ],
  "pending_from_source": [
    {
      "id": "B-5-P-03",
      "question": "余量0在哪里拦，横幅话术如何？",
      "rule_status": "pending",
      "source": "原待确认。"
    }
  ],
  "additional_unspecified": [
    {
      "id": "B-5-U-03",
      "question": "系统面板无微信、取消、预览失败分别反馈什么？",
      "rule_status": "pending",
      "source": "源未给。"
    },
    {
      "id": "B-5-U-04",
      "question": "输出文件缓存/有效期/重试/跨设备取得如何？",
      "rule_status": "pending",
      "source": "源未给。"
    },
    {
      "question": "多图片部分成功时建议展示逐文件结果、只重试失败文件；每个新增成功文件计1次，已成功文件不在同一次请求重试中重复生成。",
      "rule_status": "proposed",
      "source": "按成功文件数计次已确认；具体批次/重试服务契约待定"
    },
    {
      "question": "不同端额度同步、请求去重与计次对账由真实服务保证，接口契约待提供。",
      "rule_status": "pending"
    }
  ],
  "page_id": "B-5",
  "references": {
    "interface": "B-5.interface.md",
    "prototype": "B-5.prototype.html",
    "design": "UI-DESIGN.md"
  },
  "sources": [
    "英语默写代码/xzx-pages/pages/B-5.html"
  ],
  "source_of_truth": {
    "visual": "B-5.prototype.html 屏幕内产品 UI",
    "behavior": "原 UE 明确要求及当前用户已确认规则；proposed 与 pending 不构成已确认业务契约",
    "viewer_chrome": "手机外壳、项目导航、演示选择器、说明与页面编号属于预览宿主"
  },
  "limitations": {
    "prototype": [
      "仅演示目录选择、词表、版式和输出状态；没有真实出题、文件、支付、分享、音频或二维码服务。",
      "预览词库为示意数据：Unit2六词沿用UE，其余演示词为界面测试样例；不代表正式教材词库、词数或版次。",
      "新增详细状态、版式规则和草稿策略为设计建议；业务更改等待用户确认。",
      "专题、自建与补词已接入；默写单记录、会员和词库纠错属于后续模块。"
    ],
    "implementation": [
      "真实服务接口、鉴权、任务、额度、会员和系统调用契约未提供。",
      "具体字段/状态名及本地持久化方式均为实现建议。",
      "原型不证明真实文件、音频、扫码批改、正确额度或跨来源成长统计已实现。"
    ]
  },
  "prototype_states": [
    {
      "id": "ready",
      "label": "选择下载内容与格式",
      "scope": "prototype_only"
    },
    {
      "id": "exporting",
      "label": "文件生成中",
      "scope": "prototype_only"
    },
    {
      "id": "export-error",
      "label": "文件生成失败",
      "scope": "prototype_only"
    },
    {
      "id": "share-cancelled",
      "label": "分享已取消",
      "scope": "prototype_only"
    },
    {
      "id": "open-error",
      "label": "本地打开失败",
      "scope": "prototype_only"
    },
    {
      "id": "quota-zero",
      "label": "免费次数用完",
      "scope": "prototype_only"
    }
  ],
  "ui_family": "print",
  "user_confirmed_rules": [
    {
      "id": "GROWTH-WORD",
      "description": "积累单词统计成功导出的练习卷、已提交听写／客观练习、有效朗读涉及的词库单词，跨课本去重；答案卷不计，短语句子不拆词；表示接触，不表示掌握。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "GROWTH-CORRECT",
      "description": "同一稳定错题首次改对计一次；同轮末尾再练答对也计入；首答正确率保持原成绩。反复错后再对不重复累计。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "KEEP",
      "description": "三类记录与错题长期保留，不按会员截断，支持主动删除；自建词表历史独立保留。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "PRICE",
      "description": "年卡68元、终身98元；手动续费，无自动续费。价格由正式商品配置校验。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "PLATFORM",
      "description": "中国区iOS使用系统内购，国内安卓使用微信或支付宝；恢复权益、延迟到账与取消／失败都有独立状态。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "QUOTA",
      "description": "每账号免费累计3个成功导出文件、累计5轮听写／读单词／课文跟读批改评测，共用总额度，不按天恢复。失败不扣，同轮重试重读不重复扣。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "BENEFIT",
      "description": "客观练习不限次；免费开放6个专题、答案卷带水印；会员不限次数，手写／纸笔批改需会员。到期不重置已用免费总额度。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "WRONG",
      "description": "错题本仅做管理、来源／类型筛选、详情、移除及按原来源再练。听写与五种客观题收录，朗读低分独立。AI排期留25。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "INVITE",
      "description": "新用户经邀请完成注册即奖励邀请人7天会员，每月最多3次；年卡／赠送时长顺延，终身只记邀请不叠加时长；老用户重复邀请不奖励。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "CANCEL",
      "description": "验证身份并二次确认后立即注销；退出登录保留账号资产；退款按真实渠道与正式条款处理。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    },
    {
      "id": "HELP",
      "description": "先做帮助文章与邮箱联系版式；客服邮箱尚未确定；不编造可用邮箱。",
      "rule_status": "confirmed",
      "source": "用户2026-10-13回复"
    }
  ],
  "module_base": "教材默写单与打印",
  "tabs": [
    "默写单"
  ]
}
