index.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { getShareConfigApi } from "../../api/share.api";
  2. import ShareConfigModel from "../../store/models/shareConfig.model";
  3. const shareConfigModel = ShareConfigModel.getInstance();
  4. /**
  5. * 初始化分享配置
  6. */
  7. export const initShareConfig = async () => {
  8. try {
  9. shareConfigModel.clear();
  10. const shareConfigData = await getShareConfigApi()
  11. if(shareConfigData.length){
  12. // 从数组中随机选择一个分享配置
  13. const randomShareConfig = shareConfigData[Math.floor(Math.random() * shareConfigData.length)];
  14. shareConfigModel.save(randomShareConfig)
  15. }
  16. return Promise.resolve()
  17. } catch (error) {
  18. return Promise.reject(error)
  19. }
  20. }
  21. /**
  22. * 开启系统分享
  23. */
  24. export const openSystemShare = async () => {
  25. const shareConfig = shareConfigModel.get()
  26. if (!shareConfig) {
  27. return
  28. }
  29. try {
  30. // 开启分享按钮
  31. tt.showShareMenu({});
  32. await initShareConfig();
  33. let shareData = generateShareData({});
  34. tt.onShareAppMessage(() => {
  35. return shareData;
  36. });
  37. return Promise.resolve();
  38. } catch (error) {
  39. return Promise.reject(error);
  40. }
  41. }
  42. /**
  43. * 主动发起分享
  44. */
  45. export const share = async(data) => {
  46. const shareConfig = shareConfigModel.get()
  47. if (!shareConfig) {
  48. return
  49. }
  50. try {
  51. await initShareConfig();
  52. // 发起分享
  53. let shareData = generateShareData(data);
  54. tt.shareAppMessage(shareData);
  55. return Promise.resolve();
  56. } catch (error) {
  57. return Promise.reject(error);
  58. }
  59. }
  60. /**
  61. * 主动监听研发透传参数
  62. */
  63. export const onShareAppMessage = (data,menus=['shareAppMessage']) => {
  64. console.log("onShareAppMessage入参" + JSON.stringify(data));
  65. //先off,再on
  66. tt.offShareAppMessage();
  67. let shareData = generateShareData(data);
  68. tt.showShareMenu({});
  69. tt.onShareAppMessage(() => {
  70. return shareData;
  71. });
  72. };
  73. /**
  74. * 构建分享数据
  75. * @param data
  76. * @returns
  77. */
  78. const generateShareData = (data) => {
  79. let shareConfigInfo = shareConfigModel.get();
  80. let shareData = {
  81. title: shareConfigInfo.title,
  82. imageUrl: shareConfigInfo.imageUrl,
  83. query: shareConfigInfo.query,
  84. };
  85. let share_ext = "";
  86. // 记录分享透传参数
  87. if (data.hasOwnProperty("title") && data.title) shareData.title = data.title;
  88. if (data.hasOwnProperty("imageUrl") && data.imageUrl) shareData.imageUrl = data.imageUrl;
  89. if (data.hasOwnProperty("ext") && data.ext) share_ext = data.ext;
  90. //前面这个share_ext是研发透传进来的,后面这个是服务端传进来的
  91. shareData.query += shareConfigInfo.share_ext;
  92. if (share_ext) {
  93. shareData.query += `&share_ext=` + share_ext;
  94. }
  95. return shareData;
  96. };