This commit is contained in:
parent
f5c9cdc9de
commit
60b17dc1f7
|
@ -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: {*}
|
||||||
|
|
|
@ -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'
|
||||||
|
})
|
||||||
|
}
|
|
@ -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'),
|
||||||
|
|
|
@ -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) => {
|
||||||
|
|
|
@ -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; // 作业设计
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<template>
|
||||||
|
<div>学生掌握展示</div>
|
||||||
|
</template>
|
|
@ -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>
|
Loading…
Reference in New Issue