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
|
||||
* @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',
|
||||
meta: { title: '习题上传', showBread: true }
|
||||
},
|
||||
{
|
||||
path: 'questionGrade',
|
||||
component: () => import('@/views/classTask/newClassTaskAssign/questionGrade/index.vue'),
|
||||
name: 'questionGrade',
|
||||
meta: { title: '智能推题', showBread: true }
|
||||
},
|
||||
{
|
||||
path: 'groupTestPaper',
|
||||
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:'primary' },
|
||||
// { title: '自主组卷', description: '老师自主选择试题组卷。', icon: '#icon-shangchuan',type:'primary' },
|
||||
{ title: '智能推题', description: '根据学生知识点掌握程度,自主智能推题。', icon: '#icon-shangchuan',type:'primary' },
|
||||
]);
|
||||
|
||||
const handleClick = (item) => {
|
||||
|
|
|
@ -297,6 +297,10 @@ const handleItemClick = (itemName) => {
|
|||
router.push({ path: '/model/groupTestPaper', query: { courseObj: JSON.stringify(courseObj) } });
|
||||
return;
|
||||
}
|
||||
if (itemName == '智能推题') {
|
||||
router.push({ path: '/model/questionGrade', query: { courseObj: JSON.stringify(courseObj) } });
|
||||
return;
|
||||
}
|
||||
|
||||
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