vers 1.1.6

- risolto problema cors ?!?
- notifiche transazioni pendenti OK
This commit is contained in:
Surya Paolo
2024-10-29 02:33:39 +01:00
parent baa4188746
commit b6f73019fe
82 changed files with 1771 additions and 294 deletions

View File

@@ -1,18 +1,17 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet"
DIRECTORY_SERVER="freeplanet_serverside"
SERVERDIR_WEBSITE=""
SERVERPW_WEBSITE=""
APP_URL="https://localhost"
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
PROVA_PAOLO="PROVA ENV FUNZIONA!"
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://localhost:3000"
LOGO_REG='gruppomacro-logo-full.png'
LOGO_REG='riso-logo-full.png'
TEST_NAME="Paolo"
TEST_SURNAME="Arena"
TEST_EMAIL=""
@@ -25,5 +24,5 @@ DEBUG="1"
TELEGRAM_SUPPORT=""
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
TEST_CELL=""
VUE_APP_ISTEST=1
VUE_APP_INLOCALE=1
VUE_APP_ISTEST="1"
VUE_APP_INLOCALE="1"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,27 +1,27 @@
APP_VERSION="1.1.0"
SERVICE_WORKER_FILE="service-worker_1.1.0.js"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=freeplanet_serverside
SERVERDIR_WEBSITE=riso.app
SERVERPW_WEBSITE=pwdadmin@1AOK
DIRECTORY_SERVER=/var/www/nodejs_riso_server
SERVERDIR_WEBSITE="/var/www/riso.app"
APP_URL="https://riso.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://www.freeplanet.app:3000"
MONGODB_HOST="https://api.riso.app"
LOGO_REG='riso-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""
TEST_EMAIL=""
TEST_USERNAME=""
TEST_PASSWORD=""
TEST_APORTADOR="------"
PUBLICKEY_PUSH="BNM-cEpTbPVc_ujXf3QOC8ggf7b-X44P44esfJUWqNOFq1XhWCoZJpOi71_cbXC5SnfO9HassQ6OouAYgtBA9Pw"
DEBUG="1"
TEST_APORTADOR=""
PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
IN_CONSTRUCTION="0"
DEBUG="0"
TELEGRAM_SUPPORT=""
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
TEST_CELL=""
VUE_APP_ISTEST=0
VUE_APP_ISTEST=0

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,6 +1,6 @@
{
"name": "abitaregliiblei",
"version": "1.1.4",
"version": "1.1.6",
"description": "Abitare Gli Iblei",
"productName": "AbitareGliIblei",
"author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "fioredellavita",
"version": "1.1.4",
"version": "1.1.6",
"description": "Fiore Della Vita",
"productName": "Fiore Della Vita",
"author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "gruppomacro",
"version": "1.1.4",
"version": "1.1.6",
"description": "GruppoMacro",
"productName": "Gruppo Macro",
"author": "Paolo Arena",
@@ -54,9 +54,11 @@
"graphql": "^16.9.0",
"graphql-tag": "^2.12.6",
"gsap": "^3.12.5",
"html2canvas": "^1.4.1",
"html2pdf.js": "^0.10.2",
"jquery": "^3.7.1",
"js-cookie": "^3.0.5",
"jspdf": "^2.5.2",
"leaflet": "^1.9.4",
"leaflet-routing-machine": "^3.2.12",
"leaflet.markercluster": "^1.5.3",
@@ -66,6 +68,7 @@
"npm": "^10.8.3",
"nprogress": "^0.2.0",
"pinia": "^2.2.4",
"qrcode-vue3": "^1.7.1",
"quasar": "^2.17.0",
"quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2",
@@ -87,6 +90,7 @@
"vue-timeago3": "^2.3.2",
"vue2-dragula": "^2.5.5",
"vue3-pdf-app": "^1.0.3",
"vue3-qr-reader": "^1.0.0",
"vuex": "^4.1.0",
"vuex-router-sync": "^6.0.0-rc.1"
},
@@ -162,4 +166,4 @@
"npm": ">= 6.14.8",
"yarn": ">= 1.21.1"
}
}
}

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,6 +1,6 @@
{
"name": "piuchebuono",
"version": "1.1.4",
"version": "1.1.6",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.4"
APP_VERSION="1.1.6"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.1.4",
"version": "1.1.6",
"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.",
"productName": "Riso",
"author": "Paolo Arena",

29
deploy_on_prod_riso.sh Executable file
View File

@@ -0,0 +1,29 @@
#!/bin/bash
source ./.env.prod.riso
msg="*** Sincronizzazione ??? $DIRECTORY_LOCAL e $SERVERDIR_WEBSITE (Y/N) ? "
if [ "$1" = "" ]; then
read -p "$msg" risposta
else
risposta=$1
fi
cp .env.production .env.prod.bak
cp .env.prod.riso .env.production
sleep 1
npm run buildpwa
echo "Sincronizzazione $SERVERDIR_WEBSITE in remoto..."
rsync -e 'ssh -p 8822' -a --exclude 'upload' dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -a dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
cp .env.prod.bak .env.production
sleep 1
echo "Finito $SERVERDIR_WEBSITE"

View File

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

View File

@@ -1,8 +1,8 @@
{
"name": "gruppomacro",
"version": "1.1.4",
"description": "GruppoMacro",
"productName": "Gruppo Macro",
"name": "riso",
"version": "1.1.6",
"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.",
"productName": "Riso",
"author": "Paolo Arena",
"private": true,
"keywords": [],
@@ -54,11 +54,9 @@
"graphql": "^16.9.0",
"graphql-tag": "^2.12.6",
"gsap": "^3.12.5",
"html2canvas": "^1.4.1",
"html2pdf.js": "^0.10.2",
"jquery": "^3.7.1",
"js-cookie": "^3.0.5",
"jspdf": "^2.5.2",
"leaflet": "^1.9.4",
"leaflet-routing-machine": "^3.2.12",
"leaflet.markercluster": "^1.5.3",
@@ -129,6 +127,7 @@
"jest": "^29.7.0",
"json-loader": "^0.5.7",
"node-sass": "^9.0.0",
"nodemon": "^3.1.7",
"npm-check-updates": "^17.1.3",
"optimize-css-assets-webpack-plugin": "^6.0.1",
"parcel": "^2.12.0",

BIN
public/images/ferrara.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 KiB

BIN
public/images/riso_home.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -17,6 +17,8 @@ const webpack = require('webpack')
const helpers = require('./helpers')
const envparser = require('./config/envparser')
const package = require('./package.json');
// const ESLintPlugin = require('eslint-webpack-plugin')
module.exports = configure((ctx) => ({
@@ -87,6 +89,7 @@ module.exports = configure((ctx) => ({
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
build: {
env: envparser(),
versionCode: package.version,
vueRouterMode: 'history',
vueCompiler: true,
gzip: false, // gzip true
@@ -149,9 +152,9 @@ module.exports = configure((ctx) => ({
},
devServer: {
https: false,
port: 8089,
port: 8084,
open: false, // opens browser window automatically
hot: true, // Disable hot module replacement
hot: false, // Disable hot module replacement
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*',
@@ -248,6 +251,8 @@ module.exports = configure((ctx) => ({
'Cookies',
'Loading',
'AppVisibility',
'LocalStorage',
'SessionStorage',
],
get plugins_1() {
return this._plugins;
@@ -308,9 +313,9 @@ module.exports = configure((ctx) => ({
},
manifest: {
name: 'Gruppo Macro',
short_name: 'GruppoMacro',
description: '',
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.',
display: 'standalone',
orientation: 'portrait',
background_color: '#fff',
@@ -320,24 +325,54 @@ module.exports = configure((ctx) => ({
start_url: "/?homescreen=1",
icons: [
{
src: 'images/gm-android-icon-512x512.png',
src: 'images/riso-android-icon-512x512.png',
sizes: '512x512',
type: 'image/png',
},
{
src: 'images/gm-android-icon-192x192.png',
src: 'images/riso-android-icon-384x384.png',
sizes: '384x384',
type: 'image/png',
},
{
src: 'images/riso-android-icon-192x192.png',
sizes: '192x192',
type: 'image/png',
},
{
src: 'images/gm-apple-touch-icon.png',
src: 'images/riso-android-icon-144x144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: 'images/riso-android-icon-96x96.png',
sizes: '96x96',
type: 'image/png',
},
{
src: 'images/riso-apple-icon-120x120.png',
sizes: '120x120',
type: 'image/png',
},
{
src: 'images/riso-apple-icon-144x144.png',
sizes: '144x144',
type: 'image/png',
},
{
src: 'images/riso-apple-icon-152x152.png',
sizes: '152x152',
type: 'image/png',
},
{
src: 'images/riso-apple-icon-180x180.png',
sizes: '180x180',
type: 'image/png',
},
],
related_applications: [{
"platform": "webapp",
"url": "https://www.gruppomacro.app/manifest.json"
"url": "https://www.riso.app/manifest.json"
}]
},
},
@@ -372,7 +407,7 @@ module.exports = configure((ctx) => ({
builder: {
// https://www.electron.build/configuration/configuration
appId: 'GruppoMacro',
appId: 'Riso',
},
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain

View File

@@ -34,13 +34,15 @@ self.addEventListener('activate', (event) => {
});
const APP_VERSION = "1.1.4";
const APP_VERSION = "1.1.6";
console.log(' [ VER-' + APP_VERSION + ' ] _---------________------ PAO: this is my custom service worker');
importScripts('js/idb.js', 'js/storage.js');
let port = self.location.hostname.startsWith('test') ? 3001 : 3000;
let ISTEST = self.location.hostname.startsWith('test');
let ISLOCALE = self.location.hostname.startsWith('localhost');
console.log('SW- app ver ' + APP_VERSION + ' on port ' + port);
@@ -172,8 +174,169 @@ if (workbox) {
console.log(event.data);
});
// Costanti di configurazione
const DYNAMIC_CACHE = 'dynamic-cache-v1';
const ENABLE_DYNAMIC_CACHING = true;
const baseUrl = self.location.origin;
console.log('baseUrl', baseUrl);
const APP_DOMAIN = extractDomain(baseUrl);
let API_DOMAIN = '';
if (ISTEST) {
API_DOMAIN = 'testapi.' + removeTestPrefix(APP_DOMAIN);
} else {
API_DOMAIN = 'api.' + APP_DOMAIN;
}
function removeTestPrefix(str) {
return str.startsWith('test.') ? str.slice(5) : str;
}
function extractDomain(url) {
return url.replace(/^https?:\/\//, '');
}
// Funzione per verificare se una richiesta è cross-origin
function isCrossOrigin(url) {
try {
const requestUrl = new URL(url);
const baseUrl = self.location.origin;
return requestUrl.origin !== baseUrl;
} catch (e) {
console.error('Error parsing URL:', e);
return true;
}
}
// Funzione per gestire specificamente le richieste API
async function handleApiRequest(request) {
const modifiedRequest = new Request(request.url, {
method: request.method,
headers: {
...Object.fromEntries(request.headers.entries()),
'Origin': `https://${APP_DOMAIN}`,
'Accept': 'application/json',
},
mode: 'cors',
// credentials: 'include'
});
try {
const response = await fetch(modifiedRequest);
// Se la risposta è ok, restituiscila
if (response.ok) {
return response;
}
// Se riceviamo un errore CORS, prova con una richiesta no-cors
if (response.status === 0 || response.type === 'opaque') {
console.log('[Service Worker] Fallback to no-cors mode for:', request.url);
return fetch(new Request(request.url, {
method: 'GET',
mode: 'no-cors',
// credentials: 'include'
}));
}
return response;
} catch (error) {
console.error('[Service Worker] API request error:', error);
return new Response(JSON.stringify({
error: 'Network error',
message: 'Unable to fetch from API'
}), {
status: 503,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': `https://${APP_DOMAIN}`,
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type'
}
});
}
}
// Funzione principale per gestire il fetch
async function handleFetch(request) {
try {
// Verifica se è una richiesta all'API
const url = new URL(request.url);
const isApiRequest = url.hostname === API_DOMAIN;
// Se è una richiesta API, gestiscila separatamente
if (isApiRequest) {
return handleApiRequest(request);
}
// Per le altre richieste, prova prima la cache
const cachedResponse = await caches.match(request);
if (cachedResponse) {
return cachedResponse;
}
// Se non è in cache, fai la richiesta di rete
const response = await fetch(request);
// Verifica la validità della risposta
if (!response || (!response.ok && response.type !== 'opaque')) {
console.warn('[Service Worker] Invalid response for:', request.url);
return response;
}
// Cache solo le risorse dello stesso origine
if (ENABLE_DYNAMIC_CACHING && !isCrossOrigin(request.url)) {
try {
const cache = await caches.open(DYNAMIC_CACHE);
cache.put(request, response.clone());
} catch (cacheError) {
console.error('[Service Worker] Cache error:', cacheError);
}
}
return response;
} catch (error) {
console.error('[Service Worker] Fetch error:', error);
// Personalizza la risposta di errore in base al tipo di richiesta
if (request.headers.get('Accept')?.includes('application/json')) {
return new Response(JSON.stringify({
error: 'Network error',
message: 'Service unavailable'
}), {
status: 503,
headers: {
'Content-Type': 'application/json',
'Access-Control-Allow-Origin': `https://${APP_DOMAIN}`
}
});
}
return new Response('Network error', {
status: 503,
statusText: 'Service Unavailable'
});
}
}
// Event listener per il fetch
self.addEventListener('fetch', event => {
// Ignora le richieste non-GET
// Gestione delle richieste OPTIONS per CORS
if (event.request.method === 'OPTIONS') {
event.respondWith(
new Response(null, {
status: 204,
headers: {
'Access-Control-Allow-Origin': `https://${APP_DOMAIN}`,
'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Max-Age': '86400'
}
})
);
return;
}
// Ignora le richieste non-GET che non sono OPTIONS
if (event.request.method !== 'GET') return;
// Gestisci il caso 'only-if-cached'
@@ -184,35 +347,15 @@ if (workbox) {
event.respondWith(handleFetch(event.request));
});
async function handleFetch(request) {
try {
// Prova prima a ottenere dalla cache
const cachedResponse = await caches.match(request);
if (cachedResponse) {
return cachedResponse;
}
// Se non è in cache, fai la richiesta di rete
const response = await fetch(request);
// Controlla se la risposta è valida
if (!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// Salva in cache se il caching dinamico è abilitato
if (ENABLE_DYNAMIC_CACHING) {
const cache = await caches.open(DYNAMIC_CACHE);
cache.put(request, response.clone());
}
return response;
} catch (error) {
console.error('[Service Worker] Fetch error:', error);
return new Response('Network error', { status: 503, statusText: 'Service Unavailable' });
}
}
// Gestione degli errori non catturati
self.addEventListener('unhandledrejection', event => {
console.error('[Service Worker] Unhandled rejection:', event.reason);
});
// Gestione degli errori globali
self.addEventListener('error', event => {
console.error('[Service Worker] Global error:', event.error);
});
// Funzione di utilità per il logging (decommentare se necessario)
// function logFetchDetails(request) {
// console.log('[Service Worker] Fetching:', request.url);

View File

@@ -230,7 +230,7 @@ export default defineComponent({
}
function searchval(newval: any, table: any, tablesel: any) {
console.log('REFRR searchval', newval, table, 'tablesel', tablesel)
// console.log('REFRR searchval', newval, table, 'tablesel', tablesel)
globalStore.myselector = { table, data: newval }
// console.log('globalStore.myselector', globalStore.myselector)

View File

@@ -2,7 +2,7 @@
<div v-if="small">
<q-chip
dense
class="cltexth4 chipbooked shadow-5 q-pa-sm2"
class="cltexth4 shadow-5 q-pa-sm2"
size="md"
:color="modelValue > 0 ? `green` : modelValue === 0 ? `gray` : `red`"
text-color="white"
@@ -15,15 +15,15 @@
>{{ symbol }}</em
></span
>
<q-icon
<!--<q-icon
v-if="symbol === 'RIS'"
name="img: images/1ris_rosso_100.png"
:size="small ? `xs` : `sm`"
/>
/>-->
<div
v-if="myrecparam && myrecparam.fidoConcesso > 0 && !paramTypeAccount"
>
<q-icon
v-if="myrecparam && myrecparam.fidoConcesso > 0 && !paramTypeAccount"
:color="myrecparam.fidoConcesso > 0 ? 'blue' : 'grey'"
name="fas fa-house-user"
class="vertical-baseline q-ml-xs"

View File

@@ -473,7 +473,7 @@ export default defineComponent({
})*/
onBeforeRouteLeave((to: any, from: any, next: any) => {
console.log('onBeforeRouteLeave', 'to', to, 'from', from, 'next', next)
// console.log('onBeforeRouteLeave', 'to', to, 'from', from, 'next', next)
if ((editRecordBool.value || newRecordBool.value) && checkForChanges()) {
const answer = window.confirm(t('dialog.uscire'))
if (answer) {
@@ -609,7 +609,7 @@ export default defineComponent({
}
})
router.beforeResolve((to: any) => {
/* router.beforeResolve((to: any) => {
console.log('beforeResolve', visupagedialog.value, 'to', to)
if (visupagedialog.value && !to.meta.newpage) {
@@ -617,7 +617,7 @@ export default defineComponent({
// return false
}
})
})*/
function setCategBySector(tablecat: string, tabsector: string, newval: any) {
console.log('setCategBySector', tablecat, tabsector, newval)
@@ -704,7 +704,7 @@ export default defineComponent({
}
function searchval(newval: any, table: any) {
console.log('REFRR searchval', newval, table, 'mytable', mytable.value)
// console.log('REFRR searchval', newval, table, 'mytable', mytable.value)
const myrecfilt = searchList.value.find((rec) => rec.table === table)
let keycookie = tools.COOK_SEARCH + costanti.FILTER_SEP + mytable.value + costanti.FILTER_SEP + table
if (myrecfilt && myrecfilt.keycookie)
@@ -1404,7 +1404,7 @@ export default defineComponent({
}
watch(() => mycodeid.value, (newval, oldval) => {
console.log('REFRR - mycodeid.value', newval)
// console.log('REFRR - mycodeid.value', newval)
refresh()
})

View File

@@ -434,7 +434,7 @@ export default defineComponent({
watch(() => searchList.value, (to: any, from: any) => {
// console.log('watch searchlist', to)
if (searchList.value && !changetable.value) {
console.log('REFRR searchList.value', to)
// console.log('REFRR searchList.value', to)
refresh()
}
})
@@ -461,7 +461,7 @@ export default defineComponent({
watch(() => props.filtercustom, (to: any, from: any) => {
// console.log('filtercustom', to)
if (JSON.stringify(to) !== JSON.stringify(from)) {
console.log('REFRR props.filtercustom', to, from)
// console.log('REFRR props.filtercustom', to, from)
refresh()
}
})
@@ -568,7 +568,7 @@ export default defineComponent({
}
function searchval(newval: any, table: any) {
console.log('REFRR searchval', newval, table)
// console.log('REFRR searchval', newval, table)
const myrecfilt = searchList.value.find((rec) => rec.table === table)
let keycookie = tools.COOK_SEARCH + costanti.FILTER_SEP + mytable.value + costanti.FILTER_SEP
if (myrecfilt && myrecfilt.keycookie)
@@ -1224,7 +1224,7 @@ export default defineComponent({
}
watch(() => mycodeid.value, (newval, oldval) => {
console.log('REFRR - mycodeid.value', newval)
// console.log('REFRR - mycodeid.value', newval)
refresh()
})
@@ -1235,7 +1235,7 @@ export default defineComponent({
myvertical.value === costanti.VISUTABLE_SCHEDA_USER ||
(props.showType === costanti.SHOW_USERINFO))) {
console.log('REFRR - updateTables.value', newval)
// console.log('REFRR - updateTables.value', newval)
refresh()
userStore.updateTables = false

View File

@@ -17,6 +17,7 @@ import { CMyPage } from '@src/components/CMyPage'
import { CMyPageIntro } from '@src/components/CMyPageIntro'
import { CEventsCalendar } from '@src/components/CEventsCalendar'
import { CMyEditor } from '@src/components/CMyEditor'
import { CMySlider } from '@src/components/CMySlider'
import { CMyFieldRec } from '@src/components/CMyFieldRec'
import { CSelectImage } from '@src/components/CSelectImage'
import { CSelectAnimation } from '@src/components/CSelectAnimation'
@@ -37,7 +38,7 @@ export default defineComponent({
components: {
CImgTitle, CTitle, LandingFooter, CEventsCalendar,
CCardCarousel, COpenStreetMap, CMyPage, CMyPageIntro, CMyEditor, CMyFieldRec,
CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation
CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation, CMySlider
},
emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem'],
props: {

View File

@@ -159,52 +159,38 @@
icon="fas fa-expand-alt"
>
<div class="row">
<q-select
<CMySlider
label="Lunghezza:"
v-model="myel.widthimg"
emit-value
map-options
:options="generateSizeOptions()"
use-input
use-chips
@input="modifElem"
@new-value="updateSizeWidth"
filled
dense
style="width: 150px"
/>
<q-select
:min="10"
:max="1000"
color="green"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Altezza:"
v-model="myel.heightimg"
emit-value
map-options
:options="generateSizeOptions()"
use-input
use-chips
@input="saveElem"
filled
dense
@new-value="updateSizeHeight"
style="width: 150px"
/>
<q-select
label="Altezza Carosello:"
:min="10"
:max="1000"
color="red"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
v-if="
myel.type === shared_consts.ELEMTYPE.CARD ||
myel.type === shared_consts.ELEMTYPE.GRID_ORIZ
"
label="Altezza Carosello:"
v-model="myel.heightcarousel"
emit-value
map-options
:options="generateSizeOptions()"
use-input
use-chips
@input="saveElem"
filled
dense
@new-value="updateSizeHeight"
style="width: 150px"
/>
:min="10"
:max="1000"
color="fuchsia"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
</div>
</q-expansion-item>
@@ -357,6 +343,15 @@
v-else-if="myel.type === shared_consts.ELEMTYPE.CARD"
:class="myel.span ? '' : ''"
>
<CSelectColor
v-if="enableEdit"
style="min-width: 150px"
v-model="myel.color"
@update:model-value="modifElem"
title="Colore Sfondo"
>
</CSelectColor>
<q-select
v-model="myel.num2"
:options="[
@@ -1333,7 +1328,7 @@
@update:model-value="modifElem"
>
</q-toggle>
<br>
<br />
<!--++AddCATALOGO_FIELDS-->
<q-select
@@ -1390,115 +1385,83 @@
>
</q-select>
<q-select
label="Largh. Schede:"
<CMySlider
label="Larghezza Schede:"
v-model="myel.catalogo.widthscheda"
emit-value
map-options
:options="generateSizeOptions()"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoSizeWidthScheda"
filled
dense
style="width: 150px"
/>
<q-select
label="Largh. Pagina:"
:min="10"
:max="1000"
color="green"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Larghezza Pagina:"
v-model="myel.catalogo.widthpag"
emit-value
map-options
:options="generateSizeOptions(false)"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoSizeWidthPag"
filled
dense
style="width: 180px"
/>
<q-select
label="Largh. Immagini:"
:min="10"
:max="1000"
color="green"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Larghezza Immagini:"
v-model="myel.catalogo.width"
emit-value
map-options
:options="generateSizeOptions()"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoSizeWidth"
filled
dense
style="width: 180px"
/>
<q-select
:min="10"
:max="1000"
color="green"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Altezza Schede:"
v-model="myel.catalogo.height"
emit-value
map-options
:options="generateSizeOptions()"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoSizeHeight"
filled
dense
style="width: 180px"
/>
:min="10"
:max="1000"
color="red"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
</div>
<div class="sfondo_margine">
Margini:<br />
<q-select
<CMySlider
label="Schede per Riga"
v-model="myel.catalogo.numschede_perRiga"
emit-value
map-options
:options="[
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoNumSchedePerRiga"
filled
dense
style="width: 180px"
/>
<q-select
:min="1"
:max="10"
color="green"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Schede per Colonna"
v-model="myel.catalogo.numschede_perCol"
emit-value
map-options
:options="[
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
]"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoNumSchedePerCol"
filled
dense
style="width: 180px"
/>
<q-input
dense
label="Margine per Pagina:"
:min="1"
:max="10"
color="red"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Margine per Pagina"
v-model="myel.catalogo.margine_pagina"
filled
v-on:keyup.enter="saveFieldElem"
>
</q-input>
<q-input
dense
label="Margine per Riga:"
:min="0"
:max="1000"
color="red"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
<CMySlider
label="Margine per Riga"
v-model="myel.catalogo.margine_riga"
filled
v-on:keyup.enter="saveFieldElem"
>
</q-input>
:min="0"
:max="1000"
color="red"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
</div>
<div>Sfondo:</div>
<div v-if="enableEdit">
@@ -1545,6 +1508,15 @@
v-on:keyup.enter="saveFieldElem"
>
</q-input>
<CMySlider
label="Larghezza Pagina Stampa:"
v-model="myel.catalogo.widthpagPrintable"
:min="0"
:max="1000"
color="red"
addstr="px"
@update:model-value="modifElem"
></CMySlider>
Nome File Printable: {{ myel.catalogo.backgroundimage_printable }}
<CMyFieldRec
@@ -1559,20 +1531,6 @@
@save="saveFieldElem"
>
</CMyFieldRec>
<q-select
label="Largh. Pag. Stampa:"
v-model="myel.catalogo.widthpagPrintable"
emit-value
map-options
:options="generateSizeOptions(false)"
use-input
use-chips
@input="modifElem"
@new-value="updateCatalogoSizeWidthPagPrintable"
filled
dense
style="width: 180px"
/>
</div>
</div>
</div>

View File

@@ -33,6 +33,12 @@
v-if="myel.type === shared_consts.ELEMTYPE.CARD"
class="card-carousel-container"
>
<div
v-if="editOn"
class="elemEdit"
>
Card
</div>
<q-carousel
swipeable
animated
@@ -45,7 +51,8 @@
:height="myel.heightcarousel"
width="100%"
control-type="flat"
class="bg-primary shadow-2 rounded-borders"
class="shadow-2 rounded-borders"
:style="`background-color: ${myel.color} !important`"
@mouseenter="animare = false"
@mouseleave="animare = true"
@transition="handleTransition"
@@ -105,7 +112,7 @@
myel.heightimg || `300px`
} !important; width: ${
myel.widthimg || `300px`
} !important;`
} !important;`
"
@click="rec.link ? tools.openUrl(rec.link) : undefined"
>
@@ -122,13 +129,13 @@
:src="tools.getImgFileByElem(myel, rec)"
/>
</div>
<q-card-section>
<q-card-section class="q-card-section-small">
<div :class="rec.size" :style="`color: ` + rec.color">
{{ tools.getText(rec.alt) }}
</div>
<div
:class="
`q-mt-sm q-mb-xs ` + tools.getClassAnim(myel.anim)
`q-mt-xs q-mb-xs ` + tools.getClassAnim(myel.anim)
"
v-html="rec.content"
></div>
@@ -240,7 +247,7 @@
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.QRCODE">
<div v-if="editOn" class="elemEdit">QRCODE:</div>
<CQRCode
<CQRCode
:read="myel.parambool"
:link="myel.container"
:textlink="myel.container2"

View File

@@ -143,7 +143,7 @@ export default defineComponent({
}
function toggleSize() {
mywidthEditor.value = mywidthEditor.value === 400 ? 1200 : 400
mywidthEditor.value = mywidthEditor.value === 400 ? 1050 : 400
}
function deleteElem() {

View File

@@ -16,7 +16,7 @@
v-model="visuEditor"
v-if="selElem && editOn"
show-if-above
:breakpoint="800"
:breakpoint="350"
side="right"
:width="tools.isMobile() ? 350 : mywidthEditor"
elevated

View File

@@ -188,7 +188,7 @@ export default defineComponent({
)
function saveOptInCookie(arrval: any) {
console.log('saveOptInCookie')
// console.log('saveOptInCookie')
if (arrval) {
for (const id of arrval) {
@@ -230,7 +230,7 @@ export default defineComponent({
function changeval(newval: any) {
console.log(' ½½½½½½½ changeval', newval)
// console.log(' ½½½½½½½ changeval', newval)
if (props.multiple || props.multiselect_by_server) {
// tools.localStSetItem(props.tablesel + '_' + newval, valori.value[newval])
@@ -549,9 +549,9 @@ export default defineComponent({
function filterFn(val: any, update: any, abort: any) {
update(
async () => {
console.log('Filter val:', val, 'len=', val.length)
console.log('props.filter_extra', props.filter_extra)
console.log('valori.value', valori.value)
// console.log('Filter val:', val, 'len=', val.length)
// console.log('props.filter_extra', props.filter_extra)
// console.log('valori.value', valori.value)
let myarr: any = []

View File

View File

@@ -0,0 +1,58 @@
import { defineComponent, ref, computed, PropType, toRef } from 'vue'
import { IOperators } from 'model'
import { useI18n } from '@/boot/i18n'
import { useQuasar } from 'quasar'
import { shared_consts } from '@/common/shared_vuejs'
export default defineComponent({
name: 'CMySlider',
props: {
modelValue: {
type: [String, Number],
required: true,
},
label: {
type: String,
required: true,
},
min: {
type: Number,
required: true,
},
max: {
type: Number,
required: true,
},
addstr: {
type: String,
required: false,
default: '',
},
color: {
type: String,
required: false,
default: '',
},
},
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const sliderValue = computed({
get: () => {
let mystr = props.modelValue + ''
return mystr.replace(props.addstr, '')
},
set: (value) => emit('update:modelValue', value + props.addstr)
})
return {
t,
shared_consts,
sliderValue,
}
}
})

View File

@@ -0,0 +1,22 @@
<template>
<div class="q-pa-xs" style="width: 300px">
<q-badge color="primary"> {{ label }} {{ modelValue }} </q-badge>
<q-input
dense
v-model="sliderValue"
filled
>
</q-input>
<q-slider v-model="sliderValue" :min="min" :max="max" :color="color" />
</div>
</template>
<script lang="ts" src="./CMySlider.ts">
</script>
<style lang="scss" scoped>
@import './CMySlider.scss';
</style>

View File

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

View File

@@ -1,6 +1,6 @@
<template>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
rounded
outlined
v-model="color"
@@ -12,19 +12,14 @@
map-options
>
<template v-slot:selected>
<q-chip
dense
square
color="white"
class="q-my-none q-ml-xs q-mr-none"
>
<span :style="`color: `+ color">{{ color }}</span>
<q-chip dense square color="white" class="q-my-none q-ml-xs q-mr-none">
<span :style="`background-color: ${color}; color: white;`">{{ color }}</span>
</q-chip>
</template>
<template v-slot:option="scope">
<q-item v-bind="scope.itemProps">
<q-item-section>
<q-item-label :style="`color: ` + scope.opt.value">{{
<q-item-label :style="`background-color: ${scope.opt.label}; color: white;`">{{
scope.opt.label
}}</q-item-label>
</q-item-section>

View File

@@ -2273,7 +2273,7 @@ $coloreprincipale: lightblue;
.row.no-wrap {
flex-wrap: nowrap !important;
gap: 1rem;
// gap: 1rem;
}
.card-width-200 {
@@ -2489,4 +2489,8 @@ body.body--dark {
}
.sfondo_margine{
background-color: #d8f38a;
}
.q-card-section-small {
padding: 0px;
}

View File

@@ -1,9 +1,9 @@
const msg_website_it = {
ws: {
sitename: 'Gruppo Macro',
siteshortname: 'Gruppo Macro',
description: '',
keywords: '',
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',
},
hours: {
descr: 'Descrizione',
@@ -16,35 +16,23 @@ const msg_website_it = {
pages: {
home: 'Home',
profile: 'Profilo',
install_site: 'Installa Sito',
profile2: 'ProfiloU',
mypage2: 'mypage2',
myservice2: 'myservice2',
myhosps2: 'myhosps2',
mygood2: 'mygood2',
catalogo: 'Catalogo',
fundraising: 'Sostieni il Progetto',
notifs: 'Configura le Notifiche',
unsubscribe: 'Disiscriviti',
unsubscribe_user: 'Disiscriviti User',
test: 'Test',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
cash: 'Cassa',
productInfos: 'Info Prodotti',
listinoprodotti: 'Listino Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
categories: 'Categorie',
storehouses: 'Magazzino',
providers: 'Fornitori',
catprods: 'Categorie',
subcatprods: 'Sotto-Categorie',
gasordine: 'Gas Ordine',
scontisticas: 'Scontistica',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
@@ -133,11 +121,15 @@ const msg_website_it = {
only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri',
color: 'Colore',
gasordini: 'Gas Ordini',
gestoreordini: 'Gestore Ordini',
mainMenu: 'Menu Principale',
subtitle: 'Sottotitolo',
lang: 'Lingua',
keywords: 'Parole Chiave',
desctiption: 'Descrizione',
heightimg: 'Altezza Immagine',
},
msg: {
myAppName: 'Più che Buono',
myAppName: 'Riso',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
underconstruction: 'App in costruzione...',
myDescriz: '',

View File

@@ -67,6 +67,39 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false,
},
{
active: true,
order: 12,
path: '/goods',
materialIcon: 'fas fa-tshirt',
name: 'mypages.goods',
component: () => import('@/root/goods/goods.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: true,
order: 15,
path: '/services',
materialIcon: 'fas fa-house-user',
name: 'mypages.services',
component: () => import('@/root/services/services.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: true,
order: 15,
path: '/activities',
materialIcon: 'fas fa-house-user',
name: 'mypages.activities',
component: () => import('@/root/activities/activities.vue'),
meta: { requiresAuth: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 15,
@@ -78,6 +111,17 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false,
},
{
active: true,
order: 15,
path: '/hosps',
materialIcon: 'fas fa-bed',
name: 'mypages.hosp',
component: () => import('@/root/hosp/hosp.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: site.confpages && site.confpages.enableCircuits,
order: 16,
@@ -165,7 +209,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
meta: { requiresAuth: true, newpage: true },
inmenu: false,
infooter: false,
},
},
{
active: true,
order: 137,
@@ -232,7 +276,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
{
active: true,
order: 150,
path: '/fundraising',
path: '/sostieniilprogetto',
materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'),

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.1.4">
<meta name="version" content="1.1.6">
<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

@@ -1778,7 +1778,7 @@ export const useUserStore = defineStore('UserStore', {
},
updateDataFr(data: any) {
console.log('updateDataFr', data)
// console.log('updateDataFr', data)
this.my.profile.friends = data.listFriends ? data.listFriends : []
this.my.profile.req_friends = data.listRequestFriends ? data.listRequestFriends : []
this.my.profile.asked_friends = data.listSentRequestFriends ? data.listSentRequestFriends : []