提交 39721f96 authored 作者: matian's avatar matian

updates

上级 c9388c46
...@@ -190,7 +190,7 @@ export const menus: IMenuItem[] = [ ...@@ -190,7 +190,7 @@ export const menus: IMenuItem[] = [
tag: 'v1-backend-lecturer-list', tag: 'v1-backend-lecturer-list',
icon: DataAnalysis, icon: DataAnalysis,
name: '数据画像与分析', name: '数据画像与分析',
path: '' path: 'http://114.242.229.132:18080/bi/?proc=1&action=viewer&hback=true&isInPreview=true&db=!7d2b!!8346!!6559!!80b2!e-SaaS!2f!!8d44!!6e90!!6570!!636e!!753b!!50cf!.db&platform=PC&browserType=chrome'
} }
] ]
} }
......
...@@ -20,6 +20,20 @@ export function getPaperStuList(params?: { ...@@ -20,6 +20,20 @@ export function getPaperStuList(params?: {
}) { }) {
return httpRequest.get('/api/resource/v1/teaching/paper/list', { params }) return httpRequest.get('/api/resource/v1/teaching/paper/list', { params })
} }
// 获取学员详情
export function getPaperStuDetail(params?: { id: string }) {
return httpRequest.get('/api/resource/v1/teaching/paper/view', { params })
}
// 评分
export function updateComment(params?: {
id: string
index: string
child_index?: string
user_score: string
reviews: string
}) {
return httpRequest.get('/api/resource/v1/teaching/paper/update ', { params })
}
// /** // /**
// * 获取试卷详情 // * 获取试卷详情
// */ // */
......
<script lang="ts" setup> <script lang="ts" setup>
import type { IQuestionList } from '../type'
import QuestionItem from './QuestionItem.vue' import QuestionItem from './QuestionItem.vue'
const props = defineProps({
options: {
type: Object
},
question_item_id: {
type: String
}
})
const questionItem = computed(() => { interface Props {
return props.options?.item everyQuestion: any
}) questionList: IQuestionList[]
const sheet_id = computed(() => { }
return props.options?.sheet_id const props = defineProps<Props>()
})
const questionType = computed(() => {
return props.options?.item.question_item_type
})
</script> </script>
<template> <template>
<el-card class="container"> <el-card class="container">
<template #header> <template #header>
<span>{{ questionItem.question_item_title }}</span> <span>{{ everyQuestion?.question_content }}</span>
</template> </template>
<div class="content"> <div class="content">
<template v-for="item in questionItem.question_list"> <template v-for="item in props.questionList">
<div class="sub-content" v-if="item.group_id" :key="item.id"> <div class="sub-content" v-if="item?.children" :key="item.id">
<div class="title" v-html="item.common_content"></div> <div class="title" v-html="item.common_content"></div>
<div class="sub-container"> <div class="sub-container">
<QuestionItem <QuestionItem v-for="subItem in item.children" :key="subItem.id" :question="subItem" />
v-for="subItem in item.list"
:key="subItem.id"
:question="{ item: subItem, question_item_id, questionType, sheet_id }"
:question_item_id="question_item_id"
/>
</div> </div>
</div> </div>
<div v-else :key="item.id"> <div v-else :key="item.id">
<QuestionItem <QuestionItem :question="item" />
:question="{ item, question_item_id, questionType, sheet_id }"
:question_item_id="question_item_id"
/>
</div> </div>
</template> </template>
</div> </div>
......
<script lang="ts" setup> <script lang="ts" setup>
// import { ElMessage } from 'element-plus' import { updateComment } from '../api'
// import { submitPaper } from '../api.js'
const bc: any = ref(null)
const showComment = ref(false) const showComment = ref(false)
const props = defineProps({ const props = defineProps({
question: { question: {
...@@ -15,60 +12,48 @@ const props = defineProps({ ...@@ -15,60 +12,48 @@ const props = defineProps({
type: String type: String
} }
}) })
const questionData = JSON.parse(JSON.stringify(props.question.item)) const questionData = Object.assign({}, props.question)
const questionType = computed(() => { const questionType = computed(() => {
// 1单选,2多选,3简答,5案例题, 6判断, 7实操,8情景 // 1单选,2多选,3简答,5案例题, 6判断, 7实操,8情景
const type = questionData.type || props.question.questionType || 1 if (props.question.child_question_type) {
return parseInt(type) return parseInt(props.question.child_question_type)
} else {
return parseInt(props.question.questionType)
}
}) })
// const sheet_id = computed(() => {
// return props.question.sheet_id
// })
onUnmounted(() => {
bc.value && bc.value.close()
})
const fetchComment = () => { const fetchComment = () => {
console.log('0000') const params = {
// const params: any = { id: '',
// sheet_id: sheet_id, index: '',
// question_item_id: props.question_item_id, child_index: '',
// question_id: questionData.value.id, user_score: '',
// score: questionData.value.get_score, reviews: ''
// comment: questionData.value.comment }
// } updateComment(params).then(() => {
// submitPaper(params).then((res: any) => { console.log('000')
// if (res.success) { })
// ElMessage.success('提交点评成功')
// } else {
// ElMessage.success('提交点评失败')
// }
// bc.value = new BroadcastChannel('exam')
// bc.value.postMessage({ action: 'refetch' })
// })
} }
</script> </script>
<template> <template>
<div class="question-item"> <div class="question-item">
<div class="question-item-title" v-html="questionData.content"></div> <div class="question-item-title" v-html="props.question.question_content"></div>
<template v-if="questionType === 1 || questionType === 6"> <template v-if="questionType === 1 || questionType === 6">
<el-radio-group v-model="questionData.user_answer[0]" :disabled="true" class="question-item-content"> <el-radio-group v-model="questionData.user_answer" :disabled="true" class="question-item-content">
<div class="question-item-option" v-for="subItem in questionData.options" :key="subItem.id"> <div class="question-item-option" v-for="subItem in props.question.question_options" :key="subItem.id">
<el-radio :label="subItem.id">{{ subItem.option }}</el-radio> <el-radio :label="subItem.id">{{ subItem.option }}</el-radio>
</div> </div>
</el-radio-group> </el-radio-group>
</template> </template>
<template v-if="questionType === 2"> <template v-if="questionType === 2">
<el-checkbox-group v-model="questionData.user_answer" :disabled="true" class="question-item-content"> <el-checkbox-group v-model="questionData.user_answer" :disabled="true" class="question-item-content">
<div class="question-item-option" v-for="subItem in questionData.options" :key="subItem.id"> <div class="question-item-option" v-for="subItem in questionData.question_options" :key="subItem.id">
<el-checkbox :label="subItem.id"> {{ subItem.option }} </el-checkbox> <el-checkbox :label="subItem.id"> {{ subItem.option }} </el-checkbox>
</div> </div>
</el-checkbox-group> </el-checkbox-group>
</template> </template>
<template v-if="questionType === 3"> <template v-if="questionType === 3">
<div class="SAQ">{{ questionData.user_answer[0] || '' }}</div> <div class="SAQ">{{ questionData.user_answer || '' }}</div>
-->
<div style="text-align: right"> <div style="text-align: right">
<el-button <el-button
type="primary" type="primary"
...@@ -81,14 +66,14 @@ const fetchComment = () => { ...@@ -81,14 +66,14 @@ const fetchComment = () => {
</div> </div>
<div class="comment" v-show="showComment"> <div class="comment" v-show="showComment">
<div class="comment-top"> <div class="comment-top">
<p>本题{{ questionData.score }}</p> <p>本题{{ props.question.score }}</p>
<div class="get-score"> <div class="get-score">
学生得分:<el-input-number 学生得分:<el-input-number
:disabled="questionData.checked_flag" :disabled="questionData.checked_flag"
v-model="questionData.get_score" v-model="questionData.user_score"
controls-position="right" controls-position="right"
:min="0" :min="0"
:max="questionData.score" :max="props.question.score"
size="small" size="small"
></el-input-number> ></el-input-number>
</div> </div>
...@@ -96,18 +81,18 @@ const fetchComment = () => { ...@@ -96,18 +81,18 @@ const fetchComment = () => {
<el-input <el-input
type="textarea" type="textarea"
placeholder="请输入评语" placeholder="请输入评语"
v-model="questionData.comment" v-model="questionData.reviews"
rows="3" rows="3"
:disabled="questionData.checked_flag" :disabled="questionData.checked_flag"
/> />
<div style="text-align: center; padding-top: 10px"> <div style="text-align: center; padding-top: 10px">
<el-button type="primary" size="small" @click="fetchComment" :disabled="questionData.checked_flag" <el-button type="primary" size="small" @click="fetchComment" :disabled="props.question.checked_flag"
>提交点评</el-button >提交点评</el-button
> >
</div> </div>
</div> </div>
</template> </template>
<div class="question-item-score">得分:{{ questionData.get_score }}分</div> <div class="question-item-score">得分:{{ props.question.user_score }}分</div>
</div> </div>
</template> </template>
......
interface IQuestionptions {
option: string
checked_option: string
checked: boolean
id: string
user_checked: boolean
}
export interface IQuestionList {
id: string
project_prefix: string
permission: number
question_type: number
question_title: string
question_content: string
common_content: string
question_options: IQuestionptions[]
question_analysis: string
question_difficulty: number
status: number
group_id: string
question_order: number
question_tag: string
is_parent: number
child_question_type: number
score: number
children?: IQuestionList[]
}
\ No newline at end of file
...@@ -65,7 +65,7 @@ const listOptions = $computed(() => { ...@@ -65,7 +65,7 @@ const listOptions = $computed(() => {
} }
}) })
const handleCheckPaper = (row: any) => { const handleCheckPaper = (row: any) => {
router.push({ path: '/teach/view', query: { eid: row.exam_id, sid: row.student_id } }) router.push({ path: '/teach/view', query: { id: row.id } })
} }
onMounted(() => { onMounted(() => {
checkPermission('v1-teaching-paper-search-list') && handleGetClassList() checkPermission('v1-teaching-paper-search-list') && handleGetClassList()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论