Files
mini-programs/src/services/evaluateService.ts
2026-02-07 11:56:43 +08:00

147 lines
3.4 KiB
TypeScript

import httpService from "./httpService";
import type { ApiResponse } from "./httpService";
export enum StageType {
INTRO = "intro",
TEST = "test",
RESULT = "result",
}
// 单个选项类型
interface Option {
text: string;
score: number;
}
// 单个问题类型
export interface Question {
id: number;
question_title: string;
question_content: string;
options: Option[];
radar_mapping: string[];
}
// 单项能力分数
interface AbilityScore {
current_score: number;
max_score: number;
percentage: number;
}
// 雷达图数据
interface RadarData {
abilities: Record<string, AbilityScore>; // key 是能力名称,如 "正手球质"
summary: {
total_questions: number;
calculation_time: string; // ISO 字符串
};
}
// 单题答案
interface Answer {
question_id: number;
question_title: string;
answer_index: number;
selected_option: string;
score: number;
}
// 提交测试结果 对象类型
export interface TestResultData {
record_id: number;
total_score: number;
ntrp_level: string;
is_coverage: boolean;
old_ntrp_level: string;
level_description: string;
level_img?: string; // 等级图片URL
radar_data: RadarData;
answers: Answer[];
sort?: string[]; // 雷达图能力项排序,如 ["正手球质", "正手控制", ...]
}
// 单条测试记录
interface TestRecord {
id: number;
total_score: number;
ntrp_level: string;
level_description: string;
test_duration: number; // 单位:秒
create_time: string; // 时间字符串
}
// 测试历史对象类型
export interface TestResultList {
count: number;
rows: TestRecord[];
}
// 单次测试结果
interface TestResult {
id: number;
total_score: number;
ntrp_level: string;
level_description: string;
level_img?: string; // 等级图片URL
radar_data: RadarData;
test_duration: number; // 单位秒
create_time: string; // 时间字符串
}
// data 对象
// 上一次测试结果
export interface LastTimeTestResult {
has_test_record: boolean;
has_ntrp_level: boolean;
user_ntrp_level: string;
last_test_result: TestResult;
has_test_in_last_month: boolean; // 最近一个月是否有测试记录
}
class EvaluateService {
// 获取测试题目
async getQuestions(): Promise<ApiResponse<Question[]>> {
return httpService.post("/ntrp/questions", {}, { showLoading: true });
}
// 提交答案
async submit(req: {
answers: { question_id: number; answer_index: number }[];
test_duration: number;
}): Promise<ApiResponse<TestResultData>> {
return httpService.post("/ntrp/submit", req, { showLoading: true });
}
// 获取测试历史
async getResultList(): Promise<ApiResponse<TestResultList>> {
return httpService.post("/ntrp/history", {}, { showLoading: true });
}
// 获取测试详情
async getTestResult(req: {
record_id: number;
}): Promise<ApiResponse<TestResultData>> {
return httpService.post("/ntrp/detail", req, { showLoading: true });
}
// 获取最后一次(最新)测试结果
async getLastResult(): Promise<ApiResponse<LastTimeTestResult>> {
return httpService.post("/ntrp/last_result", {}, { showLoading: false });
}
// 更新NTRP等级
async updateNtrp(req: {
record_id: number;
ntrp_level: string;
update_type: string;
}): Promise<ApiResponse<any>> {
return httpService.post("/ntrp/update_user_level", req, {
showLoading: true,
});
}
}
// 导出认证服务实例
export default new EvaluateService();