《九宫性格能量测试系统源码 - 全栈开源项目 | 144题专业性格测评平台》是一款基于九宫性格能量理论的专业性格测评系统,包含完整的前后端全栈开源源码。系统依托144道科学设计的测评题目,能全面分析个体性格特质、优势劣势及行为倾向,适用于企业招聘、团队建设、自我认知等多场景。 其核心亮点在于开源可扩展的架构,开发者可快速搭建个性化测评平台,还能根据需求定制题目、优化算法。144题的专业维度覆盖更全面,测试结果精准度高,为用户提供有价值的性格洞察。项目代码结构清晰、技术栈主流,便于学习与二次开发,是性格测评领域极具实用价值的开源解决方案。
*内容摘要,帮助您快速了解要点---
## 项目概述
**九宫性格能量测试系统**是一个基于九型人格理论的在线性格测评平台,采用前后端分离架构,包含H5移动端用户系统和Web管理后台。系统通过144道二选一选择题,运用独特的九宫矩阵算法(3×3维度),计算用户的性格能量分布,生成详细的性格分析报告。
---
## 核心功能模块
### 一、用户认证系统(auth.js)
#### 1. 手机号+密码登录
- 接口:`POST /api/auth/login`
- 参数:phone(手机号)、password(密码)
- 流程:
- 验证手机号格式(正则:/^1[3-9]d{9}$/)
- 查询用户记录
- bcrypt比对密码哈希值
- 生成JWT Token(有效期配置在.env中)
- 返回用户信息和Token
#### 2. 手机号+验证码登录
- 接口:`POST /api/auth/sms-login`
- 参数:phone、code(6位验证码)
- 特点:
- 自动注册新用户(首次登录时创建用户记录)
- 短信验证码功能预留接口(需接入阿里云/腾讯云短信服务)
- 开发环境返回验证码便于调试
#### 3. 用户注册
- 接口:`POST /api/auth/register`
- 参数:phone、password、nickname(可选)
- 流程:
- 验证手机号唯1一性
- bcrypt加密密码(salt rounds: 10)
- 自动生成昵称("用户" + 手机后4位)
- 创建用户并返回Token
#### 4. 微信登录
- 接口:`POST /api/auth/wechat-login`
- 参数:code(微信登录凭证)
- 流程:
- 调用微信API获取openid和session_key
- 根据openid查找或创建用户
- 生成JWT Token
- 支持微信小程序场景
#### 5. 发送短信验证码
- 接口:`POST /api/auth/send-sms`
- 参数:phone
- 功能:
- 生成6位随机验证码
- 验证手机号格式
- 预留短信服务商接口(TODO标记)
- 开发环境直接返回验证码
---
### 二、测试答题系统(test.js)
#### 1. 开始测试
- 接口:`POST /api/test/start`
- 需要认证:是(authUser中间件)
- 参数:testType(测试类型:activation_code/wechat_pay)
- 功能:
- 创建测试记录(test_records表)
- 初始状态为0(进行中)
- 返回测试记录ID
- 记录开始时间
#### 2. 提交答案
- 接口:`POST /api/test/answer`
- 需要认证:是
- 参数:
- testRecordId(测试记录ID)
- questionId(题目ID)
- questionNo(题号)
- answer(答案:A或B)
- 特点:
- 兼容snake_case和camelCase参数命名
- 逐题保存答案到test_answers表
- 实时记录答题进度
- 不立即计算结果,等待全部完成
#### 3. 完成测试并提交
- 接口:`POST /api/test/submit`
- 需要认证:是
- 参数:testRecordId
- 核心流程:
- 验证是否答完144道题(answers.length < 144则拒绝)
- 调用九宫性格计算器(nineGridCalculator.calculate)
- 更新测试记录状态为1(已完成)
- 计算答题时长(duration = end_time - start_time)
- 保存测试结果到test_results表(JSON格式)
- 返回完整的性格分析结果
#### 4. 获取测试结果
- 接口:`GET /api/test/result/:testRecordId`
- 需要认证:是
- 权限控制:只能查看自己的测试结果(WHERE user_id = ?)
- 返回数据:
- record:测试记录信息(时长、状态等)
- result.matrix:3×3矩阵数据
- result.personality:9种性格类型排序列表
- result.chart:柱状图数据(按九型顺序)
- 特殊处理:
- mysql2自动解析JSON字段为对象
- 智能判断数据类型(obje-ct则直接使用,string则JSON.parse)
#### 5. 获取答题进度
- 接口:`GET /api/test/progress/:testRecordId`
- 需要认证:是
- 返回:
- answered:已答题数量
- total:总题数(144)
- progress:进度百分比(0-100)
#### 6. 生成分享链接
- 接口:`GET /api/test/share/:testRecordId`
- 需要认证:是
- 功能:生成可分享的测试结果URL
---
### 三、支付与激活码系统(payment.js)
#### 1. 创建订单
- 接口:`POST /api/payment/create`
- 需要认证:是
- 功能:
- 生成订单号(格式:JG + 时间戳 + 随机字符串)
- 从配置读取测试价格(默认29.90元)
- 创建待支付订单(status=0)
- 返回订单ID和金额
#### 2. 微信支付
- 接口:`POST /api/payment/wechat`
- 需要认证:是
- 参数:orderId
- 流程:
- 验证订单归属和状态
- TODO:调用微信支付统一下单API
- 返回支付参数(appId、timeStamp、nonceStr、package、paySign)
- 当前为示例实现,需配置真实微信商户参数
#### 3. 支付回调
- 接口:`POST /api/payment/notify`
- 无需认证(微信服务器调用)
- 功能:
- TODO:验证微信支付签名
- 更新订单状态为1(已支付)
- 记录支付时间和交易号
- 返回SUCCESS/FAIL给微信服务器
#### 4. 验证激活码
- 接口:`POST /api/payment/verify-code`
- 需要认证:是
- 参数:code(激活码)
- 流程:
- 查询激活码(status=0未使用)
- 检查是否过期(expire_time)
- 更新激活码状态为1(已使用)
- 记录使用者ID和使用时间
- 返回canTest=true
#### 5. 获取订单列表
- 接口:`GET /api/payment/orders`
- 需要认证:是
- 参数:page、limit(分页)
- 返回:当前用户的订单列表(按创建时间倒序)
#### 6. 获取订单详情
- 接口:`GET /api/payment/orders/:id`
- 需要认证:是
- 权限控制:只能查看自己的订单
---
### 四、管理员系统(admin.js)
#### 1. 管理员登录
- 接口:`POST /api/admin/login`
- 参数:username、password
- 流程:
- bcrypt验证密码
- 更新最1后登录时间
- 生成管理员Token(adminId)
- 记录操作日志(operation_logs表)
- 返回角色信息(admin/operator)
#### 2. 退出登录
- 接口:`POST /api/admin/logout`
- 需要认证:是(authAdmin中间件)
- 记录登出日志
#### 3. 数据概览(Dashboard)
- 接口:`GET /api/admin/dashboard`
- 需要认证:是
- 返回数据:
- 今日统计:新增用户数、测试次数、订单数、收入
- 总计数据:累计用户、测试、订单、总收入
- 近7天趋势:每日新增用户折线图数据
- SQL优化:使用子查询一次性获取所有统计数据
#### 4. 用户管理
**用户列表:**
- 接口:`GET /api/admin/users`
- 参数:page、limit、keyword(搜索关键词)
- 功能:
- 支持昵称/手机号模糊搜索
- 分页查询
- 返回用户基本信息
**用户详情:**
- 接口:`GET /api/admin/users/:id`
- 返回:
- 用户基本信息
- 测试记录数量
- 订单数量
- 最近5条测试记录
**更新用户状态:**
- 接口:`PUT /api/admin/users/:id/status`
- 需要权限:admin角色(requireRole中间件)
- 参数:status(1启用/0禁用)
- 记录操作日志
#### 5. 题目管理
**题目列表:**
- 接口:`GET /api/admin/questions`
- 参数:page、limit(默认20条/页)
- 排序:按题号升序(question_no ASC)
**添加题目:**
- 接口:`POST /api/admin/questions`
- 需要权限:admin角色
- 参数:
- question_no(题号)
- option_a、option_a_type(选项A内容及类型)
- option_b、option_b_type(选项B内容及类型)
- 默认状态:1(启用)
**更新题目:**
- 接口:`PUT /api/admin/questions/:id`
- 需要权限:admin角色
- 可修改:选项内容、类型、状态
**删除题目:**
- 接口:`DELETE /api/admin/questions/:id`
- 需要权限:admin角色
- 物理删除(非软删除)
#### 6. 订单管理
**订单列表:**
- 接口:`GET /api/admin/orders`
- 参数:page、limit、status(筛选状态)
- 关联查询:LEFT JOIN users表获取用户昵称和手机号
- 排序:按创建时间倒序
**订单详情:**
- 接口:`GET /api/admin/orders/:id`
- 返回:
- 订单完整信息
- 用户信息(昵称、头像、手机号)
- 关联的激活码信息(如果有)
#### 7. 激活码管理
**激活码列表:**
- 接口:`GET /api/admin/codes`
- 参数:page、limit、status
- 关联查询:LEFT JOIN users表显示使用者昵称
- 排序:按创建时间倒序
**生成激活码:**
- 接口:`POST /api/admin/codes`
- 需要权限:admin角色
- 参数:
- count(生成数量,默认1)
- expire_time(过期时间,可选)
- 功能:
- 批量生成激活码(格式:JG + 时间戳 + 随机6位大写)
- 循环插入数据库
- 返回生成的激活码列表
- 记录操作日志
#### 8. 系统设置
**获取设置:**
- 接口:`GET /api/admin/settings`
- 返回:键值对形式的配置项
- 包括:网站名称、测试价格、测试说明、微信配置等
**更新设置:**
- 接口:`PUT /api/admin/settings`
- 需要权限:admin角色
- 参数:settings对象(key-value)
- 功能:
- 批量更新配置
- INSERT ... ON DUPLICATE KEY UPDATE(存在则更新,不存在则插入)
- 记录操作日志
#### 9. 操作日志
**日志列表:**
- 接口:`GET /api/admin/logs`
- 参数:page、limit(默认20条/页)
- 关联查询:LEFT JOIN admins表显示操作人用户名
- 排序:按创建时间倒序
- 记录内容:管理员ID、操作类型、模块、内容、IP地址
---
### 五、九宫性格核心算法(nineGridCalculator.js)
这是系统的核心业务逻辑,实现了独特的九宫性格能量计算模型。
#### 1. 九宫类型映射体系
系统定义了**36种细分类型**,每个类型由三个维度组合而成:
**维度一:动机(Motivation)**
- 控制(Control)
- 理想(Ideal)
- 认同(Identity)
**维度二:方式(Approach)**
- 靠近(Approach)
- 抽离(Detached)
- 对抗(Oppose)
**维度三:九型编号(Type 1-9)**
例如:
- `type1_approach_control`:第1型 + 靠近 + 控制
- `type8_oppose_control`:第8型 + 对抗 + 控制
- `type9_detached_ideal`:第9型 + 抽离 + 理想
#### 2. 性格动物映射
系统将9种类型对应为动物形象,便于用户理解:
- 第1型:老虎(完美主义者)
- 第2型:海豚(助人者)
- 第3型:蜜蜂(成就者)
- 第4型:八爪(浪漫主义者)
- 第5型:企鹅(观察者)
- 第6型:考拉(忠诚者)
- 第7型:孔雀(享乐者)
- 第8型:狮子(挑战者)
- 第9型:鸽子(和平者)
#### 3. 计算流程
**输入:** 用户答案数组(144个答案,每个包含question_id和answer)
**步骤1:初始化分数**
```javascri-pt
matrixScores = {
控制: { 靠近: 0, 抽离: 0, 对抗: 0 },
理想: { 靠近: 0, 抽离: 0, 对抗: 0 },
认同: { 靠近: 0, 抽离: 0, 对抗: 0 }
}
typeScores = { 1: 0, 2: 0, ..., 9: 0 }
```
**步骤2:遍历答案统计**
对于每道题:
- 根据question_id查询题目信息
- 根据用户选择(A或B)获取对应的type字段
- 从typeMap解析出type、approach、motivation
- matrixScores[motivation][approach]++
- typeScores[type]++
**步骤3:计算矩阵数据**
生成3×3矩阵,包含:
- 每个单元格的分数
- 每行合计(控制合计、理想合计、认同合计)
- 每列合计(靠近合计、抽离合计、对抗合计)
- 总计(应为144)
**步骤4:计算性格能量**
- 计算基准值:baseValue = totalScore / 9
- 计算每种类型的比率:ratio = score / baseValue
- 生成personality数组,包含:type、name(动物名)、score、ratio
- 按分数降序排序
- 添加排名(rank 1-9)
**步骤5:生成图表数据**
- 按九型顺序(1-9)生成chart数组
- 用于ECharts柱状图展示
**输出:**
```javascri-pt
{
matrix: { /* 3×3矩阵数据 */ },
personality: [ /* 9种类型排序列表 */ ],
chart: [ /* 柱状图数据 */ ]
}
```
---
## 数据库设计
### 核心表结构(10张表)
#### 1. users(用户表)
- 主键:id
- 唯1一索引:openid、phone
- 字段:昵称、头像、手机号、密码(bcrypt)、状态
- 支持多种登录方式(微信openid、手机号)
#### 2. questions(题目表)
- 主键:id
- 唯1一索引:question_no(1-144)
- 字段:题号、选项A内容及类型、选项B内容及类型、状态
- 每题两个选项分别对应不同的九宫类型
#### 3. test_records(测试记录表)
- 主键:id
- 索引:user_id、status、created_at
- 字段:用户ID、测试类型、状态(0进行中/1已完成)、开始/结束时间、答题时长
- 一次测试一条记录
#### 4. test_answers(测试答案表)
- 主键:id
- 索引:test_record_id、question_id、question_no
- 字段:测试记录ID、题目ID、题号、答案(A/B)
- 144条答案对应一条测试记录
#### 5. test_results(测试结果表)
- 主键:id
- 唯1一索引:test_record_id(一对一关系)
- 字段:matrix_data(JSON)、personality_data(JSON)、chart_data(JSON)
- 使用MySQL 5.7+的JSON类型,支持自动解析
#### 6. activation_codes(激活码表)
- 主键:id
- 唯1一索引:code
- 字段:激活码、状态(0未使用/1已使用)、使用者ID、使用时间、过期时间
- 支持批量生成和有效期控制
#### 7. orders(订单表)
- 主键:id
- 唯1一索引:order_no
- 索引:user_id、status
- 字段:订单号、用户ID、金额、状态(0待支付/1已支付/2已取消)、支付时间、微信交易号
#### 8. admins(管理员表)
- 主键:id
- 唯1一索引:username
- 字段:用户名、密码(bcrypt)、角色(admin/operator)、状态、最1后登录时间
- 支持权限分级
#### 9. operation_logs(操作日志表)
- 主键:id
- 索引:admin_id、created_at
- 字段:管理员ID、操作类型、模块、内容、IP地址
- 记录所有敏感操作
#### 10. settings(系统设置表)
- 主键:id
- 唯1一索引:key
- 字段:设置键、值、描述
- 动态配置系统参数
### 视图(Views)
#### v_user_test_stats
- 用户测试统计视图
- 字段:用户ID、昵称、手机号、测试次数、最1后测试时间
- GROUP BY聚合查询
#### v_daily_stats
- 每日数据统计视图
- 字段:日期、新增用户数、测试次数、收入
- 用于Dashboard趋势图
---
## 前端页面功能
### H5移动端(7个页面)
#### 1. Home.vue(首页/能量评估)
- 功能:
- 展示测试介绍和价格(¥29.90)
- 激活码输入框
- "开始评估"按钮
- 底部Tabbar导航(能量评估、我的)
- 交互:
- 点击"开始评估"检查登录状态
- 未登录跳转登录页
- 已登录创建测试记录并跳转答题页
#### 2. Login.vue(登录页)
- 功能:
- 手机号输入
- 密码输入
- 登录按钮
- "去注册"链接
- 样式:纯色背景#1989fa,无渐变
#### 3. Register.vue(注册页)
- 功能:
- 手机号、密码、确认密码输入
- 昵称输入(可选)
- 注册按钮
- "去登录"链接
#### 4. Test.vue(答题页)
- 功能:
- 显示当前题号(1/144)
- 进度条展示
- 题目内容
- 选项A和选项B按钮
- 上一题/下一题导航
- 交互:
- 选择答案后自动保存
- 实时更新进度
- 答完144题自动提交
#### 5. Result.vue(结果页)
- 功能:
- 九宫性格能量柱状图(ECharts)
- 主要性格类型展示
- 9种类型分数排名列表
- 3×3矩阵数据表格
- "重新测试"按钮
- 技术:
- nextTick确保DOM更新后渲染图表
- 窗口resize自适应
- 支持路径参数和查询参数两种方式访问
#### 6. Profile.vue(个人中心)
- 功能:
- 用户头像(van-icon图标)
- 昵称和手机号显示
- "编辑资料"入口
- "修改密码"入口
- 底部Tabbar导航
- 状态:
- 未登录显示"点击登录"提示
- 已登录显示用户信息
#### 7. Records.vue(测试记录)
- 功能:
- 历史测试记录列表
- 每条记录显示:测试时间、时长、主要性格
- 点击查看结果按钮
### Admin管理后台(8个页面)
#### 1. Login.vue(管理员登录)
- 简洁的登录表单
- 用户名和密码输入
- Element Plus组件
#### 2. Layout.vue(布局框架)
- 侧边栏菜单导航
- 顶部Header
- 主要内容区域
- 退出登录按钮
#### 3. Dashboard.vue(数据概览)
- 今日数据卡片:新增用户、测试次数、订单数、收入
- 总计数据卡片
- 近7天用户增长趋势图(ECharts折线图)
- 使用Element Plus图标(替换emoji)
#### 4. Users.vue(用户管理)
- 用户列表表格
- 搜索框(昵称/手机号)
- 分页组件
- 操作按钮:查看详情、启用/禁用
- 用户详情抽屉
#### 5. Questions.vue(题目管理)
- 题目列表表格
- 分页展示(20条/页)
- 添加题目对话框
- 编辑题目对话框
- 删除确认
- 显示题号、选项A、选项B、状态
#### 6. Orders.vue(订单管理)
- 订单列表表格
- 状态筛选(待支付/已支付/已取消)
- 关联用户信息显示
- 订单详情查看
- 分页组件
#### 7. Codes.vue(激活码管理)
- 激活码列表表格
- 状态筛选(未使用/已使用)
- 批量生成对话框(输入数量和过期时间)
- 显示使用者信息
- 复制激活码功能
#### 8. Settings.vue(系统设置)
- 表单配置项
- 网站名称、测试价格
- 测试说明文案
- 微信配置(AppID、密钥等)
- 保存按钮
---
## 安全机制
### 1. 认证授权
- **JWT Token**:用户和管理员分别使用userId和adminId签发
- **中间件验证**:
- authUser:验证用户Token
- authAdmin:验证管理员Token
- requireRole:检查管理员角色权限
- **Token过期**:配置在.env中(默认7天)
### 2. 密码安全
- **bcrypt加密**:salt rounds设置为10
- **不存储明文**:数据库中只存哈希值
- **登录验证**:使用bcrypt.compare比对
### 3. SQL注入防护
- **参数化查询**:所有SQL使用占位符(?)
- **空字符串检查**:防止parseInt("")返回NaN导致SQL错误
- **输入验证**:手机号正则、必填字段检查
### 4. 权限控制
- **路由守卫**:前端路由需要登录才能访问
- **后端鉴权**:所有敏感接口需要Token
- **角色权限**:部分操作仅限admin角色(如删除题目、生成激活码)
### 5. 操作审计
- **日志记录**:所有管理员操作记录到operation_logs表
- **IP追踪**:记录操作来源IP
- **时间戳**:精确到秒的操作时间
---
## 业务流程
### 用户测试完整流程
```
1. 用户访问首页 → 点击"开始评估"
↓
2. 检查登录状态 → 未登录跳转登录页
↓
3. 登录/注册 → 获取JWT Token
↓
4. 选择支付方式:
├─ 输入激活码 → POST /api/payment/verify-code
└─ 付费购买 → POST /api/payment/create → 微信支付
↓
5. 开始测试 → POST /api/test/start → 获取testRecordId
↓
6. 答题过程(144题):
- 逐题选择A或B
- POST /api/test/answer 保存答案
- 实时更新进度条
↓
7. 完成答题 → POST /api/test/submit
- 验证144题全部完成
- 调用nineGridCalculator计算结果
- 保存matrix、personality、chart到数据库
↓
8. 查看结果 → GET /api/test/result/:id
- 显示柱状图
- 显示性格排名
- 显示矩阵数据
↓
9. 可选操作:
- 重新测试
- 分享结果
- 查看历史记录
```
### 管理员操作流程
```
1. 管理员登录 → POST /api/admin/login
↓
2. 进入Dashboard → 查看今日数据和趋势图
↓
3. 日常管理:
├─ 用户管理:查看用户列表、禁用违规用户
├─ 题目管理:添加/编辑/删除测试题目
├─ 订单管理:查看支付订单、处理异常
├─ 激活码管理:批量生成激活码、设置有效期
├─ 系统设置:修改测试价格、更新文案
└─ 操作日志:审计管理员行为
```
---
## 特色功能
### 1. 双轨支付系统
- **激活码模式**:适合企业批量采购、线下销售
- **在线支付**:集成微信支付,支持个人用户购买
### 2. 智能九宫算法
- **3×3矩阵模型**:突破传统九型人格的单一维度
- **36种细分类型**:更精准的性格刻画
- **能量比率计算**:相对值而非绝1对值,更具参考性
### 3. 完善的测试管理
- **断点续答**:测试记录保存,可随时继续
- **进度追踪**:实时显示答题进度
- **历史记录**:用户可查看历次测试结果对比
### 4. 数据可视化
- **ECharts柱状图**:直观展示9种类型能量分布
- **矩阵表格**:3×3网格展示动机×方式交叉分析
- **Dashboard统计**:多维度数据汇总和趋势分析
### 5. 灵活的配置系统
- **动态价格**:可在后台修改测试价格
- **自定义文案**:测试说明、评估方法可配置
- **微信配置**:支持切换不同小程序/公众号
---
## 总结
**九宫性格能量测试系统**是一个功能完整、架构清晰的在线测评平台,具有以下特点:
✅ **技术先进**:现代化技术栈
✅ **算法独特**:3×3九宫矩阵模型,36种细分类型
✅ **功能全面**:用户系统、测试答题、支付激活、管理后台
✅ **安全可靠**:JWT认证、bcrypt加密、SQL防注入、操作审计
✅ **体验优良**:移动端适配、数据可视化、流畅交互
✅ **易于扩展**:模块化设计、RESTful API、配置化管理
系统适合用于:
- 企业员工性格测评
- 心理咨询机构工具
- 教育培训行业应用
- 个人自我认知探索


定制看需求,一般几小时内完成,也不贵。
发布日期:2026年05月19日
🔥 限时优惠
📚 购买流程
1. 点击"立即购买"按钮
2. 输入邮箱(无需注册)
3. 选择支付方式完成支付
4. 支付成功后直接下载
✅ 支持游客购买,无需注册
📋 保存订单号可随时查询下载
💬 客服QQ:3989305418