feat(mini-user): configurable WeChat mini share scenes in system settings

Add HQ group for default and per-page share title/desc/image; expose via client-config and wire all mini-user share entry points.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-06 15:45:57 +08:00
parent a2abbb6169
commit 83b1b0e5f6
12 changed files with 526 additions and 106 deletions
+12 -14
View File
@@ -28,10 +28,12 @@ import {
normalizeFulfillmentFlags,
} from '../../lib/product-fulfillment';
import { getCityCodeForCatalog, resolveUserCity } from '../../lib/user-location';
import type { ClientRuntimeConfig } from '@dukang/shared-types';
import {
DEFAULT_SHARE_DESC,
DEFAULT_SHARE_TITLE,
applyShareFromClientConfig,
buildSceneSharePayload,
toWeappShareMessage,
toWeappShareTimeline,
} from '../../lib/wechat-share';
import { trackPageView } from '../../lib/analytics';
type Product = {
@@ -85,8 +87,9 @@ export default function HomePage() {
}, [cityCode]);
const loadMiniHome = useCallback(() => {
return request<{ miniHome?: MiniHomeConfig }>('/common/client-config')
return request<ClientRuntimeConfig>('/common/client-config')
.then((cfg) => {
applyShareFromClientConfig(cfg);
const banners = Array.isArray(cfg.miniHome?.banners)
? cfg.miniHome!.banners.filter((u) => typeof u === 'string' && !!u.trim())
: [];
@@ -221,21 +224,16 @@ export default function HomePage() {
const footerUrl = miniHome.footerUrl;
const sharePayload = useMemo(
() => ({
title: DEFAULT_SHARE_TITLE,
desc: DEFAULT_SHARE_DESC,
path: '/pages/home/index',
imgUrl: banners[0] || undefined,
}),
() =>
buildSceneSharePayload('home', {
path: '/pages/home/index',
dynamicImageUrl: banners[0] || undefined,
}),
[banners],
);
useShareAppMessage(() => toWeappShareMessage(sharePayload));
useShareTimeline(() => ({
title: sharePayload.title || DEFAULT_SHARE_TITLE,
query: '',
imageUrl: sharePayload.imgUrl,
}));
useShareTimeline(() => toWeappShareTimeline(sharePayload));
function scrollToAroma(key: AromaKey) {
setActiveAroma(key);