main.js 2 KB
import uviewPlus from '@/uview-plus';
import md5 from 'js-md5';
import * as Pinia from 'pinia';
import piniaPersistUni from "pinia-plugin-persist-uni";
import { createSSRApp } from "vue";
import mixin from './common/mixin';

// 引入uView对小程序分享的mixin封装
import mpShare from '@/uview-plus/libs/mixin/mpShare.js';
import App from "./App.vue";
// 拦截器
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"];
list.forEach(item => { //用遍历的方式分别为,uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab这4个路由方法添加拦截器
	uni.addInterceptor(item, {
		invoke(e) { // 调用前拦截
			//获取用户的token
			const flag = uni.getStorageSync('cancelFlag');
			//获取当前页面路径(即url去掉"?"和"?"后的参数)
			if (flag) {
				uni.showModal({
					title: '提示',
					content: "请登录",
					success: function (res) {
						if (res.confirm) {
							// 重定向到登录页面
							uni.setStorageSync("cancelFlag", false);
							uni.reLaunch({
								url: "/pages/login/index",
							})
						} else if (res.cancel) {
							console.log('用户点击取消');
						}
					}
				});
				return false;
			}
			return true
		},
		fail(err) { // 失败回调拦截
			console.log(err);
		},
	})
})




export function createApp() {
	const app = createSSRApp(App);
	const pinia = Pinia.createPinia()
	app.use(uviewPlus)
	// 配置uView
	// 调用setConfig方法,方法内部会进行对象属性深度合并,可以放心嵌套配置
	// 需要在app.use(uview-plus)之后执行
	uni.$u.setConfig({
		// 修改$u.config对象的属性
		config: {
			// 修改默认单位为rpx,相当于执行 uni.$u.config.unit = 'rpx'
			unit: 'rpx'
		},
		// 修改$u.props对象的属性
		props: {
			// 修改radio组件的size参数的默认值,相当于执行 uni.$u.props.radio.size = 30
			radio: {
				size: 15
			}
		}
	})
	uni.$u.md5 = md5
	pinia.use(piniaPersistUni);
	app.use(pinia);
	app.mixin(mpShare);
	app.mixin(mixin);
	return {
		app,
		Pinia,
	};
}