import { STATIC_ASSETS_BASE_URL_DEFAULT, STATIC_ASSETS_BASE_URL_PRODUCTION, STATIC_ASSETS_BASE_URL_TEST } from '@/config/static-assets-defaults' import { getStaticAssetsVersion, withOssVersion } from '@/utils/ossCache' function normalizeBase(u) { const s = (u || '').trim() || STATIC_ASSETS_BASE_URL_DEFAULT return s.endsWith('/') ? s : `${s}/` } function envBaseExplicit() { try { if (typeof import.meta !== 'undefined' && import.meta.env && import.meta.env.VITE_STATIC_ASSETS_BASE_URL) { return String(import.meta.env.VITE_STATIC_ASSETS_BASE_URL).trim() } } catch { // ignore } // 兼容 uni-app webpack/HBuilderX:使用 process.env(通常要求 VUE_APP_ 前缀) try { if (typeof process !== 'undefined' && process.env) { const v = process.env.VITE_STATIC_ASSETS_BASE_URL || process.env.VUE_APP_STATIC_ASSETS_BASE_URL || process.env.UNI_APP_STATIC_ASSETS_BASE_URL if (v) return String(v).trim() } } catch { // ignore } return '' } function resolveBase() { const explicit = envBaseExplicit() if (explicit) return normalizeBase(explicit) try { if (import.meta.env && import.meta.env.MODE === 'production') { return normalizeBase(STATIC_ASSETS_BASE_URL_PRODUCTION) } } catch { // ignore } return normalizeBase(STATIC_ASSETS_BASE_URL_TEST) } export function getStaticAssetsBaseUrl() { return resolveBase() } /** * 拼接远程静态资源完整 URL(相对路径不要前导 /,如 icons/1.png)。 */ export function staticAssetUrl(relativePath) { const p = String(relativePath || '').replace(/^\/+/, '') const seg = p.split('/').filter(Boolean).map((s) => encodeURIComponent(s)).join('/') const url = `${getStaticAssetsBaseUrl()}${seg}` // sqxp-static 默认在 nginx 侧设置了长缓存;这里统一追加 v=版本号,避免同名覆盖后不生效 return withOssVersion(url, getStaticAssetsVersion()) } export const DEFAULT_PLACEHOLDER_IMAGE_URL = staticAssetUrl('images/logo.png') export const IMG_DEFAULT_PRODUCT = staticAssetUrl('images/default-product.png') /** 全端统一:空列表 / 暂无 等占位图(与 miniprogram `nothing.svg` 一致) */ export const IMG_NOTHING = staticAssetUrl('nothing.svg') export const IMG_EMPTY = IMG_NOTHING export const IMG_LOGO_WATERMARK = staticAssetUrl('images/logo11.png') export const IMG_CLIPBOARD = staticAssetUrl('logo-img/clipboard.svg') export const IMG_PASSWORD_CARD = staticAssetUrl('logo-img/password.png') export const IMG_LINK = staticAssetUrl('logo-img/link.png') export const IMG_SETTINGS_AVATAR = staticAssetUrl('images/设置头像.svg') export const IMG_SETTINGS_PASSWORD = staticAssetUrl('images/修改密码.svg') export const IMG_CUSTOMER_SERVICE = staticAssetUrl('images/客服.svg') /** 登录页输入框前图标(与静态资源目录 `images/用户名.svg`、`images/密码.svg` 对应) */ export const IMG_LOGIN_USERNAME = staticAssetUrl('images/用户名.svg') export const IMG_LOGIN_PASSWORD = staticAssetUrl('images/密码.svg') export const ICON_ARROW_BOTTOM = staticAssetUrl('arrow-bottom.svg')