staticAsset.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. function normalizeBase(u) {
  7. const s = (u || '').trim() || STATIC_ASSETS_BASE_URL_DEFAULT
  8. return s.endsWith('/') ? s : `${s}/`
  9. }
  10. function envBaseExplicit() {
  11. try {
  12. if (typeof import.meta !== 'undefined' && import.meta.env && import.meta.env.VITE_STATIC_ASSETS_BASE_URL) {
  13. return String(import.meta.env.VITE_STATIC_ASSETS_BASE_URL).trim()
  14. }
  15. } catch {
  16. // ignore
  17. }
  18. // 兼容 uni-app webpack/HBuilderX:使用 process.env(通常要求 VUE_APP_ 前缀)
  19. try {
  20. if (typeof process !== 'undefined' && process.env) {
  21. const v =
  22. process.env.VITE_STATIC_ASSETS_BASE_URL ||
  23. process.env.VUE_APP_STATIC_ASSETS_BASE_URL ||
  24. process.env.UNI_APP_STATIC_ASSETS_BASE_URL
  25. if (v) return String(v).trim()
  26. }
  27. } catch {
  28. // ignore
  29. }
  30. return ''
  31. }
  32. function resolveBase() {
  33. const explicit = envBaseExplicit()
  34. if (explicit) return normalizeBase(explicit)
  35. try {
  36. if (import.meta.env && import.meta.env.MODE === 'production') {
  37. return normalizeBase(STATIC_ASSETS_BASE_URL_PRODUCTION)
  38. }
  39. } catch {
  40. // ignore
  41. }
  42. return normalizeBase(STATIC_ASSETS_BASE_URL_TEST)
  43. }
  44. export function getStaticAssetsBaseUrl() {
  45. return resolveBase()
  46. }
  47. /**
  48. * 拼接远程静态资源完整 URL(相对路径不要前导 /,如 icons/1.png)。
  49. */
  50. export function staticAssetUrl(relativePath) {
  51. const p = String(relativePath || '').replace(/^\/+/, '')
  52. const seg = p.split('/').filter(Boolean).map((s) => encodeURIComponent(s)).join('/')
  53. return `${getStaticAssetsBaseUrl()}${seg}`
  54. }
  55. export const DEFAULT_PLACEHOLDER_IMAGE_URL = staticAssetUrl('images/logo.png')
  56. export const IMG_DEFAULT_PRODUCT = staticAssetUrl('images/default-product.png')
  57. /** 全端统一:空列表 / 暂无 等占位图(与 miniprogram `nothing.svg` 一致) */
  58. export const IMG_NOTHING = staticAssetUrl('nothing.svg')
  59. export const IMG_EMPTY = IMG_NOTHING
  60. export const IMG_LOGO_WATERMARK = staticAssetUrl('images/logo11.png')
  61. export const IMG_CLIPBOARD = staticAssetUrl('logo-img/clipboard.svg')
  62. export const IMG_PASSWORD_CARD = staticAssetUrl('logo-img/password.png')
  63. export const IMG_LINK = staticAssetUrl('logo-img/link.png')
  64. export const IMG_SETTINGS_AVATAR = staticAssetUrl('images/设置头像.svg')
  65. export const IMG_SETTINGS_PASSWORD = staticAssetUrl('images/修改密码.svg')
  66. export const IMG_CUSTOMER_SERVICE = staticAssetUrl('images/客服.svg')
  67. /** 登录页输入框前图标(与静态资源目录 `images/用户名.svg`、`images/密码.svg` 对应) */
  68. export const IMG_LOGIN_USERNAME = staticAssetUrl('images/用户名.svg')
  69. export const IMG_LOGIN_PASSWORD = staticAssetUrl('images/密码.svg')
  70. export const ICON_ARROW_BOTTOM = staticAssetUrl('arrow-bottom.svg')