useShare.js 2.32 KB
/*
 * @Date: 2022-06-13 17:42:32
 * @LastEditors: hookehuyr hookehuyr@gmail.com
 * @LastEditTime: 2025-12-04 13:36:41
 * @FilePath: /mlaj/src/composables/useShare.js
 * @Description: 文件描述
 */
import wx from 'weixin-js-sdk';

/**
 * @function normalize_image_url
 * @description 规范化分享图片地址;若域名为 cdn.ipadbiz.cn,追加压缩参数。
 * @param {string} src 原始图片地址
 * @returns {string} 处理后的图片地址
 */
function normalize_image_url(src) {
    if (!src) return '';
    if (src.includes('cdn.ipadbiz.cn')) {
        const compress = 'imageMogr2/thumbnail/200x/strip/quality/70';
        if (src.includes('?')) {
            return src.includes(compress) ? src : `${src}&${compress}`;
        }
        return `${src}?${compress}`;
    }
    return src;
}

/**
 * @description: 微信分享功能
 * @param {*} title 标题
 * @param {*} desc 描述
 * @param {*} imgUrl 图标
 * @return {*}
 */
/**
 * @function sharePage
 * @description 配置微信分享标题、描述与图标;需在 wx.ready 后调用才会生效。
 * @param {Object} params 分享参数
 * @param {string} params.title 分享标题
 * @param {string} params.desc 分享描述
 * @param {string} params.imgUrl 分享图标地址
 * @returns {void}
 */
export const sharePage = ({ title = '美乐爱觉', desc = '', imgUrl = '' }) => {
    const shareData = {
        title, // 分享标题
        desc, // 分享描述
        link: location.origin + location.pathname + location.hash, // 分享链接,需与公众号 JS 安全域名一致
        imgUrl: normalize_image_url(imgUrl), // 分享图标,按规则追加压缩参数
        success: function () {
            // 设置成功回调
        }
    }

    if (wx && typeof wx.ready === 'function') {
        wx.ready(() => {
            // 分享好友(微信好友或qq好友)
            wx.updateAppMessageShareData(shareData);
            // 分享到朋友圈或qq空间
            wx.updateTimelineShareData(shareData);
            // 分享到腾讯微博
            if (typeof wx.onMenuShareWeibo === 'function') {
                wx.onMenuShareWeibo(shareData);
            }
        });
    } else {
        // 微信 JSSDK 未初始化或未就绪,分享配置可能不会生效
        console.warn('微信 JSSDK 未就绪:分享配置可能未生效');
    }
}