- fix: se salvavo un record 'settable' e non era completo con tutti i campi, andava a troncare gli altri precedentemente inseriti

- ordinamento Circuiti per stato e numiscritti e descr
This commit is contained in:
Surya Paolo
2023-03-05 22:04:28 +01:00
parent 3f808189e3
commit 7a9689125b
7 changed files with 92 additions and 56 deletions

View File

@@ -1042,6 +1042,7 @@ export default defineComponent({
mycities: 1, mycities: 1,
sector: 1, sector: 1,
recCatGrp: 1, recCatGrp: 1,
} }
}, },
lookup3: { lookup3: {

View File

@@ -17,8 +17,10 @@ import { useCircuitStore } from '@store/CircuitStore'
export default defineComponent({ export default defineComponent({
name: 'CMyProfileTutorial', name: 'CMyProfileTutorial',
components: { CSendCoins, CSaldo, CUserInfoAccount, components: {
CMySelectCity, CMyFieldRec, CMySelect }, CSendCoins, CSaldo, CUserInfoAccount,
CMySelectCity, CMyFieldRec, CMySelect
},
emits: ['setCmd'], emits: ['setCmd'],
props: { props: {
mycontact: { mycontact: {
@@ -43,7 +45,7 @@ export default defineComponent({
const $route = useRoute() const $route = useRoute()
const showAccountInfo = ref(false) const showAccountInfo = ref(false)
const slide = ref('1') const slidestep = ref('1')
const username = ref('') const username = ref('')
const showsendCoinTo = ref(false) const showsendCoinTo = ref(false)
@@ -51,6 +53,25 @@ export default defineComponent({
const contact = ref(<IUserFields | null>null) const contact = ref(<IUserFields | null>null)
const circuit = ref(<ICircuit | null | undefined>null) const circuit = ref(<ICircuit | null | undefined>null)
const arrStep = [
{
label: t('tutorial.step_residence_title'),
checkOk: function () { return contact.value ? !!contact.value.profile.resid_province : false },
step: '1',
icon: 'house'
}
]
const numstep = computed(() => arrStep.length)
const progressStep = computed(() => {
let prStep = 0
return prStep / numstep.value
})
const progressLabel = computed(() => (progressStep.value * 100).toFixed(2) + '%')
watch(() => props.mycontact, (newval, oldval) => { watch(() => props.mycontact, (newval, oldval) => {
console.log('watch: mycontact') console.log('watch: mycontact')
mounted() mounted()
@@ -87,17 +108,21 @@ export default defineComponent({
emit('setCmd', $q, cmd, myusername, value, dest) emit('setCmd', $q, cmd, myusername, value, dest)
} }
function getLabelByStatusStep(step: string) {
let mystr = ''
return mystr
}
const checkifDisabled = computed(() => { const checkifDisabled = computed(() => {
let ret = true let ret = true
if (slide.value === '1') { let mystep = parseInt(slidestep.value)
// Invitante + Email if (mystep > 0) {
} else if (slide.value === '2') { return !arrStep[mystep - 1].checkOk()
// Username } else {
} else if (slide.value === '3') { return false
// Password
} }
return ret
}) })
onMounted(mounted) onMounted(mounted)
@@ -114,7 +139,10 @@ export default defineComponent({
showsendCoinTo, showsendCoinTo,
circuit, circuit,
showAccountInfo, showAccountInfo,
slide, slidestep,
numstep,
progressLabel,
arrStep,
} }
}, },
}) })

View File

@@ -1,22 +1,42 @@
<template> <template>
<div v-if="contact"> <div v-if="contact">
<div class="q-gutter-md"> <div class="text-center bg-green text-white text-h6">
{{ $t('tutorial.title') }} -
<span class="text-h7"
>({{
$t('tutorial.step', { step: slidestep, numstep: numstep })
}})</span
>
</div>
<q-linear-progress size="25px" :value="progressStep" color="accent">
<div class="absolute-full flex flex-center">
<q-badge color="white" text-color="accent" :label="progressLabel1" />
</div>
</q-linear-progress>
<div class="q-gutter-sm">
<q-carousel <q-carousel
v-model="slide" ref="carousel"
v-model="slidestep"
transition-prev="slide-right" transition-prev="slide-right"
transition-next="slide-left" transition-next="slide-left"
swipeable swipeable
animated animated
control-color="white" control-color="white"
navigation
padding padding
arrows arrows
height="200px" height="250px"
class="text-white shadow-1 rounded-borders" class="bg-blue text-white shadow-1 rounded-borders"
> >
<q-carousel-slide name="1" class="column no-wrap flex-center"> <q-carousel-slide
<q-icon name="house" size="56px" /> v-for="(recstep, index) in arrStep"
<div class="q-mt-sm text-center"> :key="index"
:name="recstep.step"
class="column no-wrap flex-center"
>
<q-icon :name="recstep.icon" size="36px" />
<div class="q-mt-sm text-center"></div>
<div v-if="recstep.step === '1'" class="q-mt-sm text-center">
<CMySelectCity <CMySelectCity
:label="$t('reg.resid_province')" :label="$t('reg.resid_province')"
table="users" table="users"
@@ -32,18 +52,7 @@
</CMySelectCity> </CMySelectCity>
</div> </div>
</q-carousel-slide> </q-carousel-slide>
<q-carousel-slide name="2" class="column no-wrap flex-center">
<q-icon name="live_tv" size="56px" />
<div class="q-mt-md text-center"></div>
</q-carousel-slide>
<q-carousel-slide name="3" class="column no-wrap flex-center">
<q-icon name="layers" size="56px" />
<div class="q-mt-md text-center"></div>
</q-carousel-slide>
<q-carousel-slide name="4" class="column no-wrap flex-center">
<q-icon name="terrain" size="56px" />
<div class="q-mt-md text-center"></div>
</q-carousel-slide>
<template v-slot:control> <template v-slot:control>
<q-carousel-control <q-carousel-control
position="bottom-right" position="bottom-right"
@@ -51,17 +60,15 @@
class="q-gutter-xs" class="q-gutter-xs"
> >
<q-btn <q-btn
v-if="slide !== '1'" v-if="slidestep !== '1'"
push push
text-color="black"
icon="arrow_left" icon="arrow_left"
:label="$t('dialog.indietro')" :label="$t('dialog.indietro')"
@click="$refs.carousel.previous()" @click="$refs.carousel.previous()"
/> />
<q-btn <q-btn
v-if="slide !== '4'" v-if="slidestep !== '4'"
push push
color="primary"
icon="arrow_right" icon="arrow_right"
:label="$t('dialog.avanti')" :label="$t('dialog.avanti')"
:disabled="checkifDisabled" :disabled="checkifDisabled"
@@ -73,7 +80,7 @@
<div class="row justify-center"> <div class="row justify-center">
<q-btn-toggle <q-btn-toggle
glossy glossy
v-model="slide" v-model="slidestep"
:options="[ :options="[
{ label: '1', value: '1' }, { label: '1', value: '1' },
{ label: 2, value: '2' }, { label: 2, value: '2' },

View File

@@ -24,7 +24,6 @@
:input-class="myclass" :input-class="myclass"
:options="valori" :options="valori"
:option-value="optval" :option-value="optval"
options-selected-class="text-deep-blue"
:class="myclass ? myclass : 'combowidth'" :class="myclass ? myclass : 'combowidth'"
style="min-width: 250px !important" style="min-width: 250px !important"
> >
@@ -91,7 +90,6 @@
map-options map-options
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'" :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
@filter="filterFn" @filter="filterFn"
options-selected-class="text-deep-blue"
v-bind="$attrs" v-bind="$attrs"
> >
<template v-if="getIcon()" v-slot:prepend> <template v-if="getIcon()" v-slot:prepend>
@@ -133,11 +131,12 @@
emit-value emit-value
stack-label stack-label
:options="valori" :options="valori"
options-selected-class="text-deep-blue"
:option-value="optval" :option-value="optval"
:option-label="optlab" :option-label="optlab"
:dense="dense"> :dense="dense">
<!--options-selected-class="text-deep-blue"-->
<template v-if="getIcon()" v-slot:prepend> <template v-if="getIcon()" v-slot:prepend>
<q-icon :name="getIcon()" /> <q-icon :name="getIcon()" />
</template> </template>
@@ -193,7 +192,6 @@
@new-value="newvaluefuncfirst" @new-value="newvaluefuncfirst"
emit-value emit-value
input-debounce="0" input-debounce="0"
options-selected-class="text-deep-blue"
map-options map-options
v-bind="$attrs" v-bind="$attrs"
:class="myclass ? myclass : 'combowidth'"> :class="myclass ? myclass : 'combowidth'">

View File

@@ -6,17 +6,12 @@
v-model="myvalue" v-model="myvalue"
:pickup="false" :pickup="false"
:addnone="true" :addnone="true"
:dense="false"
:tablesel="table" :tablesel="table"
:myclass="myclass" :myclass="myclass"
:optval="fieldsTable.getKeyByTable(jointable)" :optval="fieldsTable.getKeyByTable(jointable)"
:optlab="fieldsTable.getLabelByTable(jointable)" :optlab="fieldsTable.getLabelByTable(jointable)"
:options=" :options="globalStore.getTableJoinByName(jointable, false, false, '')"
globalStore.getTableJoinByName(
jointable,
false,
false,
''
)"
:useinput="false" :useinput="false"
@update:value="changevalRec" @update:value="changevalRec"
> >

View File

@@ -4,9 +4,9 @@
<p class="text-subtitle1">Privacy Policy di {{url}}</p> <p class="text-subtitle1">Privacy Policy di {{url}}</p>
<p class="text-subtitle1">Informativa sul trattamento dei dati personali ai sensi dellart. 13 del <p class="text-subtitle1">Informativa sul trattamento dei dati personali ai sensi dellart. 13 del
Regolamento Regolamento
(UE) n. 2016/679</p> (UE) n. 2003 n.196</p>
<p>Ai sensi dellart. 13 del Regolamento (UE) n. 2016/679, anche denominato General Data Protection <p>Ai sensi dellart. 13 del Regolamento (UE) n. 2003 n.196, anche denominato General Data Protection
Regulation Regulation
(di seguito il GDPR), {{SiteName}} La informa che i Suoi dati personali (di seguito i Dati), (di seguito il GDPR), {{SiteName}} La informa che i Suoi dati personali (di seguito i Dati),
saranno trattati nel rispetto di quanto previsto dal GDPR e di ogni normativa applicabile in riferimento saranno trattati nel rispetto di quanto previsto dal GDPR e di ogni normativa applicabile in riferimento
@@ -114,9 +114,9 @@
<div v-else-if="toolsext.isLang('fr')"> <div v-else-if="toolsext.isLang('fr')">
<p class="text-subtitle1">Politique de confidentialité de {{url}}</p> <p class="text-subtitle1">Politique de confidentialité de {{url}}</p>
<p class="text-subtitle1">Information sur le traitement des données personnelles conformément à l'article 13 du <p class="text-subtitle1">Information sur le traitement des données personnelles conformément à l'article 13 du
Code civil italien Règlement (UE) n° 2016/679.</p> Code civil italien Règlement (UE) n° 2003 n.196.</p>
<p>En vertu de l'article 13 du règlement (UE) n° 2016/679, également appelé protection générale des données <p>En vertu de l'article 13 du règlement (UE) n° 2003 n.196, également appelé protection générale des données
Règlement Règlement
(ci-après le "GDPR"), {{SiteName}}} Nous vous informons que vos données personnelles (ci-après dénommées les (ci-après le "GDPR"), {{SiteName}}} Nous vous informons que vos données personnelles (ci-après dénommées les
"Données"), "Données"),
@@ -224,9 +224,9 @@
<div v-else-if="toolsext.isLang('es')"> <div v-else-if="toolsext.isLang('es')">
<p class="text-subtitle1">Política de privacidad de {{url}}</p> <p class="text-subtitle1">Política de privacidad de {{url}}</p>
<p class="text-subtitle1">Información sobre el procesamiento de datos personales de conformidad con el art. <p class="text-subtitle1">Información sobre el procesamiento de datos personales de conformidad con el art.
13 del Reglamento (UE) n. 2016/679</p> 13 del Reglamento (UE) n. 2003 n.196</p>
<p>Según el art. 13 del Reglamento (UE) n. 2016/679, también llamado Reglamento general de protección de <p>Según el art. 13 del Reglamento (UE) n. 2003 n.196, también llamado Reglamento general de protección de
datos (de seguido del "RGPD"), {{SiteName}} le informa que sus datos personales (en adelante, los datos (de seguido del "RGPD"), {{SiteName}} le informa que sus datos personales (en adelante, los
"Datos"), será tratado de conformidad con las disposiciones del GDPR y cualquier legislación "Datos"), será tratado de conformidad con las disposiciones del GDPR y cualquier legislación
aplicable con referencia a procesamiento de datos personales de acuerdo con la siguiente aplicable con referencia a procesamiento de datos personales de acuerdo con la siguiente
@@ -353,9 +353,9 @@
<p class="text-subtitle1">Privacy Policy {{url}}</p> <p class="text-subtitle1">Privacy Policy {{url}}</p>
<p class="text-subtitle1">Information on the processing of personal data in accordance with art. 13 of the <p class="text-subtitle1">Information on the processing of personal data in accordance with art. 13 of the
Regulation Regulation
(EU) No 2016/679</p> (EU) No 2003 n.196</p>
<p>In accordance with art. 13 of Regulation (EU) no. 2016/679, also called General Data Protection <p>In accordance with art. 13 of Regulation (EU) no. 2003 n.196, also called General Data Protection
Regulation Regulation
(hereinafter the "GDPR"), {{SiteName}}} informs you that your personal data (hereinafter the "Data"), (hereinafter the "GDPR"), {{SiteName}}} informs you that your personal data (hereinafter the "Data"),
will be treated in compliance with the provisions of the GDPR and any applicable legislation in reference to will be treated in compliance with the provisions of the GDPR and any applicable legislation in reference to

View File

@@ -1437,6 +1437,13 @@ const msg_it = {
people: 'Inv.', people: 'Inv.',
peoplelegend: 'Numero d\'Invitati', peoplelegend: 'Numero d\'Invitati',
}, },
tutorial: {
title: 'Completa il tuo Profilo',
step: 'passo {step} su {numstep}',
step_residence_title: 'Provincia',
},
}, },
}; };