# 新增客源 UI 设计文档 > **版本**:v1.0 · **日期**:2026-04-26 > **依赖规范**:UI_SYSTEM.md v1.2 · 组件规范设计.md v1.0 > **PRD 来源**:`Project/fonrey/PRD/客源管理/客源管理模块PRD.md` §5.2 录入私客 / Story 1 > **优先级**:P0 功能在本文档中用 🔴 标注,P1 用 🟡,P2 用 ⚫ --- ## 目录 1. [模块概述](#1-模块概述) - 1.1 功能范围 - 1.2 页面清单 - 1.3 用户角色与权限差异 2. [页面设计规范](#2-页面设计规范) - 2.1 录入私客页面(P0 🔴) 3. [弹窗/抽屉设计规范](#3-弹窗抽屉设计规范) - 3.1 扩展联系人字段展开区(内联展开) - 3.2 扩展基础信息字段展开区(内联展开) 4. [交互状态规范](#4-交互状态规范) - 4.1 表单校验状态机 - 4.2 权限控制矩阵 - 4.3 HTMX 请求规范 5. [关键数据字段说明](#5-关键数据字段说明) 6. [竞品截图对应关系](#6-竞品截图对应关系) 7. [实现优先级与工期估算](#7-实现优先级与工期估算) 8. [开放问题(待决策)](#8-开放问题待决策) --- ## 1. 模块概述 ### 1.1 功能范围 本文档聚焦 **新增客源(录入私客)** 单一页面的 UI 设计。该页面是客源管理模块的核心入口,对应 PRD Story 1。 | 功能 | 优先级 | PRD 章节 | |------|--------|---------| | 联系人区块录入(姓名/性别/电话1) | P0 🔴 | §5.2.2 | | 联系人扩展字段(电话2/微信/QQ) | P0 🔴 | §5.2.2 | | 多联系人支持(新增/删除) | P0 🔴 | §5.2.2 | | 基础信息录入(状态/用途/等级/来源) | P0 🔴 | §5.2.3 | | 基础信息扩展字段(证件/意向学校) | P1 🟡 | §5.2.3 | | 相关员工区块(首录人/归属人只读) | P0 🔴 | §5.2.4 | | 表单提交校验与成功跳转 | P0 🔴 | §5.2.5 | | 电话1 实时重复检测 | P0 🔴 | §5.2.5 / §5.4 | ### 1.2 页面清单 | 页面名称 | URL 模式建议 | 优先级 | 对应 PRD 章节 | |---------|------------|--------|--------------| | 录入私客 | `/clients/create/` | P0 🔴 | §5.2 Story 1 | ### 1.3 用户角色与权限差异 | 差异点 | 经纪人 | 店长 | 管理员 | |--------|--------|------|--------| | 访问入口 | 顶部导航「客源」→「+ 新增私客」 / 右侧浮动「增客」 | 同左 | 同左 | | 首录人字段 | 只读(自动填充自身) | 只读(自动填充自身) | 只读(自动填充自身) | | 归属人字段 | 只读(与首录人一致) | 只读(默认自身,可在详情页修改) | 只读(可在详情页修改) | | 来源选项 | 使用运营维护的枚举值,不可新增 | 同左 | 可在系统设置中维护来源枚举 | > **说明**:录入页面本身无角色差异(字段完全相同),权限差异体现在录入后的归属人修改权限。 --- ## 2. 页面设计规范 ### 2.1 录入私客页面(P0 🔴) #### 2.1.1 页面概述 - **URL**:`/clients/create/` - **访问入口**: - 顶部导航 「客源」 → 右上角「+ 新增私客」按钮 - 右侧浮动快捷入口「增客」图标按钮 - **页面职责**:录入新私客联系人信息、购房需求及相关员工,提交后跳转至客源详情页 - **竞品参考截图**:`Project/fonrey/screenshots/客源/录入客源.png` #### 2.1.2 布局结构 页面采用**居中单栏表单**布局,内容区水平居中显示,两侧留有 padding,无侧边栏(独立页面)。 ``` ┌──────────────────────────────────────────────────────────────┐ │ 顶部导航栏(Topbar,`bg-primary-800`,56px) │ ├──────────────────────────────────────────────────────────────┤ │ 面包屑 + 页面标题 H1「录入私客」 │ ├──────────────────────────────────────────────────────────────┤ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 联系人1 区块 │ │ │ │ (姓名 | 性别 | 电话1 + [电话2、微信、QQ等 ▾]) │ │ │ ├────────────────────────────────────────────────────────┤ │ │ │ 联系人2 区块(若已新增)[删除] │ │ │ │ … │ │ │ │ [+ 新增联系人] │ │ │ ├────────────────────────────────────────────────────────┤ │ │ │ 基础信息区块 │ │ │ │ (状态 | 用途 | 等级 | 来源 + [证件、学校等 ▾]) │ │ │ ├────────────────────────────────────────────────────────┤ │ │ │ 相关员工区块 │ │ │ │ (首录人 [只读] | 归属人 [只读]) │ │ │ └────────────────────────────────────────────────────────┘ │ │ │ │ [确定(橙色主按钮)] [取消] │ └──────────────────────────────────────────────────────────────┘ ``` **布局核心参数:** | 参数 | 值 | |------|-----| | 内容区最大宽度 | `max-w-5xl`(1024px),水平居中 `mx-auto` | | 内容区内边距 | `px-6 py-6` | | 页面背景 | `bg-neutral-50` | | 各区块容器 | `bg-white rounded-lg border border-neutral-200 p-6 mb-4` | | 区块间距 | `space-y-4` | > **竞品截图对比**:竞品(巧房 V2.0)使用居中略窄的单栏卡片布局,表单内容在白色卡片区域内分区呈现。Fonrey 遵循同样模式,但改用 Teal 主色系,底部固定操作按钮与页面流同步(非 Sticky fixed)。 > **新增/编辑页面统一宽度约定(全局)**:从本页面起,客源模块后续所有「新增/编辑」类页面的内容区默认使用 `max-w-5xl`(1024px)+ `mx-auto`。若某页面字段更少可在局部收窄,但默认实现不得低于该基准,以避免右侧内容区留白过多与字段扩展空间不足。 #### 2.1.3 区域详细规范 --- **[区域 A:页面头部]** | 属性 | 说明 | |------|------| | 面包屑 | `客源 / 录入私客`,使用 `text-xs text-neutral-500`,分隔符 `/` | | 页面标题 | `录入私客`,`text-xl font-semibold text-neutral-800` | | 顶部无操作按钮 | 本页为纯录入表单,顶部无次级按钮 | ```html
存在重复客源:张三(可点击查看)
` **扩展字段折叠区(「电话2、微信、QQ等 ▾」):** Alpine.js 控制展开/收起,初始折叠。 | 字段 | 组件类型 | 必填 | 说明 | |------|---------|------|------| | 电话2 | 区号下拉 + 手机号输入 | 否 | 格式同电话1 | | 微信 | `` | 否 | `placeholder="请输入"` | | QQ | `` | 否 | `placeholder="请输入"` | ```html