- other committ

This commit is contained in:
Paolo Arena
2019-10-10 16:53:33 +02:00
parent 3ed8c7116b
commit 9ab7ba5581
42 changed files with 1266 additions and 522 deletions

View File

@@ -1 +0,0 @@
cfg_freeplanet.app/

View File

@@ -1,3 +1,44 @@
body {
font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #a7a7a7;
line-height: 1.5;
//font-size: 1rem;
}
html {
font-size: 100%; // default font size (browser 16) -> (10 62.5%)
}
p {
font-size: 125%; // default font size (browser 16) -> (10 62.5%)
margin: 0 0 8px;
}
$grayshadow: #555;
$graytext: #555;
$textcol: blue;
$textcol_scuro: darkblue;
$heightBtn: 100%;
.flex-item {
// background-color: #d5e2eb;
display: flex;
padding: 2px;
margin: 2px;
margin-left: 3px;
margin-right: 3px;
color: #000;
font-size: 1rem;
height: $heightBtn;
line-height: $heightBtn;
vertical-align: middle;
//flex: 0 0 100%;
}
.fade-enter-active, .fade-leave-active { .fade-enter-active, .fade-leave-active {
transition: opacity .2s; transition: opacity .2s;
} }
@@ -40,6 +81,7 @@
} }
} }
.my-notif-class{ .my-notif-class{
font-weight: bold; font-weight: bold;
} }
@@ -53,15 +95,14 @@
.lowperc { .lowperc {
color: red; color: red;
} }
.medperc { .medperc {
color: blue; color: blue;
} }
.highperc { .highperc {
color: green; color: green;
} }
.hide-if-small { .hide-if-small {
@media (max-width: 600px) { @media (max-width: 600px) {
display: none; display: none;
@@ -74,24 +115,200 @@
} }
} }
.tothebottomfixed { .links, .links a {
left: 0; text-shadow: 1px 1px 1px #555 !important;
right: 0; // font-weight: bold;
position: fixed; color: cornflowerblue !important;
z-index: 9999; }
box-sizing: border-box; .links:hover {
overflow: hidden; color: white !important;
margin: 0 auto;
bottom: 10px;
} }
.tothetop { .text-subtitle1 {
left: 0; font-size: 1.35rem;
right: 0; font-weight: 400;
position: fixed; line-height: 1.75rem;
z-index: 9999; text-shadow: .25 .25rem .5rem $grayshadow;
box-sizing: border-box; letter-spacing: .00937em;
overflow: hidden; &.big {
margin: 0 auto; font-size: 1.5rem;
top: 20px; }
}
.text-subtitle2 {
font-size: 1.15rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.text-subtitle3 {
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
p {
font-size: 100%; // default font size (browser 16) -> (10 62.5%)
font-family: "Abyssinica SIL", serif;
text-justify: auto;
margin: 0 0 4px;
}
.text-subtitle1 {
font-size: 1.25rem;
}
.text-subtitle2 {
font-size: 1rem;
}
.text-subtitle3 {
font-size: 0.75rem;
}
.cltexth3 {
font-size: 1.25rem;
}
.text-big{
font-size: 1.25rem;
}
}
.my-card {
width: 100%;
max-width: 350px;
min-width: 300px;
padding: 1rem 1rem;
box-shadow: none;
}
.text-trans {
opacity: 0.9;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
filter: alpha(opacity=90);
}
.text-spacetrans {
padding: 0 !important;
background: rgba(0,0,0,0.3) !important;
border-radius: 30px !important;
}
.text-shadow {
text-shadow: .15rem .15rem .15rem $grayshadow;
}
.citazione{
font-size: 0.75rem;
font-family: "Lucida Calligraphy", serif;
}
.cltexth3, .cltexth2, .cltexth4 {
font-size: 1.25rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .01em;
text-align: center !important;
}
.cltexth4 {
font-size: 1rem;
}
.cltexth2 {
font-size: 1.5rem;
}
.boldhigh, .boldop, .text-big{
font-weight: 500;
text-shadow: .05rem .05rem .05rem $grayshadow;
}
.boldop{
color: darkblue;
}
.text-big{
font-size: 1.5rem;
}
.center_to_image{
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 100%;
text-align: center;
}
.center_img {
display: block;
margin-left: auto;
margin-right: auto;
}
.padding_cell {
padding: 0.75rem 0.5rem;
}
@media (max-width: 3000px) {
.q-parallax__media > img {
max-height: 550px !important;
min-width:inherit !important;
min-height: inherit !important;
}
}
@media (max-width: 1000px) {
.q-parallax__media > img {
max-height: 500px !important;
min-width:inherit !important;
min-height: inherit !important;
}
}
@media (max-width: 800px) {
.q-parallax__media > img {
max-height: 450px !important;
min-width:inherit !important;
min-height: inherit !important;
}
}
@media (max-width: 718px) {
.q-parallax__media > img {
max-height: 450px !important;
min-height: inherit !important;
min-width:100% !important;
}
}
// preloading images:
@media screen {
div#preloader {
position: absolute;
left: -9999px;
top: -9999px;
}
div#preloader img {
display: block;
}
}
@media print {
div#preloader,
div#preloader img {
visibility: hidden;
display: none;
}
} }

View File

@@ -7,10 +7,14 @@ import { Header } from './components/Header'
import globalroutines from './globalroutines/index' import globalroutines from './globalroutines/index'
import { GlobalStore } from './store/Modules' import { GlobalStore } from './store/Modules'
import { toolsext } from '@src/store/Modules/toolsext'
import { BannerCookies, CPreloadImages } from '@components'
import { static_data } from '@src/db/static_data'
@Component({ @Component({
components: { components: {
appHeader: Header appHeader: Header,
BannerCookies, CPreloadImages
}, },
router router
}) })
@@ -47,7 +51,7 @@ export default class App extends Vue {
// console.log('window.location.href', window.location.href) // console.log('window.location.href', window.location.href)
let chiamaautologin = true let chiamaautologin = true
this.listaRoutingNoLogin.forEach(mystr => { this.listaRoutingNoLogin.forEach((mystr) => {
if (window.location.href.includes(mystr)) { if (window.location.href.includes(mystr)) {
chiamaautologin = false chiamaautologin = false
} }
@@ -59,9 +63,9 @@ export default class App extends Vue {
.then((loadstorage) => { .then((loadstorage) => {
if (loadstorage) { if (loadstorage) {
if (UserStore.state.lang !== '') { if (toolsext.getLocale() !== '') {
// console.log('SETLOCALE :', this.$i18n.locale) // console.log('SETLOCALE :', this.$i18n.locale)
this.$i18n.locale = UserStore.state.lang // Set Lang this.$i18n.locale = toolsext.getLocale() // Set Lang
} else { } else {
UserStore.mutations.setlang(this.$i18n.locale) UserStore.mutations.setlang(this.$i18n.locale)
} }
@@ -81,5 +85,7 @@ export default class App extends Vue {
} }
get static_data() {
return static_data
}
} }

View File

@@ -25,6 +25,7 @@ import { Screen } from 'quasar'
}) })
export default class CImgText extends Vue { export default class CImgText extends Vue {
@Prop({ required: false, default: '' }) public src: string @Prop({ required: false, default: '' }) public src: string
@Prop({ required: false, default: '' }) public src2: string
@Prop({ required: false, default: 'myclimg' }) public class1: string @Prop({ required: false, default: 'myclimg' }) public class1: string
@Prop({ required: false, default: '' }) public style1: string @Prop({ required: false, default: '' }) public style1: string
} }

View File

@@ -4,6 +4,7 @@
<div class="row items-start q-col-gutter-xs imgtext"> <div class="row items-start q-col-gutter-xs imgtext">
<div class="imgtext__img"> <div class="imgtext__img">
<img v-if="src" :src="src" class="myclimg" :style="style1"> <img v-if="src" :src="src" class="myclimg" :style="style1">
<img v-if="src2" :src="src2" class="myclimg" :style="style1">
<div class="section_text"> <div class="section_text">
<slot></slot> <slot></slot>
</div> </div>

View File

@@ -10,7 +10,7 @@
<!--</span>--> <!--</span>-->
<FormNewsletter v-if="static_data.SHOW_NEWSLETTER" :idwebsite="tools.appid()" <FormNewsletter v-if="static_data.functionality.SHOW_NEWSLETTER" :idwebsite="tools.appid()"
:locale="tools.getLocale()"> :locale="tools.getLocale()">
</FormNewsletter> </FormNewsletter>
@@ -52,7 +52,7 @@
</div> </div>
<p class="text-center"> <p class="text-center">
<router-link v-if="static_data.SHOW_ONLY_POLICY" to="/policy"><span class="footer_link">{{$t('privacy_policy')}}</span></router-link> <router-link v-if="static_data.functionality.SHOW_ONLY_POLICY" to="/policy"><span class="footer_link">{{$t('privacy_policy')}}</span></router-link>
</p> </p>
</div> </div>

View File

@@ -41,7 +41,7 @@
</q-input> </q-input>
<router-link to="/policy"><span class="news_link">$t('newsletter.acceptlicense')</span></router-link> <router-link to="/policy"><span class="news_link">{{$t('privacy_policy')}}</span></router-link>
<q-toggle dark v-model="accept" :label="$t('newsletter.acceptlicense')"/> <q-toggle dark v-model="accept" :label="$t('newsletter.acceptlicense')"/>

View File

@@ -286,3 +286,12 @@ canvas {
display: inline-block; display: inline-block;
padding: 4px 2px; padding: 4px 2px;
} }
.text-user {
text-shadow: .05rem .05rem .15rem #fff;
background-color: limegreen;
border-radius: 1rem !important;
text-align: center;
margin: 1px;
margin-bottom: 5px;
}

View File

@@ -68,12 +68,12 @@ export default class Header extends Vue {
} }
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// QUASAR Example using event to open drawer from another component or page // QUASAR Example using myevent to open drawer from another component or page
// ------------------------------------------------------------------------- // -------------------------------------------------------------------------
// (1) This code is inside layout file that have a drawer // (1) This code is inside layout file that have a drawer
// if this.leftDrawerOpen is true, drawer is displayed // if this.leftDrawerOpen is true, drawer is displayed
// (2) Listen for an event in created // (2) Listen for an myevent in created
/* created(){ /* created(){
this.$root.$on("openLeftDrawer", this.openLeftDrawercb); this.$root.$on("openLeftDrawer", this.openLeftDrawercb);
}, },
@@ -85,7 +85,7 @@ export default class Header extends Vue {
} }
} }
// (4) In another component or page, emit the event! // (4) In another component or page, emit the myevent!
// Call the method when clicking button etc. // Call the method when clicking button etc.
methods: { methods: {
openLeftDrawer() { openLeftDrawer() {
@@ -160,7 +160,7 @@ export default class Header extends Vue {
const color = (value === 'online') ? 'positive' : 'warning' const color = (value === 'online') ? 'positive' : 'warning'
if (this.static_data.SHOW_IF_IS_SERVER_CONNECTION) { if (this.static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION) {
if (!!oldValue) { if (!!oldValue) {
tools.showNotif(this.$q, this.$t('connection') + ` ${value}`, { tools.showNotif(this.$q, this.$t('connection') + ` ${value}`, {
@@ -314,6 +314,12 @@ export default class Header extends Vue {
get Username() { get Username() {
return UserStore.state.username return UserStore.state.username
} }
get myName() {
return UserStore.state.name
}
get mySurname() {
return UserStore.state.surname
}
get Verificato() { get Verificato() {
return UserStore.state.verified_email return UserStore.state.verified_email
@@ -339,4 +345,8 @@ export default class Header extends Vue {
get static_data(){ get static_data(){
return static_data return static_data
} }
get isLogged() {
return UserStore.state.isLogged
}
} }

View File

@@ -58,7 +58,7 @@
--> -->
<q-btn <q-btn
v-if="!isonline && static_data.SHOW_IF_IS_SERVER_CONNECTION" v-if="!isonline && static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION"
flat flat
dense dense
round round
@@ -102,7 +102,7 @@
<label>{{ $t('msg.hello') }}</label> <span v-model="prova"></span> ! <label>{{ $t('msg.hello') }}</label> <span v-model="prova"></span> !
</div>--> </div>-->
<q-btn v-if="static_data.SHOW_USER_MENU" dense flat round icon="menu" @click="right = !right"> <q-btn v-if="static_data.functionality.SHOW_USER_MENU" dense flat round icon="menu" @click="right = !right">
</q-btn> </q-btn>
</q-toolbar> </q-toolbar>
@@ -121,7 +121,7 @@
</q-drawer> </q-drawer>
<q-drawer v-if="static_data.SHOW_USER_MENU" v-model="right" side="right" overlay bordered> <q-drawer v-if="static_data.functionality.SHOW_USER_MENU" v-model="right" side="right" overlay bordered>
<div id="profile"> <div id="profile">
<q-img class="absolute-top" src="../../statics/images/landing_first_section.png" <q-img class="absolute-top" src="../../statics/images/landing_first_section.png"
style="height: 150px"> style="height: 150px">

View File

@@ -3,6 +3,12 @@ import { IEvents } from "../model";
export const db_data = { export const db_data = {
URL_FACEBOOK: "https://www.facebook.com/associazioneshen", URL_FACEBOOK: "https://www.facebook.com/associazioneshen",
userdata : {
calendar_editable: false,
},
events: [ events: [
{ {
title: 'Scambi Reiki', title: 'Scambi Reiki',

View File

@@ -16,10 +16,10 @@ const msg_website = {
Test2: 'Test2', Test2: 'Test2',
projects: 'Progetti', projects: 'Progetti',
favproj: 'Favoriti', favproj: 'Favoriti',
},
projall: 'Tutti', projall: 'Tutti',
projectsShared: 'Miei Condivisi', projectsShared: 'Miei Condivisi',
myprojects: 'Miei Personali' myprojects: 'Miei Personali',
},
msg: { msg: {
hello: 'Buongiorno', hello: 'Buongiorno',
myAppName: 'FreePlanet', myAppName: 'FreePlanet',
@@ -136,11 +136,11 @@ const msg_website = {
Test1: 'Test1', Test1: 'Test1',
Test2: 'Test2', Test2: 'Test2',
projects: 'Proyectos', projects: 'Proyectos',
},
favproj: 'Favoritos', favproj: 'Favoritos',
projall: 'Todos', projall: 'Todos',
projectsShared: 'Mis Compartidos', projectsShared: 'Mis Compartidos',
myprojects: 'Mis Personales', myprojects: 'Mis Personales',
},
msg: { msg: {
hello: 'Buenos Días', hello: 'Buenos Días',
myAppName: 'FreePlanet', myAppName: 'FreePlanet',
@@ -258,11 +258,11 @@ const msg_website = {
Test1: 'Test1', Test1: 'Test1',
Test2: 'Test2', Test2: 'Test2',
projects: 'Projects', projects: 'Projects',
},
favproj: 'Favorite', favproj: 'Favorite',
projall: 'All', projall: 'All',
projectsShared: 'My Shared', projectsShared: 'My Shared',
myprojects: 'My Personals', myprojects: 'My Personals',
},
msg: { msg: {
hello: 'Hello!', hello: 'Hello!',
myAppName: 'FreePlanet', myAppName: 'FreePlanet',
@@ -363,6 +363,24 @@ const msg_website = {
}, },
contacts: 'Contacts' contacts: 'Contacts'
}, },
},
fr: {
pages: {
},
msg: {
},
},
de: {
pages: {
},
msg: {
},
} }
} }

View File

@@ -1,9 +1,225 @@
import { Todos, Projects, UserStore } from '@store' import { Todos, Projects, UserStore, GlobalStore } from '@store'
import globalroutines from '../globalroutines/index' import globalroutines from '../globalroutines/index'
import Quasar, { date, Screen } from 'quasar' import Quasar, { date, Screen } from 'quasar'
import { IListRoutes, ILang, IMenuList, IProject, ITodo, Privacy, IPerson } from '../model/index' import {
IListRoutes,
ILang,
IMenuList,
IProject,
ITodo,
Privacy,
IPerson,
IFunctionality,
IPreloadImages
} from '../model/index'
import { RouteNames } from '../router/route-names' import { RouteNames } from '../router/route-names'
import { tools } from '@src/store/Modules/tools'
// const SHOW_PROJINTHEMENU = false
//
// let arrlistafavourite = []
// let arrlistaprojtutti = []
// let arrlistaprojmiei = []
// if (SHOW_PROJINTHEMENU) {
// arrlistaprojtutti = Projects.getters.listaprojects(RouteNames.projectsall)
// arrlistaprojmiei = Projects.getters.listaprojects(RouteNames.myprojects)
// arrlistafavourite = Projects.getters.listaprojects(RouteNames.favouriteprojects)
// }
// PROGETTI -> FAVORITI :
// if (arrlistafavourite.length > 0) {
// arrMenu.push({
// icon: 'favorite_border',
// nametranslate: 'pages.' + RouteNames.favouriteprojects,
// urlroute: RouteNames.favouriteprojects,
// level_parent: 0.0,
// level_child: 0.5,
// routes2: arrlistafavourite,
// idelem: ''
// })
// }
const routes_todo: IListRoutes[] = []
const arrlista = [
{ nametranslate: 'personal', description: 'personal' },
{ nametranslate: 'work', description: 'work' },
{ nametranslate: 'shopping', description: 'shopping' }
]
arrlista.forEach((elem: IMenuList) => {
routes_todo.push(
{
path: '/todo/:category',
materialIcon: 'todo',
urlroute: 'todo',
name: elem.description,
component: () => import('@/views/todo-list/todo-list.vue'),
level_parent: 0,
level_child: 0.5,
inmenu: true,
submenu: true,
infooter: true,
meta: {
requiresAuth: true,
async asyncData() {
await Todos.actions.dbLoad({ checkPending: false })
}
// middleware: [auth]
},
idelem: elem.nametranslate,
}
)
})
const routes_projects: IListRoutes[] = [
{
// PROGETTI -> TUTTI :
path: '/' + RouteNames.projectsall + '/:idProj',
materialIcon: 'accessibility_new',
name: RouteNames.projectsall,
urlroute: RouteNames.projectsall,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: true,
submenu: true,
level_parent: 0.0,
level_child: 0.5,
infooter: true,
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
},
idelem: process.env.PROJECT_ID_MAIN
},
{
// PROGETTI -> TUTTI :
path: '/' + RouteNames.myprojects + '/:idProj',
materialIcon: 'accessibility_new',
name: RouteNames.myprojects,
urlroute: RouteNames.myprojects,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: true,
submenu: true,
level_parent: 0.0,
level_child: 0.5,
infooter: true,
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
},
idelem: process.env.PROJECT_ID_MAIN
},
{
// PROGETTI -> TUTTI :
path: '/' + RouteNames.projectsshared + '/:idProj',
materialIcon: 'accessibility_new',
name: RouteNames.projectsshared,
urlroute: RouteNames.projectsshared,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: true,
submenu: true,
level_parent: 0.0,
level_child: 0.5,
infooter: true,
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
},
idelem: process.env.PROJECT_ID_MAIN
}
]
const routes: IListRoutes[] = [
{
path: '/',
materialIcon: 'home',
name: 'pages.home',
component: () => import('@/root/home/home.vue'),
reqauth: false,
inmenu: true,
infooter: true
},
{
path: '',
faIcon: 'fa fa-list-alt',
materialIcon: 'format_list_numbered',
name: 'pages.Todo',
routes2: routes_todo,
level_parent: 0,
level_child: 0.5,
inmenu: true,
solotitle: true,
infooter: true
},
...routes_todo,
{
path: '',
faIcon: 'fa fa-list-alt',
materialIcon: 'next_week',
name: 'pages.projects',
routes2: routes_projects,
level_parent: 0,
level_child: 0.5,
inmenu: true,
solotitle: true,
infooter: true
},
...routes_projects,
{
path: '/category',
materialIcon: 'list',
name: 'pages.Category',
component: () => import('@/views/categories/category/category.vue'),
inmenu: true,
infooter: true
},
{
path: '/admin/testp1/:category',
materialIcon: 'restore',
name: 'pages.Test1',
component: () => import('@/views/admin/testp1/testp1.vue'),
inmenu: true,
infooter: false,
reqauth: true
},
// --- NOT IN MENU: ---
{ path: '/policy', name: 'pages.policy', component: () => import('@/root/policy/policy.vue') },
{
path: '/signup',
materialIcon: 'how_to_reg',
name: 'pages.SignUp',
component: () => import('@/views/login/signup/signup.vue'),
inmenu: true,
infooter: true
},
{
path: '/signin',
materialIcon: 'account_circle',
name: 'pages.SignIn',
component: () => import('@/views/login/signin/signin.vue'),
inmenu: true,
infooter: true
},
{ path: '/vreg', name: 'Verify Reg', component: () => import('@/views/login/vreg/vreg.vue') },
{
path: '/admin/cfgserv',
name: 'cfgserv',
component: () => import('@/views/admin/cfgServer/cfgServer.vue'),
reqauth: true
},
{ path: '/offline', name: 'Offline', component: () => import('@/views/offline/offline.vue') }
]
const ds_operatori: IPerson[] = [ const ds_operatori: IPerson[] = [
{ {
@@ -23,7 +239,7 @@ const ds_operatori: IPerson[] = [
'Grazie a delle meravigliose sincronicità ho incontrato persone con cui condividere il percorso, partecipare attivamente alla conduzione di unassociazione culturale per la divulgazione delle discipline olistiche e questo percorso che sempre più chiaramente si è mostrato essere “ciò che volevo fare da grande”. Gli interessi si sono così trasformati in percorsi formativi professionali per diventare Operatrice Olistica e Naturopata.<br><br>' + 'Grazie a delle meravigliose sincronicità ho incontrato persone con cui condividere il percorso, partecipare attivamente alla conduzione di unassociazione culturale per la divulgazione delle discipline olistiche e questo percorso che sempre più chiaramente si è mostrato essere “ciò che volevo fare da grande”. Gli interessi si sono così trasformati in percorsi formativi professionali per diventare Operatrice Olistica e Naturopata.<br><br>' +
'Insieme a Cristina e Kathryna nel 2019 abbiamo deciso di fondare Lassociazione SHEN per creare un centro di formazione sia per chi desidera intraprendere una professione in ambito olistico sia per chi desidera fare un percorso di crescita personale.<br><br>' + 'Insieme a Cristina e Kathryna nel 2019 abbiamo deciso di fondare Lassociazione SHEN per creare un centro di formazione sia per chi desidera intraprendere una professione in ambito olistico sia per chi desidera fare un percorso di crescita personale.<br><br>' +
'E di certo il cammino non è ancora finito cè così tanto da conoscere e sperimentare...<br><br>' + 'E di certo il cammino non è ancora finito cè così tanto da conoscere e sperimentare...<br><br>' +
'<span class="citazione">I due giorni più importanti della vita sono quello in cui sei nato e quello in capisci perché. (Mark Twain)</span>', '<span class="citazione">I due giorni più importanti della vita sono quello in cui sei nato e quello in capisci perché. (Mark Twain)</span>'
}] }]
const arrLangUsed = [ const arrLangUsed = [
@@ -40,15 +256,24 @@ const lang_available: ILang[] = [
// { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../statics/images/de.png', short: 'DE' }, // { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../statics/images/de.png', short: 'DE' },
] ]
export const static_data = { const preLoadImages: IPreloadImages[] = []
const functionality: IFunctionality = {
SHOW_USER_MENU: true, SHOW_USER_MENU: true,
SHOW_IF_IS_SERVER_CONNECTION: false, SHOW_IF_IS_SERVER_CONNECTION: false,
ENABLE_TODOS_LOADING: true, ENABLE_TODOS_LOADING: true,
ENABLE_PROJECTS_LOADING: true, ENABLE_PROJECTS_LOADING: true,
SHOW_NEWSLETTER: false, SHOW_NEWSLETTER: false,
SHOW_ONLY_POLICY: false, SHOW_ONLY_POLICY: false,
BOOKING_EVENTS: false
}
export const static_data = {
routes,
functionality,
ds_operatori, ds_operatori,
lang_available, lang_available,
preLoadImages,
arrLangUsed arrLangUsed
} }

View File

@@ -4,6 +4,8 @@ import { GlobalStore } from '../../store/Modules'
import Component from 'vue-class-component' import Component from 'vue-class-component'
import { static_data } from '../../db/static_data' import { static_data } from '../../db/static_data'
import { tools } from '../../store/Modules/tools' import { tools } from '../../store/Modules/tools'
import { IListRoutes } from '@src/model'
import { UserStore } from '@modules'
export default class MenuOne extends Vue { export default class MenuOne extends Vue {
@@ -30,6 +32,10 @@ export default class MenuOne extends Vue {
return GlobalStore.getters.getmenu return GlobalStore.getters.getmenu
} }
public visumenu(elem) { // : IListRoutes
return (elem.onlyAdmin && UserStore.state.isAdmin) || (!elem.onlyAdmin)
}
public setParentVisibilityBasedOnRoute(parent) { public setParentVisibilityBasedOnRoute(parent) {
parent.routes.forEach((item) => { parent.routes.forEach((item) => {
if (this.$route.path === item.path) { if (this.$route.path === item.path) {
@@ -50,4 +56,13 @@ export default class MenuOne extends Vue {
return static_data return static_data
} }
public getroute(elem) {
if (elem.idelem) {
return tools.getUrlByTipoProj(elem.urlroute) + elem.idelem
} else {
return elem.path
}
}
} }

View File

@@ -4,7 +4,7 @@
<template v-for="(parent, index) in getmenu"> <template v-for="(parent, index) in getmenu">
<!--<div class="q-list-header">{{replaceUnderlineToSpace(index)}}</div>--> <!--<div class="q-list-header">{{replaceUnderlineToSpace(index)}}</div>-->
<div v-for="myitemmenu in static_data.routes"> <div v-for="myitemmenu in static_data.routes">
<div v-if="!!myitemmenu.routes2 && myitemmenu.inmenu"> <div v-if="!!myitemmenu.routes2 && myitemmenu.inmenu && visumenu(myitemmenu)">
<q-expansion-item <q-expansion-item
:header-inset-level="myitemmenu.level_parent" :header-inset-level="myitemmenu.level_parent"
:content-inset-level="myitemmenu.level_parent" :content-inset-level="myitemmenu.level_parent"
@@ -16,7 +16,7 @@
<q-expansion-item v-for="(child2, index) in myitemmenu.routes2" <q-expansion-item v-for="(child2, index) in myitemmenu.routes2"
:key="index" :key="index"
:to="child2.path" :to="getroute(child2)"
:header-inset-level="child2.level_child" :header-inset-level="child2.level_child"
:duration="300" :duration="300"
:icon="child2.materialIcon" :icon="child2.materialIcon"
@@ -26,7 +26,7 @@
:label="tools.getLabelByItem(child2, mythis)"> :label="tools.getLabelByItem(child2, mythis)">
<q-expansion-item v-if="!!child2.routes2" v-for="(child3, index) in child2.routes2" <q-expansion-item v-if="!!child2.routes2" v-for="(child3, index) in child2.routes2"
:key="index" :key="index"
:to="child3.path" :to="getroute(child3)"
:header-inset-level="child3.level_child" :header-inset-level="child3.level_child"
:duration="300" :duration="300"
:icon="child3.materialIcon" :icon="child3.materialIcon"
@@ -42,11 +42,11 @@
</q-expansion-item> </q-expansion-item>
</div> </div>
<div v-else> <div v-else>
<div v-if="myitemmenu.inmenu && !myitemmenu.submenu"> <div v-if="myitemmenu.inmenu && !myitemmenu.submenu && visumenu(myitemmenu)">
<q-slide-transition :duration=200> <q-slide-transition :duration=200>
<div v-show="true"> <div v-show="true">
<q-expansion-item <q-expansion-item
:to="myitemmenu.path" :to="getroute(myitemmenu)"
:header-inset-level="myitemmenu.level_parent" :header-inset-level="myitemmenu.level_parent"
:content-inset-level="myitemmenu.level_parent" :content-inset-level="myitemmenu.level_parent"
:label="tools.getLabelByItem(myitemmenu, mythis)" :label="tools.getLabelByItem(myitemmenu, mythis)"

View File

@@ -1,5 +1,6 @@
export interface IEvents { export interface IEvents {
_id?: any
time?: string time?: string
duration?: number duration?: number
duration2?: number duration2?: number
@@ -18,9 +19,23 @@ export interface IEvents {
avatar2?: string avatar2?: string
infoextra?: string infoextra?: string
linkpdf?: string linkpdf?: string
nobookable?: boolean
}
export interface IBookedEvent {
id_bookedevent?: any
numpeople: number
infoevent: string
msgbooking: string
datebooked?: Date
booked: boolean
} }
export interface ICalendarState { export interface ICalendarState {
editable: boolean
eventlist: IEvents[]
bookedevent: IBookedEvent[]
// ---------------
titlebarHeight: number titlebarHeight: number
locale: string, locale: string,
maxDays: number, maxDays: number,

View File

@@ -82,12 +82,17 @@ export interface IListRoutes {
solotitle?: boolean solotitle?: boolean
infooter?: boolean infooter?: boolean
submenu?: boolean submenu?: boolean
onlyAdmin?: boolean
meta?: any
idelem?: string
urlroute?: string
// ------------------------ // ------------------------
faIcon?: string faIcon?: string
text?: string text?: string
routes2?: IListRoutes[] routes2?: IListRoutes[]
level_parent?: number level_parent?: number
level_child?: number level_child?: number
separator?: boolean
} }
export interface IPerson { export interface IPerson {
@@ -139,6 +144,7 @@ export interface ITimeLineEntry {
image2?: string image2?: string
image3?: string image3?: string
image4?: string image4?: string
video?: string
side: string side: string
link_url?: string link_url?: string
link_url_lang?: IAllLang link_url_lang?: IAllLang
@@ -166,6 +172,7 @@ export interface IColl {
date: string date: string
subtitle?: IAllLang subtitle?: IAllLang
img: string img: string
img2?: string
linkagg?: string linkagg?: string
linkagg_type?: number linkagg_type?: number
width?: number width?: number
@@ -176,3 +183,20 @@ export interface ICollaborations {
withwhom_title: IAllLang withwhom_title: IAllLang
list: IColl[] list: IColl[]
} }
export interface IParamDialog {
param1?: any
param2?: any
param3?: any
}
export interface IFunctionality {
PWA?: boolean
SHOW_USER_MENU?: boolean
SHOW_IF_IS_SERVER_CONNECTION?: boolean
ENABLE_TODOS_LOADING?: boolean
ENABLE_PROJECTS_LOADING?: boolean
SHOW_NEWSLETTER?: boolean
SHOW_ONLY_POLICY?: boolean
BOOKING_EVENTS?: boolean
}

View File

@@ -3,6 +3,8 @@ import { IToken } from 'model/other'
export const DefaultUser = <IUserState>{ export const DefaultUser = <IUserState>{
email: '', email: '',
username: '', username: '',
name: '',
surname: '',
password: '', password: '',
lang: 'it' lang: 'it'
} }
@@ -11,6 +13,8 @@ export interface IUserState {
userId?: string userId?: string
email?: string email?: string
username?: string username?: string
name?: string
surname?: string
password?: string password?: string
lang?: string lang?: string
repeatPassword?: string repeatPassword?: string

View File

@@ -1,3 +1,5 @@
import { IBookingState } from '@src/model/BookingStore'
export * from './UserStore' export * from './UserStore'
export * from './GlobalStore' export * from './GlobalStore'
export * from './signin-option' export * from './signin-option'
@@ -11,3 +13,4 @@ export * from './Projects'
export * from './Calendar' export * from './Calendar'
export * from './Estimate' export * from './Estimate'
export * from './BookingStore'

View File

@@ -2,6 +2,8 @@
export interface ISignupOptions { export interface ISignupOptions {
email?: string email?: string
username: string username: string
name?: string
surname?: string
password?: string password?: string
lang?: string lang?: string
repeatPassword?: string repeatPassword?: string

View File

@@ -1,13 +1,3 @@
body {
font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #a7a7a7;
line-height: 1.5;
//font-size: 1rem;
}
$grayshadow: #555;
.testo-banda { .testo-banda {
//background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent)); //background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent));
@@ -15,9 +5,18 @@ $grayshadow: #555;
//background: rgba(0, 0, 0, .6) //background: rgba(0, 0, 0, .6)
} }
$grayshadow: #555;
$textcol: blue;
$textcol_scuro: darkblue;
p { p {
margin: 0 0 16px; margin: 0 0 1.25rem;
text-shadow: 2px 2px 4px $grayshadow; //text-shadow: .125rem .125rem .25rem $grayshadow;
}
h4 {
font-size: 1.25rem;
} }
.mycard { .mycard {
@@ -42,8 +41,51 @@ p {
//padding: 0 16px //padding: 0 16px
} }
.intro {
display: flex;
justify-content: space-between;
align-items: stretch;
/* flex-flow: row nowrap; */
padding: 1.25rem 0 1.25rem 0;
margin: .125rem;
* {
width: 100%;
flex: 1;
margin-left: auto;
margin-right: auto;
}
&__associazione {
min-width: 350px;
}
&__comeassociarsi{
min-width: 350px;
}
}
.subtitle {
font-weight: 600;
text-align: center;
letter-spacing: 0.125rem;
text-transform: uppercase;
font-size: 1rem;
}
.landing > section.padding { .landing > section.padding {
padding: 90px 16px padding: 5.62rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
} }
.landing > section > div { .landing > section > div {
@@ -59,7 +101,7 @@ p {
} }
.landing__toolbar .q-btn { .landing__toolbar .q-btn {
border-radius: 0 0 5px 5px; border-radius: 0 0 .315rem .315rem;
-ms-flex-item-align: stretch; -ms-flex-item-align: stretch;
align-self: stretch align-self: stretch
} }
@@ -73,7 +115,7 @@ p {
} }
.landing__arrow { .landing__arrow {
bottom: 25px; bottom: 1.5rem;
opacity: .4 opacity: .4
} }
@@ -83,24 +125,24 @@ p {
} }
.landing__logo { .landing__logo {
width: 150px; width: 9.40rem;
height: 150px; height: 9.40rem;
margin-top: 21px; margin-top: 1.315rem;
//-webkit-animation: logo-rotate 240s linear infinite; //-webkit-animation: logo-rotate 240s linear infinite;
//animation: logo-rotate 240s linear infinite //animation: logo-rotate 240s linear infinite
} }
.landing__features .q-icon { .landing__features .q-icon {
font-size: 64px font-size: 4rem
} }
h4 { h4 {
line-height: 1.5; line-height: 1.5;
text-shadow: 4px 4px 8px $grayshadow; text-shadow: .25rem .25rem .5rem $grayshadow;
} }
.landing__features h4, .landing__features h6 { .landing__features h4, .landing__features h6 {
margin: 26px 0 margin: 1rem 0
} }
.landing__features p { .landing__features p {
@@ -111,19 +153,22 @@ h4 {
.landing__footer { .landing__footer {
//background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000)); //background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000));
background: linear-gradient(180deg, rgba(0, 0, 0, .8) 75%, #FFF); background: linear-gradient(180deg, rgba(0, 0, 0, .8) 95%, #FFF);
padding-top: 72px !important; padding-top: 4.5rem !important;
padding-bottom: 72px !important padding-bottom: 4.5rem !important;
padding-left: 1.25rem;
padding-right: 1.25rem;
color: #9f9f9f;
} }
.icon_contact:hover { .icon_contact:hover {
color: blue; color: blue;
border-color: white; border-color: white;
border-width: 1px; border-width: .0625rem;
} }
.landing__footer .doc-link { .landing__footer .doc-link {
color: #fff color: $textcol;
} }
.landing__footer .doc-link:hover { .landing__footer .doc-link:hover {
@@ -147,7 +192,7 @@ h4 {
} }
.q-col-gutter-sm { .q-col-gutter-sm {
padding: 50px 50px; padding: 3.125rem 3.125rem;
//margin-left: -48px //margin-left: -48px
} }
@@ -187,7 +232,7 @@ body.mobile .landing:before {
.home { .home {
//background-color: rgb(250, 250, 250); //background-color: rgb(250, 250, 250);
padding: 5px; padding: 3.125rem;
display: flex; display: flex;
//flex-wrap: nowrap; //flex-wrap: nowrap;
flex-direction: column; flex-direction: column;
@@ -196,17 +241,17 @@ body.mobile .landing:before {
} }
.btn-start { .btn-start {
margin: 5px; margin: 3.125rem;
} }
.shadow { .shadow {
//color: white; //color: white;
text-shadow: 2px 2px 4px $grayshadow; text-shadow: 0.125rem 0.125rem 0.25rem $grayshadow;
} }
.shadow-max { .shadow-max {
//color: white; //color: white;
text-shadow: 4px 4px 8px $grayshadow; text-shadow: .25rem .25rem .5rem $grayshadow;
} }
.text-h1 { .text-h1 {
@@ -227,31 +272,12 @@ body.mobile .landing:before {
font-weight: 700; font-weight: 700;
} }
.text-subtitle1 { .text-vers{
font-size: 1.35rem; font-size: 0.75rem;
font-weight: 400;
line-height: 1.75rem;
text-shadow: 4px 4px 8px $grayshadow;
letter-spacing: .00937em;
&.big {
font-size: 1.5rem;
}
}
.text-subtitle2 {
font-size: 1.15rem;
font-weight: 400; font-weight: 400;
line-height: 1.75rem; line-height: 1.75rem;
letter-spacing: .00937em; letter-spacing: .00937em;
text-shadow: 4px 4px 8px $grayshadow; text-shadow: .25rem .25rem .5rem $grayshadow;
}
.text-subtitle3 {
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: 2px 2px 4px $grayshadow;
} }
.homep-cover-img-1 { .homep-cover-img-1 {
@@ -274,19 +300,19 @@ body.mobile .landing:before {
} }
.landing__footer-icons { .landing__footer-icons {
font-size: 28px font-size: 1.75rem
} }
.landing__footer-icons a { .landing__footer-icons a {
margin: 0 8px 8px; margin: 0 .5rem .5rem;
text-decoration: none; text-decoration: none;
outline: 0; outline: 0;
color: #fff; color: $textcol;
transition: color .28s transition: color .28s
} }
.landing__footer-icons a:hover { .landing__footer-icons a:hover {
color: #e0e0e0 color: $textcol_scuro;
} }
.doc-img { .doc-img {
@@ -295,12 +321,12 @@ body.mobile .landing:before {
.mylist { .mylist {
background: #3fdaff; background: #3fdaff;
padding-left: 20px; padding-left: 1.25rem;
} }
.clgutter { .clgutter {
margin-top: 20px; margin-top: 1.25rem;
padding: 10px; padding: .62rem;
} }
.carousel_img_3 { .carousel_img_3 {
@@ -321,35 +347,44 @@ body.mobile .landing:before {
height: 7vh height: 7vh
} }
.clgutter { .clgutter {
margin-top: 0px; margin-top: 0;
padding: 0px; padding: 0;
} }
.landing__hero .text-h1 { .landing__hero .text-h1 {
font-size: 3rem; font-size: 3rem;
line-height: 3.05rem; line-height: 3.05rem;
margin-bottom: 24px margin-bottom: 1.5rem
} }
.landing > section.padding { .landing > section.padding {
padding: 40px 16px padding: 2.5rem 1rem;
//padding-bottom: 90px }
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
} }
.landing__features h4, .landing__features h6 { .landing__features h4, .landing__features h6 {
margin: 20px 0 margin: 1.25rem 0
} }
h4 { h4 {
line-height: 1.4; line-height: 1.4;
text-shadow: 4px 4px 8px $grayshadow; text-shadow: 0.25rem 0.25rem 0.5rem $grayshadow;
} }
.landing .feature-item { .landing .feature-item {
text-align: center; text-align: center;
margin-top: 20px; margin-top: 1.25rem;
} }
.landing__hero-content { .landing__hero-content {
padding-bottom: 180px padding-bottom: 11.25rem;
} }
.landing__hero-btns { .landing__hero-btns {
-webkit-box-pack: center; -webkit-box-pack: center;
@@ -358,17 +393,14 @@ body.mobile .landing:before {
} }
.q-col-gutter-sm { .q-col-gutter-sm {
padding: 10px 5px; padding: .625rem .315rem;
} }
.text-subtitle1 { .text-subtitle1 {
font-size: 1.25rem; font-size: 1.25rem;
} }
.text-subtitle2 { .text-vers{
font-size: 1rem; font-size: 0.6rem;
}
.text-subtitle3 {
font-size: 0.75rem;
} }
.carousel_img_3 { .carousel_img_3 {
@@ -382,8 +414,25 @@ body.mobile .landing:before {
.custom-caption { .custom-caption {
text-align: center; text-align: center;
padding: 12px; padding: .75rem;
color: white; color: $textcol;
background-color: rgba(0, 0, 0, .3); background-color: rgba(0, 0, 0, .3);
} }
.mycontacts {
color: gray;
letter-spacing: 0.078rem;
}
.mycontacts_title {
text-shadow: 0.125rem 0.125rem 0.125rem #555;
font-weight: bold;
color: #999;
letter-spacing: 0.125rem;
}
.mycontacts_text {
color: #999;
letter-spacing: 0.093rem;
}

View File

@@ -4,8 +4,12 @@ import { GlobalStore, UserStore } from '@store'
import { Logo } from '../../components/logo' import { Logo } from '../../components/logo'
import { Footer } from '../../components/Footer'
import VueScrollReveal from 'vue-scroll-reveal' import VueScrollReveal from 'vue-scroll-reveal'
import { tools } from '@src/store/Modules/tools' import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
Vue.use(VueScrollReveal, { Vue.use(VueScrollReveal, {
class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides. class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
@@ -21,7 +25,7 @@ Vue.use(VueScrollReveal, {
}) })
@Component({ @Component({
components: { Logo } components: { Logo, Footer }
}) })
export default class Home extends Vue { export default class Home extends Vue {
public text: string = '' public text: string = ''

View File

@@ -402,6 +402,8 @@
<q-page-scroller position="bottom-right" :scroll-offset="850" :offset="[18, 18]" style="opacity: 0.3"> <q-page-scroller position="bottom-right" :scroll-offset="850" :offset="[18, 18]" style="opacity: 0.3">
<q-btn fab icon="keyboard_arrow_up" color="accent" /> <q-btn fab icon="keyboard_arrow_up" color="accent" />
</q-page-scroller> </q-page-scroller>
<Footer></Footer>
</div> </div>
</q-page> </q-page>

View File

@@ -7,6 +7,7 @@ import { ProgressBar } from '@src/store/Modules/Interface'
import { isEqual } from 'lodash' import { isEqual } from 'lodash'
import { UserStore } from '@store' import { UserStore } from '@store'
import { tools } from '@src/store/Modules/tools' import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
Vue.use(VueRouter) Vue.use(VueRouter)
/* /*
@@ -16,7 +17,7 @@ Vue.use(VueRouter)
const Router = new VueRouter({ const Router = new VueRouter({
scrollBehavior: () => ({ x: 0, y: 0 } as PositionResult), scrollBehavior: () => ({ x: 0, y: 0 } as PositionResult),
routes: cfgrouter.routes, routes: cfgrouter.getmenu(),
// Leave these as is and change from quasar.conf.js instead! // Leave these as is and change from quasar.conf.js instead!
// quasar.conf.js -> build -> vueRouterMode // quasar.conf.js -> build -> vueRouterMode

View File

@@ -1,11 +1,13 @@
import { RouteConfig, Route, RouteRecord } from 'vue-router/types' import { RouteConfig, Route, RouteRecord } from 'vue-router/types'
import { tools } from '@src/store/Modules/tools' import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import auth from '../middleware/auth' import auth from '../middleware/auth'
import { GlobalStore, Projects, Todos, UserStore } from '@store' import { GlobalStore, Projects, Todos, UserStore } from '@store'
import { RouteNames } from '@src/router/route-names' import { RouteNames } from '@src/router/route-names'
import { IListRoutes, IMenuList } from '@src/model' import { IListRoutes, IMenuList } from '@src/model'
import { static_data } from '@src/db/static_data'
interface IMyMeta { interface IMyMeta {
title?: string, title?: string,
@@ -36,298 +38,12 @@ export interface IMyRouteConfig extends RouteConfig {
} }
export const cfgrouter = { export const cfgrouter = {
routes: [
{
path: '/',
name: RouteNames.home,
component: () => import('@/root/home/home.vue')
},
{
path: '/signup',
name: 'Registration',
component: () => import('@/views/login/signup/signup.vue')
},
{
path: '/signin',
name: RouteNames.login,
component: () => import('@/views/login/signin/signin.vue')
},
{
path: '/vreg',
name: 'Verify Reg',
component: () => import('@/views/login/vreg/vreg.vue')
},
{
path: '/todo/:category',
name: 'Todos',
component: () => import('@/views/todo-list/todo-list.vue'),
meta: {
requiresAuth: true,
async asyncData() {
await Todos.actions.dbLoad({ checkPending: false })
}
// middleware: [auth]
}
},
{
path: '/category',
name: 'category',
component: () => import('@/views/categories/category/category.vue')
},
{
path: '/admin/cfgserv',
name: 'cfgserv',
component: () => import('@/views/admin/cfgServer/cfgServer.vue'),
meta: {
requiresAuth: true
// middleware: [auth]
}
},
{
path: '/admin/testp1/:category',
name: 'Categories',
component: () => import('@/views/admin/testp1/testp1.vue')
},
{
path: '/estimate',
name: 'Estimate',
component: () => import('@/views/pages/estimate/estimate.vue')
},
{
path: '/offline',
name: 'Offline',
component: () => import('@/views/offline/offline.vue')
},
// {
// path: '/malaga',
// name: 'malaga',
// component: () => import('@/root/malaga/malaga.vue')
// },
{
path: '/' + RouteNames.projectsall + '/:idProj',
name: RouteNames.projectsall,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
// middleware: [auth]
}
},
{
path: '/' + RouteNames.myprojects + '/:idProj',
name: RouteNames.myprojects,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
meta: {
requiresAuth: true,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
// middleware: [auth]
}
},
{
path: '/' + RouteNames.projectsshared + '/:idProj',
name: RouteNames.projectsshared,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
meta: {
requiresAuth: true,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
// middleware: [auth]
}
},
{
path: '/' + RouteNames.listprojects,
name: RouteNames.listprojects,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
meta: {
requiresAuth: true,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
// middleware: [auth]
}
},
{
path: '/' + RouteNames.favouriteprojects,
name: RouteNames.favouriteprojects,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
meta: {
requiresAuth: true,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
// middleware: [auth]
}
}
/*
{
path: '/requestresetpwd',
component: () => import('@/views/login/requestresetpwd.vue'),
meta: { nametranslate: 'Reset your Password' }
},
{
path: '/updatepwd',
component: () => import('@/views/login/updatepassword.vue'),
meta: { nametranslate: 'Update your Password' }
}
{
path: '/simpleform',
component: () => import('@/views/form/simpleForm/simpleForm.vue'),
meta: { nametranslate: 'SimpleForm' }
},
{
path: '/embeeded',
component: () => import('@/views/form/embeeded/embeeded.vue'),
meta: { nametranslate: 'Embeeded' }
}*/
],
getmenu() { getmenu() {
const arrlista = GlobalStore.state.listatodo
const lista: IListRoutes[] = []
arrlista.forEach((elem: IMenuList) => {
const item: IListRoutes = {
faIcon: 'fa fa-list-alt',
materialIcon: 'todo',
name: 'pages.' + elem.description,
route: '/todo/' + elem.nametranslate
}
lista.push(item)
})
const SHOW_PROJINTHEMENU = false
let arrlistafavourite = []
let arrlistaprojtutti = []
let arrlistaprojmiei = []
if (SHOW_PROJINTHEMENU) {
arrlistaprojtutti = Projects.getters.listaprojects(RouteNames.projectsall)
arrlistaprojmiei = Projects.getters.listaprojects(RouteNames.myprojects)
arrlistafavourite = Projects.getters.listaprojects(RouteNames.favouriteprojects)
}
const arrMenu: IMenuList[] = []
// PROGETTI -> FAVORITI :
if (arrlistafavourite.length > 0) {
arrMenu.push({
icon: 'favorite_border',
nametranslate: 'pages.' + RouteNames.favouriteprojects,
urlroute: RouteNames.favouriteprojects,
level_parent: 0.0,
level_child: 0.5,
routes2: arrlistafavourite,
idelem: ''
})
}
// PROGETTI -> TUTTI :
arrMenu.push({
icon: 'accessibility_new',
nametranslate: 'pages.' + RouteNames.projectsall,
urlroute: RouteNames.projectsall,
level_parent: 0.0,
level_child: 0.5,
routes2: [],
idelem: process.env.PROJECT_ID_MAIN
})
// PROGETTI -> CONDIVISI :
arrMenu.push({
icon: 'people_outline',
nametranslate: 'pages.' + RouteNames.projectsshared,
urlroute: RouteNames.projectsshared,
level_parent: 0.0,
level_child: 0.5,
routes2: arrlistaprojtutti,
idelem: process.env.PROJECT_ID_MAIN
})
// PROGETTI -> PERSONALI :
arrMenu.push({
icon: 'person',
nametranslate: 'pages.' + RouteNames.myprojects,
urlroute: RouteNames.myprojects,
level_parent: 0.0,
level_child: 0.5,
routes2: arrlistaprojmiei,
idelem: process.env.PROJECT_ID_MAIN
})
const listaprojectMenu: IListRoutes[] = tools.convertMenuListInListRoutes(arrMenu)
const arrroutes: IListRoutes[] = [] const arrroutes: IListRoutes[] = []
tools.addRoute(arrroutes, { route: '/', faIcon: 'fa fa-home', materialIcon: 'home', name: 'pages.home' }) // HOME for (const route of static_data.routes) {
tools.addRoute(arrroutes, route)
tools.addRoute(arrroutes, {
route: '/todo', faIcon: 'fa fa-list-alt', materialIcon: 'format_list_numbered', name: 'pages.Todo',
routes2: lista,
level_parent: 0.5,
level_child: 0.5
})
const myarrproj = []
for (const myitem of listaprojectMenu) {
tools.addRoute(myarrproj, myitem)
}
tools.addRoute(arrroutes, {
route: '', faIcon: 'fa fa-list-alt', materialIcon: 'next_week', name: 'pages.projects',
routes2: myarrproj,
level_parent: 0.0,
level_child: 0.5
})
console.log('arrroutes', arrroutes)
console.log('listaprojectMenu', listaprojectMenu)
// console.log('arrlistaprojmiei', arrlistaprojmiei)
if (UserStore.state.isAdmin) {
tools.addRoute(arrroutes, {
route: '/category',
faIcon: 'fa fa-list-alt',
materialIcon: 'category',
name: 'pages.Category',
level_parent: 0.0,
level_child: 0.0
})
tools.addRoute(arrroutes, {
route: '/admin/cfgserv',
faIcon: 'fa fa-database',
materialIcon: 'event_seat',
name: 'pages.Admin',
level_parent: 0.0,
level_child: 0.0
})
tools.addRoute(arrroutes, {
route: '/admin/testp1/par1',
faIcon: 'fa fa-database',
materialIcon: 'restore',
name: 'pages.Test1',
level_parent: 0.0,
level_child: 0.0
})
tools.addRoute(arrroutes, {
route: '/admin/testp1/par2',
faIcon: 'fa fa-database',
materialIcon: 'restore',
name: 'pages.Test2',
level_parent: 0.0,
level_child: 0.0
})
} }
return arrroutes return arrroutes

View File

@@ -9,6 +9,7 @@ const msgglobal = {
delete: 'Elimina', delete: 'Elimina',
cancel: 'Annulla', cancel: 'Annulla',
today: 'Oggi', today: 'Oggi',
book: 'Prenota',
msg: { msg: {
titledeleteTask: 'Elimina Task', titledeleteTask: 'Elimina Task',
deleteTask: "Vuoi Eliminare {mytodo}?" deleteTask: "Vuoi Eliminare {mytodo}?"
@@ -49,6 +50,8 @@ const msgglobal = {
richiesto: 'Campo Richiesto', richiesto: 'Campo Richiesto',
email: 'Email', email: 'Email',
username: 'Nome Utente', username: 'Nome Utente',
name: 'Nome',
surname: 'Cognome',
username_login: 'Nome Utente o email', username_login: 'Nome Utente o email',
password: 'Password', password: 'Password',
repeatPassword: 'Ripeti password', repeatPassword: 'Ripeti password',
@@ -151,6 +154,13 @@ const msgglobal = {
themebgcolor: 'Tema Colore Sfondo' themebgcolor: 'Tema Colore Sfondo'
}, },
cal: { cal: {
booked: 'Prenotato',
booked_error: 'Prenotazione non avvenuta. Riprovare più tardi',
booking: 'Prenota Evento',
titlebooking: 'Prenotazione',
cancelbooking: 'Cancella Prenotazione',
canceledbooking: 'Prenotazione Cancellata',
cancelederrorbooking: 'Cancellazione non effettuata, Riprovare più tardi',
event: 'Evento', event: 'Evento',
starttime: 'Dalle', starttime: 'Dalle',
endtime: 'alle', endtime: 'alle',
@@ -164,7 +174,11 @@ const msgglobal = {
infoextra: 'Date e Ora Extra:', infoextra: 'Date e Ora Extra:',
alldayevent: 'Tutto il giorno', alldayevent: 'Tutto il giorno',
eventstartdatetime: 'Data e Ora Inizio Evento', eventstartdatetime: 'Data e Ora Inizio Evento',
enterEndDateTime: 'Data e Ora Fine Evento' enterEndDateTime: 'Data e Ora Fine Evento',
selnumpeople: 'Partecipanti',
msgbooking: 'Messaggio da inviare',
bookingtextdefault: 'Mi prenoto all\'evento',
bookingtextdefault_of: 'di'
}, },
newsletter: { newsletter: {
title: 'Desideri ricevere la nostra Newsletter?', title: 'Desideri ricevere la nostra Newsletter?',
@@ -191,6 +205,7 @@ const msgglobal = {
delete: 'Borrar', delete: 'Borrar',
cancel: 'Cancelar', cancel: 'Cancelar',
today: 'Hoy', today: 'Hoy',
book: 'Reserva',
msg: { msg: {
titledeleteTask: 'Borrar Tarea', titledeleteTask: 'Borrar Tarea',
deleteTask: 'Quieres borrar {mytodo}?' deleteTask: 'Quieres borrar {mytodo}?'
@@ -231,6 +246,8 @@ const msgglobal = {
richiesto: 'Campo requerido', richiesto: 'Campo requerido',
email: 'Email', email: 'Email',
username: 'Nombre usuario', username: 'Nombre usuario',
name: 'Nombre',
surname: 'Apellido',
username_login: 'Nombre usuario o email', username_login: 'Nombre usuario o email',
password: 'contraseña', password: 'contraseña',
repeatPassword: 'Repetir contraseña', repeatPassword: 'Repetir contraseña',
@@ -327,6 +344,13 @@ const msgglobal = {
themebgcolor: 'Tema Colores Fondo' themebgcolor: 'Tema Colores Fondo'
}, },
cal: { cal: {
booked: 'Reservado',
booked_error: 'Reserva fallida. Intenta nuevamente más tarde',
booking: 'Reserva Evento',
titlebooking: 'Reserva',
cancelbooking: 'Cancelar Reserva',
canceledbooking: 'Reserva Cancelada',
cancelederrorbooking: 'Cancelación no realizada, intente nuevamente más tarde',
event: 'Evento', event: 'Evento',
starttime: 'Inicio', starttime: 'Inicio',
endtime: 'fin', endtime: 'fin',
@@ -340,7 +364,11 @@ const msgglobal = {
infoextra: 'Fecha y Hora Extras:', infoextra: 'Fecha y Hora Extras:',
alldayevent: 'Todo el dia', alldayevent: 'Todo el dia',
eventstartdatetime: 'Evento de inicio de fecha y hora', eventstartdatetime: 'Evento de inicio de fecha y hora',
enterEndDateTime: 'Fecha y hora del evento final' enterEndDateTime: 'Fecha y hora del evento final',
selnumpeople: 'Partecipantes',
msgbooking: 'Mensaje para enviar',
bookingtextdefault: 'Reservo el evento',
bookingtextdefault_of: 'de',
}, },
newsletter: { newsletter: {
title: '¿Desea recibir nuestro boletín informativo?', title: '¿Desea recibir nuestro boletín informativo?',
@@ -367,6 +395,7 @@ const msgglobal = {
delete: 'Supprimer', delete: 'Supprimer',
cancel: 'annuler', cancel: 'annuler',
today: 'Aujourd\'hui', today: 'Aujourd\'hui',
book: 'Réserve',
msg: { msg: {
titledeleteTask: 'Supprimer la tâche', titledeleteTask: 'Supprimer la tâche',
deleteTask: 'Voulez-vous supprimer {mytodo}?' deleteTask: 'Voulez-vous supprimer {mytodo}?'
@@ -406,6 +435,8 @@ const msgglobal = {
richiesto: 'Champ obligatoire', richiesto: 'Champ obligatoire',
email: 'Email', email: 'Email',
username: 'Nom d\'utilisateur', username: 'Nom d\'utilisateur',
name: 'Nom',
surname: 'Prénom',
username_login: 'Nom d\'utilisateur ou email', username_login: 'Nom d\'utilisateur ou email',
password: 'mot de passe', password: 'mot de passe',
repeatPassword: 'Répéter le mot de passe', repeatPassword: 'Répéter le mot de passe',
@@ -502,6 +533,13 @@ const msgglobal = {
themebgcolor: 'Tema Colores Fondo' themebgcolor: 'Tema Colores Fondo'
}, },
cal: { cal: {
booked: 'Réservé',
booked_error: 'La réservation a échoué. Réessayez plus tard',
booking: 'Réserver l\'événement',
titlebooking: 'Réservation',
cancelbooking: 'Annuler la réservation',
canceledbooking: 'Réservation annulée',
cancelederrorbooking: 'Annulation non effectuée, réessayez plus tard',
event: 'événement', event: 'événement',
starttime: 'Accueil', starttime: 'Accueil',
endtime: 'fin', endtime: 'fin',
@@ -515,7 +553,11 @@ const msgglobal = {
infoextra: 'Extras Date et heure:', infoextra: 'Extras Date et heure:',
alldayevent: 'Toute la journée', alldayevent: 'Toute la journée',
eventstartdatetime: 'Date de début et heure de l\'événement', eventstartdatetime: 'Date de début et heure de l\'événement',
enterEndDateTime: 'Date et heure de l\'événement final' enterEndDateTime: 'Date et heure de l\'événement final',
selnumpeople: 'Participants',
msgbooking: 'Message à envoyer',
bookingtextdefault: 'Je réserve l\'événement',
bookingtextdefault_of: 'du',
}, },
newsletter: { newsletter: {
title: 'Souhaitez-vous recevoir notre newsletter?', title: 'Souhaitez-vous recevoir notre newsletter?',
@@ -542,6 +584,7 @@ const msgglobal = {
delete: 'Delete', delete: 'Delete',
cancel: 'Cancel', cancel: 'Cancel',
today: 'Today', today: 'Today',
book: 'Book',
msg: { msg: {
titledeleteTask: 'Delete Task', titledeleteTask: 'Delete Task',
deleteTask: 'Delete Task {mytodo}?' deleteTask: 'Delete Task {mytodo}?'
@@ -582,6 +625,8 @@ const msgglobal = {
email: 'Email', email: 'Email',
username_login: 'Username or email', username_login: 'Username or email',
username: 'Username', username: 'Username',
name: 'Name',
surname: 'Surname',
password: 'Password', password: 'Password',
repeatPassword: 'Repeat password', repeatPassword: 'Repeat password',
terms: "I agree with the terms and conditions", terms: "I agree with the terms and conditions",
@@ -676,6 +721,13 @@ const msgglobal = {
themebgcolor: 'Theme Color Background' themebgcolor: 'Theme Color Background'
}, },
cal: { cal: {
booked: 'Booked',
booked_error: 'Reservation failed. Try again later',
booking: 'Book the Event',
titlebooking: 'Reservation',
cancelbooking: 'Cancel Reservation',
canceledbooking: 'Booking cancelled',
cancelederrorbooking: 'Cancellation unsuccessfully, try again later',
event: 'Event', event: 'Event',
starttime: 'From', starttime: 'From',
endtime: 'to', endtime: 'to',
@@ -687,9 +739,13 @@ const msgglobal = {
enterdate: 'Enter date', enterdate: 'Enter date',
details: 'Details', details: 'Details',
infoextra: 'Extra Info DateTime', infoextra: 'Extra Info DateTime',
alldayevent: 'All-Day event', alldayevent: 'All-Day myevent',
eventstartdatetime: 'Event start date and time', eventstartdatetime: 'Event start date and time',
enterEndDateTime: 'Event end date and time' enterEndDateTime: 'Event end date and time',
selnumpeople: 'Participants',
msgbooking: 'Message to send',
bookingtextdefault: 'I book the event',
bookingtextdefault_of: 'of',
}, },
newsletter: { newsletter: {
title: 'Would you like to receive our Newsletter?', title: 'Would you like to receive our Newsletter?',
@@ -716,6 +772,7 @@ const msgglobal = {
delete: 'Delete', delete: 'Delete',
cancel: 'Cancel', cancel: 'Cancel',
today: 'Today', today: 'Today',
book: 'Book',
msg: { msg: {
titledeleteTask: 'Delete Task', titledeleteTask: 'Delete Task',
deleteTask: 'Delete Task {mytodo}?' deleteTask: 'Delete Task {mytodo}?'
@@ -757,6 +814,8 @@ const msgglobal = {
email: 'Email', email: 'Email',
username_login: 'Username or email', username_login: 'Username or email',
username: 'Username', username: 'Username',
name: 'Name',
surname: 'Surname',
password: 'Password', password: 'Password',
repeatPassword: 'Repeat password', repeatPassword: 'Repeat password',
terms: "I agree with the terms and conditions", terms: "I agree with the terms and conditions",
@@ -852,6 +911,13 @@ const msgglobal = {
themebgcolor: 'Theme Color Background' themebgcolor: 'Theme Color Background'
}, },
cal: { cal: {
booked: 'Booked',
booked_error: 'Reservation failed. Try again later',
booking: 'Book the Event',
titlebooking: 'Reservation',
cancelbooking: 'Cancel Reservation',
canceledbooking: 'Booking cancelled',
cancelederrorbooking: 'Cancellation unsuccessfully, try again later',
event: 'Event', event: 'Event',
starttime: 'From', starttime: 'From',
endtime: 'to', endtime: 'to',
@@ -863,9 +929,13 @@ const msgglobal = {
enterdate: 'Enter date', enterdate: 'Enter date',
details: 'Details', details: 'Details',
infoextra: 'Extra Info DateTime', infoextra: 'Extra Info DateTime',
alldayevent: 'All-Day event', alldayevent: 'All-Day myevent',
eventstartdatetime: 'Event start date and time', eventstartdatetime: 'Event start date and time',
enterEndDateTime: 'Event end date and time' enterEndDateTime: 'Event end date and time',
selnumpeople: 'Participants',
msgbooking: 'Message to send',
bookingtextdefault: 'I book the event',
bookingtextdefault_of: 'of',
}, },
newsletter: { newsletter: {
title: 'Would you like to receive our Newsletter?', title: 'Would you like to receive our Newsletter?',
@@ -897,31 +967,26 @@ const messages = {
...msgit, ...msgit,
pages: { ...msg_website.it.pages, ...msgglobal.it.pages }, pages: { ...msg_website.it.pages, ...msgglobal.it.pages },
msg: { ...msg_website.it.msg, ...msgglobal.it.msg }, msg: { ...msg_website.it.msg, ...msgglobal.it.msg },
homepage: { ...msg_website.it.homepage, ...msgglobal.it.homepage }
}, },
es: { es: {
...msges, ...msges,
pages: { ...msg_website.es.pages, ...msgglobal.es.pages }, pages: { ...msg_website.es.pages, ...msgglobal.es.pages },
msg: { ...msg_website.es.msg, ...msgglobal.es.msg }, msg: { ...msg_website.es.msg, ...msgglobal.es.msg },
homepage: { ...msg_website.es.homepage, ...msgglobal.es.homepage }
}, },
enUs: { enUs: {
...msgenUs, ...msgenUs,
pages: { ...msg_website.enUs.pages, ...msgglobal.enUs.pages }, pages: { ...msg_website.enUs.pages, ...msgglobal.enUs.pages },
msg: { ...msg_website.enUs.msg, ...msgglobal.enUs.msg }, msg: { ...msg_website.enUs.msg, ...msgglobal.enUs.msg },
homepage: { ...msg_website.enUs.homepage, ...msgglobal.enUs.homepage }
}, },
fr: { fr: {
...msgfr, ...msgfr,
pages: { ...msg_website.fr.pages, ...msgglobal.fr.pages }, pages: { ...msg_website.fr.pages, ...msgglobal.fr.pages },
msg: { ...msg_website.fr.msg, ...msgglobal.fr.msg }, msg: { ...msg_website.fr.msg, ...msgglobal.fr.msg },
homepage: { ...msg_website.fr.homepage, ...msgglobal.fr.homepage },
}, },
de: { de: {
...msgde, ...msgde,
pages: { ...msg_website.de.pages, ...msgglobal.de.pages }, pages: { ...msg_website.de.pages, ...msgglobal.de.pages },
msg: { ...msg_website.de.msg, ...msgglobal.de.msg }, msg: { ...msg_website.de.msg, ...msgglobal.de.msg },
homepage: { ...msg_website.de.homepage, ...msgglobal.de.homepage },
} }
} }

View File

@@ -46,7 +46,7 @@ async function dbInsertSave(call, item, method) {
console.log('dbInsertSave', item, method) console.log('dbInsertSave', item, method)
if (UserStore.state.userId === '') { if (UserStore.getters.isUserInvalid) {
return false return false
} // Login not made } // Login not made
@@ -76,7 +76,7 @@ async function dbDeleteItem(call, item) {
if (!('serviceWorker' in navigator)) { if (!('serviceWorker' in navigator)) {
// console.log('dbdeleteItem', item) // console.log('dbdeleteItem', item)
if (UserStore.state.userId === '') { if (UserStore.getters.isUserInvalid) {
return false return false
} // Login not made } // Login not made
@@ -234,6 +234,7 @@ async function checkPendingMsg() {
} }
} }
} catch (e) { } catch (e) {
// ...
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {

View File

@@ -19,6 +19,7 @@ import globalroutines from './../../globalroutines/index'
import { cfgrouter } from '../../router/route-config' import { cfgrouter } from '../../router/route-config'
// import { static_data } from '@src/db/static_data'
let stateConnDefault = 'online' let stateConnDefault = 'online'
@@ -291,6 +292,10 @@ namespace Actions {
// return // return
// } // }
// if (!static_data.functionality.PWA) {
// return
// }
if (!('serviceWorker' in navigator)) { if (!('serviceWorker' in navigator)) {
return return
} }
@@ -337,11 +342,15 @@ namespace Actions {
// Calling the Server to Save in the MongoDB the Subscriber // Calling the Server to Save in the MongoDB the Subscriber
function saveNewSubscriptionToServer(context, newSub) { function saveNewSubscriptionToServer(context, newSub) {
// If already subscribed, exit // If already subscribed, exit
if (true) {
return
}
if (!newSub) { if (!newSub) {
return return
} }
if (UserStore.state.userId === undefined || UserStore.state.tokens[0] === undefined) { if (UserStore.getters.isUserInvalid) {
return return
} }

View File

@@ -58,14 +58,19 @@ function updateDataCalculated(projout, projin) {
} }
function getproj(projects, idproj, tipoproj: string) { function getproj(projects, idproj, tipoproj: string) {
console.log('getproj', tipoproj)
let ris = null
if (tipoproj === RouteNames.myprojects) if (tipoproj === RouteNames.myprojects)
return projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.userId) && (proj.privacyread === Privacy.onlyme)) ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.userId) && (proj.privacyread === Privacy.onlyme))
else if (tipoproj === RouteNames.projectsshared) else if (tipoproj === RouteNames.projectsshared)
return projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.userId) && (proj.privacyread !== Privacy.onlyme)) ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId === UserStore.state.userId) && (proj.privacyread !== Privacy.onlyme))
else if (tipoproj === RouteNames.projectsall) else if (tipoproj === RouteNames.projectsall)
return projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId !== UserStore.state.userId) ) ris = projects.filter((proj) => (proj.id_parent === idproj) && (proj.userId !== UserStore.state.userId) )
// console.log('idproj', idproj, 'projects', projects, 'getproj', tipoproj, 'ris=', ris)
return ris
} }
namespace Getters { namespace Getters {
@@ -115,7 +120,7 @@ namespace Getters {
const projs_dacompletare = b.read((state: IProjectsState) => (id_parent: string, tipoproj: string): IProject[] => { const projs_dacompletare = b.read((state: IProjectsState) => (id_parent: string, tipoproj: string): IProject[] => {
// console.log('projs_dacompletare') // console.log('projs_dacompletare')
if (state.projects) { if (state.projects) {
// console.log('state.projects', state.projects) // console.log('projs_dacompletare', state.projects)
return getproj(state.projects, id_parent, tipoproj) return getproj(state.projects, id_parent, tipoproj)
} else { } else {
return [] return []
@@ -130,7 +135,7 @@ namespace Getters {
for (const proj of listaproj) { for (const proj of listaproj) {
myarr.push({ nametranslate: '', description: proj.descr, idelem: proj._id }) myarr.push({ nametranslate: '', description: proj.descr, idelem: proj._id })
} }
// console.log(' myarr', myarr, listaproj) console.log(' myarr', myarr, listaproj)
return myarr return myarr
} else { } else {
@@ -274,7 +279,7 @@ namespace Actions {
async function dbLoad(context, { checkPending, onlyiffirsttime }) { async function dbLoad(context, { checkPending, onlyiffirsttime }) {
if (!static_data.ENABLE_PROJECTS_LOADING) if (!static_data.functionality.ENABLE_PROJECTS_LOADING)
return null return null
if (onlyiffirsttime) { if (onlyiffirsttime) {
@@ -442,7 +447,6 @@ namespace Actions {
modify: b.dispatch(modify), modify: b.dispatch(modify),
ActionCutPaste: b.dispatch(ActionCutPaste) ActionCutPaste: b.dispatch(ActionCutPaste)
} }
} }
// Module // Module

View File

@@ -1,5 +1,5 @@
import Api from '@api' import Api from '@api'
import { ICalendarState } from 'model' import { IBookedEvent, ICalendarState, IEvents } from 'model'
import { ILinkReg, IResult, IIdToken, IToken } from 'model/other' import { ILinkReg, IResult, IIdToken, IToken } from 'model/other'
import { storeBuilder } from '../Store' import { storeBuilder } from '../Store'
@@ -8,9 +8,15 @@ import { tools } from '../../tools'
import translate from '../../../../globalroutines/util' import translate from '../../../../globalroutines/util'
import * as Types from '../../../Api/ApiTypes' import * as Types from '../../../Api/ApiTypes'
import { db_data } from '@src/db/db_data'
import { UserStore } from '@store'
// State // State
const state: ICalendarState = { const state: ICalendarState = {
editable: false,
eventlist: [],
bookedevent: [],
// ---------------
titlebarHeight: 0, titlebarHeight: 0,
locale: 'it-IT', locale: 'it-IT',
maxDays: 1, maxDays: 1,
@@ -39,19 +45,15 @@ const stateGetter = b.state()
namespace Getters { namespace Getters {
// const lang = b.read((state) => { const findEventBooked = b.read((mystate: ICalendarState) => (myevent: IEvents, isconfirmed: boolean) => {
// if (state.lang !== '') { return mystate.bookedevent.find((bookedevent) => (bookedevent.id_bookedevent === myevent._id) && ((isconfirmed && bookedevent.booked) || (!isconfirmed)))
// return state.lang }, 'findEventBooked')
// } else {
// return process.env.LANG_DEFAULT export const getters = {
// } get findEventBooked() {
// }, 'lang') return findEventBooked()
// }
// export const getters = { }
// get lang() {
// return lang()
// },
// }
} }
@@ -67,6 +69,110 @@ namespace Mutations {
} }
namespace Actions { namespace Actions {
async function loadAfterLogin(context) {
console.log('CalendarStore: loadAfterLogin')
// Load local data
state.editable = db_data.userdata.calendar_editable
state.eventlist = db_data.events
// state.bookedevent = db_data.userdata.bookedevent
if (UserStore.getters.isUserInvalid) {
state.bookedevent = []
return false
}
// Load local data
console.log('CALENDAR loadAfterLogin', 'userid=', UserStore.state.userId)
let ris = null
ris = await Api.SendReq('/booking/' + UserStore.state.userId + '/' + process.env.APP_ID, 'GET', null)
.then((res) => {
if (res.data.bookedevent) {
state.bookedevent = res.data.bookedevent
} else {
state.bookedevent = []
}
})
.catch((error) => {
console.log('error dbLoad', error)
// UserStore.mutations.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, tools.ERR_GENERICO, error)
})
return ris
}
function getparambyevent(bookevent) {
return {
id_bookedevent: bookevent.id_bookedevent,
infoevent: bookevent.infoevent,
numpeople: bookevent.numpeople,
msgbooking: bookevent.msgbooking,
datebooked: bookevent.datebooked,
userId: UserStore.state.userId,
booked: bookevent.booked,
}
}
async function BookEvent(context, bookevent: IBookedEvent) {
console.log('BookEvent', bookevent)
const param = getparambyevent(bookevent)
return await Api.SendReq('/booking', 'POST', param)
.then((res) => {
if (res.status === 200) {
if (res.data.code === serv_constants.RIS_CODE_OK) {
state.bookedevent.push(bookevent)
return true
}
}
return false
})
.catch((error) => {
console.error(error)
return false
})
}
async function CancelBookingEvent(context, event: IEvents) {
console.log('CALSTORE: CancelBookingEvent', event)
const myeventtoCancel = state.bookedevent.find((eventbooked) => (eventbooked.id_bookedevent === event._id))
const param = getparambyevent(myeventtoCancel)
param.booked = false // Cancel Booking
return await Api.SendReq('/booking', 'POST', param)
.then((res) => {
if (res.status === 200) {
if (res.data.code === serv_constants.RIS_CODE_OK) {
state.bookedevent = state.bookedevent.filter((eventbooked) => (eventbooked.id_bookedevent !== event._id))
return true
}
}
return false
})
.catch((error) => {
console.error(error)
// UserStore.mutations.setErrorCatch(error)
return false
})
}
export const actions = {
loadAfterLogin: b.dispatch(loadAfterLogin),
BookEvent: b.dispatch(BookEvent),
CancelBookingEvent: b.dispatch(CancelBookingEvent)
}
// async function resetpwd(context, paramquery: ICalendarState) { // async function resetpwd(context, paramquery: ICalendarState) {
// } // }
@@ -80,9 +186,9 @@ namespace Actions {
const CalendarModule = { const CalendarModule = {
get state() { get state() {
return stateGetter() return stateGetter()
} },
// actions: Actions.actions, actions: Actions.actions,
// getters: Getters.getters, getters: Getters.getters
// mutations: Mutations.mutations // mutations: Mutations.mutations
} }

View File

@@ -41,7 +41,7 @@ function getindexbycategory(category: string) {
return state.categories.indexOf(category) return state.categories.indexOf(category)
} }
function gettodosByCategory(category: string): [] { function gettodosByCategory(category: string): any[] {
const indcat = state.categories.indexOf(category) const indcat = state.categories.indexOf(category)
if (!state.todos[indcat]) { if (!state.todos[indcat]) {
return [] return []
@@ -109,8 +109,8 @@ namespace Getters {
}, 'items_dacompletare') }, 'items_dacompletare')
const todos_completati = b.read((stateparam: ITodosState) => (cat: string): ITodo[] => { const todos_completati = b.read((stateparam: ITodosState) => (cat: string): ITodo[] => {
console.log('todos_completati')
const indcat = getindexbycategory(cat) const indcat = getindexbycategory(cat)
console.log('todos_completati', cat, 'indcat=', indcat, 'state.categories=', state.categories)
if (stateparam.todos[indcat]) { if (stateparam.todos[indcat]) {
let arrout = [] let arrout = []
if (stateparam.showtype === costanti.ShowTypeTask.SHOW_LAST_N_COMPLETED) { // Show only the first N completed if (stateparam.showtype === costanti.ShowTypeTask.SHOW_LAST_N_COMPLETED) { // Show only the first N completed
@@ -126,6 +126,8 @@ namespace Getters {
arrout = [] arrout = []
} }
console.log('arrout', arrout)
return arrout return arrout
// return tools.mapSort(arrout) // return tools.mapSort(arrout)
@@ -253,7 +255,7 @@ namespace Actions {
async function dbLoad(context, { checkPending }) { async function dbLoad(context, { checkPending }) {
if (!static_data.ENABLE_PROJECTS_LOADING) if (!static_data.functionality.ENABLE_PROJECTS_LOADING)
return null return null
console.log('dbLoad', nametable, checkPending, 'userid=', UserStore.state.userId) console.log('dbLoad', nametable, checkPending, 'userid=', UserStore.state.userId)

View File

@@ -7,9 +7,11 @@ import router from '@router'
import { serv_constants } from '../Modules/serv_constants' import { serv_constants } from '../Modules/serv_constants'
import { tools } from '../Modules/tools' import { tools } from '../Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { GlobalStore, UserStore, Todos, Projects } from '@store' import { GlobalStore, UserStore, Todos, Projects, BookingStore, CalendarStore } from '@store'
import globalroutines from './../../globalroutines/index' import globalroutines from './../../globalroutines/index'
import { static_data } from '@src/db/static_data'
import translate from './../../globalroutines/util' import translate from './../../globalroutines/util'
import * as Types from '@src/store/Api/ApiTypes' import * as Types from '@src/store/Api/ApiTypes'
@@ -20,6 +22,8 @@ const state: IUserState = {
userId: '', userId: '',
email: '', email: '',
username: '', username: '',
name: '',
surname: '',
password: '', password: '',
lang: process.env.LANG_DEFAULT, lang: process.env.LANG_DEFAULT,
repeatPassword: '', repeatPassword: '',
@@ -33,13 +37,22 @@ const state: IUserState = {
} }
const b = storeBuilder.module<IUserState>('UserModule', state) const b = storeBuilder.module<IUserState>('UserModule', state)
const stateGetter = b.state()
namespace Getters { namespace Getters {
// const fullName = b.read(function fullName(state): string { // const fullName = b.read(function fullName(state): string {
// return state.userInfos.firstname?capitalize(state.userInfos.firstname) + " " + capitalize(state.userInfos.lastname):null; // return state.userInfos.firstname?capitalize(state.userInfos.firstname) + " " + capitalize(state.userInfos.lastname):null;
// }) // })
const isUserInvalid = b.read((mystate) => {
try {
const ris = (mystate.userId === undefined) || (mystate.userId.trim() === '') || (mystate.tokens[0] === undefined)
// console.log('state.userId', state.userId, 'ris', ris)
return ris
} catch (e) {
return true
}
}, 'isUserInvalid')
const lang = b.read((state) => { const lang = b.read((state) => {
if (state.lang !== '') { if (state.lang !== '') {
return state.lang return state.lang
@@ -81,6 +94,9 @@ namespace Getters {
}, 'IsMyGroup') }, 'IsMyGroup')
export const getters = { export const getters = {
get isUserInvalid() {
return isUserInvalid()
},
get lang() { get lang() {
return lang() return lang()
}, },
@@ -108,6 +124,8 @@ namespace Mutations {
function authUser(state: IUserState, data: IUserState) { function authUser(state: IUserState, data: IUserState) {
state.userId = data.userId state.userId = data.userId
state.username = data.username state.username = data.username
state.name = data.name
state.surname = data.surname
if (data.verified_email) { if (data.verified_email) {
state.verified_email = data.verified_email state.verified_email = data.verified_email
} }
@@ -138,6 +156,7 @@ namespace Mutations {
function setlang(state: IUserState, newstr: string) { function setlang(state: IUserState, newstr: string) {
console.log('SETLANG', newstr) console.log('SETLANG', newstr)
state.lang = newstr state.lang = newstr
tools.setLangAtt(newstr)
localStorage.setItem(tools.localStorage.lang, state.lang) localStorage.setItem(tools.localStorage.lang, state.lang)
} }
@@ -176,6 +195,8 @@ namespace Mutations {
function clearAuthData(state: IUserState) { function clearAuthData(state: IUserState) {
state.userId = '' state.userId = ''
state.username = '' state.username = ''
state.name = ''
state.surname = ''
resetArrToken(state.tokens) resetArrToken(state.tokens)
state.x_auth_token = '' state.x_auth_token = ''
state.verified_email = false state.verified_email = false
@@ -221,7 +242,6 @@ namespace Mutations {
setErrorCatch: b.commit(setErrorCatch), setErrorCatch: b.commit(setErrorCatch),
getMsgError: b.commit(getMsgError) getMsgError: b.commit(getMsgError)
} }
} }
namespace Actions { namespace Actions {
@@ -318,6 +338,8 @@ namespace Actions {
email: authData.email, email: authData.email,
password: String(hashedPassword), password: String(hashedPassword),
username: authData.username, username: authData.username,
name: authData.name,
surname: authData.surname
} }
console.log(usertosend) console.log(usertosend)
@@ -336,6 +358,8 @@ namespace Actions {
if (res.status === 200) { if (res.status === 200) {
const userId = newuser._id const userId = newuser._id
const username = authData.username const username = authData.username
const name = authData.name
const surname = authData.surname
if (process.env.DEV) { if (process.env.DEV) {
console.log('USERNAME = ' + username) console.log('USERNAME = ' + username)
console.log('IDUSER= ' + userId) console.log('IDUSER= ' + userId)
@@ -344,6 +368,8 @@ namespace Actions {
Mutations.mutations.authUser({ Mutations.mutations.authUser({
userId, userId,
username, username,
name,
surname,
verified_email: false verified_email: false
}) })
@@ -353,6 +379,8 @@ namespace Actions {
localStorage.setItem(tools.localStorage.lang, state.lang) localStorage.setItem(tools.localStorage.lang, state.lang)
localStorage.setItem(tools.localStorage.userId, userId) localStorage.setItem(tools.localStorage.userId, userId)
localStorage.setItem(tools.localStorage.username, username) localStorage.setItem(tools.localStorage.username, username)
localStorage.setItem(tools.localStorage.name, name)
localStorage.setItem(tools.localStorage.surname, surname)
localStorage.setItem(tools.localStorage.token, state.x_auth_token) localStorage.setItem(tools.localStorage.token, state.x_auth_token)
localStorage.setItem(tools.localStorage.expirationDate, expirationDate.toString()) localStorage.setItem(tools.localStorage.expirationDate, expirationDate.toString())
localStorage.setItem(tools.localStorage.verified_email, String(false)) localStorage.setItem(tools.localStorage.verified_email, String(false))
@@ -380,17 +408,20 @@ namespace Actions {
let sub = null let sub = null
try { try {
if (static_data.functionality.PWA) {
if ('serviceWorker' in navigator) { if ('serviceWorker' in navigator) {
sub = await navigator.serviceWorker.ready sub = await navigator.serviceWorker.ready
.then(function (swreg) { .then((swreg) => {
console.log('swreg') console.log('swreg')
const sub = swreg.pushManager.getSubscription() sub = swreg.pushManager.getSubscription()
return sub return sub
}) })
.catch((e) => { .catch((e) => {
console.log(' ERROR ')
sub = null sub = null
}) })
} }
}
} catch (e) { } catch (e) {
console.log('Err navigator.serviceWorker.ready ... GetSubscription:', e) console.log('Err navigator.serviceWorker.ready ... GetSubscription:', e)
} }
@@ -409,7 +440,6 @@ namespace Actions {
options options
} }
// console.log('PASSO 4')
if (process.env.DEBUG === '1') { if (process.env.DEBUG === '1') {
console.log(usertosend) console.log(usertosend)
} }
@@ -418,7 +448,7 @@ namespace Actions {
let myres: any let myres: any
console.log('Api.SendReq') // console.log('Api.SendReq')
return Api.SendReq('/users/login', 'POST', usertosend, true) return Api.SendReq('/users/login', 'POST', usertosend, true)
.then((res) => { .then((res) => {
@@ -438,11 +468,15 @@ namespace Actions {
if (myuser) { if (myuser) {
const userId = myuser.userId const userId = myuser.userId
const username = authData.username const username = authData.username
const name = myuser.name
const surname = myuser.surname
const verified_email = myuser.verified_email const verified_email = myuser.verified_email
Mutations.mutations.authUser({ Mutations.mutations.authUser({
userId, userId,
username, username,
name,
surname,
verified_email verified_email
}) })
@@ -452,6 +486,8 @@ namespace Actions {
localStorage.setItem(tools.localStorage.lang, state.lang) localStorage.setItem(tools.localStorage.lang, state.lang)
localStorage.setItem(tools.localStorage.userId, userId) localStorage.setItem(tools.localStorage.userId, userId)
localStorage.setItem(tools.localStorage.username, username) localStorage.setItem(tools.localStorage.username, username)
localStorage.setItem(tools.localStorage.name, name)
localStorage.setItem(tools.localStorage.surname, surname)
localStorage.setItem(tools.localStorage.token, state.x_auth_token) localStorage.setItem(tools.localStorage.token, state.x_auth_token)
localStorage.setItem(tools.localStorage.expirationDate, expirationDate.toString()) localStorage.setItem(tools.localStorage.expirationDate, expirationDate.toString())
localStorage.setItem(tools.localStorage.isLogged, String(true)) localStorage.setItem(tools.localStorage.isLogged, String(true))
@@ -486,6 +522,8 @@ namespace Actions {
localStorage.removeItem(tools.localStorage.token) localStorage.removeItem(tools.localStorage.token)
localStorage.removeItem(tools.localStorage.userId) localStorage.removeItem(tools.localStorage.userId)
localStorage.removeItem(tools.localStorage.username) localStorage.removeItem(tools.localStorage.username)
localStorage.removeItem(tools.localStorage.name)
localStorage.removeItem(tools.localStorage.surname)
localStorage.removeItem(tools.localStorage.isLogged) localStorage.removeItem(tools.localStorage.isLogged)
// localStorage.removeItem(rescodes.localStorage.leftDrawerOpen) // localStorage.removeItem(rescodes.localStorage.leftDrawerOpen)
localStorage.removeItem(tools.localStorage.verified_email) localStorage.removeItem(tools.localStorage.verified_email)
@@ -512,6 +550,7 @@ namespace Actions {
} }
async function setGlobal(isLogged: boolean) { async function setGlobal(isLogged: boolean) {
console.log('setGlobal')
// state.isLogged = true // state.isLogged = true
state.isLogged = isLogged state.isLogged = isLogged
if (isLogged) { if (isLogged) {
@@ -522,12 +561,18 @@ namespace Actions {
GlobalStore.actions.checkUpdates() GlobalStore.actions.checkUpdates()
} }
return await GlobalStore.actions.loadAfterLogin() const p = await BookingStore.actions.loadAfterLogin()
.then(() => { const p2 = await CalendarStore.actions.loadAfterLogin()
return Todos.actions.dbLoad({ checkPending: true })
}).then(() => { const p3 = await GlobalStore.actions.loadAfterLogin()
return Projects.actions.dbLoad({ checkPending: true, onlyiffirsttime: true })
}) if (static_data.functionality.ENABLE_TODOS_LOADING)
await Todos.actions.dbLoad({ checkPending: true })
if (static_data.functionality.ENABLE_PROJECTS_LOADING)
await Projects.actions.dbLoad({ checkPending: true, onlyiffirsttime: true })
console.log('setGlobal: END')
} }
async function autologin_FromLocalStorage(context) { async function autologin_FromLocalStorage(context) {
@@ -547,6 +592,8 @@ namespace Actions {
if (now < expirationDate) { if (now < expirationDate) {
const userId = String(localStorage.getItem(tools.localStorage.userId)) const userId = String(localStorage.getItem(tools.localStorage.userId))
const username = String(localStorage.getItem(tools.localStorage.username)) const username = String(localStorage.getItem(tools.localStorage.username))
const name = String(localStorage.getItem(tools.localStorage.name))
const surname = String(localStorage.getItem(tools.localStorage.surname))
const verified_email = localStorage.getItem(tools.localStorage.verified_email) === 'true' const verified_email = localStorage.getItem(tools.localStorage.verified_email) === 'true'
GlobalStore.state.wasAlreadySubOnDb = localStorage.getItem(tools.localStorage.wasAlreadySubOnDb) === 'true' GlobalStore.state.wasAlreadySubOnDb = localStorage.getItem(tools.localStorage.wasAlreadySubOnDb) === 'true'
@@ -558,6 +605,8 @@ namespace Actions {
Mutations.mutations.authUser({ Mutations.mutations.authUser({
userId, userId,
username, username,
name,
surname,
verified_email verified_email
}) })
@@ -603,6 +652,8 @@ namespace Actions {
} }
} }
const stateGetter = b.state()
// Module // Module
const UserModule = { const UserModule = {
get state() { get state() {

View File

@@ -10,5 +10,9 @@ export const costanti = {
CONFIG_ID_STATE_CONN: '2', CONFIG_ID_STATE_CONN: '2',
CONFIG_ID_SHOW_TYPE_TODOS: '3', CONFIG_ID_SHOW_TYPE_TODOS: '3',
FuncDialog: {
CANCEL_BOOKING: 1
},
MAX_PHASES: 5, MAX_PHASES: 5,
} }

View File

@@ -1,5 +1,6 @@
export {storeBuilder} from './Store/Store' export {storeBuilder} from './Store/Store'
export {default as GlobalStore} from './GlobalStore' export {default as GlobalStore} from './GlobalStore'
export {default as BookingStore} from './BookingStore'
export {default as UserStore} from './UserStore' export {default as UserStore} from './UserStore'
export {default as Todos} from './Todos' export {default as Todos} from './Todos'
export {default as Projects} from './Projects' export {default as Projects} from './Projects'

View File

@@ -1,10 +1,10 @@
import { Todos, Projects, UserStore } from '@store' import { Todos, Projects, UserStore, CalendarStore } from '@store'
import globalroutines from './../../globalroutines/index' import globalroutines from './../../globalroutines/index'
import { costanti } from './costanti' import { costanti } from './costanti'
import { toolsext } from './toolsext' import { toolsext } from './toolsext'
import { translation } from './translation' import { translation } from './translation'
import Quasar, { date, Screen } from 'quasar' import Quasar, { date, Screen } from 'quasar'
import { ICollaborations, IListRoutes, IMenuList, IProject, ITodo, Privacy } from '@src/model' import { ICollaborations, IListRoutes, IMenuList, IParamDialog, IProject, ITodo, Privacy } from '@src/model'
import * as ApiTables from '@src/store/Modules/ApiTables' import * as ApiTables from '@src/store/Modules/ApiTables'
import translate from '@src/globalroutines/util' import translate from '@src/globalroutines/util'
import { RouteNames } from '@src/router/route-names' import { RouteNames } from '@src/router/route-names'
@@ -12,6 +12,7 @@ import { RouteNames } from '@src/router/route-names'
import { lists } from './lists' import { lists } from './lists'
import { static_data } from '@src/db/static_data' import { static_data } from '@src/db/static_data'
import { IColl, ITimeLineEntry, ITimeLineMain } from '@src/model/GlobalStore' import { IColl, ITimeLineEntry, ITimeLineMain } from '@src/model/GlobalStore'
import { func_tools } from '@src/store/Modules/toolsext'
export interface INotify { export interface INotify {
color?: string | 'primary' color?: string | 'primary'
@@ -55,6 +56,8 @@ export const tools = {
userId: 'uid', userId: 'uid',
token: 'tk', token: 'tk',
username: 'uname', username: 'uname',
name: 'nm',
surname: 'sn',
lang: 'lg' lang: 'lg'
}, },
@@ -70,6 +73,35 @@ export const tools = {
COMPLETED: 10 COMPLETED: 10
}, },
SelectListNumPeople: [
{
id: 1,
label: '1',
value: 1
},
{
id: 2,
label: '2',
value: 2
},
{
id: 3,
label: '3',
value: 3
},
{
id: 4,
label: '4',
value: 4
},
{
id: 5,
label: '5',
value: 5
}
]
,
selectPhase: { selectPhase: {
it: [ it: [
{ {
@@ -1267,8 +1299,48 @@ export const tools = {
result.push(json[key]) result.push(json[key])
}) })
return result return result
},
executefunc(myself: any, myfunc: number, par: IParamDialog) {
if (myfunc === costanti.FuncDialog.CANCEL_BOOKING) {
console.log(' ENTRATO ! CancelBookingEvent ')
CalendarStore.actions.CancelBookingEvent(par.param1).then((ris) => {
if (ris)
tools.showPositiveNotif(myself.$q, myself.$t('cal.canceledbooking') + ' "' + par.param1.title + '"')
else
tools.showNegativeNotif(myself.$q, myself.$t('cal.cancelederrorbooking'))
})
} }
, },
async askConfirm($q: any, mytitle, mytext, ok, cancel, myself: any, funcok: number, funccancel: number, par: IParamDialog) {
return $q.dialog({
message: mytext,
ok: {
label: ok,
push: true
},
title: mytitle,
cancel: true,
persistent: false
}).onOk(() => {
console.log('OK')
tools.executefunc(myself, funcok, par)
return true
}).onCancel(() => {
console.log('CANCEL')
tools.executefunc(myself, funccancel, par)
return false
})
},
showPositiveNotif(q: any, msg) {
tools.showNotif(q, msg, { color: 'positive', icon: 'notifications' })
},
showNegativeNotif(q: any, msg) {
tools.showNotif(q, msg, { color: 'negative', icon: 'notifications' })
},
showNotif(q: any, msg, data ?: INotify | null showNotif(q: any, msg, data ?: INotify | null
) { ) {
@@ -1297,7 +1369,7 @@ export const tools = {
checkIfUserExist(mythis) { checkIfUserExist(mythis) {
if (UserStore.state.userId === undefined) { if (UserStore.getters.isUserInvalid) {
tools.showNotif(mythis.$q, mythis.$t('todo.usernotdefined')) tools.showNotif(mythis.$q, mythis.$t('todo.usernotdefined'))
return false return false
} }
@@ -1313,7 +1385,7 @@ export const tools = {
, ,
checkLangPassed(mylang) { checkLangPassed(mylang) {
// console.log('checkLangPassed') console.log('checkLangPassed')
const mybrowserLang = Quasar.lang.isoName const mybrowserLang = Quasar.lang.isoName
@@ -1335,7 +1407,7 @@ export const tools = {
console.log('non incluso ', mylang) console.log('non incluso ', mylang)
mylang = static_data.arrLangUsed[0] mylang = static_data.arrLangUsed[0]
// Metti Inglese come default // Metti come default
UserStore.mutations.setlang(mylang) UserStore.mutations.setlang(mylang)
} }
} }
@@ -1728,7 +1800,6 @@ export const tools = {
}, },
heightgallery() { heightgallery() {
if (Screen.width < 400) { if (Screen.width < 400) {
return '200px' return '200px'
@@ -1993,9 +2064,49 @@ export const tools = {
return { path: '', file: fileimg } return { path: '', file: fileimg }
} }
},
convertHTMLtoText(myhtml) {
let msg = myhtml
msg = msg.replace('&quot;', '"')
msg = msg.replace('&gt;', '>')
msg = msg.replace('&lt;', '<')
msg = msg.replace('&amp;', '&')
msg = msg.replace('<br>', '\n')
return msg
},
gettextevent(myevent) {
return '"' + myevent.title + '" (' + this.getDateStr(myevent.date) + ') - ' + myevent.time
},
setLangAtt(mylang) {
console.log('setLangAtt =', mylang)
// console.log('PRIMA this.$q.lang.isoName', this.$q.lang.isoName)
// dynamic import, so loading on demand only
import(`quasar/lang/${mylang}`).then((lang) => {
console.log(' Import dinamically lang =', lang)
Quasar.lang.set(lang.default)
import(`../../statics/i18n`).then(() => {
console.log(' *** MY LANG DOPO=', Quasar.lang.isoName)
})
})
// this.$q.lang.set(mylang)
},
getappname(mythis) {
if (mythis === undefined)
return ''
if (mythis.$t === undefined)
return ''
if (Screen.width < 400) {
return mythis.$t('msg.myAppNameShort')
} else {
return mythis.$t('msg.myAppName')
}
} }
// getLocale() { // getLocale() {
// if (navigator.languages && navigator.languages.length > 0) { // if (navigator.languages && navigator.languages.length > 0) {

View File

@@ -27,7 +27,7 @@ export const func_tools = {
getDateStr(mydate) { getDateStr(mydate) {
const DateFormatter = new Intl.DateTimeFormat(func_tools.getLocale() || void 0, { const DateFormatter = new Intl.DateTimeFormat(func_tools.getLocale() || void 0, {
weekday: 'long', weekday: 'short',
day: 'numeric', day: 'numeric',
month: 'long', month: 'long',
year: 'numeric' year: 'numeric'

View File

@@ -1,4 +1,5 @@
import { GlobalStore, UserStore } from '@store' import { GlobalStore } from '@store'
import { UserStore } from '../../../store/Modules'
import Vue from 'vue' import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator' import { Component, Prop, Watch } from 'vue-property-decorator'
import { serv_constants } from '../../../store/Modules/serv_constants' import { serv_constants } from '../../../store/Modules/serv_constants'
@@ -58,12 +59,22 @@ export default class Signin extends Vue {
public errorMsg(cosa: string, item: any) { public errorMsg(cosa: string, item: any) {
try { try {
if (!item.$error) { return '' } if (!item.$error) {
if (item.$params.email && !item.email) { return this.$t('reg.err.email') } return ''
}
if (item.$params.email && !item.email) {
return this.$t('reg.err.email')
}
if (!item.required) { return this.$t('reg.err.required') } if (!item.required) {
if (!item.minLength) { return this.$t('reg.err.atleast') + ` ${item.$params.minLength.min} ` + this.$t('reg.err.char') } return this.$t('reg.err.required')
if (!item.maxLength) { return this.$t('reg.err.notmore') + ` ${item.$params.maxLength.max} ` + this.$t('reg.err.char') } }
if (!item.minLength) {
return this.$t('reg.err.atleast') + ` ${item.$params.minLength.min} ` + this.$t('reg.err.char')
}
if (!item.maxLength) {
return this.$t('reg.err.notmore') + ` ${item.$params.maxLength.max} ` + this.$t('reg.err.char')
}
return '' return ''
} catch (error) { } catch (error) {
// console.log("ERR : " + error); // console.log("ERR : " + error);
@@ -135,6 +146,7 @@ export default class Signin extends Vue {
} }
public submit() { public submit() {
console.log('submit LOGIN')
this.$v.signin.$touch() this.$v.signin.$touch()
if (this.$v.signin.$error) { if (this.$v.signin.$error) {
@@ -158,10 +170,15 @@ export default class Signin extends Vue {
.then((riscode) => { .then((riscode) => {
// console.log('signin FINITO CALL: riscode=', riscode) // console.log('signin FINITO CALL: riscode=', riscode)
if (riscode === tools.OK) { if (riscode === tools.OK) {
router.push('/signin') // router.push('/signin')
} }
return riscode return riscode
}).then((riscode) => { })
.then((riscode) => {
if (process.env.DEBUG) {
console.log(' riscode=', riscode)
}
if (toolsext.getLocale() !== '') { if (toolsext.getLocale() !== '') {
this.$i18n.locale = toolsext.getLocale() this.$i18n.locale = toolsext.getLocale()
} // Set Lang } // Set Lang
@@ -169,7 +186,10 @@ export default class Signin extends Vue {
UserStore.mutations.setlang(this.$i18n.locale) UserStore.mutations.setlang(this.$i18n.locale)
} // Set Lang } // Set Lang
// console.log('LANG ORA=', toolsext.getLocale())
if (process.env.DEBUG) {
console.log('LANG ORA=', toolsext.getLocale())
}
globalroutines(this, 'loadapp', '') globalroutines(this, 'loadapp', '')
return riscode return riscode

View File

@@ -19,6 +19,12 @@ export const validations = {
registereduser, registereduser,
required required
}, },
name: {
required
},
surname: {
required
},
email: { email: {
email, email,
registeredemail, registeredemail,

View File

@@ -30,9 +30,11 @@ export default class Signup extends Vue {
public signup: ISignupOptions = { public signup: ISignupOptions = {
email: process.env.TEST_EMAIL || '', email: process.env.TEST_EMAIL || '',
username: process.env.TEST_USERNAME || '', username: process.env.TEST_USERNAME || '',
name: process.env.TEST_NAME || '',
surname: process.env.TEST_SURNAME || '',
password: process.env.TEST_PASSWORD || '', password: process.env.TEST_PASSWORD || '',
repeatPassword: process.env.TEST_PASSWORD || '', repeatPassword: process.env.TEST_PASSWORD || '',
terms: process.env.PROD ? false : true terms: !process.env.PROD
} }
public created() { public created() {
@@ -107,6 +109,9 @@ export default class Signup extends Vue {
} else if (cosa === 'username') { } else if (cosa === 'username') {
// console.log(item); // console.log(item);
if (!item.isUnique) { return this.$t('reg.err.duplicate_username') } if (!item.isUnique) { return this.$t('reg.err.duplicate_username') }
} else if ((cosa === 'name') || (cosa === 'surname')) {
// console.log(item);
} }
if (!item.complexity) { return this.$t('reg.err.complexity') } if (!item.complexity) { return this.$t('reg.err.complexity') }

View File

@@ -41,6 +41,38 @@
</q-input> </q-input>
<q-input
v-model="signup.name"
rounded outlined
@blur="$v.signup.name.$touch"
:error="$v.signup.name.$error"
bottom-slots
debounce="1000"
:error-message="errorMsg('name', $v.signup.name)"
:label="$t('reg.name')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input
v-model="signup.surname"
rounded outlined
@blur="$v.signup.surname.$touch"
:error="$v.signup.surname.$error"
bottom-slots
debounce="1000"
:error-message="errorMsg('surname', $v.signup.surname)"
:label="$t('reg.surname')">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-input <q-input
v-model="signup.password" v-model="signup.password"
type="password" type="password"

View File

@@ -57,9 +57,9 @@ export default class ProjList extends Vue {
public percProgress: string = 'percProgress' public percProgress: string = 'percProgress'
public readonly: boolean = false public readonly: boolean = false
public selectStatus: [] = tools.selectStatus[toolsext.getLocale()] public selectStatus: any[] = tools.selectStatus[toolsext.getLocale()]
public selectPhase: [] = tools.selectPhase[toolsext.getLocale()] public selectPhase: any[] = tools.selectPhase[toolsext.getLocale()]
public selectPrivacy: [] = tools.selectPrivacy[toolsext.getLocale()] public selectPrivacy: any[] = tools.selectPrivacy[toolsext.getLocale()]
public $refs: { public $refs: {
singleproject: SingleProject[], singleproject: SingleProject[],

View File

@@ -10,7 +10,7 @@
<template v-slot:before> <template v-slot:before>
<div> <div>
<!--{{idProjAtt}}--> idProjAtt: {{idProjAtt}}
<div class="divtitlecat clMain"> <div class="divtitlecat clMain">
<div class="flex-container clMain"> <div class="flex-container clMain">
<q-btn v-if="!!getIdParent && CanISeeProjectParent" size="sm" push color="secondary" round <q-btn v-if="!!getIdParent && CanISeeProjectParent" size="sm" push color="secondary" round