staticAsset.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. const remote = STATIC_ASSETS_BASE_URL_PRODUCTION || STATIC_ASSETS_BASE_URL_TEST
  18. if (isPlaceholderBaseUrl(remote)) return ''
  19. return normalizeBase(remote)
  20. }
  21. function localStaticUrl(relativePath) {
  22. const p = String(relativePath || '').replace(/^\/+/, '')
  23. return `/static/${p}`
  24. }
  25. export function getStaticAssetsBaseUrl() {
  26. return resolveBase()
  27. }
  28. /**
  29. * 拼接静态资源完整 URL。
  30. * 未配置远程 CDN 时,回退到项目内 `/static/` 目录(本地开发/框架阶段默认行为)。
  31. */
  32. export function staticAssetUrl(relativePath) {
  33. const p = String(relativePath || '').replace(/^\/+/, '')
  34. const base = getStaticAssetsBaseUrl()
  35. if (!base) {
  36. return localStaticUrl(p)
  37. }
  38. const seg = p.split('/').filter(Boolean).map((s) => encodeURIComponent(s)).join('/')
  39. const url = `${base}${seg}`
  40. return withOssVersion(url, getStaticAssetsVersion())
  41. }
  42. export const DEFAULT_PLACEHOLDER_IMAGE_URL = staticAssetUrl('images/logo.gif')
  43. export const IMG_DEFAULT_PRODUCT = staticAssetUrl('images/default-product.png')
  44. /** 全端统一:空列表 / 暂无 等占位图 */
  45. export const IMG_NOTHING = staticAssetUrl('images/nothing.svg')
  46. export const IMG_EMPTY = IMG_NOTHING
  47. export const IMG_LOGO_WATERMARK = staticAssetUrl('images/logo.gif')
  48. export const IMG_CLIPBOARD = staticAssetUrl('images/logo.gif')
  49. export const IMG_PASSWORD_CARD = staticAssetUrl('images/logo.gif')
  50. export const IMG_LINK = staticAssetUrl('images/logo.gif')
  51. export const IMG_SETTINGS_AVATAR = staticAssetUrl('images/logo.gif')
  52. export const IMG_SETTINGS_PASSWORD = staticAssetUrl('images/logo.gif')
  53. export const IMG_CUSTOMER_SERVICE = staticAssetUrl('images/logo.gif')
  54. export const ICON_ARROW_BOTTOM = staticAssetUrl('images/logo.gif')