Merge pull request 'zouyf_dev' (#309) from zouyf_dev into main
Reviewed-on: #309
This commit is contained in:
commit
5b1986afaf
|
@ -49,7 +49,7 @@ import { useGetSubject } from '@/hooks/useGetSubject'
|
||||||
|
|
||||||
const BaseUrl = import.meta.env.VITE_APP_BUILD_BASE_PATH
|
const BaseUrl = import.meta.env.VITE_APP_BUILD_BASE_PATH
|
||||||
// 定义要发送的emit事件
|
// 定义要发送的emit事件
|
||||||
const emit = defineEmits(['nodeClick'])
|
const emit = defineEmits(['nodeClick', 'changeBook'])
|
||||||
let useSubject = null
|
let useSubject = null
|
||||||
const subjectList = ref([])
|
const subjectList = ref([])
|
||||||
const dialogVisible = ref(false)
|
const dialogVisible = ref(false)
|
||||||
|
@ -164,7 +164,6 @@ const handleNodeClick = (data) => {
|
||||||
sessionStore.set('subject.defaultExpandedKeys', defaultExpandedKeys)
|
sessionStore.set('subject.defaultExpandedKeys', defaultExpandedKeys)
|
||||||
sessionStore.set('subject.curNode', nodeData)
|
sessionStore.set('subject.curNode', nodeData)
|
||||||
emit('nodeClick', curData)
|
emit('nodeClick', curData)
|
||||||
|
|
||||||
}
|
}
|
||||||
onMounted( async () => {
|
onMounted( async () => {
|
||||||
treeLoading.value = true
|
treeLoading.value = true
|
||||||
|
|
|
@ -305,210 +305,11 @@ export const processList = (row) => {
|
||||||
.join('、')
|
.join('、')
|
||||||
row[i].workanswerFormat = answer
|
row[i].workanswerFormat = answer
|
||||||
}
|
}
|
||||||
}
|
// else {
|
||||||
|
// // 其余类型试题类型(因学科不同, 大多为主观题类型, 结构为数组)
|
||||||
/*
|
// row[i].workanswerFormat = workAnswerArr.join('、')
|
||||||
//2、处理单选题
|
// }
|
||||||
if(row[i].worktype == '单选题' || row[i].worktype == '多选题' ){
|
}
|
||||||
//1.选项前增加ABCD workdesc: "①②#&①③#&②④#&③④" || "<div>为了活着</div>#&<div>为了填报肚子</div>#&<div>为了吃饭而吃饭</div>"
|
|
||||||
let workDescArr = [];
|
|
||||||
if(row[i].workdesc.indexOf('[')!==-1 && row[i].workdesc.indexOf(']')!==-1) {
|
|
||||||
//123会直接被转换, 且不是数组对象, 故手动判断是否有[和]两个字符
|
|
||||||
workDescArr = JSON.parse(row[i].workdesc);
|
|
||||||
}
|
|
||||||
else if(row[i].workdesc.indexOf('#&')) {
|
|
||||||
workDescArr = row[i].workdesc.split('#&');
|
|
||||||
}
|
|
||||||
else if(row[i].workdesc.indexOf(',')){
|
|
||||||
workDescArr = row[i].workdesc.split(',');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// 待考虑
|
|
||||||
workDescArr.push(item.workdesc)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//2.答案 - 数字转为ABCD
|
|
||||||
if(row[i].worktype == '单选题') {
|
|
||||||
const str2Char = String.fromCharCode(65+Number(row[i].workanswer));
|
|
||||||
row[i].workanswerFormat = str2Char;
|
|
||||||
} else if (row[i].worktype == '多选题') {
|
|
||||||
const answerArr = row[i].workanswer.split('#&');
|
|
||||||
let arr2Char = '';
|
|
||||||
for(let k=0; k<answerArr.length; k++){
|
|
||||||
arr2Char += String.fromCharCode(65+Number(answerArr[k]));
|
|
||||||
}
|
|
||||||
row[i].workanswerFormat = arr2Char;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(row[i].worktype == '填空题') {
|
|
||||||
// console.log(row[i].workanswer.replace(/<[^>]*>/g, "").split('#&'),'????')
|
|
||||||
// 填空题答案
|
|
||||||
row[i].workanswerFormat = row[i].workanswer.replace(/#&/g,", ");
|
|
||||||
// 填空选项不需要展示,
|
|
||||||
row[i].workdescFormat = '';
|
|
||||||
}
|
|
||||||
else if(row[i].worktype == '判断题'){
|
|
||||||
// console.log(row[i].workanswer.replace(/<[^>]*>/g, "").split('#&'),'????')
|
|
||||||
// 判断题答案
|
|
||||||
row[i].workanswerFormat = row[i].workanswer.replace(/#&/g,", ");
|
|
||||||
// 判断选项不需要展示,
|
|
||||||
row[i].workdescFormat = '';
|
|
||||||
}
|
|
||||||
else if(row[i].worktype == '复合题') {
|
|
||||||
// 1.选项解析替换
|
|
||||||
const options = JSON.parse(row[i].workdesc);
|
|
||||||
// 题目(背景材料+复合题目)
|
|
||||||
const bjTitle = row[i].title.split('!@#$%')[0];
|
|
||||||
const tmTitles = row[i].title.split('!@#$%').filter((it,ix)=>ix>0);
|
|
||||||
// console.log(bjTitle,'背景标题');
|
|
||||||
// console.log(tmTitles,'复合题目');
|
|
||||||
let titls = [];
|
|
||||||
options.forEach((element,index1) => {
|
|
||||||
const workDescArr = element.split('#&');
|
|
||||||
let tmp = '';
|
|
||||||
let j=0;
|
|
||||||
for(; j<jsonArr.length; j++){
|
|
||||||
if(j%2 == 0){
|
|
||||||
tmp += `<div style='width:80%;display:flex;'>`;
|
|
||||||
}
|
|
||||||
const char = String.fromCharCode(65+j);
|
|
||||||
tmp += `<div style='display:flex;margin-left: 2%; width: 36%'>${char}.${jsonArr[j]}</div>`;
|
|
||||||
if(j%2 == 1){
|
|
||||||
tmp += '</div>';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(j%2== 0){
|
|
||||||
tmp += '</div>';
|
|
||||||
}
|
|
||||||
workdesc = tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
row[i].workdescFormat = workdesc; // 题目选项
|
|
||||||
|
|
||||||
|
|
||||||
// 答案处理
|
|
||||||
let workanswer = '';
|
|
||||||
if(row[i].workanswer && row[i].workanswer != '') {
|
|
||||||
// 因答案内容存在多种格式: 1.["123","1234"] 2.123#&1234 3.123
|
|
||||||
if(row[i].workanswer.indexOf('[')!==-1 && row[i].workanswer.indexOf(']')!==-1) {
|
|
||||||
//123会直接被转换, 且不是数组对象, 故手动判断是否有[和]两个字符
|
|
||||||
let json = JSON.parse(row[i].workanswer);
|
|
||||||
// 单选、多选 需要 数字转为ABCD
|
|
||||||
if(row[i].worktype == '单选题') {
|
|
||||||
const str2Char = String.fromCharCode(65+Number(json[0]));
|
|
||||||
workanswer = str2Char;
|
|
||||||
} else if (row[i].worktype == '多选题') {
|
|
||||||
// const answerArr = row[i].workanswer.split('#&');
|
|
||||||
let arr2Char = '';
|
|
||||||
for(let k=0; k<json.length; k++){
|
|
||||||
arr2Char += String.fromCharCode(65+Number(json[k]));
|
|
||||||
}
|
|
||||||
workanswer = arr2Char;
|
|
||||||
} else if(row[i].worktype == '主观题' ) {
|
|
||||||
let arr2Char = '';
|
|
||||||
for(let k=0; k<json.length; k++){
|
|
||||||
const itemArr = json[k];
|
|
||||||
arr2Char += '('+ (parseInt(k) + 1) +')'+ itemArr.join('、')+ '<br />';
|
|
||||||
}
|
|
||||||
workanswer = arr2Char;
|
|
||||||
row[i].titleFormat = row[i].titleFormat.replace(/!@#\$%/g, '');
|
|
||||||
} else {
|
|
||||||
workanswer = json.join('、');
|
|
||||||
}
|
|
||||||
} else if(row[i].workanswer.indexOf('#&')) {
|
|
||||||
// 意味着多个答案或者填空内容
|
|
||||||
let workanswerList = row[i].workanswer.split('#&');
|
|
||||||
if(row[i].worktype == '多选题') {
|
|
||||||
// 数字转为ABCD
|
|
||||||
let arr2Char = '';
|
|
||||||
for(let k=0; k<workanswerList.length; k++){
|
|
||||||
arr2Char += String.fromCharCode(65+Number(workanswerList[k]));
|
|
||||||
}
|
|
||||||
workanswer = arr2Char;
|
|
||||||
}else{
|
|
||||||
workanswer = workanswerList.join('、');
|
|
||||||
}
|
|
||||||
} else if(row[i].workanswer.indexOf(',')){
|
|
||||||
// 意味这同样多个答案或者填空内容
|
|
||||||
let workanswerList = row[i].workanswer.split(',');
|
|
||||||
if(row[i].worktype == '多选题') {
|
|
||||||
// 数字转为ABCD
|
|
||||||
let arr2Char = '';
|
|
||||||
for(let k=0; k<workanswerList.length; k++){
|
|
||||||
arr2Char += String.fromCharCode(65+Number(workanswerList[k]));
|
|
||||||
}
|
|
||||||
workanswer = arr2Char;
|
|
||||||
}else{
|
|
||||||
workanswer = workanswerList.join('、');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// 待考虑
|
|
||||||
workanswer = row[i].workanswer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
row[i].workanswerFormat = workanswer; // 题目正确答案
|
|
||||||
|
|
||||||
|
|
||||||
//2.答案 - 数字转为ABCD
|
|
||||||
const answerArr = JSON.parse(row[i].workanswer);
|
|
||||||
let indexLabel = 1;
|
|
||||||
let arr = [];
|
|
||||||
answerArr.forEach(item => {
|
|
||||||
const arrTmp = item.answer.split('#&');
|
|
||||||
let value = `(${indexLabel})`;
|
|
||||||
arrTmp.forEach((element,i) => {
|
|
||||||
if(item.type == '单选题' || item.type == '多选题'){
|
|
||||||
value += `${String.fromCharCode(65+Number(element))}`;
|
|
||||||
}
|
|
||||||
if(item.type == '判断题' || item.type == '填空题'){
|
|
||||||
// 去除下 html标签
|
|
||||||
value += `${element.replace(/<[^>]+>/g, '')}`+ (i==arrTmp.length-1?'':'、');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
arr.push(value);
|
|
||||||
indexLabel++;
|
|
||||||
})
|
|
||||||
const answer = arr.join('<br />');
|
|
||||||
|
|
||||||
row[i].workanswerFormat = answer;
|
|
||||||
}
|
|
||||||
else if(row[i].worktype == '主观题') {
|
|
||||||
// 1.选项解析替换---主观题没选项
|
|
||||||
// 题目(背景材料+主观题目)
|
|
||||||
const bjTitle = row[i].title.split('!@#$%')[0];
|
|
||||||
const tmTitles = row[i].title.split('!@#$%').filter((it,ix)=>ix>0);
|
|
||||||
// console.log(bjTitle,'背景标题');
|
|
||||||
// console.log(tmTitles,'主观题目');
|
|
||||||
let titls = [];
|
|
||||||
const s = [];
|
|
||||||
tmTitles.map((it,ix)=>{
|
|
||||||
s.push(it);
|
|
||||||
})
|
|
||||||
// console.log(s,'?????????????????')
|
|
||||||
|
|
||||||
row[i].titleFormat = bjTitle + s.join('');
|
|
||||||
// 填空选项不需要展示,
|
|
||||||
row[i].workdescFormat = '';
|
|
||||||
|
|
||||||
//2.答案
|
|
||||||
// 填空题答案
|
|
||||||
const workanswerList = JSON.parse(row[i].workanswer);
|
|
||||||
let tmp='';
|
|
||||||
workanswerList&&workanswerList.map((item,index)=>{
|
|
||||||
tmp += '<div>'+(index+1)+'.'+item.replace(/#&/g, ',')+'</div>';
|
|
||||||
})
|
|
||||||
row[i].workanswerFormat = tmp;
|
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
//处理答案
|
|
||||||
row[i].workanswerFormat = '见试题解答内容';
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,8 +58,8 @@
|
||||||
v-else-if="curTask.viewkey=='考点分析' "
|
v-else-if="curTask.viewkey=='考点分析' "
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<examMocks v-else
|
<examMocks
|
||||||
|
v-else
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -75,12 +75,13 @@ import { ArrowRight } from '@element-plus/icons-vue'
|
||||||
import useResoureStore from '@/views/resource/store'
|
import useResoureStore from '@/views/resource/store'
|
||||||
import ChooseTextbook from '@/components/choose-textbook/index.vue'
|
import ChooseTextbook from '@/components/choose-textbook/index.vue'
|
||||||
import {listEntpcoursework, listEntpcourseworkNew} from '@/api/education/entpCourseWork'
|
import {listEntpcoursework, listEntpcourseworkNew} from '@/api/education/entpCourseWork'
|
||||||
import {processExamQuestion} from '@/utils/examQuestion/tool'
|
import { processList } from '@/hooks/useProcessList'
|
||||||
import { JYApiListCT} from "@/utils/examQuestion/jyeoo"
|
import { JYApiListCT} from "@/utils/examQuestion/jyeoo"
|
||||||
|
|
||||||
import examReview from './container/examReview.vue'
|
import examReview from './container/examReview.vue'
|
||||||
import pointAnalysis from './container/pointAnalysis.vue'
|
import pointAnalysis from './container/pointAnalysis.vue'
|
||||||
import examMocks from './container/examMocks.vue'
|
import examMocks from './container/examMocks.vue'
|
||||||
|
import { ElMessage } from 'element-plus'
|
||||||
|
|
||||||
const {proxy} = getCurrentInstance();
|
const {proxy} = getCurrentInstance();
|
||||||
const sourceStore = useResoureStore();
|
const sourceStore = useResoureStore();
|
||||||
|
@ -106,6 +107,19 @@ const listWorkType = ref([{
|
||||||
value: 0,
|
value: 0,
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
const getCourseWorkList = async (params) => {
|
||||||
|
const res = await listEntpcourseworkNew(params);
|
||||||
|
if(res.data == null) {
|
||||||
|
listExamQuestion.value = [];
|
||||||
|
// queryParams.total = 0
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
listExamQuestion.value = res.data;
|
||||||
|
// queryParams.total = res.total;
|
||||||
|
// 格式化试题
|
||||||
|
processList(listExamQuestion.value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @desc: 选中单元章节后的回调, 获取单元章节信息
|
* @desc: 选中单元章节后的回调, 获取单元章节信息
|
||||||
* @return: {*}
|
* @return: {*}
|
||||||
|
@ -134,6 +148,15 @@ const getData = async (data) => {
|
||||||
// const res = await listEntpcoursework(params);
|
// const res = await listEntpcoursework(params);
|
||||||
// listExamQuestion.value = res.rows;
|
// listExamQuestion.value = res.rows;
|
||||||
|
|
||||||
|
// 当前不存在对应绑定的菁优网章节id时, 不进行处理
|
||||||
|
// 注意: 菁优网章节id绑定需在网页端[/evaluation/bind]中进行绑定
|
||||||
|
if (curNode.value.bookId == null || curNode.value.bookId == '' || curNode.value.bookId == '0') {
|
||||||
|
listExamQuestion.value = [];
|
||||||
|
loading.value = false;
|
||||||
|
ElMessage.error("当前单元/章节下无试题");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 查询本地+菁优网(后端处理)
|
// 查询本地+菁优网(后端处理)
|
||||||
const params = {
|
const params = {
|
||||||
eid: curNode.value.id,
|
eid: curNode.value.id,
|
||||||
|
@ -144,17 +167,7 @@ const getData = async (data) => {
|
||||||
edustage: curNode.value.edustage,
|
edustage: curNode.value.edustage,
|
||||||
sectionName: curNode.value.itemtitle,
|
sectionName: curNode.value.itemtitle,
|
||||||
}
|
}
|
||||||
const res = await listEntpcourseworkNew(params);
|
await getCourseWorkList(params);
|
||||||
if(res.data == null) {
|
|
||||||
listExamQuestion.value = [];
|
|
||||||
// queryParams.total = 0
|
|
||||||
loading.value = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
listExamQuestion.value = res.data;
|
|
||||||
// queryParams.total = res.total;
|
|
||||||
// 格式化试题
|
|
||||||
processExamQuestion(listExamQuestion.value);
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,6 +215,13 @@ const queryExamQuestionByParams = async () => {
|
||||||
// const res = await listEntpcoursework(params);
|
// const res = await listEntpcoursework(params);
|
||||||
// listExamQuestion.value = res.rows;
|
// listExamQuestion.value = res.rows;
|
||||||
|
|
||||||
|
if (curNode.value.bookId == null || curNode.value.bookId == '' || curNode.value.bookId == '0') {
|
||||||
|
listExamQuestion.value = [];
|
||||||
|
loading.value = false;
|
||||||
|
ElMessage.error("当前单元/章节下无试题");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 查询本地+菁优网(后端处理)
|
// 查询本地+菁优网(后端处理)
|
||||||
const params = {
|
const params = {
|
||||||
eid: curNode.value.id,
|
eid: curNode.value.id,
|
||||||
|
@ -212,17 +232,7 @@ const queryExamQuestionByParams = async () => {
|
||||||
edustage: curNode.value.edustage,
|
edustage: curNode.value.edustage,
|
||||||
sectionName: curNode.value.itemtitle,
|
sectionName: curNode.value.itemtitle,
|
||||||
}
|
}
|
||||||
const res = await listEntpcourseworkNew(params);
|
await getCourseWorkList(params);
|
||||||
if(res.data == null) {
|
|
||||||
listExamQuestion.value = [];
|
|
||||||
// queryParams.total = 0
|
|
||||||
loading.value = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
listExamQuestion.value = res.data;
|
|
||||||
// queryParams.total = res.total;
|
|
||||||
// 格式化试题
|
|
||||||
processExamQuestion(listExamQuestion.value);
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue