useContentData.ts
2.74 KB
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
import { h, render } from 'vue'
import { useParseParams, usePlatform } from '..'
import { checkShareModeNeedPassword, doAppLogin, getConfigurationContent as getContent, getShareDataByAccessCredentials, getShareToken, saveConfigurationContent as saveData } from '@/api/content'
import type { ConfigurationContentType } from '@/api/content/model'
import { ShareLoginModal } from '@/core/Share'
import { PageModeEnum } from '@/enums/modeEnum'
import { useContentDataStoreWithOut } from '@/store/modules/contentData'
import { useUserStoreWithOut } from '@/store/modules/user'
import { useMessage } from '@/hooks/web/useMessage'
import { MessageEnum } from '@/enums/messageEnum'
import { useProduct } from '@/core/Library/hook/useProduct'
export function useContentData() {
const contentDataStore = useContentDataStoreWithOut()
const params = useParseParams()
const { mode, publicId, configurationId, userId } = params
const userStore = useUserStoreWithOut()
const { createMessage } = useMessage()
const shareModeBootstrap = async () => {
if (!publicId) return
await usePlatform()
const { token, refreshToken } = await getShareToken(publicId)
userStore.storeShareToken(token, refreshToken)
const { data } = await checkShareModeNeedPassword(configurationId)
let result: ConfigurationContentType
if (data) {
const instance = h(ShareLoginModal)
render(instance, document.body)
result = await (instance.component?.exposed as InstanceType<typeof ShareLoginModal>).open()
}
else {
const { data } = await getShareDataByAccessCredentials(configurationId)
result = data
}
return result
}
const doGetConfigurationContent = async () => {
if (userId) {
const { token, refreshToken } = await doAppLogin(userId)
userStore.storeToken(token, refreshToken)
}
const result = mode === PageModeEnum.SHARE ? await shareModeBootstrap() : await getContent()
if (result) {
const { getAllDeviceProfileIds } = useProduct()
await getAllDeviceProfileIds(result)
const { productAndDevice, nodelist, isTemplate, templateId } = result
if (nodelist) contentDataStore.saveContentData(nodelist)
if (isTemplate) contentDataStore.setIsTemplate(isTemplate)
contentDataStore.setIsTemplateLink(templateId)
if (productAndDevice) contentDataStore.setProductAndDevice(productAndDevice)
}
return result
}
const doSaveConfigurationContent = async (params: ConfigurationContentType) => {
if (!contentDataStore.hasDesignAuth) {
createMessage.error(MessageEnum.NO_AUTH)
return
}
return saveData(params)
}
return {
configurationId,
doGetConfigurationContent,
doSaveConfigurationContent,
}
}
window.useContentData = useContentData