- corretto problema ROGNOSO : Risolvere la questione "Sessioni multiple", se apro 2 browser l'ultimo va a cancellare il precedente, e mi da errore di email non valida !

Il problema era sulla fetch nel service worker, gestita in quel modo personalizzato, andava in conflitto, non tenendo le chiamate bloccanti, ma uscivano prima che arrivasse la risposta del server.
- Per chi è da tanto che non si collega a RISO, compare "Email non verificata"... (si risolve chiudendo su ESCI e riloggandosi)... però andrebbe sistemata.
(stesso problema di prima).
This commit is contained in:
Surya Paolo
2025-10-26 02:47:59 +02:00
parent eb0fb72c70
commit df98ec9471
64 changed files with 1286 additions and 704 deletions

View File

@@ -263,7 +263,6 @@ export default defineComponent({
return {
t,
querySel,
$q,
globalStore,
inputPrompt,
result,

View File

@@ -1,69 +1,67 @@
import { defineComponent, ref, computed, PropType, toRef, onMounted } from 'vue'
import { useUserStore } from '@store/UserStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore'
import { useI18n } from 'vue-i18n'
import { tools } from '@tools'
import { costanti, IMainCard } from '@store/Modules/costanti'
import { CBigBtn } from '@src/components/CBigBtn'
import { defineComponent, ref, computed, onMounted } from 'vue';
import { useGlobalStore } from '@store/globalStore';
import { tools } from '@tools';
export default defineComponent({
name: 'CCheckAppRunning',
components: { CBigBtn },
props: {},
setup(props, { emit }) {
setup() {
const globalStore = useGlobalStore();
const userStore = useUserStore()
const $router = useRouter()
const globalStore = useGlobalStore()
const { t } = useI18n()
const isAppRunning = computed(() => globalStore.isAppRunning === true);
const finishLoading = computed(() => globalStore.finishLoading === true);
const deferredPrompt = computed(() => globalStore.deferredPrompt);
const homescreen = computed(() => globalStore.homescreen === true);
const isAppRunning = computed(() => globalStore.isAppRunning)
const viewiOS = ref(false);
const viewAndroid = ref(false);
const showNotice = ref(false);
const showOther = ref(false);
const finishLoading = computed(() => globalStore.finishLoading)
// === Rilevamento WebView ===
const currentUrl = window.location.href;
const deferredPrompt = computed(() => globalStore.deferredPrompt)
const homescreen = computed(() => globalStore.homescreen)
const webViewDetectors = [
{ name: 'Telegram', test: /Telegram/ },
{ name: 'WhatsApp', test: /WhatsApp/ },
{ name: 'Facebook', test: /FBAV|FBAN/ },
{ name: 'Instagram', test: /Instagram/ },
{ name: 'Messenger', test: /Messenger/ },
];
const matchedWebView = webViewDetectors.find(({ test }) => test.test(navigator.userAgent));
const isInRestrictedWebView = !!matchedWebView;
const webViewName = matchedWebView ? matchedWebView.name : 'unapp';
const viewiOS = ref(false)
const viewAndroid = ref(false)
// === Installazione ===
function installApp() {
if (globalStore.deferredPrompt) {
globalStore.deferredPrompt.prompt()
// Wait for the user to respond to the prompt
globalStore.deferredPrompt.prompt();
globalStore.deferredPrompt.userChoice.then((choiceResult: any) => {
if (choiceResult.outcome === 'accepted') {
globalStore.deferredPrompt = null;
// console.log('User accepted the A2HS prompt');
} else {
// console.log('User dismissed the A2HS prompt');
}
});
}
}
function mounted() {
tools.checkApp()
}
onMounted(mounted)
onMounted(() => {
tools.checkApp();
});
return {
userStore,
tools,
costanti,
finishLoading,
installApp,
isAppRunning,
deferredPrompt,
homescreen,
viewiOS,
viewAndroid,
homescreen,
}
}
})
installApp,
isInRestrictedWebView,
webViewName,
currentUrl,
showNotice,
showOther,
};
},
});

View File

@@ -1,71 +1,193 @@
<template>
<div v-if="false && tools.isDebugOn()" class="bg-red text-white">
<span> isAppRunning: {{ isAppRunning }} - </span>
<span> deferredPrompt: {{ deferredPrompt }} - </span>
<span> homescreen: {{ homescreen }} </span>
<div
v-if="tools.isDebugOn()"
class="bg-red text-white q-pa-xs"
>
isAppRunning: {{ isAppRunning }} deferredPrompt: {{ !!deferredPrompt }}
homescreen: {{ homescreen }} isInRestrictedWebView:
{{ isInRestrictedWebView }} isInTelegramWebView: {{ tools.isInTelegramWebView() }}
</div>
<div v-if="finishLoading" class="row justify-center">
<div v-if="!isAppRunning">
<!-- App not running -->
<q-btn v-if="deferredPrompt" glossy size="xl" label="Installa App" @click="installApp" icon="fas fa-mobile-alt"
color="green" text-color="white"></q-btn>
<div v-else>
<div v-if="$q.platform.is.ios && $q.platform.is.safari && !tools.isDevelop()">
<q-btn glossy size="xl" label="Installa App" @click="viewiOS = !viewiOS" icon="fab fa-apple" color="green"
text-color="white"></q-btn>
<div
v-if="finishLoading"
class="row justify-center q-gutter-md"
>
<!-- 🚫 Se sei in un WebView non compatibile (es. Telegram) -->
<q-slide-transition>
<!-- Mostra spiegazione per iOS -->
<div v-if="viewiOS">
<q-img src="/images/install_app_on_ios_1.png" fit="contain" style="min-width: 350px"
class="q-my-sm"></q-img><br />
<q-img src="/images/install_app_on_ios_1b.jpg" class="q-mb-md"></q-img><br />
<q-img src="/images/install_app_on_ios_2.jpg" fit="contain"></q-img>
</div>
</q-slide-transition>
<div
v-if="isInRestrictedWebView"
class="text-center q-pa-md"
>
<q-btn
v-if="!showNotice"
v-model="showNotice"
glossy
size="xl"
label="Installa App"
@click="showNotice = true"
icon="fas fa-mobile-alt"
color="green"
text-color="white"
/>
<div
v-if="showNotice"
style="border: 2px solid #dedede"
class="shadow-1 q-ma-md"
>
<q-icon
name="fas fa-exclamation-triangle"
color="warning"
size="xl"
/>
<div v-if="tools.isInTelegramWebView()">
<p class="text-body1 q-mt-md">
Stai usando il browser interno di {{ webViewName }}.<br />
Per installare lapp Clicca sui <strong>tre puntini "⋮"</strong> in alto e
scegli <em>Apri con...</em>
</p>
</div>
<div v-if="$q.platform.is.android">
<q-btn v-if="!tools.isDevelop()" glossy size="lg" label="Installa App" @click="viewAndroid = !viewAndroid"
icon="fab fa-android" color="green" text-color="white"></q-btn>
<q-slide-transition>
<!-- Mostra spiegazione per Android -->
<div v-if="viewAndroid">
<div class="q-ma-sm text-h6"> 1) Cliccare sui 3 puntini verticali<br>
2) Cliccare sulla voce 'Installa App' o 'Schermata Home'<br>
3) Andare sulla schermata HOME e cliccare sull'icona di RISO.
</div>
<q-img src="/images/install_app_on_android_1.jpg" fit="contain" style="min-width: 350px"
class="q-my-sm"></q-img><br />
<q-img src="/images/install_app_on_android_2.jpg" fit="contain" style="min-width: 350px"
class="q-my-sm"></q-img><br />
><br />
<q-img src="/images/install_app_on_android_3.jpg" fit="contain" style="min-width: 350px"
class="q-my-sm"></q-img><br />
</div>
</q-slide-transition>
<div v-else>
<p class="text-body1 q-mt-md">
Stai usando il browser interno di {{ webViewName }}.<br />
<strong>Per installare lapp, apri questo link nel browser esterno.</strong>
</p>
<q-btn
:href="currentUrl"
target="_blank"
rel="noopener"
label="Apri nel browser"
color="primary"
glossy
icon="fas fa-external-link-alt"
class="q-mt-sm"
/>
</div>
</div>
</div>
<!-- Se sei nel browser esterno, ma non in modalità app -->
<div
v-else-if="!isAppRunning"
class="text-center"
>
<q-btn
v-if="deferredPrompt"
glossy
size="xl"
label="Installa App"
@click="installApp"
icon="fas fa-mobile-alt"
color="green"
text-color="white"
/>
<div v-else>
<!-- iOS -->
<div
v-if="$q.platform.is.ios && $q.platform.is.safari"
style="border: 2px solid #dedede"
class="shadow-1 q-ma-md"
>
<q-btn
glossy
size="xl"
label="Installa App"
@click="viewiOS = !viewiOS"
icon="fab fa-apple"
color="green"
text-color="white"
/>
<q-slide-transition>
<div
v-if="viewiOS"
class="q-mt-md"
>
<q-img
src="/images/install_app_on_ios_1.png"
fit="contain"
style="min-width: 350px"
class="q-my-sm"
/>
<q-img
src="/images/install_app_on_ios_1b.jpg"
class="q-mb-md"
/>
<q-img
src="/images/install_app_on_ios_2.jpg"
fit="contain"
/>
</div>
</q-slide-transition>
</div>
<!-- Android -->
<div v-else-if="$q.platform.is.android">
<q-btn
glossy
size="lg"
label="Installa App"
@click="viewAndroid = !viewAndroid"
icon="fab fa-android"
color="green"
text-color="white"
/>
<q-slide-transition>
<div
v-if="viewAndroid"
class="q-mt-md"
>
<div class="q-ma-sm text-body1">
1) Clicca sui <strong>tre puntini </strong><br />
2) Scegli <strong>Installa app</strong> o
<strong>Aggiungi alla home</strong><br />
3) Apri lapp dalla schermata Home.
</div>
<q-img
src="/images/install_app_on_android_1.jpg"
fit="contain"
style="min-width: 350px"
class="q-my-sm"
/>
<q-img
src="/images/install_app_on_android_2.jpg"
fit="contain"
style="min-width: 350px"
class="q-my-sm"
/>
<q-img
src="/images/install_app_on_android_3.jpg"
fit="contain"
style="min-width: 350px"
class="q-my-sm"
/>
</div>
</q-slide-transition>
</div>
<!-- Altri browser (fallback) -->
<div v-else>
<q-btn
glossy
size="lg"
label="Installa App"
@click="showOther = true"
icon="fas fa-mobile-alt"
color="green"
text-color="white"
/>
<div v-if="showOther">
<p class="text-body1">
Apri questa pagina in <strong>Brave</strong> o <strong>Chrome</strong> per
installare lapp.
</p>
</div>
</div>
</div>
</div>
</div>
<!--<div class="row justify-center">
<CBigBtn
label="Info" to="" @click="showInfo = true" icon="fas fa-info" color="primary"
:numcol="3"
>
</CBigBtn>
</div>
<div v-if="showInfo">
</div>-->
</template>
<script lang="ts" src="./CCheckAppRunning.ts">
</script>
<script lang="ts" src="./CCheckAppRunning.ts"></script>
<style lang="scss" scoped>
@import './CCheckAppRunning.scss';

View File

@@ -25,6 +25,8 @@ export default defineComponent({
const globalStore = useGlobalStore()
const { t } = useI18n()
const isLogged = computed(() => userStore.isLogged)
const site = ref(globalStore.site)
return {
@@ -33,6 +35,7 @@ export default defineComponent({
costanti,
static_data,
site,
isLogged,
t,
}
}

View File

@@ -1,8 +1,8 @@
<template>
<div v-if="showalways || (!showalways && !tools.isLogged())">
<div v-if="showalways || (!showalways && !isLogged)">
<div class="q-pa-md q-gutter-sm">
<div class=" text-center">
<transition-group
<transition
name="fade"
mode="out-in"
appear
@@ -36,7 +36,7 @@
<!--<CRegistration />-->
</template>
</q-banner>
</transition-group>
</transition>
<q-separator inset />
<br>
<q-banner

View File

@@ -22,8 +22,8 @@ export default defineComponent({
'clear-end',
],
props: {
startValue: { type: [String, null] as unknown as () => string | null, default: null },
endValue: { type: [String, null] as unknown as () => string | null, default: null },
startValue: { type: [String, Date, null] as unknown as () => string | null, default: null },
endValue: { type: [String, Date, null] as unknown as () => string | null, default: null },
startLabel: { type: String, default: 'Inizio' },
endLabel: { type: String, default: 'Fine' },

View File

@@ -2479,22 +2479,53 @@ export default defineComponent({
let msg = '';
for (col of mycolumns.value) {
if (!msg) {
if (col.showonlyif_dipersona) {
const valori = myrec['idStatusSkill'];
let check =
col.showifIsStatusDiPersona !== undefined ||
col.showifIsStatusOnLine !== undefined;
if (check) {
let show = false;
const valori = myrec['idStatusSkill'];
if (
valori &&
valori.length === 1 &&
valori.includes(shared_consts.STATUSSKILL_ONLINE)
) {
col.required = false;
} else {
col.required = true;
}
show =
(valori &&
valori.includes(shared_consts.STATUSSKILL_ONLINE) &&
col.showifIsStatusOnLine) ||
(valori.includes(shared_consts.STATUSSKILL_DI_PERSONA) &&
col.showifIsStatusDiPersona);
col.visible = col.required;
col.visible = show;
}
let checkrequired =
col.requiredifIsStatusDiPersona || col.requiredifIsStatusOnLine;
if (checkrequired) {
let required = false;
const valori = myrec['idStatusSkill'];
required =
(valori &&
valori.includes(shared_consts.STATUSSKILL_ONLINE) &&
col.requiredifIsStatusOnLine) ||
(valori.includes(shared_consts.STATUSSKILL_DI_PERSONA) &&
col.requiredifIsStatusDiPersona);
col.required = required;
}
if (col.showonlyif_dipersona) {
const valori = myrec['idStatusSkill'];
if (
valori &&
valori.length === 1 &&
valori.includes(shared_consts.STATUSSKILL_ONLINE)
) {
col.required = false;
} else {
col.required = true;
}
col.visible = col.required;
}
if (!msg) {
if (col.required) {
// console.log('newRecord.value', newRecord.value, newRecord.value[col.name])
if (tools.isArray(myrec[col.name])) {

View File

@@ -1556,7 +1556,7 @@
col.foredit
"
>
<div class="">
<div class="q-mb-sm">
<CMyPopupEdit
:table="mytable"
:canEdit="true"

View File

@@ -212,7 +212,6 @@ export default defineComponent({
return {
tools,
getoffset,
q,
}
},
})

File diff suppressed because it is too large Load Diff

View File

@@ -197,6 +197,10 @@ export default defineComponent({
const isAppRunning = computed(() => globalStore.isAppRunning);
const cardGroupMaxWidth = computed(() => {
return tools.getwidth($q) + ' px';
});
const currentCardsPerSlide = computed(() => {
return myel.value.num2 ? myel.value.num2 : 2; // cardsPerSlide
});
@@ -229,6 +233,7 @@ export default defineComponent({
const speedSafe = computed(() => (myel.value as any).speed ?? 0);
const carouselRef = ref(<any>null);
const cardScroller = ref(<any>null);
const isAtStart = ref(true);
const isAtEnd = ref(false);
const activeIndex = ref(0);
@@ -379,6 +384,16 @@ export default defineComponent({
}
}
function scrollCards(delta: number) {
const scroller = cardScroller.value?.[0] || cardScroller.value;
if (scroller) {
scroller.scrollBy({
left: delta,
behavior: 'smooth',
});
}
}
onMounted(mounted);
return {
@@ -426,6 +441,9 @@ export default defineComponent({
naviga,
speedSafe,
t,
cardGroupMaxWidth,
cardScroller,
scrollCards,
};
},
});

View File

@@ -81,7 +81,7 @@
:color="$q.dark.isActive ? `black` : `white`"
:text-color="$q.dark.isActive ? `white` : `black`"
icon="keyboard_arrow_left"
@click="$refs.carousel.previous()"
@click="scrollCards(-300)"
></q-btn>
</q-carousel-control>
<q-carousel-control
@@ -96,7 +96,7 @@
:color="$q.dark.isActive ? `black` : `white`"
:text-color="$q.dark.isActive ? `white` : `black`"
icon="keyboard_arrow_right"
@click="$refs.carousel.next()"
@click="scrollCards(300)"
></q-btn>
</q-carousel-control>
</template>
@@ -106,59 +106,68 @@
:key="groupIndex"
:name="groupIndex"
>
<div class="row no-wrap justify-start items-center q-px-sm">
<template
v-for="(rec, cardIndex) in group"
:key="cardIndex"
>
<div :class="cardColumnClass">
<q-card
:class="
`flex-card bordered ` +
myel.class3 +
(rec.link ? ' titolo_card' : '')
"
:style="
rec.style +
`; height: ${myel.heightimg || `300px`} !important; width: ${
myel.widthimg || `300px`
} !important;`
"
@click="rec.link ? tools.openUrl(rec.link) : undefined"
<!-- Contenitore scrollabile orizzontalmente -->
<div
ref="cardScroller"
class="card-group-scrollable"
:style="{ 'max-height': myel.heightcarousel, 'max-width': ($q.screen.width - 45) + 'px' }"
>
<div class="row no-wrap items-center">
<template
v-for="(rec, cardIndex) in group"
:key="cardIndex"
>
<div
:class="cardColumnClass"
class="flex flex-center"
>
<div
class="img-container"
:style="`height: ${
parseInt(myel?.heightimg?.replace('px', '')) * 0.7
}px; overflow: hidden;`"
<q-card
:class="
`flex-card bordered ` +
myel.class3 +
(rec.link ? ' titolo_card' : '')
"
:style="`
${rec.style};
height: ${myel.heightimg || '300px'};
width: ${myel.widthimg || '300px'};
flex: 0 0 auto;
`"
@click="rec.link ? tools.openUrl(rec.link) : undefined"
>
<q-img
:class="tools.getClassAnim(myel.anim2) + ` ` + myel.class4"
:src="tools.getImgFileByElem(myel, rec, path)"
/>
</div>
<q-card-section class="q-card-section-small">
<div
:class="rec.size"
:style="`color: ` + rec.color"
class="img-container"
:style="`height: ${parseInt(myel?.heightimg?.replace('px', '')) * 0.7}px; overflow: hidden;`"
>
{{ tools.getText(rec.alt) }}
<q-img
:class="tools.getClassAnim(myel.anim2) + ' ' + myel.class4"
:src="tools.getImgFileByElem(myel, rec, path)"
fit="contain"
/>
</div>
<div
:class="`q-mt-xs q-mb-xs ` + tools.getClassAnim(myel.anim)"
v-html="rec.content"
></div>
<div
v-if="rec.description"
class="text-caption"
:style="`color: ` + rec.colorsub"
>
{{ rec.description }}
</div>
</q-card-section>
</q-card>
</div>
</template>
<q-card-section class="q-card-section-small">
<div
:class="rec.size"
:style="`color: ${rec.color}`"
>
{{ tools.getText(rec.alt) }}
</div>
<div
:class="`q-mt-xs q-mb-xs ` + tools.getClassAnim(myel.anim)"
v-html="rec.content"
></div>
<div
v-if="rec.description"
class="text-caption"
:style="`color: ${rec.colorsub}`"
>
{{ rec.description }}
</div>
</q-card-section>
</q-card>
</div>
</template>
</div>
</div>
</q-carousel-slide>
</q-carousel>
@@ -1160,10 +1169,7 @@
:features="myel.features"
:isDark="myel.parambool2"
>
</FeaturesSection>
</div>
<div v-if="editOn">

View File

@@ -65,7 +65,7 @@
<!-- Contenuto pagina -->
<div
:class="[{ 'q-gutter-xs': !hideHeader }, 'q-mx-auto', 'q-px-sm', 'q-pb-lg']"
:class="[{ 'q-gutter-xs': !hideHeader }, 'q-mx-auto', 'q-pb-lg']"
:style="containerStyle"
>
<!-- Media/Content blocks (1..3) -->

View File

@@ -50,6 +50,7 @@
<q-input
v-bind="$attrs"
v-model="myvalue"
filled
:maxlength="col.maxlength ? col.maxlength : undefined"
:style="$q.screen.lt.sm ? 'min-width: 300px' : ''"
:disable="disable"

View File

@@ -37,7 +37,7 @@
}}</span></q-chip
>
<span v-if="circuit.link_group" :class="` `">
<!--<span v-if="circuit.link_group" :class="` `">
<q-btn
icon="fab fa-telegram"
size="xs"
@@ -45,7 +45,7 @@
rounded
@click.stop.prevent="tools.openUrl(circuit.link_group)"
></q-btn>
</span>
</span>-->
</q-item-section>
<q-item-section @click="cmdExt(costanti.CMD_OPEN_PAGE, null, circuit)">

View File

@@ -153,7 +153,6 @@ export default defineComponent({
showsendCoinTo,
showsendCoin,
clickToUser,
$q,
}
},
})

View File

@@ -66,7 +66,6 @@ export default defineComponent({
onMounted(mounted)
return {
q,
t,
getImgByNotif,
getNotifText,

View File

@@ -6,7 +6,7 @@
:color_border="saldo > 0 ? `green` : `red`"
:color="color"
v-model="saldo"
:label="t('account.saldo')"
:label="$q.screen.lt.sm ? '' : t('account.saldo')"
:paramTypeAccount="paramTypeAccount"
:myrecparam="account"
:valueextra="
@@ -30,7 +30,7 @@
: (valueextra ? valueextra : '')
"
:label="
`(` + t('account.dispon') + `: ` + qtarem + ` ` + symbol + `)`
`(${ $q.screen.lt.sm ? t('account.dispon_small') : t('account.dispon') }: ${ qtarem } ${ symbol })`
"
:paramTypeAccount="paramTypeAccount"
:myrecparam="account"

View File

@@ -29,7 +29,6 @@ export default defineComponent({
return {
tools,
q,
}
},
})

View File

@@ -157,7 +157,7 @@ export default defineComponent({
}
async function load() {
// console.log('load')
console.log('load CStatusReg')
myloadingload.value = true
datastat.value = await globalStore.getStatSite()
@@ -210,7 +210,7 @@ export default defineComponent({
$router.push(link)
}
created()
onMounted(created)
onBeforeUnmount(beforeDestroy)

View File

@@ -11,19 +11,19 @@
<CElemStat v-if="true" myclass="fixed-size" :title="$t('statusreg.online_today')" icon="fas fa-wifi"
:mytextval="tools.numtostr(datastat.online_today)" classColor="text-orange" colBack="yellow">
</CElemStat>
<CElemStat myclass="fixed-size" v-f="datastat.num_annunci > 0" :title="$t('statusreg.num_annunci')"
<CElemStat myclass="fixed-size" v-if="datastat.num_annunci > 0" :title="$t('statusreg.num_annunci')"
icon="fas fa-tshirt" :value_today="0" :mytextval="tools.numtostr(datastat.num_annunci)"
classColor="text-green" colBack="orange">
</CElemStat>
<CElemStat myclass="fixed-size" v-f="datastat.num_circuiti_attivi > 0"
<CElemStat myclass="fixed-size" v-if="datastat.num_circuiti_attivi > 0"
:title="$t('statusreg.num_circuiti_attivi')" icon="fas fa-map-marker-alt" :value_today="0" :mytextval="datastat.num_circuiti_attivi + ' su ' + datastat.num_circuiti
" classColor="text-blue" colBack="red">
</CElemStat>
<CElemStat myclass="fixed-size" v-f="datastat.num_transaz_tot > 0" :title="$t('statusreg.numtransazioni')"
<CElemStat myclass="fixed-size" v-if="datastat.num_transaz_tot > 0" :title="$t('statusreg.numtransazioni')"
icon="fas fa-sync-alt" :value_today="0" :mytextval="tools.numtostr(datastat.num_transaz_tot)"
classColor="text-indigo" colBack="green">
</CElemStat>
<CElemStat myclass="fixed-size" v-f="datastat.tot_RIS_transati > 0" :title="$t('statusreg.totristransati')"
<CElemStat myclass="fixed-size" v-if="datastat.tot_RIS_transati > 0" :title="$t('statusreg.totristransati')"
icon="img: /images/1ris_rosso_100.png" :value_today="0"
:mytextval="tools.numtostr(datastat.tot_RIS_transati) + ' RIS'" classColor="text-blueviolet"
colBack="green">
@@ -54,7 +54,7 @@
<q-card>
<q-card-section>
<div class="q-pa-md" style="max-width: 350px; margin: auto">
<transition-group name="fade" mode="out-in" appear enter-active-class="animazione fadeIn"
<TransitionGroup name="fade" appear enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in lastsreg" :key="index" class="animated chip_shadow q-ma-sm"
v-ripple clickable @click="gotoPage(`/my/${user.username}`)">
@@ -91,7 +91,7 @@
}}</q-item-label>
</q-item-section>
</q-item>
</transition-group>
</TransitionGroup>
</div>
</q-card-section>
</q-card>
@@ -148,7 +148,7 @@
<q-card-section>
<div class="q-pa-md" style="max-width: 350px; margin: auto">
<q-list bordered>
<transition-group name="fade" mode="out-in" appear enter-active-class="animazione fadeIn"
<TransitionGroup name="fade" appear enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in lastsonline" :key="index" class="animated chip_shadow q-ma-sm"
clickable v-ripple @click="gotoPage(`/my/${user.username}`)">
@@ -183,7 +183,7 @@
</div>
</q-item-section>
</q-item>
</transition-group>
</TransitionGroup>
</q-list>
</div>
</q-card-section>
@@ -205,7 +205,7 @@
alla RETE Solidale di RISO.
</div>
<q-list bordered>
<transition-group name="fade" mode="out-in" appear enter-active-class="animazione fadeIn"
<TransitionGroup name="fade" appear enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in diffusorilist" :key="index" class="animated chip_shadow q-ma-sm"
clickable v-ripple @click="gotoPage(`/my/${user.username}`)">
@@ -244,7 +244,7 @@
</div>
</q-item-section>
</q-item>
</transition-group>
</TransitionGroup>
</q-list>
</div>
</q-card-section>
@@ -266,7 +266,7 @@
Rete di fiducia.
</div>
<q-list bordered>
<transition-group name="fade" mode="out-in" appear enter-active-class="animazione fadeIn"
<TransitionGroup name="fade" appear enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in strettelist" :key="index" class="animated chip_shadow q-ma-sm"
clickable v-ripple>
@@ -311,7 +311,7 @@
</q-avatar>
</q-item-section>
</q-item>
</transition-group>
</TransitionGroup>
</q-list>
</div>
</q-card-section>

View File

@@ -29,6 +29,10 @@ export default defineComponent({
const site = ref(globalStore.site)
const username_telegram_aportador = ref('')
const isLogged = computed(() => userStore.isLogged)
const isEmailVerified = computed(() => userStore.my.verified_email)
const telegVerificato = computed(() => userStore.my.profile.teleg_id > 0 && userStore.my.profile.teleg_id_old > 0)
function load() {
///
}
@@ -41,6 +45,9 @@ export default defineComponent({
tools,
site,
username_telegram_aportador,
isLogged,
isEmailVerified,
telegVerificato,
}
},
})

View File

@@ -5,11 +5,11 @@
>
<div
v-if="
tools.isLogged() &&
isLogged &&
(site.confpages?.enableRegMultiChoice || !site.confpages?.enabledRegNeedTelegram)
"
>
<CVerifyEmail v-if="tools.isLogged() && !tools.isEmailVerified() && !tools.TelegVerificato()">
<CVerifyEmail v-if="isLogged && !isEmailVerified && !telegVerificato">
</CVerifyEmail>
</div>

View File

@@ -531,8 +531,8 @@ export default defineComponent({
}, 100);
}
function logoutHandler() {
userStore.logout().then(() => {
async function logoutHandler() {
await userStore.logout().then(() => {
// $router.replace('/logout')
//
// setTimeout(() => {