|
@@ -0,0 +1,464 @@
|
|
|
+/**
|
|
|
+ * tabBar页面路径列表 (用于链接跳转时判断)
|
|
|
+ * tabBarLinks为常量, 无需修改
|
|
|
+ */
|
|
|
+const tabBarLinks = [
|
|
|
+ 'pages/index/index',
|
|
|
+ 'pages/category/index',
|
|
|
+ 'pages/flow/index',
|
|
|
+ 'pages/user/index'
|
|
|
+];
|
|
|
+
|
|
|
+// 站点配置文件
|
|
|
+import siteinfo from './siteinfo.js';
|
|
|
+
|
|
|
+// 工具类
|
|
|
+import util from './utils/util.js';
|
|
|
+
|
|
|
+App({
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 全局变量
|
|
|
+ */
|
|
|
+ globalData: {
|
|
|
+ user_id: null,
|
|
|
+ },
|
|
|
+
|
|
|
+ // api地址
|
|
|
+ api_root: siteinfo.siteroot + 'index.php?s=/api/',
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生命周期函数--监听小程序初始化
|
|
|
+ */
|
|
|
+ onLaunch(e) {
|
|
|
+ let _this = this;
|
|
|
+ // 小程序主动更新
|
|
|
+ _this.updateManager();
|
|
|
+ // 小程序启动场景
|
|
|
+ _this.onStartupScene(e.query);
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 小程序启动场景
|
|
|
+ */
|
|
|
+ onStartupScene(query) {
|
|
|
+ // 获取场景值
|
|
|
+ let scene = this.getSceneData(query);
|
|
|
+ // 记录推荐人id
|
|
|
+ let refereeId = query.referee_id ? query.referee_id : scene.uid;
|
|
|
+ refereeId > 0 && (this.saveRefereeId(refereeId));
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取商城ID
|
|
|
+ */
|
|
|
+ getWxappId() {
|
|
|
+ return siteinfo.uniacid || 10001;
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录推荐人id
|
|
|
+ */
|
|
|
+ saveRefereeId(refereeId) {
|
|
|
+ let App = this;
|
|
|
+ refereeId = parseInt(refereeId);
|
|
|
+ if (refereeId <= 0 || refereeId == App.getUserId()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (wx.getStorageSync('referee_id')) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ wx.setStorageSync('referee_id', refereeId);
|
|
|
+ return true;
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取场景值(scene)
|
|
|
+ */
|
|
|
+ getSceneData(query) {
|
|
|
+ return query.scene ? util.scene_decode(query.scene) : {};
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 当小程序启动,或从后台进入前台显示,会触发 onShow
|
|
|
+ */
|
|
|
+ onShow(options) {
|
|
|
+ let App = this;
|
|
|
+ try {
|
|
|
+ const livePlayer = requirePlugin('live-player-plugin');
|
|
|
+ if (options.scene == 1007 || options.scene == 1008 || options.scene == 1044) {
|
|
|
+ livePlayer.getShareParams()
|
|
|
+ .then(res => {
|
|
|
+ // 直播页面的自定义参数
|
|
|
+ let customParams = res.custom_params;
|
|
|
+ console.log('get custom params', customParams);
|
|
|
+ // 记录推荐人ID
|
|
|
+ if (customParams.hasOwnProperty('referee_id')) {
|
|
|
+ App.saveRefereeId(customParams['referee_id']);
|
|
|
+ }
|
|
|
+ }).catch(err => {
|
|
|
+ console.log('get share params', err)
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行用户登录
|
|
|
+ */
|
|
|
+ doLogin(delta) {
|
|
|
+ // 保存当前页面
|
|
|
+ let pages = getCurrentPages();
|
|
|
+ if (pages.length) {
|
|
|
+ let currentPage = pages[pages.length - 1];
|
|
|
+ "pages/login/login" != currentPage.route &&
|
|
|
+ wx.setStorageSync("currentPage", currentPage);
|
|
|
+ }
|
|
|
+ // 跳转授权页面
|
|
|
+ wx.navigateTo({
|
|
|
+ url: "/pages/login/login?delta=" + (delta || 1)
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 当前用户id
|
|
|
+ */
|
|
|
+ getUserId() {
|
|
|
+ return wx.getStorageSync('user_id');
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示成功提示框
|
|
|
+ */
|
|
|
+ showSuccess(msg, callback) {
|
|
|
+ wx.showToast({
|
|
|
+ title: msg,
|
|
|
+ icon: 'success',
|
|
|
+ mask: true,
|
|
|
+ duration: 1500,
|
|
|
+ success() {
|
|
|
+ callback && (setTimeout(() => {
|
|
|
+ callback();
|
|
|
+ }, 1500));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 显示失败提示框
|
|
|
+ */
|
|
|
+ showError(msg, callback) {
|
|
|
+ wx.showModal({
|
|
|
+ title: '友情提示',
|
|
|
+ content: msg,
|
|
|
+ showCancel: false,
|
|
|
+ success(res) {
|
|
|
+ // callback && (setTimeout(() => {
|
|
|
+ // callback();
|
|
|
+ // }, 1500));
|
|
|
+ callback && callback();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * get请求
|
|
|
+ */
|
|
|
+ _get(url, data, success, fail, complete, check_login) {
|
|
|
+ wx.showNavigationBarLoading();
|
|
|
+ let _this = this;
|
|
|
+ // 构造请求参数
|
|
|
+ data = data || {};
|
|
|
+ data.wxapp_id = _this.getWxappId();
|
|
|
+
|
|
|
+ // if (typeof check_login === 'undefined')
|
|
|
+ // check_login = true;
|
|
|
+
|
|
|
+ // 构造get请求
|
|
|
+ let request = () => {
|
|
|
+ data.token = wx.getStorageSync('token');
|
|
|
+ wx.request({
|
|
|
+ url: _this.api_root + url,
|
|
|
+ header: {
|
|
|
+ 'content-type': 'application/json'
|
|
|
+ },
|
|
|
+ data: data,
|
|
|
+ success(res) {
|
|
|
+ if (res.statusCode !== 200 || typeof res.data !== 'object') {
|
|
|
+ console.log(res);
|
|
|
+ _this.showError('网络请求出错');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (res.data.code === -1) {
|
|
|
+ // 登录态失效, 重新登录
|
|
|
+ wx.hideNavigationBarLoading();
|
|
|
+ _this.doLogin(2);
|
|
|
+ } else if (res.data.code === 0) {
|
|
|
+ _this.showError(res.data.msg, () => {
|
|
|
+ fail && fail(res);
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ success && success(res.data);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fail(res) {
|
|
|
+ _this.showError(res.errMsg, () => {
|
|
|
+ fail && fail(res);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ complete(res) {
|
|
|
+ wx.hideNavigationBarLoading();
|
|
|
+ complete && complete(res);
|
|
|
+ },
|
|
|
+ });
|
|
|
+ };
|
|
|
+ // 判断是否需要验证登录
|
|
|
+ check_login ? _this.doLogin(request) : request();
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * post提交
|
|
|
+ */
|
|
|
+ _post_form(url, data, success, fail, complete, isShowNavBarLoading) {
|
|
|
+ let _this = this;
|
|
|
+
|
|
|
+ isShowNavBarLoading || true;
|
|
|
+ data.wxapp_id = _this.getWxappId();
|
|
|
+ data.token = wx.getStorageSync('token');
|
|
|
+
|
|
|
+ // 在当前页面显示导航条加载动画
|
|
|
+ if (isShowNavBarLoading == true) {
|
|
|
+ wx.showNavigationBarLoading();
|
|
|
+ }
|
|
|
+ wx.request({
|
|
|
+ url: _this.api_root + url,
|
|
|
+ header: {
|
|
|
+ 'content-type': 'application/x-www-form-urlencoded',
|
|
|
+ },
|
|
|
+ method: 'POST',
|
|
|
+ data: data,
|
|
|
+ success(res) {
|
|
|
+ if (res.statusCode !== 200 || typeof res.data !== 'object') {
|
|
|
+ _this.showError('网络请求出错');
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ if (res.data.code === -1) {
|
|
|
+ // 登录态失效, 重新登录
|
|
|
+ wx.hideNavigationBarLoading();
|
|
|
+ _this.doLogin(1);
|
|
|
+ return false;
|
|
|
+ } else if (res.data.code === 0) {
|
|
|
+ _this.showError(res.data.msg, () => {
|
|
|
+ fail && fail(res);
|
|
|
+ });
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ success && success(res.data);
|
|
|
+ },
|
|
|
+ fail(res) {
|
|
|
+ // console.log(res);
|
|
|
+ _this.showError(res.errMsg, () => {
|
|
|
+ fail && fail(res);
|
|
|
+ });
|
|
|
+ },
|
|
|
+ complete(res) {
|
|
|
+ wx.hideNavigationBarLoading();
|
|
|
+ // wx.hideLoading();
|
|
|
+ complete && complete(res);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证是否存在user_info
|
|
|
+ */
|
|
|
+ validateUserInfo() {
|
|
|
+ let user_info = wx.getStorageSync('user_info');
|
|
|
+ return !!wx.getStorageSync('user_info');
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 小程序主动更新
|
|
|
+ */
|
|
|
+ updateManager() {
|
|
|
+ if (!wx.canIUse('getUpdateManager')) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ const updateManager = wx.getUpdateManager();
|
|
|
+ updateManager.onCheckForUpdate(res => {
|
|
|
+ // 请求完新版本信息的回调
|
|
|
+ // console.log(res.hasUpdate)
|
|
|
+ });
|
|
|
+ updateManager.onUpdateReady(() => {
|
|
|
+ wx.showModal({
|
|
|
+ title: '更新提示',
|
|
|
+ content: '新版本已经准备好,即将重启应用',
|
|
|
+ showCancel: false,
|
|
|
+ success(res) {
|
|
|
+ if (res.confirm) {
|
|
|
+ // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启
|
|
|
+ updateManager.applyUpdate()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ updateManager.onUpdateFailed(() => {
|
|
|
+ // 新的版本下载失败
|
|
|
+ wx.showModal({
|
|
|
+ title: '更新提示',
|
|
|
+ content: '新版本下载失败',
|
|
|
+ showCancel: false
|
|
|
+ })
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取tabBar页面路径列表
|
|
|
+ */
|
|
|
+ getTabBarLinks() {
|
|
|
+ return tabBarLinks;
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 跳转到指定页面
|
|
|
+ * 支持tabBar页面
|
|
|
+ */
|
|
|
+ navigationTo(url) {
|
|
|
+ if (!url || url.length == 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ let tabBarLinks = this.getTabBarLinks();
|
|
|
+ // tabBar页面
|
|
|
+ if (tabBarLinks.indexOf(url) > -1) {
|
|
|
+ wx.switchTab({
|
|
|
+ url: '/' + url
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ // 普通页面
|
|
|
+ wx.navigateTo({
|
|
|
+ url: '/' + url
|
|
|
+ });
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录formId
|
|
|
+ * (因微信模板消息已下线,所以formId取消不再收集)
|
|
|
+ */
|
|
|
+ saveFormId(formId) {
|
|
|
+ return true;
|
|
|
+ // let _this = this;
|
|
|
+ // console.log('saveFormId');
|
|
|
+ // if (formId === 'the formId is a mock one') {
|
|
|
+ // return false;
|
|
|
+ // }
|
|
|
+ // _this._post_form('wxapp.formId/save', {
|
|
|
+ // formId: formId
|
|
|
+ // }, null, null, null, false);
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成转发的url参数
|
|
|
+ */
|
|
|
+ getShareUrlParams(params) {
|
|
|
+ let _this = this;
|
|
|
+ return util.urlEncode(Object.assign({
|
|
|
+ referee_id: _this.getUserId()
|
|
|
+ }, params));
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发起微信支付
|
|
|
+ */
|
|
|
+ wxPayment(option) {
|
|
|
+ let options = Object.assign({
|
|
|
+ payment: {},
|
|
|
+ success: () => {},
|
|
|
+ fail: () => {},
|
|
|
+ complete: () => {},
|
|
|
+ }, option);
|
|
|
+ wx.requestPayment({
|
|
|
+ timeStamp: options.payment.timeStamp,
|
|
|
+ nonceStr: options.payment.nonceStr,
|
|
|
+ package: 'prepay_id=' + options.payment.prepay_id,
|
|
|
+ signType: 'MD5',
|
|
|
+ paySign: options.payment.paySign,
|
|
|
+ success(res) {
|
|
|
+ options.success(res);
|
|
|
+ },
|
|
|
+ fail(res) {
|
|
|
+ options.fail(res);
|
|
|
+ },
|
|
|
+ complete(res) {
|
|
|
+ options.complete(res);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 验证登录
|
|
|
+ */
|
|
|
+ checkIsLogin() {
|
|
|
+ return wx.getStorageSync('token') != '' && wx.getStorageSync('user_id') != '';
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 授权登录
|
|
|
+ */
|
|
|
+ getUserInfo(userInfo, callback) {
|
|
|
+ let App = this;
|
|
|
+ wx.showLoading({
|
|
|
+ title: "正在登录",
|
|
|
+ mask: true
|
|
|
+ });
|
|
|
+ // 执行微信登录
|
|
|
+ wx.login({
|
|
|
+ success(res) {
|
|
|
+ // 发送用户信息
|
|
|
+ App._post_form('user/login', {
|
|
|
+ code: res.code,
|
|
|
+ user_info: JSON.stringify(userInfo),
|
|
|
+ referee_id: wx.getStorageSync('referee_id')
|
|
|
+ }, result => {
|
|
|
+ // 记录token user_id
|
|
|
+ wx.setStorageSync('token', result.data.token);
|
|
|
+ wx.setStorageSync('user_id', result.data.user_id);
|
|
|
+ // 执行回调函数
|
|
|
+ callback && callback();
|
|
|
+ }, false, () => {
|
|
|
+ wx.hideLoading();
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 记录购物车商品总数量
|
|
|
+ * @param {*} value
|
|
|
+ */
|
|
|
+ setCartTotalNum(value) {
|
|
|
+ wx.setStorageSync('cartTotalNum', Number(value))
|
|
|
+ },
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置购物车tabbar的角标
|
|
|
+ */
|
|
|
+ setCartTabBadge() {
|
|
|
+ const number = wx.getStorageSync('cartTotalNum')
|
|
|
+ if (number > 0) {
|
|
|
+ wx.setTabBarBadge({
|
|
|
+ index: 2,
|
|
|
+ text: `${number}`
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ wx.removeTabBarBadge({
|
|
|
+ index: 2
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+});
|