You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iot/labs/jsuitest/wwwroot/js/app.js

77 lines
2.1 KiB

//vuex
Vue.use(Vuex);
const store = new Vuex.Store({
state: {
accessToken: localStorage.getItem("accessToken"),
refreshToken: localStorage.getItem("refreshToken"),
user: null,
}
});
//
function parseModel(name,response) {
var html = new DOMParser().parseFromString(response.data, 'text/html');
var template = html.getElementsByTagName('template')[0].innerHTML;
var script = html.getElementsByTagName('script')[0].innerHTML +'//# sourceURL='+name;
var model = eval(script);
model.template = template;
return model;
}
//
const routes = [
];
var routeList = routes.concat();
const router = new VueRouter({
//mode: 'history',
routes
});
router.beforeEach((to, from, next) => {
//$('#loading').show();
if (!store.state.accessToken && to.path !== '/pages/login') {
router.push('/pages/login');
return;
}
if (store.state.accessToken) {
connect();
}
var route;
for (var i = 0; i < routeList.length; i++) {
if (routeList[i].path === to.path) {
route = routeList[i];
}
}
if (!route) {
var path = to.path === '/' ? '/pages/home' : to.path;
var url = path + '.html';
console.log('preRoute:from ' + from.path + ' to path ' + to.path);
axios.get(url).then(function (response) {
var name = path.replace(/\//g, '-').substr(1);
var route = {
name:name,
path: to.fullPath,
component: Vue.component(name, parseModel(name,response))
};
router.addRoutes([route]);
routeList.push(route);
router.push(to.fullPath);
});
}
else {
console.log('route from:' + from.path + ' to:' + to.path);
next();
}
});
router.afterEach((route, redirect) => {
Vue.nextTick(() => {
//$('#loading').fadeOut(100);
});
});
//vue
const app = new Vue({
//store: store,
router,
data: {
},
mounted: function () {
console.log('mounted:app');
}
}).$mount('#app');