app_tree_planting/common/app.js
2023-02-08 17:59:16 +08:00

501 lines
10 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import api from '@/config/api.js';
/**
* tabBarUrl
*/
const tabBarUrl = [
'/pages/news/index',
'/pages/user/index',
'/pages/duty/index'
];
const objectToUrlParams = function(obj) {
var str = "";
for (var key in obj) {
str += "&" + key + "=" + obj[key];
}
return str.substr(1);
}
/**
* 是否登录
*/
const isLogin = function() {
if (uni.getStorageSync("isLogin") == "1") {
return true;
}
return false;
}
/**
* 初始化登录
*/
const initLogin = function() {
if (!isLogin()) {
login();
}
}
/**
* 登录
*/
const login = function() {
/*清除登录缓存*/
uni.removeStorageSync('isLogin');
uni.removeStorageSync('accessToken');
uni.removeStorageSync('currentUser');
uni.removeStorageSync('platform');
console.log('跳转登录')
/*储存当前页*/
let pages = getCurrentPages();
let currentPage = pages[pages.length - 1];
let originUrl = '/' + currentPage.route;
// #ifdef H5
let urlParam = objectToUrlParams(currentPage.$route.query)
if (urlParam) {
originUrl = originUrl + '?' + urlParam;
}
// #endif
uni.setStorageSync('loginOriginUrl', originUrl); //存储跳转前URL
console.log('loginOriginUrl:' + originUrl)
// #ifdef MP-WEIXIN
uni.navigateTo({
url: '/pages/wechat/miniAppLogin'
})
// #endif
// #ifndef MP-WEIXIN
if (getPlatform() == 'wechatMP') {
initMPLogin(); //公众号登录
} else {
uni.navigateTo({
url: '/pages/common/login'
})
}
// #endif
}
/*微信小程序登录初始化*/
const wechatAppLoginInit = function() {
/*检测是否授权*/
uni.getSetting({
success: function(res) {
/* 已经授权直接登录*/
if (res.authSetting['scope.userInfo']) {
wechatAppLogin(false); //登录
} else {
uni.navigateTo({
url: '/pages/wechat/miniAppLogin'
})
}
}
});
}
/*微信小程序登录*/
const wechatAppLogin = function(isBack = false) {
/*登录提示*/
uni.showLoading({
title: "正在登录",
mask: true
});
/*微信登录*/
uni.login({
provider: 'weixin',
success: loginResult => {
let code = loginResult.code;
console.log(loginResult);
/*获取用户信息*/
uni.getUserInfo({
success: result => {
/*获取分享id*/
let share_user_id = uni.getStorageSync('share_user_id');
share_user_id = share_user_id > 0 ? share_user_id : 0;
/*登录验证*/
request({
url: api.wechat.miniAppLogin,
data: {
share_user_id: share_user_id,
code: code,
user_info: result.rawData,
encrypted_data: result.encryptedData,
iv: result.iv,
signature: result.signature
},
method: 'POST',
dataType: 'json',
success: res => {
console.log(res)
if (res.code == 0) {
alert('登录成功', 'success');
/*更新登录状态,保存用户数据*/
let userInfo = res.data;
uni.setStorageSync("isLogin", '1');
uni.setStorageSync("accessToken", userInfo.token);
uni.setStorageSync('currentUser', userInfo);
uni.setStorageSync('platform', 'wechatMiniApp');
uni.setStorageSync('source', 'login');
if (userInfo.is_exist_user == 0) {
uni.setStorageSync('register', 1);
}
/*switchTab刷新*/
let originUrl = uni.getStorageSync('loginOriginUrl');
if (originUrl) {
let originUrlRoute = originUrl.split('?');
console.log('originUrlRoute:' + originUrlRoute)
if (tabBarUrl.includes(originUrlRoute[0])) {
uni.switchTab({
url: originUrlRoute[0]
})
} else {
uni.navigateBack();
}
} else {
/*登录后跳转*/
if (isBack) {
uni.navigateBack();
}
}
} else {
alert(res.msg, 'warning');
}
}
});
},
fail: result => {
uni.hideLoading();
}
});
}
});
}
/*微信公众号登录*/
const initMPLogin = function() {
/*获取登录验证url*/
let url = location.href.split('/pages/');
let loginUrl = '';
if (url.length > 1) {
loginUrl = url[0] + '/pages/wechat/mpLogin';
} else {
loginUrl = url[0] + 'pages/wechat/mpLogin';
}
/*获取分享id*/
let share_user_id = uni.getStorageSync('share_user_id');
share_user_id = share_user_id > 0 ? share_user_id : 0;
/*拼装url*/
location.href = api.wechat.mpLogin + '?url=' + encodeURIComponent(loginUrl) + '&share_user_id=' + share_user_id;
}
/*检查是否有操作权限*/
const checkAuth = function() {
request({
url: api.user.checkAuth,
data: {},
method: 'POST',
dataType: 'json',
success: res => {
console.log('has auth')
}
});
}
/*绑定手机号码*/
const bindMobile = function() {
uni.navigateTo({
url: '/pages/user/bindMobile'
})
}
/*获取来源url*/
const getSourcePage = function() {
let pages = getCurrentPages();
console.log(pages)
if (pages.length >= 2) {
let currentPage = pages[pages.length - 2];
let originUrl = '/' + currentPage.route;
console.log('source:' + originUrl)
return originUrl;
} else {
console.log('source:' + 'no')
return '';
}
}
/**
* 网络请求
* @param {Object} req
*/
const request = function(req) {
let accessToken = uni.getStorageSync("accessToken");
let platform = getPlatform();
let header = {
'platform': platform,
'token': accessToken,
'Content-type': 'application/json'
};
if (req.header) {
header = Object.assign(header, req.header);
}
uni.request({
url: req.url,
sslVerify:false,
data: req.data || {},
header: header,
method: req.method || "GET",
dataType: req.dataType || "json",
success: function(res) {
if (res.data.code == '1000') {
login(); //登录
} else if (res.data.code == '1003') {
bindMobile(); //绑定手机号码
} else {
if (req.success) {
req.success(res.data);
}
}
},
fail: function(res) {
// console.warn('--- request fail >>>');
// console.warn(res);
// console.warn('<<< request fail ---');
uni.showToast({
title: '网络异常~',
icon: 'none'
});
if (req.fail) {
req.fail(res);
}
},
complete: function(res) {
if (res.statusCode != 200) {
if (res.code == '1000') {
login();
}
// console.log('--- request http error >>>');
// console.log(res.statusCode);
// console.log(res.data);
// console.log('<<< request http error ---');
}
if (req.complete) {
req.complete(res);
}
}
});
}
/*上传文件*/
const uploadFile = function(req) {
let accessToken = uni.getStorageSync("accessToken");
let platform = getPlatform();
let header = {
'platform': platform,
'token': accessToken
};
if (req.header) {
header = Object.assign(header, req.header);
}
console.log(header)
uni.uploadFile({
url: req.url,
filePath: req.filePath,
header: header,
name: req.name || 'file',
formData: req.formData || {},
success: (res) => {
if (res.data.code == '1000') {
login(); //登录
} else if (res.data.code == '1003') {
bindMobile(); //绑定手机号码
} else {
if (req.success) {
req.success(JSON.parse(res.data));
}
}
},
fail: (res) => {
console.warn('--- request fail >>>');
console.warn(res);
console.warn('<<< request fail ---');
uni.showToast({
title: '网络异常~',
icon: 'none'
});
if (req.fail) {
req.fail(res);
}
},
complete: (res) => {
if (res.statusCode != 200) {
if (res.code == '1000') {
login();
}
console.log('--- request http error >>>');
console.log(res.statusCode);
console.log(res.data);
console.log('<<< request http error ---');
}
if (req.complete) {
req.complete(res);
}
}
});
}
/*获取平台类型 */
const getPlatform = function() {
let platform = uni.getStorageSync('platform');
// #ifdef MP-WEIXIN
platform = 'wechatMiniApp'; //微信小程序
// #endif
// #ifdef H5
if (!platform) {
platform = 'h5'; //H5
}
// #endif
// #ifdef APP-PLUS
if (uni.getSystemInfoSync().platform == 'ios') {
platform = 'ios';
} else {
platform = 'android';
}
// #endif
return platform;
}
/*无状态提示信息*/
const alert = function(msg = '', icon = 'none', url = '', openType = 'navigate') {
/*消息强制转字符串*/
if (typeof(msg) != 'string') {
msg = msg.toString();
}
if (msg.length > 7) {
//长度超过7个字符用示模态弹窗展示
uni.showModal({
title: '提示',
content: msg,
showCancel: false
});
} else {
if (icon == 'warning') {
uni.showToast({
title: msg,
image: "/static/images/icon-warning.png"
});
} else {
uni.showToast({
title: msg,
icon: icon
})
}
}
if (url || openType == 'back') {
setTimeout(() => {
if (openType == 'redirect') {
uni.redirectTo({
url: url
});
} else if (openType == 'switchTab') {
uni.switchTab({
url: url
});
} else if (openType == 'reLaunch') {
uni.reLaunch({
url: url
});
} else if (openType == 'back') {
uni.navigateBack();
} else {
uni.navigateTo({
url: url
});
}
}, 1500)
}
};
/*弹出加载框*/
const loading = function(msg = '', mask = true) {
/*消息强制转字符串*/
if (typeof(msg) != 'string') {
msg = msg.toString();
}
uni.showLoading({
title: msg,
mask: mask
})
};
/*是否微信浏览器*/
const isWechat = function() {
// #ifndef H5
return false;
// #endif
// #ifdef H5
let ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/micromessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
// #endif
};
/*获取平台类型 */
const getNaviBarHeight = function() {
let height = '90rpx';
// #ifdef MP
let device = uni.getSystemInfoSync();
console.log(device)
if (device.system.indexOf('iOS') > -1) {
if (device.model.indexOf('iPhone X') > -1) {
height = '44px;margin-top: 25px;padding-bottom: 5px;';
} else {
height = '44px';
}
} else {
height = '48px';
}
// #endif
console.log(height)
return height;
}
export default {
tabBarUrl,
isLogin,
initLogin,
login,
wechatAppLogin,
initMPLogin,
request,
uploadFile,
alert,
loading,
isWechat,
getNaviBarHeight,
getPlatform,
getSourcePage,
checkAuth,
bindMobile
};