用于浙政钉小程序的 BasePage 基础代码

学以致用 admin 2023-06-01 16:45 483 0

简单记录一点代码,避免踩坑

BasePage.js

import dd from 'gdt-jsapi'

export const BasePage = (pageConfig) => {
    pageConfig = Object.assign({
        anonymous: true //   页面默认可访问
    }, pageConfig || {})

    // 取出 anonymous 和 onLoad
    const { anonymous, onLoad } = pageConfig
    
    return Page(Object.assign(pageConfig, {
       onLoad(options) {
           /** 
             * token 格式,value 是 token 的值,expired_at 是 token 过期时间
             * { value: '', expired_at: 0 }
             */
            const token = dd.getStorageSync({ key: '_USER_TOKEN_' })
            
            const pages = getCurrentPages()
            const url = pages[0].route
            // 如果不是 anonymous 页面,并且 token 没有值,获取 token 已经失效
            if(!anonymous && (!token.data || !( token.data.value || token.data.expired_at < Date.now() ))) {
                dd.redirectTo({
                    url: `/pages/login/login?redirectTo=${url}`
                })
                return
            }
            
            onLoad && onLoad.call(this, options)
        }
    }))
}

index.js

import { BasePage } from '/basePage'

BasePage({
    anonymous: false,
    
    onLoad(query) {
        console.log('page load')
    },
    onReady() {
    // 页面加载完成
    },
    onShow() {
    // 页面显示
    },
    onHide() {
    // 页面隐藏
    },
    onUnload() {
    // 页面被关闭
    },
    onTitleClick() {
    // 标题被点击
    },
    onPullDownRefresh() {
    // 页面被下拉
    },
    onReachBottom() {
    // 页面被拉到底部
    },
    onShareAppMessage() {
    // 返回自定义分享信息
    },
});

在 BasePage 中定义一个变量 anonymous,标记页面是否需要登录,默认 true 为可匿名访问,如果改为 false,表示需要登录,这时候需要验证 token 是否存在以及有效。

同时覆写页面的 onLoad 事件,在页面 onLoad 事件执行之前,判断如果登录状态异常,跳转到登录页面。

评论区