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