share.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. "use strict";
  2. const common_vendor = require("../../common/vendor.js");
  3. const sheep_store_index = require("../store/index.js");
  4. const sheep_platform_index = require("./index.js");
  5. const sheep_router_index = require("../router/index.js");
  6. const sheep_url_index = require("../url/index.js");
  7. const platformMap = ["H5", "WechatOfficialAccount", "WechatMiniProgram", "App"];
  8. const fromMap = ["forward", "poster", "link"];
  9. const getShareInfo = (scene = {
  10. title: "",
  11. // 自定义分享标题
  12. desc: "",
  13. // 自定义描述
  14. image: "",
  15. // 自定义分享图片
  16. params: {}
  17. // 自定义分享参数
  18. }, poster = {
  19. // 自定义海报数据
  20. type: "user"
  21. }) => {
  22. let shareInfo = {
  23. title: "",
  24. // 分享标题
  25. desc: "",
  26. // 描述
  27. image: "",
  28. // 分享图片
  29. path: "",
  30. // 分享页面+参数
  31. link: "",
  32. // 分享Url+参数
  33. query: "",
  34. // 分享参数
  35. poster
  36. // 海报所需数据
  37. };
  38. const app = sheep_store_index.$store("app");
  39. const shareConfig = app.platform.share;
  40. const query = buildSpmQuery(scene.params);
  41. shareInfo.query = query;
  42. shareInfo.link = buildSpmLink(query, shareConfig.linkAddress);
  43. if (shareConfig.methods.includes("forward")) {
  44. if (shareConfig.forwardInfo.title === "" || shareConfig.forwardInfo.image === "") {
  45. console.log("请在平台设置中配置转发信息");
  46. }
  47. shareInfo.title = scene.title || shareConfig.forwardInfo.title;
  48. shareInfo.image = sheep_url_index.$url.cdn(scene.image || shareConfig.forwardInfo.image);
  49. shareInfo.desc = scene.desc || shareConfig.forwardInfo.subtitle;
  50. shareInfo.path = buildSpmPath(query);
  51. }
  52. return shareInfo;
  53. };
  54. const buildSpmQuery = (params) => {
  55. const user = sheep_store_index.$store("user");
  56. let shareId = "0";
  57. if (typeof params.shareId === "undefined") {
  58. if (user.isLogin) {
  59. shareId = user.userInfo.id;
  60. }
  61. }
  62. let page = "1";
  63. if (typeof params.page !== "undefined") {
  64. page = params.page;
  65. }
  66. let query = "0";
  67. if (typeof params.query !== "undefined") {
  68. query = params.query;
  69. }
  70. let platform = platformMap.indexOf(sheep_platform_index._platform.name) + 1;
  71. let from = "1";
  72. if (typeof params.from !== "undefined") {
  73. from = platformMap.indexOf(params.from) + 1;
  74. }
  75. return `spm=${shareId}.${page}.${query}.${platform}.${from}`;
  76. };
  77. const buildSpmPath = (query) => {
  78. return `/pages/index/index?${query}`;
  79. };
  80. const buildSpmLink = (query, linkAddress = "") => {
  81. return `${linkAddress}?${query}`;
  82. };
  83. const decryptSpm = (spm) => {
  84. const user = sheep_store_index.$store("user");
  85. let shareParamsArray = spm.split(".");
  86. let shareParams = {
  87. spm,
  88. shareId: 0,
  89. page: "",
  90. query: {},
  91. platform: "",
  92. from: ""
  93. };
  94. let query;
  95. shareParams.shareId = shareParamsArray[0];
  96. switch (shareParamsArray[1]) {
  97. case "1":
  98. shareParams.page = "/pages/index/index";
  99. break;
  100. case "2":
  101. shareParams.page = "/pages/goods/index";
  102. shareParams.query = {
  103. id: shareParamsArray[2]
  104. };
  105. break;
  106. case "3":
  107. shareParams.page = "/pages/goods/groupon";
  108. query = shareParamsArray[2].split(",");
  109. shareParams.query = {
  110. id: query[0],
  111. activity_id: query[1]
  112. };
  113. break;
  114. case "4":
  115. shareParams.page = "/pages/goods/seckill";
  116. query = shareParamsArray[2].split(",");
  117. shareParams.query = {
  118. id: query[1]
  119. };
  120. break;
  121. case "5":
  122. shareParams.page = "/pages/activity/groupon/detail";
  123. shareParams.query = {
  124. id: shareParamsArray[2]
  125. };
  126. break;
  127. }
  128. shareParams.platform = platformMap[shareParamsArray[3] - 1];
  129. shareParams.from = fromMap[shareParamsArray[4] - 1];
  130. if (shareParams.shareId != 0) {
  131. if (user.isLogin) {
  132. user.addShareLog(shareParams);
  133. } else {
  134. common_vendor.index.setStorageSync("shareLog", shareParams);
  135. }
  136. }
  137. if (shareParams.page !== "/pages/index/index") {
  138. sheep_router_index.$router.go(shareParams.page, shareParams.query);
  139. }
  140. return shareParams;
  141. };
  142. const updateShareInfo = (shareInfo) => {
  143. };
  144. const $share = {
  145. getShareInfo,
  146. updateShareInfo,
  147. decryptSpm
  148. };
  149. exports.$share = $share;