This commit is contained in:
zhangxuelin 2024-12-26 16:49:31 +08:00
commit d866f546bc
4 changed files with 59 additions and 22 deletions

View File

@ -97,14 +97,30 @@ export class PPTApi {
}) })
} }
/**
* @description slide
* @param slides
* @param slideAll
* @returns
*/
static async addSlideServer(slides: object[], slideAll: object[]) {
const resource = sessionStore.get('curr.resource')||{}
for(const slide of slides){
slide.id = resource.id // 覆盖默认随机id
await this.addSlide(slide)
}
await this.batchUpdateSlides(slideAll, true) // 批量更新-排序
return PPTApi.getSlideList(resource.id) // 更新幻灯片列表以及活动相关
}
// 新增幻灯片 // 新增幻灯片
static addSlide(data: object): Promise<Boolean> { static addSlide(data: object): Promise<Boolean> {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const enpt = sessionStore.get('curr.entp')||{} const enpt = sessionStore.get('curr.entp')||{}
const resource = sessionStore.get('curr.resource')||{} // const resource = sessionStore.get('curr.resource')||{}
const {id, ...content} = data const {id, ...content} = data
const params = { const params = {
parentid: resource.id, parentid: id,
entpid: userStore.user.deptId, entpid: userStore.user.deptId,
entpcourseid: enpt.id, entpcourseid: enpt.id,
ppttype: 'file', ppttype: 'file',
@ -126,7 +142,7 @@ export class PPTApi {
// msgUtils.msgSuccess('新增成功') // msgUtils.msgSuccess('新增成功')
this.isUpdate = false // 新增后会触发监听,不再更新数据 this.isUpdate = false // 新增后会触发监听,不再更新数据
resolve(true) resolve(true)
} else msgUtils.msgError('新增失败');resolve(false) } else msgUtils.msgError('新增失败');reject(false)
}) })
} }
/** /**
@ -147,22 +163,17 @@ export class PPTApi {
const currInd = toRaw(slidesStore.slideIndex) // 当前页索引-new const currInd = toRaw(slidesStore.slideIndex) // 当前页索引-new
const oldInd = oldData.findIndex(o => o.id == currentSlide.id) // 当前页索引-old const oldInd = oldData.findIndex(o => o.id == currentSlide.id) // 当前页索引-old
const isBatch = oldVal && oldVal.length && currInd != oldInd // 是否批量更新-排序 const isBatch = oldVal && oldVal.length && currInd != oldInd // 是否批量更新-排序
if (isAdd) { // 新增的幻灯片(id 为非数字,说明是新增的幻灯片) if (isAdd) return // 新增-这里不处理 状态管理-处理
const bool = await this.addSlide(currentSlide) // 防抖-更新
bool && await this.batchUpdateSlides(newData, true) // 批量更新-排序 if (!this.isUpdate) return this.isUpdate = true // 下次更新数据
const resource = sessionStore.get('curr.resource')||{} if (isBatch) { // 批量更新-排序
await PPTApi.getSlideList(resource.id) this.batchUpdateSlides(newData, true)
} else { // 防抖-更新 } else { // 更新当前页幻灯片
if (!this.isUpdate) return this.isUpdate = true // 下次更新数据 const params = {
if (isBatch) { // 批量更新-排序 id: currentSlide.id,
this.batchUpdateSlides(newData, true) datacontent: JSON.stringify(currentSlide),
} else { // 更新当前页幻灯片
const params = {
id: currentSlide.id,
datacontent: JSON.stringify(currentSlide),
}
Utils.mxThrottle(() => {this.updateSlide(params)}, 200, 2)
} }
Utils.mxThrottle(() => {this.updateSlide(params)}, 200, 2)
} }
} }
// 更新幻灯片 isThum 是否更新缩略图 // 更新幻灯片 isThum 是否更新缩略图

View File

@ -148,7 +148,8 @@ export const useSlidesStore = defineStore('slides', {
this.workItem = list this.workItem = list
}, },
addSlide(slide: Slide | Slide[]) { async addSlide(slide: Slide | Slide[]) {
const { PPTApi } = await import('../api/index')
const slides = Array.isArray(slide) ? slide : [slide] const slides = Array.isArray(slide) ? slide : [slide]
for (const slide of slides) { for (const slide of slides) {
if (slide.sectionTag) delete slide.sectionTag if (slide.sectionTag) delete slide.sectionTag
@ -156,6 +157,8 @@ export const useSlidesStore = defineStore('slides', {
const addIndex = this.slideIndex + 1 const addIndex = this.slideIndex + 1
this.slides.splice(addIndex, 0, ...slides) this.slides.splice(addIndex, 0, ...slides)
this.slideIndex = addIndex this.slideIndex = addIndex
// 添加到服务器
PPTApi.addSlideServer(slides, this.slides)
}, },
updateSlide(props: Partial<Slide>, slideId?: string) { updateSlide(props: Partial<Slide>, slideId?: string) {
const slideIndex = slideId ? this.slides.findIndex(item => item.id === slideId) : this.slideIndex const slideIndex = slideId ? this.slides.findIndex(item => item.id === slideId) : this.slideIndex

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="whiteboart-container" :style="{ height: height + 'px' }"> <div class="whiteboart-container" :style="{ height: height + 'px' }">
<div class="canvasBox" ref="box" @mouseleave="handleMouseLeave" ></div> <div class="canvasBox" ref="box" @mouseenter.capture="handleMouseEnter" @mouseleave.capture="handleMouseLeave"></div>
<div class="footerLeft" @click.stop <div class="footerLeft" @click.stop
:style="type == 'design' ? ['top: 10px', 'justify-content: space-between'] : ['bottom: 10px', 'justify-content: center']"> :style="type == 'design' ? ['top: 10px', 'justify-content: space-between'] : ['bottom: 10px', 'justify-content: center']">
@ -278,7 +278,7 @@
</template> </template>
<script setup> <script setup>
import { onMounted, ref, getCurrentInstance, watch, toRaw, nextTick, computed, reactive, defineProps, defineEmits } from 'vue' import { onMounted, onBeforeUnmount, ref, getCurrentInstance, watch, toRaw, nextTick, computed, reactive, defineProps, defineEmits } from 'vue'
import TinyWhiteboard from 'whiteboard_lyc' import TinyWhiteboard from 'whiteboard_lyc'
import ColorPicker from './components/ColorPicker.vue' import ColorPicker from './components/ColorPicker.vue'
import { import {
@ -791,6 +791,25 @@ const init = () => {
}) })
} }
const isMyCanvas = ref(false); //
const handleKeyDown=(event)=> {
// console.log(':', event.key);
// console.log(isMyCanvas.value,'??????????')
if(isMyCanvas.value == false){
event.stopPropagation();
// console.log(':', event.key);
}
}
/**
* 鼠标进入事件
*/
const handleMouseEnter = () => {
console.log('进入白板')
isMyCanvas.value = true;
document.addEventListener('keydown', handleKeyDown, true);
}
/** /**
* 课堂展示-鼠标离开白板监听事件该事件是避免选中状态在其他地方点击后退删除等事件会删除白板内选中的元素 * 课堂展示-鼠标离开白板监听事件该事件是避免选中状态在其他地方点击后退删除等事件会删除白板内选中的元素
*/ */
@ -798,7 +817,10 @@ const handleMouseLeave = () => {
console.log('离开白板') console.log('离开白板')
// -- // --
app.cancelActiveElement() app.cancelActiveElement()
// TODO //
isMyCanvas.value = false;
//
document.addEventListener('keydown', handleKeyDown, true);
}; };
// //

View File

@ -449,6 +449,7 @@ export default {
} }
case 'click': { // --aippt case 'click': { // --aippt
if (row.fileFlag === 'aippt' && !!row.fileId) { if (row.fileFlag === 'aippt' && !!row.fileId) {
sessionStore.delete('curr.classcourse') //
const res = await getEntpcoursefile(row.fileId) const res = await getEntpcoursefile(row.fileId)
if (res && res.code === 200) { if (res && res.code === 200) {
this.openPublicScreen('edit', res.data, row) // - this.openPublicScreen('edit', res.data, row) // -