Files
fe-manage/src/components/drawers/ViewAssess.vue
2023-03-09 11:54:16 +08:00

408 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<a-drawer
v-if="Assessvisible"
:visible="Assessvisible"
class="drawerStyle assessment"
placement="right"
width="70%"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">查看评估详情</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<div class="main">
<div class="onerow">
<div class="assname">评估名称</div>
<div class="asscontent">{{evalName}}</div>
</div>
<div class="onerow" style="margin-top: 30px">
<div class="assname">评估说明</div>
<div class="asscontent">-</div>
</div>
<div
v-for="(values, index) in questionListArr"
:key="index">
<!-- 单项选择 -->
<div v-if="values.questionType==1" class="assessbox" style="margin-top: 30px">
<div class="box1">
<div class="asstype">评估类型</div>
<div class="typename">单选</div>
</div>
<div class="box1" style="margin-left: 64px">
<div class="asstype">题干</div>
<div style="color: rgba(153, 153, 153, 1); font-size: 14px">
{{values?.singleStemName}}
</div>
</div>
<div>
<div class="box1" v-for="(itteems, indexss) in values.assessmentSingleChoiceVoList" style="margin-left: 55px; margin-top: 20px; flex-direction:column; justify-content:flex-start;align-items:flex-start;" :key="indexss">
<div style="display:flex;">
<div class="asstype">选择{{indexss+1}}</div>
<div style="display:flex;justify-content:center;align-items:center;">
<div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div>
</div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.singleOptionName}}
</div>
</div>
<img v-if="itteems?.singleOptionPictureAddress" :src="VUE_APP_FILE_PATH + itteems?.singleOptionPictureAddress" alt="" srcset="" style="width: 140px;height:140px;margin-top:5px;">
<div v-else-if="isExistImg(values.assessmentSingleChoiceVoList, 1)" style="width: 140px;height:140px;margin-top:5px;"></div>
<!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> -->
</div>
</div>
<div style="margin-bottom:30px;"></div>
</div>
<!-- 多项选择 -->
<div v-if="values.questionType==2" class="assessbox" style="margin-top: 30px">
<div class="box1">
<div class="asstype">评估类型</div>
<div class="typename">多选</div>
</div>
<div class="box1" style="margin-left: 64px">
<div class="asstype">题干</div>
<div style="color: rgba(153, 153, 153, 1); font-size: 14px">
{{values?.multipleStemName}}
</div>
</div>
<div>
<div class="box1" v-for="(itteems, indexss) in values.multipleChoiceVoList" style="margin-left: 55px; margin-top: 20px; flex-direction:column; justify-content:flex-start;align-items:flex-start;" :key="indexss">
<div style="display:flex;">
<div class="asstype">选择{{indexss+1}}</div>
<div style="display:flex;justify-content:center;align-items:center;">
<div v-if="itteems.select" style="display:flex;justify-content:center;align-items:center;width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;">
<div style="width:8px;height:8px;border-radius:4px;background-color:#409eff;"></div>
</div>
<div v-else style="width:16px;height:16px;border-radius:8px;border:1px solid rgba(151, 151, 151, 0.29);margin-right: 8px;"></div>
{{itteems.multipleOptionName}}
</div>
</div>
<img v-if="itteems?.multipleOptionPictureAddress" :src="VUE_APP_FILE_PATH + itteems?.multipleOptionPictureAddress" alt="" srcset="" style="width: 140px;height:140px;margin-top:5px;">
<div v-else-if="isExistImg(values.multipleChoiceVoList, 2)" style="width: 140px;height:140px;margin-top:5px;"></div>
<!-- <a-radio :value="indexs" defaultValue>{{iitem.singleOptionName}}</a-radio> -->
</div>
</div>
<div style="margin-bottom:30px;"></div>
</div>
<!-- 问答题 -->
<div v-if="values.questionType==3" class="assessbox" style="margin-top: 30px">
<div class="box1">
<div class="asstype">评估类型</div>
<div class="typename">问答题</div>
</div>
<div class="box1" style="margin-left: 64px">
<div class="asstype">标题</div>
<div style="color: rgba(153, 153, 153, 1); font-size: 14px">
{{values?.assessmentQaTitle}}
</div>
</div>
<div
class="box1"
style="margin-left: 64px; margin-top: 20px; margin-bottom: 30px"
>
<div class="asstype">描述</div>
<div style="color: rgba(51, 51, 51, 1); font-size: 14px">
{{ values?.content }}
</div>
</div>
</div>
<!-- 评分题 -->
<div v-if="values.questionType==4" class="assessbox" style="margin-top: 30px;">
<div class="box1">
<div class="asstype">评估类型</div>
<div class="typename">评分题</div>
</div>
<div class="box1" style="margin-left: 64px">
<div class="asstype">标题</div>
<div style="color: rgba(153, 153, 153, 1); font-size: 14px">
{{values?.assessmentScTitle}}
</div>
</div>
<div class="lastbox">
<div class="sorcetext">非常不满意</div>
<div class="sorcebox" v-for="(iittem, index) in [1,2,3,4,5,6,7,8,9,10] " :key="index">
<div v-if="iittem >= values.assessmentMinScore && iittem <= values.assessmentMaxScore" :class="(iittem + 1 - values.assessmentMinScore) == values.selectAnswer ? 'numbox' : 'numbox1'">{{ iittem }}</div>
</div>
<div class="sorcetext">非常满意</div>
</div>
</div>
<div v-if="index==questionListArr.length-1" style="width:100%;height: 200px;"></div>
</div>
</div>
<div class="btnn">
<button class="btn2" @click="closeDrawer">取消</button>
<button class="btn2" @click="closeDrawer">确定</button>
</div>
</div>
</a-drawer>
</template>
<script>
import { reactive, toRefs, ref } from "vue";
import * as api from "@/api/indexTaskManage";
export default {
name: "ViewAssess",
props: {
Assessvisible: {
type: Boolean,
default: false,
},
evalName: {
type: String,
default: "",
},
basicdata: {
type: Object,
default: function () {
return {};
},
},
datasource: {
type: Object,
default: function () {
return {};
},
}
},
setup(props, ctx) {
const state = reactive({
value: "1",
questionListArr: [],
valueq1:"",
valueq2:""
});
const closeDrawer = () => {
ctx.emit("update:Assessvisible", false);
};
// 数组去空对象
function formateArr(arr1) {
console.log(arr1, arr1[0], arr1[0].length)
let newarr = []
for (let i = 0; i < arr1.length; i++) {
if (arr1[i].length !== 0) {
newarr.push(arr1[i])
}
}
return newarr
}
const afterVisibleChange = (bool) => {
console.log("state", bool);
if(bool){
console.log('我是传递过来的参数', props.datasource)
console.log('我是传递过来的参数2', props.basicdata)
api.QueryAssessmentDetail({
"assessmentSubmitId": props.datasource.assessmentSubmitId?props.datasource.assessmentSubmitId:props.datasource.assessmentResultIds,
"courseId": props.datasource.courseId,
"studentId": props.datasource.studentId
}).then(res=>{
console.log(res)
if(res.data.code==200){
let qarr = [res.data.data.essayQuestionVoList, res.data.data.multipleStemVoList,res.data.data.scoringQuestionVoList,res.data.data.singleStemVoList]
let allArr = []
for(let i=0;i<qarr.length;i++){
for(let j=0;j<qarr[i].length;j++){
allArr.push(qarr[i][j])
}
}
let newarr = formateArr(allArr).sort((a, b) => { return a.orderNumber - b.orderNumber})
state.questionListArr = newarr
console.log('我是经过排序后的题目',newarr)
}
}).catch(err=>{
console.log(err)
})
}
};
// 判断当前题目中是否有的选项有图片有的没有
const isExistImg = (data, index) => {
let exist = false;
data.forEach((i,n)=>{
console.log(i,n)
if(index==1){
if(i.singleOptionPictureAddress){
exist = true;
return exist;
}
}else{
if(i.multipleOptionPictureAddress){
exist = true;
return exist;
}
}
})
return exist;
}
const VUE_APP_FILE_PATH = ref(process.env.VUE_APP_FILE_PATH);
return {
...toRefs(state),
afterVisibleChange,
closeDrawer,
isExistImg,
VUE_APP_FILE_PATH
// change,
};
},
};
</script>
<style lang="scss">
.assessment {
.drawerMain {
min-width: 600px;
margin: 0px 32px 0px 32px;
overflow-x: auto;
display: flex;
flex-direction: column;
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
// background-color: red;
margin-bottom: 20px;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
// margin-left: 24px;
}
}
.main {
display: flex;
flex-direction: column;
overflow-y: auto;
//align-items: center;
.onerow {
display: flex;
margin-top: 10px;
margin-left: 10px;
.assname {
font-size: 16px;
color: #333333;
font-weight: 500;
}
.asscontent {
color: #999999;
font-size: 16px;
}
}
.assessbox {
border: 1px solid rgba(151, 151, 151, 0.29);
border-radius: 8px;
display: flex;
flex-direction: column;
.box1 {
display: flex;
margin-top: 20px;
margin-left: 36px;
align-items: center;
.asstype {
color: rgba(51, 51, 51, 1);
font-size: 14px;
font-weight: 500;
}
.typename {
width: 80px;
height: 32px;
//margin-left: 10px;
border-radius: 4px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex;
justify-content: center;
align-items: center;
color: rgba(64, 158, 255, 1);
font-size: 14px;
background: rgba(64, 158, 255, 0.1);
}
}
.lastbox {
display: flex;
align-items: center;
margin-left: 30px;
.sorcetext {
color: rgba(153, 153, 153, 1);
font-size: 14px;
}
.sorcebox {
display: flex;
.numbox {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
background: rgba(64, 158, 255, 1);
color: #ffffff;
font-size: 14px;
border-radius: 4px;
margin: 20px 5px;
cursor: pointer;
}
.numbox1 {
width: 32px;
height: 32px;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid rgba(151, 151, 151, 0.29);
color: rgba(0, 0, 0, 0.65);
margin: 20px 5px;
cursor: pointer;
border-radius: 4px;
}
}
}
}
}
.btnn {
height: 72px;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>