# 智聘通 - 智能招聘系统完整设计方案 v1.0

**微智电子 | 2026年3月**

---

## 一、项目概述

### 1.1 项目背景
传统纸质面试登记效率低、体验差，无法展现公司科技化形象。需要一套自动化、智能化的面试系统，提升面试体验，同时收集人才数据。

### 1.2 核心目标
- ✅ 实现无纸化面试登记
- ✅ 展现公司AI化、年轻化、高端化形象
- ✅ 通过MBTI测试了解候选人性格特质
- ✅ 自动化数据收集与分析
- ✅ 提升品牌曝光（社交传播）

### 1.3 用户角色

| 角色 | 描述 | 使用场景 |
|------|------|----------|
| **面试者** | 前来面试的候选人 | 扫码登记 → 填写信息 → 完成测试 → 查看结果 |
| **HR管理员** | 人事部门工作人员 | 查看数据 → 筛选候选人 → 导出报表 → 管理面试流程 |
| **系统管理员** | 技术人员/CEO | 系统配置 → 数据备份 → 权限管理 |

### 1.4 面试流程总览

```
1️⃣ 扫码进入 → 2️⃣ 信息登记 → 3️⃣ 公司介绍 → 4️⃣ 面试答题 → 5️⃣ MBTI测试 → 6️⃣ 查看结果 → 7️⃣ 领取礼品 → 8️⃣ 完成
```

---

## 二、系统架构

### 2.1 技术栈

| 层级 | 技术 |
|------|------|
| **前端** | HTML5 + CSS3 + JavaScript (ES6+) |
| **后端** | Node.js + Express |
| **数据库** | MySQL 5.7+ |
| **文件存储** | 本地文件系统 |

### 2.2 部署架构

```
用户层 (面试者手机 / HR电脑)
    ↓
Nginx (反向代理) :80/:443
    ↓
├─ 静态页面 /tools/recruitment_v2/
├─ API服务 :3002 (Node.js + Express)
└─ 文件上传 /uploads/photos/
    ↓
MySQL 5.7 主数据库
```

### 2.3 目录结构

```
/usr/share/nginx/html/tools/recruitment_v2/
├── index.html              # 面试者入口
├── admin.html              # HR后台管理
├── result.html             # MBTI结果展示
├── intro.html              # 公司介绍
├── test.html               # MBTI测试
├── css/
├── js/
├── server/                 # Node.js后端
│   ├── server.js
│   ├── package.json
│   └── routes/
├── uploads/photos/         # 照片存储
└── sql/init.sql            # 数据库初始化
```

### 2.4 访问地址

| 页面 | 地址 |
|------|------|
| 面试者入口 | `/index.html` |
| 后台管理 | `/admin.html` |
| MBTI测试 | `/test.html` |
| 结果展示 | `/result.html?id=xxx` |
| API服务 | `http://服务器IP:3002` |

---

## 三、前端页面详细设计

### 3.1 整体UI风格

- 🎯 **科技感**：深色/渐变背景，科技感图标
- 🎯 **年轻化**：活泼但不失专业
- 🎯 **高端感**：简洁大气，留白充足
- 🎯 **易用性**：手机端优先，大按钮

### 3.2 面试者入口 (index.html)

**功能模块：**
- 欢迎动画（Logo淡入）
- 扫码提示
- 开始登记按钮

**【必填】字段清单 - 基本信息：**

| 字段 | 类型 | 必填 | 验证规则 |
|------|------|------|----------|
| 姓名 | 文本 | ✅ | 2-20字符，中文/英文 |
| 性别 | 单选 | ✅ | 男/女 |
| 年龄 | 数字 | ✅ | 18-60岁 |
| 联系电话 | 文本 | ✅ | 11位手机号 |
| 电子邮箱 | 文本 | 建议 | 邮箱格式 |
| 现居地址 | 文本 | ✅ | 10-100字符 |

**【必填】字段清单 - 教育经历：**

| 字段 | 类型 | 必填 | 选项 |
|------|------|------|------|
| 最高学历 | 下拉 | ✅ | 高中/大专/本科/硕士/博士/其他 |
| 毕业院校 | 文本 | 建议 | - |
| 专业 | 文本 | 否 | - |

**【必填】字段清单 - 求职信息：**

| 字段 | 类型 | 必填 | 说明 |
|------|------|------|------|
| 应聘岗位 | 下拉 | ✅ | 从预设岗位列表选择 |
| 工作年限 | 下拉 | ✅ | 应届/1-3年/3-5年/5-10年/10年以上 |
| 期望薪资 | 下拉 | 建议 | 面议/5K以下/5-8K/8-12K/12-20K/20K以上 |
| 上一家公司 | 文本 | 建议 | 了解工作经历 |

**⚠️ 【核心要求】照片上传：**
1. **必须拍摄/上传照片** - HR强制要求
2. 支持两种方式：**现场拍照** 或 **从相册选择**
3. 照片要求：正面免冠、清晰、光线充足
4. 文件大小限制：最大5MB
5. 格式：JPG/PNG
6. 上传前可预览、可重新拍摄

**其他必填字段：**
- 婚姻状况（单选）
- 紧急联系人（文本）
- 紧急联系人电话（文本）
- 个人优势/工作经历（多行文本，可选）

### 3.3 公司介绍 (intro.html)

- 公司介绍视频/PPT（自动播放/手动翻页）
- 品牌故事（13年深耕智能照明）
- 核心产品展示（智步楼梯灯等）
- 荣誉资质（国家高新、米家合作等）
- 办公环境照片展示
- 企业文化、团队氛围
- 福利介绍

### 3.4 面试答题 (interview.html)

- 按应聘岗位显示对应题目
- 每岗位3-5道简答题
- 答题框支持多行文本
- 字数统计
- 必须全部回答才能提交

### 3.5 MBTI测试 (test.html)

- 30道选择题（每题2个选项A/B）
- 进度条显示（如：第5题/共30题）
- localStorage缓存答题进度
- 完成后自动计算结果并跳转

**MBTI维度：**
- E/I（外向/内向）：8题
- S/N（感觉/直觉）：8题
- T/F（思考/情感）：7题
- J/P（判断/感知）：7题

### 3.6 测试结果/电子简历 (result.html)

- 候选人编号（唯一ID，如：WS202603110001）
- 个人照片
- 基本信息展示
- MBTI类型展示（4字母，如：INTJ）
- MBTI详细分析（性格特点、优势劣势、适合工作类型）
- 可视化雷达图/柱状图展示4维度得分
- 操作按钮：保存截图 / 发送邮箱 / 打印简历

### 3.7 响应式适配要求

**手机端优先（Mobile First）：**
- 面试者主要使用手机扫码进入
- 按钮尺寸不小于44px（便于触控）
- 表单输入框高度不小于40px
- 拍照功能必须适配手机摄像头

---

## 四、后端API设计

### 4.1 基础配置

```json
{
  "server": {
    "port": 3002,
    "host": "0.0.0.0"
  },
  "database": {
    "host": "10.1.4.4",
    "port": 3306,
    "user": "root",
    "password": "Ms19880219",
    "database": "zhipintong"
  },
  "cors": {
    "origin": "*",
    "methods": ["GET", "POST", "PUT", "DELETE"]
  }
}
```

### 4.2 API接口清单

**候选人管理 API：**

| 方法 | 路径 | 功能 |
|------|------|------|
| POST | `/api/candidates` | 创建候选人 |
| GET | `/api/candidates` | 获取候选人列表 |
| GET | `/api/candidates/:id` | 获取单个候选人 |
| PUT | `/api/candidates/:id` | 更新候选人信息 |
| DELETE | `/api/candidates/:id` | 删除候选人 |
| POST | `/api/candidates/:id/status` | 更新面试状态 |

**MBTI API：**

| 方法 | 路径 | 功能 |
|------|------|------|
| GET | `/api/mbti/questions` | 获取MBTI题目 |
| POST | `/api/mbti/submit` | 提交MBTI答案 |
| GET | `/api/mbti/result/:id` | 获取MBTI结果 |
| GET | `/api/mbti/types` | 获取16种类型描述 |
| GET | `/api/mbti/stats` | MBTI统计分布 |

**文件上传 API：**

| 方法 | 路径 | 功能 |
|------|------|------|
| POST | `/api/upload/photo` | 上传照片 |
| GET | `/uploads/photos/:filename` | 获取照片 |

### 4.3 API响应格式

```json
// 成功响应
{
  "success": true,
  "code": 200,
  "message": "操作成功",
  "data": { },
  "timestamp": "2026-03-11T12:00:00Z"
}

// 错误响应
{
  "success": false,
  "code": 400,
  "message": "参数错误",
  "errors": [ ]
}
```

### 4.4 MBTI计分算法

```javascript
function calculateMBTI(answers) {
  let scores = { E: 0, I: 0, S: 0, N: 0, T: 0, F: 0, J: 0, P: 0 };
  
  answers.forEach(answer => {
    const question = mbtiQuestions.find(q => q.id === answer.question_id);
    const dimension = question.dimension; // 'EI'|'SN'|'TF'|'JP'
    const type = answer.choice === 'A' ? dimension[0] : dimension[1];
    scores[type]++;
  });
  
  const type = [
    scores.E >= scores.I ? 'E' : 'I',
    scores.S >= scores.N ? 'S' : 'N',
    scores.T >= scores.F ? 'T' : 'F',
    scores.J >= scores.P ? 'J' : 'P'
  ].join('');
  
  return { type, scores };
}
```

---

## 五、数据库设计

### 5.1 候选人主表 (candidates)

```sql
CREATE TABLE candidates (
    id INT AUTO_INCREMENT PRIMARY KEY,
    candidate_no VARCHAR(20) UNIQUE NOT NULL COMMENT '候选人编号 WS+年月日+4位序号',
    name VARCHAR(50) NOT NULL COMMENT '姓名',
    gender ENUM('男', '女') NOT NULL COMMENT '性别',
    age INT COMMENT '年龄',
    phone VARCHAR(20) NOT NULL COMMENT '联系电话',
    email VARCHAR(100) COMMENT '邮箱',
    address VARCHAR(200) COMMENT '现居地址',
    
    -- 教育经历
    education ENUM('高中', '大专', '本科', '硕士', '博士', '其他') COMMENT '学历',
    school VARCHAR(100) COMMENT '毕业院校',
    major VARCHAR(100) COMMENT '专业',
    
    -- 求职信息
    position VARCHAR(100) NOT NULL COMMENT '应聘岗位',
    work_years ENUM('应届', '1-3年', '3-5年', '5-10年', '10年以上') COMMENT '工作年限',
    expected_salary ENUM('面议', '5K以下', '5-8K', '8-12K', '12-20K', '20K以上') COMMENT '期望薪资',
    previous_company VARCHAR(100) COMMENT '上一家公司',
    
    -- 其他信息
    marital_status ENUM('未婚', '已婚', '离异') COMMENT '婚姻状况',
    emergency_contact VARCHAR(50) COMMENT '紧急联系人',
    emergency_phone VARCHAR(20) COMMENT '紧急联系人电话',
    advantages TEXT COMMENT '个人优势/工作经历',
    
    -- 照片
    photo_url VARCHAR(255) COMMENT '照片路径',
    
    -- MBTI结果
    mbti_type VARCHAR(4) COMMENT 'MBTI类型',
    mbti_scores JSON COMMENT '各维度得分',
    mbti_percentages JSON COMMENT '各维度百分比',
    
    -- 面试状态
    status ENUM('待面试', '面试中', '已通过', '已拒绝', '储备人才') DEFAULT '待面试',
    
    -- 面试答题
    interview_answers JSON COMMENT '面试题目答案',
    
    -- 元数据
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    INDEX idx_phone (phone),
    INDEX idx_position (position),
    INDEX idx_status (status),
    INDEX idx_mbti_type (mbti_type),
    INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

### 5.2 MBTI题目表 (mbti_questions)

```sql
CREATE TABLE mbti_questions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    question_text TEXT NOT NULL COMMENT '题目内容',
    dimension ENUM('EI', 'SN', 'TF', 'JP') NOT NULL COMMENT '所属维度',
    option_a VARCHAR(200) NOT NULL COMMENT '选项A描述',
    option_b VARCHAR(200) NOT NULL COMMENT '选项B描述',
    sort_order INT DEFAULT 0 COMMENT '排序',
    is_active BOOLEAN DEFAULT TRUE COMMENT '是否启用'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

### 5.3 MBTI类型描述表 (mbti_types)

```sql
CREATE TABLE mbti_types (
    type VARCHAR(4) PRIMARY KEY COMMENT '类型代码 INTJ/ENFP等',
    type_name VARCHAR(50) COMMENT '类型名称',
    description TEXT COMMENT '性格描述',
    strengths TEXT COMMENT '优势',
    weaknesses TEXT COMMENT '劣势',
    career_suggestions TEXT COMMENT '职业建议',
    communication_tips TEXT COMMENT '沟通建议'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```

---

## 六、后台管理系统设计

### 6.1 登录认证

- 初始账号密码由系统管理员设置
- 密码加密存储（bcrypt）
- Session/Cookie 保持登录状态
- 登录失败3次锁定5分钟

### 6.2 功能模块

**模块1：仪表盘 (Dashboard)**
- 今日新增候选人数
- 本周/本月数据统计
- MBTI类型分布饼图
- 岗位热度排行榜
- 面试状态分布
- 最近登记的候选人列表

**模块2：候选人管理**
- 列表展示：照片、姓名、岗位、状态、登记时间
- 搜索功能：按姓名、电话、岗位搜索
- 筛选功能：按日期/岗位/MBTI类型/状态筛选
- 查看详情、编辑信息、删除记录
- 更新状态：待面试→面试中→已通过/已拒绝
- 打标签：储备人才标记

**模块3：MBTI人才库**
- 按16种MBTI类型分类查看
- 每种类型的人数统计
- 性格与岗位匹配度分析

**模块4：数据统计报表**
- 每日面试人数趋势图
- 岗位投递热度排行
- MBTI类型分布统计
- 面试转化率分析

**模块5：数据导出**
- 导出候选人列表为Excel
- 导出单个候选人详细报告为PDF
- 导出MBTI统计报表

**模块6：系统设置**
- 岗位管理
- 面试题目管理
- MBTI题目管理
- 公司介绍内容编辑
- 管理员账号管理

---

## 七、MBTI测试详细设计

### 7.1 题目库（30题完整版）

- E/I 维度（外向/内向）：8题
- S/N 维度（感觉/直觉）：8题
- T/F 维度（思考/情感）：7题
- J/P 维度（判断/感知）：7题

### 7.2 16种MBTI类型

| 类型 | 名称 | 核心特征 | 适合岗位 |
|------|------|----------|----------|
| ISTJ | 检查者 | 严谨、负责、注重细节 | 财务、质检、行政 |
| ISFJ | 保护者 | 温和、体贴、忠诚 | 人事、客服、护理 |
| INFJ | 提倡者 | 洞察力强、理想主义 | 策划、咨询、教育 |
| INTJ | 建筑师 | 战略思维、独立、有远见 | 研发、战略规划 |
| ISTP | 鉴赏家 | 灵活、理性、善于解决问题 | 技术、工程 |
| ISFP | 探险家 | 艺术气质、敏感、随和 | 设计、艺术 |
| INFP | 调停者 | 理想主义、富有同情心 | 写作、心理咨询 |
| INTP | 逻辑学家 | 分析能力强、好奇 | 研发、编程 |
| ESTP | 企业家 | 务实、行动派、善于应变 | 销售、项目管理 |
| ESFP | 表演者 | 热情、活力、善于社交 | 销售、市场、公关 |
| ENFP | 竞选者 | 热情、创意、善于激励 | 市场、培训 |
| ENTP | 辩论家 | 聪明、好奇、善于辩论 | 咨询、创业 |
| ESTJ | 总经理 | 组织能力强、务实、果断 | 管理、运营 |
| ESFJ | 执政官 | 热心、负责、善于合作 | 人事、客服 |
| ENFJ | 主人公 | 有魅力、领导力 | 管理、培训 |
| ENTJ | 指挥官 | 果断、战略眼光 | 高管、创业 |

---

## 八、完整功能清单

### 8.1 优先级分类

**🔴 P0 - 核心功能（必须实现）：**
- [x] 面试者扫码进入登记页面
- [x] 基本信息填写（姓名、电话、岗位等）
- [x] ⭐ 照片上传（现场拍照 + 相册选择）
- [x] 数据提交到后端API
- [x] MBTI测试30题
- [x] MBTI结果计算与展示
- [x] 电子简历生成
- [x] HR后台登录
- [x] 候选人列表查看
- [x] 数据导出Excel

**🟡 P1 - 重要功能（建议实现）：**
- [ ] 公司介绍展示页面
- [ ] 面试答题系统（按岗位定制题目）
- [ ] 后台仪表盘统计
- [ ] MBTI人才库分类
- [ ] 候选人状态管理
- [ ] 礼品领取流程
- [ ] localStorage离线缓存

**🟢 P2 - 增值功能（可选实现）：**
- [ ] 短信通知功能
- [ ] 邮箱发送MBTI报告
- [ ] 数据可视化图表
- [ ] 多管理员权限管理
- [ ] 系统配置页面
- [ ] 面试评价系统
- [ ] PDF报告导出

---

## 九、部署与运维方案

### 9.1 部署步骤

```bash
# 1. 安装依赖
cd /usr/share/nginx/html/tools/recruitment_v2/server
npm install

# 2. 初始化数据库
mysql -u root -p < sql/init.sql

# 3. 启动Node.js服务（推荐PM2）
pm2 start server.js --name "zhipintong-api"
pm2 save
pm2 startup

# 4. 配置Nginx
location /tools/recruitment_v2/ {
    alias /usr/share/nginx/html/tools/recruitment_v2/;
    try_files $uri $uri/ =404;
}

# 5. 重启Nginx
nginx -s reload
```

### 9.2 目录权限

```bash
mkdir -p /usr/share/nginx/html/tools/recruitment_v2/uploads/photos
chown -R www-data:www-data /usr/share/nginx/html/tools/recruitment_v2/uploads/
chmod -R 755 /usr/share/nginx/html/tools/recruitment_v2/uploads/
```

### 9.3 PM2进程管理

```bash
# 查看状态
pm2 status

# 重启服务
pm2 restart zhipintong-api

# 查看日志
pm2 logs zhipintong-api

# 设置开机自启
pm2 startup
pm2 save
```

---

## 十、关键要求总结

### 必须满足的核心要求：

1. **⭐ 照片上传功能** - HR强制要求，必须支持现场拍照+相册选择
2. **手机端优先** - 面试者主要用手机扫码，必须适配移动端
3. **离线缓存** - localStorage保存进度，防止网络中断丢失数据
4. **完整的MBTI测试** - 30题完整版，16种类型结果展示
5. **后台数据管理** - HR可查看、筛选、导出候选人数据
6. **Node.js服务稳定** - 使用PM2管理，确保服务持续运行

### 访问地址：
- 前台：`http://118.126.91.196/tools/recruitment_v2/index.html`
- 后台：`http://118.126.91.196/tools/recruitment_v2/admin.html`
- API：`http://118.126.91.196:3002`

---

**文档版本：** v1.0  
**更新日期：** 2026年3月11日  
**编写者：** AI助手  
**适用对象：** 微智电子智聘通系统开发团队
