|
|
@@ -24,10 +24,10 @@
|
|
|
<div class="r_pub_button_retrun" @click="retrunCourse">返回</div>
|
|
|
</div>
|
|
|
<div class="step_box" ref="stepBox" v-loading="pdfLoading">
|
|
|
- <div class="test_title">
|
|
|
+ <div class="test_title" :style="!isDesktop?'justify-content: center;':''">
|
|
|
<div class="left">
|
|
|
<div class="title">{{ testJson.title }}</div>
|
|
|
- <div class="info">
|
|
|
+ <div class="info" v-if="isDesktop">
|
|
|
<div class="info_box" v-if="testJson.typeN">
|
|
|
<span>类型:</span>
|
|
|
<span>{{ testJson.typeN }}</span>
|
|
|
@@ -42,7 +42,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="right">
|
|
|
+ <div class="right" v-if="isDesktop">
|
|
|
<div class="data_box">
|
|
|
<span>提交数量</span>
|
|
|
<span><span class="big">{{ works.length }}</span>份</span>
|
|
|
@@ -61,13 +61,48 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="search_nav">
|
|
|
+ <div class="search_nav" v-if="isDesktop">
|
|
|
<div class="right">
|
|
|
<span :class="{ active: stype == 1 }" @click="checkDataType(1)">按题目查看</span>
|
|
|
<span :class="{ active: stype == 2 }" @click="checkDataType(2)">按人员查看</span>
|
|
|
<span :class="{ active: stype == 3 }" @click="checkDataType(3)" v-show="false">按数量查看</span>
|
|
|
</div>
|
|
|
- <div class="left">
|
|
|
+ <div class="left" v-if="isDesktop">
|
|
|
+ <div style="margin-right: 10px;position: relative;" v-if="stype == 2 || stype == 3">
|
|
|
+ <el-select v-model="TeachingValue" @change="searchCourse" placeholder="按教研室">
|
|
|
+ <el-option
|
|
|
+ label="全部"
|
|
|
+ value="">
|
|
|
+ </el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in TeachingOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div style="margin-right: 10px;position: relative;" v-if="stype == 2 || stype == 3">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="SubmitTime"
|
|
|
+ type="date"
|
|
|
+ @change="searchCourse"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="选择日期">
|
|
|
+ </el-date-picker>
|
|
|
+ <!-- <el-select v-model="SubmitTime" placeholder="按提交时间筛选">
|
|
|
+ <el-option
|
|
|
+ label="全部"
|
|
|
+ value="">
|
|
|
+ </el-option>
|
|
|
+ <el-option
|
|
|
+ v-for="item in SubmitTimeOptions"
|
|
|
+ :key="item.id"
|
|
|
+ :label="item.name"
|
|
|
+ :value="item.id">
|
|
|
+ </el-option>
|
|
|
+ </el-select> -->
|
|
|
+ </div>
|
|
|
<div style="margin-right: 10px;position: relative;" v-if="stype == 2 || stype == 3">
|
|
|
<el-input v-model="courseName" class="student_input" placeholder="请输入需要搜索的姓名"></el-input>
|
|
|
<span class="serach_icon" @click="searchCourse"></span>
|
|
|
@@ -83,7 +118,15 @@
|
|
|
<div class="btnA" v-if="stype == 3" @click="exportAllWord2">导出人员数据</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="title_content" v-if="stype == 1">
|
|
|
+ <div class="search_nav" style="display:flex;justify-content:space-evenly;border: none;" v-if="!isDesktop">
|
|
|
+ <div class="right">
|
|
|
+ <span :class="{ active2: stype == 1 }" @click="checkDataType(1)">按题目查看</span>
|
|
|
+ <span :class="{ active2: stype == 2 }" @click="checkDataType(2)">按人员查看</span>
|
|
|
+ <span :class="{ active2: stype == 3 }" @click="checkDataType(3)" v-show="false">按数量查看</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="title_content" v-if="stype == 1 && isDesktop" v-loading="isLoading">
|
|
|
<div class="title_box" v-if="!testArray.length"
|
|
|
style="display: flex;align-items: center;justify-content: center;height: 500px;">
|
|
|
暂无内容
|
|
|
@@ -96,6 +139,7 @@
|
|
|
</el-tooltip>
|
|
|
<span>{{ item.title }}</span>
|
|
|
<el-button v-if="item.type == 5 && item.array.length>0" class="title_downBtn" type="primary" size="small" @click.stop="downloadFileType5(item.array,item.title)">批量下载附件</el-button>
|
|
|
+ <div v-if="item.type==7" style="right:0;position: absolute;">平均分:{{ getAverageScore(index) }}</div>
|
|
|
</div>
|
|
|
<div class="detail" v-if="item.detail">{{ item.detail }}</div>
|
|
|
<div class="content1" v-if="item.type == 1">
|
|
|
@@ -240,7 +284,190 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="table_content" v-if="stype == 2">
|
|
|
+ <div class="title_content" v-if="stype == 1 && !isDesktop" v-loading="isLoading">
|
|
|
+ <div class="title_box" v-if="!testArray.length"
|
|
|
+ style="display: flex;align-items: center;justify-content: center;height: 500px;">
|
|
|
+ 暂无内容
|
|
|
+ </div>
|
|
|
+ <div class="title_box" v-for="(item, index) in testArray" :key="index">
|
|
|
+ <div class="title" style="font-size: 16px;display: flex;justify-content: space-between;align-items: center;">
|
|
|
+ <!-- <el-tooltip :content="selectType(item)" placement="top" effect="dark">
|
|
|
+ <span class="test_icon"
|
|
|
+ :class="{ test_icon_check: item.type == 1 && item.atype == 2, test_icon_checkO: item.type == 1 && item.atype == 1, test_icon_gap: item.type == 3, test_icon_file: item.type == 5, test_course_file: item.type == 6, test_eva_file: item.type == 7,test_icon_time: item.type == 8 }"></span>
|
|
|
+ </el-tooltip> -->
|
|
|
+ <div style="display: flex;">
|
|
|
+ <div class="topicTitCss">第{{ index+1 }}题:</div>
|
|
|
+ <el-tooltip :content="item.title" placement="top" effect="dark">
|
|
|
+ <div style="width: 100px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">{{ item.title }}</div>
|
|
|
+ </el-tooltip>
|
|
|
+
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div style="display: flex;">
|
|
|
+ <!-- <div v-if="item.type==7" style="right:0;position: absolute;">平均分:{{ getAverageScore(index) }}</div> -->
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);display: flex;align-items: center;">[{{ selectType(item) }}]</div>
|
|
|
+ <!-- <el-button style="padding: 5px;" v-if="item.type == 5 && item.array.length>0" class="title_downBtn" type="primary" size="small" @click.stop="downloadFileType5(item.array,item.title)">批量下载附件</el-button> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="detail" v-if="item.detail">{{ item.detail }}</div>
|
|
|
+ <div class="content1" style="width:100%;display: block;" v-if="item.type == 1">
|
|
|
+ <div class="left" style="width:100%" v-if="!item.cut">
|
|
|
+ <div class="isDesktopTitle">
|
|
|
+ <div>选项</div>
|
|
|
+ <div>小计</div>
|
|
|
+ <div>比例</div>
|
|
|
+ </div>
|
|
|
+ <div class="isDesktopTitle" v-for="(data, index2) in item.array" :key="index + '-' + index2">
|
|
|
+ <!-- <span> -->
|
|
|
+ <el-tooltip :content="data.name" placement="top" effect="dark">
|
|
|
+ <!-- content to trigger tooltip here -->
|
|
|
+ <div>{{ data.name }}</div>
|
|
|
+ </el-tooltip>
|
|
|
+ <!-- </span> -->
|
|
|
+ <div>{{ data.count }}</div>
|
|
|
+ <div>
|
|
|
+ {{ data.count ? parseFloat(((data.count / item.count) * 100).toFixed(2)) : 0 }}
|
|
|
+ <!-- <el-progress style="display: flex;align-items: center;" :stroke-width="12" color="#3681fc"
|
|
|
+ :percentage="data.count ? parseFloat(((data.count / item.count) * 100).toFixed(2)) : 0"></el-progress> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="right isDesktopRight" v-if="item.cut">
|
|
|
+ <checkPie :dataJ="item.array"></checkPie>
|
|
|
+ </div>
|
|
|
+ <div class="cutBtnBlockCss">
|
|
|
+ <div class="cutBtnCss" @click="item.cut=!item.cut">{{ item.cut?'查看详情':'查看视图' }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content2" style="width:100%;display: block;" v-if="item.type == 3">
|
|
|
+ <div class="left" style="width:100%" v-if="!item.cut">
|
|
|
+ <div class="title">
|
|
|
+ <span>序号</span>
|
|
|
+ <span>词频</span>
|
|
|
+ <span>答案文本</span>
|
|
|
+ </div>
|
|
|
+ <div class="data" v-for="(data, index2) in item.array" :key="index + '-' + index2">
|
|
|
+ <span>{{ index2 + 1 }}</span>
|
|
|
+ <span>{{ data.count }}次</span>
|
|
|
+ <el-tooltip :content="data.name" placement="top" effect="dark">
|
|
|
+ <!-- content to trigger tooltip here -->
|
|
|
+ <span>{{ data.name }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="right isDesktopRight" v-if="item.cut">
|
|
|
+ <wordcloud :data="item.array" nameKey="name" valueKey="count" :showTooltip="false"
|
|
|
+ :wordClick="wordClickHandler">
|
|
|
+ </wordcloud>
|
|
|
+ </div>
|
|
|
+ <div class="cutBtnBlockCss">
|
|
|
+ <div class="cutBtnCss" @click="item.cut=!item.cut">{{ item.cut?'查看详情':'查看视图' }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content3" v-if="item.type == 5">
|
|
|
+ <div class="file" v-for="(file, index2) in item.array" :key="index + '-' + index2"
|
|
|
+ @click.stop="checkFile(file)">
|
|
|
+ <img class="download" src="../../../../assets/icon/fileIcon/download.png"
|
|
|
+ @click.stop="downloadFile(file)" :style="{ right: '10px' }" />
|
|
|
+ <img class="img" :src="wordIcon" alt="" v-if="file.type == 1" />
|
|
|
+ <img class="img" :src="videoIcon" alt="" v-if="file.type == 2" />
|
|
|
+ <img class="img" :src="file.url" alt="" v-if="file.type == 3" />
|
|
|
+ <img class="img" :src="wordIcon" alt="" v-if="file.type == 4" />
|
|
|
+ <img class="img" :src="fileIcon" alt="" v-if="file.type == 5" />
|
|
|
+ <div class="name">
|
|
|
+ <el-tooltip :content="file.name" placement="top" effect="dark">
|
|
|
+ <span>{{ file.name }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content4" v-if="item.type == 6">
|
|
|
+ <div class="out_box" v-for="(item, index) in item.courseArray" :key="index + '-' + index2">
|
|
|
+ <div class="tup">
|
|
|
+ <img :src="item.cover != null && item.cover != ''
|
|
|
+ ? JSON.parse(item.cover).length > 0
|
|
|
+ ? JSON.parse(item.cover)[0].url
|
|
|
+ : mr
|
|
|
+ : mr
|
|
|
+ " alt />
|
|
|
+ <div class="bottom_box">
|
|
|
+ <div>
|
|
|
+ <el-tooltip :content="item.title" popper-class="text_tooltip" placement="top" effect="dark">
|
|
|
+ <span>{{ item.title }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ <div class="kc_t">
|
|
|
+ <span>{{ item.username }}</span>
|
|
|
+ <span>{{ item.state == 1 ? '阶段模式' : item.state == 2 ? '任务模式' : '极简模式' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="kc_time">
|
|
|
+ <span style="color: #717C8D">创建日期:</span>{{ item.time }}
|
|
|
+ </div>
|
|
|
+ <div class="kc_time">
|
|
|
+ <span style="color: #717C8D">修改日期:</span>{{ item.update_at }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <!-- <div class="courses" v-for="(courses, index2) in item.array" :key="index + '-' + index2">
|
|
|
+ {{ courses }}
|
|
|
+ </div> -->
|
|
|
+ </div>
|
|
|
+ <div class="content1" style="width:100%;display: block;" v-if="item.type == 7">
|
|
|
+ <div class="left" style="width:100%" v-if="!item.cut">
|
|
|
+ <div class="isDesktopTitle">
|
|
|
+ <div>评分</div>
|
|
|
+ <div>小计</div>
|
|
|
+ <div style="width: 120px;">比例</div>
|
|
|
+ </div>
|
|
|
+ <div class="isDesktopTitle" v-for="(data, index2) in item.array" :key="index + '-' + index2">
|
|
|
+ <!-- <span> -->
|
|
|
+ <div>{{ data.name }}</div>
|
|
|
+ <!-- </span> -->
|
|
|
+ <div>{{ data.count }}</div>
|
|
|
+ <div style="width: 120px;">
|
|
|
+ {{ data.count ? parseFloat(((data.count / item.count) * 100).toFixed(2)) : 0 }}
|
|
|
+ <!-- <el-progress style="display: flex;align-items: center;" :stroke-width="12" color="#3681fc"
|
|
|
+ :percentage="data.count ? parseFloat(((data.count / item.count) * 100).toFixed(2)) : 0"></el-progress> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="right isDesktopRight" v-if="item.cut">
|
|
|
+ <checkPie :dataJ="item.array"></checkPie>
|
|
|
+ </div>
|
|
|
+ <div class="cutBtnBlockCss">
|
|
|
+ <div class="cutBtnCss" @click="item.cut=!item.cut">{{ item.cut?'查看详情':'查看视图' }}</div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div class="content2" style="width:100%;display: block;" v-if="item.type == 8">
|
|
|
+ <div class="left" style="width:100%" v-if="!item.cut">
|
|
|
+ <div class="title">
|
|
|
+ <span>序号</span>
|
|
|
+ <span>词频</span>
|
|
|
+ <span>日期</span>
|
|
|
+ </div>
|
|
|
+ <div class="data" v-for="(data, index2) in item.array" :key="index + '-' + index2">
|
|
|
+ <span>{{ index2 + 1 }}</span>
|
|
|
+ <span>{{ data.count }}次</span>
|
|
|
+ <el-tooltip :content="data.name" placement="top" effect="dark">
|
|
|
+ <!-- content to trigger tooltip here -->
|
|
|
+ <span>{{ data.name }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="right isDesktopRight" v-if="item.cut">
|
|
|
+ <wordcloud :data="item.array" nameKey="name" valueKey="count" :showTooltip="false"
|
|
|
+ :wordClick="wordClickHandler">
|
|
|
+ </wordcloud>
|
|
|
+ </div>
|
|
|
+ <div class="cutBtnBlockCss">
|
|
|
+ <div class="cutBtnCss" @click="item.cut=!item.cut">{{ item.cut?'查看详情':'查看视图' }}</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="table_content" v-if="stype == 2 && isDesktop">
|
|
|
<el-table class="el-table" ref="table" :data="worksArray" border :fit="true" :key="2" v-loading="isLoading"
|
|
|
style="width: 100%" :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
|
|
|
@filter-change="handleFilterChange">
|
|
|
@@ -295,7 +522,7 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="操作" width="300px" fixed="right">
|
|
|
+ <el-table-column label="操作" width="300px" fixed="right" v-if="isN!=1">
|
|
|
|
|
|
<template slot-scope="scope">
|
|
|
<el-button @click="getTest(scope.row)" type="primary" size="small">查看</el-button>
|
|
|
@@ -305,6 +532,205 @@
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
</div>
|
|
|
+ <div class="table_content" v-if="stype == 2 && !isDesktop">
|
|
|
+
|
|
|
+ <div v-for="(i,index) in worksArray" :key="i.id" class="isDesktopTable_content">
|
|
|
+ <div class="isDTitle CutCss">
|
|
|
+ <div style="font-size: 16px;font-weight: 600;">{{ i.name }}</div>
|
|
|
+ <div :style="'font-size: 14px',i.cut?'color:rgba(54, 129, 252, 1)':'color: rgba(0, 0, 0, 0.6);'">{{ i.time }}</div>
|
|
|
+ <div @click="i.cut=!i.cut">
|
|
|
+ <img v-if="!i.cut" src="../../../../assets/icon/fileIcon/downImg.png" alt="">
|
|
|
+ <img v-else src="../../../../assets/icon/fileIcon/upImg.png" alt="">
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="i.cut">
|
|
|
+ <div class="isDBri">
|
|
|
+ <div>序号:{{ i.time }}</div>
|
|
|
+ <div>提交时间:{{ i.time }}</div>
|
|
|
+ <div>评课人:</div>
|
|
|
+ </div>
|
|
|
+ <div style="height: 1px;background-color: #717C8D;width: 100%;margin-bottom: 10px;"></div>
|
|
|
+ <div>
|
|
|
+ <div v-for="(k,kin) in chapters" :key="k.id" class="isCTiBlc">
|
|
|
+ <div v-if="k.type == 1">
|
|
|
+ <div class="isDTitle2">
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <span class="topicTitCss">第{{kin+1}}题:</span>
|
|
|
+ <div class="isDTitle2JsonTit">
|
|
|
+ {{ k.json.title }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);">[{{ selectType2(k.type,k.json.type) }}]</div>
|
|
|
+ </div>
|
|
|
+ <div class="IsDAnswer">
|
|
|
+ <div v-for="(r, index2) in i.array[kin].json.answer2"
|
|
|
+ :key="index + '-' + index2">
|
|
|
+ {{ i.array[kin].json.array[r].option }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="k.type == 3 || k.type == 8">
|
|
|
+ <div class="isDTitle2">
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <span class="topicTitCss">第{{kin+1}}题:</span>
|
|
|
+ <div class="isDTitle2JsonTit">
|
|
|
+ {{ k.json.title }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);">[{{ selectType2(k.type,k.json.type) }}]</div>
|
|
|
+ </div>
|
|
|
+ <div class="IsDAnswer">
|
|
|
+ {{ i.array[kin].json.answer2 }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="k.type == 5">
|
|
|
+ <div class="isDTitle2">
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <span class="topicTitCss">第{{kin+1}}题:</span>
|
|
|
+ <div class="isDTitle2JsonTit">
|
|
|
+ {{ k.json.title }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);">[{{ selectType2(k.type,k.json.type) }}]</div>
|
|
|
+ </div>
|
|
|
+ <div class="IsDAnswer">
|
|
|
+ <div class="IsDFile" v-for="(file, index2) in i.array[kin].json.file"
|
|
|
+ :key="index + '-' + index2" @click.stop="checkFile(file)">
|
|
|
+ <img class="IsDownload" src="../../../../assets/icon/fileIcon/download.png"
|
|
|
+ @click.stop="downloadFile(file)" :style="{ right: '10px' }" />
|
|
|
+ <img class="IsDImg" :src="wordIcon" alt="" v-if="file.type == 1" />
|
|
|
+ <img class="IsDImg" :src="videoIcon" alt="" v-if="file.type == 2" />
|
|
|
+ <img class="IsDImg" :src="file.url" alt="" v-if="file.type == 3" />
|
|
|
+ <img class="IsDImg" :src="wordIcon" alt="" v-if="file.type == 4" />
|
|
|
+ <img class="IsDImg" :src="fileIcon" alt="" v-if="file.type == 5" />
|
|
|
+ <div class="name" style="height: 30px;background-color: #ccc;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;">
|
|
|
+ <!-- <el-tooltip :content="file.name" placement="top" effect="dark"> -->
|
|
|
+ {{ file.name }}
|
|
|
+ <!-- </el-tooltip> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="k.type.type == 6">
|
|
|
+ <div class="isDTitle2">
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <span class="topicTitCss">第{{kin+1}}题:</span>
|
|
|
+ <div class="isDTitle2JsonTit">
|
|
|
+ {{ k.json.title }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);">[{{ selectType2(k.type,k.json.type) }}]</div>
|
|
|
+ </div>
|
|
|
+ <div class="IsDAnswer">
|
|
|
+ {{ i.array[kin].json.answer2 }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="k.type == 7">
|
|
|
+ <div class="isDTitle2">
|
|
|
+ <div style="display: flex;justify-content: space-between;">
|
|
|
+ <div style="display: flex;">
|
|
|
+ <span class="topicTitCss">第{{kin+1}}题:</span>
|
|
|
+ <div class="isDTitle2JsonTit">
|
|
|
+ {{ k.json.title }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);">[{{ selectType2(k.type,k.json.type) }}]</div>
|
|
|
+ </div>
|
|
|
+ <div class="IsDAnswer">
|
|
|
+ {{ getScore(i.array[index].json) }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div style="width: 100%;display: flex;justify-content: end;">
|
|
|
+ <div @click="i.cut=!i.cut" style="display: flex;flex-direction: column;align-items: center">
|
|
|
+ <img src="../../../../assets/icon/fileIcon/retractImg.png" alt="">
|
|
|
+ <div style="color: rgba(0, 0, 0, 0.4);font-size: 16px;">收起</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div style="height: 1px;background-color: #717C8D;width: 100%;margin-bottom: 10px;"></div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <!-- <el-table class="el-table" ref="table" :data="worksArray" border :fit="true" :key="2" v-loading="isLoading"
|
|
|
+ style="width: 100%" :header-cell-style="{ background: '#f1f1f1', fontSize: '17px' }"
|
|
|
+ @filter-change="handleFilterChange">
|
|
|
+ <el-table-column fixed label="序号" width="80px" align="left">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ {{ scope.$index + 1 }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column fixed prop="name" label="提交人" width="120px" align="left">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="time" label="提交时间" width="170px" align="left">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span :style="`${testJson.overtime&&new Date(testJson.overtime)<new Date(scope.row.time)?'color:#d12920':''}`">{{ scope.row.time }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column v-for="(item, index) in chapters" :key="index" :label="item.json.title"
|
|
|
+ :min-width="item.type == 5 ? 200 : 150" align="left" :filters="item.type == 1 ? item.nameFilters : item.type == 6? item.nameFilters : null"
|
|
|
+ :filter-method="item.type == 1 ? (value, row) => { return filterName(value, row, index) } : item.type == 6?(value, row) => { return filterCourse(value, row, index)}:null"
|
|
|
+ :filter-placement="item.type == 1 || item.type ==6 ? filterPlacement : null">
|
|
|
+
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div v-if="scope.row.array[index].type == 1" style="display: flex; flex-wrap: wrap;">
|
|
|
+ <span class="answer_type" v-for="(answer2, index2) in scope.row.array[index].json.answer2"
|
|
|
+ :key="index + '-' + index2">{{ scope.row.array[index].json.array[answer2].option }}</span>
|
|
|
+ </div>
|
|
|
+ <div v-if="scope.row.array[index].type == 3 || scope.row.array[index].type == 8" style="display: flex; flex-wrap: wrap;">
|
|
|
+ {{ scope.row.array[index].json.answer2 }}
|
|
|
+ </div>
|
|
|
+ <div v-if="scope.row.array[index].type == 5" style="display: flex; flex-wrap: wrap;"
|
|
|
+ class="table_file">
|
|
|
+ <div class="file" v-for="(file, index2) in scope.row.array[index].json.file"
|
|
|
+ :key="index + '-' + index2" @click.stop="checkFile(file)">
|
|
|
+ <img class="download" src="../../../../assets/icon/fileIcon/download.png"
|
|
|
+ @click.stop="downloadFile(file)" :style="{ right: '10px' }" />
|
|
|
+ <img class="img" :src="wordIcon" alt="" v-if="file.type == 1" />
|
|
|
+ <img class="img" :src="videoIcon" alt="" v-if="file.type == 2" />
|
|
|
+ <img class="img" :src="file.url" alt="" v-if="file.type == 3" />
|
|
|
+ <img class="img" :src="wordIcon" alt="" v-if="file.type == 4" />
|
|
|
+ <img class="img" :src="fileIcon" alt="" v-if="file.type == 5" />
|
|
|
+ <div class="name">
|
|
|
+ <el-tooltip :content="file.name" placement="top" effect="dark">
|
|
|
+ <span>{{ file.name }}</span>
|
|
|
+ </el-tooltip>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="scope.row.array[index].type == 6" style="display: flex; flex-wrap: wrap;">
|
|
|
+ {{ scope.row.array[index].json.answer2}}
|
|
|
+ </div>
|
|
|
+ <div v-if="scope.row.array[index].type == 7" style="display: flex; flex-wrap: wrap;">
|
|
|
+ {{ getScore(scope.row.array[index].json) }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="300px" fixed="right" v-if="isN!=1">
|
|
|
+
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button @click="getTest(scope.row)" type="primary" size="small">查看</el-button>
|
|
|
+ <el-button @click="setWordHtml(scope.row)" type="primary" size="small">导出答题信息</el-button>
|
|
|
+ <el-button @click="deleteTest(scope.row.id)" type="primary" size="small">删除</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table> -->
|
|
|
+ </div>
|
|
|
<div class="table_content" v-if="stype == 3">
|
|
|
<div class="student_table">
|
|
|
<el-table ref="table" :data="tableData" border :fit="true" v-loading="isLoading" style="width: 100%"
|
|
|
@@ -319,9 +745,9 @@
|
|
|
<div>{{ scope.row.type == 3 ? '是' : '否' }}</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="操作" width="300px">
|
|
|
+ <el-table-column label="操作" width="300px" v-if="isDesktop">
|
|
|
|
|
|
- <template slot-scope="scope">
|
|
|
+ <template slot-scope="scope" >
|
|
|
<el-button @click="getTest(scope.row)" type="primary" size="small">查看</el-button>
|
|
|
<el-button @click="setWordHtml2(scope.row)" type="primary" size="small">导出答题信息</el-button>
|
|
|
<el-button @click="deleteTest(scope.row.id)" type="primary" size="small">删除</el-button>
|
|
|
@@ -338,7 +764,7 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <share-box :testJson="testJson" :dialogVisibleShare.sync="dialogVisibleShare"></share-box>
|
|
|
+ <share-box :testJson="testJson" :TeachingValue="TeachingValue" :TeachName="TeachNameCpt" :dialogVisibleShare.sync="dialogVisibleShare"></share-box>
|
|
|
<wpdf :dialogVisiblePdf.sync="dialogVisiblePdf" :url="wurl"></wpdf>
|
|
|
<wVideo :dialogVisibleVideo.sync="dialogVisibleVideo" :url="wurl"></wVideo>
|
|
|
<wOffice :dialogVisibleOffice.sync="dialogVisibleOffice" :url="wurl"></wOffice>
|
|
|
@@ -420,12 +846,18 @@ export default {
|
|
|
role: this.$route.query.role,
|
|
|
cid: this.$route.query.cid,
|
|
|
isN: this.$route.query.isN,
|
|
|
+ screenWidth: window.innerWidth,
|
|
|
+ isDesktop: false,
|
|
|
title: "",
|
|
|
testType: [],
|
|
|
see: false,
|
|
|
cJson: [],
|
|
|
loading: false,
|
|
|
look: "",
|
|
|
+ TeachingOptions:[],
|
|
|
+ TeachingValue :'',
|
|
|
+ SubmitTimeOptions: [],
|
|
|
+ SubmitTime: '',
|
|
|
tableHeight: 500,
|
|
|
isLoading: false,
|
|
|
pageSize: 10,
|
|
|
@@ -463,6 +895,10 @@ export default {
|
|
|
},
|
|
|
watch: {},
|
|
|
computed: {
|
|
|
+ TeachNameCpt: function () {
|
|
|
+ // `this` 指向 vm 实例
|
|
|
+ return this.TeachingOptions.filter(i => {return i.id == this.TeachingValue})
|
|
|
+ },
|
|
|
// vcWords() {
|
|
|
// return function (array) {
|
|
|
// let _array = [];
|
|
|
@@ -507,9 +943,57 @@ export default {
|
|
|
return '日期'
|
|
|
}
|
|
|
};
|
|
|
- }
|
|
|
+ },
|
|
|
+ selectType2() {
|
|
|
+ return function (val1,val2) {
|
|
|
+ if (val1 == 1 && val2 == 2) {
|
|
|
+ return '多选题'
|
|
|
+ } else if (val1 == 1 && val2 == 1) {
|
|
|
+ return '单选题'
|
|
|
+ } else if (val1 == 3) {
|
|
|
+ return '问答题'
|
|
|
+ } else if (val1 == 5) {
|
|
|
+ return '附件'
|
|
|
+ } else if (val1 == 6) {
|
|
|
+ return '课程'
|
|
|
+ } else if (val1 == 7) {
|
|
|
+ return '评分'
|
|
|
+ } else if (val1 == 8) {
|
|
|
+ return '日期'
|
|
|
+ }
|
|
|
+ };
|
|
|
+ },
|
|
|
+ // 获取评分的平均分
|
|
|
+ getAverageScore(){
|
|
|
+ return (_index)=>{
|
|
|
+ let _result = 0;
|
|
|
+ let _sum = 0;
|
|
|
+ this.worksArray.forEach(i1=>{
|
|
|
+ _result+=i1.array[_index].json.answer2
|
|
|
+ _sum+=1;
|
|
|
+ })
|
|
|
+ _result = _sum ? (_result/_sum).toFixed(2) : 0
|
|
|
+ return _result ? _result : 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
},
|
|
|
methods: {
|
|
|
+ //获取教研室列表
|
|
|
+ getClass2() {
|
|
|
+ let params = {
|
|
|
+ oid: this.oid,
|
|
|
+ };
|
|
|
+ this.ajax
|
|
|
+ .get(this.$store.state.api + "selectTeacherOfficeBySchool", params)
|
|
|
+ .then((res) => {
|
|
|
+ this.TeachingOptions = res.data[0];
|
|
|
+ console.log('this.TeachingOptions',this.TeachingOptions);
|
|
|
+ })
|
|
|
+ .catch((err) => {
|
|
|
+ this.isLoading = false;
|
|
|
+ console.error(err);
|
|
|
+ });
|
|
|
+ },
|
|
|
filterName(value, row, index) {
|
|
|
let name = []
|
|
|
for (var i = 0; i < row.array[index].json.answer2.length; i++) {
|
|
|
@@ -618,13 +1102,28 @@ export default {
|
|
|
this.isLoading = true;
|
|
|
let params = {
|
|
|
cid: this.cid,
|
|
|
- cn: this.courseName
|
|
|
+ cn: this.courseName,
|
|
|
+ tim : !this.SubmitTime? '' : this.SubmitTime,
|
|
|
+ tea: this.TeachingValue
|
|
|
};
|
|
|
this.ajax
|
|
|
- .get(this.$store.state.api + "getTestWorksNoPage", params)
|
|
|
+ .get(this.$store.state.api + "getTestWorksNoPageCopy", params)
|
|
|
.then(async (res) => {
|
|
|
- this.isLoading = false;
|
|
|
this.testJson = res.data[0][0]
|
|
|
+ console.log('this.testJson',JSON.parse(JSON.stringify(this.testJson)));
|
|
|
+ if (this.testJson.juriP) {
|
|
|
+ let ajuri2 = this.testJson.juri2.split (',');
|
|
|
+ let ajurip = this.testJson.juriP.split (',');
|
|
|
+ let JData = ajuri2.reverse()
|
|
|
+ this.TeachingOptions = JData.map((key, index) => ({
|
|
|
+ id : key,
|
|
|
+ name: ajurip[index]
|
|
|
+ }));
|
|
|
+ }else{
|
|
|
+ this.getClass2()
|
|
|
+ }
|
|
|
+ // console.log('dddd',this.TeachingOptions);
|
|
|
+
|
|
|
this.works = res.data[1]
|
|
|
this.iscount = res.data[2][0].count
|
|
|
this.pcount = res.data[3][0].count
|
|
|
@@ -642,7 +1141,7 @@ export default {
|
|
|
let _json2 = _json[ja].json
|
|
|
if (_json[ja].type == 6) {
|
|
|
let _cjson = await this.getCourse(_json2.answer2)
|
|
|
- _json2.answer2 = _cjson.title
|
|
|
+ _json2.answer2 = _cjson ? _cjson.title : ''
|
|
|
}
|
|
|
}
|
|
|
array.push({
|
|
|
@@ -652,6 +1151,7 @@ export default {
|
|
|
name: this.works[i].username ? this.works[i].username : '匿名',
|
|
|
time: this.works[i].time,
|
|
|
array: _json,
|
|
|
+ cut:0,
|
|
|
courseJson: JSON.parse(this.works[i].courseJson),
|
|
|
})
|
|
|
}
|
|
|
@@ -661,6 +1161,7 @@ export default {
|
|
|
let el = this.chapters[i]
|
|
|
let topic = {
|
|
|
type: el.type,
|
|
|
+ cut: 0,
|
|
|
title: el.json ? el.json.title : '',
|
|
|
detail: el.json ? el.json.detail : '',
|
|
|
atype: el.json ? el.json.type : '',
|
|
|
@@ -688,7 +1189,7 @@ export default {
|
|
|
topic.array = _answer
|
|
|
topic.courseArray = [];
|
|
|
let params = {
|
|
|
- cid:topic.array.join(",")
|
|
|
+ cid:topic.array ? topic.array.join(",") : ''
|
|
|
}
|
|
|
|
|
|
let data = await this.ajax.get(this.$store.state.api + 'getCourseInfoTestAll',params);
|
|
|
@@ -758,11 +1259,13 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- console.log(topic)
|
|
|
+ console.log('topictopictopictopic',topic)
|
|
|
testArray.push(topic)
|
|
|
}
|
|
|
this.testArray = testArray
|
|
|
this.worksArray = array
|
|
|
+ this.isLoading = false;
|
|
|
+
|
|
|
})
|
|
|
.catch((err) => {
|
|
|
console.error(err);
|
|
|
@@ -1246,7 +1749,7 @@ export default {
|
|
|
}
|
|
|
} else if (item.type == 6 && item.json.answer2) {
|
|
|
let _cjson = await this.getCourse(item.json.answer2)
|
|
|
- let _option = `<div style='margin:10px 0 0 40px;'>打分课程:${_cjson.title}</div>`
|
|
|
+ let _option = `<div style='margin:10px 0 0 40px;'>打分课程:${ _cjson ? _cjson.title : ''}</div>`
|
|
|
_test += _option
|
|
|
} else if (item.type == 7 && item.json.answer2 ) {
|
|
|
let _score = this.getScore2(item.json)
|
|
|
@@ -1444,6 +1947,10 @@ export default {
|
|
|
array.push(i)
|
|
|
}
|
|
|
return item.answer2 ? array[item.answer2] : ''
|
|
|
+ },
|
|
|
+ checkScreenSize() {
|
|
|
+ this.screenWidth = window.innerWidth;
|
|
|
+ this.isDesktop = this.screenWidth > 750; // 你可以根据需要调整这个阈值
|
|
|
},
|
|
|
downloadFileType5(fileData,title="附件"){
|
|
|
let data = fileData;
|
|
|
@@ -1511,13 +2018,17 @@ export default {
|
|
|
},
|
|
|
},
|
|
|
beforeDestroy() {
|
|
|
- document.getElementsByTagName('html')[0].style.overflow = ''
|
|
|
+ document.getElementsByTagName('html')[0].style.overflow = '';
|
|
|
+ window.removeEventListener("resize", this.checkScreenSize);
|
|
|
},
|
|
|
mounted() {
|
|
|
+ this.checkScreenSize();
|
|
|
+ window.addEventListener("resize", this.checkScreenSize);
|
|
|
document.getElementsByTagName('html')[0].scrollTop = 0
|
|
|
document.getElementsByTagName('html')[0].style.overflow = 'hidden'
|
|
|
this.$nextTick(function () {
|
|
|
this.getData();
|
|
|
+ // this.getClass2()
|
|
|
this.changeHeight()
|
|
|
});
|
|
|
},
|
|
|
@@ -1529,7 +2040,68 @@ export default {
|
|
|
height: 100% !important;
|
|
|
/* margin: 0 20px 0 20px; */
|
|
|
}
|
|
|
+.cutBtnBlockCss{
|
|
|
+ width: 100%;display: flex;justify-content: end;
|
|
|
+}
|
|
|
+.cutBtnCss{
|
|
|
+ width: 68px;
|
|
|
+ height: 27px;
|
|
|
+ font-size: 14px;
|
|
|
+ border-radius: 5px;
|
|
|
+ display: flex;
|
|
|
+ color: rgba(54, 129, 252, 1);
|
|
|
+ justify-content: center;
|
|
|
+ align-items: center;
|
|
|
+ margin-top: 10px;
|
|
|
+ border: 1px rgba(54, 129, 252, 1) solid;
|
|
|
+}
|
|
|
+.isDesktopRight{
|
|
|
+ width:100% !important;
|
|
|
+ margin:0 !important;
|
|
|
+ height: 300px !important;
|
|
|
+ border: none !important;
|
|
|
+}
|
|
|
+.isDTitle2JsonTit{
|
|
|
+ width: 130px;
|
|
|
+ color: rgba(0, 0, 0, 0.9);
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: nowrap;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+}
|
|
|
+.IsDAnswer{
|
|
|
+ margin: 20px 0 30px;color: rgba(0, 0, 0, 0.6);
|
|
|
+}
|
|
|
|
|
|
+.CutCss{
|
|
|
+ height: 60px;
|
|
|
+ line-height: 60px;
|
|
|
+}
|
|
|
+.topicTitCss{
|
|
|
+ color: rgba(0, 0, 0, 0.9);
|
|
|
+ font-weight: 600;
|
|
|
+ margin-right: 5px;
|
|
|
+}
|
|
|
+.IsDFile{
|
|
|
+ width: 150px;
|
|
|
+ height: 120px;
|
|
|
+ border-radius: 10px;
|
|
|
+ position: relative;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ overflow: hidden;
|
|
|
+ margin-bottom: 5px;
|
|
|
+}
|
|
|
+.IsDownload{
|
|
|
+ position: absolute;
|
|
|
+ width: 30px;
|
|
|
+ top: 5px;
|
|
|
+ right: 5px;
|
|
|
+}
|
|
|
+.IsDImg{
|
|
|
+ width: 100%;
|
|
|
+ height: 70px;
|
|
|
+ flex: 1;
|
|
|
+}
|
|
|
.pb_content_body {
|
|
|
width: 100% !important;
|
|
|
height: 100%;
|
|
|
@@ -1705,7 +2277,11 @@ export default {
|
|
|
cursor: pointer;
|
|
|
position: relative;
|
|
|
}
|
|
|
-
|
|
|
+.search_nav>.isDesktopRightCut{
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ width: 60%;
|
|
|
+}
|
|
|
.search_nav>.right>span+span {
|
|
|
margin-left: 35px;
|
|
|
}
|
|
|
@@ -1732,6 +2308,21 @@ export default {
|
|
|
margin-left: auto;
|
|
|
}
|
|
|
|
|
|
+.search_nav>.right>span.active2 {
|
|
|
+ color: #3681FC;
|
|
|
+ font-weight: 600;
|
|
|
+}
|
|
|
+.search_nav>.right>span.active2::before {
|
|
|
+ content: "";
|
|
|
+ position: absolute;
|
|
|
+ bottom: -10px;
|
|
|
+ width: 100%;
|
|
|
+ height: 3px;
|
|
|
+ background: #3681fc;
|
|
|
+ left: 50%;
|
|
|
+ transform: translateX(-50%);
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
.student_input>>>.el-input__inner {
|
|
|
height: 40px;
|
|
|
@@ -1834,6 +2425,27 @@ export default {
|
|
|
.title_content>.title_box>.content1>.left>.data>span:nth-child(3) {
|
|
|
width: 320px;
|
|
|
}
|
|
|
+.isDesktopTitle{
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-around;
|
|
|
+}
|
|
|
+.isDesktopTitle >div {
|
|
|
+ width: 60px;
|
|
|
+ height: 30px;
|
|
|
+ line-height: 30px;
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: nowrap;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+}
|
|
|
+/* .isDesktopTitle:nth-child(1){
|
|
|
+ width: 60px;
|
|
|
+}
|
|
|
+.isDesktopTitle:nth-child(2){
|
|
|
+ width: 60px;
|
|
|
+}
|
|
|
+.isDesktopTitle:nth-child(3){
|
|
|
+ flex: 1;
|
|
|
+} */
|
|
|
|
|
|
.title_content>.title_box>.content1>.left>.title {
|
|
|
font-weight: 700;
|
|
|
@@ -1986,6 +2598,22 @@ export default {
|
|
|
.table_content>>>.el-table td {
|
|
|
padding: 5px 0;
|
|
|
}
|
|
|
+.isDesktopTable_content{
|
|
|
+ width: 100%;
|
|
|
+}
|
|
|
+.isDTitle{
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
+.isDBri{
|
|
|
+ display: flex;
|
|
|
+ padding: 15px 0;
|
|
|
+ font-size: 14px;
|
|
|
+ color: rgba(0, 0, 0, 0.4);
|
|
|
+ flex-direction: column;
|
|
|
+ height: 80px;
|
|
|
+ justify-content: space-between;
|
|
|
+}
|
|
|
|
|
|
.answer_type {
|
|
|
background: #F0F2F5;
|