This commit is contained in:
@fawn-nine
2024-09-13 17:21:38 +08:00
parent 2f62b2f011
commit d3097edd2c
11 changed files with 3107 additions and 297 deletions

View File

@@ -3,6 +3,7 @@
<public-module></public-module>
<z-nav-bar title="班级详情"></z-nav-bar>
<!-- <text class="small_btn retake border_radius_10" @click="goTest()">再考一次</text> -->
<text class="" @click="showSubmit">提交证件资料</text>
<view class="mainContent" v-if="thisClass.id">
<view :class="['classStatus',
thisClass.state == '0' ? 'daikai' :'',
@@ -40,119 +41,126 @@
<view><text class="ciyao">管理成员</text><text class="mainTxt" @click="seeManager">点击查看</text></view>
</view>
<!-- v-if="thisClass.state == '2'" -->
<view class="pingfenBox testBox" v-if="thisClass.state == '2'">
<view class="scoreTitle">
<view class="titles flex_box">
<text>总成绩</text>
<!-- <uni-icons type="help" size="18" color="#fff"
<template v-if="isHave">
<view class="pingfenBox testBox" v-if="thisClass.state == '2'">
<view class="scoreTitle">
<view class="titles flex_box">
<text>总成绩</text>
<!-- <uni-icons type="help" size="18" color="#fff"
@click="showTestTips = true"></uni-icons> -->
</view>
</view>
</view>
<!-- v-if="thisClass.state == '3'" -->
<view class="optionsBox">
<!-- v-show="thisClass.state == '2'" -->
<view class="chengji" style="text-align: center;">
<view style="margin-top: 20rpx;">总成绩
<text class="scoreNumber greenScore">{{performanceScore.userScore}}</text>
<view class="">
<!-- v-if="thisClass.state == '3'" -->
<view class="optionsBox">
<!-- v-show="thisClass.state == '2'" -->
<view class="chengji" style="text-align: center;">
<view style="margin-top: 20rpx;">总成绩
<text class="scoreNumber greenScore">{{performanceScore.userScore}}</text>
<view class="">
<text class="c999">{{performanceScore.examScore}}分考试分 <uni-icons type="eye" size="20" color="#999"
@click="showPaperList = true"></uni-icons></text>
<text class="c999">{{performanceScore.usualScore}}分平时表现分</text>
<view class="">
<text class="c999">{{performanceScore.examScore}}分考试分 <uni-icons type="eye"
size="20" color="#999" @click="showPaperList = true"></uni-icons></text>
<text class="c999">{{performanceScore.usualScore}}分平时表现分</text>
</view>
</view>
</view>
</view>
<!-- <view>
</view>
<view>
恭喜您获得
<text class="greenScore">A</text>
<text class="small_btn border_radius_10 zhengshu">查看证书</text>
</view> -->
<!-- <view style="margin-top: 20rpx; text-align: center;">很遗憾您的成绩未达标</view> -->
<view class="" style="margin-top: 20rpx; text-align: center;"
v-if="performanceScore.userScore < 60 && newCLass && newCLass.id">
<text class="small_btn chongxiu border_radius_10"
@click="onPageJump('/pages/miniClass/classInfo',newCLass.id)">加入新班级重修</text>
<text class="yellowScore" v-if=" performanceScore.userScore >= 70"> A </text>
<text class="blueScore" v-else-if="performanceScore.userScore >= 60 && performanceScore.userScore < 70"> B </text>
<text class="small_btn border_radius_10 zhengshu" @click="showSubmit">{{certificate && certificate.id ? '查看证书' : '生成证书'}}</text>
</view>
</view>
</view>
</view>
<view class="pingfenBox testBox" v-if="(thisClass.state == '3') && classModel.isExam == 1">
<view class="scoreTitle">
<view class="titles flex_box">
<text>笔试分</text><uni-icons type="help" size="18" color="#fff"
@click="showTestTips = true"></uni-icons>
</view>
</view>
<view class="optionsBox" v-if="thisClass.state == '3'">
<view class=" ">
<view class="">
<!-- -->
<view class="gotoExams" @click="goTest" v-if="paperList.length <= 0">
<text>去考试</text>
</view>
<view class="" v-else-if="paperList.length > 0 && showCountDown">
<view class="flex_box flex_between align-items_box">
<view class="">
<uni-countdown @timeup="timeup" :font-size="20" :show-day="false"
:hour="timeDif.hour" :minute="timeDif.minutes" :second="timeDif.second"
color="#ffaa7f" />
</view>
<view class="">
<text class="small_btn retake border_radius_10"
@click="continueTest(examId)">继续考试</text>
</view>
</view>
</view>
<view class="flex_box flex_center align-items_box userScore" v-else
style="color: #666; justify-content: space-around !important">
<view class="flex_box align-items_box">
<text><text class="PM_font mainTxt" style="font-size: 60rpx; ">{{paperSore}}</text>
</text>
<uni-icons type="eye" size="20" color="#999"
@click="showPaperList = true"></uni-icons>
</view>
<view class="" v-if="paperList.length == 1">
<text class="small_btn retake border_radius_10" @click="goTest()">再考一次</text>
</view>
<!-- <view style="margin-top: 20rpx; text-align: center;">很遗憾您的成绩未达标</view> -->
<view class="" style="margin-top: 20rpx; text-align: center;"
v-if="performanceScore.userScore < 60 && newCLass && newCLass.id">
<text class="small_btn chongxiu border_radius_10"
@click="onPageJump('/pages/miniClass/classInfo',newCLass.id)">加入新班级重修</text>
</view>
</view>
</view>
</view>
</view>
<view class="pingfenBox" v-if="thisClass.state == '1' || thisClass.state == '3' || thisClass.state == '2'">
<view class="scoreTitle">
<view class="titles flex_box">
<text>表现分</text><uni-icons type="help" size="18" color="#fff" @click="clickHelp"></uni-icons>
<view class="pingfenBox testBox" v-if="(thisClass.state == '3') && classModel.isExam == 1">
<view class="scoreTitle">
<view class="titles flex_box">
<text>笔试分</text><uni-icons type="help" size="18" color="#fff"
@click="showTestTips = true"></uni-icons>
</view>
</view>
<view class="optionsBox" v-if="thisClass.state == '3'">
<view class=" ">
<view class="">
<!-- -->
<view class="gotoExams" @click="goTest" v-if="paperList.length <= 0">
<text>去考试</text>
</view>
<view class="" v-else-if="paperList.length > 0 && showCountDown">
<view class="flex_box flex_between align-items_box">
<view class="">
<uni-countdown @timeup="timeup" :font-size="20" :show-day="false"
:hour="timeDif.hour" :minute="timeDif.minutes" :second="timeDif.second"
color="#ffaa7f" />
</view>
<view class="">
<text class="small_btn retake border_radius_10"
@click="continueTest(examId)">继续考试</text>
</view>
</view>
</view>
<view class="flex_box flex_center align-items_box userScore" v-else
style="color: #666; justify-content: space-around !important">
<view class="flex_box align-items_box">
<text><text class="PM_font mainTxt"
style="font-size: 60rpx; ">{{paperSore}}</text>
</text>
<uni-icons type="eye" size="20" color="#999"
@click="showPaperList = true"></uni-icons>
</view>
<view class="" v-if="paperList.length == 1">
<text class="small_btn retake border_radius_10" @click="goTest()">再考一次</text>
</view>
</view>
</view>
</view>
</view>
</view>
<view :class="['otherItems' ,'flex_box' ,'userScore']">
<view class="pingfenBox"
v-if="thisClass.state == '1' || thisClass.state == '3' || thisClass.state == '2'">
<view class="scoreTitle">
<view class="titles flex_box">
<text>表现分</text><uni-icons type="help" size="18" color="#fff"
@click="clickHelp"></uni-icons>
</view>
</view>
<view :class="['otherItems' ,'flex_box' ,'userScore']">
<view v-if="classModel.isTask == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">作业得分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.task0Score}}</i></text>
</view>
<view v-if="classModel.isMedicalcase == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">医案得分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.task1Score}}</i></text>
</view>
<view v-if="classModel.isExperience == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">心得得分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.experienceScore}}</i></text>
</view>
<view v-if="classModel.isQuestion == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">思考题分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text>
</view>
<!-- <view v-if="classModel.isExam == 1 && thisClass.state == '2'">
<view v-if="classModel.isTask == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">作业得分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.task0Score}}</i></text>
</view>
<view v-if="classModel.isMedicalcase == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">医案得分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.task1Score}}</i></text>
</view>
<view v-if="classModel.isExperience == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">心得得分</text>
<text class="ciyao"><i
class="mainTxt PM_font">{{performanceScore.experienceScore}}</i></text>
</view>
<view v-if="classModel.isQuestion == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">思考题</text>
<text class="ciyao"><i
class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text>
</view>
<!-- <view v-if="classModel.isExam == 1 && thisClass.state == '2'">
<text class="ciyao">考试分</text>
<text class="ciyao"><i class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text>
</view> -->
</view>
</view>
</view>
</template>
<view class="mainBox">
<view class="">
<u-tabs v-if="tabList.length > 0" :class="['tabList']" @click="tabClick" :current="curTagIndex"
@@ -219,34 +227,6 @@
<text v-else>匿名用户</text>
</view>
</view>
<!-- <view class="" v-if="thisClass.state == '3' || thisClass.state == '2'">
<view class="scoreBox flex_box ">
<view class="item1">
<view class="ciyao">
平时成绩
</view>
<text class="score">{{item.student.score.peacetimeScore}}</text>
</view>
<template v-if="classModel.isExam == 1 && thisClass.state == '2'">
<template v-if="item.student.score.testScore.length == 0">
<view class="item1">
<view class="ciyao">
考试成绩
</view>
<text class="score">0</text>
</view>
</template>
<template v-else>
<view class="item1">
<view class="ciyao">
考试成绩
</view>
<text class="score">{{item.examScore}} </text>
</view>
</template>
</template>
</view>
</view> -->
</view>
</view>
</view>
@@ -262,8 +242,7 @@
<!-- {{getTijiaoTitleList}} -->
<!-- 班内提交 -->
<view class="" v-if="tabId == '3' && thisClass.state != '0'">
<view class="" v-if="tabId == '3' && thisClass.state != '0' && isHave">
<view class="flex_box tijiaoTitle">
<text :class="tijiaoTitleId == item.id ? 'active' :''" @click="titleClick(item,index)"
v-for="(item, index) in tijiaoTitleList" :key="index">{{item.name}}</text>
@@ -450,13 +429,28 @@
</view>
</view>
</u-popup>
<!-- <addCerInfo v-if="showSubmitInfoBlank" :submitInfo="submitInfo" @close="closeManager" ></addCerInfo> -->
<u-popup key="5" :show="showSubmitInfoBlank" :round="10" @close="closeManager">
<view class="guanli">
<h3>信息展示</h3>
<view class="tips border_radius_10">
{{submitInfo.name}}-{{submitInfo.photo}}
</view>
</view>
</u-popup>
<!-- <z-navigation></z-navigation> -->
</view>
</template>
<script>
import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
import addCerInfo from "@/components/addCerInfo.vue";
// import {
// chooseImage
// } from '@/node_modules/uview-ui';
import sutdentScoreList from "./components/sutdent_score_list.vue";
// import permission from "@/js_sdk/wa-permission/permission.js"
import $http from '@/config/requestConfig.js';
import {
mapState
@@ -464,6 +458,12 @@
export default {
data() {
return {
fileList1: [],
showCropper: false,
submitInfo: {
img: undefined, // 证件图
name: '' // 姓名
},
showAlert: false, // 是否显示考试周
horizontal: 'right',
vertical: 'bottom',
@@ -477,22 +477,9 @@
buttonColor: '#007AFF',
iconColor: '#fff'
},
fabContent: [{
iconPath: '/static/icon/pigai2.png',
selectedIconPath: '/static/icon/pigai2.png',
text: '发布作业',
active: false
},
{
iconPath: '/static/icon/pigai1.png',
selectedIconPath: '/static/icon/pigai1.png',
text: '发布医案',
active: false
},
],
timeDif: {},
showCountDown: false,
showSubmitInfoBlank: false,
thisClass: {},
students: [],
tabId: '3',
@@ -608,11 +595,13 @@
examId: undefined,
ingPaper: undefined, // 正在进行中的试卷信息
newCLass: undefined, // 同模型的待开班班级
certificate:undefined, // 证书
}
},
onLoad(e) {
uni.hideTabBar();
this.classId = e.id
console.log('this.classId',this.classId );
this.getUserRole()
this.getUserInfo()
uni.$on('refreshData', () => {
@@ -620,7 +609,7 @@
this.pPage = 0
this.taskList = []
this.getList()
})
})
// uni.$on('refreshUserAnswerList',() => {
// console.log('开始刷新用户提交列表');
// this.pPage = 0
@@ -669,8 +658,8 @@
console.log('正在进行中的试卷信息', historyPaper);
this.ingPaper = historyPaper
// console.log('对比----------------', historyPaper.classId, this.classId);
if (historyPaper&& historyPaper != null && historyPaper.classId == this.classId) {
var planEndTimeDate = new Date(historyPaper.planEndTime)
if (historyPaper && historyPaper != null && historyPaper.classId == this.classId) {
var planEndTimeDate = new Date(historyPaper.planEndTime)
paperEndTime = planEndTimeDate.getTime(); // 结束的时间戳
this.examId = historyPaper.id
} else {
@@ -694,7 +683,9 @@
}
},
components: {
sutdentScoreList
sutdentScoreList,
QfImageCropper,
addCerInfo
},
computed: {
...mapState(["userInfo"]),
@@ -719,11 +710,12 @@
tabList() {
var list = []
if (this.thisClass.state == '0') {
if (this.thisClass.state == '0' || !this.isHave) {
list = this.tabList01
} else if (this.thisClass.state == '1') {
list = this.tabList02
} else {
console.log('走这里了吗?');
list = this.tabList03
}
return list
@@ -731,6 +723,10 @@
// 获得提交项目的tab
getTijiaoTitleList() {
if (!this.isHave) {
this.tabId = 0
// return
}
var _list = []
if (this.classModel.isTask == 1) {
_list.push(this.defaultTijiaoTitleList[0])
@@ -742,8 +738,10 @@
_list.push(this.defaultTijiaoTitleList[2])
}
// return _list
this.tijiaoTitleList = _list
this.tijiaoTitleId = this.tijiaoTitleList[0].id
if(_list.length > 0){
this.tijiaoTitleList = _list
this.tijiaoTitleId = this.tijiaoTitleList[0].id
}
// this.tabId =
},
getBlankNumber() {
@@ -765,7 +763,56 @@
// }
}
},
methods: {
methods: {
async showSubmit() {
if(this.certificate && this.certificate.id){
// 已生成
uni.navigateTo({
url:'去个人中心'
})
}else{ // 未生成
var userObj = await this.getUserData()
if(userObj){
this.submitInfo.name = userObj.name
this.submitInfo.photo = userObj.photo
this.showSubmitInfoBlank = true
}
}
},
async getUserData() {
let that = this;
var Ss = undefined
// 获取个人信息
if (this.userInfo.id != undefined) {
await this.$http
.post('book/user/info/'+this.userInfo.id)
.then(async (res) => {
Ss = res.user;
console.log('that.userData at line 698个人中心:', res.user)
});
return Ss
}
},
chooseImage() {
let that = this
uni.chooseImage({
count: 6, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album'], //从相册选择
success: function(res) {
console.log('选择的照片', JSON.stringify(res.tempFilePaths));
that.submitInfo.img = res.tempFilePaths[0];
}
});
},
selectImage() {
this.chooseImage()
// .then(res => {
// this.submitInfo.img = res.tempFilePaths[0];
// });
},
// 选中了学生
chooseStudent(data) {
return
@@ -851,11 +898,7 @@
icon: 'none'
})
});
},
// 查询考试成绩
getPaperScore() {
console.log('获取卷面成绩');
},
},
// 考试周和结班状态下,学员的信息
async getStudentScoreList() {
console.log('进来了码?');
@@ -871,7 +914,7 @@
},
})
.then(res => {
console.log('考试周班状态下,学员的信息',this.classId , res, );
console.log('考试周班状态下,学员的信息', this.classId, res, );
// this.userMsg = res.user
// list = studentList
if (res.code == 0) {
@@ -904,7 +947,7 @@
return list
},
goTest() {
console.log('this.ingPaper',this.ingPaper);
console.log('this.ingPaper', this.ingPaper);
if (this.ingPaper) {
uni.showModal({
title: '提示',
@@ -948,8 +991,8 @@
});
},
// 查询平时表现分
getScore() {
// 查询平时表现分+ 最终成绩 + 可加入的新班级 + 证书信息
async getScore() {
$http.request({
url: "common/class/getUserScore",
method: "POST",
@@ -961,12 +1004,20 @@
'Content-Type': 'application/json'
},
})
.then((res) => {
.then(async (res) => {
if (res.code == 0) {
this.performanceScore = res.result
console.log('平时成绩e-------', this.performanceScore);
if (this.performanceScore.userScore < 60) {
this.getNewCLassInfo()
}else{
// >= 60
if(this.thisClass.state == '2' ){
var certificate = await this.getCertificateInfo()
if(certificate && certificate.id){
this.certificate = certificate
}
}
}
} else {
uni.showToast({
@@ -981,6 +1032,36 @@
})
});
},
// 查询证书获得情况
async getCertificateInfo(){
var _obj = undefined
$http.request({
url: "common/class/getUserCertificateByClassId",
method: "POST",
data: {
"classId": this.classId,
"userId": this.userInfo.id
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then((res) => {
if (res.code == 0) {
// this.newCLass = res.result
console.log('证书数据', res);
_obj = res.userCertificate
}
}).catch(e => {
_obj = undefined
console.log('证书接口报错', e);
uni.showToast({
title: e.errMsg,
icon: 'none'
})
});
return _obj
},
// 可加入的同模型下待开班班级
getNewCLassInfo() {
$http.request({
@@ -1085,7 +1166,7 @@
}
})
},
async getingPaper() {
async getingPaper() {
var obj = undefined
await $http.request({
url: "common/classExam/examingPaper",
@@ -1099,7 +1180,10 @@
console.log('考试中999999999999999999', res);
if (res.code == 0) {
if (res.classExamUser != null) {
obj = {...res.classExamUser, planEndTime:res.planEndTime}
obj = {
...res.classExamUser,
planEndTime: res.planEndTime
}
// obj
} else {
obj = undefined
@@ -1307,35 +1391,14 @@
seeManager() {
this.showMan = true
},
closeManager() {
this.showMan = false
this.showTestTips = false
this.showPaperList = false
this.showSubmitInfoBlank = false
},
fabClick() {
// uni.showToast({
// title: '点击了悬浮按钮',
// icon: 'none'
// })
},
fabTrigger(e) {
console.log(e)
this.fabContent[e.index].active = !e.item.active
var _url = '/pages/miniClass/addHomeWork'
var _type = '0'
if (e.index == 0) {
// 发布作业/医案
_type = '0'
} else {
_type = '1'
}
this.$refs.fab.close()
setTimeout(() => {
uni.navigateTo({
url: `${_url}?id=${this.thisClass.id}&type=${_type}`
})
}, 200)
},
// 改变班级状态
changeClassStatu(statusCode) {
if (statusCode == '1') {
@@ -1467,7 +1530,7 @@
},
})
.then(async res => {
console.log('班级信息', res);
// console.log('班级信息', res);
this.refresh = false
if (res.code == 0) {
// res = classData // 测试数据
@@ -1523,17 +1586,16 @@
if (this.thisClass.state != 0) {
this.pPage = 0
this.taskList = []
if (this.firstLoad) {
this.firstLoad = false
this.tijiaoTitleId = this.tijiaoTitleList[0].id
if(this.tijiaoTitleList.length > 0){
if (this.firstLoad) {
this.firstLoad = false
this.tijiaoTitleId = this.tijiaoTitleList[0].id
}
this.getList()
}
this.getList()
}
var dd = this.getBlankNumber
if (this.thisClass.state == '2') { // 结班状态下再查询卷面成绩
this.getPaperScore()
}
var dd = this.getBlankNumber
}
uni.hideLoading()
}).catch(e => {
@@ -1563,27 +1625,6 @@
display: flex;
}
.fabBox {}
::v-deep .uni-fab__content--other-platform,
::v-deep .uni-fab--rightBottom {
bottom: 100px !important;
}
::v-deep .uni-fab__content--other-platform {
box-shadow: none !important;
}
::v-deep .fab-circle-icon {
display: none !important;
}
::v-deep .uni-fab__circle::after {
content: '发布';
color: #fff;
font-weight: normal;
}
.classStatus {
padding: 10rpx;
color: #fff;
@@ -1716,7 +1757,9 @@
.blueScore {
color: #00aaff;
}
.yellowScore{
color: #ffaa00;
}
.redScore {
color: #ff8a8c;
}