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');
|
|
|
|
|
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,
|
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-01 10:49:51 +08:00
|
|
|
|
url: req.url,
|
|
|
|
|
sslVerify:false,
|
2023-01-11 19:31:59 +08:00
|
|
|
|
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) {
|
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
|
|
|
|
|
};
|