Showing
10 changed files
with
119 additions
and
1 deletions
@@ -4289,7 +4289,8 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { | @@ -4289,7 +4289,8 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { | ||
4289 | // TODO Thingskit 从服务器请求 load file | 4289 | // TODO Thingskit 从服务器请求 load file |
4290 | async function getRemoteData() { | 4290 | async function getRemoteData() { |
4291 | const { doGetConfigurationContent } = useContentData() | 4291 | const { doGetConfigurationContent } = useContentData() |
4292 | - | 4292 | + const { getAuthInfo } = useAuth?.() || {} |
4293 | + | ||
4293 | const platformInfo = getPlatformInfo() | 4294 | const platformInfo = getPlatformInfo() |
4294 | document.getElementById('first-text-animation-text').querySelector('text').innerHTML = platformInfo?.name || window.PROJECT_ENV?.shortName | 4295 | document.getElementById('first-text-animation-text').querySelector('text').innerHTML = platformInfo?.name || window.PROJECT_ENV?.shortName |
4295 | document.getElementById('first-text-animation').style.display = 'block' | 4296 | document.getElementById('first-text-animation').style.display = 'block' |
@@ -4312,6 +4313,21 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { | @@ -4312,6 +4313,21 @@ App.prototype.loadFile = function (id, sameWindow, file, success, force) { | ||
4312 | * @property {ConfigurationContentListItemType[]} configurationContentList | 4313 | * @property {ConfigurationContentListItemType[]} configurationContentList |
4313 | */ | 4314 | */ |
4314 | 4315 | ||
4316 | + /** | ||
4317 | + * @typedef PermissionInfo | ||
4318 | + * @property {string[]} permissions | ||
4319 | + * @property {string} hasPreview | ||
4320 | + * @property {string} platform | ||
4321 | + * @property {ConfigurationContentListItemType[]} configurationContentList | ||
4322 | + */ | ||
4323 | + | ||
4324 | + /** | ||
4325 | + * @type {PermissionInfo} | ||
4326 | + */ | ||
4327 | + const permissionInfo = await getAuthInfo?.() || {} | ||
4328 | + | ||
4329 | + this.permissionInfo = permissionInfo | ||
4330 | + | ||
4315 | /** | 4331 | /** |
4316 | * @type {ConfigurationContentType} | 4332 | * @type {ConfigurationContentType} |
4317 | */ | 4333 | */ |
@@ -5137,6 +5153,9 @@ App.prototype.addPreviewButton = function () { | @@ -5137,6 +5153,9 @@ App.prototype.addPreviewButton = function () { | ||
5137 | switchLightboxMode?.() | 5153 | switchLightboxMode?.() |
5138 | })) | 5154 | })) |
5139 | 5155 | ||
5156 | + if (this.permissionInfo && !this.permissionInfo.hasPreviewAuth) this.previewButton.style.display = 'none' | ||
5157 | + | ||
5158 | + | ||
5140 | this.buttonContainer.appendChild(this.previewButton) | 5159 | this.buttonContainer.appendChild(this.previewButton) |
5141 | } | 5160 | } |
5142 | } | 5161 | } |
@@ -5375,6 +5394,8 @@ App.prototype.addSaveButton = function () { | @@ -5375,6 +5394,8 @@ App.prototype.addSaveButton = function () { | ||
5375 | .funct(); | 5394 | .funct(); |
5376 | })) | 5395 | })) |
5377 | 5396 | ||
5397 | + if (this.permissionInfo && !this.permissionInfo.hasDesignAuth) this.saveButton.style.display = 'none' | ||
5398 | + | ||
5378 | this.buttonContainer.appendChild(this.saveButton) | 5399 | this.buttonContainer.appendChild(this.saveButton) |
5379 | } | 5400 | } |
5380 | } | 5401 | } |
@@ -9,6 +9,7 @@ enum Api { | @@ -9,6 +9,7 @@ enum Api { | ||
9 | REFRESH_TOKEN = '/auth/token', | 9 | REFRESH_TOKEN = '/auth/token', |
10 | GET_DICT = '/dict_item/find', | 10 | GET_DICT = '/dict_item/find', |
11 | UPLOAD_FILE = '/oss/upload', | 11 | UPLOAD_FILE = '/oss/upload', |
12 | + GET_PERMISSIONS = '/role/me/permissions', | ||
12 | } | 13 | } |
13 | export const getPlatformInfo = () => { | 14 | export const getPlatformInfo = () => { |
14 | return defHttp.get<PlatformInfo>({ | 15 | return defHttp.get<PlatformInfo>({ |
@@ -44,3 +45,9 @@ export function doUploadFile(file: FormData) { | @@ -44,3 +45,9 @@ export function doUploadFile(file: FormData) { | ||
44 | }, | 45 | }, |
45 | }) | 46 | }) |
46 | } | 47 | } |
48 | + | ||
49 | +export function getCurrentRolePermission() { | ||
50 | + return defHttp.get<string[]>({ | ||
51 | + url: Api.GET_PERMISSIONS, | ||
52 | + }) | ||
53 | +} |
@@ -4,6 +4,9 @@ import { useParseParams } from '@/core/LoadData' | @@ -4,6 +4,9 @@ import { useParseParams } from '@/core/LoadData' | ||
4 | import type { MxCell } from '@/fitCore/types' | 4 | import type { MxCell } from '@/fitCore/types' |
5 | import type { BasicNodeBindType, NodeDataActJsonType, NodeDataDataSourceJsonType, NodeDataEventJsonType, NodeDataType, SaveNodeDataParamsType } from '@/api/node/model' | 5 | import type { BasicNodeBindType, NodeDataActJsonType, NodeDataDataSourceJsonType, NodeDataEventJsonType, NodeDataType, SaveNodeDataParamsType } from '@/api/node/model' |
6 | import { CellAttributeKeyEnum } from '@/enums/cellAttributeEnum' | 6 | import { CellAttributeKeyEnum } from '@/enums/cellAttributeEnum' |
7 | +import { useContentDataStoreWithOut } from '@/store/modules/contentData' | ||
8 | +import { useMessage } from '@/hooks/web/useMessage' | ||
9 | +import { MessageEnum } from '@/enums/messageEnum' | ||
7 | 10 | ||
8 | interface UseNodeDataParamsType { | 11 | interface UseNodeDataParamsType { |
9 | cell: MxCell | 12 | cell: MxCell |
@@ -29,8 +32,11 @@ function removeCellSourceAttribute(cell: MxCell) { | @@ -29,8 +32,11 @@ function removeCellSourceAttribute(cell: MxCell) { | ||
29 | } | 32 | } |
30 | 33 | ||
31 | export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | 34 | export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { |
35 | + const { createMessage } = useMessage() | ||
36 | + | ||
32 | const nodeData = ref<NodeDataType>() | 37 | const nodeData = ref<NodeDataType>() |
33 | 38 | ||
39 | + const contentDataStore = useContentDataStoreWithOut() | ||
34 | // const contentId = window.DrawApp.configurationContentId! | 40 | // const contentId = window.DrawApp.configurationContentId! |
35 | const { configurationId } = useParseParams() | 41 | const { configurationId } = useParseParams() |
36 | 42 | ||
@@ -65,6 +71,11 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | @@ -65,6 +71,11 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | ||
65 | } | 71 | } |
66 | 72 | ||
67 | const saveNodeAllData = async (data: Partial<SaveNodeDataParamsType>) => { | 73 | const saveNodeAllData = async (data: Partial<SaveNodeDataParamsType>) => { |
74 | + if (!contentDataStore.hasDesignAuth) { | ||
75 | + createMessage.error(MessageEnum.NO_AUTH) | ||
76 | + throw new Error(MessageEnum.NO_AUTH) | ||
77 | + } | ||
78 | + | ||
68 | const result = await doSaveNodeAllData(Object.assign(data, basicNodeBindData(ActionType.SAVE))) | 79 | const result = await doSaveNodeAllData(Object.assign(data, basicNodeBindData(ActionType.SAVE))) |
69 | removeCellSourceAttribute(cell) | 80 | removeCellSourceAttribute(cell) |
70 | nodeData.value = result || getDefaultNodeData() | 81 | nodeData.value = result || getDefaultNodeData() |
@@ -72,6 +83,11 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | @@ -72,6 +83,11 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | ||
72 | } | 83 | } |
73 | 84 | ||
74 | const saveNodeDataSourceData = async (data: NodeDataDataSourceJsonType) => { | 85 | const saveNodeDataSourceData = async (data: NodeDataDataSourceJsonType) => { |
86 | + if (!contentDataStore.hasDesignAuth) { | ||
87 | + createMessage.error(MessageEnum.NO_AUTH) | ||
88 | + throw new Error(MessageEnum.NO_AUTH) | ||
89 | + } | ||
90 | + | ||
75 | const result = await doSaveNodeDataSource({ ...basicNodeBindData(ActionType.SAVE), data }) | 91 | const result = await doSaveNodeDataSource({ ...basicNodeBindData(ActionType.SAVE), data }) |
76 | removeCellSourceAttribute(cell) | 92 | removeCellSourceAttribute(cell) |
77 | if (unref(nodeData)?.dataSourceJson) | 93 | if (unref(nodeData)?.dataSourceJson) |
@@ -81,12 +97,22 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | @@ -81,12 +97,22 @@ export function useNodeData({ cell, immediate = true }: UseNodeDataParamsType) { | ||
81 | } | 97 | } |
82 | 98 | ||
83 | const saveNodeEventData = async (data: NodeDataEventJsonType) => { | 99 | const saveNodeEventData = async (data: NodeDataEventJsonType) => { |
100 | + if (!contentDataStore.hasDesignAuth) { | ||
101 | + createMessage.error(MessageEnum.NO_AUTH) | ||
102 | + throw new Error(MessageEnum.NO_AUTH) | ||
103 | + } | ||
104 | + | ||
84 | const result = await doSaveNodeEvent({ ...basicNodeBindData(ActionType.SAVE), data }) | 105 | const result = await doSaveNodeEvent({ ...basicNodeBindData(ActionType.SAVE), data }) |
85 | removeCellSourceAttribute(cell) | 106 | removeCellSourceAttribute(cell) |
86 | return result | 107 | return result |
87 | } | 108 | } |
88 | 109 | ||
89 | const saveNodeActData = async (data: NodeDataActJsonType) => { | 110 | const saveNodeActData = async (data: NodeDataActJsonType) => { |
111 | + if (!contentDataStore.hasDesignAuth) { | ||
112 | + createMessage.error(MessageEnum.NO_AUTH) | ||
113 | + throw new Error(MessageEnum.NO_AUTH) | ||
114 | + } | ||
115 | + | ||
90 | const result = await doSaveNodeAct({ ...basicNodeBindData(ActionType.SAVE), data }) | 116 | const result = await doSaveNodeAct({ ...basicNodeBindData(ActionType.SAVE), data }) |
91 | removeCellSourceAttribute(cell) | 117 | removeCellSourceAttribute(cell) |
92 | return result | 118 | return result |
@@ -2,3 +2,4 @@ export { usePlatform, getPlatformInfo, setPlatformInfo } from './module/usePlatf | @@ -2,3 +2,4 @@ export { usePlatform, getPlatformInfo, setPlatformInfo } from './module/usePlatf | ||
2 | export { useContentData } from './module/useContentData' | 2 | export { useContentData } from './module/useContentData' |
3 | export { useParseParams } from './module/useParseParams' | 3 | export { useParseParams } from './module/useParseParams' |
4 | export { useLightboxModeService } from './module/useLightboxModeService' | 4 | export { useLightboxModeService } from './module/useLightboxModeService' |
5 | +export { useAuth } from './module/useAuth' |
src/core/LoadData/module/useAuth.ts
0 → 100644
1 | +import { getCurrentRolePermission } from '@/api/sys' | ||
2 | +import { useContentDataStoreWithOut } from '@/store/modules/contentData' | ||
3 | +import { isShareMode } from '@/utils/env' | ||
4 | + | ||
5 | +export function useAuth() { | ||
6 | + const contentDataStore = useContentDataStoreWithOut() | ||
7 | + const getAuthInfo = async () => { | ||
8 | + const result = { permissions: [] as string[], hasPreview: true, hasDesign: true } | ||
9 | + if (isShareMode()) return result | ||
10 | + | ||
11 | + const permissions = await getCurrentRolePermission() | ||
12 | + result.permissions = permissions | ||
13 | + const ret = contentDataStore.setPermissions(permissions) | ||
14 | + | ||
15 | + return { | ||
16 | + permissions, | ||
17 | + ...ret, | ||
18 | + } | ||
19 | + } | ||
20 | + | ||
21 | + return { | ||
22 | + getAuthInfo, | ||
23 | + } | ||
24 | +} | ||
25 | + | ||
26 | +window.useAuth = useAuth |
@@ -6,11 +6,14 @@ import { ShareLoginModal } from '@/core/Share' | @@ -6,11 +6,14 @@ import { ShareLoginModal } from '@/core/Share' | ||
6 | import { PageModeEnum } from '@/enums/modeEnum' | 6 | import { PageModeEnum } from '@/enums/modeEnum' |
7 | import { useContentDataStoreWithOut } from '@/store/modules/contentData' | 7 | import { useContentDataStoreWithOut } from '@/store/modules/contentData' |
8 | import { useUserStoreWithOut } from '@/store/modules/user' | 8 | import { useUserStoreWithOut } from '@/store/modules/user' |
9 | +import { useMessage } from '@/hooks/web/useMessage' | ||
10 | +import { MessageEnum } from '@/enums/messageEnum' | ||
9 | 11 | ||
10 | export function useContentData() { | 12 | export function useContentData() { |
11 | const contentDataStore = useContentDataStoreWithOut() | 13 | const contentDataStore = useContentDataStoreWithOut() |
12 | const { mode, publicId, configurationId } = useParseParams() | 14 | const { mode, publicId, configurationId } = useParseParams() |
13 | const userStore = useUserStoreWithOut() | 15 | const userStore = useUserStoreWithOut() |
16 | + const { createMessage } = useMessage() | ||
14 | 17 | ||
15 | const shareModeBootstrap = async () => { | 18 | const shareModeBootstrap = async () => { |
16 | if (!publicId) return | 19 | if (!publicId) return |
@@ -46,6 +49,10 @@ export function useContentData() { | @@ -46,6 +49,10 @@ export function useContentData() { | ||
46 | } | 49 | } |
47 | 50 | ||
48 | const doSaveConfigurationContent = async (params: ConfigurationContentType) => { | 51 | const doSaveConfigurationContent = async (params: ConfigurationContentType) => { |
52 | + if (!contentDataStore.hasDesignAuth) { | ||
53 | + createMessage.error(MessageEnum.NO_AUTH) | ||
54 | + return | ||
55 | + } | ||
49 | return saveData(params) | 56 | return saveData(params) |
50 | } | 57 | } |
51 | 58 |
src/enums/authEnum.ts
0 → 100644
1 | +export enum ConfigurationAuthEnum { | ||
2 | + DESIGN = 'api:yt:configuration:center:get_configuration_info:design', | ||
3 | + PREVIEW = 'api:yt:configuration:center:get_configuration_info:preview', | ||
4 | +} | ||
5 | + | ||
6 | +export enum ConfigurationTemplateAuthEnum { | ||
7 | + DESIGN = 'api:yt:configuration:template:center:get_configuration_info:design', | ||
8 | + PREVIEW = 'api:yt:configuration:template:center:get_configuration_info:preview', | ||
9 | +} |
src/enums/messageEnum.ts
0 → 100644
@@ -4,6 +4,8 @@ import { store } from '..' | @@ -4,6 +4,8 @@ import { store } from '..' | ||
4 | import type { NodeDataType } from '@/api/node/model' | 4 | import type { NodeDataType } from '@/api/node/model' |
5 | import type { ProductAndDevice } from '@/api/content/model' | 5 | import type { ProductAndDevice } from '@/api/content/model' |
6 | import type { CreateComponentType } from '@/core/Library/types' | 6 | import type { CreateComponentType } from '@/core/Library/types' |
7 | +import { isShareMode } from '@/utils/env' | ||
8 | +import { ConfigurationAuthEnum, ConfigurationTemplateAuthEnum } from '@/enums/authEnum' | ||
7 | 9 | ||
8 | interface DeviceList { | 10 | interface DeviceList { |
9 | deviceId: string | 11 | deviceId: string |
@@ -19,6 +21,8 @@ interface ContentDataStoreType { | @@ -19,6 +21,8 @@ interface ContentDataStoreType { | ||
19 | configurationContentList?: any | 21 | configurationContentList?: any |
20 | configurationContentId: Nullable<string> | 22 | configurationContentId: Nullable<string> |
21 | diveceDetailMap: Record<string, DeviceList> | 23 | diveceDetailMap: Record<string, DeviceList> |
24 | + hasDesignAuth?: boolean | ||
25 | + hasPerviewAuth?: boolean | ||
22 | } | 26 | } |
23 | 27 | ||
24 | export const useContentDataStore = defineStore('app-content-data', { | 28 | export const useContentDataStore = defineStore('app-content-data', { |
@@ -30,6 +34,8 @@ export const useContentDataStore = defineStore('app-content-data', { | @@ -30,6 +34,8 @@ export const useContentDataStore = defineStore('app-content-data', { | ||
30 | configurationContentList: [], | 34 | configurationContentList: [], |
31 | configurationContentId: null, | 35 | configurationContentId: null, |
32 | diveceDetailMap: {}, | 36 | diveceDetailMap: {}, |
37 | + hasDesignAuth: true, | ||
38 | + hasPerviewAuth: true, | ||
33 | }), | 39 | }), |
34 | actions: { | 40 | actions: { |
35 | 41 | ||
@@ -74,6 +80,16 @@ export const useContentDataStore = defineStore('app-content-data', { | @@ -74,6 +80,16 @@ export const useContentDataStore = defineStore('app-content-data', { | ||
74 | if (!id) return null | 80 | if (!id) return null |
75 | return this.contentData.find(item => item.id === id) || null | 81 | return this.contentData.find(item => item.id === id) || null |
76 | }, | 82 | }, |
83 | + | ||
84 | + setPermissions(string: string[]) { | ||
85 | + if (isShareMode()) return | ||
86 | + this.hasDesignAuth = string.includes((this.isTemplate ? ConfigurationTemplateAuthEnum : ConfigurationAuthEnum).DESIGN) | ||
87 | + this.hasPerviewAuth = string.includes((this.isTemplate ? ConfigurationTemplateAuthEnum : ConfigurationAuthEnum).PREVIEW) | ||
88 | + return { | ||
89 | + hasDesignAuth: toRaw(this.hasDesignAuth), | ||
90 | + hasPreviewAuth: toRaw(this.hasPerviewAuth), | ||
91 | + } | ||
92 | + }, | ||
77 | }, | 93 | }, |
78 | 94 | ||
79 | getters: { | 95 | getters: { |