feat: 校园旧版,东区缴费初始化

This commit is contained in:
2025-05-19 20:47:23 +08:00
parent 4ff043228b
commit 67aae16733
105 changed files with 20039 additions and 0 deletions
+366
View File
@@ -0,0 +1,366 @@
import {
Toast
} from 'vant';
import axios from 'axios'
import common from './common'
import api from "./api";
const InitLogin = {
homeUrl: '',// 登陆后跳转的地址,用于重新登录流程
useOpenId: false, // 是否要绑定openId
succFn: null, // 成功回调方法
wappId: '', // 商户主体id
loginType: null,//登陆类型 0-企业微信,1-微信公众,2-app
appId: '', // 登录主体标识,企业微信为coprIdapp为学校id(schoolId),公众号为appId
userType: 0, //0-教职工,1-家长
state: '', // 自定义参数,企业微信登录为应用标识
appLoginMsg: {},//登录用户信息 {userMsg:系统用户信息,refreshToken:刷新token,token:,token_expire_date:token过期时间戳,identity:身份信息,openId:用户openId}
uniqueCode: '',//当前用户唯一标识(仅适用于app方式)
/**
* 入口方法
* @param succ_fn 登录成功回调方法
* @param useOpenId 使用openId
* @param testMode 是否开发环境
* @param testParam 开发环境登录信息
*/
init({loginSuccess, state, userType, useOpenId, uniqueCode, testMode = false, appId, testParam = {}}) {
// console.log("初始化")
this.useOpenId = useOpenId
this.succFn = loginSuccess
// 从路径获取登录参数
this.state = state || common.getQueryVariable("state")
this.userType = userType || Number(common.getQueryVariable("userType"))
this.appId = appId || common.getQueryVariable("appId")
|| common.getQueryVariable("corpId")
|| common.getQueryVariable("schoolId")
this.loginType = Number(common.getQueryVariable("loginType")) || this.getLoginType()
this.uniqueCode = uniqueCode
if (testMode === true) {
this.appId = 'schoolId2'
this.appLoginMsg = {
"userMsg": {
"userId": testParam.id,
"deptId": 2,
"identityId": testParam.identityId
},
"tokenInfo": {
"token": testParam.token
},
"identity": {
"parentId": testParam.identityId
}
}
localStorage.setItem('appId', this.appId)
localStorage.setItem(this.appId, JSON.stringify(this.appLoginMsg))
this.succFn()
return
}
localStorage.setItem('appId', this.appId)
this.appLoginMsg = localStorage.getItem(this.appId);
try {
this.appLoginMsg = JSON.parse(this.appLoginMsg)
} catch (e) {
// 用户信息不存在进行初始化
this.appLoginMsg = {
'userMsg': {}
}
}
// 初始化用户登录信息
if (!this.appLoginMsg) {
this.appLoginMsg = {
'userMsg': {}
}
}
console.log("appLoginMsg", this.appLoginMsg)
console.log("uniqueCode", this.uniqueCode)
// 已登录进入页面
if (this.appLoginMsg.userMsg
&& Object.keys(this.appLoginMsg.userMsg).length > 1
&& this.appLoginMsg.tokenInfo) {
// 获取唯一标识
let getUniqueCode = common.getUniqueCode()
if (getUniqueCode && getUniqueCode === this.uniqueCode) {
this.afterIn()
} else {
// 移除缓存后重新登录
let storageAppId = localStorage.getItem("appId")
localStorage.removeItem("uniqueCode" + storageAppId)
localStorage.removeItem(storageAppId)
this.startLogin()
}
} else { //未登录进入登录流程
if (this.appId == this.wappId && this.useOpenId) {
this.wxLogin(this.appId, 0)
} else {
this.startLogin()
}
}
},
/**
* 开始登录
*/
startLogin() {
console.log("开始登录")
// 第一次登录
switch (this.loginType) {
case 0:
case 1:
this.wxLogin(null, 1);
break;
case 2:
this.appLogin()
break;
default:
console.log("1231231")
return;
}
},
/**
* app登录
*/
appLogin() {
let that = this
try {
$.initGetAppBasicInfo(function (data) {
var params = {
areaId: data.areaId,
mobile: data.userPhone,
userId: data.userId,
schoolId: that.appId,
type: that.userType
}
that.apiLogin(params)
});
} catch (e) {
Toast('错误')
}
},
/**
* 微信oauth2授权登录流程
* @param aid 主体id
* @param type 0-绑定商户openId1-登录
*/
wxLogin: function (aid, type) {
console.log("微信登录")
var appid = aid || this.appId
if (!aid) {
localStorage.setItem('appId', appid)
}
// 微信方的授权码
var code = common.getQueryVariable('code')
// 商户id
let a = localStorage.getItem('wappId')
if (appid != a) {
localStorage.setItem('wappId', appid)
}
if (!code || appid != a) { //用户第一次进入页面,跳转授权
var url = encodeURIComponent(location.href)
window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' + appid +
'&redirect_uri=' + url + '&response_type=code&scope=snsapi_base#wechat_redirect';
} else { //授权后跳回页面=》进入登录流程
if (type == 0) {
this.bindWxOpenId(code)
} else {
var params = {
corpId: this.appId,
code: common.getQueryVariable('code'),
state: this.state,
type: this.userType
}
this.apiLogin(params)
}
}
},
/**
* 绑定微信公众号下openId
* @param code 微信授权码
*/
bindWxOpenId(code) {
this.appId = localStorage.getItem('appId')
var appMsg = localStorage.getItem(this.appId)
var userMsg = {}
if (appMsg) {
appMsg = JSON.parse(appMsg)
userMsg = appMsg.userMsg
}
axios.get(process.env.VUE_APP_BASE_API + '/user/user/bindWxOpenId', {
params: {
code: code,
identityId: userMsg.identityId,
type: 0
}
}).then(res => {
if (res.data.data) {
var openId = res.data.data
appMsg.identity.wxPublicOpenId = openId
this.appLoginMsg = appMsg
localStorage.setItem(common.getQueryVariable('corpId'), JSON.stringify(appMsg))
this.succFn(userMsg.identityId)
} else {
Toast('登录失败')
}
})
},
/**
* 调用系统登录
* @param params 登录参数
*/
apiLogin(params) {
console.log("api登录")
var url = process.env.VUE_APP_BASE_API
switch (this.loginType) {
case 0:
url = url + '/auth/social/qywx/login';
break;
case 1:
params.appId = this.appId
url = url + '/auth/social/wxpublic/login';
break;
case 2:
url = url + '/auth/social/app/login';
break;
}
axios.get(url, {params: params}).then(res => {
this.afterLogin(res)
}).catch(err => {
Toast('登录失败,网络错误')
})
},
/**
* 登陆后数据处理
* @param res
* @returns {{this.appLoginMsg: InitLogin.this.appLoginMsg, this.appId: *}}
*/
afterLogin: function (res) {
console.log("登录后数据处理")
if (res) {
var toekn_info = res.data.data.token
var userMsg = res.data.data.user
var identity = res.data.data.identity
// token信息
if (toekn_info) {
var tokenInfo = {}
tokenInfo.refreshToken = toekn_info.refresh_token
tokenInfo.token = toekn_info.token_type + ' ' + toekn_info.access_token
// 计算token有效期限
var token_expire = toekn_info.expires_in
let now = new Date().getTime()
now = parseInt(now / 1000)
let last_date = now - 0 + (token_expire - 0)
tokenInfo.tokenExpireDate = last_date
this.appLoginMsg.tokenInfo = tokenInfo
}
// 用户信息
if (identity) {
this.appLoginMsg.identity = identity
}
// 系统用户信息
if (userMsg) {
this.appLoginMsg.userMsg = userMsg
}
}
// 保存信息
localStorage.setItem(this.appId, JSON.stringify(this.appLoginMsg))
localStorage.setItem("uniqueCode" + this.appId, this.uniqueCode)
this.succFn()
},
/**
* 刷新token
*/
refreshToken: function () {
// 刷新token
var tokenInfo = this.appLoginMsg.tokenInfo;
let rtoken = tokenInfo.refreshToken
axios.post(process.env.VUE_APP_BASE_API + '/auth/oauth/token?grant_type=refresh_token&refresh_token=' +
rtoken, {}, {
headers: {
'Authorization': 'Basic YXBwOjEyMzQ1Ng=='
}
}).then(res => {
if (res.data.access_token) {
let login_data = res.data
tokenInfo.refreshToken = login_data.refresh_token
tokenInfo.token = login_data.token_type + ' ' + login_data.access_token
var token_expire = login_data.expires_in //过期时间秒
let now = new Date().getTime()
now = parseInt(now / 1000)
let last_date = now - 0 + (token_expire - 0)
tokenInfo.tokenExpireDate = last_date
this.appLoginMsg.tokenInfo = tokenInfo
localStorage.setItem(this.appId, JSON.stringify(this.appLoginMsg))
this.succFn()
} else {
this.retryLogin()
}
}).catch(err => {
console.log("使用refresh_token重新获取token信息失败", err)
this.retryLogin()
});
},
/**
* 进入后的逻辑处理
* token过期等判断
*/
afterIn: function () {
var tokenInfo = this.appLoginMsg.tokenInfo;
let last_date = tokenInfo.tokenExpireDate
let now_date = parseInt(new Date().getTime() / 1000)
if (now_date > last_date) { //已过期,调刷新token
this.refreshToken()
} else {
if (this.useOpenId) {
if (this.appLoginMsg.identity.wxPublicOpenId) {
this.succFn()
} else { //没有openid
localStorage.setItem('appId', this.appMsgName)
// 根据学校查询正确的openId
api.getAppIdBySchool({schoolId: this.appLoginMsg.userMsg.deptId}).then(res => {
this.wappId = res.data.data
this.wxLogin(this.wappId)
})
}
} else {
this.succFn()
}
}
},
/**
* 重新登录
*/
retryLogin: function () {
var appId = localStorage.getItem("appId");
if (appId) {
var appMsg = localStorage.getItem(appId);
if (appMsg) {
appMsg = JSON.parse(appMsg)
}
var tokenInfo = appMsg.tokenInfo
let last_date = tokenInfo.tokenExpireDate
let now_date = parseInt(new Date().getTime() / 1000)
if (now_date > last_date) { //已过期,调刷新token
this.refreshToken()
}
localStorage.removeItem(appId)
localStorage.removeItem('appId')
localStorage.removeItem('wappId')
localStorage.removeItem("uniqueCode" + appId)
}
window.location.reload()
},
/**
* 微信环境使用微信登录,非微信环境使用app登录
* @param param
* @returns {boolean}
*/
getLoginType(param) {
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == "micromessenger") {
return 0;
} else {
return 2;
}
}
}
export default InitLogin