|
|
@@ -186,65 +186,18 @@
|
|
|
<!--笔记 -->
|
|
|
<view v-if="current == 2">
|
|
|
<note-Box
|
|
|
+ :isPlayRebuild="sectionItem.rebuild"
|
|
|
+ :refPlv="refPlv"
|
|
|
@jumpNote="jumpNote"
|
|
|
- :params="params(['orderGoodsId', 'goodsId', 'courseId', 'gradeId'])"
|
|
|
+ :params="params()"
|
|
|
></note-Box>
|
|
|
</view>
|
|
|
<!--答疑 -->
|
|
|
- <view v-show="current == 3" class="Answering">
|
|
|
- <view
|
|
|
- v-for="(item, index) in answerList"
|
|
|
- :key="index"
|
|
|
- style="background-color: #ffffff"
|
|
|
- class="answer_item"
|
|
|
- >
|
|
|
- <view class="chat_box" @click.stop="clearCtx">
|
|
|
- <view style="display: flex; flex: 1">
|
|
|
- <view
|
|
|
- ><image
|
|
|
- :src="
|
|
|
- item.assignUserId > 0 && !item.realname
|
|
|
- ? '/static/logo_xcx.png'
|
|
|
- : $method.splitImgHost(item.avatar)
|
|
|
- "
|
|
|
- style="width: 64rpx; height: 64rpx"
|
|
|
- ></image
|
|
|
- ></view>
|
|
|
- <view style="margin-left: 15rpx">
|
|
|
- <view class="chat1">{{
|
|
|
- item.assignUserId > 0 && !item.realname
|
|
|
- ? "祥粤老师"
|
|
|
- : item.realname
|
|
|
- }}</view>
|
|
|
- <view class="chat2">{{
|
|
|
- $method.timestampToTime(item.createTime, false)
|
|
|
- }}</view>
|
|
|
- <view class="chat3">
|
|
|
- <text v-if="item.assignUserId > 0">回复</text>
|
|
|
- <text v-if="item.assignUserId > 0" style="color: #007aff"
|
|
|
- >@{{ item.assignRealname }}</text
|
|
|
- >
|
|
|
- <view style="word-break: break-all">{{
|
|
|
- item.answerText
|
|
|
- }}</view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- </view>
|
|
|
- <view
|
|
|
- class="btnReply"
|
|
|
- @click.stop="replyContent(item)"
|
|
|
- v-if="item.userId != userInfo.userId"
|
|
|
- >回复</view
|
|
|
- >
|
|
|
- <view v-else class="btnDel" @click.stop="delContent(item)"
|
|
|
- >删除</view
|
|
|
- >
|
|
|
- </view>
|
|
|
- <u-line color="#D6D6DB" />
|
|
|
- </view>
|
|
|
- <view v-if="answerList.length == 0" style="text-align: center"
|
|
|
- >暂无记录</view
|
|
|
- >
|
|
|
+ <view v-show="current == 3">
|
|
|
+ <answer-box
|
|
|
+ :userId="userInfo ? userInfo.userId : 0"
|
|
|
+ :params="params(['orderGoodsId', 'goodsId', 'courseId', 'gradeId'])"
|
|
|
+ ></answer-box>
|
|
|
</view>
|
|
|
<!--目录 -->
|
|
|
<view v-show="current == 4">
|
|
|
@@ -312,71 +265,6 @@
|
|
|
</view>
|
|
|
</view>
|
|
|
</scroll-view>
|
|
|
-
|
|
|
- <!-- 底部固定按钮 -->
|
|
|
- <!-- 笔记的输入框 -->
|
|
|
- <template v-if="current == 2">
|
|
|
- <view
|
|
|
- class="inputBottom"
|
|
|
- v-if="!(isPlayRebuild > 0) && playChannelId == 0"
|
|
|
- :style="{ bottom: bottomHeight + 'px' }"
|
|
|
- >
|
|
|
- <view style="width: 10%"
|
|
|
- ><image
|
|
|
- src="/static/icon/note3.png"
|
|
|
- style="width: 39rpx; height: 39rpx; margin: 0 29rpx"
|
|
|
- ></image
|
|
|
- ></view>
|
|
|
- <view style="width: 73%; height: 100%; padding: 10rpx 0">
|
|
|
- <input
|
|
|
- v-model="noteValue"
|
|
|
- height="60"
|
|
|
- fixed="true"
|
|
|
- placeholder="您可以在这里输入笔记内容"
|
|
|
- type="text"
|
|
|
- :custom-style="inputStyle"
|
|
|
- :adjust-position="false"
|
|
|
- class="input"
|
|
|
- @focus="focusNote"
|
|
|
- @blur="blurNote"
|
|
|
- />
|
|
|
- </view>
|
|
|
- <view
|
|
|
- style="
|
|
|
- color: #007aff;
|
|
|
- font-size: 30rpx;
|
|
|
- font-weight: bold;
|
|
|
- width: 15%;
|
|
|
- text-align: center;
|
|
|
- "
|
|
|
- @click="postNote"
|
|
|
- >提交</view
|
|
|
- >
|
|
|
- </view>
|
|
|
- </template>
|
|
|
- <!-- 答疑的输入框 -->
|
|
|
- <view
|
|
|
- v-if="current == 3"
|
|
|
- class="inputBottom"
|
|
|
- :style="{ bottom: bottomHeight + 'px' }"
|
|
|
- >
|
|
|
- <view class="flex_auto">
|
|
|
- <input
|
|
|
- v-model="ctxValue"
|
|
|
- height="60"
|
|
|
- fixed="true"
|
|
|
- :focus="isFocus"
|
|
|
- :placeholder="placeholder"
|
|
|
- type="text"
|
|
|
- :custom-style="inputStyle"
|
|
|
- :adjust-position="false"
|
|
|
- class="input"
|
|
|
- @focus="focusNote"
|
|
|
- @blur="blur"
|
|
|
- />
|
|
|
- </view>
|
|
|
- <view class="btn" @click="postContent">提交</view>
|
|
|
- </view>
|
|
|
</view>
|
|
|
<!-- 播放前拍照end -->
|
|
|
<u-popup
|
|
|
@@ -690,6 +578,7 @@ import PopupPhoto from "@/components/popup/index.vue";
|
|
|
import myCompressImage from "@/common/compressPhoto.js";
|
|
|
import myPlayer from "../../components/myPlayer/polyvPlayer.vue";
|
|
|
import noteBox from "../../components/course/noteBox.vue";
|
|
|
+import answerBox from "../../components/course/answerBox.vue";
|
|
|
import { mapGetters, mapMutations } from "vuex";
|
|
|
import { lockAction } from "../../utils/lock";
|
|
|
export default {
|
|
|
@@ -701,6 +590,7 @@ export default {
|
|
|
handoutsBox,
|
|
|
myPlayer,
|
|
|
noteBox,
|
|
|
+ answerBox,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
@@ -719,15 +609,6 @@ export default {
|
|
|
startStatus: false,
|
|
|
detail: {},
|
|
|
courseId: 0,
|
|
|
- placeholder:
|
|
|
- "您可以在这里输入笔记内容\n还可以点击左侧图标为笔记加上时间标记",
|
|
|
- inputStyle: {
|
|
|
- background: "rgba(244, 244, 244, 0.98)",
|
|
|
- borderRadius: "24rpx",
|
|
|
- padding: "8rpx",
|
|
|
- marginBottom: "10rpx",
|
|
|
- },
|
|
|
-
|
|
|
menuList: [],
|
|
|
current: 0,
|
|
|
vid: "",
|
|
|
@@ -751,13 +632,6 @@ export default {
|
|
|
chapterId: 0,
|
|
|
moduleId: 0,
|
|
|
reMenuList: [],
|
|
|
- answerList: [],
|
|
|
- assignUserId: 0,
|
|
|
- placeholder: "您可以在这里输入答疑内容",
|
|
|
- ctxValue: "",
|
|
|
- noteList: [],
|
|
|
- noteValue: "",
|
|
|
- noteId: 0,
|
|
|
recordObj: {},
|
|
|
isTaking: true, //是否正在拍照
|
|
|
needSeek: false, //第一次播放是否需要跳转
|
|
|
@@ -771,11 +645,9 @@ export default {
|
|
|
uploadLock: false, //上传图片
|
|
|
isPlayRebuild: false, //是否正在播放重修视频needOpen
|
|
|
isRebuild: false, //视频是否从重修目录点击
|
|
|
- isFocus: false,
|
|
|
clearTimer: null,
|
|
|
livingItem: "",
|
|
|
option: null,
|
|
|
- bottomHeight: 0,
|
|
|
toggleCourseShow: false, // 切换课程弹窗
|
|
|
courseList: [], // 课程列表
|
|
|
reStart: false, // 是否显示模块/章/节
|
|
|
@@ -1426,7 +1298,6 @@ export default {
|
|
|
async initPlayVideo(sectionItem) {
|
|
|
this.moduleId = sectionItem.moduleId;
|
|
|
this.chapterId = sectionItem.chapterId;
|
|
|
- this.sectionItem = sectionItem;
|
|
|
if (sectionItem.sectionType == 1) {
|
|
|
//录播
|
|
|
await this.getPhotoLastRecord(); // 获取拍照历史
|
|
|
@@ -2023,11 +1894,10 @@ export default {
|
|
|
this.needSeek = true; //需要跳转到播放记录
|
|
|
}
|
|
|
this.startStatus = true;
|
|
|
- //获取节笔记
|
|
|
- this.getNoteList();
|
|
|
},
|
|
|
//正常播放视频
|
|
|
async playVideo(item) {
|
|
|
+ this.sectionItem = item;
|
|
|
if (this.timer) {
|
|
|
clearInterval(this.timer);
|
|
|
}
|
|
|
@@ -2080,43 +1950,6 @@ export default {
|
|
|
this.refPlv.seekVideo(item.noteSecond);
|
|
|
}
|
|
|
},
|
|
|
- postNote() {
|
|
|
- let self = this;
|
|
|
- if (!(this.playSectionId > 0)) {
|
|
|
- this.$u.toast("目前无播放视频");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.noteValue) {
|
|
|
- this.$u.toast("请输入内容");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.gradeId) {
|
|
|
- this.$u.toast("暂无班级数据");
|
|
|
- return;
|
|
|
- }
|
|
|
- let noteSecond = this.refPlv.playCurrentTime();
|
|
|
- if (!noteSecond) {
|
|
|
- this.$u.toast("视频暂未开始");
|
|
|
- return;
|
|
|
- }
|
|
|
- let data = {
|
|
|
- gradeId: this.gradeId,
|
|
|
- goodsId: this.goodsId,
|
|
|
- sectionId: this.playSectionId,
|
|
|
- courseId: this.courseId,
|
|
|
- noteText: this.noteValue,
|
|
|
- noteDate: this.$method.getZeroTime(),
|
|
|
- noteSecond: noteSecond,
|
|
|
- orderGoodsId: this.orderGoodsId,
|
|
|
- };
|
|
|
- this.$api.postNote(data).then((res) => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.$u.toast("发布成功");
|
|
|
- self.getNoteList();
|
|
|
- this.noteValue = "";
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
getGradeInfo() {
|
|
|
// 即刻 1 待定2 日期3
|
|
|
return this.$api.goodsGradeInfo(this.gradeId).then((res) => {
|
|
|
@@ -2141,96 +1974,6 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
- getNoteList() {
|
|
|
- if (this.current != 2) {
|
|
|
- return;
|
|
|
- }
|
|
|
- this.noteList = [];
|
|
|
- let data = {
|
|
|
- courseId: this.courseId,
|
|
|
- gradeId: this.gradeId,
|
|
|
- goodsId: this.goodsId,
|
|
|
- orderGoodsId: this.orderGoodsId,
|
|
|
- };
|
|
|
- if (this.playSectionId > 0) {
|
|
|
- data.sectionId = this.playSectionId;
|
|
|
- }
|
|
|
- this.$api.noteList(data).then((res) => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.noteList = res.data.rows;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- delAnswer(answerId) {
|
|
|
- let self = this;
|
|
|
- let data = {
|
|
|
- answerId: answerId,
|
|
|
- status: -1,
|
|
|
- orderGoodsId: this.orderGoodsId,
|
|
|
- };
|
|
|
- this.$api.delAnswer(data).then((res) => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- self.getAnswerList();
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- clearCtx() {
|
|
|
- this.placeholder = "您可以在这里输入答疑内容";
|
|
|
- this.ctxValue = "";
|
|
|
- this.assignUserId = 0;
|
|
|
- },
|
|
|
- focusNote(event) {
|
|
|
- this.bottomHeight = event.detail.height;
|
|
|
- },
|
|
|
- blurNote() {
|
|
|
- this.bottomHeight = 0;
|
|
|
- },
|
|
|
- blur() {
|
|
|
- this.bottomHeight = 0;
|
|
|
- this.clearTimer = setTimeout(() => {
|
|
|
- this.ctxValue = "";
|
|
|
- this.isFocus = false;
|
|
|
- this.assignUserId = 0;
|
|
|
- this.placeholder = "您可以在这里输入答疑内容";
|
|
|
- }, 2000);
|
|
|
- },
|
|
|
- replyContent(item) {
|
|
|
- this.isFocus = true;
|
|
|
- this.assignUserId = item.userId;
|
|
|
- this.placeholder = "@" + item.realname;
|
|
|
- },
|
|
|
- delContent(item) {
|
|
|
- this.delAnswer(item.answerId);
|
|
|
- },
|
|
|
- postAnswer() {
|
|
|
- let self = this;
|
|
|
- let data = {
|
|
|
- courseId: this.courseId,
|
|
|
- answerText: this.ctxValue,
|
|
|
- goodsId: this.goodsId,
|
|
|
- orderGoodsId: this.orderGoodsId,
|
|
|
- };
|
|
|
- if (this.assignUserId > 0) {
|
|
|
- data.assignUserId = this.assignUserId;
|
|
|
- }
|
|
|
- this.$api.postAnswer(data).then((res) => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.$u.toast("发布成功");
|
|
|
- self.getAnswerList();
|
|
|
- this.isFocus = false;
|
|
|
- this.placeholder = "您可以在这里输入答疑内容";
|
|
|
- this.ctxValue = "";
|
|
|
- this.assignUserId = 0;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- postContent() {
|
|
|
- if (!this.ctxValue || this.ctxValue == "") {
|
|
|
- this.$u.toast("请输入内容");
|
|
|
- return;
|
|
|
- }
|
|
|
- this.postAnswer();
|
|
|
- },
|
|
|
postStudyRecord(status = 0, sectionId = this.playSectionId) {
|
|
|
console.log(this.refPlv, "this.refPlv");
|
|
|
let currentTime = this.refPlv.playCurrentTime();
|
|
|
@@ -2490,7 +2233,7 @@ export default {
|
|
|
}).then((res) => {});
|
|
|
},
|
|
|
timeupdate(time) {
|
|
|
- console.log("播放中", time);
|
|
|
+ // console.log("播放中", time);
|
|
|
this.clearPauseTimer();
|
|
|
if (this.playSecIsLearn && (this.erJianErZao || this.photoNum > 0)) {
|
|
|
this.isReach = false;
|
|
|
@@ -2933,19 +2676,6 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
- getAnswerList() {
|
|
|
- this.$api
|
|
|
- .answerList({
|
|
|
- courseId: this.courseId,
|
|
|
- goodsId: this.goodsId,
|
|
|
- orderGoodsId: this.orderGoodsId,
|
|
|
- })
|
|
|
- .then((res) => {
|
|
|
- if (res.data.code == 200) {
|
|
|
- this.answerList = res.data.rows;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
getReMenuList() {
|
|
|
let self = this;
|
|
|
this.$api
|
|
|
@@ -3181,29 +2911,6 @@ export default {
|
|
|
font-size: 28rpx;
|
|
|
line-height: 80rpx;
|
|
|
}
|
|
|
-.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;
|
|
|
-}
|
|
|
|
|
|
.lecture-content {
|
|
|
background: #fff;
|
|
|
@@ -3347,31 +3054,6 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-.chat_box {
|
|
|
- display: flex;
|
|
|
- padding: 20rpx;
|
|
|
- justify-content: space-between;
|
|
|
-}
|
|
|
-.chat3 {
|
|
|
- font-size: 30rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #666666;
|
|
|
- margin-top: 10rpx;
|
|
|
-}
|
|
|
-.chat2 {
|
|
|
- font-size: 20rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #999999;
|
|
|
- margin-top: 10rpx;
|
|
|
-}
|
|
|
-.chat1 {
|
|
|
- font-size: 24rpx;
|
|
|
- font-family: PingFang SC;
|
|
|
- font-weight: 500;
|
|
|
- color: #333333;
|
|
|
-}
|
|
|
|
|
|
.tBox {
|
|
|
display: flex;
|
|
|
@@ -3383,50 +3065,6 @@ export default {
|
|
|
color: #999999;
|
|
|
}
|
|
|
|
|
|
-.Answering {
|
|
|
- .answer_item {
|
|
|
- &:nth-child(2) {
|
|
|
- border-radius: 16rpx 16rpx 0rpx 0rpx;
|
|
|
- }
|
|
|
- &:nth-last-child(1) {
|
|
|
- border-radius: 0rpx 0rpx 16rpx 16rpx;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-.inputBottom {
|
|
|
- position: fixed;
|
|
|
- left: 0;
|
|
|
- bottom: 0;
|
|
|
- background: #ffffff;
|
|
|
- height: 98rpx;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- width: 100%;
|
|
|
-
|
|
|
- .flex_auto {
|
|
|
- flex: 1;
|
|
|
- margin-left: 10%;
|
|
|
- word-break: break-all;
|
|
|
- // .input {
|
|
|
- // height: 60rpx;
|
|
|
- // }
|
|
|
- }
|
|
|
-
|
|
|
- .btn {
|
|
|
- color: #007aff;
|
|
|
- font-size: 30rpx;
|
|
|
- font-weight: bold;
|
|
|
- width: 15%;
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
- .input {
|
|
|
- background: rgba(244, 244, 244, 0.98);
|
|
|
- height: 60rpx;
|
|
|
- border-radius: 24rpx;
|
|
|
- margin-top: 12rpx;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
.t_content1 {
|
|
|
color: #007aff;
|
|
|
margin-left: 10rpx;
|