|
@@ -3,7 +3,7 @@ import { analysisRecognitionJudgeData, getJudgeData } from './judge';
|
|
import { analysisRecognitionFillData, fillData } from './fill';
|
|
import { analysisRecognitionFillData, fillData } from './fill';
|
|
import { analysisRecognitionSortData, getSortDataTemplate } from './sort';
|
|
import { analysisRecognitionSortData, getSortDataTemplate } from './sort';
|
|
import { analysisRecognitionMatchingData, getMatchingDataTemplate } from './matching';
|
|
import { analysisRecognitionMatchingData, getMatchingDataTemplate } from './matching';
|
|
-import { ChooseToneData } from './chooseTone';
|
|
|
|
|
|
+import { ChooseToneData, analysisRecognitionChooseToneData } from './chooseTone';
|
|
import { essayQuestionData } from './essayQuestion';
|
|
import { essayQuestionData } from './essayQuestion';
|
|
import { analysisRecognitionReadAloudData, readAloudData } from './readAloud';
|
|
import { analysisRecognitionReadAloudData, readAloudData } from './readAloud';
|
|
import { analysisRecognitionRepeatData, repeatData } from './repeat';
|
|
import { analysisRecognitionRepeatData, repeatData } from './repeat';
|
|
@@ -14,17 +14,15 @@ import { analysisRecognitionReplaceAnswerData, replaceAnswerData } from './repla
|
|
import { analysisRecognitionListenSelectData, getListenSelectData } from './listenSelect';
|
|
import { analysisRecognitionListenSelectData, getListenSelectData } from './listenSelect';
|
|
import { analysisRecognitionListenFillData, listenFillData } from './listenFill';
|
|
import { analysisRecognitionListenFillData, listenFillData } from './listenFill';
|
|
import { analysisRecognitionListenJudgeData, getListenJudgeData } from './listenJudge';
|
|
import { analysisRecognitionListenJudgeData, getListenJudgeData } from './listenJudge';
|
|
-import { chineseData } from './chinese';
|
|
|
|
-import { wordCardData } from './wordCard';
|
|
|
|
|
|
+import { analysisRecognitionChineseData, chineseData } from './chinese';
|
|
|
|
+import { analysisRecognitionWordCardData, wordCardData } from './wordCard';
|
|
import { analysisRecognitionWriteData, writeData } from './write';
|
|
import { analysisRecognitionWriteData, writeData } from './write';
|
|
import { writePictrueData } from './writePicture';
|
|
import { writePictrueData } from './writePicture';
|
|
import { analysisRecognitionReadData, readData } from './read';
|
|
import { analysisRecognitionReadData, readData } from './read';
|
|
import { analysisRecognitionTableFillData, getTableFillData } from './tableFill';
|
|
import { analysisRecognitionTableFillData, getTableFillData } from './tableFill';
|
|
-import { wordDictationData } from './wordDictation';
|
|
|
|
|
|
+import { analysisRecognitionWordDictationData, wordDictationData } from './wordDictation';
|
|
import { activityData } from './activity';
|
|
import { activityData } from './activity';
|
|
|
|
|
|
-import { AddQuestionToExercise } from '@/api/exercise';
|
|
|
|
-
|
|
|
|
// 题型源数据
|
|
// 题型源数据
|
|
export const questionTypeDataOption = [
|
|
export const questionTypeDataOption = [
|
|
{
|
|
{
|
|
@@ -195,7 +193,7 @@ const analysisFunctions = {
|
|
fill: analysisRecognitionFillData,
|
|
fill: analysisRecognitionFillData,
|
|
sort: analysisRecognitionSortData,
|
|
sort: analysisRecognitionSortData,
|
|
matching: analysisRecognitionMatchingData,
|
|
matching: analysisRecognitionMatchingData,
|
|
- // choose_tone: analysisRecognitionSelectData,
|
|
|
|
|
|
+ choose_tone: analysisRecognitionChooseToneData,
|
|
table_fill: analysisRecognitionTableFillData,
|
|
table_fill: analysisRecognitionTableFillData,
|
|
read_aloud: analysisRecognitionReadAloudData,
|
|
read_aloud: analysisRecognitionReadAloudData,
|
|
repeat: analysisRecognitionRepeatData,
|
|
repeat: analysisRecognitionRepeatData,
|
|
@@ -206,15 +204,25 @@ const analysisFunctions = {
|
|
listen_judge: analysisRecognitionListenJudgeData,
|
|
listen_judge: analysisRecognitionListenJudgeData,
|
|
write: analysisRecognitionReadData,
|
|
write: analysisRecognitionReadData,
|
|
read: analysisRecognitionWriteData,
|
|
read: analysisRecognitionWriteData,
|
|
|
|
+ word_dictation: analysisRecognitionWordDictationData,
|
|
|
|
+ // 特殊处理的函数
|
|
|
|
+ chinese: analysisRecognitionChineseData,
|
|
|
|
+ word_card: analysisRecognitionWordCardData,
|
|
};
|
|
};
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 获取智能识别各个题型独有的数据解析返回值
|
|
* 获取智能识别各个题型独有的数据解析返回值
|
|
* @param {array} dataArr 智能识别数据
|
|
* @param {array} dataArr 智能识别数据
|
|
* @param {string} type 题型类型
|
|
* @param {string} type 题型类型
|
|
* @returns object
|
|
* @returns object
|
|
*/
|
|
*/
|
|
-function getRecognitionData(dataArr, type) {
|
|
|
|
- const analysisFunction = analysisFunctions[type];
|
|
|
|
|
|
+async function getRecognitionData(dataArr, type) {
|
|
|
|
+ let analysisFunction = null;
|
|
|
|
+ if (['chinese', 'word_card'].type) {
|
|
|
|
+ return await analysisFunctions[type](dataArr);
|
|
|
|
+ }
|
|
|
|
+ analysisFunction = analysisFunctions[type];
|
|
|
|
+
|
|
if (!analysisFunction) return {};
|
|
if (!analysisFunction) return {};
|
|
|
|
|
|
return analysisFunction(dataArr);
|
|
return analysisFunction(dataArr);
|
|
@@ -224,53 +232,58 @@ function getRecognitionData(dataArr, type) {
|
|
* 解析一键导入数据
|
|
* 解析一键导入数据
|
|
* @param {Array} questionList 题目列表
|
|
* @param {Array} questionList 题目列表
|
|
*/
|
|
*/
|
|
-export function analysisOneKeyImportData(questionList) {
|
|
|
|
|
|
+export async function analysisOneKeyImportData(questionList) {
|
|
let dataList = [];
|
|
let dataList = [];
|
|
- questionList.forEach((item) => {
|
|
|
|
- let arr = item
|
|
|
|
- .split(/[\r\n]/)
|
|
|
|
- .map((item) => item.trim())
|
|
|
|
- .filter((item) => item);
|
|
|
|
- if (arr.length === 0) return;
|
|
|
|
- let [question_number, type_name] = arr[0].split('.');
|
|
|
|
- // 题型类型
|
|
|
|
- let type = Object.entries(exerciseNames).find(([key, value]) => {
|
|
|
|
- return value === type_name.trim();
|
|
|
|
- })?.[0];
|
|
|
|
- arr = arr.slice(1);
|
|
|
|
|
|
+ await Promise.all(
|
|
|
|
+ questionList.map(async (item, i) => {
|
|
|
|
+ let arr = item
|
|
|
|
+ .split(/[\r\n]/)
|
|
|
|
+ .map((item) => item.trim())
|
|
|
|
+ .filter((item) => item);
|
|
|
|
+ if (arr.length === 0) return;
|
|
|
|
+ let [question_number, type_name] = arr[0].split('.');
|
|
|
|
|
|
- if (!type || arr.length === 0) return;
|
|
|
|
|
|
+ if (!type_name) return;
|
|
|
|
|
|
- // 是否启用参考答案
|
|
|
|
- let isEnableReferenceAnswer = false; // 是否启用参考答案
|
|
|
|
- if (['table_fill', 'answer_question'].includes(type)) {
|
|
|
|
- isEnableReferenceAnswer = true;
|
|
|
|
- }
|
|
|
|
- let data = JSON.parse(JSON.stringify(questionDataList[type]));
|
|
|
|
- data.property.question_number = question_number; // 题号
|
|
|
|
|
|
+ // 题型类型
|
|
|
|
+ let type = Object.entries(exerciseNames).find(([key, value]) => {
|
|
|
|
+ return value === type_name.trim();
|
|
|
|
+ })?.[0];
|
|
|
|
+ arr = arr.slice(1);
|
|
|
|
+
|
|
|
|
+ if (!type || arr.length === 0) return;
|
|
|
|
+
|
|
|
|
+ // 是否启用参考答案
|
|
|
|
+ let isEnableReferenceAnswer = false; // 是否启用参考答案
|
|
|
|
+ if (['table_fill', 'answer_question'].includes(type)) {
|
|
|
|
+ isEnableReferenceAnswer = true;
|
|
|
|
+ }
|
|
|
|
+ let data = JSON.parse(JSON.stringify(questionDataList[type]));
|
|
|
|
+ data.property.question_number = question_number; // 题号
|
|
|
|
|
|
- let dataArr = analysisRecognition(arr, data, isEnableReferenceAnswer); // 解析公有的数据,并返回剩余的数据
|
|
|
|
|
|
+ let dataArr = analysisRecognition(arr, data, isEnableReferenceAnswer); // 解析公有的数据,并返回剩余的数据
|
|
|
|
|
|
- let recObj = getRecognitionData(dataArr, type); // 获取各个题型独有的数据解析返回值
|
|
|
|
- // 将独有的数据解析返回值合并到 data 中
|
|
|
|
- Object.keys(recObj).forEach((key) => {
|
|
|
|
- key
|
|
|
|
- .split('.')
|
|
|
|
- .slice(1)
|
|
|
|
- .reduce((prev, cur, index, arr) => {
|
|
|
|
- if (index === arr.length - 1) {
|
|
|
|
- prev[cur] = recObj[key];
|
|
|
|
- } else {
|
|
|
|
- return prev[cur];
|
|
|
|
- }
|
|
|
|
- }, data);
|
|
|
|
- });
|
|
|
|
- dataList.push({
|
|
|
|
- type: data.type,
|
|
|
|
- additional_type: data.type === 'select' ? 'single' : '',
|
|
|
|
- content: data,
|
|
|
|
- });
|
|
|
|
- });
|
|
|
|
|
|
+ let recObj = await getRecognitionData(dataArr, type); // 获取各个题型独有的数据解析返回值
|
|
|
|
+ // 将独有的数据解析返回值合并到 data 中
|
|
|
|
+ Object.keys(recObj).forEach((key) => {
|
|
|
|
+ key
|
|
|
|
+ .split('.')
|
|
|
|
+ .slice(1)
|
|
|
|
+ .reduce((prev, cur, index, arr) => {
|
|
|
|
+ if (index === arr.length - 1) {
|
|
|
|
+ prev[cur] = recObj[key];
|
|
|
|
+ } else {
|
|
|
|
+ return prev[cur];
|
|
|
|
+ }
|
|
|
|
+ }, data);
|
|
|
|
+ });
|
|
|
|
+ dataList[i] = {
|
|
|
|
+ type: data.type,
|
|
|
|
+ additional_type: data.type === 'select' ? 'single' : '',
|
|
|
|
+ content: data,
|
|
|
|
+ };
|
|
|
|
+ }),
|
|
|
|
+ );
|
|
|
|
|
|
return dataList;
|
|
return dataList;
|
|
}
|
|
}
|