This commit is contained in:
@fawn-nine
2024-09-24 18:06:13 +08:00
parent 1a2df86df2
commit 6ef6e4e725
14 changed files with 280 additions and 205 deletions

29
common/debounce.js Normal file
View File

@@ -0,0 +1,29 @@
let timeout = null
/**
* 防抖原理一定时间内只有最后一次操作再过wait毫秒后才执行函数
*
* @param {Function} func 要执行的回调函数
* @param {Number} wait 延时的时间
* @param {Boolean} immediate 是否立即执行
* @return null
*/
function debounce(func, wait = 500, immediate = false) {
// 清除定时器
if (timeout !== null) clearTimeout(timeout)
// 立即执行,此类情况一般用不到
if (immediate) {
const callNow = !timeout
timeout = setTimeout(() => {
timeout = null
}, wait)
if (callNow) typeof func === 'function' && func()
} else {
// 设置定时器当最后一次操作后timeout不会再被清除所以在延时wait毫秒后执行func回调方法
timeout = setTimeout(() => {
typeof func === 'function' && func()
}, wait)
}
}
export default debounce

View File

@@ -6,9 +6,9 @@ if (process.env.NODE_ENV === 'development') {
// socketUrl = "ws://localhost:6001/"; // socketUrl = "ws://localhost:6001/";
// baseUrl = "https://twin-ui.com/demo/"; // baseUrl = "https://twin-ui.com/demo/";
// baseUrl = "https://testapi.nuttyreading.com/"; // 线上测试环境 // baseUrl = "https://testapi.nuttyreading.com/"; // 线上测试环境
baseUrl = "https://api.nuttyreading.com/"; // 线上正式 // baseUrl = "https://api.nuttyreading.com/"; // 线上正式
// baseUrl = "http://192.168.110.110:9200/pb/"; // 磊哥 // baseUrl = "http://192.168.110.110:9200/pb/"; // 磊哥
// baseUrl = "http://192.168.110.100:9200/pb/"; // 开发用电脑 baseUrl = "http://192.168.110.100:9200/pb/"; // 开发用电脑
// baseUrl = "http://59.110.212.44:9200/pb/"; // baseUrl = "http://59.110.212.44:9200/pb/";
// baseUrl = "http://192.168.110.100:9100/pb/"; // 开发用电脑 // baseUrl = "http://192.168.110.100:9100/pb/"; // 开发用电脑
// baseUrl = "http://192.168.110.110:9200/pb/"; // baseUrl = "http://192.168.110.110:9200/pb/";

View File

@@ -3,7 +3,11 @@
<z-nav-bar title="我的证书"></z-nav-bar> <z-nav-bar title="我的证书"></z-nav-bar>
<!-- 公共组件-每个页面必须引入 --> <!-- 公共组件-每个页面必须引入 -->
<public-module></public-module> <public-module></public-module>
<view class="list" v-if="certificateList.length > 0"> <view class="list" v-if="certificateList.length > 0">
<view class="" style="margin: 10rpx;">
{{certificateList.length}} 个证书
</view>
<view class="item" v-for="(item,index) in certificateList" :key="index"> <view class="item" v-for="(item,index) in certificateList" :key="index">
<view class="flex_box"> <view class="flex_box">
<h3>编号{{item.certificateNo}}</h3> <h3>编号{{item.certificateNo}}</h3>

View File

@@ -734,13 +734,15 @@
_myurl = '/pages/course/chapterDetailAndorid' _myurl = '/pages/course/chapterDetailAndorid'
// } // }
if (this.librayList[this.curIndex].isBuy == 1 || v.isAudition == 1 || if (this.librayList[this.curIndex].isBuy == 1 || v.isAudition == 1 ||
this.vip.type != "1" || this.vip.type != "2") { this.vip.type == "1" || this.vip.type == "2") {
let noRecored = false let noRecored = false
v.isAudition == 1 && this.userMsg.vip == 0 && this.librayList[this.curIndex].isBuy == 0 ? v.isAudition == 1 && this.userMsg.vip == 0 && this.librayList[this.curIndex].isBuy == 0 ?
noRecored = true : '' noRecored = true : ''
uni.navigateTo({ uni.navigateTo({
url: `${_myurl}?navTitle=${this.pageTitle}&title=${v.title}&courseId=${this.courseId}&id=${v.id}&conditions=${v.conditions}&noRecored=${noRecored}`, url: `${_myurl}?navTitle=${this.pageTitle}&title=${v.title}&courseId=${this.courseId}&id=${v.id}&conditions=${v.conditions}&noRecored=${noRecored}`,
}); });
}else if(this.vip.type != "1" && this.librayList[this.curIndex].type == 2){
this.$commonJS.showToast("请开通超V后观看本课程");
} else { } else {
this.$commonJS.showToast("请先购买课程"); this.$commonJS.showToast("请先购买课程");
} }

View File

@@ -864,11 +864,12 @@
} }
.jianjie { .jianjie {
line-height: 30rpx; height: 60rpx; overflow: hidden; overflow: hidden;
margin-top: 10rpx; margin-top: 10rpx;
font-size: 24rpx; font-size: 24rpx;
@include bov(); @include bov();
color: #9c9c9c; color: #9c9c9c;
line-height: 30rpx; height: 60rpx;
} }
.txt555 { .txt555 {

View File

@@ -195,6 +195,7 @@
font-size: 24rpx; font-size: 24rpx;
@include bov(); @include bov();
color: #9c9c9c; color: #9c9c9c;
line-height: 30rpx; height: 60rpx; overflow: hidden;
} }
.txt555 { .txt555 {

View File

@@ -6,8 +6,11 @@
" class="commonPageeeee commonPageBox"> " class="commonPageeeee commonPageBox">
<!-- 公共组件-每个页面必须引入 --> <!-- 公共组件-每个页面必须引入 -->
<public-module></public-module> <public-module></public-module>
<u-icon @click="goSetting" class="setIcon" labelColor="#258feb" labelPos="bottom" label="设置" name="setting" <view class="setIcon" @click="goSetting">
:style="`top:${(10 + statusBarHeight) * 2}rpx`" color="#258feb" size="28"></u-icon> <u-icon class="" labelColor="#258feb" labelPos="bottom" label="设置" name="setting"
:style="`top:${(10 + statusBarHeight) * 2}rpx`" color="#258feb" size="28"></u-icon>
</view>
<view class="bg_top flex_box flex_between"> <view class="bg_top flex_box flex_between">
<view class="per_mes"> <view class="per_mes">
<view class="per_mes_user"> <view class="per_mes_user">
@@ -349,6 +352,7 @@
this.infoShow = true; this.infoShow = true;
}, },
goSetting() { goSetting() {
console.log('点击了');
this.onPageJump("/pages/mine/set/index"); this.onPageJump("/pages/mine/set/index");
}, },
goUserInfo() { goUserInfo() {
@@ -896,10 +900,11 @@
} }
.setIcon { .setIcon {
position: absolute; position: absolute;
right: 30rpx; right: 30rpx;
top: 30rpx; top: 70rpx;
z-index: 2;
} }
.mine_box { .mine_box {
width: 100%; width: 100%;

View File

@@ -43,7 +43,7 @@
<view><text class="ciyao">学员人数</text><text <view><text class="ciyao">学员人数</text><text
class="mainTxt">{{students.length}}/{{thisClass.number}}</text></view> class="mainTxt">{{students.length}}/{{thisClass.number}}</text></view>
<view><text class="ciyao">管理成员</text><text class="mainTxt" @click="seeManager">点击查看</text></view> <view><text class="ciyao">管理成员</text><text class="mainTxt" @click="seeManager">点击查看</text></view>
</view> </view>
<!-- v-if="thisClass.state == '2'" --> <!-- v-if="thisClass.state == '2'" -->
<template v-if="isHave"> <template v-if="isHave">
<view class="pingfenBox testBox" v-if="thisClass.state == '3' || thisClass.state == '2'"> <view class="pingfenBox testBox" v-if="thisClass.state == '3' || thisClass.state == '2'">
@@ -58,10 +58,10 @@
<text class="scoreNumber greenScore">{{performanceScore.userScore}}</text> <text class="scoreNumber greenScore">{{performanceScore.userScore}}</text>
<view class=""> <view class="">
<view class="" style="margin: 10rpx 0;"> <view class="" style="margin: 10rpx 0;">
<text class="c999" v-if="performanceScore.examScore">{{performanceScore.examScore}}分考试分 <uni-icons type="eye" <text class="c999" v-if="performanceScore.examScore >= 0">{{performanceScore.examScore}}分考试分 <uni-icons type="eye"
size="20" color="#999" @click="showPaperList = true"></uni-icons></text> size="20" color="#999" @click="showPaperList = true"></uni-icons></text>
<text v-if="performanceScore.examScore && performanceScore.usualScore"></text> <text v-if="performanceScore.examScore >= 0 && performanceScore.usualScore >= 0"></text>
<text class="c999" v-if="performanceScore.usualScore"> {{performanceScore.usualScore}}平时表现分</text> <text class="c999" v-if="performanceScore.usualScore >= 0"> {{performanceScore.usualScore}}分表现分</text>
</view> </view>
</view> </view>
</view> </view>
@@ -76,8 +76,9 @@
<template v-if="performanceScore.userScore < 60"> <template v-if="performanceScore.userScore < 60">
<view class="flex_box flex_center align-items_box" style="justify-content: center;"> <view class="flex_box flex_center align-items_box" style="justify-content: center;">
<text style="text-align: center;">很遗憾您的成绩未达标</text> <text style="text-align: center;">很遗憾您的成绩未达标</text>
{{newCLass}}
<view class="" style="text-align: center;" <view class="" style="text-align: center;"
v-if="newCLass && newCLass.id"> v-if="newCLass && newCLass != null && newCLass.id">
<text class="small_btn chongxiu border_radius_10" <text class="small_btn chongxiu border_radius_10"
@click="onPageJump('/pages/miniClass/classInfo',newCLass.id)">加入新班级重修</text> @click="onPageJump('/pages/miniClass/classInfo',newCLass.id)">加入新班级重修</text>
</view> </view>
@@ -157,11 +158,11 @@
<text class="ciyao"><i <text class="ciyao"><i
class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text> class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text>
</view> </view>
<view v-if="classModel.isExam == 1 && thisClass.state == '2'"> <!-- <view v-if="classModel.isExam == 1 && thisClass.state == '2'">
<text class="ciyao">考试分</text> <text class="ciyao">考试分</text>
<text class="ciyao"><i <text class="ciyao"><i
class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text> class="mainTxt PM_font">{{performanceScore.questionScore}}</i></text>
</view> </view> -->
</view> </view>
</view> </view>
</template> </template>
@@ -248,14 +249,15 @@
v-for="(item, index) in tijiaoTitleList" :key="index">{{item.name}}</text> v-for="(item, index) in tijiaoTitleList" :key="index">{{item.name}}</text>
</view> </view>
<!-- 课程排序 --> <!-- 课程排序 -->
<view class="courseTab border_radius_10" v-if="questionsList.length > 1"> <view class="courseTab border_radius_10" v-if="questionsList.length > 1 && tijiaoTitleId == '3'">
<view class="flex_box flex_between"> <view class="flex_box flex_between" v-if="tabCourseList.length <= 3 ">
<!-- <view > -->
<text :class="['item','border_radius_10',curCourseId == item.id ? 'cur' :'']" <text :class="['item','border_radius_10',curCourseId == item.id ? 'cur' :'']"
@click="clickCourseTab(index,item.id)" v-for="(item, index) in tabCourseList" @click="clickCourseTab(index,item.id)" v-for="(item, index) in tabCourseList"
:key="index">{{item.title}}</text> :key="index">{{item.title}}</text>
<!-- </view> -->
</view> </view>
<template v-if="tabCourseList.length > 3 && tijiaoTitleId == '3'">
<u-tabs :list="tabCourseList" lineWidth="0" lineHeight="0" @click="tabsClickCourseTab" :activeStyle="courseActiveStyle" :current="curCourseIndex"></u-tabs>
</template>
</view> </view>
<!-- 班内任务 --><!-- 医案 --> <!-- 心得 --><!-- 思考题 --> <!-- 班内任务 --><!-- 医案 --> <!-- 心得 --><!-- 思考题 -->
<view class="" v-if="tijiaoTitleId != '3'"> <view class="" v-if="tijiaoTitleId != '3'">
@@ -286,45 +288,55 @@
<view class="submitRecode"> <view class="submitRecode">
<view class="newBox"> <view class="newBox">
<view class="item " v-for="(item, index) in taskList" @click="clickTask(item)"> <view class="item " v-for="(item, index) in taskList" @click="clickTask(item)">
<view class="leve1 flex_box"> <view class="leve1 flex_box flex_between">
<text>{{item.title}}</text> <text style="flex: 1;">{{item.title}}</text>
</view> <view class="btn1" @click.stop="changeZheDie(item, index)">
<view :class="['leve2']"> {{item.zhedie ? '收起' : '展开'}}
<view :class="[item.zhedie ? '' : 'zhedie']" v-html="item.content">
</view> </view>
</view>
<view :class="['leve2']" v-if="item.zhedie">
<view :class="[item.zhedie ? '' : 'zhedie']" v-html="item.content"></view>
</view> </view>
<view class="leve3"> <view class="leve3">
<view class="tips flex_box"> <view class="tips flex_box" v-if="item.zhedie">
<view class="btn1" @click.stop="changeZheDie(item, index)">
{{item.zhedie ? '收起' : '展开'}}
</view>
<!-- <text>发布者{{item.createUser.nickname != null && item.createUser.nickname != '' ? item.createUser.nickname : '匿名用户'}}</text> --> <!-- <text>发布者{{item.createUser.nickname != null && item.createUser.nickname != '' ? item.createUser.nickname : '匿名用户'}}</text> -->
<text style="" class="date">日期{{item.createTime}}</text> <text style="" class="date">日期{{item.createTime}}</text>
</view> </view>
<view class=""> <template v-if="tijiaoTitleId == 2 && isHave">
<view class="score" v-if="item.scoreSuccess >= 1"> <view class="">
分数{{item.score}} <view class="score" v-if="item.scoreSuccess == 0">
等待评分
</view>
<!-- <view class="score" v-if="item.scoreSuccess > 0 && item.scoreSuccess ">
正在评分
</view> -->
<view class="score" v-if="item.scoreSuccess >= 1">
分数{{item.score}}
</view>
</view> </view>
</view> <text class="btn"
<text class="btn" v-show="myExperience == 1 && item.scoreSuccess == 0 && thisClass.state == '1'"
v-show="tijiaoTitleId == 2 && myExperience == 1 && item.scoreSuccess == 0 && thisClass.state == '1'"
@click.stop="editMyXinde(item)">修改</text> @click.stop="editMyXinde(item)">修改</text>
</view> </template>
<template v-if="roleCode.includes('0') && isHave"> <template v-if="roleCode.includes('0') && isHave && tijiaoTitleId != 2">
<view class="leve3" v-show="item.reply && tijiaoTitleId != 2"> <template v-if="item.reply && item.otherInfo != null">
<text>已提交答案</text> <text v-if="item.otherInfo[0].scoreSuccess == 0">等待评分</text>
</view> <text class="pIng" v-if="item.otherInfo[0].scoreSuccess < 2 && item.otherInfo[0].scoreSuccess > 0">正在评分</text>
<view class="leve3 no" <view class="" v-if="item.otherInfo[0].scoreSuccess >=2">
v-show="!item.reply && tijiaoTitleId != 2 && thisClass.state == '1'"> <text class="score" >{{item.otherInfo[0].score}} </text>
<text>未提交答案 点击开始答题</text> <!-- <text style="color: #999; padding-left: 10rpx; font-size: 26rpx;"></text> -->
</view> </view>
<view class="leve3 cantAnswer" </template>
v-show="!item.reply && tijiaoTitleId != 2 && (thisClass.state == '2' || thisClass.state == '3')"> <template
<text>未作答 已不可作答</text> v-if="!item.reply && thisClass.state == '1'">
</view> <text class="no">未提交答案 点击开始答题</text>
</template> </template>
<template
v-if="!item.reply && (thisClass.state == '2' || thisClass.state == '3')">
<text class="cantAnswer">未作答 已不可作答</text>
</template>
</template>
</view>
</view> </view>
</view> </view>
</view> </view>
@@ -345,15 +357,28 @@
<view class="item " <view class="item "
v-for="(item, index) in questionsList[curCourseIndex].chapterList" v-for="(item, index) in questionsList[curCourseIndex].chapterList"
@click="jumpToVideoPage(item)"> @click="jumpToVideoPage(item)">
<view class=" flex_box"> <view class=" flex_box align-items_box">
<view class="pp" style="flex: 1; font-size: 28rpx;" v-html="item.title"> <view class="pp" style="flex: 1; font-size: 28rpx;" v-html="item.title">
</view> </view>
<text v-if="item.reply == null" <template v-if="item.reply == null">
style="color: #ff9277; font-size: 26rpx;">未作答</text> <text v-if="thisClass.state == '1'" style="color: #ff9277; font-size: 26rpx;">未作答</text>
<text v-else class="" <text v-if="thisClass.state == '2' || thisClass.state == '3'" style="color: #999; font-size: 26rpx;">已不可作答</text>
style="padding-left: 10rpx; color: #55aaff; font-size: 26rpx;">已作答</text> </template>
<template v-else>
<!-- <text class=""
style="padding-left: 10rpx; color: #55aaff; font-size: 26rpx;">已作答</text> -->
<text style="padding-left: 10rpx; color: #55aa7f; font-size: 26rpx;" v-if="item.reply.scoreSuccess <= 0 && thisClass.state != '2'">
等待评分
</text>
<text style="padding-left: 10rpx; color: #999; font-size: 26rpx;" v-if="item.reply.scoreSuccess <= 0 && thisClass.state == '2'">
已结班无法评分
</text>
<view class="" style="margin-left: 5rpx;" v-if="item.reply.scoreSuccess > 0">
<text class="score">{{item.reply.score}}</text><text style="color: #999;"></text>
</view>
</template>
</view> </view>
<!-- <view class="questJUmp">前往所在章节</view> -->
</view> </view>
</view> </view>
</view> </view>
@@ -514,9 +539,7 @@
<script> <script>
import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue'; import QfImageCropper from '@/uni_modules/qf-image-cropper/components/qf-image-cropper/qf-image-cropper.vue';
import addCerInfo from "@/components/addCerInfo.vue"; import addCerInfo from "@/components/addCerInfo.vue";
// import { import debounce from "@/common/debounce.js";
// chooseImage
// } from '@/node_modules/uview-ui';
import sutdentScoreList from "./components/sutdent_score_list.vue"; import sutdentScoreList from "./components/sutdent_score_list.vue";
// import permission from "@/js_sdk/wa-permission/permission.js" // import permission from "@/js_sdk/wa-permission/permission.js"
import $http from '@/config/requestConfig.js'; import $http from '@/config/requestConfig.js';
@@ -526,6 +549,13 @@
export default { export default {
data() { data() {
return { return {
courseActiveStyle:{
background:'#fff',
color:'#666',
padding:"10rpx",
borderRadius:"10rpx"
},
certificateFlag:false, // 证书生成中的标记
buyCourseMsg: '', buyCourseMsg: '',
fileList1: [], fileList1: [],
questionsList: [], questionsList: [],
@@ -786,7 +816,7 @@
} }
} }
if (this.thisClass.state == '2') { if (this.thisClass.state == '2' || this.thisClass.state == '2') {
var userObj = await this.getUserData() var userObj = await this.getUserData()
if (userObj) { if (userObj) {
this.submitInfo.name = userObj.name this.submitInfo.name = userObj.name
@@ -863,7 +893,7 @@
if (_list.length > 0) { if (_list.length > 0) {
console.log('是否进入了这里666666666666',this.tijiaoTitleIndex); console.log('是否进入了这里666666666666',this.tijiaoTitleIndex);
this.tijiaoTitleList = _list this.tijiaoTitleList = _list
this.titleClick(this.tijiaoTitleList[this.tijiaoTitleIndex], this.tijiaoTitleIndex) this.titleClick(this.tijiaoTitleList[this.tijiaoTitleIndex], this.tijiaoTitleIndex )
// this.tijiaoTitleId = this.tijiaoTitleList[0].id // this.tijiaoTitleId = this.tijiaoTitleList[0].id
} }
// this.tabId = // this.tabId =
@@ -1195,73 +1225,89 @@
}, },
// 生成证书 // 生成证书
createCertificate() { createCertificate() {
if (this.submitInfo.name && this.submitInfo.name != null && this.submitInfo.name != '' && debounce(async () => {
this.submitInfo.photo && this.submitInfo.photo != null && this.submitInfo.photo != '') { if(this.certificateFlag) return
this.certificateFlag = true
} else { if (this.submitInfo.name && this.submitInfo.name != null && this.submitInfo.name != '' &&
uni.showModal({ this.submitInfo.photo && this.submitInfo.photo != null && this.submitInfo.photo != '') {
title: '提示',
content: "真实姓名或证书照片未设置,请设置完成后再来生成证书吧", } else {
cancelText: '稍后设置', uni.showModal({
confirmText: '立即设置', title: '提示',
success: (res) => { content: "真实姓名或证书照片未设置,请设置完成后再来生成证书吧",
if (res.confirm) { cancelText: '稍后设置',
uni.navigateTo({ confirmText: '立即设置',
url: '/pages/mine/userInfo/persData' success: (res) => {
}) if (res.confirm) {
uni.navigateTo({
url: '/pages/mine/userInfo/persData'
})
}
} }
} })
}) return
return }
} var type = undefined
var type = undefined if (this.performanceScore.userScore >= 60 && this.performanceScore.userScore < 70) {
if (this.performanceScore.userScore >= 60 && this.performanceScore.userScore < 70) { type = 'B'
type = 'B' } else if (this.performanceScore.userScore >= 70) {
} else if (this.performanceScore.userScore >= 70) { type = 'A'
type = 'A' } else {
} else {
uni.showToast({
title: '您的成绩未达到证书水平,请继续努力',
icon: 'none'
})
return
}
var data = {
"type": type, //证书类型A a证 B b证 ZK自考
"relationId": this.classId //小班id、课程id
}
// console.log('证书提交数据',data,this.performanceScore.userScore);
$http.request({
url: "common/class/generateCertificateClass",
method: "POST",
data,
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then(async (res) => {
if (res.code == 0) {
console.log('证书返回值', res);
uni.showToast({
title: '生成成功',
icon: 'none'
})
setTimeout(() => {
this.closeManager()
this.getScore()
}, 300)
} else {
uni.showToast({
title: res.errMsg,
icon: 'none'
})
}
}).catch(e => {
uni.showToast({ uni.showToast({
title: e.errMsg, title: '您的成绩未达到证书水平,请继续努力',
icon: 'none' icon: 'none'
}) })
}); return
}
uni.showLoading({
title:'正在生成'
})
var data = {
"type": type, //证书类型A a证 B b证 ZK自考
"relationId": this.classId //小班id、课程id
}
// console.log('证书提交数据',data,this.performanceScore.userScore);
$http.request({
url: "common/class/generateCertificateClass",
method: "POST",
data,
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then(async (res) => {
uni.hideLoading()
if (res.code == 0) {
console.log('证书返回值', res);
uni.showToast({
title: '生成成功',
icon: 'success'
})
setTimeout(() => {
this.closeManager()
this.getScore()
}, 300)
} else {
uni.showToast({
title: res.errMsg,
icon: 'none'
})
}
setTimeout(()=>{
this.certificateFlag = false
},300)
}).catch(e => {
this.certificateFlag = false
uni.hideLoading()
uni.showToast({
title: e.errMsg,
icon: 'none'
})
});
},300)
}, },
// 查询平时表现分+ 最终成绩 + 可加入的新班级 + 证书信息 // 查询平时表现分+ 最终成绩 + 可加入的新班级 + 证书信息
async getScore() { async getScore() {
@@ -1349,11 +1395,11 @@
}, },
}) })
.then((res) => { .then((res) => {
if (res.code == 0 && res.result != null) { if (res.code == 0 && res.result != null && res.result != 'null') {
this.newCLass = res.result this.newCLass = res.result
console.log('同模型的待开班班级', this.newCLass); console.log('同模型的待开班班级', this.newCLass);
} else { } else {
console.log('走这里吗码码码码码');
this.newCLass = undefined this.newCLass = undefined
} }
}).catch(e => { }).catch(e => {
@@ -1398,6 +1444,16 @@
} }
}, },
// 滑块滚动
tabsClickCourseTab(e){
console.log('滑块滚动',e);
if (this.curCourseIndex == e.index) {
return
} else {
this.curCourseIndex = e.index
this.curCourseId = e.id
}
},
// 跳转到播放页面 // 跳转到播放页面
jumpToVideoPage(val) { jumpToVideoPage(val) {
uni.navigateTo({ uni.navigateTo({
@@ -1560,7 +1616,7 @@
}, },
async titleClick(item, textIndex) { async titleClick(item, textIndex) {
console.log('进来了吗', item); console.log('进来了吗titleClick', item, textIndex);
if(this.loadFlag){ if(this.loadFlag){
uni.showToast({ uni.showToast({
title:'操作太快了,休息一下吧', title:'操作太快了,休息一下吧',
@@ -1574,9 +1630,12 @@
this.questionsList = await this.getQuestionsList() this.questionsList = await this.getQuestionsList()
if (this.questionsList.length > 0) { if (this.questionsList.length > 0) {
this.curCourseId = this.questionsList[this.curCourseIndex].courseEntity.id this.curCourseId = this.questionsList[this.curCourseIndex].courseEntity.id
this.tabCourseList = this.questionsList.map(item => { this.tabCourseList = this.questionsList.map(item => {
return item.courseEntity return item.courseEntity
}) })
this.tabCourseList.forEach(item1 => {
item1.name = item1.title
})
} }
return return
} }
@@ -1830,7 +1889,7 @@
clickHelp() { clickHelp() {
uni.showModal({ uni.showModal({
title: '说明', title: '说明',
content: `表现分由${this.classModel.isTask == 1 ? '作业('+this.classModel.taskScore+'%)' : ''}${this.classModel.isMedicalcase == 1 ? '医案('+this.classModel.medicalcaseScore+'%)' : ''}${this.classModel.isExperience == 1 ? '心得('+this.classModel.experienceScore+'%)' : ''} ${this.classModel.isQuestion == 1 ? '思考题('+this.classModel.questionScore+'%)' : ''}构成。`, content: `表现分由${this.classModel.isTask == 1 ? '作业('+this.classModel.taskScore+'%)' : ''}${this.classModel.isMedicalcase == 1 ? '医案('+this.classModel.medicalcaseScore+'%)' : ''}${this.classModel.isExperience == 1 ? '心得('+this.classModel.experienceScore+'%)' : ''} ${this.classModel.isQuestion == 1 ? '思考题('+this.classModel.questionScore+'%)' : ''}构成,班内总成绩总分为100分`,
showCancel: false, showCancel: false,
confirmText: '好的' confirmText: '好的'
}) })
@@ -2229,6 +2288,10 @@
padding-bottom: 20rpx; padding-bottom: 20rpx;
margin-bottom: 20rpx; margin-bottom: 20rpx;
// .userName{} // .userName{}
.btn1 {
color: $themeColor;
font-size: 30rpx;
}
} }
.leve2 { .leve2 {
@@ -2254,10 +2317,7 @@
.date {} .date {}
.btn1 {
color: $themeColor;
font-size: 30rpx;
}
.btn { .btn {
border: 1px solid $themeColor; border: 1px solid $themeColor;
@@ -2269,15 +2329,18 @@
} }
} }
.leve3.no { .leve3{
.no{
color: #ff9277; color: #ff9277;
text-align: center; text-align: center;}
} .pIng{
color: #55aa00;
.leve3.cantAnswer { }
.cantAnswer{
color: #999; color: #999;
text-align: center; text-align: center;}
} }
} }
} }
} }

View File

@@ -868,48 +868,14 @@
return list return list
}, },
// 改变班级状态 // 改变班级状态
changeClassStatu(statusCode) { changeClassStatu(statusCode) {
// var mm = 0
// mm = await this.getHomeWorkLength()
let that = this let that = this
if (statusCode == '1') { that.opClass(statusCode)
console.log('this.admins', this.admins); // if (statusCode == '1') {
if (this.homeWorkList.length == 0 && this.classModel.isTask == 1) {
uni.showToast({ // } else if (statusCode == '2') {
title: '开班前请发布班内作业,开班后将不可添加和更改', // that.opClass(statusCode)
icon: 'none', // }
duration: 3000
})
return
}
} else if (statusCode == '2') {
var nowTime = Date.now()
// var datecc = new Date(this.thisClass.endTime);
// console.log('datecc...',datecc,nowTime,time3)
var startTime = new Date(this.thisClass.startTime); // 开班时间
var time3 = startTime.getTime(); // 开班时间的时间戳 毫秒
var daysTime = parseInt(this.classModel.days) * 1000 * 60 * 60 * 24
if (nowTime < (time3 + daysTime)) {
uni.showModal({
title: "提示",
content: '是否要提前结班?',
success(res) {
if (res.confirm) {
// return
that.opClass(statusCode)
} else {
return
}
},
})
} else {
console.log('this.statusCode', statusCode);
// return
that.opClass(statusCode)
}
// that.opClass(statusCode)
}
}, },
// 考试周和结班状态下,学员的信息 // 考试周和结班状态下,学员的信息
@@ -980,13 +946,18 @@
}, 500) }, 500)
} else { } else {
uni.showToast({ uni.showToast({
title: res.msg, title: res.errMsg,
icon: 'none', icon: 'none',
duration: 300 duration: 3000
}) })
} }
}).catch(e => { }).catch(e => {
console.log(e, '数据报错') console.log(e, '数据报错')
uni.showToast({
title: res.errMsg,
icon: 'none',
duration: 300
})
}); });
}, },
taskEdit(item) { taskEdit(item) {

View File

@@ -1,5 +1,5 @@
<template> <template>
<view> <view style="min-height: 100vh;">
<!-- 公共组件-每个页面必须引入 --> <!-- 公共组件-每个页面必须引入 -->
<public-module></public-module> <public-module></public-module>
<z-nav-bar title="我的班级"> <z-nav-bar title="我的班级">
@@ -10,7 +10,7 @@
:activeStyle="activeStyle" :scrollable="scrollable" :list="tabList" :activeStyle="activeStyle" :scrollable="scrollable" :list="tabList"
itemStyle="padding-left: 15px; background-color:#fff; padding-right: 15px; height: 50px;"></u-tabs> itemStyle="padding-left: 15px; background-color:#fff; padding-right: 15px; height: 50px;"></u-tabs>
</view> --> </view> -->
<view class="containerBg"> <view class="containerBg" style="background-color: #f6f6f8;">
<view class="subCate flex" v-if="subList1.length> 0"> <view class="subCate flex" v-if="subList1.length> 0">
<text :class="['item',subTabId == item.id ? 'active' : '']" v-for="(item, index) in subList1" <text :class="['item',subTabId == item.id ? 'active' : '']" v-for="(item, index) in subList1"
@click="curseClick(item)" :key="index">{{item.title}}</text> @click="curseClick(item)" :key="index">{{item.title}}</text>

View File

@@ -50,13 +50,13 @@
学员信息{{curReplay.createUser.nickname != null && curReplay.createUser.nickname != '' ? curReplay.createUser.nickname : '匿名用户'}} 学员信息{{curReplay.createUser.nickname != null && curReplay.createUser.nickname != '' ? curReplay.createUser.nickname : '匿名用户'}}
/ {{curReplay.createUser.tel}} / {{curReplay.createUser.tel}}
</view> --> </view> -->
<view class="score" v-show="curReplay.scoreSuccess == 1"> <view class="score" v-show="curReplay.scoreSuccess >= 1">
分数{{curReplay.score}} 分数{{curReplay.score}}
</view> </view>
<view class="score noscore" v-show="curReplay.scoreSuccess == 0"> <view class="score noscore" v-show="curReplay.scoreSuccess == 0">
生成成绩 开始评分
</view> </view>
<template v-if="roleCode.includes('4') || roleCode.includes('5') && curReplay.scoreSuccess != 1"> <template v-if="(roleCode.includes('4') || roleCode.includes('5')) && curReplay.scoreSuccess < 1 && (classState == '3' || classState == '1')">
<view class="" style=" padding: 10rpx 10rpx; margin-top: 20rpx;"> <view class="" style=" padding: 10rpx 10rpx; margin-top: 20rpx;">
<view class="scoreBox flex_box"> <view class="scoreBox flex_box">
<text>分数</text> <text>分数</text>

View File

@@ -65,8 +65,13 @@
<view class="score" v-show="item.scoreSuccess >= 2"> <view class="score" v-show="item.scoreSuccess >= 2">
分数{{item.score}} 分数{{item.score}}
</view> </view>
<view class="score" v-show="item.scoreSuccess < 2"> <view class="score" v-show="item.scoreSuccess < 2 && (classState == '1' || classState == '3')">
正在评分 正在评分
</view>
</template>
<template v-else-if="classState == '1' || classState == '3'">
<view class="noanser" style="color: #999;" v-show="item.scoreSuccess == 0">
等待评分
</view> </view>
</template> </template>
</view> </view>

View File

@@ -64,14 +64,14 @@
<view class="" style="margin-top: 20rpx;"> <view class="" style="margin-top: 20rpx;">
<view class="score" v-if="item.scoreSuccess >= 2"> <view class="score" v-if="item.scoreSuccess >= 2">
分数:{{item.score}} 分数:{{item.score}}
</view> </view>
<view class="score noscore" v-else-if="item.scoreInfo != ''"> <view class="score noscore" v-else-if="item.scoreInfo != '' && (classState == '1' || classState == '3')">
<text v-show="item.scoreInfos < 2 && item.haveGiveScore">等待其他评分员评分</text> <text v-show="item.scoreInfos < 2 && item.haveGiveScore">等待其他评分员评分</text>
<text v-show="item.scoreInfos < 2 && !item.haveGiveScore && roleCode.includes('4')">请您评分</text> <text v-show="item.scoreInfos < 2 && !item.haveGiveScore && roleCode.includes('4')">请您评分</text>
<text v-show="item.scoreInfos < 2 && ( roleCode.includes('1') || roleCode.includes('1') || roleCode.includes('主任') || roleCode.includes('副主任'))">已开始评分</text> <text v-show="item.scoreInfos < 2 && ( roleCode.includes('1') || roleCode.includes('1') || roleCode.includes('主任') || roleCode.includes('副主任'))">已开始评分</text>
<!-- <button v-show="item.scoreInfos >= 2" class="getScore" @click.stop="getRealScore(item.id)" >生成成绩</button> --> <!-- <button v-show="item.scoreInfos >= 2" class="getScore" @click.stop="getRealScore(item.id)" >生成成绩</button> -->
</view> </view>
<view class="score noscore" v-else>未开始评分</view> <view class="score noscore" v-else-if="classState == '1' || classState == '3'">未开始评分</view>
<view class="date"> <view class="date">
{{item.createTime}} {{item.createTime}}
</view> </view>
@@ -113,11 +113,11 @@
分数:{{curReplay.score}} 分数:{{curReplay.score}}
</view> --> </view> -->
<view class="score noscore" v-show="curReplay.scoreSuccess == 0"> <view class="score noscore" v-show="curReplay.scoreSuccess == 0">
生成成绩 开始评分
</view> </view>
<template v-if="roleCode.includes('4') || roleCode.includes('5') && curReplay.scoreSuccess < 2 && (classState == '1' || classState == '3')"> <template v-if="(roleCode.includes('4') || roleCode.includes('5')) && curReplay.scoreSuccess < 2 && (classState == '1' || classState == '3')">
<view class="" style=" padding: 10rpx 10rpx; margin-top: 20rpx;"> <view class="" style=" padding: 10rpx 10rpx; margin-top: 20rpx;">
<view class="scoreBox flex_box"> <view class="scoreBox flex_box">
<text>分数</text> <text>分数</text>
<text v-for="(item, index) in scoreList" @click="setScore(item)" :class="[item == form.score ?'active' : '' ]"> <text v-for="(item, index) in scoreList" @click="setScore(item)" :class="[item == form.score ?'active' : '' ]">
{{item}} 分 {{item}} 分

View File

@@ -54,7 +54,7 @@
学员信息{{curReplay.createUser.nickname != null && curReplay.createUser.nickname != '' ? curReplay.createUser.nickname : '匿名用户'}} 学员信息{{curReplay.createUser.nickname != null && curReplay.createUser.nickname != '' ? curReplay.createUser.nickname : '匿名用户'}}
/ {{curReplay.createUser.tel}} / {{curReplay.createUser.tel}}
</view> </view>
<view class="score" v-show="curReplay.scoreSuccess == 1"> <view class="score" v-show="curReplay.scoreSuccess >= 1">
分数{{curReplay.score}} 分数{{curReplay.score}}
</view> </view>
<view class="score noscore" v-show="curReplay.scoreSuccess == 0"> <view class="score noscore" v-show="curReplay.scoreSuccess == 0">
@@ -62,8 +62,7 @@
</view> </view>
<!-- --> <!-- -->
<template <template
v-if="roleCode.includes('4') && curReplay.scoreSuccess != 1 || v-if="(roleCode.includes('4') || roleCode.includes('5')) && curReplay.scoreSuccess < 1 && (classState == '1' || classState == '3')">
roleCode.includes('5') && curReplay.scoreSuccess != 1 && (classState == '1' || classState == '3')">
<view class="" style=" padding: 10rpx 10rpx; margin-top: 20rpx;"> <view class="" style=" padding: 10rpx 10rpx; margin-top: 20rpx;">
<view class="scoreBox flex_box"> <view class="scoreBox flex_box">
<text>分数</text> <text>分数</text>
@@ -71,12 +70,7 @@
:class="[item == form.score ?'active' : '' ]"> :class="[item == form.score ?'active' : '' ]">
{{item}} {{item}}
</text> </text>
</view> </view>
<!-- <uni-forms :modelValue="form" :rules="rules" ref="form">
<uni-forms-item label="分数" name="score" >
<uni-easyinput type="number" v-model="form.score" placeholder="请输入分数:0-2.5分" />
</uni-forms-item>
</uni-forms> -->
</view> </view>
<view class="btn_box" v-if="classState != '2' && classState != '0'"><button @click="onSubmit"> </button></view> <view class="btn_box" v-if="classState != '2' && classState != '0'"><button @click="onSubmit"> </button></view>
</template> </template>