staticAsset.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import {
  2. STATIC_ASSETS_BASE_URL_DEFAULT,
  3. STATIC_ASSETS_BASE_URL_PRODUCTION,
  4. STATIC_ASSETS_BASE_URL_TEST
  5. } from '@/config/static-assets-defaults'
  6. import { getStaticAssetsVersion, withOssVersion } from '@/utils/ossCache'
  7. function normalizeBase(u) {
  8. const s = (u || '').trim() || STATIC_ASSETS_BASE_URL_DEFAULT
  9. return s.endsWith('/') ? s : `${s}/`
  10. }
  11. function isPlaceholderBaseUrl(value) {
  12. const text = String(value || '').trim().toLowerCase()
  13. if (!text) return true
  14. return text.includes('replace_') || text.includes('replace_prod_static_host')
  15. }
  16. function resolveBase() {
  17. // 优先当前 APP_ENV;占位则回退空串走本地 /static/
  18. const remote = STATIC_ASSETS_BASE_URL_DEFAULT || STATIC_ASSETS_BASE_URL_PRODUCTION || STATIC_ASSETS_BASE_URL_TEST
  19. if (isPlaceholderBaseUrl(remote)) return ''
  20. return normalizeBase(remote)
  21. }
  22. function localStaticUrl(relativePath) {
  23. const p = String(relativePath || '').replace(/^\/+/, '')
  24. return `/static/${p}`
  25. }
  26. export function getStaticAssetsBaseUrl() {
  27. return resolveBase()
  28. }
  29. /**
  30. * 拼接静态资源完整 URL。
  31. * 未配置远程 CDN 时,回退到项目内 `/static/` 目录(本地开发/框架阶段默认行为)。
  32. */
  33. export function staticAssetUrl(relativePath) {
  34. const p = String(relativePath || '').replace(/^\/+/, '')
  35. const base = getStaticAssetsBaseUrl()
  36. if (!base) {
  37. return localStaticUrl(p)
  38. }
  39. const seg = p.split('/').filter(Boolean).map((s) => encodeURIComponent(s)).join('/')
  40. const url = `${base}${seg}`
  41. return withOssVersion(url, getStaticAssetsVersion())
  42. }
  43. export const DEFAULT_PLACEHOLDER_IMAGE_URL = staticAssetUrl('images/logo.gif')
  44. export const IMG_DEFAULT_PRODUCT = staticAssetUrl('images/default-product.png')
  45. /** 全端统一:空列表 / 暂无 等占位图 */
  46. export const IMG_NOTHING = staticAssetUrl('images/nothing.svg')
  47. export const IMG_EMPTY = IMG_NOTHING
  48. export const IMG_LOGO_WATERMARK = staticAssetUrl('images/logo.gif')
  49. export const IMG_CLIPBOARD = staticAssetUrl('images/logo.gif')
  50. export const IMG_PASSWORD_CARD = staticAssetUrl('images/logo.gif')
  51. export const IMG_LINK = staticAssetUrl('images/logo.gif')
  52. export const IMG_SETTINGS_AVATAR = staticAssetUrl('images/logo.gif')
  53. export const IMG_SETTINGS_PASSWORD = staticAssetUrl('images/logo.gif')
  54. export const IMG_CUSTOMER_SERVICE = staticAssetUrl('images/logo.gif')
  55. export const ICON_ARROW_BOTTOM = staticAssetUrl('images/logo.gif')