- Requirements
- Send Msg to Passeggeri
This commit is contained in:
Paolo Arena
2020-03-10 21:42:30 +01:00
parent 2f283d0710
commit 3f6ffc973a
66 changed files with 1670 additions and 547 deletions

View File

@@ -11,3 +11,24 @@
box-shadow: none;
}
.my-card-small-stat {
width: 100%;
max-width: 60px;
min-width: 40px;
@media (max-width: 718px) {
// PER VERSIONE MOBILE
max-width: 50px;
min-width: 40px;
}
box-shadow: none;
}
.text-h5-short {
line-height: 1.25rem !important;
@media (max-width: 718px) {
line-height: 1rem !important;
}
}

View File

@@ -16,12 +16,17 @@ export default class CCardState extends MixinBase {
@Prop({ required: false, default: '' }) public imgsrc
@Prop({ required: false, default: false }) public isperc
@Prop({ required: false, default: '' }) public textadd
@Prop({ required: false, default: 'green' }) public color
@Prop({ required: false, default: 'green' }) public mycolor
@Prop({ required: false, default: '150px' }) public size
@Prop({ required: false, default: '130px' }) public size_mob
@Prop({ required: false, default: '1rem' }) public fontsize
@Prop({ required: false, default: '' }) public mystyle
@Prop({ required: false, default: 'my-card-stat' }) public myclass
get getsize() {
if (tools.isMobile())
return '130px'
return this.size_mob
else
return '150px'
return this.size
}
}

View File

@@ -1,14 +1,14 @@
<template>
<q-card class="my-card-stat text-center">
<q-card :class="myclass +` text-center`" :style="mystyle">
<q-circular-progress
show-value
font-size="1rem"
:font-size="fontsize"
:value="myperc"
:size="getsize"
:thickness="0.25"
:color="color"
:color="mycolor"
track-color="grey-3"
class="q-ma-sm animated"
class="animated"
>
<q-avatar v-if="imgsrc" size="60px">
@@ -18,7 +18,7 @@
<div>
{{ mytext }}
</div>
<div class="mlvalue text-h5 text-blue boldhigh"> {{ myval }} {{ textadd }}
<div class="mlvalue text-h5 text-blue boldhigh text-h5-short"> {{ myval }} {{ textadd }}
</div>
<div v-if="isperc" class="cltexth4">
({{ myperc.toFixed(1) }} %)

View File

@@ -557,7 +557,7 @@ export default class CGridTableRec extends Vue {
this.colclicksel = null
}
console.log('this.rowclicksel', this.rowclicksel)
// console.log('this.rowclicksel', this.rowclicksel)
}
get getusernamesel() {

View File

@@ -31,15 +31,15 @@ export default class CGuidelines extends MixinBase {
}
public aggiorna_guideline() {
this.myguideline = tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
this.myguideline = tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value)
}
public changeval(value) {
console.log('PRIMA saw_and_accepted', UserStore.state.my.profile.saw_and_accepted)
if (value)
UserStore.state.my.profile.saw_and_accepted = tools.SetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
UserStore.state.my.profile.saw_and_accepted = tools.SetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value)
else
UserStore.state.my.profile.saw_and_accepted = tools.UnSetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
UserStore.state.my.profile.saw_and_accepted = tools.UnSetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value)
const mydata = {
'profile.saw_and_accepted': UserStore.state.my.profile.saw_and_accepted

View File

@@ -64,16 +64,9 @@
Union</strong>, Xoom o TransferWise nei casi di
regali extraeuropei.
</li>
<li>Invitare, invitare, invitare. Accompagnare le persone ad un Zoom di Benvenuto e assisterli nella
registrazione al sito. Il movimento è un organismo vivente di cui ora anche tu fai parte. Per ciò ti viene
richiesto di coinvolgere attivamente almeno 2 persone, <strong>ne consigliamo 3 in su</strong>, non penso
solo a me, ma anche agli altri che ne fanno parte, garantendo e <strong>sostenendo così la
solidarietà</strong>
dello stesso.
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Fase 3: Programmazione e Attivazione della Billettera</p>
<p class="cltexth3 text-blue q-ma-lg">Fase 3: Lista d'imbarco e partenza della Nave</p>
<p>In AYNI La sequenza dei passaggi è programmata in anticipo, in modo da:</p>
<ul class="lista">
@@ -81,17 +74,16 @@
<li>realizzare e concludere il processo in maniera semplice, godibile e semi-automatizzata.</li>
</ul>
<p>La tua Billetera verrà programmata e tu entrerai in una chat coi tuoi compagni di viaggio. Allo stesso tempo,
ti verrà comunicata la data in cui la billetera sarà attivata e in cui potrai donare i 33 e il nominativo e i
<p>La tua Nave verrà programmata e tu entrerai in una chat coi tuoi compagni di viaggio. Allo stesso tempo,
ti verrà comunicata la data in cui la tua Nave salperà, cioè quando potrai donare i 33€ e il nominativo e i
dati del Sognatore a cui fare il tuo dono.
Conoscerai, inoltre, le date di ciascuno dei 3 passi.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
Le date di programmazione e dei passi sono intese come <em>previsioni di attivazione e di completamento</em>.
Nel caso il flusso di persone e di invitati non consentisse di mantenere e realizzare quanto programmato nei
tempi e
forma previsti, le date verranno riprogrammate per permettere il completamento di tutti e non lasciare che il
tempi e forma previsti, le date verranno riprogrammate per permettere il completamento di tutti e non lasciare
che il
viaggio possa interrompersi.
</p>
@@ -104,7 +96,7 @@
<CTitleBanner title="Visualizza in Anteprima I 3 Passi (clicca qui)" bgcolor="bg-green-5" canopen="true"
:visible="false" imgpreview="statics/images/passo_1.jpg">
<p>Dal momento in cui conosco il giorno della partenza della mia bigliettera, i passi da compiere
<p>Dal momento in cui conosco il giorno della partenza della mia Nave, i passi da compiere
saranno questi:</p>
<div class="text-center">
<q-img src="statics/images/passo_1.jpg" class="img"></q-img>
@@ -215,16 +207,9 @@
Union</strong>, Xoom o TransferWise en casos de
regalos extra-europeos.
</li>
<li>
Invitar, invitar, invitar. Acompañar a la gente a un Zoom de Bienvenida y ayudarlos en el
registro del sitio. El movimiento es un organismo vivo del que ahora formas parte. Es por eso que usted es
se requiere involucrar activamente al menos a 2 personas, <strong> recomendamos 3 up</strong>, no lo creo.
sólo a , sino también a los otros que forman parte de ella, garantizando y apoyando así la
<strong>solidaridad</strong> de lo mismo.
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Paso 3: Programación y activación de la Billettera</p>.
<p class="cltexth3 text-blue q-ma-lg">Paso 3: Programación y activación de la Nave</p>.
<p>En AYNI La secuencia de pasos está programada de antemano, de modo que:</p>
<ul class="lista">
@@ -232,11 +217,9 @@
<li>hacer y terminar el proceso de una manera simple, agradable y semi-automática.</li>
</ul>
<p>Tu Billetera será programada y entrarás en un chat con tus compañeros de viaje. Al mismo tiempo,
se le informará de la fecha en la que se activará la billetera y en la que podrá donar los 33 y el
nombre y el
<p>Su nave será programada y entrará en un chat con sus compañeros de viaje. Al mismo tiempo,
se le informará de la fecha en la que su barco zarpará, es decir, cuando podrá donar los 33€ y el nombre y el
los datos del Soñador para darle su regalo.
También sabrás las fechas de cada uno de los 3 pasos.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
@@ -370,16 +353,8 @@
Union</strong>, Xoom ou TransferWise em casos de
presentes extra-europeus.
</li>
<li>Convidar, convidar, convidar. Acompanhe as pessoas a um Zoom de Boas-vindas e ajude-as no
registo no site. O movimento é um organismo vivo do qual você agora faz parte. É por isso que você é
necessário para envolver ativamente pelo menos 2 pessoas, <strong> recomendamos 3 a mais</strong>, eu não
acho.
apenas para mim, mas também para os outros que fazem parte dela, garantindo e <strong>sustentando o
solidariedade</strong>
do mesmo.
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Passo 3: Programação e ativação do Billettera</p>.
<p class="cltexth3 text-blue q-ma-lg">Passo 3: Programação e ativação do Navio</p>.
<p>Em AYNI A sequência de passos é programada com antecedência, de modo que:</p>
<ul class="lista">
@@ -387,10 +362,9 @@
<li>Fazer e terminar o processo de uma forma simples, agradável e semi-automática.</li>
</ul>
<p>Sua Billetera será programada e você entrará em uma conversa com seus companheiros de viagem. Ao mesmo tempo,
você será informado da data em que o boleto será ativado e em que você pode doar os 33 e o nome e a
<p>Sua nave será programada e você entrará em uma conversa com seus colegas passageiros. Ao mesmo tempo,
você será informado da data em que seu navio navegará, ou seja, quando você podedoar os 33 euros e o nome e
dados do Sonhador para dar o seu presente.
Você também saberá as datas de cada um dos 3 passos.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
@@ -520,17 +494,8 @@
Union</strong>, Xoom ou TransferWise en cas de
les cadeaux extra-européens.
</li>
<li>Invitez, invitez, invitez. Accompagner les personnes à un Zoom de bienvenue et les aider à
l'enregistrement du site. Le mouvement est un organisme vivant dont vous faites maintenant partie. C'est
pourquoi vous êtes
Il faut qu'au moins 2 personnes participent activement, <strong> nous recommandons 3 personnes </strong>, je
ne pense pas.
seulement à moi, mais aussi aux autres qui en font partie, garantissant et <strong>soutenant ainsi la
solidarité</strong>
de la même manière.
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Etape 3: Programmation et activation de la Billettera</p>.
<p class="cltexth3 text-blue q-ma-lg">Etape 3: Programmation et activation de la Navire</p>.
<p>En AYNI La séquence des étapes est programmée à l'avance, de sorte que:</p>
<ul class="lista">
@@ -538,11 +503,11 @@
<li>faire et terminer le processus de manière simple, agréable et semi-automatique.</li>
</ul>
<p>Votre Billetera sera programmée et vous entrerez en conversation avec vos compagnons de voyage. Dans le même
temps, vous serez informé de la date à laquelle la billetera sera activée et à laquelle vous pourrez faire don
des
33 et du nom et de la les données du rêveur à qui vous pouvez faire un cadeau.
Vous connaîtrez également les dates de chacune des 3 étapes.
<p>Votre navire sera programmé et vous entrerez en conversation avec vos compagnons de voyage. Dans le même
temps,
vous serez informé de la date à laquelle votre navire naviguera, c'est-à-dire de la date à laquelle vous
pourrez faire don des 33€ et du nom et de la
les données du rêveur à qui vous pouvez faire un cadeau.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
@@ -673,16 +638,9 @@
Union</strong>, Xoom or TransferWise in cases of
extra-European gifts.
</li>
<li>Invite, invite, invite. Accompany people to a Welcome Zoom and assist them in the
site registration. The movement is a living organism of which you are now part. That is why you are
required to actively involve at least 2 people, <strong> we recommend 3 up</strong>, I don't think so.
only to me, but also to the others who are part of it, guaranteeing and <strong>supporting
solidarity</strong>.
of the same.
</li>
</ol>
<p class="cltexth3 text-blue q-ma-lg">Step 3: Programming and Activation of the Billettera</p>
<p class="cltexth3 text-blue q-ma-lg">Step 3: Programming and Activation of the Ship</p>
<p>In AYNI The sequence of steps is programmed in advance, so that:</p>
<ul class="lista">
@@ -690,12 +648,10 @@
<li>make and finish the process in a simple, enjoyable and semi-automated way.</li>
</ul>
<p>Your Billetera will be programmed and you'll enter a chat with your fellow travellers. At the same time,
you will be informed of the date on which the billetera will be activated and on which you can donate the
33€
<p>Your Ship will be programmed and you will enter a chat with your fellow passengers. At the same time,
you will be informed of the date on which your ship will sail, i.e. when you will be able to donate the 33€
and the name and the
data of the Dreamer to give your gift to.
You will also know the dates of each of the 3 steps.
</p>
<p class="clBorderImportant" style="border-color: deepskyblue">
@@ -758,29 +714,31 @@
</CImgText>
</div>
<div v-if="showconditions">
<div>
<p>&nbsp;</p>
<div v-if="toolsext.isLang('it')">
<CTitleBanner title="Condizioni da Accettare:" bgcolor="bg-red-5"></CTitleBanner>
<ul class="lista-small">
<li>dichiaro di aver letto e ben compreso le linee guida del movimento AYNI</li>
<li>dichiaro di aver ben compreso gli impegni che prendo iscrivendomi a AYNI (portare 2 persone, regalo 33
€) e di aver compreso che senza non verrò inserito in programmazione.
<li>dichiaro di aver ben compreso l'impegno che prendo iscrivendomi a AYNI (facendo un regalo di 33 €)
e di aver compreso che senza non potrò proseguire il mio viaggio.
</li>
<li>dichiaro di aver ben compreso che <strong>non è un fondo di investimento e che il mio regalo è a fondo
perduto</strong>
<li>Potrò avvalermi del diritto di recesso, entro 14 giorni dall'invio del dono, qualora non volessi più
continuare il mio viaggio.
</li>
<li>dichiaro di aver ben compreso che <strong>non è un fondo di investimento e che il mio regalo, scaduti i 14
giorni del diritto di recesso, è a fondo perduto</strong>
</li>
<li>dichiaro di aver ben compreso che devo <strong>partecipare almeno ad uno ZOOM</strong>
(Video-Conferenza
On Line)
(Video-Conferenza On Line)
</li>
<li>dichiaro di aver ben compreso che per la mia sicurezza devo aprire un <strong>conto Paypal</strong>
per
consegnare il regalo.
per consegnare il regalo.
</li>
</ul>
</div>
@@ -804,6 +762,11 @@
<li>Declaro haber entendido bien que por mi seguridad tengo que abrir una <strong>cuenta de
Paypal</strong> para entregar el regalo.
</li>
<li>
Puedo ejercer mi derecho de retirada dentro de los 14 días siguientes al envío del regalo si no deseo
continuar mi viaje.
</li>
</ul>
</div>
@@ -826,6 +789,11 @@
<li>Eu declaro que compreendi bem que para minha segurança tenho que abrir uma <strong>conta Paypal</strong>.
para entregar o presente.
</li>
<li>
Posso exercer o meu direito de retirada no prazo de 14 dias após o envio do presente se não quiser mais
continuar a minha viagem.
</li>
</ul>
</div>
<div v-else-if="toolsext.isLang('fr')">
@@ -848,6 +816,11 @@
<li>Je déclare avoir bien compris que pour ma sécurité, je dois ouvrir un compte <strong>paypal</strong>.
pour livrer le cadeau.
</li>
<li>
Je peux exercer mon droit de rétractation dans les 14 jours suivant l'envoi du cadeau si je ne souhaite plus
poursuivre mon voyage.
</li>
</ul>
</div>
@@ -861,8 +834,8 @@
33 €) and to have understood that without it I will not be included in the programming.
</li>
<li>I declare that I have well understood that <strong>is not an investment fund and that my gift is deep
lost</strong>
<li>I declare that I have well understood that <strong>is not an investment fund and that my gift is
non-refundable</strong>
</li>
<li>I declare that I have well understood that I must <strong>participate at least in one ZOOM</strong>
@@ -870,20 +843,26 @@
</li>
<li>I declare to have well understood that for my safety I have to open a <strong>paypal</strong> account
for
deliver the gift.
for deliver the gift.
</li>
<li>
I can exercise my right of withdrawal within 14 days of sending the gift if I no longer wish to continue my
trip.
</li>
</ul>
</div>
<q-checkbox
class="bg-grey-4"
v-model="myguideline"
color="primary"
@input="changeval"
:label="$t('steps.read_guidelines')">
<div v-if="showconditions">
<q-checkbox
class="bg-grey-4"
v-model="myguideline"
color="primary"
@input="changeval"
:label="$t('steps.read_guidelines')">
</q-checkbox>
</q-checkbox>
</div>
</div>
</div>

View File

@@ -1,8 +1,8 @@
<template>
<div>
<div class="row q-ml-sm q-pa-xs items-center">
<q-icon size="sm" :name="icon" color="green"></q-icon>
<q-chip dense color="blue" text-color="white" class="q-ml-md">{{text}}</q-chip>
<q-icon v-if="icon" size="lg" :name="icon" color="green"></q-icon>
<q-chip dense color="blue" text-color="white" class="q-ml-sm">{{text}}</q-chip>
</div>
</div>
</template>

View File

@@ -16,6 +16,7 @@ export default class CLineChart extends Vue {
@Prop({ required: false, default: false }) public sum: boolean
@Prop({ required: false, default: '' }) public title: string
@Prop({ required: false, default: null }) public mycolors
@Prop({ required: false, default: 0 }) public offset
get tools() {
return tools
@@ -33,6 +34,8 @@ export default class CLineChart extends Vue {
this.mydatafixed = {}
let somma = 0
if (this.sum)
somma = this.offset
for (const rec of this.mydata) {
if (this.sum) {
@@ -48,4 +51,8 @@ export default class CLineChart extends Vue {
return this.mydatafixed
}
get getoffset() {
return this.offset
}
}

View File

@@ -1,6 +1,6 @@
<template>
<div>
<line-chart :width="tools.getwidthscale(mythis, 350, 400)+`px`" :title="title" :data="getmydata" :round="0" :colors="mycolors"></line-chart>
<line-chart :width="tools.getwidthscale(mythis, 350, 400)+`px`" :title="title" :data="getmydata" :offset="getoffset" :round="0" :colors="mycolors"></line-chart>
</div>
</template>

View File

@@ -18,9 +18,12 @@ import { tools } from '../../store/Modules/tools'
import { lists } from '../../store/Modules/lists'
import { shared_consts } from '../../common/shared_vuejs'
import { CMyRequirement } from '../CMyRequirement'
import { CRequisiti } from '../CRequisiti'
import { CCardState } from '../CCardState'
import { CMyNave } from '../CMyNave'
@Component({
components: { CProfile, CTitleBanner, CMyFieldDb, CCopyBtn, CUserBadge, CLegenda, CRequisito, CMyRequirement }
components: { CProfile, CTitleBanner, CMyFieldDb, CCopyBtn, CUserBadge, CLegenda, CRequisito, CMyRequirement, CRequisiti, CCardState, CMyNave }
})
export default class CMyDashboard extends MixinUsers {
@@ -37,7 +40,8 @@ export default class CMyDashboard extends MixinUsers {
numpeople_aportador: 0,
downline: [],
downnotreg: [],
downbyuser: []
downbyuser: [],
arrnavi: []
}
@Prop({ required: true }) public username
@@ -70,7 +74,7 @@ export default class CMyDashboard extends MixinUsers {
this.myusername = this.username
await UserStore.actions.getDashboard({ username: this.myusername }).then((ris) => {
this.dashboard = UserStore.state.my.dashboard
this.dashboard = ris
})
}
@@ -90,4 +94,19 @@ export default class CMyDashboard extends MixinUsers {
this.seluser = user
}
get Completato7Req() {
// return tools.Is7ReqOk(this.dashboard.myself)
return this.dashboard.myself.qualified
}
get Completato9Req() {
// return tools.Is9ReqOk(this.dashboard.myself)
return this.dashboard.myself.qualified && (this.dashboard.myself.numinvitatiattivi >= 2)
}
public HasNave() {
return this.dashboard.arrnavi.length > 0
}
}

View File

@@ -1,5 +1,39 @@
<template>
<div class="q-ma-xs q-gutter-xs q-pa-xs" v-if="myusername !== ''">
<div class="q-my-xs q-gutter-xs q-py-xs" v-if="myusername !== ''">
<CTitleBanner class="q-pa-xs text-center" :title="$t('pages.statoattuale')" bgcolor="bg-red" clcolor="text-white"
mystyle=" " myclass="myshad">
<div v-if="!!dashboard.myself.name">
<div v-if="!Completato9Req">
<CTitleBanner icon="person" :canopen="true" class="q-pa-xs text-center"
:title="$t('pages.posizione_in_programmazione')" bgcolor="bg-blue"
clcolor="text-white" mystyle=" " myclass="myshad">
<CRequisiti :statebool="Completato7Req" :msgTrue="$t('steps.enter_prog_requisiti_ok')"
:msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti>
</CTitleBanner>
</div>
<CTitleBanner icon="fas fa-gift" :canopen="true" class="q-pa-xs text-center"
:title="$t('pages.posizione_in_nave')" bgcolor="bg-green"
clcolor="text-white" mystyle=" " myclass="myshad">
<div v-if="!HasNave">
<CRequisiti :statebool="Completato9Req" :msgTrue="$t('steps.enter_nave_9req_ok')"
:color_ko="true"
:msgFalse="$t('steps.enter_nave_9req_ko')">
</CRequisiti>
</div>
<CMyNave v-for="(mianave, index) in dashboard.arrnavi" :naveprop="mianave" :key="index"
:navi_partenzaprop="dashboard.navi_partenza">
</CMyNave>
</CTitleBanner>
</div>
</CTitleBanner>
<CTitleBanner class="q-pa-xs" :title="$t('pages.dashboard')" bgcolor="bg-info" clcolor="text-white"
mystyle=" " myclass="myshad">
@@ -75,7 +109,7 @@
</q-btn>
</div>
<CTitleBanner v-if="invitatinotreg" class="shadow-2 rounded-borders" :title="$t('dashboard.downnotreg')"
<!--<CTitleBanner v-if="invitatinotreg" class="shadow-2 rounded-borders" :title="$t('dashboard.downnotreg')"
bgcolor="bg-grey"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
@@ -88,7 +122,7 @@
</CUserBadge>
</div>
</q-list>
</CTitleBanner>
</CTitleBanner>-->
</CTitleBanner>
@@ -119,12 +153,35 @@
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<p class="q-ml-sm">{{ $t('dashboard.legenda_title')}}</p>
<q-list bordered class="rounded-borders row justify-between">
<CLegenda icon="fab fa-telegram" :text="`Telegram ` + $t('pages.statusreg.verified')"></CLegenda>
<q-list bordered class="rounded-borders justify-center q-pa-sm">
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.req')" :myval="7" :myperc="(7 / 9) * 100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="orange">
</CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.req7')}}</div>
</div>
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.req')" :myval="9" :myperc="100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="green"></CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.req9')}}</div>
</div>
<div class="row items-center q-pa-xs">
<CCardState :mytext="$t('pages.statusreg.people')" :myval="2" :myperc="100" size="50px" size_mob="40px"
fontsize="0.75rem" myclass="my-card-small-stat" mycolor="green"></CCardState>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('pages.statusreg.peoplelegend')}}</div>
</div>
<!--<CLegenda icon="fab fa-telegram" :text="`Telegram ` + $t('pages.statusreg.verified')"></CLegenda>
<CLegenda icon="fas fa-video" :text="$t('stat.zoom')"></CLegenda>
<CLegenda icon="fas fa-user-friends" :text="$t('dashboard.numinvitati')"></CLegenda>
<CLegenda icon="fab fa-whatsapp" :text="$t('dashboard.telefono_wa')"></CLegenda>
<CLegenda icon="fas fa-user-friends" :text="$t('dashboard.numinvitati')"></CLegenda>-->
<div class="row items-center q-pa-xs q-ml-sm">
<q-btn
fab-mini
icon="fab fa-whatsapp"
color="white" text-color="green"
size="sm">
</q-btn>
<div class="bg-blue text-white clBorderxs q-ml-sm">{{$t('dashboard.telefono_wa')}}</div>
</div>
</q-list>
</CTitleBanner>
<br>

View File

@@ -11,10 +11,11 @@ import { IColGridTable } from '../../model'
import { CMySelect } from '../CMySelect'
import { GlobalStore, UserStore } from '../../store/Modules'
import { CMyChipList } from '../CMyChipList'
import { CMyToggleList } from '../CMyToggleList'
@Component({
name: 'CMyFieldDb',
components: { CMyEditor, CMySelect, CMyChipList }
components: { CMyEditor, CMySelect, CMyChipList, CMyToggleList }
})
export default class CMyFieldDb extends MixinBase {

View File

@@ -197,6 +197,15 @@
</div>
<div v-else-if="col.fieldtype === tools.FieldType.multiselect">
<CMyToggleList :label="col.title"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:value.sync="myvalue"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:isarray="true">
</CMyToggleList>
<!--
<q-select
v-model="myvalue"
rounded
@@ -214,6 +223,7 @@
>
</q-select>
-->
</div>
<div v-else-if="col.fieldtype === tools.FieldType.multioption">
</div>

View File

@@ -0,0 +1,73 @@
.donatore, .mediatore, .sognatore {
padding: 4px;
margin: 4px;
color: white;
font-size: 1.25rem;
border-radius: 16px;
}
.donatore {
background-color: #2ba0fd;
}
.mediatore {
background-color: red;
}
.sognatore {
background-color: green;
}
.cont_donatore, .cont_sognatore, .cont_mediatore, .cont_tragitto, .cont_pos, .cont_intestaz, .cont_pos_intest, .cont_intestaz_small {
border: solid 2px #4198ef;
padding: 4px;
margin: 4px;
font-size: 1rem;
border-radius: 16px;
}
.you {
background-color: yellow;
}
.cont_tragitto{
color: blue;
}
.cont_pos, .cont_pos_intest{
padding-left: 12px;
padding-right: 12px;
border-radius: 64px !important;
color: red;
}
.cont_pos_intest {
width: 37px;
font-size: 0.75rem;
}
.extra{
opacity: 0.6;
}
.passo{
font-weight: bold;
width: 100px;
}
.gift{
margin: 4px;
}
.cont_intestaz, .cont_intestaz_small{
font-size: 0.75rem;
margin: 4px;
border-radius: 16px !important;
}
.cont_intestaz_small{
margin: 0;
margin-top: 4px;
margin-bottom: 4px;
}

View File

@@ -0,0 +1,255 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import MixinBase from '@src/mixins/mixin-base'
import MixinNave from '../../mixins/mixin-nave'
import { CTitleBanner } from '../CTitleBanner'
import { UserStore } from '../../store/Modules'
import { lists } from '../../store/Modules/lists'
import translate from '../../globalroutines/util'
@Component({
components: { CTitleBanner },
})
export default class CMyNave extends MixinNave {
@Prop({ required: true }) public naveprop
@Prop({ required: true }) public navi_partenzaprop: any[]
public navi_partenza: any[]
public $t
public link_chat: string = ''
public cosa: string = 'tragitto'
public nave: any = null
public numpercorso = 7
public riga: number = 1
public col: number = 1
public rigadoni: number = 1
public coldoni: number = 1
public mediatore: any = {}
public tragitto = [
{
ind: 7,
color: 'purple',
title_lang: 'dashboard.sognatore',
extracl: ''
},
{
ind: 6,
color: 'indigo',
title_lang: 'dashboard.pos6',
extracl: 'extra'
},
{
ind: 5,
color: 'blue',
title_lang: 'dashboard.pos5',
extracl: 'extra'
},
{
ind: 4,
color: 'green',
title_lang: 'dashboard.mediatore',
extracl: ''
},
{
ind: 3,
color: 'yellow',
title_lang: 'dashboard.pos3',
extracl: 'extra'
},
{
ind: 2,
color: 'orange',
title_lang: 'dashboard.pos2',
extracl: 'extra'
},
{
ind: 1,
color: 'red',
title_lang: 'dashboard.donatore',
extracl: ''
},
]
public mounted() {
this.nave = this.naveprop
this.navi_partenza = this.navi_partenzaprop
this.riga = tools.getValDb('riga', false, 1)
this.col = tools.getValDb('col', false, 1)
this.rigadoni = tools.getValDb('rigadoni', false, 1)
this.coldoni = tools.getValDb('coldoni', false, 1)
this.mediatore = this.getmediatore()
if (!!this.mediatore) {
this.link_chat = this.mediatore.link_chat
}
}
public getNavePartByInd(ind) {
if (!!this.navi_partenza[ind])
return this.navi_partenza[ind].date_start
else
return ' --/--/-- '
}
public getRiganave(riga) {
let ris = riga - 3
if (ris <= 1)
ris = 1
return ris
}
public getColnave(col) {
let ris = Math.floor(col / (2 * 4))
if (ris <= 1)
ris = 1
return ris
}
public sonoMediatore() {
if (!!this.nave) {
if (!!this.nave.rec.donatore.recmediatore)
return this.nave.rec.donatore.recmediatore.ind_order === this.nave.ind_order
else {
if (!!this.nave.rec.mediatore.recmediatore)
return this.nave.rec.mediatore.recmediatore.ind_order === this.nave.ind_order
}
}
return false
}
public sonoDonatore() {
if (!!this.nave) {
for (const rec of this.nave.rec.donatore.arrdonatori) {
if (!!rec) {
if (rec.ind_order === this.nave.ind_order)
return true
}
}
}
return false
}
public getmediatore() {
return this.nave.rec.donatore.recmediatore
}
public change_link_chat() {
const recmed = this.getmediatore()
if (recmed.link_chat !== this.link_chat) {
recmed.link_chat = this.link_chat
const mydata = {
link_chat: recmed.link_chat
}
tools.saveFieldToServer(this, 'navi', recmed._id, mydata)
}
}
get linkchatopen() {
return this.link_chat
}
public sonoSognatore() {
return this.nave.rec.donatore.recsognatore.ind_order === this.nave.ind_order
}
public getclassSelect(rec) {
if (rec.ind_order === this.nave.ind_order)
return ' you'
}
public gettitlenave(ind) {
if (ind === 1)
return this.getRiganave(this.nave.riga) + '.' + this.getColnave(this.nave.col)
else
return (this.getrigaNaveByInd(ind)) + '.x'
}
public getdatanave(rec) {
if (this.sonoDonatore()) {
if (rec.ind === 1) {
return tools.getstrshortDate(this.nave.date_start) // Donatore
}
}
if (this.sonoMediatore()) {
if (rec.ind === 4) {
return tools.getstrshortDate(this.nave.date_start) // Mediatore
}
}
return this.getNavePartByInd(rec.ind)
}
public getrigaNaveByInd(ind) {
return this.getRiganave(this.nave.riga + ind - 1)
}
public NaveeseguitabyInd(riga) {
return (this.riga >= riga)
}
public getclpos(rec) {
if (this.NaveeseguitabyInd(this.getrigaNaveByInd(rec.ind))) {
return 'you'
} else {
return ''
}
}
public geticon(rec) {
if (this.rigadoni >= this.getrigaNaveByInd(rec.ind)) {
return 'fas fa-gift'
}
}
public async InviaMsgANave(msgobj, navemediatore) {
let msgtitle = translate('dashboard.controlla_donatori')
if (msgobj.inviareale) {
msgtitle = translate('dashboard.invia_link_chat')
}
await tools.askConfirm(this.$q, msgtitle, translate('dashboard.inviare_msg_donatori') + ' ' + '?', translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.INVIA_MSG_A_DONATORI, 0, {
param1: msgobj,
param2: navemediatore
})
}
public async InviaMsgADonatori(msgobj) {
const navemediatore = {
id: this.mediatore._id,
riga: this.mediatore.riga,
col: this.mediatore.col
}
this.InviaMsgANave(msgobj, navemediatore)
}
get linkchatesiste() {
if (!!this.linkchatopen)
return this.linkchatopen.length > 10
return false
}
public InviaLinkChatADonatori(inviareale) {
const msgobj = {
tipomsg: tools.TipoMsg.SEND_LINK_CHAT_DONATORI,
msgpar1: this.linkchatopen,
inviareale,
}
this.InviaMsgADonatori(msgobj)
}
}

View File

@@ -0,0 +1,177 @@
<template>
<div>
<CTitleBanner v-if="nave" class="q-pa-xs"
:title="$t('pages.nave') + ` ` + getRiganave(nave.riga) + `.`+getColnave(nave.col) + ` ` + $t('dashboard.nave_in_partenza') + ` ` + tools.getstrDate(nave.date_start)"
bgcolor="bg-primary"
clcolor="text-white"
mystyle="" myclass="myshad" canopen="true">
<div v-if="nave" class="flex flex-center column justify-center">
<div class="">
<!--IndPrimario: {{ nave.indprimario }} - IndOrder: {{ nave.ind_order }} -->
</div>
<q-tabs
v-model="cosa"
dense
class="text-blue"
active-color="primary"
indicator-color="primary"
align="justify"
narrow-indicator
>
<q-tab name="tragitto" label="Tragitto"></q-tab>
<q-tab name="donatore" label="Donatore"></q-tab>
<q-tab name="mediatore" label="Mediatore"></q-tab>
<q-tab name="spiegazione" label="Spiegazione"></q-tab>
</q-tabs>
<q-tab-panels v-model="cosa" animated>
<q-tab-panel name="spiegazione">
<div v-if="sonoMediatore()">
<div class="text-left" v-html="$t('dashboard.sonomediatore')"></div>
<q-input v-model="link_chat" :label="$t('dashboard.link_chat')"
debounce="1000"
input-class="myinput-area"
@input="change_link_chat">
</q-input>
<div class="">
<div class="row justify-center centermydiv q-gutter-sm" style="max-width: 420px;">
<q-btn rounded text-color="secondary" icon="fab fa-telegram"
:label="$t('dashboard.controlla_donatori')"
@click="InviaLinkChatADonatori(false)"></q-btn>
<q-btn rounded text-color="primary" icon="fab fa-telegram"
:disable="!linkchatesiste"
:label="$t('dashboard.invia_link_chat')"
@click="InviaLinkChatADonatori(true)"></q-btn>
</div>
</div>
</div>
<div v-else-if="sonoDonatore()">
<div v-html="$t('dashboard.sonosognatore')">
</div>
</div>
</q-tab-panel>
<q-tab-panel name="tragitto">
<div class="row justify-between">
<div class="cont_pos_intest">N</div>
<div class="cont_intestaz q-mx-sm"> Nome<br>dei Passaggi</div>
<div class="cont_intestaz">Nave</div>
<div class="cont_intestaz">Data<br>Partenza</div>
<div class="cont_intestaz_small">Doni<br>Inviati</div>
</div>
<div v-for="rec in tragitto" :key="rec.ind">
<div :class="`row items-center ` + rec.extracl">
<div :class="`cont_pos ` + getclpos(rec)">
{{ rec.ind }}
</div>
<div v-if="rec.title_lang" class="passo">
<div :class="rec.extracl">
<q-chip class="glossy" :color="rec.color" text-color="white">
{{ $t(rec.title_lang) }}
</q-chip>
</div>
</div>
<div class="">
<q-chip class="glossy" :color="rec.color" text-color="white">
{{ gettitlenave(rec.ind) }}
</q-chip>
</div>
<div class="">
<q-chip class="glossy" :color="rec.color" text-color="white">
{{ getdatanave(rec) }}
</q-chip>
</div>
<q-icon color="green" inverted size="sm" :name="geticon(rec)" class="gift"></q-icon>
</div>
</div>
<div class="q-ma-md q-butter-sm" v-if="!!linkchatopen">
Per entrare nella Gift Chat, clicca qui:<br>
<div class="q-ma-md">
<q-btn rounded color="primary" icon="fab fa-telegram" :label="$t('dashboard.entra_in_gift_chat')"
type="a"
:href="linkchatopen" target="_blank"></q-btn>
<br>
</div>
</div>
</q-tab-panel>
<q-tab-panel name="donatore">
<div v-if="nave.rec.donatore.recsognatori">
<div class="sognatore">SOGNATORI:</div>
<div v-for="(sognatore, index) in nave.rec.donatore.recsognatori" :key="10+index">
<div v-if="sognatore" :class="`cont_sognatore ` + getclassSelect(sognatore)">
A{{3 - index}} - {{ sognatore.name }} {{ sognatore.surname }} ({{sognatore.username }})
</div>
</div>
<div class="">
<div class="mediatore">MEDIATORE:</div>
<div :class="`cont_mediatore ` + getclassSelect(nave.rec.donatore.recmediatore)">
{{ nave.rec.donatore.recmediatore.name }} {{ nave.rec.donatore.recmediatore.surname }} ({{
nave.rec.donatore.recmediatore.username }})
</div>
</div>
<div class="donatore">DONATORI:</div>
<div v-for="(donatore, index) in nave.rec.donatore.arrdonatori" :key="index">
<div v-if="donatore" :class="`cont_donatore ` + getclassSelect(donatore)">
D{{index + 1}} - {{ donatore.name }} {{ donatore.surname }} ({{ donatore.username }}) {{
donatore.riga}}.{{donatore.col}}<br>
</div>
</div>
</div>
</q-tab-panel>
<q-tab-panel name="mediatore">
<div v-if="nave.rec.mediatore.recsognatori">
<div class="sognatore">SOGNATORI:</div>
<div v-for="(sognatore, index) in nave.rec.mediatore.recsognatori" :key="10+index">
<div v-if="sognatore" :class="`cont_sognatore ` + getclassSelect(sognatore)">
A{{3 - index}} - {{ sognatore.name }} {{ sognatore.surname }} ({{sognatore.username }})
</div>
</div>
<div class="">
<div class="mediatore">MEDIATORE:</div>
<div :class="`cont_mediatore ` + getclassSelect(nave.rec.mediatore.recmediatore)">
{{ nave.rec.mediatore.recmediatore.name }} {{ nave.rec.mediatore.recmediatore.surname }} ({{
nave.rec.mediatore.recmediatore.username }})
</div>
</div>
<div class="donatore">DONATORI:</div>
<div v-for="(donatore, index) in nave.rec.mediatore.arrdonatori" :key="index">
<div v-if="donatore" :class="`cont_donatore ` + getclassSelect(donatore)">
D{{index + 1}} - {{ donatore.name }} {{ donatore.surname }} ({{ donatore.username }}) {{
donatore.riga}}.{{donatore.col}}<br>
</div>
</div>
</div>
</q-tab-panel>
</q-tab-panels>
</div>
</CTitleBanner>
</div>
</template>
<script lang="ts" src="./CMyNave.ts">
</script>
<style lang="scss" scoped>
@import './CMyNave.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CMyNave} from './CMyNave.vue'

View File

@@ -96,7 +96,7 @@ export default class CMyRequirement extends MixinUsers {
isok(user) {
if (user)
if (user.profile)
return tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
return tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value)
return false
},
info: '',
@@ -110,7 +110,7 @@ export default class CMyRequirement extends MixinUsers {
isok(user) {
if (user)
if (user.profile)
return tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
return tools.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI.value)
return false
},
info: '',
@@ -171,6 +171,9 @@ export default class CMyRequirement extends MixinUsers {
},
info: '',
},
]
public arrrequisiti_liberi = [
{
icon: 'fas fa-users',
textlang: 'steps.sharemovement',
@@ -298,4 +301,11 @@ export default class CMyRequirement extends MixinUsers {
return mycl
}
public geticonerror(mybool) {
if (mybool)
return 'fas fa-exclamation-triangle'
else
return ''
}
}

View File

@@ -1,16 +1,20 @@
<template>
<div>
<CTitleBanner class="shadow-2 rounded-borders" :title="$t('reg.requirement') + ` - ` + seluser.name + ` ` + seluser.surname + ``"
<CTitleBanner class="shadow-2 rounded-borders"
:title="$t('reg.requirement') + ` - ` + seluser.name + ` ` + seluser.surname + ``"
bgcolor="bg-primary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<div v-if="!ismyinvited_notreg(seluser)" :class="myclassreq">
<div :class="myclassreq">
<div v-if="!isextralist(seluser)">
<div v-for="(req, index) of arrrequisiti">
<CRequisito :icon="req.icon" :text="(index + 1) + `. ` + $t(req.textlang) + req.textadd(seluser)" :isok="req.isok(seluser)"
<CRequisito :icon="req.icon" :text="(index + 1) + `. ` + $t(req.textlang) + req.textadd(seluser)"
:icon_error="geticonerror(true)"
:no_check="false"
:isok="req.isok(seluser)"
:info="req.info"></CRequisito>
</div>
@@ -68,7 +72,28 @@
</div>
</div>
<div v-else>
<CTitleBanner class="shadow-2 rounded-borders"
:title="$t('steps.sharemovement') + ` - ` + seluser.name + ` ` + seluser.surname + ``"
bgcolor="bg-secondary"
clcolor="text-white"
mystyle=" " myclass="myshad" :canopen="true">
<div :class="myclassreq">
<div v-if="!isextralist(seluser)">
<div v-for="(req, index) of arrrequisiti_liberi">
<CRequisito :icon="req.icon" :text="$t(req.textlang) + req.textadd(seluser)"
:icon_error="geticonerror(false)"
:no_check="true"
:isok="req.isok(seluser)"
:info="req.info"></CRequisito>
</div>
</div>
</div>
</CTitleBanner>
<!--<div v-else>
<div class="column justify-center q-gutter-sm q-pa-sm">
<CRequisito icon="fas fa-user" :text="$t('dashboard.notreg')" :isok="false"
@@ -85,7 +110,7 @@
</CTitleBanner>
</div>
</div>
</div>-->
</CTitleBanner>

View File

@@ -16,6 +16,7 @@ export default class CMyToggleList extends Vue {
@Prop({ required: false, default: '' }) public myclass
@Prop({ required: true, default: '' }) public optlab
@Prop({ required: true, default: '' }) public optval
@Prop({ required: false, default: false }) public isarray
public myvalue = ''
public myarrvalues = []
@@ -26,7 +27,13 @@ export default class CMyToggleList extends Vue {
public changeval(newval) {
// Update value
const totale = this.myarrvalues.filter((rec) => rec.valbool).reduce((sum, rec) => sum + rec.value, 0)
let totale = null
if (this.isarray) {
totale = this.myarrvalues.filter((rec) => rec.valbool).map((a) => a.value)
} else {
totale = this.myarrvalues.filter((rec) => rec.valbool).reduce((sum, rec) => sum + rec.value, 0)
}
console.log('totale', totale)
this.myvalue = totale
// Refresh value
@@ -36,15 +43,33 @@ export default class CMyToggleList extends Vue {
public mounted() {
this.myarrvalues = []
// console.table(this.options)
this.options.forEach((rec) => {
const mydata = {
label: this.$t(rec[this.optlab]),
value: rec[this.optval],
valbool: tools.isBitActive(this.value, rec[this.optval])
}
this.myarrvalues.push(mydata)
})
// console.log('value', this.value)
// console.log('optval', this.optval)
// console.log('optlab', this.optlab)
if (this.isarray) {
// console.table(this.options)
this.options.forEach((rec) => {
console.log('rec: ', rec)
const mydata = {
label: this.$t(rec[this.optlab]),
value: rec[this.optval],
valbool: this.value.includes(rec[this.optval])
}
console.log('mydata ', mydata)
this.myarrvalues.push(mydata)
})
} else {
// console.table(this.options)
this.options.forEach((rec) => {
const mydata = {
label: this.$t(rec[this.optlab]),
value: rec[this.optval],
valbool: tools.isBitActive(this.value, rec[this.optval])
}
this.myarrvalues.push(mydata)
})
}
}
}

View File

@@ -36,7 +36,7 @@ export default class CNextZoom extends MixinBase {
const mydate = GlobalStore.state.calzoom.slice(-1)[0].date_start
const mydate_end = GlobalStore.state.calzoom.slice(-1)[0].date_end
const datenow = tools.getDateNow()
console.log('date.getDateDiff(datenow, mydate, \'minutes\')', date.getDateDiff(datenow, mydate, 'minutes'))
// console.log('date.getDateDiff(datenow, mydate, \'minutes\')', date.getDateDiff(datenow, mydate, 'minutes'))
// if begin is in the past, take the day now
if ((date.getDateDiff(datenow, mydate, 'minutes') > -10) && (date.getDateDiff(datenow, mydate_end, 'minutes') < 0)) {
return true

View File

@@ -1,7 +1,10 @@
.requisiti_on, .requisiti_off{
.requisiti_on, .requisiti_off, .requisiti_off_ko{
margin: 4px;
border-radius: 3rem;
padding: 8px;
padding-left: 14px;
padding-right: 14px;
padding-top: 8px;
padding-bottom: 8px;
}
.requisiti_on {
@@ -12,3 +15,7 @@
border: solid 3px #ef0901;
}
.requisiti_off_ko {
border: solid 3px blue;
}

View File

@@ -9,11 +9,16 @@ export default class CRequisiti extends Vue {
@Prop({ required: true }) public statebool: boolean
@Prop({ required: true }) public msgTrue: string
@Prop({ required: true }) public msgFalse: string
@Prop({ required: false, default: false }) public color_ko: boolean
get getcl() {
if (this.statebool)
return 'requisiti_on'
else
return 'requisiti_off'
else {
if (this.color_ko)
return 'requisiti_off_ko'
else
return 'requisiti_off'
}
}
}

View File

@@ -1,5 +1,5 @@
<template>
<div class="q-ma-md">
<div class="q-ma-sm">
<div :class="getcl">
<div v-if="statebool" v-html="msgTrue"></div>
<div v-else v-html="msgFalse"></div>

View File

@@ -11,12 +11,17 @@ import MixinBase from '@src/mixins/mixin-base'
export default class CRequisito extends MixinBase {
@Prop({ required: true }) public icon: string
@Prop({ required: false, default: 'fas fa-exclamation-triangle' }) public icon_error: string
@Prop({ required: true }) public text: string
@Prop({ required: true }) public isok: boolean
@Prop({ required: false, default: false }) public no_check: boolean
@Prop({ required: true }) public info: string
get checkifok() {
return this.isok ? 'green' : 'red'
if (this.no_check)
return 'blue'
else
return this.isok ? 'green' : 'red'
}
get getris() {
@@ -24,6 +29,6 @@ export default class CRequisito extends MixinBase {
}
get iconris() {
return (this.isok) ? 'fas fa-check' : 'fas fa-exclamation-triangle'
return (this.isok) ? 'fas fa-check' : this.icon_error
}
}

View File

@@ -0,0 +1,36 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { CSignIn } from '../../components/CSignIn'
import { tools } from '../../store/Modules/tools'
@Component({
components: { CSignIn }
})
export default class CSigninNoreg extends Vue {
@Prop({ required: true }) public showregbutt: boolean
public $v
public $q
public $t
public loginOk() {
tools.loginOk(this, true)
}
public loginInCorso() {
tools.loginInCorso(this)
}
public checkErrors(riscode) {
tools.SignIncheckErrors(this, riscode, true)
}
public showNotif(msgcode) {
tools.showNotif(this.$q, this.$t(msgcode))
}
get mythis() {
return this
}
}

View File

@@ -0,0 +1,18 @@
<template>
<div>
<CSignIn :mythis="mythis"
@loginOk="loginOk"
@loginInCorso="loginInCorso"
:showregbutt="false"
@checkErrors="checkErrors"
@showNotif="showNotif">
</CSignIn>
</div>
</template>
<script lang="ts" src="./CSigninNoreg.ts">
</script>
<style lang="scss" scoped>
@import './CSigninNoreg.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CSigninNoreg} from './CSigninNoreg.vue'

View File

@@ -18,7 +18,18 @@ import { CGuidelines } from '../CGuidelines'
import { CVideoPromo } from '../CVideoPromo'
@Component({
components: { CTitleBanner, CMyFieldDb, CMyInnerPage, CVerifyTelegram, CVerifyEmail, CCopyBtn, CVideo, CRequisiti, CGuidelines, CVideoPromo }
components: {
CTitleBanner,
CMyFieldDb,
CMyInnerPage,
CVerifyTelegram,
CVerifyEmail,
CCopyBtn,
CVideo,
CRequisiti,
CGuidelines,
CVideoPromo
}
})
export default class CStatus extends MixinBase {
@@ -27,7 +38,7 @@ export default class CStatus extends MixinBase {
public $t: any
public step = 0
public steptodo = 0
public NUMSTEP_OBBLIGATORI = 9
public NUMSTEP_OBBLIGATORI = 7
public my_dream: string = ''
get numpayment() {
@@ -92,7 +103,7 @@ export default class CStatus extends MixinBase {
descr: '',
page: '',
funccheck(index) {
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES)
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value)
},
funccheck_error(index) {
return true
@@ -109,7 +120,7 @@ export default class CStatus extends MixinBase {
descr: '',
page: '',
funccheck(index) {
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
return tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI.value)
},
funccheck_error(index) {
return true
@@ -228,10 +239,10 @@ export default class CStatus extends MixinBase {
descr: 'steps.enter_prog_long',
page: '/enter_prog',
funccheck(index) {
return false
return true
},
funccheck_error(index) {
return false
return true
},
funcok() {
return ''
@@ -421,8 +432,20 @@ export default class CStatus extends MixinBase {
}
}
public geterricon(value) {
return 'fas fa-exclamation-triangle'
public geterrcolor(mystep) {
if ((mystep.title === 'steps.sharemovement') || (mystep.title === 'dashboard.inv_attivi')) {
return 'blue'
} else {
return 'red'
}
}
public geterricon(value, mystep) {
if ((mystep.title === 'steps.sharemovement') || (mystep.title === 'dashboard.inv_attivi')) {
return 'fas fa-user'
} else {
return 'fas fa-exclamation-triangle'
}
}
get listasel() {
@@ -456,6 +479,10 @@ export default class CStatus extends MixinBase {
}
public geticoncolor(title) {
if (title === 'steps.enter_prog') {
return this.CompletatoRequisiti ? 'blue' : (this.Completato9Req ? 'green' : 'blue')
}
if (title === 'steps.chat_biblio') {
return 'blue'
} else {
@@ -478,7 +505,21 @@ export default class CStatus extends MixinBase {
}
get CompletatoRequisiti() {
return this.VistoZoom && this.getnuminvitati_attivi() >= 2 && this.RequisitoPayment
try {
return this.VistoZoom && this.RequisitoPayment &&
this.TelegVerificato &&
(UserStore.state.my.profile.my_dream.length >= 10) &&
tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI.value) &&
tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value)
}catch (e) {
return false
}
}
get Completato9Req() {
// return tools.Is9ReqOk(this.dashboard.myself)
return this.CompletatoRequisiti && (this.getnuminvitati_attivi() >= 2)
}
get RequisitoPayment() {
@@ -519,12 +560,12 @@ export default class CStatus extends MixinBase {
}
get stepcompleti() {
return this.getstep === this.NUMSTEP_OBBLIGATORI
return this.getstep >= this.NUMSTEP_OBBLIGATORI
}
public scrolltostep(mystep) {
this.step = mystep
if (mystep > 0 )
if (mystep > 0)
mystep -= 1
const element = document.getElementById('step' + mystep)
tools.scrollToElement(element)

View File

@@ -54,7 +54,8 @@
:done-color="geticoncolor(mystep.title)"
:done="mystep.funccheck(index)"
:error="getiferror(mystep.funccheck_error(index), mystep.funccheck(index))"
:error-icon="geterricon(mystep.funccheck(index))"
:error-icon="geterricon(mystep.funccheck(index), mystep)"
:error-color="geterrcolor(mystep)"
>
<div v-if="mystep.title === 'reg.email'">
<CVerifyEmail>
@@ -138,6 +139,10 @@
<div>
<CRequisiti :statebool="RequisitoPayment" :msgTrue="$t('steps.paymenttype_long2')"
:msgFalse="$t('steps.paymenttype_long2')">
</CRequisiti>
<CMyFieldDb :title="$t('reg.paymenttype')"
table="users"
mykey="profile"
@@ -259,9 +264,9 @@
</div>
<div v-else-if="mystep.title === 'steps.sharemovement'">
<CRequisiti :statebool="getnuminvitati() >= 2" :msgTrue="$t('steps.sharemovement_hai_invitato')"
<!--<CRequisiti :statebool="getnuminvitati() >= 2" :msgTrue="$t('steps.sharemovement_hai_invitato')"
:msgFalse="$t('steps.sharemovement_devi_invitare_almeno_2')">
</CRequisiti>
</CRequisiti>-->
<q-btn class="q-mb-md" rounded size="md" color="primary" to="/dashboard"
:label="$t('pages.dashboard')"></q-btn>
@@ -318,8 +323,9 @@
:msgFalse="$t('steps.enter_prog_completa_requisiti')">
</CRequisiti>
<CRequisiti :statebool="CompletatoRequisiti" :msgTrue="$t('steps.enter_prog_status')"
:msgFalse="$t('steps.enter_prog_status')">
<CRequisiti v-if="Completato9Req" :statebool="Completato9Req" :msgTrue="$t('steps.enter_nave_9req_ok')"
:msgFalse="$t('steps.enter_nave_9req_ko')">
</CRequisiti>
</div>

View File

@@ -100,7 +100,7 @@ export default class CStatusReg extends MixinBase {
UserStore.state.my.verified_email = true
this.riaggiorna()
}
if (UserStore.state.my.profile) {
if (UserStore.state.my.profile && this.datastat.checkuser.profile) {
if ((UserStore.state.my.profile.teleg_id <= 0 && this.datastat.checkuser.profile.teleg_id > 0) ||
(UserStore.state.my.profile.teleg_id !== this.datastat.checkuser.profile.teleg_id > 0)) {
UserStore.state.my.profile.teleg_id = this.datastat.checkuser.profile.teleg_id

View File

@@ -10,7 +10,7 @@
<CCardState :mytext="$t('pages.statusreg.reg')" :myval="datastat.num_reg" :myperc="100"></CCardState>
<CCardState :mytext="$t('stat.requisiti')" :isperc="true" :myval="datastat.num_requisiti"
:myperc="calcperc(datastat.num_requisiti, datastat.num_reg) "
color="blue"
mycolor="blue"
:textadd="` / ` + datastat.num_reg"></CCardState>
<!--<CCardState :mytext="$t('pages.statusreg.giainlista')" :isperc="true" :myval="datastat.num_reg_lista"-->
@@ -22,7 +22,7 @@
<CCardStat :mytext="$t('stat.dream')" :myval="datastat.num_users_dream"></CCardStat>
<CCardStat :mytext="$t('stat.modalita_pagamento')" :myval="datastat.num_modalita_pagamento"></CCardStat>
<CCardStat :mytext="$t('stat.requisiti')" :myval="datastat.num_requisiti"></CCardStat>
<CCardStat :mytext="$t('stat.qualificati')" :myval="datastat.num_qualificati"></CCardStat>
<!--<CCardStat :mytext="$t('stat.qualificati')" :myval="datastat.num_qualificati"></CCardStat>-->
<CCardStat v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif"
mycol="negative"></CCardStat>
<CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')" :myval="telegnonattivi"
@@ -37,6 +37,7 @@
appear
enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in lastsreg" :key="user.username" class="q-mb-xs animated" v-ripple>
<q-item-section avatar>
@@ -72,7 +73,7 @@
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_daily')">
</CLineChart>
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_total')" :sum="true"
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_total')" :offset="datastat.numreg_untilday" :sum="true"
:mycolors="['#0b0', '#666']">
</CLineChart>

View File

@@ -8,10 +8,13 @@ import { validationMixin } from 'vuelidate'
import MixinBase from '../../mixins/mixin-base'
import { IUserFields } from '../../model'
import { shared_consts } from '../../common/shared_vuejs'
import { tools } from '../../store/Modules/tools'
import { CCardState } from '../CCardState'
@Component({
name: 'CUserBadge',
components: { }
components: { CCardState }
})
export default class CUserBadge extends MixinBase {
@@ -69,15 +72,15 @@ export default class CUserBadge extends MixinBase {
if (this.isextralist(user))
return 'grey'
else
return (this.getnumpeople() >= 2) ? 'green' : 'grey'
return (this.getnumpeople(user) >= 2) ? 'green' : 'grey'
}
public isextralist(user) {
return !!user.cell_complete
}
public getnumpeople() {
return this.numpeople
public getnumpeople(user) {
return user.numinvitati
}
public getusername(user) {
@@ -92,4 +95,52 @@ export default class CUserBadge extends MixinBase {
this.$emit('myclick', user)
}
public getnumreq(user) {
let val = tools.getnumrequisiti(user)
if (val === 7) {
val += user.numinvitati >= 2 ? 1 : 0
val += user.numinvitatiattivi >= 2 ? 1 : 0
}
return val
}
public getnumperc(user) {
let perc = (this.getnumreq(user) / 9) * 100
// console.log('numperc', perc)
return perc
}
public getnumpercpeople(user) {
if (user.numinvitati > 2)
return 100
else
return (user.numinvitati / 2) * 100
}
public getcolorpeople(user){
if (user.numinvitati === 1)
return 'blue'
else if (user.numinvitati === 2)
return 'green'
else if (user.numinvitati > 2)
return 'green'
}
public getcolor(user) {
let mycol = this.getnumreq(user) === 7 ? 'orange' : 'red'
if (user.numinvitati >= 2) {
mycol = 'blue'
}
if (user.numinvitatiattivi >= 2) {
mycol = 'green'
}
return mycol
}
}

View File

@@ -15,7 +15,7 @@
<q-item-section>
<q-item-label>{{ user.name }} {{ user.surname }} {{ getindorder(user) }}<br>
<span class="text-grey">({{ getusername(user) }})</span>
<br><span v-if="isextralist(user)" class="notreg">{{ $t('dashboard.notreg') }}</span>
<br><!--<span v-if="isextralist(user)" class="notreg">{{ $t('dashboard.notreg') }}</span>-->
</q-item-label>
<!--<q-item-label caption lines="1">{{ user.email }}</q-item-label>-->
</q-item-section>
@@ -23,18 +23,24 @@
<q-item-section side>
<div class="row q-gutter-xs justify-center items-center">
<q-btn v-if="isextralist(user)" fab-mini
icon="fab fa-whatsapp"
color="green" type="a"
size="sm"
:href="tools.getHttpForWhatsapp(user.cell_complete)" target="__blank">
</q-btn>
<q-icon v-if="!isextralist(user)" size="sm" name="fab fa-telegram" :color="getstatecolor(user)"></q-icon>
<q-icon v-if="!isextralist(user)" size="sm" name="fas fa-video" :color="getzoomcolor(user)"></q-icon>
<q-avatar :text-color="mycolor" size="md">
{{ getnumpeople() }}
</q-avatar>
<q-icon size="xs" name="fas fa-user-friends" :color="get2peoplecolor(user)"></q-icon>
<div>
<CCardState :mytext="$t('pages.statusreg.req')" :myval="getnumreq(user)" :myperc="getnumperc(user)" size="50px" size_mob="40px" fontsize="0.75rem" myclass="my-card-small-stat" :mycolor="getcolor(user)"></CCardState>
</div>
<!--<q-icon v-if="!isextralist(user)" size="sm" name="fab fa-telegram" :color="getstatecolor(user)"></q-icon>
<q-icon v-if="!isextralist(user)" size="sm" name="fas fa-video" :color="getzoomcolor(user)"></q-icon>-->
<div>
<CCardState :mytext="$t('pages.statusreg.people')" :myval="getnumpeople(user)" :myperc="getnumpercpeople(user)" size="50px" size_mob="40px" fontsize="0.75rem" myclass="my-card-small-stat" :mycolor="getcolorpeople(user)"></CCardState>
</div>
<div>
<q-btn
fab-mini
icon="fab fa-whatsapp"
color="white" text-color="green" type="a"
size="sm"
:href="tools.getHttpForWhatsapp(user.profile.cell)" target="__blank">
</q-btn>
</div>
</div>
</q-item-section>
</q-item>

View File

@@ -32,14 +32,14 @@ export default class CVideoPromo extends MixinBase {
}
public aggiorna() {
this.accetta_saw_video = tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
this.accetta_saw_video = tools.isBitActive(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI.value)
}
public changeval(value) {
if (value)
UserStore.state.my.profile.saw_and_accepted = tools.SetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
UserStore.state.my.profile.saw_and_accepted = tools.SetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI.value)
else
UserStore.state.my.profile.saw_and_accepted = tools.UnSetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI)
UserStore.state.my.profile.saw_and_accepted = tools.UnSetBit(UserStore.state.my.profile.saw_and_accepted, shared_consts.Accepted.CHECK_SEE_VIDEO_PRINCIPI.value)
const mydata = {
'profile.saw_and_accepted': UserStore.state.my.profile.saw_and_accepted

View File

@@ -13,17 +13,17 @@ import { toolsext } from '@src/store/Modules/toolsext'
import Quasar, { Screen } from 'quasar'
import { static_data } from '../../db/static_data'
import globalroutines from '../../globalroutines'
import MixinUsers from '../../mixins/mixin-users'
import { CMyAvatar } from '../CMyAvatar'
import { CSigninNoreg } from '../CSigninNoreg'
@Component({
name: 'Header',
mixins: [MixinUsers],
components: {
drawer,
messagePopover, CSignIn, CMyAvatar
messagePopover, CSigninNoreg, CMyAvatar
}
})
@@ -345,22 +345,6 @@ export default class Header extends Vue {
return UserStore.state.my.verified_email
}
public loginOk() {
tools.loginOk(this, true)
}
public loginInCorso() {
tools.loginInCorso(this)
}
public checkErrors(riscode) {
tools.SignIncheckErrors(this, riscode)
}
public showNotif(msgcode) {
tools.showNotif(this.$q, this.$t(msgcode))
}
get mythis() {
return this
}

View File

@@ -1,192 +1,188 @@
<template>
<div>
<q-header reveal elevated :class="getClassColorHeader">
<q-toolbar
color="primary"
:glossy="$q.theme === 'mat'"
:inverted="$q.theme === 'ios'"
class="toolbar">
<div>
<q-header reveal elevated :class="getClassColorHeader">
<q-toolbar
color="primary"
:glossy="$q.theme === 'mat'"
:inverted="$q.theme === 'ios'"
class="toolbar">
<q-btn
flat
dense
round
@click="leftDrawerOpen = !leftDrawerOpen"
aria-label="Menu">
<q-icon name="menu"/>
</q-btn>
<q-btn
flat
dense
round
@click="leftDrawerOpen = !leftDrawerOpen"
aria-label="Menu">
<q-icon name="menu"/>
</q-btn>
<div v-if="$q.platform.is.desktop">
<!--I'm only rendered on desktop!-->
</div>
<div v-if="$q.platform.is.desktop">
<!--I'm only rendered on desktop!-->
</div>
<div v-if="$q.platform.is.mobile">
<!--I'm only rendered on mobile!-->
</div>
<div v-if="$q.platform.is.mobile">
<!--I'm only rendered on mobile!-->
</div>
<div v-if="$q.platform.is.electron">
<!--I'm only rendered on Electron!-->
</div>
<div v-if="$q.platform.is.electron">
<!--I'm only rendered on Electron!-->
</div>
<q-btn ripple
size="md"
id="newvers" v-if="isNewVersionAvailable" color="secondary" rounded icon="refresh"
class="btnNewVersShow" @click="RefreshApp" :label="$t('notification.newVersionAvailable')"/>
<q-btn ripple
size="md"
id="newvers" v-if="isNewVersionAvailable" color="secondary" rounded icon="refresh"
class="btnNewVersShow" @click="RefreshApp" :label="$t('notification.newVersionAvailable')"/>
<q-toolbar-title class="row items-center">
<q-avatar>
<img :src="imglogo" height="27" alt="Immagine Logo">
</q-avatar>
<div class="q-mx-sm">{{getappname}}</div>
<div slot="subtitle">{{$t('msg.myDescriz')}} {{ getAppVersion() }}</div>
</q-toolbar-title>
<q-toolbar-title class="row items-center">
<q-avatar>
<img :src="imglogo" height="27" alt="Immagine Logo">
</q-avatar>
<div class="q-mx-sm">{{getappname}}</div>
<div slot="subtitle">{{$t('msg.myDescriz')}} {{ getAppVersion() }}</div>
</q-toolbar-title>
<!--
<div v-if="isAdmin">
<q-btn flat dense round aria-label="">
<q-icon :class="clCloudUpload" nametranslate="cloud_upload"></q-icon>
</q-btn>
<!--
<div v-if="isAdmin">
<q-btn flat dense round aria-label="">
<q-icon :class="clCloudUpload" nametranslate="cloud_upload"></q-icon>
</q-btn>
<q-btn flat dense round aria-label="">
<q-icon :class="clCloudUp_Indexeddb" nametranslate="arrow_upward"></q-icon>
</q-btn>
<q-btn flat dense round aria-label="">
<q-icon :class="clCloudUp_Indexeddb" nametranslate="arrow_upward"></q-icon>
</q-btn>
</div>
-->
</div>
-->
<q-btn
v-if="!isonline && static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION"
flat
dense
round
@click=""
aria-label="Connection"
>
<q-icon :name="iconConn" :class="clIconConn"></q-icon>
<q-icon v-if="isUserNotAuth" name="device_unknown"></q-icon>
</q-btn>
<q-btn-dropdown
stretch
v-if="static_data.lang_available.length > 1"
flat
:label="langshort"
auto-close
>
<q-list bordered>
<q-item clickable v-ripple
v-for="langrec in static_data.lang_available" :key="langrec.value"
@click="lang = langrec.value">
<q-item-section avatar>
<img :src="langrec.image" class="flagimg" alt="flag">
</q-item-section>
<q-item-section>
{{langrec.label}}
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
<div v-if="static_data.functionality.SHOW_MESSAGES">
<message-popover></message-popover>
</div>
<!--
<div class="right-itens">
<label>{{ $t('msg.hello') }}</label> <span v-model="prova"></span> !
</div>-->
<!-- BUTTON USER BAR -->
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && !isLogged" dense flat round
icon="menu"
@click="rightDrawerOpen = !rightDrawerOpen">
</q-btn>
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat
@click="rightDrawerOpen = !rightDrawerOpen">
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
</q-btn>
</q-toolbar>
</q-header>
<q-drawer side="left"
bordered
show-if-above
:breakpoint="500"
v-model="leftDrawerOpen"
:content-class="['bg-grey-1', 'q-pa-sm']"
:content-style="{padding: '0px'}"
<q-btn
v-if="!isonline && static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION"
flat
dense
round
@click=""
aria-label="Connection"
>
<drawer :clBase="clBase"></drawer>
<q-icon :name="iconConn" :class="clIconConn"></q-icon>
<q-icon v-if="isUserNotAuth" name="device_unknown"></q-icon>
</q-btn>
</q-drawer>
<!-- USER BAR -->
<q-drawer v-if="static_data.functionality.SHOW_USER_MENU" v-model="rightDrawerOpen" side="right" elevated>
<div id="profile">
<q-img class="absolute-top" src="../../statics/images/landing_first_section.png"
style="height: 150px" alt="section page">
</q-img>
<div class="absolute-top bg-transparent text-black center_img" style="margin-top: 10px;">
<q-btn-dropdown
stretch
v-if="static_data.lang_available.length > 1"
flat
:label="langshort"
auto-close
>
<q-list bordered>
<q-item clickable v-ripple
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
v-for="langrec in static_data.lang_available" :key="langrec.value"
@click="lang = langrec.value">
<q-item-section avatar>
<img :src="langrec.image" class="flagimg" alt="flag">
</q-item-section>
<q-item-section>
{{langrec.label}}
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
<q-btn class="absolute-top-right" style="margin-right: 10px; color: white;"
dense flat round icon="close" @click="rightDrawerOpen = !rightDrawerOpen">
</q-btn>
<div v-if="isLogged" class="text-weight-bold text-user">{{ Username }} - {{ myName }} <span
v-if="isAdmin"> [Admin]</span><span v-if="isManager"> [Manager]</span></div>
<div v-else class="text-user text-italic bg-red">
{{ $t('user.loggati') }}
</div>
<div v-if="static_data.functionality.SHOW_MESSAGES">
<message-popover></message-popover>
</div>
<div v-if="isLogged && !isEmailVerified" class="text-verified">{{
$t('components.authentication.email_verification.verify_email') }}
</div>
<!--
<div class="right-itens">
<label>{{ $t('msg.hello') }}</label> <span v-model="prova"></span> !
</div>-->
<!--<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>-->
<!--<span class="text-white background-red" v-else> {{$t('reg.non_verificato')}} </span>-->
<!-- BUTTON USER BAR -->
<div v-if="isLogged" id="user-actions" class="column justify-center q-gutter-sm q-ma-sm center-150" >
<q-btn rounded color="primary" icon="person" to="/profile">{{$t('pages.profile')}}</q-btn>
<!--<q-btn round color="warning" icon="lock"></q-btn>-->
<q-btn rounded color="negative" icon="exit_to_app" @click='logoutHandler'>{{$t('login.esci')}}</q-btn>
</div>
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && !isLogged" dense flat round
icon="menu"
@click="rightDrawerOpen = !rightDrawerOpen">
</q-btn>
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat
@click="rightDrawerOpen = !rightDrawerOpen">
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
</q-btn>
</div>
<div style="margin-top:120px;"></div>
<div v-show="!isLogged">
<div class="q-ma-md" style="">
<CSignIn :mythis="mythis"
:showregbutt="static_data.functionality.SHOW_REG_BUTTON"
@loginOk="loginOk"
@loginInCorso="loginInCorso"
@checkErrors="checkErrors"
@showNotif="showNotif">
</CSignIn>
</div>
</div>
</q-toolbar>
</div>
<div v-if="isLogged" class="q-mt-lg"><br><br></div>
</q-header>
<slot></slot>
<q-drawer side="left"
bordered
show-if-above
:breakpoint="500"
v-model="leftDrawerOpen"
:content-class="['bg-grey-1', 'q-pa-sm']"
:content-style="{padding: '0px'}"
>
<drawer :clBase="clBase"></drawer>
</q-drawer>
</div>
</q-drawer>
<!-- USER BAR -->
<q-drawer v-if="static_data.functionality.SHOW_USER_MENU" v-model="rightDrawerOpen" side="right" elevated>
<div id="profile">
<q-img class="absolute-top" src="../../statics/images/landing_first_section.png"
style="height: 150px" alt="section page">
</q-img>
<div class="absolute-top bg-transparent text-black center_img" style="margin-top: 10px;">
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
<q-btn class="absolute-top-right" style="margin-right: 10px; color: white;"
dense flat round icon="close" @click="rightDrawerOpen = !rightDrawerOpen">
</q-btn>
<div v-if="isLogged" class="text-weight-bold text-user">{{ Username }} - {{ myName }} <span
v-if="isAdmin"> [Admin]</span><span v-if="isManager"> [Manager]</span></div>
<div v-else class="text-user text-italic bg-red">
{{ $t('user.loggati') }}
</div>
<div v-if="isLogged && !isEmailVerified" class="text-verified">{{
$t('components.authentication.email_verification.verify_email') }}
</div>
<!--<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>-->
<!--<span class="text-white background-red" v-else> {{$t('reg.non_verificato')}} </span>-->
<div v-if="isLogged" id="user-actions" class="column justify-center q-gutter-sm q-ma-sm center-150">
<q-btn rounded color="primary" icon="person" to="/profile">{{$t('pages.profile')}}</q-btn>
<!--<q-btn round color="warning" icon="lock"></q-btn>-->
<q-btn rounded color="negative" icon="exit_to_app" @click='logoutHandler'>{{$t('login.esci')}}</q-btn>
</div>
</div>
<div style="margin-top:120px;"></div>
<div v-show="!isLogged">
<div class="q-ma-md" style="">
<CSigninNoreg :showregbutt="static_data.functionality.SHOW_REG_BUTTON">
</CSigninNoreg>
</div>
</div>
</div>
<div v-if="isLogged" class="q-mt-lg"><br><br></div>
<slot></slot>
</q-drawer>
</div>
</template>
<script lang="ts" src="./Header.ts">
</script>
<style lang="scss" scoped>
@import './Header.scss';
@import './Header.scss';
</style>

View File

@@ -111,7 +111,7 @@
<p>Ultimo aggiornamento: {{lastdataupdate}}</p>
</div>
<div v-if="toolsext.isLang('fr')">
<div v-else-if="toolsext.isLang('fr')">
<p class="text-subtitle1">Politique de confidentialité de {{url}}</p>
<p class="text-subtitle1">Information sur le traitement des données personnelles conformément à l'article 13 du
Code civil italien Règlement (UE) n° 2016/679.</p>

View File

@@ -56,3 +56,5 @@ export * from './CRequisito'
export * from './CGuidelines'
export * from './CVideoPromo'
export * from './CMyRequirement'
export * from './CSigninNoreg'
export * from './CMyNave'