|
|
@@ -1,6 +1,40 @@
|
|
|
<script>
|
|
|
import { mapState, mapMutations } from 'vuex';
|
|
|
+import BaseTool from '@/utils/tool';
|
|
|
+
|
|
|
+// 需要登录才能访问的 tabBar 页面路径(首页允许未登录浏览)
|
|
|
+const TAB_NEED_LOGIN = ['/pages/operate/operate', '/pages/middle/middle', '/pages/tidings/tidings', '/pages/my/my'];
|
|
|
+// 免登录可查看的普通页面白名单(扫码查看设备详情等场景)
|
|
|
+const PUBLIC_PAGES = ['/pages/equipment-detail/equipment-detail'];
|
|
|
+
|
|
|
export default {
|
|
|
+ mixins: [{
|
|
|
+ onShow() {
|
|
|
+ // 全局页面鉴权:未登录时记录来源页面并跳转登录
|
|
|
+ const pages = getCurrentPages();
|
|
|
+ if (!pages || pages.length === 0) return;
|
|
|
+ const page = pages[pages.length - 1];
|
|
|
+ const route = '/' + page.route;
|
|
|
+ // 登录页本身不做鉴权
|
|
|
+ if (route === '/pages/login/login') return;
|
|
|
+ // 首页、白名单页面允许未登录浏览,其他页面需要登录
|
|
|
+ if (route === '/pages/home/home') return;
|
|
|
+ if (PUBLIC_PAGES.indexOf(route) !== -1) return;
|
|
|
+ if (!BaseTool.UserUtil.isLogin()) {
|
|
|
+ // 记录当前页面路径(含参数),登录成功后回跳
|
|
|
+ try {
|
|
|
+ const opts = page.options || (page.$page && page.$page.options) || {};
|
|
|
+ const query = Object.keys(opts)
|
|
|
+ .map(k => k + '=' + encodeURIComponent(opts[k]))
|
|
|
+ .join('&');
|
|
|
+ const isTab = TAB_NEED_LOGIN.indexOf(route) !== -1;
|
|
|
+ uni.setStorageSync('login_back_url', route + (query ? '?' + query : ''));
|
|
|
+ uni.setStorageSync('login_back_is_tab', isTab);
|
|
|
+ } catch (e) {}
|
|
|
+ uni.navigateTo({ url: '/pages/login/login' });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }],
|
|
|
methods: {
|
|
|
...mapMutations(['_login', '_userInfo'])
|
|
|
},
|