2025-12-06 14:49:46 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @description 应用运行时配置
|
|
|
|
|
|
* @author yslg
|
|
|
|
|
|
* @since 2025-12-06
|
|
|
|
|
|
*
|
|
|
|
|
|
* 配置加载策略:
|
|
|
|
|
|
* 1. 开发环境:使用下面定义的开发配置
|
|
|
|
|
|
* 2. 生产环境:从 window.APP_RUNTIME_CONFIG 读取(来自 app-config.js)
|
|
|
|
|
|
* 3. Docker部署:替换 app-config.js 文件实现配置外挂
|
|
|
|
|
|
*
|
|
|
|
|
|
* 配置结构说明:
|
|
|
|
|
|
* 此文件的配置结构与 app-config.js 完全对应
|
|
|
|
|
|
* 修改 app-config.js 后,这里的配置会自动应用
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 类型定义
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
export interface AppRuntimeConfig {
|
|
|
|
|
|
env?: string;
|
|
|
|
|
|
api: {
|
|
|
|
|
|
baseUrl: string;
|
|
|
|
|
|
timeout: number;
|
|
|
|
|
|
};
|
|
|
|
|
|
baseUrl: string;
|
|
|
|
|
|
file: {
|
|
|
|
|
|
downloadUrl: string;
|
|
|
|
|
|
uploadUrl: string;
|
|
|
|
|
|
maxSize: {
|
|
|
|
|
|
image: number;
|
|
|
|
|
|
video: number;
|
|
|
|
|
|
document: number;
|
|
|
|
|
|
};
|
|
|
|
|
|
acceptTypes: {
|
|
|
|
|
|
image: string;
|
|
|
|
|
|
video: string;
|
|
|
|
|
|
document: string;
|
|
|
|
|
|
};
|
|
|
|
|
|
};
|
|
|
|
|
|
token: {
|
|
|
|
|
|
key: string;
|
|
|
|
|
|
refreshThreshold: number;
|
|
|
|
|
|
};
|
|
|
|
|
|
publicImgPath: string;
|
|
|
|
|
|
publicWebPath: string;
|
2025-12-13 14:13:31 +08:00
|
|
|
|
// 单点登录配置
|
|
|
|
|
|
sso?: {
|
|
|
|
|
|
platformUrl: string; // platform 平台地址
|
|
|
|
|
|
workcaseUrl: string; // workcase 服务地址
|
|
|
|
|
|
biddingUrl: string; // bidding 服务地址
|
|
|
|
|
|
};
|
2025-12-06 14:49:46 +08:00
|
|
|
|
features?: {
|
|
|
|
|
|
enableDebug?: boolean;
|
|
|
|
|
|
enableMockData?: boolean;
|
|
|
|
|
|
[key: string]: any;
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 配置定义(与 app-config.js 结构一致)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
const isDev = (import.meta as any).env?.DEV ?? false;
|
|
|
|
|
|
|
|
|
|
|
|
// 开发环境配置
|
|
|
|
|
|
const devConfig: AppRuntimeConfig = {
|
|
|
|
|
|
env: 'development',
|
|
|
|
|
|
|
|
|
|
|
|
api: {
|
|
|
|
|
|
// 开发环境通过 Vite 代理转发到后端,避免浏览器直接跨域
|
|
|
|
|
|
// 实际请求路径示例:/api/... → 由代理转发到实际后端
|
|
|
|
|
|
baseUrl: '/api',
|
|
|
|
|
|
timeout: 30000
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
baseUrl: '/',
|
|
|
|
|
|
|
|
|
|
|
|
file: {
|
|
|
|
|
|
// 同样走代理,保持与 api.baseUrl 一致
|
|
|
|
|
|
downloadUrl: '/api/file/download/',
|
|
|
|
|
|
uploadUrl: '/api/file/upload',
|
|
|
|
|
|
maxSize: {
|
|
|
|
|
|
image: 5,
|
|
|
|
|
|
video: 100,
|
|
|
|
|
|
document: 10
|
|
|
|
|
|
},
|
|
|
|
|
|
acceptTypes: {
|
|
|
|
|
|
image: 'image/*',
|
|
|
|
|
|
video: 'video/*',
|
|
|
|
|
|
document: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
token: {
|
|
|
|
|
|
key: 'token',
|
|
|
|
|
|
refreshThreshold: 300000
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
publicImgPath: 'http://localhost:5173/img',
|
|
|
|
|
|
publicWebPath: 'http://localhost:5173',
|
|
|
|
|
|
|
2025-12-13 14:13:31 +08:00
|
|
|
|
// 单点登录配置
|
|
|
|
|
|
// 推荐:开发环境也通过nginx访问(http://localhost)
|
2025-12-15 14:50:29 +08:00
|
|
|
|
// 备选:直接访问各服务端口(platformUrl: 'http://localhost:7001')
|
2025-12-13 14:13:31 +08:00
|
|
|
|
sso: {
|
|
|
|
|
|
platformUrl: '/', // 通过nginx访问platform
|
|
|
|
|
|
workcaseUrl: '/workcase', // 通过nginx访问workcase
|
|
|
|
|
|
biddingUrl: '/bidding' // 通过nginx访问bidding
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-12-06 14:49:46 +08:00
|
|
|
|
features: {
|
|
|
|
|
|
enableDebug: true,
|
|
|
|
|
|
enableMockData: false
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 生产环境默认配置(兜底)
|
|
|
|
|
|
const prodDefaultConfig: AppRuntimeConfig = {
|
|
|
|
|
|
env: 'production',
|
|
|
|
|
|
|
|
|
|
|
|
api: {
|
|
|
|
|
|
baseUrl: '/api',
|
|
|
|
|
|
timeout: 30000
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
baseUrl: '/',
|
|
|
|
|
|
|
|
|
|
|
|
file: {
|
|
|
|
|
|
downloadUrl: '/api/file/download/',
|
|
|
|
|
|
uploadUrl: '/api/file/upload',
|
|
|
|
|
|
maxSize: {
|
|
|
|
|
|
image: 5,
|
|
|
|
|
|
video: 100,
|
|
|
|
|
|
document: 10
|
|
|
|
|
|
},
|
|
|
|
|
|
acceptTypes: {
|
|
|
|
|
|
image: 'image/*',
|
|
|
|
|
|
video: 'video/*',
|
|
|
|
|
|
document: '.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx'
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
token: {
|
|
|
|
|
|
key: 'token',
|
|
|
|
|
|
refreshThreshold: 300000
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
publicImgPath: '/img',
|
|
|
|
|
|
publicWebPath: '/',
|
|
|
|
|
|
|
2025-12-13 14:13:31 +08:00
|
|
|
|
// 单点登录配置(生产环境通过nginx代理)
|
|
|
|
|
|
sso: {
|
|
|
|
|
|
platformUrl: '/',
|
|
|
|
|
|
workcaseUrl: '/workcase',
|
|
|
|
|
|
biddingUrl: '/bidding'
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-12-06 14:49:46 +08:00
|
|
|
|
features: {
|
|
|
|
|
|
enableDebug: false,
|
|
|
|
|
|
enableMockData: false
|
|
|
|
|
|
}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 配置加载
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取运行时配置
|
|
|
|
|
|
* 生产环境优先从 window.APP_RUNTIME_CONFIG 读取(app-config.js 注入)
|
|
|
|
|
|
*/
|
|
|
|
|
|
const getRuntimeConfig = (): AppRuntimeConfig => {
|
|
|
|
|
|
if (isDev) {
|
|
|
|
|
|
console.log('[配置] 开发环境,使用内置配置');
|
|
|
|
|
|
return devConfig;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 生产环境:尝试读取外部配置
|
|
|
|
|
|
try {
|
|
|
|
|
|
const runtimeConfig = (window as any).APP_RUNTIME_CONFIG;
|
|
|
|
|
|
if (runtimeConfig && typeof runtimeConfig === 'object') {
|
|
|
|
|
|
console.log('[配置] 加载外部配置 app-config.js');
|
|
|
|
|
|
console.log('[配置] API地址:', runtimeConfig.api?.baseUrl);
|
|
|
|
|
|
console.log('[配置] 环境:', runtimeConfig.env || 'production');
|
|
|
|
|
|
return runtimeConfig as AppRuntimeConfig;
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
console.warn('[配置] 无法读取外部配置,使用默认配置', e);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
console.log('[配置] 使用默认生产配置');
|
|
|
|
|
|
return prodDefaultConfig;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 当前应用配置
|
|
|
|
|
|
const config = getRuntimeConfig();
|
|
|
|
|
|
console.log('[配置] 当前配置', config);
|
|
|
|
|
|
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
// 导出配置(向后兼容)
|
|
|
|
|
|
// ============================================
|
|
|
|
|
|
|
|
|
|
|
|
// 单独导出常用配置项
|
|
|
|
|
|
export const API_BASE_URL = config.api.baseUrl;
|
|
|
|
|
|
export const FILE_DOWNLOAD_URL = config.file.downloadUrl;
|
|
|
|
|
|
export const PUBLIC_IMG_PATH = config.publicImgPath;
|
|
|
|
|
|
export const PUBLIC_WEB_PATH = config.publicWebPath;
|
|
|
|
|
|
|
|
|
|
|
|
// 导出完整配置对象
|
|
|
|
|
|
export const APP_CONFIG = {
|
|
|
|
|
|
// 应用标题
|
|
|
|
|
|
title: '泰豪电源 AI 数智化平台',
|
|
|
|
|
|
|
|
|
|
|
|
// 环境标识
|
|
|
|
|
|
env: config.env || 'production',
|
|
|
|
|
|
|
|
|
|
|
|
// 应用基础路径
|
|
|
|
|
|
baseUrl: config.baseUrl,
|
|
|
|
|
|
|
|
|
|
|
|
// API 配置
|
|
|
|
|
|
api: {
|
|
|
|
|
|
baseUrl: config.api.baseUrl,
|
|
|
|
|
|
timeout: config.api.timeout
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 文件配置
|
|
|
|
|
|
file: {
|
|
|
|
|
|
downloadUrl: config.file.downloadUrl,
|
|
|
|
|
|
uploadUrl: config.file.uploadUrl,
|
|
|
|
|
|
maxSize: config.file.maxSize,
|
|
|
|
|
|
acceptTypes: config.file.acceptTypes
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// Token 配置
|
|
|
|
|
|
token: {
|
|
|
|
|
|
key: config.token.key,
|
|
|
|
|
|
refreshThreshold: config.token.refreshThreshold
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
// 公共路径
|
|
|
|
|
|
publicImgPath: config.publicImgPath,
|
|
|
|
|
|
publicWebPath: config.publicWebPath,
|
|
|
|
|
|
|
2025-12-13 14:13:31 +08:00
|
|
|
|
// 单点登录配置
|
|
|
|
|
|
sso: config.sso || {
|
|
|
|
|
|
platformUrl: '/',
|
|
|
|
|
|
workcaseUrl: '/workcase',
|
|
|
|
|
|
biddingUrl: '/bidding'
|
|
|
|
|
|
},
|
|
|
|
|
|
|
2025-12-06 14:49:46 +08:00
|
|
|
|
// 功能开关
|
|
|
|
|
|
features: config.features || {}
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 默认导出
|
|
|
|
|
|
export default APP_CONFIG;
|