Commit 2abdbf78d8ca7ab7be4e8a308fc714cf098dd1d2

Authored by ww
1 parent da2f608d

feat: pull out environment variables to appapp.config.js

1 # Whether to open mock 1 # Whether to open mock
2 -# VITE_USE_MOCK = true 2 +# VITE_GLOB_USE_MOCK = true
3 3
4 # public path 4 # public path
5 -VITE_PUBLIC_PATH = / 5 +VITE_GLOB_PUBLIC_PATH = /
6 6
7 # Cross-domain proxy, you can configure multiple 7 # Cross-domain proxy, you can configure multiple
8 # Please note that no line breaks 8 # Please note that no line breaks
@@ -21,11 +21,11 @@ VITE_PROXY = [["/api","http://222.180.200.114:48080/api"],["/thingskit-drawio"," @@ -21,11 +21,11 @@ VITE_PROXY = [["/api","http://222.180.200.114:48080/api"],["/thingskit-drawio","
21 # 实时数据的ws地址 21 # 实时数据的ws地址
22 # VITE_WEB_SOCKET = ws://localhost:8080/api/ws/plugins/telemetry?token= 22 # VITE_WEB_SOCKET = ws://localhost:8080/api/ws/plugins/telemetry?token=
23 # VITE_WEB_SOCKET = ws://44.99.141.212:8080/api/ws/plugins/telemetry?token= 23 # VITE_WEB_SOCKET = ws://44.99.141.212:8080/api/ws/plugins/telemetry?token=
24 -VITE_WEB_SOCKET = ws://222.180.200.114:48080/api/ws/plugins/telemetry?token= 24 +VITE_GLOB_WEB_SOCKET = ws://222.180.200.114:48080/api/ws/plugins/telemetry?token=
25 # VITE_WEB_SOCKET = ws://121.37.251.8:8080/api/ws/plugins/telemetry?token= 25 # VITE_WEB_SOCKET = ws://121.37.251.8:8080/api/ws/plugins/telemetry?token=
26 26
27 # Delete console 27 # Delete console
28 -VITE_DROP_CONSOLE = true 28 +VITE_GLOB_DROP_CONSOLE = true
29 29
30 # Basic interface address SPA 30 # Basic interface address SPA
31 VITE_GLOB_API_URL=/api 31 VITE_GLOB_API_URL=/api
@@ -40,10 +40,10 @@ VITE_GLOB_API_URL_PREFIX=/yt @@ -40,10 +40,10 @@ VITE_GLOB_API_URL_PREFIX=/yt
40 VITE_GLOB_CONFIGURATION = /thingskit-drawio 40 VITE_GLOB_CONFIGURATION = /thingskit-drawio
41 41
42 # Content Security Policy 42 # Content Security Policy
43 -VITE_CONTENT_SECURITY_POLICY = false 43 +VITE_GLOB_CONTENT_SECURITY_POLICY = true
44 44
45 # Alarm Notify Polling Interval Time 45 # Alarm Notify Polling Interval Time
46 -VITE_ALARM_NOTIFY_POLLING_INTERVAL_TIME = 500000 46 +VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME = 500000
47 47
48 # Alarm Notify Auto Close Time Unit is Second 48 # Alarm Notify Auto Close Time Unit is Second
49 -VITE_ALARM_NOTIFY_DURATION = 5 49 +VITE_GLOB_ALARM_NOTIFY_DURATION = 5
1 # Whether to open mock 1 # Whether to open mock
2 -VITE_USE_MOCK = false 2 +VITE_GLOB_USE_MOCK = false
3 3
4 # public path 4 # public path
5 -VITE_PUBLIC_PATH = / 5 +VITE_GLOB_PUBLIC_PATH = /
6 6
7 # Delete console 7 # Delete console
8 -VITE_DROP_CONSOLE = true 8 +VITE_GLOB_DROP_CONSOLE = true
9 9
10 # Whether to enable gzip or brotli compression 10 # Whether to enable gzip or brotli compression
11 # Optional: gzip | brotli | none 11 # Optional: gzip | brotli | none
12 # If you need multiple forms, you can use `,` to separate 12 # If you need multiple forms, you can use `,` to separate
13 -VITE_BUILD_COMPRESS = 'gzip' 13 +VITE_GLOB_BUILD_COMPRESS = 'gzip'
14 14
15 # Whether to delete origin files when using compress, default false 15 # Whether to delete origin files when using compress, default false
16 -VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false 16 +VITE_GLOB_BUILD_COMPRESS_DELETE_ORIGIN_FILE = false
17 17
18 # Basic interface address SPA 18 # Basic interface address SPA
19 VITE_GLOB_API_URL=http://122.9.141.195:8080/api 19 VITE_GLOB_API_URL=http://122.9.141.195:8080/api
@@ -26,7 +26,7 @@ VITE_GLOB_UPLOAD_URL=http://122.9.141.195:8080/api/yt/oss/upload @@ -26,7 +26,7 @@ VITE_GLOB_UPLOAD_URL=http://122.9.141.195:8080/api/yt/oss/upload
26 VITE_GLOB_API_URL_PREFIX=/yt 26 VITE_GLOB_API_URL_PREFIX=/yt
27 27
28 # Whether to enable image compression 28 # Whether to enable image compression
29 -VITE_USE_IMAGEMIN= false 29 +VITE_GLOB_USE_IMAGEMIN= false
30 30
31 # use pwa 31 # use pwa
32 VITE_USE_PWA = false 32 VITE_USE_PWA = false
@@ -35,16 +35,16 @@ VITE_USE_PWA = false @@ -35,16 +35,16 @@ VITE_USE_PWA = false
35 VITE_LEGACY = true 35 VITE_LEGACY = true
36 36
37 # 实时数据的ws地址 37 # 实时数据的ws地址
38 -VITE_WEB_SOCKET = ws://122.9.141.195:8080/api/ws/plugins/telemetry?token= 38 +VITE_GLOB_WEB_SOCKET = ws://122.9.141.195:8080/api/ws/plugins/telemetry?token=
39 39
40 #configuration 40 #configuration
41 VITE_GLOB_CONFIGURATION = /thingskit-scada 41 VITE_GLOB_CONFIGURATION = /thingskit-scada
42 42
43 # Content Security Policy 43 # Content Security Policy
44 -VITE_CONTENT_SECURITY_POLICY = false 44 +VITE_GLOB_CONTENT_SECURITY_POLICY = false
45 45
46 # Alarm Notify Polling Interval Time 46 # Alarm Notify Polling Interval Time
47 -VITE_ALARM_NOTIFY_POLLING_INTERVAL_TIME = 60000 47 +VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME = 60000
48 48
49 # Alarm Notify Auto Close Time Unit is Second 49 # Alarm Notify Auto Close Time Unit is Second
50 -VITE_ALARM_NOTIFY_DURATION = 5 50 +VITE_GLOB_ALARM_NOTIFY_DURATION = 5
@@ -10,9 +10,11 @@ import pkg from '../../../package.json'; @@ -10,9 +10,11 @@ import pkg from '../../../package.json';
10 import { GLOB_CONFIG_FILE_NAME } from '../../constant'; 10 import { GLOB_CONFIG_FILE_NAME } from '../../constant';
11 11
12 export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) { 12 export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) {
13 - const { VITE_GLOB_APP_TITLE, VITE_PUBLIC_PATH, VITE_CONTENT_SECURITY_POLICY } = env; 13 + const { VITE_GLOB_APP_TITLE, VITE_GLOB_PUBLIC_PATH, VITE_GLOB_CONTENT_SECURITY_POLICY } = env;
14 14
15 - const path = VITE_PUBLIC_PATH.endsWith('/') ? VITE_PUBLIC_PATH : `${VITE_PUBLIC_PATH}/`; 15 + const path = VITE_GLOB_PUBLIC_PATH.endsWith('/')
  16 + ? VITE_GLOB_PUBLIC_PATH
  17 + : `${VITE_GLOB_PUBLIC_PATH}/`;
16 18
17 const getAppConfigSrc = () => { 19 const getAppConfigSrc = () => {
18 return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`; 20 return `${path || '/'}${GLOB_CONFIG_FILE_NAME}?v=${pkg.version}-${new Date().getTime()}`;
@@ -24,7 +26,7 @@ export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) { @@ -24,7 +26,7 @@ export function configHtmlPlugin(env: ViteEnv, isBuild: boolean) {
24 // Inject data into ejs template 26 // Inject data into ejs template
25 injectData: { 27 injectData: {
26 title: VITE_GLOB_APP_TITLE, 28 title: VITE_GLOB_APP_TITLE,
27 - contentSecurityPolicy: VITE_CONTENT_SECURITY_POLICY 29 + contentSecurityPolicy: VITE_GLOB_CONTENT_SECURITY_POLICY
28 ? `<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />` 30 ? `<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />`
29 : '', 31 : '',
30 }, 32 },
@@ -19,11 +19,11 @@ import { configHmrPlugin } from './hmr'; @@ -19,11 +19,11 @@ import { configHmrPlugin } from './hmr';
19 19
20 export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { 20 export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
21 const { 21 const {
22 - VITE_USE_IMAGEMIN,  
23 - VITE_USE_MOCK, 22 + VITE_GLOB_USE_IMAGEMIN,
  23 + VITE_GLOB_USE_MOCK,
24 VITE_LEGACY, 24 VITE_LEGACY,
25 - VITE_BUILD_COMPRESS,  
26 - VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE, 25 + VITE_GLOB_BUILD_COMPRESS,
  26 + VITE_GLOB_BUILD_COMPRESS_DELETE_ORIGIN_FILE,
27 } = viteEnv; 27 } = viteEnv;
28 28
29 const vitePlugins: (Plugin | Plugin[])[] = [ 29 const vitePlugins: (Plugin | Plugin[])[] = [
@@ -49,7 +49,7 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { @@ -49,7 +49,7 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
49 vitePlugins.push(configSvgIconsPlugin(isBuild)); 49 vitePlugins.push(configSvgIconsPlugin(isBuild));
50 50
51 // vite-plugin-mock 51 // vite-plugin-mock
52 - VITE_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild)); 52 + VITE_GLOB_USE_MOCK && vitePlugins.push(configMockPlugin(isBuild));
53 53
54 // vite-plugin-purge-icons 54 // vite-plugin-purge-icons
55 vitePlugins.push(purgeIcons()); 55 vitePlugins.push(purgeIcons());
@@ -66,11 +66,11 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) { @@ -66,11 +66,11 @@ export function createVitePlugins(viteEnv: ViteEnv, isBuild: boolean) {
66 // The following plugins only work in the production environment 66 // The following plugins only work in the production environment
67 if (isBuild) { 67 if (isBuild) {
68 //vite-plugin-imagemin 68 //vite-plugin-imagemin
69 - VITE_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin()); 69 + VITE_GLOB_USE_IMAGEMIN && vitePlugins.push(configImageminPlugin());
70 70
71 // rollup-plugin-gzip 71 // rollup-plugin-gzip
72 vitePlugins.push( 72 vitePlugins.push(
73 - configCompressPlugin(VITE_BUILD_COMPRESS, VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE) 73 + configCompressPlugin(VITE_GLOB_BUILD_COMPRESS, VITE_GLOB_BUILD_COMPRESS_DELETE_ORIGIN_FILE)
74 ); 74 );
75 75
76 // vite-plugin-pwa 76 // vite-plugin-pwa
@@ -65,6 +65,7 @@ @@ -65,6 +65,7 @@
65 import { isNumber } from '/@/utils/is'; 65 import { isNumber } from '/@/utils/is';
66 import { useLocale } from '/@/locales/useLocale'; 66 import { useLocale } from '/@/locales/useLocale';
67 import { useAppStore } from '/@/store/modules/app'; 67 import { useAppStore } from '/@/store/modules/app';
  68 + import { useGlobSetting } from '/@/hooks/setting';
68 69
69 const tinymceProps = { 70 const tinymceProps = {
70 options: { 71 options: {
@@ -140,7 +141,8 @@ @@ -140,7 +141,8 @@
140 141
141 const initOptions = computed((): RawEditorSettings => { 142 const initOptions = computed((): RawEditorSettings => {
142 const { height, options, toolbar, plugins } = props; 143 const { height, options, toolbar, plugins } = props;
143 - const publicPath = import.meta.env.VITE_PUBLIC_PATH || '/'; 144 + useGlobSetting();
  145 + const publicPath = import.meta.env.VITE_GLOB_PUBLIC_PATH || '/';
144 return { 146 return {
145 selector: `#${unref(tinymceId)}`, 147 selector: `#${unref(tinymceId)}`,
146 height, 148 height,
@@ -10,6 +10,11 @@ export const useGlobSetting = (): Readonly<GlobConfig> => { @@ -10,6 +10,11 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
10 VITE_GLOB_APP_SHORT_NAME, 10 VITE_GLOB_APP_SHORT_NAME,
11 VITE_GLOB_API_URL_PREFIX, 11 VITE_GLOB_API_URL_PREFIX,
12 VITE_GLOB_UPLOAD_URL, 12 VITE_GLOB_UPLOAD_URL,
  13 + VITE_GLOB_CONFIGURATION,
  14 + VITE_GLOB_WEB_SOCKET,
  15 + VITE_GLOB_CONTENT_SECURITY_POLICY,
  16 + VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME,
  17 + VITE_GLOB_ALARM_NOTIFY_DURATION,
13 } = getAppEnvConfig(); 18 } = getAppEnvConfig();
14 19
15 if (!/[a-zA-Z\_]*/.test(VITE_GLOB_APP_SHORT_NAME)) { 20 if (!/[a-zA-Z\_]*/.test(VITE_GLOB_APP_SHORT_NAME)) {
@@ -25,6 +30,11 @@ export const useGlobSetting = (): Readonly<GlobConfig> => { @@ -25,6 +30,11 @@ export const useGlobSetting = (): Readonly<GlobConfig> => {
25 shortName: VITE_GLOB_APP_SHORT_NAME, 30 shortName: VITE_GLOB_APP_SHORT_NAME,
26 urlPrefix: VITE_GLOB_API_URL_PREFIX, 31 urlPrefix: VITE_GLOB_API_URL_PREFIX,
27 uploadUrl: VITE_GLOB_UPLOAD_URL, 32 uploadUrl: VITE_GLOB_UPLOAD_URL,
  33 + configurationPrefix: VITE_GLOB_CONFIGURATION,
  34 + socketUrl: VITE_GLOB_WEB_SOCKET,
  35 + securityPolicy: VITE_GLOB_CONTENT_SECURITY_POLICY,
  36 + alarmNotifyDuration: VITE_GLOB_ALARM_NOTIFY_DURATION,
  37 + alarmPollingInterval: VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME,
28 }; 38 };
29 return glob as Readonly<GlobConfig>; 39 return glob as Readonly<GlobConfig>;
30 }; 40 };
  1 +import { useGlobSetting } from '../setting';
  2 +
  3 +let initialFlag = false;
  4 +export function useWebSecurityPolicy() {
  5 + if (window && window.document && window.document.documentElement) {
  6 + const { securityPolicy } = useGlobSetting();
  7 + if (securityPolicy === 'true' && !initialFlag) {
  8 + const meta = document.createElement('meta');
  9 + meta.setAttribute('http-equiv', 'Content-Security-Policy');
  10 + meta.setAttribute('content', 'upgrade-insecure-requests');
  11 + const container = document.querySelector('head');
  12 + container?.prepend(meta);
  13 + initialFlag = true;
  14 + }
  15 + }
  16 +}
@@ -15,11 +15,14 @@ import { setupI18n } from '/@/locales/setupI18n'; @@ -15,11 +15,14 @@ import { setupI18n } from '/@/locales/setupI18n';
15 import { registerGlobComp } from '/@/components/registerGlobComp'; 15 import { registerGlobComp } from '/@/components/registerGlobComp';
16 import '/@/assets/iconfont/iconfont'; 16 import '/@/assets/iconfont/iconfont';
17 import { usePlatform } from './views/system/customize/hook/usePlatformInfo'; 17 import { usePlatform } from './views/system/customize/hook/usePlatformInfo';
  18 +import { useWebSecurityPolicy } from './hooks/web/useWebSecurityPolicy';
18 19
19 if (import.meta.env.DEV) { 20 if (import.meta.env.DEV) {
20 import('ant-design-vue/dist/antd.less'); 21 import('ant-design-vue/dist/antd.less');
21 } 22 }
22 async function bootstrap() { 23 async function bootstrap() {
  24 + useWebSecurityPolicy();
  25 +
23 const app = createApp(App); 26 const app = createApp(App);
24 // Configure store 27 // Configure store
25 setupStore(app); 28 setupStore(app);
@@ -15,7 +15,7 @@ getRouteNames(basicRoutes); @@ -15,7 +15,7 @@ getRouteNames(basicRoutes);
15 15
16 // app router 16 // app router
17 export const router = createRouter({ 17 export const router = createRouter({
18 - history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH), 18 + history: createWebHistory(import.meta.env.VITE_GLOB_PUBLIC_PATH),
19 routes: basicRoutes as unknown as RouteRecordRaw[], 19 routes: basicRoutes as unknown as RouteRecordRaw[],
20 strict: true, 20 strict: true,
21 scrollBehavior: () => ({ left: 0, top: 0 }), 21 scrollBehavior: () => ({ left: 0, top: 0 }),
@@ -21,7 +21,6 @@ export function getAppEnvConfig() { @@ -21,7 +21,6 @@ export function getAppEnvConfig() {
21 ? // Get the global configuration (the configuration will be extracted independently when packaging) 21 ? // Get the global configuration (the configuration will be extracted independently when packaging)
22 (import.meta.env as unknown as GlobEnvConfig) 22 (import.meta.env as unknown as GlobEnvConfig)
23 : window[ENV_NAME as any]) as unknown as GlobEnvConfig; 23 : window[ENV_NAME as any]) as unknown as GlobEnvConfig;
24 -  
25 const { 24 const {
26 VITE_GLOB_APP_TITLE, 25 VITE_GLOB_APP_TITLE,
27 VITE_GLOB_API_URL, 26 VITE_GLOB_API_URL,
@@ -29,6 +28,10 @@ export function getAppEnvConfig() { @@ -29,6 +28,10 @@ export function getAppEnvConfig() {
29 VITE_GLOB_API_URL_PREFIX, 28 VITE_GLOB_API_URL_PREFIX,
30 VITE_GLOB_UPLOAD_URL, 29 VITE_GLOB_UPLOAD_URL,
31 VITE_GLOB_CONFIGURATION, 30 VITE_GLOB_CONFIGURATION,
  31 + VITE_GLOB_WEB_SOCKET,
  32 + VITE_GLOB_CONTENT_SECURITY_POLICY,
  33 + VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME,
  34 + VITE_GLOB_ALARM_NOTIFY_DURATION,
32 } = ENV; 35 } = ENV;
33 36
34 if (!/^[a-zA-Z\_]*$/.test(VITE_GLOB_APP_SHORT_NAME)) { 37 if (!/^[a-zA-Z\_]*$/.test(VITE_GLOB_APP_SHORT_NAME)) {
@@ -44,6 +47,10 @@ export function getAppEnvConfig() { @@ -44,6 +47,10 @@ export function getAppEnvConfig() {
44 VITE_GLOB_API_URL_PREFIX, 47 VITE_GLOB_API_URL_PREFIX,
45 VITE_GLOB_UPLOAD_URL, 48 VITE_GLOB_UPLOAD_URL,
46 VITE_GLOB_CONFIGURATION, 49 VITE_GLOB_CONFIGURATION,
  50 + VITE_GLOB_WEB_SOCKET,
  51 + VITE_GLOB_CONTENT_SECURITY_POLICY,
  52 + VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME,
  53 + VITE_GLOB_ALARM_NOTIFY_DURATION,
47 }; 54 };
48 } 55 }
49 56
@@ -7,6 +7,7 @@ import { alarmLevel } from '/@/views/device/list/config/detail.config'; @@ -7,6 +7,7 @@ import { alarmLevel } from '/@/views/device/list/config/detail.config';
7 import { RoleEnum } from '/@/enums/roleEnum'; 7 import { RoleEnum } from '/@/enums/roleEnum';
8 import { usePermission } from '/@/hooks/web/usePermission'; 8 import { usePermission } from '/@/hooks/web/usePermission';
9 import { useUserStore } from '/@/store/modules/user'; 9 import { useUserStore } from '/@/store/modules/user';
  10 +import { useGlobSetting } from '/@/hooks/setting';
10 11
11 interface UseAlarmNotifyParams { 12 interface UseAlarmNotifyParams {
12 alarmNotifyStatus?: AlarmStatus; 13 alarmNotifyStatus?: AlarmStatus;
@@ -20,10 +21,11 @@ export enum AlarmPermissionKey { @@ -20,10 +21,11 @@ export enum AlarmPermissionKey {
20 } 21 }
21 22
22 export function useAlarmNotify(params: UseAlarmNotifyParams = {}) { 23 export function useAlarmNotify(params: UseAlarmNotifyParams = {}) {
  24 + const { alarmNotifyDuration, alarmPollingInterval } = useGlobSetting();
23 const { 25 const {
24 alarmNotifyStatus = AlarmStatus.ACTIVE_UN_ACK, 26 alarmNotifyStatus = AlarmStatus.ACTIVE_UN_ACK,
25 - interval = import.meta.env.VITE_ALARM_NOTIFY_POLLING_INTERVAL_TIME || 60000,  
26 - duration = import.meta.env.VITE_ALARM_NOTIFY_DURATION || 5, 27 + interval = Number(alarmPollingInterval) || 60000,
  28 + duration = Number(alarmNotifyDuration) || 5,
27 color = 'orange', 29 color = 'orange',
28 } = params; 30 } = params;
29 const alarmNotifyStatusMean = AlarmStatusMean[alarmNotifyStatus]; 31 const alarmNotifyStatusMean = AlarmStatusMean[alarmNotifyStatus];
@@ -84,10 +84,11 @@ @@ -84,10 +84,11 @@
84 deleteConfigurationCenter, 84 deleteConfigurationCenter,
85 } from '/@/api/configuration/center/configurationCenter'; 85 } from '/@/api/configuration/center/configurationCenter';
86 import { useBatchDelete } from '/@/hooks/web/useBatchDelete'; 86 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
87 - import { getAppEnvConfig, isDevMode } from '/@/utils/env'; 87 + import { isDevMode } from '/@/utils/env';
88 import { Authority } from '/@/components/Authority'; 88 import { Authority } from '/@/components/Authority';
89 import { Popconfirm } from 'ant-design-vue'; 89 import { Popconfirm } from 'ant-design-vue';
90 import { Tag } from 'ant-design-vue'; 90 import { Tag } from 'ant-design-vue';
  91 + import { useGlobSetting } from '/@/hooks/setting';
91 export default defineComponent({ 92 export default defineComponent({
92 components: { 93 components: {
93 PageWrapper, 94 PageWrapper,
@@ -100,7 +101,7 @@ @@ -100,7 +101,7 @@
100 Tag, 101 Tag,
101 }, 102 },
102 setup() { 103 setup() {
103 - const { VITE_GLOB_CONFIGURATION } = getAppEnvConfig(); 104 + const { configurationPrefix } = useGlobSetting();
104 const isDev = isDevMode(); 105 const isDev = isDevMode();
105 const searchInfo = reactive<Recordable>({}); 106 const searchInfo = reactive<Recordable>({});
106 const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo); 107 const { organizationIdTreeRef, resetFn } = useResetOrganizationTree(searchInfo);
@@ -165,14 +166,14 @@ @@ -165,14 +166,14 @@
165 166
166 const handlePreview = (record: Recordable | null) => { 167 const handlePreview = (record: Recordable | null) => {
167 window.open( 168 window.open(
168 - `${VITE_GLOB_CONFIGURATION}/${isDev ? '?dev=1&' : '?'}configurationId=${ 169 + `${configurationPrefix}/${isDev ? '?dev=1&' : '?'}configurationId=${
169 record!.id 170 record!.id
170 }&lightbox=1` 171 }&lightbox=1`
171 ); 172 );
172 }; 173 };
173 const handleDesign = (record: Recordable | null) => { 174 const handleDesign = (record: Recordable | null) => {
174 window.open( 175 window.open(
175 - `${VITE_GLOB_CONFIGURATION}/${isDev ? '?dev=1&' : '?'}configurationId=${record!.id}` 176 + `${configurationPrefix}/${isDev ? '?dev=1&' : '?'}configurationId=${record!.id}`
176 ); 177 );
177 }; 178 };
178 179
@@ -28,6 +28,7 @@ @@ -28,6 +28,7 @@
28 import configurationSrc from '/@/assets/icons/configuration.svg'; 28 import configurationSrc from '/@/assets/icons/configuration.svg';
29 import { cloneDeep } from 'lodash'; 29 import { cloneDeep } from 'lodash';
30 import { usePermission } from '/@/hooks/web/usePermission'; 30 import { usePermission } from '/@/hooks/web/usePermission';
  31 + import { useGlobSetting } from '/@/hooks/setting';
31 32
32 const listColumn = ref(5); 33 const listColumn = ref(5);
33 34
@@ -110,23 +111,19 @@ @@ -110,23 +111,19 @@
110 } 111 }
111 }; 112 };
112 113
113 - const { VITE_GLOB_CONFIGURATION } = import.meta.env; 114 + const { configurationPrefix } = useGlobSetting();
114 const isDev = isDevMode(); 115 const isDev = isDevMode();
115 116
116 const { hasPermission } = usePermission(); 117 const { hasPermission } = usePermission();
117 const handlePreview = (record: ConfigurationCenterItemsModal) => { 118 const handlePreview = (record: ConfigurationCenterItemsModal) => {
118 if (!hasPermission('api:yt:configuration:center:get_configuration_info:get')) return; 119 if (!hasPermission('api:yt:configuration:center:get_configuration_info:get')) return;
119 window.open( 120 window.open(
120 - `${VITE_GLOB_CONFIGURATION}/${isDev ? '?dev=1&' : '?'}configurationId=${  
121 - record!.id  
122 - }&lightbox=1` 121 + `${configurationPrefix}/${isDev ? '?dev=1&' : '?'}configurationId=${record!.id}&lightbox=1`
123 ); 122 );
124 }; 123 };
125 124
126 const handleDesign = (record: ConfigurationCenterItemsModal) => { 125 const handleDesign = (record: ConfigurationCenterItemsModal) => {
127 - window.open(  
128 - `${VITE_GLOB_CONFIGURATION}/${isDev ? '?dev=1&' : '?'}configurationId=${record!.id}`  
129 - ); 126 + window.open(`${configurationPrefix}/${isDev ? '?dev=1&' : '?'}configurationId=${record!.id}`);
130 }; 127 };
131 128
132 const { createSyncConfirm } = useSyncConfirm(); 129 const { createSyncConfirm } = useSyncConfirm();
@@ -113,6 +113,7 @@ @@ -113,6 +113,7 @@
113 import CustomerAlarmMessage from './CustomerAlarmMessage.vue'; 113 import CustomerAlarmMessage from './CustomerAlarmMessage.vue';
114 import { useDate } from '../hooks/useDate'; 114 import { useDate } from '../hooks/useDate';
115 import { getTrendData } from '/@/api/dashboard'; 115 import { getTrendData } from '/@/api/dashboard';
  116 + import { useGlobSetting } from '/@/hooks/setting';
116 117
117 defineExpose({ 118 defineExpose({
118 isAdmin, 119 isAdmin,
@@ -145,8 +146,9 @@ @@ -145,8 +146,9 @@
145 146
146 // web Socket 147 // web Socket
147 const token: string = getAuthCache(JWT_TOKEN_KEY); 148 const token: string = getAuthCache(JWT_TOKEN_KEY);
  149 + const { socketUrl } = useGlobSetting();
148 const state = reactive({ 150 const state = reactive({
149 - server: `${import.meta.env.VITE_WEB_SOCKET}${token}`, 151 + server: `${socketUrl}${token}`,
150 alarmList: new Array<[number, string]>(), 152 alarmList: new Array<[number, string]>(),
151 alarmItem: new Array<[number, string]>(), 153 alarmItem: new Array<[number, string]>(),
152 dataPointList: new Array<[number, string]>(), 154 dataPointList: new Array<[number, string]>(),
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
19 import { Specs, StructJSON } from '/@/api/device/model/modelOfMatterModel'; 19 import { Specs, StructJSON } from '/@/api/device/model/modelOfMatterModel';
20 import { isArray, isObject } from '/@/utils/is'; 20 import { isArray, isObject } from '/@/utils/is';
21 import { DataTypeEnum } from '/@/components/Form/src/externalCompns/components/StructForm/config'; 21 import { DataTypeEnum } from '/@/components/Form/src/externalCompns/components/StructForm/config';
  22 + import { useGlobSetting } from '/@/hooks/setting';
22 23
23 interface ReceiveMessage { 24 interface ReceiveMessage {
24 data: { 25 data: {
@@ -42,9 +43,9 @@ @@ -42,9 +43,9 @@
42 }; 43 };
43 44
44 const token = getAuthCache(JWT_TOKEN_KEY); 45 const token = getAuthCache(JWT_TOKEN_KEY);
45 - 46 + const { socketUrl } = useGlobSetting();
46 const socketInfo = reactive({ 47 const socketInfo = reactive({
47 - origin: `${import.meta.env.VITE_WEB_SOCKET}${token}`, 48 + origin: `${socketUrl}${token}`,
48 attr: undefined as string | undefined, 49 attr: undefined as string | undefined,
49 originData: [] as DataSource[], 50 originData: [] as DataSource[],
50 dataSource: [] as DataSource[], 51 dataSource: [] as DataSource[],
@@ -12,6 +12,7 @@ @@ -12,6 +12,7 @@
12 import { getAuthCache } from '/@/utils/auth'; 12 import { getAuthCache } from '/@/utils/auth';
13 import { useMessage } from '/@/hooks/web/useMessage'; 13 import { useMessage } from '/@/hooks/web/useMessage';
14 import type { socketDataType } from '../../types'; 14 import type { socketDataType } from '../../types';
  15 + import { useGlobSetting } from '/@/hooks/setting';
15 export default defineComponent({ 16 export default defineComponent({
16 name: 'RealTimeData', 17 name: 'RealTimeData',
17 components: { 18 components: {
@@ -25,8 +26,9 @@ @@ -25,8 +26,9 @@
25 }, 26 },
26 setup(props) { 27 setup(props) {
27 const token: string = getAuthCache(JWT_TOKEN_KEY); 28 const token: string = getAuthCache(JWT_TOKEN_KEY);
  29 + const { socketUrl } = useGlobSetting();
28 const state = reactive({ 30 const state = reactive({
29 - server: `${import.meta.env.VITE_WEB_SOCKET}${token}`, 31 + server: `${socketUrl}${token}`,
30 sendValue: JSON.stringify({ 32 sendValue: JSON.stringify({
31 attrSubCmds: [], 33 attrSubCmds: [],
32 tsSubCmds: [ 34 tsSubCmds: [
@@ -2,6 +2,7 @@ import { useWebSocket } from '@vueuse/core'; @@ -2,6 +2,7 @@ import { useWebSocket } from '@vueuse/core';
2 import { Ref, unref } from 'vue'; 2 import { Ref, unref } from 'vue';
3 import { DataBoardLayoutInfo } from '../types/type'; 3 import { DataBoardLayoutInfo } from '../types/type';
4 import { JWT_TOKEN_KEY } from '/@/enums/cacheEnum'; 4 import { JWT_TOKEN_KEY } from '/@/enums/cacheEnum';
  5 +import { useGlobSetting } from '/@/hooks/setting';
5 import { getAuthCache } from '/@/utils/auth'; 6 import { getAuthCache } from '/@/utils/auth';
6 import { isNullAndUnDef } from '/@/utils/is'; 7 import { isNullAndUnDef } from '/@/utils/is';
7 8
@@ -57,8 +58,10 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) { @@ -57,8 +58,10 @@ export function useSocketConnect(dataSourceRef: Ref<DataBoardLayoutInfo[]>) {
57 58
58 const waitSendQueue: string[] = []; 59 const waitSendQueue: string[] = [];
59 60
  61 + const { socketUrl } = useGlobSetting();
  62 +
60 const config = { 63 const config = {
61 - server: `${import.meta.env.VITE_WEB_SOCKET}${token}`, 64 + server: `${socketUrl}${token}`,
62 }; 65 };
63 66
64 // const getNeedUpdateValueById = (componentId: string, deviceId: string) => {}; 67 // const getNeedUpdateValueById = (componentId: string, deviceId: string) => {};
@@ -146,6 +146,16 @@ export interface GlobConfig { @@ -146,6 +146,16 @@ export interface GlobConfig {
146 urlPrefix?: string; 146 urlPrefix?: string;
147 // Project abbreviation 147 // Project abbreviation
148 shortName: string; 148 shortName: string;
  149 + // configuration center proxy prefix
  150 + configurationPrefix: string;
  151 + // socket url
  152 + socketUrl: string;
  153 + // alarm notify alarm duration
  154 + alarmNotifyDuration: string;
  155 + // alarm notify polling interval
  156 + alarmPollingInterval: string;
  157 + // upgrade your http policy to https
  158 + securityPolicy: string;
149 } 159 }
150 export interface GlobEnvConfig { 160 export interface GlobEnvConfig {
151 // Site title 161 // Site title
@@ -158,6 +168,14 @@ export interface GlobEnvConfig { @@ -158,6 +168,14 @@ export interface GlobEnvConfig {
158 VITE_GLOB_APP_SHORT_NAME: string; 168 VITE_GLOB_APP_SHORT_NAME: string;
159 // Upload url 169 // Upload url
160 VITE_GLOB_UPLOAD_URL?: string; 170 VITE_GLOB_UPLOAD_URL?: string;
161 - //configuration 171 + // configuration
162 VITE_GLOB_CONFIGURATION: string; 172 VITE_GLOB_CONFIGURATION: string;
  173 + // socket
  174 + VITE_GLOB_WEB_SOCKET: string;
  175 + // force transform http to https
  176 + VITE_GLOB_CONTENT_SECURITY_POLICY: string;
  177 + // notify polling interval time
  178 + VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME: string;
  179 + // notify duration
  180 + VITE_GLOB_ALARM_NOTIFY_DURATION: string;
163 } 181 }
@@ -58,22 +58,22 @@ declare global { @@ -58,22 +58,22 @@ declare global {
58 58
59 declare interface ViteEnv { 59 declare interface ViteEnv {
60 VITE_PORT: number; 60 VITE_PORT: number;
61 - VITE_USE_MOCK: boolean; 61 + VITE_GLOB_USE_MOCK: boolean;
62 VITE_USE_PWA: boolean; 62 VITE_USE_PWA: boolean;
63 - VITE_PUBLIC_PATH: string; 63 + VITE_GLOB_PUBLIC_PATH: string;
64 VITE_PROXY: [string, string][]; 64 VITE_PROXY: [string, string][];
65 VITE_GLOB_APP_TITLE: string; 65 VITE_GLOB_APP_TITLE: string;
66 VITE_GLOB_APP_SHORT_NAME: string; 66 VITE_GLOB_APP_SHORT_NAME: string;
67 VITE_USE_CDN: boolean; 67 VITE_USE_CDN: boolean;
68 - VITE_DROP_CONSOLE: boolean;  
69 - VITE_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none';  
70 - VITE_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean; 68 + VITE_GLOB_DROP_CONSOLE: boolean;
  69 + VITE_GLOB_BUILD_COMPRESS: 'gzip' | 'brotli' | 'none';
  70 + VITE_GLOB_BUILD_COMPRESS_DELETE_ORIGIN_FILE: boolean;
71 VITE_LEGACY: boolean; 71 VITE_LEGACY: boolean;
72 - VITE_USE_IMAGEMIN: boolean; 72 + VITE_GLOB_USE_IMAGEMIN: boolean;
73 VITE_GENERATE_UI: string; 73 VITE_GENERATE_UI: string;
74 - VITE_CONTENT_SECURITY_POLICY: boolean;  
75 - VITE_ALARM_NOTIFY_POLLING_INTERVAL_TIME: number;  
76 - VITE_ALARM_NOTIFY_DURATION: number; 74 + VITE_GLOB_CONTENT_SECURITY_POLICY: boolean;
  75 + VITE_GLOB_ALARM_NOTIFY_POLLING_INTERVAL_TIME: number;
  76 + VITE_GLOB_ALARM_NOTIFY_DURATION: number;
77 } 77 }
78 78
79 declare function parseInt(s: string | number, radix?: number): number; 79 declare function parseInt(s: string | number, radix?: number): number;
@@ -30,12 +30,12 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { @@ -30,12 +30,12 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
30 // The boolean type read by loadEnv is a string. This function can be converted to boolean type 30 // The boolean type read by loadEnv is a string. This function can be converted to boolean type
31 const viteEnv = wrapperEnv(env); 31 const viteEnv = wrapperEnv(env);
32 32
33 - const { VITE_PORT, VITE_PUBLIC_PATH, VITE_PROXY, VITE_DROP_CONSOLE } = viteEnv; 33 + const { VITE_PORT, VITE_GLOB_PUBLIC_PATH, VITE_PROXY, VITE_GLOB_DROP_CONSOLE } = viteEnv;
34 34
35 const isBuild = command === 'build'; 35 const isBuild = command === 'build';
36 36
37 return { 37 return {
38 - base: VITE_PUBLIC_PATH, 38 + base: VITE_GLOB_PUBLIC_PATH,
39 root, 39 root,
40 resolve: { 40 resolve: {
41 alias: [ 41 alias: [
@@ -70,7 +70,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => { @@ -70,7 +70,7 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
70 compress: { 70 compress: {
71 keep_infinity: true, 71 keep_infinity: true,
72 // Used to delete console in production environment 72 // Used to delete console in production environment
73 - drop_console: VITE_DROP_CONSOLE, 73 + drop_console: VITE_GLOB_DROP_CONSOLE,
74 }, 74 },
75 }, 75 },
76 // Turning off brotliSize display can slightly reduce packaging time 76 // Turning off brotliSize display can slightly reduce packaging time