# 中介黑名单弹窗优化设计

## 需求概述

优化中介黑名单的添加弹窗交互流程：

1. 点击新增后先选择中介类型（个人/机构）
2. 然后弹出对应类型的信息输入窗口
3. 不需要tab栏，直接显示对应类型的表单
4. 机构类型只需输入一次证件号，该值同时作为"证件号"和"统一社会信用代码"

## 设计方案

### 1. 交互流程

**新增操作流程：**

1. 用户点击"新增"按钮
2. 弹出一个简洁的对话框，顶部有两个大卡片式按钮：【个人】和【机构】
3. 用户点击其中一个类型按钮
4. 对应的表单立即展开显示在下方（无需确认操作）
5. 用户填写信息后点击"确定"提交

**修改操作：**

- 修改时直接显示原有数据的表单，不允许切换类型

### 2. 界面布局

```
┌─────────────────────────────────────┐
│     添加中介黑名单                   │
├─────────────────────────────────────┤
│                                     │
│  ┌─────────┐  ┌─────────┐          │
│  │  个人   │  │  机构   │          │ ← 大卡片式选择按钮（仅新增时显示）
│  └─────────┘  └─────────┘          │
│                                     │
│  ────────────────────────────────   │ ← 分隔线
│                                     │
│  [对应类型的表单字段]               │
│  • 姓名/机构名称                    │
│  • 证件号                           │
│  • 机构类型：统一社会信用代码        │
│  • 其他选填字段...                  │
│                                     │
├─────────────────────────────────────┤
│        [ 确定 ]    [ 取消 ]         │
└─────────────────────────────────────┘
```

### 3. 表单字段

**个人类型表单字段：**

- 姓名/机构名称*（必填）
- 证件号*（必填）
- 人员类型
- 人员子类型
- 性别
- 证件类型
- 手机号码
- 微信号
- 联系地址
- 所在公司
- 职位
- 关联人员ID
- 关联关系
- 备注

**机构类型表单字段：**

- 姓名/机构名称*（必填）
- 证件号*（必填，自动同步到统一社会信用代码）
- 主体类型
- 企业性质
- 成立日期
- 行业分类
- 所属行业
- 注册地址
- 法定代表人
- 法定代表人证件类型
- 法定代表人证件号码
- 股东1-5
- 备注

### 4. 表单验证规则

**个人类型验证：**

```javascript
rules: {
  name: [
    { required: true, message: "姓名不能为空", trigger: "blur" },
    { max: 100, message: "姓名长度不能超过100个字符", trigger: "blur" }
  ],
  certificateNo: [
    { required: true, message: "证件号不能为空", trigger: "blur" },
    { max: 50, message: "证件号长度不能超过50个字符", trigger: "blur" }
  ],
  remark: [
    { max: 500, message: "备注长度不能超过500个字符", trigger: "blur" }
  ]
}
```

**机构类型验证：**

```javascript
rules: {
  name: [
    { required: true, message: "机构名称不能为空", trigger: "blur" },
    { max: 100, message: "机构名称长度不能超过100个字符", trigger: "blur" }
  ],
  certificateNo: [
    { required: true, message: "证件号不能为空", trigger: "blur" },
    { max: 18, message: "统一社会信用代码长度为18位", trigger: "blur" }
  ],
  remark: [
    { max: 500, message: "备注长度不能超过500个字符", trigger: "blur" }
  ]
}
```

### 5. 边界情况处理

| 场景               | 处理方式                |
|------------------|---------------------|
| 用户点击新增后未选择类型就点确定 | 禁用"确定"按钮，直到选择类型     |
| 用户选择类型后想重新选择     | 只有关闭弹窗重新打开才能选择      |
| 修改操作时类型锁定        | 隐藏类型选择器，直接显示对应表单    |
| 表单验证失败           | 高亮显示错误字段，滚动到第一个错误位置 |
| 网络请求失败           | 显示错误提示，弹窗保持打开状态     |

### 6. 用户体验优化

1. **视觉反馈**：
    - 类型选择按钮在未选中时有hover效果
    - 选中后按钮变为高亮状态，其他按钮变灰
    - 表单展开有淡入动画

2. **输入提示**：
    - 个人类型的证件号字段下方显示提示："请输入证件号码"
    - 机构类型的证件号字段下方显示提示："统一社会信用代码（18位）"

3. **表单布局**：
    - 保持两列布局，充分利用空间
    - 必填项（姓名、证件号）标记红色星号

### 7. 技术实现要点

**状态管理：**

- 新增模式：`isAddMode: true`，显示类型选择器
- 修改模式：`isAddMode: false`，隐藏类型选择器
- 已选类型：`selectedType: '1' | '2' | null`

**数据同步：**

- 机构类型提交时，将 `form.certificateNo` 的值同时赋给 `form.corpCreditCode`

