forked from zhang2657977442/wuyou-frontend
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAppEntryController.js
140 lines (119 loc) · 3.78 KB
/
AppEntryController.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import Vue from "vue"
/*
* APP入口页面控制器
* 中心思想:动态入口解决方案 描述见:http://ask.dcloud.net.cn/question/63270
*/
class AppEntryController extends Vue {
constructor(arg) {
super();
}
// 在应用的首页调用main方法 控制路由入口
async main(query) {
return new Promise((resolve, reject) => {
// H5环境保存openId
// #ifdef H5
// H5环境推广码注册
if (query.referrer && query.referrer != " ") {
this.$mRouter.reLaunch({
route: this.$mRoutesConfig.reg,
query: query
})
reject("不可以加载首页数据");
return;
}
// #endif
// 读取配置文件 判断APP是否开启了游客模式 如果开启了无需判断是否登录逻辑
if (this.$mConfig.touristMode && (typeof this.$mConfig.touristMode === "boolean")) {
// #ifdef APP-PLUS
console.log("关闭启动页")
plus.navigator.closeSplashscreen()
// #endif
resolve("可以加载首页数据");
return;
}
// 若APP没有开启游客模式 则检测是否登录? 去登录...
if (!this.$store.getters.hasLogin) {
this.$mRouter.redirectTo({
route: this.$mRoutesConfig.login,
query: query
})
// #ifdef APP-PLUS
setTimeout(() => {
console.log("关闭启动页")
plus.navigator.closeSplashscreen()
}, 800)
// #endif
reject("APP当前不是游客模式,请先登录后进入");
}
})
}
// 小程序端获取openId
getWeChatOpenId() {
// #ifdef H5
let url = window.location.href;
let query = this.$mUtils.getRequestParameters(url);
if (query.openId) this.$store.commit("SET_OPENID", query.openId);
// #endif
// #ifdef MP-WEIXIN | APP-PLUS
// 登录微信小程序 获取openID
this.$store.commit("SET_OPENID", this.$mConfig.testOpenId);
// #endif
}
// 处理H5端 直接通过地址栏访问地址的情况 需要鉴权
handleH5BrowserAddressBarAuth() {
// #ifdef H5
let hashPath = window.location.hash.substr(1);
hashPath = hashPath.split("?")[0];
if (!/\/pages\//.test(hashPath)) return;
for (let routeKey in this.$mRoutesConfig) {
let route = this.$mRoutesConfig[routeKey];
// 如果当前访问的路由是权限页面,判断登录状态
if (route.path == hashPath) {
if (route.requiresAuth && !this.$store.getters.hasLogin) {
console.log("没有登录,无权进入")
this.$mRouter.redirectTo({
route: this.$mRoutesConfig.login,
query: {
}
})
}
break;
}
}
// #endif
}
/*
* 用途:商户状态拦截器
* 说明:当store中的商户状态为 审核中 || 审核失败 的情况 拦截器会向服务器发送请求查询最新的商户状态。
* 场景:点击某一个功能按钮时需要校验商户状态,只有审核成功的商户方可进入,否则跳转到状态提示页面。
*/
async customerStatusInterceptor() {
return new Promise(async (resolve, reject) => {
// store中的状态
let $storeCustomerStatus = this.$store.state.customerInfo.status;
if ($storeCustomerStatus == "SUCCESS") {
// 商户状态:审核通过
resolve($storeCustomerStatus);
return;
}
// 服务器中的状态
try {
let serverCustomerStatus = await this.$apis.getCustomerStatus();
resolve(serverCustomerStatus);
} catch (e) {
reject(e)
}
})
}
/*
* 登录状态下 全局路由获取商户信息
* 说明:APP打开后向服务器拉取最新商户信息,以及商户审核状态,保存在本地store中使用。
* 场景:H5端 每个页面打开后执行 APP或小程序打开后执行
*/
/* async getCustomerInfo() {
if (!this.$store.getters.hasLogin) return;
let customerInfo = await this.$apis.getCustomer();
this.$store.commit("SET_CUSTOMERINFO", customerInfo);
} */
}
export default new AppEntryController()