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: { |