Compare commits
No commits in common. "ed3559f34fadd2f7f3a8071b383cacffe3411ebc" and "302c82503a7e36c8e5d90d7584f4e449d1bb8e58" have entirely different histories.
ed3559f34f
...
302c82503a
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "aix-win",
|
"name": "aix-win",
|
||||||
"version": "2.1.19",
|
"version": "2.1.18",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "./out/main/index.js",
|
"main": "./out/main/index.js",
|
||||||
"author": "上海交大重庆人工智能研究院",
|
"author": "上海交大重庆人工智能研究院",
|
||||||
|
|
|
@ -1,35 +0,0 @@
|
||||||
<template>
|
|
||||||
<el-drawer v-model="model" class="preview-drawer" :modal="true" :destroy-on-close="true" :with-header="false" :append-to-body="true"
|
|
||||||
size="50%">
|
|
||||||
<div class="drawer-content">
|
|
||||||
<el-image v-for="(url,index) in srcList" :key="index" :src="url" lazy />
|
|
||||||
</div>
|
|
||||||
</el-drawer>
|
|
||||||
</template>
|
|
||||||
<script setup>
|
|
||||||
import {ref} from 'vue'
|
|
||||||
import {getImgPath} from "@/api/file/third";
|
|
||||||
|
|
||||||
const model = defineModel()
|
|
||||||
//显示图片的路径
|
|
||||||
const srcList = ref([])
|
|
||||||
const init = (id) => {
|
|
||||||
srcList.value = []
|
|
||||||
getImgPath({itemId:id}).then(res => {
|
|
||||||
if(res.code === 200){
|
|
||||||
res.data.forEach(item => {
|
|
||||||
item.subsets.forEach(previewItem => {
|
|
||||||
previewItem.previewFiles.forEach(fileItem => {
|
|
||||||
srcList.value.push(fileItem.fileUrl)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
defineExpose({
|
|
||||||
init
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
|
@ -619,13 +619,13 @@ const checkWorkType = (params) => {
|
||||||
// 获取学生答题列表
|
// 获取学生答题列表
|
||||||
|
|
||||||
const score = extractedNumber(params.studentObj.scoingRate)
|
const score = extractedNumber(params.studentObj.scoingRate)
|
||||||
if(0<=score && score<=59){
|
if(0<=score<=59){
|
||||||
classWorkFormScore.rating = 5
|
classWorkFormScore.rating = 5
|
||||||
}else if(60<=score && score<=69){
|
}else if(60<=score<=69){
|
||||||
classWorkFormScore.rating = 4
|
classWorkFormScore.rating = 4
|
||||||
}else if(70<=score && score<=79){
|
}else if(70<=score<=79){
|
||||||
classWorkFormScore.rating = 3
|
classWorkFormScore.rating = 3
|
||||||
}else if(80<=score && score<=99){
|
}else if(80<=score<=99){
|
||||||
classWorkFormScore.rating = 2
|
classWorkFormScore.rating = 2
|
||||||
}else{
|
}else{
|
||||||
classWorkFormScore.rating = 1
|
classWorkFormScore.rating = 1
|
||||||
|
|
|
@ -149,7 +149,7 @@
|
||||||
<!-- 训练报告-->
|
<!-- 训练报告-->
|
||||||
<div v-else-if="classWorkAnalysis.view == 'report'" style="overflow-y: scroll">
|
<div v-else-if="classWorkAnalysis.view == 'report'" style="overflow-y: scroll">
|
||||||
<!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> -->
|
<!-- <ClassOverview :table-list="overviewData" :eval-id="courseObj.evalid"></ClassOverview> -->
|
||||||
<ClassOverview :active-data="classWorkActiveData" :table-list="overviewData"></ClassOverview>
|
<ClassOverview :table-list="overviewData"></ClassOverview>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- <template #footer>
|
<!-- <template #footer>
|
||||||
|
@ -393,46 +393,11 @@ const getClassWorkStudentList = (rowId) => {
|
||||||
tableRadio.value = '1'
|
tableRadio.value = '1'
|
||||||
tableRadio.num0 = classWorkAnalysis.classworkdata.length - tableRadio.list.length
|
tableRadio.num0 = classWorkAnalysis.classworkdata.length - tableRadio.list.length
|
||||||
tableRadio.num1 = tableRadio.list.length
|
tableRadio.num1 = tableRadio.list.length
|
||||||
tableRadio.list = tableRadio.list.map((item) => {
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
teacherRating : checkWorkType(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
loading_dt_table.value = false
|
loading_dt_table.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const checkWorkType = (item) => {
|
|
||||||
//这里判断题目类型
|
|
||||||
const subType = classWorkActiveData.quizlist.map(item => item.worktype)
|
|
||||||
const objectiveQuestion = ['单选题','多选题','判断题']
|
|
||||||
let rating = 0
|
|
||||||
//判断题目是不是客观题
|
|
||||||
if(subType.every(item => objectiveQuestion.includes(item))){
|
|
||||||
// 获取学生答题列表
|
|
||||||
const score = extractedNumber(item.scoingRate)
|
|
||||||
if(0<=score && score<=59){
|
|
||||||
rating = 5
|
|
||||||
}else if(60<=score && score<=69){
|
|
||||||
rating = 4
|
|
||||||
}else if(70<=score && score<=79){
|
|
||||||
rating = 3
|
|
||||||
}else if(80<=score && score<=99){
|
|
||||||
rating = 2
|
|
||||||
}else{
|
|
||||||
rating = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rating
|
|
||||||
|
|
||||||
}
|
|
||||||
// 获取百分比的数字
|
|
||||||
const extractedNumber = (score) => {
|
|
||||||
const match = score.match(/\d+/);
|
|
||||||
return match ? parseInt(match[0], 10) : null;
|
|
||||||
}
|
|
||||||
/** 2、查看某一个学生的学习任务完成详情*/
|
/** 2、查看某一个学生的学习任务完成详情*/
|
||||||
const getStudentClassWorkDataDetail = (row) => {
|
const getStudentClassWorkDataDetail = (row) => {
|
||||||
// 这里取出的是学生完成情况
|
// 这里取出的是学生完成情况
|
||||||
|
|
|
@ -74,28 +74,28 @@
|
||||||
|
|
||||||
<div class="title">试题详情</div>
|
<div class="title">试题详情</div>
|
||||||
<!-- 习题训练 -->
|
<!-- 习题训练 -->
|
||||||
<el-card class="item-card">
|
<el-card style="max-width: 100%; margin-bottom: 10px; text-align: left;">
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24" style="padding: 10px">
|
<el-col :span="24" style="padding: 10px">
|
||||||
<!-- 题源、题目标题、题目选项 -->
|
<!-- 题源、题目标题、题目选项 -->
|
||||||
<span>{{ activeExam.worktag }}</span>
|
<span>{{ activeExam.worktag }}</span>
|
||||||
<span v-html="activeExam.titleFormat"></span>
|
<span style="margin-left: 4px" v-html="activeExam.titleFormat"></span>
|
||||||
<div :span="24" style="padding: 12px 6px 2px" v-html="activeExam.workdescFormat"></div>
|
<div :span="24" style="padding: 6px" v-html="activeExam.workdescFormat"></div>
|
||||||
<!-- 折叠: 详情分析解答 -->
|
<!-- 折叠: 详情分析解答 -->
|
||||||
<div class="demo-collapse">
|
<div class="demo-collapse">
|
||||||
<el-collapse v-model="activeExamFlag" class="custom-collapse">
|
<el-collapse v-model="activeExamFlag">
|
||||||
<el-collapse-item title="详情分析解答" name="1">
|
<el-collapse-item title="详情分析解答" name="1">
|
||||||
<el-row style=" padding: 4px; border: 2px dotted;">
|
<el-row style=" padding: 6px 10px; border: 2px dotted;">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-col :span="3" style="padding: 4px 0px"><em>【答案】</em></el-col>
|
<el-col :span="2" style="padding: 6px 0px"><em>【答案】</em></el-col>
|
||||||
<el-col :span="21" style="padding: 4px 0px" v-html="activeExam.workanswerFormat"></el-col>
|
<el-col :span="21" style="padding: 6px 0px" v-html="activeExam.workanswerFormat"></el-col>
|
||||||
<el-col :span="3" style="padding: 4px 0px"><em>【分析】</em></el-col>
|
<el-col :span="2" style="padding: 6px 0px"><em>【分析】</em></el-col>
|
||||||
<el-col :span="21" style="padding: 4px 0px" v-html="activeExam.method"></el-col>
|
<el-col :span="21" style="padding: 6px 0px" v-html="activeExam.method"></el-col>
|
||||||
<el-col :span="3" style="padding: 4px 0px"><em>【解答】</em></el-col>
|
<el-col :span="2" style="padding: 6px 0px"><em>【解答】</em></el-col>
|
||||||
<el-col :span="21" style="padding: 4px 0px" v-html="activeExam.analyse"></el-col>
|
<el-col :span="21" style="padding: 6px 0px" v-html="activeExam.analyse"></el-col>
|
||||||
<el-col :span="3" style="padding: 4px 0px"><em>【点评】</em></el-col>
|
<el-col :span="2" style="padding: 6px 0px"><em>【点评】</em></el-col>
|
||||||
<el-col :span="21" style="padding: 4px 0px" v-html="activeExam.discuss"></el-col>
|
<el-col :span="21" style="padding: 6px 0px" v-html="activeExam.discuss"></el-col>
|
||||||
<!-- <el-col :span="21" style="padding: 4px 0px" v-html="dataList[activeTopic-1].def.discuss"></el-col> -->
|
<!-- <el-col :span="21" style="padding: 6px 0px" v-html="dataList[activeTopic-1].def.discuss"></el-col> -->
|
||||||
</template>
|
</template>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
|
@ -433,17 +433,6 @@ watchEffect(() => { initData() })
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.item-card {
|
|
||||||
max-width: 100%;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
text-align: left;
|
|
||||||
font-size: 18px;
|
|
||||||
|
|
||||||
:deep(.el-collapse-item__content){
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
|
@ -390,46 +390,11 @@ const getClassWorkStudentList = (rowId) => {
|
||||||
tableRadio.value = '1'
|
tableRadio.value = '1'
|
||||||
tableRadio.num0 = classWorkAnalysis.classworkdata.length - tableRadio.list.length
|
tableRadio.num0 = classWorkAnalysis.classworkdata.length - tableRadio.list.length
|
||||||
tableRadio.num1 = tableRadio.list.length
|
tableRadio.num1 = tableRadio.list.length
|
||||||
tableRadio.list = tableRadio.list.map((item) => {
|
|
||||||
return {
|
|
||||||
...item,
|
|
||||||
teacherRating : checkWorkType(item)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
.catch(() => {
|
.catch(() => {
|
||||||
loading_dt_table.value = false
|
loading_dt_table.value = false
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
const checkWorkType = (item) => {
|
|
||||||
//这里判断题目类型
|
|
||||||
const subType = classWorkActiveData.quizlist.map(item => item.worktype)
|
|
||||||
const objectiveQuestion = ['单选题','多选题','判断题']
|
|
||||||
let rating = 0
|
|
||||||
//判断题目是不是客观题
|
|
||||||
if(subType.every(item => objectiveQuestion.includes(item))){
|
|
||||||
// 获取学生答题列表
|
|
||||||
const score = extractedNumber(item.scoingRate)
|
|
||||||
if(0<=score && score<=59){
|
|
||||||
rating = 5
|
|
||||||
}else if(60<=score && score<=69){
|
|
||||||
rating = 4
|
|
||||||
}else if(70<=score && score<=79){
|
|
||||||
rating = 3
|
|
||||||
}else if(80<=score && score<=99){
|
|
||||||
rating = 2
|
|
||||||
}else{
|
|
||||||
rating = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rating
|
|
||||||
|
|
||||||
}
|
|
||||||
// 获取百分比的数字
|
|
||||||
const extractedNumber = (score) => {
|
|
||||||
const match = score.match(/\d+/);
|
|
||||||
return match ? parseInt(match[0], 10) : null;
|
|
||||||
}
|
|
||||||
/** 2、查看某一个学生的学习任务完成详情*/
|
/** 2、查看某一个学生的学习任务完成详情*/
|
||||||
const getStudentClassWorkDataDetail = (row) => {
|
const getStudentClassWorkDataDetail = (row) => {
|
||||||
// 这里取出的是学生完成情况
|
// 这里取出的是学生完成情况
|
||||||
|
|
|
@ -7,11 +7,12 @@
|
||||||
v-for="item in sourceStore.thirdResult.list"
|
v-for="item in sourceStore.thirdResult.list"
|
||||||
:key="item.itemId"
|
:key="item.itemId"
|
||||||
class="list-item"
|
class="list-item"
|
||||||
@click="handleRow(item)"
|
@click="handleRow"
|
||||||
>
|
>
|
||||||
<div class="item-left flex">
|
<div class="item-left flex">
|
||||||
<div style="position: relative">
|
<div style="position: relative" @click="clickImg(item.itemId)">
|
||||||
<FileImage :file-name="item.fileType" :size="50" />
|
<FileImage :file-name="item.fileType" :size="50" />
|
||||||
|
<el-icon style="position: absolute;top: 1px;right: 5px"><Search /></el-icon>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex item-left-content">
|
<div class="flex item-left-content">
|
||||||
<div class="name flex" :title="item.title">
|
<div class="name flex" :title="item.title">
|
||||||
|
@ -65,7 +66,14 @@
|
||||||
@current-change="handleCurrentChange"
|
@current-change="handleCurrentChange"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<FilePreview ref="thirdPreview" v-model="isViewImg"></FilePreview>
|
<el-dialog v-model="isViewImg" width="80%" :modal-append-to-body="false" :append-to-body="false">
|
||||||
|
<div class="demo-image__lazy">
|
||||||
|
<el-image v-for="(url,index) in srcList" :key="index" :src="url" lazy />
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
<!-- <video width="550" controls autoplay loop>-->
|
||||||
|
<!-- <source src="https://sf1-cdn-tos.huoshanstatic.com/obj/media-fe/xgplayer_doc_video/mp4/xgplayer-demo-360p.mp4" type="video/mp4" />-->
|
||||||
|
<!-- </video>-->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -74,9 +82,10 @@ import { ref } from 'vue'
|
||||||
// import { ElMessage, ElMessageBox } from 'element-plus'
|
// import { ElMessage, ElMessageBox } from 'element-plus'
|
||||||
import { Clock,View,Folder,Search } from '@element-plus/icons-vue'
|
import { Clock,View,Folder,Search } from '@element-plus/icons-vue'
|
||||||
import FileImage from '@/components/file-image/index.vue'
|
import FileImage from '@/components/file-image/index.vue'
|
||||||
import FilePreview from '@/components/thirdFile-preview/index.vue'
|
import { getFileSuffix } from '@/utils/ruoyi'
|
||||||
import useUserStore from '@/store/modules/user'
|
import useUserStore from '@/store/modules/user'
|
||||||
import useResoureStore from '../store'
|
import useResoureStore from '../store'
|
||||||
|
import {getImgPath} from "@/api/file/third";
|
||||||
|
|
||||||
const userstore = useUserStore()
|
const userstore = useUserStore()
|
||||||
const sourceStore = useResoureStore()
|
const sourceStore = useResoureStore()
|
||||||
|
@ -84,7 +93,8 @@ const sourceStore = useResoureStore()
|
||||||
// const userInfo = userstore.user
|
// const userInfo = userstore.user
|
||||||
//判断是否预览图片
|
//判断是否预览图片
|
||||||
const isViewImg = ref(false)
|
const isViewImg = ref(false)
|
||||||
const thirdPreview = ref()
|
//显示图片的路径
|
||||||
|
const srcList = ref([])
|
||||||
|
|
||||||
// 分页change
|
// 分页change
|
||||||
const handleSizeChange = (limit) => {
|
const handleSizeChange = (limit) => {
|
||||||
|
@ -110,9 +120,20 @@ function timestampToDate(timestamp) {
|
||||||
return `${year}-${month}-${day}`;
|
return `${year}-${month}-${day}`;
|
||||||
}
|
}
|
||||||
//获取图片的路径
|
//获取图片的路径
|
||||||
const handleRow = (item) => {
|
const clickImg = (id) => {
|
||||||
isViewImg.value = true
|
srcList.value = []
|
||||||
thirdPreview.value.init(item.itemId)
|
getImgPath({itemId:id}).then(res => {
|
||||||
|
if(res.code === 200){
|
||||||
|
isViewImg.value = true
|
||||||
|
res.data.forEach(item => {
|
||||||
|
item.subsets.forEach(previewItem => {
|
||||||
|
previewItem.previewFiles.forEach(fileItem => {
|
||||||
|
srcList.value.push(fileItem.fileUrl)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue