he2802 3 anos atrás
pai
commit
b0de746267

+ 2 - 0
common/api.js

@@ -15,6 +15,7 @@ import myStudent from './httpList/myStudent.js'
 import order from './httpList/order.js'
 import informUser from './httpList/informUser.js'
 import study from './httpList/study.js'
+import answer from './httpList/answer.js'
 export default {
 	...login,
 	...polyvVideo,
@@ -33,4 +34,5 @@ export default {
 	...order,
 	...informUser,
 	...study,
+	...answer
 }

+ 20 - 0
common/httpList/answer.js

@@ -0,0 +1,20 @@
+import {
+	myRequest
+} from '../request.js'
+export default {
+	//答疑列表
+	answerList(data) {
+		return myRequest({
+			url: '/app/answer/list',
+			method: 'get',
+			data: data
+		})
+	},
+	postAnswer(data) {
+		return myRequest({
+			url: '/app/answer',
+			method: 'post',
+			data: data
+		})
+	}
+}

+ 21 - 0
common/httpList/course.js

@@ -2,6 +2,27 @@ import {
 	myRequest
 } from '../request.js'
 export default {
+	reSectionList(data) {
+		return myRequest({
+			url: '/course/sectionList',
+			method: 'get',
+			data: data
+		})
+	},
+	reChapterList(data) {
+		return myRequest({
+			url: '/course/chapterList',
+			method: 'get',
+			data: data
+		})
+	},
+	reMenuList(data) {
+		return myRequest({
+			url: '/course/menuList',
+			method: 'get',
+			data: data
+		})
+	},
 	menuList(data) {
 		return myRequest({
 			url: '/app/common/course/menuList',

+ 1 - 1
common/request.js

@@ -4,7 +4,7 @@
 import store from '@/store/index.js'
 import api from './api.js'
 var num = 1
-export const BASE_URL = 'http://192.168.1.222:5055'//接口api  http://42.192.164.187:19005
+export const BASE_URL = 'http://42.192.164.187:19005'//接口api  
 
 export const BASE_IMG_URL = 'https://file-dev.xyyxt.net/'//图片上传api  'https://file.xyyxt.net/
 export const tenantId = '867735392558919680'

+ 23 - 1
components/course/courseChapter.vue

@@ -61,9 +61,31 @@ export default {
 		openChapter(item){
 			this.down = !this.down
 			if(!this.down&&this.list.length==0){
-				this.getSectionList(item.id)
+				if(this.isRebuild){
+					this.getReSectionList(item.id,item.courseId,item.moduleId)
+				}else{
+					this.getSectionList(item.id)
+				}
+				
 			}
 		},
+		getReSectionList(chapterId,courseId,moduleId) {
+			let self = this
+			this.$api.reSectionList({chapterId:chapterId,gradeId:this.gradeId,courseId:courseId,rebuild:1,moduleId:moduleId}).then(res => {
+				if(res.data.code==200){
+					for(let i=0;i<res.data.data.length;i++){
+						let item = res.data.data[i]
+						item.id = item.sectionId
+						//判断是否试听
+						item.tryListen = false
+						if(self.goodsAuditionConfigIdList.indexOf(item.id)!==-1){
+							item.tryListen = true
+						}	
+					}
+					self.list = res.data.data
+				}
+			});
+		},
 		getSectionList(chapterId) {
 			let self = this
 			this.$api.sectionList(chapterId).then(res => {

+ 19 - 1
components/course/courseModule.vue

@@ -60,9 +60,27 @@ export default {
 		openModule(item){
 			this.down = !this.down
 			if(!this.down&&this.list.length==0){
-				this.getChapterList(item.id)
+				if(this.isRebuild){
+					this.getReChapterList(item.id,item.courseId)
+				}else{
+					this.getChapterList(item.id)
+				}
+				
 			}
 		},
+		getReChapterList(moduleId,courseId) {
+			let self = this
+			this.$api.reChapterList({moduleId:moduleId,gradeId:this.gradeId,courseId:courseId,rebuild:1}).then(res => {
+				if(res.data.code==200){
+					for(let i=0;i<res.data.data.length;i++){
+						let item = res.data.data[i]
+						item.id = item.chapterId
+						
+					}
+					self.list = res.data.data
+				}
+			});
+		},
 		getChapterList(moduleId) {
 			let self = this
 			this.$api.chapterList(moduleId).then(res => {

+ 31 - 18
components/course/courseSection.vue

@@ -1,26 +1,30 @@
 <template>
 	<view style="display: flex;justify-content: space-between;align-items: center;" @click="getVideo">
-		<view style="display: flex;align-items: center;margin: 20rpx 0;">
-			<view class="tag tagColor1" v-if="menuItem.sectionType==1">录播</view>
-			<view class="tag tagColor2" v-if="menuItem.sectionType==2">直播</view>
-			<view class="tag tagColor3" v-if="menuItem.sectionType==3">回放</view>
-			<view class="t_content">
-			<view v-if="menuItem.sectionType==1" :class="playSectionId==newId?'color1':''">{{menuItem.name}}</view>
-			<view v-if="menuItem.sectionType==2" :class="playSectionId==newId?'color2':''">{{menuItem.name}}</view>
-			<view v-if="menuItem.sectionType==3" :class="playSectionId==newId?'color3':''">{{menuItem.name}}</view>
-				<view style="font-size: 20rpx;color: #FF3B30;" v-if="menuItem.liveStartTime">
-					<view v-if="menuItem.liveStartTime>nowTime">
-						<text>{{$method.timestampToTime(menuItem.liveStartTime)}}</text>-
-						<text>{{$method.timestampToTime(menuItem.liveEndTime)}}</text>
-					</view>
-					<view v-if="menuItem.liveStartTime<=nowTime&&menuItem.liveEndTime>nowTime">
-						<text>直播中</text>
-					</view>
-					<view v-if="menuItem.liveEndTime<nowTime">
-						<text>回放</text>
+		<view style="display: flex;justify-content: space-between;margin: 20rpx 0;width: 100%;">
+			<view style="display: flex;align-items: center;">
+				<view class="tag tagColor1" v-if="menuItem.sectionType==1">录播</view>
+				<view class="tag tagColor2" v-if="menuItem.sectionType==2">直播</view>
+				<view class="tag tagColor3" v-if="menuItem.sectionType==3">回放</view>
+				<view class="t_content">
+				<view v-if="menuItem.sectionType==1" :class="playSectionId==newId?'color1':''">{{menuItem.name}}</view>
+				<view v-if="menuItem.sectionType==2" :class="playSectionId==newId?'color2':''">{{menuItem.name}}</view>
+				<view v-if="menuItem.sectionType==3" :class="playSectionId==newId?'color3':''">{{menuItem.name}}</view>
+					<view style="font-size: 20rpx;color: #FF3B30;" v-if="menuItem.liveStartTime">
+						<view v-if="menuItem.liveStartTime>nowTime">
+							<text>{{$method.timestampToTime(menuItem.liveStartTime)}}</text>-
+							<text>{{$method.timestampToTime(menuItem.liveEndTime)}}</text>
+						</view>
+						<view v-if="menuItem.liveStartTime<=nowTime&&menuItem.liveEndTime>nowTime">
+							<text>直播中</text>
+						</view>
+						<view v-if="menuItem.liveEndTime<nowTime">
+							<text>回放</text>
+						</view>
 					</view>
 				</view>
+				<view v-if="menuItem.sectionType==null">{{menuItem.name}}</view>
 			</view>
+			<view v-if="isRebuild" class="tagRe">待重修</view>
 		</view>
 		<view v-if="menuItem.tryListen&&!isBuy" class="tryBox">
 			试看
@@ -103,6 +107,15 @@ export default {
 </script>
 
 <style scoped>
+	.tagRe{
+		width: 80rpx;
+		height: 28rpx;
+		background: #FF3B30;
+		border-radius: 8rpx;
+		font-size: 20rpx;
+		color: #FFFFFF;
+		text-align: center;
+	}
 	.tryBox{
 		width: 96rpx;
 		height: 48rpx;

+ 72 - 11
pages2/class/detail.vue

@@ -97,19 +97,26 @@
 					<view style="width: 73%;height: 88rpx;margin-bottom: 15rpx;margin-left: 10% ;">
 						<u-input height="78" fixed="true" placeholder="您可以在这里输入答疑内容" type="textarea" :custom-style="inputStyle" v-model="value" />
 					</view>
-					<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;">提交</view>
+					<view style="color: #007AFF;font-size: 30rpx;font-weight: bold;width: 15%;text-align: center;" @click="postContent">提交</view>
 				</view>
-				<view v-for="(item, index) in menuList" style="background-color: #FFFFFF;">
+				<view v-for="(item, index) in answerList" style="background-color: #FFFFFF;">
 					<view class="chat_box">
-						<view><image src="https://file-dev.xyyxt.net/oss/images/avatar/20210623/1624414559368_44562477.png" style="width: 64rpx;height: 64rpx;"></image></view>
-						<view style="margin-left: 15rpx;">
-							<view class="chat1">倪虹洁</view>
-							<view class="chat2">2021/10/31 09:36:23</view>
-							<view class="chat3">老师的课讲得太棒了!</view>
+						<view style="display: flex;">
+							<view><image :src="$method.splitImgHost(item.avatar)" style="width: 64rpx;height: 64rpx;"></image></view>
+							<view style="margin-left: 15rpx;">
+								<view class="chat1">{{item.realname}}</view>
+								<view class="chat2">{{$method.timestampToTime(item.createTime)}}</view>
+								<view class="chat3">{{item.answerText}}</view>
+							</view>
 						</view>
+						<view class="btnReply" @click="replyContent(item)" v-if="item.userId!=userInfo.userId">回复</view>
+						<view v-else class="btnDel" @click="delContent(item)">删除</view>
 					</view>
 					<u-line color="#D6D6DB" />
 				</view>
+				<view v-if="answerList.length==0" style="text-align: center;">
+					暂无记录
+				</view>
 			</view>
 		</view>
 		<!-- 播放前拍照start -->
@@ -203,9 +210,8 @@ export default {
 			gradeId:0,
 			chapterId:0,
 			moduleId:0,
-			reMenuList: [
-			],
-			
+			reMenuList: [],
+			answerList: []
 		};
 	},
 	onUnload() {},
@@ -215,6 +221,7 @@ export default {
 		this.goodsId = uni.getStorageSync('courseGoodsId');
 		this.courseDetail();
 		this.getGoodsDetail()
+		this.getAnswerList()
 		
 	},
 	onShow() {},
@@ -252,6 +259,28 @@ export default {
 		});
 	},
 	methods: {
+		replyContent(item){
+			
+		},
+		delContent(item){
+			
+		},
+		postAnswer() {
+			let self = this;
+			this.$api.postAnswer({ courseId: this.courseId,answerText:this.value }).then(res => {
+				if (res.data.code == 200) {
+					this.$u.toast('发布成功');
+					self.getAnswerList()
+					self.value = ''
+				}
+			});
+		},
+		postContent(){
+			if(!this.value){
+				this.$u.toast('请输入内容');
+			}
+			this.postAnswer()
+		},
 		postStudyRecord(status=0) {
 			let self = this;
 			let data = {
@@ -473,9 +502,17 @@ export default {
 		startVideo() {
 			this.startStatus = true;
 		},
+		getAnswerList() {
+			let self = this;
+			this.$api.answerList({ courseId: this.courseId }).then(res => {
+				if (res.data.code == 200) {
+					self.answerList = res.data.rows;
+				}
+			});
+		},
 		getReMenuList() {
 			let self = this;
-			this.$api.menuList({ courseId: this.courseId,rebuild:1,gradeId:this.gradeId }).then(res => {
+			this.$api.reMenuList({ courseId: this.courseId,rebuild:1,gradeId:this.gradeId }).then(res => {
 				if (res.data.code == 200) {
 					for (let i = 0; i < res.data.rows.length; i++) {
 						let item = res.data.rows[i];
@@ -521,6 +558,29 @@ export default {
 </script>
 
 <style  lang="scss" scope>
+	.btnReply{
+		width: 80rpx;
+		height: 40rpx;
+		background: #E3F0FF;
+		border-radius: 16rpx;
+		text-align: center;
+		color: #007AFF;
+	}
+	.btnDel{
+		width: 80rpx;
+		height: 40rpx;
+		background: #FFEDF0;
+		border-radius: 16rpx;
+		text-align: center;
+		color: #FF2D55;
+	}
+	.btnReply{
+		width: 80rpx;
+		height: 40rpx;
+		background: #E3F0FF;
+		border-radius: 16rpx;
+		font-size: 24rpx;
+	}
 	.photoBox{
 		.photoTop{
 			height: 74upx;
@@ -571,6 +631,7 @@ export default {
 .chat_box {
 	display: flex;
 	padding: 20rpx;
+	justify-content: space-between;
 }
 .chat3 {
 	font-size: 30rpx;