apiRequest
This commit is contained in:
parent
931c142e16
commit
06db9fa762
@ -1,9 +1,13 @@
|
|||||||
{
|
{
|
||||||
"baseURL": "https://cx20.basispanel.de/api/v1/",
|
"api": {
|
||||||
"APItargets": {
|
"baseURL": "https://cx20.basehosts.de/api/v1/"
|
||||||
"login": "login"
|
|
||||||
},
|
},
|
||||||
"navigation": [
|
"navigation": [
|
||||||
|
{
|
||||||
|
"name": "Login",
|
||||||
|
"to": "/login",
|
||||||
|
"icon": "fa-home"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "Dashboard",
|
"name": "Dashboard",
|
||||||
"to": "/",
|
"to": "/",
|
||||||
|
37
src/components/forms/login.vue
Normal file
37
src/components/forms/login.vue
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<div class="LoginForm">
|
||||||
|
<h2>Login</h2>
|
||||||
|
<form @submit.prevent="login">
|
||||||
|
<label>Username:</label><input type="text" v-model="username"><br>
|
||||||
|
<label>Password:</label><input type="password" v-model="password"><br>
|
||||||
|
<input type="submit" value="login">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Axios from 'axios';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'LoginForm',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
username: '',
|
||||||
|
password: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
login() {
|
||||||
|
this.$store.dispatch("login", this.$data)
|
||||||
|
.then(user => {
|
||||||
|
console.log("---- user login --------");
|
||||||
|
console.log(user);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log("---- login error -------");
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -18,30 +18,26 @@ export default {
|
|||||||
return {
|
return {
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
heading: 'col1',
|
heading: 'ID',
|
||||||
prop: 'prop1'
|
prop: 'ID'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
heading: 'col2',
|
heading: 'Benutzername',
|
||||||
prop: 'prop2'
|
prop: 'Username'
|
||||||
},
|
}
|
||||||
{
|
|
||||||
heading: 'col3',
|
|
||||||
prop: 'prop3'
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
rows: [
|
rows: [
|
||||||
{prop1: 'r1p1', prop2: 'r1p2', prop3: 'r1p3'},
|
|
||||||
{prop1: 'r2p1', prop2: 'r2p2', prop3: 'r2p3'},
|
|
||||||
{prop1: 'r3p1', prop2: 'r3p2', prop3: 'r3p3'},
|
|
||||||
{prop1: 'r4p1', prop2: 'r4p2', prop3: 'r4p3'},
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
created() {
|
||||||
add() {
|
this.$store.dispatch('apiRequest', {
|
||||||
this.rows.push({'prop1': 'test'});
|
endpoint: 'users'
|
||||||
}
|
})
|
||||||
|
.then(rows => this.rows = rows)
|
||||||
|
.catch(error => {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
129
src/main.js
129
src/main.js
@ -5,6 +5,7 @@ import Axios from 'axios';
|
|||||||
|
|
||||||
import App from './app.vue';
|
import App from './app.vue';
|
||||||
import Dashboard from './components/dashboard.vue';
|
import Dashboard from './components/dashboard.vue';
|
||||||
|
import LoginForm from './components/forms/login.vue';
|
||||||
import Userlist from './components/userlist.vue';
|
import Userlist from './components/userlist.vue';
|
||||||
|
|
||||||
Vue.use(VueRouter);
|
Vue.use(VueRouter);
|
||||||
@ -12,12 +13,85 @@ Vue.use(Vuex);
|
|||||||
|
|
||||||
const store = new Vuex.Store({
|
const store = new Vuex.Store({
|
||||||
state: {
|
state: {
|
||||||
|
api: {},
|
||||||
|
navigation: [],
|
||||||
|
login: {},
|
||||||
|
authToken: '',
|
||||||
|
credentials: {}
|
||||||
},
|
},
|
||||||
mutations: {
|
mutations: {
|
||||||
|
setAPI(state, payload) {
|
||||||
|
state.api = payload;
|
||||||
|
},
|
||||||
|
setNavigation(state, payload) {
|
||||||
|
for (var i=0; i<payload.length; i++) {
|
||||||
|
state.navigation.push(payload[i]); // = payload;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setCredentials(state, payload) {
|
||||||
|
state.credentials = {
|
||||||
|
username: payload.username,
|
||||||
|
password: payload.password
|
||||||
|
}
|
||||||
|
},
|
||||||
|
setLogin(state, payload) {
|
||||||
|
state.login = payload.User;
|
||||||
|
state.authToken = payload.AuthToken;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
apiRequest(context, payload) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let endpoint = context.state.api.baseURL + payload.endpoint;
|
||||||
|
|
||||||
|
Axios({
|
||||||
|
method: payload.method ? payload.method : 'get',
|
||||||
|
url: endpoint,
|
||||||
|
data: payload.data,
|
||||||
|
headers: {
|
||||||
|
'X-Auth-Token': context.state.authToken
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
console.log(response);
|
||||||
|
resolve(response.data);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.dir(error);
|
||||||
|
reject(error);
|
||||||
|
})
|
||||||
|
});
|
||||||
|
},
|
||||||
|
login(context, payload) {
|
||||||
|
context.commit('setCredentials', payload);
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
context.dispatch('apiRequest', {
|
||||||
|
method: 'post',
|
||||||
|
endpoint: 'login',
|
||||||
|
data: payload
|
||||||
|
})
|
||||||
|
.then(data => {
|
||||||
|
context.commit('setLogin', data);
|
||||||
|
resolve(data.User);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
if (error.response && error.response.data && error.response.data.error) {
|
||||||
|
reject(error.response.data.error);
|
||||||
|
} else {
|
||||||
|
reject([]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
|
{
|
||||||
|
path: '/login',
|
||||||
|
component: LoginForm
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/',
|
path: '/',
|
||||||
component: Dashboard
|
component: Dashboard
|
||||||
@ -32,31 +106,32 @@ const router = new VueRouter({
|
|||||||
routes
|
routes
|
||||||
});
|
});
|
||||||
|
|
||||||
new Vue({
|
// load init
|
||||||
el: '#vue-app',
|
Axios.get('conf/init.json')
|
||||||
components: {
|
.then(results => {
|
||||||
App
|
// set navigation
|
||||||
},
|
if ( !Array.isArray(results.data.navigation) ) {
|
||||||
data: {
|
alert('invalid data in: ' + this.src);
|
||||||
navItems: [ ]
|
return;
|
||||||
},
|
}
|
||||||
router,
|
store.commit("setNavigation", results.data.navigation);
|
||||||
store,
|
|
||||||
created() {
|
|
||||||
// load init
|
|
||||||
Axios.get('conf/init.json')
|
|
||||||
.then(results => {
|
|
||||||
if ( !Array.isArray(results.data.navigation) ) {
|
|
||||||
alert('invalid data in: ' + this.src);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// add routes
|
|
||||||
|
|
||||||
this.navItems = results.data.navigation;
|
// set api config in store
|
||||||
})
|
store.commit("setAPI", results.data.api);
|
||||||
.catch(error => {
|
|
||||||
alert('error loading ' + this.src + ': ' + error.message);
|
// load app, when init finishs
|
||||||
|
new Vue({
|
||||||
|
el: '#vue-app',
|
||||||
|
components: {
|
||||||
|
App
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
navItems: store.state.navigation
|
||||||
|
},
|
||||||
|
router,
|
||||||
|
store
|
||||||
});
|
});
|
||||||
|
})
|
||||||
}
|
.catch(error => {
|
||||||
});
|
alert('error loading: ' + error.message);
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user