diff --git a/config/index.js b/config/index.js
index 5356e2c0..56d87fa0 100644
--- a/config/index.js
+++ b/config/index.js
@@ -3,6 +3,7 @@ var path = require('path')
module.exports = {
// Webpack aliases
aliases: {
+ 'quasar-frameworks': path.resolve(__dirname, '../node_modules/quasar-framework/'),
quasar: path.resolve(__dirname, '../node_modules/quasar-framework/'),
src: path.resolve(__dirname, '../src'),
assets: path.resolve(__dirname, '../src/assets'),
diff --git a/src/App.vue b/src/App.vue
index e7f59a52..112f7889 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -5,7 +5,7 @@
diff --git a/src/components/Page.vue b/src/components/Page.vue
new file mode 100644
index 00000000..cc5a1b3f
--- /dev/null
+++ b/src/components/Page.vue
@@ -0,0 +1,55 @@
+
+
+
+ {{ title }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/layouts/Default.vue b/src/components/layouts/Default.vue
index 1de83874..d8c6a89c 100644
--- a/src/components/layouts/Default.vue
+++ b/src/components/layouts/Default.vue
@@ -9,7 +9,8 @@
- {{ $t('loggedInAs') }}{{ getUsername }}
+ {{ $t('loggedInAs') }}
+ {{ getUsername }}
@@ -81,7 +82,7 @@
-
+
{{ $t('sendFax') }}
@@ -126,10 +127,14 @@
name: 'default',
mounted: function() {
this.$refs.layout.showLeft();
-// this.$store.dispatch('connectRtcEngine');
- },
- created: function() {
- this.$store.dispatch('user/initUser');
+ if(!this.$store.getters['user/hasUser']) {
+ startLoading();
+ this.$store.dispatch('user/initUser').then(()=>{
+ stopLoading();
+ }).catch(()=>{
+ this.logout();
+ });
+ }
},
components: {
QLayout,
@@ -172,9 +177,6 @@
if(!this.$store.state.rtcEngineConnected) {
showGlobalError(this.$t('rtcEngineDisconnected'));
}
- },
- navigate(path) {
- this.$router.push({path: path});
}
}
}
@@ -227,4 +229,20 @@
#user-name {
font-weight: bold;
}
+
+ .q-card {
+ margin: 0;
+ }
+
+ .q-card.page {
+ padding: 15px;
+ }
+
+ .q-card.pbx-group {
+ margin-bottom: 15px;
+ }
+
+ .page-action-button {
+ z-index: 1001;
+ }
diff --git a/src/components/pages/CallBlocking/Incoming.vue b/src/components/pages/CallBlocking/Incoming.vue
index 56809db1..f32d7099 100644
--- a/src/components/pages/CallBlocking/Incoming.vue
+++ b/src/components/pages/CallBlocking/Incoming.vue
@@ -1,11 +1,15 @@
- CallBlocking Incoming
+
diff --git a/src/components/pages/CallBlocking/Outgoing.vue b/src/components/pages/CallBlocking/Outgoing.vue
index de8127ec..25dc2085 100644
--- a/src/components/pages/CallBlocking/Outgoing.vue
+++ b/src/components/pages/CallBlocking/Outgoing.vue
@@ -1,11 +1,15 @@
- CallBlocking Outgoing
+
diff --git a/src/components/pages/CallBlocking/Privacy.vue b/src/components/pages/CallBlocking/Privacy.vue
index 95c7d025..6c07a8fd 100644
--- a/src/components/pages/CallBlocking/Privacy.vue
+++ b/src/components/pages/CallBlocking/Privacy.vue
@@ -1,11 +1,15 @@
- CallBlocking Privacy
+
diff --git a/src/components/pages/CallForward/AfterHours.vue b/src/components/pages/CallForward/AfterHours.vue
index ff37b231..e07f4d80 100644
--- a/src/components/pages/CallForward/AfterHours.vue
+++ b/src/components/pages/CallForward/AfterHours.vue
@@ -1,11 +1,15 @@
- CallForward AfterHours
+
diff --git a/src/components/pages/CallForward/Always.vue b/src/components/pages/CallForward/Always.vue
index 88d94987..cdf15d5d 100644
--- a/src/components/pages/CallForward/Always.vue
+++ b/src/components/pages/CallForward/Always.vue
@@ -1,11 +1,15 @@
- CallForward Always
+
diff --git a/src/components/pages/CallForward/CompanyHours.vue b/src/components/pages/CallForward/CompanyHours.vue
index 8bd40932..35ba268f 100644
--- a/src/components/pages/CallForward/CompanyHours.vue
+++ b/src/components/pages/CallForward/CompanyHours.vue
@@ -1,11 +1,15 @@
- CallForward CompanyHours
+
diff --git a/src/components/pages/Conversations.vue b/src/components/pages/Conversations.vue
index 71915345..55d04be5 100644
--- a/src/components/pages/Conversations.vue
+++ b/src/components/pages/Conversations.vue
@@ -1,11 +1,15 @@
- Conversations
+
diff --git a/src/components/pages/PbxConfiguration/Devices.vue b/src/components/pages/PbxConfiguration/Devices.vue
index 29309a61..39488b01 100644
--- a/src/components/pages/PbxConfiguration/Devices.vue
+++ b/src/components/pages/PbxConfiguration/Devices.vue
@@ -1,11 +1,15 @@
- PBX Devices
+
diff --git a/src/components/pages/PbxConfiguration/Groups.vue b/src/components/pages/PbxConfiguration/Groups.vue
index 0e442b28..5e6d84bc 100644
--- a/src/components/pages/PbxConfiguration/Groups.vue
+++ b/src/components/pages/PbxConfiguration/Groups.vue
@@ -1,14 +1,49 @@
- PBX Groups
+
-
diff --git a/src/components/pages/PbxConfiguration/Seats.vue b/src/components/pages/PbxConfiguration/Seats.vue
index e67402ca..64124dc6 100644
--- a/src/components/pages/PbxConfiguration/Seats.vue
+++ b/src/components/pages/PbxConfiguration/Seats.vue
@@ -1,11 +1,15 @@
- PBX Seats
+
diff --git a/src/components/pages/Reminder.vue b/src/components/pages/Reminder.vue
index 1d3a2289..6bd54eb5 100644
--- a/src/components/pages/Reminder.vue
+++ b/src/components/pages/Reminder.vue
@@ -1,11 +1,15 @@
- Reminder
+
diff --git a/src/filters/index.js b/src/filters/index.js
new file mode 100644
index 00000000..813a6f85
--- /dev/null
+++ b/src/filters/index.js
@@ -0,0 +1,5 @@
+
+import Vue from 'vue';
+import NumberFilter from './number'
+
+Vue.filter('number', NumberFilter);
diff --git a/src/filters/number.js b/src/filters/number.js
new file mode 100644
index 00000000..201ac394
--- /dev/null
+++ b/src/filters/number.js
@@ -0,0 +1,4 @@
+
+export default function(number) {
+ return '+' + number.cc + number.ac + number.sn;
+}
diff --git a/src/helpers/ui.js b/src/helpers/ui.js
index 40b38201..e800627b 100644
--- a/src/helpers/ui.js
+++ b/src/helpers/ui.js
@@ -1,5 +1,5 @@
-import { Loading, Alert } from 'quasar'
+import { Loading, Alert } from 'quasar-framework'
export function startLoading() {
Loading.show({ delay: 0 });
diff --git a/src/main.js b/src/main.js
index 77966470..790585d9 100644
--- a/src/main.js
+++ b/src/main.js
@@ -13,11 +13,12 @@ require(`./themes/app.${__THEME}.styl`)
import _ from 'lodash'
import Vue from 'vue'
import VueResource from 'vue-resource'
-import Quasar from 'quasar'
+import Quasar from 'quasar-framework'
import { store } from './store'
import { i18n, locales } from './i18n'
import router from './router'
import { sync } from 'vuex-router-sync'
+import filters from './filters'
Vue.use(VueResource);
diff --git a/src/store/index.js b/src/store/index.js
index c74eea41..cf1c2208 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -3,7 +3,9 @@
import _ from 'lodash'
import Vue from 'vue'
import Vuex from 'vuex'
-// import cdk from 'cdk';
+
+import UserModule from './user'
+import PbxGroupsModule from './pbx-groups'
var rtcEngineClient = null;
var rtcEngineNetwork = null;
@@ -12,7 +14,8 @@ Vue.use(Vuex);
export const store = new Vuex.Store({
modules: {
- user: require('./user').UserModule
+ user: UserModule,
+ pbxGroups: PbxGroupsModule
},
state: {
rtcEngineConnected: false
diff --git a/src/store/pbx-config/groups.js b/src/store/pbx-groups.js
similarity index 67%
rename from src/store/pbx-config/groups.js
rename to src/store/pbx-groups.js
index d94cf06d..2342aa57 100644
--- a/src/store/pbx-config/groups.js
+++ b/src/store/pbx-groups.js
@@ -1,7 +1,8 @@
-import { getGroups } from '../../api/pbx-config'
+import { getGroups } from '../api/pbx-config'
-export const PbxGroups = {
+export default {
+ namespaced: true,
state: {
groups: [],
page: 1
@@ -10,15 +11,15 @@ export const PbxGroups = {
},
mutations: {
- showGroups: function(state, options) {
+ show: function(state, options) {
state.groups = options.groups;
}
},
actions: {
- loadGroups: function(context, options) {
+ load: function(context, options) {
return new Promise((resolve, reject)=>{
getGroups().then((groups)=>{
- context.commit('showGroups', {
+ context.commit('show', {
groups: groups
});
}).catch((err)=>{
diff --git a/src/store/user.js b/src/store/user.js
index 48dfea70..c0cd191e 100644
--- a/src/store/user.js
+++ b/src/store/user.js
@@ -2,28 +2,22 @@
import _ from 'lodash';
import { login, getCapabilities, getUserData} from '../api/user';
-import Vue from 'vue';
-// import cdk from 'cdk';
-
-var rtcEngineClient = '';
-
-export const UserModule = {
+export default {
namespaced: true,
state: {
- username: '',
- password: '',
jwt: localStorage.getItem('jwt') || null,
subscriberId: localStorage.getItem('subscriberId') || null,
- loggedUsername: '',
subscriber: null,
- capabilities: null,
- numbers: null
+ capabilities: null
},
getters: {
isLogged(state, getters) {
return !_.isEmpty(state.jwt) && !_.isEmpty(state.subscriberId);
},
+ hasUser(state, getters) {
+ return state.subscriber !== null;
+ },
getUsername(state, getters) {
if(state.subscriber !== null && !_.isEmpty(state.subscriber.display_name)) {
return state.subscriber.display_name;
@@ -44,32 +38,34 @@ export const UserModule = {
login(state, options) {
state.jwt = options.jwt;
state.subscriberId = options.subscriberId;
+ state.subscriber = options.subscriber;
+ state.capabilities = options.capabilities;
},
setUserData(state, options) {
state.subscriber = options.subscriber;
state.capabilities = options.capabilities;
- state.numbers = options.numbers;
},
logout(state) {
state.jwt = null;
state.subscriberId = null;
- },
- updatePassword (state, password) {
- state.password = password;
- },
- updateUsername (state, username) {
- state.username = username;
+ state.subscriber = null;
+ state.capabilities = null;
}
},
actions: {
- login(context) {
+ login(context, options) {
return new Promise((resolve, reject)=>{
- login(context.state.username, context.state.password).then((result)=>{
+ login(options.username, options.password).then((result)=>{
localStorage.setItem('jwt', result.jwt);
localStorage.setItem('subscriberId', result.subscriberId);
+ }).then(()=>{
+ return getUserData(localStorage.getItem('subscriberId'));
+ }).then((result)=>{
context.commit('login', {
jwt: localStorage.getItem('jwt'),
- subscriberId: localStorage.getItem('subscriberId')
+ subscriberId: localStorage.getItem('subscriberId'),
+ subscriber: result.subscriber,
+ capabilities: result.capabilities
});
resolve();
}).catch((err)=>{
@@ -93,8 +89,7 @@ export const UserModule = {
getUserData(localStorage.getItem('subscriberId')).then((result)=>{
context.commit('setUserData', {
subscriber: result.subscriber,
- capabilities: result.capabilities,
- numbers: result.numbers
+ capabilities: result.capabilities
});
resolve();
}).catch((err)=>{
diff --git a/t/components/login.js b/t/components/login.js
new file mode 100644
index 00000000..68d06e57
--- /dev/null
+++ b/t/components/login.js
@@ -0,0 +1,13 @@
+
+import Vue from 'vue'
+import Login from '../../src/components/Login.vue'
+import { assert } from 'chai';
+
+describe('Login', function() {
+
+ it('should initialize with default data', function(){
+ var defaultData = Login.data();
+ assert.equal(defaultData.username, '');
+ assert.equal(defaultData.password, '');
+ });
+});
diff --git a/t/store/user.js b/t/store/user.js
index d32772c8..b566aab0 100644
--- a/t/store/user.js
+++ b/t/store/user.js
@@ -1,6 +1,6 @@
'use strict';
-import { UserModule } from '../../src/store/user';
+import UserModule from '../../src/store/user';
import { assert } from 'chai';
describe('UserModule', ()=>{