This commit is contained in:
“zouyf” 2025-02-21 17:27:02 +08:00
parent f5c9cdc9de
commit 60b17dc1f7
8 changed files with 262 additions and 0 deletions

View File

@ -83,6 +83,15 @@ export function listEntpcourseworkNew(query) {
} }
export function listEntpcourseworkSmartNew(data) {
return request({
url: '/education/entpcoursework/smart/new',
method: 'post',
data: data
})
}
/** /**
* @desc: 学科网接口api * @desc: 学科网接口api
* @return: {*} * @return: {*}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询KnowPointStudent列表
export function listKnowPointStudent(query) {
return request({
url: '/student/list',
method: 'get',
params: query
})
}
// 查询KnowPointStudent
export function getKnowPointStudent(id) {
return request({
url: '/student/' + id,
method: 'get'
})
}
// 添加KnowPointStudent
export function addKnowPointStudent(data) {
return request({
url: '/student/add',
method: 'post',
data: data
})
}
// 修改KnowPointStudent
export function updateKnowPointStudent(data) {
return request({
url: '/student/update',
method: 'put',
data: data
})
}
// 删除KnowPointStudent
export function delKnowPointStudent(id) {
return request({
url: '/student/' + id,
method: 'delete'
})
}

View File

@ -90,6 +90,12 @@ export const constantRoutes = [
name: 'questionUpload', name: 'questionUpload',
meta: { title: '习题上传', showBread: true } meta: { title: '习题上传', showBread: true }
}, },
{
path: 'questionGrade',
component: () => import('@/views/classTask/newClassTaskAssign/questionGrade/index.vue'),
name: 'questionGrade',
meta: { title: '智能推题', showBread: true }
},
{ {
path: 'groupTestPaper', path: 'groupTestPaper',
component: () => import('@/views/classTask/groupTestPaper/index.vue'), component: () => import('@/views/classTask/groupTestPaper/index.vue'),

View File

@ -39,6 +39,7 @@ const items = shallowRef([
{ title: '习题上传', description: '自己上传个人题库。', icon: '#icon-shangchuan',type:'danger' }, { title: '习题上传', description: '自己上传个人题库。', icon: '#icon-shangchuan',type:'danger' },
{ title: '科学实验', description: '学生完成虚拟仿真实验,并提交实验结果。', icon: '#icon-shangchuan',type:'primary' }, { title: '科学实验', description: '学生完成虚拟仿真实验,并提交实验结果。', icon: '#icon-shangchuan',type:'primary' },
// { title: '', description: '', icon: '#icon-shangchuan',type:'primary' }, // { title: '', description: '', icon: '#icon-shangchuan',type:'primary' },
{ title: '智能推题', description: '根据学生知识点掌握程度,自主智能推题。', icon: '#icon-shangchuan',type:'primary' },
]); ]);
const handleClick = (item) => { const handleClick = (item) => {

View File

@ -297,6 +297,10 @@ const handleItemClick = (itemName) => {
router.push({ path: '/model/groupTestPaper', query: { courseObj: JSON.stringify(courseObj) } }); router.push({ path: '/model/groupTestPaper', query: { courseObj: JSON.stringify(courseObj) } });
return; return;
} }
if (itemName == '智能推题') {
router.push({ path: '/model/questionGrade', query: { courseObj: JSON.stringify(courseObj) } });
return;
}
currentRow.value.id = 1; // currentRow.value.id = 1; //
/** /**

View File

@ -0,0 +1,105 @@
<template>
<el-row class="c-warp" :gutter="10">
<el-col class="left" :span="10">
<!-- <el-collapse class="c-item" v-model="activeTopic" accordion>
<template v-for="(item, index) in pointList">
<el-collapse-item class="collapse-item" :name="index+1" :id="'collapse-'+(index+1)" @click="clickItem(index)">
<template #title>
<el-popover :width="500" placement="right">
<p>{{item.def?.titletext}}</p>
<template #reference>
<el-button type="primary" size="small" round>{{index+1}}</el-button>
</template>
</el-popover>
<span class="item-title-o">{{item.type}} {{getRatioTxt(item)}} </span>
<el-tag type="success" size="small">{{item.points}}%</el-tag>
</template>
<div class="respond">
<div class="c-label">
<b t1>作答情况</b>
<template v-if="item.type=='单选题'||item.type == '多选题'||item.type == '判断题'">
<span>(已经完成 <el-text type="danger">{{item.accSum}}</el-text> -</span>
<span>回答正确 <el-text type="danger">{{item.rightSum}}</el-text> )</span>
</template>
<template v-else>
<span>(已经完成 <el-text type="danger">{{item.accSum}}</el-text> )</span>
</template>
</div>
<div class="c-childen">
<template v-for="(it, ind) in item.children">
<el-collapse v-model="item.active">
<el-collapse-item class="collapse-item" :name="ind+1">
<template #title>
<div class="t-left">
<el-tooltip placement="right" :content="it.def">
<el-tag size="small" style="vertical-align: 2px;" v-html="it.code"></el-tag>
</el-tooltip>
<el-text t1>{{it.studentIds.length}} / {{ratio_1(it, item.accSum)}}%</el-text>
</div>
<div style="flex: 1;">
<el-progress :status="getStatus(it)" :stroke-width="10" :percentage="ratio_1(it, item.accSum)" />
</div>
</template>
<div class="c-respond">
<template v-for="(sid, indStu) in it.studentIds">
<el-tag>{{getStudentName(sid)}}</el-tag>
</template>
</div>
</el-collapse-item>
</el-collapse>
</template>
</div>
</div>
</el-collapse-item>
</template>
</el-collapse> -->
<el-button type="success" @click="test()">测试</el-button>
</el-col>
</el-row>
</template>
<script setup>
import { onMounted, ref, watch, reactive, getCurrentInstance, nextTick, defineEmits } from 'vue'
import { listKnowPointStudent } from '@/api/knowledge/student'
import { listEntpcourseworkSmartNew } from '@/api/education/entpcoursework'
const props = defineProps({
courseObj: Object,
})
const activeTopic = ref(1) //
const initKnowPointList = async () => {
const eid = props.courseObj.levelSecondId ? props.courseObj.levelSecondId : props.courseObj.levelFirstId;
const res = await listKnowPointStudent({eid: eid});
console.log('res', res);
}
const test = async () => {
const query = {
edustage: '高中',
edusubject: '地理',
evalId: '40222',
requestsList: [{
pointThirdIdList: ['371213'],
difficulty: 5,
workType: 1,
count: 3,
}],
}
listEntpcourseworkSmartNew(query).then(res => {
console.log('res', res);
})
}
onMounted(() => {
//initKnowPointList();
})
</script>
<style scoped lang="scss">
</style>

View File

@ -0,0 +1,3 @@
<template>
<div>学生掌握展示</div>
</template>

View File

@ -0,0 +1,90 @@
<template>
<div class="page-testpaper">
<div class="page-center">
<el-tabs v-model="activeAptTab" style="height: 100%;">
<el-tab-pane label="知识点一览" name="知识点一览" class="prepare-center-zzst">
<KnowPointModel v-if="isCourseObjLoaded" :courseObj="courseObj"/>
</el-tab-pane>
<el-tab-pane label="学生掌握一览" name="学生掌握一览" class="prepare-center-grst">
<StudentModel v-if="isCourseObjLoaded" :courseObj="courseObj"/>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script setup>
import { onMounted, ref, watch, reactive, getCurrentInstance, nextTick, defineEmits } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import KnowPointModel from '@/views/classTask/newClassTaskAssign/questionGrade/components/knowPointModel.vue'
import StudentModel from '@/views/classTask/newClassTaskAssign/questionGrade/components/studentModel.vue'
const route = useRoute();
const propsQueryCourseObj = route.query.courseObj;//
const isCourseObjLoaded = ref(false);
const courseObj = reactive({
// : id,id,id,
textbookId: '',
levelFirstId: '',
levelSecondId: '',
coursetitle:'',
node: null, //
//
})
const activeAptTab = ref("知识点一览");
onMounted(() => {
console.log('propsQueryCourseObj', JSON.parse(propsQueryCourseObj));
if(propsQueryCourseObj&&JSON.parse(propsQueryCourseObj)){
courseObj.textbookId = JSON.parse(propsQueryCourseObj).bookObj //
courseObj.levelFirstId = JSON.parse(propsQueryCourseObj).levelFirstId //
courseObj.levelSecondId = JSON.parse(propsQueryCourseObj).levelSecondId //
courseObj.coursetitle = JSON.parse(propsQueryCourseObj).coursetitle // (/)
courseObj.node = JSON.parse(propsQueryCourseObj).node; //
}
isCourseObjLoaded.value = true;
})
</script>
<style scoped lang="scss">
:deep(.el-tabs__nav) {
.el-tabs__item {
font-weight: bold;
font-size: 18px;
}
}
.page-testpaper {
height: 100%;
display: flex;
flex-direction: row;
.page-center{
flex: 1;
//min-width: calc(100% - 675px);
height: 100%;
padding: 0 20px;
margin: 0 5px;
overflow: hidden;
border-radius: 10px;
background-color: white;
.prepare-center-zzst{
height: 100%;
display: flex;
flex-direction: column;
}
.prepare-center-xbtk{
height: 100%;
}
.prepare-center-grst{
height: 100%;
}
}
.page-right{
flex: 1;
}
}
</style>