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 @@ + + + + + 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ - 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 @@ 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 @@ 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', ()=>{