结果页
This commit is contained in:
parent
39ec48fc27
commit
3ec479cd73
@ -2,6 +2,7 @@ export default defineAppConfig({
|
||||
pages: [
|
||||
'pages/index/index',
|
||||
'pages/doQuestion/index',
|
||||
'pages/result/index',
|
||||
],
|
||||
window: {
|
||||
backgroundTextStyle: 'light',
|
||||
|
178
mbti-test-mini/src/data/question_results.json
Normal file
178
mbti-test-mini/src/data/question_results.json
Normal 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(统帅)"
|
||||
}
|
||||
]
|
3
mbti-test-mini/src/pages/result/index.config.ts
Normal file
3
mbti-test-mini/src/pages/result/index.config.ts
Normal file
@ -0,0 +1,3 @@
|
||||
export default definePageConfig({
|
||||
navigationBarTitleText: '测试结果'
|
||||
})
|
24
mbti-test-mini/src/pages/result/index.scss
Normal file
24
mbti-test-mini/src/pages/result/index.scss
Normal 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;
|
||||
}
|
||||
}
|
49
mbti-test-mini/src/pages/result/index.tsx
Normal file
49
mbti-test-mini/src/pages/result/index.tsx
Normal 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>
|
||||
);
|
||||
};
|
140
mbti-test-mini/src/utils/bizUtils.ts
Normal file
140
mbti-test-mini/src/utils/bizUtils.ts
Normal file
@ -0,0 +1,140 @@
|
||||
/**
|
||||
* 获取最佳题目评分结果
|
||||
* @param answerList
|
||||
* @param questions
|
||||
* @param question_results
|
||||
*/
|
||||
|
||||
export function getBestQuestionResult(answerList, questions, question_results) {
|
||||
// 初始化一个对象,用于存储每个选项的计数
|
||||
const optionCount = {};
|
||||
|
||||
// 用户选择 A, B, C
|
||||
// 对应 result:I, 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));
|
Loading…
Reference in New Issue
Block a user