share.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import request from "../utils/request.js";
  2. import ShareConfigModel from "../model/ShareConfigModel";
  3. /**
  4. * @description:检查分享配置
  5. * @return {*}
  6. */
  7. const checkShareConfig = async () => {
  8. try {
  9. // 加载分享配置
  10. let shareConfigInfo = ShareConfigModel.getInstance().getInfo();
  11. if (
  12. Object.getOwnPropertyNames(shareConfigInfo).length === 0 ||
  13. shareConfigInfo.title === ""
  14. ) {
  15. // 获取服务端分享配置
  16. const res = await request.api("COMMON", {
  17. do: "getShareConfig",
  18. });
  19. res.imageUrl = res.image_url;
  20. ShareConfigModel.getInstance().load(res);
  21. }
  22. return Promise.resolve();
  23. } catch (error) {
  24. return Promise.reject(error);
  25. }
  26. };
  27. /**
  28. * @description: 开启系统分享
  29. * @return {*}
  30. */
  31. export const showShareMenu = async () => {
  32. try {
  33. // 开启分享按钮
  34. tt.showShareMenu({
  35. withShareTicket: true,
  36. });
  37. await checkShareConfig();
  38. let shareData = buildShareData({});
  39. tt.onShareAppMessage(() => {
  40. return shareData;
  41. });
  42. return Promise.resolve();
  43. } catch (error) {
  44. return Promise.reject(error);
  45. }
  46. };
  47. /**
  48. * @description: 主动发起分享
  49. * @param {*} data
  50. * @return {*}
  51. */
  52. export const shareAppMessage = async (data) => {
  53. console.log("shareAppMessage入参" + JSON.stringify(data));
  54. try {
  55. await checkShareConfig();
  56. let shareData = buildShareData(data);
  57. console.log("发起分享参数" + JSON.stringify(shareData));
  58. // 发起分享
  59. tt.shareAppMessage(shareData);
  60. return Promise.resolve();
  61. } catch (error) {
  62. return Promise.reject(error);
  63. }
  64. };
  65. const buildShareData = (data) => {
  66. let shareConfigInfo = ShareConfigModel.getInstance().getInfo();
  67. let shareData = {
  68. title: shareConfigInfo.title,
  69. imageUrl: shareConfigInfo.imageUrl,
  70. query: shareConfigInfo.query,
  71. };
  72. let share_ext = "";
  73. // 记录分享透传参数
  74. if (data.hasOwnProperty("title") && data.title) shareData.title = data.title;
  75. if (data.hasOwnProperty("imageUrl") && data.imageUrl)
  76. shareData.imageUrl = data.imageUrl;
  77. if (data.hasOwnProperty("ext") && data.ext) share_ext = data.ext;
  78. //前面这个share_ext是研发透传进来的,后面这个是服务端传进来的
  79. shareData.query += shareConfigInfo.share_ext;
  80. if (share_ext) {
  81. shareData.query += `&share_ext=` + share_ext;
  82. }
  83. return shareData;
  84. };
  85. /**
  86. * @description: 主动监听研发透传参数
  87. * @param {*} data
  88. * @return {*}
  89. */
  90. export const onShareAppMessage = (data, menus = ["shareAppMessage"]) => {
  91. console.log("onShareAppMessage入参" + JSON.stringify(data));
  92. //先off,再on
  93. tt.offShareAppMessage();
  94. let shareData = buildShareData(data);
  95. tt.showShareMenu({
  96. withShareTicket: true,
  97. menus: menus,
  98. });
  99. tt.onShareAppMessage(() => {
  100. return shareData;
  101. });
  102. };