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([]) 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 } }