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