九宫性格能量测试系统源码 - 全栈开源项目 | 144题专业性格测评平台

May 19,2026 105 次浏览 ¥622 编号:106138

📖 内容简介

《九宫性格能量测试系统源码 - 全栈开源项目 | 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、配置化管理  

系统适合用于:

- 企业员工性格测评

- 心理咨询机构工具

- 教育培训行业应用

- 个人自我认知探索


九宫性格能量测试系统源码 - 全栈开源项目 | 144题专业性格测评平台

九宫性格能量测试系统源码 - 全栈开源项目 | 144题专业性格测评平台

定制看需求,一般几小时内完成,也不贵。

📅 资源信息

发布日期:2026年05月19日

下载链接:

4.9
★★★★★
134 条用户评价
5星
4星
3星
好评如潮
98%好评率

❓ 常见问题

付款成功后,您将自动跳转到下载页面,可以直接下载资源。请保存好订单号,以便日后查询。

我们支持微信支付和支付宝。所有支付均采用SSL加密,安全可靠。

下载链接有效期为24小时。您可以随时通过订单号或邮箱在订单查询页面获取新的下载链接。

请前往"订单查询"页面,输入您的订单号即可获取下载链接。如需进一步帮助,请联系QQ:3989305418。

🔥 限时优惠

00:00:00

📚 购买流程

1. 点击"立即购买"按钮

2. 输入邮箱(无需注册)

3. 选择支付方式完成支付

4. 支付成功后直接下载

✅ 支持游客购买,无需注册

📋 保存订单号可随时查询下载

💬 客服QQ:3989305418

📤 分享资源: