diff --git a/src/renderer/src/AixPPTist/src/App.vue b/src/renderer/src/AixPPTist/src/App.vue index 74c4b73..7fe9cd8 100644 --- a/src/renderer/src/AixPPTist/src/App.vue +++ b/src/renderer/src/AixPPTist/src/App.vue @@ -74,8 +74,6 @@ const initLoad: Function = () => { !!(opt.ratio??null) && slidesStore.setViewportRatio(opt.ratio)// 有比例配置项 } return PPTApi.getSlideList(resource.id) - // PPTApi.updateWorkList() - // return Promise.resolve() } return Promise.resolve() } diff --git a/src/renderer/src/AixPPTist/src/api/index.ts b/src/renderer/src/AixPPTist/src/api/index.ts index a82ffc4..5e5bcb6 100644 --- a/src/renderer/src/AixPPTist/src/api/index.ts +++ b/src/renderer/src/AixPPTist/src/api/index.ts @@ -50,6 +50,8 @@ export class Utils { }, delay) } } + // 延时 + static sleep = ms => new Promise(resolve => setTimeout(resolve, ms)) } /** ppt相关后端接口处理 */ @@ -84,6 +86,12 @@ export class PPTApi { slidesStore.setWorkItem(workItem) // 没有上课时调用-作业列表 if(!classcourse) this.updateWorkList() + // 没有上课时调用-批量更新缩略图 + if(!classcourse) { + Utils.sleep(1500).then(() => { + this.batchUpdateThumUrl() + }) + } resolve(true) } else msgUtils.msgError(res.msg || '获取数据失败');resolve(false) }) @@ -233,13 +241,20 @@ export class PPTApi { // 批量更新缩略图-异步 static batchUpdateThumUrl() { - return new Promise(async resolve => { + return nextTick().then(async () => { const list = slidesStore.workItem || [] - if (!list.length) return resolve() + if (!list.length) return const upList = [] for (const [ind,o] of list.entries()) { - const thumUrl = await this.getSlideThumUrl(ind) + const isCreate = !o.fileurl // 是否创建 + if (isCreate) { + const thumUrl = await this.getSlideThumUrl(ind) + upList.push({ id: o.id, fileurl: thumUrl }) + } } + if (!upList.length) return + // 批量更新 + return await API_entpcoursefile.batchUpdateNew(upList) }) } diff --git a/src/renderer/src/AixPPTist/src/api/types.ts b/src/renderer/src/AixPPTist/src/api/types.ts index 3678ed4..0beb5ef 100644 --- a/src/renderer/src/AixPPTist/src/api/types.ts +++ b/src/renderer/src/AixPPTist/src/api/types.ts @@ -126,6 +126,8 @@ export class MsgEnum { MSG_homework : 'HOMEWORK', /** @desc: 公屏 - 课堂作业|活动 */ MSG_pushSreen_work : 'pushSreen_work', + /** @desc: 公屏 - 实验 */ + MSG_pushSreen_experiment : 'pushSreen_experiment', /** @desc: 点赞 */ MSG_dz : 'dz', /** @desc: 疑惑 */ diff --git a/src/renderer/src/AixPPTist/src/api/watcher.ts b/src/renderer/src/AixPPTist/src/api/watcher.ts index 34c3294..005aef2 100644 --- a/src/renderer/src/AixPPTist/src/api/watcher.ts +++ b/src/renderer/src/AixPPTist/src/api/watcher.ts @@ -10,6 +10,7 @@ import { MsgEnum } from './types' // 消息枚举 import ChatWs from '@/plugins/socket' // 聊天socket import Classcourse from './classcourse' // 课程相关 import msgUtils from '@/plugins/modal' // 消息工具 +import * as dialogUtils from '@/utils/dialog' // 弹窗-函数 import { Homework } from './index' // api-作业相关 // import emitter from '@/utils/mitt' //mitt 事件总线 import useExecPlay from '../views/Screen/hooks/useExecPlay' // 播放控制 @@ -114,6 +115,10 @@ export default () => { if (!content.id) return Homework.showHomework(content.id) break + case MsgEnum.HEADS.MSG_pushSreen_experiment: // 打开实验: + if (!content.url) return + dialogUtils.openLink(content.url) + break case MsgEnum.HEADS.MSG_closed: // 下课: close() break @@ -137,4 +142,4 @@ export default () => { window.close() // 关闭窗口 }, 1000) } -} +} \ No newline at end of file diff --git a/src/renderer/src/plugins/imChat/msgEnum.js b/src/renderer/src/plugins/imChat/msgEnum.js index a83fed7..42458a2 100644 --- a/src/renderer/src/plugins/imChat/msgEnum.js +++ b/src/renderer/src/plugins/imChat/msgEnum.js @@ -100,6 +100,8 @@ export class MsgEnum { MSG_homework : 'HOMEWORK', /** @desc: 公屏 - 课堂作业|活动 */ MSG_pushSreen_work : 'pushSreen_work', + /** @desc: 公屏 - 实验 */ + MSG_pushSreen_experiment : 'pushSreen_experiment', /** @desc: 点赞 */ MSG_dz : 'dz', /** @desc: 疑惑 */ diff --git a/src/renderer/src/utils/dialog.js b/src/renderer/src/utils/dialog.js new file mode 100644 index 0000000..66b41d3 --- /dev/null +++ b/src/renderer/src/utils/dialog.js @@ -0,0 +1,49 @@ +/** + * 弹窗-函数 + */ +import { h, render } from 'vue' +import { ElDialog } from 'element-plus' + +// 打开弹窗-函数 +export const openDialog = (option, content) => { + let vNode + const body = document.body + const dOpts = { + modelValue: true, + width: 800, + height: 600, + title: '添加-超连接', + draggable: true, + 'onUpdate:modelValue': val => { + if (vNode && !val) render(null, body) + }, + ...option + } + vNode = h(ElDialog, dOpts, { + default: typeof content == 'function' ? content(h) : content + }) + render(vNode, body) +} + +// 打开链接 +export const openLink = (option, title) => { + // https://phet.colorado.edu/sims/html/number-play/latest/number-play_zh_CN.html + const isStr = typeof option == 'string' + const opt = isStr ? {} : option + const url = isStr ? option : option?.url || option?.src || option?.href + const titleNew = isStr? title||'实验室' : option?.title || '添加-超连接' + openDialog({ + title: titleNew, + ...opt + }, (h) => { + return h('iframe', { + src: url, + width: '100%', + style: { + height: 'calc(80vh - 75px)', + }, + scrolling: 'no', + frameborder: '0', + }) + }) +} \ No newline at end of file diff --git a/src/renderer/src/views/classTask/teachClassTask.vue b/src/renderer/src/views/classTask/teachClassTask.vue index 83b5ec9..0d1afe6 100644 --- a/src/renderer/src/views/classTask/teachClassTask.vue +++ b/src/renderer/src/views/classTask/teachClassTask.vue @@ -721,19 +721,23 @@ const msgHandle = (msg) => { const { head, content, ...other } = msg switch(head) { case MsgEnum.HEADS.MSG_closed: // 下课: - Homework.win = null - window.close() // 关闭窗口 - break + Homework.win = null + window.close() // 关闭窗口 + break case MsgEnum.HEADS.MSG_finishHomework: // 跟新作业: console.log('更新作业', head, content) const data = JSON.parse(localStorage.getItem('teachClassWorkItem')); openDialog(data, false); - break + break case MsgEnum.HEADS.MSG_slideFlapping: // 切换页面 console.log('切换页面-关闭窗口') Homework.win = null window.close() // 关闭窗口 - break + break + case MsgEnum.HEADS.MSG_pushSreen_experiment: // 实验: + Homework.win = null + window.close() // 关闭窗口 + break // case 'TIMAddRecvNewMsgCallback': // 收到新消息 data=[] // { // (data||[]).forEach(o => {