Aggiornamenti Flotta, Nave, Dashboard, Tabelle, Popupmenu

This commit is contained in:
Paolo Arena
2020-06-02 22:19:20 +02:00
parent 3fb1de9b70
commit bd6ccad236
18 changed files with 993 additions and 254 deletions

View File

@@ -145,6 +145,12 @@ export default class CGridTableRec extends Vue {
this.colsel = col
this.idsel = row._id
this.SaveValue(newval, valinitial)
// this.rowclicksel = null
}
public annulla(val) {
// this.rowclicksel = null
}
public SaveValue(newVal, valinitial) {

View File

@@ -185,7 +185,8 @@
:subfield="mycol.subfield"
@save="SaveValdb"
@show="selItem(rowclicksel, mycol)"
@showandsave="showandsel">
@showandsave="showandsel"
@annulla="annulla">
</CMyPopupEdit>
</div>

View File

@@ -61,6 +61,7 @@ export default class CMyDashboard extends MixinUsers {
public ind_order_ingr: number = -1
public myrigaattuale: number = 0
public mycolattuale: number = 0
public upgrade_graduatorie: boolean = false
public dashboard: IDashboard = {
myself: DefaultUser,
aportador: DefaultUser,
@@ -136,6 +137,8 @@ export default class CMyDashboard extends MixinUsers {
this.loading = true
this.upgrade_graduatorie = tools.getValDb('UPDATE_GRAD', false, false)
UserStore.actions.getDashboard({ username: this.myusername })
.then((ris) => {
this.dashboard = ris
@@ -144,7 +147,7 @@ export default class CMyDashboard extends MixinUsers {
this.invitante_username = this.dashboard.myself.username
this.myrigaattuale = this.dashboard.lastnave.riga
this.mycolattuale = this.dashboard.lastnave.col
this.mycolattuale = this.dashboard.lastnave.col + 8
this.loading = false
})
@@ -250,11 +253,13 @@ export default class CMyDashboard extends MixinUsers {
}
public colordono(mianave) {
if (mianave.made_gift) {
if (mianave.made_gift)
return 'green'
} else {
else if (!!mianave.date_made_gift)
return 'blue'
else
return 'grey'
}
}
public getposizioneattuale(mianave, totali) {
@@ -288,7 +293,15 @@ export default class CMyDashboard extends MixinUsers {
public getnuminvperc(index, myrec) {
return myrec.invattivi / 2 * 100
let val1 = Math.round((myrec.numinvitatiattiviTot - myrec.numNaviEntrato * 2) - (myrec.indimbarco - 1) * 2)
if (val1 < 0)
val1 = 0
let valmax = val1;
if (valmax < 2)
valmax = 2
return val1 / valmax * 100
}
public getcolorinvitati(index, myrec) {
@@ -355,7 +368,14 @@ export default class CMyDashboard extends MixinUsers {
}
public getvalstrinv(posiz) {
return Math.round((posiz.numinvitatiattiviTot - posiz.numNaviEntrato * 2) - (posiz.indimbarco - 1) * 2) + '/' + Math.round((posiz.numinvitatiTot - posiz.numNaviEntrato * 2) - (posiz.indimbarco - 1) * 2)
let val1 = Math.round((posiz.numinvitatiattiviTot - posiz.numNaviEntrato * 2) - (posiz.indimbarco - 1) * 2)
let val2 = Math.round((posiz.numinvitatiTot - posiz.numNaviEntrato * 2) - (posiz.indimbarco - 1) * 2)
if (val1 < 0)
val1 = 0
if (val2 < 0)
val2 = 0
return val1 + '/' + val2
}
public isprovvisoria(mianave) {
@@ -379,6 +399,14 @@ export default class CMyDashboard extends MixinUsers {
tools.saveFieldToServer(this, 'navi', mianave._id, mydata)
}
public change_mynote_imbarco(mioimbarco) {
const mydata = {
note: mioimbarco.note
}
tools.saveFieldToServer(this, 'listaingressos', mioimbarco._id, mydata)
}
public getNaveSognatoreStr(mianave) {
const mynavedest = tools.getfirstnaveSognatore(mianave.riga, mianave.col)
const ris = mynavedest.riga + '.' + mynavedest.col
@@ -440,7 +468,19 @@ export default class CMyDashboard extends MixinUsers {
return val - tools.getRiganave(mianave.riga) + 1
}
public getposiz(posiz) {
if (posiz.posiz === 100000) {
return '-----'
} else {
return posiz.posiz + ' su ' + posiz.totposiz + '°'
}
}
public getcolornave(mianave) {
if (this.isprovvisoria(mianave)) {
return 'grey'
}
if (mianave.num_tess % 2 !== 0)
return 'blue'
else

View File

@@ -159,8 +159,15 @@
<q-spinner-gears size="50px" color="primary"/>
</div>
<div v-if="upgrade_graduatorie">
<CRequisiti :statebool="false"
msgTrue=""
msgFalse="Aggiornamento in Corso - Updating in Progress - Reload Page Please">
</CRequisiti>
<div v-if="!!dashboard && dashboard.myself && !loading">
</div>
<div v-if="!!dashboard && dashboard.myself && !loading & !upgrade_graduatorie">
<div>
<div v-if="!Completato9Req && !HasNave">
<CTitleBanner icon="person" :canopen="true" class="q-pa-xs text-center"
@@ -183,11 +190,14 @@
clcolor="text-white"
mystyle="" myclass="myshad" canopen="true">
<div class="row justify-between items-center" style="text-align: center;">
<div class="col-3 ">
<div class="col-2 ">
{{ $t('dashboard.posizione') }}
</div>
<div class="col-1 ">
<q-icon color="blue" name="fas fa-ship"></q-icon>
</div>
<div class="col-2 ">
{{ $t('dashboard.data') }}
{{ $t('dashboard.data_rich') }}
</div>
<div class="col-3 ">
{{ $t('dashboard.invitante') }}
@@ -206,12 +216,13 @@
<!--<div class="col-2">
<div class="posizione_imbarco">{{ index }}</div>
</div>-->
<div class="col-3">
<div class="posizione_imbarco">{{ mioimbarco.posiz.posiz }}° su {{
mioimbarco.posiz.totposiz }}
</div>
</div>
<div class="col-2">
<div class="posizione_imbarco">{{getposiz(mioimbarco.posiz) }}</div>
</div>
<div class="col-1 text-center">
<div class="boldhigh">{{ mioimbarco.navestr }}</div>
</div>
<div class="col-2 text-center">
<div>{{ tools.getstrshortDate(mioimbarco.date_added) }}</div>
</div>
<div class="col-3">
@@ -247,6 +258,26 @@
</div>
</div>
</div>
<div class="full-width">
<q-item>
<q-item-section avatar>
<q-icon size="sm" name="fas fa-heart" color="red"></q-icon>
</q-item-section>
<q-item-section>
<q-item-label>
<q-input v-model="mioimbarco.note" :label="$t('reg.my_dream')"
rounded outlined
debounce="1000"
autogrow
dense
style="font-size:0.75rem;"
@input="change_mynote_imbarco(mioimbarco)">
</q-input>
</q-item-label>
</q-item-section>
</q-item>
</div>
</div>
@@ -339,7 +370,8 @@
icon="fas fa-ship">
{{ $t('dashboard.nave_in_partenza') + ' ' + datagiftchat(mianave) }}
</q-chip>
<q-chip v-if="datagiftchat(mianave) !== datanave(mianave)" class="glossy q-mx-md" color="blue" text-color="white"
<q-chip v-if="datagiftchat(mianave) !== datanave(mianave)" class="glossy q-mx-md" color="blue"
text-color="white"
icon="fas fa-ship">
{{ $t('dashboard.nave_in_chiusura') + ' ' + datanave(mianave) }}
</q-chip>
@@ -417,7 +449,16 @@
<div v-if="mianave.made_gift">
<q-chip class="glossy"
size="md"
text-color="green"
color="green"
text-color="white"
icon="fas fa-gift">
{{ $t('steps.dono') + ' ' + $t('dashboard.dono_ricevuto_2') }} !
</q-chip>
</div>
<div v-else-if="!!mianave.date_made_gift">
<q-chip class=""
size="md"
text-color="blue"
color="white"
icon="fas fa-gift">
{{ $t('dashboard.ho_effettuato_il_dono') }}
@@ -426,7 +467,7 @@
</q-item-label>
</q-item-section>
</q-item>
<q-item v-if="mianave.num_tess % 2 !== 0">
<q-item v-if="(mianave.num_tess % 2 !== 0) && !isprovvisoria(mianave)">
<q-item-section avatar>
<q-icon size="sm" name="fas fa-heart" color="red"></q-icon>
</q-item-section>
@@ -546,7 +587,8 @@
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<CMyRequirement :id_listaingr="id_listaingr" :myseluser="seluser" :showregalainv="getIfregalareInvitati(seluser, showregalainv)"
<CMyRequirement :id_listaingr="id_listaingr" :myseluser="seluser"
:showregalainv="getIfregalareInvitati(seluser, showregalainv)"
:mydashboard="dashboard" :mydownline="downline" :notitle="false" @aggiorna="aggiorna"
:ind_order_ingr="ind_order_ingr">

View File

@@ -22,6 +22,8 @@ export default class CMyEditor extends Vue {
public myvalue = ''
public mycolor = ''
public showeditor: boolean = true
public myfonts = {
arial: 'Arial',
arial_black: 'Arial Black',
@@ -98,6 +100,20 @@ export default class CMyEditor extends Vue {
this.$emit('update:value', newval)
}
public annulla() {
this.$emit('annulla', true)
}
public saveval() {
// Converti i <b> in <strong>
this.myvalue = tools.convertiTagHTMLPerBOT(this.myvalue)
console.log('saveval', this.myvalue)
this.$emit('showandsave', this.myvalue)
// this.$emit('update:value', this.myvalue)
this.showeditor = false
}
public mounted() {
this.myvalue = this.value
this.editor = this.$refs.editor_ref

View File

@@ -1,39 +1,56 @@
<template>
<div>
<CTitleBanner :title="title"></CTitleBanner>
<form
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false">
<div>
<q-dialog v-model="showeditor">
<q-card :style="`min-width: `+ tools.myheight_dialog() + `px;` ">
<q-toolbar class="bg-primary text-white" style="min-height: 30px;">
<q-toolbar-title>
Editor
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup @click="showeditor=false"></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<CTitleBanner :title="title"></CTitleBanner>
<form
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false">
<q-btn rounded size="sm" color="primary">
<q-icon name="colorize" class="cursor-pointer">
<q-popup-proxy>
<q-color v-model="mycolor" @change="setcolor"></q-color>
</q-popup-proxy>
</q-icon>
<q-icon name="colorize" class="cursor-pointer">
<q-popup-proxy>
<q-color v-model="mycolor" @change="setcolor"></q-color>
</q-popup-proxy>
</q-icon>
</q-btn>
<q-editor
ref="editor_ref"
toolbar-text-color="white"
toolbar-toggle-color="yellow-8"
toolbar-bg="primary"
:toolbar="toolbarcomp"
debounce="500"
:fonts="myfonts"
@input="changeval"
@paste.native="evt => pasteCapture(evt)"
@keyup.enter.stop
v-model="myvalue">
ref="editor_ref"
toolbar-text-color="white"
toolbar-toggle-color="yellow-8"
toolbar-bg="primary"
:toolbar="toolbarcomp"
debounce="500"
:fonts="myfonts"
@input="changeval"
@paste.native="evt => pasteCapture(evt)"
@keyup.enter.stop
v-model="myvalue">
</q-editor>
</form>
</div>
</form>
</q-card-section>
<q-card-actions align="center">
<q-btn flat :label="$t('dialog.ok')" color="primary" @click="saveval"></q-btn>
<q-btn flat :label="$t('dialog.cancel')" color="primary" v-close-popup @click="annulla"></q-btn>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script lang="ts" src="./CMyEditor.ts">
</script>
<style lang="scss" scoped>
@import './CMyEditor.scss';
@import './CMyEditor.scss';
</style>

View File

@@ -0,0 +1,12 @@
import { ISignupOptions } from 'model'
import { email, minLength, required, sameAs } from 'vuelidate/lib/validators'
// import { ValidationRuleset } from 'vuelidate'
import { aportadorexist } from '../../validation'
export const validations = {
username_sostituire: {
aportadorexist,
required
}
}

View File

@@ -0,0 +1,174 @@
.title-nave {
padding: 2px 4px;
margin: 2px 4px;
color: white;
font-size: 1rem;
border-radius: 16px;
}
.donatore, .mediatore, .sognatore, .intermedio1, .intermedio2, .intermedio4, .intermedio5{
color: white;
background-color: lightblue;
padding: 1px 2px;
margin: 1px 2px;
font-size: 0.8rem;
border-radius: 32px;
font-weight: bold;
text-transform: uppercase;
max-width: 200px;
margin-left: auto;
margin-right: auto;
}
.intermedio1{
background-color: indigo;
}
.intermedio2{
background-color: blue;
}
.intermedio4{
background-color: yellow;
color: black;
}
.intermedio5{
background-color: orange;
}
.tutor{
}
.selezione:hover {
background-color: yellow;
}
.donatore {
background-color: red;
text-transform: uppercase;
}
.mediatore {
background-color: green;
text-transform: uppercase;
}
.sognatore {
background-color: purple;
text-transform: uppercase;
}
.cont_donatore, .cont_sognatore, .cont_mediatore, .cont_tragitto, .cont_pos, .cont_intestaz, .cont_pos_intest, .cont_intestaz_small {
border: solid 2px #4198ef;
padding: 2px 8px;
margin: 2px 4px;
font-size: 1rem;
border-radius: 16px;
}
.cont_donatore {
justify-content: space-between;
}
.you {
background-color: yellow;
}
.issognatore {
background-color: orangered;
color: white;
font-size: 1.10rem;
border-radius: 64px;
font-weight: bold;
}
.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: 1;
}
.passo{
font-weight: bold;
width: 110px;
}
.passoint{
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;
}
.title-nave {
color: blue;
}
.titlenave{
width: 75px;
text-align: center;
}
.datanave{
width: 80px;
text-align: center;
}
.datanave_int{
width: 60px;
text-align: center;
}
.dati {
color: blue;
font-size: 1.25rem;
font-weight: bold;
}
.mancanti {
color: red;
}
.inviati {
color: blue;
}
.pan_sognatore {
padding: 0px 0px;
}
.ricevuti{
color: green;
}
.title-nave {
font-size: 1.25rem;
color: blue;
}

View File

@@ -0,0 +1,166 @@
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 { GlobalStore, UserStore } from '../../store/Modules'
import { lists } from '../../store/Modules/lists'
import translate from '../../globalroutines/util'
import { CMyChipList } from '../CMyChipList'
import { CVideo } from '../CVideo'
import { validations } from './CMyFlotta-validate'
import { validationMixin } from 'vuelidate'
@Component({
mixins: [validationMixin],
validations,
components: { CTitleBanner, CMyChipList, CVideo }
})
export default class CMyFlotta extends MixinNave {
@Prop({ required: false, default: null }) public flottaprop
public $t
public $v
public flotta: any = null
public flotta_completa: any = null
public arrdonatori: any[] = []
public loading: boolean = false
public seluser = null
public showmsguser: boolean = false
public username_sostituire: string = ''
public userfreestr: string = ''
public MyPagination: {
sortBy: string,
descending: boolean,
page: number,
rowsNumber: number, // specifying this determines pagination is server-side
rowsPerPage: number
} = { sortBy: 'index', descending: false, page: 1, rowsNumber: 10, rowsPerPage: 10 }
public colflotte: any[] = [
{
name: 'index',
required: true,
label: 'Num',
align: 'left',
field: '',
sortable: true
},
{ name: 'flotta', align: 'center', label: 'Flotta', field: 'flotta', sortable: true }, // da 8.1 a 8.8
{
name: 'date_gift_chat_open', align: 'center',
label: '⏰ Gift Chat', field: 'date_gift_chat_open', sortable: true
},
{ name: 'date_start', align: 'center', label: '⏰ Chiusura', field: 'date_start', sortable: true }, // 4/6/2020
{ name: 'sognatore', align: 'center', label: 'Sognatore', field: 'sognatore_nomecognome', sortable: true }, // Username Sognatore
{ name: 'provvisoria', align: 'center', label: 'Temp.', field: 'provvisoria', sortable: true }, // Flotta Provvisoria
// { name: 'tutor', align: 'left', label: 'Tutor', field: 'tutor', sortable: true },
// { name: 'mediatore', align: 'center', label: '🌀 Mediatore', field: '', sortable: true },
{ name: 'DoniConfermati', align: 'center', label: '🎁 OK', field: 'DoniConfermati', sortable: true },
{ name: 'DoniAttesaDiConferma', align: 'center', label: '🎁 Wait', field: 'DoniAttesaDiConferma', sortable: true },
{ name: 'DoniMancanti', align: 'center', label: '🎁 Miss', field: 'DoniMancanti', sortable: true },
{ name: 'msg_inviato', align: 'center', label: 'Msg Sent', field: 'msg_inviato', sortable: true },
]
public coldonatori: any[] = [
{
name: 'index',
required: true,
label: 'Num',
align: 'left',
field: 'index',
sortable: true
},
{ name: 'rigacol', align: 'center', label: 'Posizione', field: '', sortable: true },
{ name: 'name', align: 'center', label: 'Nome', field: 'name', sortable: true },
{ name: 'num_tess', align: 'center', label: 'Tessitura', field: 'num_tess', sortable: true },
{ name: 'date_made_gift', align: 'center', label: 'Inviato', field: 'date_made_gift', sortable: true },
{ name: 'made_gift', align: 'center', label: 'Dono', field: 'made_gift', sortable: true },
]
get getcol() {
// if (tools.isMobile())
// return this.coldonatori_cell
// else
return this.coldonatori
}
public mounted() {
this.flotta = this.flottaprop
this.aggiorna()
}
public aggiorna() {
}
public getflottastr() {
if (!!this.flotta)
return 'Da ' + this.flotta.riga + '.' + this.flotta.col_prima + ' a ' + this.flotta.riga + '.' + this.flotta.col_ultima
else
return ''
}
public gettitoloflotta() {
return 'Flotta ' + this.getflottastr()
}
public getcolorflotta() {
return 'bg-blue'
}
public async apriflotta() {
console.log('apriflotta')
this.loading = true
this.arrdonatori = await GlobalStore.actions.GetFlotta({ riga: this.flotta.riga, col_prima: this.flotta.col_prima, col_ultima: this.flotta.col_ultima })
this.aggiorna()
this.loading = false
}
public getnavestr(row) {
return tools.getRiganave(row.riga) + '.' + tools.getColnave(row.col)
}
public getlinkchat(row) {
return row.link_superchat
}
public clickseluser(rec) {
this.seluser = rec
this.showmsguser = true
this.username_sostituire = ''
this.userfreestr = ''
}
get allowSubmit() {
let error = this.$v.$error || this.$v.$invalid
error = error || (this.username_sostituire === this.seluser.username_sostituire)
return !error
}
public async InviaMsgAFlotta(inviareale) {
const msgtitle = translate('dialog.sendmsg')
let msg = 'TEST msg alla Flotta ?';
if (inviareale) {
msg = 'Inviare a Tutta la Flotta il messaggio ?'
}
tools.askConfirm(this.$q, msgtitle, msg , translate('dialog.yes'), translate('dialog.no'), this, '', lists.MenuAction.INVIA_MSG_A_FLOTTA, 0, {
param1: this.flotta,
param2: inviareale,
param3: tools.TipoMsg.SEND_MSG_EFFETTUA_IL_DONO
})
}
}

View File

@@ -0,0 +1,213 @@
<template>
<div class="text-center">
<CTitleBanner class=""
:title="gettitoloflotta()"
:bgcolor="getcolorflotta()"
clcolor="text-white"
:visible="false" mystyle="" myclass="myshad" canopen="true" @apri="apriflotta">
<div>
<div class="row q-pa-sm q-ma-sm">
<div>TEST messaggio Flotta:
<q-btn rounded text-color="secondary" icon="fab fa-telegram"
label="TEST MESSAGGIO"
@click="InviaMsgAFlotta(false)"></q-btn>
</div>
<div>
Invia messaggio a TUTTA la Flotta:
<q-btn rounded text-color="secondary" icon="fab fa-telegram"
:label="$t('dialog.sendmsg')"
@click="InviaMsgAFlotta(true)"></q-btn>
</div>
</div>
<q-table
dense
color="primary"
dense
flat
table-style="padding: 0px;"
:title="$t('dashboard.donatori')"
:data="arrdonatori"
:columns="getcol"
:nodataLabel="$t('grid.nodata')"
:Pagination.sync="MyPagination"
row-key="index">
<template v-slot:body="props">
<q-tr :props="props">
<q-td v-if="!tools.isMobile()" key="index" :props="props">
{{ props.row.index }}
</q-td>
<q-td v-if="!tools.isMobile()" key="nave" :props="props">
<div style="font-size:1rem;"><a :href="getlinkchat(props.row)" target="_blank">{{
getnavestr(props.row)}}</a></div>
</q-td>
<q-td key="name" :props="props">
<q-btn v-if="!!props.row.profile" flat rounded color="blue"
:size="tools.getsize()"
:label="props.row.name + ' ' + props.row.surname"
@click="clickseluser(props.row)">
</q-btn>
<div v-if="tools.isMobile()">
<br>
{{'(' + getnavestr(props.row) + ')'}} - {{ tools.getstrshortDateTime(props.row.date_made_gift)
}}
</div>
</q-td>
<q-td v-if="!tools.isMobile()" key="posizione" :props="props">
{{ props.row.riga }}.{{ props.row.col }}
</q-td>
<q-td v-if="!tools.isMobile()" key="date_made_gift" :props="props">
{{ tools.getstrshortDateTime(props.row.date_made_gift) }}
</q-td>
<q-td key="made_gift" :props="props">
<div class="row justify-center">
<q-btn v-if="!props.row.made_gift"
push
rounded
color="primary"
size="md"
:label="$t('dashboard.dono_ricevuto_3', {donatore: props.row.name })"
@click="HoRicevutoIlDono(props.row)">
</q-btn>
</div>
<div v-if="props.row.made_gift">
<q-chip class="glossy"
text-color="white"
color="positive"
icon="fas fa-gift">
{{ $t('dialog.ok')
}}
</q-chip>
</div>
</q-td>
</q-tr>
</template>
</q-table>
</div>
<q-dialog v-model="showmsguser">
<q-card v-if="seluser" :style="`min-width: `+ tools.myheight_dialog() + `px;` ">
<q-toolbar class="bg-primary text-white" style="min-height: 30px;">
<q-toolbar-title>
<div v-if="!!seluser">
{{ seluser.name }} {{ seluser.surname }}
</div>
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup clickable
@click="Chiudi"></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow" style="padding: 4px !important;">
<div class="row justify-center q-gutter-md">
<div>
<div v-if="!!seluser.profile">
<div v-if="!!seluser.profile.cell" class="q-ma-sm text-center clBorderWarning">
Whatsapp: {{seluser.profile.cell}}
<q-btn
fab-mini
icon="fab fa-whatsapp"
color="white" text-color="green" type="a"
size="sm"
:href="tools.getHttpForWhatsapp(seluser.profile.cell)"
target="__blank">
</q-btn>
</div>
</div>
<div class="q-ma-sm text-center clBorderSteps">
<div>TELEGRAM {{$t('ws.sitename')}} BOT {{$t('dialog.sendmsg')}} ->
{{seluser.name }} {{ seluser.surname }}:
</div>
<q-input type="textarea"
autogrow
v-model="msg_tosend_user" :label="$t('cal.msgbooking')"
input-class="myinput-area">
</q-input>
<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('dialog.sendmsg') + ` -> ` + seluser.name + ` ` + seluser.surname"
@click="InviaMsgAUser()"></q-btn>
</div>
</div>
<div v-if="isManager || isTutor">
<CTitleBanner class="shadow-2 rounded-borders" title="Sostituisci"
bgcolor="bg-positive"
clcolor="text-white"
:visible="false"
mystyle=" " myclass="myshad" :canopen="true">
<div class="column q-gutter-sm justify-center text-center">
<q-input
bg-color="lightblue"
v-model="username_sostituire"
rounded outlined
@blur="$v.username_sostituire.$touch"
:error="$v.username_sostituire.$error"
@keydown.space="(event) => event.preventDefault()"
maxlength="20"
debounce="1000"
label="Username Nuova Persona:">
<template v-slot:prepend>
<q-icon name="person"/>
</template>
</q-input>
<q-btn rounded color="warning" icon="fab fa-find"
text-color="black"
label="Cerca il primo Disponibile"
@click="TrovaUserFree()"></q-btn>
<div v-if="!!userfreestr">
<q-field
stack-label
dense
>
<template v-slot:control>
<div class="text-center" tabindex="0">{{userfreestr}}</div>
</template>
</q-field>
</div>
<q-toggle v-model="deleteUser"
:label="'Elimina ' + seluser.name + ' ' + seluser.surname"></q-toggle>
<q-toggle v-model="AddImbarco"
label="Aggiungi Destinatario (senza spostarlo da altre Navi)"></q-toggle>
<q-toggle v-model="notifBot" :label="$t('dashboard.sendnotification')"></q-toggle>
<q-btn class="q-ma-sm" rounded color="positive" text-color="white"
icon="fas fa-gift"
label="Sostituisci"
:disabled='!allowSubmit'
@click="SostituisciUtente(seluser, username_sostituire, getnotifBotTxt)"></q-btn>
</div>
</CTitleBanner>
</div>
</div>
</div>
</q-card-section>
</q-card>
</q-dialog>
</CTitleBanner>
</div>
</template>
<script lang="ts" src="./CMyFlotta.ts">
</script>
<style lang="scss" scoped>
@import './CMyFlotta.scss';
</style>

View File

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

View File

@@ -198,6 +198,14 @@ export default class CMyNave extends MixinNave {
}
}
}
if (this.sonoDonatore()) {
this.tabnave = 'donatore'
} else if (this.sonoMediatore()) {
this.tabnave = 'mediatore'
} else if (this.sonoSognatore()) {
this.tabnave = 'sognatore'
}
}
public getListaDonatoriDaConfermare() {
@@ -676,7 +684,8 @@ export default class CMyNave extends MixinNave {
const navemediatore = {
id: this.mediatore._id,
riga: this.mediatore.riga,
col: this.mediatore.col
col: this.mediatore.col,
username: this.mediatore.username
}
this.InviaMsgANave(msgobj, navemediatore)
@@ -1076,5 +1085,8 @@ export default class CMyNave extends MixinNave {
})
}
get rendivisibile() {
return !this.FattoDono && !this.sonoSecondaTessituraDonatore() && !this.listanavi
}
}

View File

@@ -1,10 +1,11 @@
<template>
<div class="text-center">
<div v-if="!!nave" class="text-center">
<CTitleBanner v-if="!!getpartenza()" class=""
:title="gettitolonave"
:bgcolor="getcolortitle()"
clcolor="text-white"
:visible="!!nave && !FattoDono && !sonoSecondaTessituraDonatore() && !listanavi"
:visible="rendivisibile"
mystyle="" myclass="myshad" canopen="true" @apri="apri">
<div class="">
<q-chip class="glossy q-ma-sm" color="orange" text-color="white" icon="star">
@@ -123,6 +124,20 @@
<CVideo myvideokey="5rp_XEV6Mzg">
</CVideo>
</CTitleBanner>
<CTitleBanner class="q-pa-xs"
:title="$t('dashboard.come_inviare_regalo_con_paypal') + '.me'"
bgcolor="bg-primary"
clcolor="text-white"
myclass="myshad" canopen="true" :visible="false">
<CVideo myvideokey="VzCy4BxQKhM">
</CVideo>
https://youtu.be/VzCy4BxQKhM
</CTitleBanner>
</div>
@@ -151,8 +166,8 @@
<div v-else>
<div class="row justify-center q-ma-sm">
<q-chip class="glossy"
text-color="white"
color="positive"
text-color="green"
color="white"
icon="fas fa-gift">
{{ $t('dashboard.ho_effettuato_il_dono') }}
</q-chip>
@@ -274,6 +289,7 @@
<div v-if="isDefinitivaMediatore()" class="q-my-md">
<div class="text-left" v-html="gettesto()"></div>
<!--
<div>
<q-input v-model="link_chat" :label="$t('dashboard.link_chat')"
debounce="1000"
@@ -293,7 +309,7 @@
@click="InviaLinkChatADonatori(true)"></q-btn>
</div>
</div>
</div>-->
</div>

View File

@@ -31,6 +31,7 @@ export default class CMyPopupEdit extends Vue {
public myvalue = ''
public myvalueprec = 'false'
public countryname = ''
public visueditor : boolean = false
get tools() {
return tools
@@ -45,6 +46,7 @@ export default class CMyPopupEdit extends Vue {
}
public changeval(newval) {
console.log('changeval update:row', newval)
this.$emit('update:row', newval)
}
@@ -117,6 +119,10 @@ export default class CMyPopupEdit extends Vue {
this.$emit('save', newVal, valinitial)
}
public annulla(val) {
this.$emit('annulla', true)
}
public Savedb(newVal, valinitial) {
if (this.col.fieldtype === tools.FieldType.boolean) {
@@ -132,6 +138,7 @@ export default class CMyPopupEdit extends Vue {
// console.log('Savedb', newVal)
this.$emit('showandsave', this.row, this.col, newVal, valinitial)
this.visueditor = false
}
public visuValByType(val, col: IColGridTable, row) {

View File

@@ -1,219 +1,219 @@
<template>
<div :class="getclassCol(col)">
<div v-if="col.fieldtype === tools.FieldType.listimages">
<CGallery :gall="row" :listimages="myvalue" :edit="isviewfield"
@showandsave="Savedb">
<div :class="getclassCol(col)">
<div v-if="col.fieldtype === tools.FieldType.listimages">
<CGallery :gall="row" :listimages="myvalue" :edit="isviewfield"
@showandsave="Savedb">
</CGallery>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.image">
<CGallery :gall="row" :listimages="myvalue" :edit="isviewfield"
@showandsave="Savedb">
</CGallery>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.image">
<CGallery :gall="row" :listimages="myvalue" :edit="isviewfield"
@showandsave="Savedb">
</CGallery>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.nationality">
<div>
{{myvalue}}
</div>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.intcode">
<div>
{{myvalue}}
</div>
</div>
<div v-else>
<!-- Edit Value -->
<span v-if="col.fieldtype === tools.FieldType.date">
</CGallery>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.nationality">
<div>
{{myvalue}}
</div>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.intcode">
<div>
{{myvalue}}
</div>
</div>
<div v-else>
<!-- Edit Value -->
<span v-if="col.fieldtype === tools.FieldType.date">
<CDateTime
:label="col.label"
class="cursor-pointer"
:valueDate="myvalue"
:readonly="false"
:minuteinterval="minuteinterval"
:dense="true"
:canEdit="canEdit"
@savetoclose="SaveValueInt"
@show="OpenEdit">
:label="col.label"
class="cursor-pointer"
:valueDate="myvalue"
:readonly="false"
:minuteinterval="minuteinterval"
:dense="true"
:canEdit="canEdit"
@savetoclose="SaveValueInt"
@show="OpenEdit">
</CDateTime>
</span>
<div v-if="col.fieldtype !== tools.FieldType.date">
<div>
<div v-if="col.fieldtype === tools.FieldType.binary">
<CMyChipList
:type="tools.FieldType.binary"
:value="myvalue"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<!-- Show Value -->
<div v-else-if="col.fieldtype === tools.FieldType.multiselect">
<CMyChipList
:type="tools.FieldType.multiselect"
:value="myvalue"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.select">
<CMyChipList
myclass="text-center"
:type="tools.FieldType.select"
:value="myvalue"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.boolean">
<q-toggle dark color="green" v-model="myvalue" :label="col.title" :disable="disable && col.name !== 'profile.saw_zoom_presentation'"
@input="Savedb"></q-toggle>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.html">
<div v-html="visuValByType(myvalue, col, row)">
<div v-if="col.fieldtype !== tools.FieldType.date">
<div>
<div v-if="col.fieldtype === tools.FieldType.binary">
<CMyChipList
:type="tools.FieldType.binary"
:value="myvalue"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<!-- Show Value -->
<div v-else-if="col.fieldtype === tools.FieldType.multiselect">
<CMyChipList
:type="tools.FieldType.multiselect"
:value="myvalue"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.select">
<CMyChipList
myclass="text-center"
:type="tools.FieldType.select"
:value="myvalue"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:opticon="db_fieldsTable.getIconByTable(col.jointable)"></CMyChipList>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.boolean">
<q-toggle dark color="green" v-model="myvalue" :label="col.title"
:disable="disable && col.name !== 'profile.saw_zoom_presentation'"
@input="Savedb"></q-toggle>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.html">
<div v-html="visuValByType(myvalue, col, row)" @click="visueditor = true">
</div>
</div>
<div v-else>
{{ visuValByType(myvalue, col, row) }}
</div>
</div>
<q-popup-edit
v-if="canEdit"
v-model="myvalue"
:disable="col.disable"
:title="col.title"
buttons
persistent
@save="SaveValueInt"
@show="OpenEdit">
<div v-if="col.fieldtype === tools.FieldType.boolean">
<q-checkbox v-model="myvalue" :label="col.title">
</q-checkbox>
{{ visuValByType(myvalue, col, row) }}
</div>
<div v-else-if="col.fieldtype === tools.FieldType.string">
<q-input v-model="myvalue"
autogrow
@keyup.enter.stop
autofocus>
</q-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.password">
<q-input v-model="myvalue"
type="password"
@keyup.enter.stop
autofocus>
</q-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.number">
<q-input v-model="myvalue" type="number"
autofocus>
</q-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.binary">
<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)">
</CMyToggleList>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.html">
<CMyEditor :value.sync="myvalue" :title="col.title" @keyup.enter.stop>
</CMyEditor>
<!--<q-input v-model="myvalue"-->
<!--autofocus-->
<!--@keyup.enter.stop-->
<!--type="textarea"></q-input>-->
</div>
<div v-else-if="col.fieldtype === tools.FieldType.select">
<CMySelect :label="col.title"
:value.sync="myvalue"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:useinput="false">
</CMySelect>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.nationality">
<div class="justify-center q-gutter-sm clgutter q-mt-sm">
<q-input
v-model="countryname"
:readonly="true"
rounded dense
debounce="1000"
>
<template v-slot:prepend>
<div style="font-size: 1rem;">
<vue-country-code
:defaultCountry="myvalue"
:disabledFetchingCountry="true"
@onSelect="selectcountry"
:preferredCountries="tools.getprefCountries"
:dropdownOptions="{ disabledDialCode: true }">
</vue-country-code>
</div>
</template>
</q-input>
<div style="height: 180px;">
</div>
</div>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.intcode">
<vue-tel-input
@country-changed="intcode_change"
v-model="myvalue"
:placeholder="$t('reg.cell')"
:enabledCountryCode="true"
inputClasses="clCell"
wrapperClasses="clCellCode">
</vue-tel-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.multiselect">
<div>join: {{col.jointable}}</div>
<q-select
v-model="myvalue"
rounded
outlined
multiple
dense
options-dense
:display-value="db_fieldsTable.getTitleByTable(col.jointable)"
emit-value
map-options
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:option-label="db_fieldsTable.getLabelByTable(col.jointable)"
:option-value="db_fieldsTable.getKeyByTable(col.jointable)"
style="min-width: 150px"
@input="changeCol">
</q-select>
</div>
</q-popup-edit>
</div>
</div>
<div v-else>
{{ visuValByType(myvalue, col, row) }}
</div>
<div v-if="col.fieldtype === tools.FieldType.html">
<CMyEditor v-if="visueditor" :value.sync="myvalue" :title="col.title" @keyup.enter.stop
@showandsave="Savedb" @annulla="visueditor=false">
</CMyEditor>
</div>
<q-popup-edit
v-if="canEdit && col.fieldtype !== tools.FieldType.html"
v-model="myvalue"
:disable="col.disable"
:title="col.title"
buttons
persistent
@save="SaveValueInt"
@show="OpenEdit">
<div v-if="col.fieldtype === tools.FieldType.boolean">
<q-checkbox v-model="myvalue" :label="col.title">
</q-checkbox>
{{ visuValByType(myvalue, col, row) }}
</div>
<div v-else-if="col.fieldtype === tools.FieldType.string">
<q-input v-model="myvalue"
autogrow
@keyup.enter.stop
autofocus>
</q-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.password">
<q-input v-model="myvalue"
type="password"
@keyup.enter.stop
autofocus>
</q-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.number">
<q-input v-model="myvalue" type="number"
autofocus>
</q-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.binary">
<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)">
</CMyToggleList>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.select">
<CMySelect :label="col.title"
:value.sync="myvalue"
:optval="db_fieldsTable.getKeyByTable(col.jointable)"
:optlab="db_fieldsTable.getLabelByTable(col.jointable)"
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:useinput="false">
</CMySelect>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.nationality">
<div class="justify-center q-gutter-sm clgutter q-mt-sm">
<q-input
v-model="countryname"
:readonly="true"
rounded dense
debounce="1000"
>
<template v-slot:prepend>
<div style="font-size: 1rem;">
<vue-country-code
:defaultCountry="myvalue"
:disabledFetchingCountry="true"
@onSelect="selectcountry"
:preferredCountries="tools.getprefCountries"
:dropdownOptions="{ disabledDialCode: true }">
</vue-country-code>
</div>
</template>
</q-input>
<div style="height: 180px;">
</div>
</div>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.intcode">
<vue-tel-input
@country-changed="intcode_change"
v-model="myvalue"
:placeholder="$t('reg.cell')"
:enabledCountryCode="true"
inputClasses="clCell"
wrapperClasses="clCellCode">
</vue-tel-input>
</div>
<div v-else-if="col.fieldtype === tools.FieldType.multiselect">
<div>join: {{col.jointable}}</div>
<q-select
v-model="myvalue"
rounded
outlined
multiple
dense
options-dense
:display-value="db_fieldsTable.getTitleByTable(col.jointable)"
emit-value
map-options
:options="db_fieldsTable.getTableJoinByName(col.jointable)"
:option-label="db_fieldsTable.getLabelByTable(col.jointable)"
:option-value="db_fieldsTable.getKeyByTable(col.jointable)"
style="min-width: 150px"
@input="changeCol">
</q-select>
</div>
</q-popup-edit>
</div>
</div>
</div>
</div>
</template>
<script lang="ts" src="./CMyPopupEdit.ts">
</script>
<style lang="scss" scoped>
@import './CMyPopupEdit.scss';
@import './CMyPopupEdit.scss';
</style>

View File

@@ -4,6 +4,7 @@ import { CSignIn } from '../../components/CSignIn'
import { tools } from '../../store/Modules/tools'
@Component({
name: 'CSigninNoreg',
components: { CSignIn }
})

View File

@@ -165,6 +165,20 @@
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb :title="$t('reg.link_payment')"
table="users"
mykey="profile"
mysubkey="link_payment"
:type="tools.FieldType.string">
</CMyFieldDb>
<CMyFieldDb :title="$t('reg.note_payment')"
table="users"
mykey="profile"
mysubkey="note_payment"
:type="tools.FieldType.string">
</CMyFieldDb>
</div>
</div>

View File

@@ -59,3 +59,4 @@ export * from './CVideoPromo'
export * from './CMyRequirement'
export * from './CSigninNoreg'
export * from './CMyNave'
export * from './CMyFlotta'