- Aggiunto le Statistiche di visualizzazione delle pagine.

- Aggiunto il componente per visualizzare le statistiche
This commit is contained in:
Surya Paolo
2025-07-08 16:19:12 +02:00
parent 7f5ff3da64
commit 40ec5465b2
61 changed files with 3593791 additions and 654 deletions

View File

@@ -1,13 +1,12 @@
VITE_MONGODB_HOST="https://localhost:3000" VITE_APP_ID="18"
VITE_PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
VITE_VUE_APP_ISTEST="1"
VITE_VUE_APP_INLOCALE="1"
VITE_DEBUG="1"
VITE_APP_ID="13"
VITE_LOGO_REG='riso-logo-full.png'
VITE_APP_URL="https://localhost" VITE_APP_URL="https://localhost"
DIRECTORY_LOCAL=myprojplanet_vite VITE_MONGODB_HOST="https://localhost:3000"
DIRECTORY_SERVER=freeplanet_serverside VITE_LOGO_REG='gruppomacro-logo-full.png'
VITE_PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
VITE_DEBUG="1"
VITE_VUE_APP_ISTEST=0
VITE_VUE_APP_INLOCALE=1
DIRECTORY_LOCAL="newfreeplanet"
DIRECTORY_SERVER="freeplanet_serverside"
SERVERDIR_WEBSITE="" SERVERDIR_WEBSITE=""
SERVERPW_WEBSITE="" SERVERPW_WEBSITE=""

View File

@@ -1,11 +1,13 @@
VITE_APP_ID="13" VITE_APP_ID="18"
VITE_APP_URL="https://riso.app" VITE_APP_URL="https://gruppomacro.app"
VITE_MONGODB_HOST="https://api.riso.app" VITE_MONGODB_HOST="https://api.gruppomacro.app"
VITE_LOGO_REG='riso-logo-full.png' VITE_LOGO_REG='gruppomacro-logo-full.png'
VITE_PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs" VITE_PUBLICKEY_PUSH="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
VITE_DEBUG="0" VITE_DEBUG="0"
VITE_VUE_APP_ISTEST="0" VITE_VUE_APP_ISTEST="0"
DIRECTORY_LOCAL=myprojplanet_vite DIRECTORY_LOCAL="myprojplanet_vite"
DIRECTORY_SERVER=/var/www/nodejs_riso_server DIRECTORY_SERVER="/var/www/nodejs_piuchebuono_server"
SERVERDIR_WEBSITE="/var/www/riso.app" SERVERDIR_WEBSITE="/var/www/gruppomacro.app"
SERVERPW_WEBSITE="pwdadmin@1AOK" SERVERPW_WEBSITE="pwdadmin@1AOK"
PORT_SPA="8089"
PORT_PWA="8099"

View File

@@ -1,62 +1,61 @@
{ {
"name": "riso", "name": "gruppomacro",
"version": "1.2.62", "version": "1.2.62",
"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": "Gruppo Macro",
"productName": "Riso", "productName": "Gruppo Macro",
"author": "Surya", "author": "Surya",
"private": true, "private": true,
"keywords": [], "keywords": [],
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "APP_VERSION='1.2.62' PORT=8084 quasar dev", "dev": "PORT=8089 APP_VERSION='1.2.62' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev", "dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build", "build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.62' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.62' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.62' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.62' quasar build -m pwa",
"type-check": "vue-tsc --noEmit", "type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch", "type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa", "buildspa": "APP_VERSION='1.2.62' quasar build -m spa",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"", "lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt", "lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .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", "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.62' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.62' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.62' quasar dev", "spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.62' quasar dev",
"debug": "quasar dev --mode debug", "debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0", "test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js", "generate-sw": "workbox generateSW workbox-config.js",
"postinstall": "quasar prepare" "postinstall": "quasar prepare"
}, },
"dependencies": { "dependencies": {
"@cubejs-client/core": "^1.2.26", "@cubejs-client/core": "^1.3.21",
"@quasar/extras": "^1.16.17", "@quasar/extras": "^1.17.0",
"@quasar/quasar-ui-qcalendar": "^4.1.2", "@quasar/quasar-ui-qcalendar": "^4.1.2",
"@types/jsbarcode": "^3.11.4", "@types/jsbarcode": "^3.11.4",
"@types/leaflet": "^1.9.17", "@types/leaflet": "^1.9.18",
"@vue/compat": "^3.5.13", "@vue/compat": "^3.5.16",
"@vue/compiler-sfc": "^3.5.13", "@vue/compiler-sfc": "^3.5.16",
"@vuelidate/core": "^2.0.3", "@vuelidate/core": "^2.0.3",
"@vuelidate/validators": "^2.0.4", "@vuelidate/validators": "^2.0.4",
"acorn": "^8.14.1", "acorn": "^8.15.0",
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"apexcharts": "^4.7.0",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.21",
"axios": "^1.8.4", "axios": "^1.9.0",
"bcryptjs": "^3.0.2", "bcryptjs": "^3.0.2",
"chart.js": "^4.4.8", "chart.js": "^4.4.9",
"core-js": "^3.41.0", "core-js": "^3.43.0",
"crypto-browserify": "^3.12.1", "crypto-browserify": "^3.12.1",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"echarts": "5.6.0", "echarts": "5.6.0",
"eslint-plugin-n": "^17.16.2", "eslint-plugin-n": "^17.19.0",
"eslint-plugin-quasar": "^1.1.0", "eslint-plugin-quasar": "^1.1.0",
"graphql": "^16.10.0", "gsap": "^3.13.0",
"graphql-tag": "^2.12.6",
"gsap": "^3.12.7",
"html2pdf.js": "^0.10.3", "html2pdf.js": "^0.10.3",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"jsbarcode": "^3.11.6", "jsbarcode": "^3.12.1",
"leaflet": "^1.9.4", "leaflet": "^1.9.4",
"leaflet-routing-machine": "^3.2.12", "leaflet-routing-machine": "^3.2.12",
"leaflet.markercluster": "^1.5.3", "leaflet.markercluster": "^1.5.3",
@@ -64,30 +63,29 @@
"lodash": "^4.17.21", "lodash": "^4.17.21",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^3.0.1", "pinia": "^3.0.3",
"qrcode-vue3": "^1.7.1",
"quasar": "^2.18.1", "quasar": "^2.18.1",
"quasar-extras": "^2.0.9", "quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"scrollreveal": "^4.0.9", "scrollreveal": "^4.0.9",
"typescript-eslint": "^8.27.0", "typescript-eslint": "^8.34.0",
"vee-validate": "^4.15.0", "vee-validate": "^4.15.1",
"vue": "^3.5.13", "vue": "^3.5.16",
"vue-class-component": "^8.0.0-rc.1", "vue-class-component": "^8.0.0-rc.1",
"vue-country-code": "^1.1.3", "vue-country-code": "^1.1.3",
"vue-echarts": "^7.0.3", "vue-echarts": "^7.0.3",
"vue-i18n": "^11.1.2", "vue-i18n": "^11.1.5",
"vue-idb": "^0.2.0", "vue-idb": "^0.2.0",
"vue-image-zoomer": "^2.4.4",
"vue-property-decorator": "^10.0.0-rc.3", "vue-property-decorator": "^10.0.0-rc.3",
"vue-router": "^4.5.0", "vue-router": "^4.5.1",
"vue-scroll-reveal": "^2.1.0", "vue-scroll-reveal": "^2.1.0",
"vue-social-sharing": "^4.0.0-alpha4", "vue-social-sharing": "^4.0.0-alpha4",
"vue-svgicon": "^4.0.0-alpha.3", "vue-svgicon": "^4.0.0-alpha.3",
"vue-timeago3": "^2.3.2", "vue-timeago3": "^2.3.2",
"vue2-dragula": "^2.5.5", "vue2-dragula": "^2.5.5",
"vue3-pdf-app": "^1.0.3", "vue3-apexcharts": "^1.8.0",
"vue3-qr-reader": "^1.0.0", "vue3-qr-reader": "^1.0.0",
"vuedraggable": "^4.1.0",
"vuex": "^4.1.0", "vuex": "^4.1.0",
"vuex-router-sync": "^6.0.0-rc.1", "vuex-router-sync": "^6.0.0-rc.1",
"workbox-core": "^7.3.0", "workbox-core": "^7.3.0",
@@ -97,41 +95,41 @@
"workbox-window": "^7.3.0" "workbox-window": "^7.3.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.23.0", "@eslint/js": "^9.28.0",
"@intlify/unplugin-vue-i18n": "^6.0.5", "@intlify/unplugin-vue-i18n": "^6.0.8",
"@quasar/app-vite": "^2.1.4", "@quasar/app-vite": "^2.2.1",
"@types/google.maps": "^3.58.1", "@types/google.maps": "^3.58.1",
"@types/jest": "^29.5.14", "@types/jest": "^29.5.14",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
"@types/node": "^22.13.11", "@types/node": "^24.0.1",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"@types/vue-tel-input": "^2.1.7", "@types/vue-tel-input": "^2.1.7",
"@types/vuelidate": "^0.7.22", "@types/vuelidate": "^0.7.22",
"@vue/devtools": "^7.7.2", "@vue/devtools": "^7.7.6",
"@vue/eslint-config-prettier": "^10.2.0", "@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.5.0", "@vue/eslint-config-typescript": "^14.5.0",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.21",
"eslint": "9", "eslint": "9",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.31.0",
"eslint-plugin-vue": "^10.0.0", "eslint-plugin-vue": "^10.2.0",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"globals": "^16.0.0", "globals": "^16.2.0",
"http-proxy-middleware": "^3.0.3", "http-proxy-middleware": "^3.0.5",
"jest": "^29.7.0", "jest": "^30.0.0",
"json-loader": "^0.5.7", "json-loader": "^0.5.7",
"nodemon": "^3.1.9", "nodemon": "^3.1.10",
"npm-check-updates": "^17.1.16", "npm-check-updates": "^18.0.1",
"parcel": "^2.14.1", "parcel": "^2.15.2",
"postcss": "^8.5.3", "postcss": "^8.5.5",
"postcss-loader": "^8.1.1", "postcss-loader": "^8.1.1",
"prettier": "3", "prettier": "3",
"strip-ansi": "=7.1.0", "strip-ansi": "=7.1.0",
"ts-jest": "^29.2.6", "ts-jest": "^29.4.0",
"typescript": "5.7.3", "typescript": "5.8.3",
"vite-plugin-checker": "^0.9.1", "vite-plugin-checker": "^0.9.3",
"vue-cli-plugin-element-ui": "^1.1.4", "vue-cli-plugin-element-ui": "^1.1.4",
"vue-eslint-parser": "^10.1.1", "vue-eslint-parser": "^10.1.3",
"vue-tsc": "^2.2.8", "vue-tsc": "^2.2.10",
"vueify": "^9.4.1", "vueify": "^9.4.1",
"workbox-build": "^7.3.0" "workbox-build": "^7.3.0"
}, },

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

BIN
public/images/foto1.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/images/foto2.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
public/images/foto3.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

BIN
public/images/novita.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
public/images/ombra.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

2
public/js/workbox-sw-6-1.js Executable file
View File

@@ -0,0 +1,2 @@
!function(){'use strict';try{self['workbox:sw:6.1.0']&&_()}catch(t){}const t={backgroundSync:'background-sync',broadcastUpdate:'broadcast-update',cacheableResponse:'cacheable-response',core:'core',expiration:'expiration',googleAnalytics:'offline-ga',navigationPreload:'navigation-preload',precaching:'precaching',rangeRequests:'range-requests',routing:'routing',strategies:'strategies',streams:'streams',recipes:'recipes'};self.workbox=new class{constructor(){return this.v={},this.Pt={debug:'localhost'===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.$t=this.Pt.debug?'dev':'prod',this.jt=!1,new Proxy(this,{get(e,s){if(e[s])return e[s];const o=t[s];return o&&e.loadModule('workbox-'+o),e[s]}})}setConfig(t={}){if(this.jt)throw new Error('Config must be set before accessing workbox.* modules');Object.assign(this.Pt,t),this.$t=this.Pt.debug?'dev':'prod'}loadModule(t){const e=this.St(t);try{importScripts(e),this.jt=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}St(t){if(this.Pt.modulePathCb)return this.Pt.modulePathCb(t,this.Pt.debug);let e=['https://storage.googleapis.com/workbox-cdn/releases/6.1.0'];const s=`${t}.${this.$t}.js`,o=this.Pt.modulePathPrefix;return o&&(e=o.split('/'),''===e[e.length-1]&&e.splice(e.length-1,1)),e.push(s),e.join('/')}}}();
//# sourceMappingURL=workbox-sw.js.map

2
public/js/workbox-sw.js Normal file
View File

@@ -0,0 +1,2 @@
!function(){"use strict";try{self["workbox:sw:5.1.4"]&&_()}catch(t){}const t={backgroundSync:"background-sync",broadcastUpdate:"broadcast-update",cacheableResponse:"cacheable-response",core:"core",expiration:"expiration",googleAnalytics:"offline-ga",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};self.workbox=new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.s=this.t.debug?"dev":"prod",this.o=!1,new Proxy(this,{get(e,s){if(e[s])return e[s];const o=t[s];return o&&e.loadModule("workbox-"+o),e[s]}})}setConfig(t={}){if(this.o)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.s=this.t.debug?"dev":"prod"}loadModule(t){const e=this.i(t);try{importScripts(e),this.o=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}i(t){if(this.t.modulePathCb)return this.t.modulePathCb(t,this.t.debug);let e=["https://storage.googleapis.com/workbox-cdn/releases/5.1.4"];const s=`${t}.${this.s}.js`,o=this.t.modulePathPrefix;return o&&(e=o.split("/"),""===e[e.length-1]&&e.splice(e.length-1,1)),e.push(s),e.join("/")}}}();
//# sourceMappingURL=workbox-sw.js.map

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,2 +1,2 @@
!function(){"use strict";try{self["workbox:sw:7.3.0"]&&_()}catch(t){}const t={backgroundSync:"background-sync",broadcastUpdate:"broadcast-update",cacheableResponse:"cacheable-response",core:"core",expiration:"expiration",googleAnalytics:"offline-ga",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams",recipes:"recipes"};self.workbox=new class{constructor(){return this.v={},this.Pt={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.$t=this.Pt.debug?"dev":"prod",this.jt=!1,new Proxy(this,{get(e,s){if(e[s])return e[s];const o=t[s];return o&&e.loadModule(`workbox-${o}`),e[s]}})}setConfig(t={}){if(this.jt)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.Pt,t),this.$t=this.Pt.debug?"dev":"prod"}loadModule(t){const e=this.St(t);try{importScripts(e),this.jt=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}St(t){if(this.Pt.modulePathCb)return this.Pt.modulePathCb(t,this.Pt.debug);let e=["https://storage.googleapis.com/workbox-cdn/releases/7.3.0"];const s=`${t}.${this.$t}.js`,o=this.Pt.modulePathPrefix;return o&&(e=o.split("/"),""===e[e.length-1]&&e.splice(e.length-1,1)),e.push(s),e.join("/")}}}(); !function(){"use strict";try{self["workbox:sw:5.1.4"]&&_()}catch(t){}const t={backgroundSync:"background-sync",broadcastUpdate:"broadcast-update",cacheableResponse:"cacheable-response",core:"core",expiration:"expiration",googleAnalytics:"offline-ga",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};self.workbox=new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.s=this.t.debug?"dev":"prod",this.o=!1,new Proxy(this,{get(e,s){if(e[s])return e[s];const o=t[s];return o&&e.loadModule("workbox-"+o),e[s]}})}setConfig(t={}){if(this.o)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.s=this.t.debug?"dev":"prod"}loadModule(t){const e=this.i(t);try{importScripts(e),this.o=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}i(t){if(this.t.modulePathCb)return this.t.modulePathCb(t,this.t.debug);let e=["https://storage.googleapis.com/workbox-cdn/releases/5.1.4"];const s=`${t}.${this.s}.js`,o=this.t.modulePathPrefix;return o&&(e=o.split("/"),""===e[e.length-1]&&e.splice(e.length-1,1)),e.push(s),e.join("/")}}}();
//# sourceMappingURL=workbox-sw.js.map //# sourceMappingURL=workbox-sw.js.map

View File

@@ -1,7 +1,7 @@
import { defineConfig } from '#q-app/wrappers' import { defineConfig } from '#q-app/wrappers';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import path from 'path' import path from 'path';
// console.log(process.env) // console.log(process.env)
@@ -16,10 +16,20 @@ export default defineConfig((ctx) => {
// --> boot files are part of "main.js" // --> boot files are part of "main.js"
// https://v2.quasar.dev/quasar-cli/boot-files // https://v2.quasar.dev/quasar-cli/boot-files
// boot: ['vue-i18n', 'vue-meta', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula', 'guard'], // boot: ['vue-i18n', 'vue-meta', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula', 'guard'],
boot: ['i18n', 'axios', 'pinia', 'vee-validate', boot: [
'i18n',
'axios',
'pinia',
'vee-validate',
'myconfig', 'myconfig',
'local-storage', 'globalroutines', 'local-storage',
'calendar', 'social-sharing', 'timeago', 'guard'], 'globalroutines',
'calendar',
'social-sharing',
'timeago',
'guard',
'trackPageViews',
],
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css // https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
css: [ css: [
@@ -47,7 +57,7 @@ export default defineConfig((ctx) => {
build: { build: {
target: { target: {
browser: ['es2022', 'firefox115', 'chrome115', 'safari14'], browser: ['es2022', 'firefox115', 'chrome115', 'safari14'],
node: 'node20' node: 'node20',
}, },
sassVariables: 'src/css/variables.scss', sassVariables: 'src/css/variables.scss',
// env: envparser(), // env: envparser(),
@@ -55,9 +65,7 @@ export default defineConfig((ctx) => {
vueRouterMode: 'history', vueRouterMode: 'history',
analyze: false, // true analyze: false, // true
transpile: true, transpile: true,
transpileDependencies: [ transpileDependencies: [/quasar-ui-qcalendar[\\/]src/],
/quasar-ui-qcalendar[\\/]src/
],
beforeDev(api) { beforeDev(api) {
// Se la variabile d'ambiente SKIP_TSC è impostata, disabilita il type checking // Se la variabile d'ambiente SKIP_TSC è impostata, disabilita il type checking
if (process.env.SKIP_TSC === 'true') { if (process.env.SKIP_TSC === 'true') {
@@ -76,16 +84,16 @@ export default defineConfig((ctx) => {
}, },
// @quasar/app-vite v2.0.3+ // @quasar/app-vite v2.0.3+
envFilter(originalEnv) { envFilter(originalEnv) {
const newEnv = {} const newEnv = {};
for (const key in originalEnv) { for (const key in originalEnv) {
/* ...decide if it goes in or not... */ /* ...decide if it goes in or not... */
if (true) { if (true) {
newEnv[key] = originalEnv[key] newEnv[key] = originalEnv[key];
} }
} }
// remember to return your processed env // remember to return your processed env
return newEnv return newEnv;
}, },
typescript: { typescript: {
@@ -118,26 +126,26 @@ export default defineConfig((ctx) => {
alias: { alias: {
...viteConf.resolve.alias, ...viteConf.resolve.alias,
'#q-app': path.resolve(__dirname, 'node_modules/quasar/app'), // Alias per #q-app '#q-app': path.resolve(__dirname, 'node_modules/quasar/app'), // Alias per #q-app
'app': path.resolve(__dirname), app: path.resolve(__dirname),
'boot': path.resolve(__dirname, 'src/boot'), boot: path.resolve(__dirname, 'src/boot'),
'src': path.resolve(__dirname, 'src'), src: path.resolve(__dirname, 'src'),
'statics': path.resolve(__dirname, 'src/statics'), statics: path.resolve(__dirname, 'src/statics'),
'components': path.resolve(__dirname, 'src/components'), components: path.resolve(__dirname, 'src/components'),
'views': path.resolve(__dirname, 'src/views/index.ts'), views: path.resolve(__dirname, 'src/views/index.ts'),
'images': path.resolve(__dirname, 'src/assets/images'), images: path.resolve(__dirname, 'src/assets/images'),
'maps': path.resolve(__dirname, 'public/maps'), maps: path.resolve(__dirname, 'public/maps'),
'classes': path.resolve(__dirname, 'src/classes/index.ts'), classes: path.resolve(__dirname, 'src/classes/index.ts'),
'fonts': path.resolve(__dirname, 'src/assets/fonts'), fonts: path.resolve(__dirname, 'src/assets/fonts'),
'utils': path.resolve(__dirname, 'src/utils/index.ts'), utils: path.resolve(__dirname, 'src/utils/index.ts'),
'css': path.resolve(__dirname, 'src/css/variables.scss'), css: path.resolve(__dirname, 'src/css/variables.scss'),
'router': path.resolve(__dirname, 'src/router/index.ts'), router: path.resolve(__dirname, 'src/router/index.ts'),
'validators': path.resolve(__dirname, 'src/utils/validators.ts'), validators: path.resolve(__dirname, 'src/utils/validators.ts'),
'methods': path.resolve(__dirname, 'src/utils/methods.ts'), methods: path.resolve(__dirname, 'src/utils/methods.ts'),
'filters': path.resolve(__dirname, 'src/utils/filters.ts'), filters: path.resolve(__dirname, 'src/utils/filters.ts'),
'api': path.resolve(__dirname, 'src/store/Api/index.ts'), api: path.resolve(__dirname, 'src/store/Api/index.ts'),
'paths': path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'), paths: path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'),
'modules': path.resolve(__dirname, 'src/store/Modules/index.ts'), modules: path.resolve(__dirname, 'src/store/Modules/index.ts'),
'model': path.resolve(__dirname, 'src/model/index.ts'), model: path.resolve(__dirname, 'src/model/index.ts'),
'@components': path.resolve(__dirname, 'src/components'), '@components': path.resolve(__dirname, 'src/components'),
'@boot': path.resolve(__dirname, 'src/boot'), '@boot': path.resolve(__dirname, 'src/boot'),
'@costanti': path.resolve(__dirname, 'src/store/Modules/costanti.ts'), '@costanti': path.resolve(__dirname, 'src/store/Modules/costanti.ts'),
@@ -164,7 +172,9 @@ export default defineConfig((ctx) => {
}, },
vitePlugins: [ vitePlugins: [
['@intlify/unplugin-vue-i18n/vite', { [
'@intlify/unplugin-vue-i18n/vite',
{
// if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false` // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
// compositionOnly: false, // compositionOnly: false,
@@ -175,19 +185,23 @@ export default defineConfig((ctx) => {
ssr: ctx.modeName === 'ssr', ssr: ctx.modeName === 'ssr',
// you need to set i18n resource including paths ! // you need to set i18n resource including paths !
include: [fileURLToPath(new URL('./src/i18n', import.meta.url))] include: [fileURLToPath(new URL('./src/i18n', import.meta.url))],
}], },
],
['vite-plugin-checker', { [
'vite-plugin-checker',
{
vueTsc: false, vueTsc: false,
OFF_eslint: { OFF_eslint: {
lintCommand: 'eslint -c ./eslint.config.js "./src*/**/*.{ts,js,mjs,cjs,vue}"', lintCommand:
useFlatConfig: true 'eslint -c ./eslint.config.js "./src*/**/*.{ts,js,mjs,cjs,vue}"',
} useFlatConfig: true,
}, { server: false }] },
},
{ server: false },
] ],
],
// polyfillModulePreload: true, // polyfillModulePreload: true,
@@ -310,10 +324,7 @@ export default defineConfig((ctx) => {
'QTree', 'QTree',
'QSeparator', 'QSeparator',
], ],
directives: [ directives: ['Ripple', 'ClosePopup'],
'Ripple',
'ClosePopup',
],
_plugins: [ _plugins: [
'Meta', 'Meta',
'Dialog', 'Dialog',
@@ -357,14 +368,12 @@ export default defineConfig((ctx) => {
maxAge: 1000 * 60 * 60 * 24 * 30, maxAge: 1000 * 60 * 60 * 24 * 30,
// Tell browser when a file from the server should expire from cache (in ms) // Tell browser when a file from the server should expire from cache (in ms)
middlewares: [ middlewares: [
ctx.prod ? 'compression' : '', ctx.prod ? 'compression' : '',
'render', // keep this as last one 'render', // keep this as last one
], ],
}, },
// https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa // https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa
pwa: { pwa: {
workboxMode: 'InjectManifest', // 'GenerateSW' or 'InjectManifest' workboxMode: 'InjectManifest', // 'GenerateSW' or 'InjectManifest'
@@ -401,13 +410,11 @@ export default defineConfig((ctx) => {
packager: { packager: {
// https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options
// OS X / Mac App Store // OS X / Mac App Store
// appBundleId: '', // appBundleId: '',
// appCategoryType: '', // appCategoryType: '',
// osxSign: '', // osxSign: '',
// protocol: 'myapp://path', // protocol: 'myapp://path',
// Windows only // Windows only
// win32metadata: { ... } // win32metadata: { ... }
}, },
@@ -417,8 +424,6 @@ export default defineConfig((ctx) => {
appId: '-', appId: '-',
}, },
}, },
} };
}) });

View File

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

View File

@@ -1,7 +1,7 @@
{ {
"name": "Riso", "name": "Gruppo Macro",
"short_name": "Riso", "short_name": "GruppoMacro",
"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": "",
"display": "standalone", "display": "standalone",
"orientation": "portrait", "orientation": "portrait",
"background_color": "#fff", "background_color": "#fff",
@@ -11,47 +11,17 @@
"start_url": "/?homescreen=1", "start_url": "/?homescreen=1",
"icons": [ "icons": [
{ {
"src:": "/images/riso-android-icon-512x512.png", "src": "/images/gm-android-icon-512x512.png",
"sizes": "512x512", "sizes": "512x512",
"type": "image/png" "type": "image/png"
}, },
{ {
"src:": "/images/riso-android-icon-384x384.png", "src": "/images/gm-android-icon-192x192.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src:": "/images/riso-android-icon-192x192.png",
"sizes": "192x192", "sizes": "192x192",
"type": "image/png" "type": "image/png"
}, },
{ {
"src:": "/images/riso-android-icon-144x144.png", "src": "/images/gm-apple-touch-icon.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", "sizes": "180x180",
"type": "image/png" "type": "image/png"
} }

View File

@@ -0,0 +1,25 @@
// src/boot/trackPageViews.js
import { Api } from '@api';
import { useUserStore } from '@store/UserStore';
export default ({ router }) => {
router.afterEach((to) => {
const pageUrl = window.location.href;
const userAgent = navigator.userAgent;
const userStore = useUserStore();
const mydata = {
url: pageUrl,
userAgent,
username: userStore.my?.username,
userId: userStore.my?._id,
};
// Invia il tracciamento al backend
Api.SendReq('/api/track-pageview', 'POST', mydata).catch((err) => {
console.error('Errore nel tracking:', err);
});
});
};

View File

@@ -1,4 +1,3 @@
export const shared_consts = { export const shared_consts = {
Accepted: { Accepted: {
CHECK_READ_GUIDELINES: { CHECK_READ_GUIDELINES: {
@@ -173,6 +172,7 @@ export const shared_consts = {
CATALOGLIST: 420, CATALOGLIST: 420,
SEARCHPRODUCT: 430, SEARCHPRODUCT: 430,
RACCOLTE_CATALOGHI: 450, RACCOLTE_CATALOGHI: 450,
STAT_PAGES: 460,
}, },
QUERYTYPE_MYGROUP: 1, QUERYTYPE_MYGROUP: 1,
@@ -291,12 +291,7 @@ export const shared_consts = {
PARAM_SHOW_PROVINCE: 1, PARAM_SHOW_PROVINCE: 1,
TABLES_ID_STRING: [ TABLES_ID_STRING: ['circuits', 'accounts', 'movements', 'mygroups'],
'circuits',
'accounts',
'movements',
'mygroups',
],
TABLES_ID_NUMBER: [ TABLES_ID_NUMBER: [
'permissions', 'permissions',
@@ -359,7 +354,6 @@ export const shared_consts = {
label: 'Con Provincia inserita', label: 'Con Provincia inserita',
value: 16777216, //FILTER_USER_PROVINCE: value: 16777216, //FILTER_USER_PROVINCE:
}, },
], ],
RECFILTRI_UTENTE_FACIL: [ RECFILTRI_UTENTE_FACIL: [
@@ -368,7 +362,7 @@ export const shared_consts = {
value: 4294967296, //FILTER_FACILITATORE: ,: value: 4294967296, //FILTER_FACILITATORE: ,:
}, },
{ {
label: 'Non ancora approvati dall\'invitante', label: "Non ancora approvati dall'invitante",
value: 2097152, // shared_consts.FILTER_USER_NO_VERIFIED_APORTADOR value: 2097152, // shared_consts.FILTER_USER_NO_VERIFIED_APORTADOR
}, },
{ {
@@ -397,22 +391,19 @@ export const shared_consts = {
}, },
], ],
MYTABS: [{ id: 0, table: 'none' }, MYTABS: [
{ id: 0, table: 'none' },
{ id: 1, table: 'myskills' }, { id: 1, table: 'myskills' },
{ id: 2, table: 'mybachecas' }, { id: 2, table: 'mybachecas' },
{ id: 3, table: 'myhosps' }, { id: 3, table: 'myhosps' },
{ id: 4, table: 'mygoods' }, { id: 4, table: 'mygoods' },
{ id: 5, table: 'myevents' }, { id: 5, table: 'myevents' },
{ id: 6, table: 'attivitas' }], { id: 6, table: 'attivitas' },
],
// Condivise // Condivise
TABLES_FAVORITE_BOOKMARK: ['myskills', 'mygoods', 'mybachecas', 'myhosps', 'attivitas'], TABLES_FAVORITE_BOOKMARK: ['myskills', 'mygoods', 'mybachecas', 'myhosps', 'attivitas'],
TABLEFORUSERS: [ TABLEFORUSERS: ['myskills', 'mygoods', 'mybachecas', 'myhosps'],
'myskills',
'mygoods',
'mybachecas',
'myhosps',
],
// Solo per VUE.JS // Solo per VUE.JS
@@ -423,14 +414,30 @@ export const shared_consts = {
COL_WITH_ARRFILTER_IN_AND: ['preferences'], COL_WITH_ARRFILTER_IN_AND: ['preferences'],
TABLES_WITH_DATE: ['mybachecas', 'myhosps'], // 'mybachecas' TABLES_WITH_DATE: ['mybachecas', 'myhosps'], // 'mybachecas'
TABLES_WITH_SORTING: ['mybachecas', 'myhosps'], TABLES_WITH_SORTING: ['mybachecas', 'myhosps'],
TABLES_REC_ID: ['skills', 'goods', 'subskills', 'myskills', 'mybachecas', 'myhosps', 'mygoods'], TABLES_REC_ID: [
'skills',
'goods',
'subskills',
'myskills',
'mybachecas',
'myhosps',
'mygoods',
],
// costanti.VISUTABLE_SCHEDA_USER, VISUTABLE_SCHEDA_GROUP, VISUTABLE_USER_TABGROUP, VISUTABLE_USER_TABCIRCUIT, VISUTABLE_GROUP_CIRCUIT, VISUTABLE_ // costanti.VISUTABLE_SCHEDA_USER, VISUTABLE_SCHEDA_GROUP, VISUTABLE_USER_TABGROUP, VISUTABLE_USER_TABCIRCUIT, VISUTABLE_GROUP_CIRCUIT, VISUTABLE_
VERTIC_SHOW_GRID: [-1, 2, -3, -4, -5, -6, -10], VERTIC_SHOW_GRID: [-1, 2, -3, -4, -5, -6, -10],
TABLES_UPDATE_LASTIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots'], TABLES_UPDATE_LASTIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots'],
TABLES_FINDER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups'], TABLES_FINDER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups'],
TABLES_VISU_CMYSRECCARD: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups', 'catalogs', 'raccoltacataloghis'], TABLES_VISU_CMYSRECCARD: [
'myskills',
'mybachecas',
'myhosps',
'mygoods',
'mygroups',
'catalogs',
'raccoltacataloghis',
],
TABLES_SHOW_ADTYPE: ['myskills', 'mygoods', 'myhosps'], TABLES_SHOW_ADTYPE: ['myskills', 'mygoods', 'myhosps'],
TABLES_VISU_LISTA_USER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'users'], TABLES_VISU_LISTA_USER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'users'],
@@ -575,7 +582,7 @@ export const shared_consts = {
{ {
value: 2, value: 2,
label: 'Ospitalità', label: 'Ospitalità',
} },
], ],
TipoDiAttivita: [ TipoDiAttivita: [
@@ -672,7 +679,7 @@ export const shared_consts = {
}, },
{ {
value: 7, value: 7,
label: 'Casetta sull\'Albero', label: "Casetta sull'Albero",
}, },
{ {
value: 8, value: 8,
@@ -688,7 +695,6 @@ export const shared_consts = {
}, },
], ],
People: [ People: [
{ {
value: 0, value: 0,
@@ -763,7 +769,7 @@ export const shared_consts = {
}, },
{ {
value: 4, value: 4,
label: 'E\' consentito fumare in casa', label: "E' consentito fumare in casa",
}, },
{ {
value: 5, value: 5,
@@ -807,7 +813,7 @@ export const shared_consts = {
}, },
{ {
value: 15, value: 15,
label: 'Doccia all\'aperto', label: "Doccia all'aperto",
}, },
{ {
value: 16, value: 16,
@@ -930,7 +936,7 @@ export const shared_consts = {
}, },
{ {
value: 'VDA', value: 'VDA',
label: 'Valle d\'Aosta', label: "Valle d'Aosta",
}, },
{ {
value: 'VEN', value: 'VEN',
@@ -983,19 +989,23 @@ export const shared_consts = {
Cat_Interesse_Arcadei: [ Cat_Interesse_Arcadei: [
{ {
value: 1, value: 1,
label: 'Agricoltura sostenibile e naturale, autonomia alimentare locale (orto, g.a.s.)', label:
'Agricoltura sostenibile e naturale, autonomia alimentare locale (orto, g.a.s.)',
}, },
{ {
value: 2, value: 2,
label: 'Creazione ed Integrazione ecologica di nuove strutture Abitative, rimboschimento, conservazione del territorio.', label:
'Creazione ed Integrazione ecologica di nuove strutture Abitative, rimboschimento, conservazione del territorio.',
}, },
{ {
value: 4, value: 4,
label: 'Economia circolare e creazione di sistemi di unità di conto scambio beni e servizi, sistemi di baratto, dono e solidarietà.', label:
'Economia circolare e creazione di sistemi di unità di conto scambio beni e servizi, sistemi di baratto, dono e solidarietà.',
}, },
{ {
value: 8, value: 8,
label: 'Ricerca, sviluppo e implementazione di tecnologie di approvigionamento energetico.', label:
'Ricerca, sviluppo e implementazione di tecnologie di approvigionamento energetico.',
}, },
{ {
value: 16, value: 16,
@@ -1007,11 +1017,13 @@ export const shared_consts = {
}, },
{ {
value: 64, value: 64,
label: 'Formazione, informazione, divulgazione, Educazione e trasmissione generazionale della conoscenza.', label:
'Formazione, informazione, divulgazione, Educazione e trasmissione generazionale della conoscenza.',
}, },
{ {
value: 128, value: 128,
label: 'Convivialità, Arte e Cultura. Tutela, conservazione e promozione delle tradizioni e culture locali.', label:
'Convivialità, Arte e Cultura. Tutela, conservazione e promozione delle tradizioni e culture locali.',
}, },
], ],
@@ -1026,17 +1038,16 @@ export const shared_consts = {
}, },
], ],
VisibilGroup: [ VisibilGroup: [
{ {
value: 1, value: 1,
label: 'Privato', label: 'Privato',
hint: 'Solo i membri possono vedere chi fa parte del gruppo' hint: 'Solo i membri possono vedere chi fa parte del gruppo',
}, },
{ {
value: 2, value: 2,
label: 'Nascosto', label: 'Nascosto',
hint: 'il Gruppo non sarà visibile nella ricerca' hint: 'il Gruppo non sarà visibile nella ricerca',
}, },
], ],
@@ -1044,7 +1055,7 @@ export const shared_consts = {
{ {
value: 0, value: 0,
label: '', label: '',
hint: '' hint: '',
}, },
{ {
value: 1, value: 1,
@@ -1236,25 +1247,21 @@ export const shared_consts = {
id: 6, id: 6,
label: 'a un Gruppo', label: 'a un Gruppo',
value: 30, //SEND_TO_GROUP: 30, value: 30, //SEND_TO_GROUP: 30,
}, },
{ {
id: 7, id: 7,
label: 'a me stesso', label: 'a me stesso',
value: 40, //SEND_TO_MYSELF: 40, value: 40, //SEND_TO_MYSELF: 40,
}, },
{ {
id: 8, id: 8,
label: 'Abilitati Telegram (senza Username telegram)', label: 'Abilitati Telegram (senza Username telegram)',
value: 50, //SEND_TO_TELEG_NO_USERNAME_TELEG: 50, value: 50, //SEND_TO_TELEG_NO_USERNAME_TELEG: 50,
}, },
{ {
id: 9, id: 9,
label: 'Abilitati Telegram (Non Verificati dall\'Invitante)', label: "Abilitati Telegram (Non Verificati dall'Invitante)",
value: 60, //SEND_TO_TELEG_NO_VERIF_BY_APORTADOR: 60, value: 60, //SEND_TO_TELEG_NO_VERIF_BY_APORTADOR: 60,
}, },
], ],
@@ -1280,25 +1287,54 @@ export const shared_consts = {
}, },
OrderPages: { OrderPages: {
LISTA_TOTALI: { label: 'Lista Totali', value: 1, icon: 'fas fa-chart-bar', color: 'text-green' }, LISTA_TOTALI: {
label: 'Lista Totali',
value: 1,
icon: 'fas fa-chart-bar',
color: 'text-green',
},
ORDINI: { label: 'Ordini', value: 2, icon: 'fas fa-tasks', color: 'text-blue' }, ORDINI: { label: 'Ordini', value: 2, icon: 'fas fa-tasks', color: 'text-blue' },
}, },
OrderStat: { OrderStat: {
// IN_CART: { label: 'In Carrello', value: 1 }, //IN_CART // IN_CART: { label: 'In Carrello', value: 1 }, //IN_CART
IN_CORSO: { label: 'In Corso', value: 2, icon: 'fas fa-tasks', color: 'text-black' }, //CHECKOUT_SENT IN_CORSO: { label: 'In Corso', value: 2, icon: 'fas fa-tasks', color: 'text-black' }, //CHECKOUT_SENT
PREPARED: { label: 'Preparati', value: 15, icon: 'fas fa-archive', color: 'text-orange' }, PREPARED: {
CONFERMATI: { label: 'Confermati', value: 3, icon: 'fas fa-calendar', color: 'text-blue' }, //ORDER_CONFIRMED label: 'Preparati',
value: 15,
icon: 'fas fa-archive',
color: 'text-orange',
},
CONFERMATI: {
label: 'Confermati',
value: 3,
icon: 'fas fa-calendar',
color: 'text-blue',
}, //ORDER_CONFIRMED
PAGATI: { label: 'Pagati', value: 4, icon: 'money', color: 'text-green' }, //PAYED PAGATI: { label: 'Pagati', value: 4, icon: 'money', color: 'text-green' }, //PAYED
DELIVERED: { label: 'Consegnato', value: 5, icon: 'fas fa-calendar', color: 'text-blue' }, //DELIVERED DELIVERED: {
SHIPPED: { label: 'Spediti', value: 6, icon: 'fas fa-shipping-fast', color: 'text-green' }, //SHIPPED label: 'Consegnato',
value: 5,
icon: 'fas fa-calendar',
color: 'text-blue',
}, //DELIVERED
SHIPPED: {
label: 'Spediti',
value: 6,
icon: 'fas fa-shipping-fast',
color: 'text-green',
}, //SHIPPED
RECEIVED: { label: 'Ricevuti', value: 7, icon: '', color: 'text-blue' }, //RECEIVED RECEIVED: { label: 'Ricevuti', value: 7, icon: '', color: 'text-blue' }, //RECEIVED
COMPLETATI: { label: 'Completati', value: 8, icon: 'fas fa-check', color: 'text-blue' }, //COMPLETED COMPLETATI: {
label: 'Completati',
value: 8,
icon: 'fas fa-check',
color: 'text-blue',
}, //COMPLETED
CANCELLATI: { label: 'Cancellati', value: 10, icon: 'delete', color: 'text-red' }, //CANCELED CANCELLATI: { label: 'Cancellati', value: 10, icon: 'delete', color: 'text-red' }, //CANCELED
}, },
REACTIONS_FIELD: REACTIONS_FIELD: {
{
numseen: 1, numseen: 1,
numbook: 1, numbook: 1,
numfav: 1, numfav: 1,
@@ -1355,7 +1391,6 @@ export const shared_consts = {
label: 'Elimina Definitivamente !!', label: 'Elimina Definitivamente !!',
value: 20, value: 20,
}, },
], ],
OrderCmdStr: [ OrderCmdStr: [
@@ -1593,7 +1628,7 @@ export const shared_consts = {
{ {
value: 1, // ID_FAVORITE_ADDED value: 1, // ID_FAVORITE_ADDED
labeltrans: 'notifsid.favorite_new', labeltrans: 'notifsid.favorite_new',
} },
], ],
}, },
{ {
@@ -1609,7 +1644,7 @@ export const shared_consts = {
{ {
value: 4, // ID_EVENTS_ATTEND value: 4, // ID_EVENTS_ATTEND
labeltrans: 'notifsid.attend_new', labeltrans: 'notifsid.attend_new',
} },
], ],
}, },
{ {
@@ -1621,7 +1656,7 @@ export const shared_consts = {
{ {
value: 1, // ID_FRIENDS_NEW_REC value: 1, // ID_FRIENDS_NEW_REC
labeltrans: 'notifsid.friends_new', labeltrans: 'notifsid.friends_new',
} },
], ],
}, },
{ {
@@ -1633,7 +1668,7 @@ export const shared_consts = {
{ {
value: 1, // ID_GROUP_NEW_REC value: 1, // ID_GROUP_NEW_REC
labeltrans: 'notifsid.groups_new', labeltrans: 'notifsid.groups_new',
} },
], ],
}, },
{ {
@@ -1645,7 +1680,7 @@ export const shared_consts = {
{ {
value: 1, // ID_CIRCUIT_NEW_REC value: 1, // ID_CIRCUIT_NEW_REC
labeltrans: 'notifsid.circuits_new', labeltrans: 'notifsid.circuits_new',
} },
], ],
}, },
{ {
@@ -1656,8 +1691,6 @@ export const shared_consts = {
}, },
], ],
UsersNotif_Adv_List: [ UsersNotif_Adv_List: [
/*{ /*{
value: 1, // NEW_ADV_CITY value: 1, // NEW_ADV_CITY
@@ -1743,27 +1776,27 @@ export const shared_consts = {
FontsInstalled: [ FontsInstalled: [
{ {
label: 'Arial', label: 'Arial',
value: 'font-Arial' value: 'font-Arial',
}, },
{ {
label: 'Baskervville', label: 'Baskervville',
value: 'font-Baskervville' value: 'font-Baskervville',
}, },
{ {
label: 'Montserrat', label: 'Montserrat',
value: 'font-Montserrat' value: 'font-Montserrat',
}, },
{ {
label: 'Verdana', label: 'Verdana',
value: 'font-Verdana' value: 'font-Verdana',
}, },
{ {
label: 'Lato', label: 'Lato',
value: 'font-Lato' value: 'font-Lato',
}, },
{ {
label: 'Source Sans Pro', label: 'Source Sans Pro',
value: 'font-SourceSansPro' value: 'font-SourceSansPro',
}, },
{ {
value: 80, value: 80,
@@ -1832,6 +1865,10 @@ export const shared_consts = {
value: 450, value: 450,
label: 'Raccolte Cataloghi', label: 'Raccolte Cataloghi',
}, },
{
value: 460,
label: 'Statistiche Pagine',
},
{ {
value: 430, // SEARCHPRODUCT value: 430, // SEARCHPRODUCT
label: 'Cerca Prodotto', label: 'Cerca Prodotto',
@@ -1959,7 +1996,6 @@ export const shared_consts = {
value: 390, value: 390,
label: 'EDIT ADDRESS BY COORD', label: 'EDIT ADDRESS BY COORD',
}, },
], ],
TypesElem: [ TypesElem: [
@@ -2001,7 +2037,7 @@ export const shared_consts = {
}, },
{ {
value: 110, value: 110,
label: 'Galleria d\'Immagini', label: "Galleria d'Immagini",
}, },
{ {
value: 6, value: 6,
@@ -2012,55 +2048,55 @@ export const shared_consts = {
LISTBESTCOLORS: [ LISTBESTCOLORS: [
{ {
label: 'blue', label: 'blue',
value: 'blue' value: 'blue',
}, },
{ {
label: 'green', label: 'green',
value: 'green' value: 'green',
}, },
{ {
label: 'purple', label: 'purple',
value: 'purple' value: 'purple',
}, },
{ {
label: 'deep-purple', label: 'deep-purple',
value: 'deep-purple' value: 'deep-purple',
}, },
{ {
label: 'indigo', label: 'indigo',
value: 'indigo' value: 'indigo',
}, },
{ {
label: 'light-blue', label: 'light-blue',
value: 'light-blue' value: 'light-blue',
}, },
{ {
label: 'cyan', label: 'cyan',
value: 'cyan' value: 'cyan',
}, },
{ {
label: 'teal', label: 'teal',
value: 'teal' value: 'teal',
}, },
{ {
label: 'lime', label: 'lime',
value: 'lime' value: 'lime',
}, },
{ {
label: 'orange', label: 'orange',
value: 'orange' value: 'orange',
}, },
{ {
label: 'deeporange', label: 'deeporange',
value: 'deeporange' value: 'deeporange',
}, },
{ {
label: 'yellow', label: 'yellow',
value: 'yellow' value: 'yellow',
}, },
{ {
label: 'white', label: 'white',
value: 'white' value: 'white',
}, },
], ],
@@ -2089,43 +2125,59 @@ export const shared_consts = {
MAX_QTA_NON_IMPOSTATA: -1, MAX_QTA_NON_IMPOSTATA: -1,
getStatusStr(status: number) { getStatusStr(status: number) {
const trovatorec = this.OrderStatusStr.find((rec) => rec.value === status) const trovatorec = this.OrderStatusStr.find((rec) => rec.value === status);
return (trovatorec) ? trovatorec.label : '' return trovatorec ? trovatorec.label : '';
}, },
getDirectoryImgByTable(table: string, username: string) { getDirectoryImgByTable(table: string, username: string) {
let ris = '' let ris = '';
if (this.TABLEFORUSERS.includes(table)) { if (this.TABLEFORUSERS.includes(table)) {
ris = 'profile/' + username + '/' + table + '/'; ris = 'profile/' + username + '/' + table + '/';
} }
return ris; return ris;
}, },
getLabelByValueAndArr(value: number, array: any) { getLabelByValueAndArr(value: number, array: any) {
const trovatorec = array.find((rec: any) => rec.value === value) const trovatorec = array.find((rec: any) => rec.value === value);
return (trovatorec) ? trovatorec.label : '' return trovatorec ? trovatorec.label : '';
}, },
fieldsUserToChange() { fieldsUserToChange() {
return ['_id', 'username', 'group', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'notask_verif', 'verified_by_aportador', 'trust_modified', 'img', 'ipaddr', 'lasttimeonline', 'profile', 'news_on'] return [
'_id',
'username',
'group',
'email',
'name',
'surname',
'perm',
'date_reg',
'verified_email',
'notask_verif',
'verified_by_aportador',
'trust_modified',
'img',
'ipaddr',
'lasttimeonline',
'profile',
'news_on',
];
}, },
getProjectByTable(table: string, proj_add?: any) { getProjectByTable(table: string, proj_add?: any) {
let proj = {} let proj = {};
if (table === this.TABLES_MYGOODS) { if (table === this.TABLES_MYGOODS) {
proj = { proj = {
'recGood': 1, recGood: 1,
'sectorGood': 1, sectorGood: 1,
'idSectorGood': 1, idSectorGood: 1,
'idGood': 1, idGood: 1,
'idShipping': 1, idShipping: 1,
'idStatusGood': 1, idStatusGood: 1,
groupname: 1, groupname: 1,
//**ADDFIELD_MYGOOD //**ADDFIELD_MYGOOD
} };
} else if (table === this.TABLES_MYGROUPS) { } else if (table === this.TABLES_MYGROUPS) {
proj = { proj = {
groupname: 1, groupname: 1,
@@ -2146,7 +2198,7 @@ export const shared_consts = {
mycities: 1, mycities: 1,
sector: 1, sector: 1,
recCatGrp: 1, recCatGrp: 1,
} };
} else if (table === this.TABLES_CIRCUITS) { } else if (table === this.TABLES_CIRCUITS) {
proj = { proj = {
_id: 1, _id: 1,
@@ -2193,9 +2245,9 @@ export const shared_consts = {
admins: 1, admins: 1,
req_users: 1, req_users: 1,
refused_users: 1, refused_users: 1,
'mycities': 1, mycities: 1,
//**ADDFIELD_CIRCUITS //**ADDFIELD_CIRCUITS
} };
} else if (table === this.TABLES_MYSKILLS) { } else if (table === this.TABLES_MYSKILLS) {
proj = { proj = {
recSkill: 1, recSkill: 1,
@@ -2212,8 +2264,7 @@ export const shared_consts = {
website: 1, website: 1,
groupname: 1, groupname: 1,
//**ADDFIELD_MYSKILL //**ADDFIELD_MYSKILL
} };
} else if (table === this.TABLES_MYHOSPS) { } else if (table === this.TABLES_MYHOSPS) {
proj = { proj = {
visibile: 1, visibile: 1,
@@ -2229,8 +2280,7 @@ export const shared_consts = {
website: 1, website: 1,
link_maplocation: 1, link_maplocation: 1,
groupname: 1, groupname: 1,
} };
} else if (table === this.TABLES_ATTIVITAS) { } else if (table === this.TABLES_ATTIVITAS) {
proj = { proj = {
recSkill: 1, recSkill: 1,
@@ -2254,7 +2304,6 @@ export const shared_consts = {
createdBy: 1, createdBy: 1,
//**ADDFIELD_ATTIVITA //**ADDFIELD_ATTIVITA
}; };
} else if (table === this.TABLES_MYBACHECAS) { } else if (table === this.TABLES_MYBACHECAS) {
proj = { proj = {
recSkill: 1, recSkill: 1,
@@ -2278,25 +2327,23 @@ export const shared_consts = {
link_maplocation: 1, link_maplocation: 1,
groupname: 1, groupname: 1,
//**ADDFIELD_MYBACHECAS //**ADDFIELD_MYBACHECAS
} };
} }
const proj_common = { const proj_common = {
'mygrp.groupname': 1, 'mygrp.groupname': 1,
'mygrp.title': 1, 'mygrp.title': 1,
'mygrp.photos': 1, 'mygrp.photos': 1,
} };
proj = Object.assign({}, proj, proj_common); proj = Object.assign({}, proj, proj_common);
if (proj_add) if (proj_add) proj = Object.assign({}, proj, proj_add);
proj = Object.assign({}, proj, proj_add);
return proj; return proj;
}, },
getProjectForAll(proj_add: any, table?: string) { getProjectForAll(proj_add: any, table?: string) {
let proj = { let proj = {
idContribType: 1, idContribType: 1,
idCity: 1, idCity: 1,
@@ -2341,8 +2388,7 @@ export const shared_consts = {
perm: 1, perm: 1,
}; };
if (proj_add) if (proj_add) proj = Object.assign({}, proj, proj_add);
proj = Object.assign({}, proj, proj_add);
proj = { ...proj, ...this.REACTIONS_FIELD }; proj = { ...proj, ...this.REACTIONS_FIELD };
proj = { ...proj, ...this.ANNUNCI_FIELDS }; proj = { ...proj, ...this.ANNUNCI_FIELDS };
@@ -2356,28 +2402,26 @@ export const shared_consts = {
}, },
getDirectoryByTable(table: string, barre?: boolean) { getDirectoryByTable(table: string, barre?: boolean) {
let add = ''; let add = '';
if (barre) if (barre) add = '/';
add = '/';
if (table === 'myskills') { if (table === 'myskills') {
return add + 'myservice' + add return add + 'myservice' + add;
} else if (table === 'mybachecas') { } else if (table === 'mybachecas') {
return add + 'mypage' + add return add + 'mypage' + add;
} else if (table === 'myhosps') { } else if (table === 'myhosps') {
return add + 'myhosps' + add return add + 'myhosps' + add;
} else if (table === 'mygoods') { } else if (table === 'mygoods') {
return add + 'mygood' + add return add + 'mygood' + add;
} else if (table === 'mygroups') { } else if (table === 'mygroups') {
return add + 'grp' + add return add + 'grp' + add;
} else if (table === 'circuits') { } else if (table === 'circuits') {
return add + 'circuit' + add return add + 'circuit' + add;
} else if (table === 'catalogs') { } else if (table === 'catalogs') {
return add + 'catalogs' + add return add + 'catalogs' + add;
} }
return '' return '';
}, },
STATUSSKILL_DI_PERSONA: 1, STATUSSKILL_DI_PERSONA: 1,
@@ -2437,7 +2481,6 @@ export const shared_consts = {
{ label: 'Discendente', value: -1 }, { label: 'Discendente', value: -1 },
], ],
VERSIONI_PRODOTTO: [ VERSIONI_PRODOTTO: [
{ {
label: '[Nessuno]', label: '[Nessuno]',
@@ -2484,7 +2527,6 @@ export const shared_consts = {
value: 108, value: 108,
color: 'red', color: 'red',
}, },
], ],
AccountType: { AccountType: {
@@ -2538,6 +2580,5 @@ export const shared_consts = {
SCONTI_APPLICA: { SCONTI_APPLICA: {
NESSUNO: 0, NESSUNO: 0,
A_TUTTI: 1, A_TUTTI: 1,
} },
};
}

View File

@@ -21,6 +21,7 @@ import { CMyActivities } from '@src/components/CMyActivities'
import { CECommerce } from '@src/components/CECommerce' import { CECommerce } from '@src/components/CECommerce'
import { CStatMacro } from '@src/components/CStatMacro' import { CStatMacro } from '@src/components/CStatMacro'
import { CSearchProduct } from '@src/components/CSearchProduct' import { CSearchProduct } from '@src/components/CSearchProduct'
import { CPageViewStats } from '@src/components/CPageViewStats'
import { CQRCode } from '@src/components/CQRCode' import { CQRCode } from '@src/components/CQRCode'
import { CAITools } from '@src/components/CAITools' import { CAITools } from '@src/components/CAITools'
import { CCatalogo } from '@src/components/CCatalogo' import { CCatalogo } from '@src/components/CCatalogo'
@@ -78,7 +79,7 @@ export default defineComponent({
CVisuVideoPromoAndPDF, CECommerce, CCatalogo, CRaccolta, CAITools, CStatMacro, CVisuVideoPromoAndPDF, CECommerce, CCatalogo, CRaccolta, CAITools, CStatMacro,
CMapComuni, CMapUsers, CMapGetCoordinates, CMapEditAddressByCoord, CMapComuni, CMapUsers, CMapGetCoordinates, CMapEditAddressByCoord,
CDashGroup, CMovements, CGridOriz, CQRCode, CCatalogList, CDashGroup, CMovements, CGridOriz, CQRCode, CCatalogList,
CSearchProduct, CRaccoltaCataloghi, CSearchProduct, CRaccoltaCataloghi, CPageViewStats,
// , //CMapMarker, // , //CMapMarker,
}, },
emits: ['selElemClick'], emits: ['selElemClick'],

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,120 @@
import { defineComponent, ref, onMounted } from 'vue';
import { tools } from '@tools';
import { Api } from 'app/src/store/Api';
interface WeeklyStat {
year: number;
week: number;
topPages: Array<{ url: string; count: number }>;
}
export default defineComponent({
name: 'CPageViewStats',
props: {},
emits: [],
setup() {
// Stati
const stats = ref({
total: 0,
today: 0,
week: 0,
month: 0,
topPages: [],
});
const selectedYear = ref(new Date().getFullYear());
const selectedWeek = ref(1);
const weeklyStats = ref([]);
const years = Array.from({ length: 3 }, (_, i) => new Date().getFullYear() - i);
const weeks = Array.from({ length: 52 }, (_, i) => i + 1);
const columns = [
{
name: 'url',
label: 'Pagina',
field: (row) => row.url,
format: (val) => val.replace(/^https?:\/\/[^/]+/, ''),
align: 'left',
},
{
name: 'count',
label: 'Visite',
field: 'count',
align: 'right',
},
];
const users = ref([]);
const selectedUser = ref<{ label: string; value: string } | null>(null);
const uniqueMode = ref(false);
const userOptions = ref<{ label: string; value: string }[]>([]);
async function loadStats() {
try {
const params = {} as any;
if (selectedUser.value?.value) {
params.userId = selectedUser.value.value;
}
if (uniqueMode.value) {
params.unique = true;
}
params.year = selectedYear.value;
params.week = selectedWeek.value;
// Carica statistiche generali
const statsRes = await Api.SendReq('/api/pageviews/stats', 'GET', params);
stats.value = statsRes.data;
// Carica statistiche settimanali
const weeklyRes = await Api.SendReq(
'/api/pageviews/weekly-top-pages',
'GET',
params
);
weeklyStats.value = weeklyRes.data;
// Se non ci sono utenti ancora caricati
if (users.value.length === 0) {
const usersRes = await Api.SendReq('/api/pageviews/users', 'GET', null);
users.value = usersRes.data;
const uniqueUsernamesOrIds = [
...new Set(
users.value.map((u: any) => u.username || u.userId).filter(Boolean)
),
];
userOptions.value = [
{ label: 'Tutti gli utenti', value: '' },
...uniqueUsernamesOrIds.map((name) => ({ label: name, value: name })),
];
}
} catch (error) {
console.error('Errore nel caricamento delle statistiche:', error);
}
}
onMounted(() => {
selectedWeek.value = tools.getWeekOfYear(new Date());
loadStats();
});
return {
stats,
weeklyStats,
users,
selectedUser,
userOptions,
loadStats,
tools,
uniqueMode,
columns,
years,
weeks,
selectedYear,
selectedWeek,
};
},
});

View File

@@ -0,0 +1,153 @@
<template>
<q-page
class="q-pa-md"
v-if="stats"
>
<div class="row q-mb-md">
<div class="col">
<h5>Statistiche Visite</h5>
</div>
<div class="row q-mb-md items-center">
<q-toggle
v-model="uniqueMode"
label="Mostra solo pagine uniche per utente"
@update:model-value="loadStats"
/>
</div>
<div class="col-auto">
<q-select
v-model="selectedUser"
:options="userOptions"
label="Filtra per utente"
dense
outlined
style="min-width: 200px"
@update:model-value="loadStats"
/>
</div>
</div>
<div class="row q-col-gutter-md">
<div class="col-xs-12 col-sm-6 col-md-4">
<q-card>
<q-card-section>
<div class="text-h6">Totale Pagine Visitate</div>
<div class="text-h4">{{ stats?.total }}</div>
</q-card-section>
</q-card>
</div>
<div class="col-xs-12 col-sm-6 col-md-4">
<q-card>
<q-card-section>
<div class="text-h6">Pagine Oggi</div>
<div class="text-h4">{{ stats.today }}</div>
</q-card-section>
</q-card>
</div>
<div class="col-xs-12 col-sm-6 col-md-4">
<q-card>
<q-card-section>
<div class="text-h6">Pagine Questa Settimana</div>
<div class="text-h4">{{ stats.week }}</div>
</q-card-section>
</q-card>
</div>
<div class="col-xs-12 col-sm-6 col-md-4">
<q-card>
<q-card-section>
<div class="text-h6">Pagine Questo Mese</div>
<div class="text-h4">{{ stats.month }}</div>
</q-card-section>
</q-card>
</div>
</div>
<div class="q-mt-md">
<h6>Pagine più visitate</h6>
<q-list
bordered
separator
>
<q-item
v-for="(page, index) in stats.topPages"
:key="index"
>
<q-item-section>{{ tools.escludiUrlDominio(page._id) }}</q-item-section>
<q-item-section side>{{ page.count }} visite</q-item-section>
</q-item>
</q-list>
</div>
<div class="q-mt-md">
<h6>Top Pagine per Settimana</h6>
<div class="row q-col-gutter-md">
<div class="col-6">
<q-select
v-model="selectedYear"
:options="years"
label="Anno"
style="max-width: 300px"
outlined
@update:model-value="loadStats"
/>
</div>
<div class="col-6">
<q-select
v-model="selectedWeek"
:options="
weeks.map((w) => {
const date = new Date(Date.UTC(selectedYear, 0, 4 + (w - 1) * 7));
const start = new Date(Date.UTC(selectedYear, 0, 1 + (w - 1) * 7));
const end = new Date(Date.UTC(selectedYear, 0, 7 + (w - 1) * 7));
return {
label: `dal ${start.toLocaleString('it-IT', { day: '2-digit', month: 'long' })} al ${end.toLocaleString('it-IT', { day: '2-digit', month: 'long' })}`,
value: w,
};
})
"
label="Settimana"
outlined
emit-value
map-options
@update:model-value="loadStats"
/>
<div class="col-auto">
<q-btn
:disable="selectedWeek === 1"
icon="chevron_left"
flat
round
dense
@click="selectedWeek--; loadStats()"
/>
<q-btn
:disable="selectedWeek === weeks.length"
icon="chevron_right"
flat
round
dense
@click="selectedWeek++; loadStats()"
/>
</div>
</div>
</div>
<q-table
class="q-mt-md q-pa-sm"
:rows="weeklyStats"
:columns="columns"
row-key="url"
flat
bordered
/>
</div>
</q-page>
</template>
<script lang="ts" src="./CPageViewStats.ts"></script>
<style lang="scss" scoped>
@import './CPageViewStats.scss';
</style>

View File

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

View File

@@ -1,9 +1,9 @@
const msg_website_it = { const msg_website_it = {
ws: { ws: {
sitename: 'Riso', sitename: 'Gruppo Macro',
siteshortname: 'RISO', siteshortname: 'Gruppo Macro',
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: '',
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS', keywords: '',
}, },
hours: { hours: {
descr: 'Descrizione', descr: 'Descrizione',
@@ -16,29 +16,20 @@ const msg_website_it = {
pages: { pages: {
home: 'Home', home: 'Home',
profile: 'Profilo', profile: 'Profilo',
install_site: 'Installa Sito',
profile2: 'ProfiloU', profile2: 'ProfiloU',
mypage2: 'mypage2', mypage2: 'mypage2',
myservice2: 'myservice2', myservice2: 'myservice2',
myhosps2: 'myhosps2', myhosps2: 'myhosps2',
mygood2: 'mygood2', mygood2: 'mygood2',
catalogo: 'Catalogo',
fundraising: 'Sostieni il Progetto', fundraising: 'Sostieni il Progetto',
notifs: 'Configura le Notifiche', notifs: 'Configura le Notifiche',
unsubscribe: 'Disiscriviti', unsubscribe: 'Disiscriviti',
unsubscribe_user: 'Disiscriviti User',
test: 'Test', test: 'Test',
projects: 'Progetti', projects: 'Progetti',
report: 'Report Ore', report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
storehouses: 'Magazzino',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Pagamenti',
regok: 'Registrazione Confermata', regok: 'Registrazione Confermata',
presentazione: 'Presentazione', presentazione: 'Presentazione',
presentazione2: 'Presentazione', presentazione2: 'Presentazione',
@@ -84,14 +75,12 @@ const msg_website_it = {
eventodef: 'Evento:', eventodef: 'Evento:',
prova: 'prova', prova: 'prova',
dbop: 'Operazioni', dbop: 'Operazioni',
dbopmacro: 'Operazioni Macro',
projall: 'Comunitari', projall: 'Comunitari',
groups: 'Lista Gruppi', groups: 'Lista Gruppi',
projectsShared: 'Condivisi da me', projectsShared: 'Condivisi da me',
myprojects: 'Privati', myprojects: 'Privati',
favproj: 'Favoriti', favproj: 'Favoriti',
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore', hours: 'Ore',
department: 'Uffici', department: 'Uffici',
title: 'Titolo', title: 'Titolo',
@@ -120,16 +109,11 @@ const msg_website_it = {
onlyif_logged: 'Solo se Loggati', onlyif_logged: 'Solo se Loggati',
only_residenti: 'Solo Residenti', only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri', only_consiglio: 'Solo Consiglieri',
only_collab: 'Solo Collaboratori',
color: 'Colore', color: 'Colore',
mainMenu: 'Menu Principale',
subtitle: 'Sottotitolo',
lang: 'Lingua',
keywords: 'Parole Chiave',
desctiption: 'Descrizione',
heightimg: 'Altezza Immagine',
}, },
msg: { msg: {
myAppName: 'Riso', myAppName: 'Più che Buono',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito', myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
underconstruction: 'App in costruzione...', underconstruction: 'App in costruzione...',
myDescriz: '', myDescriz: '',

View File

@@ -1,6 +1,6 @@
/* RISO APP /* GRUPPOMACRO APP
*/ */
import type { import {
IListRoutes, IListRoutes,
ILang, ILang,
IPreloadImages, IPreloadImages,
@@ -44,6 +44,7 @@ const firstPage = {
infooter: true, infooter: true,
} }
function getDynamicPages(site: ISites): IListRoutes[] { function getDynamicPages(site: ISites): IListRoutes[] {
const baseroutes: IListRoutes[] = [ const baseroutes: IListRoutes[] = [
@@ -70,34 +71,11 @@ function getDynamicPages(site: ISites): IListRoutes[] {
}, },
{ {
active: true, active: true,
order: 12, order: 400,
path: '/goods', path: '/test-lungo',
materialIcon: 'fas fa-tshirt', materialIcon: 'fas fa-test',
name: 'mypages.goods', name: 'mypages.test_lungo',
component: () => import('@src/root/goods/goods.vue'), component: () => import('@src/views/testLungo/testLungo.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: true,
order: 15,
path: '/services',
materialIcon: 'fas fa-house-user',
name: 'mypages.services',
component: () => import('@src/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('@src/root/activities/activities.vue'),
meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -112,17 +90,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
{
active: true,
order: 15,
path: '/hosps',
materialIcon: 'fas fa-bed',
name: 'mypages.hosp',
component: () => import('@src/root/hosp/hosp.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{ {
active: site.confpages && site.confpages.enableCircuits, active: site.confpages && site.confpages.enableCircuits,
order: 16, order: 16,
@@ -135,7 +102,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true, infooter: true,
}, },
{ {
active: true, active: site.confpages && site.confpages.enableEvents,
order: 20, order: 20,
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
@@ -157,7 +124,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false, infooter: false,
}, },
{ {
active: true, active: site.confpages && site.confpages.showProfile,
order: 120, order: 120,
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
@@ -168,7 +135,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true, infooter: true,
}, },
{ {
active: true, active: site.confpages && site.confpages.showProfile,
order: 120, order: 120,
path: '/editprofile', path: '/editprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
@@ -179,7 +146,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false, infooter: false,
}, },
{ {
active: true, active: site.confpages && site.confpages.showiscrittiMenu,
order: 130, order: 130,
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
@@ -274,16 +241,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
{
active: true,
order: 150,
path: '/sostieniilprogetto',
materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'),
inmenu: false,
infooter: false,
},
{ {
active: true, active: true,
order: 80, order: 80,
@@ -302,7 +259,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
export function firstimagehome() { export function firstimagehome() {
const img = 'statics/images/background.jpg' let img = 'statics/images/background.jpg'
return img return img
} }

View File

@@ -11138,6 +11138,19 @@ export const tools = {
} }
}, },
escludiUrlDominio(url: string) {
const urlObj = new URL(url);
// da 'https://miodominio.com/...' diventa '/...'
return urlObj.pathname;
},
getWeekOfYear(data: Date) {
const startOfYear = new Date(data.getFullYear(), 0, 1);
const pastDaysOfYear = (data.getTime() - startOfYear.getTime()) / 86400000;
return Math.ceil((pastDaysOfYear + startOfYear.getDay() + 1) / 7);
},
// FINE ! // FINE !
// getLocale() { // getLocale() {

View File

@@ -1056,6 +1056,8 @@ export const useUserStore = defineStore('UserStore', {
}); });
}, },
async addNewSite(paramquery: any) { async addNewSite(paramquery: any) {
console.log(paramquery); console.log(paramquery);