结果页

This commit is contained in:
huangge1199 2025-07-21 17:23:53 +08:00
parent 39ec48fc27
commit 3ec479cd73
6 changed files with 395 additions and 0 deletions

View File

@ -2,6 +2,7 @@ export default defineAppConfig({
pages: [
'pages/index/index',
'pages/doQuestion/index',
'pages/result/index',
],
window: {
backgroundTextStyle: 'light',

View File

@ -0,0 +1,178 @@
[
{
"resultProp": [
"I",
"S",
"T",
"J"
],
"resultDesc": "忠诚可靠,被公认为务实,注重细节。",
"resultPicture": "icon_url_istj",
"resultName": "ISTJ物流师"
},
{
"resultProp": [
"I",
"S",
"F",
"J"
],
"resultDesc": "善良贴心,以同情心和责任为特点。",
"resultPicture": "icon_url_isfj",
"resultName": "ISFJ守护者"
},
{
"resultProp": [
"I",
"N",
"F",
"J"
],
"resultDesc": "理想主义者,有着深刻的洞察力,善于理解他人。",
"resultPicture": "icon_url_infj",
"resultName": "INFJ占有者"
},
{
"resultProp": [
"I",
"N",
"T",
"J"
],
"resultDesc": "独立思考者,善于规划和实现目标,理性而果断。",
"resultPicture": "icon_url_intj",
"resultName": "INTJ设计师"
},
{
"resultProp": [
"I",
"S",
"T",
"P"
],
"resultDesc": "冷静自持,善于解决问题,擅长实践技能。",
"resultPicture": "icon_url_istp",
"resultName": "ISTP运动员"
},
{
"resultProp": [
"I",
"S",
"F",
"P"
],
"resultDesc": "具有艺术感和敏感性,珍视个人空间和自由。",
"resultPicture": "icon_url_isfp",
"resultName": "ISFP艺术家"
},
{
"resultProp": [
"I",
"N",
"F",
"P"
],
"resultDesc": "理想主义者,富有创造力,以同情心和理解他人著称。",
"resultPicture": "icon_url_infp",
"resultName": "INFP治愈者"
},
{
"resultProp": [
"I",
"N",
"T",
"P"
],
"resultDesc": "思维清晰,探索精神,独立思考且理性。",
"resultPicture": "icon_url_intp",
"resultName": "INTP学者"
},
{
"resultProp": [
"E",
"S",
"T",
"P"
],
"resultDesc": "敢于冒险,乐于冒险,思维敏捷,行动果断。",
"resultPicture": "icon_url_estp",
"resultName": "ESTP拓荒者"
},
{
"resultProp": [
"E",
"S",
"F",
"P"
],
"resultDesc": "热情开朗,善于社交,热爱生活,乐于助人。",
"resultPicture": "icon_url_esfp",
"resultName": "ESFP表演者"
},
{
"resultProp": [
"E",
"N",
"F",
"P"
],
"resultDesc": "富有想象力,充满热情,善于激发他人的活力和潜力。",
"resultPicture": "icon_url_enfp",
"resultName": "ENFP倡导者"
},
{
"resultProp": [
"E",
"N",
"T",
"P"
],
"resultDesc": "充满创造力,善于辩论,挑战传统,喜欢探索新领域。",
"resultPicture": "icon_url_entp",
"resultName": "ENTP发明家"
},
{
"resultProp": [
"E",
"S",
"T",
"J"
],
"resultDesc": "务实果断,善于组织和管理,重视效率和目标。",
"resultPicture": "icon_url_estj",
"resultName": "ESTJ主管"
},
{
"resultProp": [
"E",
"S",
"F",
"J"
],
"resultDesc": "友善热心,以协调、耐心和关怀为特点,善于团队合作。",
"resultPicture": "icon_url_esfj",
"resultName": "ESFJ尽责者"
},
{
"resultProp": [
"E",
"N",
"F",
"J"
],
"resultDesc": "热情关爱,善于帮助他人,具有领导力和社交能力。",
"resultPicture": "icon_url_enfj",
"resultName": "ENFJ教导着"
},
{
"resultProp": [
"E",
"N",
"T",
"J"
],
"resultDesc": "果断自信,具有领导才能,善于规划和执行目标。",
"resultPicture": "icon_url_entj",
"resultName": "ENTJ统帅"
}
]

View File

@ -0,0 +1,3 @@
export default definePageConfig({
navigationBarTitleText: '测试结果'
})

View File

@ -0,0 +1,24 @@
.resultPage {
background-image: url('../../assets/headerBg.jpg');
background-size: cover;
background-position: center;
background-repeat: no-repeat;
min-height: 100vh; // 保证全屏
.title {
color: #fff;
padding-top: 48px;
margin-bottom: 24px;
text-align: center;
}
.subTitle {
color: #fff;
margin-bottom: 48px;
}
.enterBtn {
width: 60vw;
min-width: 180px;
}
}

View File

@ -0,0 +1,49 @@
import {View, Image} from "@tarojs/components";
import {AtButton} from "taro-ui";
import Taro from "@tarojs/taro";
import headerBg from "../../assets/headerBg.jpg";
import GlobalFooter from "../../components/GlobalFooter";
import {getBestQuestionResult} from "../../utils/bizUtils";
import questions from "../../data/questions.json";
import questionResults from "../../data/question_results.json";
import "./index.scss";
/**
*
* @author <a href="https://github.com/liyupi"></a>
* @from <a href="https://www.code-nav.cn"></a>
*/
export default () => {
// 获取答案
const answerList = Taro.getStorageSync("answerList");
if (!answerList || answerList.length < 1) {
Taro.showToast({
title: "答案为空",
icon: "error",
duration: 3000,
});
}
// 获取测试结果
const result = getBestQuestionResult(answerList, questions, questionResults);
return (
<View className="resultPage">
<View className="at-article__h1 title">{result.resultName}</View>
<View className="at-article__h2 subTitle">{result.resultDesc}</View>
<AtButton
type="primary"
circle
className="enterBtn"
onClick={() => {
Taro.reLaunch({
url: "/pages/index/index",
});
}}
>
</AtButton>
<Image className="headerBg" src={headerBg}/>
<GlobalFooter/>
</View>
);
};

View File

@ -0,0 +1,140 @@
/**
*
* @param answerList
* @param questions
* @param question_results
*/
export function getBestQuestionResult(answerList, questions, question_results) {
// 初始化一个对象,用于存储每个选项的计数
const optionCount = {};
// 用户选择 A, B, C
// 对应 resultI, I, J
// optionCount[I] = 2; optionCount[J] = 1
// 遍历题目列表
for (const question of questions) {
// 遍历答案列表
for (const answer of answerList) {
// 遍历题目中的选项
for (const option of question.options) {
// 如果答案和选项的key匹配
if (option.key === answer) {
// 获取选项的result属性
const result = option.result;
// 如果result属性不在optionCount中初始化为0
if (!optionCount[result]) {
optionCount[result] = 0;
}
// 在optionCount中增加计数
optionCount[result]++;
}
}
}
}
// 初始化最高分数和最高分数对应的评分结果
let maxScore = 0;
let maxScoreResult = question_results[0];
// 遍历评分结果列表
for (const result of question_results) {
// 计算当前评分结果的分数
const score = result.resultProp.reduce((count, prop) => {
return count + (optionCount[prop] || 0);
}, 0);
// 如果分数高于当前最高分数,更新最高分数和最高分数对应的评分结果
if (score > maxScore) {
maxScore = score;
maxScoreResult = result;
}
}
// 返回最高分数和最高分数对应的评分结果
return maxScoreResult;
}
// 示例数据
const answerList = ["B","B","B","A"];
const questions = [
{
title: "你通常更喜欢",
options: [
{
result: "I",
value: "独自工作",
key: "A",
},
{
result: "E",
value: "与他人合作",
key: "B",
},
],
},
{
options: [
{
result: "S",
value: "喜欢有结构和常规",
key: "A",
},
{
result: "N",
value: "喜欢自由和灵活性",
key: "B",
},
],
title: "对于日常安排",
},
{
options: [
{
result: "P",
value: "首先考虑可能性",
key: "A",
},
{
result: "J",
value: "首先考虑后果",
key: "B",
},
],
title: "当遇到问题时",
},
{
options: [
{
result: "T",
value: "时间是一种宝贵的资源",
key: "A",
},
{
result: "F",
value: "时间是相对灵活的概念",
key: "B",
},
],
title: "你如何看待时间",
},
];
const question_results = [
{
resultProp: ["I", "S", "T", "J"],
resultDesc: "忠诚可靠,被公认为务实,注重细节。",
resultPicture: "icon_url_istj",
resultName: "ISTJ物流师",
},
{
resultProp: ["I", "S", "F", "J"],
resultDesc: "善良贴心,以同情心和责任为特点。",
resultPicture: "icon_url_isfj",
resultName: "ISFJ守护者",
},
];
console.log(getBestQuestionResult(answerList, questions, question_results));