hookehuyr

feat(首页): 添加首页分享功能

启用页面分享配置,自定义分享标题优先使用首页内容标题或默认值「觉林寺」,使用首个顶部横幅图片作为分享封面,并为分享路径添加分享标记
......@@ -6,5 +6,6 @@
* @Description: 首页配置
*/
export default {
navigationBarTitleText: '首页'
navigationBarTitleText: '首页',
enableShareAppMessage: true,
}
......
......@@ -76,11 +76,12 @@
<script setup>
import { computed, ref } from 'vue'
import Taro, { useLoad } from '@tarojs/taro'
import Taro, { useLoad, useShareAppMessage } from '@tarojs/taro'
import AppTabbar from '@/components/AppTabbar.vue'
import { getHomeContentAPI } from '@/api'
import { buildWebviewPreviewUrl } from '@/utils/webview'
import { isMockEnabled } from '@/utils/config'
import { addShareFlag } from '@/utils/authRedirect'
const defaultIcon = 'icon-jingxiuying'
const homeContent = ref({
......@@ -97,6 +98,11 @@ const homeIcons = computed(() => homeContent.value.volunteer_home_icon || [])
const hasTopBanner = computed(() => topBanners.value.some((item) => item?.image_url))
const shouldUseTopBannerSwiper = computed(() => topBanners.value.filter((item) => item?.image_url).length > 1)
const isMockHomeData = computed(() => isMockEnabled())
const shareTitle = computed(() => String(homeContent.value?.title || '').trim() || '觉林寺')
const shareImageUrl = computed(() => {
const firstBanner = topBanners.value.find((item) => item?.image_url)
return firstBanner?.image_url || ''
})
const getItemTargetUrl = (item) => String(item?.target_url || '').trim()
......@@ -169,6 +175,19 @@ const fetchHomeContent = async () => {
useLoad(() => {
fetchHomeContent()
})
useShareAppMessage(() => {
const shareOptions = {
title: shareTitle.value,
path: addShareFlag('pages/index/index'),
}
if (shareImageUrl.value) {
shareOptions.imageUrl = shareImageUrl.value
}
return shareOptions
})
</script>
<style lang="less">
......