Files
medicine_app/pages/miniClass/classInfoMan.vue

2205 lines
56 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view>
<public-module></public-module>
<z-nav-bar title="班级详情">
<!-- <view class="curseSet" slot="right" @click="shuomingPage('/pages/course/courseSet',tagId,pid)">
<uni-icons type="info" size="24"></uni-icons>设置</view> -->
</z-nav-bar>
<!-- <text @click="changeClassStatu('2')">结班</text> -->
<!-- <view class="" style="background-color: #f4f7ff; min-height: calc(100vh - 200rpx);"> -->
<view class="mainContent" v-if="thisClass.id">
<!-- <view class="" style="height: 40rpx;"></view> -->
<view
:class="[
'classStatus',
thisClass.state == '0' ? 'daikai' : '',
thisClass.state == '1' ? 'xuexizhong' : '',
thisClass.state == '2' ? 'yijieban' : '',
thisClass.state == '3' ? 'kaoshizhou' : '',
]"
>
{{ getClassStatus }}
</view>
<view class="flex_box" style="justify-content: space-between">
<view class="" style="flex: 1">
<h3 style="margin-top: 20rpx; font-size: 28rpx">
班级名称{{ thisClass.title }}
</h3>
<view class="welComeText">
<text> 班内职务{{ getRoleName }} </text>
</view>
</view>
<view class="optionsBtn daikaibtn" v-show="thisClass.state == '0'">
<view class="flex_box">
<view
class="item editClass"
@click="
goEditClass(
'/pages/miniClass/addClass',
thisClass.id,
classModel.type
)
"
>
<text>修改班级</text>
</view>
<!-- <view class="item delClass" v-if="thisClass.state == '0' && (roleCode.includes('主任') || roleCode.includes('副主任'))" @click="delClass()"> -->
<view class="item delClass" @click="delClass()">
<text>删除班级</text>
</view>
</view>
</view>
</view>
<view class="pingfenBox">
<!-- 功能按钮 -->
<!-- 已开班按钮 -->
<view class="optionsBtn" v-if="thisClass.state != '2'">
<!-- 待开班主任 -->
<view
class=""
v-if="
thisClass.state == '0' &&
(roleCode.includes('主任') || roleCode.includes('副主任'))
"
>
<view
class="item setBanewei"
v-if="thisClass.state != '2'"
@click="goSetAdmin('/pages/miniClass/memberSet')"
>
<text>设置班委</text>
</view>
</view>
<!-- 待开班班长 -->
<view
class="stepBox"
v-if="
thisClass.state == '0' &&
(roleCode.includes('1') || roleCode.includes('2'))
"
>
<h3 class="PM_font threeStepTitle">快速开班流程</h3>
<view class="flex_box item">
<!-- <i class="PM_font stepItem">1.</i> -->
<view class="textBox">
<text class="PM_font">设置班委</text><br />
<span>开班之前需要完成副班长、学委、评分员的任命</span>
</view>
<view class="btn">
<view
class="item setBanewei"
v-if="admins.list.length < 6"
@click="goSetAdmin('/pages/miniClass/memberSet')"
>
<text>去设置</text>
</view>
<view class="item setBanewei" v-else>
<text>已完成</text>
</view>
</view>
</view>
<view class="flex_box item" v-if="classModel.isTask == 1">
<!-- <i class="PM_font stepItem">2.</i> -->
<view class="textBox">
<text class="PM_font">作业设置</text><br />
<span
>根据教学时长({{ thisClass.homeWorkNumber }} 周),至少发布{{
thisClass.homeWorkNumber > 2
? thisClass.homeWorkNumber - 2
: thisClass.homeWorkNumber
}}周的作业</span
>
</view>
<view class="btn">
<!-- -->
<view
class="item fabuhomework"
v-if="homeWorkList.length < thisClass.homeWorkNumber - 2"
@click="goTaskListForWait('0')"
>
<text>去设置</text>
</view>
<view
class="item fabuhomework"
v-else
@click="goTaskListForWait('0')"
>
<text>已完成</text>
</view>
</view>
</view>
<view class="flex_box item">
<!-- <i class="PM_font stepItem">3.</i> -->
<view class="textBox">
<text class="PM_font">招收学员</text><br />
<span>班级内学员人满后可开班</span>
</view>
<view class="btn" v-if="thisClass.number == students.length">
<view class="item openClass" @click="opClass('1')">
<text>去开班</text>
</view>
<!-- <view class="item openClass disableBtn" v-else>
<text >待开班</text>
</view> -->
</view>
</view>
</view>
<view
class="flex_box"
v-if="thisClass.state == '1' || thisClass.state == '3'"
>
<view
class="item fabuhomework"
@click="goTaskListForWait('0')"
v-if="thisClass.state == '1' && classModel.isTask == 1"
>
<text>作业列表</text>
</view>
<view
class="item yianList"
@click="goTaskListForWait('1')"
v-if="thisClass.state == '1' && classModel.isMedicalcase == 1"
>
<text>医案列表</text>
</view>
<view
class="item setBanewei"
v-if="thisClass.state == '1'"
@click="goSetAdmin('/pages/miniClass/memberSet')"
>
<text>设置班委</text>
</view>
<!-- && thisClass.showOverBtn -->
<!-- <view class="item overClass" @click="changeClassStatu('2')"
v-if="classModel.isExam == 1 && thisClass.state == '3' && (roleCode.includes('1') || roleCode.includes('2'))">
<text>结班</text>
</view> -->
<view
class="item overClass"
@click="changeClassStatu('2')"
v-if="
thisClass.showOverBtn &&
(roleCode.includes('1') || roleCode.includes('2'))
"
>
<!-- (无考试) -->
<text>结班</text>
</view>
</view>
</view>
<view
class="line1"
v-if="thisClass.state == '1' || thisClass.state == '3'"
></view>
<!-- 作业批改 -->
<class-infoWork-blank
v-if="thisClass.state != '0'"
:thisClass="thisClass"
:classModel="classModel"
:roleCode="roleCode"
></class-infoWork-blank>
</view>
<view class="mainBox">
<view class="">
<u-tabs
v-if="tabList.length > 0"
:class="['tabList']"
@click="tabClick"
:current="curTagIndex"
:activeStyle="activeStyle"
:scrollable="scrollable"
:list="tabList"
itemStyle="padding-left:10rpx; background-color:#fff; padding-right: 10rpx; height: 50px; font-size:26rpx"
></u-tabs>
</view>
<!-- 学员列表 -->
<view class="" v-if="tabId == '2'">
<template v-if="students.length > 0">
<view class="" style="overflow: hidden; margin: 20rpx 0">
<text style="font-size: 26rpx; color: #666"
>共 {{ students.length }} 名学员</text
>
<!-- <uni-section class="mb-10 nobg xueyuanTitle" title="班内学员" type="line" sub-title="">共
{{students.length}} 名学员</uni-section> -->
</view>
<template v-if="thisClass.state == '0' || thisClass.state == '1'">
<view class="classMateBox">
<view class="tips">
<view class="flex_box">
<view class="item flex_box">
<span class=""></span><text>普通用户</text>
</view>
<view class="item flex_box">
<span class="superVip"></span><text>超级VIP</text>
</view>
<view class="item flex_box">
<span class="wumenVip"></span><text>医学VIP</text>
</view>
<view class="item flex_box">
<span class="zmVip"></span><text>国学VIP</text>
</view>
</view>
</view>
<view class="newBox">
<view
:class="[
'item',
item.student.vip == '1' ? 'superVip' : '',
item.student.vip == '2' ? 'wumenVip' : '',
item.student.vip == '3' ? 'zmVip' : '',
thisStudent.student &&
thisStudent.student.id == item.student.id
? 'cur'
: '',
]"
v-for="(item, index) in students"
:key="index"
@click="clickStudent(item)"
>
<!-- <view class="imgcontainer" :style="{backgroundImage:surl(item.image)}"> -->
<view class="flexbox align-items_box">
<view class="classmateImg">
<image
v-if="
item.student.avatar != null &&
item.student.avatar != ''
"
:src="item.student.avatar"
mode="aspectFit"
></image>
<image
v-else
src="/static/icon/morenAvavter.png"
mode="aspectFit"
>
</image>
</view>
<view :class="['textItems', 'flex_box']">
<text
class="txt555"
v-if="
item.student.nickname != null &&
item.student.nickname != ''
"
>
{{ item.student.nickname }}
<template>
<text>{{ item.student.tel }}</text>
</template>
</text>
<text class="txt555" v-else> 匿名用户 </text>
<text
@click.stop="outClass(item.student.id)"
class="outBtn"
v-if="
thisClass.state != '2' && thisClass.state != '3'
"
>踢出班级</text
>
<!-- <text class="userType" v-if="item.student.vip == '1'">超级VIP用户</text>
<text class="userType" v-if="item.student.vip == '2' ">医学VIP用户</text>
<text class="userType" v-if="item.student.vip == '3' ">国学VIP用户</text> -->
</view>
</view>
</view>
</view>
</view>
</template>
<template v-if="thisClass.state == '3' || thisClass.state == '2'">
<sutdent-score-list
:students="students"
:classModel="classModel"
:tabId="tabId"
:thisClass="thisClass"
@chooseStudent="chooseStudent"
></sutdent-score-list>
</template>
</template>
<template v-if="students.length == 0">
<view class="">
<u-divider text="暂无学员加入"></u-divider>
</view>
</template>
</view>
<view class="" v-if="tabId == '0'">
<view class="otherItems flex_box">
<view class="itt" v-if="thisClass.state == 0">
<text class="ciyao">创建日期</text>
<text class="mainTxt">{{
thisClass.createTime.substring(0, 10)
}}</text>
</view>
<view
class="itt"
v-if="thisClass.state == 1 || thisClass.state == 3"
>
<text class="ciyao">开班日期</text>
<text class="mainTxt">{{
thisClass.startTime.substring(0, 10)
}}</text>
</view>
<view class="itt" v-if="thisClass.state == 2">
<text class="ciyao">结班日期</text>
<text class="mainTxt">{{
thisClass.endTime.substring(0, 10)
}}</text>
</view>
<view class="itt">
<text class="ciyao">教学时长</text>
<text class="mainTxt">{{ classModel.days }} 天</text>
</view>
<view class="itt"
><text class="ciyao">班级类型</text>
<text class="mainTxt" v-if="classModel.type == '0'"
>普通小班</text
>
<text class="mainTxt" v-if="classModel.type == '1'">联合班</text>
<text class="mainTxt" v-if="classModel.type == '2'">精英班</text>
</view>
<!-- <view @click="onPageJump('/pages/miniClass/studentsInClass', thisClass.id, roleCode)">
<text class="ciyao">学员人数</text>
<view class="mainTxt flex_box">
<text class="">{{students.length}}/{{thisClass.number}}人 </text>
<uni-icons type="eye" size="20" color="#333"></uni-icons>
</view>
</view> -->
<view
><text class="ciyao">管理成员</text
><text class="mainTxt" @click="seeManager">点击查看</text>
</view>
</view>
<uni-section
class="mb-10 nobg"
title="教学目标/班级简介"
type="line"
></uni-section>
<rich-text
class="banjiJianjie"
:nodes="formatRichText(thisClass.content)"
></rich-text>
<view class="qrcode" v-if="thisClass.qrcode != ''">
<uni-section
class="mb-10 nobg"
title="群二维码"
type="line"
></uni-section>
<image
:src="thisClass.qrcode"
mode="widthFix"
@click="previewImage(thisClass.qrcode)"
></image>
</view>
</view>
</view>
</view>
<view>
<u-back-top
:scroll-top="scrollTop"
bottom="60"
:customStyle="bgiStyle"
:iconStyle="iconStyle"
></u-back-top>
</view>
<!-- 管理弹出 -->
<u-popup key="1" :show="showMan" :round="10" @close="closeManager">
<view class="guanli">
<h3>班内管理人员</h3>
<view class="item">
<text class="adminName">班长:</text>
<view
class="personbox"
v-if="admins.monitor.user != null && admins.monitor.id"
>
<text>{{
admins.monitor.user.nickname != null &&
admins.monitor.user.nickname != ""
? admins.monitor.user.nickname
: "匿名用户"
}}</text>
<text v-if="admins.monitor.id"
>({{ admins.monitor.user.tel }})</text
>
</view>
<text v-else>暂未设置</text>
</view>
<view class="item">
<text class="adminName">副班长:</text>
<view
class="personbox"
v-if="admins.dmonitor.user != null && admins.dmonitor.id"
>
<text>{{
admins.dmonitor.user.nickname != null &&
admins.dmonitor.user.nickname != ""
? admins.dmonitor.user.nickname
: "匿名用户"
}}</text>
<text>({{ admins.dmonitor.user.tel }})</text>
</view>
<text v-else>暂未设置</text>
</view>
<view class="item"
><text class="adminName">学习委员:</text>
<view
class="personbox"
v-if="admins.learner.user != null && admins.learner.id"
>
<text>{{
admins.learner.user.nickname != null &&
admins.learner.user.nickname != ""
? admins.learner.user.nickname
: "匿名用户"
}}</text>
<text>({{ admins.learner.user.tel }})</text>
</view>
<text v-else>暂未设置</text>
</view>
<!-- <view class="item arryItem"><text class="adminName">记分员:</text>
<template v-if="admins.counter.length > 0">
<view class="arryItemSub" v-for="(item,index) in admins.counter" :key="index">
<template v-if="item.user != null">
<text>{{item.user.nickname != null && item.user.nickname != '' ? item.user.nickname : '匿名用户'}}</text>
<text>({{item.user.tel}}) </text>
</template>
</view>
</template>
<text v-else>暂未设置</text>
</view> -->
<view class="item arryItem"
><text class="adminName">评分员:</text>
<template v-if="admins.scorer.length > 0">
<view
class="arryItemSub"
v-for="(item, index) in admins.scorer"
:key="index"
>
<template v-if="item.user != null">
<text>{{
item.user.nickname != null && item.user.nickname != ""
? item.user.nickname
: "匿名用户"
}}</text>
<text>({{ item.user.tel }}) </text>
</template>
</view>
</template>
<text v-else>暂未设置</text>
</view>
</view>
</u-popup>
<u-popup
key="2"
v-if="showStudentBlank"
:show="showStudentBlank"
:round="10"
@close="closePup"
ref=""
>
<view class="upopBox" style="">
<h3 style="margin-bottom: 20rpx">
{{
thisStudent.student.nickname != null &&
thisStudent.student.nickname != ""
? thisStudent.student.nickname
: "匿名用户"
}}
</h3>
<view class="item">
<text><b>身份信息:</b></text>
<text v-if="thisStudent.student.vip == '0'">普通用户</text>
<text v-if="thisStudent.student.vip == '1'">超级VIP</text>
<text v-if="thisStudent.student.vip == '2'">医学VIP</text>
<text v-if="thisStudent.student.vip == '3'">国学VIP</text>
</view>
<view class="item">
<text><b>电话:</b>{{ thisStudent.student.tel }}</text>
</view>
<view class="item">
<b>课程购买情况:</b><br />{{ thisStudent.buyState }}
</view>
</view>
</u-popup>
<u-popup
key="3"
v-if="showStudentScoreBlank"
:show="showStudentScoreBlank"
:round="10"
@close="closePup"
ref=""
>
<view class="upopBox manScoreBox" style="">
<h3 style="margin-bottom: 20rpx">
{{
thisStudentScore.user.nickname != null &&
thisStudentScore.user.nickname != ""
? thisStudentScore.user.nickname
: "匿名用户"
}}
</h3>
<view class="item">
<text><b>身份信息:</b></text>
<text v-if="thisStudentScore.user.vip == '0'">普通用户</text>
<text v-if="thisStudentScore.user.vip == '1'">超级VIP</text>
<text v-if="thisStudentScore.user.vip == '2'">医学VIP</text>
<text v-if="thisStudentScore.user.vip == '3'">国学VIP</text>
</view>
<view class="item">
<text><b>电话:</b>{{ thisStudentScore.user.tel }}</text>
</view>
<!-- <view class="item">
<b>课程购买情况:</b><br />{{thisStudent.buyState}}
</view> -->
<view class="scoreBox flex_box flex_between border_radius_10">
<view class="">
<view class="ciyao"> 平时成绩 </view>
<text class="score">{{ thisStudentScore.pingshiScore }}</text>
</view>
<template v-if="classModel.isExam == 1">
<template v-if="thisStudentScore.classExamUsers.length == 0">
<view class="">
<view class="" style="color: #ff9496"> 未参加考试 </view>
</view>
</template>
<template v-else>
<view
class=""
v-for="(item1, index1) in thisStudentScore.classExamUsers"
:key="index1"
>
<view class="ciyao">
{{ index1 == 0 ? "一" : "二" }}次考试成绩
</view>
<view
class="flex_box flex_center"
@click.stop="seePaper(item1.id)"
>
<text class="score">{{ item1.score }}</text>
<view class="seePaper">
<image
src="../../static/icon/testPaperIcon.png"
mode="widthFix"
></image>
</view>
</view>
</view>
</template>
</template>
<!-- && thisClass.state == '2' -->
<!-- <view v-if="classModel.isExam == 1" :class="['PM_font','zhengshu',thisStudent.student.score.certificateType == 'A' ? 'Azheng' : 'Bzheng']"
></view> -->
</view>
</view>
</u-popup>
</view>
</template>
<script>
import sutdentScoreList from "./components/sutdent_score_list.vue";
import debounce from "@/common/debounce.js";
import { ref, onMounted } from "vue";
import classInfoWorkBlank from "@/components/classInfoWorkBlank.vue";
import $http from "@/config/requestConfig.js";
import { mapState } from "vuex";
export default {
data() {
return {
thisStudentScore: undefined, //学生成绩提示框实例
showStudentScoreBlank: false,
scrollTop: 0,
horizontal: "right",
vertical: "bottom",
direction: "vertical",
pattern: {
color: "#7A7E83",
backgroundColor: "#fff",
selectedColor: "#7A7E83",
buttonColor: "#007AFF",
iconColor: "#fff",
},
thisClass: {
showOverBtn: false,
},
students: [],
tabId: "2",
curTagIndex: 0,
scrollable: false,
tabList: [
{
name: "班内学员",
id: "2",
},
{
name: "班级情况",
id: "0",
},
// {
// name: '班内讨论',
// id: '1'
// },
// {
// name: '班内提交',
// id: '3'
// }
],
admins: {
list: [],
monitor: {},
dmonitor: {},
learner: {},
scorer: [],
counter: [],
},
activeStyle: {
color: "#333",
fontWeight: "bold",
// transform: 'scale(1.2)',
// backgroundColor: '#258feb'
},
classModel: {},
courses: [],
classId: undefined,
refresh: true,
userMes: {},
isMonitor: false, // 是管理者
isDirector: false, // 是主任
isHave: false,
showMan: false,
tijiaoTitleList: [
{
name: "班内任务",
id: "0",
},
{
name: "医案",
id: "1",
},
{
name: "心得",
id: "2",
},
],
tijiaoTitleId: "0",
taskList: [], // 任务列表
taskHaveMore: false, // 是否还有更多
roleCode: [], // 角色数组
interval: null,
homeWorkList: [],
thisStudent: {},
showStudentBlank: false,
showAlert: false, // 是否显示考试周
bgiStyle: {
background: "#fff",
},
iconStyle: {
fontSize: "40rpx",
fontWeight: "bold",
color: "#258feb",
},
};
},
onLoad(e) {
uni.hideTabBar();
this.classId = e.id;
this.getRealRole();
// this.interval = setInterval(() => {
// if (this.thisClass.id) {
// uni.showLoading({
// title: '加载中'
// })
this.getUserInfo();
// clearInterval(this.interval)
// console.log('定时清了吗');
// }
// }, 500)
},
onPullDownRefresh() {
this.getClassInfo();
uni.stopPullDownRefresh();
},
beforeDestroy() {
clearInterval(this.interval);
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
onShow() {
this.getClassInfo();
// this.roleCode = await this.getRealRole()
},
components: {
// musicPlay
classInfoWorkBlank,
sutdentScoreList,
},
computed: {
...mapState(["userInfo"]),
getRoleName() {
console.log("执行一次");
var _roleName = "";
// var _code = ''
this.roleCode.forEach((item) => {
switch (item) {
case "主任":
_roleName += " 主任";
break;
case "副主任":
_roleName += " 副主任";
break;
case "0":
_roleName += " 学员";
break;
case "1":
_roleName += " 班长";
break;
case "2":
_roleName += " 副班长";
break;
case "3":
_roleName += " 学习委员";
break;
case "4":
_roleName += " 评分员";
break;
case "5":
_roleName += " 记分员";
break;
}
});
return _roleName;
},
getClassStatus() {
var _roleName = "";
switch (this.thisClass.state) {
case "0":
_roleName = "待开班";
break;
case "1":
_roleName = "学习中";
break;
case "2":
_roleName = "已结班";
break;
case "3":
_roleName = "考试周";
break;
}
return _roleName;
},
},
methods: {
chooseStudent(data) {
console.log("xuesheng", data);
this.thisStudentScore = data;
this.showStudentScoreBlank = true;
// this.thisStudent =
},
closePup() {
this.showStudentBlank = false;
this.showStudentScoreBlank = false;
this.thisStudentScore = undefined;
},
clickTask(item) {
uni.navigateTo({
url: `/pages/miniClass/taskDetailForMan?id=${item.id}&roleCode=${this.roleCode}&type=0&classState=${this.thisClass.state}`,
});
},
goTaskListForWait(type) {
uni.navigateTo({
url: `/pages/miniClass/taskListForWaitOpen?classId=${
this.thisClass.id
}&type=${type}&roleCode=${this.roleCode}&classState=${
this.thisClass.state
}&startTime=${
this.thisClass.startTime
? new Date(this.thisClass.startTime).getTime()
: 0
}`,
});
},
goAddHomeWork(type) {
uni.navigateTo({
url: `/pages/miniClass/addHomeWork?classId=${this.thisClass.id}&type=${type}`,
});
},
goXindeList(url) {
uni.navigateTo({
url: `${url}?classId=${this.thisClass.id}&type=2&roleCode=${this.roleCode}`,
});
},
// 获取真实的身份信息
getRealRole() {
console.log("this.thisClass.id", this.thisClass.id);
$http
.request({
url: "common/class/getUserRole",
method: "POST",
data: {
classId: this.classId,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
uni.hideLoading();
console.log("res获取身份信息", this.thisClass.id, res);
this.roleCode = res.result;
})
.catch((e) => {
uni.hideLoading();
this.roleCode = [];
uni.showToast({
title: "获取身份信息失败",
icon: "error",
});
});
},
goPingfen(url, classId, type) {
uni.navigateTo({
url: `${url}?classId=${classId}&type=${type}&roleCode=${this.roleCode}`,
});
},
goSikaoList(url, id) {
uni.navigateTo({
url: `${url}?classId=${id}&roleCode=${this.roleCode}`,
});
},
delClass() {
if (this.students.length > 0) {
uni.showToast({
title: "已经有学员加入,不可删除班级",
icon: "none",
});
return;
}
var that = this;
uni.showModal({
title: "提示",
content: "您正在执行删除班级操作,是否继续?",
success: function (res) {
if (res.confirm) {
$http
.request({
url: "common/class/delClass",
method: "POST",
data: {
classId: that.thisClass.id,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
uni.showToast({
title: "删除成功",
icon: "success",
});
setTimeout(() => {
uni.switchTab({
url: "/pages/mine/mine/index",
});
}, 500);
})
.catch((e) => {
uni.showToast({
title: "删除失败",
icon: "error",
});
});
}
},
});
},
previewImage(url) {
console.log(url);
uni.previewImage({
urls: [url],
// longPressActions: {
// itemList: ["很抱歉,暂不支持保存图片到本地"],
// success: function(res) {
// // console.log(res,'+++++')
// },
// },
});
},
titleClick(item, textIndex) {
this.tijiaoTitleId = textIndex;
console.log("e班内提交子按钮");
$http
.request({
url: "common/class/getClassTaskList",
method: "POST",
data: {
limit: 20,
page: 1,
classId: this.thisClass.id,
type: textIndex + "", //类型 0班内任务1医案2心得
title: "",
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
console.log("数据获取成功", res.page.records);
this.taskList = res.page.records;
if (res.page.pages > 1) {
this.taskHaveMore = true;
}
}
})
.catch((e) => {
console.log(e, "数据报错");
// this.status = 3
uni.showToast({
title: e.msg,
icon: "error",
});
});
},
clickStudent(item) {
console.log("item", item);
this.thisStudent = item;
this.showStudentBlank = true;
},
getUserInfo() {
// 获取个人信息
if (this.userInfo.id != undefined) {
this.$http
.post("common/user/getUserInfo")
.then((res) => {
uni.hideLoading();
this.userMes = res.result;
this.isMonitor = res.isMonitor;
this.isDirector = res.isDirector;
this.getRealRole();
})
.catch((e) => {
uni.hideLoading();
uni.showToast({
title: "获取用户信息失败",
icon: "none",
});
});
}
},
goSetAdmin(url) {
uni.navigateTo({
url: `${url}?id=${this.thisClass.id}&roleCode=${this.roleCode}`,
});
},
// 跳转
onPageJump(url, id, modeType) {
console.log("type", modeType);
uni.navigateTo({
url: `${url}?id=${id}&type=${modeType}`,
});
},
goEditClass(url, id, modeType) {
uni.navigateTo({
url: `${url}?id=${id}&type=${modeType}&modelTitle=${this.classModel.title}`,
});
},
tabClick(e) {
console.log("e", e);
this.tabId = e.id;
if (e.id == 3) {
this.titleClick(undefined, 0);
}
},
formatRichText(html) {
if (html == "") {
return;
}
//控制图片大小
let newContent = html.replace(/<img[^>]*>/gi, function (match, capture) {
match = match
.replace(/style="[^"]+"/gi, "")
.replace(/style='[^']+'/gi, "");
match = match
.replace(/width="[^"]+"/gi, "")
.replace(/width='[^']+'/gi, "");
match = match
.replace(/height="[^"]+"/gi, "")
.replace(/height='[^']+'/gi, "");
return match;
});
newContent = newContent.replace(
/style="[^"]+"/gi,
function (match, capture) {
match = match
.replace(/width:[^;]+;/gi, "max-width:100%;")
.replace(/width:[^;]+;/gi, "max-width:100%;");
return match;
}
);
newContent = newContent.replace(/<br[^>]*\/>/gi, "");
newContent = newContent.replace(
/\<img/gi,
'<img style="max-width:100%;height:auto;display:inline-block;margin:10rpx auto;"'
);
return newContent;
},
// 显示班级成员
seeManager() {
this.showMan = true;
},
closeManager() {
this.showMan = false;
},
// 获取固定作业的数量
async getHomeWorkLength() {
var list = [];
await $http
.request({
url: "common/class/getClassTaskList",
method: "POST",
data: {
limit: 100,
page: 1,
classId: this.thisClass.id,
type: "0", //类型 0班内任务1医案2心得
title: "",
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
// console.log('班内作业的输俩个',res);
if (res.code == 0) {
list = res.page.records;
}
})
.catch((e) => {
list = [];
console.log("e", e);
});
return list;
},
// 改变班级状态
changeClassStatu(statusCode) {
debounce(async () => {
let that = this;
that.opClass(statusCode);
}, 300);
},
// 考试周和结班状态下,学员的信息
async getStudentScoreList() {
var list = undefined;
await $http
.request({
url: "common/class/userScoreList",
method: "POST",
data: {
classId: parseInt(this.classId),
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
console.log("班状态下,学员的信息", this.classId, res);
// this.userMsg = res.user
// list = studentList
if (res.code == 0) {
res.result.forEach((item) => {
item.task0Score ? "" : (item.task0Score = 0); // 固定任务
item.questionScore ? "" : (item.questionScore = 0); // 思考题
item.task1Score ? "" : (item.task1Score = 0); /// 医案
item.experienceScore ? "" : (item.experienceScore = 0); // 心得
item.pingshiScore =
item.task0Score +
item.questionScore +
item.task1Score +
item.experienceScore;
});
list = res.result;
} else {
uni.showToast({
title: res.errMsg,
icon: "none",
duration: 3000,
});
}
})
.catch((e) => {
list = [];
uni.showToast({
title: e.errMsg,
icon: "none",
duration: 3000,
});
});
return list;
},
// 班级操作
opClass(statusCode) {
uni.showLoading({
title: "正在处理",
});
$http
.request({
url:
statusCode == 1
? "common/class/openClass"
: "common/class/closeClass",
method: "POST",
data: {
classId: this.thisClass.id,
// state: statusCode,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
uni.hideLoading();
if (res.code == 0) {
// that.isHave = true
uni.showToast({
title: "操作成功",
icon: "success",
});
setTimeout(() => {
this.getClassInfo();
if (statusCode == "2") {
// this.allCertificate();
}
}, 500);
} else {
uni.showToast({
title: res.errMsg,
icon: "none",
duration: 3000,
});
}
})
.catch((e) => {
uni.hideLoading();
console.log(e, "数据报错");
uni.showToast({
title: res.errMsg,
icon: "none",
duration: 3000,
});
});
},
// 批量生成证书
allCertificate() {
$http
.request({
url: "common/class/generateCertificateByClassEnd",
method: "POST",
data: {
classId: this.classId,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
console.log("批量生成成功", res);
} else {
console.log("批量生成证书报错", res.errMsg);
}
})
.catch((e) => {
console.log("批量生成证书报错", res.errMsg);
});
},
taskEdit(item) {
console.log("taskEdit".item);
},
seePaper(val) {
// console.log('点击了');
uni.navigateTo({
url: `/pages/miniClass/paperBack?id=${val}`,
});
},
// 退出班级 // 踢出班级
outClass(userId) {
let that = this;
var _useId = undefined;
var _txt = "";
if (userId) {
_useId = userId;
_txt = "即将踢出该学员,是否继续?";
} else {
return;
}
uni.showModal({
title: "提示",
content: `${_txt}`,
success: function (res) {
if (res.confirm) {
// console.log('用户点击确定');
$http
.request({
url: "common/class/quitClass",
method: "POST",
data: {
classId: that.classId,
userId: _useId,
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
that.isHave = true;
uni.showToast({
title: `操作成功!`,
icon: "success",
});
setTimeout(() => {
that.getClassInfo();
}, 2000);
}
})
.catch((e) => {
console.log(e, "数据报错");
// this.status = 3
uni.showToast({
title: `操作失败`,
icon: "error",
});
});
} else if (res.cancel) {
console.log("用户点击取消");
return;
}
},
});
},
showmoreTask() {
uni.navigateTo({
url: `/pages/miniClass/classCaskList?id=${this.thisClass.id}&type=${this.tijiaoTitleId}`,
});
},
async getClassInfo() {
uni.showLoading({
title: "正在加载",
});
$http
.request({
url: "common/class/getClassInfo",
method: "POST", // POST、GET、PUT、DELETE具体说明查看官方文档
data: {
classId: this.classId, // 班类型 0小班 1联合班 2精英班
},
header: {
//默认 无 说明:请求头
"Content-Type": "application/json",
},
})
.then(async (res) => {
console.log("res--------", this.classId, res);
this.refresh = false;
if (res.code == 0) {
// res = classData // 测试数据
this.thisClass = res.result.class;
if (!this.showAlert && this.thisClass.state == "3") {
uni.showModal({
title: "提示",
content:
"您好,当前教学进度已进入考试周,请敦促评分员尽快完成评分工作,考试周结束后将无法评分,感谢您对吴门医述教务的大力支持。",
confirmText: "好的",
showCancel: false,
});
this.showAlert = true;
}
this.classModel = res.result.classModel;
// this.thisClass.showOverBtn = false
// if (this.thisClass.state == '1') {
const nowTime = Date.now();
console.log("starting timer...毫秒", nowTime);
var datecc = new Date(this.thisClass.startTime);
console.log("datecc...", datecc);
var time3 = datecc.getTime(); // 开班时间的时间戳 毫秒
console.log("time3...毫秒", time3, this.classModel.days);
// var off70 = undefined // 时长过70%显示结班按钮天数
// off70 = Math.ceil(parseInt(this.classModel.days) * 0.7)
var off70miniSecond = this.classModel.days * 1000 * 60 * 60 * 24;
console.log("时间比较", off70miniSecond + time3, nowTime);
if (off70miniSecond + time3 <= nowTime) {
console.log("显示结班按钮");
this.thisClass.showOverBtn = true;
} else {
console.log("不显示");
this.thisClass.showOverBtn = false;
}
// console.log('off70...天数', off70, off70miniSecond)
// }
console.log(
"考试res.result.classModel at line 1115:",
res.result.classModel
);
this.thisClass.homeWorkNumber = 0;
if (res.result.classModel.days > 0) {
this.thisClass.homeWorkNumber = Math.ceil(
(res.result.classModel.days - res.result.classModel.examDays) /
7
);
}
this.admins.list = res.result.admins;
this.admins.monitor = {};
this.admins.dmonitor = {};
this.admins.learner = {};
this.admins.scorer = [];
this.admins.counter = [];
if (res.result.admins.length > 0) {
res.result.admins.forEach((item) => {
if (item.role == "1") {
this.admins.monitor = item;
}
if (item.role == "2") {
this.admins.dmonitor = item;
}
if (item.role == "3") {
this.admins.learner = item;
}
if (item.role == "4" && item.user != null) {
// console.log('this.admins.counter',this.admins.counter);
this.admins.scorer.push(item);
}
if (item.role == "5" && item.user != null) {
// console.log('this.admins.counter',this.admins.counter);
this.admins.counter.push(item);
}
});
}
this.courses = res.result.courses;
if (this.thisClass.state == "3" || this.thisClass.state == "2") {
// 考试周 结班状态下的
this.students = await this.getStudentScoreList();
// console.log('students', this.students);
} else {
this.students = res.result.students;
}
this.refresh = true;
if (this.thisClass.state == 0) {
this.homeWorkList = await this.getHomeWorkLength();
}
}
uni.hideLoading();
})
.catch((e) => {
uni.hideLoading();
console.log(e, "数据报错");
// this.status = 3
uni.showToast({
title: `获取数据失败`,
icon: "error",
});
});
},
},
};
</script>
<style lang="scss" scoped>
@import "@/style/mixin.scss";
.upopBox {
padding: 40rpx;
max-height: 80vh;
overflow-y: scroll;
color: #666;
.item {
padding: 10rpx 0;
border-bottom: 1px solid #eee;
}
}
.flexbox {
display: flex;
}
.welComeText {
font-size: 28rpx;
padding: 20rpx 0;
color: #e58d44;
}
.dakai {
.item {
margin-bottom: 10rpx;
width: 100%;
text-align: center;
color: #fff;
padding: 10rpx 6rpx;
border-radius: 6rpx;
text {
padding-top: 0 !important;
}
}
.editClass {
}
.delClass {
}
}
::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;
}
.threeStepTitle {
font-weight: normal;
margin-top: 30rpx;
color: #55aa00;
font-size: 50rpx;
margin-bottom: 20rpx;
}
.stepItem {
font-size: 50rpx;
color: #666;
margin-right: 10rpx;
}
.line1 {
margin: 20rpx 0;
border-bottom: 1px solid #eee;
}
.disableBtn {
background-color: #9f9f9f !important;
}
.stepBox {
.item {
align-items: center;
padding: 10rpx 0;
border-bottom: 1px solid #dddddd;
.textBox {
color: #333 !important;
text-align: left;
margin-right: 10rpx;
flex: 1;
text {
font-size: 40rpx;
color: #333;
}
span {
color: #999;
font-size: 26rpx;
}
}
.btn {
text {
padding: 0 20rpx;
}
}
}
.item:last-child {
border: none !important;
}
}
.optionsBtn {
margin-bottom: 10rpx;
// border-bottom: 1px solid #eee;
padding-bottom: 10rpx;
// margin-top: 20rpx;
.flex_box {
justify-content: space-between;
}
.item {
margin-right: 20rpx;
width: 100%;
text-align: center;
color: #fff;
padding: 20rpx 0;
border-radius: 6rpx;
text {
padding-top: 0 !important;
}
}
.item:last-child {
margin-right: 0 !important;
}
}
.classStatus {
padding: 10rpx;
color: #fff;
text-align: right;
}
.daikai {
background-image: linear-gradient(
-90deg,
#258feb 0%,
rgba(255, 255, 255, 0.1) 80%,
rgba(255, 255, 255, 0) 100%
);
}
.tips {
padding: 20rpx 10rpx;
background-color: #fff;
border-radius: 10rpx;
font-size: 24rpx;
color: #666;
margin: 20rpx 0;
margin-bottom: 30rpx;
.item {
align-items: center;
}
span {
display: inline-block;
margin-right: 10rpx;
border-radius: 4rpx;
width: 30rpx;
height: 30rpx;
background-color: #fff;
border: 1px solid #999;
}
}
.daikaibtn {
margin-top: 20rpx;
margin-left: 20rpx;
.item {
padding: 10rpx 6rpx;
}
}
.xuexizhong {
background-image: linear-gradient(
-90deg,
#55aa00 0%,
rgba(255, 255, 255, 0.1) 80%,
rgba(255, 255, 255, 0) 100%
);
}
.kaoshizhou {
background-image: linear-gradient(
-90deg,
#ffaa00 0%,
rgba(255, 255, 255, 0.1) 80%,
rgba(255, 255, 255, 0) 100%
);
}
.yijieban {
background-image: linear-gradient(
-90deg,
#999 0%,
rgba(255, 255, 255, 0.1) 80%,
rgba(255, 255, 255, 0) 100%
);
}
.delClass {
background-color: #ffa4a6;
}
.openClass {
background-color: #67c23a;
}
.overClass {
background-color: #258feb;
}
.editClass {
background-color: #35a6eb;
}
.fabuhomework {
background-color: #97a1ff;
}
.yianList {
background-color: #55aa7f;
}
.setBanewei {
background-color: #e7b772;
}
.courseBuyOrNo {
font-size: 28rpx;
border-top: 1px solid #eee;
padding-top: 10rpx;
margin-top: 10rpx;
}
.taskEdit {
color: $themeColor;
display: inline-block;
padding-left: 20rpx;
}
.pingfenBox {
border: 2px dotted #bed4ee;
padding: 20rpx;
background-color: rgba(255, 255, 255, 1);
border-radius: 20rpx;
.flex_box {
justify-content: space-between;
}
.item {
text-align: center;
text {
font-size: 28rpx;
display: inline-block;
padding-top: 20rpx;
}
}
// .img {
// width: 100rpx;
// height: 100rpx;
// margin: 0 auto;
// image {
// width: 100%;
// height: 100%;
// }
// }
}
.qrcode {
width: 100%;
image {
width: 200rpx;
height: 200rpx;
}
}
.manBtnBox {
justify-content: center;
text {
width: 30%;
font-size: 28rpx;
padding: 20rpx 0;
border-radius: 10rpx;
display: block;
margin: 0 20rpx;
color: #fff;
}
.edit {
background-color: $themeColor;
}
.del {
background-color: #ffa4a6;
}
.set {
background-color: #ffca7e;
}
}
.zhiliang {
font-size: 28rpx;
}
.showMore {
width: 100%;
text-align: center;
margin: 20rpx 0;
text {
color: $themeColor;
}
}
.submitRecode {
// padding: 20rpx;
.newBox {
.classmateImg {
width: 60rpx !important;
height: 60rpx !important;
image {
width: 60rpx !important;
height: 60rpx;
}
}
.item {
background-color: #fff;
border-radius: 20rpx;
box-shadow: none !important;
// border-bottom: 1px solid #eee;
// border-radius: 0 !important;
.leve1 {
align-items: center;
border-bottom: 1px dashed #eee;
padding-bottom: 20rpx;
margin-bottom: 20rpx;
// .userName{}
}
.leve2 {
color: #999;
@include bov();
}
}
}
}
.nobg {
background-color: transparent !important;
}
::v-deep .xueyuanTitle {
.uni-section-header {
float: left;
}
.uni-section-content {
float: right;
margin-top: 20rpx;
font-size: 26rpx;
}
}
.bottomBox {
border-top: 1px solid #eee;
position: fixed;
padding: 20rpx 0;
text-align: center;
bottom: 0;
left: 0;
z-index: 2;
width: 100%;
background-color: #fff;
button {
width: 80%;
margin: 0 auto;
border-radius: 40rpx;
}
}
.mainContent {
color: #333;
padding: 0 20rpx;
padding-bottom: 120rpx;
background-image: linear-gradient(
30deg,
#d4eaf0 0%,
#d4eaf0 50%,
#fdf0ed 100%
);
min-height: 100vh;
}
.classMateBox {
.zmVip {
background-image: linear-gradient(
-30deg,
#7fd59c 0%,
#e1feef 50%,
#e1feef 100%
);
.outBtn {
color: #fff !important;
border: 1px solid #fff !important;
}
}
.wumenVip {
background-image: linear-gradient(
-30deg,
#71aaf0 0%,
#f1f4fd 50%,
#f1f4fd 100%
);
.outBtn {
color: #fff !important;
border: 1px solid #fff !important;
}
}
.superVip {
background-image: linear-gradient(
-30deg,
#a576c7 0%,
#fdf0ed 30%,
#fdf0ed 100%
);
.outBtn {
color: #fff !important;
border: 1px solid #fff !important;
}
}
.newBox {
flex-wrap: wrap;
.item {
border: 1px solid #fff;
padding: 10rpx;
}
}
.item {
width: 100%;
position: relative;
.textItems {
width: 100%;
align-items: center;
justify-content: space-between;
.outBtn {
padding: 6rpx 10rpx;
display: inline-block;
border-radius: 10rpx;
color: $themeColor;
border: 1px solid $themeColor;
font-size: 26rpx;
margin-left: 10rpx;
}
.txt555 {
font-size: 28rpx;
color: #333;
}
.userType {
position: absolute;
font-size: 26rpx;
right: 30rpx;
top: 8rpx;
color: #fff;
}
}
}
.item.cur {
border: 1px solid #55aa00;
}
}
.classmateImg {
width: 60rpx;
margin-right: 20rpx;
height: 60rpx;
border-radius: 100rpx;
image {
width: 60rpx;
height: 60rpx;
}
}
.mainBox {
margin-top: 40rpx;
.tabList {
border-radius: 20rpx;
overflow: hidden;
margin-bottom: 20rpx;
}
// background-color: #f4f7ff;
}
u-divider {
font-size: 24rpx;
}
.newBox {
.item {
margin-bottom: 20rpx;
background-color: #fff;
border-radius: 20rpx;
@include ptop_bottm(10px);
@include pleft_right(10px);
// @include mshadow(10px, 1)
.imgcontainer {
display: block;
width: 80rpx;
margin-right: 20rpx;
// background-size: cover;
// background-position: center;
height: 120rpx;
flex-grow: 1;
// @include ptop_bottm(10px);
overflow: hidden;
// @include pleft_right(10px);
image {
width: 100%;
height: 120rpx;
}
}
.btn_box {
text-align: right;
text {
border-radius: 20rpx;
padding: 3px 5px;
@include theme("btn_bg");
font-size: 28rpx;
color: #fff;
}
}
.buyItems {
width: 60%;
}
.jianjie {
line-height: 30rpx;
height: 60rpx;
overflow: hidden;
overflow: hidden !important;
margin-top: 10rpx;
font-size: 24rpx;
@include bov();
color: #9c9c9c;
}
.txt555 {
font-size: 30rpx;
color: #000;
@include bov();
}
}
}
.otherItems {
// border: 1px solid #dadada;
padding: 20rpx;
text-align: center;
// background-color: rgba(255, 255, 255, .5);
border-radius: 20rpx;
justify-content: space-around;
margin: 20rpx 0;
.itt {
margin: 0 20rpx;
}
text {
display: block;
font-size: 28rpx;
}
.ciyao {
color: #999;
margin-bottom: 10rpx;
}
}
.tijiaoTitle {
justify-content: space-between;
margin-bottom: 20rpx;
text {
display: block;
width: 30%;
padding: 8rpx 0;
border-radius: 10rpx;
text-align: center;
border: 1px solid $themeColor;
color: $themeColor;
}
text.active {
background-color: $themeColor;
color: #fff;
}
}
.guanli {
padding: 40rpx;
h3 {
text-align: center;
margin-bottom: 20rpx;
color: #333;
}
.item {
color: #333;
margin-bottom: 20rpx;
.personbox {
display: inline-block;
color: #666;
}
}
.arryItem {
.arryItemSub {
display: inline-block;
color: #666;
// padding-left: 80rpx;
}
}
text {
font-size: 30rpx;
}
}
.adminName {
color: #333;
font-size: 30rpx;
font-weight: bold;
}
.banjiJianjie {
color: #666;
font-size: 30rpx;
margin-top: 20rpx;
}
.zhengshu {
width: 80rpx;
height: 80rpx;
background-size: contain;
}
.Azheng {
background-image: url(@/static/icon/Az.png);
}
.Bzheng {
background-image: url(@/static/icon/Bz.png);
}
.scoreBox {
align-items: center;
border: 1px solid #f1f1f1;
margin-top: 20rpx;
text-align: center;
background-color: #fff;
padding: 10rpx 20rpx;
.ciyao {
color: #999;
}
.score {
color: #258feb;
font-weight: bold;
font-size: 36rpx;
}
.seePaper {
width: 50rpx;
height: 50rpx;
image {
width: 100%;
height: 100%;
}
}
}
.className {
padding: 30rpx 0;
position: relative;
h3 {
font-size: 36rpx;
}
text {
color: #fff;
display: inline-block;
padding: 10rpx 20rpx;
border-radius: 10rpx;
position: absolute;
right: 0;
top: 20rpx;
z-index: 1;
}
}
.manScoreBox {
.item {
padding: 20rpx 0;
}
.scoreBox {
margin-top: 20rpx;
padding: 20rpx;
.ciyao {
padding-bottom: 20rpx;
}
}
}
</style>