import Vue from 'vue'
import App from './App'

Vue.config.productionTip = false

App.mpType = 'app'


// 引入全局uView
import uView from 'uview-ui'
Vue.use(uView)

// 此处为演示vuex使用，非uView的功能部分
import store from '@/store'

// 引入uView提供的对vuex的简写法文件
let vuexStore = require('@/store/$u.mixin.js')
Vue.mixin(vuexStore)
// #ifndef H5
var value = ""
uni.getScreenBrightness({
	success: function(res) {
		value = res.value
	}
});
Vue.prototype.changeTabbar = function(e) {
	// #ifdef APP-PLUS
	uni.removeStorageSync("stopShowTwice")
	// #endif
	if (e == 2) {
		uni.setScreenBrightness({
			value: 1,
			success: function() {}
		}); 
	} else {
		uni.setScreenBrightness({
			value: value,
			success: function() {}
		});
	}
}
// #endif

// #ifdef H5
Vue.prototype.changeTabbar = function(e) {
	// console.log(e)
}
// #endif

//全局页面跳转
Vue.prototype.toPath = function(e) {
	let token = uni.getStorageSync("token")
	if (!token) {
		uni.showModal({
			title: "提示",
			content: "您还未登录，无法使用app功能",
			cancelText: "再等等",
			confirmText: "去登陆",
			success(res) {
				if (res.confirm) {
					uni.reLaunch({
						url: '/pages/sub_basic/login'
					})
				}
			}
		})
		return false
	}
	if (!e) {
		uni.showToast({
			icon: "none",
			title: "功能暂未开通",
			duration: 1500,
		})
		return false
	}
	if (e == "/pages/sub_tabbar/active" || e == "/pages/sub_tabbar/index") {
		uni.switchTab({
			url: e
		})
		return false
	}

	uni.navigateTo({
		url: e
	})
}
Vue.prototype.toUrl = function(e) {
	if (e == "/pages/sub_tabbar/active" || e == "/pages/sub_tabbar/index") {
		uni.switchTab({
			url: e
		})
		return false
	}

	uni.navigateTo({
		url: e
	})
}
const app = new Vue({
	store,
	...App
})
// http拦截器，此为需要加入的内容，如果不是写在common目录，请自行修改引入路径
import httpInterceptor from '@/static/js/http.interceptor.js'
// 这里需要写在最后，是为了等Vue创建对象完成，引入"app"对象(也即页面的"this"实例)
Vue.use(httpInterceptor, app)

//http接口API集中管理引入部分
// import httpApi from '@/static/js/http.api.js'
// Vue.use(httpApi, app)

app.$mount()
