Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d8e38fea6 | ||
|
|
f1f3f5ad07 | ||
|
|
6013a624f6 | ||
|
|
85db3b4a61 | ||
|
|
31161b6a32 | ||
|
|
6779b0ea25 | ||
|
|
f12341f780 | ||
|
|
43938023ee | ||
|
|
969e7b726e | ||
|
|
d37797fdad | ||
|
|
2ce8a72286 | ||
|
|
be0d7efca2 | ||
|
|
68dac1b2f4 |
4
.env
@@ -1,6 +1,6 @@
|
|||||||
VITE_APP_VERSION="1.2.62"
|
VITE_APP_VERSION="1.2.67"
|
||||||
VITE_LANG_DEFAULT="it"
|
VITE_LANG_DEFAULT="it"
|
||||||
VITE_PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
VITE_PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||||
VITE_SERVICE_WORKER_FILE="sw-1.2.62.js"
|
VITE_SERVICE_WORKER_FILE="sw-1.2.67.js"
|
||||||
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
|
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
|
||||||
VITE_VUE_ROUTER_MODE="history"
|
VITE_VUE_ROUTER_MODE="history"
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
VITE_APP_ID="18"
|
VITE_APP_ID="13"
|
||||||
VITE_APP_URL="https://localhost"
|
VITE_APP_URL="https://localhost"
|
||||||
VITE_MONGODB_HOST="https://localhost:3000"
|
VITE_MONGODB_HOST="https://localhost:3000"
|
||||||
VITE_LOGO_REG='gruppomacro-logo-full.png'
|
VITE_LOGO_REG='riso-logo-full.png'
|
||||||
VITE_PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
|
VITE_PUBLICKEY_PUSH='BDncvMiUZmjaCG2Kr1V9N0_33hOG-AuNSbHSvL24y2dzBiUjAxKm02emx5SeJvz2IGmtRf6YqCgopeQwCwUmZw8'
|
||||||
VITE_DEBUG="1"
|
VITE_DEBUG="1"
|
||||||
VITE_VUE_APP_ISTEST=0
|
VITE_VUE_APP_ISTEST=0
|
||||||
VITE_VUE_APP_INLOCALE=1
|
VITE_VUE_APP_INLOCALE=1
|
||||||
DIRECTORY_LOCAL="newfreeplanet"
|
DIRECTORY_LOCAL="myprojplanet_vite"
|
||||||
DIRECTORY_SERVER="freeplanet_serverside"
|
DIRECTORY_SERVER="freeplanet_serverside"
|
||||||
SERVERDIR_WEBSITE=""
|
SERVERDIR_WEBSITE=""
|
||||||
SERVERPW_WEBSITE=""
|
SERVERPW_WEBSITE=""
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
VITE_APP_ID="18"
|
VITE_APP_ID="13"
|
||||||
VITE_APP_URL="https://gruppomacro.app"
|
VITE_APP_URL="https://riso.app"
|
||||||
VITE_MONGODB_HOST="https://api.gruppomacro.app"
|
VITE_MONGODB_HOST="https://api.riso.app"
|
||||||
VITE_LOGO_REG='gruppomacro-logo-full.png'
|
VITE_LOGO_REG='riso-logo-full.png'
|
||||||
VITE_PUBLICKEY_PUSH="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
|
VITE_PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
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_piuchebuono_server"
|
DIRECTORY_SERVER=/var/www/nodejs_riso_server
|
||||||
SERVERDIR_WEBSITE="/var/www/gruppomacro.app"
|
SERVERDIR_WEBSITE="/var/www/riso.app"
|
||||||
SERVERPW_WEBSITE="pwdadmin@1AOK"
|
SERVERPW_WEBSITE="pwdadmin@1AOK"
|
||||||
PORT_SPA="8089"
|
|
||||||
PORT_PWA="8099"
|
|
||||||
3
.gitignore
vendored
@@ -30,7 +30,8 @@ yarn-error.log
|
|||||||
/.scripts
|
/.scripts
|
||||||
key.pem
|
key.pem
|
||||||
public/upload/
|
public/upload/
|
||||||
upload/
|
/upload/
|
||||||
|
scripts/_ALL_SITES/gruppomacro.app/public/upload/
|
||||||
._yarn.lock
|
._yarn.lock
|
||||||
.gitignore
|
.gitignore
|
||||||
._upload
|
._upload
|
||||||
|
|||||||
BIN
1_module copia.jpg
Normal file
|
After Width: | Height: | Size: 536 KiB |
@@ -10,7 +10,7 @@
|
|||||||
<meta name="description" content="<%= productDescription %>">
|
<meta name="description" content="<%= productDescription %>">
|
||||||
<meta name="format-detection" content="telephone=no">
|
<meta name="format-detection" content="telephone=no">
|
||||||
<meta name="msapplication-tap-highlight" content="no">
|
<meta name="msapplication-tap-highlight" content="no">
|
||||||
<meta name="version" content="1.2.62">
|
<meta name="version" content="1.2.67">
|
||||||
<meta name="viewport"
|
<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<% } %>">
|
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<% } %>">
|
||||||
|
|
||||||
|
|||||||
20
package.json
@@ -1,28 +1,28 @@
|
|||||||
{
|
{
|
||||||
"name": "gruppomacro",
|
"name": "riso",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "Gruppo Macro",
|
"productName": "Riso 💚 - Rete Italiana Scambi Orizzontali",
|
||||||
"productName": "Gruppo Macro",
|
"description": "Progetto RISO (Rete Italiana Scambi Orizzontali) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
"private": true,
|
"private": true,
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8089 APP_VERSION='1.2.62' quasar dev",
|
"dev": "APP_VERSION='1.2.67' PORT=8084 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.67' 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.67' 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": "APP_VERSION='1.2.62' quasar build -m spa",
|
"buildspa": "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=8099 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.67' 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",
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 81 KiB |
BIN
public/images/layers-2x.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
public/images/layers.png
Normal file
|
After Width: | Height: | Size: 696 B |
BIN
public/images/logo.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
public/images/marker-icon-2x.png
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/images/marker-icon.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 30 KiB |
BIN
public/images/riso-android-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/images/riso-android-icon-192x192.png
Normal file
|
After Width: | Height: | Size: 43 KiB |
BIN
public/images/riso-android-icon-384x384.png
Normal file
|
After Width: | Height: | Size: 138 KiB |
BIN
public/images/riso-android-icon-48x48.png
Normal file
|
After Width: | Height: | Size: 5.8 KiB |
BIN
public/images/riso-android-icon-512x512.png
Normal file
|
After Width: | Height: | Size: 185 KiB |
BIN
public/images/riso-android-icon-96x96.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/images/riso-apple-icon-114x114.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
public/images/riso-apple-icon-120x120.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
public/images/riso-apple-icon-144x144.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
BIN
public/images/riso-apple-icon-152x152.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
BIN
public/images/riso-apple-icon-180x180.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
public/images/riso-apple-icon-57x57.png
Normal file
|
After Width: | Height: | Size: 7.6 KiB |
BIN
public/images/riso-apple-icon-60x60.png
Normal file
|
After Width: | Height: | Size: 8.1 KiB |
BIN
public/images/riso-apple-icon-72x72.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
public/images/riso-apple-icon-76x76.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/images/riso-apple-icon.png
Normal file
|
After Width: | Height: | Size: 44 KiB |
BIN
public/images/riso-logo-full.png
Normal file
|
After Width: | Height: | Size: 424 KiB |
BIN
public/images/riso_home.png
Normal file
|
After Width: | Height: | Size: 279 KiB |
BIN
public/images/riso_home_dark.png
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
public/images/riso_services.png
Normal file
|
After Width: | Height: | Size: 124 KiB |
@@ -1,2 +0,0 @@
|
|||||||
!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
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
!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
|
|
||||||
BIN
public/myicons/favicon-16x16.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
public/myicons/favicon-32x32.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
public/myicons/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/noimg.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
@@ -1,2 +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("/")}}}();
|
!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("/")}}}();
|
||||||
//# sourceMappingURL=workbox-sw.js.map
|
//# sourceMappingURL=workbox-sw.js.map
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "cnm",
|
"name": "cnm",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "Comunita Nuovo Mondo",
|
"description": "Comunita Nuovo Mondo",
|
||||||
"productName": "ComunitaNuovoMondo",
|
"productName": "ComunitaNuovoMondo",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8083 APP_VERSION='1.2.62' quasar dev",
|
"dev": "PORT=8083 APP_VERSION='1.2.67' 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 quasar build -m pwa",
|
"buildpwa": "NODE_ENV=production quasar build -m pwa",
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
"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=8093 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.67' 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",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "freeplanet",
|
"name": "freeplanet",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "freeplanet",
|
"description": "freeplanet",
|
||||||
"productName": "freeplanet",
|
"productName": "freeplanet",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
@@ -9,11 +9,11 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8087 APP_VERSION='1.2.62' quasar dev",
|
"dev": "PORT=8087 APP_VERSION='1.2.67' 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.67' 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.67' 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": "quasar build -m spa",
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
"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=8097 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.67' 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",
|
||||||
|
|||||||
@@ -1,28 +1,28 @@
|
|||||||
{
|
{
|
||||||
"name": "gruppomacro",
|
"name": "gruppomacro",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "Gruppo Macro",
|
|
||||||
"productName": "Gruppo Macro",
|
"productName": "Gruppo Macro",
|
||||||
|
"description": "Il Gruppo Editoriale Macro, attivo dal 1987, è leader europeo nella pubblicazione di libri per il benessere e la consapevolezza. Con oltre 1.500 titoli, promuove una visione armonica del mondo, offrendo opere di autori internazionali e italiani come Gregg Braden, Bruce Lipton, Joe Dispenza, Louise Hay, Eckhart Tolle e molti altri. Scopri un'editoria che abbraccia il corpo, la mente, lo spirito e l'ecologia.",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
"private": true,
|
"private": true,
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8089 APP_VERSION='1.2.62' quasar dev",
|
"dev": "PORT=8089 APP_VERSION='1.2.67' 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.67' 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.67' 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": "APP_VERSION='1.2.62' quasar build -m spa",
|
"buildspa": "APP_VERSION='1.2.67' 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=8099 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.67' 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",
|
||||||
@@ -92,7 +92,8 @@
|
|||||||
"workbox-precaching": "^7.3.0",
|
"workbox-precaching": "^7.3.0",
|
||||||
"workbox-routing": "^7.3.0",
|
"workbox-routing": "^7.3.0",
|
||||||
"workbox-strategies": "^7.3.0",
|
"workbox-strategies": "^7.3.0",
|
||||||
"workbox-window": "^7.3.0"
|
"workbox-window": "^7.3.0",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.28.0",
|
"@eslint/js": "^9.28.0",
|
||||||
|
|||||||
BIN
scripts/_ALL_SITES/gruppomacro.app/public/noimg.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
@@ -217,11 +217,6 @@ const msg_website_it = {
|
|||||||
'1) Tramite <strong>Paypal</strong>:<br>' +
|
'1) Tramite <strong>Paypal</strong>:<br>' +
|
||||||
'<div style="font-size: 1.5rem; background-color: white; color: blue; border: solid 2px #f00; margin: 10px; padding: 10px; border-radius: 10px; " ' +
|
'<div style="font-size: 1.5rem; background-color: white; color: blue; border: solid 2px #f00; margin: 10px; padding: 10px; border-radius: 10px; " ' +
|
||||||
'class="row justify-around">' +
|
'class="row justify-around">' +
|
||||||
'<span><a href="https://paypal.me/paoloarena/1" target="_blank">1€</a></span>' +
|
|
||||||
'<span><a href="https://paypal.me/paoloarena/2" target="_blank">2€</a></span>' +
|
|
||||||
'<span><a href="https://paypal.me/paoloarena/5" target="_blank">5€</a></span>' +
|
|
||||||
'<span><a href="https://paypal.me/paoloarena/10" target="_blank">10€</a></span>' +
|
|
||||||
'<span><a href="https://paypal.me/paoloarena" target="_blank">scegli</a></span>' +
|
|
||||||
'</div><em>clicca sull\'importo per fare una <strong>donazione</strong> </em><br>' +
|
'</div><em>clicca sull\'importo per fare una <strong>donazione</strong> </em><br>' +
|
||||||
'<br>2) Tramite <strong>Satispay</strong>: <a href="https://www.satispay.com/app/match/link/money-box/S6Y-SVN--62712D42-35B0-4BB9-8511-410C2AB8CD45" target="_blank">Clicca qui</a><br>' +
|
'<br>2) Tramite <strong>Satispay</strong>: <a href="https://www.satispay.com/app/match/link/money-box/S6Y-SVN--62712D42-35B0-4BB9-8511-410C2AB8CD45" target="_blank">Clicca qui</a><br>' +
|
||||||
'<div style="font-size: 1rem; background-color: white; color: blue; border: solid 2px #f00; margin: 5px; padding: 5px; border-radius: 10px; " ' +
|
'<div style="font-size: 1rem; background-color: white; color: blue; border: solid 2px #f00; margin: 5px; padding: 5px; border-radius: 10px; " ' +
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "kolibrilab",
|
"name": "kolibrilab",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "kolibrilab",
|
"description": "kolibrilab",
|
||||||
"productName": "kolibrilab",
|
"productName": "kolibrilab",
|
||||||
"author": "Surya Paolo",
|
"author": "Surya Paolo",
|
||||||
@@ -8,11 +8,11 @@
|
|||||||
"keywords": [],
|
"keywords": [],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8083 APP_VERSION='1.2.62' quasar dev",
|
"dev": "PORT=8083 APP_VERSION='1.2.67' 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.67' 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.67' 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": "quasar build -m spa",
|
||||||
@@ -20,8 +20,8 @@
|
|||||||
"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 --ext .ts,.vue --ignore-path .gitignore ./ --fix > file.out.txt",
|
"fix": "eslint --ext .ts,.vue --ignore-path .gitignore ./ --fix > file.out.txt",
|
||||||
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.67' quasar dev",
|
||||||
"spanorefresh": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m spa",
|
"spanorefresh": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m spa",
|
||||||
"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"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "nutriben",
|
"name": "nutriben",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "Nutriben",
|
"description": "Nutriben",
|
||||||
"productName": "Nutriben",
|
"productName": "Nutriben",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
@@ -9,20 +9,20 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8093 APP_VERSION='1.2.62' quasar dev",
|
"dev": "PORT=8093 APP_VERSION='1.2.67' 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.67' 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.67' 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": "APP_VERSION='1.2.62' quasar build -m spa",
|
"buildspa": "APP_VERSION='1.2.67' 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=8099 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.67' 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",
|
||||||
|
|||||||
@@ -171,18 +171,7 @@ const msg_website_it = {
|
|||||||
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
||||||
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
||||||
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
|
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
|
||||||
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>'
|
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>' +
|
||||||
+ '<li>👨🏻💻 Con una <strong>piccola donazione</strong> per le spese dei Server, manutenzione e per i continui sviluppi e miglioramenti</li></ul>' +
|
|
||||||
'1) Tramite <strong><a href="https://paypal.me/paoloarena" target="_blank">Paypal</a></strong>:<br>' +
|
|
||||||
'<br>2) Tramite <strong>Satispay</strong>: <a href="https://www.satispay.com/app/match/link/money-box/S6Y-SVN--62712D42-35B0-4BB9-8511-410C2AB8CD45" target="_blank">Clicca qui</a><br>' +
|
|
||||||
'<div style="font-size: 1rem; background-color: white; color: blue; border: solid 2px #f00; margin: 5px; padding: 5px; border-radius: 10px; " ' +
|
|
||||||
'class="row justify-around">' +
|
|
||||||
'Se ancora non hai Satispay <a href="https://www.satispay.com/promo/PAOLOARENA4">Richiedila cliccando qui</a></br>' +
|
|
||||||
'</div>' +
|
|
||||||
'<br>3) Tramite <strong>Bonifico Bancario</strong>:<br>' +
|
|
||||||
'(Scrivi a Surya (<a href="https://t.me/surya1977">@surya1977</a>) per le coordinate</br>' +
|
|
||||||
'' +
|
|
||||||
'4) In alternativa scegli tu una forma di Dono <br />' +
|
|
||||||
'Grazie Mille per l\'Aiuto ed il Supporto' +
|
'Grazie Mille per l\'Aiuto ed il Supporto' +
|
||||||
'<br>',
|
'<br>',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "piuchebuono",
|
"name": "piuchebuono",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "PiuCheBuono",
|
"description": "PiuCheBuono",
|
||||||
"productName": "PiuCheBuono",
|
"productName": "PiuCheBuono",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
@@ -9,11 +9,11 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "PORT=8085 APP_VERSION='1.2.62' quasar dev",
|
"dev": "PORT=8085 APP_VERSION='1.2.67' 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.67' 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.67' 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": "quasar build -m spa",
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
"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=8085 APP_VERSION='1.2.62' quasar dev -m pwa",
|
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.67' 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",
|
||||||
|
|||||||
@@ -196,18 +196,7 @@ const msg_website_it = {
|
|||||||
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
||||||
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
||||||
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
|
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
|
||||||
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>'
|
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>' +
|
||||||
+ '<li>👨🏻💻 Con una <strong>piccola donazione</strong> per le spese dei Server, manutenzione e per i continui sviluppi e miglioramenti</li></ul>' +
|
|
||||||
'1) Tramite <strong><a href="https://paypal.me/paoloarena" target="_blank">Paypal</a></strong>:<br>' +
|
|
||||||
'<br>2) Tramite <strong>Satispay</strong>: <a href="https://www.satispay.com/app/match/link/money-box/S6Y-SVN--62712D42-35B0-4BB9-8511-410C2AB8CD45" target="_blank">Clicca qui</a><br>' +
|
|
||||||
'<div style="font-size: 1rem; background-color: white; color: blue; border: solid 2px #f00; margin: 5px; padding: 5px; border-radius: 10px; " ' +
|
|
||||||
'class="row justify-around">' +
|
|
||||||
'Se ancora non hai Satispay <a href="https://www.satispay.com/promo/PAOLOARENA4">Richiedila cliccando qui</a></br>' +
|
|
||||||
'</div>' +
|
|
||||||
'<br>3) Tramite <strong>Bonifico Bancario</strong>:<br>' +
|
|
||||||
'(Scrivi a Surya (<a href="https://t.me/surya1977">@surya1977</a>) per le coordinate</br>' +
|
|
||||||
'' +
|
|
||||||
'4) In alternativa scegli tu una forma di Dono <br />' +
|
|
||||||
'Grazie Mille per l\'Aiuto ed il Supporto' +
|
'Grazie Mille per l\'Aiuto ed il Supporto' +
|
||||||
'<br>',
|
'<br>',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
VITE_APP_ID="16"
|
VITE_APP_ID="16"
|
||||||
VITE_APP_URL="https://test.piuchebuono.app"
|
VITE_APP_URL="https://test.riso.app"
|
||||||
VITE_MONGODB_HOST="https://test.freeplanet.app:3001"
|
VITE_MONGODB_HOST="https://test.riso.app:3001"
|
||||||
VITE_LOGO_REG='piuchebuono-logo-full.png'
|
VITE_LOGO_REG='riso-logo-full.png'
|
||||||
VITE_PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
VITE_PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||||
VITE_DEBUG="1"
|
VITE_DEBUG="1"
|
||||||
VITE_VUE_APP_ISTEST=1
|
VITE_VUE_APP_ISTEST=1
|
||||||
DIRECTORY_LOCAL=newfreeplanet
|
DIRECTORY_LOCAL=newfreeplanet
|
||||||
DIRECTORY_SERVER=test.freeplanet_serverside
|
DIRECTORY_SERVER=test.freeplanet_serverside
|
||||||
SERVERDIR_WEBSITE="test.piuchebuono.app"
|
SERVERDIR_WEBSITE="test.riso.app"
|
||||||
SERVERPW_WEBSITE="pwdadmin@1AOK"
|
SERVERPW_WEBSITE="pwdadmin@1AOK"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "riso",
|
"name": "riso",
|
||||||
"version": "1.2.62",
|
"version": "1.2.67",
|
||||||
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
|
"description": "Siamo la Rete Italiana 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",
|
"productName": "Riso",
|
||||||
"author": "Surya",
|
"author": "Surya",
|
||||||
@@ -9,11 +9,11 @@
|
|||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "APP_VERSION='1.2.62' PORT=8084 quasar dev",
|
"dev": "APP_VERSION='1.2.67' PORT=8084 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.67' 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.67' 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": "quasar build -m spa",
|
||||||
@@ -21,42 +21,41 @@
|
|||||||
"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=8094 APP_VERSION='1.2.67' quasar dev -m pwa",
|
||||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.62' quasar dev",
|
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.67' 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"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -188,18 +188,7 @@ const msg_website_it = {
|
|||||||
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
descr: '<ul class="mylist" style="padding-left: 20px;">'
|
||||||
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
|
||||||
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
|
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
|
||||||
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>'
|
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>' +
|
||||||
+ '<li>👨🏻💻 Con una <strong>piccola donazione</strong> per le spese dei Server, manutenzione e per i continui sviluppi e miglioramenti</li></ul>' +
|
|
||||||
'1) Tramite <strong><a href="https://paypal.me/paoloarena" target="_blank">Paypal</a></strong>:<br>' +
|
|
||||||
'<br>2) Tramite <strong>Satispay</strong>: <a href="https://www.satispay.com/app/match/link/money-box/S6Y-SVN--62712D42-35B0-4BB9-8511-410C2AB8CD45" target="_blank">Clicca qui</a><br>' +
|
|
||||||
'<div style="font-size: 1rem; background-color: white; color: blue; border: solid 2px #f00; margin: 5px; padding: 5px; border-radius: 10px; " ' +
|
|
||||||
'class="row justify-around">' +
|
|
||||||
'Se ancora non hai Satispay <a href="https://www.satispay.com/promo/PAOLOARENA4">Richiedila cliccando qui</a></br>' +
|
|
||||||
'</div>' +
|
|
||||||
'<br>3) Tramite <strong>Bonifico Bancario</strong>:<br>' +
|
|
||||||
'(Scrivi a Surya (<a href="https://t.me/surya1977">@surya1977</a>) per le coordinate</br>' +
|
|
||||||
'' +
|
|
||||||
'4) In alternativa scegli tu una forma di Dono <br />' +
|
|
||||||
'Grazie Mille per l\'Aiuto ed il Supporto' +
|
'Grazie Mille per l\'Aiuto ed il Supporto' +
|
||||||
'<br>',
|
'<br>',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
TERMINA DI LAVORARE SU riso.app: (Sovrascrivo!)
|
TERMINA DI LAVORARE SU gruppomacro.app: (Sovrascrivo!)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
/* global workbox */
|
/* global workbox */
|
||||||
/* global cfgenv */
|
/* global cfgenv */
|
||||||
|
|
||||||
const VITE_APP_VERSION = '1.2.62';
|
const VITE_APP_VERSION = '1.2.67';
|
||||||
|
|
||||||
// Costanti di configurazione
|
// Costanti di configurazione
|
||||||
const DYNAMIC_CACHE = 'dynamic-cache-v2';
|
const DYNAMIC_CACHE = 'dynamic-cache-v2';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Gruppo Macro",
|
"name": "Riso",
|
||||||
"short_name": "GruppoMacro",
|
"short_name": "Riso",
|
||||||
"description": "",
|
"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",
|
"display": "standalone",
|
||||||
"orientation": "portrait",
|
"orientation": "portrait",
|
||||||
"background_color": "#fff",
|
"background_color": "#fff",
|
||||||
@@ -11,17 +11,47 @@
|
|||||||
"start_url": "/?homescreen=1",
|
"start_url": "/?homescreen=1",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "/images/gm-android-icon-512x512.png",
|
"src:": "/images/riso-android-icon-512x512.png",
|
||||||
"sizes": "512x512",
|
"sizes": "512x512",
|
||||||
"type": "image/png"
|
"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",
|
"sizes": "192x192",
|
||||||
"type": "image/png"
|
"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",
|
"sizes": "180x180",
|
||||||
"type": "image/png"
|
"type": "image/png"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ export default ({ router }) => {
|
|||||||
userAgent,
|
userAgent,
|
||||||
username: userStore.my?.username,
|
username: userStore.my?.username,
|
||||||
userId: userStore.my?._id,
|
userId: userStore.my?._id,
|
||||||
|
referrer: document?.referrer || '',
|
||||||
};
|
};
|
||||||
|
|
||||||
// Invia il tracciamento al backend
|
// Invia il tracciamento al backend
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ export const shared_consts = {
|
|||||||
CATALOGO: 310,
|
CATALOGO: 310,
|
||||||
RACCOLTA: 315,
|
RACCOLTA: 315,
|
||||||
TOOLSAI: 320,
|
TOOLSAI: 320,
|
||||||
|
CHATBOT: 325,
|
||||||
MAPPA: 350,
|
MAPPA: 350,
|
||||||
MAPPAUTENTI: 360,
|
MAPPAUTENTI: 360,
|
||||||
MAPPACOMUNI: 370,
|
MAPPACOMUNI: 370,
|
||||||
@@ -1976,6 +1977,14 @@ export const shared_consts = {
|
|||||||
value: 315,
|
value: 315,
|
||||||
label: 'RACCOLTA CATALOGHI',
|
label: 'RACCOLTA CATALOGHI',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
value: 320,
|
||||||
|
label: 'TOOLS AI',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 325,
|
||||||
|
label: 'CHATBOT',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
value: 350,
|
value: 350,
|
||||||
label: 'MAPPA',
|
label: 'MAPPA',
|
||||||
@@ -2581,4 +2590,9 @@ export const shared_consts = {
|
|||||||
NESSUNO: 0,
|
NESSUNO: 0,
|
||||||
A_TUTTI: 1,
|
A_TUTTI: 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
FILETYPE: {
|
||||||
|
IMG: 1,
|
||||||
|
PDF: 2,
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ export default defineComponent({
|
|||||||
]
|
]
|
||||||
const modelList = [
|
const modelList = [
|
||||||
{ label: 'DeepSeek', value: 'deepseek-chat' },
|
{ label: 'DeepSeek', value: 'deepseek-chat' },
|
||||||
|
{ label: 'Gemma-2B', value: 'gemma:2b' },
|
||||||
|
{ label: 'Gemma3', value: 'gemma3:12b' },
|
||||||
]
|
]
|
||||||
|
|
||||||
const outputTypeList = [
|
const outputTypeList = [
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ import type {
|
|||||||
IProduct,
|
IProduct,
|
||||||
IVariazione,
|
IVariazione,
|
||||||
IRecFields,
|
IRecFields,
|
||||||
|
ICatalog,
|
||||||
} from '@src/model';
|
} from '@src/model';
|
||||||
import { IBaseOrder } from '@src/model';
|
import { IBaseOrder } from '@src/model';
|
||||||
import { tools } from '@tools';
|
import { tools } from '@tools';
|
||||||
@@ -58,6 +59,11 @@ export default defineComponent({
|
|||||||
required: false,
|
required: false,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
myCatalog: {
|
||||||
|
type: Object as PropType<ICatalog | null>,
|
||||||
|
required: false,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
id: {
|
id: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
|
|||||||
@@ -55,7 +55,7 @@
|
|||||||
:class="[
|
:class="[
|
||||||
'flex', // Classi comuni
|
'flex', // Classi comuni
|
||||||
'image-container',
|
'image-container',
|
||||||
{ 'shadow-2': options.in_3d && !optcatalogo.pdf }, // Classe condizionale
|
{ alignContent: 'center', 'shadow-2': options.in_3d && !optcatalogo.pdf }, // Classe condizionale
|
||||||
scheda.testo_right_attaccato.font?.posiz_text ===
|
scheda.testo_right_attaccato.font?.posiz_text ===
|
||||||
costanti.POSIZ_TESTO.IN_BASSO
|
costanti.POSIZ_TESTO.IN_BASSO
|
||||||
? ''
|
? ''
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
scheda,
|
scheda,
|
||||||
true
|
true
|
||||||
) ?? '100%',
|
) ?? '100%',
|
||||||
height: tools.adjustSize(
|
'height': tools.adjustSize(
|
||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.dimensioni?.scheda_prodotto?.size?.height,
|
scheda.dimensioni?.scheda_prodotto?.size?.height,
|
||||||
scheda,
|
scheda,
|
||||||
@@ -84,10 +84,13 @@
|
|||||||
),
|
),
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<div style="position: relative">
|
<div
|
||||||
|
:style="`position: relative; align-content: center;`"
|
||||||
|
>
|
||||||
<a
|
<a
|
||||||
:href="myproduct.productInfo.link_macro"
|
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
:href="myCatalog?.disattiva_link_immagini ? null : myproduct.productInfo.link_macro"
|
||||||
|
:style="myCatalog?.disattiva_link_immagini ? 'cursor: normal !important;' : ''"
|
||||||
>
|
>
|
||||||
<q-img
|
<q-img
|
||||||
v-if="myproduct.productInfo"
|
v-if="myproduct.productInfo"
|
||||||
@@ -103,7 +106,7 @@
|
|||||||
:fit="scheda.dimensioni?.immagine_prodotto?.size?.fit ?? 'cover'"
|
:fit="scheda.dimensioni?.immagine_prodotto?.size?.fit ?? 'cover'"
|
||||||
:class="{
|
:class="{
|
||||||
'book-image-fixed': complete,
|
'book-image-fixed': complete,
|
||||||
'cursor-pointer': !complete,
|
'cursor-pointer': !complete && !myCatalog?.disattiva_link_immagini,
|
||||||
'shadow-4': !optcatalogo.pdf,
|
'shadow-4': !optcatalogo.pdf,
|
||||||
}"
|
}"
|
||||||
:img-class="optcatalogo.pdf ? 'border-box' : ''"
|
:img-class="optcatalogo.pdf ? 'border-box' : ''"
|
||||||
@@ -117,27 +120,30 @@
|
|||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.dimensioni?.immagine_prodotto?.size?.width,
|
scheda.dimensioni?.immagine_prodotto?.size?.width,
|
||||||
scheda,
|
scheda,
|
||||||
true
|
true,
|
||||||
|
options
|
||||||
) && {
|
) && {
|
||||||
width:
|
width:
|
||||||
tools.adjustSize(
|
tools.adjustSize(
|
||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.dimensioni?.immagine_prodotto.size?.width,
|
scheda.dimensioni?.immagine_prodotto.size?.width,
|
||||||
scheda,
|
scheda,
|
||||||
true
|
true,
|
||||||
|
options
|
||||||
) + ' !important',
|
) + ' !important',
|
||||||
}),
|
}),
|
||||||
height: scheda.dimensioni?.immagine_prodotto?.size?.height
|
'max-height': scheda.dimensioni?.immagine_prodotto?.size?.height
|
||||||
? tools.adjustSize(
|
? tools.adjustSize(
|
||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.dimensioni?.immagine_prodotto?.size?.height,
|
scheda.dimensioni?.immagine_prodotto?.size?.height,
|
||||||
scheda,
|
scheda,
|
||||||
false
|
false,
|
||||||
|
options
|
||||||
)
|
)
|
||||||
: undefined,
|
: undefined,
|
||||||
display: 'block',
|
display: 'block',
|
||||||
}"
|
}"
|
||||||
@click.stop.prevent="tools.openUrl(myproduct.productInfo.link_macro)"
|
@click.stop.prevent="myCatalog?.disattiva_link_immagini ? null : tools.openUrl(myproduct.productInfo.link_macro)"
|
||||||
>
|
>
|
||||||
</q-img>
|
</q-img>
|
||||||
</a>
|
</a>
|
||||||
@@ -152,18 +158,18 @@
|
|||||||
z-index: 10;
|
z-index: 10;
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div v-if="!optcatalogo.generazionePDFInCorso">
|
<div v-if="!optcatalogo.generazionePDFInCorso && !myCatalog?.disattiva_link_immagini">
|
||||||
<q-btn
|
<q-btn
|
||||||
icon="fas fa-external-link-alt"
|
icon="fas fa-external-link-alt"
|
||||||
color="primary"
|
color="primary"
|
||||||
class="no-print"
|
class="no-print"
|
||||||
rounded
|
rounded
|
||||||
size="sm"
|
size="sm"
|
||||||
@click.stop.prevent="tools.openUrl(myproduct.productInfo.link_macro)"
|
@click.stop.prevent="tools.openUrl(myCatalog?.disattiva_link_immagini ? null : myproduct.productInfo.link_macro)"
|
||||||
>
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!optcatalogo.generazionePDFInCorso">
|
<div v-if="!optcatalogo.generazionePDFInCorso && tools.isLogged() && !myCatalog?.disattiva_link_immagini">
|
||||||
<q-btn
|
<q-btn
|
||||||
icon-right="fas fa-cart-plus"
|
icon-right="fas fa-cart-plus"
|
||||||
color="positive"
|
color="positive"
|
||||||
@@ -177,7 +183,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-if="
|
v-if="
|
||||||
(tools.isCollaboratore()) &&
|
tools.isCollaboratore() &&
|
||||||
!optcatalogo.generazionePDFInCorso &&
|
!optcatalogo.generazionePDFInCorso &&
|
||||||
(editOn || options.show_edit_book)
|
(editOn || options.show_edit_book)
|
||||||
"
|
"
|
||||||
@@ -195,7 +201,7 @@
|
|||||||
color="primary"
|
color="primary"
|
||||||
icon="fas fa-pencil-alt"
|
icon="fas fa-pencil-alt"
|
||||||
v-if="
|
v-if="
|
||||||
(tools.isCollaboratore()) &&
|
tools.isCollaboratore() &&
|
||||||
!optcatalogo.generazionePDFInCorso &&
|
!optcatalogo.generazionePDFInCorso &&
|
||||||
(editOn || options.show_edit_book)
|
(editOn || options.show_edit_book)
|
||||||
"
|
"
|
||||||
@@ -203,7 +209,7 @@
|
|||||||
<q-list>
|
<q-list>
|
||||||
<q-item
|
<q-item
|
||||||
v-if="
|
v-if="
|
||||||
(tools.isCollaboratore()) &&
|
tools.isCollaboratore() &&
|
||||||
!optcatalogo.generazionePDFInCorso &&
|
!optcatalogo.generazionePDFInCorso &&
|
||||||
(editOn || options.show_edit_book)
|
(editOn || options.show_edit_book)
|
||||||
"
|
"
|
||||||
@@ -224,7 +230,7 @@
|
|||||||
</q-item>
|
</q-item>
|
||||||
<q-item
|
<q-item
|
||||||
v-if="
|
v-if="
|
||||||
(tools.isCollaboratore()) &&
|
tools.isCollaboratore() &&
|
||||||
!optcatalogo.generazionePDFInCorso &&
|
!optcatalogo.generazionePDFInCorso &&
|
||||||
(editOn || options.show_edit_book)
|
(editOn || options.show_edit_book)
|
||||||
"
|
"
|
||||||
@@ -488,7 +494,8 @@
|
|||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.barcode.size?.gap,
|
scheda.barcode.size?.gap,
|
||||||
scheda,
|
scheda,
|
||||||
true
|
true,
|
||||||
|
options
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
:width="
|
:width="
|
||||||
@@ -497,7 +504,8 @@
|
|||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.barcode.size?.width,
|
scheda.barcode.size?.width,
|
||||||
scheda,
|
scheda,
|
||||||
true
|
true,
|
||||||
|
options
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
@@ -506,7 +514,8 @@
|
|||||||
optcatalogo,
|
optcatalogo,
|
||||||
scheda.barcode.widthlines,
|
scheda.barcode.widthlines,
|
||||||
scheda,
|
scheda,
|
||||||
true
|
true,
|
||||||
|
options
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
:height="
|
:height="
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
v-if="
|
v-if="
|
||||||
((tools.getLinkUserTelegramByUser(myuser) ||
|
((tools.getLinkUserTelegramByUser(myuser) ||
|
||||||
(myuser.email && tools.isEmailVerifiedByUser(myuser))) &&
|
(myuser.email && tools.isEmailVerifiedByUser(myuser))) &&
|
||||||
tools.isUserOk()) ||
|
tools.isUserOk(true)) ||
|
||||||
showBtnActivities
|
showBtnActivities
|
||||||
"
|
"
|
||||||
class=""
|
class=""
|
||||||
@@ -40,18 +40,18 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="q-pa-xs">
|
<div class="q-pa-xs">
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="tools.getLinkUserTelegramByUser(myuser) && tools.isUserOk()"
|
v-if="tools.getLinkUserTelegramByUser(myuser) && tools.isUserOk(true)"
|
||||||
icon="fab fa-telegram"
|
icon="fab fa-telegram"
|
||||||
color="blue"
|
color="blue"
|
||||||
:type="tools.isUserOk() ? 'a' : 'btn'"
|
:type="tools.isUserOk(true) ? 'a' : 'btn'"
|
||||||
size="md"
|
size="md"
|
||||||
rounded
|
rounded
|
||||||
:label="$t('dialog.contact')"
|
:label="$t('dialog.contact')"
|
||||||
:href="
|
:href="
|
||||||
tools.isUserOk() ? tools.getLinkUserTelegramByUser(myuser) : null
|
tools.isUserOk(true) ? tools.getLinkUserTelegramByUser(myuser) : null
|
||||||
"
|
"
|
||||||
@click="
|
@click="
|
||||||
!tools.isUserOk() ? (showingtooltip = !showingtooltip) : false
|
!tools.isUserOk(true) ? (showingtooltip = !showingtooltip) : false
|
||||||
"
|
"
|
||||||
target="__blank"
|
target="__blank"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { shared_consts } from '@src/common/shared_vuejs'
|
|||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
import { costanti } from '@costanti'
|
import { costanti } from '@costanti'
|
||||||
import type { IOptCatalogo, IMyScheda, IProduct } from '@src/model'
|
import type { IOptCatalogo, IMyScheda, IProduct, ICatalog } from '@src/model'
|
||||||
|
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
@@ -33,6 +33,11 @@ export default defineComponent({
|
|||||||
required: false,
|
required: false,
|
||||||
default: null,
|
default: null,
|
||||||
},
|
},
|
||||||
|
myCatalog: {
|
||||||
|
type: Object as PropType<ICatalog | null>,
|
||||||
|
required: false,
|
||||||
|
default: null,
|
||||||
|
},
|
||||||
cosa: {
|
cosa: {
|
||||||
type: Number,
|
type: Number,
|
||||||
required: false,
|
required: false,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
@opendetail="opendetail"
|
@opendetail="opendetail"
|
||||||
v-model="optcatalogo"
|
v-model="optcatalogo"
|
||||||
:scheda="scheda"
|
:scheda="scheda"
|
||||||
|
:myCatalog="myCatalog"
|
||||||
>
|
>
|
||||||
</CCatalogoCard>
|
</CCatalogoCard>
|
||||||
<q-dialog
|
<q-dialog
|
||||||
@@ -38,6 +39,7 @@
|
|||||||
@selauthor="selauthor"
|
@selauthor="selauthor"
|
||||||
@updateproductmodif="updateproductmodif"
|
@updateproductmodif="updateproductmodif"
|
||||||
:scheda="scheda"
|
:scheda="scheda"
|
||||||
|
:myCatalog="myCatalog"
|
||||||
>
|
>
|
||||||
</CCatalogoCard>
|
</CCatalogoCard>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
0
src/components/CCsvToXls/CCsvToXls.scss
Executable file
70
src/components/CCsvToXls/CCsvToXls.ts
Executable file
@@ -0,0 +1,70 @@
|
|||||||
|
import {
|
||||||
|
PropType,
|
||||||
|
computed,
|
||||||
|
defineComponent,
|
||||||
|
onMounted,
|
||||||
|
ref,
|
||||||
|
watch,
|
||||||
|
reactive,
|
||||||
|
} from 'vue';
|
||||||
|
|
||||||
|
import * as XLSX from 'xlsx';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'CCsvToXls',
|
||||||
|
emits: [],
|
||||||
|
components: {},
|
||||||
|
props: {},
|
||||||
|
setup(props, { emit }) {
|
||||||
|
const xlsFile = ref<string | null>(null);
|
||||||
|
|
||||||
|
const selectFile = () => {
|
||||||
|
const fileInput = document.querySelector('input[type="file"]') as HTMLInputElement;
|
||||||
|
fileInput?.click();
|
||||||
|
};
|
||||||
|
|
||||||
|
const onFileChange = (event: Event) => {
|
||||||
|
const fileInput = event.target as HTMLInputElement;
|
||||||
|
const file = fileInput?.files ? fileInput.files[0] : null;
|
||||||
|
if (file && file.type === 'text/csv') {
|
||||||
|
convertCSVToXLS(file);
|
||||||
|
} else {
|
||||||
|
alert('Seleziona un file CSV valido!');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const convertCSVToXLS = (file: File) => {
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = (e: ProgressEvent<FileReader>) => {
|
||||||
|
const csvData = e.target?.result as string;
|
||||||
|
|
||||||
|
// Usa SheetJS per leggere il CSV
|
||||||
|
const worksheet = XLSX.utils.csv_to_sheet(csvData);
|
||||||
|
const workbook = XLSX.utils.book_new();
|
||||||
|
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
|
||||||
|
|
||||||
|
// Converte in file Excel (XLS)
|
||||||
|
const xlsBlob = XLSX.write(workbook, {
|
||||||
|
bookType: 'xls', // Specifica il formato 'xls'
|
||||||
|
type: 'blob',
|
||||||
|
});
|
||||||
|
|
||||||
|
// Crea un URL per il file XLS generato
|
||||||
|
xlsFile.value = URL.createObjectURL(xlsBlob);
|
||||||
|
};
|
||||||
|
|
||||||
|
reader.readAsText(file);
|
||||||
|
};
|
||||||
|
|
||||||
|
function mounted() {}
|
||||||
|
|
||||||
|
onMounted(mounted);
|
||||||
|
|
||||||
|
return {
|
||||||
|
onFileChange,
|
||||||
|
selectFile,
|
||||||
|
xlsFile,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
24
src/components/CCsvToXls/CCsvToXls.vue
Executable file
@@ -0,0 +1,24 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<q-btn label="Carica CSV" @click="selectFile" color="primary" />
|
||||||
|
<input
|
||||||
|
type="file"
|
||||||
|
ref="csvFile"
|
||||||
|
accept=".csv"
|
||||||
|
@change="onFileChange"
|
||||||
|
style="display: none"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="xlsFile"
|
||||||
|
:href="xlsFile"
|
||||||
|
download="converted-file.xls"
|
||||||
|
label="Scarica XLS"
|
||||||
|
color="secondary"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" src="./CCsvToXls.ts"></script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import './CCsvToXls.scss';
|
||||||
|
</style>
|
||||||
1
src/components/CCsvToXls/index.ts
Executable file
@@ -0,0 +1 @@
|
|||||||
|
export { default as CCsvToXls } from './CCsvToXls.vue'
|
||||||
@@ -1,28 +1,37 @@
|
|||||||
import { computed, defineComponent, onMounted, PropType, ref, watch, reactive, toRefs } from 'vue'
|
import {
|
||||||
|
computed,
|
||||||
|
defineComponent,
|
||||||
|
onMounted,
|
||||||
|
PropType,
|
||||||
|
ref,
|
||||||
|
watch,
|
||||||
|
reactive,
|
||||||
|
toRefs,
|
||||||
|
} from 'vue';
|
||||||
|
|
||||||
import type { ISearchList } from '../../model';
|
import type { ISearchList } from '../../model';
|
||||||
import { ICalcStat, IOperators } from '../../model'
|
import { ICalcStat, IOperators } from '../../model';
|
||||||
import { useUserStore } from '../../store/UserStore'
|
import { useUserStore } from '../../store/UserStore';
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router';
|
||||||
import { useGlobalStore } from '../../store/globalStore'
|
import { useGlobalStore } from '../../store/globalStore';
|
||||||
import { useCircuitStore } from '../../store/CircuitStore'
|
import { useCircuitStore } from '../../store/CircuitStore';
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import { shared_consts } from '@src/common/shared_vuejs'
|
import { shared_consts } from '@src/common/shared_vuejs';
|
||||||
import { costanti, IMainCard } from '@store/Modules/costanti'
|
import { costanti, IMainCard } from '@store/Modules/costanti';
|
||||||
|
|
||||||
import { CMyUser } from '../CMyUser'
|
import { CMyUser } from '../CMyUser';
|
||||||
import { CTitleBanner } from '../CTitleBanner'
|
import { CTitleBanner } from '../CTitleBanner';
|
||||||
import { CMyGroup } from '../CMyGroup'
|
import { CMyGroup } from '../CMyGroup';
|
||||||
import { CQRCode } from '../CQRCode'
|
import { CQRCode } from '../CQRCode';
|
||||||
import { CCopyBtnSmall } from '../CCopyBtnSmall'
|
import { CCopyBtnSmall } from '../CCopyBtnSmall';
|
||||||
import { CContactUser } from '../CContactUser'
|
import { CContactUser } from '../CContactUser';
|
||||||
import { CGridTableRec } from '../CGridTableRec'
|
import { CGridTableRec } from '../CGridTableRec';
|
||||||
import { CUserInfoAccount } from '../CUserInfoAccount'
|
import { CUserInfoAccount } from '../CUserInfoAccount';
|
||||||
import { tools } from '@tools'
|
import { tools } from '@tools';
|
||||||
import { useQuasar } from 'quasar'
|
import { useQuasar } from 'quasar';
|
||||||
|
|
||||||
import { colmyUserPeople } from '@store/Modules/fieldsTable'
|
import { colmyUserPeople, colmyUserGroup } from '@store/Modules/fieldsTable';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'CFindUsers',
|
name: 'CFindUsers',
|
||||||
@@ -39,51 +48,62 @@ export default defineComponent({
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
CMyUser, CMyGroup, CUserInfoAccount, CCopyBtnSmall,
|
CMyUser,
|
||||||
CTitleBanner, CContactUser, CGridTableRec, CQRCode
|
CMyGroup,
|
||||||
|
CUserInfoAccount,
|
||||||
|
CCopyBtnSmall,
|
||||||
|
CTitleBanner,
|
||||||
|
CContactUser,
|
||||||
|
CGridTableRec,
|
||||||
|
CQRCode,
|
||||||
},
|
},
|
||||||
setup(props) {
|
setup(props) {
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const globalStore = useGlobalStore();
|
||||||
|
const circuitStore = useCircuitStore();
|
||||||
|
const { t } = useI18n();
|
||||||
|
const $q = useQuasar();
|
||||||
|
const $router = useRouter();
|
||||||
|
|
||||||
const userStore = useUserStore()
|
const receiveRislist = computed(() =>
|
||||||
const globalStore = useGlobalStore()
|
globalStore.datastat ? globalStore.datastat.receiveRislist : []
|
||||||
const circuitStore = useCircuitStore()
|
);
|
||||||
const { t } = useI18n()
|
const receiveRislistgroup = computed(() =>
|
||||||
const $q = useQuasar()
|
globalStore.datastat ? globalStore.datastat.receiveRislistgroup : []
|
||||||
const $router = useRouter()
|
);
|
||||||
|
const listlinksreg = computed(() =>
|
||||||
|
globalStore.datastat ? globalStore.datastat.listlinksreg : []
|
||||||
|
);
|
||||||
|
|
||||||
const receiveRislist = computed(() => globalStore.datastat ? globalStore.datastat.receiveRislist : [])
|
const arrfilterand: any = ref([]);
|
||||||
const receiveRislistgroup = computed(() => globalStore.datastat ? globalStore.datastat.receiveRislistgroup : [])
|
const filtercustom: any = ref([]);
|
||||||
const listlinksreg = computed(() => globalStore.datastat ? globalStore.datastat.listlinksreg : [])
|
const searchList = ref(<ISearchList[]>[]);
|
||||||
|
|
||||||
const arrfilterand: any = ref([])
|
const filter = ref(costanti.FIND_PEOPLE);
|
||||||
const filtercustom: any = ref([])
|
|
||||||
const searchList = ref(<ISearchList[]>[])
|
|
||||||
|
|
||||||
const filter = ref(costanti.FIND_PEOPLE)
|
const loading = ref(false);
|
||||||
|
const tipoConto = ref(0);
|
||||||
|
|
||||||
const loading = ref(false)
|
const contact = computed(() => userStore.my);
|
||||||
const tipoConto = ref(0)
|
|
||||||
|
|
||||||
const contact = computed(() => userStore.my)
|
const searchType = ref('receivers');
|
||||||
|
|
||||||
const searchType = ref('receivers')
|
const usersList = ref(<any>{ show: false, title: '', list: [], listgroup: [] });
|
||||||
|
|
||||||
const usersList = ref(<any>{ show: false, title: '', list: [], listgroup: [] })
|
|
||||||
|
|
||||||
const options = ref([
|
const options = ref([
|
||||||
{
|
{
|
||||||
label: 'Lista dei Riceventi di oggi',
|
label: 'Lista dei Riceventi di oggi',
|
||||||
value: 'receivers'
|
value: 'receivers',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Cerca per Nome o Username',
|
label: 'Cerca per Nome o Username',
|
||||||
value: 'username'
|
value: 'username',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
label: 'Scansiona il QRCode del Destinatario',
|
label: 'Scansiona il QRCode del Destinatario',
|
||||||
value: 'qrcode'
|
value: 'qrcode',
|
||||||
},
|
},
|
||||||
])
|
]);
|
||||||
|
|
||||||
const arrTypesAccounts = ref(<any>[
|
const arrTypesAccounts = ref(<any>[
|
||||||
{
|
{
|
||||||
@@ -93,22 +113,20 @@ export default defineComponent({
|
|||||||
{
|
{
|
||||||
label: t('circuit.conticollettivi'),
|
label: t('circuit.conticollettivi'),
|
||||||
value: shared_consts.AccountType.CONTO_DI_GRUPPO,
|
value: shared_consts.AccountType.CONTO_DI_GRUPPO,
|
||||||
}
|
},
|
||||||
])
|
]);
|
||||||
|
|
||||||
|
|
||||||
function getFilterProvinceByRegion(recProvince: any, index: number, arr: any) {
|
function getFilterProvinceByRegion(recProvince: any, index: number, arr: any) {
|
||||||
const recreg: any = searchList.value.find((rec) => rec.table === 'regions')
|
const recreg: any = searchList.value.find((rec) => rec.table === 'regions');
|
||||||
if (recreg) {
|
if (recreg) {
|
||||||
return recProvince.reg === recreg.value
|
return recProvince.reg === recreg.value;
|
||||||
} else {
|
} else {
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function mounted() {
|
function mounted() {
|
||||||
|
usersList.value.listlinkreg = listlinksreg;
|
||||||
usersList.value.listlinkreg = listlinksreg
|
|
||||||
|
|
||||||
searchList.value = [
|
searchList.value = [
|
||||||
{
|
{
|
||||||
@@ -123,7 +141,7 @@ export default defineComponent({
|
|||||||
arrvalue: [],
|
arrvalue: [],
|
||||||
filter: null,
|
filter: null,
|
||||||
useinput: false,
|
useinput: false,
|
||||||
icon: 'fas fa-globe-europe'
|
icon: 'fas fa-globe-europe',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
visible: true,
|
visible: true,
|
||||||
@@ -131,7 +149,10 @@ export default defineComponent({
|
|||||||
table: 'provinces',
|
table: 'provinces',
|
||||||
key: 'profile.resid_province',
|
key: 'profile.resid_province',
|
||||||
type: costanti.FieldType.select,
|
type: costanti.FieldType.select,
|
||||||
value: tools.getCookie(tools.COOK_SEARCH + 'provinces_fr', costanti.FILTER_TUTTI),
|
value: tools.getCookie(
|
||||||
|
tools.COOK_SEARCH + 'provinces_fr',
|
||||||
|
costanti.FILTER_TUTTI
|
||||||
|
),
|
||||||
keycookie: '_fr',
|
keycookie: '_fr',
|
||||||
addall: true,
|
addall: true,
|
||||||
arrvalue: [],
|
arrvalue: [],
|
||||||
@@ -140,21 +161,48 @@ export default defineComponent({
|
|||||||
icon: 'flag',
|
icon: 'flag',
|
||||||
tablesel: 'provinces',
|
tablesel: 'provinces',
|
||||||
},
|
},
|
||||||
]
|
];
|
||||||
|
|
||||||
filtercustom.value = []
|
filtercustom.value = [];
|
||||||
arrfilterand.value = []
|
arrfilterand.value = [];
|
||||||
|
|
||||||
const filt_loaded = tools.getCookie(tools.COOK_SEARCH + tools.FRIENDS_SEARCH, costanti.FIND_PEOPLE, true)
|
const filt_loaded = tools.getCookie(
|
||||||
filter.value = filt_loaded ? filt_loaded : costanti.FIND_PEOPLE
|
tools.COOK_SEARCH + tools.FRIENDS_SEARCH,
|
||||||
|
costanti.FIND_PEOPLE,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
filter.value = filt_loaded ? filt_loaded : costanti.FIND_PEOPLE;
|
||||||
|
|
||||||
updateUserListRIS()
|
updateUserListRIS();
|
||||||
|
|
||||||
sendCoinsToClick()
|
sendCoinsToClick();
|
||||||
|
}
|
||||||
|
|
||||||
|
function extraparams_groups() {
|
||||||
|
const lk_tab = 'mygroups';
|
||||||
|
const lk_LF = 'userId';
|
||||||
|
const lk_FF = '_id';
|
||||||
|
const lk_as = 'group';
|
||||||
|
const af_objId_tab = 'myId';
|
||||||
|
|
||||||
|
return {
|
||||||
|
lookup1: {
|
||||||
|
lk_tab,
|
||||||
|
lk_LF,
|
||||||
|
lk_FF,
|
||||||
|
lk_as,
|
||||||
|
af_objId_tab,
|
||||||
|
lk_proj: {
|
||||||
|
groupname: 1,
|
||||||
|
title: 1,
|
||||||
|
descr: 1,
|
||||||
|
photos: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function extraparams() {
|
function extraparams() {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
lookup1: {
|
lookup1: {
|
||||||
lk_tab: 'provinces',
|
lk_tab: 'provinces',
|
||||||
@@ -175,38 +223,34 @@ export default defineComponent({
|
|||||||
'profile.resid_province': 1,
|
'profile.resid_province': 1,
|
||||||
'mycities.reg': 1,
|
'mycities.reg': 1,
|
||||||
perm: 1,
|
perm: 1,
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
onMounted(mounted);
|
||||||
onMounted(mounted)
|
|
||||||
|
|
||||||
async function updateUserListRIS() {
|
async function updateUserListRIS() {
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore();
|
||||||
|
|
||||||
loading.value = true
|
loading.value = true;
|
||||||
|
|
||||||
await globalStore.getStatSite()
|
await globalStore.getStatSite();
|
||||||
|
|
||||||
usersList.value.list = receiveRislist
|
usersList.value.list = receiveRislist;
|
||||||
usersList.value.listgroup = receiveRislistgroup
|
usersList.value.listgroup = receiveRislistgroup;
|
||||||
// usersList.value.listlinkreg = listlinksreg
|
// usersList.value.listlinkreg = listlinksreg
|
||||||
|
|
||||||
loading.value = false
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function sendCoinsToClick() {
|
async function sendCoinsToClick() {
|
||||||
|
|
||||||
usersList.value.show = true;
|
usersList.value.show = true;
|
||||||
usersList.value.title = t('circuit.sendcoins');
|
usersList.value.title = t('circuit.sendcoins');
|
||||||
usersList.value.list = receiveRislist
|
usersList.value.list = receiveRislist;
|
||||||
usersList.value.listgroup = receiveRislistgroup
|
usersList.value.listgroup = receiveRislistgroup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
userStore,
|
userStore,
|
||||||
tools,
|
tools,
|
||||||
@@ -218,6 +262,7 @@ export default defineComponent({
|
|||||||
t,
|
t,
|
||||||
extraparams,
|
extraparams,
|
||||||
colmyUserPeople,
|
colmyUserPeople,
|
||||||
|
colmyUserGroup,
|
||||||
searchList,
|
searchList,
|
||||||
options,
|
options,
|
||||||
searchType,
|
searchType,
|
||||||
@@ -227,6 +272,9 @@ export default defineComponent({
|
|||||||
receiveRislistgroup,
|
receiveRislistgroup,
|
||||||
tipoConto,
|
tipoConto,
|
||||||
CQRCode,
|
CQRCode,
|
||||||
}
|
extraparams_groups,
|
||||||
|
filtercustom,
|
||||||
|
arrfilterand,
|
||||||
|
};
|
||||||
},
|
},
|
||||||
})
|
});
|
||||||
|
|||||||
@@ -6,8 +6,29 @@
|
|||||||
:options="options"
|
:options="options"
|
||||||
color="primary"
|
color="primary"
|
||||||
/>
|
/>
|
||||||
<q-tab-panels v-model="searchType" keep-alive animated class="shadow-2 rounded-borders">
|
<q-tab-panels
|
||||||
|
v-model="searchType"
|
||||||
|
keep-alive
|
||||||
|
animated
|
||||||
|
class="shadow-2 rounded-borders"
|
||||||
|
>
|
||||||
<q-tab-panel name="username">
|
<q-tab-panel name="username">
|
||||||
|
<div class="column centeritems">
|
||||||
|
<q-btn-toggle
|
||||||
|
v-if="arrTypesAccounts.length > 0"
|
||||||
|
v-model="tipoConto"
|
||||||
|
class="my-custom-toggle"
|
||||||
|
no-caps
|
||||||
|
rounded
|
||||||
|
unelevated
|
||||||
|
toggle-color="primary"
|
||||||
|
color="white"
|
||||||
|
text-color="primary"
|
||||||
|
:options="arrTypesAccounts"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-if="tipoConto === shared_consts.AccountType.USER">
|
||||||
<CGridTableRec
|
<CGridTableRec
|
||||||
prop_mytable="users"
|
prop_mytable="users"
|
||||||
prop_mytitle=""
|
prop_mytitle=""
|
||||||
@@ -19,7 +40,7 @@
|
|||||||
nodataLabel=" "
|
nodataLabel=" "
|
||||||
:prop_search="true"
|
:prop_search="true"
|
||||||
:prop_showfilter="true"
|
:prop_showfilter="true"
|
||||||
hint="Cerca il nome o Username"
|
hint="Cerca il nome o Username della persona"
|
||||||
:hintinbtnsearch="true"
|
:hintinbtnsearch="true"
|
||||||
:findByDebounce="true"
|
:findByDebounce="true"
|
||||||
:showSearchOnTop="false"
|
:showSearchOnTop="false"
|
||||||
@@ -39,6 +60,41 @@
|
|||||||
:actionType="actionType"
|
:actionType="actionType"
|
||||||
>
|
>
|
||||||
</CGridTableRec>
|
</CGridTableRec>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO">
|
||||||
|
<CGridTableRec
|
||||||
|
prop_mytable="mygroups"
|
||||||
|
prop_mytitle=""
|
||||||
|
subtitle=""
|
||||||
|
:prop_mycolumns="colmyUserGroup"
|
||||||
|
prop_colkey="_id"
|
||||||
|
col_title="groupname"
|
||||||
|
:vertical="costanti.VISUTABLE_SCHEDA_USER"
|
||||||
|
nodataLabel=" "
|
||||||
|
:prop_search="true"
|
||||||
|
:prop_showfilter="true"
|
||||||
|
:hint="$t('otherpages.find_group')"
|
||||||
|
:hintinbtnsearch="true"
|
||||||
|
:findByDebounce="true"
|
||||||
|
:showSearchOnTop="false"
|
||||||
|
:finder="true"
|
||||||
|
:choose_visutype="false"
|
||||||
|
:finder_noNull="false"
|
||||||
|
:finder_noNullFilters="true"
|
||||||
|
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
|
||||||
|
:butt_modif_new="false"
|
||||||
|
noresultLabel="Username, Nome del gruppo non trovato"
|
||||||
|
:arrfilters="arrfilterand"
|
||||||
|
:filtercustom="filtercustom"
|
||||||
|
:prop_searchList="searchList"
|
||||||
|
:showType="costanti.SHOW_GROUPINFO"
|
||||||
|
:showCol="false"
|
||||||
|
:extraparams="extraparams_groups()"
|
||||||
|
:actionType="actionType"
|
||||||
|
:visufind="costanti.FIND_GROUP"
|
||||||
|
>
|
||||||
|
</CGridTableRec>
|
||||||
|
</div>
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
<q-tab-panel name="receivers">
|
<q-tab-panel name="receivers">
|
||||||
<div class="column centeritems">
|
<div class="column centeritems">
|
||||||
@@ -56,7 +112,10 @@
|
|||||||
/>
|
/>
|
||||||
|
|
||||||
<div v-if="tipoConto === shared_consts.AccountType.USER">
|
<div v-if="tipoConto === shared_consts.AccountType.USER">
|
||||||
<div v-for="(rec, i) in usersList.list" :key="i">
|
<div
|
||||||
|
v-for="(rec, i) in usersList.list"
|
||||||
|
:key="i"
|
||||||
|
>
|
||||||
<div class="q-pa-xs q-ma-xs q-border q-rounded my-custom-border">
|
<div class="q-pa-xs q-ma-xs q-border q-rounded my-custom-border">
|
||||||
<CMyUser
|
<CMyUser
|
||||||
:mycontact="rec"
|
:mycontact="rec"
|
||||||
@@ -74,11 +133,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO">
|
||||||
<div
|
<div
|
||||||
v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO"
|
v-for="(grp, i) in usersList.listgroup"
|
||||||
|
:key="i"
|
||||||
|
>
|
||||||
|
<CMyGroup
|
||||||
|
:mygrp="grp"
|
||||||
|
:visu="costanti.USER_GROUPS"
|
||||||
|
:noaut="true"
|
||||||
>
|
>
|
||||||
<div v-for="(grp, i) in usersList.listgroup" :key="i">
|
|
||||||
<CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS" :noaut="true">
|
|
||||||
</CMyGroup>
|
</CMyGroup>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -98,9 +162,13 @@
|
|||||||
>
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
|
|
||||||
<q-spinner-radio v-if="loading" class="q-ma-sm" color="brown" />
|
<q-spinner-radio
|
||||||
|
v-if="loading"
|
||||||
|
class="q-ma-sm"
|
||||||
|
color="brown"
|
||||||
|
/>
|
||||||
<div class="q-ma-sm"> </div>
|
<div class="q-ma-sm"> </div>
|
||||||
<br>
|
<br />
|
||||||
</div>
|
</div>
|
||||||
</q-tab-panel>
|
</q-tab-panel>
|
||||||
<q-tab-panel name="qrcode">
|
<q-tab-panel name="qrcode">
|
||||||
@@ -109,8 +177,7 @@
|
|||||||
</q-tab-panels>
|
</q-tab-panels>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" src="./CFindUsers.ts">
|
<script lang="ts" src="./CFindUsers.ts"></script>
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import './CFindUsers.scss';
|
@import './CFindUsers.scss';
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
import type { PropType } from 'vue';
|
import type { PropType } from 'vue';
|
||||||
import { defineComponent, ref, watch, onMounted, computed } from 'vue'
|
import { defineComponent, ref, watch, onMounted, computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useUserStore } from '@store/UserStore'
|
import { useUserStore } from '@store/UserStore';
|
||||||
import { useQuasar } from 'quasar'
|
import { useQuasar } from 'quasar';
|
||||||
import type { IImgGallery } from 'model';
|
import type { IImgGallery } from 'model';
|
||||||
import { IGallery } from 'model'
|
import { IGallery } from 'model';
|
||||||
import { CMyPage } from '@src/components/CMyPage'
|
import { CMyPage } from '@src/components/CMyPage';
|
||||||
import { tools } from '@tools'
|
import { tools } from '@tools';
|
||||||
import { useGlobalStore } from '@store/globalStore'
|
import { useGlobalStore } from '@store/globalStore';
|
||||||
import { costanti } from '@costanti'
|
import { costanti } from '@costanti';
|
||||||
|
import { shared_consts } from 'app/src/common/shared_vuejs';
|
||||||
|
import { Api } from 'app/src/store/Api';
|
||||||
|
import axios from 'app/src/boot/axios';
|
||||||
|
import { toolsext } from 'app/src/store/Modules/toolsext';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'CGallery',
|
name: 'CGallery',
|
||||||
@@ -41,6 +45,11 @@ export default defineComponent({
|
|||||||
required: false,
|
required: false,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
filetype: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
default: shared_consts.FILETYPE.IMG,
|
||||||
|
},
|
||||||
quality: {
|
quality: {
|
||||||
type: String,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
@@ -51,6 +60,11 @@ export default defineComponent({
|
|||||||
required: false,
|
required: false,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
fieldtype: {
|
||||||
|
type: Number,
|
||||||
|
required: false,
|
||||||
|
default: 0,
|
||||||
|
},
|
||||||
imgGall: {
|
imgGall: {
|
||||||
type: Object as PropType<IImgGallery[] | string | undefined | null>,
|
type: Object as PropType<IImgGallery[] | string | undefined | null>,
|
||||||
required: true,
|
required: true,
|
||||||
@@ -59,174 +73,182 @@ export default defineComponent({
|
|||||||
emits: ['showandsave'],
|
emits: ['showandsave'],
|
||||||
components: { CMyPage },
|
components: { CMyPage },
|
||||||
setup(props, { emit }) {
|
setup(props, { emit }) {
|
||||||
const $q = useQuasar()
|
const $q = useQuasar();
|
||||||
const { t } = useI18n()
|
const { t } = useI18n();
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore();
|
||||||
const globalStore = useGlobalStore()
|
const globalStore = useGlobalStore();
|
||||||
|
|
||||||
const displayGall = ref(false)
|
const displayGall = ref(false);
|
||||||
|
|
||||||
const gallerylist = ref(<IImgGallery[]>[])
|
const gallerylist = ref(<IImgGallery[]>[]);
|
||||||
const maximizedToggle = ref(true)
|
const maximizedToggle = ref(true);
|
||||||
|
|
||||||
const fullscreen = ref(false)
|
const fullscreen = ref(false);
|
||||||
const fullscreensrc = ref('')
|
const fullscreensrc = ref('');
|
||||||
|
|
||||||
const uploadOptions = ref({ // qui definisci le opzioni da passare
|
const upl = ref();
|
||||||
|
|
||||||
|
const uploadOptions = ref({
|
||||||
|
// qui definisci le opzioni da passare
|
||||||
quality: 'original', // esempio di opzione di qualità
|
quality: 'original', // esempio di opzione di qualità
|
||||||
resize: true // opzione per abilitare il ridimensionamento
|
resize: true, // opzione per abilitare il ridimensionamento
|
||||||
})
|
});
|
||||||
|
|
||||||
function isValid(myobj: any): boolean {
|
function isValid(myobj: any): boolean {
|
||||||
return (myobj && typeof myobj !== 'string' && typeof myobj !== 'undefined')
|
return myobj && typeof myobj !== 'string' && typeof myobj !== 'undefined';
|
||||||
}
|
}
|
||||||
|
|
||||||
const isListImgValid = computed(() => {
|
const isListImgValid = computed(() => {
|
||||||
const arr = getlistimages()
|
const arr = getlistimages();
|
||||||
if (arr && tools.isArray(arr)) {
|
if (arr && tools.isArray(arr)) {
|
||||||
return arr.length > 0
|
return arr.length > 0;
|
||||||
} else {
|
} else {
|
||||||
return !!arr
|
return !!arr;
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
|
|
||||||
watch(() => props.imgGall, (newval, oldval) => {
|
watch(
|
||||||
|
() => props.imgGall,
|
||||||
|
(newval, oldval) => {
|
||||||
if (isValid(props.imgGall)) {
|
if (isValid(props.imgGall)) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
gallerylist.value = props.imgGall
|
gallerylist.value = props.imgGall;
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
);
|
||||||
|
|
||||||
function created() {
|
function created() {
|
||||||
// console.log('created cgallery')
|
// console.log('created cgallery')
|
||||||
if (isValid(props.imgGall)) {
|
if (isValid(props.imgGall)) {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
let myarr: any = props.imgGall
|
let myarr: any = props.imgGall;
|
||||||
gallerylist.value = []
|
gallerylist.value = [];
|
||||||
if (Array.isArray(myarr)) {
|
if (Array.isArray(myarr)) {
|
||||||
myarr.forEach((pic: any) => {
|
myarr.forEach((pic: any) => {
|
||||||
if (pic.imagefile) {
|
if (pic?.imagefile) {
|
||||||
gallerylist.value.push(pic)
|
gallerylist.value.push(pic);
|
||||||
|
} else {
|
||||||
|
gallerylist.value.push(pic);
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
gallerylist.value = [
|
gallerylist.value = [];
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadOptions.value = {
|
uploadOptions.value = {
|
||||||
quality: props.quality,
|
quality: props.quality,
|
||||||
resize: props.resize,
|
resize: props.resize,
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getnumimages() {
|
function getnumimages() {
|
||||||
if (gallerylist.value)
|
if (gallerylist.value) return gallerylist.value.length;
|
||||||
return gallerylist.value.length
|
else return 0;
|
||||||
else
|
|
||||||
return 0
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getlistimages() {
|
function getlistimages() {
|
||||||
if (gallerylist.value)
|
if (gallerylist.value)
|
||||||
// return gallerylist.value.slice().sort((a: any, b: any) => a.order! - b.order!)
|
// return gallerylist.value.slice().sort((a: any, b: any) => a.order! - b.order!)
|
||||||
//return gallerylist.value.filter(filename => !filename)
|
//return gallerylist.value.filter(filename => !filename)
|
||||||
return gallerylist.value
|
return gallerylist.value;
|
||||||
else
|
else return null;
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDragStart(e: any) {
|
function onDragStart(e: any) {
|
||||||
console.log('onDragStart')
|
console.log('onDragStart');
|
||||||
e.dataTransfer.setData('text', e.target.id)
|
e.dataTransfer.setData('text', e.target.id);
|
||||||
e.dataTransfer.dropEffect = 'move'
|
e.dataTransfer.dropEffect = 'move';
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDragEnter(e: any) {
|
function onDragEnter(e: any) {
|
||||||
if (props.canModify) {
|
if (props.canModify) {
|
||||||
// don't drop on other draggables
|
// don't drop on other draggables
|
||||||
if (e.target.draggable !== true) {
|
if (e.target.draggable !== true) {
|
||||||
e.target.classList.add('drag-enter')
|
e.target.classList.add('drag-enter');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDragLeave(e: any) {
|
function onDragLeave(e: any) {
|
||||||
if (props.canModify) {
|
if (props.canModify) {
|
||||||
e.target.classList.remove('drag-enter')
|
e.target.classList.remove('drag-enter');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDragOver(e: any) {
|
function onDragOver(e: any) {
|
||||||
if (props.canModify) {
|
if (props.canModify) {
|
||||||
e.preventDefault()
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDrop(e: any) {
|
function onDrop(e: any) {
|
||||||
if (props.canModify) {
|
if (props.canModify) {
|
||||||
console.log('onDrop', e)
|
console.log('onDrop', e);
|
||||||
e.preventDefault()
|
e.preventDefault();
|
||||||
|
|
||||||
// don't drop on other draggables
|
// don't drop on other draggables
|
||||||
if (e.target.draggable === true) {
|
if (e.target.draggable === true) {
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gallerylist.value) {
|
if (gallerylist.value) {
|
||||||
|
const draggedId = e.dataTransfer.getData('text');
|
||||||
const draggedId = e.dataTransfer.getData('text')
|
let dragout = '';
|
||||||
let dragout = ''
|
|
||||||
try {
|
try {
|
||||||
dragout = e.target.parentNode.parentNode.parentNode.id
|
dragout = e.target.parentNode.parentNode.parentNode.id;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
dragout = ''
|
dragout = '';
|
||||||
}
|
}
|
||||||
const draggedEl = document.getElementById(draggedId)
|
const draggedEl = document.getElementById(draggedId);
|
||||||
console.log('draggedId', draggedId, 'draggedEl', draggedEl)
|
console.log('draggedId', draggedId, 'draggedEl', draggedEl);
|
||||||
console.log('dragout', dragout)
|
console.log('dragout', dragout);
|
||||||
|
|
||||||
// check if original parent node
|
// check if original parent node
|
||||||
if (draggedEl) {
|
if (draggedEl) {
|
||||||
if (draggedEl.parentNode === e.target) {
|
if (draggedEl.parentNode === e.target) {
|
||||||
e.target.classList.remove('drag-enter')
|
e.target.classList.remove('drag-enter');
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const myindexIn = gallerylist.value.findIndex((rec: any) => rec._id === draggedId)
|
const myindexIn = gallerylist.value.findIndex(
|
||||||
const myrecIn: IImgGallery = gallerylist.value[myindexIn]
|
(rec: any) => rec._id === draggedId
|
||||||
|
);
|
||||||
|
const myrecIn: IImgGallery = gallerylist.value[myindexIn];
|
||||||
|
|
||||||
let myrecOut: IImgGallery
|
let myrecOut: IImgGallery;
|
||||||
const myindexout = gallerylist.value.findIndex((rec: any) => rec._id === dragout)
|
const myindexout = gallerylist.value.findIndex(
|
||||||
myrecOut = gallerylist.value[myindexout]
|
(rec: any) => rec._id === dragout
|
||||||
|
);
|
||||||
|
myrecOut = gallerylist.value[myindexout];
|
||||||
|
|
||||||
if (myindexIn === myindexout)
|
if (myindexIn === myindexout) return;
|
||||||
return
|
|
||||||
|
|
||||||
|
tools.array_move(gallerylist.value, myindexIn, myindexout);
|
||||||
tools.array_move(gallerylist.value, myindexIn, myindexout)
|
|
||||||
|
|
||||||
// make the exchange
|
// make the exchange
|
||||||
// draggedEl.parentNode.removeChild(draggedEl)
|
// draggedEl.parentNode.removeChild(draggedEl)
|
||||||
// e.target.appendChild(draggedEl)
|
// e.target.appendChild(draggedEl)
|
||||||
e.target.classList.remove('drag-enter')
|
e.target.classList.remove('drag-enter');
|
||||||
|
|
||||||
save()
|
save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getclass() {
|
function getclass() {
|
||||||
return (props.edit || displayGall.value) ? (props.isInModif ? 'my-card-gallery' : 'my-card-gallery-noModif') : 'my-card-gallery-view' + ' text-center'
|
return props.edit || displayGall.value
|
||||||
|
? props.isInModif
|
||||||
|
? 'my-card-gallery'
|
||||||
|
: 'my-card-gallery-noModif'
|
||||||
|
: 'my-card-gallery-view' + ' text-center';
|
||||||
}
|
}
|
||||||
|
|
||||||
function getclimg() {
|
function getclimg() {
|
||||||
let mycl = (props.edit || displayGall.value) ? 'myimg' : 'myimg-view'
|
let mycl = props.edit || displayGall.value ? 'myimg' : 'myimg-view';
|
||||||
if (props.canModify && props.edit)
|
if (props.canModify && props.edit) mycl = mycl + ' myimg-modify';
|
||||||
mycl = mycl + ' myimg-modify'
|
return mycl;
|
||||||
return mycl
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*function getlastord() {
|
/*function getlastord() {
|
||||||
@@ -242,79 +264,81 @@ export default defineComponent({
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
function uploaded(info: any) {
|
function uploaded(info: any) {
|
||||||
console.log('uploaded', info)
|
console.log('uploaded', info);
|
||||||
|
|
||||||
let vers_img = tools.getGenerateVersionImage()
|
let vers_img = tools.getGenerateVersionImage();
|
||||||
if (gallerylist.value) {
|
if (gallerylist.value) {
|
||||||
console.log('vers_img', vers_img)
|
console.log('vers_img', vers_img);
|
||||||
if (props.single && info.files) {
|
if (props.single && info.files) {
|
||||||
console.log('gallerylist.value[0]', info.files[0].name)
|
console.log('gallerylist.value[0]', info.files[0].name);
|
||||||
if (info.files[0].name.imagefile) {
|
if (info.files[0].name.imagefile) {
|
||||||
gallerylist.value[0] = info.files[0].name
|
gallerylist.value[0] = info.files[0].name;
|
||||||
} else {
|
} else {
|
||||||
gallerylist.value[0] = { imagefile: info.files[0].name, vers_img }
|
gallerylist.value[0] = { imagefile: info.files[0].name, vers_img, fieldtype: props.fieldtype };
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
for (const file of info.files) {
|
for (const file of info.files) {
|
||||||
if (file.name.imagefile) {
|
if (file.name.imagefile) {
|
||||||
gallerylist.value.push(file.name)
|
gallerylist.value.push(file.name);
|
||||||
} else {
|
} else {
|
||||||
gallerylist.value.push({ imagefile: file.name, vers_img })
|
gallerylist.value.push({ imagefile: file.name, vers_img, fieldtype: props.fieldtype });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
save()
|
save();
|
||||||
|
|
||||||
console.log('CGALLERY gallerylist', gallerylist.value)
|
console.log('CGALLERY gallerylist', gallerylist.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function apri() {
|
function apri() {
|
||||||
displayGall.value = true
|
displayGall.value = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleted(rec: any) {
|
function deleted(rec: any) {
|
||||||
console.log('deleted', rec.imagefile)
|
console.log('deleted', rec.imagefile);
|
||||||
// console.table(mylistimages)
|
// console.table(mylistimages)
|
||||||
|
|
||||||
if (gallerylist.value) {
|
if (gallerylist.value) {
|
||||||
const index = gallerylist.value.findIndex((elem: any) => elem.imagefile === rec.imagefile)
|
const index = gallerylist.value.findIndex(
|
||||||
|
(elem: any) => elem.imagefile === rec.imagefile
|
||||||
|
);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
gallerylist.value.splice(index, 1)
|
gallerylist.value.splice(index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
gallerylist.value = gallerylist.value.filter((elem: any) => typeof elem.imagefile === 'string' && elem.imagefile)
|
gallerylist.value = gallerylist.value.filter(
|
||||||
|
(elem: any) => typeof elem.imagefile === 'string' && elem.imagefile
|
||||||
|
);
|
||||||
|
|
||||||
// mylistimages = mylistimages.pop((elem) => elem.imagefile !== rec.imagefile)
|
// mylistimages = mylistimages.pop((elem) => elem.imagefile !== rec.imagefile)
|
||||||
|
|
||||||
// console.table(mylistimages)
|
// console.table(mylistimages)
|
||||||
|
|
||||||
console.log('single', props.single)
|
console.log('single', props.single);
|
||||||
|
|
||||||
save()
|
save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getfullname(rec: any) {
|
function getfullname(rec: any) {
|
||||||
if (rec) {
|
if (rec) {
|
||||||
return tools.getDirUpload() + props.directory + '/' + rec.imagefile
|
return tools.getDirUpload() + props.directory + '/' + rec.imagefile;
|
||||||
} else {
|
} else {
|
||||||
return props.imagebak
|
return props.imagebak;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function copytoclipboard(rec: any) {
|
function copytoclipboard(rec: any) {
|
||||||
const filename = getfullname(rec)
|
const filename = getfullname(rec);
|
||||||
tools.copyStringToClipboard($q, filename, true)
|
tools.copyStringToClipboard($q, filename, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteFile(rec: any) {
|
function deleteFile(rec: any) {
|
||||||
console.log('deleteFile....')
|
console.log('deleteFile....');
|
||||||
const filename = getfullname(rec)
|
const filename = getfullname(rec);
|
||||||
const filenamerel = filename.replace(/^.*[\\\/]/, '')
|
const filenamerel = filename.replace(/^.*[\\\/]/, '');
|
||||||
|
|
||||||
$q.dialog({
|
$q.dialog({
|
||||||
message: 'Eliminare il file ' + filenamerel + '?',
|
message: 'Eliminare il file ' + filenamerel + '?',
|
||||||
@@ -327,64 +351,134 @@ export default defineComponent({
|
|||||||
cancel: true,
|
cancel: true,
|
||||||
persistent: false,
|
persistent: false,
|
||||||
}).onOk(async () => {
|
}).onOk(async () => {
|
||||||
|
|
||||||
// Delete File on server:
|
// Delete File on server:
|
||||||
const ris = await globalStore.DeleteFile({ filename })
|
const ris = await globalStore.DeleteFile({ filename });
|
||||||
// console.log('ris', ris)
|
// console.log('ris', ris)
|
||||||
//if (ris)
|
//if (ris)
|
||||||
deleted(rec)
|
deleted(rec);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function save() {
|
function save() {
|
||||||
console.log('CGallery save', gallerylist.value)
|
console.log('CGallery save', gallerylist.value);
|
||||||
if (gallerylist.value.length > 0) {
|
if (gallerylist.value.length > 0) {
|
||||||
if (!props.single) {
|
if (!props.single) {
|
||||||
emit('showandsave', gallerylist.value)
|
emit('showandsave', gallerylist.value);
|
||||||
} else {
|
} else {
|
||||||
emit('showandsave', gallerylist.value[0])
|
emit('showandsave', gallerylist.value[0]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
emit('showandsave', !props.single ? [] : '')
|
emit('showandsave', !props.single ? [] : '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function close() {
|
function close() {
|
||||||
return ''
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function getrealdirectory() {
|
function getrealdirectory() {
|
||||||
if (props.directory == 'productinfos')
|
if (props.directory == 'productinfos') return 'products';
|
||||||
return 'products'
|
else return props.directory;
|
||||||
else
|
|
||||||
return props.directory
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getParamDir() {
|
function getParamDir() {
|
||||||
return tools.escapeslash(getrealdirectory())
|
return tools.escapeslash(getrealdirectory());
|
||||||
}
|
}
|
||||||
|
|
||||||
function getUrl() {
|
function getUrl() {
|
||||||
const myurl = tools.geturlupload() + getParamDir()
|
const myurl = tools.geturlupload() + getParamDir();
|
||||||
console.log('myurl', myurl)
|
console.log('myurl', myurl);
|
||||||
return myurl
|
return myurl;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ImgFullScreen(mygallery: IImgGallery) {
|
function ImgFullScreen(mygallery: IImgGallery) {
|
||||||
fullscreen.value = true
|
fullscreen.value = true;
|
||||||
fullscreensrc.value = getfullname(mygallery)
|
fullscreensrc.value = getfullname(mygallery);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRejected(rejectedEntries: any) {
|
function onRejected(rejectedEntries: any) {
|
||||||
// Notify plugin needs to be installed
|
// Notify plugin needs to be installed
|
||||||
// https://quasar.dev/quasar-plugins/notify#Installation
|
// https://quasar.dev/quasar-plugins/notify#Installation
|
||||||
console.log('rejectedEntries', rejectedEntries)
|
console.log('rejectedEntries', rejectedEntries);
|
||||||
$q.notify({
|
$q.notify({
|
||||||
type: 'negative',
|
type: 'negative',
|
||||||
message: 'La Dimensione massima dell\'immagine è di 2 MB'
|
message: "La Dimensione massima dell'immagine è di 2 MB",
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
onMounted(created)
|
|
||||||
|
function getFileTypeStr() {
|
||||||
|
let tipo = '';
|
||||||
|
if (props.filetype === shared_consts.FILETYPE.IMG) tipo = 'Immagine';
|
||||||
|
else if (props.filetype === shared_consts.FILETYPE.PDF) tipo = 'PDF';
|
||||||
|
|
||||||
|
return tipo;
|
||||||
|
}
|
||||||
|
function getAccept() {
|
||||||
|
let tipo = '';
|
||||||
|
if (props.filetype === shared_consts.FILETYPE.IMG) tipo = 'image/*';
|
||||||
|
else if (props.filetype === shared_consts.FILETYPE.PDF) tipo = 'application/pdf';
|
||||||
|
|
||||||
|
return tipo;
|
||||||
|
}
|
||||||
|
|
||||||
|
function isPDF() {
|
||||||
|
return props.filetype === shared_consts.FILETYPE.PDF;
|
||||||
|
}
|
||||||
|
function isIMG() {
|
||||||
|
return props.filetype === shared_consts.FILETYPE.IMG;
|
||||||
|
}
|
||||||
|
const uploadFactory = async (files: readonly File[]) => {
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const url = getUrl();
|
||||||
|
|
||||||
|
const buildFormData = () => {
|
||||||
|
const fd = new FormData();
|
||||||
|
// "file" è il fieldName atteso dal backend (adegua se diverso)
|
||||||
|
files.forEach((f) => fd.append('file', f, f.name));
|
||||||
|
// opzionale: passaggio di options come nel tuo backend
|
||||||
|
fd.append('options', JSON.stringify({ quality: 'original' }));
|
||||||
|
return fd;
|
||||||
|
};
|
||||||
|
|
||||||
|
const sendOnce = async () => {
|
||||||
|
return Api.SendReq(url, 'POST', buildFormData());
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
await sendOnce();
|
||||||
|
} catch (err: any) {
|
||||||
|
const status = err?.response?.status;
|
||||||
|
try {
|
||||||
|
// usa la tua logica centralizzata
|
||||||
|
Api.checkTokenScaduto(
|
||||||
|
status,
|
||||||
|
/*evitaloop*/ false,
|
||||||
|
url,
|
||||||
|
'POST',
|
||||||
|
null,
|
||||||
|
/*setAuthToken*/ true
|
||||||
|
);
|
||||||
|
if (ret !== null) {
|
||||||
|
// token aggiornato -> ritenta UNA volta
|
||||||
|
await sendOnce();
|
||||||
|
} else {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
} catch (err2: any) {
|
||||||
|
// se l’handler segnala re-login, mostra messaggio e rilancia
|
||||||
|
const mystatus = err2?.status || err2?.code;
|
||||||
|
if (mystatus === toolsext.ERR_RETRY_LOGIN) {
|
||||||
|
$q.notify({
|
||||||
|
type: 'warning',
|
||||||
|
message: 'Sessione scaduta. Effettua nuovamente il login.',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
throw err2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
onMounted(created);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getlistimages,
|
getlistimages,
|
||||||
@@ -415,6 +509,13 @@ export default defineComponent({
|
|||||||
costanti,
|
costanti,
|
||||||
getrealdirectory,
|
getrealdirectory,
|
||||||
uploadOptions,
|
uploadOptions,
|
||||||
}
|
getFileTypeStr,
|
||||||
}
|
getAccept,
|
||||||
})
|
shared_consts,
|
||||||
|
isIMG,
|
||||||
|
isPDF,
|
||||||
|
upl,
|
||||||
|
uploadFactory,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|||||||
@@ -3,46 +3,128 @@
|
|||||||
|
|
||||||
<div v-if="!edit">
|
<div v-if="!edit">
|
||||||
<div class="q-pa-xs">
|
<div class="q-pa-xs">
|
||||||
<q-card v-if="isListImgValid" :class="getclass()" @click="apri">
|
<q-card
|
||||||
<div v-for="(mygallery, index) in getlistimages()" :key="index">
|
v-if="isListImgValid"
|
||||||
|
:class="getclass()"
|
||||||
|
@click="apri"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-for="(mygallery, index) in getlistimages()"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
<div v-if="index === 0">
|
<div v-if="index === 0">
|
||||||
<q-img :src="tools.getsrcimg(mygallery, getrealdirectory())" :class="getclimg()" :alt="mygallery.alt">
|
<div v-if="filetype === shared_consts.FILETYPE.IMG">
|
||||||
<div v-if="getnumimages() > 1" class="absolute-bottom text-shadow no-padding">
|
<q-img
|
||||||
|
:src="tools.getsrcimg(mygallery, getrealdirectory())"
|
||||||
|
:class="getclimg()"
|
||||||
|
:alt="mygallery.alt"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-if="getnumimages() > 1"
|
||||||
|
class="absolute-bottom text-shadow no-padding"
|
||||||
|
>
|
||||||
({{ getnumimages() }})
|
({{ getnumimages() }})
|
||||||
</div>
|
</div>
|
||||||
</q-img>
|
</q-img>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else-if="filetype === shared_consts.FILETYPE.PDF">
|
||||||
|
<div>{{ mygallery.imagefile }}</div>
|
||||||
|
<q-icon
|
||||||
|
name="fas fa-file-pdf"
|
||||||
|
:class="getclimg()"
|
||||||
|
size="lg"
|
||||||
|
:title="mygallery.alt"
|
||||||
|
>
|
||||||
|
</q-icon>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</q-card>
|
</q-card>
|
||||||
<div v-else-if="!isInModif && !isListImgValid && imagebak">
|
<div v-else-if="!isInModif && !isListImgValid && imagebak">
|
||||||
<q-card v-if="imagebak !== costanti.NESSUN_IMMAGINE" :class="getclass()" @click="ImgFullScreen(mygallery)">
|
<q-card
|
||||||
<q-img :src="imagebak" :class="getclimg()"> </q-img>
|
v-if="imagebak !== costanti.NESSUN_IMMAGINE"
|
||||||
</q-card>
|
:class="getclass()"
|
||||||
</div>
|
@click="ImgFullScreen(mygallery)"
|
||||||
<div v-else>
|
>
|
||||||
<q-card :class="getclass()" @click="apri">
|
<q-img
|
||||||
<q-img src="/images/noimg.png" :class="getclimg()" alt="no image">
|
:src="imagebak"
|
||||||
|
:class="getclimg()"
|
||||||
|
>
|
||||||
</q-img>
|
</q-img>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
<q-btn v-if="isInModif" color="primary" @click="apri" icon="fas fa-file-upload" :label="$t('gallery.load_image')">
|
<div v-else>
|
||||||
|
<q-card
|
||||||
|
:class="getclass()"
|
||||||
|
@click="apri"
|
||||||
|
>
|
||||||
|
<q-icon
|
||||||
|
v-if="filetype === shared_consts.FILETYPE.PDF"
|
||||||
|
name="fas fa-file-pdf"
|
||||||
|
size="lg"
|
||||||
|
:class="getclimg()"
|
||||||
|
alt="no image"
|
||||||
|
>
|
||||||
|
</q-icon>
|
||||||
|
<q-img
|
||||||
|
v-else
|
||||||
|
src="/images/noimg.png"
|
||||||
|
:class="getclimg()"
|
||||||
|
alt="no image"
|
||||||
|
>
|
||||||
|
</q-img>
|
||||||
|
</q-card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<q-btn
|
||||||
|
v-if="isInModif"
|
||||||
|
color="primary"
|
||||||
|
@click="apri"
|
||||||
|
icon="fas fa-file-upload"
|
||||||
|
:label="isIMG() ? $t('gallery.load_image') : $t('gallery.load_pdf')"
|
||||||
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div v-if="!isListImgValid">
|
<div v-if="!isListImgValid">
|
||||||
<q-btn flat round color="blue" icon="fas fa-tools" size="md" @click="apri"></q-btn>
|
<q-btn
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
color="blue"
|
||||||
|
icon="fas fa-tools"
|
||||||
|
size="md"
|
||||||
|
@click="apri"
|
||||||
|
></q-btn>
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<!--<q-draggable-rows
|
<!--<q-draggable-rows
|
||||||
v-model="order">-->
|
v-model="order">-->
|
||||||
|
|
||||||
<div v-for="(mygallery, index) in getlistimages()" :key="index">
|
<div
|
||||||
<div class="q-pa-sm q-gutter-sm" @dragenter="onDragEnter" @dragleave="onDragLeave" @dragover="onDragOver">
|
v-for="(mygallery, index) in getlistimages()"
|
||||||
<q-card :id="mygallery._id" :class="getclass()" :draggable="canModify" @dragstart="onDragStart"
|
:key="index"
|
||||||
@drop="onDrop">
|
>
|
||||||
<q-img :src="tools.getsrcimg(mygallery, getrealdirectory())" :class="getclimg()" :alt="mygallery.alt">
|
<div
|
||||||
|
class="q-pa-sm q-gutter-sm"
|
||||||
|
@dragenter="onDragEnter"
|
||||||
|
@dragleave="onDragLeave"
|
||||||
|
@dragover="onDragOver"
|
||||||
|
>
|
||||||
|
<q-card
|
||||||
|
:id="mygallery._id"
|
||||||
|
:class="getclass()"
|
||||||
|
:draggable="canModify"
|
||||||
|
@dragstart="onDragStart"
|
||||||
|
@drop="onDrop"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
:src="tools.getsrcimg(mygallery, getrealdirectory())"
|
||||||
|
:class="getclimg()"
|
||||||
|
:alt="mygallery.alt"
|
||||||
|
>
|
||||||
<div class="absolute-bottom text-shadow">
|
<div class="absolute-bottom text-shadow">
|
||||||
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
|
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
|
||||||
<div class="text-subtitle-carica text-trans">
|
<div class="text-subtitle-carica text-trans">
|
||||||
@@ -51,60 +133,134 @@
|
|||||||
</div>
|
</div>
|
||||||
</q-img>
|
</q-img>
|
||||||
|
|
||||||
<q-field v-if="canModify" stack-label dense label="Nome File">
|
<q-field
|
||||||
|
v-if="canModify"
|
||||||
|
stack-label
|
||||||
|
dense
|
||||||
|
label="Nome File"
|
||||||
|
>
|
||||||
<template v-slot:control>
|
<template v-slot:control>
|
||||||
<div class="self-center full-width no-outline" tabindex="0">
|
<div
|
||||||
|
class="self-center full-width no-outline"
|
||||||
|
tabindex="0"
|
||||||
|
>
|
||||||
{{ mygallery.imagefile }}
|
{{ mygallery.imagefile }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</q-field>
|
</q-field>
|
||||||
|
|
||||||
<q-input v-if="canModify" v-model="mygallery.description" dense :label="$t('proj.longdescr')"
|
<q-input
|
||||||
@keyup.enter.stop @update:model-value="save" debounce="1000" autofocus>
|
v-if="canModify"
|
||||||
|
v-model="mygallery.description"
|
||||||
|
dense
|
||||||
|
:label="$t('proj.longdescr')"
|
||||||
|
@keyup.enter.stop
|
||||||
|
@update:model-value="save"
|
||||||
|
debounce="1000"
|
||||||
|
autofocus
|
||||||
|
>
|
||||||
</q-input>
|
</q-input>
|
||||||
|
|
||||||
<q-card-actions align="center">
|
<q-card-actions align="center">
|
||||||
<q-btn v-if="canModify" flat round color="blue" icon="fas fa-copy" size="sm"
|
<q-btn
|
||||||
@click="copytoclipboard(mygallery)"></q-btn>
|
v-if="canModify"
|
||||||
<q-btn v-if="canModify" flat round color="red" icon="fas fa-trash-alt" size="sm"
|
flat
|
||||||
@click="deleteFile(mygallery)"></q-btn>
|
round
|
||||||
|
color="blue"
|
||||||
|
icon="fas fa-copy"
|
||||||
|
size="sm"
|
||||||
|
@click="copytoclipboard(mygallery)"
|
||||||
|
></q-btn>
|
||||||
|
<q-btn
|
||||||
|
v-if="canModify"
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
color="red"
|
||||||
|
icon="fas fa-trash-alt"
|
||||||
|
size="sm"
|
||||||
|
@click="deleteFile(mygallery)"
|
||||||
|
></q-btn>
|
||||||
</q-card-actions>
|
</q-card-actions>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-pa-sm">
|
<div class="q-pa-sm">
|
||||||
<div v-if="edit" class="q-gutter-sm" style="max-height: 200px; width: 208px">
|
<div
|
||||||
<q-uploader :label="single &&
|
v-if="edit"
|
||||||
gallerylist.length > 0 &&
|
class="q-gutter-sm"
|
||||||
gallerylist[0].imagefile !== ''
|
style="max-height: 200px; width: 208px"
|
||||||
|
>
|
||||||
|
<q-uploader
|
||||||
|
:label="
|
||||||
|
single && gallerylist.length > 0 && gallerylist[0].imagefile !== ''
|
||||||
? 'Sostituisci Immagine'
|
? 'Sostituisci Immagine'
|
||||||
: 'Aggiungi Immagine'
|
: 'Aggiungi Immagine'
|
||||||
" accept="image/*" :url="getUrl()" :headers="tools.getheaders()" :max-file-size="3000000"
|
"
|
||||||
:multiple="!single" auto-upload hide-upload-btn no-thumbnails @uploaded="uploaded" @rejected="onRejected"
|
:accept="getAccept()"
|
||||||
|
:url="getUrl()"
|
||||||
|
:headers="tools.getheaders()"
|
||||||
|
:max-file-size="3000000"
|
||||||
|
:multiple="!single"
|
||||||
|
auto-upload
|
||||||
|
hide-upload-btn
|
||||||
|
no-thumbnails
|
||||||
|
@uploaded="uploaded"
|
||||||
|
@rejected="onRejected"
|
||||||
style="width: 208px"
|
style="width: 208px"
|
||||||
:options="uploadOptions"></q-uploader>
|
:options="uploadOptions"
|
||||||
|
></q-uploader>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<q-dialog v-model="displayGall" persistent :maximized="maximizedToggle" transition-show="slide-up"
|
<q-dialog
|
||||||
transition-hide="slide-down">
|
v-model="displayGall"
|
||||||
|
persistent
|
||||||
|
:maximized="maximizedToggle"
|
||||||
|
transition-show="slide-up"
|
||||||
|
transition-hide="slide-down"
|
||||||
|
>
|
||||||
<q-card>
|
<q-card>
|
||||||
<q-bar class="bg-primary text-white">
|
<q-bar class="bg-primary text-white">
|
||||||
<q-space />
|
<q-space />
|
||||||
|
|
||||||
<q-btn dense flat icon="minimize" @click="maximizedToggle = false" :disable="!maximizedToggle">
|
<q-btn
|
||||||
<q-tooltip v-if="maximizedToggle" :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
|
dense
|
||||||
">Minimize</q-tooltip>
|
flat
|
||||||
|
icon="minimize"
|
||||||
|
@click="maximizedToggle = false"
|
||||||
|
:disable="!maximizedToggle"
|
||||||
|
>
|
||||||
|
<q-tooltip
|
||||||
|
v-if="maximizedToggle"
|
||||||
|
:class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`"
|
||||||
|
>Minimize</q-tooltip
|
||||||
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-btn dense flat icon="crop_square" @click="maximizedToggle = true" :disable="maximizedToggle">
|
<q-btn
|
||||||
<q-tooltip v-if="!maximizedToggle" :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
|
dense
|
||||||
">Maximize</q-tooltip>
|
flat
|
||||||
|
icon="crop_square"
|
||||||
|
@click="maximizedToggle = true"
|
||||||
|
:disable="maximizedToggle"
|
||||||
|
>
|
||||||
|
<q-tooltip
|
||||||
|
v-if="!maximizedToggle"
|
||||||
|
:class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`"
|
||||||
|
>Maximize</q-tooltip
|
||||||
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
<q-btn dense flat icon="close" v-close-popup>
|
<q-btn
|
||||||
<q-tooltip :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
|
dense
|
||||||
">{{ t('dialog.close') }}</q-tooltip>
|
flat
|
||||||
|
icon="close"
|
||||||
|
v-close-popup
|
||||||
|
>
|
||||||
|
<q-tooltip
|
||||||
|
:class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`"
|
||||||
|
>{{ t('dialog.close') }}</q-tooltip
|
||||||
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</q-bar>
|
</q-bar>
|
||||||
|
|
||||||
@@ -114,23 +270,64 @@
|
|||||||
|
|
||||||
<q-card-section class="q-pt-none">
|
<q-card-section class="q-pt-none">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div v-for="(mygallery, index) in getlistimages()" :key="index">
|
<div
|
||||||
<div class="q-pa-sm barwidth" @dragenter="onDragEnter" @dragleave="onDragLeave" @dragover="onDragOver">
|
v-for="(mygallery, index) in getlistimages()"
|
||||||
|
:key="index"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="q-pa-sm barwidth"
|
||||||
|
@dragenter="onDragEnter"
|
||||||
|
@dragleave="onDragLeave"
|
||||||
|
@dragover="onDragOver"
|
||||||
|
>
|
||||||
<q-bar class="bg-primary text-white">
|
<q-bar class="bg-primary text-white">
|
||||||
<q-btn flat round dense icon="menu" class="q-mr-sm" />
|
<q-btn
|
||||||
<q-btn v-if="canModify" flat round icon="fas fa-copy" size="sm"
|
flat
|
||||||
@click="copytoclipboard(mygallery)"></q-btn>
|
round
|
||||||
<div>Foto {{ index + 1 }}</div>
|
dense
|
||||||
|
icon="menu"
|
||||||
|
class="q-mr-sm"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="canModify"
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
icon="fas fa-copy"
|
||||||
|
size="sm"
|
||||||
|
@click="copytoclipboard(mygallery)"
|
||||||
|
></q-btn>
|
||||||
|
<div v-if="isIMG()">Foto {{ index + 1 }}</div>
|
||||||
|
<div v-else-if="isPDF()">PDF {{ index + 1 }}</div>
|
||||||
<q-space></q-space>
|
<q-space></q-space>
|
||||||
<q-btn v-if="canModify" flat round color="red" icon="fas fa-trash-alt"
|
<q-btn
|
||||||
@click="deleteFile(mygallery)"></q-btn>
|
v-if="canModify"
|
||||||
|
flat
|
||||||
|
round
|
||||||
|
color="red"
|
||||||
|
icon="fas fa-trash-alt"
|
||||||
|
@click="deleteFile(mygallery)"
|
||||||
|
></q-btn>
|
||||||
</q-bar>
|
</q-bar>
|
||||||
|
|
||||||
<q-card :id="mygallery._id" :class="getclass()" :data-ind="index" :draggable="canModify"
|
<q-card
|
||||||
@dragstart="onDragStart" @drop="onDrop">
|
:id="mygallery._id"
|
||||||
<q-img :src="tools.getsrcimg(mygallery, getrealdirectory())" :class="getclimg()"
|
:class="getclass()"
|
||||||
@click="ImgFullScreen(mygallery)" :alt="mygallery.alt">
|
:data-ind="index"
|
||||||
<div v-if="mygallery.description" class="absolute-bottom text-shadow">
|
:draggable="canModify"
|
||||||
|
@dragstart="onDragStart"
|
||||||
|
@drop="onDrop"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
v-if="isIMG()"
|
||||||
|
:src="tools.getsrcimg(mygallery, getrealdirectory())"
|
||||||
|
:class="getclimg()"
|
||||||
|
@click="ImgFullScreen(mygallery)"
|
||||||
|
:alt="mygallery?.alt"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
v-if="mygallery.description"
|
||||||
|
class="absolute-bottom text-shadow"
|
||||||
|
>
|
||||||
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
|
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
|
||||||
<div class="text-subtitle-carica text-trans">
|
<div class="text-subtitle-carica text-trans">
|
||||||
{{ mygallery.description }}
|
{{ mygallery.description }}
|
||||||
@@ -138,51 +335,117 @@
|
|||||||
</div>
|
</div>
|
||||||
</q-img>
|
</q-img>
|
||||||
<q-card-section>
|
<q-card-section>
|
||||||
<q-field v-if="canModify" stack-label dense label="Nome File">
|
<q-field
|
||||||
|
v-if="canModify"
|
||||||
|
stack-label
|
||||||
|
dense
|
||||||
|
label="Nome File"
|
||||||
|
>
|
||||||
<template v-slot:control>
|
<template v-slot:control>
|
||||||
<div class="self-center full-width no-outline" tabindex="0">
|
<div
|
||||||
|
class="self-center full-width no-outline"
|
||||||
|
tabindex="0"
|
||||||
|
>
|
||||||
{{ mygallery.imagefile }}
|
{{ mygallery.imagefile }}
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</q-field>
|
</q-field>
|
||||||
<q-input v-if="canModify" v-model="mygallery.description" dense :label="$t('proj.longdescr')"
|
<q-input
|
||||||
@keyup.enter.stop @update:model-value="save" debounce="1000" autofocus>
|
v-if="canModify"
|
||||||
|
v-model="mygallery.description"
|
||||||
|
dense
|
||||||
|
:label="$t('proj.longdescr')"
|
||||||
|
@keyup.enter.stop
|
||||||
|
@update:model-value="save"
|
||||||
|
debounce="1000"
|
||||||
|
autofocus
|
||||||
|
>
|
||||||
</q-input>
|
</q-input>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="canModify" class="q-pa-sm">
|
<div
|
||||||
<div class="q-gutter-sm" style="max-height: 200px; width: 208px">
|
v-if="canModify"
|
||||||
<q-uploader label="Aggiungi Immagine" accept="image/*" :url="getUrl()" :headers="tools.getheaders()"
|
class="q-pa-sm"
|
||||||
:max-file-size="40000000" multiple auto-upload hide-upload-btn no-thumbnails @uploaded="uploaded"
|
>
|
||||||
@rejected="onRejected" style="width: 208px"></q-uploader>
|
<div
|
||||||
|
class="q-gutter-sm"
|
||||||
|
style="max-height: 200px; width: 208px"
|
||||||
|
>
|
||||||
|
<q-uploader
|
||||||
|
:label="`Aggiungi ` + getFileTypeStr()"
|
||||||
|
:accept="getAccept()"
|
||||||
|
:url="getUrl()"
|
||||||
|
:headers="tools.getheaders()"
|
||||||
|
:max-file-size="40000000"
|
||||||
|
multiple
|
||||||
|
auto-upload
|
||||||
|
hide-upload-btn
|
||||||
|
no-thumbnails
|
||||||
|
@uploaded="uploaded"
|
||||||
|
@rejected="onRejected"
|
||||||
|
style="width: 208px"
|
||||||
|
></q-uploader>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isInModif && !isListImgValid && imagebak">
|
<div v-if="!isInModif && !isListImgValid && imagebak">
|
||||||
<q-card :class="getclass()" @click="ImgFullScreen(mygallery)">
|
<q-card
|
||||||
<q-img :src="imagebak" :class="getclimg()"> </q-img>
|
:class="getclass()"
|
||||||
|
@click="ImgFullScreen(mygallery)"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
:src="imagebak"
|
||||||
|
:class="getclimg()"
|
||||||
|
>
|
||||||
|
</q-img>
|
||||||
</q-card>
|
</q-card>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<q-card-actions align="right">
|
<q-card-actions align="right">
|
||||||
<q-btn v-if="canModify" flat label="Annulla" color="primary" v-close-popup />
|
<q-btn
|
||||||
<q-btn v-if="canModify" label="salva" color="primary" v-close-popup @click="save" />
|
v-if="canModify"
|
||||||
<q-btn v-if="!canModify" label="Chiudi" color="primary" v-close-popup />
|
flat
|
||||||
|
label="Annulla"
|
||||||
|
color="primary"
|
||||||
|
v-close-popup
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="canModify"
|
||||||
|
label="salva"
|
||||||
|
color="primary"
|
||||||
|
v-close-popup
|
||||||
|
@click="save"
|
||||||
|
/>
|
||||||
|
<q-btn
|
||||||
|
v-if="!canModify"
|
||||||
|
label="Chiudi"
|
||||||
|
color="primary"
|
||||||
|
v-close-popup
|
||||||
|
/>
|
||||||
</q-card-actions>
|
</q-card-actions>
|
||||||
</q-card-section>
|
</q-card-section>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
<q-dialog v-model="fullscreen" :maximized="false" transition-show="slide-up" transition-hide="slide-down">
|
<q-dialog
|
||||||
|
v-model="fullscreen"
|
||||||
|
:maximized="false"
|
||||||
|
transition-show="slide-up"
|
||||||
|
transition-hide="slide-down"
|
||||||
|
>
|
||||||
<q-card class="my-card">
|
<q-card class="my-card">
|
||||||
<q-img v-if="fullscreensrc" alt="fullscreen" :src="fullscreensrc" @click="fullscreen = false"></q-img>
|
<q-img
|
||||||
|
v-if="fullscreensrc"
|
||||||
|
alt="fullscreen"
|
||||||
|
:src="fullscreensrc"
|
||||||
|
@click="fullscreen = false"
|
||||||
|
></q-img>
|
||||||
</q-card>
|
</q-card>
|
||||||
</q-dialog>
|
</q-dialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" src="./CGallery.ts">
|
<script lang="ts" src="./CGallery.ts"></script>
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
@import './CGallery.scss';
|
@import './CGallery.scss';
|
||||||
|
|||||||
@@ -65,9 +65,9 @@ export default defineComponent({
|
|||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
heightcarousel: {
|
heightcarousel: {
|
||||||
type: Number,
|
type: String,
|
||||||
required: false,
|
required: false,
|
||||||
default: 0,
|
default: '',
|
||||||
},
|
},
|
||||||
enableExport: {
|
enableExport: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
|
|||||||
@@ -149,7 +149,7 @@
|
|||||||
:optval="fieldsTable.getKeyByTable(item.table)"
|
:optval="fieldsTable.getKeyByTable(item.table)"
|
||||||
:optlab="fieldsTable.getLabelByTable(item.table)"
|
:optlab="fieldsTable.getLabelByTable(item.table)"
|
||||||
:options="valoriopt(item, item.addall, item.addnone)"
|
:options="valoriopt(item, item.addall, item.addnone)"
|
||||||
:filter="item && item.filter ? item.filter : ''"
|
:filter="item && item.filter ? item.filter : null"
|
||||||
:filter_extra="item.filter_extra"
|
:filter_extra="item.filter_extra"
|
||||||
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server"
|
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server"
|
||||||
>
|
>
|
||||||
@@ -173,7 +173,7 @@
|
|||||||
:icon_alternative="item.icon"
|
:icon_alternative="item.icon"
|
||||||
:optval="fieldsTable.getKeyByTable(item.table)"
|
:optval="fieldsTable.getKeyByTable(item.table)"
|
||||||
:optlab="fieldsTable.getLabelByTable(item.table)"
|
:optlab="fieldsTable.getLabelByTable(item.table)"
|
||||||
:filter="item.filter"
|
:filter="item && item.filter ? item.filter : null"
|
||||||
:filter_extra="item.filter_extra"
|
:filter_extra="item.filter_extra"
|
||||||
:options="valoriopt(item, false)"
|
:options="valoriopt(item, false)"
|
||||||
:useinput="true"
|
:useinput="true"
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
stack-label
|
stack-label
|
||||||
:useinput="item.useinput"
|
:useinput="item.useinput"
|
||||||
:options="valoriopt(item, item.addall, item.addnone)"
|
:options="valoriopt(item, item.addall, item.addnone)"
|
||||||
:filter="item.filter"
|
:filter="item && item.filter ? item.filter : null"
|
||||||
class="combowidth"
|
class="combowidth"
|
||||||
:option-value="fieldsTable.getKeyByTable(item.table)"
|
:option-value="fieldsTable.getKeyByTable(item.table)"
|
||||||
>
|
>
|
||||||
@@ -825,7 +825,7 @@
|
|||||||
:optval="fieldsTable.getKeyByTable(item.table)"
|
:optval="fieldsTable.getKeyByTable(item.table)"
|
||||||
:optlab="fieldsTable.getLabelByTable(item.table)"
|
:optlab="fieldsTable.getLabelByTable(item.table)"
|
||||||
:options="valoriopt(item, item.addall, item.addnone)"
|
:options="valoriopt(item, item.addall, item.addnone)"
|
||||||
:filter="item.filter"
|
:filter="item && item.filter ? item.filter : null"
|
||||||
:filter_extra="item.filter_extra"
|
:filter_extra="item.filter_extra"
|
||||||
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server"
|
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server"
|
||||||
>
|
>
|
||||||
@@ -854,7 +854,7 @@
|
|||||||
:icon_alternative="item.icon"
|
:icon_alternative="item.icon"
|
||||||
:optval="fieldsTable.getKeyByTable(item.table)"
|
:optval="fieldsTable.getKeyByTable(item.table)"
|
||||||
:optlab="fieldsTable.getLabelByTable(item.table)"
|
:optlab="fieldsTable.getLabelByTable(item.table)"
|
||||||
:filter="item.filter"
|
:filter="item && item.filter ? item.filter : null"
|
||||||
:filter_extra="item.filter_extra"
|
:filter_extra="item.filter_extra"
|
||||||
:options="valoriopt(item, false)"
|
:options="valoriopt(item, false)"
|
||||||
:useinput="true"
|
:useinput="true"
|
||||||
@@ -879,7 +879,7 @@
|
|||||||
stack-label
|
stack-label
|
||||||
:useinput="item.useinput"
|
:useinput="item.useinput"
|
||||||
:options="valoriopt(item, item.addall, item.addnone)"
|
:options="valoriopt(item, item.addall, item.addnone)"
|
||||||
:filter="item.filter"
|
:filter="item && item.filter ? item.filter : null"
|
||||||
class="combowidth"
|
class="combowidth"
|
||||||
:option-value="fieldsTable.getKeyByTable(item.table)"
|
:option-value="fieldsTable.getKeyByTable(item.table)"
|
||||||
>
|
>
|
||||||
|
|||||||
23
src/components/CImportListaTitoli/CImportListaTitoli.scss
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
button {
|
||||||
|
margin-top: 10px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #4CAF50;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:disabled {
|
||||||
|
background-color: #ccc;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="file"] {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color: red;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
308
src/components/CImportListaTitoli/CImportListaTitoli.ts
Executable file
@@ -0,0 +1,308 @@
|
|||||||
|
import type { PropType } from 'vue';
|
||||||
|
import {
|
||||||
|
defineComponent,
|
||||||
|
ref,
|
||||||
|
toRef,
|
||||||
|
computed,
|
||||||
|
watch,
|
||||||
|
onMounted,
|
||||||
|
reactive,
|
||||||
|
onBeforeUnmount,
|
||||||
|
} from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useUserStore } from '@store/UserStore';
|
||||||
|
import { useGlobalStore } from '@store/globalStore';
|
||||||
|
import { useQuasar } from 'quasar';
|
||||||
|
|
||||||
|
import { tools } from '@tools';
|
||||||
|
import { useProducts } from '@store/Products';
|
||||||
|
|
||||||
|
import { shared_consts } from '@src/common/shared_vuejs';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
|
import { costanti } from '@costanti';
|
||||||
|
|
||||||
|
import * as XLSX from 'xlsx';
|
||||||
|
import { Api } from 'app/src/store/Api';
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'CImportListaTitoli',
|
||||||
|
emits: ['addArrayTitlesToList'],
|
||||||
|
props: {},
|
||||||
|
components: {},
|
||||||
|
setup(props, { emit }) {
|
||||||
|
const $q = useQuasar();
|
||||||
|
const { t } = useI18n();
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const globalStore = useGlobalStore();
|
||||||
|
const Products = useProducts();
|
||||||
|
// Stati reattivi
|
||||||
|
const fileData = ref<any[]>([]);
|
||||||
|
const searchResults = ref<any[]>([]);
|
||||||
|
const loading = ref(false);
|
||||||
|
const error = ref<string | null>(null);
|
||||||
|
|
||||||
|
const columns = ref([
|
||||||
|
{
|
||||||
|
name: 'title',
|
||||||
|
label: 'Titolo',
|
||||||
|
field: 'title',
|
||||||
|
align: 'left',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'isbn',
|
||||||
|
label: 'ISBN',
|
||||||
|
field: 'isbn',
|
||||||
|
align: 'left',
|
||||||
|
sortable: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'select',
|
||||||
|
label: 'Seleziona',
|
||||||
|
field: 'select',
|
||||||
|
align: 'left',
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
const onRequest = (props: any) => {
|
||||||
|
const { page, rowsPerPage, sortBy, descending } = props.pagination;
|
||||||
|
const filterValue = filter.value;
|
||||||
|
const filteredRows = searchResults.value
|
||||||
|
.filter((row) => {
|
||||||
|
const title = row.title?.toLowerCase() || '';
|
||||||
|
const author = row.author?.toLowerCase() || '';
|
||||||
|
const isbn = row.isbn?.toLowerCase() || '';
|
||||||
|
return (
|
||||||
|
title.includes(filterValue.toLowerCase()) ||
|
||||||
|
author.includes(filterValue.toLowerCase()) ||
|
||||||
|
isbn.includes(filterValue.toLowerCase())
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.sort((a, b) => {
|
||||||
|
const sortA = a[sortBy];
|
||||||
|
const sortB = b[sortBy];
|
||||||
|
if (descending) {
|
||||||
|
return sortA < sortB ? 1 : -1;
|
||||||
|
} else {
|
||||||
|
return sortA > sortB ? 1 : -1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pagination.rowsNumber = filteredRows.length;
|
||||||
|
pagination.page = page;
|
||||||
|
pagination.rowsPerPage = rowsPerPage;
|
||||||
|
pagination.sortBy = sortBy;
|
||||||
|
pagination.descending = descending;
|
||||||
|
|
||||||
|
return {
|
||||||
|
pagination,
|
||||||
|
rows: filteredRows.slice((page - 1) * rowsPerPage, page * rowsPerPage),
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const filter = ref('');
|
||||||
|
|
||||||
|
const importSelectedBooks = () => {
|
||||||
|
if (searchResults.value.length === 0) {
|
||||||
|
$q.notify({
|
||||||
|
message: t('Nessun libro selezionato'),
|
||||||
|
color: 'warning',
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aggiungi i libri selezionati alla lista dell'utente
|
||||||
|
emit(
|
||||||
|
'addArrayTitlesToList',
|
||||||
|
searchResults.value.filter((row) => row.select)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const pagination = reactive({
|
||||||
|
sortBy: 'title',
|
||||||
|
descending: false,
|
||||||
|
page: 1,
|
||||||
|
rowsPerPage: 50,
|
||||||
|
rowsNumber: searchResults.value.length,
|
||||||
|
});
|
||||||
|
|
||||||
|
const filteredResults = computed(() => {
|
||||||
|
const { sortBy, descending, page, rowsPerPage, rowsNumber } = pagination;
|
||||||
|
const firstIndex = (page - 1) * rowsPerPage;
|
||||||
|
const lastIndex = firstIndex + rowsPerPage;
|
||||||
|
|
||||||
|
return searchResults.value.slice(firstIndex, lastIndex).sort((a, b) => {
|
||||||
|
const aValue = a[sortBy];
|
||||||
|
const bValue = b[sortBy];
|
||||||
|
return descending ? bValue.localeCompare(aValue) : aValue.localeCompare(bValue);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Gestore del caricamento del file
|
||||||
|
const handleFileUpload = (event: Event) => {
|
||||||
|
const file = (event.target as HTMLInputElement).files?.[0];
|
||||||
|
if (file) {
|
||||||
|
loading.value = true;
|
||||||
|
error.value = null;
|
||||||
|
const reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onload = async () => {
|
||||||
|
try {
|
||||||
|
// Verifica il tipo di file (CSV o Excel) e parse
|
||||||
|
if (file.name.endsWith('.csv')) {
|
||||||
|
fileData.value = await parseCSV(reader.result as string);
|
||||||
|
} else if (file.name.endsWith('.xls') || file.name.endsWith('.xlsx')) {
|
||||||
|
fileData.value = await parseExcel(reader.result as ArrayBuffer);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
error.value = 'Errore nel parsing del file: ' + err;
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Leggi il file con il metodo appropriato basato sul tipo
|
||||||
|
if (file.name.endsWith('.csv')) {
|
||||||
|
reader.readAsText(file);
|
||||||
|
} else if (file.name.endsWith('.xls') || file.name.endsWith('.xlsx')) {
|
||||||
|
reader.readAsArrayBuffer(file); // ← Questa è la correzione principale
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// Funzione di ricerca dei libri
|
||||||
|
const searchBooksHandler = async () => {
|
||||||
|
if (!fileData.value || fileData.value.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
loading.value = true;
|
||||||
|
error.value = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Esegui la ricerca con la funzione di backend
|
||||||
|
searchResults.value = await searchBooks(fileData.value);
|
||||||
|
|
||||||
|
if (searchResults.value && searchResults.value.length > 0) {
|
||||||
|
$q.notify({
|
||||||
|
message: `Trovati ${searchResults.value.length} libri`,
|
||||||
|
color: 'positive',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (searchResults.value && searchResults.value.length === 0) {
|
||||||
|
$q.notify({
|
||||||
|
message: 'Nessun libro importabile',
|
||||||
|
color: 'negative',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
error.value = 'Errore nella ricerca dei libri';
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
async function parseCSV(csvText: string): Promise<any[]> {
|
||||||
|
// Funzione per analizzare un file CSV
|
||||||
|
const lines = csvText.split('\n');
|
||||||
|
const headers = lines[0].split(',');
|
||||||
|
const data = lines.slice(1).map((line) => {
|
||||||
|
const values = line.split(',');
|
||||||
|
return headers.reduce((acc, header, index) => {
|
||||||
|
acc[header.trim()] = values[index].trim();
|
||||||
|
return acc;
|
||||||
|
}, {} as any);
|
||||||
|
});
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function parseExcel(excelData: ArrayBuffer): Promise<any[]> {
|
||||||
|
try {
|
||||||
|
// Debug: verifica il tipo e la dimensione di excelData
|
||||||
|
console.log('Tipo di excelData:', typeof excelData);
|
||||||
|
console.log('È ArrayBuffer?', excelData instanceof ArrayBuffer);
|
||||||
|
console.log('Dimensione excelData:', excelData.byteLength);
|
||||||
|
|
||||||
|
// Usa direttamente l'ArrayBuffer con type: 'buffer'
|
||||||
|
const workbook = XLSX.read(excelData, { type: 'buffer' });
|
||||||
|
|
||||||
|
// Controllo se ci sono fogli
|
||||||
|
if (!workbook.SheetNames || workbook.SheetNames.length === 0) {
|
||||||
|
throw new Error('Nessun foglio trovato nel file Excel');
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Fogli disponibili:', workbook.SheetNames);
|
||||||
|
|
||||||
|
// Prendi il nome del primo foglio
|
||||||
|
const sheetName = workbook.SheetNames[0];
|
||||||
|
const sheet = workbook.Sheets[sheetName];
|
||||||
|
|
||||||
|
// Controllo se il foglio esiste
|
||||||
|
if (!sheet) {
|
||||||
|
throw new Error(`Il foglio "${sheetName}" non è stato trovato`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Debug: mostra la struttura del foglio
|
||||||
|
console.log('Foglio:', sheetName);
|
||||||
|
console.log('Range del foglio:', sheet['!ref']);
|
||||||
|
console.log(
|
||||||
|
'Tutte le celle:',
|
||||||
|
Object.keys(sheet).filter((key) => !key.startsWith('!'))
|
||||||
|
);
|
||||||
|
|
||||||
|
// Usa sheet_to_json per convertire il foglio in array di righe
|
||||||
|
const rows = XLSX.utils.sheet_to_json(sheet, {
|
||||||
|
header: 1,
|
||||||
|
defval: '',
|
||||||
|
raw: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('Righe estratte:', rows.length);
|
||||||
|
console.log('Prime 3 righe:', rows.slice(0, 3));
|
||||||
|
|
||||||
|
// Filtra le righe completamente vuote
|
||||||
|
const filteredRows = rows.filter(
|
||||||
|
(row: any[]) =>
|
||||||
|
Array.isArray(row) &&
|
||||||
|
row.some((cell) => cell !== null && cell !== undefined && cell !== '')
|
||||||
|
);
|
||||||
|
|
||||||
|
return filteredRows;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Errore durante l'analisi del file Excel:", error);
|
||||||
|
throw new Error(`Errore durante l'analisi del file Excel: ${error.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function searchBooks(books: any[]): Promise<any[]> {
|
||||||
|
const response = await Api.SendReq('/api/search-books', 'POST', { books });
|
||||||
|
|
||||||
|
if (response.status !== 200) {
|
||||||
|
throw new Error('Errore nella risposta del server');
|
||||||
|
}
|
||||||
|
|
||||||
|
return response.data; // Supponiamo che il backend ritorni un array di oggetti con id e title
|
||||||
|
}
|
||||||
|
|
||||||
|
function deselectAll() {
|
||||||
|
searchResults.value.forEach((row) => (row.select = false));
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
handleFileUpload,
|
||||||
|
searchBooks: searchBooksHandler,
|
||||||
|
searchResults,
|
||||||
|
loading,
|
||||||
|
error,
|
||||||
|
fileData,
|
||||||
|
pagination,
|
||||||
|
filteredResults,
|
||||||
|
importSelectedBooks,
|
||||||
|
filter,
|
||||||
|
onRequest,
|
||||||
|
columns,
|
||||||
|
deselectAll,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
});
|
||||||
87
src/components/CImportListaTitoli/CImportListaTitoli.vue
Executable file
@@ -0,0 +1,87 @@
|
|||||||
|
<template>
|
||||||
|
<div class="row justify-center">
|
||||||
|
<h3>Carica un file Excel contenente l'ISBN oppure il nome del titolo del libro</h3>
|
||||||
|
|
||||||
|
<!-- Input per il file -->
|
||||||
|
<input
|
||||||
|
type="file"
|
||||||
|
@change="handleFileUpload"
|
||||||
|
accept=".csv, .xls, .xlsx"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<q-btn
|
||||||
|
@click="searchBooks"
|
||||||
|
:disabled="!fileData || loading"
|
||||||
|
>
|
||||||
|
Cerca Libri
|
||||||
|
</q-btn>
|
||||||
|
<br />
|
||||||
|
</div>
|
||||||
|
<div class="">
|
||||||
|
<!-- Risultati della ricerca -->
|
||||||
|
<div v-if="searchResults.length">
|
||||||
|
<h3>{{ searchResults.length }} Libri trovati:</h3>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<q-btn
|
||||||
|
@click="deselectAll"
|
||||||
|
:disabled="!searchResults.length"
|
||||||
|
color="negative"
|
||||||
|
dense
|
||||||
|
>
|
||||||
|
Deseleziona tutti
|
||||||
|
</q-btn>
|
||||||
|
|
||||||
|
<q-table
|
||||||
|
:columns="columns"
|
||||||
|
:rows="searchResults"
|
||||||
|
row-key="_id"
|
||||||
|
:filter="filter"
|
||||||
|
:pagination.sync="pagination"
|
||||||
|
:loading="loading"
|
||||||
|
:rows-per-page-options="[0]"
|
||||||
|
@request="onRequest"
|
||||||
|
binary-state-sort
|
||||||
|
>
|
||||||
|
<template v-slot:top-right>
|
||||||
|
<!--<q-input
|
||||||
|
borderless
|
||||||
|
dense
|
||||||
|
debounce="300"
|
||||||
|
v-model="filter"
|
||||||
|
placeholder="Cerca"
|
||||||
|
>
|
||||||
|
<template v-slot:append>
|
||||||
|
<q-icon name="search" />
|
||||||
|
</template>
|
||||||
|
</q-input>-->
|
||||||
|
</template>
|
||||||
|
<template v-slot:body-cell-select="props">
|
||||||
|
<q-td :props="props">
|
||||||
|
<q-checkbox v-model="props.row.select" />
|
||||||
|
</q-td>
|
||||||
|
</template>
|
||||||
|
</q-table>
|
||||||
|
<q-btn
|
||||||
|
color="primary"
|
||||||
|
@click="importSelectedBooks"
|
||||||
|
:disabled="!searchResults.some((r) => r.select)"
|
||||||
|
label="Importa selezionati"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Messaggio di errore -->
|
||||||
|
<div
|
||||||
|
v-if="error"
|
||||||
|
class="error"
|
||||||
|
>
|
||||||
|
{{ error }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" src="./CImportListaTitoli.ts"></script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import './CImportListaTitoli.scss';
|
||||||
|
</style>
|
||||||
1
src/components/CImportListaTitoli/index.ts
Executable file
@@ -0,0 +1 @@
|
|||||||
|
export {default as CImportListaTitoli} from './CImportListaTitoli.vue'
|
||||||
@@ -647,7 +647,7 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function condividi() {
|
async function condividi() {
|
||||||
const mystr = "❇️ Ecco l'annuncio da condividere !\nPuoi copiarlo oppure inoltrarlo a chi vuoi.\n\nE\' utile pubblicarlo anche nel gruppo Telegram RISO territoriale o in <a href=\'https://t.me/riso_gruppo/1911\'>RISO RIevoluzione SOlidale</a> (Topic \'Annunci RISO\') "
|
const mystr = "❇️ Ecco l'annuncio da condividere !\nPuoi copiarlo oppure inoltrarlo a chi vuoi.\n\nE\' utile pubblicarlo anche nel gruppo Telegram RISO territoriale o in <a href=\'https://riso.app/riso_gruppo\'>☀️💚 RISO - Rete Italiana Scambi Orizzontali</a> (Topic \'Annunci RISO\') "
|
||||||
await tools.sendMsgTelegramCmd($q, t, shared_consts.MsgTeleg.SHARE_TEXT, false, mystr)
|
await tools.sendMsgTelegramCmd($q, t, shared_consts.MsgTeleg.SHARE_TEXT, false, mystr)
|
||||||
|
|
||||||
tools.copyToClip($q, getlinkpage(), true)
|
tools.copyToClip($q, getlinkpage(), true)
|
||||||
|
|||||||
@@ -186,8 +186,6 @@
|
|||||||
side
|
side
|
||||||
v-if="visu === costanti.USER_CIRCUITS && tools.isUserOk()"
|
v-if="visu === costanti.USER_CIRCUITS && tools.isUserOk()"
|
||||||
>
|
>
|
||||||
fidoConcessoUtente: {{ fidoConcessoUtente }}
|
|
||||||
myuser: {{ myuser }}
|
|
||||||
<q-item-label>
|
<q-item-label>
|
||||||
<q-btn
|
<q-btn
|
||||||
rounded
|
rounded
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export default defineComponent({
|
|||||||
function saveFielDim(rec: any, newval: any, col: IColGridTable) {
|
function saveFielDim(rec: any, newval: any, col: IColGridTable) {
|
||||||
// console.log('saveFielDim', rec, 'newval', newval, 'col', col)
|
// console.log('saveFielDim', rec, 'newval', newval, 'col', col)
|
||||||
|
|
||||||
if (col.fieldtype === costanti.FieldType.image) {
|
if (col.fieldtype === costanti.FieldType.imagerec) {
|
||||||
|
|
||||||
if (!rec[col.name]) {
|
if (!rec[col.name]) {
|
||||||
rec[col.name] = {}
|
rec[col.name] = {}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
@update:model-value="modifElem"
|
@update:model-value="modifElem"
|
||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
@save="saveFielDim"
|
@save="saveFielDim"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
|
|||||||
@@ -553,9 +553,9 @@ export default defineComponent({
|
|||||||
|
|
||||||
const iscatalogo = costanti.CATALOGO_FIELDS.includes(col.name);
|
const iscatalogo = costanti.CATALOGO_FIELDS.includes(col.name);
|
||||||
const isscheda = costanti.SCHEDA_FIELDS.includes(col.name);
|
const isscheda = costanti.SCHEDA_FIELDS.includes(col.name);
|
||||||
const isIImg = costanti.IMG_FIELDS.includes(col.name) && col.fieldtype === costanti.FieldType.image;
|
const isIImg = costanti.IMG_FIELDS.includes(col.name) && col.fieldtype === costanti.FieldType.imagerec;
|
||||||
|
|
||||||
if (col.fieldtype === costanti.FieldType.image) {
|
if (col.fieldtype === costanti.FieldType.imagerec) {
|
||||||
if (iscatalogo) {
|
if (iscatalogo) {
|
||||||
myel.value.catalogo[col.name] = newval.imagefile;
|
myel.value.catalogo[col.name] = newval.imagefile;
|
||||||
//console.log('SALVATO IN', col.name, newval.imagefile, 'RIS', myel.value.catalogo[col.name])
|
//console.log('SALVATO IN', col.name, newval.imagefile, 'RIS', myel.value.catalogo[col.name])
|
||||||
|
|||||||
@@ -711,7 +711,7 @@
|
|||||||
@update:model-value="modifElem"
|
@update:model-value="modifElem"
|
||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
|
|
||||||
@@ -760,7 +760,7 @@
|
|||||||
@update:model-value="modifElem"
|
@update:model-value="modifElem"
|
||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
<CMyFieldRec
|
<CMyFieldRec
|
||||||
@@ -772,7 +772,7 @@
|
|||||||
@update:model-value="modifElem"
|
@update:model-value="modifElem"
|
||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@@ -947,7 +947,7 @@
|
|||||||
@update:model-value="modifElem"
|
@update:model-value="modifElem"
|
||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
<CMyFieldRec
|
<CMyFieldRec
|
||||||
@@ -1009,7 +1009,7 @@
|
|||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:path="path"
|
:path="path"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
</div>
|
</div>
|
||||||
@@ -1036,7 +1036,7 @@
|
|||||||
@update:model-value="modifElem"
|
@update:model-value="modifElem"
|
||||||
:canEdit="true"
|
:canEdit="true"
|
||||||
:canModify="true"
|
:canModify="true"
|
||||||
:fieldtype="costanti.FieldType.image"
|
:fieldtype="costanti.FieldType.imagerec"
|
||||||
>
|
>
|
||||||
</CMyFieldRec>
|
</CMyFieldRec>
|
||||||
<div class="">
|
<div class="">
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { CImgTitle } from '../CImgTitle/index'
|
|||||||
import { CImgPoster } from '@src/components/CImgPoster'
|
import { CImgPoster } from '@src/components/CImgPoster'
|
||||||
import { CTitle } from '@src/components/CTitle/index'
|
import { CTitle } from '@src/components/CTitle/index'
|
||||||
import { CGridOriz } from '@src/components/CGridOriz/index'
|
import { CGridOriz } from '@src/components/CGridOriz/index'
|
||||||
|
import { ChatBot } from '@src/components/ChatBot/index'
|
||||||
import { CCatalogList } from '@src/components/CCatalogList/index'
|
import { CCatalogList } from '@src/components/CCatalogList/index'
|
||||||
import { CRaccoltaCataloghi } from '@src/components/CRaccoltaCataloghi/index'
|
import { CRaccoltaCataloghi } from '@src/components/CRaccoltaCataloghi/index'
|
||||||
import { tools } from '@tools'
|
import { tools } from '@tools'
|
||||||
@@ -80,6 +81,7 @@ export default defineComponent({
|
|||||||
CMapComuni, CMapUsers, CMapGetCoordinates, CMapEditAddressByCoord,
|
CMapComuni, CMapUsers, CMapGetCoordinates, CMapEditAddressByCoord,
|
||||||
CDashGroup, CMovements, CGridOriz, CQRCode, CCatalogList,
|
CDashGroup, CMovements, CGridOriz, CQRCode, CCatalogList,
|
||||||
CSearchProduct, CRaccoltaCataloghi, CPageViewStats,
|
CSearchProduct, CRaccoltaCataloghi, CPageViewStats,
|
||||||
|
ChatBot,
|
||||||
// , //CMapMarker,
|
// , //CMapMarker,
|
||||||
},
|
},
|
||||||
emits: ['selElemClick'],
|
emits: ['selElemClick'],
|
||||||
|
|||||||
@@ -974,6 +974,15 @@
|
|||||||
</div>
|
</div>
|
||||||
<CAITools></CAITools>
|
<CAITools></CAITools>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CHATBOT">
|
||||||
|
<div
|
||||||
|
v-if="editOn"
|
||||||
|
class="elemEdit"
|
||||||
|
>
|
||||||
|
CHATBOT:
|
||||||
|
</div>
|
||||||
|
<ChatBot></ChatBot>
|
||||||
|
</div>
|
||||||
<div v-else-if="myel.type === shared_consts.ELEMTYPE.NOTIFATTOP">
|
<div v-else-if="myel.type === shared_consts.ELEMTYPE.NOTIFATTOP">
|
||||||
<div
|
<div
|
||||||
v-if="editOn"
|
v-if="editOn"
|
||||||
|
|||||||
@@ -316,8 +316,6 @@
|
|||||||
>
|
>
|
||||||
<span style="font-size: 14px">{{ myvalue }}</span>
|
<span style="font-size: 14px">{{ myvalue }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Componente di selezione del colore -->
|
<!-- Componente di selezione del colore -->
|
||||||
@@ -333,7 +331,8 @@
|
|||||||
<div
|
<div
|
||||||
v-else-if="
|
v-else-if="
|
||||||
col.fieldtype === costanti.FieldType.string ||
|
col.fieldtype === costanti.FieldType.string ||
|
||||||
col.fieldtype === costanti.FieldType.crypted
|
col.fieldtype === costanti.FieldType.crypted ||
|
||||||
|
col.fieldtype === costanti.FieldType.username_telegram
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
@@ -359,6 +358,19 @@
|
|||||||
:rules="[(val) => !!val || !col.required || 'Campo richiesto']"
|
:rules="[(val) => !!val || !col.required || 'Campo richiesto']"
|
||||||
:label="col.visulabel ? addstrrequired + t(col.label_trans) : col.label"
|
:label="col.visulabel ? addstrrequired + t(col.label_trans) : col.label"
|
||||||
>
|
>
|
||||||
|
<template
|
||||||
|
v-if="col.fieldtype === costanti.FieldType.username_telegram"
|
||||||
|
v-slot:prepend
|
||||||
|
>
|
||||||
|
<span class="text-h7 text-blue">@</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<template
|
||||||
|
v-if="col.fieldtype === costanti.FieldType.username_telegram"
|
||||||
|
v-slot:prepend
|
||||||
|
>
|
||||||
|
<span class="text-h7 text-blue">@</span>
|
||||||
|
</template>
|
||||||
</q-input>
|
</q-input>
|
||||||
<q-field v-if="col.showLinkResult && myvalue">
|
<q-field v-if="col.showLinkResult && myvalue">
|
||||||
Diventerà: {{ tools.generateURL(col.showLinkResult, myvalue) }}
|
Diventerà: {{ tools.generateURL(col.showLinkResult, myvalue) }}
|
||||||
@@ -520,6 +532,7 @@
|
|||||||
{{ t(col.label_trans) }}
|
{{ t(col.label_trans) }}
|
||||||
</span>
|
</span>
|
||||||
<CGallery
|
<CGallery
|
||||||
|
:filetype="shared_consts.FILETYPE.IMG"
|
||||||
:imagebak="
|
:imagebak="
|
||||||
col.showpicprofile_ifnotset
|
col.showpicprofile_ifnotset
|
||||||
? userStore.getImgByProfile(row, true) === ''
|
? userStore.getImgByProfile(row, true) === ''
|
||||||
@@ -551,7 +564,7 @@
|
|||||||
</CAccomodation>
|
</CAccomodation>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-else-if="col.fieldtype === costanti.FieldType.image"
|
v-else-if="col.fieldtype === costanti.FieldType.imagerec"
|
||||||
style="text-align: center"
|
style="text-align: center"
|
||||||
>
|
>
|
||||||
<div v-if="canEdit">
|
<div v-if="canEdit">
|
||||||
@@ -559,6 +572,7 @@
|
|||||||
{{ t(col.label_trans ? col.label_trans : '') }}
|
{{ t(col.label_trans ? col.label_trans : '') }}
|
||||||
</span>
|
</span>
|
||||||
<CGallery
|
<CGallery
|
||||||
|
:filetype="shared_consts.FILETYPE.IMG"
|
||||||
:imagebak="
|
:imagebak="
|
||||||
col.showpicprofile_ifnotset
|
col.showpicprofile_ifnotset
|
||||||
? userStore.getImgByProfile(row['profile'], true)
|
? userStore.getImgByProfile(row['profile'], true)
|
||||||
@@ -619,6 +633,76 @@
|
|||||||
></q-btn>
|
></q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-else-if="col.fieldtype === costanti.FieldType.pdf"
|
||||||
|
style="text-align: center"
|
||||||
|
>
|
||||||
|
<div v-if="canEdit">
|
||||||
|
<span class="text-h7 text-weight-bold row justify-center">
|
||||||
|
{{ t(col.label_trans ? col.label_trans : '') }}
|
||||||
|
</span>
|
||||||
|
<CGallery
|
||||||
|
:filetype="shared_consts.FILETYPE.PDF"
|
||||||
|
:imagebak="
|
||||||
|
col.showpicprofile_ifnotset
|
||||||
|
? userStore.getImgByProfile(row['profile'], true)
|
||||||
|
: ''
|
||||||
|
"
|
||||||
|
:title="tools.getTitleGall(table)"
|
||||||
|
:directory="tools.getDirectoryGall(myrow, table, mypath)"
|
||||||
|
:imgGall="
|
||||||
|
myvalue && myvalue.imagefile
|
||||||
|
? [myvalue]
|
||||||
|
: [{ imagefile: myvalue, vers_img: 1 }]
|
||||||
|
"
|
||||||
|
:edit="isviewfield()"
|
||||||
|
:canModify="canModify"
|
||||||
|
:isInModif="isInModif"
|
||||||
|
:single="true"
|
||||||
|
@update:imgGall="changevalRec"
|
||||||
|
@showandsave="Savedb"
|
||||||
|
>
|
||||||
|
</CGallery>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div
|
||||||
|
v-if="myvalue"
|
||||||
|
class="text-center"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
icon="fas fa-file-pdf"
|
||||||
|
class="text-center"
|
||||||
|
style="height: 100px; width: 100px"
|
||||||
|
alt="foto"
|
||||||
|
>
|
||||||
|
</q-img>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="text-center"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
:src="
|
||||||
|
col.showpicprofile_ifnotset
|
||||||
|
? userStore.getImgByProfile(row['profile'], true)
|
||||||
|
: '/images/noimg-user.svg'
|
||||||
|
"
|
||||||
|
class="text-center"
|
||||||
|
style="height: 100px; width: 100px"
|
||||||
|
alt="nessun PDF"
|
||||||
|
>
|
||||||
|
</q-img>
|
||||||
|
</div>
|
||||||
|
<q-btn
|
||||||
|
v-if="myvalue"
|
||||||
|
label="Rimuovi Foto"
|
||||||
|
color="blue"
|
||||||
|
icon="fas fa-trash-alt"
|
||||||
|
size="sm"
|
||||||
|
@click="removephoto"
|
||||||
|
></q-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div v-else-if="col.fieldtype === costanti.FieldType.image_and_filename">
|
<div v-else-if="col.fieldtype === costanti.FieldType.image_and_filename">
|
||||||
<div v-if="canEdit">
|
<div v-if="canEdit">
|
||||||
{{ t('reg.photo') }}
|
{{ t('reg.photo') }}
|
||||||
@@ -643,6 +727,77 @@
|
|||||||
? [myvalue]
|
? [myvalue]
|
||||||
: [{ imagefile: myvalue, vers_img: 1 }]
|
: [{ imagefile: myvalue, vers_img: 1 }]
|
||||||
"
|
"
|
||||||
|
:fieldtype="col.fieldtype"
|
||||||
|
:edit="isviewfield()"
|
||||||
|
:canModify="canModify"
|
||||||
|
:isInModif="isInModif"
|
||||||
|
:single="true"
|
||||||
|
@update:imgGall="changevalRec"
|
||||||
|
@showandsave="Savedb"
|
||||||
|
>
|
||||||
|
</CGallery>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<div
|
||||||
|
v-if="myvalue"
|
||||||
|
class="text-center"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
:src="myvalue"
|
||||||
|
class="text-center"
|
||||||
|
style="height: 100px; width: 100px"
|
||||||
|
alt="foto"
|
||||||
|
>
|
||||||
|
</q-img>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-else
|
||||||
|
class="text-center"
|
||||||
|
>
|
||||||
|
<q-img
|
||||||
|
:src="
|
||||||
|
col.showpicprofile_ifnotset
|
||||||
|
? userStore.getImgByProfile(row['profile'], true)
|
||||||
|
: '/images/noimg-user.svg'
|
||||||
|
"
|
||||||
|
class="text-center"
|
||||||
|
style="height: 100px; width: 100px"
|
||||||
|
alt="nessuna immagine"
|
||||||
|
>
|
||||||
|
</q-img>
|
||||||
|
</div>
|
||||||
|
<q-btn
|
||||||
|
v-if="myvalue"
|
||||||
|
label="Rimuovi Foto"
|
||||||
|
color="blue"
|
||||||
|
icon="fas fa-trash-alt"
|
||||||
|
size="sm"
|
||||||
|
@click="removephoto"
|
||||||
|
></q-btn>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="col.fieldtype === costanti.FieldType.imgfile_sfuso">
|
||||||
|
<div v-if="canEdit">
|
||||||
|
{{ t('reg.photo') }}
|
||||||
|
<CGallery
|
||||||
|
:imagebak="
|
||||||
|
col.showpicprofile_ifnotset
|
||||||
|
? userStore.getImgByProfile(row['profile'], true)
|
||||||
|
: ''
|
||||||
|
"
|
||||||
|
:title="tools.getTitleGall(table)"
|
||||||
|
:directory="tools.getDirectoryGall(myrow, table, mypath)"
|
||||||
|
:imgGall="
|
||||||
|
myvalue && myvalue.imagefile
|
||||||
|
? [myvalue]
|
||||||
|
: [
|
||||||
|
{
|
||||||
|
imagefile: myvalue,
|
||||||
|
vers_img: 1,
|
||||||
|
fieldtype: col.fieldtype,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
"
|
||||||
:edit="isviewfield()"
|
:edit="isviewfield()"
|
||||||
:canModify="canModify"
|
:canModify="canModify"
|
||||||
:isInModif="isInModif"
|
:isInModif="isInModif"
|
||||||
@@ -1420,7 +1575,8 @@
|
|||||||
<div
|
<div
|
||||||
v-else-if="
|
v-else-if="
|
||||||
col.fieldtype === costanti.FieldType.string ||
|
col.fieldtype === costanti.FieldType.string ||
|
||||||
col.fieldtype === costanti.FieldType.crypted
|
col.fieldtype === costanti.FieldType.crypted ||
|
||||||
|
col.fieldtype === costanti.FieldType.username_telegram
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<q-input
|
<q-input
|
||||||
@@ -1893,6 +2049,40 @@
|
|||||||
? [myvalue]
|
? [myvalue]
|
||||||
: [{ imagefile: myvalue, vers_img: 1 }]
|
: [{ imagefile: myvalue, vers_img: 1 }]
|
||||||
"
|
"
|
||||||
|
:fieldtype="col.fieldtype"
|
||||||
|
:edit="isviewfield()"
|
||||||
|
:canModify="canModify"
|
||||||
|
:isInModif="isInModif"
|
||||||
|
:single="true"
|
||||||
|
@update:imgGall="changevalRec"
|
||||||
|
@showandsave="Savedb"
|
||||||
|
>
|
||||||
|
</CGallery>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else-if="col.fieldtype === costanti.FieldType.imgfile_sfuso">
|
||||||
|
<div v-if="canEdit">
|
||||||
|
{{ t('reg.photo') }}
|
||||||
|
<CGallery
|
||||||
|
:imagebak="
|
||||||
|
col.showpicprofile_ifnotset
|
||||||
|
? userStore.getImgByProfile(row['profile'], true)
|
||||||
|
: ''
|
||||||
|
"
|
||||||
|
:title="tools.getTitleGall(table)"
|
||||||
|
:directory="tools.getDirectoryGall(myrow, table, mypath)"
|
||||||
|
:imgGall="
|
||||||
|
myvalue && myvalue.imagefile
|
||||||
|
? [myvalue]
|
||||||
|
: [
|
||||||
|
{
|
||||||
|
imagefile: myvalue,
|
||||||
|
vers_img: 1,
|
||||||
|
fieldtype: col.fieldtype,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
"
|
||||||
|
:fieldtype="col.fieldtype"
|
||||||
:edit="isviewfield()"
|
:edit="isviewfield()"
|
||||||
:canModify="canModify"
|
:canModify="canModify"
|
||||||
:isInModif="isInModif"
|
:isInModif="isInModif"
|
||||||
|
|||||||
@@ -274,7 +274,8 @@ export default defineComponent({
|
|||||||
step: STEP_CIRCUIT_ITALIA,
|
step: STEP_CIRCUIT_ITALIA,
|
||||||
title: t('tutorial.step_circuito_italia_title'),
|
title: t('tutorial.step_circuito_italia_title'),
|
||||||
extratitle: function () { return circuititalia.value ? ': ' + circuititalia.value.name : '' },
|
extratitle: function () { return circuititalia.value ? ': ' + circuititalia.value.name : '' },
|
||||||
label: circuitStore.SonoDentroAdAlmeno1CircuitoConFido() ? t('tutorial.step_circuito_italia') : t('tutorial.non_sono_dentro_al_mio_circuito'),
|
// label: circuitStore.SonoDentroAdAlmeno1CircuitoConFido() ? t('tutorial.step_circuito_italia') : t('tutorial.non_sono_dentro_al_mio_circuito'),
|
||||||
|
label: t('tutorial.step_circuito_italia'),
|
||||||
label_ok: t('tutorial.step_circuito_italia_ok'),
|
label_ok: t('tutorial.step_circuito_italia_ok'),
|
||||||
checkOk: function () {
|
checkOk: function () {
|
||||||
if (circuititalia.value) {
|
if (circuititalia.value) {
|
||||||
@@ -459,7 +460,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
function mounted() {
|
function mounted() {
|
||||||
|
|
||||||
if (circuitStore.SonoDentroAdAlmeno1CircuitoConFido())
|
//if (circuitStore.SonoDentroAdAlmeno1CircuitoConFido())
|
||||||
arrStep.value.push({ ...stepCircItalia, indstep: numindstep.value })
|
arrStep.value.push({ ...stepCircItalia, indstep: numindstep.value })
|
||||||
|
|
||||||
// arrStep.value.push({ ...stepFine, indstep: numindstep.value })
|
// arrStep.value.push({ ...stepFine, indstep: numindstep.value })
|
||||||
|
|||||||