- sistemazioni Email : registrazione, invio invito, email di benvenuto

- fix circuito
- profilo
This commit is contained in:
Surya Paolo
2025-11-21 20:47:35 +01:00
parent 3c5287a13c
commit 8ab7594f16
88 changed files with 1494 additions and 320 deletions

4
.env
View File

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

482
_LIMBO/prova.json Normal file
View File

@@ -0,0 +1,482 @@
{
"_id": "67c081c848070128c51a85f9",
"idCity": [
6846
],
"visibility": [
0
],
"photos": [],
"date_created": "2025-02-27T15:16:24.794Z",
"admins": [
{
"username": "EmanuelaBattiston",
"_id": "68e677e16e7cd5feeb0bb540",
"profile": {
"img": "file_1558.jpg"
}
},
{
"username": "Surya1977",
"_id": "68e677e16e7cd5feeb0bb541"
}
],
"date_updated": "2025-10-08T14:40:33.593Z",
"idCatGrp": [
34,
37,
18,
4,
8,
41
],
"note": "",
"groupname": "GruppoYurta",
"website": "",
"link_telegram": "",
"title": "Gruppo Yurta Bagnarola Pn",
"descr": "Gruppo Yurta ",
"mycircuits": [
{
"_id": "64ede1fb25cbe40cd4a5f156",
"idCity": [
5429
],
"visibility": [],
"compara_valuta": 1,
"compara_euro": 1,
"valuta_per_euro": 1,
"deleted": false,
"numMembers": 48,
"status": 3,
"idapp": "13",
"name": "Circuito RIS Pordenone",
"path": "rispordenone",
"strProv": "PN",
"photos": [],
"color": "#ff5500",
"deperimento": false,
"transactionsEnabled": true,
"symbol": "RIS",
"fido_scoperto_default": 100,
"qta_max_default": 200,
"fido_scoperto_default_grp": 200,
"qta_max_default_grp": 400,
"totTransato": 1239.67,
"totCircolante": 298.8,
"date_created": "2023-08-29T12:18:03.441Z",
"admins": [
{
"_id": "652daab56db4df3e408322f7",
"username": "vivy_BORGO_cohousing",
"date": "2023-10-16T21:27:17.466Z"
},
{
"_id": "6771a4d6e9c03f06f5a6c8d1",
"username": "Rita_Lila",
"date": "2024-12-29T19:36:54.054Z"
}
],
"req_users": [
{
"username": "elpapais",
"date": "2024-07-26T13:48:57.280Z"
},
{
"username": "Funnyface",
"date": "2025-07-09T03:54:40.132Z"
}
],
"refused_users": [],
"req_groups": [
{
"groupname": "GruppoYurta",
"date": "2025-03-02T17:40:09.375Z"
}
],
"refused_groups": [],
"__v": 0,
"date_updated": "2024-12-12T17:10:07.913Z",
"createdBy": "surya1977",
"link_group": "https://t.me/+xXhBrUdnAL5mMjQ0",
"regulation": "",
"account": {
"_id": "67c497f9da76b7d9485f947d",
"importo_iniziale": 0,
"saldo": -4,
"totTransato": 4,
"saldo_pend": -4,
"totTransato_pend": 4,
"deleted": false,
"idapp": "13",
"username": "",
"groupname": "GruppoYurta",
"contocom": "",
"circuitId": "64ede1fb25cbe40cd4a5f156",
"deperibile": false,
"fidoConcesso": 200,
"qta_maxConcessa": 400,
"numtransactions": 1,
"date_created": "2025-03-02T17:40:09.370Z",
"__v": 0,
"date_updated": "2025-04-16T21:37:20.921Z"
}
},
{
"_id": "6530e646e6173ad77d585a59",
"idCity": [
4647
],
"visibility": [],
"compara_valuta": 1,
"compara_euro": 1,
"valuta_per_euro": 1,
"deleted": false,
"numMembers": 642,
"status": 3,
"name": "Circuito RIS Italia",
"subname": "",
"photos": [
{
"imagefile": "italia.jpg",
"_id": "65f4a4fced899d0f453a446e"
}
],
"admins": [
{
"username": "surya1977",
"_id": "6530e6466db4df3e4084e559"
},
{
"username": "ElenaEspx",
"date": "2023-12-02T13:58:54.136Z",
"_id": "656b381e896ebebd4352fee5"
},
{
"username": "LorenzoVT",
"date": "2023-12-02T16:23:01.100Z",
"_id": "656b59e5896ebebd43537648"
},
{
"username": "sergiomazzanti",
"date": "2023-12-03T19:26:14.691Z",
"_id": "656cd656e5afbcdb03401577"
},
{
"username": "GaetanoSant",
"date": "2024-04-01T15:08:31.262Z",
"_id": "660acdef3d8585261113e378"
}
],
"color": "#ff5500",
"deperimento": false,
"transactionsEnabled": true,
"symbol": "RIS",
"fido_scoperto_default": 200,
"qta_max_default": 400,
"fido_scoperto_default_grp": 400,
"qta_max_default_grp": 800,
"totTransato": 3235.98,
"totCircolante": 1788.66,
"idapp": "13",
"path": "ris_italia",
"longdescr": "Questo è il Circuito RIS Italia Nazionale",
"strProv": "ITA",
"createdBy": "surya1977",
"date_updated": "2025-11-19T16:49:21.786Z",
"req_users": [
{
"username": "MaxCerba",
"date": "2024-01-12T19:30:09.852Z"
},
{
"username": "moretta369",
"date": "2024-02-09T11:18:39.053Z"
},
{
"username": "Pennyboh",
"date": "2024-05-05T13:26:41.414Z"
},
{
"username": "matslats",
"date": "2024-05-11T07:35:03.008Z"
},
{
"username": "Versolaluce",
"date": "2024-05-13T14:59:17.053Z"
},
{
"username": "Nonnapapera",
"date": "2024-05-25T16:02:41.456Z"
},
{
"username": "bluvero",
"date": "2024-06-01T19:33:42.158Z"
},
{
"username": "HERMESRISO",
"date": "2024-06-01T19:48:33.955Z"
},
{
"username": "FrancescaM68",
"date": "2024-06-08T15:59:07.476Z"
},
{
"username": "lucamop",
"date": "2024-06-09T19:06:30.339Z"
},
{
"username": "Cinestesico",
"date": "2024-06-14T13:51:24.025Z"
},
{
"username": "BeataLei",
"date": "2024-06-25T08:10:37.853Z"
},
{
"username": "Fabiozero",
"date": "2024-06-30T18:46:27.545Z"
},
{
"username": "Giory73",
"date": "2024-07-03T06:37:53.633Z"
},
{
"username": "nadia_blu",
"date": "2024-07-20T10:49:53.924Z"
},
{
"username": "evi4evi",
"date": "2024-07-26T14:23:55.533Z"
},
{
"username": "edellatorre",
"date": "2024-07-27T18:26:24.688Z"
},
{
"username": "Carlo",
"date": "2024-07-27T19:45:29.135Z"
},
{
"username": "Moscadri",
"date": "2024-08-01T16:00:26.567Z"
},
{
"username": "LaMis69",
"date": "2024-08-03T18:59:12.520Z"
},
{
"username": "Lamary",
"date": "2024-08-05T04:42:44.688Z"
},
{
"username": "Germana69",
"date": "2024-08-20T20:05:04.213Z"
},
{
"username": "A_tempesta",
"date": "2024-09-22T11:56:09.201Z"
},
{
"username": "mammalella960",
"date": "2024-10-05T10:37:22.645Z"
},
{
"username": "stefanci87",
"date": "2024-10-12T12:18:00.174Z"
},
{
"username": "clarajam",
"date": "2024-10-17T09:25:01.462Z"
},
{
"username": "iceborg500",
"date": "2024-11-20T12:14:51.302Z"
},
{
"username": "francomario",
"date": "2024-12-09T21:57:33.730Z"
},
{
"username": "cristy",
"date": "2024-12-17T11:40:35.792Z"
},
{
"username": "Carla57",
"date": "2025-01-22T17:50:35.640Z"
},
{
"username": "Dasete68",
"date": "2025-02-01T20:31:10.078Z"
},
{
"username": "Mariarosa2025",
"date": "2025-02-02T17:41:51.850Z"
},
{
"username": "Lisa_Logozzo_albergo_del_pastore",
"date": "2025-02-23T18:37:27.362Z"
},
{
"username": "ClaudioPoliPaneArtigianale",
"date": "2025-03-11T11:15:59.012Z"
},
{
"username": "Dantib93",
"date": "2025-03-13T19:49:58.109Z"
},
{
"username": "sbubovic",
"date": "2025-03-16T21:52:00.958Z"
},
{
"username": "sdhc5Giancarlo",
"date": "2025-03-18T20:38:16.668Z"
},
{
"username": "Nicmestre",
"date": "2025-05-08T15:50:19.266Z"
},
{
"username": "ginoarrigo",
"date": "2025-07-30T14:03:30.143Z"
},
{
"username": "FaniaFida",
"date": "2025-08-12T06:38:18.063Z"
},
{
"username": "SismaLux",
"date": "2025-08-16T14:49:00.704Z"
},
{
"username": "valeindaco27",
"date": "2025-09-10T10:19:55.354Z"
},
{
"username": "WellnessProfessionalTreatments1",
"date": "2025-09-17T19:24:29.998Z"
},
{
"username": "manuelaFio",
"date": "2025-10-01T09:20:05.388Z"
},
{
"username": "Merylilith",
"date": "2025-10-02T09:48:26.045Z"
},
{
"username": "Fabiobrent",
"date": "2025-10-05T12:21:03.635Z"
},
{
"username": "attenomis67",
"date": "2025-10-08T22:31:40.981Z"
},
{
"username": "fioretav",
"date": "2025-10-18T03:13:23.773Z"
},
{
"username": "Toninonature",
"date": "2025-10-19T21:18:37.796Z"
},
{
"username": "surya4",
"date": "2025-11-11T16:37:40.467Z"
},
{
"username": "surya8",
"date": "2025-11-18T22:20:20.964Z"
}
],
"refused_users": [],
"req_groups": [
{
"groupname": "PiuCheBuono(GaseBottega)",
"date": "2024-01-03T10:32:03.312Z"
},
{
"groupname": "GruppoYurta",
"date": "2025-03-02T17:41:12.653Z"
},
{
"groupname": "LaValledelMirto",
"date": "2025-05-17T06:42:18.212Z"
}
],
"refused_groups": [],
"date_created": "2023-10-19T08:18:14.701Z",
"__v": 0,
"regulation": "",
"showAlways": true,
"isCircItalia": true,
"circuitiExtraProv": true,
"account": {
"_id": "67c49838da76b7d9485f947f",
"importo_iniziale": 0,
"saldo": 17,
"totTransato": 17,
"saldo_pend": 17,
"totTransato_pend": 17,
"deleted": false,
"idapp": "13",
"username": "",
"groupname": "GruppoYurta",
"contocom": "",
"circuitId": "6530e646e6173ad77d585a59",
"deperibile": false,
"fidoConcesso": 400,
"qta_maxConcessa": 800,
"numtransactions": 4,
"date_created": "2025-03-02T17:41:12.650Z",
"__v": 0,
"date_updated": "2025-04-16T20:33:06.262Z"
}
}
],
"recCatGrp": [
{
"_id": 4,
"descr": "Prodotti Artigianali e Artistici",
"__v": 0,
"color": "#9C27B0",
"icon": "fa fa-paint-brush"
},
{
"_id": 8,
"descr": "Servizi Formativi ed Educativi",
"__v": 0,
"color": "#FFC107",
"icon": "fa fa-book"
},
{
"_id": 18,
"descr": "Salute e Benessere",
"__v": 0,
"color": "#E91E63",
"icon": "fa fa-heart"
},
{
"_id": 34,
"descr": "Attività Ricreative e di Intrattenim.",
"__v": 0,
"color": "#FF5722",
"icon": "fa fa-music"
},
{
"_id": 37,
"descr": "Cura della persona",
"__v": 0,
"color": "#FFEB3B",
"icon": "fa fa-user"
},
{
"_id": 41,
"descr": "Servizi e prodotti per la casa",
"__v": 0,
"color": "#FF9800",
"icon": "fa fa-home"
}
]
}

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.79">
<meta name="version" content="1.2.84">
<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.79",
"version": "1.2.84",
"productName": "Riso 💚 - Rete Italiana Scambi Orizzontali",
"description": "Progetto RISO (Rete Italiana Scambi Orizzontali) 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.79' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.84' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

After

Width:  |  Height:  |  Size: 275 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
riso-logo-full.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -1,6 +1,6 @@
{
"name": "cnm",
"version": "1.2.79",
"version": "1.2.84",
"description": "Comunita Nuovo Mondo",
"productName": "ComunitaNuovoMondo",
"author": "Surya",
@@ -9,7 +9,7 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8083 APP_VERSION='1.2.79' quasar dev",
"dev": "PORT=8083 APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -4,7 +4,7 @@ const msg_website = {
home: 'Principale',
SignUp: 'Registrazione',
SignUp2: 'Registrazione2',
SignIn: 'Login',
SignIn: 'Login',Accedi
vreg: 'Verifica Reg',
Test: 'Test',
TestLocal: 'TestLocal',
@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -60,7 +60,7 @@ const msg_website_it = {
SignUp7: 'Registra',
SignUp11: 'Registra',
SignUpBot: 'Registrati con Telegram',
SignIn: 'Login',
SignIn: 'Accedi',
status: 'Statistiche',
nextzoom: 'Conferenze',
requestresetpwd: 'Richiesta Reset Password',
@@ -136,12 +136,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -1,6 +1,6 @@
{
"name": "freeplanet",
"version": "1.2.79",
"version": "1.2.84",
"description": "freeplanet",
"productName": "freeplanet",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8087 APP_VERSION='1.2.79' quasar dev",
"dev": "PORT=8087 APP_VERSION='1.2.84' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.84' 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.79",
"version": "1.2.84",
"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.79' quasar dev",
"dev": "PORT=8089 APP_VERSION='1.2.84' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.79' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -117,12 +117,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -1,6 +1,6 @@
{
"name": "nuovomondo",
"version": "1.2.79",
"version": "1.2.84",
"description": "Nuovo Mondo",
"productName": "Nuovo Mondo",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "APP_VERSION='1.2.79' PORT=8083 quasar dev",
"dev": "APP_VERSION='1.2.84' PORT=8083 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -139,12 +139,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -1,6 +1,6 @@
{
"name": "nutriben",
"version": "1.2.79",
"version": "1.2.84",
"description": "Nutriben",
"productName": "Nutriben",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8093 APP_VERSION='1.2.79' quasar dev",
"dev": "PORT=8093 APP_VERSION='1.2.84' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.79' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -116,12 +116,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -1,6 +1,6 @@
{
"name": "piuchebuono",
"version": "1.2.79",
"version": "1.2.84",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8085 APP_VERSION='1.2.79' quasar dev",
"dev": "PORT=8085 APP_VERSION='1.2.84' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -139,12 +139,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.2.79",
"version": "1.2.84",
"productName": "Riso 💚 - Rete Italiana Scambi Orizzontali",
"description": "Progetto RISO (Rete Italiana Scambi Orizzontali) 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.79' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.84' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.79' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.84' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.84' 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.79' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.79' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.84' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.84' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,7 +1,7 @@
{
"name": "Riso",
"short_name": "Riso",
"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.",
"description": "Siamo la Rete Italiana Scambi orizzontali, 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.",
"display": "standalone",
"orientation": "portrait",
"background_color": "#fff",

View File

@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -2,8 +2,8 @@ const msg_website_it = {
ws: {
sitename: 'RISO',
siteshortname: 'RISO',
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',
description: 'Siamo la Rete Italiana Scambi orizzontali, 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 scambi orizzontali, riso app, riso piattaforma, scambio e baratto, momenta RIS',
},
hours: {
descr: 'Descrizione',
@@ -133,12 +133,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

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

View File

@@ -1,7 +1,7 @@
{
"name": "Riso",
"short_name": "Riso",
"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.",
"description": "Siamo la Rete Italiana Scambi orizzontali, 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.",
"display": "standalone",
"orientation": "portrait",
"background_color": "#fff",

View File

@@ -58,9 +58,9 @@ export function UseAxios(router: any) { // VueRouter
}
}
if (response.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN && handle(response.status, exclude)) {
if (response.status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN && handle(response.status, exclude)) {
window.setTimeout(() => router.replace('/forbidden'), 200)
// } else if (response.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED) {
// } else if (response.status === serv_constants.RIS_CODE__HTTP_TOKEN_EXPIRED) {
}
}

View File

@@ -56,7 +56,7 @@ export function UseAxios(router: any) { // VueRouter
}
}
if (response.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN && handle(response.status, exclude)) {
if (response.status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN && handle(response.status, exclude)) {
window.setTimeout(() => router.replace('/forbidden'), 200)
}
}

View File

@@ -98,6 +98,14 @@ export const shared_consts = {
],
CallFunz: {
REGISTRATION: 6,
VERIFICA_TELEGRAM: 7,
RICHIESTA_GRUPPO: 10,
RICHIESTA_AMICIZIA: 15,
RICHIESTA_HANDSHAKE: 16,
RICHIESTA_CIRCUIT: 20,
RICHIESTA_FIDO: 25,
ENTRA_RIS_ITALIA: 30,
SOSTITUISCI: 345,
AGGIUNGI_NUOVO_IMBARCO: 380,
CANCELLA_IMBARCO: 385,
@@ -105,13 +113,6 @@ export const shared_consts = {
GET_VALBYTABLE: 400,
SET_VALBYTABLE: 410,
ZOOM_GIA_PARTECIPATO: 510,
REGISTRATION: 6,
RICHIESTA_GRUPPO: 10,
RICHIESTA_AMICIZIA: 15,
RICHIESTA_HANDSHAKE: 16,
RICHIESTA_CIRCUIT: 20,
RICHIESTA_FIDO: 25,
ENTRA_RIS_ITALIA: 30,
},
ELEMTYPE: {
@@ -253,6 +254,7 @@ export const shared_consts = {
UNBLOCK_USER: 156,
REPORT_USER: 158,
FIND_PEOPLE: 166,
DELETE_USER: 170,
},
GROUPSCMD: {

View File

@@ -13,6 +13,11 @@ export default defineComponent({
required: false,
default: false,
},
login: {
type: Boolean,
required: false,
default: false,
},
},
setup(props) {
const globalStore = useGlobalStore();

View File

@@ -1,13 +1,13 @@
<template>
<!-- Debug Info -->
<div
v-if="tools.isDebugOn()"
v-if="tools.isDebugOn() && !login"
class="debug-info"
>
<span class="debug-label">Debug:</span>
isAppRunning: {{ isAppRunning }} deferredPrompt: {{ !!deferredPrompt }}
homescreen: {{ homescreen }} isInRestrictedWebView: {{ isInRestrictedWebView }}
isInTelegramWebView: {{ tools.isInTelegramWebView() }}
isInAppBrowser: {{ tools.isInAppBrowser() }}
</div>
<!-- Main Content -->
@@ -68,9 +68,9 @@
<h4>Istruzioni per l'installazione</h4>
</div>
<!-- Telegram -->
<!-- Mobile (Telegram e altri) -->
<div
v-if="tools.isInTelegramWebView()"
v-if="$q.platform.is.mobile"
class="instruction-content"
>
<div class="step-list">
@@ -82,18 +82,24 @@
</div>
<div class="step-item">
<span class="step-number">2</span>
<span class="step-text">Scegli <strong>"Apri con..."</strong></span>
<span class="step-text">
Se in alto vedi <strong>"Apri con..."</strong>, cliccalo e scegli
Chrome, Brave o il tuo browser preferito.<br />
Altrimenti scegli <strong>"Installa app"</strong> o
<strong>"Aggiungi alla schermata Home"</strong></span
>
</div>
<div class="step-item">
<span class="step-number">3</span>
<span class="step-text"
>Seleziona il tuo browser (Chrome, Firefox, Safari...)</span
>Scegli il tuo browser preferito (Chrome, Safari, Brave...)</span
>
</div>
</div>
</div>
<!-- Altri WebView -->
<!-- Desktop/Altri -->
<div
v-else
class="instruction-content"
@@ -118,9 +124,70 @@
</transition>
</div>
<!-- App già installata -->
<div
v-else-if="isAppRunning && isPageApp"
class="install-card app-installed"
>
<div class="card-center">
<div class="icon-wrapper success">
<q-icon
name="fas fa-check-circle"
size="64px"
/>
</div>
<h3 class="card-title">App già installata! 🎉</h3>
<p class="card-description">
Ottimo! Stai già usando RISO come app installata. Puoi accedere sempre dalla
tua schermata home.
</p>
<div class="benefits-list">
<div class="benefit-item">
<q-icon
name="fas fa-bolt"
color="primary"
size="24px"
/>
<span>Accesso rapido dalla home</span>
</div>
<div class="benefit-item">
<q-icon
name="fas fa-bell"
color="primary"
size="24px"
/>
<span>Notifiche in tempo reale</span>
</div>
<div class="benefit-item">
<q-icon
name="fas fa-mobile-alt"
color="primary"
size="24px"
/>
<span>Esperienza nativa</span>
</div>
</div>
<q-btn
unelevated
rounded
size="lg"
color="primary"
class="install-btn"
to="/"
>
<q-icon
name="fas fa-home"
class="q-mr-sm"
/>
Vai alla Home
</q-btn>
</div>
</div>
<!-- Browser Esterno - NON in modalità app -->
<div
v-else-if="!isAppRunning && !hideInstallPrompt"
v-else-if="!isAppRunning && (!hideInstallPrompt || isPageApp)"
class="install-card browser-install"
>
<!-- Installazione con Prompt (Android Chrome, Desktop) -->
@@ -264,7 +331,6 @@
</q-btn>
</div>
</div>
<!-- Android -->
<div
v-else-if="$q.platform.is.android"
@@ -307,9 +373,12 @@
</div>
<div class="step-item">
<span class="step-number">2</span>
<span class="step-text"
>Scegli <strong>"Installa app"</strong> o
<strong>"Aggiungi alla home"</strong></span
<span class="step-text">
Se in alto vedi <strong>"Apri con..."</strong>, cliccalo e scegli
Chrome, Brave o il tuo browser preferito.<br />
Altrimenti scegli <strong>"Installa app"</strong> o
<strong>"Aggiungi alla schermata home"</strong></span
>
</div>
<div class="step-item">
@@ -357,7 +426,6 @@
</q-btn>
</div>
</div>
<!-- Browser Desktop (Chrome, Brave, Edge, Firefox, Safari) -->
<div
v-else-if="isDesktopBrowser && browserInfo.supported"
@@ -456,67 +524,6 @@
</div>
</div>
</div>
<!-- ✅ App già installata -->
<div
v-else-if="isAppRunning && isPageApp"
class="install-card app-installed"
>
<div class="card-center">
<div class="icon-wrapper success">
<q-icon
name="fas fa-check-circle"
size="64px"
/>
</div>
<h3 class="card-title">App già installata! 🎉</h3>
<p class="card-description">
Ottimo! Stai già usando RISO come app installata. Puoi accedere sempre dalla
tua schermata home.
</p>
<div class="benefits-list">
<div class="benefit-item">
<q-icon
name="fas fa-bolt"
color="primary"
size="24px"
/>
<span>Accesso rapido dalla home</span>
</div>
<div class="benefit-item">
<q-icon
name="fas fa-bell"
color="primary"
size="24px"
/>
<span>Notifiche in tempo reale</span>
</div>
<div class="benefit-item">
<q-icon
name="fas fa-mobile-alt"
color="primary"
size="24px"
/>
<span>Esperienza nativa</span>
</div>
</div>
<q-btn
unelevated
rounded
size="lg"
color="primary"
class="install-btn"
to="/"
>
<q-icon
name="fas fa-home"
class="q-mr-sm"
/>
Vai alla Home
</q-btn>
</div>
</div>
</transition>
</div>
</template>

View File

@@ -70,9 +70,13 @@ export default defineComponent({
const globalStore = useGlobalStore();
const circuit = ref(<IMyCircuit | ICircuit | null>null);
const account = computed(() =>
circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null
);
const account = computed(() => {
if (groupnameSel.value) {
return userStore.getAccountGroupByCircuitId(circuit.value._id, groupnameSel.value);
} else {
return circuit.value ? userStore.getAccountByCircuitId(circuit.value._id) : null;
}
});
const qtarem = computed(() =>
account.value ? circuitStore.getRemainingCoinsToSend(account.value) : 0
@@ -84,7 +88,8 @@ export default defineComponent({
circuitStore.getFidoConcessoByUsername(
props.myuser,
circuit.value._id,
props.username
groupnameSel.value ? '' : props.username,
groupnameSel.value ? groupnameSel.value.groupname : ''
)
);

View File

@@ -37,13 +37,13 @@
v-if="circuit.link_group"
:class="` `"
>
<q-btn
<!--<q-btn
icon="fab fa-telegram"
size="xs"
color="blue"
rounded
@click.stop.prevent="tools.openUrl(circuit.link_group)"
></q-btn>
></q-btn>-->
</div>
</q-item-section>
@@ -321,6 +321,16 @@
size="sm"
>
</q-btn>
<q-btn
v-else-if="groupnameSel"
icon="fas fa-house-user"
class="q-ml-sm"
:color="Number(account.fidoConcesso) > 0 ? 'primary' : 'grey'"
text-color="white"
round
size="sm"
>
</q-btn>
</q-item-label>
</q-item-section>
<q-item-section

View File

@@ -199,7 +199,9 @@ export default defineComponent({
return (
userStore.IsMyCircuitByName(circuititalia.value.name) ||
userStore.IsAskedCircuitByName(circuititalia.value.name) ||
userStore.my.profile.noCircIta || userStore.my.profile.noCircuit || userStore.my.profile.insert_circuito_ita
userStore.my.profile.noCircIta ||
userStore.my.profile.noCircuit ||
userStore.my.profile.insert_circuito_ita
);
}
return false;
@@ -257,7 +259,8 @@ export default defineComponent({
visible: !isTelegramVerified.value,
disabled: false,
title: 'Verifica Telegram',
description: 'Collega il tuo account Telegram per accedere alle community RISO!',
description:
'Collega il tuo account Telegram per partecipare alle community RISO ed essere contattato!',
completed: isTelegramVerified.value,
avatar: {
color: isTelegramVerified.value ? 'positive' : telegramStatus.value.color,
@@ -266,8 +269,16 @@ export default defineComponent({
},
caption: isTelegramVerified.value ? 'Completato!' : telegramStatus.value.message,
badge: {
color: isTelegramVerified.value ? 'positive' : (isTelegramSkipped ? 'red' : 'orange'),
label: isTelegramVerified.value ? 'Fatto' : (isTelegramSkipped ? 'Saltato' : 'Da fare'),
color: isTelegramVerified.value
? 'positive'
: (isTelegramSkipped.value
? 'red'
: 'orange'),
label: isTelegramVerified.value
? 'Fatto'
: (isTelegramSkipped.value
? 'Saltato'
: 'Da fare'),
},
},
{
@@ -275,7 +286,8 @@ export default defineComponent({
visible: true,
disabled: false,
title: 'Circuito RIS Locale',
description: 'Seleziona la tua provincia di residenza per connetterti con la community locale.',
description:
'Seleziona la tua provincia di residenza per connetterti con la community locale.',
completed: stepCircuit.value.checkOk(),
avatar: {
color: stepCircuit.value.checkOk() ? 'positive' : 'orange',
@@ -287,8 +299,16 @@ export default defineComponent({
? 'Completato: ' + stepCircuit.value.extratitle()
: stepCircuit.value.extratitle() || 'Unisciti al circuito della tua zona',
badge: {
color: stepCircuit.value.checkOkReal() ? 'positive' : isSalta(STEP_CIRCUIT) ? 'red' : 'orange',
label: stepCircuit.value.checkOkReal() ? 'Fatto' : isSalta(STEP_CIRCUIT) ? 'Saltato' : 'Da fare',
color: stepCircuit.value.checkOkReal()
? 'positive'
: (isSalta(STEP_CIRCUIT)
? 'red'
: 'orange'),
label: stepCircuit.value.checkOkReal()
? 'Fatto'
: (isSalta(STEP_CIRCUIT)
? 'Saltato'
: 'Da fare'),
},
},
{
@@ -296,7 +316,8 @@ export default defineComponent({
visible: true,
disabled: !(circuititalia.value && stepCircuit.value.checkOkReal()),
title: 'Circuito Italia',
description: 'Entra nel circuito nazionale per accedere a opportunità in tutta Italia.',
description:
'Entra nel circuito nazionale per accedere a opportunità in tutta Italia.',
completed: stepCircuitItalia.value.checkOk(),
avatar: {
color: stepCircuitItalia.value.checkOk() ? 'positive' : 'grey-6',
@@ -308,8 +329,16 @@ export default defineComponent({
? 'Completato!'
: 'Unisciti al circuito nazionale (opzionale)',
badge: {
color: stepCircuitItalia.value.checkOkReal() ? 'positive' : (isSalta(STEP_CIRCUIT_ITALIA)) ? 'red' : 'grey',
label: stepCircuitItalia.value.checkOkReal() ? 'Fatto' : (isSalta(STEP_CIRCUIT_ITALIA)) ? 'Saltato' : 'opzionale',
color: stepCircuitItalia.value.checkOkReal()
? 'positive'
: isSalta(STEP_CIRCUIT_ITALIA)
? 'red'
: 'grey',
label: stepCircuitItalia.value.checkOkReal()
? 'Fatto'
: isSalta(STEP_CIRCUIT_ITALIA)
? 'Saltato'
: 'opzionale',
},
},
]);
@@ -426,8 +455,8 @@ export default defineComponent({
$q.notify({
type: 'positive',
message:
'Token generato! Clicca su "Apri Telegram" per completare la verifica.',
timeout: 3000,
'Token generato! Clicca su "Apri Telegram" per completare la verifica e clicca su START.',
timeout: 5000,
});
} catch (error) {
console.error('Errore nella generazione del token:', error);
@@ -448,7 +477,26 @@ export default defineComponent({
};
const openTelegramDownload = () => {
window.open('https://telegram.org/apps', '_blank');
const userAgent = navigator.userAgent.toLowerCase();
// iOS - vai su App Store
if (/iphone|ipad|ipod/.test(userAgent)) {
window.open(
'https://apps.apple.com/app/telegram-messenger/id686449807',
'_blank'
);
}
// Android - vai su Google Play
else if (/android/.test(userAgent)) {
window.open(
'https://play.google.com/store/apps/details?id=org.telegram.messenger',
'_blank'
);
}
// Desktop - vai alla pagina download
else {
window.open('https://desktop.telegram.org/', '_blank');
}
};
const skipTelegramVerification = () => {
@@ -457,6 +505,7 @@ export default defineComponent({
message:
'<p><strong>RISO utilizza Telegram per connettere la sua community in tutta Italia!</strong></p>' +
'<p style="margin-top: 12px;">' +
'✅ Contatta direttamente i membri usando il bottone "Messaggia"<br>' +
'✅ Chat provinciali e nazionali RISO attive<br>' +
'✅ Migliaia di utenti con cui interagire<br>' +
'✅ Eventi, iniziative e aggiornamenti in tempo reale<br>' +
@@ -516,6 +565,28 @@ export default defineComponent({
}
});
};
const infoTelegramVerification = () => {
$q.dialog({
title: 'Perché Telegram?',
message:
'<p><strong>RISO utilizza Telegram per connettere la sua community in tutta Italia!</strong></p>' +
'<p style="margin-top: 12px;">' +
'✅ Contatta direttamente i membri usando il bottone "Messaggia"<br>' +
'✅ Chat provinciali e nazionali RISO attive<br>' +
'✅ Migliaia di utenti con cui interagire<br>' +
'✅ Eventi, iniziative e aggiornamenti in tempo reale<br>' +
'✅ Gruppi ampi senza limiti WhatsApp<br>' +
'✅ Gratuito, sicuro e senza pubblicità' +
'</p>' +
'<p style="margin-top: 12px;"><em>Unisciti alla community su Telegram e scopri tutto quello che RISO ha da offrire!</em></p>',
html: true,
ok: {
label: 'Chiudi',
color: 'primary',
},
persistent: true,
});
};
const startPolling = () => {
pollingInterval.value = setInterval(async () => {
@@ -541,7 +612,7 @@ export default defineComponent({
} catch (error) {
console.error('Errore nel controllo verifica:', error);
}
}, 3000);
}, 5000);
};
const stopPolling = () => {
@@ -573,7 +644,9 @@ export default defineComponent({
function isSalta(step: number) {
return (
(step === STEP_CIRCUIT && mycircuit.value && userStore.my.profile.noCircuit) ||
(step === STEP_CIRCUIT_ITALIA && circuititalia.value && userStore.my.profile.noCircIta)
(step === STEP_CIRCUIT_ITALIA &&
circuititalia.value &&
userStore.my.profile.noCircIta)
);
}
@@ -808,6 +881,7 @@ export default defineComponent({
startTelegramVerification,
openTelegramBot,
skipTelegramVerification,
infoTelegramVerification,
openTelegramDownload,
// Methods - Navigation

View File

@@ -45,7 +45,11 @@
v-show="stepConfig.visible"
group="gruppo1"
:model-value="openedStep === stepConfig.key"
@update:model-value="(val) => { if (val) openedStep = stepConfig.key }"
@update:model-value="
(val) => {
if (val) openedStep = stepConfig.key;
}
"
:disable="stepConfig.disabled"
class="step-item"
:class="{ 'step-completed': stepConfig.completed }"
@@ -92,7 +96,10 @@
</template>
<!-- Contenuto specifico per ogni step -->
<q-card v-if="!stepConfig.disabled" class="step-content">
<q-card
v-if="!stepConfig.disabled"
class="step-content"
>
<q-card-section class="q-pa-md">
<p class="step-description">
{{ stepConfig.description }}
@@ -121,26 +128,50 @@
rounded
color="positive"
icon="fab fa-telegram"
label="Apri Telegram"
label="Apri Bot Telegram"
@click="openTelegramBot"
class="action-btn"
class="action-btn q-mb-md"
/>
<q-banner
v-if="verificationToken"
class="bg-blue-1 text-blue-9"
rounded
>
<div class="text-body2">
<strong>Passo 1:</strong> Clicca il bottone sopra<br />
<strong>Passo 2:</strong> Nel bot clicca <strong>AVVIA</strong> o
<strong>START</strong> <br />
<strong>Passo 3:</strong> Ritorna su questa pagina.
</div>
</q-banner>
<div style="display: flex; justify-content: center">
<q-spinner-dots
v-else
v-if="isVerifying && verificationToken"
color="primary"
size="32px"
/>
</div>
<q-btn
flat
v-if="!verificationToken"
rounded
dense
outline
color="grey-7"
label="Perché Telegram?"
icon="help_outline"
@click="skipTelegramVerification"
size="sm"
@click="infoTelegramVerification"
class="skip-btn"
/>
<q-btn
v-if="!verificationToken"
rounded
outline
color="primary"
label="Installa Telegram"
icon="fab fa-telegram"
@click="openTelegramDownload"
class="skip-btn"
/>
</div>
@@ -162,7 +193,9 @@
<div v-if="stepResidence.checkOk()">
<CMySelectCity
v-if="globalStore.isPresenteCardsByProv(contact.profile.resid_province)"
v-if="
globalStore.isPresenteCardsByProv(contact.profile.resid_province)
"
:label="$t('reg.resid_card')"
table="users"
jointable="cards"

View File

@@ -64,7 +64,7 @@ export default defineComponent({
function created() {
onReset()
if (userStore.resStatus === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
if (userStore.resStatus === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN) {
emit('showNotif', 'fetch.error_doppiologin')
}

View File

@@ -1,6 +1,6 @@
<template>
<div>
<div v-if="enablePwa"><CCheckAppRunning /></div>
<div v-if="enablePwa"><CCheckAppRunning :login="true"/></div>
<div class="text-center">
<p>
<logo></logo>

View File

@@ -10,7 +10,7 @@
(site.confpages?.enableRegMultiChoice || !site.confpages?.enabledRegNeedTelegram)
"
>
<CVerifyEmail v-if="isLogged && !isEmailVerified && !telegVerificato" />
<CVerifyEmail v-if="isLogged && !isEmailVerified && !telegVerificato && tools.getUserEmail()" />
</div>
<!-- Waiting for Admission Section -->
@@ -35,24 +35,9 @@
<div class="info-box">
<div class="info-text">
<p>
Sei in attesa di essere ammesso da
Siete in attesa di essere ammessi da
<strong>{{ tools.getAportadorSolidario() }}</strong>
</p>
<p class="small-text">
Riceverai una notifica sulla chat Telegram
<a
:href="tools.getLinkBotTelegram('', '')"
target="_blank"
class="telegram-link"
>
<q-icon
name="fab fa-telegram"
size="16px"
/>
{{ tools.getBotName() }}
</a>
</p>
</div>
</div>

View File

@@ -26,7 +26,7 @@
<div class="info-text">
<p class="instruction-title">Controlla la tua casella email </p>
<p class="instruction-text">
Ti abbiamo inviato un'email a <strong>{{ tools.getUserEmail() }}</strong>
Ti abbiamo inviato un'email a '<strong>{{ tools.getUserEmail() }}</strong>'
</p>
<p class="instruction-text">
Cerca l'email "<strong>Conferma Registrazione</strong>" e clicca sul bottone di verifica

View File

@@ -42,7 +42,7 @@
</h1>
<h2 class="hero-subtitle animate-fade-in-delay">
Rete Italiana di Scambio Orizzontale
Rete Italiana Scambi orizzontali
</h2>
<p class="hero-description animate-fade-in-delay-2">
@@ -855,7 +855,7 @@
<q-separator class="footer-separator" />
<div class="footer-bottom">
<p>{{ currentYear }} RISO - Rete Italiana di Scambio Orizzontale</p>
<p>{{ currentYear }} RISO - Rete Italiana Scambi orizzontali</p>
<p class="footer-values">
Comunità · Fiducia · Scambi Solidali · Sostenibilità
</p>

View File

@@ -857,6 +857,7 @@ $text-light: #666; // Grigio medio
.cta-buttons {
margin-bottom: 4rem;
margin-top: 8px;
@media (max-width: 768px) {
margin-bottom: 1rem;

View File

@@ -112,7 +112,7 @@ export default defineComponent({
},
{
title: 'Usa i RIS',
text: 'Scambia in RIS, anche parzialmente: puoi combinare RIS con Euro, baratto o dono nella stessa transazione. Parti da 0 RIS: quando ricevi vai in positivo, quando offri vai in negativo. Più usi i RIS, meno dipendi dall\'economia tradizionale.'
text: 'Scambia in RIS, anche parzialmente: puoi combinare RIS con Euro, baratto o dono nella stessa transazione. Parti da 0 RIS: quando ricevi vai in positivo, quando invii vai in negativo. Più usi i RIS, meno dipendi dall\'economia tradizionale.'
},
]);

View File

@@ -42,7 +42,7 @@
</h1>
<h2 class="hero-subtitle animate-fade-in-delay">
Rete Italiana di Scambio Orizzontale
Rete Italiana Scambi orizzontali
</h2>
<p class="hero-description animate-fade-in-delay-2">
@@ -309,8 +309,8 @@
<q-card-section>
<p class="ris-description">
Il <strong>RIS</strong> è l'unità di misura del valore dei beni e
servizi per lo scambio tra i membri di una comunità territoriale. È una
moneta complementare basata sulla <strong>fiducia reciproca</strong> tra
servizi per lo scambio tra i membri di una comunità territoriale. È uno strumento di scambio
basato sulla <strong>fiducia reciproca</strong> tra
i membri della comunità.<br />
</p>
<q-separator class="q-my-md" />
@@ -321,7 +321,7 @@
color="positive"
/>
<span
>Parti da 0 RIS: ricevere = credito (+), offrire = debito (-)</span
>Parti da 0 RIS: ricevere = credito (+), inviare = debito (-)</span
>
</div>
<div class="ris-feature-item">
@@ -660,6 +660,8 @@
/>
</div>
<CCheckAppRunning />
<!-- Info App -->
<div class="app-features">
<div class="feature-badge">
@@ -696,7 +698,6 @@
</div>
</div>
<CCheckAppRunning />
</div>
</div>
</section>
@@ -806,7 +807,7 @@
<q-separator class="footer-separator" />
<div class="footer-bottom">
<p>(dal 2021) RISO - Rete Italiana di Scambio Orizzontale</p>
<p>(dal 2021) RISO - Rete Italiana Scambi orizzontali</p>
<p class="footer-values">
Comunità · Fiducia · Scambi Solidali · Sostenibilità
</p>

View File

@@ -35,7 +35,7 @@ const msg_website = {
},
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -2,8 +2,8 @@ const msg_website_it = {
ws: {
sitename: 'RISO',
siteshortname: 'RISO',
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',
description: 'Siamo la Rete Italiana Scambi orizzontali, 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 scambi orizzontali, riso app, riso piattaforma, scambio e baratto, momenta RIS',
},
hours: {
descr: 'Descrizione',
@@ -133,12 +133,12 @@ const msg_website_it = {
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',
sottoTitoloApp: 'Rete Italiana Scambi orizzontali',
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>. ' +
descrapp_pag1: 'Siamo la <strong>Rete Italiana Scambi orizzontali</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> '

View File

@@ -68,6 +68,16 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false,
},
{
active: true,
order: 500,
path: '/testweb',
materialIcon: 'fas fa-test',
name: 'mypages.testweb',
component: () => import('@src/pages/TestWeb.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 12,

View File

@@ -1284,7 +1284,7 @@ export interface ICatGrp {
idCatGrp?: number
icon?: string
img?: string
color: string
color?: string
theme: string
}

464
src/pages/TestWeb.vue Normal file
View File

@@ -0,0 +1,464 @@
<template>
<q-page class="test-web-page">
<div class="q-pa-md">
<q-card class="debug-card">
<!-- Header -->
<q-card-section class="bg-primary text-white">
<div class="text-h5">
<q-icon name="bug_report" class="q-mr-sm" />
Browser Debug Info
</div>
<div class="text-subtitle2">Informazioni sul browser e ambiente</div>
</q-card-section>
<q-separator />
<!-- User Agent -->
<q-card-section>
<div class="info-section">
<div class="info-title">
<q-icon name="fingerprint" color="primary" size="24px" />
<span>User Agent</span>
</div>
<div class="info-content">
<code class="code-block">{{ browserInfo.userAgent }}</code>
</div>
</div>
</q-card-section>
<q-separator inset />
<!-- User Agent (lowercase) -->
<q-card-section>
<div class="info-section">
<div class="info-title">
<q-icon name="text_fields" color="primary" size="24px" />
<span>User Agent (lowercase)</span>
</div>
<div class="info-content">
<code class="code-block">{{ browserInfo.userAgentLower }}</code>
</div>
</div>
</q-card-section>
<q-separator inset />
<!-- Platform Info -->
<q-card-section>
<div class="info-section">
<div class="info-title">
<q-icon name="devices" color="primary" size="24px" />
<span>Platform Info (Quasar)</span>
</div>
<div class="info-grid">
<div class="info-item">
<span class="label">Platform:</span>
<q-badge :color="$q.platform.is.mobile ? 'orange' : 'blue'">
{{ $q.platform.is.mobile ? 'Mobile' : 'Desktop' }}
</q-badge>
</div>
<div class="info-item">
<span class="label">iOS:</span>
<q-badge :color="$q.platform.is.ios ? 'positive' : 'grey'">
{{ $q.platform.is.ios }}
</q-badge>
</div>
<div class="info-item">
<span class="label">Android:</span>
<q-badge :color="$q.platform.is.android ? 'positive' : 'grey'">
{{ $q.platform.is.android }}
</q-badge>
</div>
<div class="info-item">
<span class="label">Safari:</span>
<q-badge :color="$q.platform.is.safari ? 'positive' : 'grey'">
{{ $q.platform.is.safari }}
</q-badge>
</div>
<div class="info-item">
<span class="label">Chrome:</span>
<q-badge :color="$q.platform.is.chrome ? 'positive' : 'grey'">
{{ $q.platform.is.chrome }}
</q-badge>
</div>
</div>
</div>
</q-card-section>
<q-separator inset />
<!-- Telegram Objects -->
<q-card-section>
<div class="info-section">
<div class="info-title">
<q-icon name="telegram" color="blue-9" size="24px" />
<span>Telegram Objects</span>
</div>
<div class="info-grid">
<div class="info-item">
<span class="label">window.Telegram:</span>
<q-badge :color="browserInfo.telegram.hasTelegram ? 'positive' : 'negative'">
{{ browserInfo.telegram.hasTelegram ? 'Presente' : 'Assente' }}
</q-badge>
</div>
<div class="info-item">
<span class="label">window.TelegramWebviewProxy:</span>
<q-badge :color="browserInfo.telegram.hasProxy ? 'positive' : 'negative'">
{{ browserInfo.telegram.hasProxy ? 'Presente' : 'Assente' }}
</q-badge>
</div>
<div class="info-item">
<span class="label">window.TelegramWebApp:</span>
<q-badge :color="browserInfo.telegram.hasWebApp ? 'positive' : 'negative'">
{{ browserInfo.telegram.hasWebApp ? 'Presente' : 'Assente' }}
</q-badge>
</div>
</div>
</div>
</q-card-section>
<q-separator inset />
<!-- Detection Results -->
<q-card-section>
<div class="info-section">
<div class="info-title">
<q-icon name="search" color="primary" size="24px" />
<span>Detection Results</span>
</div>
<div class="info-grid">
<div class="info-item">
<span class="label">In Telegram WebView:</span>
<q-badge :color="browserInfo.detection.isInTelegramWebView ? 'positive' : 'grey'">
{{ browserInfo.detection.isInTelegramWebView }}
</q-badge>
</div>
<div class="info-item">
<span class="label">In App Browser:</span>
<q-badge :color="browserInfo.detection.isInAppBrowser ? 'warning' : 'grey'">
{{ browserInfo.detection.isInAppBrowser }}
</q-badge>
</div>
<div class="info-item">
<span class="label">Is PWA:</span>
<q-badge :color="browserInfo.detection.isPWA ? 'positive' : 'grey'">
{{ browserInfo.detection.isPWA }}
</q-badge>
</div>
</div>
</div>
</q-card-section>
<q-separator inset />
<!-- Window Size -->
<q-card-section>
<div class="info-section">
<div class="info-title">
<q-icon name="aspect_ratio" color="primary" size="24px" />
<span>Window Size</span>
</div>
<div class="info-grid">
<div class="info-item">
<span class="label">Width:</span>
<span class="value">{{ browserInfo.window.width }}px</span>
</div>
<div class="info-item">
<span class="label">Height:</span>
<span class="value">{{ browserInfo.window.height }}px</span>
</div>
<div class="info-item">
<span class="label">Device Pixel Ratio:</span>
<span class="value">{{ browserInfo.window.devicePixelRatio }}</span>
</div>
</div>
</div>
</q-card-section>
<!-- Actions -->
<q-card-actions align="center" class="q-pa-md">
<q-btn
unelevated
color="primary"
icon="refresh"
label="Aggiorna Info"
@click="refreshInfo"
/>
<q-btn
unelevated
color="secondary"
icon="content_copy"
label="Copia JSON"
@click="copyToClipboard"
/>
</q-card-actions>
</q-card>
<!-- Raw JSON -->
<q-card class="debug-card q-mt-md">
<q-card-section class="bg-grey-9 text-white">
<div class="text-h6">
<q-icon name="code" class="q-mr-sm" />
Raw JSON
</div>
</q-card-section>
<q-card-section>
<pre class="json-block">{{ JSON.stringify(browserInfo, null, 2) }}</pre>
</q-card-section>
</q-card>
<CCheckAppRunning></CCheckAppRunning>
</div>
</q-page>
</template>
<script lang="ts">
import { defineComponent, ref, onMounted } from 'vue';
import { useQuasar } from 'quasar';
import { CCheckAppRunning } from '../components/CCheckAppRunning';
export default defineComponent({
name: 'TestWeb',
setup() {
const $q = useQuasar();
const browserInfo = ref({
userAgent: '',
userAgentLower: '',
telegram: {
hasTelegram: false,
hasProxy: false,
hasWebApp: false,
},
detection: {
isInTelegramWebView: false,
isInAppBrowser: false,
isPWA: false,
},
window: {
width: 0,
height: 0,
devicePixelRatio: 0,
},
});
const isInTelegramWebView = (): boolean => {
const ua = (navigator.userAgent || '').toLowerCase();
if (ua.includes('telegram')) {
return true;
}
const win = window as any;
if (win.Telegram || win.TelegramWebviewProxy || win.TelegramWebApp) {
return true;
}
return false;
};
const isInAppBrowser = (): boolean => {
const ua = (navigator.userAgent || '').toLowerCase();
if (isInTelegramWebView()) {
return true;
}
const inAppPatterns = [
'fbav',
'fban',
'instagram',
'tiktok',
'snapchat',
'twitter',
'line',
'micromessenger',
];
if (inAppPatterns.some((pattern) => ua.includes(pattern))) {
return true;
}
if (ua.includes('wv') && ua.includes('android')) {
return true;
}
if (/iphone|ipad|ipod/.test(ua)) {
const isSafari = /safari/.test(ua) && !/crios|fxios|edgios/.test(ua);
if (!isSafari) {
return true;
}
}
return false;
};
const isPWA = (): boolean => {
return (
window.matchMedia('(display-mode: standalone)').matches ||
(window.navigator as any).standalone === true
);
};
const loadBrowserInfo = () => {
const win = window as any;
browserInfo.value = {
userAgent: navigator.userAgent,
userAgentLower: navigator.userAgent.toLowerCase(),
telegram: {
hasTelegram: !!win.Telegram,
hasProxy: !!win.TelegramWebviewProxy,
hasWebApp: !!win.TelegramWebApp,
},
detection: {
isInTelegramWebView: isInTelegramWebView(),
isInAppBrowser: isInAppBrowser(),
isPWA: isPWA(),
},
window: {
width: window.innerWidth,
height: window.innerHeight,
devicePixelRatio: window.devicePixelRatio,
},
};
console.log('=== BROWSER DEBUG ===');
console.log('User Agent:', browserInfo.value.userAgent);
console.log('User Agent (lower):', browserInfo.value.userAgentLower);
console.log('window.Telegram:', win.Telegram);
console.log('window.TelegramWebviewProxy:', win.TelegramWebviewProxy);
console.log('isInAppBrowser:', isInAppBrowser());
console.log('isInTelegramWebView:', isInTelegramWebView());
console.log('==================');
};
const refreshInfo = () => {
loadBrowserInfo();
$q.notify({
type: 'positive',
message: 'Informazioni aggiornate!',
icon: 'refresh',
timeout: 1500,
});
};
const copyToClipboard = async () => {
try {
await navigator.clipboard.writeText(JSON.stringify(browserInfo.value, null, 2));
$q.notify({
type: 'positive',
message: 'JSON copiato negli appunti!',
icon: 'content_copy',
timeout: 2000,
});
} catch (err) {
$q.notify({
type: 'negative',
message: 'Errore nella copia',
icon: 'error',
timeout: 2000,
});
}
};
onMounted(() => {
loadBrowserInfo();
});
return {
browserInfo,
refreshInfo,
copyToClipboard,
};
},
});
</script>
<style lang="scss" scoped>
.test-web-page {
min-height: 100vh;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.debug-card {
max-width: 800px;
margin: 0 auto;
border-radius: 12px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15);
}
.info-section {
.info-title {
display: flex;
align-items: center;
gap: 8px;
font-size: 18px;
font-weight: 600;
color: #1a1a1a;
margin-bottom: 16px;
}
.info-content {
margin-top: 12px;
}
}
.code-block {
display: block;
padding: 12px;
background: #f5f5f5;
border-radius: 8px;
font-family: 'Courier New', monospace;
font-size: 13px;
word-break: break-all;
white-space: pre-wrap;
color: #333;
border-left: 4px solid #027be3;
}
.info-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 12px;
}
.info-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px;
background: #f8f9fa;
border-radius: 8px;
border: 1px solid #e0e0e0;
.label {
font-weight: 600;
color: #555;
font-size: 14px;
}
.value {
font-weight: 500;
color: #1a1a1a;
font-size: 14px;
}
}
.json-block {
background: #1e1e1e;
color: #d4d4d4;
padding: 16px;
border-radius: 8px;
overflow-x: auto;
font-family: 'Courier New', monospace;
font-size: 13px;
margin: 0;
}
@media (max-width: 600px) {
.info-grid {
grid-template-columns: 1fr;
}
}
</style>

View File

@@ -10,7 +10,7 @@
}}
</span>
<div v-if="tools.isLogged()">
<div v-if="tools.isLogged() && tools.getUserEmail()">
<div v-if="!tools.isUserOk()">
<CUserNonVerif></CUserNonVerif>
</div>

View File

@@ -156,8 +156,6 @@
class="action-btn-wrapper"
>
<q-btn
flat
dense
rounded
color="negative"
icon="report"
@@ -166,6 +164,15 @@
no-caps
size="sm"
/>
<q-btn
rounded
color="negative"
icon="report"
:label="`Elimina ${myuser.username}`"
@click="tools.deleteUser($q, getMyUsername(), myuser.username)"
no-caps
size="sm"
/>
</div>
</div>

View File

@@ -750,7 +750,7 @@ function getRoutesAd(site: ISites) {
materialIcon: 'account_circle',
name: 'pages.SignIn',
component: () => import('@src/views/login/signin_noreg/signin_noreg.vue'),
inmenu: false,
inmenu: true,
infooter: true
},
// --- NOT IN MENU: ---

View File

@@ -209,6 +209,7 @@ const msg_enUs = {
rejected: 'Rifiutato la Fiducia',
domanda_blockuser: 'Bloccare {username}?',
domanda_reportuser: 'Segnalare l\'utente {username}?',
domanda_deleteuser: 'Eliminare l\'utente {username}?',
domanda_blockgroup: 'Bloccare il gruppo {groupname}?',
blockedfriend: 'Utente Bloccato',
domanda: 'Domanda',

View File

@@ -392,9 +392,11 @@ const msg_it = {
domanda_blockuser: 'Bloccare {username}?',
domanda_unblockuser: 'Sbloccare {username}?',
domanda_reportuser: 'Segnalare l\'utente {username}?',
domanda_deleteuser: 'Elimnare l\'utente {username}?',
domanda_verifyuser: 'Verifica l\'utente {username}?',
domanda_blockgroup: 'Bloccare l\'Organizzazione {groupname}?',
reporteduser: 'Utente Segnalato in data {date_report}',
deleteduser: 'Utente cancellato',
blockedfriend: 'Utente Bloccato',
unblockedfriend: 'Utente Sbloccato',
domanda: 'Domanda',
@@ -1274,6 +1276,7 @@ const msg_it = {
},
mypages: {
gestoreordinigas: 'Gestore Ordini GAS',
testweb: 'Test Web',
totaliordini: 'Totali Ordini GAS',
listadeigas: 'Lista dei GAS',
catalogo_new: 'Vuoi andare al Catalogo "{title}" appena creato?',

View File

@@ -148,8 +148,8 @@ export const Api = {
const userStore = useUserStore();
if (
status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED ||
statuscode2 === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED
status === serv_constants.RIS_CODE__HTTP_TOKEN_EXPIRED ||
statuscode2 === serv_constants.RIS_CODE__HTTP_TOKEN_EXPIRED
) {
try {
console.log('Token scaduto. Tentativo di refresh...');
@@ -173,7 +173,7 @@ export const Api = {
let mystatus = err2?.code || err2?.status;
if (
mystatus === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN ||
mystatus === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN ||
mystatus === serv_constants.RIS_CODE__HTTP_FORBIDDEN_PERMESSI ||
mystatus === toolsext.ERR_RETRY_LOGIN
) {
@@ -183,12 +183,12 @@ export const Api = {
}
// Gestione di altri errori critici
throw err2 || { status: serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN };
throw err2 || { status: serv_constants.RIS_CODE__HTTP_INVALID_TOKEN };
}
} else if (
// status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN ||
// status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN ||
status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_PERMESSI
// || statuscode2 === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN
// || statuscode2 === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN
) {
userStore.setAuth('', '');
throw { status: toolsext.ERR_RETRY_LOGIN };
@@ -239,10 +239,11 @@ export const Api = {
}
}, 1000);
if (res.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
if (res.status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN) {
userStore.setServerCode(toolsext.ERR_AUTHENTICATION);
userStore.setAuth('', '');
throw { code: toolsext.ERR_AUTHENTICATION };
// throw { code: toolsext.ERR_AUTHENTICATION };
throw { status: toolsext.ERR_RETRY_LOGIN };
}
// Verifica sul token (funzione custom)
@@ -269,6 +270,13 @@ export const Api = {
}
}, 1000);
if (error.status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN) {
userStore.setServerCode(toolsext.ERR_AUTHENTICATION);
userStore.setAuth('', '');
// throw { code: toolsext.ERR_AUTHENTICATION };
throw { status: toolsext.ERR_RETRY_LOGIN };
}
const ret: any = await this.checkTokenScaduto(
error.status,
evitaloop,
@@ -341,9 +349,12 @@ export const Api = {
options
);
} catch (error) {
// Se lo status non è 403 e sono rimasti tentativi, eseguo il retry
// Se lo status non è 403 (RIS_CODE__HTTP_FORBIDDEN_PERMESSI) e sono rimasti tentativi, eseguo il retry
const riprova =
error && error.status !== 403 && error.status !== toolsext.ERR_RETRY_LOGIN;
error &&
error.status !== serv_constants.RIS_CODE__HTTP_INVALID_TOKEN &&
error.status !== serv_constants.RIS_CODE__HTTP_FORBIDDEN_PERMESSI &&
error.status !== toolsext.ERR_RETRY_LOGIN;
if (retryCount > 0 && riprova) {
console.log(`❌❌❌ Retrying request. Attempts remaining: ${retryCount}`);
await this.delay(retryDelay);

View File

@@ -127,10 +127,9 @@ export const useCircuitStore = defineStore('CircuitStore', {
},
getFidoConcessoByUsername(myuser: IUserFields, circuitId: string, username: string): number|string {
const userStore = useUserStore()
getFidoConcessoByUsername(myuser: IUserFields, circuitId: string, username: string, groupname?: string): number|string {
if (myuser && myuser.profile.useraccounts) {
const account = myuser.profile.useraccounts.find((rec: IAccount) => rec.username === username || (rec.groupname === username && username !== '') && rec.circuitId === circuitId)
const account = myuser.profile.useraccounts.find((rec: IAccount) => (rec.username === username || (rec.groupname === groupname && groupname !== '')) && rec.circuitId === circuitId)
return account ? account.fidoConcesso : 0
} else {
return ''

View File

@@ -400,7 +400,7 @@ export async function aftercalling(ris: any, checkPending: boolean, nametabindex
if (import.meta.env.VITE_DEBUG === '1') {
console.log('ris.status', ris.status)
}
if (ris.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
if (ris.status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN) {
tools.consolelogpao('UNAUTHORIZING... TOKEN EXPIRED... !! ')
} else {
tools.consolelogpao('NETWORK UNREACHABLE ! (Error in fetch)', userStore.getServerCode, ris.status)

View File

@@ -27,9 +27,9 @@ export const serv_constants = {
RIS_CODE_OK: 1,
RIS_CODE_LOGIN_OK: 1,
RIS_ISCRIZIONE_OK: 5,
RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN: 401,
RIS_CODE__HTTP_INVALID_TOKEN: 401,
RIS_CODE__HTTP_FORBIDDEN_PERMESSI: 403,
RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED: 408,
RIS_CODE__HTTP_TOKEN_EXPIRED: 408,
RIS_CODE_TOKEN_RESETPASSWORD_NOT_FOUND: -23,

View File

@@ -2720,7 +2720,7 @@ export const tools = {
getUserEmail() {
const userStore = useUserStore();
return userStore.my?.email;
return userStore.my?.email.trim();
},
getEmailSupport() {
@@ -6375,6 +6375,32 @@ export const tools = {
});
});
},
deleteUser($q: any, username: string, usernameDest: string) {
// Segnala Profilo
const userStore = useUserStore();
//T_TOLTO
$q.dialog({
message: t('db.domanda_deleteuser', { 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.DELETE_USER,
null
)
.then((res: any) => {
if (res) {
tools.showPositiveNotif($q, t('db.deleteduser'));
}
});
});
},
verifyUser($q: any, username: string, usernameDest: string) {
// Segnala Profilo
@@ -11282,31 +11308,73 @@ export const tools = {
.toLowerCase()
: undefined;
},
isInTelegramWebView() {
try {
// Verifica che siamo lato client
if (typeof window === 'undefined') {
return false;
isInTelegramWebView(): boolean {
const ua = (navigator.userAgent || '').toLowerCase();
// Controlla user agent
if (ua.includes('telegram')) {
return true;
}
// Metodo 1: Controlla oggetti globali di Telegram
// Controlla oggetti globali Telegram
const win = window as any;
if (win.Telegram || win.TelegramWebviewProxy || win.TelegramWebApp) {
return true;
}
// Metodo 2: User Agent (case-insensitive)
const ua = navigator.userAgent.toLowerCase();
if (ua.includes('telegram')) {
return false;
},
isInAppBrowser(): boolean {
const ua = (
navigator.userAgent ||
navigator.vendor ||
(window as any).opera ||
''
).toLowerCase();
// Telegram specifico
if (this.isInTelegramWebView()) {
return true;
}
return false;
} catch (e) {
console.error('Errore rilevamento Telegram:', e);
return false;
// Altri in-app browser
const inAppPatterns = [
'fbav',
'fban', // Facebook
'instagram', // Instagram
'tiktok', // TikTok
'snapchat', // Snapchat
'twitter', // Twitter
'line', // Line
'micromessenger', // WeChat
];
if (inAppPatterns.some((pattern) => ua.includes(pattern))) {
return true;
}
// Android WebView
if (ua.includes('wv') && ua.includes('android')) {
return true;
}
// iOS WebView (esclude Safari/Chrome/Firefox nativi)
if (/iphone|ipad|ipod/.test(ua)) {
const isSafari = /safari/.test(ua) && !/crios|fxios|edgios/.test(ua);
if (!isSafari) {
return true;
}
}
return false;
},
isStatusNonAutorizzato() {
const userStore = useUserStore();
return userStore.servercode === serv_constants.RIS_CODE__HTTP_FORBIDDEN_PERMESSI
},
pageExist(path: string) {
const globalStore = useGlobalStore();
const page = globalStore.getPage(path);

View File

@@ -14,6 +14,7 @@ import type {
IColGridTable,
ISignupIscrizioneConacreisOptions,
IMovQuery,
IGroup,
} from '@src/model';
import { IFriends, ISettings } from '@src/model';
import { tools } from '@tools';
@@ -2595,5 +2596,14 @@ export const useUserStore = defineStore('UserStore', {
return ris.data;
});
},
getAccountGroupByCircuitId(circuitId: string, group: IMyGroup) {
for (const circ of group.mycircuits) {
if (circ._id === circuitId) {
return circ.account;
}
}
return null;
},
},
});

View File

@@ -2206,7 +2206,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
userStore.updateLocalStorage(res.data.myuser);
isLogged = !!res.data.myuser.username;
isLogged = !!res.data.myuser.username && res.data.myuser.email;
} else {
// User not exist !!
}
@@ -2253,8 +2253,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (error.status === toolsext.ERR_RETRY_LOGIN) {
} else {
if (
error.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_TOKEN_EXPIRED ||
error.status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN
error.status === serv_constants.RIS_CODE__HTTP_TOKEN_EXPIRED ||
error.status === serv_constants.RIS_CODE__HTTP_INVALID_TOKEN
) {
} else {
this.serverError = true;

View File

@@ -1,14 +1,14 @@
<template>
<div class="q-gutter-sm q-pa-sm q-pb-md">
<div v-if="!circuit && !loading">
<div v-if="mystatus === 401">
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<div v-else-if="tools.isStatusNonAutorizzato()">
<h3>
Non hai i permessi per accedere al Circuito.
<br />Occorre prima registrarsi ed accedere alla App
</h3>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
</div>
<div v-else-if="tools.isLogged() && path">
<h3>Circuito non Esistente</h3>
@@ -49,8 +49,6 @@
class="bg-primary text-white"
dense
>
<!--<q-toolbar :class="tools.displayClasses(myevent)"-->
<!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">-->
<q-toolbar-title>
{{ circuit.name }}
<div v-if="groupnameSel">Gruppo: {{ groupnameSel.groupname }}</div>
@@ -970,31 +968,7 @@
:tips="t('circuit.creditodiPartenza_tips')"
></CCurrencyValue>
</div>
<!--<div v-if="circuit.qta_max_default_grp" class="sezioni">
<CCurrencyValue
:symbol="tools.getSymbolByCircuit(circuit)"
:color="tools.getColorByCircuit(circuit)"
color_border="red"
v-model="circuit.fido_scoperto_default_grp"
icon="fas fa-battery-quarter"
:label="t('circuit.fido_scoperto_default_grp')"
:tips="t('circuit.fido_scoperto_default_tips_grp')"
>
</CCurrencyValue>
</div>
<div class="sezioni">
<CCurrencyValue
:symbol="tools.getSymbolByCircuit(circuit)"
:color="tools.getColorByCircuit(circuit)"
color_border="green"
v-model="circuit.qta_max_default_grp"
icon="fas fa-battery-quarter"
:label="t('circuit.qta_max_default_grp')"
:tips="t('circuit.qta_max_default_tips_grp')"
>
</CCurrencyValue>
</div>
--></div>
<div
v-if="circuit.totTransato"
class="sezioni"

View File

@@ -151,7 +151,7 @@ export default defineComponent({
value: i,
});
const myc = data.mygroup.mycircuits.find(
(circ: IMyCircuit) => circ.circuitname === circuitslist.value[i].name
(circ: ICircuit) => circ.name === circuitslist.value[i].name
);
if (myc) {
circuitslist.value[i].account = myc.account;
@@ -306,7 +306,7 @@ export default defineComponent({
function getRegulation(reg: string) {
const strreg = reg + '';
if (!reg) {
let name = CircuitSel.value;
let name = circuitSel.value;
const mystringa = t('circuit.regolamento', { nomecircuito: name });
return mystringa;
} else {
@@ -379,6 +379,7 @@ export default defineComponent({
sendRIS,
causalDest,
showed,
toolsext,
};
},
});

View File

@@ -2,14 +2,14 @@
<CNotifAtTop />
<div class="q-gutter-sm q-pa-sm q-pb-md">
<div v-if="!mygrp && !loading">
<div v-if="mystatus === 401">
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<div v-else-if="tools.isStatusNonAutorizzato()">
<h3>
Non hai i permessi per accedere al Gruppo.
<br />Occorre prima registrarsi alla App
</h3>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
</div>
<div v-else>
<h3>Gruppo non Esistente</h3>
@@ -577,17 +577,26 @@
<CMyCircuit
:mycircuit="circuit"
:visu="costanti.USER_CIRCUITS"
:prop_groupnameSel="mygrp.groupname"
:prop_groupnameSel="mygrp"
>
</CMyCircuit>
</div>
<div
v-if="circuitslistOpt.length > 1"
class="text-subtitle2 q-mb-xs q-mt-md"
>
Scegli il circuito da visualizzare
</div>
<q-select
v-if="circuitslistOpt.length > 0"
v-if="circuitslistOpt.length > 1"
v-model="circuitIndex"
:options="circuitslistOpt"
emit-value
map-options
outlined
:borderless="false"
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
>
<template v-slot:prepend></template>
@@ -635,12 +644,24 @@
v-for="(circuit, ind) of circuitslist"
:key="ind"
>
<div class="circuit_name">{{ circuit.circuitname }}:</div>
<div
v-show="
circuitIndex >= 0 &&
circuitslist[circuitIndex].name === circuit.name
"
class="circuit_name"
>
{{ circuit.name }}:
</div>
<CInfoAccount
:circuitname="circuit.circuitname"
v-show="
circuitIndex >= 0 &&
circuitslist[circuitIndex].name === circuit.name
"
:circuitname="circuit.name"
:grp="mygrp"
:account="circuit.account"
:admin="tools.iAmAdminCircuit(circuit.circuitname)"
:admin="tools.iAmAdminCircuit(circuit.name)"
/>
</div>
</q-tab-panel>
@@ -810,7 +831,7 @@
:showType="costanti.SHOW_USERINFO"
:showCol="false"
:extrafield="groupname"
:extraparams="tools.extraparams(shared_consts.TABMYGROUPS)"
:extraparams="tools.extraparams(toolsext.TABMYGROUPS)"
:visufind="
tools.iAmAdminGroup(groupname)
? costanti.REQ_REMOVE_USER_TO_GROUP