Aggiunto messaggio nella registrazione, dicendo che occorre avere Telegram installato.

PASSARE TUTTI I _DOC e mettergli .lean() prima dello then()  -> velocizza le Query di Mongodb
"Floriterapia
costellazioni familiari
coach motivazionale
Tecniche Essene"
Inserimento Gruppi: anche il comune obbligatorio
Far comparire le ultime persone registrate
Mettere il controllo dell'abilitazione del BOT Telegram solo dopo che conosco il suo username, e cosi gli metto anche il contatto telegram.
risolto foto profilo di telegram che non si salvava in automatico
tolto il controllo della email
aggiunto msg se errore al server, installare altro browser.
This commit is contained in:
paoloar77
2022-03-03 20:31:47 +01:00
parent aaa67ae0aa
commit e244dd3a91
39 changed files with 640 additions and 144 deletions

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.3.3"
APP_VERSION="0.3.5"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.3.3"
APP_VERSION="0.3.5"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.3.3"
APP_VERSION="0.3.5"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="12"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.3.3"
APP_VERSION="0.3.5"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.3.3"
APP_VERSION="0.3.5"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -33,6 +33,7 @@
"autoprefixer": "^10.4.2",
"axios": "^0.26.0",
"bcryptjs": "^2.4.3",
"chart.js": "^3.7.1",
"core-js": "^3.21.0",
"crypto": "^1.0.1",
"date-fns": "^2.28.0",
@@ -57,6 +58,7 @@
"register-service-worker": "^1.7.2",
"vee-validate": "^4.5.8",
"vue": "^3.2.31",
"vue-chart-3": "^3.1.2",
"vue-class-component": "^8.0.0-rc.1",
"vue-country-code": "^1.1.3",
"vue-echarts": "^6.0.2",

View File

@@ -110,8 +110,6 @@ export const shared_consts = {
TABLES_PERM_CHANGE_FOR_USERS: ['myskills', 'mybachecas', 'mygoods'],
TABLES_VISU_LISTA_USER: ['myskills', 'mybachecas', 'mygoods', 'users'],
TABLES_VISU_IMG: ['myskills', 'mybachecas', 'mygoods', 'mygroups'],
TABLES_DIRECTORY_A_PARTE: ['mygroups'],

View File

@@ -1,11 +1,11 @@
<template>
<div v-if="numcol === 3" class="col-xs-4 col-sm-4 col-md-3 col-lg-2">
<div class="q-ma-sm">
<q-btn v-if="!small" class="mybox_3" :color="color" rounded push :to="to" v-bind="$attrs">
<q-btn v-if="!small" class="mybox_3" :color="color" rounded push :to="to" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 180)">
<q-icon class="q-ma-sm" :name="icon"/>
<div class="q-ma-sm my-text_3 text-cls no-wrap"><span v-html="label"></span></div>
</q-btn>
<q-btn v-if="small" class="mybox_small" :color="color" rounded push :to="to" v-bind="$attrs">
<q-btn v-if="small" class="mybox_small" :color="color" rounded push :to="to" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 180)">
<q-icon class="q-ma-sm" :name="icon" size="sm"/>
<div class="q-ma-xs my-text-small text-cls no-wrap"><span v-html="label"></span></div>
</q-btn>
@@ -13,11 +13,11 @@
</div>
<div v-else class="col-xs-6 col-sm-6 col-md-4 col-lg-3">
<div class="q-ma-sm">
<q-btn v-if="!small" class="mybox" :color="color" rounded push :to="to" v-bind="$attrs">
<q-btn v-if="!small" class="mybox" :color="color" rounded push :to="to" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 0)">
<q-icon class="q-ma-sm" size="3rem" :name="icon"/>
<div class="q-ma-sm text-h5 text-cls no-wrap"><span v-html="label"></span></div>
</q-btn>
<q-btn v-if="small" class="mybox_small" :color="color" rounded push :to="to" v-bind="$attrs">
<q-btn v-if="small" class="mybox_small" :color="color" rounded push :to="to" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 0)">
<q-icon class="q-ma-sm" :name="icon" size="sm"/>
<div class="q-ma-xs my-text-small text-cls no-wrap"><span v-html="label"></span></div>
</q-btn>

View File

@@ -4,7 +4,7 @@
show-value
:font-size="fontsize"
:value="myperc"
:size="getsize"
:size="getsize()"
:thickness="0.25"
:color="mycolor"
track-color="grey-3"

View File

@@ -6,25 +6,37 @@ import { useRouter } from 'vue-router'
import { useGlobalStore } from '../../store/globalStore'
import { useI18n } from '../../boot/i18n'
import { shared_consts } from '@src/common/shared_vuejs'
import { costanti, IMainCard } from '@store/Modules/costanti'
import { tools } from '@store/Modules/tools'
export default defineComponent({
name: 'CDashboard',
props: {
},
props: {},
setup(props) {
const userStore = useUserStore()
const $router = useRouter()
const globalStore = useGlobalStore()
const { t } = useI18n();
const { t } = useI18n()
const calcstat = computed(() => userStore.my.calcstat ? userStore.my.calcstat : {numUsersReg: 0, numMySkills: 0, numMyGoods: 0, numMyBachecas: 0} )
const calcstat = computed(() => userStore.my.calcstat ? userStore.my.calcstat : {
numUsersReg: 0,
numByTab: {},
})
const visustat = computed(() => {
// @ts-ignore
return costanti.MAINCARDS.filter((rec: IMainCard) => rec.visuonstat)
})
return {
userStore,
tools,
calcstat
calcstat,
shared_consts,
visustat,
}
},
})

View File

@@ -6,8 +6,13 @@
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numUsersReg }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Persone Iscritte</q-item-label>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{
calcstat.numUsersReg
}}
</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Persone
Iscritte
</q-item-label>
</q-item-section>
<q-item-section side>
@@ -23,110 +28,29 @@
</q-item>
</q-card>
</div>
<div class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_3" style="border-left: 1px solid #efefef;"
v-bind:class="{'border-top': $q.platform.is.mobile}">
<div v-for="(rec, index) of visustat" :class="`col-md-3 col-lg-3 col-sm-6 col-xs-6 text-` + rec.color"
style="border-left: 1px solid #efefef;" :key="index"
>
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numMyGoods }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Beni</q-item-label>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">
{{ calcstat.numByTab[rec.table] }}
</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">
{{ rec.title }}
</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="engineering" class="box_3" size="60px"></q-icon>
<q-icon :name="rec.icon" :class="`text-` + rec.color" size="60px"></q-icon>
</q-item-section>
</q-item>
<q-item class="q-py-xs" style="min-height: unset">
<q-item-section>
<div class="progress-base q-my-sm">
<div class="progress-bar-3" style="width:100%"></div>
</div>
</q-item-section>
</q-item>
</q-card>
</div>
<div class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_3" style="border-left: 1px solid #efefef;"
v-bind:class="{'border-top': $q.platform.is.mobile}">
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numMySkills }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Servizi</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="engineering" class="box_3" size="60px"></q-icon>
</q-item-section>
</q-item>
<q-item class="q-py-xs" style="min-height: unset">
<q-item-section>
<div class="progress-base q-my-sm">
<div class="progress-bar-3" style="width:100%"></div>
</div>
</q-item-section>
</q-item>
</q-card>
</div>
<div class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_3" style="border-left: 1px solid #efefef;"
v-bind:class="{'border-top': $q.platform.is.mobile}">
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numMyBachecas }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Eventi</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="engineering" class="box_3" size="60px"></q-icon>
</q-item-section>
</q-item>
<q-item class="q-py-xs" style="min-height: unset">
<q-item-section>
<div class="progress-base q-my-sm">
<div class="progress-bar-3" style="width:100%"></div>
</div>
</q-item-section>
</q-item>
</q-card>
</div>
<div v-if="true" class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_1">
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">{{ calcstat.numGroups }}</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Gruppi Creati</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="fas fa-users" class="box_1" size="60px"></q-icon>
</q-item-section>
</q-item>
<q-item class="q-py-xs" style="min-height: unset">
<q-item-section>
<div class="progress-base q-my-sm">
<div class="progress-bar-1" style="width:100%"></div>
</div>
</q-item-section>
</q-item>
</q-card>
</div>
<div v-if="false" class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_2" style="border-left: 1px solid #efefef;"
v-bind:class="{'border-top': $q.platform.is.mobile}">
<q-card class="no-shadow q-pa-sm">
<q-item class="q-pb-none q-pt-xs">
<q-item-section>
<q-item-label class="text-h4" style="font-weight: 500;letter-spacing: 3px;">0</q-item-label>
<q-item-label :class="!$q.dark.isActive? 'text-grey-7':'text-white'" style="letter-spacing: 1px;">Uscite</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="o_account_balance_wallet" class="box_2" size="60px"></q-icon>
</q-item-section>
</q-item>
<q-item class="q-py-xs" style="min-height: unset">
<q-item-section>
<div class="progress-base q-my-sm">
<div class="progress-bar-2" style="width:100%"></div>
<div class="progress-base" :style="tools.getbackgroundGradient(rec.color, 45)"></div>
</div>
</q-item-section>
</q-item>

View File

@@ -7,5 +7,6 @@
.errore{
font-size: 1rem;
color: grey;
color: black;
background-color: white;
}

View File

@@ -11,6 +11,9 @@
</template>
<span class="mybanner">Errore di Connessione al Server</span>
<p v-if="globalStore.serverMsgError" class="errore">{{globalStore.getMsgServerError()}}</p>
<p v-if="tools.isCurrentUrlSignUp() && globalStore.isErroreDispositivoServer()" class="errore">Se l'Errore persiste, significa che questo browser non riesce a collegarsi col Server.<br>
Soluzione: Provare ad installare un altro browser:<br>
👉🏻 Clicca per installare <a href="https://play.google.com/store/apps/details?id=com.opera.browser&hl=it&gl=IT">Opera per Android</a>. </p>
<q-btn
size="md"

View File

View File

@@ -0,0 +1,120 @@
import Vue, { computed, defineComponent, onMounted, ref } from 'vue'
import { tools } from '../../store/Modules/tools'
import { useUserStore } from '@store/UserStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore'
import { useI18n } from '@/boot/i18n'
import { useQuasar } from 'quasar'
import { Chart, ChartData, ChartOptions, registerables } from 'chart.js'
import { LineChart, useLineChart } from 'vue-chart-3'
Chart.register(...registerables)
export default defineComponent({
name: 'CLineChart',
components: { LineChart },
props: {
mydata: { required: false, default: [] },
title: { required: false, default: false },
sum: { required: false, default: false },
color: { required: false, default: 'red' },
bordercolor: { required: false, default: 'red' },
mycolors: { required: false, default: null },
offset: { required: false, default: 0 },
},
setup(props, { emit }) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
const { t } = useI18n()
const q = useQuasar()
const myarrlabel = ref(<any>[])
const myarrdata = ref(<any>[])
const myarrsum = ref(<any>[])
// @ts-ignore
const chartData = computed<ChartData<'line'>>(() => ({
labels: myarrlabel.value,
datasets: [
{
label: 'Totali',
data: myarrsum.value,
backgroundColor: tools.colourNameToHex('green'),
},
{
label: props.title,
data: myarrdata.value,
borderColor: tools.colourNameToHex('red'),
backgroundColor: tools.colourNameToHex(props.color),
fill: true,
},
],
}))
const options = computed<ChartOptions<'line'>>(() => ({
elements: {
line: {
tension: 0.4
}
},
interaction: {
intersect: false
},
}))
const { lineChartProps, lineChartRef } = useLineChart({
chartData,
options,
})
function mounted() {
myarrdata.value = []
myarrlabel.value = []
myarrsum.value = []
let somma = 0
if (props.sum)
somma = props.offset
let rec: any
let ind = 1
for (rec of props.mydata) {
if (props.sum) {
somma += rec.count
} else {
somma = rec.count
}
//myarrlabel.value.push(rec._id)
myarrlabel.value.push(ind)
myarrdata.value.push(rec.count)
myarrsum.value.push(somma)
ind++
}
}
function getoffset() {
return props.offset
}
onMounted(mounted)
return {
tools,
getoffset,
q,
options,
lineChartProps,
lineChartRef,
myarrdata,
myarrlabel,
}
},
})

View File

@@ -0,0 +1,19 @@
<template>
<div>
<LineChart v-bind="lineChartProps" />
<!--<DoughnutChart ref="doughnutRef" :chartData="objdata" :options="options" />-->
<!--<line-chart :width="tools.getwidthscale($q, 350, 400)+`px`" :title="title" :data="getmydata()" :offset="getoffset()"
:round="0" :colors="mycolors"></line-chart>
-->
</div>
</template>
<script lang="ts" src="./CLineChart.ts">
</script>
<style lang="scss" scoped>
@import './CLineChart.scss';
</style>

View File

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

View File

@@ -4,7 +4,7 @@ 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 { costanti, IMainCard } from '@store/Modules/costanti'
import { CBigBtn } from '@/components/CBigBtn'
@@ -22,11 +22,12 @@ export default defineComponent({
const showInfo = ref(false)
const cardsbig = computed(() => {
return costanti.MAINCARDS.filter((rec: any) => !rec.small)
// @ts-ignore
return costanti.MAINCARDS.filter((rec: IMainCard) => !rec.small && rec.visible)
})
const cardssmall = computed(() => {
return costanti.MAINCARDS.filter((rec: any) => rec.small)
return costanti.MAINCARDS.filter((rec: any) => rec.small && rec.visible)
})
return {

View File

@@ -85,6 +85,11 @@ export default defineComponent({
tupe: Boolean,
required: false,
default: false,
},
fieldtype: {
tupe: String,
required: false,
default: '',
}
},
components: { CMyPopupEdit },
@@ -141,7 +146,7 @@ export default defineComponent({
console.log('showandsel CMyFieldDb', row, col, newval)
if (newval !== valinitial)
setValDb($q, mykey.value, newval, col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value)
setValDb($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value)
}
function withBorder() {

View File

@@ -28,7 +28,7 @@
:field="mykey"
:subfield="mysubkey"
:mysubsubkey="mysubsubkey"
:type="col.fieldtype"
:type="fieldtype || col.fieldtype"
:serv="false"
:disable="disable"
:jointable="jointable"

View File

@@ -56,6 +56,11 @@ export default defineComponent({
required: false,
default: true,
},
need_Telegram: {
type: Boolean,
required: false,
default: false,
},
},
setup(props, { emit }) {
const $q = useQuasar()
@@ -289,6 +294,7 @@ export default defineComponent({
signup,
iamadult,
v$,
t,
allowSubmit,
myRuleEmail,
}

View File

@@ -4,6 +4,14 @@
<p>
<logo></logo>
<CTitleBanner :title="$t('pages.SignUp')"></CTitleBanner>
<q-banner
rounded
class="bg-warning text-black"
style="text-align: center;"
>
<span class="mybanner" v-html="t('pages.need_Telegram')"></span>
</q-banner>
</p>
</div>

View File

View File

@@ -0,0 +1,172 @@
import {
computed,
defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRef, toRefs, watch,
} from 'vue'
import { INotData } from '../../model/index'
import MixinBase from '@src/mixins/mixin-base'
import { CTitleBanner } from '@components'
import { CCardState } from '../CCardState'
import { CMyFieldRec } from '../CMyFieldRec'
import { CCardStat } from '../CCardStat'
import { CLineChart } from '@components'
// import { CGeoChart } from '@components'
// import { CListNationality } from '@components'
import { tools } from '@store/Modules/tools'
import { costanti } from '@costanti'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { useI18n } from '@/boot/i18n'
export default defineComponent({
name: 'CStatusReg',
props: {},
components: { CTitleBanner, CCardState, CCardStat, CLineChart, CMyFieldRec },
setup(props, { attrs, slots, emit }) {
const { t } = useI18n()
const globalStore = useGlobalStore()
const userStore = useUserStore()
const NUMSEC_TO_POLLING = ref(300)
const MAXNUM_POLLING = ref(10)
const myloadingload = ref(false)
const eseguipolling = ref(false)
const polling = ref(<any>null)
const numpolled = ref(0)
const datastat = ref(<any>{
num_reg: 0,
num_passeggeri: 0,
num_imbarcati: 0,
num_teleg_attivo: 0,
email_non_verif: 0,
num_teleg_pending: 0,
lastsreg: [],
checkuser: { verified_email: false }
})
const visustat = computed(() => {
return datastat.value.num_reg! > 0
})
const telegnonattivi = computed(() => {
return datastat.value.num_reg! - datastat.value.num_teleg_attivo!
})
const emailnonverif = computed(() => {
return datastat.value.email_non_verif
})
const lastsreg = computed(() => {
return datastat.value.lastsreg
})
function checkifpolling() {
if (userStore.my.profile) {
if (!tools.isUserOk() && tools.appid() === tools.IDAPP_RISO)
NUMSEC_TO_POLLING.value = 10
}
if (eseguipolling.value) {
clearInterval(polling.value)
polling.value = null
if (numpolled.value > 100) {
NUMSEC_TO_POLLING.value = 60 * 5
}
if (numpolled.value < MAXNUM_POLLING.value) {
if (!polling.value) {
polling.value = setInterval(() => {
load()
numpolled.value++
}, NUMSEC_TO_POLLING.value * 1000)
}
}
}
}
function beforeDestroy() {
clearInterval(polling.value)
}
function created() {
if (tools.isManager()) {
MAXNUM_POLLING.value = 100
}
load()
}
async function load() {
// console.log('load')
myloadingload.value = true
datastat.value = await globalStore.getStatSite()
// console.log('datastat.value.lastsreg')
// console.table(datastat.value.lastsreg)
// console.log('newsstate')
// console.table('GlobalStore.state.serv_settings', GlobalStore.state.serv_settings)
eseguipolling.value = true
// console.log('eseguipolling', eseguipolling)
myloadingload.value = false
if (userStore.my) {
if (datastat.value.checkuser) {
if (datastat.value.checkuser.verified_email && !userStore.my.verified_email) {
userStore.my.verified_email = true
riaggiorna()
}
if (userStore.my.profile && datastat.value.checkuser.profile) {
if ((userStore.my.profile.teleg_id! <= 0 && datastat.value.checkuser.profile.teleg_id > 0) ||
(userStore.my.profile.teleg_id! !== datastat.value.checkuser.profile.teleg_id!)) {
userStore.my.profile.teleg_id = datastat.value.checkuser.profile.teleg_id
riaggiorna()
}
if ((userStore.my.profile.teleg_checkcode! <= 0 && datastat.value.checkuser.profile.teleg_checkcode > 0) ||
(userStore.my.profile.teleg_checkcode !== datastat.value.checkuser.profile.teleg_checkcode)) {
userStore.my.profile.teleg_checkcode = datastat.value.checkuser.profile.teleg_checkcode
riaggiorna()
}
}
}
}
checkifpolling()
}
function riaggiorna() {
// clearInterval(polling)
// polling = null
checkifpolling()
}
function calcperc(val1: number, valmax: number) {
if (valmax > 0)
return (val1 / valmax * 100)
else
return 0
}
created()
onBeforeUnmount(beforeDestroy)
return {
calcperc,
riaggiorna,
visustat,
telegnonattivi,
emailnonverif,
lastsreg,
datastat,
tools,
costanti,
}
}
})

View File

@@ -0,0 +1,112 @@
<template>
<div>
<div v-if="visustat">
<CTitleBanner class="q-pa-xs" :title="$t('pages.status')" bgcolor="bg-primary" clcolor="text-white"
mystyle="" myclass="myshad" :canopen="true">
<div class="flex flex-center">
<CCardState :mytext="$t('pages.statusreg.reg')" :myval="datastat.num_reg"
:myperc="100"></CCardState>
<div class="q-pa-xs" v-if="datastat.num_part_accepted > 1">
<CCardStat :mytext="$t('stat.accepted')" :myval="datastat.num_part_accepted"></CCardStat>
<!--<CCardStat :mytext="$t('stat.modalita_pagamento')"
:myval="datastat.num_modalita_pagamento"></CCardStat>-->
<!--<CCardStat :mytext="$t('stat.requisiti')" :myval="datastat.num_requisiti"></CCardStat>-->
<!--<CCardStat :mytext="$t('stat.qualificati')" :myval="datastat.num_qualificati"></CCardStat>-->
<!--<CCardStat v-if="emailnonverif" :mytext="$t('stat.email_not_verif')" :myval="emailnonverif"
mycol="negative"></CCardStat>
<CCardStat v-if="telegnonattivi" :mytext="$t('stat.telegram_non_attivi')"
:myval="telegnonattivi"
mycol="negative"></CCardStat>
<CCardStat v-if="datastat.num_teleg_pending > 0" :mytext="$t('stat.telegram_pendenti')"
:myval="datastat.num_teleg_pending" mycol="negative"></CCardStat>-->
</div>
<div class="column animazione">
<div class="text-center">{{$t('pages.statusreg.newreg')}}</div>
<transition-group name="fade" mode="out-in"
appear
enter-active-class="animazione fadeIn"
leave-active-class="animazione fadeOut">
<q-item v-for="(user, index) in lastsreg" :key="index" class="q-mb-xs animated"
v-ripple>
<!--
<q-item-section avatar>
<q-avatar v-if="tools.geticon(user.profile.nationality)"
:class="tools.geticon(user.profile.nationality)">
</q-avatar>
<q-avatar v-else color="primary" text-color="white" class="text-center">
{{ tools.capitalize(user.profile.nationality) }}
</q-avatar>
</q-item-section>-->
<q-item-section>
<q-item-label lines="1">
<CMyFieldRec
table="users"
:id="user._id"
:rec="user"
field="username"
:canEdit="false"
:canModify="false"
:type="costanti.FieldType.username_chip">
</CMyFieldRec>
</q-item-label>
</q-item-section>
<q-item-section side>
<q-item-label>{{ tools.getstrDateTimeShort(user.date_reg) }}</q-item-label>
<q-chip outline color="green" text-color="white" icon-right="fas fa-user-plus"
size="xs"></q-chip>
</q-item-section>
</q-item>
</transition-group>
</div>
<!--<CGeoChart :mydata="datastat.arr_nations">
</CGeoChart>-->
<div class="row q-pa-sm text-center justify-center">
<!--
<div class="clBorderZoom">
<CListNationality :mydata="datastat.arr_nations">
</CListNationality>
</div>-->
<div class="clBorderTutor">
<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_daily')" color="blue" bordercolor="blue" :sum="true">
</CLineChart>
<!--<CLineChart :mydata="datastat.reg_weekly" :title="$t('stat.reg_weekly')" color="blue" bordercolor="green" :sum="true">
</CLineChart>-->
<!--<CLineChart :mydata="datastat.reg_daily" :title="$t('stat.reg_total')"
:offset="datastat.numreg_untilday" :sum="true"
:mycolors="['#0b0', '#666']">
</CLineChart>-->
</div>
</div>
</div>
</CTitleBanner>
</div>
</div>
</template>
<script lang="ts" src="./CStatusReg.ts">
</script>
<style lang="scss" scoped>
@import './CStatusReg.scss';
</style>

View File

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

View File

@@ -4,9 +4,9 @@
</CVerifyTelegram>
<CVerifyEmail v-if="!tools.isEmailVerified() && !tools.TelegVerificato()">
<!--<CVerifyEmail v-if="!tools.isEmailVerified() && !tools.TelegVerificato()">
</CVerifyEmail>
</CVerifyEmail>-->
<div v-if="tools.isTelegOk()" class="centeritems">
<q-banner inline-actions rounded class="bg-orange text-black">
<template v-slot:avatar>

View File

@@ -21,7 +21,7 @@
:href="tools.getLinkBotTelegram()" target="_blank"></q-btn>
<br>
</div>
<strong>{{ $t('components.authentication.telegram.ifclose', {botname: tools.getBotName() })}}</strong>
<strong v-if="!tools.TelegCode()">{{ $t('components.authentication.telegram.ifclose', {botname: tools.getBotName() })}}</strong>
<div class="q-my-sm">
<!--<q-img src="images/ayni_bot.jpg" class="" :alt="$t('ws.sitename')" style="height: 100px; width: 250px;">
</q-img>-->

View File

@@ -28,6 +28,8 @@ export * from './CTitle'
export * from './CTitleBanner'
export * from './Footer'
export * from './FormNewsletter'
export * from './CLineChart'
export * from './CStatusReg'
export * from './Header'
export * from './logo'
export * from './testpao'

View File

@@ -45,6 +45,7 @@ const msg_website_it = {
presentazione2: 'Presentazione',
invita: 'Invita Persone',
SignUp: 'Nuova Registrazione',
need_Telegram: 'Per poter utilizzare la Piattaforma occorre avere Telegram installato.<br><a href="https://play.google.com/store/apps/details?id=org.telegram.messenger" target="_blank">Clicca qui per scaricarlo</a>',
SignUpIscrizione: 'Diventa Socio CNM',
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
SignUp2: 'Registrazione',

View File

@@ -32,9 +32,7 @@ export interface IMyGroup {
export interface ICalcStat {
numUsersReg: number
numMySkills: number
numMyBachecas: number
numGroups: number
numByTab: {}
}
export interface IUserProfile {

View File

@@ -9,6 +9,7 @@ import { CDashboard } from '@/components/CDashboard'
import { CChartMap } from '@src/components/CChartMap'
import { Footer } from '@src/components/Footer'
import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CStatusReg } from '@/components/CStatusReg'
import { CCopyBtn } from '@/components/CCopyBtn'
import { CCheckIfIsLogged } from '@/components/CCheckIfIsLogged'
import { CMapsEsempio } from '@src/components/CMapsEsempio'
@@ -21,7 +22,7 @@ import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({
name: 'mainview',
components: { CSkill, CChartMap, CMapsEsempio, CDashboard, CUserNonVerif, CMainView, CCopyBtn, Footer, CCheckIfIsLogged },
components: { CSkill, CChartMap, CMapsEsempio, CDashboard, CUserNonVerif, CMainView, CCopyBtn, Footer, CCheckIfIsLogged, CStatusReg },
setup() {
const globalStore = useGlobalStore()
const userStore = useUserStore()

View File

@@ -38,6 +38,10 @@
</CCopyBtn>
<CStatusReg>
</CStatusReg>
<div>Versione: {{tools.getvers()}}</div>
</div>

View File

@@ -395,7 +395,6 @@ const msg_enUs = {
reflink: 'Links to share to your friends:',
linkzoom: 'Link to enter in Zoom',
page_title: 'Registrazione',
incorso: 'Registration please wait...',
made_gift: 'Donated',
note: 'Note',
incorso: 'Registrazione in corso...',
@@ -409,7 +408,6 @@ const msg_enUs = {
cellreg: 'Cellulare con cui ti eri registrato',
nationality: 'Nationality',
email_paypal: 'Email Paypal',
nationality: 'Paese di Nascita',
payeer_id: 'Payeer ID',
advcash_id: 'Advanced Cash Email',
revolut: 'Revolut',

View File

@@ -1,3 +1,15 @@
export interface IMainCard {
visible: boolean
title: string
to?: string
icon?: string
color: string
hint?: string
table: string
visuonstat?: boolean,
small?: boolean,
}
export const costanti = {
AdType: {
OFFRO: 1,
@@ -19,83 +31,112 @@ export const costanti = {
MAINCARDS: [
{
visible: true,
title: ' Beni ',
to: '/goods',
icon: 'fas fa-tshirt',
color: 'indigo',
color: 'indigo-6',
hint: '',
table: 'mygoods',
visuonstat: true,
small: false,
},
{
visible: true,
title: 'Servizi',
to: '/services',
icon: 'fas fa-house-user',
color: 'red',
color: 'red-6',
hint: '',
table: 'myskills',
visuonstat: true,
small: false,
},
{
visible: true,
title: 'Mobilità',
to: '/places',
icon: 'fas fa-taxi',
color: 'lime-7',
color: 'lime-6',
textcolor: '',
hint: '',
disable: true,
small: false,
},
{
visible: true,
title: 'Scuola',
to: '/school',
icon: 'fas fa-book-open',
color: 'orange',
color: 'orange-6',
hint: '',
disable: true,
small: false,
},
{
visible: true,
title: 'Eventi',
to: '/events',
icon: 'event',
color: 'green',
color: 'green-6',
hint: 'eventi, last minute, offerte di lavoro',
disable: false,
table: 'mybachecas',
visuonstat: true,
small: false,
},
{
visible: true,
title: 'Luoghi',
to: '/places',
icon: 'fas fa-map-marker-alt',
color: 'blue',
color: 'blue-6',
hint: '',
disable: true,
small: false,
},
{
visible: true,
title: 'Tue&nbsp;Idee',
to: '/ideas',
icon: 'fas fa-lightbulb',
color: 'red-7',
color: 'red-6',
textcolor: '',
hint: '',
disable: true,
small: true,
},
{
visible: true,
title: 'Help',
to: '/help',
icon: 'fas fa-users',
color: 'green-7',
color: 'green-6',
hint: '',
disable: true,
small: true,
},
{
visible: true,
title: 'Social',
to: '/socialising',
icon: 'fas fa-users',
color: 'blue-7',
color: 'blue-6',
hint: '',
disable: true,
small: true,
},
{
visible: false,
title: 'Gruppi',
to: '',
icon: 'fas fa-users',
color: 'blue-6',
hint: '',
disable: true,
small: true,
visuonstat: true,
},
],
BINARY_CHECK: 1,

View File

@@ -4252,6 +4252,9 @@ export const tools = {
'black': '#000000',
'blanchedalmond': '#ffebcd',
'blue': '#0000ff',
'blue-3': '#90caf9',
'blue-4': '#64b5f6',
'blue-6': '#2196f3',
'blueviolet': '#8a2be2',
'brown': '#a52a2a',
'burlywood': '#deb887',
@@ -4294,10 +4297,16 @@ export const tools = {
'goldenrod': '#daa520',
'gray': '#808080',
'green': '#008000',
'green-3': '#a5d6a7',
'green-4': '#81c784',
'green-6': '#4caf50',
'greenyellow': '#adff2f',
'honeydew': '#f0fff0',
'hotpink': '#ff69b4',
'indianred ': '#cd5c5c',
'indigo-3': '#9fa8da',
'indigo-4': '#7986cb',
'indigo-6': '#3f51b5',
'indigo': '#4b0082',
'ivory': '#fffff0',
'khaki': '#f0e68c',
@@ -4319,6 +4328,9 @@ export const tools = {
'lightsteelblue': '#b0c4de',
'lightyellow': '#ffffe0',
'lime': '#00ff00',
'lime-3': '#e6ee9c',
'lime-4': '#dce775',
'lime-6': '#cddc39',
'limegreen': '#32cd32',
'linen': '#faf0e6',
'magenta': '#ff00ff',
@@ -4342,6 +4354,9 @@ export const tools = {
'olive': '#808000',
'olivedrab': '#6b8e23',
'orange': '#ffa500',
'orange-3': '#ffcc80',
'orange-4': '#ffb74d',
'orange-6': '#ff9800',
'orangered': '#ff4500',
'orchid': '#da70d6',
'palegoldenrod': '#eee8aa',
@@ -4357,6 +4372,9 @@ export const tools = {
'purple': '#800080',
'rebeccapurple': '#663399',
'red': '#ff0000',
'red-3': '#ef9a9a',
'red-4': '#e57373',
'red-6': '#f44336',
'rosybrown': '#bc8f8f',
'royalblue': '#4169e1',
'saddlebrown': '#8b4513',
@@ -5044,7 +5062,7 @@ export const tools = {
let ris = mydef
if (arrtable.includes(table)) {
ris =tools.getCookie(tools.COOK_SEARCH + table, mydef)
ris = tools.getCookie(tools.COOK_SEARCH + table, mydef)
} else if (arrmultisel_tab.includes(table)) {
const rec = arrmultisel.find((rec) => rec.table === table)
if (rec) {
@@ -5052,7 +5070,7 @@ export const tools = {
}
}
if (ris.toString() === costanti.FILTER_TUTTI.toString()){
if (ris.toString() === costanti.FILTER_TUTTI.toString()) {
ris = ''
}
@@ -5227,6 +5245,25 @@ export const tools = {
globalStore.rightDrawerOpen = true
},
getbackgroundGradient(color: string, degree: number) {
const mycol = tools.colourNameToHex(color)
const arrcol = color.split('-')
let newcol = arrcol[0] + '-4'
const mycolchiaro = tools.colourNameToHex(newcol)
return 'background: ' + mycol +
' background: -webkit-linear-gradient('+degree+'deg, ' + mycol + ', ' + mycolchiaro + ') !important; ' +
' background: linear-gradient('+degree+'deg, ' + mycol + ', ' + mycolchiaro + ') !important;'
},
getCurrentUrl(){
return window.location.pathname
},
isCurrentUrlSignUp(){
return window.location.pathname.indexOf('signup') >= 0
},
// getLocale() {
// if (navigator.languages && navigator.languages.length > 0) {

View File

@@ -908,6 +908,10 @@ export const useGlobalStore = defineStore('GlobalStore', {
})
},
isErroreDispositivoServer() {
return this.serverMsgError.code === -2
},
async saveSubRec(mydata: any) {
// console.log('saveTable', mydata)
const userStore = useUserStore()
@@ -1464,11 +1468,11 @@ export const useGlobalStore = defineStore('GlobalStore', {
return Api.SendReq('/site/load', 'POST', paramquery)
.then((res) => {
console.log('res', res)
// console.log('datastat', res)
this.datastat = res.data.datastat
return this.datastat
}).catch((error) => {
return null
return {}
})
},

View File

@@ -1,6 +1,6 @@
<template>
<q-page padding class="signup">
<CSignUp :showcell="false" :showaportador="true" :show_namesurname="false">
<CSignUp :showcell="false" :showaportador="true" :show_namesurname="false" :need_Telegram="true">
</CSignUp>
</q-page>

View File

@@ -2182,7 +2182,7 @@
dependencies:
"@vue/shared" "3.2.31"
"@vue/runtime-core@3.2.31":
"@vue/runtime-core@3.2.31", "@vue/runtime-core@latest":
version "3.2.31"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.31.tgz#9d284c382f5f981b7a7b5971052a1dc4ef39ac7a"
integrity sha512-Kcog5XmSY7VHFEMuk4+Gap8gUssYMZ2+w+cmGI6OpZWYOEIcbE0TPzzPHi+8XTzAgx1w/ZxDFcXhZeXN5eKWsA==
@@ -2190,7 +2190,7 @@
"@vue/reactivity" "3.2.31"
"@vue/shared" "3.2.31"
"@vue/runtime-dom@3.2.31":
"@vue/runtime-dom@3.2.31", "@vue/runtime-dom@latest":
version "3.2.31"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.31.tgz#79ce01817cb3caf2c9d923f669b738d2d7953eff"
integrity sha512-N+o0sICVLScUjfLG7u9u5XCjvmsexAiPt17GNnaWHJUfsKed5e85/A3SWgKxzlxx2SW/Hw7RQxzxbXez9PtY3g==
@@ -3503,6 +3503,11 @@ chardet@^0.7.0:
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
chart.js@^3.7.1:
version "3.7.1"
resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-3.7.1.tgz#0516f690c6a8680c6c707e31a4c1807a6f400ada"
integrity sha512-8knRegQLFnPQAheZV8MjxIXc5gQEfDFD897BJgv/klO/vtIyFFmgMXrNfgrXpbTr/XbTturxRgxIXx/Y+ASJBA==
chokidar@3.5.3, "chokidar@>=3.0.0 <4.0.0", chokidar@^3.4.2, chokidar@^3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
@@ -4337,6 +4342,11 @@ csstype@^2.6.8:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.19.tgz#feeb5aae89020bb389e1f63669a5ed490e391caa"
integrity sha512-ZVxXaNy28/k3kJg0Fou5MiYpp88j7H9hLZp8PDC3jV0WFjfH5E9xHb56L0W59cPbKbcHXeP4qyT8PrHp8t6LcQ==
csstype@latest:
version "3.0.10"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5"
integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==
custom-event@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.0.tgz#2e4628be19dc4b214b5c02630c5971e811618062"
@@ -8003,6 +8013,11 @@ locate-path@^6.0.0:
dependencies:
p-locate "^5.0.0"
lodash-es@latest:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
lodash._reinterpolate@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
@@ -12522,6 +12537,16 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
vue-chart-3@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/vue-chart-3/-/vue-chart-3-3.1.2.tgz#63707fa971e6a51b92d2f5bb42c63c07bcd70924"
integrity sha512-5bpL/kGDnKSyU9PtYGM98T3vy52i7oowfOChtMw+FIzRczx1BMAThVvZGp5k+jRygoXXLH6w1A7ZP31xGPj5ow==
dependencies:
"@vue/runtime-core" latest
"@vue/runtime-dom" latest
csstype latest
lodash-es latest
vue-class-component@^6.0.0, vue-class-component@^6.2.0:
version "6.3.2"
resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-6.3.2.tgz#e6037e84d1df2af3bde4f455e50ca1b9eec02be6"
@@ -12573,7 +12598,7 @@ vue-hot-reload-api@^2.0.1:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
vue-i18n@^9.2.0-beta.26:
vue-i18n@^9.2.0-beta.30:
version "9.2.0-beta.30"
resolved "https://registry.yarnpkg.com/vue-i18n/-/vue-i18n-9.2.0-beta.30.tgz#e58effd4e1dcd328c3c40ad945aaf914146237c6"
integrity sha512-5DqrgG9ffgC7j3RRAfViC0WUcdz0C3Ix1qq1AyQItpF7UkSB6iSJGEjBG6KdspbRQq/8t1YzDx4JRXbL05l6ow==