- aggiunto il Comune di Residenza alla REgistrazione e al Tutorial

This commit is contained in:
Surya Paolo
2025-11-27 00:48:53 +01:00
parent 145327a6ca
commit 05bf8ad495
25 changed files with 392 additions and 194 deletions

View File

@@ -236,6 +236,7 @@ export const shared_consts = {
FILTER_SENZA_NOTE: 1073741824,
FILTER_DA_CONTATTARE: 2147483648,
FILTER_FACILITATORE: 4294967296,
FILTER_USER_COMUNE: 8589934592,
OPTIONS_SEARCH_ONLY_FULL_WORDS: 1,
OPTIONS_SEARCH_USER_ONLY_FULL_WORDS: 2,

View File

@@ -1163,6 +1163,10 @@ export default defineComponent({
filtercustom.push({
'profile.resid_province': { $exists: true, $ne: '' },
});
} else if (myitemsingle === shared_consts.FILTER_USER_COMUNE) {
filtercustom.push({
'profile.resid_str_comune': { $exists: true, $ne: '' },
});
} else if (myitemsingle === shared_consts.FILTER_USER_TELEGRAM_BLOCKED) {
filtercustom.push({ 'profile.teleg_id_old': { $gt: 1 } });
} else if (myitemsingle === shared_consts.FILTER_NOTE) {

View File

@@ -629,6 +629,7 @@
v-else
:table="tablesel"
:prop_myrec="row"
:index-row="indexrow"
@cmdext="cmdExt"
:editOn="editOn"
:margin_right="margin_right"

View File

@@ -563,12 +563,10 @@ $gradient-hover: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118,
}
.q-btn {
background: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(8px);
transition: all $transition-speed ease;
&:hover {
background: rgba(0, 0, 0, 0.7);
transform: scale(1.1) rotate(90deg);
}
}
@@ -707,6 +705,14 @@ $gradient-hover: linear-gradient(135deg, rgba(102, 126, 234, 0.05) 0%, rgba(118,
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
// Mantieni i colori Quasar per i chip colorati
&.text-white,
&.q-chip--colored {
:deep(.q-chip__content) {
color: inherit;
}
}
}
// ========================================

View File

@@ -445,21 +445,21 @@
/>
</q-item-section>
<q-item-section>
<q-item-label>
<span
v-for="(recstatus, index) in myrec.idStatusSkill"
:key="index"
>
<q-chip
dense
:color="globalStore.getColByStatusSkills(recstatus)"
text-color="white"
<q-item-section>
<q-item-label>
<span
v-for="(recstatus, index) in myrec.idStatusSkill"
:key="index"
>
{{ globalStore.getStatusSkillById(recstatus) }}
</q-chip>
</span>
</q-item-label>
<q-chip
dense
:color="globalStore.getColByStatusSkills(recstatus)"
text-color="white"
>
{{ globalStore.getStatusSkillById(recstatus) }}
</q-chip>
</span>
</q-item-label>
</q-item-section>
</q-item>
<div v-if="!isSmall">
@@ -511,7 +511,7 @@
text-color="white"
dense
>
<span class="cal__quota-content">{{
<span>{{
getSectorByRec(myrec)[0].descr
}}</span>
</q-chip>
@@ -526,7 +526,7 @@
color="blue"
text-color="white"
>
<span class="cal__quota-content">{{
<span>{{
getRecGoodSkillByRec(myrec)[0].descr
}}</span>
</q-chip>

View File

@@ -2,9 +2,12 @@
// MODERN FIELD DB - COMPACT & PROFESSIONAL
// ========================================
.modern-field-container-con-flex {
display: flex;
}
// Container principale
.modern-field-container {
display: flex;
align-items: stretch;
gap: 12px;
padding: 8px 12px;
@@ -111,10 +114,13 @@
}
}
// Valore campo (chip/display)
.modern-field-value {
.con-flex {
flex: 1;
display: flex;
}
// Valore campo (chip/display)
.modern-field-value {
align-items: center;
padding: 8px 12px;
min-height: 48px;
@@ -221,6 +227,7 @@
0% {
transform: translateX(-100%) rotate(45deg);
}
100% {
transform: translateX(100%) rotate(45deg);
}
@@ -280,4 +287,4 @@
display: flex;
flex-grow: 1;
}
}
}

View File

@@ -18,7 +18,8 @@ export default defineComponent({
props: {
title: {
type: String,
required: true,
required: false,
default: '',
},
hint: {
type: String,
@@ -125,6 +126,11 @@ export default defineComponent({
required: false,
default: '',
},
myclass: {
type: String,
required: false,
default: '',
},
idmain: {
type: String,
required: false,
@@ -140,6 +146,16 @@ export default defineComponent({
required: false,
default: false,
},
isInModif: {
type: Boolean,
required: false,
default: false,
},
nosaveToDb: {
type: Boolean,
required: false,
default: false,
},
notAllowAtChar: { // @
type: Boolean,
required: false,
@@ -163,7 +179,8 @@ export default defineComponent({
console.log('showandsave CMyFieldDb:', newval)
console.log('subkey', props.mysubkey, 'sskey', props.mysubsubkey)
await tools.saveInDBForTypes($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField);
if (!props.nosaveToDb)
await tools.saveInDBForTypes($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField);
emit('savedInDb')
}

View File

@@ -1,5 +1,9 @@
<template>
<div class="modern-field-container" :class="{ disabled: disable, readonly: !canModify && !canEdit }">
<div class="modern-field-container" :class="{
disabled: disable,
readonly: !canModify,
'modern-field-container-con-flex': !!title
}">
<!-- Label/Titolo -->
<div v-if="title" class="modern-field-label">
<div class="label-content">
@@ -9,7 +13,7 @@
</div>
<!-- Valore/Edit -->
<div class="modern-field-value modern-popup-wrapper">
<div class="modern-field-value modern-popup-wrapper" :class="{ 'con-flex': !!title }">
<CMyPopupEdit
debounce="1000"
:fielddb="true"
@@ -18,7 +22,9 @@
:isrec="!!rec"
:table="table"
:hint="hint"
:isInModif="isInModif"
:title="title"
:myclass="myclass"
:field="mykey"
:filter="filter"
:subfield="mysubkey"
@@ -41,6 +47,7 @@
:pickup="pickup"
v-model:row="row"
minuteinterval="1"
:nosaveToDb="nosaveToDb"
@showandsave="showandsave"
@save="save"
:notAllowAtChar="notAllowAtChar"

View File

@@ -14,7 +14,7 @@ import MixinBase from '@src/mixins/mixin-base'
export default defineComponent({
name: 'CMyFieldRec',
emits: ['save', 'update:rec', 'update_col'],
emits: ['save', 'update:rec', 'update_col', 'savedInDb'],
props: {
table: {
type: String,
@@ -59,6 +59,16 @@ export default defineComponent({
required: false,
default: false,
},
mysubkey_tosee: {
type: String,
required: false,
default: '',
},
fieldsel_tosee: {
type: String,
required: false,
default: '',
},
disable: {
type: Boolean,
required: false,
@@ -180,7 +190,7 @@ export default defineComponent({
}
function showandsave(row: any, col: any, newval: any, valinitial: any) {
async function showandsave(row: any, col: any, newval: any, valinitial: any) {
console.log('showandsave CMyFieldrec', row, col, newval)
emit('save', props.rec, newval, col)
@@ -189,12 +199,14 @@ export default defineComponent({
if (newval !== valinitial) {
if (props.id) {
tools.saveInDBForTypes($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value, props.specialField, row)
await tools.saveInDBForTypes($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value, props.specialField, row)
} else {
}
}
emit('savedInDb')
}
function withBorder() {

View File

@@ -50,6 +50,8 @@
:mysubsubkey="mysubsubkey"
:type="fieldtype || col.fieldtype"
:serv="false"
:subfield_to_see="mysubkey_tosee"
:fieldsel_tosee="fieldsel_tosee"
:disable="disable"
:jointable="jointable"
:myimg="myimg"

View File

@@ -446,4 +446,11 @@
.modern-chip {
width: 100%;
}
}
.class_select.q-select {
@media (max-width: 599px) {
width: 100% !important;
max-width: 100% !important;
}
}

View File

@@ -111,6 +111,11 @@ export default defineComponent({
required: false,
default: '',
},
myclass: {
type: String,
required: false,
default: '',
},
field2: {
type: String,
required: false,
@@ -824,7 +829,7 @@ export default defineComponent({
}
async function savefield(value: any, initialval: any, myq: any) {
if (!props.insertMode) {
if (!props.insertMode && !props.nosaveToDb) {
let ret = null;
myvalue.value = value;
return tools.saveInDBForTypes(
@@ -843,7 +848,7 @@ export default defineComponent({
}
}
async function savefield2(value: any, initialval: any, myq: any) {
if (!props.insertMode) {
if (!props.insertMode && !props.nosaveToDb) {
let ret = null;
myvalue2.value = value;
return tools.saveInDBForTypes(
@@ -861,49 +866,11 @@ export default defineComponent({
);
}
}
async function savefieldtosee(value: any, initialval: any, myq: any) {
if (!props.insertMode) {
let ret = null;
myvalue2.value = value;
return tools.saveInDBForTypes(
myq,
props.field2,
myvalue2.value,
props.type,
props.serv,
props.table,
props.fieldsel_tosee,
props.id,
props.indrec,
props.mysubsubkey,
props.specialField
);
}
}
function annulla(val: any) {
emit('annulla', true);
}
function savefieldboolean(value: any) {
if (myvalue.value === undefined) myvalue.value = 'true';
else myvalue.value = value;
tools.saveInDBForTypes(
$q,
props.field,
myvalue,
props.type,
props.serv,
props.table,
props.subfield,
props.id,
props.indrec,
props.mysubsubkey,
props.specialField
);
}
function Savedb(newVal: any, valinitial: any) {
// console.log('Savedb', newVal)
@@ -950,7 +917,7 @@ export default defineComponent({
// console.log('Savedb', newVal)
emit('showandsave', props.row, props.mycol, newVal, valinitial);
emit('showandsave', props.row, props.mycol, newVal, valinitial, myvaltosee.value);
visueditor.value = false;
}

View File

@@ -1265,6 +1265,7 @@
:addnone="col?.addnone"
:filter_field="col?.filter_field"
:value_extra="value_extra"
:myclass="myclass"
:optval="fieldsTable.getKeyByTable(col.jointable)"
:optlab="fieldsTable.getLabelByTable(col.jointable)"
:options="
@@ -1763,6 +1764,7 @@
col.fieldtype === costanti.FieldType.select_by_server
"
>
<CMySelect
:type_out="col.field_outtype"
:col="col"
@@ -1794,6 +1796,7 @@
col.filter
)
"
:class="myclass"
:useinput="col.allowNewValue"
:addstrrequired="addstrrequired"
:dense="dense"

View File

@@ -17,7 +17,7 @@ $shadow-md: 0 2px 8px rgba(0, 0, 0, 0.1);
$mobile-breakpoint: 768px;
// ========================================
// WRAPPER CARD
// WRAPPER CARD - ALTERNATING COLORS
// ========================================
.rec-card-wrapper {
margin: 4px auto;
@@ -26,6 +26,22 @@ $mobile-breakpoint: 768px;
@media (max-width: $mobile-breakpoint) {
margin: 2px auto;
}
&.is-even {
.modern-rec-card {
background: linear-gradient(135deg, rgba(49, 154, 239, 0.227) 0%, rgba(25, 118, 210, 0.05) 100%);
border-color: rgba(66, 165, 245, 0.15);
// ... resto degli stili blu
}
}
&.is-odd {
.modern-rec-card {
background: linear-gradient(135deg, rgba(38, 197, 218, 0.159) 0%, rgba(0, 150, 136, 0.05) 100%);
border-color: rgba(38, 198, 218, 0.15);
// ... resto degli stili teal
}
}
}
// ========================================
@@ -163,15 +179,11 @@ $mobile-breakpoint: 768px;
padding: 8px;
transition: all $transition-speed ease;
margin-bottom: 4px;
position: relative;
overflow: hidden;
&:hover {
box-shadow: $shadow-md;
border-color: rgba(25, 118, 210, 0.2);
}
&.is-attending {
border-left: 3px solid $positive-color;
background: linear-gradient(to right, rgba(33, 186, 69, 0.05), white);
}
@media (max-width: $mobile-breakpoint) {
@@ -224,7 +236,7 @@ $mobile-breakpoint: 768px;
}
// ========================================
// CONTENT SECTION
// CONTENT SECTION - ALTERNATING COLORS
// ========================================
.content-section {
padding: 0 8px 0 0 !important;

View File

@@ -1,19 +1,19 @@
import type { PropType} from 'vue';
import { defineComponent, onMounted, ref, watch, computed } from 'vue'
import { useUserStore } from '@store/UserStore'
import type { IUserFields} from 'model';
import { IImgGallery, IUserProfile } from 'model'
import { costanti } from '@costanti'
import { shared_consts } from '@src/common/shared_vuejs'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { tools } from '@tools'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n'
import { CMyCardPopup } from '@src/components/CMyCardPopup'
import { useRouter } from 'vue-router'
import { useCalendarStore } from '@src/store/CalendarStore'
import { useGlobalStore } from '@src/store/globalStore'
import type { PropType } from 'vue';
import { defineComponent, onMounted, ref, watch, computed } from 'vue';
import { useUserStore } from '@store/UserStore';
import type { IUserFields } from 'model';
import { IImgGallery, IUserProfile } from 'model';
import { costanti } from '@costanti';
import { shared_consts } from '@src/common/shared_vuejs';
import { fieldsTable } from '@store/Modules/fieldsTable';
import { tools } from '@tools';
import { toolsext } from '@store/Modules/toolsext';
import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
import { CMyCardPopup } from '@src/components/CMyCardPopup';
import { useRouter } from 'vue-router';
import { useCalendarStore } from '@src/store/CalendarStore';
import { useGlobalStore } from '@src/store/globalStore';
export default defineComponent({
name: 'CMyRecCard',
@@ -29,6 +29,11 @@ export default defineComponent({
required: false,
default: null,
},
indexRow: {
type: Number,
required: false,
default: 0,
},
editOn: {
type: Boolean,
required: false,
@@ -38,77 +43,84 @@ export default defineComponent({
type: Number,
required: false,
default: 0,
}
},
},
setup(props, { emit }) {
const userStore = useUserStore();
const calendarStore = useCalendarStore();
const globalStore = useGlobalStore();
const $q = useQuasar();
const { t } = useI18n();
const $router = useRouter();
const userStore = useUserStore()
const calendarStore = useCalendarStore()
const globalStore = useGlobalStore()
const $q = useQuasar()
const { t } = useI18n()
const $router = useRouter()
const myrec = ref(<any>null);
const myrec = ref(<any>null)
const visupage = ref(false)
const visupage = ref(false);
const disabilita = computed(() => {
return props.table === shared_consts.TABLES_MYBACHECAS
})
watch(() => props.prop_myrec, (newval, oldval) => {
mounted()
})
return props.table === shared_consts.TABLES_MYBACHECAS;
});
watch(
() => props.prop_myrec,
(newval, oldval) => {
mounted();
}
);
function mounted() {
if (props.prop_myrec) {
myrec.value = props.prop_myrec
myrec.value = props.prop_myrec;
}
}
function showBadge() {
if (shared_consts.TABLES_SHOW_ADTYPE.includes(props.table)) {
return true
return true;
}
return false
return false;
}
function getImgUser(profile: IUserFields) {
return userStore.getImgByProfile(profile)
return userStore.getImgByProfile(profile);
}
function naviga(path: string) {
$router.push(path)
$router.push(path);
}
function setCmd($q: any, cmd: number, myusername: string, value: any, groupname: string) {
emit('setCmd', $q, cmd, myusername, value, groupname)
function setCmd(
$q: any,
cmd: number,
myusername: string,
value: any,
groupname: string
) {
emit('setCmd', $q, cmd, myusername, value, groupname);
}
function cmdExt(cmd: any, val1: any, val2: any) {
emit('cmdext', cmd, val1, val2)
emit('cmdext', cmd, val1, val2);
}
function navigaExt(obj: any) {
cmdExt(costanti.CMD_SHOW_PAGE, null, obj)
cmdExt(costanti.CMD_SHOW_PAGE, null, obj);
//let link = shared_consts.getDirectoryByTable(props.table) + '/' + obj._id
//console.log('link', link)
//$router.push(link)
}
function getNameToShow(user: IUserFields, col = null) {
if (myrec.value.groupname)
return myrec.value.groupname
else
return userStore.getNameToShow(user, col)
if (myrec.value.groupname) return myrec.value.groupname;
else return userStore.getNameToShow(user, col);
}
function isPartecipero() {
return (props.table === shared_consts.TABLES_MYBACHECAS && calendarStore.isPartecipero(myrec.value._id, props.table))
return (
props.table === shared_consts.TABLES_MYBACHECAS &&
calendarStore.isPartecipero(myrec.value._id, props.table)
);
}
function computedWidth() {
@@ -116,7 +128,7 @@ export default defineComponent({
return `${Math.min(width, 600)}px`; // Limita la larghezza massima a 600px
}
onMounted(mounted)
onMounted(mounted);
return {
t,
@@ -140,6 +152,6 @@ export default defineComponent({
disabilita,
globalStore,
computedWidth,
}
};
},
})
});

View File

@@ -1,6 +1,7 @@
<template>
<div
class="rec-card-wrapper"
:class="{ 'is-even': indexRow % 2 === 0, 'is-odd': indexRow % 2 !== 0 }"
:style="{ maxWidth: computedWidth() }"
>
<!-- Evento Calendar con data grande -->

View File

@@ -106,6 +106,7 @@
:label="addstrrequired + label"
input-debounce="300"
:input-class="myclass"
:class="myclass"
:options="valori"
:option-value="optval"
:option-label="(opt) => getOptionLabel(opt)"

View File

@@ -76,11 +76,11 @@
<span
v-if="contact.profile && contact.profile.resid_str_comune"
class="show_comune_title"
>Comune:
<span class="show_comune">{{ contact.profile.resid_str_comune }}</span>
>
<span class="show_comune">{{ contact.profile.resid_str_comune }} ({{ contact.profile.resid_province }})</span>
</span>
<span
v-if="contact.profile && contact.profile.resid_province"
v-if="contact.profile && contact.profile.resid_province && !contact.profile.resid_str_comune"
class="show_province_title"
><span class="show_province">({{ contact.profile.resid_province }})</span>
</span>

View File

@@ -233,14 +233,14 @@ $mobile-footer-height: 80px;
}
.step-line {
width: 60px;
width: 50px;
height: 3px;
background: linear-gradient(to right, #e0e0e0, #bdbdbd);
margin: 0 4px;
transition: all $transition-speed ease;
@media (max-width: $mobile-breakpoint) {
width: 40px;
width: 30px;
}
.completed + & {
@@ -288,8 +288,8 @@ $mobile-footer-height: 80px;
animation: fadeIn 0.4s ease;
@media (max-width: $mobile-breakpoint) {
padding: 0px 16px 16px;
gap: 12px;
padding: 0px 8px 8px;
gap: 2px;
min-height: calc(100vh - 280px);
}
@@ -306,7 +306,7 @@ $mobile-footer-height: 80px;
border-bottom: 2px solid rgba(0, 0, 0, 0.05);
@media (max-width: $mobile-breakpoint) {
padding-bottom: 12px;
padding-bottom: 0px;
}
.q-icon {

View File

@@ -21,6 +21,8 @@ import {
watch,
} from 'vue';
import { CSignIn } from '@src/components/CSignIn';
import { CMyFieldDb } from '@src/components/CMyFieldDb';
import { CMyFieldRec } from '@src/components/CMyFieldRec';
import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n';
import { DefaultProfile, useUserStore } from '@store/UserStore';
@@ -28,6 +30,7 @@ import useValidate from '@vuelidate/core';
import useVuelidate from '@vuelidate/core';
import { shared_consts } from '@src/common/shared_vuejs';
import { costanti } from '@costanti';
import { minLength, required, sameAs } from '@vuelidate/validators';
@@ -49,7 +52,15 @@ import { useInvitaAmicoStore } from 'app/src/stores/useInvitaAmicoStore';
export default defineComponent({
name: 'CSignUp',
components: { Logo, CTitleBanner, PagePolicy, CCopyBtn, CRegistration },
components: {
Logo,
CTitleBanner,
PagePolicy,
CCopyBtn,
CRegistration,
CMyFieldDb,
CMyFieldRec,
},
props: {
showadultcheck: {
type: Boolean,
@@ -131,9 +142,12 @@ export default defineComponent({
const inputSurname = ref(<any>null);
const inputPassword = ref(<any>null);
const inputPassword2 = ref(<any>null);
const inputComune = ref(<any>null);
const noinvito = ref(false);
const numStepTotali = ref('5');
const reccomune = ref(<any>{profile: {resid_str_comune: '', resid_comune: ''}});
const submitBtn = ref(<any>null); // AGGIUNGI QUESTA RIGA
const submitBtn = ref(<any>null); // AGGIUNGI QUESTA RIGA
// Responsive detection
const isMobile = ref(false);
@@ -171,6 +185,8 @@ export default defineComponent({
(inputPassword.value && inputPassword.value.hasError) ||
!inputPassword2.value ||
(inputPassword2.value && inputPassword2.value.hasError);
} else if (slide.value === '4') {
ret = !signup.profile.resid_str_comune || !signup.profile.resid_comune;
}
return ret;
@@ -200,9 +216,13 @@ export default defineComponent({
inputPassword.value.focus();
}
} else if (newSlide === '4') {
if (inputComune.value) {
inputComune.value.focus();
}
} else if (newSlide === '5') {
if (submitBtn.value) {
submitBtn.value.$el.focus();
}
submitBtn.value.$el.focus();
}
}
}
);
@@ -243,6 +263,7 @@ export default defineComponent({
complexityUser,
registereduser,
},
comune: {},
name: {
required:
props.collettivo ||
@@ -501,6 +522,20 @@ export default defineComponent({
onMounted(async () => {
const token = props.token;
let dev = tools.isDevelop();
// dev = false;
if (dev) {
signup.email = 'test123@prova.com';
signup.username = 'test123';
signup.name = 'Nome';
signup.surname = 'Cognome';
signup.password = 'A12345678';
signup.repeatPassword = 'A12345678';
signup.aportador_solidario = 'surya1977';
}
// Check mobile on mount
checkMobile();
window.addEventListener('resize', checkMobile);
@@ -518,6 +553,19 @@ export default defineComponent({
}
});
function updateComune(row: any, col: any, newval: any, valinit: any, valtosee: any) {
// console.log('updateComune', reccomune.value.profile.resid_comune)
if (!!row.profile.recCity) {
signup.profile.resid_comune = row.profile.recCity._id
signup.profile.resid_str_comune = row.profile.recCity.comune_solo
signup.profile.resid_province = row.profile.recCity.prov
} else {
signup.profile.resid_comune = ''
signup.profile.resid_str_comune = ''
signup.profile.resid_province = ''
}
}
onUnmounted(() => {
window.removeEventListener('resize', checkMobile);
});
@@ -557,10 +605,15 @@ export default defineComponent({
inputSurname,
inputPassword,
inputPassword2,
inputComune,
shared_consts,
isMobile,
submitBtn,
noinvito,
costanti,
updateComune,
numStepTotali,
reccomune,
};
},
});

View File

@@ -122,7 +122,7 @@
<!-- Progress Stepper -->
<div class="progress-stepper">
<div
v-for="step in 4"
v-for="step in parseInt(numStepTotali)"
:key="step"
class="step-item"
:class="{
@@ -139,7 +139,7 @@
<span v-else>{{ step }}</span>
</div>
<div
v-if="step < 4"
v-if="step < parseInt(numStepTotali)"
class="step-line"
></div>
</div>
@@ -481,10 +481,66 @@
</div>
</q-carousel-slide>
<!-- Slide 4: Conferma e Policy -->
<!-- Slide 4: Comune -->
<q-carousel-slide
name="4"
class="carousel-slide"
>
<div class="slide-content">
<div class="slide-header">
<q-icon
name="lock_outline"
size="40px"
color="primary"
/>
<h2 class="slide-title">Comune di Residenza</h2>
<p class="slide-subtitle">
Seleziona il tuo comune di residenza, o dove vivi abitualmente, per
connetterti con la Community Locale.
</p>
</div>
<div class="form-fields">
<!--<CMyFieldRec
:nosaveToDb="true"
table="users"
tablesel="cities"
jointable="cities"
:pickup="true"
:type="costanti.FieldType.select_by_server"
:rec="signup"
field="profile.resid_comune"
mysubkey_tosee="resid_str_comune"
fieldsel_tosee="comune"
:canEdit="true"
:canModify="true"
@savedInDb="updateComune"
></CMyFieldRec>-->
<CMyFieldDb
:nosaveToDb="true"
table="users"
tablesel="cities"
mykey="profile"
mysubkey="recCity"
label_trans="reg.resid_str_comune"
:useinput="false"
jointable="cities"
:pickup="true"
myclass="class_select"
:isInModif="true"
:type="costanti.FieldType.select_by_server"
:rec="reccomune"
@showandsave="updateComune"
/>
</div>
</div>
</q-carousel-slide>
<!-- Slide numStepTotali: Conferma e Policy -->
<q-carousel-slide
:name="numStepTotali"
class="carousel-slide"
>
<div class="slide-content final-slide">
<div class="slide-header">
@@ -527,6 +583,16 @@
/>
<span>{{ signup.name }} {{ signup.surname }}</span>
</div>
<div
v-if="signup.profile.resid_str_comune"
class="summary-item"
>
<q-icon
name="home"
color="primary"
/>
<span>{{ signup.profile.resid_str_comune }} ({{ signup.profile.resid_province }})</span>
</div>
</div>
<div class="policy-section">
@@ -571,7 +637,7 @@
class="nav-btn back-btn"
/>
<q-btn
v-if="slide !== '4'"
v-if="slide !== numStepTotali"
unelevated
color="primary"
icon-right="arrow_forward"
@@ -581,7 +647,7 @@
class="nav-btn next-btn"
/>
<q-btn
v-if="slide === '4'"
v-if="slide === numStepTotali"
ref="submitBtn"
unelevated
color="positive"
@@ -608,6 +674,7 @@
{ label: '2', value: '2' },
{ label: '3', value: '3' },
{ label: '4', value: '4' },
{ label: '5', value: '5' },
]"
/>
</div>
@@ -689,16 +756,18 @@
color="primary"
/>
<div>
<p class="text-weight-medium q-mb-sm">Per accedere a RISO hai bisogno di un invito</p>
<p class="text-body2">
L'invito può essere di due tipi:
<p class="text-weight-medium q-mb-sm">
Per accedere a RISO hai bisogno di un invito
</p>
<p class="text-body2">L'invito può essere di due tipi:</p>
<ul class="invitation-types">
<li>
<strong>Username dell'invitante:</strong> inserisci lo username di chi ti ha parlato di RISO
<strong>Username dell'invitante:</strong> inserisci lo username di chi
ti ha parlato di RISO
</li>
<li>
<strong>Link di registrazione:</strong> usa il link personale che ti è stato inviato via email o messaggio
<strong>Link di registrazione:</strong> usa il link personale che ti è
stato inviato via email o messaggio
</li>
</ul>
</div>
@@ -714,8 +783,9 @@
<div>
<p class="text-weight-medium q-mb-sm">Non conosci nessuno di RISO?</p>
<p class="text-body2">
Nessun problema! Puoi unirti alla comunità attraverso i nostri gruppi territoriali su Telegram
oppure contattarci direttamente via email. Saremo felici di darti il benvenuto! 🌱
Nessun problema! Puoi unirti alla comunità attraverso i nostri gruppi
territoriali su Telegram oppure contattarci direttamente via email. Saremo
felici di darti il benvenuto! 🌱
</p>
</div>
</div>
@@ -728,7 +798,11 @@
color="primary"
icon="telegram"
label="Gruppi Telegram Territoriali"
:href="tools.getLinkGruppiTerritorialiTelegram() ? tools.getLinkGruppiTerritorialiTelegram() : ''"
:href="
tools.getLinkGruppiTerritorialiTelegram()
? tools.getLinkGruppiTerritorialiTelegram()
: ''
"
target="_blank"
class="action-btn full-width q-mb-sm"
no-caps

View File

@@ -62,6 +62,10 @@ export default defineComponent({
label: 'Telegram BOT Rimosso',
value: shared_consts.FILTER_USER_TELEGRAM_BLOCKED
},
{
label: 'Comune',
value: shared_consts.FILTER_USER_COMUNE
},
{
label: 'Provincia',
value: shared_consts.FILTER_USER_PROVINCE

View File

@@ -337,9 +337,7 @@
<q-btn
label="Replace Username"
color="primary"
@click="
EseguiFunz('ReplaceUsername', search_username, replace_username)
"
@click="EseguiFunz('ReplaceUsername', search_username, replace_username)"
></q-btn>
<q-btn
label="Esci da tutti i Circuiti a saldo Zero"
@@ -350,19 +348,13 @@
label="Replace AportadorSolidario"
color="primary"
@click="
EseguiFunz(
'replaceAportadorSolidario',
search_username,
replace_username
)
EseguiFunz('replaceAportadorSolidario', search_username, replace_username)
"
></q-btn>
<q-btn
label="Replace Circuit"
color="primary"
@click="
EseguiFunz('ReplaceCircuitName', search_username, replace_username)
"
@click="EseguiFunz('ReplaceCircuitName', search_username, replace_username)"
></q-btn>
<br />
</div>
@@ -383,9 +375,7 @@
<q-btn
label="Create Account Circuits"
color="primary"
@click="
EseguiFunz('CreateAccountCircuits', search_username, replace_username)
"
@click="EseguiFunz('CreateAccountCircuits', search_username, replace_username)"
></q-btn>
<br />
</div>
@@ -411,7 +401,11 @@
label="Fiducia Concessa"
style="width: 300px"
></q-input>
<q-input v-model="valmax" label="Max Qta" style="width: 300px"></q-input>
<q-input
v-model="valmax"
label="Max Qta"
style="width: 300px"
></q-input>
</div>
<div class="row">
<q-btn
@@ -435,14 +429,7 @@
label="Imposta Min e Max per TUTTI i Conti Personali di un Circuito"
color="primary"
@click="
EseguiFunz(
'ImpostaMinMaxPersonaliCircuito',
'',
'',
valmin,
valmax,
circuitId
)
EseguiFunz('ImpostaMinMaxPersonaliCircuito', '', '', valmin, valmax, circuitId)
"
></q-btn>
</div>
@@ -526,14 +513,7 @@
label="Imposta Min e Max per i Circuiti Collettivi di DEFAULT"
color="primary"
@click="
EseguiFunz(
'ImpostaDefMinMaxCollettivi',
'',
'',
defmin,
defmax,
circuitId
)
EseguiFunz('ImpostaDefMinMaxCollettivi', '', '', defmin, defmax, circuitId)
"
></q-btn>
<br />
@@ -599,11 +579,22 @@
<br />
</div>
<q-spinner v-if="incaricamento" color="primary" size="3em" :thickness="2" />
<q-spinner
v-if="incaricamento"
color="primary"
size="3em"
:thickness="2"
/>
<q-field stack-label dense>
<q-field
stack-label
dense
>
<template v-slot:control>
<div class="self-center full-width no-outline text-center" tabindex="0">
<div
class="self-center full-width no-outline text-center"
tabindex="0"
>
{{ ris }}
</div>
</template>
@@ -781,6 +772,14 @@
color="negative"
@click="EseguiFunz('convertProductInfos')"
></q-btn>
<div class="row">
<q-btn
label="Rimuovi i dati inutili nella Tabella MySkills"
color="negative"
@click="EseguiFunz('RemoveDatiInutiliMySkill')"
></q-btn>
<br />
</div>
<q-btn
label="getGM_Lista_Argomenti"
color="positive"
@@ -805,16 +804,23 @@
<div class="results-content">
{{ risultato }}
</div>
<h2 v-if="!!risultatoHTML" class="results-title">Risultati HTML:</h2>
<div v-if="!!risultatoHTML" v-html="risultatoHTML"></div>
<h2
v-if="!!risultatoHTML"
class="results-title"
>
Risultati HTML:
</h2>
<div
v-if="!!risultatoHTML"
v-html="risultatoHTML"
></div>
</div>
<br />
<br />
<br />
</template>
<script lang="ts" src="./dbop.ts">
</script>
<script lang="ts" src="./dbop.ts"></script>
<style lang="scss" scoped>
@import "./dbop";
@import './dbop';
</style>

View File

@@ -112,6 +112,7 @@ export default defineComponent({
'profile.qualifica': 1,
'profile.note': 1,
'profile.da_contattare': 1,
'profile.resid_str_comune': 1,
'profile.resid_province': 1,
'mycities.reg': 1,
}

View File

@@ -713,12 +713,12 @@
v-bind="$attrs"
:copy="false"
:value="
userStore.userprofile.profile.resid_str_comune
userStore.userprofile.profile.resid_str_comune + (userStore.userprofile.profile.resid_province ? ' (' + userStore.userprofile.profile.resid_province + ')' : '')
"
label="Comune"
/>
<CLabel
v-if="!!userStore.userprofile.profile.resid_province"
v-if="!!userStore.userprofile.profile.resid_province && !userStore.userprofile.profile.resid_str_comune"
v-bind="$attrs"
:copy="false"
:value="