{
  "documentVersion": 1,
  "format": "axhub-annotation-source",
  "data": {
    "version": 2,
    "prototypeName": "customer-management",
    "pageId": "list",
    "updatedAt": 1783800844964,
    "nodes": [
      {
        "id": "cm-list-filter",
        "index": 1,
        "title": "筛选条件",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-list-filter\"]"
          ],
          "fingerprint": "cm-list-filter",
          "path": []
        },
        "aiPrompt": "列表筛选区字段与查询逻辑。",
        "annotationText": "默认展示 4 项（一行），点击「更多筛选」显示全部。",
        "hasMarkdown": true,
        "color": "#2563eb",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-risk-role-switch",
        "index": 2,
        "title": "操作角色切换",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-risk-role-switch\"]"
          ],
          "fingerprint": "cm-risk-role-switch",
          "path": []
        },
        "aiPrompt": "模拟法务/财务/运维/风控/销售角色，驱动打标权限。",
        "annotationText": "切换角色后抽屉内标签类型与可选标签联动更新。",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-list-toolbar",
        "index": 3,
        "title": "列表工具栏",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-list-toolbar\"]"
          ],
          "fingerprint": "cm-list-toolbar",
          "path": []
        },
        "aiPrompt": "新增、导入、导出、批量打标入口。",
        "annotationText": "勾选客户后显示「批量打标」。",
        "hasMarkdown": true,
        "color": "#0f766e",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-list-table",
        "index": 4,
        "title": "客户台账列表",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-list-table\"]"
          ],
          "fingerprint": "cm-list-table",
          "path": []
        },
        "aiPrompt": "客户台账表格列与行操作，含风险标签列。",
        "annotationText": "操作列含「管理标签」；标签列按风险级别着色。",
        "hasMarkdown": true,
        "color": "#2563eb",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-risk-tag-drawer",
        "index": 5,
        "title": "风险标签管理抽屉",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-risk-tag-drawer\"]"
          ],
          "fingerprint": "cm-risk-tag-drawer",
          "path": []
        },
        "aiPrompt": "单客户打标、审批、移除、日志。",
        "annotationText": "仅列表页维护标签，不在新增/编辑表单维护。",
        "hasMarkdown": true,
        "color": "#d97706",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-batch-risk-tag-btn",
        "index": 6,
        "title": "批量打标入口",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-batch-risk-tag-btn\"]"
          ],
          "fingerprint": "cm-batch-risk-tag-btn",
          "path": []
        },
        "aiPrompt": "勾选多客户后批量提交同一标签。",
        "annotationText": "",
        "hasMarkdown": true,
        "color": "#0f766e",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-batch-risk-tag-modal",
        "index": 7,
        "title": "批量打标弹窗",
        "pageId": "list",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-batch-risk-tag-modal\"]"
          ],
          "fingerprint": "cm-batch-risk-tag-modal",
          "path": []
        },
        "aiPrompt": "批量打标表单与提交逻辑。",
        "annotationText": "",
        "hasMarkdown": true,
        "color": "#0f766e",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-create-base",
        "index": 8,
        "title": "客户信息",
        "pageId": "create",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-create-base\"]"
          ],
          "fingerprint": "cm-create-base",
          "path": []
        },
        "aiPrompt": "客户类型、全称、城市、部门负责人、合作状态等。",
        "annotationText": "通讯地址自动识别省市；不含风险标签字段。",
        "hasMarkdown": true,
        "color": "#2563eb",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-create-contact",
        "index": 9,
        "title": "联系人信息",
        "pageId": "create",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-create-contact\"]"
          ],
          "fingerprint": "cm-create-contact",
          "path": []
        },
        "aiPrompt": "联系人姓名、手机、职位。",
        "annotationText": "均为选填。",
        "hasMarkdown": true,
        "color": "#64748b",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-create-invoice",
        "index": 10,
        "title": "付款及开票信息",
        "pageId": "create",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-create-invoice\"]"
          ],
          "fingerprint": "cm-create-invoice",
          "path": []
        },
        "aiPrompt": "发票抬头、税号、银行账号等。",
        "annotationText": "发票抬头只读，与客户全称一致。",
        "hasMarkdown": true,
        "color": "#d97706",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      },
      {
        "id": "cm-create-footer",
        "index": 11,
        "title": "底部操作栏",
        "pageId": "create",
        "locator": {
          "selectors": [
            "[data-annotation-id=\"cm-create-footer\"]"
          ],
          "fingerprint": "cm-create-footer",
          "path": []
        },
        "aiPrompt": "重置与提交。",
        "annotationText": "提交校验必填项后 Toast 并返回列表。",
        "hasMarkdown": true,
        "color": "#0f766e",
        "images": [],
        "createdAt": 1740787200000,
        "updatedAt": 1740787200000
      }
    ]
  },
  "markdownMap": {
    "cm-list-filter": "## 4. 筛选区\r\n\r\n默认展示前 4 项（一行），点击「更多筛选」显示全部。\r\n\r\n| 字段 | 控件 | 匹配规则 |\r\n|---|---|---|\r\n| 客户编号 | 可搜索单选 | 精确匹配 `code` |\r\n| 客户名称 | 可搜索单选 | 精确匹配 `name` |\r\n| 标签 | 多选 | 客户 `labels` 包含任一选中标签（OR） |\r\n| 区域 | 可搜索单选 | 精确匹配 `region` |\r\n| 客户状态 | 多选 | `status` 在选中集合内 |\r\n| 业务部门 | 多选 | `department` 在选中集合内 |\r\n| 业务负责人 | 多选 | 随部门联动选项；`manager` 在选中集合内 |\r\n| 创建时间 | 日期范围 | `createTime` 落在区间内（含边界日） |\r\n\r\n### 4.1 操作逻辑\r\n\r\n| 操作 | 行为 |\r\n|---|---|\r\n| **查询** | 将当前筛选项写入已应用条件，页码重置为 1，清空行选中 |\r\n| **重置** | 清空待应用与已应用条件，页码重置为 1，清空行选中 |\r\n| 修改筛选项未点查询 | 不影响当前列表 |\r\n\r\n---",
    "cm-risk-role-switch": "### 5.1 操作角色切换（原型演示）\r\n\r\n列表顶部提供「当前操作角色」下拉，用于模拟不同部门用户：\r\n\r\n| 角色 | 部门 | 打标权限 |\r\n|---|---|---|\r\n| 王风控 | 风控部 | 全部标签 |\r\n| 李法务 | 法务部 | 法务类标签 |\r\n| 张财务 | 财务部 | 财务类标签 |\r\n| 赵运维 | 运维部 | 运维类标签 |\r\n| 陈销售 | 销售一部 | 仅查看，无打标入口 |\r\n\r\n切换角色后，风险标签管理抽屉内的**标签类型**、**可选标签**、**审批/移除按钮**随之联动更新。\r\n\r\n---",
    "cm-list-toolbar": "## 5. 列表工具栏\r\n\r\n| 按钮 | 行为 |\r\n|---|---|\r\n| 新增客户 | 进入新增客户页（分组表单） |\r\n| 批量导入 | Toast：批量导入（原型演示） |\r\n| **批量打标** | 勾选 ≥1 行且当前角色有打标权限时显示；打开批量打标弹窗 |\r\n| 批量导出 | Toast：导出当前列表条数 |\r\n\r\n### 5.1 操作角色切换（原型演示）\r\n\r\n列表顶部提供「当前操作角色」下拉，用于模拟不同部门用户：\r\n\r\n| 角色 | 部门 | 打标权限 |\r\n|---|---|---|\r\n| 王风控 | 风控部 | 全部标签 |\r\n| 李法务 | 法务部 | 法务类标签 |\r\n| 张财务 | 财务部 | 财务类标签 |\r\n| 赵运维 | 运维部 | 运维类标签 |\r\n| 陈销售 | 销售一部 | 仅查看，无打标入口 |\r\n\r\n切换角色后，风险标签管理抽屉内的**标签类型**、**可选标签**、**审批/移除按钮**随之联动更新。\r\n\r\n---",
    "cm-list-table": "## 6. 列表字段说明\r\n\r\n| 列 | 说明 |\r\n|---|---|\r\n| 客户编号 | 左固定列 |\r\n| 客户名称 | 超长省略 |\r\n| **风险标签** | 展示「生效中」标签；按风险级别着色（低/中/高/极高）；首标签 + `+N` 悬浮全部；有待审批时显示「审」标识；可点击打开管理抽屉 |\r\n| 客户区域 | 大区名称 |\r\n| 客户状态 | 绿点「正常」/ 红点「黑名单」 |\r\n| 业务部门 / 业务负责人 | 文本 |\r\n| 客户类型 / 所属行业 | 文本 |\r\n| 统一社会信用代码 / 法人 / 注册资本 / 经营状态 | 文本 |\r\n| 详细地址 / 创建时间 | 文本；创建时间不换行 |\r\n| 操作 | 详情、编辑、**管理标签**（有权限时）、删除（原型 Toast） |\r\n\r\n支持行多选（checkbox，仅当前页）；横向滚动；操作列右固定。\r\n\r\n---",
    "cm-risk-tag-drawer": "## 8. 风险标签维护（列表页专属）\r\n\r\n### 8.1 入口\r\n\r\n| 入口 | 说明 |\r\n|---|---|\r\n| 行操作「管理标签」 | 打开右侧抽屉，管理单个客户 |\r\n| 点击标签列 | 有权限时同「管理标签」 |\r\n| 工具栏「批量打标」 | 对当前勾选客户批量提交同一标签 |\r\n\r\n**不在**新增页、编辑页维护标签。\r\n\r\n### 8.2 管理抽屉结构\r\n\r\n| Tab | 内容 |\r\n|---|---|\r\n| 当前标签 | 已打标签列表：名称、类型、级别、状态、原因摘要；支持查看详情、移除、审批 |\r\n| 新增标签 | 打标表单（见 8.3） |\r\n| 操作日志 | 该客户全部标签相关审计记录 |\r\n\r\n### 8.3 打标表单字段\r\n\r\n| 字段 | 必填 | 规则 |\r\n|---|---|---|\r\n| 标签名称 | 是 | 按 7.1–7.4 分组下拉；仅当前角色有权限的标签可选；已存在同名有效标签不可重复选 |\r\n| 标签类型 | 是 | **根据当前操作角色自动带出**（财务→财务、法务→法务、运维→运维、风控→风控），**置灰不可编辑** |\r\n| 风险级别 | 是 | **选择标签名称后按目录自动带出**，**置灰不可编辑** |\r\n| 生效时间 | 是 | 日期，默认当天 |\r\n| 有效期至 | 是 | 日期，须 ≥ 生效时间；默认一年后 |\r\n| 原因说明 | 是 | 至少 10 字，供法务/财务/风控审批留痕 |\r\n| 附件 | 否 | 支持 .pdf / .jpg / .png / .xlsx，可多个 |\r\n\r\n### 8.4 批量打标\r\n\r\n- 展示已选客户 chips（超过 6 个显示 +N）\r\n- 表单字段与单客户打标一致\r\n- 已存在同名有效标签的客户自动跳过\r\n- 提交后写入批量操作日志\r\n\r\n### 8.5 标签生命周期\r\n\r\n| 状态 | 说明 |\r\n|---|---|\r\n| 生效中 | 参与列表展示，同步至 `labels` |\r\n| 待审批 | 高风险标签提交后进入；列表暂不展示为生效 |\r\n| 待确认 | 预留 |\r\n| 已驳回 | 审批未通过，不同步至 `labels` |\r\n| 已移除 | 操作人主动移除，需填写原因 |\r\n| 已过期 | 预留 |\r\n\r\n**高风险规则：** 风险级别为「高」或「极高」的标签提交后状态为「待审批」，须法务或风控审批通过后变为「生效中」。\r\n\r\n### 8.6 移除标签\r\n\r\n- 仅「生效中」且当前角色有移除权限的标签可移除\r\n- 须填写移除原因（至少 5 字）\r\n- 写入操作日志，并从列表 `labels` 同步清除\r\n\r\n---",
    "cm-batch-risk-tag-btn": "### 8.1 入口\r\n\r\n| 入口 | 说明 |\r\n|---|---|\r\n| 行操作「管理标签」 | 打开右侧抽屉，管理单个客户 |\r\n| 点击标签列 | 有权限时同「管理标签」 |\r\n| 工具栏「批量打标」 | 对当前勾选客户批量提交同一标签 |\r\n\r\n**不在**新增页、编辑页维护标签。",
    "cm-batch-risk-tag-modal": "### 8.4 批量打标\r\n\r\n- 展示已选客户 chips（超过 6 个显示 +N）\r\n- 表单字段与单客户打标一致\r\n- 已存在同名有效标签的客户自动跳过\r\n- 提交后写入批量操作日志",
    "cm-create-base": "## 2. 客户信息\r\n\r\n| 字段 | 必填 | 控件 | 说明 |\r\n|---|---|---|---|\r\n| 客户类型 | 是 | 下拉 | 企业 / 个人 / 事业单位 |\r\n| 客户分级 | 否 | 下拉 | A / B / C |\r\n| 客户全称 | 是 | 文本 | 与客户证照一致；变更时同步发票抬头 |\r\n| 客户简称 | 否 | 文本 | 选填 |\r\n| 所属城市 | 是 | 省-市级联 | 示例省市区数据 |\r\n| 通讯地址 | 否 | 文本 | |\r\n| 业务负责部门 | 是 | 下拉 | 变更时清空负责人 |\r\n| 业务负责人员 | 是 | 下拉 | 随部门联动，未选部门时禁用 |\r\n| 备注 | 否 | 多行文本 | |\r\n\r\n---",
    "cm-create-contact": "## 3. 联系人信息\r\n\r\n| 字段 | 必填 | 控件 |\r\n|---|---|---|\r\n| 姓名 | 否 | 文本 |\r\n| 手机号 | 否 | 文本 |\r\n| 职位 | 否 | 文本 |\r\n\r\n---",
    "cm-create-invoice": "## 4. 付款及开票信息\r\n\r\n| 字段 | 必填 | 控件 | 说明 |\r\n|---|---|---|---|\r\n| 发票抬头 | 是 | 文本（禁用） | 自动带入客户全称，不可手改 |\r\n| 纳税人识别号 | 是 | 文本 | |\r\n| 注册地址 | 否 | 文本 | |\r\n| 注册电话 | 否 | 文本 | |\r\n| 开户银行 | 是 | 文本 | |\r\n| 账号 | 否 | 文本 | |\r\n\r\n---",
    "cm-create-footer": "## 5. 校验与提交\r\n\r\n- 提交前校验所有必填项\r\n- 通过后 Toast「客户已保存（原型演示）」并返回列表\r\n- 重置清空全部字段，客户类型默认「企业」"
  },
  "assetMap": {},
  "directory": {
    "nodes": [
      {
        "type": "folder",
        "id": "cm-doc-root",
        "title": "客户管理说明",
        "defaultExpanded": true,
        "children": [
          {
            "type": "markdown",
            "id": "cm-doc-overview",
            "title": "模块总览",
            "markdown": "## 1. 模块定位\r\n\r\n| 项 | 说明 |\r\n|---|---|\r\n| 模块名称 | 客户管理 — 列表页 |\r\n| 目标用户 | 销售、业务负责人、运营、**法务、财务、风控** |\r\n| 核心任务 | 按多维度筛选客户台账，查看风险标签与状态，**在列表页维护客户风险标签**，新增客户或进入详情/编辑 |\r\n| 页面结构 | 面包屑 + **操作角色切换** + 筛选区 + 工具栏 + 表格 + 分页 |\r\n\r\n**重要约束：** 风险标签**不在**客户新增页、客户编辑表单中维护，仅在列表页作为操作入口。\r\n\r\n---"
          },
          {
            "type": "link",
            "id": "cm-link-self",
            "title": "客户管理原型",
            "href": "./index.html",
            "target": "self"
          },
          {
            "type": "folder",
            "id": "cm-doc-prd",
            "title": "PRD 全文",
            "defaultExpanded": false,
            "children": [
              {
                "type": "markdown",
                "id": "cm-doc-prd-list",
                "title": "列表页 PRD",
                "markdown": "# 客户管理 · 列表页产品需求说明（PRD）\r\n\r\n> 本页为客户主数据台账列表。标注「原型演示」的跳转、导入、导出仅 Toast 提示。\r\n\r\n---\r\n\r\n## 1. 模块定位\r\n\r\n| 项 | 说明 |\r\n|---|---|\r\n| 模块名称 | 客户管理 — 列表页 |\r\n| 目标用户 | 销售、业务负责人、运营、**法务、财务、风控** |\r\n| 核心任务 | 按多维度筛选客户台账，查看风险标签与状态，**在列表页维护客户风险标签**，新增客户或进入详情/编辑 |\r\n| 页面结构 | 面包屑 + **操作角色切换** + 筛选区 + 工具栏 + 表格 + 分页 |\r\n\r\n**重要约束：** 风险标签**不在**客户新增页、客户编辑表单中维护，仅在列表页作为操作入口。\r\n\r\n---\r\n\r\n## 2. 客户编号规则（集团多子公司）\r\n\r\n- 总长度 7，仅含大写字母 A–Z 与数字 0–9\r\n- 结构：第 1 位 = 签约/归属子公司代码；第 2–7 位 = 6 位数字流水号（000001–999999）\r\n- 流水号在「同一子公司代码」下递增\r\n- 校验正则：`/^[A-Z][0-9]{6}$/`\r\n- 示例：A000001（华东）、B000001（华南）、C000001（华北）等\r\n\r\n---\r\n\r\n## 3. 数据来源\r\n\r\n| 数据 | 来源 | 用途 |\r\n|---|---|---|\r\n| 客户台账 | `data/customers.json`（20 条样例） | 列表、筛选选项 |\r\n| 客户标签（展示） | 客户 `labels` 字段 | 列表「风险标签」列、筛选区「标签」多选 |\r\n| 风险标签明细 | `riskTagsByCustomer` 运行时状态 + 种子迁移 | 标签管理抽屉、审批、日志 |\r\n| 标签目录 | `utils/riskTagConstants.ts` → `TAG_CATALOG` | 打标表单选项、级别、分组 |\r\n| 操作日志 | `data/risk-tag-operation-logs.json` + 运行时追加 | 抽屉「操作日志」Tab |\r\n| 部门-负责人 | 由台账聚合 + `DEPT_MANAGER_MAP` | 筛选联动 |\r\n\r\n列表 `labels` 与「生效中」风险标签自动同步，保证筛选器与列表展示一致。\r\n\r\n---\r\n\r\n## 4. 筛选区\r\n\r\n默认展示前 4 项（一行），点击「更多筛选」显示全部。\r\n\r\n| 字段 | 控件 | 匹配规则 |\r\n|---|---|---|\r\n| 客户编号 | 可搜索单选 | 精确匹配 `code` |\r\n| 客户名称 | 可搜索单选 | 精确匹配 `name` |\r\n| 标签 | 多选 | 客户 `labels` 包含任一选中标签（OR） |\r\n| 区域 | 可搜索单选 | 精确匹配 `region` |\r\n| 客户状态 | 多选 | `status` 在选中集合内 |\r\n| 业务部门 | 多选 | `department` 在选中集合内 |\r\n| 业务负责人 | 多选 | 随部门联动选项；`manager` 在选中集合内 |\r\n| 创建时间 | 日期范围 | `createTime` 落在区间内（含边界日） |\r\n\r\n### 4.1 操作逻辑\r\n\r\n| 操作 | 行为 |\r\n|---|---|\r\n| **查询** | 将当前筛选项写入已应用条件，页码重置为 1，清空行选中 |\r\n| **重置** | 清空待应用与已应用条件，页码重置为 1，清空行选中 |\r\n| 修改筛选项未点查询 | 不影响当前列表 |\r\n\r\n---\r\n\r\n## 5. 列表工具栏\r\n\r\n| 按钮 | 行为 |\r\n|---|---|\r\n| 新增客户 | 进入新增客户页（分组表单） |\r\n| 批量导入 | Toast：批量导入（原型演示） |\r\n| **批量打标** | 勾选 ≥1 行且当前角色有打标权限时显示；打开批量打标弹窗 |\r\n| 批量导出 | Toast：导出当前列表条数 |\r\n\r\n### 5.1 操作角色切换（原型演示）\r\n\r\n列表顶部提供「当前操作角色」下拉，用于模拟不同部门用户：\r\n\r\n| 角色 | 部门 | 打标权限 |\r\n|---|---|---|\r\n| 王风控 | 风控部 | 全部标签 |\r\n| 李法务 | 法务部 | 法务类标签 |\r\n| 张财务 | 财务部 | 财务类标签 |\r\n| 赵运维 | 运维部 | 运维类标签 |\r\n| 陈销售 | 销售一部 | 仅查看，无打标入口 |\r\n\r\n切换角色后，风险标签管理抽屉内的**标签类型**、**可选标签**、**审批/移除按钮**随之联动更新。\r\n\r\n---\r\n\r\n## 6. 列表字段说明\r\n\r\n| 列 | 说明 |\r\n|---|---|\r\n| 客户编号 | 左固定列 |\r\n| 客户名称 | 超长省略 |\r\n| **风险标签** | 展示「生效中」标签；按风险级别着色（低/中/高/极高）；首标签 + `+N` 悬浮全部；有待审批时显示「审」标识；可点击打开管理抽屉 |\r\n| 客户区域 | 大区名称 |\r\n| 客户状态 | 绿点「正常」/ 红点「黑名单」 |\r\n| 业务部门 / 业务负责人 | 文本 |\r\n| 客户类型 / 所属行业 | 文本 |\r\n| 统一社会信用代码 / 法人 / 注册资本 / 经营状态 | 文本 |\r\n| 详细地址 / 创建时间 | 文本；创建时间不换行 |\r\n| 操作 | 详情、编辑、**管理标签**（有权限时）、删除（原型 Toast） |\r\n\r\n支持行多选（checkbox，仅当前页）；横向滚动；操作列右固定。\r\n\r\n---\r\n\r\n## 7. 客户标签枚举与分级目录\r\n\r\n标签按业务分类维护，打标时下拉按 **optgroup 分组** 展示。风险级别由目录**自动带出且不可手改**。\r\n\r\n### 7.1 信用与回款\r\n\r\n| 标签名称 | 标签类型 | 风险级别 | 典型触发 |\r\n|---|---|---|---|\r\n| 逾期预警 | 财务 | 中 | 当前逾期或近 6 个月内曾逾期 |\r\n| 严重拖欠 | 财务 | 高 | 逾期 > 30 天未结清或历史坏账 |\r\n| 频繁改账期 | 财务 | 低 | 一年内申请延长账期 ≥ 3 次 |\r\n\r\n### 7.2 合规与法律\r\n\r\n| 标签名称 | 标签类型 | 风险级别 | 典型触发 |\r\n|---|---|---|---|\r\n| 资质存疑 | 法务 | 中 | 证照过期、抬头与付款主体不一致等 |\r\n| 涉诉/仲裁 | 法务 | 高 | 与我司或第三方重大未结诉讼 |\r\n| 制裁/高风险地区 | 法务 | 高 | 名单筛查命中（依公司合规清单） |\r\n\r\n### 7.3 经营与履约\r\n\r\n| 标签名称 | 标签类型 | 风险级别 | 典型触发 |\r\n|---|---|---|---|\r\n| 频繁争议 | 法务 | 中 | 合同或扣款争议次数超阈值 |\r\n| 车辆/资产高风险 | 运维 | 高 | 违章、事故、疑似骗保等 |\r\n| 信息不实 | 风控 | 中 | 联系人/主体核查不实、空壳公司等 |\r\n\r\n### 7.4 操作与流程\r\n\r\n| 标签名称 | 标签类型 | 风险级别 | 典型触发 |\r\n|---|---|---|---|\r\n| 开票异常 | 财务 | 低 | 频繁退票、抬头异常变更 |\r\n| 多头签约 | 风控 | 低 | 同一实控人多主体分别签约 |\r\n\r\n### 7.5 列表展示样式\r\n\r\n- 低：灰色边框\r\n- 中：橙色浅底\r\n- 高：红色浅底\r\n- 极高：深红浅底\r\n- 单元格最大宽度受限，避免撑乱表格\r\n\r\n---\r\n\r\n## 8. 风险标签维护（列表页专属）\r\n\r\n### 8.1 入口\r\n\r\n| 入口 | 说明 |\r\n|---|---|\r\n| 行操作「管理标签」 | 打开右侧抽屉，管理单个客户 |\r\n| 点击标签列 | 有权限时同「管理标签」 |\r\n| 工具栏「批量打标」 | 对当前勾选客户批量提交同一标签 |\r\n\r\n**不在**新增页、编辑页维护标签。\r\n\r\n### 8.2 管理抽屉结构\r\n\r\n| Tab | 内容 |\r\n|---|---|\r\n| 当前标签 | 已打标签列表：名称、类型、级别、状态、原因摘要；支持查看详情、移除、审批 |\r\n| 新增标签 | 打标表单（见 8.3） |\r\n| 操作日志 | 该客户全部标签相关审计记录 |\r\n\r\n### 8.3 打标表单字段\r\n\r\n| 字段 | 必填 | 规则 |\r\n|---|---|---|\r\n| 标签名称 | 是 | 按 7.1–7.4 分组下拉；仅当前角色有权限的标签可选；已存在同名有效标签不可重复选 |\r\n| 标签类型 | 是 | **根据当前操作角色自动带出**（财务→财务、法务→法务、运维→运维、风控→风控），**置灰不可编辑** |\r\n| 风险级别 | 是 | **选择标签名称后按目录自动带出**，**置灰不可编辑** |\r\n| 生效时间 | 是 | 日期，默认当天 |\r\n| 有效期至 | 是 | 日期，须 ≥ 生效时间；默认一年后 |\r\n| 原因说明 | 是 | 至少 10 字，供法务/财务/风控审批留痕 |\r\n| 附件 | 否 | 支持 .pdf / .jpg / .png / .xlsx，可多个 |\r\n\r\n### 8.4 批量打标\r\n\r\n- 展示已选客户 chips（超过 6 个显示 +N）\r\n- 表单字段与单客户打标一致\r\n- 已存在同名有效标签的客户自动跳过\r\n- 提交后写入批量操作日志\r\n\r\n### 8.5 标签生命周期\r\n\r\n| 状态 | 说明 |\r\n|---|---|\r\n| 生效中 | 参与列表展示，同步至 `labels` |\r\n| 待审批 | 高风险标签提交后进入；列表暂不展示为生效 |\r\n| 待确认 | 预留 |\r\n| 已驳回 | 审批未通过，不同步至 `labels` |\r\n| 已移除 | 操作人主动移除，需填写原因 |\r\n| 已过期 | 预留 |\r\n\r\n**高风险规则：** 风险级别为「高」或「极高」的标签提交后状态为「待审批」，须法务或风控审批通过后变为「生效中」。\r\n\r\n### 8.6 移除标签\r\n\r\n- 仅「生效中」且当前角色有移除权限的标签可移除\r\n- 须填写移除原因（至少 5 字）\r\n- 写入操作日志，并从列表 `labels` 同步清除\r\n\r\n---\r\n\r\n## 9. 权限与审批\r\n\r\n### 9.1 打标权限\r\n\r\n| 角色 | 可选标签范围 | 标签类型（自动） |\r\n|---|---|---|\r\n| 财务 | 财务类（信用与回款、操作与流程中的财务标签） | 财务 |\r\n| 法务 | 法务类（合规与法律、经营与履约中的法务标签） | 法务 |\r\n| 运维 | 运维类（车辆/资产高风险） | 运维 |\r\n| 风控 / 管理员 | 全部 | 风控 |\r\n| 销售 | 无 | — |\r\n\r\n### 9.2 审批权限\r\n\r\n- 法务、风控、管理员可审批「待审批」标签\r\n- 支持通过 / 驳回；驳回须填写原因\r\n\r\n### 9.3 移除权限\r\n\r\n与打标权限一致：各角色仅能移除本类型标签；风控 / 管理员可移除全部类型。\r\n\r\n---\r\n\r\n## 10. 操作日志\r\n\r\n所有标签 **新增、移除、提交审批、审批通过、审批驳回、批量打标** 均写入日志。\r\n\r\n| 字段 | 说明 |\r\n|---|---|\r\n| 操作类型 | 新增 / 移除 / 提交审批 / 审批通过 / 审批驳回 / 批量打标 |\r\n| 客户 | 客户名称 + ID |\r\n| 标签名称 | 涉及标签 |\r\n| 详情 | 原因、审批结论等 |\r\n| 操作人 | 姓名 + 角色 |\r\n| 操作时间 | `YYYY-MM-DD HH:mm:ss` |\r\n\r\n抽屉「操作日志」Tab 按客户过滤；原型预置样例日志见 `data/risk-tag-operation-logs.json`。\r\n\r\n---\r\n\r\n## 11. 原型实现索引\r\n\r\n| 能力 | 代码位置 |\r\n|---|---|\r\n| 列表编排 | `index.tsx` |\r\n| 风险标签列 | `components/RiskLabelTags.tsx` |\r\n| 管理抽屉 | `components/RiskTagDrawer.tsx` |\r\n| 批量打标 | `components/BatchRiskTagModal.tsx` |\r\n| 打标表单 | `components/RiskTagForm.tsx` |\r\n| 标签目录 | `utils/riskTagConstants.ts` |\r\n| 权限 | `utils/permissions.ts` |\r\n| 业务逻辑 | `utils/riskTagStore.ts` |\r\n| 类型定义 | `types/riskTag.ts` |\r\n"
              },
              {
                "type": "markdown",
                "id": "cm-doc-prd-create",
                "title": "新增页 PRD",
                "markdown": "# 客户管理 · 新增页产品需求说明（PRD）\r\n\r\n> 从列表页「新增客户」进入。保存为原型 Toast，不对接真实接口。\r\n\r\n---\r\n\r\n## 1. 页面框架\r\n\r\n| 项 | 说明 |\r\n|---|---|\r\n| 面包屑 | 业务管理 / 客户管理 / 新增 |\r\n| 布局 | 三组卡片表单 + 底部 sticky 操作栏 |\r\n| 操作 | 重置（清空表单）、提交（校验后 Toast 成功并返回列表） |\r\n\r\n---\r\n\r\n## 2. 客户信息\r\n\r\n| 字段 | 必填 | 控件 | 说明 |\r\n|---|---|---|---|\r\n| 客户类型 | 是 | 下拉 | 企业 / 个人 / 事业单位 |\r\n| 客户分级 | 否 | 下拉 | A / B / C |\r\n| 客户全称 | 是 | 文本 | 与客户证照一致；变更时同步发票抬头 |\r\n| 客户简称 | 否 | 文本 | 选填 |\r\n| 所属城市 | 是 | 省-市级联 | 示例省市区数据 |\r\n| 通讯地址 | 否 | 文本 | |\r\n| 业务负责部门 | 是 | 下拉 | 变更时清空负责人 |\r\n| 业务负责人员 | 是 | 下拉 | 随部门联动，未选部门时禁用 |\r\n| 备注 | 否 | 多行文本 | |\r\n\r\n---\r\n\r\n## 3. 联系人信息\r\n\r\n| 字段 | 必填 | 控件 |\r\n|---|---|---|\r\n| 姓名 | 否 | 文本 |\r\n| 手机号 | 否 | 文本 |\r\n| 职位 | 否 | 文本 |\r\n\r\n---\r\n\r\n## 4. 付款及开票信息\r\n\r\n| 字段 | 必填 | 控件 | 说明 |\r\n|---|---|---|---|\r\n| 发票抬头 | 是 | 文本（禁用） | 自动带入客户全称，不可手改 |\r\n| 纳税人识别号 | 是 | 文本 | |\r\n| 注册地址 | 否 | 文本 | |\r\n| 注册电话 | 否 | 文本 | |\r\n| 开户银行 | 是 | 文本 | |\r\n| 账号 | 否 | 文本 | |\r\n\r\n---\r\n\r\n## 5. 校验与提交\r\n\r\n- 提交前校验所有必填项\r\n- 通过后 Toast「客户已保存（原型演示）」并返回列表\r\n- 重置清空全部字段，客户类型默认「企业」\r\n"
              }
            ]
          },
          {
            "type": "folder",
            "id": "cm-doc-list",
            "title": "列表页模块",
            "defaultExpanded": true,
            "children": [
              {
                "type": "route",
                "id": "cm-route-list",
                "title": "打开列表页",
                "route": "customer-management:list",
                "payload": {
                  "pageId": "list"
                }
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-list-filter",
                "title": "筛选条件",
                "markdown": "## 4. 筛选区\r\n\r\n默认展示前 4 项（一行），点击「更多筛选」显示全部。\r\n\r\n| 字段 | 控件 | 匹配规则 |\r\n|---|---|---|\r\n| 客户编号 | 可搜索单选 | 精确匹配 `code` |\r\n| 客户名称 | 可搜索单选 | 精确匹配 `name` |\r\n| 标签 | 多选 | 客户 `labels` 包含任一选中标签（OR） |\r\n| 区域 | 可搜索单选 | 精确匹配 `region` |\r\n| 客户状态 | 多选 | `status` 在选中集合内 |\r\n| 业务部门 | 多选 | `department` 在选中集合内 |\r\n| 业务负责人 | 多选 | 随部门联动选项；`manager` 在选中集合内 |\r\n| 创建时间 | 日期范围 | `createTime` 落在区间内（含边界日） |\r\n\r\n### 4.1 操作逻辑\r\n\r\n| 操作 | 行为 |\r\n|---|---|\r\n| **查询** | 将当前筛选项写入已应用条件，页码重置为 1，清空行选中 |\r\n| **重置** | 清空待应用与已应用条件，页码重置为 1，清空行选中 |\r\n| 修改筛选项未点查询 | 不影响当前列表 |\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-risk-role-switch",
                "title": "操作角色切换",
                "markdown": "### 5.1 操作角色切换（原型演示）\r\n\r\n列表顶部提供「当前操作角色」下拉，用于模拟不同部门用户：\r\n\r\n| 角色 | 部门 | 打标权限 |\r\n|---|---|---|\r\n| 王风控 | 风控部 | 全部标签 |\r\n| 李法务 | 法务部 | 法务类标签 |\r\n| 张财务 | 财务部 | 财务类标签 |\r\n| 赵运维 | 运维部 | 运维类标签 |\r\n| 陈销售 | 销售一部 | 仅查看，无打标入口 |\r\n\r\n切换角色后，风险标签管理抽屉内的**标签类型**、**可选标签**、**审批/移除按钮**随之联动更新。\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-list-toolbar",
                "title": "列表工具栏",
                "markdown": "## 5. 列表工具栏\r\n\r\n| 按钮 | 行为 |\r\n|---|---|\r\n| 新增客户 | 进入新增客户页（分组表单） |\r\n| 批量导入 | Toast：批量导入（原型演示） |\r\n| **批量打标** | 勾选 ≥1 行且当前角色有打标权限时显示；打开批量打标弹窗 |\r\n| 批量导出 | Toast：导出当前列表条数 |\r\n\r\n### 5.1 操作角色切换（原型演示）\r\n\r\n列表顶部提供「当前操作角色」下拉，用于模拟不同部门用户：\r\n\r\n| 角色 | 部门 | 打标权限 |\r\n|---|---|---|\r\n| 王风控 | 风控部 | 全部标签 |\r\n| 李法务 | 法务部 | 法务类标签 |\r\n| 张财务 | 财务部 | 财务类标签 |\r\n| 赵运维 | 运维部 | 运维类标签 |\r\n| 陈销售 | 销售一部 | 仅查看，无打标入口 |\r\n\r\n切换角色后，风险标签管理抽屉内的**标签类型**、**可选标签**、**审批/移除按钮**随之联动更新。\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-list-table",
                "title": "客户台账列表",
                "markdown": "## 6. 列表字段说明\r\n\r\n| 列 | 说明 |\r\n|---|---|\r\n| 客户编号 | 左固定列 |\r\n| 客户名称 | 超长省略 |\r\n| **风险标签** | 展示「生效中」标签；按风险级别着色（低/中/高/极高）；首标签 + `+N` 悬浮全部；有待审批时显示「审」标识；可点击打开管理抽屉 |\r\n| 客户区域 | 大区名称 |\r\n| 客户状态 | 绿点「正常」/ 红点「黑名单」 |\r\n| 业务部门 / 业务负责人 | 文本 |\r\n| 客户类型 / 所属行业 | 文本 |\r\n| 统一社会信用代码 / 法人 / 注册资本 / 经营状态 | 文本 |\r\n| 详细地址 / 创建时间 | 文本；创建时间不换行 |\r\n| 操作 | 详情、编辑、**管理标签**（有权限时）、删除（原型 Toast） |\r\n\r\n支持行多选（checkbox，仅当前页）；横向滚动；操作列右固定。\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-risk-tag-drawer",
                "title": "风险标签管理抽屉",
                "markdown": "## 8. 风险标签维护（列表页专属）\r\n\r\n### 8.1 入口\r\n\r\n| 入口 | 说明 |\r\n|---|---|\r\n| 行操作「管理标签」 | 打开右侧抽屉，管理单个客户 |\r\n| 点击标签列 | 有权限时同「管理标签」 |\r\n| 工具栏「批量打标」 | 对当前勾选客户批量提交同一标签 |\r\n\r\n**不在**新增页、编辑页维护标签。\r\n\r\n### 8.2 管理抽屉结构\r\n\r\n| Tab | 内容 |\r\n|---|---|\r\n| 当前标签 | 已打标签列表：名称、类型、级别、状态、原因摘要；支持查看详情、移除、审批 |\r\n| 新增标签 | 打标表单（见 8.3） |\r\n| 操作日志 | 该客户全部标签相关审计记录 |\r\n\r\n### 8.3 打标表单字段\r\n\r\n| 字段 | 必填 | 规则 |\r\n|---|---|---|\r\n| 标签名称 | 是 | 按 7.1–7.4 分组下拉；仅当前角色有权限的标签可选；已存在同名有效标签不可重复选 |\r\n| 标签类型 | 是 | **根据当前操作角色自动带出**（财务→财务、法务→法务、运维→运维、风控→风控），**置灰不可编辑** |\r\n| 风险级别 | 是 | **选择标签名称后按目录自动带出**，**置灰不可编辑** |\r\n| 生效时间 | 是 | 日期，默认当天 |\r\n| 有效期至 | 是 | 日期，须 ≥ 生效时间；默认一年后 |\r\n| 原因说明 | 是 | 至少 10 字，供法务/财务/风控审批留痕 |\r\n| 附件 | 否 | 支持 .pdf / .jpg / .png / .xlsx，可多个 |\r\n\r\n### 8.4 批量打标\r\n\r\n- 展示已选客户 chips（超过 6 个显示 +N）\r\n- 表单字段与单客户打标一致\r\n- 已存在同名有效标签的客户自动跳过\r\n- 提交后写入批量操作日志\r\n\r\n### 8.5 标签生命周期\r\n\r\n| 状态 | 说明 |\r\n|---|---|\r\n| 生效中 | 参与列表展示，同步至 `labels` |\r\n| 待审批 | 高风险标签提交后进入；列表暂不展示为生效 |\r\n| 待确认 | 预留 |\r\n| 已驳回 | 审批未通过，不同步至 `labels` |\r\n| 已移除 | 操作人主动移除，需填写原因 |\r\n| 已过期 | 预留 |\r\n\r\n**高风险规则：** 风险级别为「高」或「极高」的标签提交后状态为「待审批」，须法务或风控审批通过后变为「生效中」。\r\n\r\n### 8.6 移除标签\r\n\r\n- 仅「生效中」且当前角色有移除权限的标签可移除\r\n- 须填写移除原因（至少 5 字）\r\n- 写入操作日志，并从列表 `labels` 同步清除\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-batch-risk-tag-btn",
                "title": "批量打标入口",
                "markdown": "### 8.1 入口\r\n\r\n| 入口 | 说明 |\r\n|---|---|\r\n| 行操作「管理标签」 | 打开右侧抽屉，管理单个客户 |\r\n| 点击标签列 | 有权限时同「管理标签」 |\r\n| 工具栏「批量打标」 | 对当前勾选客户批量提交同一标签 |\r\n\r\n**不在**新增页、编辑页维护标签。"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-batch-risk-tag-modal",
                "title": "批量打标弹窗",
                "markdown": "### 8.4 批量打标\r\n\r\n- 展示已选客户 chips（超过 6 个显示 +N）\r\n- 表单字段与单客户打标一致\r\n- 已存在同名有效标签的客户自动跳过\r\n- 提交后写入批量操作日志"
              }
            ]
          },
          {
            "type": "folder",
            "id": "cm-doc-create",
            "title": "新增页模块",
            "defaultExpanded": true,
            "children": [
              {
                "type": "route",
                "id": "cm-route-create",
                "title": "打开新增页",
                "route": "customer-management:create",
                "payload": {
                  "pageId": "create"
                }
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-create-base",
                "title": "客户信息",
                "markdown": "## 2. 客户信息\r\n\r\n| 字段 | 必填 | 控件 | 说明 |\r\n|---|---|---|---|\r\n| 客户类型 | 是 | 下拉 | 企业 / 个人 / 事业单位 |\r\n| 客户分级 | 否 | 下拉 | A / B / C |\r\n| 客户全称 | 是 | 文本 | 与客户证照一致；变更时同步发票抬头 |\r\n| 客户简称 | 否 | 文本 | 选填 |\r\n| 所属城市 | 是 | 省-市级联 | 示例省市区数据 |\r\n| 通讯地址 | 否 | 文本 | |\r\n| 业务负责部门 | 是 | 下拉 | 变更时清空负责人 |\r\n| 业务负责人员 | 是 | 下拉 | 随部门联动，未选部门时禁用 |\r\n| 备注 | 否 | 多行文本 | |\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-create-contact",
                "title": "联系人信息",
                "markdown": "## 3. 联系人信息\r\n\r\n| 字段 | 必填 | 控件 |\r\n|---|---|---|\r\n| 姓名 | 否 | 文本 |\r\n| 手机号 | 否 | 文本 |\r\n| 职位 | 否 | 文本 |\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-create-invoice",
                "title": "付款及开票信息",
                "markdown": "## 4. 付款及开票信息\r\n\r\n| 字段 | 必填 | 控件 | 说明 |\r\n|---|---|---|---|\r\n| 发票抬头 | 是 | 文本（禁用） | 自动带入客户全称，不可手改 |\r\n| 纳税人识别号 | 是 | 文本 | |\r\n| 注册地址 | 否 | 文本 | |\r\n| 注册电话 | 否 | 文本 | |\r\n| 开户银行 | 是 | 文本 | |\r\n| 账号 | 否 | 文本 | |\r\n\r\n---"
              },
              {
                "type": "markdown",
                "id": "cm-doc-node-cm-create-footer",
                "title": "底部操作栏",
                "markdown": "## 5. 校验与提交\r\n\r\n- 提交前校验所有必填项\r\n- 通过后 Toast「客户已保存（原型演示）」并返回列表\r\n- 重置清空全部字段，客户类型默认「企业」"
              }
            ]
          }
        ]
      }
    ]
  }
}
