app_tree_planting/common/app.js

509 lines
11 KiB
JavaScript
Raw Normal View History

2023-01-11 19:31:59 +08:00
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');
2023-02-17 18:13:06 +08:00
uni.setStorageSync("accessToken", userInfo
.token);
2023-01-11 19:31:59 +08:00
uni.setStorageSync('currentUser', userInfo);
uni.setStorageSync('platform', 'wechatMiniApp');
uni.setStorageSync('source', 'login');
if (userInfo.is_exist_user == 0) {
uni.setStorageSync('register', 1);
}
/*switchTab刷新*/
2023-02-17 18:13:06 +08:00
let originUrl = uni.getStorageSync(
'loginOriginUrl');
2023-01-11 19:31:59 +08:00
if (originUrl) {
let originUrlRoute = originUrl.split('?');
2023-02-17 18:13:06 +08:00
console.log('originUrlRoute:' +
originUrlRoute)
2023-01-11 19:31:59 +08:00
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,
2023-01-13 16:21:31 +08:00
'Content-type': 'application/json'
2023-01-11 19:31:59 +08:00
};
if (req.header) {
header = Object.assign(header, req.header);
}
uni.request({
2023-02-17 18:13:06 +08:00
url: req.url,
sslVerify: false,
2023-01-11 19:31:59 +08:00
data: req.data || {},
2023-12-13 10:20:14 +08:00
header: req.header|| header,
2023-01-11 19:31:59 +08:00
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 {
2023-02-17 18:13:06 +08:00
if (res.statusCode == 200) {
if (req.success) {
req.success(res.data);
}
} else {
if (req.fail) {
req.fail(res);
}
2023-01-11 19:31:59 +08:00
}
}
},
fail: function(res) {
2023-02-08 17:59:16 +08:00
// console.warn('--- request fail >>>');
// console.warn(res);
// console.warn('<<< request fail ---');
2023-01-11 19:31:59 +08:00
uni.showToast({
title: '网络异常~',
icon: 'none'
});
if (req.fail) {
req.fail(res);
}
},
complete: function(res) {
if (res.statusCode != 200) {
if (res.code == '1000') {
login();
}
2023-02-08 17:59:16 +08:00
// console.log('--- request http error >>>');
// console.log(res.statusCode);
// console.log(res.data);
// console.log('<<< request http error ---');
2023-01-11 19:31:59 +08:00
}
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
};