Jelajahi Sumber

!55 解析分享参数,绑定推广员
Merge pull request !55 from puhui999/master

芋道源码 1 tahun lalu
induk
melakukan
6550441bc9

+ 4 - 1
sheep/components/s-share-modal/canvas-poster/index.vue

@@ -29,6 +29,7 @@
     <!--  海报画板:默认隐藏只用来生成海报。生成方式为主动调用  -->
     <l-painter
       isCanvasToTempFilePath
+      pathType="url"
       @success="setPainterImageUrl"
       hidden
       ref="painterRef"
@@ -65,7 +66,7 @@
     css: {
       // 根节点若无尺寸,自动获取父级节点
       width: sheep.$platform.device.windowWidth * 0.9,
-      height: 600,
+      height: 550,
     },
     views: [],
   });
@@ -92,6 +93,7 @@
       sheep.$helper.toast('请长按图片保存');
       return;
     }
+
     // 非H5 保存到相册
     uni.saveImageToPhotosAlbum({
       filePath: painterImageUrl.value,
@@ -108,6 +110,7 @@
 
   // 获得海报数据
   async function getPoster() {
+    painterImageUrl.value = undefined
     poster.views = await getPosterData({
       width: poster.css.width,
       shareInfo: props.shareInfo,

+ 5 - 6
sheep/components/s-share-modal/canvas-poster/poster/goods.js

@@ -1,11 +1,10 @@
 import sheep from '@/sheep';
-import third from '@/sheep/api/migration/third';
-import { formatImageUrlProtocol } from './index';
+import { formatImageUrlProtocol, getWxaQrcode } from './index';
 
 const goods = async (poster) => {
   const width = poster.width;
   const userInfo = sheep.$store('user').userInfo;
-  const wxa_qrcode = 'data:image/png;base64,' + (await third.wechat.getWxacode(poster.shareInfo.path, poster.shareInfo.query)).data;
+  const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query);
   return [
     {
       type: 'image',
@@ -62,7 +61,7 @@ const goods = async (poster) => {
         top: width * 1.18,
         color: '#333',
         fontSize: 14,
-        lineHeight: 5,
+        lineHeight: 15,
         maxWidth: width * 0.91,
       },
     },
@@ -72,7 +71,7 @@ const goods = async (poster) => {
       css: {
         position: 'fixed',
         left: width * 0.04,
-        top: width * 1.3,
+        top: width * 1.31,
         fontSize: 20,
         fontFamily: 'OPPOSANS',
         color: '#333',
@@ -87,7 +86,7 @@ const goods = async (poster) => {
       css: {
         position: 'fixed',
         left: width * 0.3,
-        top: width * 1.32,
+        top: width * 1.33,
         color: '#999',
         fontSize: 10,
         fontFamily: 'OPPOSANS',

+ 2 - 3
sheep/components/s-share-modal/canvas-poster/poster/groupon.js

@@ -1,11 +1,10 @@
 import sheep from '@/sheep';
-import { formatImageUrlProtocol } from './index';
-import third from '@/sheep/api/migration/third';
+import { formatImageUrlProtocol, getWxaQrcode } from './index';
 
 const groupon = async (poster) => {
   const width = poster.width;
   const userInfo = sheep.$store('user').userInfo;
-  const wxa_qrcode = 'data:image/png;base64,' + (await third.wechat.getWxacode(poster.shareInfo.path, poster.shareInfo.query)).data;
+  const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query);
   return [
     {
       type: 'image',

+ 7 - 0
sheep/components/s-share-modal/canvas-poster/poster/index.js

@@ -1,6 +1,7 @@
 import user from './user';
 import goods from './goods';
 import groupon from './groupon';
+import third from '@/sheep/api/migration/third';
 
 export function getPosterData(options) {
   switch (options.shareInfo.poster.type) {
@@ -30,3 +31,9 @@ export function formatImageUrlProtocol(url) {
 
   return url;
 }
+
+// 获得微信小程序码 (Base64 image)
+export async function getWxaQrcode(path, query) {
+  const res = await third.wechat.getWxacode(path, query);
+  return 'data:image/png;base64,' + res.data;
+}

+ 2 - 3
sheep/components/s-share-modal/canvas-poster/poster/user.js

@@ -1,11 +1,10 @@
 import sheep from '@/sheep';
-import { formatImageUrlProtocol } from './index';
-import third from '@/sheep/api/migration/third';
+import { formatImageUrlProtocol, getWxaQrcode } from './index';
 
 const user = async (poster) => {
   const width = poster.width;
   const userInfo = sheep.$store('user').userInfo;
-  const wxa_qrcode = 'data:image/png;base64,' + (await third.wechat.getWxacode(poster.shareInfo.path, poster.shareInfo.query)).data;
+  const wxa_qrcode = await getWxaQrcode(poster.shareInfo.path, poster.shareInfo.query);
   return [
     {
       type: 'image',

+ 3 - 0
sheep/platform/provider/wechat/openPlatform.js

@@ -1,6 +1,7 @@
 // 登录
 import third from '@/sheep/api/migration/third';
 import SocialApi from '@/sheep/api/member/social';
+import $share from '@/sheep/platform/share';
 
 // TODO 芋艿:等后面搞 App 再弄
 const socialType = 32; // 社交类型 - 微信开放平台
@@ -16,6 +17,7 @@ const login = () => {
     });
     debugger
     if (loginRes.errMsg == 'login:ok') {
+      // TODO third.wechat.login 函数未实现
       const res = await third.wechat.login({
         platform: 'openPlatform',
         shareInfo: uni.getStorageSync('shareLog') || {},
@@ -27,6 +29,7 @@ const login = () => {
       });
 
       if (res.error === 0) {
+        $share.bindBrokerageUser()
         resolve(true);
       }
     } else {

+ 20 - 7
sheep/platform/share.js

@@ -2,6 +2,7 @@ import $store from '@/sheep/store';
 import $platform from '@/sheep/platform';
 import $router from '@/sheep/router';
 import $url from '@/sheep/url';
+import BrokerageApi from '@/sheep/api/trade/brokerage';
 // #ifdef H5
 import $wxsdk from '@/sheep/libs/sdk-h5-weixin';
 // #endif
@@ -152,18 +153,16 @@ const decryptSpm = (spm) => {
         id: shareParamsArray[2],
       };
       break;
-    case '6': // 分销
-      // TODO puhui999: 如果用户未登录想想怎么搞
   }
   shareParams.platform = platformMap[shareParamsArray[3] - 1];
   shareParams.from = fromMap[shareParamsArray[4] - 1];
-  if (shareParams.shareId != 0) {
-    // 已登录 立即添加分享记录
+  if (shareParams.shareId !== 0) {
+    // 已登录 绑定推广员
     if (user.isLogin) {
-      user.addShareLog(shareParams);
+      bindBrokerageUser(shareParams.shareId);
     } else {
-      // 未登录 待用户登录后添加分享记录
-      uni.setStorageSync('shareLog', shareParams);
+      // 记录分享者编号
+      uni.setStorageSync('shareId', shareParams.shareId);
     }
   }
 
@@ -173,6 +172,19 @@ const decryptSpm = (spm) => {
   return shareParams;
 };
 
+// 绑定推广员
+const bindBrokerageUser = async (val= undefined) => {
+  try {
+    const shareId = val || uni.getStorageSync('shareId');
+    if (!shareId) {
+      return;
+    }
+    await BrokerageApi.bindBrokerageUser({ bindUserId: shareId });
+    uni.removeStorageSync('shareId');
+  } catch {
+  }
+};
+
 // 更新公众号分享sdk
 const updateShareInfo = (shareInfo) => {
   // #ifdef H5
@@ -186,4 +198,5 @@ export default {
   getShareInfo,
   updateShareInfo,
   decryptSpm,
+  bindBrokerageUser,
 };

+ 91 - 97
sheep/store/user.js

@@ -1,17 +1,9 @@
-import {
-	defineStore
-} from 'pinia';
+import { defineStore } from 'pinia';
 import $share from '@/sheep/platform/share';
-import {
-	isEmpty,
-	cloneDeep,
-	clone
-} from 'lodash';
+import { clone, cloneDeep } from 'lodash';
 import cart from './cart';
 import app from './app';
-import {
-	showAuthModal
-} from '@/sheep/hooks/useModal';
+import { showAuthModal } from '@/sheep/hooks/useModal';
 import UserApi from '@/sheep/api/member/user';
 import PayWalletApi from '@/sheep/api/pay/wallet';
 import OrderApi from '@/sheep/api/trade/order';
@@ -19,17 +11,17 @@ import CouponApi from '@/sheep/api/promotion/coupon';
 
 // 默认用户信息
 const defaultUserInfo = {
-	avatar: '', // 头像
-	nickname: '', // 昵称
-	gender: 0, // 性别
-	mobile: '', // 手机号
+  avatar: '', // 头像
+  nickname: '', // 昵称
+  gender: 0, // 性别
+  mobile: '', // 手机号
   point: 0, // 积分
 };
 
 // 默认钱包信息
 const defaultUserWallet = {
   balance: 0, // 余额
-}
+};
 
 // 默认订单、优惠券等其他资产信息
 const defaultNumData = {
@@ -41,29 +33,29 @@ const defaultNumData = {
     deliveredCount: 0,
     uncommentedCount: 0,
     afterSaleCount: 0,
-	},
+  },
 };
 
 const user = defineStore({
-	id: 'user',
-	state: () => ({
-		userInfo: clone(defaultUserInfo), // 用户信息
+  id: 'user',
+  state: () => ({
+    userInfo: clone(defaultUserInfo), // 用户信息
     userWallet: clone(defaultUserWallet), // 用户钱包信息
-		isLogin: !!uni.getStorageSync('token'), // 登录状态
-		numData: cloneDeep(defaultNumData), // 用户其他数据
-		lastUpdateTime: 0, // 上次更新时间
-	}),
-
-	actions: {
-		// 获取用户信息
-		async getInfo() {
-			const { code, data } = await UserApi.getUserInfo();
+    isLogin: !!uni.getStorageSync('token'), // 登录状态
+    numData: cloneDeep(defaultNumData), // 用户其他数据
+    lastUpdateTime: 0, // 上次更新时间
+  }),
+
+  actions: {
+    // 获取用户信息
+    async getInfo() {
+      const { code, data } = await UserApi.getUserInfo();
       if (code !== 0) {
         return;
       }
       this.userInfo = data;
-			return Promise.resolve(data);
-		},
+      return Promise.resolve(data);
+    },
 
     // 获得用户钱包
     async getWallet() {
@@ -74,7 +66,7 @@ const user = defineStore({
       this.userWallet = data;
     },
 
-		// 获取订单、优惠券等其他资产信息
+    // 获取订单、优惠券等其他资产信息
     getNumData() {
       OrderApi.getOrderCount().then(res => {
         if (res.code === 0) {
@@ -86,101 +78,103 @@ const user = defineStore({
           this.numData.unusedCouponCount = res.data;
         }
       });
-		},
+    },
 
-		// 添加分享记录
+    // 添加分享记录
     // TODO 芋艿:整理下;
-    async addShareLog(params) {
-			const {
-				error
-			} = await userApi.addShareLog(params);
-			if (error === 0) uni.removeStorageSync('shareLog');
-		},
-
-		// 设置 token
+    // async addShareLog(params) {
+    // 	const {
+    // 		error
+    // 	} = await userApi.addShareLog(params);
+    // 	if (error === 0) uni.removeStorageSync('shareLog');
+    // },
+
+    // 设置 token
     setToken(token = '', refreshToken = '') {
-			if (token === '') {
-				this.isLogin = false;
-				uni.removeStorageSync('token');
-        uni.removeStorageSync('refresh-token')
-			} else {
-				this.isLogin = true;
-				uni.setStorageSync('token', token);
+      if (token === '') {
+        this.isLogin = false;
+        uni.removeStorageSync('token');
+        uni.removeStorageSync('refresh-token');
+      } else {
+        this.isLogin = true;
+        uni.setStorageSync('token', token);
         uni.setStorageSync('refresh-token', refreshToken);
-				this.loginAfter();
-			}
-			return this.isLogin;
-		},
+        this.loginAfter();
+      }
+      return this.isLogin;
+    },
 
-		// 更新用户相关信息 (手动限流,5 秒之内不刷新)
+    // 更新用户相关信息 (手动限流,5 秒之内不刷新)
     async updateUserData() {
-			if (!this.isLogin) {
-				this.resetUserData();
-				return;
-			}
+      if (!this.isLogin) {
+        this.resetUserData();
+        return;
+      }
       // 防抖,5 秒之内不刷新
-			const nowTime = new Date().getTime();
+      const nowTime = new Date().getTime();
       if (this.lastUpdateTime + 5000 > nowTime) {
         return;
       }
       this.lastUpdateTime = nowTime;
 
       // 获取最新信息
-			await this.getInfo();
+      await this.getInfo();
       this.getWallet();
-			this.getNumData();
-			return this.userInfo;
-		},
+      this.getNumData();
+      return this.userInfo;
+    },
 
-		// 重置用户默认数据
+    // 重置用户默认数据
     resetUserData() {
       // 清空 token
-			this.setToken();
+      this.setToken();
       // 清空用户相关的缓存
-			this.userInfo = clone(defaultUserInfo);
+      this.userInfo = clone(defaultUserInfo);
       this.userWallet = clone(defaultUserWallet);
-			this.numData = cloneDeep(defaultNumData);
+      this.numData = cloneDeep(defaultNumData);
       // 清空购物车的缓存
-			cart().emptyList();
-		},
+      cart().emptyList();
+    },
 
-		// 登录后,加载各种信息
+    // 登录后,加载各种信息
     // TODO 芋艿:整理下;
     async loginAfter() {
-			await this.updateUserData();
+      await this.updateUserData();
 
       // 加载购物车
-			cart().getList();
-			// 登录后设置全局分享参数
-			$share.getShareInfo();
+      cart().getList();
+      // 登录后设置全局分享参数
+      $share.getShareInfo();
 
-			// 提醒绑定手机号
-			if (app().platform.bind_mobile && !this.userInfo.mobile) {
-				showAuthModal('changeMobile');
-			}
+      // 提醒绑定手机号
+      if (app().platform.bind_mobile && !this.userInfo.mobile) {
+        showAuthModal('changeMobile');
+      }
 
-			// 添加分享记录
+      // 绑定推广员
+      $share.bindBrokerageUser()
+      // 添加分享记录
       // TODO 芋艿:整理下;
-      const shareLog = uni.getStorageSync('shareLog');
-			if (!isEmpty(shareLog)) {
-				this.addShareLog({
-					...shareLog,
-				});
-			}
-		},
-
-		// 登出系统
+      // const shareLog = uni.getStorageSync('shareLog');
+      // if (!isEmpty(shareLog)) {
+      // 	this.addShareLog({
+      // 		...shareLog,
+      // 	});
+      // }
+    },
+
+    // 登出系统
     async logout() {
       this.resetUserData();
-			return !this.isLogin;
-		}
-	},
-	persist: {
-		enabled: true,
-		strategies: [{
-			key: 'user-store',
-		}, ],
-	},
+      return !this.isLogin;
+    }
+  },
+  persist: {
+    enabled: true,
+    strategies: [{
+      key: 'user-store',
+    }]
+  },
 });
 
 export default user;