- 九宫性格能量测试系统源码 - 全栈开源项目 | 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(可选)
- - 流程:
- - 验证手机号唯一性
- - 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字段为对象
- - 智能判断数据类型(object则直接使用,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验证密码
- - 更新最后登录时间
- - 生成管理员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:初始化分数**
- ```javascript
- 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柱状图展示
- **输出:**
- ```javascript
- {
- matrix: { /* 3×3矩阵数据 */ },
- personality: [ /* 9种类型排序列表 */ ],
- chart: [ /* 柱状图数据 */ ]
- }
- ```
- ---
- ## 数据库设计
- ### 核心表结构(10张表)
- #### 1. users(用户表)
- - 主键:id
- - 唯一索引:openid、phone
- - 字段:昵称、头像、手机号、密码(bcrypt)、状态
- - 支持多种登录方式(微信openid、手机号)
- #### 2. questions(题目表)
- - 主键:id
- - 唯一索引: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
- - 唯一索引:test_record_id(一对一关系)
- - 字段:matrix_data(JSON)、personality_data(JSON)、chart_data(JSON)
- - 使用MySQL 5.7+的JSON类型,支持自动解析
- #### 6. activation_codes(激活码表)
- - 主键:id
- - 唯一索引:code
- - 字段:激活码、状态(0未使用/1已使用)、使用者ID、使用时间、过期时间
- - 支持批量生成和有效期控制
- #### 7. orders(订单表)
- - 主键:id
- - 唯一索引:order_no
- - 索引:user_id、status
- - 字段:订单号、用户ID、金额、状态(0待支付/1已支付/2已取消)、支付时间、微信交易号
- #### 8. admins(管理员表)
- - 主键:id
- - 唯一索引:username
- - 字段:用户名、密码(bcrypt)、角色(admin/operator)、状态、最后登录时间
- - 支持权限分级
- #### 9. operation_logs(操作日志表)
- - 主键:id
- - 索引:admin_id、created_at
- - 字段:管理员ID、操作类型、模块、内容、IP地址
- - 记录所有敏感操作
- #### 10. settings(系统设置表)
- - 主键:id
- - 唯一索引:key
- - 字段:设置键、值、描述
- - 动态配置系统参数
- ### 视图(Views)
- #### v_user_test_stats
- - 用户测试统计视图
- - 字段:用户ID、昵称、手机号、测试次数、最后测试时间
- - 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种细分类型**:更精准的性格刻画
- - **能量比率计算**:相对值而非绝对值,更具参考性
- ### 3. 完善的测试管理
- - **断点续答**:测试记录保存,可随时继续
- - **进度追踪**:实时显示答题进度
- - **历史记录**:用户可查看历次测试结果对比
- ### 4. 数据可视化
- - **ECharts柱状图**:直观展示9种类型能量分布
- - **矩阵表格**:3×3网格展示动机×方式交叉分析
- - **Dashboard统计**:多维度数据汇总和趋势分析
- ### 5. 灵活的配置系统
- - **动态价格**:可在后台修改测试价格
- - **自定义文案**:测试说明、评估方法可配置
- - **微信配置**:支持切换不同小程序/公众号
- ---
- ## 总结
- **九宫性格能量测试系统**是一个功能完整、架构清晰的在线测评平台,具有以下特点:
- ✅ **技术先进**:现代化技术栈
- ✅ **算法独特**:3×3九宫矩阵模型,36种细分类型
- ✅ **功能全面**:用户系统、测试答题、支付激活、管理后台
- ✅ **安全可靠**:JWT认证、bcrypt加密、SQL防注入、操作审计
- ✅ **体验优良**:移动端适配、数据可视化、流畅交互
- ✅ **易于扩展**:模块化设计、RESTful API、配置化管理
- 系统适合用于:
- - 企业员工性格测评
- - 心理咨询机构工具
- - 教育培训行业应用
- - 个人自我认知探索
复制代码
游客,本帖隐藏的内容需要积分高于 10000000 才可浏览,您当前积分为 0 |