From b6906bc8b63d54de1af346398c8ea59400683025 Mon Sep 17 00:00:00 2001 From: stu2not Date: Tue, 13 Oct 2026 10:03:59 +0800 Subject: [PATCH] feat(miniprogram): enable sharing on all pages --- banban-mini/src/pages/bind/index.config.ts | 3 +- banban-mini/src/pages/bind/index.tsx | 2 + .../src/pages/chat/detail/index.config.ts | 3 +- banban-mini/src/pages/chat/detail/index.tsx | 2 + banban-mini/src/pages/chat/index.config.ts | 5 ++- banban-mini/src/pages/chat/index.tsx | 2 + banban-mini/src/pages/device/index.config.ts | 5 ++- banban-mini/src/pages/device/index.tsx | 2 + .../src/pages/family-invite/index.config.ts | 1 + banban-mini/src/pages/family-invite/index.tsx | 2 + .../src/pages/location/index.config.ts | 5 ++- banban-mini/src/pages/location/index.tsx | 2 + banban-mini/src/pages/login/index.config.ts | 1 + banban-mini/src/pages/login/index.tsx | 2 + .../src/pages/notification/index.config.ts | 3 ++ banban-mini/src/pages/notification/index.tsx | 2 + .../src/pages/sleep-schedule/index.config.ts | 1 + .../src/pages/sleep-schedule/index.tsx | 2 + banban-mini/src/pages/sleep/index.config.ts | 5 ++- .../src/pages/traffic-binding/index.config.ts | 5 ++- .../src/pages/traffic-binding/index.tsx | 2 + banban-mini/src/pages/webview/index.config.ts | 1 + banban-mini/src/pages/webview/index.tsx | 2 + banban-mini/src/utils/page-share.ts | 40 +++++++++++++++++++ 24 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 banban-mini/src/pages/notification/index.config.ts create mode 100644 banban-mini/src/utils/page-share.ts diff --git a/banban-mini/src/pages/bind/index.config.ts b/banban-mini/src/pages/bind/index.config.ts index 23c20dd..adbf022 100644 --- a/banban-mini/src/pages/bind/index.config.ts +++ b/banban-mini/src/pages/bind/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ - navigationStyle: 'custom' + navigationStyle: 'custom', + enableShareAppMessage: true, }) diff --git a/banban-mini/src/pages/bind/index.tsx b/banban-mini/src/pages/bind/index.tsx index db49b26..473377b 100644 --- a/banban-mini/src/pages/bind/index.tsx +++ b/banban-mini/src/pages/bind/index.tsx @@ -27,6 +27,7 @@ import { } from '@/services/child' import { useSystemBanner } from '@/components/system-banner/use-system-banner' import { trafficPageUrl } from '@/services/traffic-binding' +import { usePageShare } from '@/utils/page-share' import './index.scss' @@ -161,6 +162,7 @@ function parseBindingPayload(rawValue: string): { deviceId: string; serialNumber } export default function Bind() { + usePageShare() const router = useRouter() const isAssignMode = String(router.params?.mode || '').trim() === 'assign' const isCardMode = String(router.params?.mode || '').trim() === 'card' diff --git a/banban-mini/src/pages/chat/detail/index.config.ts b/banban-mini/src/pages/chat/detail/index.config.ts index 23c20dd..adbf022 100644 --- a/banban-mini/src/pages/chat/detail/index.config.ts +++ b/banban-mini/src/pages/chat/detail/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ - navigationStyle: 'custom' + navigationStyle: 'custom', + enableShareAppMessage: true, }) diff --git a/banban-mini/src/pages/chat/detail/index.tsx b/banban-mini/src/pages/chat/detail/index.tsx index 1c5e220..6164f9f 100644 --- a/banban-mini/src/pages/chat/detail/index.tsx +++ b/banban-mini/src/pages/chat/detail/index.tsx @@ -13,6 +13,7 @@ import { PeerKind, } from '../../../services/chat' import { useSystemBanner } from '@/components/system-banner/use-system-banner' +import { usePageShare } from '@/utils/page-share' import './index.scss' function normalizePeerKind(value?: string): PeerKind { @@ -194,6 +195,7 @@ function getAudioUrlDebugInfo(rawUrl: string) { } export default function ChatDetail() { + usePageShare() const systemBanner = useSystemBanner() const router = useRouter() const params = router.params diff --git a/banban-mini/src/pages/chat/index.config.ts b/banban-mini/src/pages/chat/index.config.ts index a91643b..a50c085 100644 --- a/banban-mini/src/pages/chat/index.config.ts +++ b/banban-mini/src/pages/chat/index.config.ts @@ -1,4 +1,5 @@ export default { navigationBarTitleText: '聊天记录', - navigationStyle: 'custom' -} \ No newline at end of file + navigationStyle: 'custom', + enableShareAppMessage: true, +} diff --git a/banban-mini/src/pages/chat/index.tsx b/banban-mini/src/pages/chat/index.tsx index 1e16b31..e3057ed 100644 --- a/banban-mini/src/pages/chat/index.tsx +++ b/banban-mini/src/pages/chat/index.tsx @@ -9,9 +9,11 @@ import Taro, { useDidShow } from '@tarojs/taro' import { getToken } from '@/services/auth' import { getConversations, ChatConversation } from '../../services/chat' import { useSystemBanner } from '@/components/system-banner/use-system-banner' +import { usePageShare } from '@/utils/page-share' import './index.scss' export default function Chat() { + usePageShare() const systemBanner = useSystemBanner() const [conversations, setConversations] = useState([]) const [loading, setLoading] = useState(true) diff --git a/banban-mini/src/pages/device/index.config.ts b/banban-mini/src/pages/device/index.config.ts index 5bb75a1..adbf022 100644 --- a/banban-mini/src/pages/device/index.config.ts +++ b/banban-mini/src/pages/device/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ - navigationStyle: 'custom' -}) \ No newline at end of file + navigationStyle: 'custom', + enableShareAppMessage: true, +}) diff --git a/banban-mini/src/pages/device/index.tsx b/banban-mini/src/pages/device/index.tsx index 1729e0e..363286b 100644 --- a/banban-mini/src/pages/device/index.tsx +++ b/banban-mini/src/pages/device/index.tsx @@ -10,6 +10,7 @@ import { Binding, loadCurrentChildBindingContext } from '@/services/binding' import { Child } from '@/services/child' import { DeviceAlarmItem, DeviceStatus, getDeviceAlarms, getDeviceStatus, getDeviceVolumeCommandStatus, setDeviceRemoteSleepWake, setDeviceVolume } from '@/services/device' import { useSystemBanner } from '@/components/system-banner/use-system-banner' +import { usePageShare } from '@/utils/page-share' import './index.scss' function formatTime(value?: string | null): string { @@ -119,6 +120,7 @@ function getAlarmLocationHint(alarm: DeviceAlarmItem | null): string { } export default function Device() { + usePageShare() const systemBanner = useSystemBanner() const [binding, setBinding] = useState(null) const [pendingBinding, setPendingBinding] = useState(null) diff --git a/banban-mini/src/pages/family-invite/index.config.ts b/banban-mini/src/pages/family-invite/index.config.ts index e336c50..9727500 100644 --- a/banban-mini/src/pages/family-invite/index.config.ts +++ b/banban-mini/src/pages/family-invite/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ navigationBarTitleText: '家庭邀请', + enableShareAppMessage: true, }) diff --git a/banban-mini/src/pages/family-invite/index.tsx b/banban-mini/src/pages/family-invite/index.tsx index ffeb400..79e52f6 100644 --- a/banban-mini/src/pages/family-invite/index.tsx +++ b/banban-mini/src/pages/family-invite/index.tsx @@ -7,9 +7,11 @@ import { getToken } from '@/services/auth' import { setSelectedBindingDeviceId } from '@/services/binding' import { setSelectedChildId } from '@/services/child' import { acceptFamilyInvitation, FamilyInvitation, getFamilyInvitation } from '@/services/family' +import { usePageShare } from '@/utils/page-share' import './index.scss' export default function FamilyInvite() { + usePageShare() const router = useRouter() const inviteToken = String(router.params?.token || '').trim() const redirectUrl = `/pages/family-invite/index?token=${inviteToken}` diff --git a/banban-mini/src/pages/location/index.config.ts b/banban-mini/src/pages/location/index.config.ts index 5bb75a1..adbf022 100644 --- a/banban-mini/src/pages/location/index.config.ts +++ b/banban-mini/src/pages/location/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ - navigationStyle: 'custom' -}) \ No newline at end of file + navigationStyle: 'custom', + enableShareAppMessage: true, +}) diff --git a/banban-mini/src/pages/location/index.tsx b/banban-mini/src/pages/location/index.tsx index c88e141..b7658bc 100644 --- a/banban-mini/src/pages/location/index.tsx +++ b/banban-mini/src/pages/location/index.tsx @@ -13,6 +13,7 @@ import { DeviceTrajectoryPoint, } from '@/services/location' import { useSystemBanner } from '@/components/system-banner/use-system-banner' +import { usePageShare } from '@/utils/page-share' import './index.scss' type TrajectoryMode = 'current' | 'today' | 'recent' @@ -127,6 +128,7 @@ function getTrajectoryMarkerId(index: number): number { } export default function Location() { + usePageShare() const systemBanner = useSystemBanner() const [loading, setLoading] = useState(true) const [deviceLocation, setDeviceLocation] = useState(null) diff --git a/banban-mini/src/pages/login/index.config.ts b/banban-mini/src/pages/login/index.config.ts index f122b02..79e7d4b 100644 --- a/banban-mini/src/pages/login/index.config.ts +++ b/banban-mini/src/pages/login/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ navigationBarTitleText: '微信登录', + enableShareAppMessage: true, }) diff --git a/banban-mini/src/pages/login/index.tsx b/banban-mini/src/pages/login/index.tsx index c2214e6..d92371f 100644 --- a/banban-mini/src/pages/login/index.tsx +++ b/banban-mini/src/pages/login/index.tsx @@ -3,6 +3,7 @@ import { View, Text, Button, Checkbox, CheckboxGroup, Image } from '@tarojs/comp import { useEffect, useState } from 'react' import Taro from '@tarojs/taro' import { getToken, wechatLogin } from '@/services/auth' +import { usePageShare } from '@/utils/page-share' import './index.scss' const LOGIN_PAGE_URL = '/pages/login/index' @@ -39,6 +40,7 @@ function navigateAfterLogin(url: string): void { } export default function Login() { + usePageShare() const [submitting, setSubmitting] = useState(false) const [agreementAccepted, setAgreementAccepted] = useState(false) diff --git a/banban-mini/src/pages/notification/index.config.ts b/banban-mini/src/pages/notification/index.config.ts new file mode 100644 index 0000000..68bfc9f --- /dev/null +++ b/banban-mini/src/pages/notification/index.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + enableShareAppMessage: true, +}) diff --git a/banban-mini/src/pages/notification/index.tsx b/banban-mini/src/pages/notification/index.tsx index 45667a0..6d41894 100644 --- a/banban-mini/src/pages/notification/index.tsx +++ b/banban-mini/src/pages/notification/index.tsx @@ -4,6 +4,7 @@ import { useEffect, useState } from 'react' import Taro, { useRouter } from '@tarojs/taro' import { getToken } from '@/services/auth' import { resolveWechatMpNotificationLink } from '@/services/notification' +import { usePageShare } from '@/utils/page-share' import './index.scss' function buildQuery(params: Record): string { @@ -18,6 +19,7 @@ function buildCurrentPageUrl(token: string): string { } export default function NotificationEntry() { + usePageShare() const router = useRouter() const token = String(router.params.token || '').trim() const [message, setMessage] = useState('正在打开留言...') diff --git a/banban-mini/src/pages/sleep-schedule/index.config.ts b/banban-mini/src/pages/sleep-schedule/index.config.ts index f914a9e..3ab1376 100644 --- a/banban-mini/src/pages/sleep-schedule/index.config.ts +++ b/banban-mini/src/pages/sleep-schedule/index.config.ts @@ -2,4 +2,5 @@ export default definePageConfig({ navigationBarTitleText: '定时休眠', navigationBarBackgroundColor: '#F5F7FA', navigationBarTextStyle: 'black', + enableShareAppMessage: true, }) diff --git a/banban-mini/src/pages/sleep-schedule/index.tsx b/banban-mini/src/pages/sleep-schedule/index.tsx index 9f0dc65..78be4b8 100644 --- a/banban-mini/src/pages/sleep-schedule/index.tsx +++ b/banban-mini/src/pages/sleep-schedule/index.tsx @@ -7,6 +7,7 @@ import { loadCurrentChildBindingContext, Binding } from '@/services/binding' import { Child } from '@/services/child' import { DeviceStatus, getDeviceStatus, setDeviceSleepSchedule } from '@/services/device' import { useSystemBanner } from '@/components/system-banner/use-system-banner' +import { usePageShare } from '@/utils/page-share' import './index.scss' function formatSleepRange(status: DeviceStatus | null): string { @@ -28,6 +29,7 @@ function formatUpdatedAt(value?: string | null): string { } export default function SleepSchedule() { + usePageShare() const systemBanner = useSystemBanner() const [isLoading, setIsLoading] = useState(true) const [isSaving, setIsSaving] = useState(false) diff --git a/banban-mini/src/pages/sleep/index.config.ts b/banban-mini/src/pages/sleep/index.config.ts index 5bb75a1..adbf022 100644 --- a/banban-mini/src/pages/sleep/index.config.ts +++ b/banban-mini/src/pages/sleep/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ - navigationStyle: 'custom' -}) \ No newline at end of file + navigationStyle: 'custom', + enableShareAppMessage: true, +}) diff --git a/banban-mini/src/pages/traffic-binding/index.config.ts b/banban-mini/src/pages/traffic-binding/index.config.ts index b555be4..8b8e599 100644 --- a/banban-mini/src/pages/traffic-binding/index.config.ts +++ b/banban-mini/src/pages/traffic-binding/index.config.ts @@ -1 +1,4 @@ -export default definePageConfig({ navigationBarTitleText: '流量服务关联' }) +export default definePageConfig({ + navigationBarTitleText: '流量服务关联', + enableShareAppMessage: true, +}) diff --git a/banban-mini/src/pages/traffic-binding/index.tsx b/banban-mini/src/pages/traffic-binding/index.tsx index e442b83..4aa33be 100644 --- a/banban-mini/src/pages/traffic-binding/index.tsx +++ b/banban-mini/src/pages/traffic-binding/index.tsx @@ -4,11 +4,13 @@ import { useRef, useState } from 'react' import { getToken } from '@/services/auth' import { clearSelectedBindingDeviceId } from '@/services/binding' import { getPageStyle } from '@/utils/page-style' +import { usePageShare } from '@/utils/page-share' import { TrafficOperation, getTrafficOperation, resumeTrafficOperation, flushTrafficReceipt, finishTrafficUnbind, jumpTraffic } from '@/services/traffic-binding' import './index.scss' export default function TrafficBindingPage() { + usePageShare() const { params } = useRouter() const deviceId = String(params.device_id || '') const action = params.action === 'unbind' ? 'unbind' : 'bind' diff --git a/banban-mini/src/pages/webview/index.config.ts b/banban-mini/src/pages/webview/index.config.ts index 9cd43e3..da2bca8 100644 --- a/banban-mini/src/pages/webview/index.config.ts +++ b/banban-mini/src/pages/webview/index.config.ts @@ -1,3 +1,4 @@ export default definePageConfig({ navigationBarTitleText: '服务号通知', + enableShareAppMessage: true, }) diff --git a/banban-mini/src/pages/webview/index.tsx b/banban-mini/src/pages/webview/index.tsx index a7f0abb..e7af0ac 100644 --- a/banban-mini/src/pages/webview/index.tsx +++ b/banban-mini/src/pages/webview/index.tsx @@ -1,8 +1,10 @@ import { Text, View, WebView } from '@tarojs/components' import { useRouter } from '@tarojs/taro' +import { usePageShare } from '@/utils/page-share' import './index.scss' export default function WebviewPage() { + usePageShare() const router = useRouter() const encodedUrl = String(router.params?.url || '').trim() const targetUrl = encodedUrl ? decodeURIComponent(encodedUrl) : '' diff --git a/banban-mini/src/utils/page-share.ts b/banban-mini/src/utils/page-share.ts new file mode 100644 index 0000000..0f94015 --- /dev/null +++ b/banban-mini/src/utils/page-share.ts @@ -0,0 +1,40 @@ +import { useRouter, useShareAppMessage } from '@tarojs/taro' + +const DEFAULT_SHARE_TITLES: Record = { + '/pages/device/index': '伴伴设备管理', + '/pages/login/index': '登录伴伴小程序', + '/pages/bind/index': '绑定伴伴设备', + '/pages/traffic-binding/index': '伴伴流量服务', + '/pages/notification/index': '查看伴伴通知', + '/pages/chat/index': '伴伴聊天记录', + '/pages/chat/detail/index': '查看伴伴聊天', + '/pages/location/index': '查看设备位置', + '/pages/sleep/index': '伴伴设备管理', + '/pages/sleep-schedule/index': '设置设备休眠时间', + '/pages/family-invite/index': '家庭共享邀请', + '/pages/webview/index': '伴伴服务通知', +} + +function normalizePath(path: string): string { + if (!path) return '/pages/device/index' + return path.startsWith('/') ? path : `/${path}` +} + +function buildPagePath(path: string, params: Record): string { + const query = Object.entries(params) + .filter(([, value]) => value !== undefined && value !== '') + .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`) + .join('&') + + return query ? `${path}?${query}` : path +} + +export function usePageShare(title?: string): void { + const router = useRouter() + const pagePath = normalizePath(router.path) + + useShareAppMessage(() => ({ + title: title || DEFAULT_SHARE_TITLES[pagePath] || '伴伴小程序', + path: buildPagePath(pagePath, router.params || {}), + })) +}