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 -13
View File
@@ -29,9 +29,10 @@ import { isWechatEnv } from '../../lib/weixin';
import { APP_VERSION_LABEL } from '../../lib/client-version';
import { maskPhone } from '../../lib/phone';
import {
DEFAULT_SHARE_DESC,
DEFAULT_SHARE_TITLE,
applyShareFromClientConfig,
buildSceneSharePayload,
toWeappShareMessage,
toWeappShareTimeline,
} from '../../lib/wechat-share';
import iconPendingPay from '../../assets/icons/待付款.png';
import iconPaid from '../../assets/icons/已付款.png';
@@ -77,7 +78,7 @@ export default function MinePage() {
const [qualificationUrl, setQualificationUrl] = useState(
() => getBrandAssetsSync().qualificationDisclosureUrl,
);
const [shareTick, setShareTick] = useState(0);
function resetGuestState() {
setProfile(null);
setBenefitBalance(0);
@@ -151,8 +152,10 @@ export default function MinePage() {
.then((config) => {
setWxAuthorize(isWxAuthorizeEnabled(config));
const brand = applyBrandFromClientConfig(config);
applyShareFromClientConfig(config);
setBrandMarkUrl(brand.brandLogoMarkUrl);
setQualificationUrl(brand.qualificationDisclosureUrl);
setShareTick((n) => n + 1);
})
.catch(() => {
setWxAuthorize(true);
@@ -161,19 +164,15 @@ export default function MinePage() {
}, []);
const sharePayload = useMemo(
() => ({
title: '杜康好客 · 我的',
desc: DEFAULT_SHARE_DESC,
path: '/pages/mine/index',
}),
[],
() =>
buildSceneSharePayload('mine', {
path: '/pages/mine/index',
}),
[shareTick],
);
useShareAppMessage(() => toWeappShareMessage(sharePayload));
useShareTimeline(() => ({
title: sharePayload.title || DEFAULT_SHARE_TITLE,
query: '',
}));
useShareTimeline(() => toWeappShareTimeline(sharePayload));
async function ensureWechatBound(): Promise<boolean> {
if (profile?.hasWechat) return true;