Versione 1.2.87

This commit is contained in:
Surya Paolo
2025-12-18 19:45:36 +01:00
parent a305bd8493
commit 99d623da79
19 changed files with 392 additions and 266 deletions

4
.env
View File

@@ -1,6 +1,6 @@
VITE_APP_VERSION="1.2.86"
VITE_APP_VERSION="1.2.87"
VITE_LANG_DEFAULT="it"
VITE_PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
VITE_SERVICE_WORKER_FILE="sw-1.2.86.js"
VITE_SERVICE_WORKER_FILE="sw-1.2.87.js"
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
VITE_VUE_ROUTER_MODE="history"

View File

@@ -10,7 +10,7 @@
<meta name="description" content="<%= productDescription %>">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="version" content="1.2.86">
<meta name="version" content="1.2.87">
<meta name="viewport"
content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.2.86",
"version": "1.2.87",
"productName": "Riso 💚 - Rete Italiana Scambio orizzontale",
"description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "APP_VERSION='1.2.86' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.87' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "cnm",
"version": "1.2.86",
"version": "1.2.87",
"description": "Comunita Nuovo Mondo",
"productName": "ComunitaNuovoMondo",
"author": "Surya",
@@ -9,7 +9,7 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8083 APP_VERSION='1.2.86' quasar dev",
"dev": "PORT=8083 APP_VERSION='1.2.87' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production quasar build -m pwa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "freeplanet",
"version": "1.2.86",
"version": "1.2.87",
"description": "freeplanet",
"productName": "freeplanet",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8087 APP_VERSION='1.2.86' quasar dev",
"dev": "PORT=8087 APP_VERSION='1.2.87' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.2.86",
"version": "1.2.87",
"productName": "Riso 💚 - Rete Italiana Scambio orizzontale",
"description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "APP_VERSION='1.2.86' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.87' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "gruppomacro",
"version": "1.2.86",
"version": "1.2.87",
"productName": "Gruppo Macro",
"description": "Il Gruppo Editoriale Macro, attivo dal 1987, è leader europeo nella pubblicazione di libri per il benessere e la consapevolezza. Con oltre 1.500 titoli, promuove una visione armonica del mondo, offrendo opere di autori internazionali e italiani come Gregg Braden, Bruce Lipton, Joe Dispenza, Louise Hay, Eckhart Tolle e molti altri. Scopri un'editoria che abbraccia il corpo, la mente, lo spirito e l'ecologia.",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8089 APP_VERSION='1.2.86' quasar dev",
"dev": "PORT=8089 APP_VERSION='1.2.87' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.86' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.87' quasar build -m spa",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "nuovomondo",
"version": "1.2.86",
"version": "1.2.87",
"description": "Nuovo Mondo",
"productName": "Nuovo Mondo",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "APP_VERSION='1.2.86' PORT=8083 quasar dev",
"dev": "APP_VERSION='1.2.87' PORT=8083 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "nutriben",
"version": "1.2.86",
"version": "1.2.87",
"description": "Nutriben",
"productName": "Nutriben",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8093 APP_VERSION='1.2.86' quasar dev",
"dev": "PORT=8093 APP_VERSION='1.2.87' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.86' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.87' quasar build -m spa",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "piuchebuono",
"version": "1.2.86",
"version": "1.2.87",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8085 APP_VERSION='1.2.86' quasar dev",
"dev": "PORT=8085 APP_VERSION='1.2.87' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.2.86",
"version": "1.2.87",
"productName": "Riso 💚 - Rete Italiana Scambio orizzontale",
"description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "APP_VERSION='1.2.86' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.87' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"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 -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.87' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -3,7 +3,7 @@
/* global workbox */
/* global cfgenv */
const VITE_APP_VERSION = '1.2.86';
const VITE_APP_VERSION = '1.2.87';
// Costanti di configurazione
const DYNAMIC_CACHE = 'dynamic-cache-v2';

View File

@@ -1,6 +1,6 @@
import { ref, reactive } from 'vue';
import { useQuasar } from 'quasar';
import type { InvitoAmicoForm, InvitoAmicoResponse } from './invita-amico.types';
import type { InvitoAmicoForm, InvitoAmicoResponse } from '../../types/invita-amico.types';
// Composables
const $q = useQuasar();

View File

@@ -425,89 +425,131 @@ display: flex;
}
}
/* ---------------- Dialog annunci ---------------- */
.annunci-dialog {
width: min(560px, 92vw);
border-radius: $r-lg;
overflow: hidden;
}
max-width: 500px;
width: 90vw;
.dialog-header {
padding: $s-md;
.dialog-title-row {
.dialog-header {
background: $gradient-primary;
color: white;
display: flex;
align-items: center;
justify-content: space-between;
align-items: center;
padding: $s-lg;
.dialog-title {
margin: 0;
font-size: 1.3rem;
font-weight: 700;
}
}
.dialog-content {
padding: $s-md;
}
.annunci-options-mobile {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: $s-sm;
}
.dialog-title {
margin: 0;
font-weight: 900;
font-size: 1.15rem;
.annuncio-option {
display: flex;
flex-direction: column;
align-items: center;
gap: $s-sm;
padding: $s-md;
border-radius: $r-lg;
cursor: pointer;
transition: all 0.3s ease;
color: white;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
position: relative;
overflow: hidden;
min-height: 140px;
justify-content: center;
&::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.5s ease;
}
&:hover::before {
left: 100%;
}
&:hover {
transform: translateY(-4px) scale(1.02);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25);
}
&:active {
transform: translateY(-2px) scale(1);
}
.q-icon {
opacity: 0.95;
}
.option-title {
font-size: 1.5rem;
font-weight: 700;
text-align: center;
line-height: 1.2;
}
.option-subtitle {
font-size: 1rem;
opacity: 0.9;
text-align: center;
line-height: 1.3;
}
&.gradient-indigo {
background: $gradient-indigo;
}
&.gradient-red {
background: $gradient-red;
}
&.gradient-lime {
background: $gradient-lime;
}
&.gradient-teal {
background: $gradient-teal;
}
}
.dialog-subtitle {
margin-top: 4px;
font-size: 0.9rem;
opacity: 0.72;
@media (max-width: 599px) {
.annuncio-option {
padding: $s-md;
min-height: 130px;
.q-icon {
font-size: 2rem !important;
}
.option-title {
font-size: 1.3rem;
}
.option-subtitle {
font-size: 0.9rem;
}
}
}
}
.annunci-list {
padding: 0;
}
.annunci-item {
min-height: 74px;
color: white;
border-radius: 0;
transition: filter 140ms ease;
position: relative;
overflow: hidden;
/* Quasar adds a light overlay on hover/focus; we force a darker overlay so white titles stay readable */
.q-focus-helper {
background: rgba(0, 0, 0, 0.22) !important;
opacity: 0;
transition: opacity 120ms ease;
}
&:hover .q-focus-helper,
&:focus .q-focus-helper,
&.q-item--active .q-focus-helper,
&.q-item--highlighted .q-focus-helper {
opacity: 1;
}
&:hover {
filter: saturate(1.06);
}
&.disabled {
opacity: 0.72;
}
.annunci-icon {
width: 44px;
height: 44px;
border-radius: 14px;
display: grid;
place-items: center;
background: rgba(255, 255, 255, 0.18);
border: 1px solid rgba(255, 255, 255, 0.20);
}
.option-title {
font-weight: 900;
letter-spacing: 0.01em;
}
.option-subtitle {
opacity: 0.92;
}
}
/* gradients used in list */
.gradient-green { background: linear-gradient(135deg, #22c55e, #16a34a); }

View File

@@ -136,14 +136,6 @@ export default defineComponent({
// TODO: aprire dialog/pagina ricezione RIS
};
const inviteFriend = () => {
// TODO: aprire dialog/pagina invito amico
};
const showMembers = () => {
// TODO: navigare alla lista iscritti
// $router.push('/members')
};
// Wallet
const refreshWallet = () => {
@@ -289,8 +281,6 @@ export default defineComponent({
goToProfile,
sendRIS,
receiveRIS,
inviteFriend,
showMembers,
refreshWallet,
goToTransactions,
goToAllEvents,

View File

@@ -173,130 +173,65 @@
>
<q-card class="annunci-dialog">
<q-card-section class="dialog-header">
<div class="dialog-title-row">
<h3 class="dialog-title">Scegli categoria</h3>
<q-btn
flat
round
dense
icon="close"
aria-label="Chiudi"
@click="showAnnunciDialog = false"
/>
</div>
<div class="dialog-subtitle">Apri la sezione giusta in un tap.</div>
<h3 class="dialog-title">Scegli Categoria</h3>
<q-btn
flat
round
dense
icon="close"
v-close-popup
/>
</q-card-section>
<q-separator />
<q-card-section class="dialog-content">
<div class="annunci-options-mobile">
<div
class="annuncio-option gradient-indigo"
@click="goToGoods"
>
<q-icon
name="fas fa-tshirt"
size="2.5rem"
/>
<span class="option-title">Beni</span>
<span class="option-subtitle">Autoproduzioni · Cibo · Oggetti</span>
</div>
<q-list class="annunci-list">
<q-item
clickable
v-ripple
class="annunci-item gradient-green"
@click="goToGoods"
>
<q-item-section avatar>
<div class="annunci-icon">
<q-icon
name="fas fa-tshirt"
size="1.4rem"
/>
</div>
</q-item-section>
<q-item-section>
<q-item-label class="option-title">Beni</q-item-label>
<q-item-label
caption
class="option-subtitle"
>
Autoproduzioni · Cibo · Oggetti
</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="chevron_right" />
</q-item-section>
</q-item>
<div
class="annuncio-option gradient-red"
@click="goToServices"
>
<q-icon
name="fas fa-house-user"
size="2.5rem"
/>
<span class="option-title">Servizi</span>
<span class="option-subtitle">Competenze · Aiuti · Consulenze</span>
</div>
<q-item
clickable
v-ripple
class="annunci-item gradient-red"
@click="goToServices"
>
<q-item-section avatar>
<div class="annunci-icon">
<q-icon
name="fas fa-house-user"
size="1.4rem"
/>
</div>
</q-item-section>
<q-item-section>
<q-item-label class="option-title">Servizi</q-item-label>
<q-item-label
caption
class="option-subtitle"
>
Competenze · Aiuti · Consulenze
</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="chevron_right" />
</q-item-section>
</q-item>
<div
class="annuncio-option gradient-lime"
@click="goToHospitality"
>
<q-icon
name="fas fa-bed"
size="2.5rem"
/>
<span class="option-title">Ospitalità</span>
<span class="option-subtitle">Ospitare · Viaggi · Accoglienza</span>
</div>
<q-item
clickable
v-ripple
class="annunci-item gradient-lime"
@click="goToHospitality"
>
<q-item-section avatar>
<div class="annunci-icon">
<q-icon
name="fas fa-bed"
size="1.4rem"
/>
</div>
</q-item-section>
<q-item-section>
<q-item-label class="option-title">Ospitalità</q-item-label>
<q-item-label
caption
class="option-subtitle"
>
Ospitare · Viaggi · Accoglienza
</q-item-label>
</q-item-section>
<q-item-section side>
<q-icon name="chevron_right" />
</q-item-section>
</q-item>
<q-item
class="annunci-item gradient-blue disabled"
disable
>
<q-item-section avatar>
<div class="annunci-icon">
<q-icon
name="commute"
size="1.4rem"
/>
</div>
</q-item-section>
<q-item-section>
<q-item-label class="option-title">Trasporti</q-item-label>
<q-item-label
caption
class="option-subtitle"
>
In arrivo
</q-item-label>
</q-item-section>
</q-item>
</q-list>
<div class="annuncio-option gradient-teal">
<q-icon
name="directions_car"
size="2.5rem"
/>
<span class="option-title">Trasporti</span>
<span class="option-subtitle">Condivisione viaggi</span>
<span class="option-subtitle"> (IN ARRIVO...)</span>
</div>
</div>
</q-card-section>
</q-card>
</q-dialog>
</div>

View File

@@ -354,6 +354,7 @@ $space-xxl: 24px;
/* ---- Footer ---- */
.footer-section-modern {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: $s-sm;
@media (min-width: 700px) {
@@ -435,4 +436,107 @@ $space-xxl: 24px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
}
}
}
// ========================================
// Invite Friend Dialog
// ========================================
.invite-friend-dialog {
width: 100%;
max-width: 500px;
max-height: 90vh;
display: flex;
flex-direction: column;
border-radius: $radius-xl;
overflow: hidden;
// Mobile fullscreen
@media (max-width: 599px) {
max-width: 100%;
max-height: 100vh;
height: 100vh;
border-radius: 0;
}
// Header
.dialog-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: $space-lg $space-xl;
color: white;
flex-shrink: 0;
&.invite {
background: linear-gradient(135deg, #4caf50 0%, #2e7d32 100%);
.body--dark & {
background: linear-gradient(135deg, #388e3c 0%, #1b5e20 100%);
}
}
.dialog-title {
display: flex;
align-items: center;
gap: $space-sm;
font-size: 18px;
font-weight: 700;
}
}
// Contenuto scrollabile
.dialog-content {
flex: 1;
overflow-y: auto;
overflow-x: hidden;
padding: $space-lg;
// Scrollbar styling
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05);
.body--dark & {
background: rgba(255, 255, 255, 0.05);
}
}
&::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.2);
border-radius: 3px;
&:hover {
background: rgba(0, 0, 0, 0.3);
}
.body--dark & {
background: rgba(255, 255, 255, 0.2);
&:hover {
background: rgba(255, 255, 255, 0.3);
}
}
}
}
}
// ========================================
// Fix Dialog Background - Light/Dark
// ========================================
.q-dialog__inner>.invite-friend-dialog {
background: #ffffff;
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.25);
}
.body--dark {
.q-dialog__inner>.invite-friend-dialog {
background: #1e293b;
.dialog-content {
background: #1e293b;
}
}
}

View File

@@ -1,6 +1,7 @@
import { defineComponent, ref, computed, watch, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import { CRISBalanceBar } from '@/components/CRISBalanceBar';
import { InvitaAmico } from '@/components/InvitaAmico';
import { tools } from '@tools';
import { useGlobalStore, useUserStore } from 'app/src/store';
@@ -8,7 +9,7 @@ const isTest = true; // Cambia a false in produzione
export default defineComponent({
name: 'Riso_Home_ParteFinale',
components: { CRISBalanceBar },
components: { CRISBalanceBar, InvitaAmico },
setup() {
const $router = useRouter();
@@ -16,6 +17,7 @@ export default defineComponent({
const showAnnunciDialog = ref(false);
const showBannScambio = ref(true);
const walletSectionOpen = ref(false);
const showInviteFriend = ref(false);
const selectedCircuit = ref<'provinciale' | 'italia'>('provinciale');
const handshakesView = ref<'mine' | 'all'>('mine');
@@ -138,11 +140,12 @@ export default defineComponent({
const inviteFriend = () => {
// TODO: aprire dialog/pagina invito amico
showInviteFriend.value = true
};
const showMembers = () => {
// TODO: navigare alla lista iscritti
// $router.push('/members')
$router.push('/friends')
};
// Wallet
@@ -210,6 +213,10 @@ export default defineComponent({
// TODO: navigare a guida
$router.push('/guida')
};
const openPresentazione = () => {
// TODO: navigare a guida
$router.push('/presentazione')
};
const openInfo = () => {
// TODO: navigare a info
@@ -521,6 +528,7 @@ export default defineComponent({
// $router.push('/circuits')
};
loadTestData();
onMounted(() => {
@@ -609,6 +617,8 @@ export default defineComponent({
allTransactions,
userStore,
walletSectionOpen,
showInviteFriend,
openPresentazione,
};
},
});

View File

@@ -1,6 +1,5 @@
<template>
<q-page class="riso-modern-home riso-modern-home--tail">
<!-- Organizzazioni -->
<section
v-if="hasOrganizations"
@@ -125,6 +124,43 @@
</div>
</section>
<q-dialog
v-model="showInviteFriend"
:maximized="$q.screen.lt.sm"
transition-show="slide-up"
transition-hide="slide-down"
:persistent="false"
>
<q-card class="invite-friend-dialog">
<!-- Header con pulsante chiusura -->
<q-card-section class="dialog-header invite">
<div class="dialog-title">
<q-icon
name="person_add"
size="24px"
/>
<span>Invita Amici</span>
</div>
<q-btn
flat
round
dense
icon="close"
color="white"
@click="showInviteFriend = false"
/>
</q-card-section>
<!-- Contenuto scrollabile -->
<q-card-section class="dialog-content">
<InvitaAmico
@invito-inviato="showInviteFriend = false"
persistent
/>
</q-card-section>
</q-card>
</q-dialog>
<!-- Canali Telegram -->
<!--<section
v-if="hasTelegramLinks"
@@ -186,10 +222,10 @@
unelevated
rounded
class="footer-btn-modern"
icon="help_outline"
label="FAQ"
color="primary"
@click="openFAQ"
icon="present_to_all"
label="Presentazione"
color="accent"
@click="openPresentazione"
/>
<q-btn
unelevated
@@ -200,6 +236,15 @@
color="secondary"
@click="openGuide"
/>
<q-btn
unelevated
rounded
class="footer-btn-modern"
icon="help_outline"
label="Guida ai RIS"
color="primary"
@click="openFAQ"
/>
<q-btn
unelevated
rounded