- Migliorata la Notifica degli Eventi su Telegram

- Gli annunci (beni/servizi/ospitalità) ora possono essere visti anche tramite un link, anche per chi non è dentro alla App.
- Aggiunto bottone "Aggiorna" per aggiornare il Saldo attuale.
- I "Conti Collettivi" ora vengono chiamati Gruppi (o Conto di Gruppo).
This commit is contained in:
Surya Paolo
2023-10-01 01:24:55 +02:00
parent bfceb64811
commit 31598e3fbd
43 changed files with 784 additions and 515 deletions

View File

@@ -123,14 +123,14 @@
"crypto": false
},
"browserslist": [
"last 80 Chrome versions",
"last 100 Chrome versions",
"last 40 Firefox versions",
"last 20 Edge versions",
"last 55 Safari versions",
"last 90 Android versions",
"last 250 ChromeAndroid versions",
"last 60 FirefoxAndroid versions",
"last 30 iOS versions",
"last 35 iOS versions",
"last 10 Opera versions",
"> 0.03%",
"not dead"

View File

@@ -15,6 +15,7 @@ export const shared_consts = {
color: 'green',
},
},
LIMIT_NOTIF_FOR_USER: 200,
ELEMTYPE: {
TITLE: 5,
@@ -57,6 +58,7 @@ export const shared_consts = {
BTN_LOGIN: 260,
FOOTER: 270,
PROFILETUTORIAL: 280,
VISUVIDEOPROMOANDPDF: 290
},
QUERYTYPE_MYGROUP: 1,
@@ -1464,6 +1466,10 @@ export const shared_consts = {
value: 270,
label: 'Footer',
},
{
value: 280,
label: 'Visu Promo and PDF',
},
{
value: 40,
label: 'Separatore',
@@ -1766,6 +1772,7 @@ export const shared_consts = {
lasttimeonline: 1,
comune: 1,
mycities: 1,
lang: 1,
'profile.img': 1,
'profile.mygroups': 1,
'profile.mycircuits': 1,

View File

@@ -33,6 +33,7 @@ export default defineComponent({
costanti,
static_data,
site,
t,
}
}
})

View File

@@ -1,56 +1,7 @@
<template>
<div v-if="showalways || (!showalways && !tools.isLogged())">
<div class="q-pa-md q-gutter-sm">
<div id="logo" class="text-center">
<q-img
id="logoimg"
:src="tools.getimglogo()"
class="q-my-sm"
alt="logo APP"
style="height: 100px; width: 100px"
/>
</div>
<q-banner
v-if="site.confpages.videoPromo"
rounded
dense
size="lg"
class="bg-grey-3 shadow-5 q-my-sm"
color="primary q-title"
style="text-align: center"
>
<div class="mybanner bg-blue text-white">Video di Presentazione:</div>
<br />
<q-video :src="site.confpages.videoPromo" :ratio="16 / 9"> </q-video>
</q-banner>
<q-banner
v-if="site.confpages.PDFPromo"
rounded
dense
size="lg"
class="bg-grey-3 shadow-5 q-my-sm"
color="primary q-title"
style="text-align: center"
>
<div class="mybanner bg-blue text-white">PDF Presentazione RISO:</div>
<br />
<template v-slot:action>
<q-btn
type="a"
rounded
icon="fab fa-telegram"
color="primary"
:href="site.confpages.PDFPromo"
target="_blank"
label="Scarica PDF"
>
</q-btn>
</template>
</q-banner>
<div class="text-h6 text-center">
<div class=" text-center">
<transition-group
name="fade"
mode="out-in"
@@ -61,30 +12,33 @@
<q-banner
:key="1"
rounded
dense
size="lg"
class="shadow-5 q-my-sm"
class="text-white bg-red"
color="primary q-title"
style="text-align: center"
>
<template v-slot:avatar>
<q-icon :key="2" name="signal_wifi_off" color="primary" />
<q-icon :key="2" name="fas fa-sign-in-alt" color="white" />
</template>
<div class="mybanner" :key="3">
Accedi per Unirti alla RETE e al Circuito di scambio RIS
<div :key="3">
Accedi con le tue credenziali per utilizzare la APP e per unirti
al Circuito di scambio RIS del tuo territorio
</div>
<template v-slot:action>
<q-btn
rounded
icon="fas fa-user"
color="primary"
@click="tools.openrighttoolbar()"
>{{ $t('login.enter') }}
</q-btn>
<CRegistration />
<div>
<q-btn
flat
color="white"
@click="tools.openrighttoolbar()"
>{{ $t('login.enter') }}
</q-btn>
</div>
<!--<CRegistration />-->
</template>
</q-banner>
</transition-group>
<q-separator inset />
<br>
<q-banner
rounded
dense

View File

@@ -141,13 +141,13 @@ export default defineComponent({
const mypagination = computed(() => {
if (props.table === toolsext.TABMYBACHECAS)
return { sortBy: 'dateTimeStart', descending: false, page: 1, rowsNumber: 20, rowsPerPage: 20 }
return { sortBy: 'dateTimeStart', descending: false, page: 1, rowsNumber: 0, rowsPerPage: 10 }
else if (props.table === toolsext.TABMYGROUPS)
return { sortBy: 'date_created', descending: true, page: 1, rowsNumber: 20, rowsPerPage: 20 }
return { sortBy: 'date_created', descending: true, page: 1, rowsNumber: 0, rowsPerPage: 10 }
else if (props.table === toolsext.TABMOVEMENTS)
return { sortBy: 'transactionDate', descending: true, page: 1, rowsNumber: 20, rowsPerPage: 20 }
return { sortBy: 'transactionDate', descending: true, page: 1, rowsNumber: 0, rowsPerPage: 20 }
else if (props.table === toolsext.TABCIRCUITS)
return { sortBy: 'numMembers', descending: true, page: 1, rowsNumber: 20, rowsPerPage: 20 }
return { sortBy: 'numMembers', descending: true, page: 1, rowsNumber: 0, rowsPerPage: 20 }
else if (props.table === toolsext.TABUSER)
return userStore.getMypaginationMembers()
else if (shared_consts.TABLES_ORDER_DATE_UPDATED.includes(props.table))
@@ -155,7 +155,7 @@ export default defineComponent({
else if (shared_consts.TABLES_ORDER_DESCR.includes(props.table))
return { sortBy: 'desc', descending: false, page: 1, rowsNumber: 0, rowsPerPage: 10 }
return { sortBy: 'date_created', descending: true, page: 1, rowsNumber: 20, rowsPerPage: 20 }
return { sortBy: 'date_created', descending: true, page: 1, rowsNumber: 0, rowsPerPage: 10 }
})
const searchList = computed(() => {

View File

@@ -58,7 +58,7 @@
:defaultnewrec="tools.getdefaultnewrec(table)"
labelBtnAddRow="NONE"
:prop_SortFieldsAvailable="mySortFieldsAvailable"
:labelBtnAddExtra="noButtAdd ? `` : ``"
:labelBtnAddExtra="noButtAdd ? `` : (ind >= 0) ? `Aggiungi ` + costanti.MAINCARDS[ind].strsingolo : ''"
:extraparams="tools.extraparams(table, {myrecfiltertoggle})"
>
</CGridTableRec>

View File

@@ -49,13 +49,18 @@ export default defineComponent({
type: String,
required: true,
},
subtitle: {
type: String,
required: false,
default: '',
},
prop_mytable: {
type: String,
required: false,
default: '',
},
prop_mycolumns: {
type: Object as PropType<[]>,
type: Object as PropType<any[]>,
required: false,
default: null,
},
@@ -303,9 +308,10 @@ export default defineComponent({
const globalStore = useGlobalStore()
const isfinishLoading = computed(() => globalStore.finishLoading)
const pagination = ref({ sortBy: 'desc', descending: false, page: 1, rowsNumber: 10, rowsPerPage: 10 } as IPagination)
const pagination = ref({ sortBy: 'desc', descending: false, page: 1, rowsNumber: 0, rowsPerPage: 10 } as IPagination)
const addRow = ref('Aggiungi')
const actmonth = ref('')
const newRecordBool = ref(false)
const newRecordBoolOld = ref(false)
@@ -317,7 +323,7 @@ export default defineComponent({
const mytable = ref('')
const mytitle = ref('')
const mycolumns = ref([])
const mycolumns = ref([] as any[])
const colkey = ref('')
const search = ref('')
@@ -326,6 +332,7 @@ export default defineComponent({
const showNotification = ref(false)
const loading = ref(false)
const alreadymounting = ref(false)
const editOn = computed({
get: () => globalStore.editOn,
set: val => {
@@ -343,13 +350,13 @@ export default defineComponent({
const myinfscroll = ref(null)
const serverData: any = ref([])
const serverData: any = ref([] as any[])
const numRecLoaded = ref(0)
const spinner_visible = ref(false)
const changetable = ref(false)
const searchList = ref([] as ISearchList[])
const actual = ''
const actual = ref(<any>'')
let idsel = ''
const colsel = ref({ name: '', field: '', sortable: false } as IColGridTable | null)
@@ -386,11 +393,14 @@ export default defineComponent({
const ordinam_desc = ref(false)
const valoriopt = computed(() => (item: any, addall: boolean, addnone: boolean) => {
const getNumRecFromQuery = computed(() => () => {
return serverData.value.length
})
const valoriopt = computed(() => (item: any, addall?: boolean, addnone?: boolean) => {
// console.log('valoriopt', item.table)
return globalStore.getTableJoinByName(item.table, addall, addnone, item.filter)
})
const lengthopt = computed(() => (item: any, addall: boolean, addnone: boolean) => {
const lengthopt = computed(() => (item: any, addall: boolean, addnone?: boolean) => {
// console.log('valoriopt', item.table)
const valori = globalStore.getTableJoinByName(item.table, addall, addnone, item.filter)
return (valori ? valori.length : 0)
@@ -1094,6 +1104,7 @@ export default defineComponent({
myinfscroll.value.resume()
}
done()
alreadymounting.value = true
return
}
@@ -1158,6 +1169,8 @@ export default defineComponent({
// console.log(' ...DONE ')
done(pagination.value.rowsNumber === 0 ? true : false)
alreadymounting.value = true
})
} else {
startsearch.value = false
@@ -1169,7 +1182,6 @@ export default defineComponent({
}
}
function refresh_arr() {
const myarr = [...serverData.value]
serverData.value = []
@@ -1185,7 +1197,7 @@ export default defineComponent({
}
function refresh_infscroll(done: any) {
// console.log('refresh_infscroll', 'pag', pagination.value.rowsNumber)
console.log('refresh_infscroll', 'pag', pagination.value.rowsNumber, 'done', done)
rowclicksel.value = null
onUpdateData(0,
@@ -1197,7 +1209,7 @@ export default defineComponent({
function refresh() {
// console.log('refresh', 'startsearch', startsearch.value)
console.log('refresh', 'startsearch', startsearch.value)
clickbuttsearch.value = true
// console.log('refresh')
@@ -1508,12 +1520,13 @@ export default defineComponent({
myvertical.value = props.vertical
// myvertical.value = tools.getCookie('myv_' + props.prop_mytable, props.vertical)
showfilter.value = tools.getCookie('s_adv', '0') !== '0'
showfilter.value = props.prop_showfilter || (tools.getCookie('s_adv', '0') !== '0')
}
function mounted() {
searchList.value = props.prop_searchList
// console.log('GridTable mounted', tablesel.value)
// console.log('props.filtercustom', props.filtercustom)
@@ -1548,7 +1561,8 @@ export default defineComponent({
// console.log('2) tablesel', tablesel.value)
changeTable(tablesel.value)
changeTable(tablesel.value, true)
}
@@ -1696,7 +1710,7 @@ export default defineComponent({
}
}
function changeTable(mysel: any) {
function changeTable(mysel: any, mounted: boolean) {
// console.log('changeTable', tablesel.value)
changetable.value = true
if (tablesel.value === undefined || tablesel.value === '')
@@ -2171,7 +2185,7 @@ export default defineComponent({
if (index > 1) {
// console.log('onLoadScroll', index, 'RECLOAD', numRecLoaded.value, 'ROWS: ', pagination.value.rowsNumber, 'PAGE: ', pagination.value.page)
if (numRecLoaded.value < pagination.value.rowsNumber || (pagination.value.rowsNumber <= 0 && clickbuttsearch.value)) {
if ((numRecLoaded.value < pagination.value.rowsNumber || (pagination.value.rowsNumber <= 0 && clickbuttsearch.value))) {
if (pagination.value.rowsNumber === 0) {
pagination.value.page = 0
}
@@ -2369,6 +2383,9 @@ export default defineComponent({
lengthopt,
update_col,
startsearch,
getNumRecFromQuery,
actmonth,
alreadymounting,
}
}
})

View File

@@ -66,19 +66,27 @@
<q-spinner-tail size="2em" color="primary" />
</q-inner-loading>
<CTitleBanner
v-if="subtitle"
:title="subtitle"
bgcolor="bg-blue"
clcolor="text-white"
>
</CTitleBanner>
<div v-if="shared_consts.VERTIC_SHOW_GRID.includes(myvertical)">
<div v-if="(prop_search || canEdit) && finder" class="q-my-xs text-right">
<!--<q-btn
size="sm"
dense
icon="fas fa-filter"
:label="$t('grid.showfilters')"
:label="t('grid.showfilters')"
@click="showfilter = !showfilter"
></q-btn>
-->
</div>
<q-slide-transition>
<div v-show="showfilter || prop_showfilter">
<div v-show="showfilter">
<div
v-show="searchList"
:class="$q.screen.lt.sm ? `` : `row` + ` text-blue `"
@@ -89,7 +97,7 @@
v-if="
(item.type === costanti.FieldType.select ||
item.type === costanti.FieldType.select_by_server) &&
lengthopt(item, false) > 1
lengthopt(item, false, false) > 1
"
:label="labelcombo(item)"
v-model:value="item.value"
@@ -108,7 +116,7 @@
:icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)"
:options="valoriopt(item, false)"
:options="valoriopt(item, false, false)"
:filter="item.filter"
:filter_extra="item.filter_extra"
:useinput="
@@ -236,7 +244,7 @@
>
<q-btn
dense
label="Filtra Ricerca"
:label="!showfilter ? 'Apri Filtri' : 'Chiudi Filtri'"
color="positive"
icon="fas fa-filter"
@click="showfilter = !showfilter"
@@ -249,18 +257,11 @@
{{ getNumFilterSelected() }}
</q-badge>
</q-btn>
<q-btn
dense
icon="add"
color="primary"
@click="createNewRecordDialog"
/>
<q-btn
dense
color="orange"
icon="fas fa-bell"
label="Avvisami se..."
label="Notifiche"
@click="showNotification = !showNotification"
></q-btn>
</div>
@@ -272,11 +273,14 @@
type="search"
debounce="500"
:hint="hint"
:error-message="noresultLabel"
:error="getNumRecFromQuery() === 0 && !startsearch"
label="Cerca"
v-on:keyup.enter="doSearch"
>
<template v-slot:prepend>
<q-icon name="search" />
<q-spinner-oval v-if="startsearch" color="primary" size="1em" />
<q-icon v-else name="search" />
</template>
<template v-slot:after>
<q-select
@@ -320,7 +324,7 @@
multiple
dense
options-dense
:display-value="$t('grid.columns')"
:display-value="t('grid.columns')"
emit-value
map-options
:options="mycolumns"
@@ -330,11 +334,13 @@
</q-select>
</div>
<div v-if="pagination.rowsNumber === 1 && prop_search">
{{ pagination.rowsNumber }} elemento trovato
</div>
<div v-if="pagination.rowsNumber > 1 && prop_search">
{{ pagination.rowsNumber }} {{ labelElemFind }}
<div class="q-ma-sm">
<div v-if="pagination.rowsNumber === 1 && prop_search">
{{ pagination.rowsNumber }} elemento trovato
</div>
<div v-if="pagination.rowsNumber > 1 && prop_search">
{{ pagination.rowsNumber }} {{ labelElemFind }}
</div>
</div>
<div v-if="choose_visutype && $q.screen.gt.xs" class="">
@@ -355,15 +361,16 @@
</div>
<q-infinite-scroll
ref="myinfscroll"
v-if="shared_consts.VERTIC_SHOW_GRID.includes(myvertical) && !loading"
v-if="
shared_consts.VERTIC_SHOW_GRID.includes(myvertical) &&
!loading &&
alreadymounting
"
:initial-index="0"
@load="onLoadScroll"
:offset="350"
debounce="300"
>
<div v-if="numRecLoaded === 0 && !startsearch">
<div class="text-grey text-italic">{{ nodataLabel }}</div>
</div>
<div v-if="showHeaderCol">
<div
v-for="col in mycolumns"
@@ -571,13 +578,15 @@
</div>
</div>
<template v-slot:loading>
<div class="row justify-center q-my-md">
<q-spinner-dots color="primary" size="40px" />
</div>
<div class="row justify-center q-my-md">
<q-spinner-dots color="primary" size="40px" />
</div>
</template>
</q-infinite-scroll>
<q-table
v-else
v-else-if="
!shared_consts.VERTIC_SHOW_GRID.includes(myvertical) && !loading
"
:grid="shared_consts.VERTIC_SHOW_GRID.includes(myvertical)"
:grid-header="
shared_consts.VERTIC_SHOW_GRID.includes(myvertical) &&
@@ -654,15 +663,6 @@
>
<span style="display: none">{{ (actual = null) }}</span>
<q-btn
v-if="enableExport"
color="primary"
icon-right="archive"
:label="t('export.csv')"
no-caps
@click="exportTable"
/>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="tablesList"
@@ -677,6 +677,15 @@
>
</q-select>
<q-btn
v-if="enableExport"
color="primary"
icon-right="archive"
:label="t('export.csv')"
no-caps
@click="exportTable"
/>
<div class="row">
<q-toggle
v-for="(filt, index) of arrfilters"
@@ -857,6 +866,8 @@
type="search"
debounce="500"
:hint="hint"
:error-message="noresultLabel"
:error="getNumRecFromQuery() === 0 && !startsearch"
label="Cerca"
v-on:keyup.enter="doSearch"
>
@@ -889,7 +900,7 @@
multiple
dense
options-dense
:display-value="$t('grid.columns')"
:display-value="t('grid.columns')"
emit-value
map-options
:options="mycolumns"
@@ -1278,13 +1289,13 @@
</q-card-section>
<q-card-actions align="center">
<q-btn
:label="$t('dialog.insert')"
:label="t('dialog.insert')"
color="primary"
@click="saveNewRecord"
></q-btn>
<q-btn
flat
:label="$t('dialog.cancel')"
:label="t('dialog.cancel')"
color="primary"
v-close-popup
@click="annulla"
@@ -1352,13 +1363,13 @@
</q-card-section>
<q-card-actions align="center">
<q-btn
:label="$t('dialog.save')"
:label="t('dialog.save')"
color="primary"
@click="saveNewRecord"
></q-btn>
<q-btn
flat
:label="$t('dialog.cancel')"
:label="t('dialog.cancel')"
color="primary"
v-close-popup
@click="annulla"
@@ -1417,13 +1428,13 @@
</q-card-section>
<q-card-actions align="center">
<q-btn
:label="$t('dialog.ok')"
:label="t('dialog.ok')"
color="primary"
@click="saverecModif"
></q-btn>
<q-btn
flat
:label="$t('dialog.cancel')"
:label="t('dialog.cancel')"
color="primary"
@click="cancelrecModif"
></q-btn>

View File

@@ -298,7 +298,7 @@ export default defineComponent({
const globalStore = useGlobalStore()
const isfinishLoading = computed(() => globalStore.finishLoading)
const pagination = ref({ sortBy: 'desc', descending: false, page: 1, rowsNumber: 10, rowsPerPage: 10 } as IPagination)
const pagination = ref({ sortBy: 'desc', descending: false, page: 1, rowsNumber: 0, rowsPerPage: 10 } as IPagination)
const addRow = ref('Aggiungi')

View File

@@ -6,6 +6,7 @@
<q-separator />
<CSaldo
v-if="tools.isUserOk() && myaccount"
:account="myaccount"

View File

@@ -169,11 +169,12 @@ export default defineComponent({
return userStore.my.profile
}
function load() {
async function load() {
// Carica il record
if (props.idRec) {
userStore.loadGeneric(props.table, props.idRec, idnotif.value).then((ris) => {
await userStore.loadGeneric(props.table, props.idRec, idnotif.value).then((ris) => {
console.log('myrec', myrec)
myrec.value = ris
notifStore.setAsRead(idnotif.value)
})
@@ -233,6 +234,10 @@ export default defineComponent({
}
async function clicca(tipo: any, myset: any, title: string) {
if (!userStore.my.username) {
return
}
let mylist = null
if (tipo === costanti.TIPOFAVBOOK.FAVORITE) {
if (myset) {

View File

@@ -2,7 +2,6 @@
<div v-if="myrec && myrec._id" class="fulldiv">
<div class="q-pa-sm row items-start q-gutter-sm full-height fulldiv">
<q-card class="my-card fulldiv" bordered>
idRec: {{ idRec }}
<CGalleryImages
v-if="myrec.photos.length > 0"
:imgGallery="myrec.photos"
@@ -41,6 +40,7 @@
<div class="">
<q-btn flat round color="blue" icon="far fa-eye">
<q-badge
v-if="myrec.myreact"
color="primary"
:label="myrec.myreact.numseen ? myrec.myreact.numseen : 0"
floating
@@ -61,6 +61,7 @@
@click="clicca(costanti.TIPOFAVBOOK.FAVORITE, true, '')"
>
<q-badge
v-if="myrec.myreact"
color="primary"
:label="myrec.myreact.numfav ? myrec.myreact.numfav : 0"
floating
@@ -81,6 +82,7 @@
@click="clicca(costanti.TIPOFAVBOOK.BOOKMARK, true, '')"
>
<q-badge
v-if="myrec.myreact"
color="primary"
:label="myrec.myreact.numbook ? myrec.myreact.numbook : 0"
floating
@@ -124,7 +126,7 @@
</q-item-section>
</q-item>
<q-item
v-if="!nopopup"
v-if="!nopopup && myrec.myreact"
clickable
v-close-popup
@click="naviga(tools.getPathByTableAndRec(table, myrec))"
@@ -138,6 +140,7 @@
</q-item>
<q-separator />
<q-item
v-if="myrec.myreact"
clickable
v-close-popup
@click="
@@ -166,6 +169,7 @@
</q-item-section>
</q-item>
<q-item
v-if="myrec.myreact"
clickable
v-close-popup
@click="
@@ -223,6 +227,7 @@
</q-item-section>
</q-item>
<q-item
v-if="myrec.myreact"
clickable
v-close-popup
@click="

View File

@@ -115,6 +115,7 @@
:qtarem="qtarem"
>
</CSaldo>
</q-item-label>
</q-item-section>
@@ -328,8 +329,10 @@
</q-item-section>
</q-item>
<div class="centermydiv text-center" v-if="visu === costanti.ENTER_TO_THE_CIRCUIT">
<div
class="centermydiv text-center"
v-if="visu === costanti.ENTER_TO_THE_CIRCUIT"
>
<q-btn
v-if="
!userStore.IsMyCircuitByName(circuit.name) &&
@@ -338,7 +341,6 @@
"
icon="fas fa-user-plus"
color="primary"
:label="$t('circuit.ask')"
@click="
requestToEnterCircuit = true;
@@ -441,7 +443,10 @@
<div style="font-weight: bold; font-size: 1.25rem">Regolamento:</div>
<q-btn label="vedi Regolamento" @click="showrules = !showrules">
</q-btn>
<div v-if="showrules" v-html="getRegulation(circuit.regulation)"></div>
<div
v-if="showrules"
v-html="getRegulation(circuit.regulation)"
></div>
</q-card-section>
<q-card-actions align="center">
<q-btn

View File

@@ -119,9 +119,11 @@ export default defineComponent({
}
function mounted() {
async function mounted() {
console.log(' ## INIZIO MOUNT ')
username.value = userStore.my.username
loadCircuits()
await loadCircuits()
console.log(' -- FINE MOUNT ')
}
function updateValue(val: number) {

View File

@@ -34,6 +34,7 @@ import { CNotifAtTop } from '@src/components/CNotifAtTop'
import { CPresentazione } from '@src/components/CPresentazione'
import { CRegistration } from '@src/components/CRegistration'
import { CShareSocial } from '@src/components/CShareSocial'
import { CVisuVideoPromoAndPDF } from '@src/components/CVisuVideoPromoAndPDF'
import MixinMetaTags from '@/mixins/mixin-metatags'
import MixinBase from '@/mixins/mixin-base'
@@ -52,6 +53,7 @@ export default defineComponent({
CPresentazione, CMyActivities,
CMyProfileTutorial, CSendRISTo,
CTitleBanner, CShareSocial, CCheckAppRunning, CRegistration,
CVisuVideoPromoAndPDF,
},
emits: ['selElemClick'],
props: {

View File

@@ -488,6 +488,10 @@
<div v-if="editOn" class="elemEdit">CCheckIfIsLogged</div>
<CCheckIfIsLogged :showalways="myel.container"></CCheckIfIsLogged>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.VISUVIDEOPROMOANDPDF">
<div v-if="editOn" class="elemEdit">Visu Video Promo and PDF</div>
<CVisuVideoPromoAndPDF :showalways="myel.container"></CVisuVideoPromoAndPDF>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.INFO_VERSION">
<div>Versione: {{ tools.getvers() }}</div>
</div>

View File

@@ -181,12 +181,12 @@
><q-icon dense color="blue" name="far fa-check-circle" />
</span>
</span>
<span class="q-mx-xxs">{{ myrec.myreact.numseen ? myrec.myreact.numseen : 0 }}</span>
<span class="q-mx-xxs" v-if="myrec.myreact">{{ myrec.myreact.numseen ? myrec.myreact.numseen : 0 }}</span>
<span class="q-mx-xxs"
><q-icon dense color="blue" name="far fa-eye" />
</span>
<span class="q-mx-xxs">&nbsp;</span>
<span class="">{{ myrec.myreact.numfav ? myrec.myreact.numfav : 0 }}</span>
<span class="" v-if="myrec.myreact">{{ myrec.myreact.numfav ? myrec.myreact.numfav : 0 }}</span>
<span class="q-mx-xxs"
><q-icon
dense

View File

@@ -2,7 +2,7 @@ import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { tools } from '@src/store/Modules/tools'
import { CCurrencyValue } from '../CCurrencyValue'
import { useCircuitStore } from '@store/CircuitStore'
import { date, useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { IAccount, ISpecialField } from 'model'
@@ -57,11 +57,12 @@ export default defineComponent({
const showingtooltip = ref(false)
const visuTransac = ref(false)
const circuitStore = useCircuitStore()
function created() {
// created
}
onMounted(created)
return {
@@ -72,7 +73,7 @@ export default defineComponent({
color_border,
visuTransac,
costanti,
circuitStore,
}
},
})

View File

@@ -39,7 +39,9 @@ export default defineComponent({
const loading = ref(false)
const site = ref(globalStore.site)
const site = computed(() => {
return globalStore.site
})
const myForm = ref(null)

View File

@@ -1,6 +1,7 @@
ù<template>
<div>
<div class="q-my-xs">
title: {{title}}
<CGridTableRec
v-if="filtercustom.length > 0 && col && col.length > 0"
:prop_mytable="table"
@@ -13,10 +14,10 @@
:vertical="costanti.VISUTABLE_LISTA"
:choose_visutype="!visuinpage"
:butt_modif_new="!visuinpage"
nodataLabel="Nessun dato presente"
nodataLabel=" "
:prop_search="false"
:visuinpage="visuinpage"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato"
noresultLabel="La ricerca non ha ottenuto nessun risultato"
:defaultnewrec="tools.getdefaultnewrec(table, {groupname})"
:filtercustom="filtercustom"
v-bind="$attrs"

View File

@@ -6,6 +6,7 @@
<q-separator />
<CSaldo
v-if="tools.isUserOk() && myaccount"
:account="myaccount"

View File

@@ -0,0 +1,6 @@
#logoimg {
height: 300px;
width: auto;
@media screen and (max-width: 600px) {
}
}

View File

@@ -0,0 +1,38 @@
import { defineComponent, ref, computed, PropType, toRef } from 'vue'
import { useUserStore } from '@store/UserStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore'
import { useI18n } from '@/boot/i18n'
import { tools } from '@store/Modules/tools'
import { costanti } from '@store/Modules/costanti'
import { static_data } from '@src/db/static_data'
export default defineComponent({
name: 'CVisuVideoPromoAndPDF',
components: { },
props: {
showalways: {
type: Boolean,
required: false,
default: false,
},
},
setup(props, { emit }) {
const userStore = useUserStore()
const $router = useRouter()
const globalStore = useGlobalStore()
const { t } = useI18n()
const site = ref(globalStore.site)
return {
userStore,
tools,
costanti,
static_data,
site,
t,
}
}
})

View File

@@ -0,0 +1,61 @@
<template>
<div v-if="showalways || (!showalways && !tools.isLogged())">
<div class="q-pa-md q-gutter-sm">
<div id="logo" class="text-center">
<q-img
id="logoimg"
:src="tools.getimglogo()"
class="q-my-sm"
alt="logo APP"
style="height: 100px; width: 100px"
/>
</div>
<q-banner
v-if="site.confpages.videoPromo"
rounded
dense
size="lg"
class="bg-grey-3 shadow-5 q-my-sm"
color="primary q-title"
style="text-align: center"
>
<div class="mybanner bg-blue text-white">Video di Presentazione:</div>
<br />
<q-video :src="site.confpages.videoPromo" :ratio="16 / 9"> </q-video>
</q-banner>
<q-banner
v-if="site.confpages.PDFPromo"
rounded
dense
size="lg"
class="bg-grey-3 shadow-5 q-my-sm"
color="primary q-title"
style="text-align: center"
>
<div class="mybanner bg-blue text-white">PDF Presentazione RISO:</div>
<br />
<template v-slot:action>
<q-btn
type="a"
rounded
icon="fab fa-telegram"
color="primary"
:href="site.confpages.PDFPromo"
target="_blank"
label="Scarica PDF"
>
</q-btn>
</template>
</q-banner>
</div>
</div>
</template>
<script lang="ts" src="./CVisuVideoPromoAndPDF.ts">
</script>
<style lang="scss" scoped>
@import './CVisuVideoPromoAndPDF.scss';
</style>

View File

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

View File

@@ -781,6 +781,7 @@ export interface ISearchList {
useinput: boolean
notinsearch?: boolean
addall?: boolean
addnone?: boolean
keycookie?: string
showcount?: boolean
tablesel?: string
@@ -818,6 +819,7 @@ export interface IMsgGlobParam {
typesend: number
sendreally?: boolean
textaddTelegram?: string
textcontent_Telegram?: string
linkaddTelegram?: string
}

View File

@@ -108,6 +108,7 @@ export interface IUserProfile {
username_telegram?: string
website?: string
teleg_id?: number
teleg_id_old?: number
teleg_checkcode?: number
paymenttypes?: IPaymentType[]
manage_telegram?: boolean

View File

@@ -238,7 +238,7 @@ const msg_it = {
domanda_addtogroup: 'Aggiungi {username} al gruppo {groupname}?',
domanda_addfidotocircuit: 'Abilita il fido a {username} al {circuitname}?',
domanda_addtocircuit: 'Aggiungi {username} al {circuitname}?',
domanda_addgrouptocircuit: 'Aggiungi il Conto Collettivo {groupname} al {circuitname}?',
domanda_addgrouptocircuit: 'Aggiungi il Conto del Gruppo {groupname} al {circuitname}?',
addedfriend: 'Aggiunto alla lista di Amici',
addedhandshake: 'Aggiunto alla lista Strette di Mano',
addedgroup: 'Aggiunto al Gruppo',
@@ -536,14 +536,14 @@ const msg_it = {
sospeso: 'Sospeso',
username: 'Username',
username_reg: 'Username',
username_reg_collettivo: 'Username Collettivo',
username_reg_collettivo: 'Username Gruppo',
username_hint: 'caratteri consentiti: tratteggio (_)',
username_pseudonimo: 'Username (Pseudonimo)',
username_short: 'Username',
name: 'Nome',
insert_name: 'Inserisci il tuo Nome (o Soprannome)',
name_opt: 'Nome (Facoltativo)',
name_opt_collettivo: 'Nome del Collettivo',
name_opt_collettivo: 'Nome del Gruppo',
surname: 'Cognome',
insert_surname: 'Inserisci il Cognome',
surname_opt: 'Cognome (facoltativo)',
@@ -873,9 +873,9 @@ const msg_it = {
new_rec_bacheca_descr: 'Avvisami quando viene aggiunto un Annuncio:',
friends: 'Richieste di Amicizia',
groups: 'Gruppi',
friends_descr: 'Avvisami se:',
friends_descr: 'Notifiche:',
events: 'Eventi',
events_descr: 'Avvisami se:',
events_descr: 'Notifiche:',
circuits: 'Circuiti',
circuits_descr: 'Avvisami:',
booking: 'Prenotazioni',
@@ -1179,7 +1179,7 @@ const msg_it = {
hidden_descr: 'il Gruppo non sarà visibile nella ricerca',
page: 'Pagina',
circuits: 'Circuiti',
groupname: 'Conto Collettivo',
groupname: 'Gruppo',
contocom: 'Conto Comunitario',
events: 'Eventi',
},
@@ -1226,11 +1226,11 @@ const msg_it = {
vaialcircuito: 'Vai al Circuito',
iscritti: 'iscritti trovati',
coins_requestedris: 'Il tuo utente {username} sarà visibile sulla lista dei riceventi per 8 ore. Fai cliccare \'Invia RIS a..\' a chi ti deve inviare i RIS.',
coins_requestedrisgroup: 'Il Conto Collettivo {groupname} sarà visibile sulla lista dei riceventi per 8 ore. Fai cliccare \'Invia RIS a..\' a chi ti deve inviare i RIS.',
coins_requestedrisgroup: 'Il Conto del Gruppo {groupname} sarà visibile sulla lista dei riceventi per 8 ore. Fai cliccare \'Invia RIS a..\' a chi ti deve inviare i RIS.',
lista_ricev_title: 'Questa è la lista degli Utenti che hanno cliccato su "Ricevi RIS" nelle ultime 8 ore',
info: 'Informazioni su questo Circuito',
aggiuntive: 'Il Circuito è una una rete di individui, che fanno riferimento ad un territorio provinciale, nella quale ciascuno può offrire i propri talenti, competenze e produzioni (Beni, Servizi, Ospitalità, ecc.) e riceverne da altri, utilizzando anche i <strong>RIS</strong> come metodo di scambio, sulla base di <strong>relazioni di fiducia</strong>.',
collettivi_info: 'Il Conto Collettivo è affidato ad un gruppo di persone, attivo nel territorio provinciale, che lo utilizza per organizzare iniziative di interesse comune, nello spirito di Riso.',
collettivi_info: 'Un Gruppo attivo nel territorio provinciale, che condivida le finalità del Progetto RISO, può creare un Profilo del Gruppo ed attivare un proprio Conto all\'interno del Circuito RIS in cui è presente.',
name: 'Nome Circuito',
path: 'Nome Pagina',
subname: 'SottoNome',
@@ -1303,7 +1303,7 @@ const msg_it = {
sendcoins: 'Invia RIS',
sendcoins_toso: 'Invia RIS a',
receive_coins: 'Ricevi RIS',
info_contocom: 'Il conto Comunitario potrà essere utilizzato per facilitare gli scambi tra gli iscritti, finanziare progetti per la provincia, aiutare situazioni particolari.',
info_contocom: 'Il Conto Comunitario viene gestito collettivamente dai membri del Circuito Territoriale ed utilizzato per progetti comuni, per investimenti di solidarietà o per fare fronte ad eventuali situazioni di difficol.',
sendcoins_tocom: 'Invia RIS a Conto Comunitario',
sendcoinsto: 'Invia {qty} {coin} a {dest}',
question_sendcoinsto: 'Inviare {qty} {coin} a {dest}?',
@@ -1317,16 +1317,19 @@ const msg_it = {
refuse_coins_qty: 'Rifiuta',
refuse_coins: 'Rifiuta RIS',
movements: 'Movimenti',
movements_made: 'Movimenti effettuati',
contocomunitario: 'Conto Comunitario',
conticollettivi: 'Conti Collettivi',
listaconticollettivi: 'Lista Conti Collettivi',
comunitario: 'Comunitario',
conticollettivi: 'Gruppi',
contideigruppi: 'Conti dei Gruppi',
listaconticollettivi: 'Lista Gruppi',
qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
qta_not_valid: 'Quantità non valida',
qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
transaction_suspended: 'Transazioni sospese',
choosecontocom: 'Scegli il tuo Conto Collettivo',
choosecontocom: 'Scegli il Conto del Gruppo',
contocom: 'Conto Comunitario',
contocoll: 'Conto Collettivo',
contocoll: 'Conto del Gruppo',
user: 'Utente',
sender: 'Mittente',
dest: 'Destinatario',
@@ -1358,10 +1361,10 @@ const msg_it = {
movement: {
transactionDate: 'Data Transazione',
accountFromId: 'Dal Conto',
accountFromCollId: 'Dal Conto Collettivo',
accountFromCollId: 'Dal Conto del Gruppo',
accountFromComId: 'Dal Conto Com.',
accountToId: 'Al Conto',
accountToCollId: 'Al Conto Collettivo',
accountToCollId: 'Al Conto del Gruppo',
accountToComId: 'Al Conto Com.',
amount_sent: 'Quantità inviate',
amount_to_send: 'Quantità da inviare',
@@ -1374,15 +1377,16 @@ const msg_it = {
movin: 'RIS Ricevuti',
movout: 'RIS Inviati',
from: 'Inviate da:',
fromCColl: 'Inviate dal Conto Collettivo:',
fromCColl: 'Inviate dal Conto del Gruppo:',
fromCCom: 'Inviate dal Conto Comunitario:',
to: 'A favore di:',
toCColl: 'Al Conto Collettivo:',
toCColl: 'Al Conto del Gruppo:',
toCCom: 'Al Conto Comunitario:',
pendingtransaction: '* Transazioni Pendenti',
viewpendingtransaction: 'Vedi Transazioni Pendenti',
onlymymov: 'Mostra solo i miei movimenti',
showsaldi: 'Mostra i Saldi dei membri',
updatewallet: 'Aggiorna',
},
editor: {
showtool: 'Mostra strumenti per formattare il testo',

View File

@@ -69,11 +69,11 @@ export const useCircuitStore = defineStore('CircuitStore', {
return 'red'
},
getCircuitByName(circuitname: string): ICircuit | undefined | null {
getCircuitByName(circuitname: string): ICircuit | undefined | null {
return this.listcircuits.find((rec: ICircuit) => rec.name === circuitname)
},
getCircuitByProvince(prov: string): ICircuit | undefined | null {
getCircuitByProvince(prov: string): ICircuit | undefined | null {
return this.listcircuits.find((rec: ICircuit) => rec.strProv === prov)
},
@@ -81,20 +81,20 @@ export const useCircuitStore = defineStore('CircuitStore', {
return this.listcircuits.find((rec: ICircuit) => rec._id === circuitId)
},
getNameByCircuitId(circuitId: string): string {
getNameByCircuitId(circuitId: string): string {
const circuit = this.getCircuitByCircuitId(circuitId);
return circuit && circuit.name ? circuit.name : ''
},
getCircuitsLabelValue(): any {
getCircuitsLabelValue(): any {
let arr = []
for (const circ of this.listcircuits) {
arr.push({label: circ.name, value: circ._id})
arr.push({ label: circ.name, value: circ._id })
}
return arr
},
getCircuitByPath(circuitpath: string): ICircuit | null {
getCircuitByPath(circuitpath: string): ICircuit | null {
const ris = this.listcircuits.find((rec: ICircuit) => rec.path === circuitpath)
return ris ? ris : null
},
@@ -109,7 +109,18 @@ export const useCircuitStore = defineStore('CircuitStore', {
},
getCircuitsListByGroup(mygrp: IMyGroup): ICircuit[] {
async aggiornaSaldo(circuitId: string) {
return Api.SendReq('/users/updatesaldo', 'POST', { circuitId })
.then((res) => {
if (res.data.ris)
tools.updateMyData(res.data.ris)
}).catch((error) => {
return {}
})
},
getCircuitsListByGroup(mygrp: IMyGroup): ICircuit[] {
return this.listcircuits.filter((rec: ICircuit) => mygrp.mycircuits!.findIndex((circ: IMyCircuit) => circ.circuitname === rec.name) >= 0)
},
@@ -122,21 +133,21 @@ export const useCircuitStore = defineStore('CircuitStore', {
},
getAccountByCircuitId(circuitId: string): any {
if (this.listaccounts) {
/*if (this.listaccounts) {
return this.listaccounts.find((rec: IAccount) => rec.circuitId === circuitId)
}
return null
return null*/
},
getAccountsListNameValue(): any[] {
let arr = []
if (this.listaccounts) {
for (const acc of this.listaccounts) {
let chi = acc.username ? acc.username : (acc.groupname ? 'Collettivo: ' + acc.groupname : 'Comunitario: ' + acc.contocom)
let chi = acc.username ? acc.username : (acc.groupname ? 'Gruppo: ' + acc.groupname : 'Comunitario: ' + acc.contocom)
if (acc.circuitId) {
chi = '[' + this.getNameByCircuitId(acc.circuitId) + '] ' + chi
}
arr.push({label: chi, value: acc._id})
arr.push({ label: chi, value: acc._id })
}
}
return arr

View File

@@ -689,7 +689,7 @@ export const colmyMovementTable = [
AddCol({ name: 'transactionDate', label_trans: 'movement.transactionDate', fieldtype: costanti.FieldType.date }),
AddCol({
name: 'userfrom.username',
label_trans: 'reg.username',
label_trans: 'circuit.sender',
field: 'userfrom',
subfield: 'username',
tipovisu: costanti.TipoVisu.LINK,
@@ -724,7 +724,7 @@ export const colmyMovementTable = [
}),
AddCol({
name: 'userto.username',
label_trans: 'reg.username',
label_trans: 'circuit.dest',
field: 'userto',
subfield: 'username',
foredit: false,

View File

@@ -4767,6 +4767,7 @@ export const tools = {
getnumrequisiti(user: IUserFields) {
let req = 0
req += user.verified_email ? 1 : 0
req += user.profile.teleg_id! > 0 ? 1 : 0
req += this.isBitActive(user.profile.saw_and_accepted, shared_consts.Accepted.CHECK_READ_GUIDELINES.value) ? 1 : 0
@@ -5111,7 +5112,7 @@ export const tools = {
TelegVerificato(): boolean {
const userStore = useUserStore()
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 : false
return userStore.my.profile ? userStore.my.profile.teleg_id! > 0 || userStore.my.profile.teleg_id_old! > 0 : false
},
isDebugOn(): boolean {

View File

@@ -190,7 +190,7 @@ export const useNotifStore = defineStore('NotifStore', {
},
async updateNotifDataFromServer({ username, lastdataread }: { username: string, lastdataread: Date }) {
// console.log('updateNotifDataFromServer', username, lastdataread)
console.log('updateNotifDataFromServer', username, lastdataread)
return Api.SendReq(`/sendnotif/${username}/${lastdataread}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
@@ -210,6 +210,7 @@ export const useNotifStore = defineStore('NotifStore', {
})
},
async SendNotifEvent(notif: INotif) {
console.log('SendNotifEvent', notif)

View File

@@ -608,15 +608,19 @@ export const useUserStore = defineStore('UserStore', {
return tools.getUrlSite() + '/registrati/' + username
},
isTelegIdOk(): boolean {
return (this.my.profile.teleg_id! > 0 || this.my.profile.teleg_id_old! > 0)
},
isUserOk(): boolean {
const globalStore = useGlobalStore()
if (globalStore.site.confpages.enableRegMultiChoice) {
return ((this.my.profile.teleg_id! > 0 && this.isUsernameTelegOk()) || this.my.verified_email!) && this.my.verified_by_aportador!
return ((this.isTelegIdOk() && this.isUsernameTelegOk()) || this.my.verified_email!) && this.my.verified_by_aportador!
} else {
return this.my.profile.teleg_id! > 0 && this.my.verified_by_aportador! && this.isUsernameTelegOk()
return this.isTelegIdOk() && this.my.verified_by_aportador! && this.isUsernameTelegOk()
}
// return this.my.verified_email! && this.my.profile.teleg_id! > 0 && this.my.verified_by_aportador!
// return this.my.verified_email! && this.isTelegIdOk() && this.my.verified_by_aportador!
},
isUserWaitingVerifAportador(): boolean {
@@ -625,17 +629,17 @@ export const useUserStore = defineStore('UserStore', {
isOldRegNotFinished(): boolean {
return tools.isLogged() && ((!this.my.profile.teleg_id || this.my.profile.teleg_id <= 0) || !this.isUsernameTelegOk())
// return this.my.verified_email! && this.my.profile.teleg_id! > 0 && this.my.verified_by_aportador!
// return this.my.verified_email! && this.isTelegIdOk() && this.my.verified_by_aportador!
},
isTelegOk(): boolean {
return this.my.profile.teleg_id! > 0
// return this.my.verified_email! && this.my.profile.teleg_id! > 0 && this.my.verified_by_aportador!
return this.isTelegIdOk()
// return this.my.verified_email! && this.isTelegIdOk() && this.my.verified_by_aportador!
},
isUsernameTelegOk(): boolean {
return !!this.my.profile.username_telegram
// return this.my.verified_email! && this.my.profile.teleg_id! > 0 && this.my.verified_by_aportador!
// return this.my.verified_email! && this.isTelegIdOk() && this.my.verified_by_aportador!
},
getNameSurnameByUserId(userId: string): string {
@@ -1702,6 +1706,12 @@ export const useUserStore = defineStore('UserStore', {
.then((res) => {
if (res && res.data.state === 1) {
if (myrec) {
if (!myrec.myreact) {
myrec.myreact = {
numfav: 0,
}
}
if (!recreaction)
this.my.profile.reaction.push({ id: objectId(), idrec: id, tab, username: this.my.username, fav: true })
else
@@ -1739,6 +1749,11 @@ export const useUserStore = defineStore('UserStore', {
return await Api.SendReq('/reactions/cmd', 'POST', { cmd: CMD_REACTION.SET_ATTEND, id, tab, value })
.then((res) => {
if (res && res.data.state === 1) {
if (!myrec.myreact) {
myrec.myreact = {
numattend: 0,
}
}
if (!myrec.myreact.attend)
myrec.myreact.attend = false
// create a record
@@ -1800,6 +1815,11 @@ export const useUserStore = defineStore('UserStore', {
return await Api.SendReq('/reactions/cmd', 'POST', { cmd: CMD_REACTION.SET_BOOKMARK, id, tab, value })
.then((res) => {
if (res && res.data.state === 1) {
if (!myrec.myreact) {
myrec.myreact = {
numseen: 0,
}
}
if (!myrec.mybook)
myrec.mybook = []
if (!recreaction)
@@ -1813,8 +1833,8 @@ export const useUserStore = defineStore('UserStore', {
//++ this.my.profile.reaction = tools.removeIObjectOnce(this.my.profile.reaction, { id, tab, })
if ((myrec && myrec.mybook) && recreaction)
recreaction.book = false
myrec.myreact.numbook--
//myrec.mybook = myrec.mybook.filter((rec: IFavBook) => rec.username !== this.my.username)
myrec.myreact.numbook--
//myrec.mybook = myrec.mybook.filter((rec: IFavBook) => rec.username !== this.my.username)
tools.showNegativeNotif($q, t('cmd.bookmark_unset'))
}
}).catch((error) => {
@@ -1856,6 +1876,11 @@ export const useUserStore = defineStore('UserStore', {
.then((res) => {
if (res && res.data.state === 1) {
if (value) {
if (!myrec.myreact) {
myrec.myreact = {
numseen: 0,
}
}
myrec.myreact.numseen++
if (!recreaction)
this.my.profile.reaction.push({ id: objectId(), idrec: id, tab, username: this.my.username, seen: true })

View File

@@ -538,6 +538,14 @@
></q-btn>
<br />
</div>
<div class="row">
<q-btn
label="Rimuovi i profile.favorite, bookmark, attend, seen"
color="negative"
@click="EseguiFunz('removeRecordsFav')"
></q-btn>
<br />
</div>
</template>
<script lang="ts" src="./dbop.ts">
</script>

View File

@@ -51,22 +51,26 @@ export default defineComponent({
const showsendCoinTo = ref(false)
const showrules = ref(false)
const showMov = ref(false)
const animation = ref('fade')
const path = computed(() => $route.params.path ? $route.params.path.toString() : '')
const idnotif = computed(() => $route.query.idnotif ? $route.query.idnotif.toString() : '')
const circuitpath_loaded = ref('')
const filtroutente = ref([] as any[])
const showPic = ref(false)
const loadSaldo = ref(false)
const circuit = ref({} as ICircuit | null)
const account = computed(() => circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null)
const account = ref(<IAccount | null>null)
const mystatus = ref(0 as number)
const users_in_circuit = ref([] as IFriends[])
const qtarem = computed(() => account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0)
const saldo = computed(() => account.value ? account.value.saldo : 0)
const qtarem = ref(0)
const saldo = ref(0)
const loading = ref(false)
const requestToEnterCircuit = ref(false)
@@ -86,215 +90,240 @@ export default defineComponent({
const cities = ref([] as ICity[])
const fidoConcesso = computed(() => account.value ? account.value.fidoConcesso : circuit.value!.fido_scoperto_default)
const qtaMax = computed(() => account.value ? account.value.qta_maxConcessa : circuit.value!.qta_max_default)
const fidoConcesso = ref(<any>0)
const qtaMax = ref(<any>0)
watch(() => path.value, (to: any, from: any) => {
loadCircuit()
if (circuitpath_loaded.value !== path.value)
loadCircuit()
})
watch(() => tabcircuit.value, (to: any, from: any) => {
tools.setCookie(tools.COOK_TAB_CIRCUIT + path.value, tabcircuit.value)
})
watch(() => circuit.value, (to: any, from: any) => {
if (to) {
loadAccount()
}
})
function loadAccount() {
// console.log('loadAccount')
account.value = circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null
// console.log('saldo', account.value!.saldo)
fidoConcesso.value = account.value ? account.value.fidoConcesso : (circuit.value ? circuit.value.fido_scoperto_default : 0)
qtaMax.value = account.value ? account.value.qta_maxConcessa : (circuit.value ? circuit.value.qta_max_default : 0)
qtarem.value = account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0
saldo.value = account.value ? account.value.saldo : 0
}
function profile() {
return userStore.my.profile
}
async function loadCircuit() {
console.log(' *** INIZIO loadCircuit')
loading.value = true
// Carica il profilo di quest'utente
if (path.value) {
circuit.value = null
users_in_circuit.value = []
await userStore.loadCircuit(path.value, idnotif.value).then(({ data, status }: { data: any, status: number }) => {
console.log('data', data)
if (data) {
notifStore.setAsRead(idnotif.value)
users_in_circuit.value = data.users_in_circuit
circuit.value = data.circuit
} else {
circuit.value = null
users_in_circuit.value = []
}
if (!loading.value) {
loading.value = true
// Carica il profilo di quest'utente
if (path.value) {
circuitpath_loaded.value = path.value
circuit.value = null
users_in_circuit.value = []
await userStore.loadCircuit(path.value, idnotif.value).then(({ data, status }: { data: any, status: number }) => {
// console.log('data', data)
if (data) {
notifStore.setAsRead(idnotif.value)
users_in_circuit.value = data.users_in_circuit
circuit.value = data.circuit
} else {
circuit.value = null
users_in_circuit.value = []
}
mystatus.value = status
loadAccount()
searchList.value = []
if (circuit.value) {
let addquerysingle = [
mystatus.value = status
];
searchList.value = []
if (circuit.value) {
let addquerysingle = [
filterextra.value = [{
$match: {
idapp: process.env.APP_ID,
'profile.mycircuits': {
$elemMatch: { circuitname: { $eq: circuit.value.name } },
];
filterextra.value = [{
$match: {
idapp: process.env.APP_ID,
'profile.mycircuits': {
$elemMatch: { circuitname: { $eq: circuit.value.name } },
},
},
},
},
{
$lookup: {
from: 'circuits',
as: 'circuit',
let: { circuitname: circuit.value.name, idapp: '$idapp' },
pipeline: [
{
$match:
{
$lookup: {
from: 'circuits',
as: 'circuit',
let: { circuitname: circuit.value.name, idapp: '$idapp' },
pipeline: [
{
$expr:
$match:
{
$and:
[
{ $eq: ['$name', '$$circuitname'] },
{ $eq: ['$idapp', '$$idapp'] },
$expr:
{
$and:
[
{ $eq: ['$name', '$$circuitname'] },
{ $eq: ['$idapp', '$$idapp'] },
],
],
},
},
},
},
],
],
},
},
{ $unwind: '$circuit' },
{
$project: {
username: 1,
name: 1,
surname: 1,
date_reg: 1,
profile: 1, idapp: 1, 'circuit.name': 1, 'circuit._id': 1
}
},
},
{ $unwind: '$circuit' },
{
$project: {
username: 1,
name: 1,
surname: 1,
date_reg: 1,
profile: 1, idapp: 1, 'circuit.name': 1, 'circuit._id': 1
}
},
{
$lookup: {
from: 'accounts',
as: 'account',
let: { username: '$username', idapp: '$idapp', circuitId: '$circuit._id' },
pipeline: [
{
$match:
{
$lookup: {
from: 'accounts',
as: 'account',
let: { username: '$username', idapp: '$idapp', circuitId: '$circuit._id' },
pipeline: [
{
$expr:
$match:
{
$and:
[
{ $eq: ['$$username', '$username'] },
{ $eq: ['$$idapp', '$idapp'] },
{ $eq: ['$$circuitId', '$circuitId'] },
],
$expr:
{
$and:
[
{ $eq: ['$$username', '$username'] },
{ $eq: ['$$idapp', '$idapp'] },
{ $eq: ['$$circuitId', '$circuitId'] },
],
},
},
},
},
],
},
},
{ $unwind: '$account' },
]
filterextra_group.value = [{
$match: {
idapp: process.env.APP_ID,
'mycircuits': {
$elemMatch: { circuitname: { $eq: circuit.value.name } },
],
},
},
},
{ $unwind: '$account' },
]
{
$lookup: {
from: 'circuits',
as: 'circuit',
let: { circuitname: circuit.value.name, idapp: '$idapp' },
pipeline: [
{
$match:
{
$expr:
{
$and:
[
{ $eq: ['$name', '$$circuitname'] },
{ $eq: ['$idapp', '$$idapp'] },
],
},
},
filterextra_group.value = [{
$match: {
idapp: process.env.APP_ID,
'mycircuits': {
$elemMatch: { circuitname: { $eq: circuit.value.name } },
},
],
},
},
},
{ $unwind: '$circuit' },
{
$project: {
groupname: 1,
title: 1,
descr: 1,
photos: 1,
surname: 1,
admins: 1,
idapp: 1,
'circuit.name': 1, 'circuit._id': 1
}
},
{
$lookup: {
from: 'accounts',
as: 'account',
let: { groupname: '$groupname', idapp: '$idapp', circuitId: '$circuit._id' },
pipeline: [
{
$match:
{
$lookup: {
from: 'circuits',
as: 'circuit',
let: { circuitname: circuit.value.name, idapp: '$idapp' },
pipeline: [
{
$expr:
$match:
{
$and:
[
{ $eq: ['$groupname', '$$groupname'] },
{ $eq: ['$idapp', '$$idapp'] },
{ $eq: ['$circuitId', '$$circuitId'] },
$expr:
{
$and:
[
{ $eq: ['$name', '$$circuitname'] },
{ $eq: ['$idapp', '$$idapp'] },
],
],
},
},
},
},
],
],
},
},
{ $unwind: '$circuit' },
{
$project: {
groupname: 1,
title: 1,
descr: 1,
photos: 1,
surname: 1,
admins: 1,
idapp: 1,
'circuit.name': 1, 'circuit._id': 1
}
},
{
$lookup: {
from: 'accounts',
as: 'account',
let: { groupname: '$groupname', idapp: '$idapp', circuitId: '$circuit._id' },
pipeline: [
{
$match:
{
$expr:
{
$and:
[
{ $eq: ['$groupname', '$$groupname'] },
{ $eq: ['$idapp', '$$idapp'] },
{ $eq: ['$circuitId', '$$circuitId'] },
},
{
$unwind: '$account',
},
{
$match: { 'account.groupname': { $exists: true, $ne: '' } }
},
]
}
arrfilterand.value = []
filtercustom_rich.value = []
],
},
},
},
],
},
if (userStore.my.username && circuit.value)
groupsListAdmin.value = userStore.GroupsListWhereIAmAdmin()
},
{
$unwind: '$account',
},
{
$match: { 'account.groupname': { $exists: true, $ne: '' } }
},
]
}
arrfilterand.value = []
filtercustom_rich.value = []
// filtroutente.value = [{ userId: userStore.my._id }]
})
if (userStore.my.username && circuit.value)
groupsListAdmin.value = userStore.GroupsListWhereIAmAdmin()
// filtroutente.value = [{ userId: userStore.my._id }]
})
}
loading.value = false
console.log(' ___ FINE loadCircuit')
}
loading.value = false
}
async function mounted() {
function mounted() {
tabcircuit.value = tools.getCookie(tools.COOK_TAB_CIRCUIT + path.value, 'info')
await loadCircuit()
loadCircuit()
}
@@ -329,6 +358,7 @@ export default defineComponent({
username: 1,
name: 1,
surname: 1,
lang: 1,
'profile.img': 1,
'profile.mycircuits': 1,
'profile.qualifica': 1,
@@ -430,7 +460,7 @@ export default defineComponent({
function getRegulation(reg: string) {
let strreg = reg + ''
if (!reg) {
const mystringa = t('circuit.regolamento', {nomecircuito: circuit.value!.name})
const mystringa = t('circuit.regolamento', { nomecircuito: circuit.value!.name })
return mystringa
} else {
return reg
@@ -438,6 +468,13 @@ export default defineComponent({
}
async function aggiornaSaldo() {
loadSaldo.value = true
await circuitStore.aggiornaSaldo(circuit.value!._id);
loadAccount()
loadSaldo.value = false
}
onMounted(mounted)
return {
@@ -500,6 +537,10 @@ export default defineComponent({
getRegulation,
fidoConcesso,
qtaMax,
showMov,
loadAccount,
aggiornaSaldo,
loadSaldo,
}
}
})

View File

@@ -129,6 +129,134 @@
>
</CSaldo>
</div>
<q-dialog v-model="showMov" :maximized="$q.screen.lt.sm" permanent>
<q-card class="dialog_card">
<q-bar dense class="bg-primary text-white">
{{ t('circuit.movements') }}:
<q-space />
<q-btn
flat
round
color="white"
icon="close"
v-close-popup
></q-btn>
</q-bar>
<q-card-section class="inset-shadow">
<q-toggle
v-model="showonlymine"
:label="t('movement.onlymymov')"
></q-toggle>
<q-toggle v-model="tabellare" label="Tabella"></q-toggle>
<CGridTableRec
v-if="tabellare && !loading"
prop_mytable="movements"
prop_mytitle=""
:prop_mycolumns="colmyMovementTable"
prop_colkey="_id"
col_title="Lista Movimenti"
:vertical="0"
nodataLabel="Nessun Movimento effettuato"
:prop_search="true"
:enableExport="true"
hint="nota da trovare (tabella)"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="movimenti non trovati con questa ricerca"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
filterextra=""
:filterextra2="filterextra2"
:prop_searchList="searchList"
:prop_pagination="{
sortBy: 'transactionDate',
descending: true,
page: 1,
rowsNumber: 0,
rowsPerPage: 20,
}"
:showType="costanti.SHOW_MOVEMENTS"
:showCol="true"
:showHeaderCol="true"
:extraparams="extraparams_movs()"
extrafield=""
:visufind="costanti.FRIENDS"
>
</CGridTableRec>
<CGridTableRec
v-else-if="!loading"
prop_mytable="movements"
prop_mytitle=""
:prop_mycolumns="colmyMovement"
prop_colkey="_id"
col_title="Lista Movimenti"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessun Movimento effettuato"
:enableExport="true"
:prop_search="true"
hint="nota da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="movimenti non trovati con questa ricerca"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:prop_pagination="{
sortBy: 'transactionDate',
descending: true,
page: 1,
rowsNumber: 20,
rowsPerPage: 20,
}"
:showType="costanti.SHOW_MOVEMENTS"
:showCol="false"
:showHeaderCol="false"
:extraparams="extraparams_movs()"
extrafield=""
:visufind="costanti.FRIENDS"
>
</CGridTableRec>
</q-card-section>
</q-card>
</q-dialog>
</div>
<div class="text-center">
<q-spinner
v-if="loadSaldo"
color="primary"
size="3em"
:thickness="2"
/>
</div>
<q-btn
v-if="account && !loadSaldo"
outline
rounded
dense
color="green"
icon="fas fa-redo"
:label="t('movement.updatewallet')"
@click="aggiornaSaldo()"
>
</q-btn>
<div class="q-ma-sm text-center">
<q-btn
v-if="userStore.IsMyCircuitByName(circuit.name)"
:label="t('circuit.movements_made')"
@click="showMov = !showMov"
icon="fas fa-coins"
rounded
color="primary"
></q-btn>
</div>
<q-banner
@@ -303,9 +431,9 @@
></q-tab>
<q-tab
v-if="userStore.IsMyCircuitByName(circuit.name)"
:label="t('circuit.movements')"
name="mov"
icon="fas fa-coins"
:label="t('circuit.comunitario')"
name="comunitario"
icon="fas fa-campground"
></q-tab>
<q-tab
v-if="!!circuit.note"
@@ -321,6 +449,7 @@
style="max-width: 500px"
v-if="tools.iCanShowCircuitsMember(circuit)"
>
<div class="text-h6">{{ t('circuit.contideigruppi') }}:</div>
<div class="text-h7 q-mb-sm">
<div v-html="$t('circuit.collettivi_info')"></div>
</div>
@@ -514,7 +643,7 @@
prop_colkey="_id"
col_title=""
:vertical="costanti.VISUTABLE_GROUP_CIRCUIT"
nodataLabel="Nessun Conto Collettivo Rifiutato"
nodataLabel="Nessun Conto di Gruppo Rifiutato"
:prop_search="false"
hint="Gruppo da trovare"
:finder="false"
@@ -522,7 +651,7 @@
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Conto Collettivo non trovato"
noresultLabel="Conto di Gruppo non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:filterextra2="filterextra2"
@@ -537,88 +666,6 @@
</q-tab-panel>
</q-tab-panels>
</q-tab-panel>
<q-tab-panel name="mov">
<q-toggle
v-model="showonlymine"
:label="t('movement.onlymymov')"
></q-toggle>
<q-toggle v-model="tabellare" label="Tabella"></q-toggle>
<CGridTableRec
v-if="tabellare && !loading"
prop_mytable="movements"
prop_mytitle=""
:prop_mycolumns="colmyMovementTable"
prop_colkey="_id"
col_title="Lista Movimenti"
:vertical="0"
nodataLabel="Nessun Movimento effettuato"
:prop_search="true"
:enableExport="true"
hint="nota da trovare (tabella)"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="movimenti non trovati con questa ricerca"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
filterextra=""
:filterextra2="filterextra2"
:prop_searchList="searchList"
:prop_pagination="{
sortBy: 'transactionDate',
descending: true,
page: 1,
rowsNumber: 20,
rowsPerPage: 20,
}"
:showType="costanti.SHOW_MOVEMENTS"
:showCol="true"
:showHeaderCol="true"
:extraparams="extraparams_movs()"
extrafield=""
:visufind="costanti.FRIENDS"
>
</CGridTableRec>
<CGridTableRec
v-else-if="!loading"
prop_mytable="movements"
prop_mytitle=""
:prop_mycolumns="colmyMovement"
prop_colkey="_id"
col_title="Lista Movimenti"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessun Movimento effettuato"
:enableExport="true"
:prop_search="true"
hint="nota da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="movimenti non trovati con questa ricerca"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:prop_pagination="{
sortBy: 'transactionDate',
descending: true,
page: 1,
rowsNumber: 20,
rowsPerPage: 20,
}"
:showType="costanti.SHOW_MOVEMENTS"
:showCol="false"
:showHeaderCol="false"
:extraparams="extraparams_movs()"
extrafield=""
:visufind="costanti.FRIENDS"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="info">
<div>
<q-card>
@@ -876,48 +923,6 @@
}}</span>
</div>
</q-card>
<q-card v-if="circuit.name">
<q-card-section>
<div class="text-h6">{{ t('circuit.contocomunitario') }}:</div>
<div class="text-h7 q-mb-sm">
{{ $t('circuit.info_contocom') }}
</div>
</q-card-section>
<q-separator />
<q-card-section>
<div class="col-12 text-h7 text-center">
<span v-if="checkifShow('descr')">
<CSaldo
v-if="tools.isUserOk() && circuit.account"
:account="circuit.account"
:symbol="circuit.symbol"
:color="circuit.color"
:saldo="circuit.account.saldo"
:qtarem="
circuit.account
? circuitStore.getRemainingCoinsToSend(
circuit.account
)
: 0
"
>
</CSaldo>
</span>
<div class="">
<q-btn
icon="fas fa-coins"
color="green"
size="md"
rounded
:label="$t('circuit.sendcoins_tocom')"
@click="showsendCoinTo = true"
>
</q-btn>
</div>
</div>
</q-card-section>
</q-card>
</q-tab-panel>
<q-tab-panel name="page">
@@ -1020,7 +1025,50 @@
</q-tab-panel>
</q-tab-panels>
</q-tab-panel>
<q-tab-panel name="mov"> </q-tab-panel>
<q-tab-panel name="comunitario">
<q-card v-if="circuit.name">
<q-card-section>
<div class="text-h6">{{ t('circuit.contocomunitario') }}:</div>
<div class="text-h7 q-mb-sm">
{{ $t('circuit.info_contocom') }}
</div>
</q-card-section>
<q-separator />
<q-card-section>
<div class="col-12 text-h7 text-center">
<span v-if="checkifShow('descr')">
<CSaldo
v-if="tools.isUserOk() && circuit.account"
:account="circuit.account"
:symbol="circuit.symbol"
:color="circuit.color"
:saldo="circuit.account.saldo"
:qtarem="
circuit.account
? circuitStore.getRemainingCoinsToSend(
circuit.account
)
: 0
"
>
</CSaldo>
</span>
<div class="">
<q-btn
icon="fas fa-coins"
color="green"
size="md"
rounded
:label="$t('circuit.sendcoins_tocom')"
@click="showsendCoinTo = true"
>
</q-btn>
</div>
</div>
</q-card-section>
</q-card>
</q-tab-panel>
</q-tab-panels>
<div>
<CGridTableRec

View File

@@ -18,21 +18,22 @@
<CGridTableRec
prop_mytable="users"
prop_mytitle=""
subtitle="Seleziona una Regione o provincia per vedere la lista degli iscritti:"
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessuna persona trovata con questo nome, cognome o username"
nodataLabel=" "
:prop_search="true"
:prop_showfilter="true"
hint="Scegli una Regione o Provincia oppure digita il nome o Username"
hint="Scegli una Regione, Provincia oppure scrivi il nome o Username"
:finder="true"
:choose_visutype="true"
:choose_visutype="false"
:finder_noNull="false"
:finder_noNullFilters="true"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username o nome non trovato"
noresultLabel="Username, Nome o Cognome non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"

View File

@@ -85,7 +85,7 @@ export default defineComponent({
// Carica il profilo di quest'utente
if (groupname.value) {
await userStore.loadGroup(groupname.value, idnotif.value).then(({ data, status }: { data: any, status: number }) => {
console.log('data', data)
// console.log('data', data)
circuitslist.value = []
if (data) {
mygrp.value = data.mygroup

View File

@@ -13,9 +13,6 @@
</div>
</div>
<div v-else>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<div>
<div
v-if="mygrp.descr"
@@ -541,7 +538,7 @@
sortBy: 'transactionDate',
descending: true,
page: 1,
rowsNumber: 20,
rowsNumber: 0,
rowsPerPage: 20,
}"
:showType="costanti.SHOW_MOVEMENTS"
@@ -667,6 +664,9 @@
</q-card>
</div>
</div>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<q-dialog v-model="showPic" full-height full-width>
<img :src="getImgGrp()" :alt="groupname" class="full-width" />
</q-dialog>

View File

@@ -3,16 +3,17 @@
imgbackground="images/calendario_eventi.jpg"
sizes="max-height: 120px" styleadd="bottom: -20px !important;">
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<CMyCardService
:table="toolsext.TABMYBACHECAS"
:nopopup="true"
:idRec="idBacheca"
>
</CMyCardService>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<!-- <CMyCardPopup
v-if="!!idBacheca"
:table="toolsext.TABMYBACHECAS"

View File

@@ -5,10 +5,6 @@
sizes="max-height: 120px"
styleadd="bottom: -20px !important;"
>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<CMyCardService
v-if="idGood"
:table="toolsext.TABMYGOODS"
@@ -17,6 +13,10 @@
>
</CMyCardService>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<br />
<br />
</CMyPage>

View File

@@ -3,10 +3,6 @@
imgbackground="images/calendario_eventi.jpg"
sizes="max-height: 120px" styleadd="bottom: -20px !important;">
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<CMyCardService
v-if="!!idHosp"
:table="toolsext.TABMYHOSPS"
@@ -18,6 +14,10 @@
<br>
<br>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
</CMyPage>
</template>

View File

@@ -1,18 +1,21 @@
<template>
<CMyPage
:title="username" imgbackground="images/calendario_eventi.jpg"
sizes="max-height: 120px" styleadd="bottom: -20px !important;">
:title="username"
imgbackground="images/calendario_eventi.jpg"
sizes="max-height: 120px"
styleadd="bottom: -20px !important;"
>
<CMyCardService
v-if="idSkill"
:table="toolsext.TABMYSKILLS"
:nopopup="true"
:idRec="idSkill"
>
</CMyCardService>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<div v-else>
<CMyCardService v-if="idSkill"
:table="toolsext.TABMYSKILLS"
:nopopup="true"
:idRec="idSkill">
</CMyCardService>
</div>
<!--
<div class="q-ma-sm q-gutter-sm q-pa-xs">
@@ -38,11 +41,8 @@
</div>
-->
<br>
<br>
<br />
<br />
</CMyPage>
</template>