contentData.ts
3.1 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
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
import { defineStore } from 'pinia'
import { toRaw } from 'vue'
import { store } from '..'
import type { NodeDataType } from '@/api/node/model'
import type { ProductAndDevice } from '@/api/content/model'
import type { CreateComponentType } from '@/core/Library/types'
import { isShareMode } from '@/utils/env'
import { ConfigurationAuthEnum, ConfigurationTemplateAuthEnum } from '@/enums/authEnum'
interface ContentDataStoreType {
  contentData: NodeDataType[]
  configurationId: Nullable<string>
  productAndDevice: ProductAndDevice[]
  isTemplate?: number | null | string
  configurationContentList?: any
  configurationContentId: Nullable<string>
  hasDesignAuth?: boolean
  hasPerviewAuth?: boolean
  isTemplateLink?: boolean
}
export const useContentDataStore = defineStore('app-content-data', {
  state: (): ContentDataStoreType => ({
    contentData: [],
    configurationId: null,
    isTemplate: null,
    productAndDevice: [],
    configurationContentList: [],
    configurationContentId: null,
    hasDesignAuth: true,
    hasPerviewAuth: true,
    isTemplateLink: false,
  }),
  actions: {
    getNodeDataById(id: string): Undefineable<NodeDataType> {
      const data = this.contentData.find(item => item.configurationNodeId === id)
      return data
    },
    setNodeDataById(id: string, nodeData: NodeDataType) {
      const index = this.contentData.findIndex(item => item.id === id)
      this.contentData.splice(index, 1, nodeData)
    },
    saveContentData(contentData: NodeDataType[]) {
      this.contentData = contentData
    },
    setConfigurationContentId(string: Nullable<string>) {
      this.configurationContentId = string
    },
    setIsTemplate(string?: string | number) {
      this.isTemplate = string
    },
    setIsTemplateLink(string?: string) {
      this.isTemplateLink = !!string
    },
    setProductAndDevice(list: ProductAndDevice[]) {
      this.productAndDevice = list
      return list
    },
    getCurrentNodeDataById(config: CreateComponentType): Nullable<NodeDataType> {
      const { cellInfo } = config
      const { id } = cellInfo || {}
      if (!id) return null
      return this.contentData.find(item => item.configurationNodeId === id) || null
    },
    setPermissions(string: string[]) {
      if (isShareMode()) return
      this.hasDesignAuth = string.includes((this.isTemplate ? ConfigurationTemplateAuthEnum : ConfigurationAuthEnum).DESIGN)
      this.hasPerviewAuth = string.includes((this.isTemplate ? ConfigurationTemplateAuthEnum : ConfigurationAuthEnum).PREVIEW)
      return {
        hasDesignAuth: toRaw(this.hasDesignAuth),
        hasPreviewAuth: toRaw(this.hasPerviewAuth),
      }
    },
  },
  getters: {
    getProductIds(): string[] {
      return this.productAndDevice.map(item => item.profileId)
    },
    getProductAndDevice(): Nullable<ProductAndDevice[]> {
      return this.productAndDevice || []
    },
    getIsTemplate(): number | null | string | undefined {
      return this.isTemplate
    },
    getIsTemplateLink(): boolean {
      return !!this.isTemplateLink
    },
  },
})
export function useContentDataStoreWithOut() {
  return useContentDataStore(store)
}