2025-12-03 18:58:36 +08:00
|
|
|
|
import '../polyfills/url.js'
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 应用配置
|
|
|
|
|
|
*
|
|
|
|
|
|
* 部署说明:
|
|
|
|
|
|
* - 支持从本地存储读取服务器地址配置(优先)
|
|
|
|
|
|
* - 如果没有配置,使用默认的生产服务器地址
|
|
|
|
|
|
* - 支持离线局域网使用:在设置中配置局域网服务器IP即可
|
|
|
|
|
|
*
|
|
|
|
|
|
* 配置方法:
|
|
|
|
|
|
* 1. 通过代码设置:uni.setStorageSync('server_host', '192.168.1.100')
|
|
|
|
|
|
* 2. 通过设置界面配置(需要实现设置页面)
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// 默认服务器配置(仅在未配置本地存储时使用)
|
|
|
|
|
|
const resolveIsDev = () => {
|
|
|
|
|
|
// Node 构建环境变量(例如:process.env.NODE_ENV)
|
|
|
|
|
|
if (typeof process !== 'undefined' && process.env) {
|
|
|
|
|
|
if (typeof process.env.NODE_ENV !== 'undefined') {
|
|
|
|
|
|
return process.env.NODE_ENV !== 'production'
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 兜底:HBuilderX 运行模式下提供的 globalThis.__DEV__ 标记
|
|
|
|
|
|
if (typeof globalThis !== 'undefined' && typeof globalThis.__DEV__ !== 'undefined') {
|
|
|
|
|
|
return !!globalThis.__DEV__
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const IS_DEV = resolveIsDev()
|
|
|
|
|
|
|
|
|
|
|
|
// ⚠️ 服务器配置:
|
|
|
|
|
|
// 注意:真机测试必须使用IP地址,不能用localhost!
|
2025-12-05 18:15:23 +08:00
|
|
|
|
//
|
|
|
|
|
|
// 【重要】部署说明:
|
|
|
|
|
|
// - 开发测试:使用局域网IP(如 192.168.1.164)
|
|
|
|
|
|
// - 正式部署:必须改成服务器的公网IP或域名!
|
|
|
|
|
|
//
|
2025-12-07 00:11:06 +08:00
|
|
|
|
const DEFAULT_SERVER_HOST = '192.168.1.80' // ⚠️ 正式部署时改成公网IP或域名!
|
2025-12-03 18:58:36 +08:00
|
|
|
|
const DEFAULT_SERVER_PORT = 30091 // 后端端口
|
2025-12-07 00:11:06 +08:00
|
|
|
|
const DEV_SERVER_HOST = '192.168.1.80' // 开发服务器地址(局域网IP)
|
2025-12-03 18:58:36 +08:00
|
|
|
|
const DEV_SERVER_PORT = 30091
|
|
|
|
|
|
const isH5 = typeof window !== 'undefined' && typeof document !== 'undefined'
|
|
|
|
|
|
|
|
|
|
|
|
// 本地存储的key
|
|
|
|
|
|
const STORAGE_SERVER_HOST_KEY = 'server_host'
|
|
|
|
|
|
const STORAGE_SERVER_PORT_KEY = 'server_port'
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取服务器地址配置(优先从本地存储读取)
|
|
|
|
|
|
*/
|
|
|
|
|
|
function getServerConfig() {
|
|
|
|
|
|
if (IS_DEV && isH5) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
serverHost: DEV_SERVER_HOST,
|
|
|
|
|
|
serverPort: DEV_SERVER_PORT
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
let serverHost = null
|
|
|
|
|
|
let serverPort = DEFAULT_SERVER_PORT
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
// 优先从本地存储读取配置
|
|
|
|
|
|
const storedHost = uni.getStorageSync(STORAGE_SERVER_HOST_KEY)
|
|
|
|
|
|
const storedPort = uni.getStorageSync(STORAGE_SERVER_PORT_KEY)
|
|
|
|
|
|
|
|
|
|
|
|
// 生产环境:使用存储的配置或默认生产环境配置
|
|
|
|
|
|
if (storedHost) {
|
|
|
|
|
|
serverHost = storedHost
|
|
|
|
|
|
}
|
|
|
|
|
|
if (storedPort) {
|
|
|
|
|
|
serverPort = parseInt(storedPort) || DEFAULT_SERVER_PORT
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
console.warn('读取服务器配置失败:', e)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 如果没有配置,使用默认值
|
|
|
|
|
|
if (!serverHost) {
|
|
|
|
|
|
serverHost = DEFAULT_SERVER_HOST
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 生产环境:已配置生产服务器地址,无需特殊处理
|
|
|
|
|
|
|
|
|
|
|
|
return { serverHost, serverPort }
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 设置服务器地址配置
|
|
|
|
|
|
* @param {String} host 服务器IP或域名
|
|
|
|
|
|
* @param {Number} port 服务器端口(可选,默认8080)
|
|
|
|
|
|
*/
|
|
|
|
|
|
function setServerConfig(host, port = DEFAULT_SERVER_PORT) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
uni.setStorageSync(STORAGE_SERVER_HOST_KEY, host)
|
|
|
|
|
|
uni.setStorageSync(STORAGE_SERVER_PORT_KEY, port)
|
|
|
|
|
|
return true
|
|
|
|
|
|
} catch (e) {
|
|
|
|
|
|
console.error('保存服务器配置失败:', e)
|
|
|
|
|
|
return false
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取服务器配置
|
|
|
|
|
|
const { serverHost, serverPort } = getServerConfig()
|
|
|
|
|
|
|
|
|
|
|
|
// API基础地址
|
|
|
|
|
|
let API_BASE_URL = `http://${serverHost}:${serverPort}`
|
|
|
|
|
|
|
|
|
|
|
|
// H5环境:如果访问的是localhost,跟随当前主机
|
|
|
|
|
|
if (typeof window !== 'undefined' && window.location) {
|
|
|
|
|
|
const hostname = window.location.hostname
|
|
|
|
|
|
if (hostname === 'localhost' || hostname === '127.0.0.1') {
|
|
|
|
|
|
API_BASE_URL = `http://${hostname}:${serverPort}`
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-05 18:15:23 +08:00
|
|
|
|
// 文件访问地址(需要加上 /profile 前缀,因为Spring映射的资源路径是 /profile/**)
|
|
|
|
|
|
let FILE_BASE_URL = API_BASE_URL + '/profile'
|
2025-12-03 18:58:36 +08:00
|
|
|
|
|
|
|
|
|
|
export default {
|
2025-12-06 14:53:35 +08:00
|
|
|
|
// 动态获取API_BASE_URL(每次都从最新配置读取)
|
|
|
|
|
|
get API_BASE_URL() {
|
|
|
|
|
|
const { serverHost, serverPort } = getServerConfig()
|
|
|
|
|
|
return `http://${serverHost}:${serverPort}`
|
|
|
|
|
|
},
|
|
|
|
|
|
// 动态获取FILE_BASE_URL(每次都从最新配置读取)
|
|
|
|
|
|
get FILE_BASE_URL() {
|
|
|
|
|
|
const { serverHost, serverPort } = getServerConfig()
|
|
|
|
|
|
return `http://${serverHost}:${serverPort}/profile`
|
|
|
|
|
|
},
|
2025-12-03 18:58:36 +08:00
|
|
|
|
// Token存储key
|
|
|
|
|
|
TOKEN_KEY: 'token',
|
|
|
|
|
|
// 用户信息存储key
|
|
|
|
|
|
USER_INFO_KEY: 'userInfo',
|
|
|
|
|
|
// 请求超时时间(毫秒)
|
|
|
|
|
|
REQUEST_TIMEOUT: 30000,
|
|
|
|
|
|
// 服务器配置相关
|
|
|
|
|
|
getServerConfig,
|
|
|
|
|
|
setServerConfig,
|
|
|
|
|
|
// 获取当前服务器地址(用于显示)
|
|
|
|
|
|
getCurrentServerUrl: () => {
|
|
|
|
|
|
const { serverHost, serverPort } = getServerConfig()
|
|
|
|
|
|
return `http://${serverHost}:${serverPort}`
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|