web_ppt / frontend /src /hooks /usePPTManager.ts
CatPtain's picture
Upload 339 files
89ce340 verified
raw
history blame
3.44 kB
import { onMounted, ref } from 'vue'
import { storeToRefs } from 'pinia'
import { useAuthStore, useSlidesStore } from '@/store'
import dataSyncService from '@/services/dataSyncService'
import api from '@/services'
import message from '@/utils/message'
export default () => {
const authStore = useAuthStore()
const slidesStore = useSlidesStore()
const { title } = storeToRefs(slidesStore)
const pptList = ref<any[]>([])
const loading = ref(false)
const showPPTManager = ref(false)
// 获取PPT列表
const refreshPPTList = async () => {
if (!authStore.isLoggedIn) return
loading.value = true
try {
pptList.value = await dataSyncService.getPPTList()
} catch (error) {
message.error('获取PPT列表失败')
} finally {
loading.value = false
}
}
// 创建新PPT
const createNewPPT = async (title: string = '新建演示文稿') => {
try {
loading.value = true
const pptId = await dataSyncService.createNewPPT(title)
if (pptId) {
message.success('创建成功')
await refreshPPTList()
return pptId
}
} catch (error) {
message.error('创建失败')
throw error
} finally {
loading.value = false
}
}
// 加载PPT
const loadPPT = async (pptId: string) => {
try {
loading.value = true
await dataSyncService.loadPPT(pptId)
message.success('PPT加载成功')
} catch (error) {
message.error('PPT加载失败')
throw error
} finally {
loading.value = false
}
}
// 删除PPT
const deletePPT = async (pptId: string) => {
try {
loading.value = true
await dataSyncService.deletePPT(pptId)
message.success('删除成功')
await refreshPPTList()
} catch (error) {
message.error('删除失败')
throw error
} finally {
loading.value = false
}
}
// 保存当前PPT
const saveCurrentPPT = async () => {
try {
const success = await dataSyncService.manualSave()
if (success) {
message.success('保存成功')
} else {
message.error('保存失败')
}
return success
} catch (error) {
message.error('保存失败')
return false
}
}
// 生成分享链接
const generateShareLinks = async (slideIndex = 0) => {
try {
const links = await dataSyncService.generateShareLink(slideIndex)
message.success('分享链接生成成功')
return links
} catch (error) {
message.error('生成分享链接失败')
throw error
}
}
// 复制PPT
const copyPPT = async (pptId: string, newTitle: string) => {
try {
loading.value = true
const response = await api.copyPPT(pptId, newTitle)
message.success('复制成功')
await refreshPPTList()
return response.pptId
} catch (error) {
message.error('复制失败')
throw error
} finally {
loading.value = false
}
}
// 组件挂载时初始化
onMounted(() => {
if (authStore.isLoggedIn) {
refreshPPTList()
}
})
return {
pptList,
loading,
showPPTManager,
refreshPPTList,
createNewPPT,
loadPPT,
deletePPT,
saveCurrentPPT,
generateShareLinks,
copyPPT
}
}