File size: 3,440 Bytes
89ce340
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
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
  }
}