This commit is contained in:
@fawn-nine
2024-09-20 16:19:52 +08:00
parent a0efe173da
commit eec954c991
5 changed files with 296 additions and 85 deletions

View File

@@ -105,13 +105,15 @@
</view>
</view>
</view>
<view class="welc">
<text>欢迎留下你的见解</text>
<text v-if="classList.length > 0" class="className1" @click="gotoClass(classList[0])" >提交到{{classList[0].title}}</text>
</view>
<view class="flex_box flex_center " style="align-items: center;">
<text class="btn" @click="showBlank()">写见解</text>
</view>
<template v-if="classList.length > 0 && classList[0].state == '1'">
<view class="welc">
<text>欢迎留下你的见解</text>
<text class="className1" @click="gotoClass(classList[0])" >提交到{{classList[0].title}}</text>
</view>
<view class="flex_box flex_center " style="align-items: center;">
<text class="btn" @click="showBlank()">写见解</text>
</view>
</template>
</view>
</view>
<view class="" v-else>

View File

@@ -3,15 +3,10 @@
padding: 0 0;
font-size: 28rpx;
;
" class="commonPage commonPageBox">
" class="commonPageeeee commonPageBox">
<!-- 公共组件-每个页面必须引入 -->
<public-module></public-module>
<view class="bg_top">
<u-icon @click="goSetting" class="setIcon" labelColor="#258feb" labelPos="bottom" label="设置" name="setting"
:style="`top:${(10 + statusBarHeight) * 2}rpx`" color="#258feb" size="28"></u-icon>
</view>
<view class="mine_box" :style="`top:${(45 + statusBarHeight) * 2}rpx`">
<view class="bg_top flex_box flex_between">
<view class="per_mes">
<image @click="goUserInfo" :src="userMes.avatar" v-if="userMes.avatar != null"
class="per_mes_img color_shandow"></image>
@@ -20,28 +15,36 @@
<view v-if="userMes.vip == 3" class="user_vip">众妙之门VIP</view>
<view v-if="userMes.vip == 2" class="user_vip">吴门医述VIP</view>
</view>
<image src="@/static/icon/home_icon_logo.png" v-if="userMes.avatar == null"
class="per_mes_img color_shandow"></image>
<view class="userInfoBox" style="width: calc(100% - 220rpx)">
<template>
<view class="name">昵称{{ userMes.nickname ? userMes.nickname : "未设置" }}</view>
</template>
<template v-if="userMes.tel">
<view class="phone">手机号({{ userMes.tel }})</view>
</template>
<template v-if="userMes.email">
<view class="phone email">邮箱({{ userMes.email }})</view>
</template>
<template v-if="userMes.userVip && userMes.vip != 0 && !isAndorid">
<view class="phone email">VIP{{userMes.userVip.endTime.split(" ")[0]}}到期</view>
</template>
<!-- <text class="tong">累计读书5本
<span style="margin: 0 20upx;">|</span> 今日读50分钟
</text> -->
</view>
<br clear="both" />
</view>
<u-icon @click="goSetting" class="setIcon" labelColor="#258feb" labelPos="bottom" label="设置" name="setting"
:style="`top:${(10 + statusBarHeight) * 2}rpx`" color="#258feb" size="28"></u-icon>
</view>
<view class="mine_box" :style="`top:${(45 + statusBarHeight) * 2}rpx`">
<view style="
padding: 20rpx; overflow: hidden;
@@ -581,7 +584,8 @@
.per_mes {
position: relative;
margin: 0rpx 40rpx 60rpx 40rpx;
margin: 20rpx 40rpx;
margin-top: 20rpx;
align-items: center;
display: flex;
align-items: center;
@@ -878,25 +882,22 @@
// background: #d8f8e4 !important;
}
.bg_top {
// background-position: center center;
.bg_top {
padding: 0 30rpx;
height: 30vh;
position: relative;
padding-top: 80rpx;
margin-bottom: 60rpx; overflow: hidden;
// position: relative;
.setIcon {
position: absolute;
right: 30rpx;
// position: absolute;
// right: 30rpx;
// top: 30rpx;
}
}
.mine_box {
width: 100%;
position: absolute;
// top: 90rpx;
left: 0;
padding: 0 0rpx;
}

View File

@@ -4,16 +4,20 @@
<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="stickyyy" offset-top="60" v-if="buyCourseMsg != ''">
<text>{{buyCourseMsg}} 课程未购买</text>
</view> -->
<view :class="['classStatus',
thisClass.state == '0' ? 'daikai' :'',
thisClass.state == '1' ? 'xuexizhong' :'',
thisClass.state == '2' ? 'yijieban' :'',
thisClass.state == '3' ? 'kaoshizhou' :''
]">
班级状态{{getClassStatus}}
</view>
<view class="mainContent" v-if="thisClass.id">
<view :class="['classStatus',
thisClass.state == '0' ? 'daikai' :'',
thisClass.state == '1' ? 'xuexizhong' :'',
thisClass.state == '2' ? 'yijieban' :'',
thisClass.state == '3' ? 'kaoshizhou' :''
]">
班级状态{{getClassStatus}}
</view>
<view class="className">
<view class="className" >
<h3>{{thisClass.title}}</h3>
<text class="tuichu" v-if="thisClass.state == 0 && isHave" @click="outClass()">退出班级</text>
</view>
@@ -138,7 +142,10 @@
@click="clickHelp"></uni-icons>
</view>
</view>
<view :class="['otherItems' ,'flex_box' ,'userScore']">
<view :class="['otherItems' ,'flex_box' ,'userScore',
blankNumber == 1 ? 'alcenterss' : '',
blankNumber == 2 ? 'alcentertt' : '',
]">
<view v-if="classModel.isTask == 1" :class="['ite', blankNumber < 3 ? 'flex_box' : '']">
<text class="ciyao">作业得分</text>
@@ -158,10 +165,10 @@
<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.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>
@@ -205,11 +212,8 @@
<uni-section class="mb-10 nobg" title="群二维码" type="line"></uni-section>
<image :src="thisClass.qrcode" mode="widthFix"></image>
</view>
</view>
<!-- 班内问答 -->
<!-- <view class="" v-if=" tabId == '1'">
班内问答
</view> -->
</view>
<!-- 班内同学 -->
<template v-if="tabId == '2'">
<template v-if="students.length> 0">
@@ -245,14 +249,25 @@
<!-- {{getTijiaoTitleList}} -->
<!-- 班内提交 -->
<view class="" v-if="tabId == '3' && thisClass.state != '0' && isHave">
<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>
</view>
<!-- 班内任务 --><!-- 医案 --> <!-- 心得 -->
<view class="">
<view class="" v-if="tijiaoTitleId == 2 && thisClass.state == '1' && roleCode.includes('0')">
<!-- 课程排序 -->
<view class="courseTab border_radius_10" v-if="questionsList.length > 1">
<view class="flex_box flex_between">
<!-- <view > -->
<text
:class="['item','border_radius_10',curCourseId == item.id ? 'cur' :'']"
@click="clickCourseTab(index,item.id)"
v-for="(item, index) in tabCourseList" :key="index">{{item.title}}</text>
<!-- </view> -->
</view>
</view>
<!-- 班内任务 --><!-- 医案 --> <!-- 心得 --><!-- 思考题 -->
<view class="" v-if="tijiaoTitleId != '3'">
<view class="" style="margin-bottom: 20rpx;" v-if="tijiaoTitleId == 2 && thisClass.state == '1' && roleCode.includes('0')">
<view class="noanser">
<view class="">
<text>快来添加一条记录吧~</text>
@@ -329,6 +344,27 @@
<u-divider text="暂无数据"></u-divider>
</view> -->
</view>
<template v-if="tijiaoTitleId == '3' && questionsList.length > 0 && questionsList[curCourseIndex].chapterList.length > 0">
<view >
<view class="submitRecode questionbox">
<view class="newBox">
<view class="item " v-for="(item, index) in questionsList[curCourseIndex].chapterList"
@click="jumpToVideoPage(item)"
>
<view class=" flex_box">
<view class="pp" style="flex: 1; font-size: 28rpx;" v-html="item.title"></view>
<text v-if="item.reply == null" style="color: #ff9277; font-size: 26rpx;">未作答</text>
<text v-else class="" style="padding-left: 10rpx; color: #55aaff; font-size: 26rpx;">已作答</text>
</view>
<!-- <view class="questJUmp">前往所在章节</view> -->
</view>
</view>
</view>
</view>
</template>
<view class="" v-if="tijiaoTitleId == '3' && questionsList.length > 0 && questionsList[curCourseIndex].chapterList.length == 0">
<u-divider text="本门课程暂无思考题可提交"></u-divider>
</view>
</view>
</view>
</view>
@@ -468,7 +504,9 @@
</view>
</u-popup>
<!-- <z-navigation></z-navigation> -->
<view>
<u-back-top :scroll-top="scrollTop" bottom="60" :customStyle='bgiStyle' :iconStyle="iconStyle"></u-back-top>
</view>
</view>
</template>
@@ -487,7 +525,12 @@
export default {
data() {
return {
buyCourseMsg:'',
fileList1: [],
questionsList:[],
curCourseId:undefined,
curCourseIndex:0,
tabCourseList:[],
showCropper: false,
submitInfo: {
img: undefined, // 证件图
@@ -511,7 +554,7 @@
showSubmitInfoBlank: false,
thisClass: {},
students: [],
tabId: '3',
tabId: undefined,
curTagIndex: 0,
scrollable: false,
pPage: 0,
@@ -608,6 +651,7 @@
},
],
tijiaoTitleId: '0',
tijiaoTitleIndex:0,
taskList: [], // 任务列表
taskHaveMore: false, // 是否还有更多
myExperience: '1',
@@ -621,6 +665,15 @@
firstLoad: true, // 是否是第一次请求
blankNumber: 0,
paperList: [],
scrollTop:0,
bgiStyle: {
background: '#fff'
},
iconStyle: {
fontSize: '40rpx',
fontWeight: 'bold',
color: '#258feb',
},
paperSore: 0, // 最终的笔试成绩
showTestTips: false,
showPaperList: false,
@@ -628,8 +681,12 @@
ingPaper: undefined, // 正在进行中的试卷信息
newCLass: undefined, // 同模型的待开班班级
certificate:undefined, // 证书
// stickyBgColor:'#ff9277',
}
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
onLoad(e) {
uni.hideTabBar();
// #ifdef APP-PLUS
@@ -660,7 +717,9 @@
}
},
onPullDownRefresh() {
this.curTagIndex = 0
// this.curTagIndex = 0
console.log('this.tabId------',this.tabId);
this.getClassInfo()
this.getScore()
this.pPage = 0
@@ -671,8 +730,13 @@
async onShow() {
console.log('this.curTagIndex', this.curTagIndex);
var ss = await this.getClassInfo()
this.curTagIndex = 0
this.getScore()
if(this.thisClass.state == '0' && this.isHave){
this.buyCourseMsg = await this.checkUserCourse()
}
// this.curTagIndex = 0
if(this.thisClass.state != '0'){
this.getScore()
}
if (this.thisClass.state == '3' || this.thisClass.state == '2') {
var ll = await this.getPaperList()
console.log('this.paperList.length', this.paperList.length);
@@ -755,8 +819,12 @@
},
tabList() {
console.log('是否计算tab了')
var ss = this.getBlankNumber
var qq = this.blankNumber
console.log('ss',ss,qq);
var list = []
if (this.thisClass.state == '0' || !this.isHave) {
if (this.thisClass.state == '0' || !this.isHave || qq == 0) {
list = this.tabList01
} else if (this.thisClass.state == '1') {
list = this.tabList02
@@ -764,6 +832,8 @@
console.log('走这里了吗?');
list = this.tabList03
}
this.tabId = list[this.curTagIndex].id
return list
},
@@ -788,8 +858,10 @@
}
// return _list
if(_list.length > 0){
console.log('是否进入了这里666666666666');
this.tijiaoTitleList = _list
this.tijiaoTitleId = this.tijiaoTitleList[0].id
this.titleClick(this.tijiaoTitleList[this.tijiaoTitleIndex],this.tijiaoTitleIndex)
// this.tijiaoTitleId = this.tijiaoTitleList[0].id
}
// this.tabId =
},
@@ -807,12 +879,46 @@
if (this.classModel.isQuestion == 1) {
this.blankNumber++
}
// if(this.classModel.isExam == 1){
// this.blankNumber++
// }
}
},
methods: {
methods: {
// 获得思考题列表及答案
async getQuestionsList(){
var list = []
await $http.request({
url: "common/class/getThinkQuestionListStudent",
method: "POST",
data: {
"classId": this.classId
},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then(async (res) => {
if (res.code == 0) {
if(res.getThinkQuestionListStudent.length > 0){
list = res.getThinkQuestionListStudent
}
}else{
uni.showToast({
title:res.errMsg,
icon:"none"
})
}
}).catch(e => {
console.log('获取思考题报错',e);
uni.showToast({
title:e.errMsg,
icon:"none"
})
});
return list
},
async showSubmit() {
if(this.certificate && this.certificate.id){
// 已生成
@@ -851,6 +957,50 @@
}
});
},
// 全角字符串转半角
async convertToHalfWidth(str) {
const fullWidthChars = "!"#$%&'()*+,-./【】0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
const halfWidthChars = "!\"#$%&'()*+,-./[]0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
let result = "";
for (let i = 0; i < str.length; i++) {
const char = str[i];
const index = fullWidthChars.indexOf(char);
if (index!== -1) {
result += halfWidthChars[index];
} else {
result += char;
}
}
return result;
},
// 检测是否已经购买了全部课程
async checkUserCourse(){
var msg = ''
await $http.request({
url: "common/class/getUserCourseBuy",
method: "POST",
data: {"classId": this.classId},
header: { //默认 无 说明:请求头
'Content-Type': 'application/json'
},
})
.then(async (res) => {
if (res.code == 0) {
if(res.msg != ''){
msg = res.msg
var outputStr = await this.convertToHalfWidth(res.msg)
uni.showModal({
title:'提示',
content:`${outputStr}课程没有购买,请尽快购买班级内教学需要的课程,逾期您将被系统自动踢出班级,感谢您的理解和支持`
})
}
}
}).catch(e => {
console.log('检测是否已经购买了全部课程报错',e);
});
return msg
},
selectImage() {
this.chooseImage()
// .then(res => {
@@ -1231,6 +1381,24 @@
url: `${url}?classId=${classId}&type=${type}`
})
},
clickCourseTab(index, id){
if(this.curCourseIndex == index ){
return
}else{
this.curCourseIndex = index
this.curCourseId = id
}
},
// 跳转到播放页面
jumpToVideoPage(val){
uni.navigateTo({
url: `/pages/course/chapterDetailAndorid?navTitle=${this.questionsList[this.curCourseIndex].courseEntity.title}
&title=${val.title}&courseId=${this.questionsList[this.curCourseIndex].courseEntity.id}
&id=${val.id}&noRecored=false`,
});
},
// 点击作业或者医案,进入详细介绍
clickTask(item) {
// var options = JSON.stringify(item)
@@ -1377,13 +1545,27 @@
})
});
},
titleClick(item, textIndex) {
console.log('进来了吗');
if (this.tijiaoTitleId == textIndex) {
return
}
async titleClick(item, textIndex) {
console.log('进来了吗', item);
if(item.id=='3'){
this.tijiaoTitleId = item.id
this.questionsList = await this.getQuestionsList()
if(this.questionsList.length > 0){
this.curCourseId = this.questionsList[this.curCourseIndex].courseEntity.id
this.tabCourseList = this.questionsList.map( item => {
return item.courseEntity
})
}
}
// if (this.tijiaoTitleId == item.id) {
// console.log(5555555555555555, this.tijiaoTitleId,item.id);
// return
// }
this.tijiaoTitleId = item.id
this.tijiaoTitleIndex = textIndex
console.log('e班内提交子按钮', this.tijiaoTitleId);
this.pPage = 0
this.taskList = []
this.myExperience = '1'
@@ -1471,7 +1653,7 @@
return newContent;
},
// 加入班级
addClass() {
async addClass() {
$http.request({
url: "common/class/joinClass",
method: "POST",
@@ -1482,7 +1664,7 @@
'Content-Type': 'application/json'
},
})
.then(res => {
.then(async res => {
if (res.code == 0) {
this.isHave = true
@@ -1490,8 +1672,9 @@
title: `加入成功!`,
icon: 'success'
})
setTimeout(() => {
setTimeout(async () => {
this.getClassInfo()
this.buyCourseMsg = await this.checkUserCourse()
}, 200)
}
}).catch(e => {
@@ -1656,16 +1839,17 @@
.then(async res => {
console.log('班级信息', res);
this.refresh = false
if (res.code == 0) {
// res = classData // 测试数据
if (res.code == 0) {
this.isHave = res.result.isJoin
this.thisClass = res.result.class
if (this.thisClass.state == '0') {
this.tabId = '0'
} else {
this.tijiaoTitleId = '0'
this.tabId = '3'
}
// if (this.thisClass.state == '0') {
// this.tabId = '0'
// } else {
// this.tijiaoTitleId = '0'
// this.tabId = '3'
// console.log('-------------------+');
// }
this.admins.list = res.result.admins
this.admins.monitor = {}
this.admins.dmonitor = {}
@@ -1707,13 +1891,13 @@
}
this.refresh = true
var ss = this.getTijiaoTitleList
if (this.thisClass.state != 0) {
if (this.thisClass.state != 0 && this.tabId != '3') {
this.pPage = 0
this.taskList = []
if(this.tijiaoTitleList.length > 0){
if (this.firstLoad) {
this.firstLoad = false
this.tijiaoTitleId = this.tijiaoTitleList[0].id
this.tijiaoTitleId = this.tijiaoTitleList[this.tijiaoTitleIndex].id
}
this.getList()
@@ -1935,7 +2119,7 @@
}
}
}
.stickyyy{padding: 20rpx; color: #fff; background-color: #ff9277;}
.chengji {
padding-top: 20rpx;
margin-top: 20rpx;
@@ -1983,7 +2167,8 @@
color: $themeColor;
}
}
.questJUmp{font-size: 28rpx; text-align: center; color: #55aaff;}
.submitRecode {
// padding: 20rpx;
@@ -2063,7 +2248,9 @@
}
}
}
.questionbox{
.leve1{ border: none !important}
}
.zhedie {
@include bov(2);
}
@@ -2122,7 +2309,15 @@
}
}
.courseTab{
margin-bottom: 20rpx; padding: 8rpx;
background:#c6d1d5; line-height: 50rpx; overflow: hidden;
.item{ display: block; text-align: center; height: 50rpx; font-size: 26rpx; width: 100%;
padding:0 6rpx;@include toe(); box-sizing: border-box;
// text{ }
}
.item.cur{ @include mshadow(6px,1);background-color: #fff; }
}
.mainContent {
color: #333;
padding: 0 20rpx;
@@ -2305,7 +2500,12 @@
}
}
}
.alcentertt{
justify-content: space-around !important;
}
.alcenterss{
justify-content: center !important;
}
.otherItems {
// border: 1px solid #dadada;
padding: 20rpx;

View File

@@ -10,9 +10,9 @@
<view class="item " v-for="(item, index) in taskList" @click="clickTask(item)">
<view class="leve1 flex_box">
<text style="font-size: 30rpx; font-weight: blod; flex: 1;">{{item.title}}</text>
<template v-if="item.otherInfo.setNoGiveScoreNumber > 0">
<text v-if="item.otherInfo.setNoGiveScoreNumber > 0 && item.scoreSuccess <= 1" class="red light_text">{{item.otherInfo.setNoGiveScoreNumber}}</text>
<text v-if="item.otherInfo.setNoGiveScoreNumber > 0 && item.scoreSuccess >= 2" class="blue light_text">{{item.otherInfo.setNoGiveScoreNumber}}</text>
<template v-if="item.otherInfo.userNoCount > 0">
<text v-if="item.otherInfo.userNoCount > 0 && item.scoreSuccess <= 1" class="red light_text">{{item.otherInfo.userNoCount}}</text>
<!-- <text v-if="item.otherInfo.userNoCount > 0 && item.scoreSuccess >= 2" class="blue light_text">{{item.otherInfo.userNoCount}}</text> -->
<!-- <text v-else class="score" style="padding-left: 10rpx;">{{item.score}}'</text> -->
</template>
</view>

View File

@@ -255,7 +255,15 @@ $themeBgColor: #EDF6F5 !important;
}
}
}
.commonPageeeee{
width: 100%;
// background-color: #ffffff;
padding: 0 65rpx 40rpx;
// box-sizing: border-box;
// height: calc(100vh - 120rpx);
padding-bottom: 120rpx;
// overflow-y: scroll;
}
.commonPage {
width: 100%;
// background-color: #ffffff;