zdg_dev #152

Merged
zhengdegang merged 3 commits from zdg_dev into main 2024-12-19 16:49:27 +08:00
11 changed files with 212 additions and 72 deletions

View File

@ -4,21 +4,51 @@
import ChatWs from '@/plugins/socket' // 聊天socket import ChatWs from '@/plugins/socket' // 聊天socket
import { sessionStore } from '@/utils/store' // electron-store 状态管理 import { sessionStore } from '@/utils/store' // electron-store 状态管理
import { useClasscourseStore } from '../store'
import * as API_classcourse from '@/api/teaching/classcourse' // 后端api import * as API_classcourse from '@/api/teaching/classcourse' // 后端api
import { MsgEnum } from './types'
// import msgUtils from '@/plugins/modal' // 消息工具
export default () => { export default () => {
const classcourse = sessionStore.get('curr.classcourse') // 课堂信息 const classcourse = sessionStore.get('curr.classcourse') // 课堂信息
const courseId = classcourse?.id // 课堂id
const timgroupid = classcourse?.timgroupid // 群组id const timgroupid = classcourse?.timgroupid // 群组id
const classcourseStore = useClasscourseStore() // 课堂信息-状态管理
if (!ChatWs.ws) ChatWs.init() if (!ChatWs.ws) ChatWs.init()
// 开课消息
const startCourse = async() => {
// await API_classcourse.updateClasscourse({ id: classcourse.id, status: 'open' })
ChatWs.sendMsg('open', {id: courseId})
return Promise.resolve()
}
// 下课消息 // 下课消息
const exitCourse = async() => { const exitCourse = async() => {
if(!timgroupid) throw new Error('未获取到群组ID') if(!timgroupid) throw new Error('未获取到群组ID')
await API_classcourse.updateClasscourse({ id: classcourse.id, status: 'closed' }) await API_classcourse.updateClasscourse({ id: courseId, status: 'closed' })
return ChatWs.closedCourse(timgroupid) return ChatWs.closedCourse(timgroupid)
} }
// 翻页消息
const slideFlapping = (msg:object) => {
return new Promise(async (resolve, reject) => {
const isWs = !!ChatWs.ws && ChatWs.ws.readyState === 1 // 是否有socket连接
if(!timgroupid) return reject('未获取到群组ID')
else if(!isWs) return reject('信异常,请重试!')
const {current: paging, animation: cartoonTimes} = msg || {}
const head = MsgEnum.HEADS.MSG_slideFlapping
ChatWs.sendMsg(head, msg) // 发送消息
API_classcourse.setPaging({ id: courseId, paging, cartoonTimes})
// 更新本地缓存
sessionStore.set('curr.classcourse.paging', paging)
sessionStore.set('curr.classcourse.cartoonTimes', cartoonTimes)
classcourseStore.classcourse.paging = paging
classcourseStore.classcourse.cartoonTimes = cartoonTimes
return resolve(true)
})
}
return { return {
exitCourse,
classcourse,
groupid: timgroupid, groupid: timgroupid,
classcourse,
exitCourse,
slideFlapping,
} }
} }

View File

@ -14,6 +14,7 @@ const slidesStore = useStore.useSlidesStore() // 幻灯片-状态管理
const screenStore = useStore.useScreenStore() // 全屏-状态管理 const screenStore = useStore.useScreenStore() // 全屏-状态管理
const classcourseStore = useStore.useClasscourseStore() // 课堂信息-状态管理 const classcourseStore = useStore.useClasscourseStore() // 课堂信息-状态管理
const classcourse = sessionStore.get('curr.classcourse') // 课堂信息 const classcourse = sessionStore.get('curr.classcourse') // 课堂信息
const isPublic = sessionStore.get('curr.isPublic') // 是否公屏开课
export class Classcourse { export class Classcourse {
msgObj:ElMessageBox = null // 提示消息对象 msgObj:ElMessageBox = null // 提示消息对象
@ -36,8 +37,13 @@ export class Classcourse {
// 如果课堂信息有值则连接socket // 如果课堂信息有值则连接socket
if (isCourse) { if (isCourse) {
// 连接socket // 连接socket
if (!ChatWs.ws) ChatWs.init()
ChatWs.id = classcourse.timgroupid // 群组id ChatWs.id = classcourse.timgroupid // 群组id
if (!ChatWs.ws) {
ChatWs.init().then(_ => {
isPublic && ChatWs.sendMsg('open', {id: classcourse.id})
// isPublic && console.log('socket-开课消息-已发送')
})
}
this.classcourse = classcourse // 课堂信息 this.classcourse = classcourse // 课堂信息
this.id = classcourse.id // 课堂id this.id = classcourse.id // 课堂id
// 如果课堂信息有paging则更新当前页码 // 如果课堂信息有paging则更新当前页码
@ -46,7 +52,7 @@ export class Classcourse {
// 如果课堂信息有paging则更新动画播放状态 // 如果课堂信息有paging则更新动画播放状态
const isAnim = !!cartoonTimes || cartoonTimes === 0 const isAnim = !!cartoonTimes || cartoonTimes === 0
if (isPaging) slidesStore.updateSlideIndex(paging) if (isPaging) slidesStore.updateSlideIndex(paging)
if (isAnim) slidesStore.updateAnimationIndex(cartoonTimes+1) if (isAnim) slidesStore.updateAnimationIndex(cartoonTimes)
// 课堂信息-状态管理 // 课堂信息-状态管理
classcourseStore.setClasscourse(classcourse) classcourseStore.setClasscourse(classcourse)
// 待上课提示 // 待上课提示

View File

@ -124,6 +124,8 @@ export class MsgEnum {
MSG_classlecturePagesrc : 'classlecturePagesrc', MSG_classlecturePagesrc : 'classlecturePagesrc',
/** @desc: 课堂作业|活动 */ /** @desc: 课堂作业|活动 */
MSG_homework : 'HOMEWORK', MSG_homework : 'HOMEWORK',
/** @desc: 公屏 - 课堂作业|活动 */
MSG_pushSreen_work : 'pushSreen-work',
/** @desc: 点赞 */ /** @desc: 点赞 */
MSG_dz : 'dz', MSG_dz : 'dz',
/** @desc: 疑惑 */ /** @desc: 疑惑 */

View File

@ -23,7 +23,7 @@ export default () => {
const classcourseStore = store.useClasscourseStore() // 课堂信息-状态管理 const classcourseStore = store.useClasscourseStore() // 课堂信息-状态管理
const resource = sessionStore.get('curr.resource') // apt 资源 const resource = sessionStore.get('curr.resource') // apt 资源
const smarttalk = sessionStore.get('curr.smarttalk') // 备课资源 const smarttalk = sessionStore.get('curr.smarttalk') // 备课资源
const { execNext, turnPrevSlide } = useExecPlay() const { execNext, turnPrevSlide } = useExecPlay(false) // 不加载钩子
// 监听幻灯片内容变化 // 监听幻灯片内容变化
watch(() => slidesStore.slides, (newVal, oldVal) => { watch(() => slidesStore.slides, (newVal, oldVal) => {
PPTApi.updateSlides(newVal, oldVal) // 更新幻灯片内容 PPTApi.updateSlides(newVal, oldVal) // 更新幻灯片内容
@ -103,9 +103,10 @@ export default () => {
else if (type === 'Previoustep') turnPrevSlide() // 上一步清空-动画 else if (type === 'Previoustep') turnPrevSlide() // 上一步清空-动画
else slidesStore.updateSlideIndex(slideIndex) // 更新幻灯片下标 else slidesStore.updateSlideIndex(slideIndex) // 更新幻灯片下标
break break
case MsgEnum.HEADS.MSG_homework: // 作业|活动-布置 // case MsgEnum.HEADS.MSG_homework: // 作业|活动-布置 不处理
if (!content.classWorkId) return case MsgEnum.HEADS.MSG_pushSreen_work: // 打开-作业|活动
Homework.showHomework(content.classWorkId) if (!content.id) return
Homework.showHomework(content.id)
break break
case MsgEnum.HEADS.MSG_closed: // 下课: case MsgEnum.HEADS.MSG_closed: // 下课:
close() close()

View File

@ -6,8 +6,13 @@ import { KEYS } from '../../../configs/hotkey'
import { ANIMATION_CLASS_PREFIX } from '../../../configs/animation' import { ANIMATION_CLASS_PREFIX } from '../../../configs/animation'
import message from '../../../utils/message' import message from '../../../utils/message'
import emitter from '@/utils/mitt'; import emitter from '@/utils/mitt';
import Chat from '../../../api/chat' // 聊天封装
// import ChatWs from '@/plugins/socket' // 聊天socket
// import { MsgEnum } from '../../../api/types' // 消息枚举
export default () => { export default (isLoader?: boolean = true) => {
// isLoader 是否执行 onMounted, onUnmounted
const chatApi = Chat()
const slidesStore = useSlidesStore() const slidesStore = useSlidesStore()
const classcourseStore = useClasscourseStore() // 课堂信息-状态管理 const classcourseStore = useClasscourseStore() // 课堂信息-状态管理
const { slides, slideIndex, formatedAnimations, animationIndex } = storeToRefs(slidesStore) const { slides, slideIndex, formatedAnimations, animationIndex } = storeToRefs(slidesStore)
@ -71,14 +76,15 @@ export default () => {
elRef.addEventListener('animationend', handleAnimationEnd, { once: true }) elRef.addEventListener('animationend', handleAnimationEnd, { once: true })
} }
} }
if (isLoader) { // 加载相关钩子
onMounted(() => { onMounted(() => {
const firstAnimations = formatedAnimations.value[0] const firstAnimations = formatedAnimations.value[0]
if (firstAnimations && firstAnimations.animations.length) { if (firstAnimations && firstAnimations.animations.length) {
const autoExecFirstAnimations = firstAnimations.animations.every(item => item.trigger === 'auto' || item.trigger === 'meantime') const autoExecFirstAnimations = firstAnimations.animations.every(item => item.trigger === 'auto' || item.trigger === 'meantime')
if (autoExecFirstAnimations) runAnimation() if (autoExecFirstAnimations) runAnimation()
} }
}) })
}
// 撤销元素动画,除了将索引前移外,还需要清除动画状态 // 撤销元素动画,除了将索引前移外,还需要清除动画状态
const revokeAnimation = () => { const revokeAnimation = () => {
@ -142,7 +148,6 @@ export default () => {
inAnimation.value = false inAnimation.value = false
} }
const execNext = (isAsync: boolean) => { const execNext = (isAsync: boolean) => {
console.log('execNext', isAsync)
if (formatedAnimations.value.length && animationIndex.value < formatedAnimations.value.length) { if (formatedAnimations.value.length && animationIndex.value < formatedAnimations.value.length) {
runAnimation(isAsync) runAnimation(isAsync)
} }
@ -178,8 +183,7 @@ export default () => {
// 鼠标滚动翻页 // 鼠标滚动翻页
const mousewheelListener = (e: WheelEvent) => { const mousewheelListener = (e: WheelEvent) => {
// console.log('mousewheel', e) // console.log('mousewheel', e)
// 课堂信息存在时,不允许翻页 e.preventDefault() // 阻止默认事件
if (!!classcourseStore.classcourse) e.preventDefault()
mousewheelListenerThrottle(e) mousewheelListenerThrottle(e)
} }
const mousewheelListenerThrottle = throttle(function(e: WheelEvent) { const mousewheelListenerThrottle = throttle(function(e: WheelEvent) {
@ -210,12 +214,17 @@ export default () => {
} }
} }
// 向上翻页/向下翻页 // 向上翻页/向下翻页
const turning = (e, type) => { const turning = async (e, type) => {
e.preventDefault() // 阻止默认事件 e.preventDefault() // 阻止默认事件
// 课堂信息存在时,不允许翻页
if (!!classcourseStore.classcourse) return
if (type === 'prev') execPrev() if (type === 'prev') execPrev()
else if (type === 'next') execNext() else if (type === 'next') execNext()
if (classcourseStore.classcourse) { // 上课中
const current = slideIndex.value
const animation = animationIndex.value
const animationSteps = type == 'next'?'Nextsteps':'Previoustep'
const msg = { current, animation, animationSteps}
chatApi.slideFlapping(msg)
}
} }
// 快捷键翻页 // 快捷键翻页
const keydownListener = (e: KeyboardEvent) => { const keydownListener = (e: KeyboardEvent) => {
@ -230,10 +239,11 @@ export default () => {
key === KEYS.PAGEDOWN key === KEYS.PAGEDOWN
) turning(e, 'next') ) turning(e, 'next')
} }
if (isLoader) { // 加载相关钩子
onMounted(() => {document.addEventListener('keydown', keydownListener)}) onMounted(() => {document.addEventListener('keydown', keydownListener)})
onUnmounted(() => {document.removeEventListener('keydown', keydownListener)}) onUnmounted(() => {document.removeEventListener('keydown', keydownListener)})
}
// 切换到上一张/上一张幻灯片(无视元素的入场动画) // 切换到上一张/上一张幻灯片(无视元素的入场动画)
const turnPrevSlide = () => { const turnPrevSlide = () => {
slidesStore.updateSlideIndex(slideIndex.value - 1) slidesStore.updateSlideIndex(slideIndex.value - 1)

View File

@ -95,3 +95,11 @@ export function getCourseTeachingMsg(id) {
}) })
} }
export function setPaging(data) {
return request({
url: '/education/classcourse/record/paging',
method: 'post',
data
})
}

View File

@ -0,0 +1,26 @@
/**
* 无限滚动
*/
import { nextTick } from 'vue'
const mountedHook = async (el, binding) => {
console.log(el, binding)
const value = binding.value
if (typeof value !== 'function') return console.error('v-scroll must be a function')
await nextTick()
}
export default {
// Hooks for Vue3
mounted(el, binding) {
mountedHook(el, binding)
},
// Hooks for Vue2
inserted(el, binding) {
mountedHook(el, binding)
},
update(el, binding){
},
updated(el, binding){
},
}

View File

@ -98,6 +98,8 @@ export class MsgEnum {
MSG_classlecturePagesrc : 'classlecturePagesrc', MSG_classlecturePagesrc : 'classlecturePagesrc',
/** @desc: 课堂作业|活动 */ /** @desc: 课堂作业|活动 */
MSG_homework : 'HOMEWORK', MSG_homework : 'HOMEWORK',
/** @desc: 公屏 - 课堂作业|活动 */
MSG_pushSreen_work : 'pushSreen-work',
/** @desc: 点赞 */ /** @desc: 点赞 */
MSG_dz : 'dz', MSG_dz : 'dz',
/** @desc: 疑惑 */ /** @desc: 疑惑 */

View File

@ -3,16 +3,16 @@
<!-- <div class="class-reserv-tabs"> <!-- <div class="class-reserv-tabs">
<el-segmented v-model="tabActive" block :options="tabOptions" size="large" /> <el-segmented v-model="tabActive" block :options="tabOptions" size="large" />
</div>--> </div>-->
<div class="class-reserv-body"> <div class="class-reserv-body" v-infinite-scroll="load">
<template v-for="(item, index) in dataList" :key="index"> <template v-for="(item, index) in dataList" :key="index">
<reserv-item <!-- <reserv-item
:style="{'background-color': index%2==0?'#f5f5f5':''}" :style="{'background-color': index%2==0?'#f5f5f5':''}"
:item="item" :item="item"
v-if="item.bookImg" v-if="item.bookImg"
@open-edit="reservDialog.openDialog(item)" @open-edit="reservDialog.openDialog(item)"
@delete-reserv="deleteReserv(item)" @delete-reserv="deleteReserv(item)"
@change="(...o) => emit('change', ...o)" @change="(...o) => emit('change', ...o)"
></reserv-item> ></reserv-item> -->
<reserv-item-apt <reserv-item-apt
v-if="!item.bookImg" v-if="!item.bookImg"
:style="{'background-color': index%2==0?'#f5f5f5':''}" :style="{'background-color': index%2==0?'#f5f5f5':''}"
@ -22,13 +22,14 @@
@change="(...o) => emit('change', ...o)" @change="(...o) => emit('change', ...o)"
></reserv-item-apt> ></reserv-item-apt>
</template> </template>
<el-divider v-if="page.isEnd">到底了没了</el-divider>
</div> </div>
<reserv ref="reservDialog"></reserv> <reserv ref="reservDialog"></reserv>
</el-container> </el-container>
</template> </template>
<script setup> <script setup>
import { ref, onMounted, computed, watch } from 'vue' import { ref, onMounted, computed, watch, reactive } from 'vue'
import { getSelfReserv } from '@/api/classManage' import { getSelfReserv } from '@/api/classManage'
import { listClasscourseNew } from '@/api/teaching/classcourse' // api import { listClasscourseNew } from '@/api/teaching/classcourse' // api
import ReservItem from '@/views/classManage/reserv-item.vue' import ReservItem from '@/views/classManage/reserv-item.vue'
@ -36,6 +37,7 @@ import Reserv from '@/views/prepare/container/reserv.vue'
import { useToolState } from '@/store/modules/tool' import { useToolState } from '@/store/modules/tool'
import useUserStore from '@/store/modules/user' import useUserStore from '@/store/modules/user'
import ReservItemApt from '@/views/classManage/reserv-item-apt.vue' import ReservItemApt from '@/views/classManage/reserv-item-apt.vue'
import vScroll from '@/directive/scroll' // --
// import Chat from '@/utils/chat' // im // import Chat from '@/utils/chat' // im
// if (!Chat.imChat) Chat.init() // if (!Chat.imChat) Chat.init()
@ -44,6 +46,12 @@ const reservDialog = ref(null)
const tabOptions = ref(['进行中', '已结束']) const tabOptions = ref(['进行中', '已结束'])
const tabActive = ref('进行中') const tabActive = ref('进行中')
const dataList = ref([]) const dataList = ref([])
const page = reactive({
pageNum: 0, //
pageSize: 10, //
total: 0, //
isEnd: false //
})
const toolStore = useToolState() const toolStore = useToolState()
const userStore = useUserStore() const userStore = useUserStore()
@ -72,21 +80,42 @@ const deleteReserv = (item) => {
})*/ })*/
// //
const getData = () => { const getData = () => {
Promise.all([listClasscourseNew({teacherid: userStore.id,evalid: props.curNode.id,pageSize:1000}), getSelfReserv({ex2:props.curNode.id})]).then(([res1,res2])=>{ const { pageNum, pageSize } = page
let list = res2.data || [] const params = {
let list2 = res1.rows || [] evalid: props.curNode.id,
// list.sort((a,b) => { if(a.status=='') return -1; else return 0 }) teacherid: userStore.id,
list = list.concat(list2) pageNum, pageSize
}
listClasscourseNew(params)
.then((res) => {
const list = res.rows || []
const total = res.total || 0
list.sort((a,b) => { return new Date(b.createTime) - new Date(a.createTime) }) list.sort((a,b) => { return new Date(b.createTime) - new Date(a.createTime) })
dataList.value = list dataList.value.push(...list)
page.total = total //
page.isEnd = dataList.value.length == total //
}) })
// aippt+ppt
// Promise.all([listClasscourseNew({teacherid: userStore.id,evalid: props.curNode.id,pageSize:1000}), getSelfReserv({ex2:props.curNode.id})]).then(([res1,res2])=>{
// let list = res2.data || []
// let list2 = res1.rows || []
// // list.sort((a,b) => { if(a.status=='') return -1; else return 0 })
// list = list.concat(list2)
// list.sort((a,b) => { return new Date(b.createTime) - new Date(a.createTime) })
// dataList.value = list
// })
/*getSelfReserv().then((res) => { /*getSelfReserv().then((res) => {
const list = res.data || [] const list = res.data || []
list.sort((a,b) => { if(a.status=='上课中') return -1; else return 0 }) list.sort((a,b) => { if(a.status=='上课中') return -1; else return 0 })
dataList.value = list dataList.value = list
})*/ })*/
} }
//
const load = () => {
if(page.isEnd) return console.log('已加载完-所有') //
page.pageNum++
getData()
}
watch( watch(
() => [dataList,toolStore.isToolWin,props.curNode], () => [dataList,toolStore.isToolWin,props.curNode],
() => { () => {
@ -96,13 +125,14 @@ watch(
} }
) )
onMounted(() => { onMounted(() => {
getData() // // getData() //
}) })
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.class-reserv-wrap { .class-reserv-wrap {
height: 100%; height: 100%;
// height: 300px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
//padding: 15px 10px; //padding: 15px 10px;

View File

@ -61,7 +61,8 @@
<div> <div>
<div v-if="myClassActive.filetype=='apt'">开始新的课堂需要点击先创建课堂才能显示手机二维码</div> <div v-if="myClassActive.filetype=='apt'">开始新的课堂需要点击先创建课堂才能显示手机二维码</div>
<div v-else>开始新的课堂需要点击先创建课堂</div> <div v-else>开始新的课堂需要点击先创建课堂</div>
<el-button type="warning" :loading="dt.loading" @click="createClasscourse">创建课堂</el-button> <el-button type="warning" :loading="dt.loading" @click="createClasscourse()">创建课堂</el-button>
<el-button type="success" @click="createClasscourse(true)">公屏上课</el-button>
</div> </div>
</template> </template>
<!-- 故障备用 --> <!-- 故障备用 -->
@ -146,7 +147,7 @@ const open = async (id, classObj) => {
await getAptInfo(id) await getAptInfo(id)
// //
getClassList() getClassList()
console.log('classObj', classObj) // console.log('classObj', classObj)
// //
if (!!classObj) { if (!!classObj) {
dt.ctCourse = classObj dt.ctCourse = classObj
@ -245,8 +246,8 @@ const getClasscourseList = async type => {
} }
} }
} }
// // isPublic
const createClasscourse = async () => { const createClasscourse = async (isPublic = false) => {
const { classid } = classForm.form const { classid } = classForm.form
if (!classid) { if (!classid) {
ElMessage.warning('请选择班级') ElMessage.warning('请选择班级')
@ -255,8 +256,8 @@ const createClasscourse = async () => {
dt.loading = true dt.loading = true
const { entpcourseid, evalid, id, coursetitle } = myClassActive.value // const { entpcourseid, evalid, id, coursetitle } = myClassActive.value //
const curDate = commUtil.getDateNow('yyyy-MM-dd') const curDate = commUtil.getDateNow('yyyy-MM-dd')
const params = { const params = { // status = open
id: 0, coursetype: '', courseverid: 0, coursedesc: '', status: '', id: 0, coursetype: '', courseverid: 0, coursedesc: '', status: isPublic?'open':'',
teacherid: userStore.id, entpcoursefileid: id, classid, teacherid: userStore.id, entpcoursefileid: id, classid,
entpcourseid, evalid, coursetitle, entpcourseid, evalid, coursetitle,
plandate: curDate, opendate: curDate plandate: curDate, opendate: curDate
@ -274,7 +275,7 @@ const createClasscourse = async () => {
setTimeout(async() => { setTimeout(async() => {
msgEl.close() msgEl.close()
const res = await Http_Classcourse.getClasscourse(teacherForm.form.classcourseid) const res = await Http_Classcourse.getClasscourse(teacherForm.form.classcourseid)
openPublicScreen(res.data) openPublicScreen(res.data, isPublic)
}, 2000); }, 2000);
}, 1000); }, 1000);
} }
@ -355,7 +356,7 @@ const getQrUrl = async() => {
} }
// //
const openPublicScreen = (classcourse) => { const openPublicScreen = (classcourse, isPublic) => {
console.log('打开公屏', classcourse) console.log('打开公屏', classcourse)
if (!dt.ctCourse) { // - if (!dt.ctCourse) { // -
// app // app
@ -366,11 +367,14 @@ const openPublicScreen = (classcourse) => {
const resource = toRaw(myClassActive.value) const resource = toRaw(myClassActive.value)
sessionStore.set('curr.resource', resource) // sessionStore.set('curr.resource', resource) //
sessionStore.set('curr.classcourse', classcourse) // sessionStore.set('curr.classcourse', classcourse) //
//
sessionStore.set('curr.isPublic', isPublic) //
createWindow('open-win', { createWindow('open-win', {
url: '/pptist', // url: '/pptist', //
close: () => { close: () => {
sessionStore.set('curr.resource', null) // sessionStore.set('curr.resource', null) //
sessionStore.set('curr.classcourse', null) // sessionStore.set('curr.classcourse', null) //
sessionStore.set('curr.isPublic', null) //
} }
}) })
visible.value = false // visible.value = false //

View File

@ -364,8 +364,8 @@ export default {
// //
startClass(item, classObj) { startClass(item, classObj) {
// () // ()
// const id = sessionStore.has('activeClass.id') ? sessionStore.get('activeClass.id') : null const iscourse = !!sessionStore.get('curr.classcourse')
// if (id && id == item.id) return ElMessage.warning('') if (iscourse) return ElMessage.warning('公屏已打开,请勿重复操作')
// -store // -store
sessionStore.set('activeClass', item) sessionStore.set('activeClass', item)
this.activeClass = item this.activeClass = item
@ -376,7 +376,8 @@ export default {
this.$refs.calssRef.open(item.fileId, classObj) this.$refs.calssRef.open(item.fileId, classObj)
} }
if(item.fileFlag === 'aippt') { if(item.fileFlag === 'aippt') {
this.$refs.calssRef.open(item.fileId, classObj) if (!!classObj) this.changeClass('continue', classObj) //
else this.$refs.calssRef.open(item.fileId, classObj) //
} }
}, },
// -apt // -apt
@ -384,7 +385,19 @@ export default {
switch(type) { switch(type) {
case 'continue': { // case 'continue': { //
const aptFileId = row.entpcoursefileid const aptFileId = row.entpcoursefileid
this.$refs.calssRef.open(aptFileId, row) const res = await getEntpcoursefile(aptFileId)
if (res.code == 200) {
const resource = res.data
if (resource.filetype != 'aippt') this.$refs.calssRef.open(aptFileId, row)
else {
if (!!sessionStore.get('curr.classcourse')) return ElMessage.warning('公屏已打开,请勿重复操作')
const msgEl = ElMessage.warning({message:'正在打开公屏,请稍后...',duration: 0})
setTimeout(()=>{
msgEl.close()
this.openPublicScreen('class', resource, row) // -
}, 2000)
}
} else ElMessage.error(res.msg||'获取课件信息失败')
break break
} }
case 'close': { // case 'close': { //
@ -437,16 +450,7 @@ export default {
if (row.fileFlag === 'aippt' && !!row.fileId) { if (row.fileFlag === 'aippt' && !!row.fileId) {
const res = await getEntpcoursefile(row.fileId) const res = await getEntpcoursefile(row.fileId)
if (res && res.code === 200) { if (res && res.code === 200) {
sessionStore.set('curr.resource', res.data) // this.openPublicScreen('edit', res.data, row) // -
sessionStore.set('curr.smarttalk', row) // smarttalk
createWindow('open-win', {
url: '/pptist', //
close: () => {
sessionStore.set('curr.resource', null) //
sessionStore.set('curr.smarttalk', null) //
this.asyncAllFile() //
}
})
} else { } else {
ElMessage.warning(res.msg||'文件获取异常!') ElMessage.warning(res.msg||'文件获取异常!')
} }
@ -457,6 +461,8 @@ export default {
} }
case 'wsApp': { // app case 'wsApp': { // app
// console.log('wsApp', row) // console.log('wsApp', row)
window.test = sessionStore
if (!!sessionStore.get('curr.classcourse')) return ElMessage.warning('公屏已打开,请勿重复操作')
const head = MsgEnum.HEADS.MSG_0000 const head = MsgEnum.HEADS.MSG_0000
const data = { id: row.id } const data = { id: row.id }
const type = ChatWs.TYPES.single const type = ChatWs.TYPES.single
@ -471,24 +477,38 @@ export default {
msgEl.close() // msgEl.close() //
const resource = res?.data||{} const resource = res?.data||{}
const classcourse = row const classcourse = row
sessionStore.set('curr.resource', resource) // this.openPublicScreen('class',resource, classcourse) // -
sessionStore.set('curr.classcourse', classcourse) //
createWindow('open-win', {
url: '/pptist', //
close: () => {
sessionStore.set('curr.resource', null) //
sessionStore.set('curr.classcourse', null) //
}
})
break break
} }
default: default:
break break
} }
}, },
/**
* description 打开公屏
* @param {string} type 类型 edit 打开 class 上课
* @param {object} resource 资源信息
* @param {object} currData 当前数据 type: edit/class 备课信息 | 课堂信息
*/
openPublicScreen(type, resource, currData) {
sessionStore.set('curr.resource', resource) //
if (type=='edit') sessionStore.set('curr.smarttalk', currData) // smarttalk
else sessionStore.set('curr.classcourse', currData) //
createWindow('open-win', {
url: '/pptist', //
close: () => {
sessionStore.set('curr.resource', null) //
if (type=='edit') {
sessionStore.set('curr.smarttalk', null) //
this.asyncAllFile() //
} else sessionStore.set('curr.classcourse', null) //
}
})
},
closeChange() { // - closeChange() { // -
// console.log('') // console.log('')
// this.activeClass = null this.activeClass = null
sessionStore.delete('activeClass') sessionStore.delete('activeClass')
}, },
initReserv(id) { initReserv(id) {
@ -904,6 +924,7 @@ export default {
return getSmarttalkPage({ return getSmarttalkPage({
...this.uploadData, ...this.uploadData,
orderByColumn: 'createTime', orderByColumn: 'createTime',
fileFlag: 'aippt',
isAsc: 'desc', isAsc: 'desc',
pageSize: 500 pageSize: 500
}) })