- 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 "crypto": false
}, },
"browserslist": [ "browserslist": [
"last 80 Chrome versions", "last 100 Chrome versions",
"last 40 Firefox versions", "last 40 Firefox versions",
"last 20 Edge versions", "last 20 Edge versions",
"last 55 Safari versions", "last 55 Safari versions",
"last 90 Android versions", "last 90 Android versions",
"last 250 ChromeAndroid versions", "last 250 ChromeAndroid versions",
"last 60 FirefoxAndroid versions", "last 60 FirefoxAndroid versions",
"last 30 iOS versions", "last 35 iOS versions",
"last 10 Opera versions", "last 10 Opera versions",
"> 0.03%", "> 0.03%",
"not dead" "not dead"

View File

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

View File

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

View File

@@ -1,56 +1,7 @@
<template> <template>
<div v-if="showalways || (!showalways && !tools.isLogged())"> <div v-if="showalways || (!showalways && !tools.isLogged())">
<div class="q-pa-md q-gutter-sm"> <div class="q-pa-md q-gutter-sm">
<div id="logo" class="text-center"> <div 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">
<transition-group <transition-group
name="fade" name="fade"
mode="out-in" mode="out-in"
@@ -61,30 +12,33 @@
<q-banner <q-banner
:key="1" :key="1"
rounded rounded
dense class="text-white bg-red"
size="lg"
class="shadow-5 q-my-sm"
color="primary q-title" color="primary q-title"
style="text-align: center" style="text-align: center"
> >
<template v-slot:avatar> <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> </template>
<div class="mybanner" :key="3"> <div :key="3">
Accedi per Unirti alla RETE e al Circuito di scambio RIS Accedi con le tue credenziali per utilizzare la APP e per unirti
al Circuito di scambio RIS del tuo territorio
</div> </div>
<template v-slot:action> <template v-slot:action>
<div>
<q-btn <q-btn
rounded flat
icon="fas fa-user" color="white"
color="primary"
@click="tools.openrighttoolbar()" @click="tools.openrighttoolbar()"
>{{ $t('login.enter') }} >{{ $t('login.enter') }}
</q-btn> </q-btn>
<CRegistration /> </div>
<!--<CRegistration />-->
</template> </template>
</q-banner> </q-banner>
</transition-group> </transition-group>
<q-separator inset />
<br>
<q-banner <q-banner
rounded rounded
dense dense

View File

@@ -141,13 +141,13 @@ export default defineComponent({
const mypagination = computed(() => { const mypagination = computed(() => {
if (props.table === toolsext.TABMYBACHECAS) 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) 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) 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) 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) else if (props.table === toolsext.TABUSER)
return userStore.getMypaginationMembers() return userStore.getMypaginationMembers()
else if (shared_consts.TABLES_ORDER_DATE_UPDATED.includes(props.table)) 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)) else if (shared_consts.TABLES_ORDER_DESCR.includes(props.table))
return { sortBy: 'desc', descending: false, page: 1, rowsNumber: 0, rowsPerPage: 10 } 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(() => { const searchList = computed(() => {

View File

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

View File

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

View File

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

View File

@@ -298,7 +298,7 @@ export default defineComponent({
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const isfinishLoading = computed(() => globalStore.finishLoading) 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 addRow = ref('Aggiungi')

View File

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

View File

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

View File

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

View File

@@ -115,6 +115,7 @@
:qtarem="qtarem" :qtarem="qtarem"
> >
</CSaldo> </CSaldo>
</q-item-label> </q-item-label>
</q-item-section> </q-item-section>
@@ -328,8 +329,10 @@
</q-item-section> </q-item-section>
</q-item> </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 <q-btn
v-if=" v-if="
!userStore.IsMyCircuitByName(circuit.name) && !userStore.IsMyCircuitByName(circuit.name) &&
@@ -338,7 +341,6 @@
" "
icon="fas fa-user-plus" icon="fas fa-user-plus"
color="primary" color="primary"
:label="$t('circuit.ask')" :label="$t('circuit.ask')"
@click=" @click="
requestToEnterCircuit = true; requestToEnterCircuit = true;
@@ -441,7 +443,10 @@
<div style="font-weight: bold; font-size: 1.25rem">Regolamento:</div> <div style="font-weight: bold; font-size: 1.25rem">Regolamento:</div>
<q-btn label="vedi Regolamento" @click="showrules = !showrules"> <q-btn label="vedi Regolamento" @click="showrules = !showrules">
</q-btn> </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-section>
<q-card-actions align="center"> <q-card-actions align="center">
<q-btn <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 username.value = userStore.my.username
loadCircuits() await loadCircuits()
console.log(' -- FINE MOUNT ')
} }
function updateValue(val: number) { function updateValue(val: number) {

View File

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

View File

@@ -488,6 +488,10 @@
<div v-if="editOn" class="elemEdit">CCheckIfIsLogged</div> <div v-if="editOn" class="elemEdit">CCheckIfIsLogged</div>
<CCheckIfIsLogged :showalways="myel.container"></CCheckIfIsLogged> <CCheckIfIsLogged :showalways="myel.container"></CCheckIfIsLogged>
</div> </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 v-else-if="myel.type === shared_consts.ELEMTYPE.INFO_VERSION">
<div>Versione: {{ tools.getvers() }}</div> <div>Versione: {{ tools.getvers() }}</div>
</div> </div>

View File

@@ -181,12 +181,12 @@
><q-icon dense color="blue" name="far fa-check-circle" /> ><q-icon dense color="blue" name="far fa-check-circle" />
</span> </span>
</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" <span class="q-mx-xxs"
><q-icon dense color="blue" name="far fa-eye" /> ><q-icon dense color="blue" name="far fa-eye" />
</span> </span>
<span class="q-mx-xxs">&nbsp;</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" <span class="q-mx-xxs"
><q-icon ><q-icon
dense dense

View File

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

View File

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

View File

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

View File

@@ -6,6 +6,7 @@
<q-separator /> <q-separator />
<CSaldo <CSaldo
v-if="tools.isUserOk() && myaccount" v-if="tools.isUserOk() && myaccount"
:account="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 useinput: boolean
notinsearch?: boolean notinsearch?: boolean
addall?: boolean addall?: boolean
addnone?: boolean
keycookie?: string keycookie?: string
showcount?: boolean showcount?: boolean
tablesel?: string tablesel?: string
@@ -818,6 +819,7 @@ export interface IMsgGlobParam {
typesend: number typesend: number
sendreally?: boolean sendreally?: boolean
textaddTelegram?: string textaddTelegram?: string
textcontent_Telegram?: string
linkaddTelegram?: string linkaddTelegram?: string
} }

View File

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

View File

@@ -238,7 +238,7 @@ const msg_it = {
domanda_addtogroup: 'Aggiungi {username} al gruppo {groupname}?', domanda_addtogroup: 'Aggiungi {username} al gruppo {groupname}?',
domanda_addfidotocircuit: 'Abilita il fido a {username} al {circuitname}?', domanda_addfidotocircuit: 'Abilita il fido a {username} al {circuitname}?',
domanda_addtocircuit: 'Aggiungi {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', addedfriend: 'Aggiunto alla lista di Amici',
addedhandshake: 'Aggiunto alla lista Strette di Mano', addedhandshake: 'Aggiunto alla lista Strette di Mano',
addedgroup: 'Aggiunto al Gruppo', addedgroup: 'Aggiunto al Gruppo',
@@ -536,14 +536,14 @@ const msg_it = {
sospeso: 'Sospeso', sospeso: 'Sospeso',
username: 'Username', username: 'Username',
username_reg: 'Username', username_reg: 'Username',
username_reg_collettivo: 'Username Collettivo', username_reg_collettivo: 'Username Gruppo',
username_hint: 'caratteri consentiti: tratteggio (_)', username_hint: 'caratteri consentiti: tratteggio (_)',
username_pseudonimo: 'Username (Pseudonimo)', username_pseudonimo: 'Username (Pseudonimo)',
username_short: 'Username', username_short: 'Username',
name: 'Nome', name: 'Nome',
insert_name: 'Inserisci il tuo Nome (o Soprannome)', insert_name: 'Inserisci il tuo Nome (o Soprannome)',
name_opt: 'Nome (Facoltativo)', name_opt: 'Nome (Facoltativo)',
name_opt_collettivo: 'Nome del Collettivo', name_opt_collettivo: 'Nome del Gruppo',
surname: 'Cognome', surname: 'Cognome',
insert_surname: 'Inserisci il Cognome', insert_surname: 'Inserisci il Cognome',
surname_opt: 'Cognome (facoltativo)', surname_opt: 'Cognome (facoltativo)',
@@ -873,9 +873,9 @@ const msg_it = {
new_rec_bacheca_descr: 'Avvisami quando viene aggiunto un Annuncio:', new_rec_bacheca_descr: 'Avvisami quando viene aggiunto un Annuncio:',
friends: 'Richieste di Amicizia', friends: 'Richieste di Amicizia',
groups: 'Gruppi', groups: 'Gruppi',
friends_descr: 'Avvisami se:', friends_descr: 'Notifiche:',
events: 'Eventi', events: 'Eventi',
events_descr: 'Avvisami se:', events_descr: 'Notifiche:',
circuits: 'Circuiti', circuits: 'Circuiti',
circuits_descr: 'Avvisami:', circuits_descr: 'Avvisami:',
booking: 'Prenotazioni', booking: 'Prenotazioni',
@@ -1179,7 +1179,7 @@ const msg_it = {
hidden_descr: 'il Gruppo non sarà visibile nella ricerca', hidden_descr: 'il Gruppo non sarà visibile nella ricerca',
page: 'Pagina', page: 'Pagina',
circuits: 'Circuiti', circuits: 'Circuiti',
groupname: 'Conto Collettivo', groupname: 'Gruppo',
contocom: 'Conto Comunitario', contocom: 'Conto Comunitario',
events: 'Eventi', events: 'Eventi',
}, },
@@ -1226,11 +1226,11 @@ const msg_it = {
vaialcircuito: 'Vai al Circuito', vaialcircuito: 'Vai al Circuito',
iscritti: 'iscritti trovati', 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_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', lista_ricev_title: 'Questa è la lista degli Utenti che hanno cliccato su "Ricevi RIS" nelle ultime 8 ore',
info: 'Informazioni su questo Circuito', 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>.', 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', name: 'Nome Circuito',
path: 'Nome Pagina', path: 'Nome Pagina',
subname: 'SottoNome', subname: 'SottoNome',
@@ -1303,7 +1303,7 @@ const msg_it = {
sendcoins: 'Invia RIS', sendcoins: 'Invia RIS',
sendcoins_toso: 'Invia RIS a', sendcoins_toso: 'Invia RIS a',
receive_coins: 'Ricevi RIS', 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', sendcoins_tocom: 'Invia RIS a Conto Comunitario',
sendcoinsto: 'Invia {qty} {coin} a {dest}', sendcoinsto: 'Invia {qty} {coin} a {dest}',
question_sendcoinsto: 'Inviare {qty} {coin} a {dest}?', question_sendcoinsto: 'Inviare {qty} {coin} a {dest}?',
@@ -1317,16 +1317,19 @@ const msg_it = {
refuse_coins_qty: 'Rifiuta', refuse_coins_qty: 'Rifiuta',
refuse_coins: 'Rifiuta RIS', refuse_coins: 'Rifiuta RIS',
movements: 'Movimenti', movements: 'Movimenti',
movements_made: 'Movimenti effettuati',
contocomunitario: 'Conto Comunitario', contocomunitario: 'Conto Comunitario',
conticollettivi: 'Conti Collettivi', comunitario: 'Comunitario',
listaconticollettivi: 'Lista Conti Collettivi', conticollettivi: 'Gruppi',
contideigruppi: 'Conti dei Gruppi',
listaconticollettivi: 'Lista Gruppi',
qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}', qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
qta_not_valid: 'Quantità non valida', qta_not_valid: 'Quantità non valida',
qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}', qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
transaction_suspended: 'Transazioni sospese', transaction_suspended: 'Transazioni sospese',
choosecontocom: 'Scegli il tuo Conto Collettivo', choosecontocom: 'Scegli il Conto del Gruppo',
contocom: 'Conto Comunitario', contocom: 'Conto Comunitario',
contocoll: 'Conto Collettivo', contocoll: 'Conto del Gruppo',
user: 'Utente', user: 'Utente',
sender: 'Mittente', sender: 'Mittente',
dest: 'Destinatario', dest: 'Destinatario',
@@ -1358,10 +1361,10 @@ const msg_it = {
movement: { movement: {
transactionDate: 'Data Transazione', transactionDate: 'Data Transazione',
accountFromId: 'Dal Conto', accountFromId: 'Dal Conto',
accountFromCollId: 'Dal Conto Collettivo', accountFromCollId: 'Dal Conto del Gruppo',
accountFromComId: 'Dal Conto Com.', accountFromComId: 'Dal Conto Com.',
accountToId: 'Al Conto', accountToId: 'Al Conto',
accountToCollId: 'Al Conto Collettivo', accountToCollId: 'Al Conto del Gruppo',
accountToComId: 'Al Conto Com.', accountToComId: 'Al Conto Com.',
amount_sent: 'Quantità inviate', amount_sent: 'Quantità inviate',
amount_to_send: 'Quantità da inviare', amount_to_send: 'Quantità da inviare',
@@ -1374,15 +1377,16 @@ const msg_it = {
movin: 'RIS Ricevuti', movin: 'RIS Ricevuti',
movout: 'RIS Inviati', movout: 'RIS Inviati',
from: 'Inviate da:', from: 'Inviate da:',
fromCColl: 'Inviate dal Conto Collettivo:', fromCColl: 'Inviate dal Conto del Gruppo:',
fromCCom: 'Inviate dal Conto Comunitario:', fromCCom: 'Inviate dal Conto Comunitario:',
to: 'A favore di:', to: 'A favore di:',
toCColl: 'Al Conto Collettivo:', toCColl: 'Al Conto del Gruppo:',
toCCom: 'Al Conto Comunitario:', toCCom: 'Al Conto Comunitario:',
pendingtransaction: '* Transazioni Pendenti', pendingtransaction: '* Transazioni Pendenti',
viewpendingtransaction: 'Vedi Transazioni Pendenti', viewpendingtransaction: 'Vedi Transazioni Pendenti',
onlymymov: 'Mostra solo i miei movimenti', onlymymov: 'Mostra solo i miei movimenti',
showsaldi: 'Mostra i Saldi dei membri', showsaldi: 'Mostra i Saldi dei membri',
updatewallet: 'Aggiorna',
}, },
editor: { editor: {
showtool: 'Mostra strumenti per formattare il testo', showtool: 'Mostra strumenti per formattare il testo',

View File

@@ -109,6 +109,17 @@ export const useCircuitStore = defineStore('CircuitStore', {
}, },
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[] { getCircuitsListByGroup(mygrp: IMyGroup): ICircuit[] {
return this.listcircuits.filter((rec: ICircuit) => mygrp.mycircuits!.findIndex((circ: IMyCircuit) => circ.circuitname === rec.name) >= 0) return this.listcircuits.filter((rec: ICircuit) => mygrp.mycircuits!.findIndex((circ: IMyCircuit) => circ.circuitname === rec.name) >= 0)
}, },
@@ -122,17 +133,17 @@ export const useCircuitStore = defineStore('CircuitStore', {
}, },
getAccountByCircuitId(circuitId: string): any { getAccountByCircuitId(circuitId: string): any {
if (this.listaccounts) { /*if (this.listaccounts) {
return this.listaccounts.find((rec: IAccount) => rec.circuitId === circuitId) return this.listaccounts.find((rec: IAccount) => rec.circuitId === circuitId)
} }
return null return null*/
}, },
getAccountsListNameValue(): any[] { getAccountsListNameValue(): any[] {
let arr = [] let arr = []
if (this.listaccounts) { if (this.listaccounts) {
for (const acc of 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) { if (acc.circuitId) {
chi = '[' + this.getNameByCircuitId(acc.circuitId) + '] ' + chi chi = '[' + this.getNameByCircuitId(acc.circuitId) + '] ' + chi
} }

View File

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

View File

@@ -4767,6 +4767,7 @@ export const tools = {
getnumrequisiti(user: IUserFields) { getnumrequisiti(user: IUserFields) {
let req = 0 let req = 0
req += user.verified_email ? 1 : 0 req += user.verified_email ? 1 : 0
req += user.profile.teleg_id! > 0 ? 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 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 { TelegVerificato(): boolean {
const userStore = useUserStore() 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 { isDebugOn(): boolean {

View File

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

View File

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

View File

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

View File

@@ -51,22 +51,26 @@ export default defineComponent({
const showsendCoinTo = ref(false) const showsendCoinTo = ref(false)
const showrules = ref(false) const showrules = ref(false)
const showMov = ref(false)
const animation = ref('fade') const animation = ref('fade')
const path = computed(() => $route.params.path ? $route.params.path.toString() : '') const path = computed(() => $route.params.path ? $route.params.path.toString() : '')
const idnotif = computed(() => $route.query.idnotif ? $route.query.idnotif.toString() : '') const idnotif = computed(() => $route.query.idnotif ? $route.query.idnotif.toString() : '')
const circuitpath_loaded = ref('')
const filtroutente = ref([] as any[]) const filtroutente = ref([] as any[])
const showPic = ref(false) const showPic = ref(false)
const loadSaldo = ref(false)
const circuit = ref({} as ICircuit | null) 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 mystatus = ref(0 as number)
const users_in_circuit = ref([] as IFriends[]) const users_in_circuit = ref([] as IFriends[])
const qtarem = computed(() => account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0) const qtarem = ref(0)
const saldo = computed(() => account.value ? account.value.saldo : 0) const saldo = ref(0)
const loading = ref(false) const loading = ref(false)
const requestToEnterCircuit = ref(false) const requestToEnterCircuit = ref(false)
@@ -86,10 +90,11 @@ export default defineComponent({
const cities = ref([] as ICity[]) const cities = ref([] as ICity[])
const fidoConcesso = computed(() => account.value ? account.value.fidoConcesso : circuit.value!.fido_scoperto_default) const fidoConcesso = ref(<any>0)
const qtaMax = computed(() => account.value ? account.value.qta_maxConcessa : circuit.value!.qta_max_default) const qtaMax = ref(<any>0)
watch(() => path.value, (to: any, from: any) => { watch(() => path.value, (to: any, from: any) => {
if (circuitpath_loaded.value !== path.value)
loadCircuit() loadCircuit()
}) })
@@ -97,19 +102,40 @@ export default defineComponent({
tools.setCookie(tools.COOK_TAB_CIRCUIT + path.value, tabcircuit.value) 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() { function profile() {
return userStore.my.profile return userStore.my.profile
} }
async function loadCircuit() { async function loadCircuit() {
console.log(' *** INIZIO loadCircuit')
if (!loading.value) {
loading.value = true loading.value = true
// Carica il profilo di quest'utente // Carica il profilo di quest'utente
if (path.value) { if (path.value) {
circuitpath_loaded.value = path.value
circuit.value = null circuit.value = null
users_in_circuit.value = [] users_in_circuit.value = []
await userStore.loadCircuit(path.value, idnotif.value).then(({ data, status }: { data: any, status: number }) => { await userStore.loadCircuit(path.value, idnotif.value).then(({ data, status }: { data: any, status: number }) => {
console.log('data', data) // console.log('data', data)
if (data) { if (data) {
notifStore.setAsRead(idnotif.value) notifStore.setAsRead(idnotif.value)
users_in_circuit.value = data.users_in_circuit users_in_circuit.value = data.users_in_circuit
@@ -119,6 +145,8 @@ export default defineComponent({
users_in_circuit.value = [] users_in_circuit.value = []
} }
loadAccount()
mystatus.value = status mystatus.value = status
searchList.value = [] searchList.value = []
@@ -288,13 +316,14 @@ export default defineComponent({
} }
loading.value = false loading.value = false
console.log(' ___ FINE loadCircuit')
}
} }
async function mounted() { function mounted() {
tabcircuit.value = tools.getCookie(tools.COOK_TAB_CIRCUIT + path.value, 'info') tabcircuit.value = tools.getCookie(tools.COOK_TAB_CIRCUIT + path.value, 'info')
loadCircuit()
await loadCircuit()
} }
@@ -329,6 +358,7 @@ export default defineComponent({
username: 1, username: 1,
name: 1, name: 1,
surname: 1, surname: 1,
lang: 1,
'profile.img': 1, 'profile.img': 1,
'profile.mycircuits': 1, 'profile.mycircuits': 1,
'profile.qualifica': 1, 'profile.qualifica': 1,
@@ -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) onMounted(mounted)
return { return {
@@ -500,6 +537,10 @@ export default defineComponent({
getRegulation, getRegulation,
fidoConcesso, fidoConcesso,
qtaMax, qtaMax,
showMov,
loadAccount,
aggiornaSaldo,
loadSaldo,
} }
} }
}) })

View File

@@ -129,6 +129,134 @@
> >
</CSaldo> </CSaldo>
</div> </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> </div>
<q-banner <q-banner
@@ -303,9 +431,9 @@
></q-tab> ></q-tab>
<q-tab <q-tab
v-if="userStore.IsMyCircuitByName(circuit.name)" v-if="userStore.IsMyCircuitByName(circuit.name)"
:label="t('circuit.movements')" :label="t('circuit.comunitario')"
name="mov" name="comunitario"
icon="fas fa-coins" icon="fas fa-campground"
></q-tab> ></q-tab>
<q-tab <q-tab
v-if="!!circuit.note" v-if="!!circuit.note"
@@ -321,6 +449,7 @@
style="max-width: 500px" style="max-width: 500px"
v-if="tools.iCanShowCircuitsMember(circuit)" v-if="tools.iCanShowCircuitsMember(circuit)"
> >
<div class="text-h6">{{ t('circuit.contideigruppi') }}:</div>
<div class="text-h7 q-mb-sm"> <div class="text-h7 q-mb-sm">
<div v-html="$t('circuit.collettivi_info')"></div> <div v-html="$t('circuit.collettivi_info')"></div>
</div> </div>
@@ -514,7 +643,7 @@
prop_colkey="_id" prop_colkey="_id"
col_title="" col_title=""
:vertical="costanti.VISUTABLE_GROUP_CIRCUIT" :vertical="costanti.VISUTABLE_GROUP_CIRCUIT"
nodataLabel="Nessun Conto Collettivo Rifiutato" nodataLabel="Nessun Conto di Gruppo Rifiutato"
:prop_search="false" :prop_search="false"
hint="Gruppo da trovare" hint="Gruppo da trovare"
:finder="false" :finder="false"
@@ -522,7 +651,7 @@
:finder_noNull="false" :finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS" :options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false" :butt_modif_new="false"
noresultLabel="Conto Collettivo non trovato" noresultLabel="Conto di Gruppo non trovato"
:arrfilters="arrfilterand" :arrfilters="arrfilterand"
:filtercustom="filtercustom_rich" :filtercustom="filtercustom_rich"
:filterextra2="filterextra2" :filterextra2="filterextra2"
@@ -537,88 +666,6 @@
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>
</q-tab-panel> </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"> <q-tab-panel name="info">
<div> <div>
<q-card> <q-card>
@@ -876,48 +923,6 @@
}}</span> }}</span>
</div> </div>
</q-card> </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>
<q-tab-panel name="page"> <q-tab-panel name="page">
@@ -1020,7 +1025,50 @@
</q-tab-panel> </q-tab-panel>
</q-tab-panels> </q-tab-panels>
</q-tab-panel> </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> </q-tab-panels>
<div> <div>
<CGridTableRec <CGridTableRec

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,18 +1,21 @@
<template> <template>
<CMyPage <CMyPage
:title="username" imgbackground="images/calendario_eventi.jpg" :title="username"
sizes="max-height: 120px" styleadd="bottom: -20px !important;"> 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()"> <div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged> <CCheckIfIsLogged></CCheckIfIsLogged>
</div> </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"> <div class="q-ma-sm q-gutter-sm q-pa-xs">
@@ -38,11 +41,8 @@
</div> </div>
--> -->
<br />
<br />
<br>
<br>
</CMyPage> </CMyPage>
</template> </template>