diff --git a/App.vue b/App.vue
new file mode 100644
index 0000000..d9657e6
--- /dev/null
+++ b/App.vue
@@ -0,0 +1,203 @@
+<script>
+	export default {
+		globalData: {
+			msg: {}
+		},
+		onLaunch() {
+			let that = this
+			uni.getSystemInfo({
+				success(res) {
+					uni.setStorageSync('platform', res.platform)
+				}
+			})
+			//锁定竖屏
+			// #ifdef APP-PLUS
+			
+			//获取版本号
+			let v = plus.runtime.version
+			let c = plus.runtime.versionCode
+			let version = v + '(' + c + ')'
+			that.globalData.version = version
+
+			//获取uuid
+			plus.device.getInfo({
+				success(res) {
+					let uuid = res.uuid
+					that.globalData.clientid = uuid
+				}
+			})
+
+			//锁定屏幕
+			plus.screen.lockOrientation("portrait-primary")
+
+			//引入插件
+			const KJJPush = uni.requireNativePlugin('KJ-JPush');
+			//设置应用角标，android只支持华为手机 或者使用 plus.runtime.setBadgeNumber(0);
+			KJJPush.setApplicationIconBadgeNumber(0);
+
+			let platform = uni.getStorageSync('platform')
+			if (platform == 'ios') {
+				//ios重置极光推送服务器的角标
+				KJJPush.ios_resetJPushBadge();
+			}
+
+			//清除所有通知消息
+			KJJPush.clearAllNotifications();
+			//判断用户(应用设置界面)是否允许接收通知
+			KJJPush.isNotificationEnabled(result => {
+				var str = JSON.stringify(result);
+				// '0'未开启通知  '1'已开启
+				if (str == '0') {
+					uni.showModal({
+						title: '提示',
+						content: '您还未开启通知,可能无法获取推送消息,是否现在去开启?',
+						success: function(res) {
+							if (res.confirm) {
+								KJJPush.openSettingsForNotification();
+							}
+						}
+					});
+				}
+			});
+
+			let uid = uni.getStorageSync("uid")
+			//设置Alias
+			KJJPush.setAlias(uid ? uid : 'tourist', 1, result => {
+				//console.log("setAlias:" + JSON.stringify(result));
+			});
+
+			//监听推送打开通知，（前台、后台、ios app完全退出）都可以监听
+			KJJPush.addNotifyMessageOpened(result => {
+
+				console.log(result)
+				var str = JSON.stringify(result);
+				// uni.showModal({
+				// 	title: '推送通知测试',
+				// 	content: str,
+				// 	success: function(res) {}
+				// });
+			});
+			//监听自定义推送消息
+			KJJPush.addCustomizeNotifyMessage(result => {
+				var str = JSON.stringify(result);
+				// uni.showModal({
+				// 	title: 'KJ-JPush',
+				// 	content: str,
+				// 	showCancel: false,
+				// 	success: function(res) {}
+				// });
+			});
+			//监听推送消息
+			// KJJPush.addNotifyMessage(result => {
+			// 	console.log(result)
+			// 	var str = JSON.stringify(result);
+			// 	uni.showModal({
+			// 		title: '推送通知',
+			// 		content: str,
+			// 		success: function(res) {
+			// 			if (res.confirm) {
+			// 				KJJPush.clearAllNotifications();
+			// 				KJJPush.ios_resetJPushBadge();
+			// 			}
+			// 		}
+			// 	});
+			// });
+
+			//  #endif
+
+			//判断token是否过期
+			let token = uni.getStorageSync("token")
+			//let isFirstTimeEnterApp = uni.getStorageSync("isFirstTimeEnterApp")
+			//console.log(token)
+			//console.log("isFirstTimeEnterApp",isFirstTimeEnterApp)
+			if (!token) {
+				//if (isFirstTimeEnterApp) { //判断是否第一次进入App 先入引导页
+				uni.reLaunch({
+					url: "/pages/sub_basic/login/index"
+				})
+				//}
+			} else {
+				let routes = getCurrentPages(); // 获取当前打开过的页面路由数组
+				let curRoute = ''
+				if(routes.length != 0){
+					curRoute = routes[routes.length - 1].route //获取当前页面路由
+				}
+				//console.log(routes)
+				that.$u.post("/v1/infor", {}).then((res) => {
+					if (res.token) {
+						uni.setStorageSync("token", res.token)
+					}
+					if(curRoute != 'pages/sub_tabbar/index'){
+						uni.switchTab({
+							url: "/pages/sub_tabbar/index"
+						})
+					}
+					
+				}).catch(res => {
+					uni.setStorageSync('token','')
+					if(routes.length != 0 || curRoute != 'pages/sub_basic/login/index'){
+						uni.reLaunch({
+							url: "/pages/sub_basic/login/index"
+						})
+					}
+					
+				})
+			}
+			uni.onNetworkStatusChange(function(res) {
+				if (res.networkType == '4g') {
+					uni.showToast({
+						title: "您已切换至4g网络,请注意流量使用情况",
+						icon: "none",
+						duration: 1500
+					})
+				} else if (res.networkType == 'wifi') {
+					uni.showToast({
+						title: "您已切换至wifi网络",
+						icon: "none",
+						duration: 1500
+					})
+				} else
+				if (!res.isConnected || res.networkType == '2g' || res.networkType == 'none') {
+					let routes = getCurrentPages()
+					let curRoute = routes[routes.length - 1].route
+					if (curRoute == 'pages/sub_basic/login/index' || curRoute == 'pages/sub_basic/register/index' || curRoute == 'pages/sub_basic/forgetPwd/index') {
+
+					} else {
+						uni.navigateTo({
+							url: "/pages/sub_basic/network/index"
+						})
+					}
+				}
+			});
+		},
+
+	}
+</script>
+
+<style lang="scss">
+	/* #ifndef APP-NVUE */
+	@import "uview-ui/index.scss";
+	@import "/static/css/iconfont.css";
+
+	/*覆盖文本编辑器里面的图片的大小*/
+	uni-rich-text {
+		img {
+			max-width: 100% !important;
+		}
+	}
+
+	.status_bar {
+		height: var(--status-bar-height);
+		width: 100%;
+	}
+
+	page {
+		background-color: #F3F3F3;
+	}
+
+	/* #endif */
+
+
+
+	/*每个页面公共css */
+</style>
