17 Commits

Author SHA1 Message Date
Surya Paolo
9a3ebc69ca bottoni fiducia 2023-11-30 19:50:18 +01:00
Surya Paolo
f7656c8379 quantità 2023-11-30 15:43:32 +01:00
Surya Paolo
19b5b3ea11 Struttura Scheda Prodotti... 2023-11-30 14:28:48 +01:00
Surya Paolo
39e21600ca Struttura Scheda Prodotti... 2023-11-30 14:27:46 +01:00
Surya Paolo
dffcc28690 ecomm 2023-11-30 10:25:08 +01:00
Surya Paolo
4f7d736830 Modif 2023-11-30 10:13:12 +01:00
Surya Paolo
9f472eb37f Merge branch 'develop' of ssh://risosrv:5522/~/repository/newfreeplanet into develop 2023-11-30 10:11:39 +01:00
Surya Paolo
a1bc03017c ecomm 2023-11-30 10:05:32 +01:00
Surya Paolo
8bc6dec1da PDB 2023-11-30 09:41:49 +01:00
Surya Paolo
ee5235549e Riso: Ris Italia, altre modifiche grafiche
Lista Utenti da Verificare
2023-11-30 01:48:29 +01:00
Surya Paolo
fdf232b351 altro 2023-11-28 15:31:25 +01:00
Surya Paolo
bfedcd634e pdb 2023-11-28 15:28:45 +01:00
Surya Paolo
2314b07428 PCB lista categorie 2023-11-28 14:12:45 +01:00
Surya Paolo
b29caade62 PCB 2023-11-28 08:45:52 +01:00
Surya Paolo
cbf3bdafc7 avanti... 2023-11-27 16:27:05 +01:00
Surya Paolo
f1702d76d6 Integrazione ECommerce (conversione) 2023-11-27 14:40:42 +01:00
Surya Paolo
6b400448d4 PiuCheBuono Directory 2023-11-27 13:18:12 +01:00
117 changed files with 6085 additions and 515 deletions

View File

@@ -12,6 +12,7 @@ const msg_website_es = {
stars: 'Voto',
color: 'Colore',
theme: 'Tema',
producer: 'Produttore',
},
hours: {
descr: 'Descrizione',

View File

@@ -0,0 +1,30 @@
APP_VERSION="1.0.21"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"
DIRECTORY_SERVER="freeplanet_serverside"
SERVERDIR_WEBSITE=""
SERVERPW_WEBSITE=""
APP_URL="https://localhost"
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
PROVA_PAOLO="PROVA ENV FUNZIONA!"
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://localhost:3000"
LOGO_REG='piuchebuono-logo-full.png'
TEST_NAME="Paolo"
TEST_SURNAME="Arena"
TEST_EMAIL=""
TEST_USERNAME=""
TEST_PASSWORD=""
TEST_APORTADOR=""
PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
IN_CONSTRUCTION="0"
DEBUG="1"
TELEGRAM_SUPPORT=""
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
TEST_CELL=""
ISTEST=1
INLOCALE=1
BAK_MONGODB_HOST="http://192.168.0.200:3000"

View File

@@ -0,0 +1,28 @@
APP_VERSION="1.0.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside
SERVERDIR_WEBSITE="test.riso.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"
APP_URL="https://test.riso.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://test.freeplanet.app:3001"
LOGO_REG='riso-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""
TEST_EMAIL=""
TEST_USERNAME=""
TEST_PASSWORD=""
TEST_APORTADOR=""
PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
IN_CONSTRUCTION="0"
DEBUG="1"
TELEGRAM_SUPPORT=""
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
TEST_CELL=""
ISTEST=1

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,11 @@
import { IEvents } from '../model';
export const db_data = {
URL_FACEBOOK: '',
userdata: {
calendar_editable: false,
},
}

View File

@@ -0,0 +1,392 @@
const msg_website = {
it: {
pages: {
home: 'Principale',
SignUp: 'Registrazione',
SignUp2: 'Registrazione2',
SignIn: 'Login',
vreg: 'Verifica Reg',
Test: 'Test',
TestLocal: 'TestLocal',
Category: 'Categorie',
Todo: 'Todo',
personal: 'Personale',
bacheca: 'Bacheca',
shopping: 'Spesa',
Admin: 'Admin',
Test1: 'Test1',
Test2: 'Test2',
projects: 'Progetti',
favproj: 'Favoriti',
},
projall: 'Tutti',
projectsShared: 'Miei Condivisi',
myprojects: 'Miei Personali',
msg: {
hello: 'Buongiorno',
myAppName: 'FreePlanet',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito e senza Pubblicità',
underconstruction: 'App in costruzione...',
myDescriz: '',
sottoTitoloApp: 'Il primo Vero Social',
sottoTitoloApp2: 'Libero, Equo e Solidale',
sottoTitoloApp3: 'dove Vive Consapevolezza e Aiuto Comunitario',
sottoTitoloApp4: 'Gratuito e senza Pubblicità',
},
homepage: {
descrapp_title1: 'Uniti per Evolvere e Sperimentare',
descrapp_pag1: 'Siamo la <strong>Rete Italiana di Scambio Orizzontale</strong>, abbiamo creato questa pittaforma per metterla al servizio di chi vuole riscoprire il valore della <strong>condivisione</strong> e della <strong>cooperazione</strong>. ' +
'Valori semplici e profondi che ci aiutano a ritrovare il <strong>senso della vita</strong>, perduto in questa società consumista, e riporti quei <strong>Sani Pricìpi Naturali</strong> ed Umani di <strong>Fratellanza</strong>'
+ ' che intere popolazioni antiche conoscevano bene.',
descrapp_pag2: 'E\' giunta l\'ora di utilizzare i nuovi strumenti <strong>Tecnologici</strong> a nostro <strong>favore</strong>, per <strong>Liberarci</strong> '
+ 'così piano piano dalla <strong>schiavitù</strong> del <strong>"Lavoro per generare Denaro"</strong> e trasformando le nostre <strong>Capacitá</strong> in '
+ '<strong>Risorse Umane</strong> per poterci sostenere e vivere in <strong>Armonia</strong> con gli altri.',
freesocial: {
title: 'Free Social',
descr: 'Una Community organizzata per <strong>Categorie</strong>, dove potrai unirti a <strong>Gruppi Tematici</strong>, '
+ 'Condividere <strong>Esperienze</strong> e unire Competenze per organizzare e sostenere <strong>Progetti Innovativi</strong> per il Popolo.<br><br>'
+ 'Verranno evidenziati sviluppi <strong>Etici</strong> come l\'<strong>Auto-Produzione</strong>, la <strong>Sostenibilitá</strong>, '
+ 'la Buona <strong>Salute Naturale</strong> e il <strong>Rispetto per l\'Ambiente</strong> e per tutti gli <strong>Esseri Viventi</strong> di questo '
+ '<strong>Pianeta</strong>. Chiunque potrá esprimere il proprio <strong>Consenso o Dissenso</strong> partecipando a <strong>Sondaggi Interattivi</strong>'
+ ' e realizzare insieme i <strong>Cambiamenti</strong> necessari alla nostra Società.',
},
freetalent: {
title: 'Free Talent',
descr: 'Condividi i tuoi <strong>Talenti</strong> e <strong>Abilità</strong>, '
+ 'al posto del denaro guadagnagnerai <strong>Tempo</strong>.<br> '
+ '<strong>"1 ora"</strong> diventa moneta di scambio, uguale per tutti.<br>'
+ 'Potrai utilizzare questi tuoi <strong>"Crediti Tempo"</strong> per soddisfare le tue necessità, cercando nelle <strong>Competenze Disponibili</strong>.<br>'
+ 'Nel Dare e Ricevere, si creeranno così legami di <strong>Amicizia, Solidarietà, Cooperazione e Divertimento</strong><br><br>'
+ 'Questo progetto vuole diffondere, ora in maniera informatizzata, questa realtà che gia esiste da tanti anni, e viene chiamata <strong>"Banca del Tempo"</strong>. '
+ 'Le <strong>segreterie</strong> sparse in tutto il mondo, serviranno a dare maggiore <strong>affidabilità</strong> e <strong>fiducia</strong> negli scambi di talenti tra persone sconosciute. '
+ 'Creeremo così una <strong>rete di fiducia</strong> nel vicinato, come giá viene praticato in numerosi <strong>Ecovillaggi</strong> e Comunità del mondo.',
},
freegas: {
title: 'Free G.A.S.',
descr: 'Ti piacerebbe utilizzare una App che ti permetta facilmente di acquistare Prodotti Locali direttamente dal <strong>Produttore</strong>?<br>'
+ 'Con i <strong>Gruppi di Acquisto Solidale</strong> si evitano intermediazioni inutili, ottenendo parecchi benefici tra cui:<br>'
+ '<ul class="mylist" style="padding-left: 20px;"><li><strong>Qualitá Superiore</strong> del prodotto</li>'
+ '<li>Le <strong>Recensioni</strong> dei consumatori favoriranno i Produttori con Sani Intenti</li>'
+ '<li>Possiblità d\'interagire con il Produttore</li>'
+ '<li>Apertura alle Relazioni tra persone, condividendo <strong>Ricette</strong> e <strong>Consigli</strong> preziosi</li>'
+ '<li><strong>Risparmio</strong> di soldi (prezzi all\'Ingrosso)</li>'
+ '<li>Valorizzare il <strong>Territorio</strong> e l\'Economia <strong>Locale</strong></li>'
+ '<li>Condizioni <strong>Eque</strong> per i Lavoratori</li>'
+ '<li>Ridotto <strong>Impatto Ambientale</strong></ul>',
},
freeliving: {
title: 'Free Co-Living',
descr: 'Unire più realtà, condividendo l\'esperienza di abitare insieme, per un periodo definito:<br>'
+ '1) C\'è chi <strong>Vive solo</strong> ed ha una casa.<br>'
+ '2) Chi ha bisogno di un <strong>alloggio</strong> temporaneo.<br><br>'
+ 'Oggi sempre più persone <strong>abitano da sole</strong> e vorrebbero continuare a vivere nella propria abitazione.<br>'
+ 'Altre persone invece hanno bisogno di una <strong>stanza</strong>, per scelta o per necessita, ed in cambio sono disponibili a '
+ '<strong>contribuire alle spese</strong> per le utenze domestiche o magari <strong>aiutare</strong> la persona a <strong>fare la spesa</strong>, cucinare, <strong>pulire casa</strong> oppure offrendogli semplicemente <strong>compagnia</strong>.<br><br>'
+ 'Tramite questo strumento, le persone potranno trovarsi, mettersi in contatto e decidere in che forma <strong>co-abitare</strong> e per quanto tempo. Le <strong>recensioni</strong> rilasciate ed il <strong>dettaglio</strong> dei profili utenti, '
+ 'aiuterà nella scelta della persona più in <strong>sintonia</strong>.',
},
freecollabora: {
title: 'Chi può Collaborare?',
descr: 'Tutti coloro che sono in linea con <strong>Princìpi Etici</strong> e ricerca del <strong>Benessere Globale del Pianeta</strong><br>'
+ 'Pertanto sono i benvenuti:'
+ '<ul class="mylist" style="padding-left: 20px;">'
+ '<li><strong>Associazioni no-profit, Ecovillaggi, Comunità</strong></li>'
+ '<li>Gruppi che intendono promuovere <strong>Progetti Sociali Innovativi</strong> per una <strong>Decrescita Felice</strong></li>'
+ '<li>Chi gestisce un <strong>Gruppo di Acquisto Solidale (G.A.S.)</strong></li>'
+ '<li><strong>Produttori Locali Etici</strong></li>'
+ '<li>Chi gestisce una <strong>Banca del Tempo</strong></li>'
+ '<li><strong>Chiunque voglia partecipare</strong>, nella forma che ritiene più opportuna.</li>'
+ '</ul>',
},
freesostieni: {
title: 'Come Sostenere il progetto?',
descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li><strong>Condividendolo</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
+ '<li>Rispondendo ai <strong>Sondaggi Popolari</strong> e lasciando <strong>Feedback</strong></li>'
+ '<li>Tramite una <strong>donazione</strong> (<strong>anche 1€</strong> ) per le spese.<br>'
+ '</ul>'
+ 'Vedo un <strong>futuro</strong> dove non si utilizzerà più denaro. Dove le persone si <strong>aiuteranno</strong> a vicenda e non avranno bisogno di "possedere" cose, ma le <strong>condivideranno</strong> con gli altri.<br>',
},
multiplatform: {
title: 'Multi-piattaforma',
descr: 'E\' compatibile con Google Chrome, Firefox, Safari, iOS, Android e PC. L\'Applicazione s\'installa facilmente, senza passare dallo store. '
+ 'basta condividere il nome del sito <strong>www.freeplanet.app</strong>.<br>'
+ 'Dopo la registrazione chiederà di aggiungerlo alla lista delle applicazioni e sullo sfondo',
},
free: {
title: 'Gratuita, Open Source e Niente Pubblicità',
descr: 'Questa App <strong>non è in vendita</strong>, non ha scopi commerciali, <strong>non ha prezzo</strong> ed appartiene al <strong>Popolo del Nuovo Mondo</strong>.<br>Chiunque potrá utilizzarla e beneficiarne.<br>A me il compito di gestirla e proteggerla. '
+ 'Verranno accettate solo donazioni Libere di privati ed Associazioni no-profit, in linea con i Principi, che serviranno per coprire le spese.<br>' +
+ '<strong>Grazie a Tutti per il sostegno</strong>. ',
},
contacts: 'Contatti',
},
},
es: {
pages: {
home: 'Principal',
SignUp: 'Nueva Cuenta',
SignIn: 'Entrar',
vreg: 'Verifica Reg',
Test: 'Test',
Category: 'Categorías',
Todo: 'Tareas',
personal: 'Personal',
work: 'Trabajo',
shopping: 'Compras',
Admin: 'Administración',
Test1: 'Test1',
Test2: 'Test2',
projects: 'Proyectos',
},
favproj: 'Favoritos',
projall: 'Todos',
projectsShared: 'Mis Compartidos',
myprojects: 'Mis Personales',
msg: {
hello: 'Buenos Días',
myAppName: 'FreePlanet',
myAppDescription: 'El primer Verdadero Social Libre, justo y Solidario Donde vive Conciencia y Ayuda comunitaria, Gratis y sin publicidad',
underconstruction: 'App en construcción...',
myDescriz: '',
sottoTitoloApp: 'El primer Verdadero Social',
sottoTitoloApp2: 'Libre, justo y Solidario',
sottoTitoloApp3: 'Donde vive Conciencia y Ayuda comunitaria',
sottoTitoloApp4: 'Gratis y sin publicidad',
},
homepage: {
descrapp_title1: 'Unidos para evolucionar y experimentar',
descrapp_pag1: 'Redescubra cómo el valor de <strong>Compartir</strong> y <strong>Cooperación</strong> puede ayudarnos a encontrar el profundo '
+ 'sentido de la <strong>Vida</strong>, perdido en esta sociedad consumista, y mostrando esos <strong>Principios Naturales Saludables</strong> y la <strong>Hermandad Humana</strong>'
+ 'que toda la población antigua conocía bien.',
descrapp_pag2: 'Ha llegado el momento de utilizar las nuevas herramientas <strong>tecnológicas</strong> en nuestro <strong>favor</strong>, para <strong>liberarnos</strong> '
+ 'tan lentamente desde la <strong>esclavitud</strong> de <strong>"Trabaja para generar dinero"</strong> y transformando nuestra <strong>Capacidad</strong> en'
+ '<strong>Recursos humanos</strong> para poder apoyar y vivir en <strong>Armonia</strong> con otros.',
freesocial: {
title: 'Free Social',
descr: 'Una comunidad organizada por <strong>Categorías</strong>, donde puedes unirte a <strong>Grupos temáticos</strong>, '
+ 'Compartir <strong>experiencias</strong> y combinar habilidades para organizar y apoyar <strong>proyectos innovadores</strong> para la gente.<br><br>'
+ 'Los desarrollos <strong>éticos</strong> como <strong>:<br>Auto-producción</strong>, <strong>Sostenibilidad</strong>, '
+ 'la Buena <strong>Salud natural</strong> y <strong>Respeto por el Medio Ambiente</strong> y para todos los <strong>Seres vivos</strong> de este'
+ '<strong>Planeta</strong>. Cualquiera puede expresar su <strong>consentimiento o disidencia</strong> participando en <strong>Encuestas Interactivas</strong> '
+ 'y llevar a cabo juntos los <strong>Cambios</strong> necesarios para nuestra sociedad.',
},
freetalent: {
title: 'Free Talent',
descr: 'Comparte tus <strong>Talentos</strong> y <strong>Habilidades</strong>, '
+ 'en lugar de dinero, ganarás <strong>Tiempo</strong>. <br>'
+ '<strong>"1 hora"</strong> se convierte en una moneda de intercambio, igual para todos. <br>'
+ 'Puedes usar estos <strong>"Créditos de tiempo"</strong> para satisfacer tus necesidades, buscando en <strong>Habilidades disponibles</strong>. <br> '
+ 'En Dar y Recibir, crearemos así vínculos de <strong>Amistad, Solidaridad, Cooperación y Diversión</strong>. <br> <br>'
+ 'Este proyecto apunta a difundir esta realidad, que ya existe desde hace muchos años y se llama <strong>"Banco de tiempo"</strong>. '
+ 'Las <strong>secretarías</strong> dispersas por todo el mundo, servirán para dar mayor <strong>fiabilidad</strong> y <strong>confianza</strong> en el intercambio de talentos entre personas desconocidas. '
+ 'Así crearemos una <strong>red de confianza</strong> en el vecindario, como ya se practica en numerosos <strong>Ecoaldeas</strong> y en la Comunidades del mundo.',
},
freegas: {
title: 'Free G.A.S. (G.C.S.)',
descr: '¿Le gustaría usar una aplicación que le permita comprar productos locales directamente desde el <strong>Productor</strong>? <br> '
+ 'Con <strong>Grupos de Compra Solidarios</strong> evitamos intermediarios innecesarios, obteniendo muchos beneficios, incluyendo: <br>'
+ '<ul class = "mylist" style = "padding-left: 20px;"> <li> <strong>Superior Quality</strong> del producto </li>'
+ '<li> Opiniones <strong>de consumidores</strong> favorecerá a los productores con intenciones saludables </li>'
+ '<li> Posibilidad de interactuar con el Productor </li>'
+ '<li> Abierto a relaciones entre personas, compartiendo <strong>Recetas</strong> y <strong>Consejos</strong> preciosos </li>'
+ '<li> <strong>Ahorros</strong> de dinero (precios al por mayor) </li>'
+ '<li> Mejorando el <strong>Territorio</strong> y la Economía <strong>Local</strong> </li>'
+ '<li> Condiciones <strong>Justa</strong> para Trabajadores </li>'
+ '<li> Reducido <strong>Impacto Ambiental</strong> </ul>',
},
freeliving: {
title: 'Free Co-Living',
descr: 'Para unir más realidad, compartiendo la experiencia de vivir juntos, por un período definido: <br> '
+ '1) Hay quien <strong>vive solo</strong> y tiene un hogar. <br>'
+ '2) Quién necesita un alojamiento <strong>temporal</strong>. <br><br>'
+ 'Hoy en día, más y más personas <strong>viven solas</strong> y les gustaría seguir viviendo en sus propios hogares. <br>'
+ 'Otras personas necesitan una <strong>Habitación</strong>, por elección o por necesidad, y a cambio están disponibles en'
+ '<strong>contribuir a los gastos</strong> para los billetes de casa o tal vez <strong>ayuda</strong> a la persona mayor para <strong>ir de compras</strong>, cocinar, <strong>limpiar casa</strong> o simplemente ofreciéndole <strong>compañía</strong>. <br><br> '
+ 'A través de esta herramienta, las personas pueden ponerse en contacto y decidir en qué forma <strong>co-habitar</strong>. Los <strong>comentarios</strong> publicados y el <strong>detalle</strong> de los perfiles de usuario, '
+ 'ayudará a elegir a la persona más en <strong>armonía</strong>.',
},
freecollabora: {
title: '¿Quién puede colaborar?',
descr: 'Todos aquellos que están en línea con <strong>Principios éticos</strong> y la investigación de <strong>Bienestar Global del Planeta</strong> <br> '
+ 'Por eso son bienvenidos:'
+ '<ul class = "mylist" style = "padding-left: 20px;">'
+ '<li> <strong>Asociaciones sin ánimo de lucro, Ecoaldeas, Comunidades</strong> </li>'
+ '<li> Grupos que desean promover <strong>Proyectos sociales innovadores</strong> para <strong>Feliz Decrecimiento</strong> </li>'
+ '<li> Quién administra un <strong>Grupo de Compra Solidario (G.C.S.)</strong> </li>'
+ '<li><strong>Productores locales Éticos</strong></li>'
+ '<li> Quién administra un <strong>Banco de Tiempo</strong> </li>'
+ '<li> <strong>Cualquier persona que quiera participar</strong>, en la forma que considere más apropiada. </li>'
+ '</ul>',
},
freesostieni: {
title: '¿Cómo apoyar el proyecto?',
descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li> <strong>Compartiéndolo</strong> a todos aquellos que quieran unirse en el crecimiento y desarrollo de una Nueva Era </li> '
+ '<li> Respondiendo a <strong>Encuestas populares</strong> y dejando <strong>Comentarios</strong> </li>'
+ '<li> A través de una <strong>donación</strong> (<strong>incluso € 1</strong>) para los gastos. <br>'
+ '</ul>'
+ '<br>Veo un <strong>futuro</strong> en el que ya no usarás dinero. Donde las personas <strong>se ayudarán unos a otros</strong> y no necesiten "poseer" cosas, pero <strong>compartirán</strong> con otros. <br> ',
},
multiplatform: {
title: 'Multi-plataforma',
descr: 'Compatible con Google Chrome, Firefox, Safari, iOS, Android y PC. La aplicación se instala fácilmente, sin pasar por el store. '
+ 'para compartirlo, necesita solo el nombre del sitio web: <strong>www.freeplanet.app</strong>.<br>'
+ 'Después del registro, le pedirá que lo agregue a la lista de aplicaciones y en la pantalla.',
},
free: {
title: 'Libre, Código Abierto y Sin Publicidad',
descr: 'Esta aplicación <strong>no está a la venta</strong>, no tiene un propósito comercial, <strong>no tiene precio</strong> y pertenece a <strong>la Gente del Nuevo Mundo</strong>.<br>'
+ 'Cualquiera puede usarla y beneficiarse.<br> A mí la tarea de gestionarlo y protegerlo. '
+ 'Solo se aceptarán donaciones de particulares y asociaciones sin änimo de lucro, en línea con los Principios, que se utilizarán para cubrir los gastos. <br>'
+ '<strong>Gracias a todos por el apoyo</strong>. ',
},
contacts: 'Contactos',
},
},
enUs: {
pages: {
home: 'Dashboard',
SignUp: 'SignUp',
SignIn: 'SignIn',
vreg: 'Verify Reg',
Test: 'Test',
Category: 'Category',
Todo: 'Todo',
personal: 'Personal',
work: 'Work',
shopping: 'Shopping',
Admin: 'Admin',
Test1: 'Test1',
Test2: 'Test2',
projects: 'Projects',
},
favproj: 'Favorite',
projall: 'All',
projectsShared: 'My Shared',
myprojects: 'My Personals',
msg: {
hello: 'Hello!',
myAppName: 'FreePlanet',
myAppDescription: 'The first Real Social Free, Fair and Equitable Where the conscience and community help live. Free and without advertising',
underconstruction: 'App in construction...',
myDescriz: '',
sottoTitoloApp: 'The first Real Social',
sottoTitoloApp2: 'Free, Fair and Equitable',
sottoTitoloApp3: 'Where the conscience and community help live',
sottoTitoloApp4: 'Free and without advertising',
},
homepage: {
descrapp_title1: 'Together to Evolve and Experiment',
descrapp_pag1: 'Rediscover how the value of <strong>Sharing</strong> and <strong>Cooperation</strong>, can help us find the deep meaning of'
+ '<strong>Life</strong>, lost in this consumer society, and showing those <strong>Healthy Natural Principles</strong> and Human <strong>Brotherhood</strong>'
+ 'that entire ancient populations knew well.',
descrapp_pag2: 'The time has come to use the new <strong>Technological</strong> tools in our <strong>favor</strong>, to <strong>Free ourselves</strong> '
+ 'so slowly from the <strong>slavery</strong> of the <strong>"Work to generate Money"</strong> and transforming our <strong>Capacity</strong> into'
+ '<strong>Human Resources</strong> to be able to support and live in <strong>Harmony</strong> with others.',
freesocial: {
title: 'Free Social',
descr: 'A Community organized by <strong>Categories</strong>, where you can join <strong>Thematic Groups</strong>, '
+ 'Share <strong>Experiences</strong> and combine Skills to organize and support <strong>Innovative Projects</strong> for the People.<br><br>'
+ '<strong>Ethical</strong> developments such as <strong>Auto-Production</strong>, <strong>Sustainability</strong>, '
+ 'Good <strong>Natural Health</strong> and <strong>Respect for the Environment</strong> and for all <strong>Living Beings</strong> of this'
+ '<strong>Planet</strong>. Anyone can express their <strong>Consent or Dissent</strong> by participating in <strong>Interactive Surveys</strong> '
+ 'and carry out together the <strong>Changes</strong> needed for our society.',
},
freetalent: {
title: 'Free Talent',
descr: 'Share your <strong>Talents</strong> and <strong>Skills</strong>, '
+ 'instead of money, you\'ll earn <strong>Time</strong>. <br>'
+ '<strong>"1 hour"</strong> becomes a currency of exchange, equal for all. <br>'
+ 'You can use these <strong>"Time Credits"</strong> to meet your needs, looking in <strong>Available Skills</strong>. <br>'
+ 'In Giving and Receiving, we will thus create bonds of <strong>Friendship, Solidarity, Cooperation and Enjoyment</strong> <br> <br>'
+ 'This project aims to spread this reality, which already exists for many years and is called <strong>"Time Bank"</strong>. '
+ 'The <strong>secretariats</strong> in all over the world, will serve an extra to give greater <strong>reliability</strong> and <strong>trust</strong> in the exchange of talents between unknown people. '
+ 'We will thus create a <strong>trust network</strong> in the neighborhood, as is already practiced in numerous <strong>Ecovillages</strong> and Community of the world. ',
},
freegas: {
title: 'Free G.A.S.',
descr: 'Would you like to use an App that allows you to easily Buy Local Products directly from <strong>Manufacturer</strong>? <br> '
+ 'With <strong>Solidarity Purchase Groups</strong> (in Italian: "Gruppo di Aacquisto Solidale") we avoid unnecessary intermediaries, obtaining many benefits including: <br>'
+ '<ul class="mylist" style="padding-left: 20px;"> <li> <strong>Superior Quality</strong> of the product </li>'
+ '<li> Consumer <strong>Reviews</strong> will favor Producers with Healthy Intents </li>'
+ '<li> Possibility to interact with the Producer </li>'
+ '<li> Open to Relations between people, sharing <strong>Recipes</strong> and precious <strong>Tips</strong> </li>'
+ '<li> <strong>Savings</strong> money (wholesale prices) </li>'
+ '<li> Enhancing the <strong>Territory</strong> and the <strong>Local Economy</strong> </li>'
+ '<li> <strong>Fair Conditions</strong> for Workers </li>'
+ '<li> Reduced <strong>Environmental Impact</strong> </ul>',
},
freeliving: {
title: 'Free Co-Living',
descr: 'Join more reality, sharing the experience of living together, for a defined period: <br> '
+ '1) Someone <strong>Lives alone</strong> and has a house. <br>'
+ '2) Who needs a temporary <strong> accommodation </strong>. <br><br>'
+ 'Today more and more people <strong> live alone </strong> and would like to continue living in their own house. <br>'
+ 'Other people instead need a <strong>room</strong>, by choice or by necessity, and in return they are available to'
+ '<strong>contribute to expenses</strong> for households or maybe <strong>help</strong> to <strong>go shopping</strong>, cooking, <strong>cleaning house</strong> or simply offering him <strong>companionship</strong>. <br> '
+ 'Through this tool, people can get in touch and decide in which way <strong>co-living</strong>. The <strong>reviews</strong> released and the <strong>detail</strong> of user profiles, '
+ 'will help in <strong>choosing</strong> the person more in <strong>tune</strong>.',
},
freecollabora: {
title: 'Who can collaborate?',
descr: 'All those who are in line with <strong>Ethical Principles</strong> and research of <strong>Global Wellness of the Planet</strong> <br> '
+ 'Therefore they are welcome:'
+ '<ul class = "mylist" style = "padding-left: 20px;">'
+ '<li> <strong>Non-profit associations, Ecovillages, Communities</strong> </li>'
+ '<li> Groups that want to promote <strong>Innovative Social Projects</strong> for <strong>Happy Degrowth</strong> </li>'
+ '<li> Who manages a <strong>Solidarity Purchase Group</strong> </li>'
+ '<li><strong>Local Ethical Producers</strong></li>'
+ '<li> Who manages a <strong>Time Bank</strong> </li>'
+ '<li> <strong>Anyone who wants to participate</strong>, in the form it considers most appropriate. </li>'
+ '</ul>',
},
freesostieni: {
title: 'How to support the project?',
descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li> <strong>Sharing it</strong> to all those who want to join together in the growth and development of a New Era </li> '
+ '<li> Answering to <strong>Popular Polls</strong> and leaving <strong>Feedback</strong> </li>'
+ '<li> Through a <strong>donation</strong> (<strong>even $ 1</strong>) for expenses. <br>'
+ '</ul><br>'
+ 'I see a <strong>future</strong> where you will no longer use money. Where people <strong>will help each other</strong> and won\'t need to "own" things, but <strong>will share</strong> with others. <br> ',
},
multiplatform: {
title: 'Multi-platform',
descr: 'It is compatible with Google Chrome, Firefox, Safari, iOS, Android and PC. The Application is easily installed, without going through the store. '
+ 'just share the nametranslate of this site <strong>www.freeplanet.app</strong>.<br>'
+ 'After registration it will ask to be added to the application list and in the screen',
},
free: {
title: 'Free, Open Source and No Advertising',
descr: 'This App <strong>is not for sale</strong>, has no commercial purpose, <strong>is priceless</strong> and belongs to the <strong>New World People</strong>.'
+ '<br>Anyone can use it and benefit from it.<br>To me the task of managing it and protecting it. '
+ 'Only donations from private individuals and non-profit associations will be accepted, in line with the Principles, which will be used to cover the expenses. <br>'
+ '<strong>Thanks all for the support</strong>. ',
},
contacts: 'Contacts',
},
},
fr: {
pages: {
},
msg: {
},
},
de: {
pages: {
},
msg: {
},
},
}
export default msg_website;

View File

@@ -0,0 +1,88 @@
const msg_website_de = {
ws: {
sitename: 'AYNI',
siteshortname: 'Ayni',
botname: 'AYNI BOT',
},
pages: {
home: 'Home',
profile: 'Profilo',
payment: 'Pagamenti',
regok: 'Registrazione Confermata',
presentazione: 'Presentazione',
presentazione2: 'Presentazione',
invita: 'Invita Persone',
SignUp: 'Nuova Registrazione',
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
SignUp2: 'Registrazione',
SignUp4: 'Reg',
SignIn: 'Login',
status: 'Statistiche',
nextzoom: 'Conferenze',
requestresetpwd: 'Richiesta Reset Password',
vreg: 'Verifica Reg',
dashboard: 'Lavagna',
statoattuale: 'Stato Attuale',
posizione_in_programmazione: 'Lista d\'Imbarco',
posizione_in_nave: 'Lista Navi',
nave: 'Nave',
testimonial: 'Testimonianze',
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
extralist: 'Lista Extra',
Test1: 'Test1',
Test2: 'Test2',
chisiamo: 'Chi Siamo',
linkamici: 'Link Amici',
dovesiamo: 'Dove Siamo',
evento: 'Evento',
eventodef: 'Evento:',
prova: 'prova',
dbop: 'Operazioni',
statusreg: {
reg: 'Partecipanti',
verifieds: 'Verificati',
autorizzati: 'Autorizzati',
passeggeri: 'Passeggeri Navi',
giainlista: 'Gia in Lista',
newreg: 'Ultime Registrazioni:',
nationality: 'Nazionalità',
verified: 'Verificata',
nonverified: 'Non Verificata',
req7: 'Con 5 passi entri nella lista d\'Imbarco',
req9: 'Con 7 passi aiuti {sitename} a Crescere!',
req: 'Passi',
people: 'Inv.',
peoplelegend: 'Numero d\'Invitati',
},
},
msg: {
myAppDescription: '',
keywords_base: '',
myDescriz: '',
sottoTitoloApp: '',
sottoTitoloApp2: '',
sottoTitoloApp3: '',
sottoTitoloApp4: '',
},
homepage: {
nostra_missione: 'Nostra Missione',
associazione: '',
tit_come_associarsi: 'Come Associarsi',
testo_come_associarsi: '',
titlecontatti: 'CONTATTI',
},
text: {
videotitle: 'VIDEO',
how: 'COME FUNZIONA',
what: 'COSA TI SERVE',
step: 'PASSI DA COMPIERE',
testimonial: 'TESTIMONIANZE',
faq: 'DOMANDE FREQUENTI (FAQ)',
advise: 'SUGGERIMENTI',
download: 'MATERIALE DISPONIBILE',
},
};
export default msg_website_de;

View File

@@ -0,0 +1,160 @@
const msg_website_enUs = {
ws: {
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
products: {
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
weight: 'Peso',
stars: 'Voto',
color: 'Colore',
theme: 'Tema',
},
hours: {
descr: 'Descrizione',
date: 'Data',
time_start: 'Ora Inizio',
time_end: 'Ora Fine',
hours: 'Ore',
note: 'Note Extra',
},
pages: {
home: 'Home',
profile: 'Profile',
profile2: 'ProfiloU',
mypage2: 'mypage2',
myservice2: 'myservice2',
test: 'Test',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
storehouses: 'Magazzino',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Payments',
regok: 'Registration Confirmed',
presentazione: 'Presentation',
presentazione2: 'Presentation',
invita: 'Invite People',
SignUp: 'Registration',
SignUpIscrizione: 'Diventa Socio CNM',
SignUp_alreadylista: 'Registration for those who are already in the List!',
SignUp2: 'Registration',
SignIn: 'Login',
status: 'Current state',
nextzoom: 'Conferences',
requestresetpwd: 'Password Reset Request',
vreg: 'Check Registration',
dashboard: 'Dashboard',
statoattuale: 'Current Status',
posizione_in_programmazione: 'Boarding List',
posizione_in_nave: 'Ships List',
nave: 'Ship',
testimonial: 'Reviews',
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
Sites: 'Siti Web',
extralist: 'Lista Extra',
Test1: 'Test1',
Test2: 'Test2',
chisiamo: 'Chi Siamo',
linkamici: 'Link Amici',
dovesiamo: 'Dove Siamo',
calendarioeventi: 'Calendario Eventi',
evento: 'Evento',
eventodef: 'Evento:',
prova: 'prova',
dbop: 'Operazioni',
projall: 'Comunitari',
groups: 'Lista Gruppi',
projectsShared: 'Condivisi da me',
myprojects: 'Privati',
favproj: 'Favoriti',
statusreg: {
reg: 'Participants',
verifieds: 'Verificati',
autorizzati: 'Autorizzati',
autorizzare: 'In attesa di Abilitazione',
passeggeri: 'Passengers Ships',
giainlista: 'Already in the List',
newreg: 'New registrations:',
nationality: 'Nationality',
nationality_born: 'Nazione di Nascita',
verified: 'Verified',
nonverified: 'Not Verified',
req7: 'With 5 steps you enter the boarding list.',
req9: 'With 7 steps help {sitename} to grow!',
req: 'Steps',
people: 'Gue.',
peoplelegend: 'Number of guests',
},
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore',
department: 'Uffici',
title: 'Titolo',
path: 'Percorso',
img1: 'Immagine 1',
contentfield: 'Testo 1',
video1: 'Video 1',
ratio1: 'Ratio 1',
img2: 'Immagine 2',
content2: 'Testo 2',
video2: 'Video 2',
ratio2: 'Ratio 2',
img3: 'Immagine 3',
content3: 'Testo 3',
video3: 'Video 3',
ratio3: 'Ratio 3',
content4: 'Testo 4',
active: 'Attiva',
inmenu: 'Sul Menu',
submenu: 'SottoMenu',
infooter: 'Sul Footer',
internalpage: 'Pagina Interna',
order: 'Posizione',
icon: 'Icona',
imgback: 'Immagine di Sfondo',
onlyif_logged: 'Solo se Loggati',
only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri',
color: 'Colore',
},
msg: {
myAppDescription: '',
underconstruction: 'App in costruzione...',
keywords_base: '',
myDescriz: '',
sottoTitoloApp: '..',
sottoTitoloApp2: '..',
sottoTitoloApp3: '..',
sottoTitoloApp4: '',
},
homepage: {
titlecontatti: 'CONTACTS',
},
text: {
how: 'HOW TO WORK',
what: 'WHAT YOU NEED',
step: 'STEPS TO DO',
videotitle: 'VIDEO',
testimonial: 'REVIEWS',
faq: 'FREQUENTLY ASKED QUESTIONS (FAQ)',
advise: 'ADVISE',
download: 'AVAILABLE DOCUMENTS',
},
};
export default msg_website_enUs;

View File

@@ -0,0 +1,159 @@
const msg_website_es = {
ws: {
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
products: {
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
weight: 'Peso',
stars: 'Voto',
color: 'Colore',
theme: 'Tema',
},
hours: {
descr: 'Descrizione',
date: 'Data',
time_start: 'Ora Inizio',
time_end: 'Ora Fine',
hours: 'Ore',
note: 'Note Extra',
},
pages: {
home: 'Home',
profile: 'Perfil',
profile2: 'ProfiloU',
mypage2: 'mypage2',
myservice2: 'myservice2',
mygood2: 'mygood2',
test: 'Test',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
storehouses: 'Magazzino',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Paiements',
regok: 'Registro confirmado',
presentazione: 'Presentación',
presentazione2: 'Presentación',
invita: 'Invitar a la gente',
SignUp: 'Registro',
SignUpIscrizione: 'Diventa Socio CNM',
SignUp_alreadylista: 'Inscripción para los que ya están en la Lista!',
SignUp2: 'Registro',
SignIn: 'Login',
status: 'Estadísticas',
nextzoom: 'Conferencias',
requestresetpwd: 'Solicitud de restablecimiento de contraseña',
calendarioeventi: 'Calendario Eventos',
vreg: 'Verifica Reg',
dashboard: 'Tablero',
statoattuale: 'Estado Actual',
posizione_in_programmazione: 'Lista de embarque',
posizione_in_nave: 'Lista de Naves',
nave: 'Nave',
testimonial: 'Opiniones',
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
Sites: 'Siti Web',
extralist: 'Lista Extra',
Test1: 'Test1',
Test2: 'Test2',
chisiamo: 'Chi Siamo',
linkamici: 'Link Amici',
dovesiamo: 'Dove Siamo',
evento: 'Evento',
eventodef: 'Evento:',
prova: 'prova',
dbop: 'Operazioni',
projall: 'Comunitari',
groups: 'Lista Gruppi',
projectsShared: 'Condivisi da me',
myprojects: 'Privati',
favproj: 'Favoriti',
statusreg: {
reg: 'Participantes',
verifieds: 'Verificati',
autorizzati: 'Autorizzati',
autorizzare: 'In attesa di Abilitazione',
passeggeri: 'Barcos de pasajeros',
giainlista: 'Gia in Lista',
newreg: 'Nuevas inscripciones :',
nationality: 'Nacionalidad',
verified: 'Verificada',
nonverified: 'No Verificada',
req7: 'Con 5 pasos usted entra en la lista de embarque',
req9: 'Con 7 pasos ayuda a {sitename} a crecer!',
req: 'Pasos',
people: 'Inv.',
peoplelegend: 'Número de invitados',
},
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore',
department: 'Uffici',
title: 'Titolo',
path: 'Percorso',
img1: 'Immagine 1',
contentfield: 'Testo 1',
video1: 'Video 1',
ratio1: 'Ratio 1',
img2: 'Immagine 2',
content2: 'Testo 2',
video2: 'Video 2',
ratio2: 'Ratio 2',
img3: 'Immagine 3',
content3: 'Testo 3',
video3: 'Video 3',
ratio3: 'Ratio 3',
content4: 'Testo 4',
active: 'Attiva',
inmenu: 'Sul Menu',
submenu: 'SottoMenu',
infooter: 'Sul Footer',
internalpage: 'Pagina Interna',
order: 'Posizione',
icon: 'Icona',
imgback: 'Immagine di Sfondo',
onlyif_logged: 'Solo se Loggati',
only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri',
color: 'Colore',
},
msg: {
myAppDescription: '',
keywords_base: '',
myDescriz: '',
sottoTitoloApp: '..',
sottoTitoloApp2: '..',
sottoTitoloApp3: '..',
sottoTitoloApp4: '',
},
homepage: {
titlecontatti: 'CONTACTOS',
},
text: {
how: 'COMO FUNCIONA',
what: 'QUE NECESITAS',
step: 'PASOS A REALIZAR',
videotitle: 'VIDEO',
testimonial: 'TESTIMONIOS',
faq: 'PREGUNTAS FRECUENTES (FAQ)',
advise: 'CONSEJOS',
download: 'MATERIAL DISPONIBLES',
},
};
export default msg_website_es;

View File

@@ -0,0 +1,64 @@
const msg_website_fr = {
ws: {
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
homepage: {
titlecontatti: 'CONTACTS',
},
pages: {
home: 'Home',
profile: 'profil',
payment: 'paiements',
regok: 'Inscription confirmée',
presentazione: 'Présentation',
presentazione2: 'Présentation',
invita: 'Inviter des personnes',
SignUp: 'Inscription',
SignUp_alreadylista: 'Inscription pour ceux qui sont déjà inscrits sur la liste!',
SignUp2: 'Inscription',
SignIn: 'Login',
status: 'État actuel',
nextzoom: 'Conférences',
requestresetpwd: 'Demande de réinitialisation du mot de passe',
vreg: 'Vérifier l\'inscription',
dashboard: 'Tableau de bord',
statoattuale: 'Situation Actuelle',
posizione_in_programmazione: 'Liste d\'embarquement',
posizione_in_nave: 'Liste des Navires',
nave: 'Navires',
testimonial: 'Commentaires',
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
Test1: 'Test1',
Test2: 'Test2',
statusreg: {
reg: 'Participants',
passeggeri: 'Navires à passagers',
giainlista: 'Gia in Lista',
newreg: 'Nouvelles inscriptions:',
nationality: 'Nationalité',
verified: 'Vérifié',
nonverified: 'Non Vérifié',
req7: 'Avec 5 étapes, vous entrez dans la liste d\'embarquement.',
req9: 'Avec 7 étapes, aidez {sitename} à se développer !',
req: 'Étapes',
people: 'Inv.',
peoplelegend: 'Nombre d\'invités',
},
},
msg: {
myAppDescription: '',
keywords_base: '',
myDescriz: '',
sottoTitoloApp: '..',
sottoTitoloApp2: '..',
sottoTitoloApp3: '..',
sottoTitoloApp4: '',
},
};
export default msg_website_fr;

View File

@@ -0,0 +1,218 @@
const msg_website_it = {
ws: {
sitename: 'Più che Buono',
siteshortname: 'Più che Buono',
description: '',
keywords: '',
},
hours: {
descr: 'Descrizione',
date: 'Data',
time_start: 'Ora Inizio',
time_end: 'Ora Fine',
hours: 'Ore',
note: 'Note Extra',
},
pages: {
home: 'Home',
profile: 'Profilo',
profile2: 'ProfiloU',
mypage2: 'mypage2',
myservice2: 'myservice2',
myhosps2: 'myhosps2',
mygood2: 'mygood2',
fundraising: 'Sostieni il Progetto',
notifs: 'Configura le Notifiche',
unsubscribe: 'Disiscriviti',
test: 'Test',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
categories: 'Categorie',
storehouses: 'Magazzino',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Pagamenti',
regok: 'Registrazione Confermata',
presentazione: 'Presentazione',
presentazione2: 'Presentazione',
invita: 'Invita Persone',
SignUp: 'Modulo di Registrazione:',
SignUpCollettivo: 'Reg. Collettiva:',
SignUpCollettivo2: 'Registrazione Collettiva:',
need_Telegram: 'Per poter utilizzare la Piattaforma occorre avere <a href="https://play.google.com/store/apps/details?id=org.telegram.messenger" target="_blank">Telegram</a> installato<br>',
Registrazione_Con_Bot: '1) Copia questo username cliccandoci sopra:',
SignUpIscrizione: 'Diventa Socio CNM',
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
SignUp2: 'Registrazione',
SignUp3: 'Reg',
SignUp4: 'Reg',
SignUp5: 'Reg',
SignUp6: 'Registrati',
SignUp7: 'Registra',
SignUp11: 'Registra',
SignUpBot: 'Registrati con Telegram',
SignIn: 'Login',
status: 'Statistiche',
nextzoom: 'Conferenze',
requestresetpwd: 'Richiesta Reset Password',
vreg: 'Verifica Reg',
dashboard: 'Lavagna',
statoattuale: 'Stato Attuale',
posizione_in_programmazione: 'Lista d\'Imbarco',
posizione_in_nave: 'Lista Navi',
nave: 'Nave',
testimonial: 'Testimonianze',
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
Sites: 'Siti Web',
extralist: 'Lista Extra',
Test1: 'Test1',
Test2: 'Test2',
chisiamo: 'Chi Siamo',
linkamici: 'Link Amici',
dovesiamo: 'Dove Siamo',
calendarioeventi: 'Calendario Eventi',
evento: 'Evento',
eventodef: 'Evento:',
prova: 'prova',
dbop: 'Operazioni',
projall: 'Comunitari',
groups: 'Lista Gruppi',
projectsShared: 'Condivisi da me',
myprojects: 'Privati',
favproj: 'Favoriti',
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore',
department: 'Uffici',
title: 'Titolo',
path: 'Percorso',
img1: 'Immagine 1',
contentfield: 'Testo 1',
video1: 'Video 1',
ratio1: 'Ratio 1',
img2: 'Immagine 2',
content2: 'Testo 2',
video2: 'Video 2',
ratio2: 'Ratio 2',
img3: 'Immagine 3',
content3: 'Testo 3',
video3: 'Video 3',
ratio3: 'Ratio 3',
content4: 'Testo 4',
active: 'Attiva',
inmenu: 'Sul Menu',
submenu: 'SottoMenu',
infooter: 'Sul Footer',
internalpage: 'Pagina Interna',
order: 'Posizione',
icon: 'Icona',
imgback: 'Immagine di Sfondo',
onlyif_logged: 'Solo se Loggati',
only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri',
color: 'Colore',
},
msg: {
myAppName: 'Più che Buono',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
underconstruction: 'App in costruzione...',
myDescriz: '',
sottoTitoloApp: 'Rete Italiana di Scambio Orizzontale',
sottoTitoloApp2: '',
},
homepage: {
descrapp_title1: 'Uniti per Evolvere e Sperimentare',
descrapp_pag1: 'Siamo la <strong>Rete Italiana di Scambio Orizzontale</strong>, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della <strong>condivisione</strong> e della <strong>cooperazione</strong>. ' +
'Valori semplici e profondi che ci aiutano a ritrovare il <strong>Senso della Vita</strong>, perduto in questa società consumista, e riporti quei <strong>Sani Pricìpi Naturali</strong> ed Umani di <strong>Fratellanza</strong>'
+ ' che intere popolazioni antiche conoscevano bene.',
descrapp_pag2: 'E\' giunta l\'ora di utilizzare i nuovi strumenti <strong>Tecnologici</strong> a nostro <strong>favore</strong>, per <strong>Liberarci</strong> '
+ 'così piano piano dalla <strong>schiavitù</strong> del <strong>"Lavoro per generare Denaro"</strong> e trasformando le nostre <strong>Capacitá</strong> in '
+ '<strong>Risorse Umane</strong> per poterci sostenere e vivere in <strong>Armonia</strong> con gli altri.<br>' +
'<br><strong>R.I.S.O.</strong><br>' +
'<em>Siamo una rete di comunità consapevoli, basata sul sostegno reciproco, la fiducia, la condivisione e l\'ascolto. \n' +
'Coltiviamo terreno fertile per creare, in armonia con la natura, un mondo di collettività libere e autosufficienti, attraverso un circuito di scambio di esperienze umane, beni e servizi.<br>' +
'Partecipa al cambiamento. RISO sei anche tu!</em>',
freesocial: {
title: 'Social',
descr: 'Una Community organizzata per <strong>Categorie</strong>, dove potrai unirti a <strong>Gruppi Tematici</strong>, '
+ 'Condividere <strong>Esperienze</strong> e unire Competenze per organizzare e sostenere <strong>Progetti Innovativi</strong> per il Popolo.<br><br>'
+ 'Verranno evidenziati sviluppi <strong>Etici</strong> come l\'<strong>Auto-Produzione</strong>, la <strong>Sostenibilitá</strong>, '
+ 'la Buona <strong>Salute Naturale</strong> e il <strong>Rispetto per l\'Ambiente</strong> e per tutti gli <strong>Esseri Viventi</strong> di questo '
+ '<strong>Pianeta</strong>.',
},
freetalent: {
title: 'Beni e Servizi',
descr: 'Condividi i tuoi <strong>Talenti</strong> e <strong>Abilità</strong>, '
+ 'Nel Dare e Ricevere, si creeranno così legami di <strong>Amicizia, Solidarietà, Cooperazione e Divertimento</strong><br><br>' +
'Favoriamo lo scambio locale di <strong>Beni e Servizi</strong> dove potrai scegliere cosa chiedere in cambio (Dono, Offerta Libera, Baratto, Monete Alternative, ecc...).'
},
coin: {
title: 'RIS - Credito Alternativo',
},
freeliving: {
title: 'Gruppi Territoriali',
descr: 'Questo progetto vuole diffondere la creazione di Gruppi Territoriali Provinciali, '
+ 'per poter favorire progetti condivisi in ambito territoriale e creare così una <strong>Rete di Fiducia</strong> fino al <strong>vicinato</strong>, come giá viene praticato in piccolo, in numerosi <strong>Ecovillaggi</strong> e Comunità del mondo.',
},
freecollabora: {
title: 'Chi può Collaborare?',
descr: 'Tutti coloro che sono in linea con <strong>Princìpi Etici</strong> e ricerca del <strong>Benessere Globale del Pianeta</strong><br>'
+ 'Pertanto sono i benvenuti:'
+ '<ul class="mylist" style="padding-left: 20px;">'
+ '<li><strong>Associazioni no-profit, Ecovillaggi, Comunità</strong></li>'
+ '<li>Gruppi che intendono promuovere <strong>Progetti Sociali Innovativi</strong> per una <strong>Decrescita Felice</strong></li>'
+ '<li>Chi gestisce un <strong>Gruppo di Acquisto Solidale (G.A.S.)</strong></li>'
+ '<li><strong>Produttori Locali Etici</strong></li>'
+ '<li><strong>Chiunque voglia partecipare</strong>, nella forma che ritiene più opportuna.</li>'
+ '</ul>',
},
freesostieni: {
title: 'Come Sostenere il progetto <strong>Riso.app</strong>?',
descr: '<ul class="mylist" style="padding-left: 20px;">'
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>'
+ '<li>👨🏻‍💻 Con una <strong>piccola donazione</strong> per le spese dei Server, manutenzione e per i continui sviluppi e miglioramenti</li></ul>' +
'1) Tramite <strong><a href="https://paypal.me/paoloarena" target="_blank">Paypal</a></strong>:<br>' +
'<br>2) Tramite <strong>Satispay</strong>: <a href="https://www.satispay.com/app/match/link/money-box/S6Y-SVN--62712D42-35B0-4BB9-8511-410C2AB8CD45" target="_blank">Clicca qui</a><br>' +
'<div style="font-size: 1rem; background-color: white; color: blue; border: solid 2px #f00; margin: 5px; padding: 5px; border-radius: 10px; " ' +
'class="row justify-around">' +
'Se ancora non hai Satispay <a href="https://www.satispay.com/promo/PAOLOARENA4">Richiedila cliccando qui</a></br>' +
'</div>' +
'<br>3) Tramite <strong>Bonifico Bancario</strong>:<br>' +
'(Scrivi a Surya (<a href="https://t.me/surya1977">@surya1977</a>) per le coordinate</br>' +
'' +
'4) In alternativa scegli tu una forma di Dono <br />' +
'Grazie Mille per l\'Aiuto ed il Supporto' +
'<br>',
},
multiplatform: {
title: 'Multi-piattaforma',
descr: 'E\' compatibile con Google Chrome, Firefox, Opera, Safari, iPhone, Android e PC. L\'Applicazione s\'installa facilmente, senza dover passare dallo store. '
+ 'basta entrare sul sito <strong>www.riso.app</strong>.<br>'
+ 'Dopo la registrazione chiederà di aggiungerlo alla <strong>Schermata Home</strong> (oppure cliccare sul menu "..." del browser e scegliere "<strong>Installa APP</strong>")',
},
free: {
title: 'Gratuita, Open Source e Niente Pubblicità',
descr: 'Questa App <strong>non è in vendita</strong>, non ha scopi commerciali, quindi <strong>non ha prezzo</strong> e nessun dato contenuto in esso verrà mai venduto, in quanto appartiene a <strong>Tutti Noi</strong> ed a nessuno in particolare.<br>Chiunque potrá utilizzarla e beneficiarne da essa.<br>' +
'<em>Progetto Open Source su <a href="https://gitlab.com/surya89" target="_blank">GitLab</a>.</em><br><br>'
+ '<strong>Grazie a Tutti per il sostegno</strong>. ',
},
titlecontatti: 'Contatti',
contacts: '',
},
};
export default msg_website_it;

View File

@@ -0,0 +1,74 @@
const msg_website_pt = {
ws: {
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
pages: {
home: 'Home',
profile: 'Perfil',
payment: 'Pagamentos',
regok: 'Inscrição confirmada',
presentazione: 'Apresentação',
presentazione2: 'Apresentação',
invita: 'Convidar Pessoas',
SignUp: 'Inscrição',
SignUp_alreadylista: 'Inscrição para os que já estão na Lista!',
SignUp2: 'Inscrição',
SignIn: 'Login',
status: 'Estatísticas',
nextzoom: 'Conférences',
requestresetpwd: 'Pedido de redefinição de senha',
vreg: '',
dashboard: 'Tablero',
statoattuale: 'Status Atual',
posizione_in_programmazione: 'Lista de Embarque',
posizione_in_nave: 'Lista de Navios',
nave: 'Navios',
testimonial: 'Opiniones',
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
Test1: 'Test1',
Test2: 'Test2',
statusreg: {
reg: 'Participantes',
passeggeri: 'Navios de Passageiros',
giainlista: 'Já na lista',
newreg: 'Últimas Inscrições:',
nationality: 'Nacionalidade',
verified: 'Verificado',
nonverified: 'Não verificado',
req7: 'Com 5 passos, o usuário entra na lista de embarque.',
req9: 'Com 7 passos ajudam a {sitename} a crescer!',
req: 'Passos',
people: 'Con.',
peoplelegend: 'Número de convidados',
},
},
msg: {
myAppDescription: '',
keywords_base: '',
myDescriz: '',
sottoTitoloApp: '..',
sottoTitoloApp2: '..',
sottoTitoloApp3: '..',
sottoTitoloApp4: '',
},
homepage: {
titlecontatti: 'CONTACTOS',
},
text: {
how: 'COMO FUNCIONA',
what: 'QUE NECESITAS',
step: 'PASOS A REALIZAR',
videotitle: 'VIDEO',
testimonial: 'TESTIMONIOS',
faq: 'PREGUNTAS FRECUENTES (FAQ)',
advise: 'CONSEJOS',
download: 'MATERIAL DISPONIBLES',
},
};
export default msg_website_pt;

View File

@@ -0,0 +1,59 @@
const msg_website_si = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
},
pages: {
home: 'Domača stran',
profile: 'Profil',
payment: 'Plačila',
regok: 'Registracija potrjena',
presentazione: 'Predstavitev',
presentazione2: 'Predstavitev',
invita: 'Povabi osebe',
SignUp: 'Nova Registracija',
SignUp2: 'Registracija',
SignIn: 'Vpis',
status: 'Statistika',
nextzoom: 'Conferenze',
requestresetpwd: 'Prošnja za ponastavitev Gesla',
vreg: 'Preveri Registracijo',
dashboard: 'Tabla',
statoattuale: 'TrenutniStatus',
posizione_in_programmazione: 'Seznam Plovbe',
posizione_in_nave: 'Seznam Ladiji',
nave: 'Ladje',
Admin: 'Administrator',
evento: 'Dogodek',
eventodef: 'Dogodek:',
statusreg: {
reg: 'Udeleženci',
passeggeri: 'Potniki Ladjic',
giainlista: 'Že na seznamu',
newreg: 'Zadnje Registracije:',
nationality: 'Nacionalnost',
verified: 'Preveri',
nonverified: 'Ni preverjeno',
req7: 'S 7 koraki vstopis na seznam za plovbo',
req9: 'Z 9-imi koraki pomagaš, da {sitename} Raste!',
req: 'Koraki',
people: 'Pov.',
peoplelegend: 'Število \'Povabljenih',
},
},
msg: {
myAppDescription: '',
keywords_base: '',
myDescriz: '',
sottoTitoloApp: '',
sottoTitoloApp2: '',
sottoTitoloApp3: '',
sottoTitoloApp4: '',
},
homepage: {
titlecontatti: 'Kontakt',
},
};
export default msg_website_si;

View File

@@ -0,0 +1,202 @@
import {
IListRoutes,
ILang,
IPreloadImages,
ISites,
} from '@model'
import { func } from '@store/Modules/fieldsTable'
const firstPage = {
active: true,
order: 5,
path: '/',
materialIcon: 'home',
name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'),
reqauth: false,
inmenu: true,
infooter: true,
}
function getDynamicPages(site: ISites): IListRoutes[] {
const baseroutes: IListRoutes[] = [
{
active: true,
order: 5,
path: '/',
materialIcon: 'home',
name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'),
reqauth: false,
inmenu: true,
infooter: true,
},
/*{
active: true,
order: 20,
path: '/events',
materialIcon: 'fas fa-bullhorn',
name: 'mypages.events',
component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},*/
{
active: true,
order: 120,
path: '/myprofile',
materialIcon: 'fas fa-user',
name: 'pages.profile',
component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: true,
order: 120,
path: '/editprofile',
materialIcon: 'fas fa-user',
name: 'pages.profile3',
component: () => import('@/views/user/editprofile/editprofile.vue'),
meta: { requiresAuth: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 130,
path: '/friends',
materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti',
component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: site.confpages && site.confpages.enableGroups,
order: 132,
path: '/groups',
materialIcon: 'fas fa-users',
name: 'mypages.groups',
component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: false,
},
{
active: true,
order: 136,
path: '/grp/:groupname',
materialIcon: 'fas fa-user',
name: 'proj.group2',
component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true },
inmenu: false,
infooter: false,
},
{
active: true,
path: '/separator',
name: 'separator',
order: 140,
isseparator: true,
inmenu: true,
},
{
active: true,
order: 130,
path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user',
name: 'pages.mypage2',
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 130,
path: '/myservice/:idSkill',
materialIcon: '',
name: 'pages.myservice2',
component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 135,
path: '/myhosps/:idHosp',
materialIcon: '',
name: 'pages.myhosps2',
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 132,
path: '/mygood/:idGood',
materialIcon: '',
name: 'pages.mygood2',
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 150,
path: '/fundraising',
materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 80,
path: '/calendario-eventi',
materialIcon: 'event',
name: 'ris.calendario_eventi_riso',
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar',
inmenu: false,
infooter: false
},
]
return baseroutes
}
export function firstimagehome() {
let img = 'statics/images/background.jpg'
return img
}
const preLoadImages: IPreloadImages[] = []
export const lang_available: ILang[] = []
export const arrLangUsed: string[] = []
export const preloadedimages = []
export const routes: IListRoutes[] = [firstPage]
export const static_data = {
routes,
arrLangUsed,
getDynamicPages,
lang_available,
preLoadImages,
preloadedimages,
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

View File

@@ -0,0 +1,143 @@
{
"name": "piuchebuono",
"version": "2.0.1",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Paolo Arena",
"private": true,
"keywords": [],
"license": "MIT",
"scripts": {
"dev": "quasar dev",
"build": "quasar build",
"buildpwa": "quasar build -m pwa",
"buildspa": "quasar build -m spa",
"lint": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./",
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint --ext .ts,.vue --ignore-path .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m pwa",
"spa": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m spa",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js"
},
"dependencies": {
"@quasar/extras": "^1.16.7",
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.16",
"@vue-leaflet/vue-leaflet": "^0.9.0",
"@vue/compat": "^3.2.47",
"@vue/compiler-sfc": "^3.2.47",
"@vue/eslint-config-standard": "7.0.0",
"@vuelidate/core": "^2.0.2",
"@vuelidate/validators": "^2.0.2",
"acorn": "^8.8.2",
"animate.css": "^4.1.1",
"autoprefixer": "^10.4.14",
"axios": "^1.3.5",
"bcryptjs": "^2.4.3",
"chart.js": "3.9.1",
"core-js": "^3.30.0",
"crypto": "^1.0.1",
"date-fns": "^2.29.3",
"dotenv": "^16.0.3",
"echarts": "5.4.2",
"eslint-plugin-quasar": "^1.1.0",
"graphql": "^16.6.0",
"graphql-tag": "^2.12.6",
"gsap": "^3.11.5",
"jquery": "^3.6.4",
"js-cookie": "^3.0.1",
"localforage": "^1.10.0",
"lodash": "^4.17.21",
"normalize.css": "^8.0.1",
"npm": "^9.6.4",
"nprogress": "^0.2.0",
"pinia": "^2.0.33",
"prerender-spa-plugin": "^3.4.0",
"quasar": "^2.12.07",
"quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2",
"typescript-eslint": "^0.0.1-alpha.0",
"vee-validate": "^4.8.4",
"vue": "^3.2.47",
"vue-chart-3": "^3.1.8",
"vue-class-component": "^8.0.0-rc.1",
"vue-country-code": "^1.1.3",
"vue-echarts": "^6.5.4",
"vue-i18n": "^9.2.2",
"vue-idb": "^0.2.0",
"vue-loader": "^17.0.1",
"vue-property-decorator": "^10.0.0-rc.3",
"vue-router": "^4.1.6",
"vue-scroll-reveal": "^1.0.11",
"vue-social-sharing": "^4.0.0-alpha4",
"vue-svgicon": "^4.0.0-alpha.3",
"vue-timeago3": "^2.3.0",
"vue2-dragula": "^2.5.5",
"vuex": "^4.1.0",
"vuex-router-sync": "^6.0.0-rc.1"
},
"devDependencies": {
"@quasar/app": "^3.3.3",
"@types/bcryptjs": "^2.4.2",
"@types/dotenv": "^8.2.0",
"@types/googlemaps": "^3.43.3",
"@types/jest": "^29.5.0",
"@types/js-cookie": "^3.0.3",
"@types/node": "18.15.11",
"@types/nprogress": "^0.2.0",
"@types/vue-tel-input": "^2.1.2",
"@types/vuelidate": "^0.7.16",
"@typescript-eslint/eslint-plugin": "^6.7.3",
"@typescript-eslint/parser": "^6.7.2",
"eslint": "^8.37.0",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.1.1",
"eslint-plugin-vue": "^9.10.0",
"file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.0",
"http-proxy-middleware": "^2.0.6",
"jest": "^29.5.0",
"json-loader": "^0.5.7",
"node-sass": "^9.0.0",
"npm-check-updates": "^16.10.7",
"optimize-css-assets-webpack-plugin": "^6.0.1",
"postcss": "^8.4.21",
"postcss-loader": "^7.2.4",
"sass-loader": "^13.2.2",
"strip-ansi": "=7.0.1",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.2",
"tslint": "^6.1.3",
"tslint-config-standard": "^9.0.0",
"tslint-loader": "^3.5.4",
"typescript": "^5.2.2",
"vue-cli-plugin-element-ui": "^1.1.4",
"vueify": "^9.4.1",
"webpack": "^5.78.0",
"workbox-webpack-plugin": "^6.5.4"
},
"browser": {
"crypto": false
},
"browserslist": [
"last 100 Chrome versions",
"last 40 Firefox versions",
"last 20 Edge versions",
"last 55 Safari versions",
"last 90 Android versions",
"last 250 ChromeAndroid versions",
"last 60 FirefoxAndroid versions",
"last 35 iOS versions",
"last 10 Opera versions",
"> 0.03%",
"not dead"
],
"engines": {
"node": ">= 16.14.0",
"npm": ">= 6.14.8",
"yarn": ">= 1.21.1"
}
}

View File

@@ -0,0 +1,417 @@
/*
* This file runs in a Node context (it's NOT transpiled by Babel), so use only
* the ES6 features that are supported by your Node version. https://node.green/
*/
// Configuration for your app
// https://v2.quasar.dev/quasar-cli/quasar-conf-js
/* eslint-env node */
/* eslint-disable @typescript-eslint/no-var-requires */
/* eslint func-names: 0 */
/* eslint global-require: 0 */
const { configure } = require('quasar/wrappers');
const path = require('path')
const webpack = require('webpack')
const helpers = require('./helpers')
const envparser = require('./config/envparser')
// const ESLintPlugin = require('eslint-webpack-plugin')
module.exports = configure((ctx) => ({
// https://v2.quasar.dev/quasar-cli/supporting-ts
supportTS: {
tsCheckerConfig: {
eslint: {
enabled: true,
files: './src/**/*.{ts,tsx,jsx,vue}',
},
},
},
// https://v2.quasar.dev/quasar-cli/prefetch-feature
// preFetch: true,
// app boot file (/src/boot)
// --> boot files are part of "main.js"
// https://v2.quasar.dev/quasar-cli/boot-files
// boot: ['vue-i18n', 'vue-meta', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula', 'guard'],
boot: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'calendar', 'social-sharing', 'timeago'],
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
css: [
'app.scss',
// '~quasar-ui-qcalendar/src/css/calendar-day.sass'
],
// https://github.com/quasarframework/quasar/tree/dev/extras
extras: [
// 'ionicons-v4',
// 'mdi-v5',
// 'eva-icons',
// 'themify',
// 'line-awesome',
'ionicons-v4',
// 'mdi-v3',
'fontawesome-v5',
'roboto-font', // optional, you are not bound to it
'material-icons', // optional, you are not bound to it
'material-icons-outlined',
],
aliases: {
quasar: path.resolve(__dirname, 'node_modules/@quasar/'),
src: path.resolve(__dirname, 'src'),
statics: path.resolve(__dirname, 'src/statics'),
components: path.resolve(__dirname, 'src/components'),
views: path.resolve(__dirname, 'src/views/index.ts'),
icons: path.resolve(__dirname, 'src/assets/icons'),
images: path.resolve(__dirname, 'src/assets/images'),
classes: path.resolve(__dirname, 'src/classes/index.ts'),
fonts: path.resolve(__dirname, 'src/assets/fonts'),
utils: path.resolve(__dirname, 'src/utils/index.ts'),
css: path.resolve(__dirname, 'src/styles/variables.scss'),
router: path.resolve(__dirname, 'src/router/index.ts'),
validators: path.resolve(__dirname, 'src/utils/validators.ts'),
methods: path.resolve(__dirname, 'src/utils/methods.ts'),
filters: path.resolve(__dirname, 'src/utils/filters.ts'),
api: path.resolve(__dirname, 'src/store/Api/index.ts'),
paths: path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'),
store: path.resolve(__dirname, 'src/store/index.ts'),
modules: path.resolve(__dirname, 'src/store/Modules/index.ts'),
model: path.resolve(__dirname, 'src/model/index.ts'),
},
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
build: {
env: envparser(),
vueRouterMode: 'history',
vueCompiler: true,
gzip: false, // gzip true
analyze: false, // true
transpile: true,
transpileDependencies: [
/quasar-ui-qcalendar[\\/]src/
],
chainWebpack(chain, { isServer, isClient }) {
chain.resolve.alias
// .set('myalias', path.resolve(__dirname, './src/somefolder'))
.set('@', helpers.root('src'))
.set('@components', helpers.root('src/components/index.ts'))
.set('@boot', helpers.root('src/boot/*'))
.set('@costanti', helpers.root('src/store/Modules/costanti.ts'))
.set('@views', path.resolve(__dirname, 'src/views/index.ts'))
.set('@src', path.resolve(__dirname, 'src'))
.set('@css', path.resolve(__dirname, 'src/public/css/variables.scss'))
.set('@icons', path.resolve(__dirname, 'src/public/icons/*'))
.set('@images', path.resolve(__dirname, 'src/public/images/*'))
.set('@classes', path.resolve(__dirname, 'src/classes/index.ts'))
.set('@utils', path.resolve(__dirname, 'src/utils/index.ts'))
.set('@utils', path.resolve(__dirname, 'src/utils/*'))
.set('@router', path.resolve(__dirname, 'src/router/index.ts'))
.set('@validators', path.resolve(__dirname, 'src/utils/validators.ts'))
.set('@methods', path.resolve(__dirname, 'src/utils/methods.ts'))
.set('@api', path.resolve(__dirname, 'src/store/Api/index.ts'))
.set('@paths', path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'))
.set('@storemod', path.resolve(__dirname, 'src/store/Modules/*'))
.set('@store', path.resolve(__dirname, 'src/store'))
.set('@modules', path.resolve(__dirname, 'src/store/Modules/index.ts'))
.set('@model', path.resolve(__dirname, 'src/model/index.ts'))
},
// extractCSS: false,
// transpile: false,
// Add dependencies for transpiling with Babel (Array of string/regex)
// (from node_modules, which are by default not transpiled).
// Applies only if "transpile" is set to true.
// transpileDependencies: [],
// rtl: true, // https://v2.quasar.dev/options/rtl-support
// preloadChunks: true,
// showProgress: false,
// gzip: true,
// analyze: true,
// Options below are automatically set depending on the env, set them if you want to override
// extractCSS: false,
// https://v2.quasar.dev/quasar-cli/handling-webpack
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
},
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer
dev: {
env: require('./.env.development'),
},
devServer: {
https: false,
port: 8088,
open: false, // opens browser window automatically
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
},
},
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework
framework: {
config: {},
// iconSet: 'material-icons', // Quasar icon set
// lang: 'en-US', // Quasar language pack
// For special cases outside of where the auto-import strategy can have an impact
// (like functional components as one of the examples),
// you can manually specify Quasar components/directives to be available everywhere:
//
components: [
'QLayout',
'QDrawer',
'QItemSection',
'QHeader',
'QFooter',
'QPageContainer',
'QPage',
'QPopupProxy',
'QToolbar',
'QToolbarTitle',
'QBtn',
'QBtnDropdown',
'QColor',
'QIcon',
'QList',
'QKnob',
'QItemLabel',
'QItem',
'QCard',
'QMarkupTable',
'QSpace',
'QDialog',
'QBadge',
'QForm',
'QCardSection',
'QCardActions',
'QField',
'QInput',
'QSelect',
'QMenu',
'QToggle',
'QFab',
'QInfiniteScroll',
'QAjaxBar',
'QChip',
'QExpansionItem',
'QCheckbox',
'QBanner',
'QInnerLoading',
'QSpinnerGears',
'QSpinnerDots',
'QDate',
'QTime',
'QSlideTransition',
'QTable',
'QTh',
'QTr',
'QTd',
'QLinearProgress',
'QSlider',
'QPopupEdit',
'QCarousel',
'QCarouselControl',
'QCarouselSlide',
'QPageScroller',
'QAvatar',
'QImg',
'QSplitter',
'QRating',
'QParallax',
'QTab',
'QTabs',
'QTabPanels',
'QTabPanel',
'QTree',
'QSeparator',
],
directives: [
'Ripple',
'ClosePopup',
],
_plugins: [
'Meta',
'Dialog',
'Notify',
'Cookies',
'Loading',
'AppVisibility',
],
get plugins_1() {
return this._plugins;
},
set plugins_1(value) {
this._plugins = value;
},
get plugins() {
return this._plugins;
},
set plugins(value) {
this._plugins = value;
},
iconSet: 'fontawesome-v5',
lang: 'it', // Quasar language
},
animations: 'all', // --- includes all animations
// https://v2.quasar.dev/options/animations
// animations: [],
// https://v2.quasar.dev/quasar-cli/developing-ssr/configuring-ssr
ssr: {
pwa: false,
// manualStoreHydration: true,
// manualPostHydrationTrigger: true,
prodPort: 3000, // The default port that the production server should use
// (gets superseded if process.env.PORT is specified at runtime)
maxAge: 1000 * 60 * 60 * 24 * 30,
// Tell browser when a file from the server should expire from cache (in ms)
chainWebpackWebserver(/* chain */) {
//
},
middlewares: [
ctx.prod ? 'compression' : '',
'render', // keep this as last one
],
},
// https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa
pwa: {
workboxPluginMode: 'InjectManifest', // 'GenerateSW' or 'InjectManifest'
workboxOptions: {}, // only for GenerateSW
extendGenerateSWOptions(cfg) {
cfg.skipWaiting = false
cfg.clientsClaim = false
},
// for the custom service worker ONLY (/src-pwa/custom-service-worker.[js|ts])
// if using workbox in InjectManifest mode
chainWebpackCustomSW(chain) {
// chain.plugin('eslint-webpack-plugin')
// .use(ESLintPlugin, [{ extensions: ['js'] }])
},
manifest: {
name: 'Più che Buono',
short_name: 'PiuCheBuono',
description: 'PiuCheBuono è un GAS e Bottega',
display: 'standalone',
orientation: 'portrait',
background_color: '#fff',
theme_color: '#027be3',
scope: "/",
id: "/?homescreen=1",
start_url: "/?homescreen=1",
icons: [
{
src: 'images/fv-android-icon-512x512.png',
sizes: '512x512',
type: 'image/png',
},
{
src: 'images/fv-android-icon-384x384.png',
sizes: '384x384',
type: 'image/png',
},
{
src: 'images/fv-android-icon-192x192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: 'images/fv-android-icon-144x144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: 'images/fv-android-icon-96x96.png',
sizes: '96x96',
type: 'image/png',
},
{
src: 'images/fv-apple-icon-120x120.png',
sizes: '120x120',
type: 'image/png',
},
{
src: 'images/fv-apple-icon-144x144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: 'images/fv-apple-icon-152x152.png',
sizes: '152x152',
type: 'image/png',
},
{
src: 'images/fv-apple-icon-180x180.png',
sizes: '180x180',
type: 'image/png',
},
],
related_applications: [{
"platform": "webapp",
"url": "https://www.riso.app/manifest.json"
}]
},
},
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova
cordova: {
// noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing
},
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor
capacitor: {
hideSplashscreen: true,
},
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-electron-apps/configuring-electron
electron: {
bundler: 'packager', // 'packager' or 'builder'
packager: {
// https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options
// OS X / Mac App Store
// appBundleId: '',
// appCategoryType: '',
// osxSign: '',
// protocol: 'myapp://path',
// Windows only
// win32metadata: { ... }
},
builder: {
// https://www.electron.build/configuration/configuration
appId: 'PiuCheBuono',
},
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
chainWebpack(/* chain */) {
// do something with the Electron main process Webpack cfg
// extendWebpackMain also available besides this chainWebpackMain
},
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
chainWebpackPreload(/* chain */) {
// do something with the Electron main process Webpack cfg
// extendWebpackPreload also available besides this chainWebpackPreload
},
},
}))

View File

@@ -0,0 +1,452 @@
.testo-banda {
//background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent));
//background: linear-gradient(180deg, #3144f0, transparent);
//background: rgba(0, 0, 0, .6)
}
$grayshadow: #555;
$textcol: blue;
$textcol_scuro: darkblue;
p {
margin: 0 0 1.25rem;
//text-shadow: .125rem .125rem .25rem $grayshadow;
}
h4 {
font-size: 1.25rem;
}
.mycard {
visibility: hidden;
}
.landing {
}
.landing_background {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
background-size: cover
}
.landing > section {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
//padding: 0 16px
}
.intro {
display: flex;
justify-content: space-between;
align-items: stretch;
/* flex-flow: row nowrap; */
padding: 1.25rem 0 1.25rem 0;
margin: .125rem;
* {
width: 100%;
flex: 1;
margin-left: auto;
margin-right: auto;
}
&__associazione {
min-width: 350px;
}
&__comeassociarsi {
min-width: 350px;
}
}
.subtitle {
font-weight: 600;
text-align: center;
letter-spacing: 0.125rem;
text-transform: uppercase;
font-size: 1rem;
}
.landing > section.padding {
padding: 5.62rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing > section > div {
position: relative;
width: 100%
}
.maxwidth1200 {
max-width: 1200px;
}
.landing__toolbar {
background: -webkit-gradient(linear, left top, left bottom, from(#000), to(transparent));
background: linear-gradient(180deg, #000, transparent);
padding: 0 !important
}
.landing__toolbar .q-btn {
border-radius: 0 0 .315rem .315rem;
-ms-flex-item-align: stretch;
align-self: stretch
}
.landing__hero {
min-height: 50vh
}
.landing__header {
height: 18vh
}
.landing__arrow {
bottom: 1.5rem;
opacity: .4
}
.landing__front {
background: -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(15%, rgba(0, 0, 0, .6)));
background: linear-gradient(180deg, transparent, rgba(0, 0, 0, .6) 15%)
}
.landing__logo {
width: 9.40rem;
height: 9.40rem;
margin-top: 1.315rem;
//-webkit-animation: logo-rotate 240s linear infinite;
//animation: logo-rotate 240s linear infinite
}
.landing__features .q-icon {
font-size: 4rem
}
h4 {
line-height: 1.5;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.landing__features h4, .landing__features h6 {
margin: 1rem 0
}
.landing__features p {
opacity: .7;
font-size: 1rem;
line-height: 1.5;
}
.landing__footer {
//background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000));
background: linear-gradient(180deg, rgba(0, 0, 0, .8) 95%, #FFF);
padding-top: 4.5rem !important;
padding-bottom: 4.5rem !important;
padding-left: 1.25rem;
padding-right: 1.25rem;
color: #9f9f9f;
}
.icon_contact:hover {
color: blue;
border-color: white;
border-width: .0625rem;
}
.landing__footer .doc-link {
color: $textcol;
}
.landing__footer .doc-link:hover {
opacity: .8
}
.landing__swirl-bg {
background-repeat: no-repeat !important;
background-position: top;
background-size: contain !important;
background-image: url(../../../public/images/landing_first_section.png) !important
}
.feat-descr {
font-size: 1.15rem;
}
.feat-descr:hover {
transition: opacity 0.5s ease-in-out;
opacity: 0.9;
}
.q-col-gutter-sm {
padding: 3.125rem 3.125rem;
//margin-left: -48px
}
body.mobile .landing {
//background: unset
}
body.mobile .landing:before {
content: "";
position: fixed;
top: 0;
height: 100vh;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
//background: #000 url(../../public/images/cover.jpg) 50%;
background-size: cover
}
/*
@-webkit-keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
@keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
*/
.home {
//background-color: rgb(250, 250, 250);
padding: 3.125rem;
display: flex;
//flex-wrap: nowrap;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
.btn-start {
margin: 3.125rem;
}
.shadow {
//color: white;
text-shadow: 0.125rem 0.125rem 0.25rem $grayshadow;
}
.text-h1, h1 {
font-size: 3rem;
font-weight: bold;
line-height: 3rem;
letter-spacing: -.01562em;
margin-bottom: 8px !important;
}
.text-h2 {
font-size: 3.75rem;
font-weight: 300;
line-height: 3.75rem;
letter-spacing: -.00833em;
}
.text-weight-bold {
font-weight: 700;
}
.text-vers {
font-size: 0.75rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.homep-cover-img-1 {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-2 {
background: #000 url(../../../public/images/foto2.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-3 {
background: #000 url(../../../public/images/foto3.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img.hide-filter:before {
opacity: 0
}
.landing__footer-icons {
font-size: 1.75rem
}
.landing__footer-icons a {
margin: 0 .5rem .5rem;
text-decoration: none;
outline: 0;
color: $textcol;
transition: color .28s
}
.landing__footer-icons a:hover {
color: $textcol_scuro;
}
.doc-img {
max-width: 100%;
}
.mylist {
background: #3fdaff;
padding-left: 1.25rem;
}
.clgutter {
margin-top: 1.25rem;
padding: .62rem;
}
.carousel_img_3 {
//background-image: url(../../public/images/cibo_sano.jpg);
background-size: cover !important;
background-position: 50% center !important;
background-repeat: no-repeat !important;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.landing__hero {
text-align: center
}
.landing__header {
height: 7vh
}
.clgutter {
margin-top: 0;
padding: 0;
}
.landing__hero .text-h1, h1 {
font-size: 2rem;
line-height: 2.05rem;
margin-bottom: 1.25rem
}
.landing > section.padding {
padding: 2.5rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
max-width: 800px;
}
.landing > section.padding_gallery > div {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing__features h4, .landing__features h6 {
margin: 1.25rem 0
}
h4 {
line-height: 1.4;
text-shadow: 0.25rem 0.25rem 0.5rem $grayshadow;
}
.landing .feature-item {
text-align: center;
margin-top: 1.25rem;
}
.landing__hero-content {
padding-bottom: 11.25rem;
}
.landing__hero2-content {
padding-bottom: 7.25rem;
}
.landing__hero-btns {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}
.q-col-gutter-sm {
padding: .625rem .315rem;
}
.text-subtitle1 {
font-size: 1.25rem;
}
.text-vers {
font-size: 0.6rem;
}
.carousel_img_3 {
//background-image: url(../../public/images/cibo_sano.jpg);
background-size: 620px 620px !important;
background-position: 50% top !important;
background-repeat: no-repeat !important;
}
}
.custom-caption {
text-align: center;
padding: .75rem;
color: $textcol;
background-color: rgba(0, 0, 0, .3);
}
.sfondo-grigio {
padding: 1rem;
color: $textcol;
background-color: rgba(0, 0, 0, .35);
}
.mycontacts {
color: gray;
letter-spacing: 0.078rem;
}
.mycontacts_title {
text-shadow: 0.125rem 0.125rem 0.125rem #555;
font-weight: bold;
color: #999;
letter-spacing: 0.125rem;
}
.mycontacts_text {
color: #999;
letter-spacing: 0.093rem;
}

View File

@@ -0,0 +1,78 @@
import { defineComponent, ref, onMounted, watch, computed } from 'vue'
import { useGlobalStore } from '@store/globalStore'
import { useRoute } from 'vue-router'
import { useUserStore } from '@store/UserStore'
import { Logo } from '../../components/logo'
import { LandingFooter } from '../../components/LandingFooter'
import { CMyPage } from '../../components/CMyPage/index'
import { tools } from '@src/store/Modules/tools'
import { static_data } from '@src/db/static_data'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import { CCardCarousel, CEventsCalendar, COpenStreetMap } from '@components'
import MixinBase from '@src/mixins/mixin-base'
import { firstimagehome } from '@src/db/static_data'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'home_arcadei',
components: { Logo, LandingFooter, CMyPage, CCardCarousel, CEventsCalendar, COpenStreetMap },
setup() {
const animare = ref(0)
const slide = ref('first')
const slide2 = ref(1)
const getImmagini = ref([
{
title: '', subtitle: '',
alt: 'Arcadei',
img: 'images/arcadei/img1.png'
},
])
const userStore = useUserStore()
const globalStore = useGlobalStore()
const { setValDb, getValDb } = MixinBase()
const { setmeta, getsrcbyimg } = MixinMetaTags()
function getheightgallery() {
if (tools.isMobile())
return '400px'
else
return '600px'
}
function created() {
//
}
function getArrDisciplines() {
return globalStore.disciplines.filter((rec: any) => rec.showinhome)
}
created()
return {
tools,
toolsext,
static_data,
animare,
slide,
slide2,
getheightgallery,
getArrDisciplines,
getImmagini,
getValDb,
firstimagehome,
getsrcbyimg,
setmeta,
}
},
})

View File

@@ -0,0 +1,221 @@
<template>
<q-page>
<CMyPage title="Home">
<div class="landing">
<section>
<div class="landing__hero maxwidth1200 text-white">
<q-carousel
animated
:autoplay="animare"
swipeable
infinite
navigation
transition-next="slide-left"
transition-prev="slide-right"
v-model="slide"
:height="getheightgallery()"
width="100%"
>
<q-carousel-slide name="first"
:img-src="getsrcbyimg(firstimagehome())">
<div class="landing__header"></div>
<div class="landing__hero-content row justify-center q-gutter-xs clgutter">
<div class="row">
&nbsp;
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
&nbsp;
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm">
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
</div>
<div>
<br>
<br>
<div v-if="!tools.isLogged()" style="margin: 5px; padding: 5px;" class="home">
<br>
<br>
</div>
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="second"
:img-src="getsrcbyimg('images/background2.jpg')" alt="">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<h2 class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</h2>
<h2 class="text-subtitle1 shadow-max big text-italic q-pl-sm">
<strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</h2>
<h2 class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</h2>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="third"
:img-src="getsrcbyimg('images/background3.jpg')">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<div class="text-h1 shadow-max">{{tools.getappname()}}</div>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm"><strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</div>
<div class="text-subtitle3 shadow text-italic q-pl-sm ">
{{$t('msg.sottoTitoloApp4')}}
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<!--<i aria-hidden="true"-->
<!--class="q-icon text-h2 text-white material-icons">expand_more</i>-->
</div>
</q-carousel-slide>
</q-carousel>
</div>
</section>
<div class="q-pa-md q-gutter-md">
<div v-if="isLogged && !isVerified" class="text-verified">{{
$t('components.authentication.email_verification.link_sent') }}
</div>
</div>
<CCardCarousel :myarr="getArrDisciplines()">
</CCardCarousel>
<CEventsCalendar :mysingleevent="null" :showfirstN="getValDb('SHOW_LAST_EVENTS', false, 3)">
</CEventsCalendar>
<div v-if="getValDb('VIDEO_HOME', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('VIDEO_TITLE', false)"></h4>
<div class="">
<video :width="tools.getwidthscale(mythis, 320, 800)"
:height="tools.getheightbywidth(mythis, 320, 180, 800)" controls>
<source :src="getValDb('VIDEO_HOME', false)" type="video/mp4">
</video>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<div v-if="getValDb('YT_VIDEO', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('YT_TITLE', false)"></h4>
<div class="">
<div class="">
<iframe
:width="tools.getwidthscale(mythis, getValDb('YT_W', false), 800)"
:height="tools.getheightbywidth(mythis, getValDb('YT_W', false), getValDb('YT_H', false), 800)"
:src="getValDb('YT_VIDEO', false)"
frameborder="0"
allowfullscreen
></iframe>
</div>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<section :class="`maxwidth padding_gallery `+ ($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-grey-10 text-center`" >
<q-carousel
swipeable
animated
:autoplay="8000"
v-model="slide2"
arrows
thumbnails
infinite
height="600">
<q-carousel-slide v-for="(rec, index) in getImmagini" :key="index" :name="index"
:img-src="rec.img"
:alt="rec.alt"
class="carousel_slide">
<div class="absolute-bottom custom-caption" style="margin-bottom: 70px">
<div class="text-h5"><span
class="text-h6 text-grey-1 shadow-max">{{index + 1}}. </span><span
class="text-h6 text-grey-2 shadow">{{rec.title}}</span></div>
<div class="text-subtitle1"><span class="text-grey-4 shadow">{{rec.subtitle}}</span>
</div>
</div>
</q-carousel-slide>
</q-carousel>
</section>
<div v-if="!tools.isMobile()" style="margin: 60px 60px;"></div>
<COpenStreetMap :imgmap="getValDb('IMGMAP', false)" :urlmap="getValDb('URLMAP', false)" :title="getValDb('MAP_TITLE', false)"
:coordinates="getValDb('COORD_MAP_1', false)" :coord_big="getValDb('COORD_MAP_BIG', false)">
</COpenStreetMap>
<div class="q-ma-md"></div>
</div>
</CMyPage>
</q-page>
</template>
<script lang="ts" src="./home_arcadei.ts">
</script>
<style lang="scss" scoped>
@import './home_arcadei.scss';
</style>

View File

@@ -0,0 +1,446 @@
.testo-banda {
//background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent));
//background: linear-gradient(180deg, #3144f0, transparent);
//background: rgba(0, 0, 0, .6)
}
$grayshadow: #555;
$textcol: blue;
$textcol_scuro: darkblue;
p {
margin: 0 0 1.25rem;
//text-shadow: .125rem .125rem .25rem $grayshadow;
}
h4 {
font-size: 1.25rem;
}
.mycard {
visibility: hidden;
}
.landing {
}
.landing_background {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
background-size: cover
}
.landing > section {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
//padding: 0 16px
}
.intro {
display: flex;
justify-content: space-between;
align-items: stretch;
/* flex-flow: row nowrap; */
padding: 1.25rem 0 1.25rem 0;
margin: .125rem;
* {
width: 100%;
flex: 1;
margin-left: auto;
margin-right: auto;
}
&__associazione {
min-width: 350px;
}
&__comeassociarsi {
min-width: 350px;
}
}
.subtitle {
font-weight: 600;
text-align: center;
letter-spacing: 0.125rem;
text-transform: uppercase;
font-size: 1rem;
}
.landing > section.padding {
padding: 5.62rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing > section > div {
position: relative;
width: 100%
}
.maxwidth1200 {
max-width: 1200px;
}
.landing__toolbar {
background: -webkit-gradient(linear, left top, left bottom, from(#000), to(transparent));
background: linear-gradient(180deg, #000, transparent);
padding: 0 !important
}
.landing__toolbar .q-btn {
border-radius: 0 0 .315rem .315rem;
-ms-flex-item-align: stretch;
align-self: stretch
}
.landing__hero {
min-height: 50vh
}
.landing__header {
height: 18vh
}
.landing__arrow {
bottom: 1.5rem;
opacity: .4
}
.landing__front {
background: -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(15%, rgba(0, 0, 0, .6)));
background: linear-gradient(180deg, transparent, rgba(0, 0, 0, .6) 15%)
}
.landing__logo {
width: 9.40rem;
height: 9.40rem;
margin-top: 1.315rem;
//-webkit-animation: logo-rotate 240s linear infinite;
//animation: logo-rotate 240s linear infinite
}
.landing__features .q-icon {
font-size: 4rem
}
h4 {
line-height: 1.5;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.landing__features h4, .landing__features h6 {
margin: 1rem 0
}
.landing__features p {
opacity: .7;
font-size: 1rem;
line-height: 1.5;
}
.landing__footer {
//background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000));
background: linear-gradient(180deg, rgba(0, 0, 0, .8) 95%, #FFF);
padding-top: 4.5rem !important;
padding-bottom: 4.5rem !important;
padding-left: 1.25rem;
padding-right: 1.25rem;
color: #9f9f9f;
}
.icon_contact:hover {
color: blue;
border-color: white;
border-width: .0625rem;
}
.landing__footer .doc-link {
color: $textcol;
}
.landing__footer .doc-link:hover {
opacity: .8
}
.landing__swirl-bg {
background-repeat: no-repeat !important;
background-position: top;
background-size: contain !important;
background-image: url(../../../public/images/landing_first_section.png) !important
}
.feat-descr {
font-size: 1.15rem;
}
.feat-descr:hover {
transition: opacity 0.5s ease-in-out;
opacity: 0.9;
}
.q-col-gutter-sm {
padding: 3.125rem 3.125rem;
//margin-left: -48px
}
body.mobile .landing {
//background: unset
}
body.mobile .landing:before {
content: "";
position: fixed;
top: 0;
height: 100vh;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
//background: #000 url(../../public/images/cover.jpg) 50%;
background-size: cover
}
/*
@-webkit-keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
@keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
*/
.home {
//background-color: rgb(250, 250, 250);
padding: 3.125rem;
display: flex;
//flex-wrap: nowrap;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
.btn-start {
margin: 3.125rem;
}
.shadow {
//color: white;
text-shadow: 0.125rem 0.125rem 0.25rem $grayshadow;
}
.text-h1, h1 {
font-size: 3rem;
font-weight: bold;
line-height: 3rem;
letter-spacing: -.01562em;
margin-bottom: 8px !important;
}
.text-h2 {
font-size: 3.75rem;
font-weight: 300;
line-height: 3.75rem;
letter-spacing: -.00833em;
}
.text-weight-bold {
font-weight: 700;
}
.text-vers {
font-size: 0.75rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.homep-cover-img-1 {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-2 {
background: #000 url(../../../public/images/foto2.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-3 {
background: #000 url(../../../public/images/foto3.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img.hide-filter:before {
opacity: 0
}
.landing__footer-icons {
font-size: 1.75rem
}
.landing__footer-icons a {
margin: 0 .5rem .5rem;
text-decoration: none;
outline: 0;
color: $textcol;
transition: color .28s
}
.landing__footer-icons a:hover {
color: $textcol_scuro;
}
.doc-img {
max-width: 100%;
}
.mylist {
background: #3fdaff;
padding-left: 1.25rem;
}
.clgutter {
margin-top: 1.25rem;
padding: .62rem;
}
.carousel_img_3 {
//background-image: url(../../public/images/cibo_sano.jpg);
background-size: cover !important;
background-position: 50% center !important;
background-repeat: no-repeat !important;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.landing__hero {
text-align: center
}
.landing__header {
height: 7vh
}
.clgutter {
margin-top: 0;
padding: 0;
}
.landing__hero .text-h1, h1 {
font-size: 2rem;
line-height: 2.05rem;
margin-bottom: 1.25rem
}
.landing > section.padding {
padding: 2.5rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
max-width: 800px;
}
.landing > section.padding_gallery > div {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing__features h4, .landing__features h6 {
margin: 1.25rem 0
}
h4 {
line-height: 1.4;
text-shadow: 0.25rem 0.25rem 0.5rem $grayshadow;
}
.landing .feature-item {
text-align: center;
margin-top: 1.25rem;
}
.landing__hero-content {
padding-bottom: 11.25rem;
}
.landing__hero2-content {
padding-bottom: 7.25rem;
}
.landing__hero-btns {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}
.q-col-gutter-sm {
padding: .625rem .315rem;
}
.text-subtitle1 {
font-size: 1.25rem;
}
.text-vers {
font-size: 0.6rem;
}
}
.custom-caption {
text-align: center;
padding: .75rem;
color: $textcol;
background-color: rgba(0, 0, 0, .3);
}
.sfondo-grigio {
padding: 1rem;
color: $textcol;
background-color: rgba(0, 0, 0, .35);
}
.mycontacts {
color: gray;
letter-spacing: 0.078rem;
}
.mycontacts_title {
text-shadow: 0.125rem 0.125rem 0.125rem #555;
font-weight: bold;
color: #999;
letter-spacing: 0.125rem;
}
.mycontacts_text {
color: #999;
letter-spacing: 0.093rem;
}

View File

@@ -0,0 +1,78 @@
import { defineComponent, ref, onMounted, watch, computed } from 'vue'
import { useGlobalStore } from '@store/globalStore'
import { useRoute } from 'vue-router'
import { useUserStore } from '@store/UserStore'
import { Logo } from '../../components/logo'
import { LandingFooter } from '../../components/LandingFooter'
import { CMyPage } from '../../components/CMyPage/index'
import { tools } from '@src/store/Modules/tools'
import { static_data } from '@src/db/static_data'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import { CCardCarousel, CEventsCalendar, COpenStreetMap } from '@components'
import MixinBase from '@src/mixins/mixin-base'
import { firstimagehome } from '@src/db/static_data'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'Home_tdv',
components: { Logo, LandingFooter, CMyPage, CCardCarousel, CEventsCalendar, COpenStreetMap },
setup() {
const animare = ref(0)
const slide = ref('first')
const slide2 = ref(1)
const getImmagini = ref([
{
title: '', subtitle: '',
alt: 'Elisa e Cristina insieme',
img: '../../statics/images/eventi_esterni/IMG_6035.jpg'
},
])
const userStore = useUserStore()
const globalStore = useGlobalStore()
const { setValDb, getValDb } = MixinBase()
const { setmeta, getsrcbyimg } = MixinMetaTags()
function getheightgallery() {
if (tools.isMobile())
return '400px'
else
return '600px'
}
function created() {
//
}
function getArrDisciplines() {
return globalStore.disciplines.filter((rec: any) => rec.showinhome)
}
created()
return {
tools,
toolsext,
static_data,
animare,
slide,
slide2,
getheightgallery,
getArrDisciplines,
getImmagini,
getValDb,
firstimagehome,
getsrcbyimg,
setmeta,
}
},
})

View File

@@ -0,0 +1,220 @@
<template>
<q-page>
<CMyPage title="Home">
<div class="landing">
<section>
<div class="landing__hero maxwidth1200 text-white">
<q-carousel
animated
:autoplay="animare"
swipeable
infinite
navigation
transition-next="slide-left"
transition-prev="slide-right"
v-model="slide"
:height="getheightgallery()"
width="100%"
>
<q-carousel-slide name="first"
:img-src="getsrcbyimg(firstimagehome())">
<div class="landing__header"></div>
<div class="landing__hero-content row justify-center q-gutter-xs clgutter">
<div class="row">
&nbsp;
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
&nbsp;
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm">
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
</div>
<div>
<br>
<br>
<div v-if="!tools.isLogged()" style="margin: 5px; padding: 5px;" class="home">
<br>
<br>
</div>
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="second"
:img-src="getsrcbyimg('images/background2.jpg')" alt="">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<h2 class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</h2>
<h2 class="text-subtitle1 shadow-max big text-italic q-pl-sm">
<strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</h2>
<h2 class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</h2>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="third"
:img-src="getsrcbyimg('images/background3.jpg')">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<div class="text-h1 shadow-max">{{tools.getappname()}}</div>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm"><strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</div>
<div class="text-subtitle3 shadow text-italic q-pl-sm ">
{{$t('msg.sottoTitoloApp4')}}
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<!--<i aria-hidden="true"-->
<!--class="q-icon text-h2 text-white material-icons">expand_more</i>-->
</div>
</q-carousel-slide>
</q-carousel>
</div>
</section>
<div class="q-pa-md q-gutter-md">
<div v-if="isLogged && !isVerified" class="text-verified">{{
$t('components.authentication.email_verification.link_sent') }}
</div>
</div>
<CCardCarousel :myarr="getArrDisciplines()">
</CCardCarousel>
<CEventsCalendar :mysingleevent="null" :showfirstN="getValDb('SHOW_LAST_EVENTS', false, 3)">
</CEventsCalendar>
<div v-if="getValDb('VIDEO_HOME', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('VIDEO_TITLE', false)"></h4>
<div class="">
<video :width="tools.getwidthscale(mythis, 320, 800)"
:height="tools.getheightbywidth(mythis, 320, 180, 800)" controls>
<source :src="getValDb('VIDEO_HOME', false)" type="video/mp4">
</video>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<div v-if="getValDb('YT_VIDEO', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('YT_TITLE', false)"></h4>
<div class="">
<div class="">
<iframe
:width="tools.getwidthscale(mythis, getValDb('YT_W', false), 800)"
:height="tools.getheightbywidth(mythis, getValDb('YT_W', false), getValDb('YT_H', false), 800)"
:src="getValDb('YT_VIDEO', false)"
frameborder="0"
allowfullscreen
></iframe>
</div>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<section class="maxwidth padding_gallery bg-white text-grey-10 text-center" >
<q-carousel
swipeable
animated
:autoplay="8000"
v-model="slide2"
arrows
thumbnails
infinite
:height="tools.heightgallery()">
<q-carousel-slide v-for="(rec, index) in getImmagini" :key="index" :name="index"
:img-src="rec.img"
:alt="rec.alt"
class="carousel_slide">
<div class="absolute-bottom custom-caption" style="margin-bottom: 70px">
<div class="text-h5"><span
class="text-h6 text-grey-1 shadow-max">{{index + 1}}. </span><span
class="text-h6 text-grey-2 shadow">{{rec.title}}</span></div>
<div class="text-subtitle1"><span class="text-grey-4 shadow">{{rec.subtitle}}</span>
</div>
</div>
</q-carousel-slide>
</q-carousel>
</section>
<div v-if="!tools.isMobile()" style="margin: 60px 60px;"></div>
<COpenStreetMap :imgmap="getValDb('IMGMAP', false)" :urlmap="getValDb('URLMAP', false)" :title="getValDb('MAP_TITLE', false)"
:coordinates="getValDb('COORD_MAP_1', false)" :coord_big="getValDb('COORD_MAP_BIG', false)">
</COpenStreetMap>
<div class="q-ma-md"></div>
</div>
</CMyPage>
</q-page>
</template>
<script lang="ts" src="./home_tdv.ts">
</script>
<style lang="scss" scoped>
@import './home_tdv.scss';
</style>

View File

@@ -1,18 +1,18 @@
APP_VERSION="1.0.20"
APP_VERSION="1.0.21"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside
SERVERDIR_WEBSITE="test.riso.app"
SERVERDIR_WEBSITE="test.piuchebuono.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"
APP_URL="https://test.riso.app"
APP_URL="https://test.piuchebuono.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://test.freeplanet.app:3001"
LOGO_REG='riso-logo-full.png'
LOGO_REG='piuchebuono-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""
TEST_EMAIL=""

View File

@@ -1,89 +1,11 @@
import { IEvents } from '../model';
export const db_data = {
URL_FACEBOOK: 'https://www.facebook.com/associazioneshen',
URL_FACEBOOK: '',
userdata: {
calendar_editable: false,
},
events: [
{
title: 'Scambi Reiki',
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dellinizio della serata per ricevere le informazioni pratiche.',
date: '2019-07-11',
time: '21:00',
duration: 120,
side: 'left',
bgcolor: 'orange',
icon: 'fas fa-praying-hands',
img: 'images/reiki/reikisfondo.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Cristina Barattoni',
avatar: 'cristina.png',
infoextra: '',
linkpdf: 'files/eventi/Reiki_aMICHI.pdf',
},
{
title: 'Scambi Reiki',
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dellinizio della serata per ricevere le informazioni pratiche.',
date: '2019-07-20',
time: '21:00',
duration: 120,
side: 'left',
bgcolor: 'orange',
icon: 'fas fa-praying-hands',
img: 'images/reiki/reikisfondo.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Cristina Barattoni',
avatar: 'cristina.png',
infoextra: '',
linkpdf: '',
},
{
title: 'Seminario Reiki 1° Livello',
details: 'I seminari vengono organizzati volutamente in gruppi poco numerosi.\n'
+ 'Si crea così un ambiente accogliente e tranquillo con un atmosfera conviviale.<br />'
+ ''
+ 'Per info vedi <a href="reiki/seminari">Seminari Reiki</a>',
date: '2019-07-22',
days: 2,
time: '9:00',
side: 'left',
bgcolor: 'red',
icon: 'fas fa-chalkboard-teacher',
img: 'images/reiki/reikisfondo.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Cristina Barattoni',
avatar: 'cristina.png',
teacher2: 'Elisa Ghizzardi',
avatar2: 'elisa.png',
infoextra: 'sabato e domenica dalle 10.00 alle 18.00',
linkpdf: '',
},
{
title: 'Presentazione Corsi per Operatori del Massaggio del Benessere',
details: 'Vieni alla presentazione dei Corsi!<br>10 settembre a Ravenna, 17 settembre a Lugo',
date: '2019-09-10',
time: '20:30',
duration: 120,
side: 'left',
bgcolor: 'blue',
icon: 'fas fa-praying-hands',
img: 'images/scuolaopbenessere/img1.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Operatori',
avatar: 'cristina.png',
avatar2: 'elisa.png',
infoextra: '',
linkpdf: '',
},
],
}

View File

@@ -1,8 +1,9 @@
const msg_website_enUs = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
products: {
quantity: 'Quantità',

View File

@@ -1,8 +1,9 @@
const msg_website_es = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
products: {
quantity: 'Quantità',

View File

@@ -1,8 +1,9 @@
const msg_website_fr = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
homepage: {
titlecontatti: 'CONTACTS',

View File

@@ -5,14 +5,6 @@ const msg_website_it = {
description: 'Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.',
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS',
},
products: {
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
weight: 'Peso',
stars: 'Voto',
color: 'Colore',
theme: 'Tema',
},
hours: {
descr: 'Descrizione',
date: 'Data',

View File

@@ -1,8 +1,9 @@
const msg_website_pt = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
pages: {
home: 'Home',

View File

@@ -15,7 +15,7 @@ else
cp -R ./quasar.conf.js _ALL_SITES/$site/
cp -R ./package.json _ALL_SITES/$site/
cp -R ./.env.development _ALL_SITES/$site/
cp -R ./.env.production _ALL_SITES/$site/
# cp -R ./.env.production _ALL_SITES/$site/
cp -R ./.env.test _ALL_SITES/$site/
fi

View File

@@ -1 +1 @@
TERMINA DI LAVORARE SU fioredellavita.riso.app: (Sovrascrivo !)
TERMINA DI LAVORARE SU piuchebuono.app: (Sovrascrivo !)

View File

@@ -123,18 +123,17 @@
"crypto": false
},
"browserslist": [
"last 80 Chrome versions",
"last 100 Chrome versions",
"last 40 Firefox versions",
"last 10 Edge versions",
"last 45 Safari versions",
"last 80 Android versions",
"last 120 ChromeAndroid versions",
"last 30 FirefoxAndroid versions",
"last 20 iOS versions",
"last 20 Edge versions",
"last 55 Safari versions",
"last 90 Android versions",
"last 250 ChromeAndroid versions",
"last 60 FirefoxAndroid versions",
"last 35 iOS versions",
"last 10 Opera versions",
"> 0.03%",
"not dead",
"fully supports es6-module"
"not dead"
],
"engines": {
"node": ">= 16.14.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

View File

@@ -17,6 +17,42 @@ export const shared_consts = {
},
LIMIT_NOTIF_FOR_USER: 200,
UNITS_OF_MEASURE: {
NESSUNO: 0,
GRAMMI: 1,
CHILI: 2,
LITRI: 3,
PEZZI: 4,
},
Units_Of_Measure_ListBox: [
{
label: '[Nessuno]',
value: 0,
short: '',
},
{
label: 'Grammi (g)',
value: 1,
short: 'g',
},
{
label: 'Chili (kg)',
value: 2,
short: 'kg',
},
{
label: 'Litri (l)',
value: 3,
short: 'lt',
},
{
label: 'Pezzi (p)',
value: 4,
short: 'pz',
},
],
CallFunz: {
SOSTITUISCI: 345,
AGGIUNGI_NUOVO_IMBARCO: 380,
@@ -75,7 +111,8 @@ export const shared_consts = {
BTN_LOGIN: 260,
FOOTER: 270,
PROFILETUTORIAL: 280,
VISUVIDEOPROMOANDPDF: 290
VISUVIDEOPROMOANDPDF: 290,
ECOMMERCE: 300,
},
QUERYTYPE_MYGROUP: 1,
@@ -1061,7 +1098,8 @@ export const shared_consts = {
TypeMsgTemplate: {
MSG_BENVENUTO: 2010,
MS_SHARE_LINK: 2000
MS_SHARE_LINK: 2000,
MSG_BENV_REGISTRATO: 2020,
},
TypeSend: {
@@ -1525,6 +1563,10 @@ export const shared_consts = {
value: 70,
label: 'Calendario',
},
{
value: 300,
label: 'E-COMMERCE',
},
],
@@ -1822,6 +1864,7 @@ export const shared_consts = {
comune: 1,
mycities: 1,
lang: 1,
verified_by_aportador: 1,
'profile.img': 1,
'profile.mygroups': 1,
'profile.mycircuits': 1,

View File

@@ -34,6 +34,11 @@ export default defineComponent({
required: false,
default: false
},
flat: {
type: Boolean,
required: false,
default: false
},
numcol: {
type: Number,
required: false,

View File

@@ -1,7 +1,7 @@
<template>
<div class="q-ma-xs">
<div
class="row q-my-sm shadow"
class="row q-my-xs shadow"
style="border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.12)"
>
<!--<div class="col-md-3 col-lg-3 col-sm-12 col-xs-12 box_4" style="border-left: 1px solid #efefef;"
@@ -85,13 +85,8 @@
</div>
</div>
<div class="row" style="margin-top: 4px important; font-size: 0.75rem">
&nbsp;
</div>
<div
class="row q-my-md shadow"
style="border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.12)"
class="row shadow"
>
<div
v-for="(rec, index) of visulinks"

View File

@@ -1,5 +1,8 @@
import { defineComponent } from 'vue'
import { ProductsList } from '@src/views/ecommerce'
export default defineComponent({
name: 'CECommerce',
components: { ProductsList },
})

View File

@@ -1,8 +1,7 @@
<template>
<div v-if="tools.isUserOk()">
<div
v-if="cardsbig.length > 0"
class="row q-ma-sm shadow justify-center"
style="border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.12)"
>
@@ -22,6 +21,7 @@
</CBigBtn>
</div>
<div
v-if="cardssmall.length > 0"
class="row shadow justify-center"
style="border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.12)"
>

View File

@@ -498,6 +498,7 @@ export default defineComponent({
name: 1,
surname: 1,
username: 1,
verified_by_aportador: 1,
'profile.handshake': 1,
'profile.img': 1,
'profile.mygroups': 1,

View File

@@ -1,3 +1,4 @@
import { ref, onMounted, onBeforeMount, PropType, reactive, watch } from 'vue'
import { CCardState } from '../CCardState'
import { computed, defineComponent } from 'vue'
@@ -50,6 +51,12 @@ export default defineComponent({
globalStore.rightCartOpen = false
}
function mounted() {
products.loadOrders()
}
onMounted(mounted)
return {
myCart,
myTotalPrice,

View File

@@ -1,11 +1,9 @@
<template>
<div>
MyCart:<br>
<div id="mycontainer">
<div class="myheader row justify-between">
<div class="col-6">
<q-btn class="q-mx-xs" round dense flat icon="fas fa-shopping-cart">
<q-badge v-if="getnumItemsCart() > 0" color="red" floating transparent>
{{ getnumItemsCart() }}
</q-badge>

View File

@@ -13,6 +13,7 @@ import { tools } from '@store/Modules/tools'
import { shared_consts } from '@/common/shared_vuejs'
import { LandingFooter } from '@/components/LandingFooter'
import { CMyActivities } from '@/components/CMyActivities'
import { CECommerce } from '@/components/CECommerce'
import { COpenStreetMap } from '@src/components/COpenStreetMap'
import { CCardCarousel } from '@src/components/CCardCarousel'
import { CMyPage } from '@src/components/CMyPage'
@@ -53,7 +54,7 @@ export default defineComponent({
CPresentazione, CMyActivities,
CMyProfileTutorial, CSendRISTo,
CTitleBanner, CShareSocial, CCheckAppRunning, CRegistration,
CVisuVideoPromoAndPDF,
CVisuVideoPromoAndPDF, CECommerce,
},
emits: ['selElemClick'],
props: {

View File

@@ -372,13 +372,7 @@
>
<div class="landing__header"></div>
<div
class="
landing__hero-content
row
justify-center
q-gutter-xs
clgutter
"
class="landing__hero-content row justify-center q-gutter-xs clgutter"
>
<div class="row">&nbsp;</div>
<div class="flex justify-end">
@@ -390,13 +384,7 @@
{{ myel.container }}&nbsp;
</div>
<div
class="
text-subtitle1
shadow-max
big
text-italic
q-pl-sm
"
class="text-subtitle1 shadow-max big text-italic q-pl-sm"
>
{{ myel.container2 }}
</div>
@@ -488,9 +476,13 @@
<div v-if="editOn" class="elemEdit">CCheckIfIsLogged</div>
<CCheckIfIsLogged :showalways="myel.container"></CCheckIfIsLogged>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.VISUVIDEOPROMOANDPDF">
<div
v-else-if="myel.type === shared_consts.ELEMTYPE.VISUVIDEOPROMOANDPDF"
>
<div v-if="editOn" class="elemEdit">Visu Video Promo and PDF</div>
<CVisuVideoPromoAndPDF :showalways="myel.container"></CVisuVideoPromoAndPDF>
<CVisuVideoPromoAndPDF
:showalways="myel.container"
></CVisuVideoPromoAndPDF>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.INFO_VERSION">
<div>Versione: {{ tools.getvers() }}</div>
@@ -537,6 +529,10 @@
<div v-if="editOn" class="elemEdit">Pagina Attività</div>
<CMyActivities></CMyActivities>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.ECOMMERCE">
<div v-if="editOn" class="elemEdit">PRODOTTI ECOMMERCE:</div>
<CECommerce> </CECommerce>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.NOTIFATTOP">
<div v-if="editOn" class="elemEdit">Notifiche in Cima</div>
<CNotifAtTop></CNotifAtTop>
@@ -582,7 +578,6 @@
<span class="mybanner"
>Chiudere e Riaprire la App, per completare l'Aggiornamento</span
>
</div>
<div v-else>
<span class="mybanner"
@@ -590,7 +585,6 @@
scomparire questo messaggio, chiudere e riaprire la pagina.</span
>
</div>
</q-banner>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.BTN_REG">

View File

@@ -1,10 +1,10 @@
<template>
<div>
<div v-if="mypathin && !!rec">
<q-toggle
<q-toggle
v-if="tools.isManager()"
style=" position:absolute;"
v-model="editOn"
dense
color="green"
size="sm"
@update:model-value="changeVisuDrawer(mypathin, editOn)"
@@ -41,7 +41,7 @@
</CMyEditElem>
</q-drawer>
<div class="q-ma-xs q-gutter-xs q-pa-xs">
<div class="q-gutter-xs" style="margin-left: 1px; margin-right: 1px;">
<div v-if="!!rec.img1" class="text-center">
<q-img :src="`` + rec.img1" class="img"></q-img>
</div>

View File

@@ -148,6 +148,13 @@
color="green"
>online</q-badge
>
<q-badge
v-if="!tools.isVerifiedByUser(row)"
align="bottom"
floating
color="red"
>Da Abilitare</q-badge
>
</q-avatar>
</q-item-section>
<q-item-section class="">
@@ -208,7 +215,6 @@
:maxlength="col.maxlength ? col.maxlength : undefined"
:disable="disable"
:readonly="disable"
:hint="hint"
:type="
col.fieldtype === costanti.FieldType.crypted
? `password`
@@ -1221,6 +1227,40 @@
</CMySelect>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.multiselect">
<CMySelect
:type_out="col.field_outtype"
:col="col"
:row="row"
:multiple="true"
:withToggle="true"
:label="col.label ? col.label : $t(col.label_trans)"
:filter_table="col.filter_table"
:filter_field="col.filter_field"
:value_extra="value_extra"
v-model:arrvalue="scope.value"
@update:arrvalue="changevalRec"
:addall="false"
:addnone="false"
label-color="primary"
class="combowidth"
color="primary"
:optval="fieldsTable.getKeyByTable(col.jointable)"
:optlab="fieldsTable.getLabelByTable(col.jointable)"
:options="
globalStore.getTableJoinByName(
col.jointable,
col.addall,
col.addnone,
col.filter
)
"
:sola_lettura="!isInModif"
:useinput="col.allowNewValue"
:newvaluefunc="addNewValue"
>
</CMySelect>
<!--
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-model="scope.value"
@@ -1263,7 +1303,7 @@
</q-item-section>
</q-item>
</template>
</q-select>
</q-select>-->
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.nationality">
<div class="justify-center q-gutter-sm clgutter q-mt-sm">

View File

@@ -15,6 +15,7 @@ import { CMyFieldDb } from '@/components/CMyFieldDb'
import { CMyCircuit } from '@/components/CMyCircuit'
import { CMySelect } from '@/components/CMySelect'
import { CMyUserOnlyView } from '@/components/CMyUserOnlyView'
import { CMyUser } from '@/components/CMyUser'
import { CUserInfoAccount } from '@/components/CUserInfoAccount'
import { useI18n } from '@/boot/i18n'
import { useRoute, useRouter } from 'vue-router'
@@ -31,7 +32,8 @@ export default defineComponent({
name: 'CMyProfileTutorial',
components: {
CSendCoins, CSaldo, CUserInfoAccount,
CMySelectCity, CMyFieldRec, CSkill, CMyUserOnlyView, CTitleBanner, CMySelect, CMyFieldDb, CMyCircuit
CMySelectCity, CMyFieldRec, CMyUser,
CSkill, CMyUserOnlyView, CTitleBanner, CMySelect, CMyFieldDb, CMyCircuit
},
emits: ['setCmd'],
props: {
@@ -72,6 +74,8 @@ export default defineComponent({
const filtroutente = ref(<any[]>[])
const usersList = ref({ show: false, title: '', list: [] })
const stepTut = computed(() => userStore.my.profile.stepTutorial)
const noNameSurname = computed(() => userStore.my.profile.noNameSurname)
@@ -79,6 +83,10 @@ export default defineComponent({
return costanti.MAINCARDS.filter((rec: any) => shared_consts.TABLES_INSERT_ALMOST_ONE_TO_ENABLE_CIRCUIT.includes(rec.table))
})
const userstoverify = computed(() => {
return userStore.my.profile.userstoverify
})
const strProv = computed(() => {
if (contact.value && contact.value.profile.resid_province) {
@@ -542,6 +550,8 @@ export default defineComponent({
card,
askToConfirmSkipItalia,
circuititalia,
usersList,
userstoverify,
}
},
})

View File

@@ -206,9 +206,12 @@
<q-btn
:flat="isSalta(recstep.step)"
:disabled="isNextDisable()"
@click="(isSalta(recstep.step))
? askToConfirmSkip(recstep.step) :
((recstep.indstep === numindstep) ? clickFinish() : $refs.stepper.next())
@click="
isSalta(recstep.step)
? askToConfirmSkip(recstep.step)
: recstep.indstep === numindstep
? clickFinish()
: $refs.stepper.next()
"
:color="isSalta(recstep.step) ? 'negative' : 'primary'"
:label="
@@ -239,6 +242,27 @@
>
</q-btn>
<q-banner
inline-actions
class="bg-blue text-white"
v-if="userstoverify.length > 0"
>
<span v-html="$t('tutorial.utenti_da_verificare')"></span>
<template v-slot:action>
<q-btn
:label="userstoverify.length + ' ' + $t('tutorial.utenti_da_verif_btn')"
class="q-my-sm"
rounded
icon="fas fa-users"
@click="
usersList.show = true;
usersList.title = $t('tutorial.utenti_da_verif_btn');
"
>
</q-btn>
</template>
</q-banner>
<q-banner
inline-actions
class="bg-red text-white"
@@ -258,6 +282,29 @@
</q-banner>
</div>
</div>
<q-dialog v-model="usersList.show">
<q-card class="dialog_card">
<q-toolbar class="bg-primary text-white">
<q-toolbar-title>
{{ usersList.title }}
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="inset-shadow">
<q-list>
<span v-for="(rec, index) in userstoverify" :key="index" class="q-my-sm rounded-borders" clickable>
<CMyUser
:mycontact="rec"
:visu="costanti.ASK_TRUST"
@setCmd="tools.setCmd"
>
</CMyUser>
</span>
</q-list>
</q-card-section>
</q-card>
</q-dialog>
<q-dialog v-model="showAccountInfo" full-height full-width>
<q-card v-if="true">
<q-toolbar class="bg-primary">

View File

@@ -779,12 +779,14 @@
v-if="contact.username !== userStore.my.username"
rounded
dense
:icon="
icon="fas fa-ellipsis-h"
:color="!contact.verified_by_aportador ? 'red' : 'white'"
>
<!-- </q-btn></q-btn>:icon="
userStore.IsMyFriendByUsername(contact.username)
? `fas fa-ellipsis-h`
: `fas fa-user`
"
>
"-->
<q-menu>
<q-list style="min-width: 200px">
<q-item

View File

@@ -511,11 +511,7 @@
<q-btn
v-if="contact.username !== userStore.my.username"
rounded
:icon="
userStore.IsMyFriendByUsername(contact.username)
? `fas fa-ellipsis-h`
: `fas fa-user`
"
icon="fas fa-ellipsis-h"
>
<q-menu>
<q-list style="min-width: 200px">

View File

@@ -31,13 +31,23 @@ export default defineComponent({
const circuitStore = useCircuitStore()
const $router = useRouter()
const shownotif = ref(false)
const { getImgByNotif, getNotifText, getTypeDirNotif, getTypeIdNotif } = MixinUsers()
const lasts_notifs_req = computed(() => notifStore.getnotifs_coinsreq())
const num_notifs = computed(() => lasts_notifs_req.value.length)
watch(() => num_notifs.value, (newval, oldval) => {
if (num_notifs.value === 1)
shownotif.value = true
else if (num_notifs.value === 0)
shownotif.value = false
})
function mounted() {
//
shownotif.value = num_notifs.value === 1
}
function clickNotif(notif: INotif) {
@@ -70,6 +80,7 @@ export default defineComponent({
num_notifs,
clickNotif,
userStore,
shownotif,
}
},
})

View File

@@ -1,55 +1,102 @@
<template>
<q-banner
v-if="num_notifs > 0"
rounded
dense
class="bg-primary text-white"
color="primary q-title"
style="text-align: center;">
<template v-slot:avatar>
<q-icon name="fas fa-exclamation-triangle" color="yellow" size="xs"/>
</template>
<q-item v-for="(notif, index) in lasts_notifs_req" :key="index">
<div class="q-ma-sm text-center">
<q-btn
v-if="num_notifs > 0"
:label="t('circuit.ris_in_arrivo') + (num_notifs > 1 ? (' (' + num_notifs + ' ' + t('circuit.transaz') + ')') : '')"
@click="shownotif = true"
icon="fas fa-coins"
rounded
color="primary"
></q-btn>
</div>
<!--<q-item-section avatar>
<q-dialog v-model="shownotif" :maximized="$q.screen.lt.sm">
<q-card class="dialog_card">
<q-bar class="bg-primary text-white">
{{ $t('circuit.receive_coins') }}
<q-space />
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-bar>
<q-card-section class="q-px-xs inset-shadow">
<q-banner
v-if="num_notifs > 0"
rounded
dense
class="bg-light-blue text-black"
color="primary q-title"
style="text-align: center"
>
<q-item v-for="(notif, index) in lasts_notifs_req" :key="index">
<!--<q-item-section avatar>
<q-avatar>
<q-item-label lines="1">{{ getTypeDirNotif(notif) }}</q-item-label>
</q-avatar>
</q-item-section>-->
<q-item-section avatar>
<q-avatar>
<img :src="notif.myimgsender" :alt="notif.sender">
</q-avatar>
</q-item-section>
<q-item-section avatar>
<q-avatar>
<img :src="notif.myimgsender" :alt="notif.sender" />
</q-avatar>
</q-item-section>
<q-item-section>
<q-item-label lines="5" :class="(!notif.read) ? 'unread' : 'read'" @click="clickNotif(notif)">
<div v-html="getNotifText($t, notif, false)"></div>
</q-item-label>
<q-item-label caption lines="18"
v-if="notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS && notif.status === shared_consts.CircuitsNotif.STATUS_NONE && notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ"
>
<div class="row no-wrap justify-evenly q-pa-sm">
<q-btn
size="md"
icon="fas fa-coins"
:disable="notif.disablecoinclick"
color="positive" :label="$t('circuit.accept_coins_qty', {qty: notif.extrarec.qty, symbol: notif.extrarec.symbol})"
@click="notif.disablecoinclick = true; tools.acceptCoins(q, notif.sender, notif)"
/>
<q-btn
size="md"
:disable="notif.disablecoinclick"
color="negative" :label="$t('circuit.refuse_coins_qty', {qty: notif.extrarec.qty, symbol: notif.extrarec.symbol})"
@click="notif.disablecoinclick = true; tools.refuseCoins(q, notif.sender, notif)"
/>
</div>
</q-item-label>
</q-item-section>
</q-item>
</q-banner>
<q-item-section>
<q-item-label
lines="5"
:class="!notif.read ? 'unread' : 'read'"
@click="clickNotif(notif)"
>
<div v-html="getNotifText($t, notif, false)"></div>
</q-item-label>
<q-item-label
caption
lines="18"
v-if="
notif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS &&
notif.status === shared_consts.CircuitsNotif.STATUS_NONE &&
notif.typeid ===
shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ
"
>
<div class="row no-wrap justify-evenly q-pa-sm">
<q-btn
size="md"
icon="fas fa-coins"
:disable="notif.disablecoinclick"
color="positive"
:label="
$t('circuit.accept_coins_qty', {
qty: notif.extrarec.qty,
symbol: notif.extrarec.symbol,
})
"
@click="
notif.disablecoinclick = true;
tools.acceptCoins(q, notif.sender, notif);
"
/>
<q-btn
size="md"
:disable="notif.disablecoinclick"
color="negative"
:label="
$t('circuit.refuse_coins_qty', {
qty: notif.extrarec.qty,
symbol: notif.extrarec.symbol,
})
"
@click="
notif.disablecoinclick = true;
tools.refuseCoins(q, notif.sender, notif);
"
/>
</div>
</q-item-label>
</q-item-section>
</q-item>
</q-banner>
</q-card-section>
</q-card>
</q-dialog>
</template>
<script lang="ts" src="./CNotifAtTop.ts">

View File

@@ -4,7 +4,7 @@ import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { useQuasar } from 'quasar'
import { CTitleBanner } from '@components'
import { CTitleBanner } from '../CTitleBanner'
import { CCardState } from '../CCardState'
import { CCopyBtn } from '../CCopyBtn'
@@ -55,6 +55,8 @@ export default defineComponent({
const myproduct = ref(<IProduct> {})
const storeSelected = ref('')
function iconWhishlist(order: IProduct) {
if (true) {
return 'far fa-heart'
@@ -64,39 +66,35 @@ export default defineComponent({
}
function decqty() {
if (myorder.value.quantity) {
if (myorder.value.quantity > 0)
myorder.value.quantity--
}
if (myorder.value.quantity > 0)
myorder.value.quantity--
}
function addqty() {
if (myorder.value.quantity) {
if (myorder.value.quantity < 10)
myorder.value.quantity++
}
if (myorder.value.quantity < 10)
myorder.value.quantity++
}
function addtoCart() {
if (!userStore.isLogged) {
tools.showNeutralNotif($q, 'Devi prima accedere alla tua Area Personale')
tools.showNeutralNotif($q, t('ecomm.area_personale'))
globalStore.rightDrawerOpen = true
return false
}
// Controlla se esiste già nel carrello il prodotto
if (products.existProductInCart(myproduct.value._id)) {
tools.showNegativeNotif($q, 'Questo prodotto è stato già aggiunto al Carrello')
tools.showNegativeNotif($q, t('ecomm.already_in_cart'))
} else {
products.addToCart({ product: myproduct.value, order: props.order }).then((ris) => {
let strprod = 'prodotto'
if (myorder.value.quantity! > 1)
strprod = 'prodotti'
let strprod = t('ecomm.prodotto')
if (myorder.value.quantity > 1)
strprod = t('ecomm.prodotti')
if (ris)
tools.showPositiveNotif($q, 'Hai Aggiunto ' + myorder.value.quantity + ' ' + strprod + ' al Carrello')
tools.showPositiveNotif($q, t('ecomm.haveadded') + ' ' + myorder.value.quantity + ' ' + strprod + ' ' + t('ecomm.tocart'))
else
tools.showNegativeNotif($q, 'Errore durante l\'inserimento del prodotto sul carrello, riprovare.')
tools.showNegativeNotif($q, t('ecomm.error_cart'))
})
}
}
@@ -110,7 +108,10 @@ export default defineComponent({
function getSingleStorehouse() {
const mystore = myproduct.value.storehouses[0]
return mystore.name + ' (' + mystore.city + ')'
if (mystore)
return mystore.name + ' (' + mystore.city + ')'
else
return ''
}
function getStorehouses() {
@@ -141,6 +142,10 @@ export default defineComponent({
load()
})
watch(() => storeSelected.value, (newval, oldval) => {
myorder.value.idStorehouse = newval
})
async function load() {
// console.log('created Cproductcard', code)
if (props.code) {
@@ -182,6 +187,9 @@ export default defineComponent({
checkifCartDisable,
myproduct,
myorder,
tools,
t,
storeSelected,
}
}
})

View File

@@ -1,17 +1,14 @@
<template>
<q-card :class="getmycardcl()" v-if="!!myproduct">
<div v-if="myorder">
myorder: {{ myorder }}
</div>
<q-img :src="`` + myproduct.img" :alt="myproduct.name" :class="getclimg()"></q-img>
<q-card-section>
<q-btn
v-if="!complete"
fab
color="primary"
icon="fas fa-info"
class="absolute"
style="top: 0; right: 12px; transform: translateY(-50%);"
:to="`/product/`+ myproduct.code"
/>
<q-btn v-if="!complete" fab color="primary" icon="fas fa-info" class="absolute"
style="top: 0; right: 12px; transform: translateY(-50%);" :to="`/product/` + myproduct.code" />
<div class="row items-center centeritems">
<div class="text-h7 boldhigh">
@@ -24,18 +21,23 @@
</div>
</div>
<div>
<div v-if="complete">
<div v-if="complete && myproduct.producer.city">
<div class="text-grey text-title row items-center q-mt-sm">
<q-icon name="map" class="q-mr-xs"/>
Origine: <span class="text-blue q-ml-xs text-h8"> {{ myproduct.producer.city }} ({{
<q-icon name="map" class="q-mr-xs" />
{{ t('products.origine') }}: <span class="text-blue q-ml-xs text-h8"> {{ myproduct.producer.city }} ({{
myproduct.producer.region
}})</span>
</div>
</div>
<div v-if="complete" class="text-grey text-title row items-center">
<q-icon name="place" class="q-mr-xs"/>
Produttore: <span class="text-black q-ml-xs text-h8"> {{ myproduct.producer.name }}</span>
<div v-if="complete && myproduct.producer.name" class="text-grey text-title row items-center">
<q-icon name="place" class="q-mr-xs" />
{{ t('products.producer') }}: <span class="text-black q-ml-xs text-h8"> {{ myproduct.producer.name }}</span>
</div>
<div v-if="complete && myproduct.weight" class="text-grey text-title row items-center">
<q-icon name="fas fa-balance-scale" class="q-mr-xs" />
{{ t('products.weight') }}: <span class="text-black q-ml-xs text-h8"> {{ myproduct.weight }} {{
tools.getUnitsMeasure(myproduct.unit, true) }}</span>
</div>
</div>
@@ -48,27 +50,24 @@
</div>
</div>
<div class="row q-mb-sm no-wrap items-center centeritems">
<q-btn round size="xs" text-color="grey" icon="fas fa-minus" @click="decqty"></q-btn>
<q-btn round size="xs" text-color="grey" icon="fas fa-minus" @click="decqty()"></q-btn>
<q-field outlined dense style="width: 40px; height: 30px;" class="q-mx-xs">
<template v-slot:control>
<div class="self-center no-outline" tabindex="0">{{ order.quantity }}</div>
</template>
</q-field>
<q-btn round size="xs" text-color="grey" icon="fas fa-plus" @click="addqty"></q-btn>
<q-btn round size="xs" text-color="grey" icon="fas fa-plus" @click="addqty()"></q-btn>
</div>
<div v-if="complete || getnumstore() > 1">
<div class="text-blue text-title row items-center q-mr-md centeritems">
<q-icon size="sm" name="fas fa-shipping-fast" class="q-mr-sm"/>
Ritiro presso:
<q-icon size="sm" name="fas fa-shipping-fast" class="q-mr-sm" />
{{ t('products.ritiro_presso') }}:
</div>
<div class="text-green-6 text-title row items-center q-my-sm centeritems">
<div v-if="getnumstore() > 1">
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
outlined v-model="order.idStorehouse"
:options="getStorehouses()"
label="Magazzino:" emit-value map-options>
<q-select :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'" outlined v-model="storeSelected"
:options="getStorehouses()" :label="t('products.magazzino') + `:`" emit-value map-options>
</q-select>
</div>
<div v-else>
@@ -78,12 +77,11 @@
</div>
</q-card-section>
<q-separator/>
<q-separator />
<q-card-actions vertical align="center">
<q-btn
icon="fas fa-cart-plus" color="primary" :disable="checkifCartDisable()" rounded size="md"
label="Aggiungi al Carrello" @click="addtoCart">
<q-btn icon="fas fa-cart-plus" color="primary" :disable="checkifCartDisable()" rounded size="md"
:label="t('products.addcart', {qta: order.quantity})" @click="addtoCart()">
</q-btn>
<!--
<q-btn :icon="iconWhishlist(myproduct)" flat color="primary" rounded label="Lista Desideri">

View File

@@ -4,6 +4,7 @@ import { ICalcStat, IOperators } from '../../model'
import { useUserStore } from '../../store/UserStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '../../store/globalStore'
import { useCircuitStore } from '../../store/CircuitStore'
import { useI18n } from '../../boot/i18n'
import { shared_consts } from '@src/common/shared_vuejs'
@@ -23,6 +24,7 @@ export default defineComponent({
const userStore = useUserStore()
const globalStore = useGlobalStore()
const circuitStore = useCircuitStore()
const { t } = useI18n()
const $q = useQuasar()
const $router = useRouter()
@@ -34,7 +36,10 @@ export default defineComponent({
const tipoConto = ref(costanti.AccountType.USER)
const loading = ref(false)
const circuitpath = computed(() => userStore.my.profile.last_circuitpath)
const circuitpath = computed(() => {
const circ = circuitStore.getCircuitByProvinceAndCard(userStore.my.profile.resid_province, userStore.my.profile.resid_card)
return circ && circ.path ? circ.path : ''
})
const contact = computed(() => userStore.my)

View File

@@ -1,15 +1,9 @@
<template>
<div class="row text-center justify-evenly items-center">
<CUserInfoAccount
:user="contact"
:circuitpath="circuitpath"
:admin="false"
:onlysaldo="true"
/>
<div class="q-mb-sm">
<q-btn
icon="fas fa-upload"
color="primary"
color="positive"
size="md"
rounded
:label="$t('circuit.sendcoins_toso')"
@@ -19,13 +13,21 @@
&nbsp;
<q-btn
icon="fas fa-download"
color="primary"
color="accent"
size="md"
rounded
:label="$t('circuit.receive_coins')"
@click="tools.receiveRis($q, $t)"
>
</q-btn>
<div class="q-mb-sm"></div>
<CUserInfoAccount
:user="contact"
:circuitpath="circuitpath"
:admin="false"
:onlysaldo="true"
/>
</div>
</div>
<q-dialog v-model="usersList.show">
@@ -83,7 +85,6 @@
<div
v-else-if="tipoConto === costanti.AccountType.COLLECTIVE_ACCOUNT"
>
<div v-for="(grp, i) in usersList.listgroup" :key="i">
<CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS" :noaut="true">
</CMyGroup>

View File

@@ -41,7 +41,7 @@ export default defineComponent({
function addsubqty(addqty: boolean, subqty: boolean) {
if (addqty) {
if (props.order.quantity! >= 10)
if (props.order.quantity >= 10)
return false
}

View File

@@ -64,6 +64,8 @@ export default defineComponent({
const table = ref(toolsext.TABMYGROUPS)
const circuitsnational = ref(<any[]>[])
const circuit = ref(<ICircuit | null | undefined>null)
watch(() => props.user, (newval, oldval) => {
@@ -83,6 +85,8 @@ export default defineComponent({
circuit.value = circuitStore.getCircuitByPath(props.circuitpath)
}
circuitsnational.value = circuitStore.getCircuitsNational()
if (props.account) {
myaccount.value = props.account
} else {
@@ -138,6 +142,7 @@ export default defineComponent({
myaccount,
save,
toolsext,
circuitsnational,
}
},
})

View File

@@ -6,14 +6,22 @@
<q-separator />
<q-avatar v-if="userStore.getImgByCircuit(circuit)" size="30px">
<q-img
:src="userStore.getImgByCircuit(circuit)"
:alt="circuit.name"
img-class="imgprofile"
height="30px"
@click="
naviga(tools.getPathByTableAndRec(toolsext.TABCIRCUITS, circuit))
"
/>
</q-avatar>
<q-btn
text-color="blue"
color="white"
class="shadow-5 q-mb-xs"
dense
flat
class="shadow-1 q-mb-xs q-mt-xs"
color="primary"
rounded
size="md"
size="sm"
@click="naviga(tools.getPathByTableAndRec(toolsext.TABCIRCUITS, circuit))"
>
{{ circuit.name }}
@@ -29,6 +37,47 @@
>
</CSaldo>
<div v-if="onlysaldo">
<div v-for="(circnaz, ind) of circuitsnational" :key="ind">
<q-avatar v-if="userStore.getImgByCircuit(circnaz)" size="30px">
<q-img
:src="userStore.getImgByCircuit(circnaz)"
:alt="circuit.name"
img-class="imgprofile"
height="30px"
@click="
naviga(tools.getPathByTableAndRec(toolsext.TABCIRCUITS, circnaz))
"
/>
</q-avatar>
<q-btn
class="shadow-1 q-mb-xs q-mt-xs"
color="primary"
rounded
size="sm"
@click="
naviga(tools.getPathByTableAndRec(toolsext.TABCIRCUITS, circnaz))
"
>
{{ circnaz.name }}
</q-btn>
<CSaldo
v-if="tools.isUserOk() && circnaz.account"
:account="circnaz.account"
:symbol="circnaz.symbol"
:color="circnaz.color"
:saldo="circnaz.account.saldo_pend"
:qtarem="
myaccount
? circuitStore.getRemainingCoinsToSend(circnaz.account)
: 0
"
>
</CSaldo>
</div>
</div>
<q-card-section v-if="!onlysaldo">
<div v-if="myaccount.date_created" class="container">
<q-icon name="fas fa-lightbulb" class="iconcirc"></q-icon>

View File

@@ -26,6 +26,7 @@ import { CMyCart, CSigninNoreg } from '@/components'
import { costanti } from '@costanti'
import { useNotifStore } from '@src/store/NotifStore'
import { Platform } from 'quasar';
export default defineComponent({
@@ -68,6 +69,8 @@ export default defineComponent({
const testStore = useTestStore()
const notifStore = useNotifStore()
const { getnumItemsCart } = MixinUsers()
const site = computed(() => globalStore.site)
const isfinishLoading = computed(() => globalStore.finishLoading)
@@ -501,18 +504,6 @@ export default defineComponent({
$router.replace('/signup')
}
function getnumItemsCart() {
/* const arrcart = Products.cart
if (!!arrcart) {
if (!!arrcart.items) {
const total = arrcart.items.reduce((sum, item) => sum + item.order.quantity, 0)
return total
}
}
*/
return 0
}
function getnumOrdersCart() {
/* const arrorderscart = Products.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED)

View File

@@ -250,7 +250,7 @@
<div v-if="tools.isLogged()" class="text-weight-bold text-cart">
Carrello
</div>
<CMyCart></CMyCart>
<CMyCart v-if="isfinishLoading"></CMyCart>
</q-drawer>
<!-- USER BAR -->
<q-drawer

View File

@@ -341,7 +341,10 @@ h3 {
.myimgtitle {
max-width: 100%;
height: auto;
height: 300px;
@media (max-width: 718px) {
height: 200px;
}
}
.my-card-big {
@@ -1219,7 +1222,7 @@ h3 {
font-family: Arial, sans-serif;
font-size: 0.7rem;
letter-spacing: 0.15px;
min-height: 40px;
min-height: 27px;
}

View File

@@ -1,89 +1,11 @@
import { IEvents } from '../model';
export const db_data = {
URL_FACEBOOK: 'https://www.facebook.com/associazioneshen',
URL_FACEBOOK: '',
userdata: {
calendar_editable: false,
},
events: [
{
title: 'Scambi Reiki',
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dellinizio della serata per ricevere le informazioni pratiche.',
date: '2019-07-11',
time: '21:00',
duration: 120,
side: 'left',
bgcolor: 'orange',
icon: 'fas fa-praying-hands',
img: 'images/reiki/reikisfondo.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Cristina Barattoni',
avatar: 'cristina.png',
infoextra: '',
linkpdf: 'files/eventi/Reiki_aMICHI.pdf',
},
{
title: 'Scambi Reiki',
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dellinizio della serata per ricevere le informazioni pratiche.',
date: '2019-07-20',
time: '21:00',
duration: 120,
side: 'left',
bgcolor: 'orange',
icon: 'fas fa-praying-hands',
img: 'images/reiki/reikisfondo.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Cristina Barattoni',
avatar: 'cristina.png',
infoextra: '',
linkpdf: '',
},
{
title: 'Seminario Reiki 1° Livello',
details: 'I seminari vengono organizzati volutamente in gruppi poco numerosi.\n'
+ 'Si crea così un ambiente accogliente e tranquillo con un atmosfera conviviale.<br />'
+ ''
+ 'Per info vedi <a href="reiki/seminari">Seminari Reiki</a>',
date: '2019-07-22',
days: 2,
time: '9:00',
side: 'left',
bgcolor: 'red',
icon: 'fas fa-chalkboard-teacher',
img: 'images/reiki/reikisfondo.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Cristina Barattoni',
avatar: 'cristina.png',
teacher2: 'Elisa Ghizzardi',
avatar2: 'elisa.png',
infoextra: 'sabato e domenica dalle 10.00 alle 18.00',
linkpdf: '',
},
{
title: 'Presentazione Corsi per Operatori del Massaggio del Benessere',
details: 'Vieni alla presentazione dei Corsi!<br>10 settembre a Ravenna, 17 settembre a Lugo',
date: '2019-09-10',
time: '20:30',
duration: 120,
side: 'left',
bgcolor: 'blue',
icon: 'fas fa-praying-hands',
img: 'images/scuolaopbenessere/img1.jpg',
where: 'Centro Shen',
// whereicon: 'shen.png',
teacher: 'Operatori',
avatar: 'cristina.png',
avatar2: 'elisa.png',
infoextra: '',
linkpdf: '',
},
],
}

View File

@@ -1,8 +1,9 @@
const msg_website_enUs = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
products: {
quantity: 'Quantità',

View File

@@ -1,8 +1,9 @@
const msg_website_es = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
products: {
quantity: 'Quantità',

View File

@@ -1,8 +1,9 @@
const msg_website_fr = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
homepage: {
titlecontatti: 'CONTACTS',

View File

@@ -5,14 +5,6 @@ const msg_website_it = {
description: 'Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.',
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS',
},
products: {
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
weight: 'Peso',
stars: 'Voto',
color: 'Colore',
theme: 'Tema',
},
hours: {
descr: 'Descrizione',
date: 'Data',

View File

@@ -1,8 +1,9 @@
const msg_website_pt = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
botname: 'Riso BOT',
sitename: 'Fiore Della Vita',
siteshortname: 'Fiore Della Vita',
description: '',
keywords: '',
},
pages: {
home: 'Home',

View File

@@ -173,7 +173,7 @@ export default function () {
if (notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) {
// console.log('notif.extrarec', notif.extrarec)
if (notif.extrarec && notif.extrarec.hasOwnProperty('causal') && notif.extrarec.causal) {
descr += '( ' + $t('movement.causal') + ': ' + notif.extrarec.causal + ')'
descr += '<br>' + $t('movement.causal') + ': ' + notif.extrarec.causal
}
}
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_HANDSHAKE) {
@@ -188,7 +188,7 @@ export default function () {
if (notif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) {
// console.log('notif.extrarec', notif.extrarec)
if (notif.extrarec && notif.extrarec.hasOwnProperty('causal') && notif.extrarec.causal) {
descr += '( ' + $t('movement.causal') + ': ' + notif.extrarec.causal + ')'
descr += '<br>' + $t('movement.causal') + ': ' + notif.extrarec.causal
}
}
} else if (notif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) {

View File

@@ -1,7 +0,0 @@
export interface ICategory {
id?: number,
descr_it?: string
descr_en?: string
descr_es?: string
campo2bool: boolean
}

View File

@@ -1,7 +1,7 @@
import { IAction } from '@src/model/Projects'
import { IFriends, IGroupShort, IMyGroup, IPaymentType } from '@src/model/UserStore'
import {
IDepartment, IProducer, IShareWithUs, IStorehouse,
IDepartment, IProducer, IShareWithUs, IStorehouse, ICategory
} from '@src/model/Products'
import { IUserFields, IUserProfile } from '@src/model/UserStore'
@@ -434,6 +434,7 @@ export interface IGlobalState {
producers: IProducer[],
storehouses: IStorehouse[],
departments: IDepartment[],
categories: ICategory[],
sharewithus: IShareWithUs[],
groups: IGroup[],
resps: IResp[],

View File

@@ -18,6 +18,7 @@ export interface IProduct {
canBeShipped?: boolean,
canBeBuyOnline?: boolean,
weight?: number,
unit: number,
stars?: number,
date?: Date,
icon?: string,
@@ -40,7 +41,7 @@ export interface IOrder {
after_price?: string
color?: string
size?: string
quantity?: number
quantity: number
weight?: number
stars?: number
product?: IProduct
@@ -80,6 +81,12 @@ export interface IDepartment {
username?: string,
}
export interface ICategory {
_id?: any
name: string,
img?: string,
}
export interface IStorehouse {
_id?: any
idapp?: string

View File

@@ -142,6 +142,7 @@ export interface IUserProfile {
mycircuits: IMyCircuit[]
last_circuitpath: string
lastdate_reqRis?: Date
userstoverify: IFriends[]
manage_mygroups: IMyGroup[]
notifs: IUserNotifType[]
notif_idCities: number[]

View File

@@ -6,7 +6,6 @@ export * from './signup-option'
export * from './key-value'
// export * from './payload'
export * from './Categories'
export * from './Todos'
export * from './Projects'

View File

View File

@@ -0,0 +1,34 @@
import { colTablecategories } from '@src/store/Modules/fieldsTable'
import { CImgText } from '../../../components/CImgText/index'
import { defineComponent } from 'vue'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import MixinMetaTags from '../../../mixins/mixin-metatags'
export default defineComponent({
name: 'CategoriesPage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const pagination = {
sortBy: 'name',
descending: false,
page: 2,
rowsPerPage: 5
// rowsNumber: xx if getting data from a server
}
const { setmeta } = MixinMetaTags()
return {
colTablecategories,
setmeta,
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Categorie" imgbackground="images/produttori.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Categorie',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Categorie"></CTitleBanner>
<CGridTableRec
prop_mytable="categorys"
prop_mytitle="Categorie"
:prop_mycolumns="colTablecategories"
prop_colkey="name"
nodataLabel="Nessuna Categoria"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./categories.ts">
</script>
<style lang="scss" scoped>
@import 'categories.scss';
</style>

View File

@@ -58,6 +58,7 @@ function getRoutesAd(site: ISites) {
]
const routes_newsletter: IListRoutes[] = [
{
active: true,
@@ -339,26 +340,6 @@ function getRoutesAd(site: ISites) {
onlyAdmin: true,
onlyManager: true
},
/*
{
active: functionality.ENABLE_ECOMMERCE,
path: '/admin/ecommerce',
order: 31,
faIcon: 'fa fa-list-alt',
materialIcon: 'next_week',
name: 'pages.admin_ecommerce',
routes2: routes_admin_ecommerce,
inmenu: false,
submenu: true,
level_parent: 0.5,
level_child: 0.5,
solotitle: true,
onlyAdmin: true,
onlyManager: true,
onlyDepartment: true
},
*/
{
active: true,
order: 35,
@@ -524,16 +505,6 @@ function getRoutesAd(site: ISites) {
onlyEditor: true
},
...routes_manager,
{
active: true,
order: 1000,
path: '/404error',
materialIcon: 'fas fa-calendar-plus',
name: 'otherpages.error404',
component: () => import('@/root/My404page/My404page.vue'),
inmenu: false,
infooter: false
},
{
active: true,

View File

@@ -0,0 +1,249 @@
import { IListRoutes, ISites } from '@src/model'
function getRoutesEcomm(site: ISites) {
const routes_ecommerce: IListRoutes[] = [
{
active: true,
order: 30,
path: '/products',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.productslist',
component: () => import('@/views/ecommerce/productsList/productsList.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
},
{
active: true,
order: 30,
path: '/checkout',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.checkout',
component: () => import('@/views/ecommerce/checkOut/checkOut.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
},
{
active: true,
order: 30,
path: '/orderinfo',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.orderinfo',
component: () => import('@/views/ecommerce/orderInfo/orderInfo.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
},
{
active: true,
order: 35,
path: '/admin/ecommerce/orders',
materialIcon: 'fas fa-file-alt',
name: 'pages.orders',
component: () => import('@/rootgen/admin/orders/orders.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyDepartment: true
},
]
const routes_admin_ecommerce: IListRoutes[] = [
{
active: true,
order: 30,
path: '/admin/ecommerce/products',
materialIcon: 'fas fa-file-alt',
name: 'pages.products',
component: () => import('@/rootgen/admin/products/products.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 30,
path: '/admin/ecommerce/producers',
materialIcon: 'fas fa-file-alt',
name: 'pages.producer',
component: () => import('@/rootgen/admin/producer/producer.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 30,
path: '/admin/ecommerce/storehouses',
materialIcon: 'fas fa-file-alt',
name: 'pages.storehouses',
component: () => import('@/rootgen/admin/storehouses/storehouses.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 31,
path: '/admin/ecommerce/departments',
materialIcon: 'fas fa-file-alt',
name: 'pages.departments',
component: () => import('@/rootgen/admin/departments/departments.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 31,
path: '/admin/ecommerce/orders',
materialIcon: 'fas fa-file-alt',
name: 'pages.orders',
component: () => import('@/rootgen/admin/orders/orders.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 32,
path: '/admin/ecommerce/categories',
materialIcon: 'fas fa-file-alt',
name: 'pages.categories',
component: () => import('@/rootgen/admin/categories/categories.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
]
const routes_admin_ecommerce_menu: IListRoutes[] = [
{
active: true,
order: 30,
path: '/admin/ecommerce/products',
name: 'pages.products',
component: () => import('@/rootgen/admin/products/products.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 31,
path: '/admin/ecommerce/producers',
name: 'pages.producer',
component: () => import('@/rootgen/admin/producer/producer.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 32,
path: '/admin/ecommerce/storehouses',
name: 'pages.storehouses',
component: () => import('@/rootgen/admin/storehouses/storehouses.vue'),
infooter: false,
},
{
active: true,
order: 32,
path: '/admin/ecommerce/departments',
name: 'pages.departments',
component: () => import('@/rootgen/admin/departments/departments.vue'),
infooter: false,
},
{
active: true,
order: 35,
path: '/admin/ecommerce/orders',
name: 'pages.orders2',
component: () => import('@/rootgen/admin/orders/orders.vue'),
infooter: false,
},
{
active: true,
order: 36,
path: '/admin/ecommerce/categories',
name: 'pages.categories',
component: () => import('@/rootgen/admin/categories/categories.vue'),
infooter: false,
},
]
const menuEcomm = [
{
active: site.confpages && site.confpages.enableEcommerce,
path: '/ecommerce',
order: 1402,
faIcon: 'fa fa-list-alt',
materialIcon: 'next_week',
name: 'pages.ecommerce',
routes2: routes_ecommerce,
inmenu: true,
onlyif_logged: true,
// onlySocioResidente: true,
solotitle: true,
infooter: true
},
...routes_ecommerce,
{
active: site.confpages && site.confpages.enableEcommerce,
path: '/admin/ecommerce',
order: 1420,
faIcon: 'fa fa-list-alt',
materialIcon: 'next_week',
name: 'pages.admin_ecommerce',
routes2: routes_admin_ecommerce,
inmenu: true,
solotitle: true,
onlyAdmin: true,
onlyManager: true,
onlyDepartment: true
},
...routes_admin_ecommerce,
{
active: true,
order: 1000,
path: '/product/:codprod',
materialIcon: 'event',
name: 'otherpages.product',
component: () => import('@/views/ecommerce/productInfo/productInfo.vue'),
inmenu: false,
infooter: false
},
]
return menuEcomm
}
export const routesECommerce = {
routesEcomm: getRoutesEcomm,
}

View File

@@ -43,6 +43,37 @@ const msg_it = {
aportador_him: 'Invitato da',
myactivities: 'Attività',
},
products: {
name: 'Nome',
active: 'Attivo',
code: 'Codice',
description: 'Descrizione',
icon: 'Icona',
img: 'Img',
department: 'Ufficio',
producer: 'Produttore',
category: 'Categorie',
price: 'Prezzo',
after_price: 'Dopo il Prezzo',
size: 'Dimensioni',
canBeShipped: 'Può essere spedito',
canBeBuyOnline: 'Acquistabile On Line',
date: 'Data',
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
weight: 'Peso',
unit: 'Unità di Misura',
stars: 'Voto',
color: 'Colore',
theme: 'Tema',
ritiro_presso: 'Ritiro presso',
magazzino: 'Magazzino',
addcart: 'Aggiungi {qta} al Carrello',
origine: 'Origine',
},
storehouses: {
name: 'Magazzino',
},
otherpages: {
myactivities: 'Attività',
myactivities2: 'Mie Attività',
@@ -245,7 +276,9 @@ const msg_it = {
addedfidocircuit: 'Fido abilitato al {circuitname}',
addedcircuit: 'Aggiunto al {circuitname}',
domanda_trusted: 'Accettare la Fiducia a {username}?',
trusted: 'Accettato la Fiducia',
domanda_reject: 'Non lo conosci? Vuoi rifiutare l\'accesso a {username}?',
trusted: 'Hai Accettato la Fiducia a {username}',
rejected: 'Hai Rifiutato l\'accesso a {username}',
domanda_ask_friend: 'Chiedere l\'Amicizia a {username}?',
domanda_ask_handshake: 'Confermi che hai conosciuto personalmente e dai la tua fiducia a {username} ?',
domanda_ask_group: 'Chiedere l\'invito al Gruppo {groupname}?',
@@ -262,7 +295,7 @@ const msg_it = {
cancel_req_friend: 'Annullata la richiesta di Amicizia a {username}',
cancel_req_group: 'Annullata la richiesta al gruppo {groupname}',
domanda_rejectedtrust: 'Rifiutare la Fiducia a {username}?',
rejected: 'Rifiutato la Fiducia',
rejected: 'Hai rifiutato l\'accesso alla App a {username}',
domanda_blockuser: 'Bloccare {username}?',
domanda_unblockuser: 'Sbloccare {username}?',
domanda_reportuser: 'Segnalare l\'utente {username}?',
@@ -365,7 +398,7 @@ const msg_it = {
sonomediatore: 'Quando sei MEDIATORE verrai contattato dai <strong>FACILITATORE AYNI</strong> tramite un messaggio sulla Chat <strong>AYNI BOT</strong> !',
superchat: 'Nota Bene: Non inviarci la ricevuta, non ci occorre. Attendi il messaggio di conferma da parte del Sognatore (sulla Chat AYNI BOT).<br>SOLO se hai problemi di PAGAMENTO, o ti manca la conferma del SOGNATORE (dopo aver atteso almeno 12 ore) o se vuoi essere SOSTITUITO, due Facilitatore ti aspettano per aiutarti sulla Chat:<br><a href="{link_superchat}" target="_blank">Entra nella Gift Chat</a>',
sonodonatore: '<ol class="lista"><li>Quando sei in questa posizione, verrai invitato (tramite un messaggio su <strong>AYNI BOT</strong>) ad effettuare il Dono. Non sarà più necessario entrare in una Chat.</li>'
+ '<li><strong>Avrai tempo 3 giorni per fare il Regalo</strong> (poi verrai sostituito), nella modalità di pagamento che troverai scritto sul messaggio in <strong>AYNI BOT</strong> .<br></ol>',
+ '<li><strong>Avrai tempo 3 giorni per fare il Regalo</strong> (poi verrai sostituito), nella modalità di pagamento che troverai scritto sul messaggio in <strong>AYNI BOT</strong> .<br></ol>',
sonodonatore_seconda_tessitura: '<ol class="lista"><li>Qui tu sei Mediatore e anche Donatore, ma essendo la seconda Tessitura (il Ritorno), non avrai bisogno di effettuare nuovamente il dono<br></ol>',
controlla_donatori: 'Controlla Lista Donatori',
link_chat: 'Link della Gift Chat Telegram',
@@ -393,15 +426,15 @@ const msg_it = {
metodi_disponibili: 'Metodi Disponibili',
importo: 'Importo',
effettua_il_dono: 'E\' arrivato il momento di Effettuare il proprio Dono al Sognatore<br><strong>👉 {sognatore} 👈</strong> !<br><br>'
+ 'Inviare tramite <a href="https://www.paypal.com/" target="_blank">PayPal</a> a: <strong>{email}</strong><br>'
+ 'Aggiungere come messaggio la dicitura: <strong>Regalo</strong><br>'
+ '<strong><span style="color:red">ATTENZIONE IMPORTANTE:</span> Scegliere l\'opzione</strong><BR>"INVIO DI DENARO A UN AMICO"<br>Cosi non pagherai delle commissioni extra!',
+ 'Inviare tramite <a href="https://www.paypal.com/" target="_blank">PayPal</a> a: <strong>{email}</strong><br>'
+ 'Aggiungere come messaggio la dicitura: <strong>Regalo</strong><br>'
+ '<strong><span style="color:red">ATTENZIONE IMPORTANTE:</span> Scegliere l\'opzione</strong><BR>"INVIO DI DENARO A UN AMICO"<br>Cosi non pagherai delle commissioni extra!',
paypal_me: '<br>2) Metodo Semplificato<br><a href="{link_payment}" target="_blank">Cliccare direttamente qui</a><br>'
+ 'si aprirà PayPal con l\'importo e il destinatario gia impostato.<br>'
+ 'Aggiungere come messaggio la dicitura: <strong>Regalo</strong><br>'
+ '<strong><span style="color:red">ATTENZIONE IMPORTANTE:</span> TOGLIERE LA SPUNTA SU</strong>: Devi pagare beni o servizi? ... (Protezione acquisti Paypal)<br>Altrimenti pagherai inutilmente delle commissioni extra.<br>'
+ 'Se hai dubbi, guarda il video qui sotto per vedere come fare:<br>'
+ 'infine Clicca su “Invia Denaro ora”.',
+ 'si aprirà PayPal con l\'importo e il destinatario gia impostato.<br>'
+ 'Aggiungere come messaggio la dicitura: <strong>Regalo</strong><br>'
+ '<strong><span style="color:red">ATTENZIONE IMPORTANTE:</span> TOGLIERE LA SPUNTA SU</strong>: Devi pagare beni o servizi? ... (Protezione acquisti Paypal)<br>Altrimenti pagherai inutilmente delle commissioni extra.<br>'
+ 'Se hai dubbi, guarda il video qui sotto per vedere come fare:<br>'
+ 'infine Clicca su “Invia Denaro ora”.',
commento_al_sognatore: 'Scrivi qui un commento per il Sognatore:',
qui_compariranno_le_info: 'Nel giorno della partenza della Nave, compariranno le informazioni del Sognatore',
posizione: 'Posizione',
@@ -960,7 +993,7 @@ const msg_it = {
contribstr: 'Contributo (esempio: 5€ + 5 RIS)',
contact_phone: 'Telefono per info',
contact_telegram: 'Username Telegram',
},
},
disc: {
typol_code: 'Codice Tipologia',
order: 'Ordinamento',
@@ -1105,13 +1138,13 @@ const msg_it = {
follow_circuits: 'Circuiti di cui fai parte',
},
friends: {
accept_trust: 'Accetta Fiducia',
accept_trust: 'Accetta',
accepted: 'Amicizia Accettata',
refused: 'Amicizia Rifiutata',
accept: 'Accetta',
refuse: 'Rifiuta',
accept_friend: 'Accetta Amicizia',
refuse_trust: 'Rifiuta Fiducia',
refuse_trust: 'Rifiuta',
reject_trust: 'Revoca Fiducia',
remove_from_myfriends: 'Rimuovi dagli Amici',
block_user: 'Blocca Utente',
@@ -1225,7 +1258,7 @@ const msg_it = {
invia_msg_dest: 'Invia la richiesta a {name}',
non_hai_circuito_nazionale: 'Per poter inviare dei RIS ad una persona di un altro territorio, è necessario entrare sul "Circuito RIS Italia"',
destin_non_ha_circuito_naz: 'Il tuo Destinatario non è ancora dentro al Circuito RIS Italia',
beforeentertolocalcircuit: 'Prima di entrare nel Circuito Nazionale occorre accedere in quello della tua Provincia',
non_entrato: 'Per far parte di questo Circuito devi chiedere di Entrare!',
link_chat: 'Chat {name}',
@@ -1313,7 +1346,7 @@ const msg_it = {
domanda_refuse_circuit: 'Rifiutare la richiesta di {username} per entrare nel {circuitname}?',
refusedcircuit: 'Rifiutato a {username} la richiesta di entrare nel Circuito',
sendcoins: 'Invia RIS',
sendcoins_toso: 'Invia RIS a',
sendcoins_toso: 'Invia RIS',
receive_coins: 'Ricevi RIS',
info_contocom: 'Il Conto Comunitario viene gestito collettivamente dai membri del Circuito Territoriale ed utilizzato per progetti comuni, per investimenti di solidarietà o per fare fronte ad eventuali situazioni di difficoltà.',
sendcoins_tocom: 'Invia RIS a Conto Comunitario',
@@ -1329,6 +1362,8 @@ const msg_it = {
refuse_coins_qty: 'Rifiuta',
refuse_coins: 'Rifiuta RIS',
movements: 'Movimenti',
ris_in_arrivo: '👉🏻 Ci sono RIS in Arrivo !',
transaz: 'mov',
movements_made: 'Movimenti effettuati',
contocomunitario: 'Conto Comunitario',
comunitario: 'Comunitario',
@@ -1396,7 +1431,8 @@ const msg_it = {
toCCom: 'Al Conto Comunitario:',
pendingtransaction: '* Transazioni Pendenti',
viewpendingtransaction: 'Vedi Transazioni Pendenti',
onlymymov: 'Mostra solo i miei movimenti',
onlymymov: 'Vedi i tuoi movimenti',
allmov: 'Vedi i movimenti di Tutto il Circuito',
showsaldi: 'Mostra i Saldi dei membri',
updatewallet: 'Aggiorna',
},
@@ -1500,7 +1536,7 @@ const msg_it = {
autorizzare: 'In attesa di Abilitazione',
passeggeri: 'Passeggeri Navi',
giainlista: 'Gia in Lista',
newreg: 'Registrati',
newreg: 'Iscritti',
onlineusers: 'OnLine',
diffusori: 'Diffusori',
strettelist: 'Strette',
@@ -1541,6 +1577,8 @@ const msg_it = {
step_altri_in_profilo: 'Per vedere e modificare tutte le altre informazioni di Profilo:',
step_fine_title: 'Fine',
step_fine: 'Hai completato l\'aggiornamento del tuo Profilo. Ricorda che potrai modificarlo, cliccando sulla prima icona in alto a destra 🙎🏻‍♂️ .',
utenti_da_verificare: 'E\' richiesta la tua autorizzazione per far entrare i tuoi Amici alla App RISO',
utenti_da_verif_btn: 'Utenti',
},
cmd: {
@@ -1555,6 +1593,15 @@ const msg_it = {
seen: 'Visto da {num} utenti',
attend: '{num} Partecipanti',
},
ecomm: {
already_in_cart: 'Questo prodotto è stato già aggiunto al Carrello',
area_personale: 'Devi prima accedere alla tua Area Personale',
prodotto: 'prodotto',
prodotti: 'prodotti',
haveadded: 'Hai Aggiunto',
error_cart: 'Errore durante l\'inserimento del prodotto sul carrello, riprovare.',
tocart: 'al Carrello',
},
},
};

View File

@@ -89,6 +89,17 @@ export const useCircuitStore = defineStore('CircuitStore', {
return this.listcircuits.findIndex((rec: ICircuit) => rec.name === circuitname && rec.showAlways) >= 0
},
getCircuitsNational(): any[] {
const userStore = useUserStore()
let arrcircnaz = this.listcircuits.filter((rec: ICircuit) => rec.showAlways)
for (const circ of arrcircnaz) {
circ.account = userStore.my.profile.useraccounts.find((rec: IAccount) => rec.circuitId === circ._id)
}
return arrcircnaz
},
IsNationalAndNotEnterInLocal(circuitname: string): boolean {
const userStore = useUserStore()
@@ -99,12 +110,14 @@ export const useCircuitStore = defineStore('CircuitStore', {
SonoDentroAdAlmeno1CircuitoConFido() {
const userStore = useUserStore()
const accountsConFido = userStore.my.profile.useraccounts.filter((rec: IAccount) => rec.fidoConcesso > 0)
if (userStore.my.profile.useraccounts) {
const accountsConFido = userStore.my.profile.useraccounts.filter((rec: IAccount) => rec.fidoConcesso > 0)
for (const account of accountsConFido) {
const mycircuit = this.listcircuits.find((circ: ICircuit) => circ._id === account.circuitId)
if (mycircuit && !mycircuit.showAlways) {
return mycircuit
for (const account of accountsConFido) {
const mycircuit = this.listcircuits.find((circ: ICircuit) => circ._id === account.circuitId)
if (mycircuit && !mycircuit.showAlways) {
return mycircuit
}
}
}

View File

@@ -103,7 +103,7 @@ export const costanti = {
{
visible: true,
title: ' Beni ',
subtitle: 'Autoproduzioni, artigianato, cibo, abbigliamento, attrezzature, arredamento',
subtitle: 'Autoproduzioni, artigianato, cibo, abbigliamento',
strsingolo: 'Bene',
to: '/goods',
icon: 'fas fa-tshirt',
@@ -118,7 +118,7 @@ export const costanti = {
visible: true,
strsingolo: 'Servizio',
title: 'Servizi',
subtitle: 'Competenze, formazione, aiuti, benessere, salute, casa, riparazioni',
subtitle: 'Competenze, formazione, aiuti, benessere, casa',
to: '/services',
icon: 'fas fa-house-user',
color: 'red-6',
@@ -131,7 +131,7 @@ export const costanti = {
{
visible: true,
title: 'Ospitalità',
subtitle: 'Conosci persone nuove, ospita viaggiatori o esplora tu nuovi paesi',
subtitle: 'Ospitare per brevi periodi, esplora altre città',
strsingolo: 'Ospitalità',
to: '/hosps',
icon: 'fas fa-bed',
@@ -160,7 +160,7 @@ export const costanti = {
visible: false,
title: 'Circuiti RIS',
strsingolo: 'Circuito',
subtitle: 'Unisciti al circuito della tua provincia per utilizzare <strong>i RIS come strumento di scambio</strong>',
subtitle: 'Strumento di scambio alternativa alle monete',
to: '/circuits',
table: 'circuits',
icon: 'fas fa-coins',
@@ -175,7 +175,7 @@ export const costanti = {
visible: false,
title: 'Gruppi',
strsingolo: 'Gruppo',
subtitle: 'Conosci gruppi locali, associazioni, progetti, comunità',
subtitle: 'Associazioni, progetti, comunità, negozi',
to: '/groups',
table: 'mygroups',
icon: 'fas fa-users',
@@ -189,7 +189,7 @@ export const costanti = {
visible: true,
title: 'Eventi',
strsingolo: 'Evento',
subtitle: 'Mercatini, incontri, conferenze, corsi formativi, feste e divertimento',
subtitle: 'Mercatini, incontri, conferenze, corsi',
to: '/events',
icon: 'event',
color: 'green-6',

View File

@@ -396,6 +396,13 @@ export const colTabledepartments = [
AddCol(DuplicateRec),
]
export const colTablecategories = [
AddCol({ name: 'name', label_trans: 'categories.name' }),
AddCol({ name: 'img', label_trans: 'categories.img' }),
AddCol(DeleteRec),
AddCol(DuplicateRec),
]
export const colTableStorehouse = [
AddCol({ name: 'name', label_trans: 'store.name' }),
AddCol({ name: 'description', label_trans: 'store.description' }),
@@ -1458,47 +1465,47 @@ export const colmyBachecas = [
icon: 'fas fa-calendar-day',
sortable: false,
}),
AddCol({
name: 'idCity',
label_trans: 'skill.city',
fieldtype: costanti.FieldType.multiselect_by_server,
jointable: 'cities',
tablesel: 'cities',
noshowlabel: true,
icon: 'fas fa-map-marker-alt',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
remote_table: 'mycities',
remote_key: '_id',
remote_field: 'comune',
sortable: false,
required: true,
}),
AddCol({
name: 'idSector',
label_trans: 'sectors.name',
fieldtype: costanti.FieldType.select,
required: true,
jointable: toolsext.TABSECTORS,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
visible: true,
icon: 'category',
sortable: false,
}),
AddCol({
name: 'idSkill',
label_trans: 'skill.name',
fieldtype: costanti.FieldType.select,
jointable: 'skills',
addnone: true,
filter_table: toolsext.TABSECTORS,
filter_field: 'idSector',
noshowlabel: true,
icon: 'engineering',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
allowNewValue: false,
required: false,
sortable: false,
}),
AddCol({
name: 'idCity',
label_trans: 'skill.city',
fieldtype: costanti.FieldType.multiselect_by_server,
jointable: 'cities',
tablesel: 'cities',
noshowlabel: true,
icon: 'fas fa-map-marker-alt',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
remote_table: 'mycities',
remote_key: '_id',
remote_field: 'comune',
sortable: false,
required: true,
}),
AddCol({
name: 'idSector',
label_trans: 'sectors.name',
fieldtype: costanti.FieldType.select,
required: true,
jointable: toolsext.TABSECTORS,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
visible: true,
icon: 'category',
sortable: false,
}),
AddCol({
name: 'idSkill',
label_trans: 'skill.name',
fieldtype: costanti.FieldType.select,
jointable: 'skills',
addnone: true,
filter_table: toolsext.TABSECTORS,
filter_field: 'idSector',
noshowlabel: true,
icon: 'engineering',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
allowNewValue: false,
required: false,
sortable: false,
}),
AddCol({
name: 'note', label_trans: 'proj.descrapprof', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
@@ -1924,7 +1931,12 @@ export const colTableProducts = [
jointable: 'departments',
}),
// AddCol({ name: 'department', label_trans: 'products.department' }),
AddCol({ name: 'category', label_trans: 'products.category' }),
AddCol({
name: 'category',
label_trans: 'products.category',
fieldtype: costanti.FieldType.multiselect,
jointable: 'categorys',
}),
AddCol({ name: 'price', label_trans: 'products.price', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'after_price', label_trans: 'products.after_price' }),
AddCol({ name: 'color', label_trans: 'products.color' }),
@@ -1937,6 +1949,8 @@ export const colTableProducts = [
AddCol({ name: 'canBeShipped', label_trans: 'products.canBeShipped', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'canBeBuyOnline', label_trans: 'products.canBeBuyOnline', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'weight', label_trans: 'products.weight', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'unit', label_trans: 'products.unit',
fieldtype: costanti.FieldType.select, jointable: 'units', }),
AddCol({ name: 'stars', label_trans: 'products.stars', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'date', label_trans: 'products.date', fieldtype: costanti.FieldType.date }),
AddCol(DeleteRec),
@@ -3466,6 +3480,13 @@ export const fieldsTable = {
colkey: 'username',
collabel: 'name',
},
{
value: 'categorys',
label: 'Categorie',
columns: colTablecategories,
colkey: '_id',
collabel: 'name',
},
{
value: 'storehouses',
label: 'Magazzini',
@@ -4033,6 +4054,15 @@ export const fieldsTable = {
colicon: 'icon',
noshow: true,
},
{
value: toolsext.TABUNITS,
label: 'Unità di Misura',
columns: colTableGeneric,
colkey: 'value',
collabel: 'label',
colicon: 'icon',
noshow: true,
},
],
}

View File

@@ -3719,6 +3719,14 @@ export const tools = {
}
},
isVerifiedByUser(user: IUserFields) {
try {
return user.verified_by_aportador
} catch (e) {
return false
}
},
addMinutes(mydate: Date, minutes: number) {
return date.addToDate(mydate, { minutes })
},
@@ -5560,6 +5568,31 @@ export const tools = {
})
},
addToMyTrust($q: any, username: string, usernameDest: string, value: boolean) {
const userStore = useUserStore()
const notifStore = useNotifStore()
$q.dialog({
message: t(value ? 'db.domanda_trusted' : 'db.domanda_reject', { username: usernameDest }),
ok: { label: t('dialog.yes'), push: true },
cancel: { label: t('dialog.cancel') },
title: t('db.domanda')
}).onOk(() => {
userStore.setFriendsCmd($q, t, username, usernameDest, shared_consts.FRIENDSCMD.SETTRUST, value)
.then((res: any) => {
if (res) {
userStore.my.profile.userstoverify = userStore.my.profile.userstoverify.filter((rec: any) => rec.username !== usernameDest)
if (value)
tools.showPositiveNotif($q, t('db.trusted', {username: usernameDest}))
else
tools.showNegativeNotif($q, t('db.rejected', {username: usernameDest}))
}
})
})
},
removeFromMyFriends($q: any, username: string, usernameDest: string) {
const userStore = useUserStore()
@@ -6437,7 +6470,7 @@ export const tools = {
if (res.useraccounts && res.useraccounts.length > 0) {
userStore.my.profile.useraccounts = res.useraccounts
}
$router.push('/circuit')
$router.push('/circuits')
tools.showPositiveNotif($q, t('circuit.coins_sendrequest_sent'))
} else {
tools.showNegativeNotif($q, res.errormsg)
@@ -6854,6 +6887,8 @@ export const tools = {
tools.blockUser($q, username, dest)
} else if (cmd === shared_consts.FRIENDSCMD.SETFRIEND) {
tools.addToMyFriends($q, username, dest)
} else if (cmd === shared_consts.FRIENDSCMD.SETTRUST) {
tools.addToMyTrust($q, username, dest, value)
} else if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) {
tools.setRequestFriendship($q, username, dest, value)
} else if (cmd === shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS) {
@@ -8196,6 +8231,12 @@ export const tools = {
}
return 0
},
getUnitsMeasure(unit: number, short: boolean) {
const unitrec = shared_consts.Units_Of_Measure_ListBox.find((rec: any) => rec.value === unit)
return unitrec ? (short ? unitrec.short : unitrec.label) : ''
},
isPartecipero(myrec: any) {
const userStore = useUserStore()
if (myrec && myrec.mybookings && myrec.mybookings.length > 0) {

View File

@@ -96,6 +96,7 @@ export const toolsext = {
TABPREF: 'hosps_preferences',
TABPEOPLE: 'people',
TABCIRCUITS: 'circuits',
TABUNITS: 'units',
SERVKEY_VERS: 'vers',
ERR_GENERICO: -1,

View File

@@ -79,6 +79,7 @@ export const useProducts = defineStore('Products', {
canBeShipped: false,
canBeBuyOnline: false,
weight: 0,
unit: 0,
stars: 0,
date: tools.getDateNow(),
icon: '',
@@ -214,8 +215,6 @@ export const useProducts = defineStore('Products', {
if (!globalStore.site.confpages.enableEcommerce)
return null
console.log('loadOrders', 'userid=', userStore.my._id)
// if (userStore.my._id === '') {
// return new Types.AxiosError(0, null, 0, '')
// }
@@ -239,7 +238,6 @@ export const useProducts = defineStore('Products', {
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},

View File

@@ -81,6 +81,7 @@ export const DefaultUser: IUserFields = {
last_circuitpath: '',
lastdate_reqRis: tools.getLastDateReadReset(),
manage_mygroups: [],
userstoverify: [],
asked_friends: [],
asked_groups: [],
refused_groups: [],
@@ -155,6 +156,7 @@ export const DefaultProfile: IUserProfile = {
mycircuits: [],
last_circuitpath: '',
manage_mygroups: [],
userstoverify: [],
asked_friends: [],
asked_groups: [],
refused_groups: [],
@@ -315,6 +317,16 @@ export const useUserStore = defineStore('UserStore', {
}
},
getUsersToVerify(): any[] {
try {
const arr: any = this.my.profile.userstoverify
return arr
} catch (e) {
return []
}
},
hoContiComunitariDaAmministrare(): boolean {
try {
const arr: any = this.my.profile.manage_mygroups.filter((group: IMyGroup) => (group.mycircuits!.length > 0))

View File

@@ -35,6 +35,7 @@ import { useMessageStore } from './MessageStore'
import { useNotifStore } from '@store/NotifStore'
import { useCircuitStore } from '@store/CircuitStore'
import { routesAdmin } from '@src/router/routesAdmin'
import { routesECommerce } from '@src/router/routesECommerce'
import LandingFooter from '@src/components/LandingFooter/LandingFooter'
@@ -120,6 +121,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
workers: [],
storehouses: [],
departments: [],
categories: [],
sharewithus: [],
TIMER: null,
TIMEOUT: null,
@@ -300,6 +302,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === 'resps') ris = state.resps
else if (table === 'workers') ris = state.workers
else if (table === 'departments') ris = state.departments
else if (table === 'categorys') ris = state.categories
else if (table === 'sharewithus') ris = state.sharewithus
else if (table === 'paymenttypes') ris = state.paymenttypes
else if (table === 'circuits') ris = circuitStore.listcircuits
@@ -488,6 +491,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
const baseroutes = static_data.getDynamicPages(this.site);
const adminRoutes = routesAdmin.routesAd(this.site);
const ecommRoutes = routesECommerce.routesEcomm(this.site);
const last = {
active: true,
@@ -516,7 +520,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (!toolsext.sito_online(false)) {
static_data.routes = [sito_offline, last]
} else {
static_data.routes = [...baseroutes, ...adminRoutes, ...arrpagesroute, last]
static_data.routes = [...baseroutes, ...ecommRoutes, ...adminRoutes, ...arrpagesroute, last]
}
/*for (const menu of static_data.routes) {
@@ -1512,6 +1516,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
this.resps = (res.data.resps) ? [...res.data.resps] : []
this.workers = (res.data.workers) ? [...res.data.workers] : []
this.departments = (res.data.departments) ? [...res.data.departments] : []
this.categories = (res.data.categories) ? [...res.data.categories] : []
this.levels = (res.data.levels) ? [...res.data.levels] : []
this.skills = (res.data.skills) ? [...res.data.skills] : []
this.goods = (res.data.goods) ? [...res.data.goods] : []
@@ -1793,6 +1798,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === toolsext.TABTYPEACCOM) myarr = shared_consts.TypeAccom
else if (table === toolsext.TABLOCACCOM) myarr = shared_consts.LocationAccom
else if (table === toolsext.TABPREF) myarr = shared_consts.Preferences
else if (table === toolsext.TABUNITS) myarr = shared_consts.Units_Of_Measure_ListBox
else if (table === 'usernotifs') myarr = shared_consts.UsersNotif_Adv_List
else if (table === 'typenotifs') myarr = shared_consts.TypeNotifs_Arr
else myarr = this.getListByTable(table)

View File

@@ -0,0 +1,5 @@
$heightBtn: 100%;
.card .product-image {
height: 300px;
}

View File

@@ -0,0 +1,59 @@
import { 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 { useProducts } from '@store/Products'
import { useI18n } from '@/boot/i18n'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
import { CProductCard } from '@src/components/CProductCard'
export default defineComponent({
name: 'CartList',
components: { CProductCard },
filters: {
capitalize(value: any) {
if (!value) {
return ''
}
value = value.toString()
return value.charAt(0).toUpperCase() + value.slice(1)
}
},
props: {},
setup() {
const userStore = useUserStore()
const globalStore = useGlobalStore()
const productStore = useProducts()
const $router = useRouter()
const $q = useQuasar()
const { t } = useI18n();
function getCart() {
return productStore.getCart()
}
function getProducts() {
return productStore.getProducts()
}
function mounted() {
// Inizializza
}
onMounted(mounted)
return {
userStore,
costanti,
tools,
toolsext,
getCart,
getProducts,
}
}
})

View File

@@ -0,0 +1,21 @@
<template>
<q-page>
<div class="panel">
<div class="container">
<div class="row">
<div class="q-pa-md row items-start q-gutter-md" v-for="(product, index) in getProducts()" :key="index">
<CProductCard :product="product"/>
</div>
</div>
</div>
</div>
</q-page>
</template>
<script lang="ts" src="./cartList.ts">
</script>
<style lang="scss" scoped>
@import './cartList';
</style>

View File

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

View File

@@ -0,0 +1,5 @@
$heightBtn: 100%;
.card .product-image {
height: 300px;
}

View File

@@ -0,0 +1,183 @@
import { 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 { useProducts } from '@store/Products'
import { useI18n } from '@/boot/i18n'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
import { ICart, IOrderCart, IShareWithUs } from '@src/model/Products'
import { shared_consts } from '@src/common/shared_vuejs'
import { CSingleCart } from '../../../components/CSingleCart'
import { CTitleBanner } from '@components'
export default defineComponent({
name: 'checkOut',
components: { CSingleCart, CTitleBanner },
props: {},
setup() {
const userStore = useUserStore()
const globalStore = useGlobalStore()
const productStore = useProducts()
const $router = useRouter()
const $q = useQuasar()
const { t } = useI18n();
const mycart = ref(<ICart>{})
const myrec = ref(<any[string]>[])
const oldrec = ref(<any[string]>[])
const note = ref('')
const statusnow = ref(shared_consts.OrderStatus.NONE)
function mounted() {
// Inizializza
load()
}
function getItemsCart() {
const cart = productStore.getCart()
return cart.items || null
}
function getNumItems(): number {
const cart = productStore.getCart()
if (!!cart.items)
return cart.items.length || 0
else
return 0
}
function getCart(): ICart {
return productStore.getCart()
}
function getNote() {
const cart = productStore.getCart()
return cart.note
}
function change_field(fieldname: string) {
if (myrec.value[fieldname] !== oldrec.value[fieldname]) {
myrec.value[fieldname] = oldrec.value[fieldname]
const mydata = {
[fieldname]: myrec.value[fieldname]
}
const aggiorna = fieldname !== 'status'
tools.saveFieldToServer($q, 'carts', mycart.value._id, mydata, aggiorna)
oldrec.value[fieldname] = myrec.value[fieldname]
}
}
function myTotalPrice(): string {
if (productStore.cart && productStore.cart.totalPrice) {
return productStore.cart.totalPrice.toFixed(2)
} else {
return '0'
}
}
function myTotalQty(): number {
if (productStore.cart) {
return productStore.cart.totalQty!
} else {
return 0
}
}
async function load() {
mycart.value = getCart()
myrec.value = Object.keys(mycart)
oldrec.value = myrec.value
note.value = mycart.value.note!
if (mycart.value)
statusnow.value = await productStore.UpdateStatusCart({ cart_id: mycart.value._id, status: 0 })
console.log('myrec', myrec.value)
}
function CanBeShipped() {
return productStore.cart.items ? productStore.cart.items.filter((rec: any) => rec.order.product.canBeShipped).length : false
}
function CanBeBuyOnline() {
return productStore.cart.items ? productStore.cart.items.filter((rec: any) => rec.order.product.canBeBuyOnline).length : false
}
function getnumsteps() {
let numsteps = 1
if (CanBeShipped())
numsteps++
if (CanBeBuyOnline())
numsteps++
return numsteps
}
function docheckout() {
// Può essere spedito?
if (CanBeShipped()) {
// mostra form di spedizione
}
if (CanBeBuyOnline()) {
// mostra form di acquisto Online
}
}
function completeOrder() {
$q.dialog({
message: 'Confermare l\'ordine di acquisto di ' + myTotalQty() + ' prodotti ?',
ok: {
label: t('dialog.yes'),
push: true
},
cancel: {
label: t('dialog.cancel')
},
title: 'Ordine'
}).onOk(async () => {
const status = shared_consts.OrderStatus.CHECKOUT_SENT
statusnow.value = await productStore.UpdateStatusCart({ cart_id: mycart.value._id, status })
if (statusnow.value === status) {
tools.showPositiveNotif($q, 'Ordine Confermato')
setTimeout(() => {
$router.push('/orderinfo')
}, 2000)
}
// change_field('status')
// change_field('status')
})
}
onMounted(mounted)
return {
userStore,
costanti,
tools,
toolsext,
completeOrder,
getNumItems,
myTotalPrice,
getItemsCart,
getNote,
change_field,
note,
statusnow,
shared_consts,
myTotalQty,
}
}
})

View File

@@ -0,0 +1,44 @@
<template>
<q-page>
<CTitleBanner title="Carrello"></CTitleBanner>
<div class="panel">
<div>
<div class="container">
<div class="q-pa-sm col items-start q-gutter-xs" v-for="(itemorder, index) in getItemsCart()" :key="index">
<CSingleCart :order="itemorder.order" :showall="true"/>
</div>
</div>
<q-separator></q-separator>
<div class="col-6 q-mr-sm" style="text-align: right">
<span class="text-grey q-mr-xs">Totale:</span> <span
class="text-subtitle1 q-mr-sm "> {{ (myTotalPrice()) }}</span>
</div>
<q-input v-if="getNumItems() > 0" v-model="note" style="max-width: 400px;" label="Scrivi qui per eventuali note o chiarimenti:"
filled dense
debounce="1000"
autogrow
@input="change_field('note')">
</q-input>
<br>
</div>
<q-stepper-navigation>
<q-btn v-if="statusnow < shared_consts.OrderStatus.CHECKOUT_SENT" rounded icon="fas fa-shopping-cart" color="green" label="Completa l'Ordine" class="q-mb-sm"
:disabled="myTotalQty() < 1"
@click="completeOrder"></q-btn>
</q-stepper-navigation>
</div>
</q-page>
</template>
<script lang="ts" src="./checkOut.ts">
</script>
<style lang="scss" scoped>
@import './checkOut';
</style>

View File

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

1
src/views/ecommerce/index.ts Executable file
View File

@@ -0,0 +1 @@
export * from './productsList'

View File

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

Some files were not shown because too many files have changed in this diff Show More