2026-06-17 17:47:51 +08:00
|
|
|
// OSS 公网 base URL 由 API 下发(AGENTS.md 规则 1/5),
|
|
|
|
|
// 见 src/api/publicConfigClient.ts。ossAssets 在模块加载时同步取缓存值,
|
|
|
|
|
// App 启动时 preloadPublicConfig() 已预加载;未加载时 getOssPublicBaseUrl() 返回 fallback。
|
|
|
|
|
import { getOssPublicBaseUrl } from "../api/publicConfigClient";
|
2026-06-10 14:06:16 +08:00
|
|
|
|
|
|
|
|
function oss(path: string): string {
|
2026-06-17 17:47:51 +08:00
|
|
|
return `${getOssPublicBaseUrl()}/${path.replace(/^\/+/, "")}`;
|
2026-06-10 14:06:16 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function muban(path: string): string {
|
|
|
|
|
return oss(`muban/${path.replace(/^\/+/, "")}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const ossAssets = {
|
|
|
|
|
workflows: {
|
|
|
|
|
caseImages: [
|
|
|
|
|
muban("community/workflow-rain-night.jpg"),
|
|
|
|
|
muban("community/workflow-character-look.jpg"),
|
|
|
|
|
muban("community/workflow-skyline.jpg"),
|
|
|
|
|
muban("community/workflow-lab.jpg"),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
ecommerce: {
|
|
|
|
|
generated: muban("ecommerce-carousel-generated.png"),
|
|
|
|
|
slides: {
|
|
|
|
|
slide4: muban("slide-4.png"),
|
|
|
|
|
slide5: muban("slide-5.png"),
|
|
|
|
|
},
|
|
|
|
|
heroSlides: [
|
|
|
|
|
muban("ecommerce-hero-carousel/slide-1.webp"),
|
|
|
|
|
muban("ecommerce-hero-carousel/slide-2.webp"),
|
|
|
|
|
muban("ecommerce-hero-carousel/slide-3.webp"),
|
|
|
|
|
muban("ecommerce-hero-carousel/slide-4.webp"),
|
|
|
|
|
muban("ecommerce-hero-carousel/slide-5.webp"),
|
|
|
|
|
],
|
|
|
|
|
templateSlides: [
|
|
|
|
|
muban("more-template-carousel/slide-1.jpg"),
|
|
|
|
|
muban("more-template-carousel/slide-2.jpg"),
|
|
|
|
|
muban("more-template-carousel/slide-3.jpg"),
|
|
|
|
|
muban("more-template-carousel/slide-4.png"),
|
|
|
|
|
muban("more-template-carousel/slide-5.gif"),
|
|
|
|
|
],
|
|
|
|
|
templateCases: [
|
|
|
|
|
muban("ecommerce/templates/case-1.png"),
|
|
|
|
|
muban("ecommerce/templates/case-2.png"),
|
|
|
|
|
muban("ecommerce/templates/case-3.png"),
|
|
|
|
|
muban("ecommerce/templates/case-4.png"),
|
|
|
|
|
muban("ecommerce/templates/case-5.png"),
|
|
|
|
|
muban("ecommerce/templates/case-6.png"),
|
|
|
|
|
],
|
2026-06-12 11:12:55 +08:00
|
|
|
inspiration: {
|
|
|
|
|
asinListing: muban("ecommerce/inspiration/2026-06/asin-listing-optimization.png"),
|
|
|
|
|
tiktokPreference: muban("ecommerce/inspiration/2026-06/tiktok-us-consumer-preference.png"),
|
|
|
|
|
competitorListing: muban("ecommerce/inspiration/2026-06/competitor-listing-analysis.png"),
|
|
|
|
|
fathersDaySet: muban("ecommerce/inspiration/2026-06/fathers-day-product-set.png"),
|
|
|
|
|
perfumeSet: muban("ecommerce/inspiration/2026-06/perfume-product-set.png"),
|
|
|
|
|
sprayScene: muban("ecommerce/inspiration/2026-06/spray-product-scene.png"),
|
|
|
|
|
campingCart: muban("ecommerce/inspiration/2026-06/taobao-camping-cart.webp"),
|
|
|
|
|
cosmeticApplication: muban("ecommerce/inspiration/2026-06/cosmetic-application-set.png"),
|
|
|
|
|
officeStyleSet: muban("ecommerce/inspiration/2026-06/office-style-product-set.png"),
|
|
|
|
|
spokenReview: muban("ecommerce/inspiration/2026-06/spoken-product-review.mp4"),
|
|
|
|
|
perfumeTexture: muban("ecommerce/inspiration/2026-06/perfume-texture-video.mp4"),
|
|
|
|
|
toyInteraction: muban("ecommerce/inspiration/2026-06/toy-interaction-video.mp4"),
|
|
|
|
|
vesselDisplay: muban("ecommerce/inspiration/2026-06/vessel-product-display.mp4"),
|
|
|
|
|
jewelryModel: muban("ecommerce/inspiration/2026-06/jewelry-model-tryon.mp4"),
|
|
|
|
|
sofaLifestyle: muban("ecommerce/inspiration/2026-06/sofa-lifestyle-video.mp4"),
|
|
|
|
|
stationeryTaobaoSet: muban("ecommerce/inspiration/2026-06/stationery-taobao-set-2.png"),
|
|
|
|
|
stripedSingleSofaSet: muban("ecommerce/inspiration/2026-06/striped-single-sofa-set.png"),
|
|
|
|
|
brownLeatherJacketPhotoSet: muban("ecommerce/inspiration/2026-06/brown-leather-jacket-photo-set-2.png"),
|
|
|
|
|
modelSunHatTryon: muban("ecommerce/inspiration/2026-06/model-sun-hat-tryon.png"),
|
|
|
|
|
taobaoEarphoneProduct: muban("ecommerce/inspiration/2026-06/taobao-earphone-product.png"),
|
|
|
|
|
etsyScentedCandleSet: muban("ecommerce/inspiration/2026-06/etsy-scented-candle-set-2.png"),
|
|
|
|
|
worldCupFlashVideo: muban("ecommerce/inspiration/2026-06/world-cup-flash-video.mp4"),
|
|
|
|
|
lipstickUgcTiktokVideo: muban("ecommerce/inspiration/2026-06/lipstick-ugc-tiktok-video.mp4"),
|
|
|
|
|
nightLightUnboxingDouyin: muban("ecommerce/inspiration/2026-06/night-light-unboxing-douyin-2.mp4"),
|
|
|
|
|
cleanerPainpointDouyin: muban("ecommerce/inspiration/2026-06/cleaner-painpoint-douyin-video.mp4"),
|
|
|
|
|
dressOutfitVideo: muban("ecommerce/inspiration/2026-06/dress-outfit-video.mp4"),
|
|
|
|
|
sunscreenUgcTiktokVideo: muban("ecommerce/inspiration/2026-06/sunscreen-ugc-tiktok-2.mp4"),
|
|
|
|
|
},
|
2026-06-10 14:06:16 +08:00
|
|
|
productSet: {
|
|
|
|
|
main: muban("ecommerce/product-set/main.webp"),
|
|
|
|
|
scene: muban("ecommerce/product-set/scene.webp"),
|
|
|
|
|
model: muban("ecommerce/product-set/model.webp"),
|
|
|
|
|
detail: muban("ecommerce/product-set/detail.webp"),
|
|
|
|
|
selling: muban("ecommerce/product-set/selling.webp"),
|
|
|
|
|
hosting: muban("ecommerce/product-set/hosting.webp"),
|
|
|
|
|
},
|
|
|
|
|
tryOn: {
|
|
|
|
|
dressA: muban("ecommerce/try-on/dress-a.webp"),
|
|
|
|
|
dressB: muban("ecommerce/try-on/dress-b.webp"),
|
|
|
|
|
modelWoman: muban("ecommerce/try-on/model-woman.webp"),
|
|
|
|
|
modelMan: muban("ecommerce/try-on/model-man.webp"),
|
|
|
|
|
modelAsian: muban("ecommerce/try-on/model-asian.webp"),
|
|
|
|
|
tryA: muban("ecommerce/try-on/result-a.webp"),
|
|
|
|
|
tryB: muban("ecommerce/try-on/result-b.webp"),
|
|
|
|
|
jacket: muban("ecommerce/try-on/jacket.webp"),
|
|
|
|
|
jacketResultA: muban("ecommerce/try-on/jacket-result-a.webp"),
|
|
|
|
|
jacketResultB: muban("ecommerce/try-on/jacket-result-b.webp"),
|
|
|
|
|
hat: muban("ecommerce/try-on/hat.webp"),
|
|
|
|
|
hatResultA: muban("ecommerce/try-on/hat-result-a.webp"),
|
|
|
|
|
hatResultB: muban("ecommerce/try-on/hat-result-b.webp"),
|
|
|
|
|
},
|
|
|
|
|
detail: {
|
|
|
|
|
productA: muban("ecommerce/detail/product-a.webp"),
|
|
|
|
|
productB: muban("ecommerce/detail/product-b.webp"),
|
|
|
|
|
productC: muban("ecommerce/detail/product-c.webp"),
|
|
|
|
|
longPage: muban("ecommerce/detail/long-page.webp"),
|
|
|
|
|
gridA: muban("ecommerce/detail/grid-a.webp"),
|
|
|
|
|
gridB: muban("ecommerce/detail/grid-b.webp"),
|
|
|
|
|
gridC: muban("ecommerce/detail/grid-c.webp"),
|
|
|
|
|
gridD: muban("ecommerce/detail/grid-d.webp"),
|
|
|
|
|
gridE: muban("ecommerce/detail/grid-e.webp"),
|
|
|
|
|
gridF: muban("ecommerce/detail/grid-f.webp"),
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
} as const;
|
|
|
|
|
|
|
|
|
|
export type ProductSetOssAssets = typeof ossAssets.ecommerce.productSet;
|
|
|
|
|
export type TryOnOssAssets = typeof ossAssets.ecommerce.tryOn;
|
|
|
|
|
export type DetailOssAssets = typeof ossAssets.ecommerce.detail;
|