|
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)
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
|
|
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
|
|
}
|
|
}
|
|
|
|
|
|
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
|
|
}
|
|
} |