10 Commits

Author SHA1 Message Date
Surya Paolo
89a8d10eae - verifica email se non è stata verificata (componente)
- altri aggiornamenti grafica PAGERIS.
- OLLAMA AI
2025-12-11 18:34:39 +01:00
Surya Paolo
6fdb101092 categorie 2025-12-07 15:17:37 +01:00
Surya Paolo
f238630dd7 ok 2025-12-07 10:47:58 +01:00
Surya Paolo
a22eca0f58 - aggiornati anche i ContribTypes che appaiono sulla card degli annunci 2025-12-07 10:26:30 +01:00
Surya Paolo
a4ca394e49 - Aggiornate tutte le categorie ottimizzandole.
- Migrazione delle vecchie categ. con quelle nuove.
- Create le Categorie e sottocategorie degli Eventi (a parte).
- Aggiornato la card dell'Ospitalità
2025-12-07 02:13:18 +01:00
Surya Paolo
5d35930dc8 - pagine RISO 2025-12-05 17:56:05 +01:00
Surya Paolo
a51bc5a8a2 - aggiornamenti guida RIS, FAQ
- Editor HTML aggiunto CSS e Script
- Statistiche
- CRISBalanceBar
- Inizio Sync... (ma disattivato)
2025-12-02 22:16:24 +01:00
Surya Paolo
8b6a636a96 - Nuova Home Page RISO Moderna! Passo 1 - la struttura 2025-11-29 21:14:26 +01:00
Surya Paolo
2abdda3b44 - aggiornato Card service, e CGridTableRec. 2025-11-28 21:28:31 +01:00
Surya Paolo
3018542868 - email Abilitazione Circuito RISO 2025-11-28 18:53:37 +01:00
435 changed files with 31069 additions and 7963 deletions

4
.env
View File

@@ -1,6 +1,6 @@
VITE_APP_VERSION="1.2.85" VITE_APP_VERSION="1.2.86"
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.85.js" VITE_SERVICE_WORKER_FILE="sw-1.2.86.js"
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a" VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
VITE_VUE_ROUTER_MODE="history" VITE_VUE_ROUTER_MODE="history"

View File

@@ -1,11 +1,11 @@
VITE_APP_ID="13" VITE_APP_ID="13"
VITE_APP_URL="https://test.riso.app" VITE_APP_URL="https://riso.app"
VITE_MONGODB_HOST="https://testapi.riso.app" VITE_MONGODB_HOST="https://api.riso.app"
VITE_LOGO_REG="riso-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="0"
VITE_VUE_APP_ISTEST="1" VITE_VUE_APP_ISTEST="0"
DIRECTORY_LOCAL="myprojplanet_vite" DIRECTORY_LOCAL=myprojplanet_vite
DIRECTORY_SERVER="/var/www/nodejs_test.riso_server" DIRECTORY_SERVER=/var/www/nodejs_riso_server
SERVERDIR_WEBSITE="/var/www/test.riso.app" SERVERDIR_WEBSITE="/var/www/riso.app"
SERVERPW_WEBSITE="pwdadmin@1AOK" SERVERPW_WEBSITE="pwdadmin@1AOK"

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

1026
_LIMBO/aaa.scss Normal file

File diff suppressed because it is too large Load Diff

2969
_LIMBO/faq_ris.html Normal file

File diff suppressed because it is too large Load Diff

0
_LIMBO/grid.html Normal file
View File

2293
_LIMBO/risospiegazione.html Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -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.85"> <meta name="version" content="1.2.86">
<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<% } %>">

View File

@@ -1,6 +1,6 @@
{ {
"name": "riso", "name": "riso",
"version": "1.2.85", "version": "1.2.86",
"productName": "Riso 💚 - Rete Italiana Scambio orizzontale", "productName": "Riso 💚 - Rete Italiana Scambio orizzontale",
"description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.", "description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
"author": "Surya", "author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev", "dev": "APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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,35 +21,35 @@
"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.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' 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.3.21", "@cubejs-client/core": "^1.5.11",
"@quasar/extras": "^1.17.0", "@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.18", "@types/leaflet": "^1.9.21",
"@vue/compat": "^3.5.16", "@vue/compat": "^3.5.25",
"@vue/compiler-sfc": "^3.5.16", "@vue/compiler-sfc": "^3.5.25",
"@vuelidate/core": "^2.0.3", "@vuelidate/core": "^2.0.3",
"@vuelidate/validators": "^2.0.4", "@vuelidate/validators": "^2.0.4",
"acorn": "^8.15.0", "acorn": "^8.15.0",
"animate.css": "^4.1.1", "animate.css": "^4.1.1",
"apexcharts": "^4.7.0", "apexcharts": "^5.3.6",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.22",
"axios": "^1.9.0", "axios": "^1.13.2",
"bcryptjs": "^3.0.2", "bcryptjs": "^3.0.3",
"chart.js": "^4.4.9", "chart.js": "^4.5.1",
"core-js": "^3.43.0", "core-js": "^3.47.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": "6.0.0",
"eslint-plugin-n": "^17.19.0", "eslint-plugin-n": "^17.23.1",
"eslint-plugin-quasar": "^1.1.0", "eslint-plugin-quasar": "^1.1.0",
"gsap": "^3.13.0", "gsap": "^3.13.0",
"jquery": "^3.7.1", "jquery": "^3.7.1",
@@ -63,76 +63,77 @@
"mongoose-paginate-v2": "^1.9.1", "mongoose-paginate-v2": "^1.9.1",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^3.0.3", "pinia": "^3.0.4",
"quasar": "^2.18.1", "qrcode-vue3": "^1.7.1",
"quasar": "^2.18.6",
"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.34.0", "typescript-eslint": "^8.48.1",
"vee-validate": "^4.15.1", "vee-validate": "^4.15.1",
"vue": "^3.5.16", "vue": "^3.5.25",
"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": "^8.0.1",
"vue-i18n": "^11.1.5", "vue-i18n": "^11.2.2",
"vue-idb": "^0.2.0", "vue-idb": "^0.2.0",
"vue-property-decorator": "^10.0.0-rc.3", "vue-property-decorator": "^10.0.0-rc.3",
"vue-router": "^4.5.1", "vue-router": "^4.6.3",
"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-apexcharts": "^1.8.0", "vue3-apexcharts": "^1.10.0",
"vue3-qr-reader": "^1.0.0", "vue3-qr-reader": "^1.0.0",
"vuedraggable": "^4.1.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.4.0",
"workbox-precaching": "^7.3.0", "workbox-precaching": "^7.4.0",
"workbox-routing": "^7.3.0", "workbox-routing": "^7.4.0",
"workbox-strategies": "^7.3.0", "workbox-strategies": "^7.4.0",
"workbox-window": "^7.3.0", "workbox-window": "^7.4.0",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.28.0", "@eslint/js": "^9.39.1",
"@intlify/unplugin-vue-i18n": "^6.0.8", "@intlify/unplugin-vue-i18n": "^11.0.1",
"@quasar/app-vite": "^2.2.1", "@quasar/app-vite": "^2.4.0",
"@types/google.maps": "^3.58.1", "@types/google.maps": "^3.58.1",
"@types/jest": "^29.5.14", "@types/jest": "^30.0.0",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
"@types/node": "^24.0.1", "@types/node": "^24.10.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.6", "@vue/devtools": "^8.0.5",
"@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.6.0",
"autoprefixer": "^10.4.21", "autoprefixer": "^10.4.22",
"eslint": "9", "eslint": "9",
"eslint-plugin-import": "^2.31.0", "eslint-plugin-import": "^2.32.0",
"eslint-plugin-vue": "^10.2.0", "eslint-plugin-vue": "^10.6.2",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"globals": "^16.2.0", "globals": "^16.5.0",
"http-proxy-middleware": "^3.0.5", "http-proxy-middleware": "^3.0.5",
"jest": "^30.0.0", "jest": "^30.2.0",
"json-loader": "^0.5.7", "json-loader": "^0.5.7",
"nodemon": "^3.1.10", "nodemon": "^3.1.11",
"npm-check-updates": "^18.0.1", "npm-check-updates": "^19.1.2",
"parcel": "^2.15.2", "parcel": "^2.16.1",
"postcss": "^8.5.5", "postcss": "^8.5.6",
"postcss-loader": "^8.1.1", "postcss-loader": "^8.2.0",
"prettier": "3", "prettier": "3",
"strip-ansi": "=7.1.0", "strip-ansi": "=7.1.2",
"ts-jest": "^29.4.0", "ts-jest": "^29.4.6",
"typescript": "5.8.3", "typescript": "5.9.3",
"vite-plugin-checker": "^0.9.3", "vite-plugin-checker": "^0.11.0",
"vue-cli-plugin-element-ui": "^1.1.4", "vue-cli-plugin-element-ui": "^1.1.4",
"vue-eslint-parser": "^10.1.3", "vue-eslint-parser": "^10.2.0",
"vue-tsc": "^2.2.10", "vue-tsc": "^3.1.5",
"vueify": "^9.4.1", "vueify": "^9.4.1",
"workbox-build": "^7.3.0" "workbox-build": "^7.4.0"
}, },
"engines": { "engines": {
"node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18", "node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18",

View File

@@ -1,21 +1,9 @@
import { defineConfig } from '#q-app/wrappers'; import { defineConfig } from '#q-app/wrappers';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import path from 'path'; import path from 'path';
// console.log(process.env)
export default defineConfig((ctx) => { export default defineConfig((ctx) => {
return { return {
// https://v2.quasar.dev/quasar-cli/supporting-ts
// https://v2.quasar.dev/quasar-cli/prefetch-feature
// preFetch: true,
// app boot file (/src/boot)
// --> boot files are part of "main.js"
// https://v2.quasar.dev/quasar-cli/boot-files
// boot: ['vue-i18n', 'vue-meta', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula', 'guard'],
boot: [ boot: [
'i18n', 'i18n',
'axios', 'axios',
@@ -31,56 +19,89 @@ export default defineConfig((ctx) => {
'trackPageViews', 'trackPageViews',
], ],
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css css: ['app.scss'],
css: [
'app.scss',
// '~quasar-ui-qcalendar/src/css/calendar-day.sass'
],
// https://github.com/quasarframework/quasar/tree/dev/extras
extras: [ extras: [
// 'ionicons-v4',
// 'mdi-v5',
// 'eva-icons',
// 'themify',
// 'line-awesome',
'ionicons-v4', 'ionicons-v4',
// 'mdi-v3',
'fontawesome-v5', 'fontawesome-v5',
'roboto-font', // optional, you are not bound to it 'roboto-font',
'material-icons', // optional, you are not bound to it 'material-icons',
'material-icons-outlined', 'material-icons-outlined',
], ],
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
build: { build: {
target: {
browser: ['es2021', 'chrome100', 'firefox100', 'safari14'],
node: 'node20',
},
// ✅ AGGIUNTO: Importa automaticamente variables.scss ovunque
sassVariables: 'src/css/variables.scss',
vueRouterMode: 'history',
analyze: false,
transpile: true,
transpileDependencies: [/quasar-ui-qcalendar[\\/]src/],
typescript: {
strict: false,
vueShim: true,
},
// ✅ AGGIUNTO: Config SCSS globale per Vite
extendViteConf(viteConf, { isServer, isClient }) {
// Alias puliti
viteConf.resolve = {
...(viteConf.resolve || {}),
alias: {
...viteConf.resolve.alias,
'#q-app': path.resolve(__dirname, 'node_modules/quasar/app'),
// Alias essenziali (rimuovi duplicati)
'@': path.resolve(__dirname, 'src'),
'@components': path.resolve(__dirname, 'src/components'),
'@views': path.resolve(__dirname, 'src/views'),
'@boot': path.resolve(__dirname, 'src/boot'),
'@store': path.resolve(__dirname, 'src/store'),
'@storemod': path.resolve(__dirname, 'src/store/Modules'),
'@tools': path.resolve(__dirname, 'src/store/Modules/tools.ts'), // ✅ AGGIUNTO
'@costanti': path.resolve(__dirname, 'src/store/Modules/costanti.ts'), // ✅ AGGIUNTO
'@api': path.resolve(__dirname, 'src/store/Api'),
'@utils': path.resolve(__dirname, 'src/utils'),
'@model': path.resolve(__dirname, 'src/model'),
'@classes': path.resolve(__dirname, 'src/classes'),
'@router': path.resolve(__dirname, 'src/router'),
'@css': path.resolve(__dirname, 'src/css'),
'@paths': path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'),
'@images': path.resolve(__dirname, 'src/assets/images'),
'@icons': path.resolve(__dirname, 'src/public/myicons'),
},
};
// ✅ AGGIUNTO: SCSS preprocessor con variables.scss globale
viteConf.css = {
...(viteConf.css || {}),
preprocessorOptions: {
scss: {
additionalData: `@use "sass:color"; @use "@/css/variables.scss" as *;`,
},
},
};
},
viteConf: { viteConf: {
server: { server: {
hmr: { hmr: {
protocol: 'wss', // o 'ws' se usi HTTP protocol: 'wss',
host: 'localhost', host: 'localhost',
port: 8094, port: 8094,
}, },
}, },
}, },
target: {
browser: ['es2022', 'firefox115', 'chrome115', 'safari14'],
node: 'node20',
},
sassVariables: 'src/css/variables.scss',
// env: envparser(),
// versionCode: package.version,
vueRouterMode: 'history',
analyze: false, // true
transpile: true,
transpileDependencies: [/quasar-ui-qcalendar[\\/]src/],
beforeDev(api) { beforeDev(api) {
// Se la variabile d'ambiente SKIP_TSC è impostata, disabilita il type checking
if (process.env.SKIP_TSC === 'true') { if (process.env.SKIP_TSC === 'true') {
console.log('⚠️ TypeScript type checking is disabled'); console.log('⚠️ TypeScript type checking is disabled');
// Disattiva TypeScript checking per Vite
if (api && api.chainWebpack) { if (api && api.chainWebpack) {
api.chainWebpack((chain) => { api.chainWebpack((chain) => {
chain.plugin('fork-ts-checker').tap((args) => { chain.plugin('fork-ts-checker').tap((args) => {
@@ -91,113 +112,19 @@ export default defineConfig((ctx) => {
} }
} }
}, },
// @quasar/app-vite v2.0.3+
envFilter(originalEnv) { envFilter(originalEnv) {
const newEnv = {}; return originalEnv; // Ritorna tutto per semplicità
for (const key in originalEnv) {
/* ...decide if it goes in or not... */
if (true) {
newEnv[key] = originalEnv[key];
}
}
// remember to return your processed env
return newEnv;
},
typescript: {
strict: false,
vueShim: true,
extendTsConfig(tsConfig) {
// You can use this hook to extend tsConfig dynamically
// For basic use cases, you can still update the usual tsconfig.json file to override some settings
},
/**
* Folder where Quasar CLI should look for .env* files.
* Can be an absolute path or a relative path to project root directory.
*
* @default project root directory
*/
// envFolder?: string
/**
* Additional .env* files to be loaded.
* Each entry can be an absolute path or a relative path to quasar.config > build > envFolder.
*
* @example ['.env.somefile', '../.env.someotherfile']
*/
// envFiles?: string[];
},
extendViteConf(viteConf, { isServer, isClient }) {
viteConf.resolve = {
...(viteConf.resolve || {}),
alias: {
...viteConf.resolve.alias,
'#q-app': path.resolve(__dirname, 'node_modules/quasar/app'), // Alias per #q-app
app: path.resolve(__dirname),
boot: path.resolve(__dirname, 'src/boot'),
src: path.resolve(__dirname, 'src'),
statics: path.resolve(__dirname, 'src/statics'),
components: path.resolve(__dirname, 'src/components'),
views: path.resolve(__dirname, 'src/views/index.ts'),
images: path.resolve(__dirname, 'src/assets/images'),
maps: path.resolve(__dirname, 'public/maps'),
classes: path.resolve(__dirname, 'src/classes/index.ts'),
fonts: path.resolve(__dirname, 'src/assets/fonts'),
utils: path.resolve(__dirname, 'src/utils/index.ts'),
css: path.resolve(__dirname, 'src/css/variables.scss'),
router: path.resolve(__dirname, 'src/router/index.ts'),
validators: path.resolve(__dirname, 'src/utils/validators.ts'),
methods: path.resolve(__dirname, 'src/utils/methods.ts'),
filters: path.resolve(__dirname, 'src/utils/filters.ts'),
api: path.resolve(__dirname, 'src/store/Api/index.ts'),
paths: path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'),
modules: path.resolve(__dirname, 'src/store/Modules/index.ts'),
model: path.resolve(__dirname, 'src/model/index.ts'),
'@components': path.resolve(__dirname, 'src/components'),
'@boot': path.resolve(__dirname, 'src/boot'),
'@costanti': path.resolve(__dirname, 'src/store/Modules/costanti.ts'),
'@views': path.resolve(__dirname, 'src/views/index.ts'),
'@src': path.resolve(__dirname, 'src'),
'@css': path.resolve(__dirname, 'src/public/css/variables.scss'),
'@icons': path.resolve(__dirname, 'src/public/public/myicons'),
'@images': path.resolve(__dirname, 'src/public/images/*'),
'@maps': path.resolve(__dirname, 'src/public/maps/*'),
'@classes': path.resolve(__dirname, 'src/classes/index.ts'),
'@utils': path.resolve(__dirname, 'src/utils/index.ts'),
'@router': path.resolve(__dirname, 'src/router/index.ts'),
'@validators': path.resolve(__dirname, 'src/utils/validators.ts'),
'@methods': path.resolve(__dirname, 'src/utils/methods.ts'),
'@api': path.resolve(__dirname, 'src/store/Api/index.ts'),
'@paths': path.resolve(__dirname, 'src/store/Api/ApiRoutes.ts'),
'@storemod': path.resolve(__dirname, 'src/store/Modules'),
'@store': path.resolve(__dirname, 'src/store'),
'@tools': path.resolve(__dirname, 'src/store/Modules/tools.ts'),
'@modules': path.resolve(__dirname, 'src/store/Modules/index.ts'),
'@model': path.resolve(__dirname, 'src/model/index.ts'),
},
};
}, },
vitePlugins: [ vitePlugins: [
[ [
'@intlify/unplugin-vue-i18n/vite', '@intlify/unplugin-vue-i18n/vite',
{ {
// if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
// compositionOnly: false,
// if you want to use named tokens in your Vue I18n messages, such as 'Hello {name}',
// you need to set `runtimeOnly: false`
// runtimeOnly: false,
ssr: ctx.modeName === 'ssr', ssr: ctx.modeName === 'ssr',
// you need to set i18n resource including paths !
include: [fileURLToPath(new URL('./src/i18n', import.meta.url))], include: [fileURLToPath(new URL('./src/i18n', import.meta.url))],
}, },
], ],
[ [
'vite-plugin-checker', 'vite-plugin-checker',
{ {
@@ -211,60 +138,25 @@ export default defineConfig((ctx) => {
{ server: false }, { server: false },
], ],
], ],
// polyfillModulePreload: true,
// viteVuePluginOptions: {},
// extractCSS: false,
// transpile: false,
// Add dependencies for transpiling with Babel (Array of string/regex)
// (from node_modules, which are by default not transpiled).
// Applies only if "transpile" is set to true.
// transpileDependencies: [],
// rtl: true, // https://v2.quasar.dev/options/rtl-supg
// preloadChunks: true,
// showProgress: false,
// gzip: true,
// analyze: true,
// Options below are automatically set depending on the env, set them if you want to override
// extractCSS: false,
// https://v2.quasar.dev/quasar-cli/handling-webpack
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
}, },
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-devServer
devServer: { devServer: {
https: { https: {
key: path.resolve(__dirname, 'localhost-key.pem'), key: path.resolve(__dirname, 'localhost-key.pem'),
cert: path.resolve(__dirname, 'localhost.pem'), cert: path.resolve(__dirname, 'localhost.pem'),
}, },
port: parseInt(process.env.PORT, 10), port: parseInt(process.env.PORT, 10),
vueDevtools: false, // automatically opening remote Vue Devtools vueDevtools: false,
open: false, // opens browser window automatically open: false,
hot: true, // Enable hot module replacement hot: true,
headers: { headers: {
'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': '*', 'Access-Control-Allow-Headers': '*',
}, },
}, },
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework
framework: { framework: {
config: {}, config: {},
// iconSet: 'material-icons', // Quasar icon set
// lang: 'en-US', // Quasar language pack
// For special cases outside of where the auto-import strategy can have an impact
// (like functional components as one of the examples),
// you can manually specify Quasar components/directives to be available everywhere:
//
components: [ components: [
'QLayout', 'QLayout',
'QDrawer', 'QDrawer',
@@ -332,9 +224,10 @@ export default defineConfig((ctx) => {
'QTabPanel', 'QTabPanel',
'QTree', 'QTree',
'QSeparator', 'QSeparator',
'QPageSticky',
], ],
directives: ['Ripple', 'ClosePopup'], directives: ['Ripple', 'ClosePopup'],
_plugins: [ plugins: [
'Meta', 'Meta',
'Dialog', 'Dialog',
'Notify', 'Notify',
@@ -344,59 +237,27 @@ export default defineConfig((ctx) => {
'LocalStorage', 'LocalStorage',
'SessionStorage', 'SessionStorage',
], ],
get plugins_1() {
return this._plugins;
},
set plugins_1(value) {
this._plugins = value;
},
get plugins() {
return this._plugins;
},
set plugins(value) {
this._plugins = value;
},
// iconSet: 'fontawesome-v5',
iconSet: 'material-icons', iconSet: 'material-icons',
lang: 'it', // Quasar language lang: 'it',
}, },
animations: 'all', // --- includes all animations animations: 'all',
// https://v2.quasar.dev/options/animations
// animations: [],
// https://v2.quasar.dev/quasar-cli/developing-ssr/configuring-ssr
ssr: { ssr: {
pwa: false, pwa: false,
prodPort: 3000,
// manualStoreHydration: true,
// manualPostHydrationTrigger: true,
prodPort: 3000, // The default port that the production server should use
// (gets superseded if import.meta.env.PORT is specified at runtime)
maxAge: 1000 * 60 * 60 * 24 * 30, maxAge: 1000 * 60 * 60 * 24 * 30,
// Tell browser when a file from the server should expire from cache (in ms) middlewares: [ctx.prod ? 'compression' : '', 'render'],
middlewares: [
ctx.prod ? 'compression' : '',
'render', // keep this as last one
],
}, },
// https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa
pwa: { pwa: {
workboxMode: 'InjectManifest', // 'GenerateSW' or 'InjectManifest' workboxMode: 'InjectManifest',
swFilename: 'sw-' + process.env.APP_VERSION + '.js', swFilename: 'sw-' + process.env.APP_VERSION + '.js',
workboxOptions: { workboxOptions: {
swSrc: 'src-pwa/custom-service-worker.js', // Assicurati che il file esista swSrc: 'src-pwa/custom-service-worker.js',
include: [/\.html$/, /\.js$/, /\.css$/, /\.png$/, /\.svg$/, /\.json$/], // File da precacheare include: [/\.html$/, /\.js$/, /\.css$/, /\.png$/, /\.svg$/, /\.json$/],
}, },
suppressWarnings: true, suppressWarnings: true,
/*extendGenerateSWOptions(cfg) {
cfg.skipWaiting = false
cfg.clientsClaim = false
},*/
}, },
sourceFiles: { sourceFiles: {
@@ -405,36 +266,12 @@ export default defineConfig((ctx) => {
pwaManifestFile: 'src-pwa/manifest.json', pwaManifestFile: 'src-pwa/manifest.json',
}, },
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova cordova: {},
cordova: { capacitor: { hideSplashscreen: true },
// noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing
},
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-capacitor-apps/configuring-capacitor
capacitor: {
hideSplashscreen: true,
},
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-electron-apps/configuring-electron
electron: { electron: {
bundler: 'packager', // 'packager' or 'builder' bundler: 'packager',
packager: {},
packager: { builder: { appId: '-' },
// https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options
// OS X / Mac App Store
// appBundleId: '',
// appCategoryType: '',
// osxSign: '',
// protocol: 'myapp://path',
// Windows only
// win32metadata: { ... }
},
builder: {
// https://www.electron.build/configuration/configuration
appId: '-',
},
}, },
}; };
}); });

View File

@@ -1,6 +1,6 @@
{ {
"name": "cnm", "name": "cnm",
"version": "1.2.85", "version": "1.2.86",
"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.85' quasar dev", "dev": "PORT=8083 APP_VERSION='1.2.86' 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.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.86' 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",

View File

@@ -36,7 +36,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -51,7 +51,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -62,7 +62,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -72,7 +72,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/goods', path: '/goods',
materialIcon: 'fas fa-tshirt', materialIcon: 'fas fa-tshirt',
name: 'mypages.goods', name: 'mypages.goods',
component: () => import('@src/root/goods/goods.vue'), component: () => import('@/root/goods/goods.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -83,7 +83,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/services', path: '/services',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.services', name: 'mypages.services',
component: () => import('@src/root/services/services.vue'), component: () => import('@/root/services/services.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -94,7 +94,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/activities', path: '/activities',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.activities', name: 'mypages.activities',
component: () => import('@src/root/activities/activities.vue'), component: () => import('@/root/activities/activities.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -105,7 +105,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/provapao', path: '/provapao',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.provapao', name: 'mypages.provapao',
component: () => import('@src/root/provapao/provapao.vue'), component: () => import('@/root/provapao/provapao.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -116,7 +116,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/hosps', path: '/hosps',
materialIcon: 'fas fa-bed', materialIcon: 'fas fa-bed',
name: 'mypages.hosp', name: 'mypages.hosp',
component: () => import('@src/root/hosp/hosp.vue'), component: () => import('@/root/hosp/hosp.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -127,7 +127,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -138,7 +138,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -149,7 +149,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -160,7 +160,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -171,7 +171,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/editprofile', path: '/editprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile3', name: 'pages.profile3',
component: () => import('@src/views/user/editprofile/editprofile.vue'), component: () => import('@/views/user/editprofile/editprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -182,7 +182,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -193,7 +193,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -204,7 +204,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -215,7 +215,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -234,7 +234,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -245,7 +245,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -256,7 +256,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -267,7 +267,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -278,7 +278,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/sostieniilprogetto', path: '/sostieniilprogetto',
materialIcon: 'fas fa-hand-holding-heart', materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising', name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'), component: () => import('@/root/fundraising/fundraising.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -288,7 +288,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -62,7 +62,7 @@ const routes_admin: IListRoutes[] = [
path: '/admin/sites', path: '/admin/sites',
materialIcon: 'event_seat', materialIcon: 'event_seat',
name: 'pages.Sites', name: 'pages.Sites',
component: () => import('@src/rootgen/admin/sites/sites.vue'), component: () => import('@/rootgen/admin/sites/sites.vue'),
level_parent: 0.0, level_parent: 0.0,
level_child: 0.5, level_child: 0.5,
inmenu: true, inmenu: true,
@@ -75,7 +75,7 @@ const routes_admin: IListRoutes[] = [
path: '/admin/cfgserv', path: '/admin/cfgserv',
materialIcon: 'event_seat', materialIcon: 'event_seat',
name: 'pages.Admin', name: 'pages.Admin',
component: () => import('@src/views/admin/cfgServer/cfgServer.vue'), component: () => import('@/views/admin/cfgServer/cfgServer.vue'),
level_parent: 0.0, level_parent: 0.0,
level_child: 0.5, level_child: 0.5,
inmenu: true, inmenu: true,
@@ -88,7 +88,7 @@ const routes_admin: IListRoutes[] = [
path: '/admin/dbop', path: '/admin/dbop',
materialIcon: 'event_seat', materialIcon: 'event_seat',
name: 'pages.dbop', name: 'pages.dbop',
component: () => import('@src/views/admin/dbop/dbop.vue'), component: () => import('@/views/admin/dbop/dbop.vue'),
level_parent: 0.0, level_parent: 0.0,
level_child: 0.5, level_child: 0.5,
inmenu: true, inmenu: true,
@@ -101,7 +101,7 @@ const routes_admin: IListRoutes[] = [
path: '/admin/importfile', path: '/admin/importfile',
materialIcon: 'event_seat', materialIcon: 'event_seat',
name: 'otherpages.manage.importfile', name: 'otherpages.manage.importfile',
component: () => import('@src/rootgen/admin/importdata/importdata.vue'), component: () => import('@/rootgen/admin/importdata/importdata.vue'),
level_parent: 0.0, level_parent: 0.0,
level_child: 0.5, level_child: 0.5,
inmenu: true, inmenu: true,
@@ -117,7 +117,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/usereventlist', path: '/admin/usereventlist',
materialIcon: 'edit', materialIcon: 'edit',
name: 'otherpages.admin.usereventlist', name: 'otherpages.admin.usereventlist',
component: () => import('@src/rootgen/admin/eventlist/eventlist.vue'), component: () => import('@/rootgen/admin/eventlist/eventlist.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -133,7 +133,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/userlist', path: '/admin/userlist',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'otherpages.admin.userlist', name: 'otherpages.admin.userlist',
component: () => import('@src/rootgen/admin/usersList/usersList.vue'), component: () => import('@/rootgen/admin/usersList/usersList.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -148,7 +148,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/iscritticonacreis', path: '/admin/iscritticonacreis',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'otherpages.admin.iscritticonacreis', name: 'otherpages.admin.iscritticonacreis',
component: () => import('@src/rootgen/admin/iscritticonacreis/iscritticonacreis.vue'), component: () => import('@/rootgen/admin/iscritticonacreis/iscritticonacreis.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -164,7 +164,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/zoomlist', path: '/admin/zoomlist',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'otherpages.admin.zoomlist', name: 'otherpages.admin.zoomlist',
component: () => import('@src/rootgen/admin/zoomList/zoomList.vue'), component: () => import('@/rootgen/admin/zoomList/zoomList.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -178,7 +178,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/tableslist', path: '/admin/tableslist',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'otherpages.admin.tableslist', name: 'otherpages.admin.tableslist',
component: () => import('@src/rootgen/admin/tablesList/tablesList.vue'), component: () => import('@/rootgen/admin/tablesList/tablesList.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -192,7 +192,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/pages', path: '/admin/pages',
materialIcon: 'fas fa-file-alt', materialIcon: 'fas fa-file-alt',
name: 'otherpages.admin.pages', name: 'otherpages.admin.pages',
component: () => import('@src/rootgen/admin/pages/pages.vue'), component: () => import('@/rootgen/admin/pages/pages.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -206,7 +206,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/bot', path: '/admin/bot',
materialIcon: 'fas fa-file-alt', materialIcon: 'fas fa-file-alt',
name: 'otherpages.admin.bot', name: 'otherpages.admin.bot',
component: () => import('@src/rootgen/admin/bot/bot.vue'), component: () => import('@/rootgen/admin/bot/bot.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -240,7 +240,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/msg_template', path: '/admin/msg_template',
materialIcon: 'fas fa-file-alt', materialIcon: 'fas fa-file-alt',
name: 'msgs.messages', name: 'msgs.messages',
component: () => import('@src/rootgen/admin/msg_template/msg_template.vue'), component: () => import('@/rootgen/admin/msg_template/msg_template.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -255,7 +255,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/sendpushnotif', path: '/admin/sendpushnotif',
materialIcon: 'event_seat', materialIcon: 'event_seat',
name: 'otherpages.manage.sendpushnotif', name: 'otherpages.manage.sendpushnotif',
component: () => import('@src/rootgen/admin/sendpushnotif/sendpushnotif.vue'), component: () => import('@/rootgen/admin/sendpushnotif/sendpushnotif.vue'),
level_parent: 0.0, level_parent: 0.0,
level_child: 0.5, level_child: 0.5,
inmenu: true, inmenu: true,
@@ -269,7 +269,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/gallery', path: '/admin/gallery',
materialIcon: 'fas fa-file-alt', materialIcon: 'fas fa-file-alt',
name: 'otherpages.admin.gallery', name: 'otherpages.admin.gallery',
component: () => import('@src/rootgen/admin/gallery/gallery.vue'), component: () => import('@/rootgen/admin/gallery/gallery.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -283,7 +283,7 @@ const routes_manager: IListRoutes[] = [
path: '/admin/media', path: '/admin/media',
materialIcon: 'fas fa-file-alt', materialIcon: 'fas fa-file-alt',
name: 'otherpages.admin.media', name: 'otherpages.admin.media',
component: () => import('@src/rootgen/admin/uploader/uploader.vue'), component: () => import('@/rootgen/admin/uploader/uploader.vue'),
inmenu: true, inmenu: true,
submenu: true, submenu: true,
level_parent: 0, level_parent: 0,
@@ -301,7 +301,7 @@ const baseroutes: IListRoutes[] = [
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -312,7 +312,7 @@ const baseroutes: IListRoutes[] = [
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -323,7 +323,7 @@ const baseroutes: IListRoutes[] = [
path: '/goods', path: '/goods',
materialIcon: 'fas fa-briefcase', materialIcon: 'fas fa-briefcase',
name: 'mypages.goods', name: 'mypages.goods',
component: () => import('@src/root/goods/goods.vue'), component: () => import('@/root/goods/goods.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -334,7 +334,7 @@ const baseroutes: IListRoutes[] = [
path: '/services', path: '/services',
materialIcon: 'fas fa-briefcase', materialIcon: 'fas fa-briefcase',
name: 'mypages.services', name: 'mypages.services',
component: () => import('@src/root/services/services.vue'), component: () => import('@/root/services/services.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -345,7 +345,7 @@ const baseroutes: IListRoutes[] = [
path: '/presentazione', path: '/presentazione',
materialIcon: 'fas fa-info', materialIcon: 'fas fa-info',
name: 'pages.presentazione', name: 'pages.presentazione',
component: () => import('@src/root/presentazione/presentazione.vue'), component: () => import('@/root/presentazione/presentazione.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -356,7 +356,7 @@ const baseroutes: IListRoutes[] = [
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -367,7 +367,7 @@ const baseroutes: IListRoutes[] = [
path: '/editprofile', path: '/editprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile3', name: 'pages.profile3',
component: () => import('@src/views/user/editprofile/editprofile.vue'), component: () => import('@/views/user/editprofile/editprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -378,7 +378,7 @@ const baseroutes: IListRoutes[] = [
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.friends', name: 'mypages.friends',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -389,7 +389,7 @@ const baseroutes: IListRoutes[] = [
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -400,7 +400,7 @@ const baseroutes: IListRoutes[] = [
path: '/my/:username', path: '/my/:username',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile2', name: 'pages.profile2',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -411,7 +411,7 @@ const baseroutes: IListRoutes[] = [
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -422,7 +422,7 @@ const baseroutes: IListRoutes[] = [
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -433,7 +433,7 @@ const baseroutes: IListRoutes[] = [
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -444,7 +444,7 @@ const baseroutes: IListRoutes[] = [
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -484,7 +484,7 @@ const baseroutes: IListRoutes[] = [
path: '/404error', path: '/404error',
materialIcon: 'fas fa-calendar-plus', materialIcon: 'fas fa-calendar-plus',
name: 'otherpages.error404', name: 'otherpages.error404',
component: () => import('@src/root/My404page/My404page.vue'), component: () => import('@/root/My404page/My404page.vue'),
inmenu: false, inmenu: false,
infooter: false infooter: false
}, },
@@ -494,7 +494,7 @@ const baseroutes: IListRoutes[] = [
order: 8, order: 8,
path: '/policy', path: '/policy',
name: 'pages.policy', name: 'pages.policy',
component: () => import('@src/root/policy/policy.vue'), component: () => import('@/root/policy/policy.vue'),
},*/ },*/
{ {
active: functionality.ENABLE_REGISTRATION, active: functionality.ENABLE_REGISTRATION,
@@ -502,7 +502,7 @@ const baseroutes: IListRoutes[] = [
path: '/signup/:invited', path: '/signup/:invited',
materialIcon: 'how_to_reg', materialIcon: 'how_to_reg',
name: 'pages.SignUp', name: 'pages.SignUp',
component: () => import('@src/views/login/signup/signup.vue'), component: () => import('@/views/login/signup/signup.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
separator: false separator: false
@@ -513,7 +513,7 @@ const baseroutes: IListRoutes[] = [
path: '/regok', path: '/regok',
materialIcon: 'how_to_reg', materialIcon: 'how_to_reg',
name: 'pages.regok', name: 'pages.regok',
component: () => import('@src/views/login/regok/regok.vue'), component: () => import('@/views/login/regok/regok.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
separator: false, separator: false,
@@ -524,7 +524,7 @@ const baseroutes: IListRoutes[] = [
path: '/signin', path: '/signin',
materialIcon: 'account_circle', materialIcon: 'account_circle',
name: 'pages.SignIn', name: 'pages.SignIn',
component: () => import('@src/views/login/signin_noreg/signin_noreg.vue'), component: () => import('@/views/login/signin_noreg/signin_noreg.vue'),
inmenu: true, inmenu: true,
infooter: true infooter: true
}, },
@@ -533,28 +533,28 @@ const baseroutes: IListRoutes[] = [
order: 1000, order: 1000,
path: '/vreg', path: '/vreg',
name: 'pages.vreg', name: 'pages.vreg',
component: () => import('@src/views/login/vreg/vreg.vue') component: () => import('@/views/login/vreg/vreg.vue')
}, },
{ {
active: true, active: true,
order: 1000, order: 1000,
path: '/requestresetpwd', path: '/requestresetpwd',
name: 'pages.requestresetpwd', name: 'pages.requestresetpwd',
component: () => import('@src/views/requestresetpwd/requestresetpwd.vue') component: () => import('@/views/requestresetpwd/requestresetpwd.vue')
}, },
{ {
active: true, active: true,
order: 1000, order: 1000,
path: '/updatepassword', path: '/updatepassword',
name: 'pages.updatepassword', name: 'pages.updatepassword',
component: () => import('@src/views/updatepassword/updatepassword.vue') component: () => import('@/views/updatepassword/updatepassword.vue')
}, },
{ {
active: true, active: true,
order: 1000, order: 1000,
path: '/offline', path: '/offline',
name: 'Offline', name: 'Offline',
component: () => import('@src/views/offline/offline.vue') component: () => import('@/views/offline/offline.vue')
}, },
{ {
active: true, active: true,
@@ -570,7 +570,7 @@ const baseroutes: IListRoutes[] = [
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'pages.calendarioeventi', name: 'pages.calendarioeventi',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: true, inmenu: true,
infooter: true infooter: true
@@ -581,7 +581,7 @@ const baseroutes: IListRoutes[] = [
path: '/admin/newsletter/:idparam', path: '/admin/newsletter/:idparam',
materialIcon: 'event', materialIcon: 'event',
name: 'pages.newsletter.menu', name: 'pages.newsletter.menu',
component: () => import('@src/rootgen/admin/newsletter/newsletter.vue'), component: () => import('@/rootgen/admin/newsletter/newsletter.vue'),
inmenu: false, inmenu: false,
infooter: false infooter: false
}, },
@@ -591,7 +591,7 @@ const baseroutes: IListRoutes[] = [
path: '/event/:typol/:eventid', path: '/event/:typol/:eventid',
materialIcon: 'event', materialIcon: 'event',
name: 'pages.evento', name: 'pages.evento',
component: () => import('@src/root/evento/evento.vue'), component: () => import('@/root/evento/evento.vue'),
inmenu: false, inmenu: false,
infooter: false infooter: false
}, },
@@ -601,7 +601,7 @@ const baseroutes: IListRoutes[] = [
path: '/event/:typol', path: '/event/:typol',
materialIcon: 'event', materialIcon: 'event',
name: 'pages.eventodef', name: 'pages.eventodef',
component: () => import('@src/root/evento/evento.vue'), component: () => import('@/root/evento/evento.vue'),
inmenu: false, inmenu: false,
infooter: false infooter: false
}, },

View File

@@ -1,6 +1,6 @@
{ {
"name": "freeplanet", "name": "freeplanet",
"version": "1.2.85", "version": "1.2.86",
"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.85' quasar dev", "dev": "PORT=8087 APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.86' 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",

View File

@@ -1,6 +1,6 @@
{ {
"name": "riso", "name": "riso",
"version": "1.2.85", "version": "1.2.86",
"productName": "Riso 💚 - Rete Italiana Scambio orizzontale", "productName": "Riso 💚 - Rete Italiana Scambio orizzontale",
"description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.", "description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
"author": "Surya", "author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev", "dev": "APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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=8094 APP_VERSION='1.2.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' 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",

View File

@@ -38,7 +38,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -53,7 +53,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -64,7 +64,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/goods', path: '/goods',
materialIcon: 'fas fa-tshirt', materialIcon: 'fas fa-tshirt',
name: 'mypages.goods', name: 'mypages.goods',
component: () => import('@src/root/goods/goods.vue'), component: () => import('@/root/goods/goods.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/services', path: '/services',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.services', name: 'mypages.services',
component: () => import('@src/root/services/services.vue'), component: () => import('@/root/services/services.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/activities', path: '/activities',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.activities', name: 'mypages.activities',
component: () => import('@src/root/activities/activities.vue'), component: () => import('@/root/activities/activities.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/provapao', path: '/provapao',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.provapao', name: 'mypages.provapao',
component: () => import('@src/root/provapao/provapao.vue'), component: () => import('@/root/provapao/provapao.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -118,7 +118,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/hosps', path: '/hosps',
materialIcon: 'fas fa-bed', materialIcon: 'fas fa-bed',
name: 'mypages.hosp', name: 'mypages.hosp',
component: () => import('@src/root/hosp/hosp.vue'), component: () => import('@/root/hosp/hosp.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -129,7 +129,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -140,7 +140,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -151,7 +151,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -162,7 +162,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -184,7 +184,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -195,7 +195,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -206,7 +206,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -236,7 +236,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -247,7 +247,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -258,7 +258,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -269,7 +269,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -280,7 +280,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/sostieniilprogetto', path: '/sostieniilprogetto',
materialIcon: 'fas fa-hand-holding-heart', materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising', name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'), component: () => import('@/root/fundraising/fundraising.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -290,7 +290,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -1,6 +1,6 @@
{ {
"name": "gruppomacro", "name": "gruppomacro",
"version": "1.2.85", "version": "1.2.86",
"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.", "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",
@@ -9,20 +9,20 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "PORT=8089 APP_VERSION='1.2.85' quasar dev", "dev": "PORT=8089 APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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.85' quasar build -m spa", "buildspa": "APP_VERSION='1.2.86' 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.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.86' 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",

View File

@@ -38,7 +38,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -54,7 +54,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -65,7 +65,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -75,7 +75,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test-lungo', path: '/test-lungo',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test_lungo', name: 'mypages.test_lungo',
component: () => import('@src/views/testLungo/testLungo.vue'), component: () => import('@/views/testLungo/testLungo.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/provapao', path: '/provapao',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.provapao', name: 'mypages.provapao',
component: () => import('@src/root/provapao/provapao.vue'), component: () => import('@/root/provapao/provapao.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -118,7 +118,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -129,7 +129,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -140,7 +140,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -151,7 +151,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -162,7 +162,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -173,7 +173,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -192,7 +192,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -203,7 +203,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -214,7 +214,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -225,7 +225,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -236,7 +236,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -1,6 +1,6 @@
{ {
"name": "nuovomondo", "name": "nuovomondo",
"version": "1.2.85", "version": "1.2.86",
"description": "Nuovo Mondo", "description": "Nuovo Mondo",
"productName": "Nuovo Mondo", "productName": "Nuovo Mondo",
"author": "Surya", "author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "APP_VERSION='1.2.85' PORT=8083 quasar dev", "dev": "APP_VERSION='1.2.86' PORT=8083 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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=8094 APP_VERSION='1.2.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.86' 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",

View File

@@ -14,7 +14,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -29,7 +29,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -40,7 +40,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -52,7 +52,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -63,7 +63,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/editprofile', path: '/editprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile3', name: 'pages.profile3',
component: () => import('@src/views/user/editprofile/editprofile.vue'), component: () => import('@/views/user/editprofile/editprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -120,7 +120,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -133,7 +133,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -144,7 +144,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -163,7 +163,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -174,7 +174,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -185,7 +185,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -196,7 +196,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -207,7 +207,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/fundraising', path: '/fundraising',
materialIcon: 'fas fa-hand-holding-heart', materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising', name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'), component: () => import('@/root/fundraising/fundraising.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -1,6 +1,6 @@
{ {
"name": "nutriben", "name": "nutriben",
"version": "1.2.85", "version": "1.2.86",
"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.85' quasar dev", "dev": "PORT=8093 APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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.85' quasar build -m spa", "buildspa": "APP_VERSION='1.2.86' 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.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.86' 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",

View File

@@ -38,7 +38,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/nutriben/home/home.vue'), component: () => import('@/root/nutriben/home/home.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -54,7 +54,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -65,7 +65,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -75,7 +75,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/provapao', path: '/provapao',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.provapao', name: 'mypages.provapao',
component: () => import('@src/root/provapao/provapao.vue'), component: () => import('@/root/provapao/provapao.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -86,7 +86,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -97,7 +97,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -108,7 +108,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -119,7 +119,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -130,7 +130,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/editprofile', path: '/editprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile3', name: 'pages.profile3',
component: () => import('@src/views/user/editprofile/editprofile.vue'), component: () => import('@/views/user/editprofile/editprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -141,7 +141,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -152,7 +152,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -163,7 +163,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -174,7 +174,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -193,7 +193,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -204,7 +204,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -215,7 +215,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -226,7 +226,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -237,7 +237,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -1,6 +1,6 @@
{ {
"name": "piuchebuono", "name": "piuchebuono",
"version": "1.2.85", "version": "1.2.86",
"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.85' quasar dev", "dev": "PORT=8085 APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.86' 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",

View File

@@ -14,7 +14,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -29,7 +29,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -40,7 +40,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -52,7 +52,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -63,7 +63,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/editprofile', path: '/editprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile3', name: 'pages.profile3',
component: () => import('@src/views/user/editprofile/editprofile.vue'), component: () => import('@/views/user/editprofile/editprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -120,7 +120,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -133,7 +133,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -144,7 +144,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -163,7 +163,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -174,7 +174,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -185,7 +185,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -196,7 +196,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -207,7 +207,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/fundraising', path: '/fundraising',
materialIcon: 'fas fa-hand-holding-heart', materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising', name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'), component: () => import('@/root/fundraising/fundraising.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -1,6 +1,6 @@
{ {
"name": "riso", "name": "riso",
"version": "1.2.85", "version": "1.2.86",
"productName": "Riso 💚 - Rete Italiana Scambio orizzontale", "productName": "Riso 💚 - Rete Italiana Scambio orizzontale",
"description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.", "description": "Progetto RISO (Rete Italiana Scambio orizzontale) promuove una rete di comunità locali che favoriscono scambi di beni, servizi e ospitalità. Con l'App RISO, sviluppata per facilitare il baratto, il dono e l'uso di monete alternative come i RIS, il progetto crea legami autentici basati sulla fiducia e sostenibilità. Partecipa agli scambi e costruisci una comunità più consapevole e autosufficiente.",
"author": "Surya", "author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev", "dev": "APP_VERSION='1.2.86' 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.85' quasar build -m pwa", "buildpwa": "NODE_ENV=production APP_VERSION='1.2.86' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa", "buildpwatest": "NODE_ENV=production APP_VERSION='1.2.86' 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=8094 APP_VERSION='1.2.85' quasar dev -m pwa", "pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.86' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev", "spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.86' 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",

View File

@@ -38,7 +38,7 @@ const firstPage = {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -53,7 +53,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/', path: '/',
materialIcon: 'home', materialIcon: 'home',
name: 'pages.home', name: 'pages.home',
component: () => import('@src/root/mainview/mainview.vue'), component: () => import('@/root/mainview/mainview.vue'),
reqauth: false, reqauth: false,
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -64,7 +64,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/test', path: '/test',
materialIcon: 'fas fa-test', materialIcon: 'fas fa-test',
name: 'mypages.test', name: 'mypages.test',
component: () => import('@src/views/testServer/testServer.vue'), component: () => import('@/views/testServer/testServer.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/goods', path: '/goods',
materialIcon: 'fas fa-tshirt', materialIcon: 'fas fa-tshirt',
name: 'mypages.goods', name: 'mypages.goods',
component: () => import('@src/root/goods/goods.vue'), component: () => import('@/root/goods/goods.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/services', path: '/services',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.services', name: 'mypages.services',
component: () => import('@src/root/services/services.vue'), component: () => import('@/root/services/services.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/activities', path: '/activities',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.activities', name: 'mypages.activities',
component: () => import('@src/root/activities/activities.vue'), component: () => import('@/root/activities/activities.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/provapao', path: '/provapao',
materialIcon: 'fas fa-house-user', materialIcon: 'fas fa-house-user',
name: 'mypages.provapao', name: 'mypages.provapao',
component: () => import('@src/root/provapao/provapao.vue'), component: () => import('@/root/provapao/provapao.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -118,7 +118,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/hosps', path: '/hosps',
materialIcon: 'fas fa-bed', materialIcon: 'fas fa-bed',
name: 'mypages.hosp', name: 'mypages.hosp',
component: () => import('@src/root/hosp/hosp.vue'), component: () => import('@/root/hosp/hosp.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -129,7 +129,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuits', path: '/circuits',
materialIcon: 'fas fa-coins', materialIcon: 'fas fa-coins',
name: 'mypages.circuits', name: 'mypages.circuits',
component: () => import('@src/views/user/mycircuits/mycircuits.vue'), component: () => import('@/views/user/mycircuits/mycircuits.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -140,7 +140,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/events', path: '/events',
materialIcon: 'fas fa-bullhorn', materialIcon: 'fas fa-bullhorn',
name: 'mypages.events', name: 'mypages.events',
component: () => import('@src/root/eventi/eventi.vue'), component: () => import('@/root/eventi/eventi.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -151,7 +151,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/install_site', path: '/install_site',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.install_site', name: 'pages.install_site',
component: () => import('@src/views/admin/install_site/install_site.vue'), component: () => import('@/views/admin/install_site/install_site.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -162,7 +162,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myprofile', path: '/myprofile',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.profile', name: 'pages.profile',
component: () => import('@src/views/user/myprofile/myprofile.vue'), component: () => import('@/views/user/myprofile/myprofile.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -184,7 +184,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/friends', path: '/friends',
materialIcon: 'fas fa-user-friends', materialIcon: 'fas fa-user-friends',
name: 'mypages.iscritti', name: 'mypages.iscritti',
component: () => import('@src/views/user/myfriends/myfriends.vue'), component: () => import('@/views/user/myfriends/myfriends.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: true, infooter: true,
@@ -195,7 +195,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/groups', path: '/groups',
materialIcon: 'fas fa-users', materialIcon: 'fas fa-users',
name: 'mypages.groups', name: 'mypages.groups',
component: () => import('@src/views/user/mygroups/mygroups.vue'), component: () => import('@/views/user/mygroups/mygroups.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true },
inmenu: true, inmenu: true,
infooter: false, infooter: false,
@@ -206,7 +206,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/grp/:groupname', path: '/grp/:groupname',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@src/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/circuit/:path', path: '/circuit/:path',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.circuit2', name: 'proj.circuit2',
component: () => import('@src/views/user/mycircuit/mycircuit.vue'), component: () => import('@/views/user/mycircuit/mycircuit.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -236,7 +236,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mypage/:idBacheca', path: '/mypage/:idBacheca',
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -247,7 +247,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myservice/:idSkill', path: '/myservice/:idSkill',
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@src/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -258,7 +258,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/myhosps/:idHosp', path: '/myhosps/:idHosp',
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -269,7 +269,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/mygood/:idGood', path: '/mygood/:idGood',
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@src/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true, newpage: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
@@ -280,7 +280,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/sostieniilprogetto', path: '/sostieniilprogetto',
materialIcon: 'fas fa-hand-holding-heart', materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising', name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'), component: () => import('@/root/fundraising/fundraising.vue'),
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -290,7 +290,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
path: '/calendario-eventi', path: '/calendario-eventi',
materialIcon: 'event', materialIcon: 'event',
name: 'ris.calendario_eventi_riso', name: 'ris.calendario_eventi_riso',
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'), component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar', extraclass: 'isCalendar',
inmenu: false, inmenu: false,
infooter: false infooter: false

View File

@@ -3,7 +3,7 @@
/* global workbox */ /* global workbox */
/* global cfgenv */ /* global cfgenv */
const VITE_APP_VERSION = '1.2.85'; const VITE_APP_VERSION = '1.2.86';
// Costanti di configurazione // Costanti di configurazione
const DYNAMIC_CACHE = 'dynamic-cache-v2'; const DYNAMIC_CACHE = 'dynamic-cache-v2';
@@ -117,8 +117,62 @@ self.addEventListener('activate', (event) => {
); );
}) })
); );
self.clients.claim(); // SERVE? OPPURE NO ?
}); });
const USASYNC = false;
// PER ATTIVARE IL SYNC TOGLI L'AREA COMMENTATA DI 'FETCH' QUI SOTTO ....
/*
// Strategia fetch
self.addEventListener('fetch', (event) => {
const { request } = event;
const url = new URL(request.url);
// ============================================
// IMPORTANTE: NON cachare API /sync o /loadsite
// ============================================
if (url.pathname.includes('/api/') ||
url.pathname.includes('/sync') ||
url.pathname.includes('/loadsite')) {
// Lascia passare normalmente - IndexedDB gestisce cache
return;
}
// ============================================
// Cache Strategy per assets statici
// ============================================
if (request.method === 'GET') {
event.respondWith(
caches.match(request).then((cachedResponse) => {
if (cachedResponse) {
return cachedResponse;
}
return fetch(request).then((response) => {
// Non cachare se non è successo
if (!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
// Clona e salva in cache
const responseToCache = response.clone();
caches.open(CACHE_NAME).then((cache) => {
cache.put(request, responseToCache);
});
return response;
}).catch(() => {
// Offline fallback
if (request.destination === 'document') {
return caches.match('/offline.html');
}
});
})
);
}
});
*/
console.log( console.log(
' [ VER-' + ' [ VER-' +
VITE_APP_VERSION + VITE_APP_VERSION +

View File

@@ -1,15 +1,15 @@
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
import { BannerCookies } from '@src/components/BannerCookies'; import { BannerCookies } from '@/components/BannerCookies';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { useGlobalStore } from '@store/globalStore'; import { useGlobalStore } from '@store/globalStore';
import { useUserStore } from '@store/UserStore'; import { useUserStore } from '@store/UserStore';
import { MyHeader } from '@src/components/MyHeader'; import { MyHeader } from '@/components/MyHeader';
import { MyFooter } from '@src/components/MyFooter'; import { MyFooter } from '@/components/MyFooter';
import { CCheckUpdatesPWA } from '@src/components/CCheckUpdatesPWA'; import { CCheckUpdatesPWA } from '@/components/CCheckUpdatesPWA';
import { CFirstPageApp } from '@src/components/CFirstPageApp'; import { CFirstPageApp } from '@/components/CFirstPageApp';
import { computed, onMounted, ref, watch } from 'vue'; import { computed, onMounted, ref, watch } from 'vue';
import { CProvaPao } from '@src/components/CProvaPao'; import { CProvaPao } from '@/components/CProvaPao';
import { tools } from '@tools'; import { tools } from '@tools';
import { toolsext } from '@store/Modules/toolsext'; import { toolsext } from '@store/Modules/toolsext';

View File

@@ -1,15 +1,15 @@
// import something here // import something here
// import { isEqual } from 'lodash' // import { isEqual } from 'lodash'
// import { ProgressBar } from '@src/store/Modules/Interface' // import { ProgressBar } from '@/store/Modules/Interface'
// import { UserStore } from "@store" // import { UserStore } from "@store"
// @ts-ignore // @ts-ignore
import { boot } from 'quasar/wrappers' import { boot } from 'quasar/wrappers'
import { useGlobalStore } from '@src/store/globalStore'; import { useGlobalStore } from '@/store/globalStore';
import { useUserStore } from '@src/store/UserStore'; import { useUserStore } from '@/store/UserStore';
import { tools } from '@src/store/Modules/tools'; import { tools } from '@/store/Modules/tools';
export default boot(({ app, router }) => { export default boot(({ app, router }) => {
// ****************************************** // ******************************************
@@ -35,7 +35,7 @@ export default boot(({ app, router }) => {
globalStore.editOn = tools.getCookie('edn_' + pageKey, '0') === '1' globalStore.editOn = tools.getCookie('edn_' + pageKey, '0') === '1'
} }
} catch(e) { } catch(e) {
} }
next() next()
@@ -53,10 +53,10 @@ export default boot(({ app, router }) => {
//} else { //} else {
// next() // next()
//} //}
// Continue with the navigation // Continue with the navigation
}); });
/* router.beforeEach((to, from, next) => { /* router.beforeEach((to, from, next) => {

View File

@@ -5,7 +5,7 @@ import axios, {
} from 'axios' } from 'axios'
// import { default as VueRouter } from 'vue-router' // import { default as VueRouter } from 'vue-router'
import { serv_constants } from '@src/store/Modules/serv_constants' import { serv_constants } from '@/store/Modules/serv_constants'
// import { TokenHelper } from "./token-helper"; // import { TokenHelper } from "./token-helper";
let initialized = false let initialized = false

View File

@@ -5,7 +5,7 @@ import axios, {
} from 'axios' } from 'axios'
// import { default as VueRouter } from 'vue-router' // import { default as VueRouter } from 'vue-router'
import { serv_constants } from '@src/store/Modules/serv_constants' import { serv_constants } from '@/store/Modules/serv_constants'
// import { TokenHelper } from "./token-helper"; // import { TokenHelper } from "./token-helper";
let initialized = false let initialized = false

View File

@@ -190,6 +190,9 @@ export const shared_consts = {
PAGE_SECTION: 1500, PAGE_SECTION: 1500,
PROFILE_COMPLETITION: 1510, PROFILE_COMPLETITION: 1510,
RISOHOME: 1600, RISOHOME: 1600,
RISOHOME_MODERN: 1610,
PAGERIS: 1620,
CMYCIRCUITS: 1630,
}, },
QUERYTYPE_MYGROUP: 1, QUERYTYPE_MYGROUP: 1,
@@ -321,6 +324,8 @@ export const shared_consts = {
'sectors', 'sectors',
'goods', 'goods',
'sectorgoods', 'sectorgoods',
'bachecas',
'sectorbachecas',
'catgrps', 'catgrps',
'skills', 'skills',
'subskills', 'subskills',
@@ -440,6 +445,7 @@ export const shared_consts = {
TABLES_REC_ID: [ TABLES_REC_ID: [
'skills', 'skills',
'goods', 'goods',
'bachecas',
'subskills', 'subskills',
'myskills', 'myskills',
'mybachecas', 'mybachecas',
@@ -788,98 +794,266 @@ export const shared_consts = {
{ {
value: 2, value: 2,
label: 'Si accettano cani', label: 'Si accettano cani',
icon: 'pets',
color: '#795548', // brown
}, },
{ {
value: 3, value: 3,
label: 'Si accettano gatti', label: 'Si accettano gatti',
icon: 'pets',
color: '#FF9800', // orange
}, },
{ {
value: 4, value: 4,
label: "E' consentito fumare in casa", label: "E' consentito fumare in casa",
icon: 'smoking_rooms',
color: '#9E9E9E', // grey
}, },
{ {
value: 5, value: 5,
label: 'Accessibile con sedia a rotelle', label: 'Accessibile con sedia a rotelle',
icon: 'accessible',
color: '#2196F3', // blue
}, },
{ {
value: 6, value: 6,
label: 'Parcheggio gratuito nella proprietà', label: 'Parcheggio gratuito nella proprietà',
icon: 'local_parking',
color: '#3F51B5', // indigo
}, },
{ {
value: 7, value: 7,
label: 'Wi-fi disponibile', label: 'Wi-fi disponibile',
icon: 'wifi',
color: '#00BCD4', // cyan
}, },
{ {
value: 8, value: 8,
label: 'Sono permessi soggiorni a lungo termine', label: 'Sono permessi soggiorni a lungo termine',
icon: 'calendar_month',
color: '#009688', // teal
}, },
{ {
value: 9, value: 9,
label: 'Cucina Vegetariana', label: 'Cucina Vegetariana',
icon: 'restaurant',
color: '#4CAF50', // green
}, },
{ {
value: 10, value: 10,
label: 'Cucina Vegana', label: 'Cucina Vegana',
icon: 'spa',
color: '#8BC34A', // light-green
}, },
{ {
value: 11, value: 11,
label: 'Uso della Cucina', label: 'Uso della Cucina',
icon: 'kitchen',
color: '#FFC107', // amber
}, },
{ {
value: 12, value: 12,
label: 'Uso della Lavatrice', label: 'Uso della Lavatrice',
icon: 'local_laundry_service',
color: '#607D8B', // blue-grey
}, },
{ {
value: 13, value: 13,
label: 'Aria condizionata', label: 'Aria condizionata',
icon: 'ac_unit',
color: '#03A9F4', // light-blue
}, },
{ {
value: 14, value: 14,
label: 'Ventilatore', label: 'Ventilatore',
icon: 'air',
color: '#00BCD4', // cyan
}, },
{ {
value: 15, value: 15,
label: "Doccia all'aperto", label: "Doccia all'aperto",
icon: 'shower',
color: '#2196F3', // blue
}, },
{ {
value: 16, value: 16,
label: 'TV', label: 'TV',
icon: 'tv',
color: '#673AB7', // deep-purple
}, },
{ {
value: 17, value: 17,
label: 'Eventi consentiti', label: 'Eventi consentiti',
icon: 'celebration',
color: '#E91E63', // pink
}, },
{ {
value: 18, value: 18,
label: 'Adatto a bambini da 2 a 12 anni', label: 'Adatto a bambini da 2 a 12 anni',
icon: 'child_care',
color: '#F9A825'
}, },
{ {
value: 19, value: 19,
label: 'Adatto ai neonati (fino ai 2 anni)', label: 'Adatto ai neonati (fino ai 2 anni)',
icon: 'baby_changing_station',
color: '#F8BBD0', // pink-light
}, },
{ {
value: 20, value: 20,
label: 'Biancheria inclusa', label: 'Biancheria inclusa',
icon: 'bed',
color: '#9C27B0', // purple
}, },
{ {
value: 21, value: 21,
label: 'Biancheria su richiesta (a parte)', label: 'Biancheria su richiesta (a parte)',
icon: 'bedroom_parent',
color: '#673AB7', // deep-purple
}, },
{ {
value: 22, value: 22,
label: 'Asciugamani', label: 'Asciugamani',
icon: 'dry_cleaning',
color: '#009688', // teal
}, },
{ {
value: 23, value: 23,
label: 'Asciugacapelli', label: 'Asciugacapelli',
icon: 'iron',
color: '#F44336', // red
}, },
{ {
value: 24, value: 24,
label: 'Riscaldamento a legna', label: 'Riscaldamento a legna',
icon: 'fireplace',
color: '#FF5722', // deep-orange
}, },
{ {
value: 25, value: 25,
label: 'Riscaldamento a gas', label: 'Riscaldamento a gas',
icon: 'heat_pump',
color: '#FF9800', // orange
},
{
value: 26,
label: 'Colazione inclusa',
icon: 'free_breakfast',
color: '#FFC107', // amber
},
{
value: 27,
label: 'Giardino/Spazio esterno',
icon: 'yard',
color: '#4CAF50', // green
},
{
value: 28,
label: 'Terrazzo/Balcone',
icon: 'balcony',
color: '#CDDC39', // lime
},
{
value: 29,
label: 'Silenzioso/Zona tranquilla',
icon: 'volume_off',
color: '#607D8B', // blue-grey
},
{
value: 30,
label: 'Vicino a mezzi pubblici',
icon: 'directions_bus',
color: '#3F51B5', // indigo
},
{
value: 31,
label: 'Biciclette disponibili',
icon: 'directions_bike',
color: '#009688', // teal
},
{
value: 32,
label: 'Camino',
icon: 'fireplace',
color: '#795548', // brown
},
{
value: 33,
label: 'Barbecue',
icon: 'outdoor_grill',
color: '#F44336', // red
},
{
value: 34,
label: 'Piscina',
icon: 'pool',
color: '#03A9F4', // light-blue
},
{
value: 35,
label: 'Sauna',
icon: 'hot_tub',
color: '#FF5722', // deep-orange
},
{
value: 36,
label: 'Vista panoramica',
icon: 'landscape',
color: '#9C27B0', // purple
},
{
value: 37,
label: 'In campagna',
icon: 'nature',
color: '#4CAF50', // green
},
{
value: 38,
label: 'In montagna',
icon: 'terrain',
color: '#795548', // brown
},
{
value: 39,
label: 'Vicino al mare',
icon: 'beach_access',
color: '#2196F3', // blue
},
{
value: 40,
label: 'Animali da fattoria',
icon: 'agriculture',
color: '#795548', // brown
},
{
value: 41,
label: 'Orto/Permacultura',
icon: 'eco',
color: '#4CAF50', // green
},
{
value: 42,
label: 'Prodotti biologici/km zero',
icon: 'local_florist',
color: '#8BC34A', // light-green
},
{
value: 43,
label: 'Scambio lavoro/volontariato',
icon: 'handshake',
color: '#FF9800', // orange
},
{
value: 44,
label: 'Comunità/Ecovillaggio',
icon: 'groups',
color: '#9C27B0', // purple
},
{
value: 45,
label: 'Energie rinnovabili',
icon: 'solar_power',
color: '#FFEB3B', // yellow
}, },
], ],
@@ -1836,8 +2010,8 @@ export const shared_consts = {
icon: 'fas fa-list', icon: 'fas fa-list',
}, },
{ {
value: 150, value: 150, // CSENDRISTO
label: 'SendCoinTo', label: 'Bott (Invia/Ricevi RIS)',
icon: 'fas fa-wallet', icon: 'fas fa-wallet',
}, },
{ {
@@ -1943,6 +2117,21 @@ export const shared_consts = {
label: 'HomePage RISO', label: 'HomePage RISO',
icon: 'fas fa-home', icon: 'fas fa-home',
}, },
{
value: 1610, // RISOHOME_MODERN
label: 'RISO Home Modern',
icon: 'fas fa-home',
},
{
value: 1620, // PAGERIS
label: 'Pagina RIS',
icon: 'fas fa-home',
},
{
value: 1630, // CMYCIRCUITS
label: 'CMyCircuits (Old Page)',
icon: 'fas fa-home',
},
{ {
value: 258, value: 258,
label: 'Registration', label: 'Registration',
@@ -2388,9 +2577,9 @@ export const shared_consts = {
} else if (table === this.TABLES_MYBACHECAS) { } else if (table === this.TABLES_MYBACHECAS) {
proj = { proj = {
recSkill: 1, recSkill: 1,
sector: 1, sectorBacheca: 1,
idSector: 1, idSectorBacheca: 1,
idSkill: 1, idBacheca: 1,
// 'idSubSkill': 1, // 'idSubSkill': 1,
idStatusSkill: 1, idStatusSkill: 1,
idContribType: 1, idContribType: 1,
@@ -2672,5 +2861,5 @@ export const shared_consts = {
FILETYPE: { FILETYPE: {
IMG: 1, IMG: 1,
PDF: 2, PDF: 2,
} },
}; };

View File

@@ -3,7 +3,7 @@ import { useI18n } from 'vue-i18n'
import { tools } from '../../store/Modules/tools' import { tools } from '../../store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'

View File

@@ -5,9 +5,9 @@ import { useUserStore } from '@store/UserStore'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import type { IAccomodation} from 'model'; import type { IAccomodation} from 'model';
import { IGallery, IImgGallery } from 'model' import { IGallery, IImgGallery } from 'model'
import { CMyPage } from '@src/components/CMyPage' import { CMyPage } from '@/components/CMyPage'
import { tools } from '@tools' import { tools } from '@tools'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import { CMySelect } from '../CMySelect' import { CMySelect } from '../CMySelect'

View File

@@ -1,5 +1,5 @@
import { defineComponent, onMounted, ref, toRef, watch, toRefs } from 'vue' import { defineComponent, onMounted, ref, toRef, watch, toRefs } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

View File

@@ -5,7 +5,7 @@ import { tools } from '../../store/Modules/tools'
import { fieldsTable } from '@store/Modules/fieldsTable' import { fieldsTable } from '@store/Modules/fieldsTable'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import type { import type {
ISearchList ISearchList
@@ -35,11 +35,11 @@ import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useQuasar, exportFile } from 'quasar' import { useQuasar, exportFile } from 'quasar'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import translate from '@src/globalroutines/util' import translate from '@/globalroutines/util'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
import { CMyCardPopup } from '@src/components/CMyCardPopup' import { CMyCardPopup } from '@/components/CMyCardPopup'
import { CMyCardGrpPopup } from '@src/components/CMyCardGrpPopup' import { CMyCardGrpPopup } from '@/components/CMyCardGrpPopup'
import { CMyCardCircuitPopup } from '@src/components/CMyCardCircuitPopup' import { CMyCardCircuitPopup } from '@/components/CMyCardCircuitPopup'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { table } from 'console' import { table } from 'console'
import { globals } from 'jest.config' import { globals } from 'jest.config'
@@ -256,7 +256,11 @@ export default defineComponent({
if (recSector) { if (recSector) {
tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + recSector.value, newval) tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + recSector.value, newval)
} }
// setCategBySector('sectorgoods', table, newval) } else if (table === toolsext.TABMYBACHECAS) {
const recSector = searchList.value.find((rec) => rec.table === toolsext.TABSECTORBACHECAS)
if (recSector) {
tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + recSector.value, newval)
}
} }

View File

@@ -1,42 +1,188 @@
.text-cls{ // Spacing ridotto
font-weight: bold; $s-xs: 4px;
$s-sm: 6px;
$s-md: 8px;
// Wrapper moderno
.modern-btn-wrapper {
padding: $s-xs;
&.modern-btn-col-3 {
flex: 0 0 33.333%;
max-width: 33.333%;
@media (max-width: 599px) {
flex: 0 0 33.333%;
max-width: 33.333%;
}
@media (min-width: 600px) and (max-width: 1023px) {
flex: 0 0 33.333%;
max-width: 33.333%;
}
@media (min-width: 1024px) and (max-width: 1439px) {
flex: 0 0 25%;
max-width: 25%;
}
@media (min-width: 1440px) {
flex: 0 0 16.666%;
max-width: 16.666%;
}
}
&.modern-btn-col-2 {
flex: 0 0 50%;
max-width: 50%;
@media (min-width: 600px) and (max-width: 1023px) {
flex: 0 0 50%;
max-width: 50%;
}
@media (min-width: 1024px) and (max-width: 1439px) {
flex: 0 0 33.333%;
max-width: 33.333%;
}
@media (min-width: 1440px) {
flex: 0 0 25%;
max-width: 25%;
}
}
} }
.my-text { // Bottoni moderni
font-size: 1rem; .modern-bigbtn {
font-weight: bold;
line-height: 1.5rem;
letter-spacing: 0.0125em;
}
.my-text_3 {
font-size: 1rem;
font-weight: bold;
line-height: 1.5rem;
letter-spacing: 0.0125em;
}
.my-text-small {
font-size: 1rem;
line-height: 1rem;
letter-spacing: 0.0125em;
}
.mybox_3 {
min-width: 100px;
min-height: 100px;
width: 100%; width: 100%;
min-height: 90px;
min-width: 90px;
padding: $s-sm;
flex-direction: column;
gap: $s-xs;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.5s ease;
}
&:hover::before {
left: 100%;
}
&:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2);
}
.btn-icon {
margin: $s-xs;
font-size: 2rem;
}
.btn-icon-large {
margin: $s-xs;
}
.btn-label,
.btn-label-large {
margin: $s-xs;
font-size: 0.95rem;
font-weight: 700;
line-height: 1.3;
letter-spacing: 0.01em;
text-align: center;
white-space: normal;
word-break: break-word;
}
.btn-label-large {
font-size: 1.1rem;
}
} }
.mybox { .modern-smallbtn {
min-width: 112px;
min-height: 112px;
width: 100%; width: 100%;
min-height: 70px;
min-width: 80px;
padding: $s-sm;
flex-direction: column;
gap: $s-xs;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
&::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.3), transparent);
transition: left 0.5s ease;
}
&:hover::before {
left: 100%;
}
&:hover {
transform: translateY(-2px);
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.2);
}
.btn-icon-small {
margin: $s-xs;
}
.btn-label-small {
margin: $s-xs;
font-size: 0.85rem;
font-weight: 600;
line-height: 1.2;
letter-spacing: 0.01em;
text-align: center;
white-space: normal;
word-break: break-word;
}
} }
.mybox_small { // Responsive adjustments
min-width: 110px; @media (max-width: 599px) {
width: 100%; .modern-bigbtn {
} min-height: 85px;
min-width: 85px;
.btn-icon {
font-size: 1.8rem;
}
.btn-label {
font-size: 0.85rem;
}
.btn-label-large {
font-size: 1rem;
}
}
.modern-smallbtn {
min-height: 65px;
min-width: 70px;
.btn-label-small {
font-size: 0.75rem;
}
}
}

View File

@@ -1,27 +1,63 @@
<template> <template>
<div v-if="numcol === 3" class="col-xs-4 col-sm-4 col-md-3 col-lg-2"> <div v-if="numcol === 3" class="modern-btn-wrapper modern-btn-col-3">
<div class="q-ma-sm"> <q-btn
<q-btn v-if="!small" :flat="flat" class="mybox_3" :color="color" rounded push :to="tools.updateLink(to)" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 180)"> v-if="!small"
<q-icon class="q-ma-sm" :name="icon"/> :flat="flat"
<div class="q-ma-sm my-text_3 text-cls no-wrap"><span v-html="label"></span></div> class="modern-bigbtn"
</q-btn> :color="color"
<q-btn v-if="small" :flat="flat" class="mybox_small" :color="color" rounded push :to="tools.updateLink(to)" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 180)"> rounded
<q-icon class="q-ma-sm" :name="icon" size="sm"/> push
<div class="q-ma-xs my-text-small text-cls no-wrap"><span v-html="label"></span></div> :to="tools.updateLink(to)"
</q-btn> v-bind="$attrs"
</div> :style="tools.getbackgroundGradient(color, 180)"
>
<q-icon class="btn-icon" :name="icon"/>
<div class="btn-label"><span v-html="label"></span></div>
</q-btn>
<q-btn
v-if="small"
:flat="flat"
class="modern-smallbtn"
:color="color"
rounded
push
:to="tools.updateLink(to)"
v-bind="$attrs"
:style="tools.getbackgroundGradient(color, 180)"
>
<q-icon class="btn-icon-small" :name="icon" size="sm"/>
<div class="btn-label-small"><span v-html="label"></span></div>
</q-btn>
</div> </div>
<div v-else class="col-xs-6 col-sm-6 col-md-4 col-lg-3"> <div v-else class="modern-btn-wrapper modern-btn-col-2">
<div class="q-ma-sm"> <q-btn
<q-btn v-if="!small" :flat="flat" class="mybox" :color="color" rounded push :to="tools.updateLink(to)" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 0)"> v-if="!small"
<q-icon class="q-ma-sm" size="3rem" :name="icon"/> :flat="flat"
<div class="q-ma-sm text-h5-diff text-cls no-wrap"><span v-html="label"></span></div> class="modern-bigbtn"
</q-btn> :color="color"
<q-btn v-if="small" :flat="flat" class="mybox_small" :color="color" rounded push :to="tools.updateLink(to)" v-bind="$attrs" :style="tools.getbackgroundGradient(color, 0)"> rounded
<q-icon class="q-ma-sm" :name="icon" size="sm"/> push
<div class="q-ma-xs my-text-small text-cls no-wrap"><span v-html="label"></span></div> :to="tools.updateLink(to)"
</q-btn> v-bind="$attrs"
</div> :style="tools.getbackgroundGradient(color, 0)"
>
<q-icon class="btn-icon-large" size="3rem" :name="icon"/>
<div class="btn-label-large"><span v-html="label"></span></div>
</q-btn>
<q-btn
v-if="small"
:flat="flat"
class="modern-smallbtn"
:color="color"
rounded
push
:to="tools.updateLink(to)"
v-bind="$attrs"
:style="tools.getbackgroundGradient(color, 0)"
>
<q-icon class="btn-icon-small" :name="icon" size="sm"/>
<div class="btn-label-small"><span v-html="label"></span></div>
</q-btn>
</div> </div>
</template> </template>

View File

@@ -6,9 +6,9 @@ import { IOperators, ISize } from 'model'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { CMySlider } from '@src/components/CMySlider' import { CMySlider } from '@/components/CMySlider'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
export default defineComponent({ export default defineComponent({
name: 'CBorders', name: 'CBorders',

View File

@@ -2,9 +2,9 @@ import { ref, computed, defineComponent, onMounted } from 'vue';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
import { tools } from '@tools'; import { tools } from '@tools';
import { IMyCard, IMyPage, IOperators } from '@src/model'; import { IMyCard, IMyPage, IOperators } from '@/model';
import objectId from '@src/js/objectId'; import objectId from '@/js/objectId';
export default defineComponent({ export default defineComponent({
name: 'ElementComponent', name: 'ElementComponent',

View File

@@ -6,7 +6,7 @@ import type { IDiscipline, IEvents } from 'model'
import { useCalendarStore } from '@store/CalendarStore' import { useCalendarStore } from '@store/CalendarStore'
import { CMyTeacher } from '@src/components/CMyTeacher' import { CMyTeacher } from '@/components/CMyTeacher'
// @ts-ignore // @ts-ignore
import MixinOperator from '../../mixins/mixin-operator' import MixinOperator from '../../mixins/mixin-operator'

View File

@@ -1,4 +1,4 @@
import { CCard } from '@src/components/CCard' import { CCard } from '@/components/CCard'
import MixinOperator from '../../mixins/mixin-operator' import MixinOperator from '../../mixins/mixin-operator'
import { defineComponent, ref } from 'vue' import { defineComponent, ref } from 'vue'

View File

@@ -8,14 +8,14 @@ import { useI18n } from 'vue-i18n';
import { toolsext } from '@store/Modules/toolsext'; import { toolsext } from '@store/Modules/toolsext';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
import { costanti } from '@costanti'; import { costanti } from '@costanti';
import type { ICart, IOrder, IOrderCart, IProduct } from '@src/model/Products'; import type { ICart, IOrder, IOrderCart, IProduct } from '@/model/Products';
import { IShareWithUs } from '@src/model/Products'; import { IShareWithUs } from '@/model/Products';
import { shared_consts } from '@src/common/shared_vuejs'; import { shared_consts } from '@/common/shared_vuejs';
import { CSingleCart } from '../CSingleCart'; import { CSingleCart } from '../CSingleCart';
import { CTitleBanner } from '@src/components/CTitleBanner'; import { CTitleBanner } from '@/components/CTitleBanner';
import { CSelectUserActive } from '@src/components/CSelectUserActive'; import { CSelectUserActive } from '@/components/CSelectUserActive';
export default defineComponent({ export default defineComponent({
name: 'CCart', name: 'CCart',

View File

@@ -12,13 +12,13 @@ import {
} from 'vue'; } from 'vue';
import { tools } from '@tools'; import { tools } from '@tools';
import { CMyFieldDb } from '@src/components/CMyFieldDb'; import { CMyFieldDb } from '@/components/CMyFieldDb';
import { costanti } from '@costanti'; import { costanti } from '@costanti';
import { useGlobalStore } from '@store/globalStore'; import { useGlobalStore } from '@store/globalStore';
import { useUserStore } from '@store/UserStore'; import { useUserStore } from '@store/UserStore';
import { CTitlePage } from '@src/components/CTitlePage'; import { CTitlePage } from '@/components/CTitlePage';
import { CGridTableRec } from '@src/components/CGridTableRec'; import { CGridTableRec } from '@/components/CGridTableRec';
import type { ICatalog, IColGridTable, INewCatalog, ISearchList } from 'model'; import type { ICatalog, IColGridTable, INewCatalog, ISearchList } from 'model';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { toolsext } from '@store/Modules/toolsext'; import { toolsext } from '@store/Modules/toolsext';

View File

@@ -107,6 +107,13 @@
/> />
<div class="row justify-center"> <div class="row justify-center">
<q-btn
label="Annulla"
v-close-popup
color="primary"
flat
class="q-ml-sm"
/>
<q-btn <q-btn
label="Aggiungi" label="Aggiungi"
type="submit" type="submit"
@@ -120,13 +127,6 @@
" "
color="primary" color="primary"
/> />
<q-btn
label="Annulla"
v-close-popup
color="primary"
flat
class="q-ml-sm"
/>
</div> </div>
</q-form> </q-form>
</q-card-section> </q-card-section>

View File

@@ -1,8 +1,8 @@
import type { PropType} from 'vue'; import type { PropType} from 'vue';
import { defineComponent, ref, watch } from 'vue' import { defineComponent, ref, watch } from 'vue'
import { Catalogo } from '@src/views/ecommerce/catalogo' import { Catalogo } from '@/views/ecommerce/catalogo'
import type { IOptCatalogo } from '@src/model' import type { IOptCatalogo } from '@/model'
export default defineComponent({ export default defineComponent({
name: 'CCatalogo', name: 'CCatalogo',

View File

@@ -21,9 +21,9 @@ import { CViewTable } from '../CViewTable';
import { CMyValueDb } from '../CMyValueDb'; import { CMyValueDb } from '../CMyValueDb';
import { CPrice } from '../CPrice'; import { CPrice } from '../CPrice';
import { CText } from '../CText'; import { CText } from '../CText';
import { CLabel } from '@src/components/CLabel'; import { CLabel } from '@/components/CLabel';
import { CSchedaProdotto } from '@src/components/CSchedaProdotto'; import { CSchedaProdotto } from '@/components/CSchedaProdotto';
import { CModifTrafiletto } from '@src/components/CModifTrafiletto'; import { CModifTrafiletto } from '@/components/CModifTrafiletto';
import { CBarCode } from '../CBarCode'; import { CBarCode } from '../CBarCode';
import { CTableCupleLabelValue } from '../CTableCupleLabelValue'; import { CTableCupleLabelValue } from '../CTableCupleLabelValue';
@@ -40,12 +40,12 @@ import type {
IVariazione, IVariazione,
IRecFields, IRecFields,
ICatalog, ICatalog,
} from '@src/model'; } from '@/model';
import { IBaseOrder } from '@src/model'; import { IBaseOrder } from '@/model';
import { tools } from '@tools'; import { tools } from '@tools';
import { useProducts } from '@store/Products'; import { useProducts } from '@store/Products';
import { shared_consts } from '@src/common/shared_vuejs'; import { shared_consts } from '@/common/shared_vuejs';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { costanti } from '@costanti'; import { costanti } from '@costanti';

View File

@@ -5,8 +5,8 @@ import { useGlobalStore } from '@store/globalStore'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { tools } from '@tools' import { tools } from '@tools'
import { costanti } from '@store/Modules/costanti' import { costanti } from '@store/Modules/costanti'
import { static_data } from '@src/db/static_data' import { static_data } from '@/db/static_data'
import { CRegistration } from '@src/components/CRegistration' import { CRegistration } from '@/components/CRegistration'
export default defineComponent({ export default defineComponent({
name: 'CCheckIfIsLogged', name: 'CCheckIfIsLogged',

View File

@@ -13,15 +13,15 @@
<div class="card-icon-wrapper"> <div class="card-icon-wrapper">
<q-icon name="fas fa-sign-in-alt" size="48px" class="card-icon" /> <q-icon name="fas fa-sign-in-alt" size="48px" class="card-icon" />
</div> </div>
<div class="card-content"> <div class="card-content">
<h3 class="card-title">Benvenuto su RISO</h3> <h3 class="card-title">Benvenuto su {{ tools.sitename() }}</h3>
<p class="card-description"> <p class="card-description">
Accedi con le tue credenziali per utilizzare la APP e per unirti Accedi con le tue credenziali per utilizzare la APP e per unirti
al Circuito di scambio RIS del tuo territorio ai membri della Community
</p> </p>
</div> </div>
<div class="card-actions"> <div class="card-actions">
<q-btn <q-btn
unelevated unelevated
@@ -47,7 +47,7 @@
<span class="telegram-subtitle">Unisciti al gruppo Provinciale</span> <span class="telegram-subtitle">Unisciti al gruppo Provinciale</span>
</div> </div>
</div> </div>
<q-btn <q-btn
rounded rounded
unelevated unelevated
@@ -71,7 +71,7 @@
<span class="help-subtitle">Consulta la guida completa</span> <span class="help-subtitle">Consulta la guida completa</span>
</div> </div>
</div> </div>
<q-btn <q-btn
rounded rounded
unelevated unelevated

View File

@@ -6,9 +6,9 @@ import { useGlobalStore } from '@store/globalStore'
import type { PropType} from 'vue'; import type { PropType} from 'vue';
import { defineComponent, computed, ref } from 'vue' import { defineComponent, computed, ref } from 'vue'
import type { IUserFields } from 'model' import type { IUserFields } from 'model'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { CLabel } from '@src/components/CLabel' import { CLabel } from '@/components/CLabel'
import { CSendCoins } from '@src/components/CSendCoins' import { CSendCoins } from '@/components/CSendCoins'
export default defineComponent({ export default defineComponent({
name: 'CContactUser', name: 'CContactUser',

View File

@@ -12,11 +12,11 @@ import { func_tools, toolsext } from '@store/Modules/toolsext'
import { tools } from '@tools' import { tools } from '@tools'
import { useProducts } from '@store/Products' import { useProducts } from '@store/Products'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/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, ICatalog } from '@src/model' import type { IOptCatalogo, IMyScheda, IProduct, ICatalog } from '@/model'
export default defineComponent({ export default defineComponent({

View File

@@ -4,7 +4,7 @@ import { useI18n } from 'vue-i18n'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { defineComponent } from 'vue' import { defineComponent } from 'vue'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
export default defineComponent({ export default defineComponent({
name: 'CCopyBtnSmall', name: 'CCopyBtnSmall',

View File

@@ -1,10 +1,10 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue' import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { date, useQuasar } from 'quasar' import { date, useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { CCurrencyValue } from '@src/components/CCurrencyValue' import { CCurrencyValue } from '@/components/CCurrencyValue'
import { CMyFieldDb } from '@src/components/CMyFieldDb' import { CMyFieldDb } from '@/components/CMyFieldDb'
import { costanti } from '@costanti' import { costanti } from '@costanti'

View File

@@ -1,5 +1,5 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue' import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { date, useQuasar } from 'quasar' import { date, useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

View File

@@ -6,7 +6,7 @@ import { useRouter } from 'vue-router'
import { useGlobalStore } from '../../store/globalStore' import { useGlobalStore } from '../../store/globalStore'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import type { IMainCard } from '@store/Modules/costanti'; import type { IMainCard } from '@store/Modules/costanti';
import { costanti } from '@store/Modules/costanti' import { costanti } from '@store/Modules/costanti'

View File

@@ -5,7 +5,7 @@ import { useRouter } from 'vue-router'
import { useGlobalStore } from '../../store/globalStore' import { useGlobalStore } from '../../store/globalStore'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import type { IMainCard } from '@costanti'; import type { IMainCard } from '@costanti';
import { costanti } from '@costanti' import { costanti } from '@costanti'

View File

@@ -1,5 +1,5 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue' import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { date, useQuasar } from 'quasar' import { date, useQuasar } from 'quasar'

View File

@@ -1,7 +1,7 @@
import { defineComponent, ref, watch, computed } from 'vue'; import { defineComponent, ref, watch, computed } from 'vue';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { tools } from '@src/store/Modules/tools'; import { tools } from '@/store/Modules/tools';
import { toolsext } from '@store/Modules/toolsext'; import { toolsext } from '@store/Modules/toolsext';
export default defineComponent({ export default defineComponent({

View File

@@ -1,7 +1,7 @@
import { defineComponent, ref, watch, computed } from 'vue'; import { defineComponent, ref, watch, computed } from 'vue';
import { useQuasar } from 'quasar'; import { useQuasar } from 'quasar';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import { tools } from '@src/store/Modules/tools'; import { tools } from '@/store/Modules/tools';
import { toolsext } from '@store/Modules/toolsext'; import { toolsext } from '@store/Modules/toolsext';
function toTS(s: string | null): number | null { function toTS(s: string | null): number | null {

View File

@@ -1,6 +1,6 @@
import { defineComponent } from 'vue' import { defineComponent } from 'vue'
import { ProductsList } from '@src/views/ecommerce' import { ProductsList } from '@/views/ecommerce'
export default defineComponent({ export default defineComponent({
name: 'CECommerce', name: 'CECommerce',

View File

@@ -5,6 +5,8 @@ $card-radius-mobile: 14px;
$transition-smooth: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); $transition-smooth: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
$transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
$gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
.stat-card { .stat-card {
position: relative; position: relative;
width: 100%; width: 100%;
@@ -15,7 +17,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
padding: 0; padding: 0;
border-radius: $card-radius-desktop; border-radius: $card-radius-desktop;
background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%); background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%);
box-shadow: box-shadow:
0 10px 30px -5px rgba(0, 0, 0, 0.1), 0 10px 30px -5px rgba(0, 0, 0, 0.1),
0 0 0 1px rgba(0, 0, 0, 0.02); 0 0 0 1px rgba(0, 0, 0, 0.02);
transition: $transition-base; transition: $transition-base;
@@ -24,7 +26,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
&:hover { &:hover {
transform: translateY(-6px) scale(1.02); transform: translateY(-6px) scale(1.02);
box-shadow: box-shadow:
0 20px 40px -8px rgba(0, 0, 0, 0.15), 0 20px 40px -8px rgba(0, 0, 0, 0.15),
0 0 0 1px rgba(0, 0, 0, 0.03); 0 0 0 1px rgba(0, 0, 0, 0.03);
@@ -108,7 +110,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
height: 64px; height: 64px;
border-radius: 50%; border-radius: 50%;
background: linear-gradient(145deg, #ffffff, #f5f5f5); background: linear-gradient(145deg, #ffffff, #f5f5f5);
box-shadow: box-shadow:
0 4px 12px rgba(0, 0, 0, 0.08), 0 4px 12px rgba(0, 0, 0, 0.08),
inset 0 1px 2px rgba(255, 255, 255, 0.9); inset 0 1px 2px rgba(255, 255, 255, 0.9);
@@ -158,26 +160,26 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
} }
.stat-title { .stat-title {
font-size: 0.75rem; font-size: 1rem;
font-weight: 600; font-weight: 600;
letter-spacing: 0.03em; letter-spacing: 0.03em;
line-height: 1.3; line-height: 1.3;
opacity: 0.85; opacity: 0.85;
text-transform: uppercase; text-transform: uppercase;
margin: 4px 0; margin: 4px 0;
color: #424242; color: #718096;
@media (max-width: 960px) { @media (max-width: 960px) {
font-size: 0.7rem; font-size: 0.9rem;
} }
@media (max-width: 718px) { @media (max-width: 718px) {
font-size: 0.65rem; font-size: 0.8rem;
margin: 2px 0; margin: 2px 0;
} }
@media (max-width: 480px) { @media (max-width: 480px) {
font-size: 0.6rem; font-size: 0.8rem;
letter-spacing: 0.02em; letter-spacing: 0.02em;
} }
} }
@@ -195,11 +197,14 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
} }
.stat-value { .stat-value {
font-size: 1.5rem;
font-weight: 700;
line-height: 1.1;
letter-spacing: -0.03em; letter-spacing: -0.03em;
color: #1a1a1a; font-size: 1.5rem;
font-weight: 800;
background: $gradient-primary;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
line-height: 1;
padding-bottom: 2px;
@media (max-width: 960px) { @media (max-width: 960px) {
font-size: 1.375rem; font-size: 1.375rem;
@@ -223,7 +228,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
font-size: 0.625rem; font-size: 0.625rem;
font-weight: 600; font-weight: 600;
color: white; color: white;
box-shadow: box-shadow:
0 3px 8px rgba(0, 0, 0, 0.2), 0 3px 8px rgba(0, 0, 0, 0.2),
inset 0 1px 2px rgba(255, 255, 255, 0.2); inset 0 1px 2px rgba(255, 255, 255, 0.2);
backdrop-filter: blur(8px); backdrop-filter: blur(8px);
@@ -276,12 +281,10 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
left: -50%; left: -50%;
width: 200%; width: 200%;
height: 200%; height: 200%;
background: linear-gradient( background: linear-gradient(45deg,
45deg, transparent 30%,
transparent 30%, rgba(255, 255, 255, 0.4) 50%,
rgba(255, 255, 255, 0.4) 50%, transparent 70%);
transparent 70%
);
transform: translateX(-100%) translateY(-100%); transform: translateX(-100%) translateY(-100%);
transition: transform 0.8s ease; transition: transform 0.8s ease;
pointer-events: none; pointer-events: none;
@@ -294,8 +297,8 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
border-radius: inherit; border-radius: inherit;
padding: 2px; padding: 2px;
background: linear-gradient(145deg, rgba(33, 150, 243, 0.3), rgba(156, 39, 176, 0.3)); background: linear-gradient(145deg, rgba(33, 150, 243, 0.3), rgba(156, 39, 176, 0.3));
-webkit-mask: -webkit-mask:
linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0) content-box,
linear-gradient(#fff 0 0); linear-gradient(#fff 0 0);
-webkit-mask-composite: xor; -webkit-mask-composite: xor;
mask-composite: exclude; mask-composite: exclude;
@@ -307,10 +310,13 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
// Animations // Animations
@keyframes pulse { @keyframes pulse {
0%, 100% {
0%,
100% {
opacity: 0.3; opacity: 0.3;
transform: scale(1); transform: scale(1);
} }
50% { 50% {
opacity: 0.5; opacity: 0.5;
transform: scale(1.05); transform: scale(1.05);
@@ -318,9 +324,12 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
} }
@keyframes bounce-subtle { @keyframes bounce-subtle {
0%, 100% {
0%,
100% {
transform: translateY(0); transform: translateY(0);
} }
50% { 50% {
transform: translateY(-2px); transform: translateY(-2px);
} }
@@ -339,9 +348,11 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
opacity: 0; opacity: 0;
transform: scale(0.5) translateY(10px); transform: scale(0.5) translateY(10px);
} }
60% { 60% {
transform: scale(1.1) translateY(-2px); transform: scale(1.1) translateY(-2px);
} }
100% { 100% {
opacity: 1; opacity: 1;
transform: scale(1) translateY(0); transform: scale(1) translateY(0);
@@ -398,12 +409,12 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
.body--dark { .body--dark {
.stat-card { .stat-card {
background: linear-gradient(145deg, #1e1e1e 0%, #2a2a2a 100%); background: linear-gradient(145deg, #1e1e1e 0%, #2a2a2a 100%);
box-shadow: box-shadow:
0 10px 30px -5px rgba(0, 0, 0, 0.4), 0 10px 30px -5px rgba(0, 0, 0, 0.4),
0 0 0 1px rgba(255, 255, 255, 0.05); 0 0 0 1px rgba(255, 255, 255, 0.05);
&:hover { &:hover {
box-shadow: box-shadow:
0 20px 40px -8px rgba(0, 0, 0, 0.5), 0 20px 40px -8px rgba(0, 0, 0, 0.5),
0 0 0 1px rgba(255, 255, 255, 0.08); 0 0 0 1px rgba(255, 255, 255, 0.08);
} }
@@ -411,7 +422,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
.stat-icon-wrapper { .stat-icon-wrapper {
background: linear-gradient(145deg, #2a2a2a, #1e1e1e); background: linear-gradient(145deg, #2a2a2a, #1e1e1e);
box-shadow: box-shadow:
0 4px 12px rgba(0, 0, 0, 0.3), 0 4px 12px rgba(0, 0, 0, 0.3),
inset 0 1px 2px rgba(255, 255, 255, 0.05); inset 0 1px 2px rgba(255, 255, 255, 0.05);
} }

View File

@@ -6,18 +6,16 @@
<div :class="['stat-content', classColor]"> <div :class="['stat-content', classColor]">
<!-- Icon con effetto hover e glow --> <!-- Icon con effetto hover e glow -->
<div class="stat-icon-wrapper"> <div class="stat-icon-wrapper">
<div class="stat-icon-glow" :style="{ backgroundColor: getGlowColor(classColor) }"></div> <div
class="stat-icon-glow"
:style="{ backgroundColor: getGlowColor(classColor) }"
></div>
<q-icon <q-icon
:name="icon" :name="icon"
:class="['stat-icon', classColor]" :class="['stat-icon', classColor]"
/> />
</div> </div>
<!-- Title -->
<div class="stat-title">
{{ title }}
</div>
<!-- Value con tipografia gerarchica --> <!-- Value con tipografia gerarchica -->
<div class="stat-value-container"> <div class="stat-value-container">
<div class="stat-value"> <div class="stat-value">
@@ -32,11 +30,19 @@
:style="{ backgroundColor: colBack }" :style="{ backgroundColor: colBack }"
> >
<div class="stat-badge-pulse"></div> <div class="stat-badge-pulse"></div>
<q-icon name="trending_up" size="12px" class="stat-badge-icon" /> <q-icon
name="trending_up"
size="12px"
class="stat-badge-icon"
/>
<span class="stat-badge-text">+{{ value_today }} oggi</span> <span class="stat-badge-text">+{{ value_today }} oggi</span>
</div> </div>
</transition> </transition>
</div> </div>
<!-- Title -->
<div class="stat-title">
{{ title }}
</div>
</div> </div>
<!-- Decorative elements --> <!-- Decorative elements -->
@@ -45,9 +51,8 @@
</q-card> </q-card>
</template> </template>
<script lang="ts" src="./CElemStat.ts"> <script lang="ts" src="./CElemStat.ts"></script>
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import "./CElemStat.scss"; @import './CElemStat.scss';
</style> </style>

View File

@@ -12,10 +12,10 @@ import { LandingFooter } from '../LandingFooter'
import { CTitle } from '../CTitle' import { CTitle } from '../CTitle'
import { CImgText } from '../CImgText' import { CImgText } from '../CImgText'
import { CMyEditor } from '../CMyEditor' import { CMyEditor } from '../CMyEditor'
import { CDateTime } from '@src/components/CDateTime' import { CDateTime } from '@/components/CDateTime'
import { CMyAvatar } from '../CMyAvatar' import { CMyAvatar } from '../CMyAvatar'
import { CMySingleEvent } from '@src/components/CMySingleEvent' import { CMySingleEvent } from '@/components/CMySingleEvent'
import { CMyTeacher } from '@src/components/CMyTeacher' import { CMyTeacher } from '@/components/CMyTeacher'
import { CMySelect } from '../CMySelect' import { CMySelect } from '../CMySelect'
import { tools } from '@tools' import { tools } from '@tools'
import { costanti } from '@costanti' import { costanti } from '@costanti'
@@ -26,10 +26,10 @@ import MixinEvents from '../../mixins/mixin-events'
import { useCalendarStore } from '@store/CalendarStore' import { useCalendarStore } from '@store/CalendarStore'
import { func_tools, toolsext } from '@store/Modules/toolsext' import { func_tools, toolsext } from '@store/Modules/toolsext'
import { useMessageStore } from '@store/MessageStore' import { useMessageStore } from '@store/MessageStore'
import { static_data } from '@src/db/static_data' import { static_data } from '@/db/static_data'
import { lists } from '@store/Modules/lists' import { lists } from '@store/Modules/lists'
import translate from '@src/globalroutines/util' import translate from '@/globalroutines/util'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
export default defineComponent({ export default defineComponent({
name: 'CEventsCalendar', name: 'CEventsCalendar',

View File

@@ -10,24 +10,48 @@
</div>--> </div>-->
<div> <div>
<!-- display an myevent --> <!-- display an myevent -->
<q-dialog v-model="displayEvent" :maximized="$q.screen.lt.sm"> <q-dialog
<q-card v-if="myevent" class="dialog_card"> v-model="displayEvent"
:maximized="$q.screen.lt.sm"
>
<q-card
v-if="myevent"
class="dialog_card"
>
<q-toolbar class="bg-primary text-white"> <q-toolbar class="bg-primary text-white">
<!--<q-toolbar :class="tools.displayClasses(myevent)"--> <!--<q-toolbar :class="tools.displayClasses(myevent)"-->
<!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">--> <!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">-->
<q-toolbar-title> <q-toolbar-title>
{{ t('cal.event') }} {{ t('cal.event') }}
</q-toolbar-title> </q-toolbar-title>
<q-btn v-if="editable" flat round color="white" icon="fas fa-copy"> <q-btn
<q-menu transition-show="flip-right" transition-hide="flip-left"> v-if="editable"
flat
round
color="white"
icon="fas fa-copy"
>
<q-menu
transition-show="flip-right"
transition-hide="flip-left"
>
<q-list style="min-width: 100px"> <q-list style="min-width: 100px">
<q-item clickable @click="duplicateEvent(myevent, 7)"> <q-item
clickable
@click="duplicateEvent(myevent, 7)"
>
<q-item-section>Tra 1 Settimana</q-item-section> <q-item-section>Tra 1 Settimana</q-item-section>
</q-item> </q-item>
<q-item clickable @click="duplicateEvent(myevent, 14)"> <q-item
clickable
@click="duplicateEvent(myevent, 14)"
>
<q-item-section>Tra 2 Settimane</q-item-section> <q-item-section>Tra 2 Settimane</q-item-section>
</q-item> </q-item>
<q-item clickable @click="duplicateEvent(myevent, 7, 4)"> <q-item
clickable
@click="duplicateEvent(myevent, 7, 4)"
>
<q-item-section>4 Eventi ogni Settimana</q-item-section> <q-item-section>4 Eventi ogni Settimana</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
@@ -86,7 +110,10 @@
:class="`cal__details` + ($q.dark.isActive ? `_darktheme` : ``)" :class="`cal__details` + ($q.dark.isActive ? `_darktheme` : ``)"
v-html="myevent.details" v-html="myevent.details"
></div> ></div>
<div v-if="myevent.teacher" class="cal__teacher"> <div
v-if="myevent.teacher"
class="cal__teacher"
>
<span class="cal__teacher-title" <span class="cal__teacher-title"
>{{ t('cal.teacher') }}: <span class="margin_with"></span >{{ t('cal.teacher') }}: <span class="margin_with"></span
></span> ></span>
@@ -96,16 +123,17 @@
<CMyTeacher :username="myevent.teacher3"></CMyTeacher> <CMyTeacher :username="myevent.teacher3"></CMyTeacher>
<CMyTeacher :username="myevent.teacher4"></CMyTeacher> <CMyTeacher :username="myevent.teacher4"></CMyTeacher>
</div> </div>
<div v-if="myevent.wherecode" class="cal__where"> <div
v-if="myevent.wherecode"
class="cal__where"
>
<!--<span v-if="tools.isMobile()"><br/></span>--> <!--<span v-if="tools.isMobile()"><br/></span>-->
<span class="cal__where-title">{{ t('cal.where') }}: </span> <span class="cal__where-title">{{ t('cal.where') }}: </span>
<span class="cal__where-content"> <span class="cal__where-content">
<q-chip> <q-chip>
<q-avatar v-if="getWhereIcon(myevent.wherecode)"> <q-avatar v-if="getWhereIcon(myevent.wherecode)">
<img <img
:src=" :src="`/images/avatar/` + getWhereIcon(myevent.wherecode)"
`/images/avatar/` + getWhereIcon(myevent.wherecode)
"
alt="Località" alt="Località"
/> />
</q-avatar> </q-avatar>
@@ -129,17 +157,16 @@
> >
<span class="cal__quota-title">{{ t('event.price') }}:</span> <span class="cal__quota-title">{{ t('event.price') }}:</span>
<q-chip> <q-chip>
<span class="cal__quota-content">{{ <span class="cal__quota-content">{{ getPrice(myevent) }}</span>
getPrice(myevent)
}}</span>
</q-chip> </q-chip>
</div> </div>
<div v-if="myevent.dateTimeStart" class="cal__when"> <div
v-if="myevent.dateTimeStart"
class="cal__when"
>
<span class="cal__where-title" <span class="cal__where-title"
>{{ t('cal.when') }}: >{{ t('cal.when') }}:
<span <span v-html="tools.getstrDateTimeEvent($t, myevent, true)"></span>
v-html="tools.getstrDateTimeEvent($t, myevent, true)"
></span>
</span> </span>
</div> </div>
<p <p
@@ -181,16 +208,33 @@
</q-dialog> </q-dialog>
<!-- id_bookedeventadd/edit an myevent --> <!-- id_bookedeventadd/edit an myevent -->
<q-dialog v-model="addEvent" no-backdrop-dismiss persistent> <q-dialog
<q-card v-if="addEvent" class="dialog_card"> v-model="addEvent"
no-backdrop-dismiss
persistent
>
<q-card
v-if="addEvent"
class="dialog_card"
>
<q-toolbar class="bg-primary text-white"> <q-toolbar class="bg-primary text-white">
<q-toolbar-title> <q-toolbar-title>
{{ addOrUpdateEvent() }} {{ t('cal.event') }} {{ addOrUpdateEvent() }} {{ t('cal.event') }}
</q-toolbar-title> </q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn
flat
round
color="white"
icon="close"
v-close-popup
></q-btn>
</q-toolbar> </q-toolbar>
<q-card-section class="inset-shadow"> <q-card-section class="inset-shadow">
<q-form v-if="contextDay" ref="myevent" class="q-gutter-sm"> <q-form
v-if="contextDay"
ref="myevent"
class="q-gutter-sm"
>
<CMySelect <CMySelect
:label="$t('event.typol')" :label="$t('event.typol')"
v-model:value="eventForm.typol" v-model:value="eventForm.typol"
@@ -254,7 +298,10 @@
/> />
</q-tabs> </q-tabs>
<q-tab-panels v-model="tabeditor" animated> <q-tab-panels
v-model="tabeditor"
animated
>
<q-tab-panel name="details"> <q-tab-panel name="details">
<div class="q-gutter-sm myflex"> <div class="q-gutter-sm myflex">
<q-input <q-input
@@ -320,7 +367,10 @@
</CMyEditor> </CMyEditor>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="settings" class="q-gutter-sm"> <q-tab-panel
name="settings"
class="q-gutter-sm"
>
<!--<q-checkbox v-model="eventForm.allday" :label="$t('cal.alldayevent')"></q-checkbox>--> <!--<q-checkbox v-model="eventForm.allday" :label="$t('cal.alldayevent')"></q-checkbox>-->
<div class="q-gutter-sm row myflex"> <div class="q-gutter-sm row myflex">
@@ -507,28 +557,40 @@
</q-form> </q-form>
</q-card-section> </q-card-section>
<q-card-actions align="right"> <q-card-actions align="right">
<q-btn
:label="$t('dialog.ok')"
color="primary"
@click="saveEvent"
></q-btn>
<q-btn <q-btn
flat flat
:label="$t('dialog.cancel')" :label="$t('dialog.cancel')"
color="primary" color="primary"
v-close-popup v-close-popup
></q-btn> ></q-btn>
<q-btn
:label="$t('dialog.ok')"
color="primary"
@click="saveEvent"
></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="bookEventpage.show" no-backdrop-dismiss> <q-dialog
<q-card v-if="bookEventpage.show" class="dialog_card"> v-model="bookEventpage.show"
no-backdrop-dismiss
>
<q-card
v-if="bookEventpage.show"
class="dialog_card"
>
<q-toolbar class="bg-primary text-white"> <q-toolbar class="bg-primary text-white">
<q-toolbar-title> <q-toolbar-title>
{{ t('cal.booking') }} {{ t('cal.booking') }}
</q-toolbar-title> </q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn
flat
round
color="white"
icon="close"
v-close-popup
></q-btn>
</q-toolbar> </q-toolbar>
<q-card-section class="inset-shadow"> <q-card-section class="inset-shadow">
@@ -548,16 +610,20 @@
> >
{{ myevent.title }} {{ myevent.title }}
</q-chip> </q-chip>
<div v-if="myevent.dateTimeStart" class="cal__when"> <div
v-if="myevent.dateTimeStart"
class="cal__when"
>
<span class="cal__where-title" <span class="cal__where-title"
>{{ t('cal.when') }}: >{{ t('cal.when') }}:
<span <span v-html="tools.getstrDateTimeEvent($t, myevent, true)"></span>
v-html="tools.getstrDateTimeEvent($t, myevent, true)"
></span>
</span> </span>
</div> </div>
<div class="q-pa-xs"> <div class="q-pa-xs">
<q-card class="text-white windowcol" style="display: block"> <q-card
class="text-white windowcol"
style="display: block"
>
<q-card-section class="q-pa-xs"> <q-card-section class="q-pa-xs">
<div <div
style="display: inline-flex" style="display: inline-flex"
@@ -583,9 +649,7 @@
style="min-width: 140px" style="min-width: 140px"
> >
<q-select <q-select
:behavior=" :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
$q.platform.is.ios === true ? 'dialog' : 'menu'
"
rounded rounded
outlined outlined
v-model="bookEventForm.numpeople" v-model="bookEventForm.numpeople"
@@ -614,9 +678,7 @@
style="min-width: 140px; margin-left: 10px" style="min-width: 140px; margin-left: 10px"
> >
<q-select <q-select
:behavior=" :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
$q.platform.is.ios === true ? 'dialog' : 'menu'
"
rounded rounded
outlined outlined
v-model="bookEventForm.numpeopleLunch" v-model="bookEventForm.numpeopleLunch"
@@ -647,9 +709,7 @@
style="min-width: 180px; margin-left: 10px" style="min-width: 180px; margin-left: 10px"
> >
<q-select <q-select
:behavior=" :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
$q.platform.is.ios === true ? 'dialog' : 'menu'
"
rounded rounded
outlined outlined
v-model="bookEventForm.numpeopleDinner" v-model="bookEventForm.numpeopleDinner"
@@ -679,9 +739,7 @@
style="min-width: 180px; margin-left: 10px" style="min-width: 180px; margin-left: 10px"
> >
<q-select <q-select
:behavior=" :behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
$q.platform.is.ios === true ? 'dialog' : 'menu'
"
rounded rounded
outlined outlined
v-model="bookEventForm.numpeopleDinnerShared" v-model="bookEventForm.numpeopleDinnerShared"
@@ -726,6 +784,13 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-actions align="right"> <q-card-actions align="right">
<q-btn
flat
:label="$t('dialog.cancel')"
color="primary"
v-close-popup
></q-btn>
<q-btn <q-btn
v-if="bookEventpage.state === EState.Modifying" v-if="bookEventpage.state === EState.Modifying"
flat flat
@@ -745,28 +810,31 @@
:label="getTitleBtnBooking()" :label="getTitleBtnBooking()"
color="primary" color="primary"
@click="saveBookEvent(myevent)" @click="saveBookEvent(myevent)"
:disable=" :disable="!(bookEventpage.state === EState.Creating || hasModifiedBooking)"
!(bookEventpage.state === EState.Creating || hasModifiedBooking)
"
></q-btn>
<q-btn
flat
:label="$t('dialog.cancel')"
color="primary"
v-close-popup
></q-btn> ></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="askInfopage.show" no-backdrop-dismiss> <q-dialog
<q-card v-if="askInfopage.show" class="dialog_card"> v-model="askInfopage.show"
no-backdrop-dismiss
>
<q-card
v-if="askInfopage.show"
class="dialog_card"
>
<q-toolbar class="bg-primary text-white"> <q-toolbar class="bg-primary text-white">
<q-toolbar-title> <q-toolbar-title>
{{ t('cal.booking') }} {{ t('cal.booking') }}
</q-toolbar-title> </q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn
flat
round
color="white"
icon="close"
v-close-popup
></q-btn>
</q-toolbar> </q-toolbar>
<q-card-section class="inset-shadow"> <q-card-section class="inset-shadow">
@@ -786,12 +854,13 @@
> >
{{ myevent.title }} {{ myevent.title }}
</q-chip> </q-chip>
<div v-if="myevent.dateTimeStart" class="cal__when"> <div
v-if="myevent.dateTimeStart"
class="cal__when"
>
<span class="cal__where-title" <span class="cal__where-title"
>{{ t('cal.when') }}: >{{ t('cal.when') }}:
<span <span v-html="tools.getstrDateTimeEvent($t, myevent, true)"></span>
v-html="tools.getstrDateTimeEvent($t, myevent, true)"
></span>
</span> </span>
</div> </div>
<div class="q-pa-xs"> <div class="q-pa-xs">
@@ -812,18 +881,17 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-actions align="right"> <q-card-actions align="right">
<q-btn
flat
:label="$t('dialog.sendmsg')"
color="primary"
@click="sendMsg(myevent)"
></q-btn>
<q-btn <q-btn
flat flat
:label="$t('dialog.cancel')" :label="$t('dialog.cancel')"
color="primary" color="primary"
v-close-popup v-close-popup
></q-btn> ></q-btn>
<q-btn
:label="$t('dialog.sendmsg')"
color="primary"
@click="sendMsg(myevent)"
></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
@@ -956,20 +1024,13 @@
class="q-ma-xs" class="q-ma-xs"
:class="badgeClasses(event, 'header')" :class="badgeClasses(event, 'header')"
:style="badgeStyles(event, 'header')" :style="badgeStyles(event, 'header')"
style=" style="width: 10px; max-width: 10px; height: 10px; max-height: 10px"
width: 10px;
max-width: 10px;
height: 10px;
max-height: 10px;
"
></q-badge> ></q-badge>
</template> </template>
</div> </div>
</template> </template>
<template <template
#day-body="{ #day-body="{ scope: { timestamp, timeStartPos, timeDurationHeight } }"
scope: { timestamp, timeStartPos, timeDurationHeight },
}"
> >
<template <template
v-for="(event, index) in getEvents(timestamp.date)" v-for="(event, index) in getEvents(timestamp.date)"
@@ -1012,12 +1073,7 @@
class="my-event-rel justify-center rounded-borders" class="my-event-rel justify-center rounded-borders"
:class="badgeClasses(event, 'body')" :class="badgeClasses(event, 'body')"
:style=" :style="
badgeStyles( badgeStyles(event, 'body', timeStartPos, timeDurationHeight)
event,
'body',
timeStartPos,
timeDurationHeight
)
" "
@click.stop.prevent="showEvent(event)" @click.stop.prevent="showEvent(event)"
:draggable="tools.isManager()" :draggable="tools.isManager()"
@@ -1087,13 +1143,7 @@
<img <img
:src="getImgEvent(event)" :src="getImgEvent(event)"
@click="selectEvent(event)" @click="selectEvent(event)"
class=" class="text-left padding_cell listaev__tdimg listaev__img cursor-pointer q-mx-sm"
text-left
padding_cell
listaev__tdimg listaev__img
cursor-pointer
q-mx-sm
"
:style="getStyleByEvent(event, event === myevent)" :style="getStyleByEvent(event, event === myevent)"
:alt="event.title" :alt="event.title"
/> />
@@ -1139,9 +1189,7 @@
clickable clickable
@click="duplicateEvent(myevent, 7, 4)" @click="duplicateEvent(myevent, 7, 4)"
> >
<q-item-section <q-item-section>4 Eventi ogni Settimana</q-item-section>
>4 Eventi ogni Settimana</q-item-section
>
</q-item> </q-item>
</q-list> </q-list>
</q-menu> </q-menu>
@@ -1187,22 +1235,17 @@
</q-chip> </q-chip>
</div> </div>
<div <div class="listaev__date listaev__align_center_mobile text-center">
class=" <span v-html="tools.getstrDateTimeEvent($t, event, true)"></span>
listaev__date listaev__align_center_mobile
text-center
"
>
<span
v-html="tools.getstrDateTimeEvent($t, event, true)"
></span>
</div> </div>
<div class="listaev__align_center_mobile"> <div class="listaev__align_center_mobile">
<div style="margin: 10px"></div> <div style="margin: 10px"></div>
<div v-if="event.internal"> <div v-if="event.internal">
<q-chip color="blue" text-color="white" <q-chip
color="blue"
text-color="white"
>Evento Interno:</q-chip >Evento Interno:</q-chip
> >
</div> </div>
@@ -1247,17 +1290,15 @@
<div style="margin: 10px"></div> <div style="margin: 10px"></div>
<p <p
:class=" :class="`listaev__details` + ($q.dark.isActive ? `_darktheme` : ``)"
`listaev__details` + ($q.dark.isActive
? `_darktheme`
: ``)
"
v-html="event.details" v-html="event.details"
></p> ></p>
<div v-if="event.teacher" class=""> <div
v-if="event.teacher"
class=""
>
<span class="cal__teacher-title" <span class="cal__teacher-title"
>{{ t('cal.teacher') }}: >{{ t('cal.teacher') }}: <span class="margin_with"></span
<span class="margin_with"></span
></span> ></span>
<CMyTeacher :username="event.teacher"></CMyTeacher> <CMyTeacher :username="event.teacher"></CMyTeacher>
@@ -1265,18 +1306,17 @@
<CMyTeacher :username="event.teacher3"></CMyTeacher> <CMyTeacher :username="event.teacher3"></CMyTeacher>
<CMyTeacher :username="event.teacher4"></CMyTeacher> <CMyTeacher :username="event.teacher4"></CMyTeacher>
<span v-if="event.wherecode" class=""> <span
v-if="event.wherecode"
class=""
>
<span v-if="tools.isMobile()"><br /></span> <span v-if="tools.isMobile()"><br /></span>
<span class="cal__where-title" <span class="cal__where-title">{{ t('cal.where') }}: </span>
>{{ t('cal.where') }}:
</span>
<q-chip> <q-chip>
<q-avatar v-if="getWhereIcon(event.wherecode)"> <q-avatar v-if="getWhereIcon(event.wherecode)">
<img <img
:src=" :src="`/images/avatar/` + getWhereIcon(event.wherecode)"
`/images/avatar/` + getWhereIcon(event.wherecode)
"
:alt="event.wherecode" :alt="event.wherecode"
/> />
</q-avatar> </q-avatar>
@@ -1293,13 +1333,17 @@
</q-chip> </q-chip>
</span> </span>
</div> </div>
<div v-if="event.contribtype" class=""> <div
v-if="event.contribtype"
class=""
>
<span class="cal__quota-title" <span class="cal__quota-title"
>{{ t('event.price') }}:<span >{{ t('event.price') }}:<span class="margin_with"></span
class="margin_with"
></span
></span> ></span>
<span v-if="!isShowPrice(event)" class=""> <span
v-if="!isShowPrice(event)"
class=""
>
<q-chip <q-chip
class="glossy" class="glossy"
color="orange" color="orange"
@@ -1318,9 +1362,7 @@
text-color="white" text-color="white"
icon-right="star" icon-right="star"
> >
<span class="cal__quota-content">{{ <span class="cal__quota-content">{{ getPrice(event) }}</span>
getPrice(event)
}}</span>
</q-chip> </q-chip>
</div> </div>
@@ -1418,8 +1460,7 @@
</div> </div>
</div> </div>
</template> </template>
<script lang="ts" src="./CEventsCalendar.ts"> <script lang="ts" src="./CEventsCalendar.ts"></script>
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './CEventsCalendar.scss'; @import './CEventsCalendar.scss';
</style> </style>

View File

@@ -3,9 +3,9 @@ import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { CDownloadJsonFile } from '@src/components/CDownloadJsonFile' import { CDownloadJsonFile } from '@/components/CDownloadJsonFile'
import { PropType, defineComponent, onMounted, ref } from 'vue' import { PropType, defineComponent, onMounted, ref } from 'vue'
import type { IMyPage } from '@src/model' import type { IMyPage } from '@/model'
export default defineComponent({ export default defineComponent({
name: 'CExportImportPage', name: 'CExportImportPage',

View File

@@ -17,7 +17,7 @@ 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 '@/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';

View File

@@ -4,16 +4,16 @@ import {
} from 'vue' } from 'vue'
import { tools } from '@tools' import { tools } from '@tools'
import { CMyFieldDb } from '@src/components/CMyFieldDb' import { CMyFieldDb } from '@/components/CMyFieldDb'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { CTitlePage } from '@src/components/CTitlePage' import { CTitlePage } from '@/components/CTitlePage'
import { CGridTableRec } from '@src/components/CGridTableRec' import { CGridTableRec } from '@/components/CGridTableRec'
import type { IColGridTable, ISearchList} from 'model'; import type { IColGridTable, ISearchList} from 'model';
import { IMyBacheca, IMySkill, ISkill } from 'model' import { IMyBacheca, IMySkill, ISkill } from 'model'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
import { fieldsTable } from '@store/Modules/fieldsTable' import { fieldsTable } from '@store/Modules/fieldsTable'
@@ -306,7 +306,7 @@ export default defineComponent({
} }
function getFilterGoods(recGood: any, index: number, arr: any) { function getFilterGoods(recGood: any, index: number, arr: any) {
const recsectorGoods: any = searchList.value.find((rec) => rec.table === 'sectorgoods') const recsectorGoods: any = searchList.value.find((rec) => rec.table === toolsext.TABSECTORGOODS)
// console.log('getFilterSkills', recSkill.idSector, recsectors.value) // console.log('getFilterSkills', recSkill.idSector, recsectors.value)
if (recsectorGoods && recGood.idSectorGood) { if (recsectorGoods && recGood.idSectorGood) {
return recGood.idSectorGood.includes(recsectorGoods.value) return recGood.idSectorGood.includes(recsectorGoods.value)
@@ -314,6 +314,15 @@ export default defineComponent({
return true return true
} }
} }
function getFilterBachecas(recBacheca: any, index: number, arr: any) {
const recsectorBachecas: any = searchList.value.find((rec) => rec.table === toolsext.TABSECTORBACHECAS)
// console.log('getFilterSkills', recSkill.idSector, recsectors.value)
if (recsectorBachecas && recBacheca.idSectorBacheca) {
return recBacheca.idSectorBacheca.includes(recsectorBachecas.value)
} else {
return true
}
}
function getFilterSubSkills(recSubSkill: any, index: number, arr: any) { function getFilterSubSkills(recSubSkill: any, index: number, arr: any) {
const recskills: any = searchList.value.find((rec) => rec.table === 'skills') const recskills: any = searchList.value.find((rec) => rec.table === 'skills')
@@ -614,9 +623,9 @@ export default defineComponent({
{ {
visible: true, visible: true,
label: 'Settore', label: 'Settore',
table: toolsext.TABSECTORS, table: toolsext.TABSECTORBACHECAS,
key: 'idSector', key: 'idSectorBacheca',
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORS, 0, true), value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORBACHECAS, 0, true),
arrvalue: [], arrvalue: [],
type: costanti.FieldType.select, type: costanti.FieldType.select,
filter: null, filter: null,
@@ -624,6 +633,19 @@ export default defineComponent({
notinsearch: false, notinsearch: false,
useinput: false, useinput: false,
}, },
{
visible: true,
label: 'Categoria',
table: 'bachecas',
key: 'idBacheca',
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + tools.getCookie(tools.COOK_SEARCH + toolsext.TABSECTORBACHECAS, costanti.FILTER_TUTTI), costanti.FILTER_TUTTI, true),
arrvalue: [],
type: costanti.FieldType.select,
addall: true,
filter: getFilterBachecas,
showcount: true,
useinput: false,
},
{ {
visible: true, visible: true,
label: 'Data Inizio', label: 'Data Inizio',
@@ -898,7 +920,7 @@ export default defineComponent({
{ {
visible: true, visible: true,
label: 'Settore', label: 'Settore',
table: 'sectorgoods', table: toolsext.TABSECTORGOODS,
key: 'idSectorGood', key: 'idSectorGood',
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORGOODS, 0, true), value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORGOODS, 0, true),
arrvalue: [], arrvalue: [],
@@ -911,7 +933,7 @@ export default defineComponent({
{ {
visible: true, visible: true,
label: 'Categoria', label: 'Categoria',
table: 'goods', table: toolsext.TABGOODS,
key: 'idGood', key: 'idGood',
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + tools.getCookie(tools.COOK_SEARCH + toolsext.TABSECTORGOODS, costanti.FILTER_TUTTI), costanti.FILTER_TUTTI, true), value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + tools.getCookie(tools.COOK_SEARCH + toolsext.TABSECTORGOODS, costanti.FILTER_TUTTI), costanti.FILTER_TUTTI, true),
arrvalue: [], arrvalue: [],

View File

@@ -5,10 +5,10 @@ import {
import { tools } from '@tools' import { tools } from '@tools'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { static_data } from '@src/db/static_data' import { static_data } from '@/db/static_data'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'

View File

@@ -2,8 +2,8 @@ import { defineComponent, ref, computed, PropType, toRef, onMounted, onBeforeUnm
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { tools } from '@tools' import { tools } from '@tools'
import { LandingFooter } from '@src/components/LandingFooter' import { LandingFooter } from '@/components/LandingFooter'
import { Logo } from '@src/components/logo' import { Logo } from '@/components/logo'
import type { IMyPage } from 'model' import type { IMyPage } from 'model'

View File

@@ -5,7 +5,7 @@ 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 '@/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';

View File

@@ -5,7 +5,7 @@ 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 '@/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'

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,10 @@
$shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.06);
$shadow-md: 0 2px 6px rgba(0, 0, 0, 0.08);
$shadow-hover: 0 4px 12px rgba(25, 118, 210, 0.15);
// ========================================
// TABLE STYLES
// ========================================
.colmodif { .colmodif {
cursor: pointer; cursor: pointer;
} }
@@ -10,7 +17,7 @@
.tdclass, .tdclass,
.trclass { .trclass {
min-height: 20px !important; min-height: 20px !important;
margin-top: 5px; margin-top: 3px;
} }
.q-table td { .q-table td {
@@ -41,85 +48,182 @@
.riduci_pad { .riduci_pad {
min-height: 30px; min-height: 30px;
padding: 4px 8px !important; padding: 3px 6px !important;
} }
.q-table__top { .q-table__top {
padding-top: 0 !important; padding-top: 0 !important;
} }
// ========================================
// DIALOG & LAYOUT
// ========================================
.right-align-dialog .q-dialog { .right-align-dialog .q-dialog {
right: 0; right: 0;
/* Allinea a destra */
left: auto; left: auto;
/* Disabilita l'allineamento a sinistra */
margin: 0; margin: 0;
/* Rimuovi qualsiasi margine */
} }
.flexible-width { .flexible-width {
flex: 1; flex: 1;
/* permette al componente di espandersi */
max-width: 500px; max-width: 500px;
/* larghezza massima di 600px */
} }
.hint_search{ .hint_search {
color: gray; color: gray;
} }
.clOrizzontal{ // ========================================
// CAROUSEL STYLES - MODERNIZZATI
// ========================================
.q-carousel__slide {
padding: 5px !important;
} @media (max-width: $mobile-breakpoint) {
.q-carousel__slide{ padding: 3px !important;
padding: 8px !important; }
} }
.carousel-scroll-container { .carousel-scroll-container {
overflow-y: auto; /* Permette lo scrolling verticale */ overflow-y: auto;
} max-height: calc(100vh - 120px);
&::-webkit-scrollbar {
width: 6px;
}
&::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05);
border-radius: 3px;
}
&::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.2);
border-radius: 3px;
&:hover {
background: rgba(0, 0, 0, 0.3);
}
}
.modern-grid-toolbar { @media (max-width: $mobile-breakpoint) {
background: linear-gradient(135deg, #1976d2 0%, #1565c0 100%); max-height: calc(100vh - 100px);
color: white;
padding: 12px 16px;
min-height: 52px;
border-radius: 12px 12px 0 0;
@media (max-width: 768px) {
padding: 5px 12px;
min-height: 48px;
} }
} }
// ========================================
// TOOLBAR MODERNO
// ========================================
.modern-grid-toolbar {
background: linear-gradient(135deg, $primary-color 0%, #1565c0 100%);
color: white;
padding: 10px 14px;
min-height: 50px;
border-radius: $border-radius $border-radius 0 0;
box-shadow: $shadow-sm;
@media (max-width: $mobile-breakpoint) {
padding: 8px 12px;
min-height: 46px;
}
}
// ========================================
// BUTTON MODERNO
// ========================================
.modern-add-btn { .modern-add-btn {
padding: 8px 20px; padding: 6px 18px;
font-weight: 600; font-weight: 600;
transition: all 0.3s; transition: all $transition-speed;
box-shadow: $shadow-sm;
&:hover { &:hover {
transform: translateY(-2px); transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(25, 118, 210, 0.3); box-shadow: $shadow-hover;
} }
@media (max-width: 768px) {
padding: 4px 20px; @media (max-width: $mobile-breakpoint) {
padding: 5px 16px;
} }
} }
// ========================================
// INFINITE SCROLL
// ========================================
// ========================================
// GRID LAYOUT PER CARD
// ========================================
.q-infinite-scroll { .q-infinite-scroll {
padding: 8px; padding: 6px;
gap: 10px; gap: 8px;
@media (max-width: 768px) { // Desktop: layout a griglia 2 colonne
padding: 6px; @media (min-width: $mobile-breakpoint) {
gap: 8px; display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
padding: 8px;
}
// Desktop large: 3 colonne per schermi molto larghi
@media (min-width: 1400px) {
grid-template-columns: repeat(2, 1fr);
gap: 12px;
}
// Mobile: colonna singola
@media (max-width: $mobile-breakpoint) {
display: flex;
flex-direction: column;
padding: 5px;
gap: 6px;
} }
} }
// ========================================
// DIALOG CARDS
// ========================================
.q-dialog { .q-dialog {
:deep(.modern-card) { :deep(.modern-card) {
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); box-shadow: 0 6px 24px rgba(0, 0, 0, 0.12);
border-radius: $border-radius;
} }
}
// ========================================
// FIXED TOGGLE
// ========================================
.fixed-toggle {
position: fixed;
top: 70px;
right: 12px;
z-index: 1000;
box-shadow: $shadow-md;
border-radius: 20px;
background: white;
padding: 4px 8px;
@media (max-width: $mobile-breakpoint) {
top: 65px;
right: 10px;
padding: 3px 6px;
}
}
.grid-card-item {
width: 100%;
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(8px);
border-radius: 12px;
border: 1px solid rgba(255, 255, 255, 0.9);
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
padding: 8px; // Spazio tra carousel e card
@media (max-width: $mobile-breakpoint) {
width: 100%;
padding: 4px; // Ridotto su mobile
}
}
.fill-all-width {
width: 100%;
} }

View File

@@ -18,7 +18,7 @@ import { tools } from '../../store/Modules/tools';
import { fieldsTable } from '@store/Modules/fieldsTable'; import { fieldsTable } from '@store/Modules/fieldsTable';
import { shared_consts } from '@src/common/shared_vuejs'; import { shared_consts } from '@/common/shared_vuejs';
import type { import type {
IColGridTable, IColGridTable,
@@ -52,20 +52,20 @@ import { useUserStore } from '@store/UserStore';
import { useGlobalStore } from '@store/globalStore'; import { useGlobalStore } from '@store/globalStore';
import { useQuasar, exportFile } from 'quasar'; import { useQuasar, exportFile } from 'quasar';
import { costanti } from '@costanti'; import { costanti } from '@costanti';
import translate from '@src/globalroutines/util'; import translate from '@/globalroutines/util';
import { toolsext } from '@store/Modules/toolsext'; import { toolsext } from '@store/Modules/toolsext';
import { CMyCardPopup } from '@src/components/CMyCardPopup'; import { CMyCardPopup } from '@/components/CMyCardPopup';
import { CMyCardService } from '@src/components/CMyCardService'; import { CMyCardService } from '@/components/CMyCardService';
import { CSingleMovement } from '@src/components/CSingleMovement'; import { CSingleMovement } from '@/components/CSingleMovement';
import { CMyCardGrpPopup } from '@src/components/CMyCardGrpPopup'; import { CMyCardGrpPopup } from '@/components/CMyCardGrpPopup';
import { CMyCardCircuitPopup } from '@src/components/CMyCardCircuitPopup'; import { CMyCardCircuitPopup } from '@/components/CMyCardCircuitPopup';
import { onBeforeRouteLeave, onBeforeRouteUpdate, useRouter } from 'vue-router'; import { onBeforeRouteLeave, onBeforeRouteUpdate, useRouter } from 'vue-router';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { NavigationGuardNext, RouteLocationNormalized } from 'vue-router'; import { NavigationGuardNext, RouteLocationNormalized } from 'vue-router';
import { Dialog } from 'quasar'; // Assicurati di importare correttamente Dialog da Quasar. import { Dialog } from 'quasar'; // Assicurati di importare correttamente Dialog da Quasar.
import { getMapBoundaries } from '@src/store/Modules/geocodingmap'; import { getMapBoundaries } from '@/store/Modules/geocodingmap';
import { isMap } from 'util/types'; import { isMap } from 'util/types';
export default defineComponent({ export default defineComponent({
@@ -854,6 +854,8 @@ export default defineComponent({
setCategBySector(shared_consts.TABLES_MYSKILLS, table, newval); setCategBySector(shared_consts.TABLES_MYSKILLS, table, newval);
} else if (table === toolsext.TABSECTORGOODS) { } else if (table === toolsext.TABSECTORGOODS) {
setCategBySector(toolsext.TABGOODS, table, newval); setCategBySector(toolsext.TABGOODS, table, newval);
} else if (table === toolsext.TABSECTORBACHECAS) {
setCategBySector(toolsext.TABBACHECAS, table, newval);
} else if (table === toolsext.TABREGIONS) { } else if (table === toolsext.TABREGIONS) {
setProvinceByRegion(toolsext.TABPROVINCE, table, newval); setProvinceByRegion(toolsext.TABPROVINCE, table, newval);
} else if (table === toolsext.TABGOODS) { } else if (table === toolsext.TABGOODS) {
@@ -872,6 +874,22 @@ export default defineComponent({
newval newval
); );
} }
} else if (table === toolsext.TABBACHECAS) {
const recSector = searchList.value.find(
(rec) => rec.table === toolsext.TABSECTORBACHECAS
);
if (recSector) {
tools.setCookie(
tools.COOK_SEARCH +
costanti.FILTER_SEP +
mytable.value +
costanti.FILTER_SEP +
table +
costanti.FILTER_SEP +
recSector.value,
newval
);
}
} else if (table === shared_consts.TABLES_LISTA_EDITORI) { } else if (table === shared_consts.TABLES_LISTA_EDITORI) {
const rec = searchList.value.find((rec) => rec.table === table); const rec = searchList.value.find((rec) => rec.table === table);
if (rec) { if (rec) {
@@ -1029,12 +1047,14 @@ export default defineComponent({
let recSector = null; let recSector = null;
let recSectorGood = null; let recSectorGood = null;
let recSectorBacheca = null;
let recCities = null; let recCities = null;
let recRegion = null; let recRegion = null;
let recProvince = null; let recProvince = null;
let recSkill = null; let recSkill = null;
let idSector = 0; let idSector = 0;
let idSectorGood = 0; let idSectorGood = 0;
let idSectorBacheca = 0;
let idProvince = 0; let idProvince = 0;
let idRegion = 0; let idRegion = 0;
let idSkill = 0; let idSkill = 0;
@@ -1046,10 +1066,16 @@ export default defineComponent({
} }
if (searchList.value) { if (searchList.value) {
recSectorGood = searchList.value.find( recSectorGood = searchList.value.find(
(item: ISearchList) => item.table === 'sectorgoods' (item: ISearchList) => item.table === toolsext.TABSECTORGOODS
); );
idSectorGood = recSectorGood ? recSectorGood.value : 0; idSectorGood = recSectorGood ? recSectorGood.value : 0;
} }
if (searchList.value) {
recSectorBacheca = searchList.value.find(
(item: ISearchList) => item.table === toolsext.TABSECTORBACHECAS
);
idSectorBacheca = recSectorBacheca ? recSectorBacheca.value : 0;
}
if (searchList.value) { if (searchList.value) {
recProvince = searchList.value.find( recProvince = searchList.value.find(
(item: ISearchList) => item.table === 'provinces' (item: ISearchList) => item.table === 'provinces'
@@ -1315,13 +1341,20 @@ export default defineComponent({
obj2.idSkill = idSkill; obj2.idSkill = idSkill;
filtersearch2.push(obj2); filtersearch2.push(obj2);
} }
} else if (item.table === 'goods' && item.value === costanti.FILTER_TUTTI) { } else if (item.table === toolsext.TABGOODS && item.value === costanti.FILTER_TUTTI) {
const obj2: any = {}; const obj2: any = {};
if (idSectorGood > 0) { if (idSectorGood > 0) {
// idSectorGood // idSectorGood
obj2['sectorGood._id'] = idSectorGood; obj2['sectorGood._id'] = idSectorGood;
filtersearch2.push(obj2); filtersearch2.push(obj2);
} }
} else if (item.table === toolsext.TABBACHECAS && item.value === costanti.FILTER_TUTTI) {
const obj2: any = {};
if (idSectorBacheca > 0) {
// idSectorBacheca
obj2['sectorBacheca._id'] = idSectorBacheca;
filtersearch2.push(obj2);
}
} else if ( } else if (
item.table === 'subskills' && item.table === 'subskills' &&
item.value === costanti.FILTER_TUTTI item.value === costanti.FILTER_TUTTI
@@ -1451,84 +1484,95 @@ export default defineComponent({
} }
function onRequest(myprops: any) { function onRequest(myprops: any) {
const { page, rowsPerPage, rowsNumber, sortBy, descending } = myprops.pagination; try {
const myfilternow = myfilter.value; const { page, rowsPerPage, rowsNumber, sortBy, descending } = myprops.pagination;
const myfilterandnow = myfilterand.value; const myfilternow = myfilter.value;
const myfilterandnow = myfilterand.value;
savefilter(); savefilter();
if (!mytable.value) { if (!mytable.value) {
startsearch.value = false; startsearch.value = false;
return; return;
}
// console.log('myfilterandnow', myfilterandnow, 'myfilterandnow', myfilterandnow)
// console.log('onRequest', 'myfilter = ', myfilter.value)
loading.value = true;
spinner_visible.value = true;
// update rowsCount with appropriate value
// function all rows if "All" (0) is rowsel
const fetchCount = rowsPerPage === 0 ? rowsNumber : rowsPerPage;
// calculate starting row of data
const startRow = (page - 1) * rowsPerPage;
const endRow = startRow + fetchCount;
console.log('onRequest: startRow', startRow, 'endRow', endRow);
serverData.value = [];
// fetch data from "server"
return fetchFromServer(
startRow,
endRow,
myfilternow,
myfilterandnow,
sortBy,
descending
).then((ris: any) => {
pagination.value.rowsNumber = getRowsNumberCount();
// clear out existing data and add new
if (!returnedData.value || returnedData.value.length === 0) {
serverData.value = [];
} else {
// if (serverData.length > 0)
// serverData.splice(0, serverData.length, ...returnedData)
// else
try {
serverData.value = [...returnedData.value];
} catch (e) {
serverData.value = [];
}
} }
// console.log('serverData', serverData) // console.log('myfilterandnow', myfilterandnow, 'myfilterandnow', myfilterandnow)
// don't forfunction to update local pagination object // console.log('onRequest', 'myfilter = ', myfilter.value)
pagination.value.page = page;
pagination.value.rowsPerPage = rowsPerPage;
//pagination.value.sortBy = getObjSort(sortBy, descending)
pagination.value.sortBy = sortBy;
// ordinam.value = sortBy
ordinam_desc.value = descending;
pagination.value.descending = descending;
// console.log('pagination', pagination) loading.value = true;
// ...and turn of loading indicator spinner_visible.value = true;
loading.value = false;
spinner_visible.value = false;
changetable.value = false;
startsearch.value = false;
checkScrollPosition(); // update rowsCount with appropriate value
});
// function all rows if "All" (0) is rowsel
const fetchCount = rowsPerPage === 0 ? rowsNumber : rowsPerPage;
// calculate starting row of data
const startRow = (page - 1) * rowsPerPage;
const endRow = startRow + fetchCount;
console.log('onRequest: startRow', startRow, 'endRow', endRow);
if (page > 1) {
// Aggiungi senza duplicati
const existingIds = new Set(serverData.value.map((rec) => rec._id));
const toadd = returnedData.value.filter((elem) => !existingIds.has(elem._id));
serverData.value = [...serverData.value, ...toadd];
} else {
serverData.value = [...returnedData.value];
}
// fetch data from "server"
return fetchFromServer(
startRow,
endRow,
myfilternow,
myfilterandnow,
sortBy,
descending
).then((ris: any) => {
pagination.value.rowsNumber = getRowsNumberCount();
// clear out existing data and add new
if (!returnedData.value || returnedData.value.length === 0) {
serverData.value = [];
} else {
// if (serverData.length > 0)
// serverData.splice(0, serverData.length, ...returnedData)
// else
try {
serverData.value = [...returnedData.value];
} catch (e) {
serverData.value = [];
}
}
// console.log('serverData', serverData)
// don't forfunction to update local pagination object
pagination.value.page = page;
pagination.value.rowsPerPage = rowsPerPage;
//pagination.value.sortBy = getObjSort(sortBy, descending)
pagination.value.sortBy = sortBy;
// ordinam.value = sortBy
ordinam_desc.value = descending;
pagination.value.descending = descending;
// console.log('pagination', pagination)
// ...and turn of loading indicator
loading.value = false;
spinner_visible.value = false;
changetable.value = false;
startsearch.value = false;
checkScrollPosition();
});
} catch (e) {
console.error('Error onrequest', e);
}
} }
function onUpdateData(index: number, myprops: any, done: any) { function onUpdateData(index: number, myprops: any, done: any) {
@@ -1768,6 +1812,20 @@ export default defineComponent({
} }
); );
watch(
() => searchList.value,
(to, from) => {
if (
searchList.value &&
!changetable.value &&
!startsearch.value &&
!loading.value
) {
refresh();
}
}
);
/*watch(() => myfilterand.value, (newval, oldval) => { /*watch(() => myfilterand.value, (newval, oldval) => {
refresh() refresh()
})*/ })*/
@@ -1818,6 +1876,14 @@ export default defineComponent({
newRecord.value.idGood = item.idGood; newRecord.value.idGood = item.idGood;
console.log('newRecord', newRecord); console.log('newRecord', newRecord);
} }
} else if (col.jointable === toolsext.TABSECTORBACHECAS) {
// Sbianca la select della Categoria Eventi
if (tools.existProp(item, 'idBacheca')) {
item.idGood = costanti.FILTER_NESSUNO;
newRecord.value.idBacheca = item.idBacheca;
console.log('newRecord', newRecord);
}
} }
rowsel.value = item; rowsel.value = item;
idsel = item._id; idsel = item._id;
@@ -2775,7 +2841,7 @@ export default defineComponent({
return ''; return '';
} }
function cmdExt(cmd: any, id: any, myrec: any) { async function cmdExt(cmd: any, id: any, myrec: any) {
console.log('cmd', cmd); console.log('cmd', cmd);
if (cmd === costanti.CMD_CLONE) { if (cmd === costanti.CMD_CLONE) {
@@ -2792,9 +2858,11 @@ export default defineComponent({
} }
if (cmd === costanti.CMD_SHOW_PAGE) { if (cmd === costanti.CMD_SHOW_PAGE) {
visupagedialog.value = true; visupagedialog.value = false;
await nextTick();
myrecdialog.value = myrec; myrecdialog.value = myrec;
myIdRecDialog.value = id; myIdRecDialog.value = id;
visupagedialog.value = true;
return true; return true;
} else if (cmd === costanti.CMD_OPEN_PAGE) { } else if (cmd === costanti.CMD_OPEN_PAGE) {
router.push(tools.getPathByTableAndRec(mytable.value, myrec)); router.push(tools.getPathByTableAndRec(mytable.value, myrec));

View File

@@ -7,9 +7,9 @@
<q-toggle <q-toggle
v-if="tools.isCollaboratore() && !showMap && editOn" v-if="tools.isCollaboratore() && !showMap && editOn"
v-model="editOn" v-model="editOn"
label="Abilita Modifiche"
color="green" color="green"
icon="fas fa-pencil-alt" icon="fas fa-pencil-alt"
class="fixed-toggle"
> >
</q-toggle> </q-toggle>
<div <div
@@ -499,6 +499,7 @@
v-for="(rec, indexrow) in serverData" v-for="(rec, indexrow) in serverData"
:key="indexrow" :key="indexrow"
:name="indexrow" :name="indexrow"
class="grid-card-item"
> >
<CMyRecCard <CMyRecCard
:table="tablesel" :table="tablesel"
@@ -512,7 +513,6 @@
</q-carousel> </q-carousel>
<q-infinite-scroll <q-infinite-scroll
ref="myinfscroll" ref="myinfscroll"
v-if="!loading"
:initial-index="0" :initial-index="0"
@load="loadMore" @load="loadMore"
:offset="350" :offset="350"
@@ -525,14 +525,12 @@
ref="myinfscroll" ref="myinfscroll"
v-else-if=" v-else-if="
shared_consts.VERTIC_SHOW_GRID.includes(myvertical) && shared_consts.VERTIC_SHOW_GRID.includes(myvertical) &&
!loading &&
alreadymounting alreadymounting
" "
:initial-index="0" :initial-index="0"
@load="onLoadScroll" @load="onLoadScroll"
:offset="350" :offset="350"
debounce="300" debounce="300"
scroll-target=".carousel-scroll-container"
> >
<div v-if="showHeaderCol"> <div v-if="showHeaderCol">
<div <div
@@ -558,7 +556,7 @@
> >
<div <div
v-for="(row, indexrow) in serverData" v-for="(row, indexrow) in serverData"
:key="indexrow" :key="row._id || indexrow"
:class="{ :class="{
row: opt.rowclass, row: opt.rowclass,
'items-stretch': opt.rowclass, 'items-stretch': opt.rowclass,
@@ -702,7 +700,6 @@
<q-table <q-table
v-else-if=" v-else-if="
!shared_consts.VERTIC_SHOW_GRID.includes(myvertical) && !shared_consts.VERTIC_SHOW_GRID.includes(myvertical) &&
!loading &&
serverData && serverData &&
mycolumns mycolumns
" "
@@ -1321,6 +1318,7 @@
<q-dialog <q-dialog
v-model="showSearchDialog" v-model="showSearchDialog"
:seamless="$q.screen.gt.xs"
transition-show="slide-up" transition-show="slide-up"
transition-hide="slide-down" transition-hide="slide-down"
class="q-dialog-fullscreen no-padding-dialog" class="q-dialog-fullscreen no-padding-dialog"
@@ -1407,6 +1405,7 @@
@hide="hidewindow" @hide="hidewindow"
:maximized="$q.screen.lt.sm" :maximized="$q.screen.lt.sm"
:persistent="false" :persistent="false"
:seamless="$q.screen.gt.xs"
:class=" :class="
'dialog_annunci ' + ($q.screen.lt.sm ? 'bottom-dialog' : ' right-align-dialog') 'dialog_annunci ' + ($q.screen.lt.sm ? 'bottom-dialog' : ' right-align-dialog')
" "
@@ -1507,6 +1506,7 @@
@hide="hidewindow" @hide="hidewindow"
class="dialog_class" class="dialog_class"
:persistent="true" :persistent="true"
:seamless="$q.screen.gt.xs"
:maximized="$q.screen.lt.sm" :maximized="$q.screen.lt.sm"
> >
<q-card class="dialog_card"> <q-card class="dialog_card">
@@ -1585,11 +1585,6 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-actions align="center"> <q-card-actions align="center">
<q-btn
:label="t('dialog.insert')"
color="primary"
@click="saveNewRecord"
></q-btn>
<q-btn <q-btn
flat flat
:label="t('dialog.cancel')" :label="t('dialog.cancel')"
@@ -1597,12 +1592,18 @@
v-close-popup v-close-popup
@click="annulla" @click="annulla"
></q-btn> ></q-btn>
<q-btn
:label="t('dialog.insert')"
color="primary"
@click="saveNewRecord"
></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog <q-dialog
v-model="editRecordBool" v-model="editRecordBool"
@hide="hidewindowEdit" @hide="hidewindowEdit"
:seamless="$q.screen.gt.xs"
:maximized="$q.screen.lt.sm" :maximized="$q.screen.lt.sm"
> >
<q-card class="dialog_card"> <q-card class="dialog_card">
@@ -1675,17 +1676,17 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-actions align="center"> <q-card-actions align="center">
<q-btn
:label="t('dialog.save')"
color="primary"
@click="saverecModif"
></q-btn>
<q-btn <q-btn
flat flat
:label="t('dialog.cancel')" :label="t('dialog.cancel')"
color="primary" color="primary"
@click="cancelrecModif" @click="cancelrecModif"
></q-btn> ></q-btn>
<q-btn
:label="t('dialog.save')"
color="primary"
@click="saverecModif"
></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>

View File

@@ -1,16 +1,3 @@
// ========================================
// VARIABILI
// ========================================
$primary-color: #1976d2;
$grey-color: #666;
$grey-light: #999;
$border-radius: 8px;
$border-radius-sm: 6px;
$transition-speed: 0.3s;
$shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
$mobile-breakpoint: 768px;
// ======================================== // ========================================
// GRID CONTAINER // GRID CONTAINER

View File

@@ -6,7 +6,7 @@ import { tools } from '../../store/Modules/tools'
import { fieldsTable } from '@store/Modules/fieldsTable' import { fieldsTable } from '@store/Modules/fieldsTable'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import type { import type {
IColGridTable, IColGridTable,
@@ -38,7 +38,7 @@ import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useQuasar, exportFile } from 'quasar' import { useQuasar, exportFile } from 'quasar'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import translate from '@src/globalroutines/util' import translate from '@/globalroutines/util'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
@@ -593,6 +593,8 @@ export default defineComponent({
setCategBySector(shared_consts.TABLES_MYSKILLS, table, newval) setCategBySector(shared_consts.TABLES_MYSKILLS, table, newval)
} else if (table === toolsext.TABSECTORGOODS) { } else if (table === toolsext.TABSECTORGOODS) {
setCategBySector(toolsext.TABGOODS, table, newval) setCategBySector(toolsext.TABGOODS, table, newval)
} else if (table === toolsext.TABSECTORBACHECAS) {
setCategBySector(toolsext.TABBACHECAS, table, newval)
} else if (table === toolsext.TABREGIONS) { } else if (table === toolsext.TABREGIONS) {
setProvinceByRegion(toolsext.TABPROVINCE, table, newval) setProvinceByRegion(toolsext.TABPROVINCE, table, newval)
} else if (table === toolsext.TABGOODS) { } else if (table === toolsext.TABGOODS) {
@@ -600,7 +602,11 @@ export default defineComponent({
if (recSector) { if (recSector) {
tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + mytable.value + costanti.FILTER_SEP + table + costanti.FILTER_SEP + recSector.value, newval) tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + mytable.value + costanti.FILTER_SEP + table + costanti.FILTER_SEP + recSector.value, newval)
} }
// setCategBySector('sectorgoods', table, newval) } else if (table === toolsext.TABBACHECAS) {
const recSector = searchList.value.find((rec) => rec.table === toolsext.TABSECTORBACHECAS)
if (recSector) {
tools.setCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + mytable.value + costanti.FILTER_SEP + table + costanti.FILTER_SEP + recSector.value, newval)
}
} else if (table === shared_consts.TAB_CITIES) { } else if (table === shared_consts.TAB_CITIES) {
const rec = searchList.value.find((myrec) => myrec.table === shared_consts.TAB_CITIES) // check if exist const rec = searchList.value.find((myrec) => myrec.table === shared_consts.TAB_CITIES) // check if exist
if (rec) { if (rec) {
@@ -722,12 +728,14 @@ export default defineComponent({
let recSector = null let recSector = null
let recSectorGood = null let recSectorGood = null
let recSectorBacheca = null
let recCities = null let recCities = null
let recRegion = null let recRegion = null
let recProvince = null let recProvince = null
let recSkill = null let recSkill = null
let idSector = 0 let idSector = 0
let idSectorGood = 0 let idSectorGood = 0
let idSectorBacheca = 0
let idProvince = 0 let idProvince = 0
let idRegion = 0 let idRegion = 0
let idSkill = 0 let idSkill = 0
@@ -736,9 +744,12 @@ export default defineComponent({
recSector = searchList.value.find((item: ISearchList) => item.table === toolsext.TABSECTORS) recSector = searchList.value.find((item: ISearchList) => item.table === toolsext.TABSECTORS)
idSector = recSector ? recSector.value : 0 idSector = recSector ? recSector.value : 0
recSectorGood = searchList.value.find((item: ISearchList) => item.table === 'sectorgoods') recSectorGood = searchList.value.find((item: ISearchList) => item.table === toolsext.TABSECTORGOODS)
idSectorGood = recSectorGood ? recSectorGood.value : 0 idSectorGood = recSectorGood ? recSectorGood.value : 0
recSectorBacheca = searchList.value.find((item: ISearchList) => item.table === toolsext.TABSECTORBACHECAS)
idSectorBacheca = recSectorBacheca ? recSectorBacheca.value : 0
recProvince = searchList.value.find((item: ISearchList) => item.table === 'provinces') recProvince = searchList.value.find((item: ISearchList) => item.table === 'provinces')
idProvince = recProvince ? recProvince.value : 0 idProvince = recProvince ? recProvince.value : 0
@@ -888,13 +899,20 @@ export default defineComponent({
obj2.idSkill = idSkill obj2.idSkill = idSkill
filtersearch2.push(obj2) filtersearch2.push(obj2)
} }
} else if ((item.table === 'goods') && item.value === costanti.FILTER_TUTTI) { } else if ((item.table === toolsext.TABGOODS) && item.value === costanti.FILTER_TUTTI) {
const obj2: any = {} const obj2: any = {}
if (idSectorGood > 0) { if (idSectorGood > 0) {
// idSectorGood // idSectorGood
obj2['sectorGood._id'] = idSectorGood obj2['sectorGood._id'] = idSectorGood
filtersearch2.push(obj2) filtersearch2.push(obj2)
} }
} else if (item.table === toolsext.TABBACHECAS && item.value === costanti.FILTER_TUTTI) {
const obj2: any = {};
if (idSectorBacheca > 0) {
// idSectorBacheca
obj2['sectorBacheca._id'] = idSectorBacheca;
filtersearch2.push(obj2);
}
} else if ((item.table === 'subskills') && item.value === costanti.FILTER_TUTTI) { } else if ((item.table === 'subskills') && item.value === costanti.FILTER_TUTTI) {
const obj2: any = {} const obj2: any = {}
// idSector // idSector
@@ -1313,6 +1331,14 @@ export default defineComponent({
newRecord.value.idGood = item.idGood newRecord.value.idGood = item.idGood
console.log('newRecord', newRecord) console.log('newRecord', newRecord)
} }
} else if (col.jointable === toolsext.TABSECTORBACHECAS) {
// Sbianca la select della Categoria Bacheca
if (tools.existProp(item, 'idBacheca')) {
item.idBacheca = costanti.FILTER_NESSUNO
newRecord.value.idBacheca = item.idBacheca
console.log('newRecord', newRecord)
}
} }
rowsel.value = item rowsel.value = item
idsel = item._id idsel = item._id

View File

@@ -354,11 +354,6 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-actions align="center"> <q-card-actions align="center">
<q-btn
:label="$t('dialog.insert')"
color="primary"
@click="saveNewRecord"
></q-btn>
<q-btn <q-btn
flat flat
:label="$t('dialog.cancel')" :label="$t('dialog.cancel')"
@@ -366,6 +361,11 @@
v-close-popup v-close-popup
@click="annulla" @click="annulla"
></q-btn> ></q-btn>
<q-btn
:label="$t('dialog.insert')"
color="primary"
@click="saveNewRecord"
></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>
@@ -428,17 +428,17 @@
</div> </div>
</q-card-section> </q-card-section>
<q-card-actions align="center"> <q-card-actions align="center">
<q-btn
:label="$t('dialog.ok')"
color="primary"
@click="saverecModif"
></q-btn>
<q-btn <q-btn
flat flat
:label="$t('dialog.cancel')" :label="$t('dialog.cancel')"
color="primary" color="primary"
@click="cancelrecModif" @click="cancelrecModif"
></q-btn> ></q-btn>
<q-btn
:label="$t('dialog.ok')"
color="primary"
@click="saverecModif"
></q-btn>
</q-card-actions> </q-card-actions>
</q-card> </q-card>
</q-dialog> </q-dialog>

View File

@@ -1,13 +1,13 @@
import { colTableHours } from '@src/store/Modules/fieldsTable' import { colTableHours } from '@/store/Modules/fieldsTable'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { defineComponent, ref } from 'vue' import { defineComponent, ref } from 'vue'
import type { IPagination } from 'model' import type { IPagination } from 'model'
import { CImgText } from '@src/components/CImgText' import { CImgText } from '@/components/CImgText'
import { CCard } from '../CCard' import { CCard } from '../CCard'
import { CMyPage } from '@src/components/CMyPage' import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@src/components/CTitleBanner' import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@src/components/CGridTableRec' import { CGridTableRec } from '@/components/CGridTableRec'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'

View File

@@ -1,10 +1,10 @@
import type { PropType} from 'vue'; import type { PropType} from 'vue';
import { defineComponent, ref } from 'vue' import { defineComponent, ref } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import type { IAnim} from '@src/model'; import type { IAnim} from '@/model';
import { IElemText } from '@src/model' import { IElemText } from '@/model'
export default defineComponent({ export default defineComponent({
name: 'CImgPoster', name: 'CImgPoster',

View File

@@ -2,7 +2,7 @@ import {
defineComponent, defineComponent,
} from 'vue' } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
export default defineComponent({ export default defineComponent({
name: 'CImgText', name: 'CImgText',

View File

@@ -1,6 +1,6 @@
import { defineComponent, ref } from 'vue' import { defineComponent, ref } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
export default defineComponent({ export default defineComponent({
name: 'CImgTitle', name: 'CImgTitle',

View File

@@ -17,7 +17,7 @@ import { useQuasar } from 'quasar';
import { tools } from '@tools'; import { tools } from '@tools';
import { useProducts } from '@store/Products'; import { useProducts } from '@store/Products';
import { shared_consts } from '@src/common/shared_vuejs'; import { shared_consts } from '@/common/shared_vuejs';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { costanti } from '@costanti'; import { costanti } from '@costanti';

View File

@@ -4,17 +4,17 @@ import { useUserStore } from '@store/UserStore'
import type { IMyGroup, ICircuit, IAccount } from 'model'; import type { IMyGroup, ICircuit, IAccount } from 'model';
import { IImgGallery, IUserFields, IUserProfile, IFriends } from 'model' import { IImgGallery, IUserFields, IUserProfile, IFriends } from 'model'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { tools } from '@tools' import { tools } from '@tools'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { CUserNonVerif } from '@src/components/CUserNonVerif' import { CUserNonVerif } from '@/components/CUserNonVerif'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
import { CSaldo } from '@src/components/CSaldo' import { CSaldo } from '@/components/CSaldo'
import { CSendCoins } from '@src/components/CSendCoins' import { CSendCoins } from '@/components/CSendCoins'
import { CCurrencyValue } from '@src/components/CCurrencyValue' import { CCurrencyValue } from '@/components/CCurrencyValue'
import { CCurrencyV2 } from '@src/components/CCurrencyV2' import { CCurrencyV2 } from '@/components/CCurrencyV2'
import { useCircuitStore } from '@store/CircuitStore' import { useCircuitStore } from '@store/CircuitStore'
export default defineComponent({ export default defineComponent({

View File

@@ -1,5 +1,5 @@
import { defineComponent, ref, toRef, watch } from 'vue' import { defineComponent, ref, toRef, watch } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

View File

@@ -18,16 +18,16 @@
v-if="editing" v-if="editing"
class="button-group" class="button-group"
> >
<q-btn
flat
:label="$t('dialog.cancel')"
@click="cancelUpdate"
/>
<q-btn <q-btn
:label="$t('dialog.save')" :label="$t('dialog.save')"
color="positive" color="positive"
@click="confirmUpdate" @click="confirmUpdate"
/> />
<q-btn
:label="$t('dialog.cancel')"
color="negative"
@click="cancelUpdate"
/>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -5,7 +5,7 @@ import { useGlobalStore } from '@store/globalStore'
import { fieldsTable } from '@store/Modules/fieldsTable' import { fieldsTable } from '@store/Modules/fieldsTable'
import { tools } from '@tools' import { tools } from '@tools'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import { CDateTime } from '@src/components/CDateTime' import { CDateTime } from '@/components/CDateTime'
export default defineComponent({ export default defineComponent({

View File

@@ -3,7 +3,10 @@
<div class="key-label"> <div class="key-label">
{{ mykey }} {{ mykey }}
</div> </div>
<div class="value-content" :style="color ? `background-color: ${color}; color: white;` : ''"> <div
class="value-content"
:style="color ? `background-color: ${color}; color: white;` : ''"
>
<span v-if="mydate"> <span v-if="mydate">
<CDateTime <CDateTime
v-model:value="mydate" v-model:value="mydate"
@@ -11,10 +14,17 @@
:canEdit="false" :canEdit="false"
/> />
</span> </span>
<span v-else class="value-text"> <span
v-else
class="value-text"
>
{{ myvalue || '-' }} {{ myvalue || '-' }}
</span> </span>
</div>
<div
class="value-content"
:style="color ? `background-color: ${color}; color: white;` : ''"
>
<q-btn <q-btn
v-if="showSetButton && onSetValue" v-if="showSetButton && onSetValue"
rounded rounded
@@ -30,8 +40,7 @@
</div> </div>
</template> </template>
<script lang="ts" src="./CKeyAndValue.ts"> <script lang="ts" src="./CKeyAndValue.ts"></script>
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './CKeyAndValue.scss'; @import './CKeyAndValue.scss';

View File

@@ -1,5 +1,5 @@
import { defineComponent, ref, toRef, watch } from 'vue' import { defineComponent, ref, toRef, watch } from 'vue'
import { tools } from '@src/store/Modules/tools' import { tools } from '@/store/Modules/tools'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'

View File

@@ -0,0 +1,333 @@
// Spacing ridotto 40-50%
$sp-xs: 4px;
$sp-sm: 8px;
$sp-md: 12px;
$sp-lg: 16px;
$radius-sm: 8px;
$radius-md: 12px;
$radius-lg: 16px;
// Layout
.riso-homepage {
padding: $sp-sm;
max-width: 1200px;
margin: 0 auto;
background: linear-gradient(135deg, #f5f7fa 0%, #e3e9f2 100%);
min-height: 100vh;
}
// Hero Section
.hero-section {
display: grid;
gap: $sp-sm;
margin-bottom: $sp-md;
background: rgba(255, 255, 255, 0.7);
backdrop-filter: blur(10px);
border-radius: $radius-md;
padding: $sp-sm;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08);
@media (max-width: 600px) {
grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 601px) and (max-width: 1024px) {
grid-template-columns: repeat(2, 1fr);
}
@media (min-width: 1025px) {
grid-template-columns: repeat(4, 1fr);
}
}
// Secondary Section
.secondary-section {
display: grid;
gap: $sp-sm;
margin-bottom: $sp-md;
background: rgba(255, 255, 255, 0.6);
backdrop-filter: blur(8px);
border-radius: $radius-md;
padding: $sp-sm;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
@media (max-width: 600px) {
grid-template-columns: repeat(3, 1fr);
}
@media (min-width: 601px) {
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}
}
// Content Sections
.content-section {
background: white;
border-radius: $radius-lg;
padding: $sp-md;
margin-bottom: $sp-md;
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
&:hover {
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
transform: translateY(-2px);
}
.section-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: $sp-md;
padding-bottom: $sp-sm;
border-bottom: 2px solid rgba(0, 0, 0, 0.05);
.section-title {
font-size: 1.25rem;
font-weight: 600;
margin: 0;
display: flex;
align-items: center;
gap: $sp-sm;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
.q-icon {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
}
}
}
// Modern Tabs
.modern-tabs {
margin-bottom: $sp-md;
:deep(.q-tab) {
padding: $sp-sm $sp-md;
border-radius: $radius-sm;
transition: all 0.3s ease;
&:hover {
background: rgba(102, 126, 234, 0.1);
}
&.q-tab--active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
}
}
// Placeholder Content
.placeholder-content {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: $sp-sm;
padding: $sp-lg;
background: rgba(0, 0, 0, 0.02);
border-radius: $radius-md;
border: 2px dashed rgba(0, 0, 0, 0.1);
color: rgba(0, 0, 0, 0.4);
font-size: 0.9rem;
min-height: 100px;
transition: all 0.3s ease;
&:hover {
background: rgba(0, 0, 0, 0.04);
border-color: rgba(0, 0, 0, 0.2);
}
&.horizontal {
flex-direction: row;
min-width: 280px;
}
.q-icon {
opacity: 0.3;
}
}
// Eventi Scroll
.eventi-scroll {
display: flex;
gap: $sp-md;
overflow-x: auto;
padding-bottom: $sp-sm;
scroll-behavior: smooth;
&::-webkit-scrollbar {
height: 4px;
}
&::-webkit-scrollbar-thumb {
background: linear-gradient(90deg, #667eea 0%, #764ba2 100%);
border-radius: 2px;
}
&::-webkit-scrollbar-track {
background: rgba(0, 0, 0, 0.05);
}
}
// Wallet Card
.wallet-card {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: $radius-md;
padding: $sp-lg;
color: white;
display: flex;
flex-direction: column;
gap: $sp-md;
box-shadow: 0 4px 16px rgba(102, 126, 234, 0.3);
.wallet-balance {
display: flex;
flex-direction: column;
gap: $sp-xs;
.balance-label {
font-size: 0.9rem;
opacity: 0.9;
}
.balance-value {
font-size: 2rem;
font-weight: 700;
text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
}
.wallet-actions {
display: flex;
gap: $sp-sm;
.q-btn {
flex: 1;
border-color: white;
color: white;
&:hover {
background: rgba(255, 255, 255, 0.2);
}
}
}
}
// Telegram Grid
.telegram-grid {
display: grid;
gap: $sp-md;
@media (max-width: 600px) {
grid-template-columns: 1fr;
}
@media (min-width: 601px) {
grid-template-columns: repeat(3, 1fr);
}
}
.telegram-card {
display: flex;
flex-direction: column;
background: linear-gradient(135deg, rgba(0, 136, 204, 0.08) 0%, rgba(43, 171, 217, 0.08) 100%);
border-radius: $radius-md;
overflow: hidden;
transition: all 0.3s ease;
text-decoration: none;
border: 1px solid rgba(0, 136, 204, 0.2);
&:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 136, 204, 0.2);
border-color: rgba(0, 136, 204, 0.4);
}
.telegram-img {
height: 120px;
}
.telegram-content {
padding: $sp-md;
display: flex;
justify-content: space-between;
align-items: center;
.telegram-title {
font-weight: 600;
color: #0088cc;
}
}
}
// Footer
.footer-section {
margin-top: $sp-lg;
padding: $sp-lg;
background: rgba(255, 255, 255, 0.5);
backdrop-filter: blur(10px);
border-radius: $radius-lg;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
.footer-links {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
gap: $sp-sm;
.footer-btn {
flex: 1;
min-width: 90px;
color: #667eea;
font-weight: 500;
&:hover {
background: rgba(102, 126, 234, 0.1);
}
}
}
}
// Animazioni
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
.content-section {
animation: fadeIn 0.5s ease-out;
}
// Responsive
@media (max-width: 600px) {
.riso-homepage {
padding: $sp-xs;
}
.content-section {
padding: $sp-sm;
margin-bottom: $sp-sm;
}
.section-header .section-title {
font-size: 1.1rem;
}
.wallet-card {
padding: $sp-md;
}
}

View File

@@ -6,7 +6,7 @@ import { useI18n } from 'vue-i18n'
import { tools } from '@tools' import { tools } from '@tools'
import type { IMainCard } from '@store/Modules/costanti'; import type { IMainCard } from '@store/Modules/costanti';
import { costanti } from '@store/Modules/costanti' import { costanti } from '@store/Modules/costanti'
import { CBigBtn } from '@src/components/CBigBtn' import { CBigBtn } from '@/components/CBigBtn'
export default defineComponent({ export default defineComponent({

View File

@@ -1,9 +1,12 @@
<template> <template>
<div v-if="tools.isUserOk()"> <div
<div v-if="tools.isUserOk()"
class="riso-home"
>
<!-- Hero Section: Annunci principali -->
<section
v-if="cardsbig.length > 0" v-if="cardsbig.length > 0"
class="row q-ma-sm shadow justify-center" class="hero-section"
style="border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.12)"
> >
<CBigBtn <CBigBtn
v-for="(card, ind) of cardsbig" v-for="(card, ind) of cardsbig"
@@ -17,13 +20,13 @@
:numcol="2" :numcol="2"
:hint="card.hint" :hint="card.hint"
:disable="card.disable" :disable="card.disable"
> />
</CBigBtn> </section>
</div>
<div <!-- Secondary: Circuiti e Organizzazioni -->
<section
v-if="cardssmall.length > 0" v-if="cardssmall.length > 0"
class="row shadow justify-center" class="secondary-section"
style="border-radius: 4px; border: 1px solid rgba(0, 0, 0, 0.12)"
> >
<CBigBtn <CBigBtn
v-for="(card, ind) of cardssmall" v-for="(card, ind) of cardssmall"
@@ -38,24 +41,12 @@
:numcol="3" :numcol="3"
:hint="card.hint" :hint="card.hint"
:disable="card.disable" :disable="card.disable"
> />
</CBigBtn> </section>
</div>
</div> </div>
<!--<div class="row justify-center">
<CBigBtn
label="Info" to="" @click="showInfo = true" icon="fas fa-info" color="primary"
:numcol="3"
>
</CBigBtn>
</div>
<div v-if="showInfo">
</div>-->
</template> </template>
<script lang="ts" src="./CMainView.ts"> <script lang="ts" src="./CMainView.ts"></script>
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './CMainView.scss'; @import './CMainView.scss';

View File

@@ -11,10 +11,10 @@ import 'leaflet.markercluster/dist/MarkerCluster.css'
import 'leaflet.markercluster/dist/MarkerCluster.Default.css' import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster' import 'leaflet.markercluster'
import { useUserStore } from '@src/store/UserStore' import { useUserStore } from '@/store/UserStore'
import { useGlobalStore } from '@src/store/globalStore' import { useGlobalStore } from '@/store/globalStore'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { ICoordGPS } from '@src/model' import { ICoordGPS } from '@/model'
export default defineComponent({ export default defineComponent({
name: 'CMapByTable', name: 'CMapByTable',

View File

@@ -10,9 +10,9 @@ import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster' import 'leaflet.markercluster'
import '../../utils/leaflet-extensions'; // Importa le estensioni import '../../utils/leaflet-extensions'; // Importa le estensioni
import { useUserStore } from '@src/store/UserStore' import { useUserStore } from '@/store/UserStore'
import { useGlobalStore } from '@src/store/globalStore' import { useGlobalStore } from '@/store/globalStore'
import { setCookie } from '@src/utils/auth' import { setCookie } from '@/utils/auth'
export default defineComponent({ export default defineComponent({
name: 'CMapComuni', name: 'CMapComuni',

View File

@@ -10,12 +10,12 @@ import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster' import 'leaflet.markercluster'
import '../../utils/leaflet-extensions'; // Importa le estensioni import '../../utils/leaflet-extensions'; // Importa le estensioni
import { useUserStore } from '@src/store/UserStore' import { useUserStore } from '@/store/UserStore'
// Importa le immagini dei marker // Importa le immagini dei marker
import icon from 'leaflet/dist/images/marker-icon.png' import icon from 'leaflet/dist/images/marker-icon.png'
import iconShadow from 'leaflet/dist/images/marker-shadow.png' import iconShadow from 'leaflet/dist/images/marker-shadow.png'
import type { ICoordGPS, ICoordLatLng } from '@src/model' import type { ICoordGPS, ICoordLatLng } from '@/model'
export default defineComponent({ export default defineComponent({
name: 'CMapEditAddressByCoord', name: 'CMapEditAddressByCoord',

View File

@@ -9,7 +9,7 @@ import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster' import 'leaflet.markercluster'
import '../../utils/leaflet-extensions'; // Importa le estensioni import '../../utils/leaflet-extensions'; // Importa le estensioni
import { useUserStore } from '@src/store/UserStore' import { useUserStore } from '@/store/UserStore'
// Importa le immagini dei marker // Importa le immagini dei marker
import icon from 'leaflet/dist/images/marker-icon.png' import icon from 'leaflet/dist/images/marker-icon.png'

View File

@@ -10,7 +10,7 @@ import 'leaflet.markercluster/dist/MarkerCluster.Default.css'
import 'leaflet.markercluster' import 'leaflet.markercluster'
import '../../utils/leaflet-extensions'; // Importa le estensioni import '../../utils/leaflet-extensions'; // Importa le estensioni
import { useUserStore } from '@src/store/UserStore' import { useUserStore } from '@/store/UserStore'
export default defineComponent({ export default defineComponent({
name: 'CMapUsers', name: 'CMapUsers',

View File

@@ -1,144 +1,503 @@
// ==========================================
// CMENUITEM.SCSS - ORIGINALE + MIGLIORAMENTI RISO
// Mantiene tutto il codice originale + stile moderno
// ==========================================
.prova { .prova {
color: red; color: red;
} }
.q-list-header { .q-list-header {
min-height: 12px; min-height: 12px;
padding: 5px 8px; padding: 5px 8px;
} }
.menu-hr { .menu-hr {
border-color: #dedede; border-color: #dedede;
height: 0.5px; height: 0.5px;
} }
.list-label:first-child { .list-label:first-child {
line-height: 20px; line-height: 20px;
padding: 5px; padding: 5px;
margin: 1px; margin: 1px;
} }
.router-link-active { .router-link-active {
color: #027be3; color: #027be3;
background-color: #dadada !important; background-color: #dadada !important;
border-right: 2px solid #027be3; border-right: 2px solid #027be3;
} }
.router-link-active .item-primary { .router-link-active .item-primary {
color: #027be3; color: #027be3;
} }
.menu_freccina { .menu_freccina {
position: absolute; position: absolute;
right: 10px; right: 10px;
display: inline-block; display: inline-block;
padding: 0 0 0 0; padding: 0 0 0 0;
-webkit-transform: rotate(-180deg); -webkit-transform: rotate(-180deg);
transform: rotate(-180deg); transform: rotate(-180deg);
} }
.my-menu, .my-menu,
.my-menu>i { .my-menu>i {
min-height: 40px; min-height: 40px;
min-width: 26px; min-width: 26px;
font-size: 1rem; font-size: 1rem;
} }
.my-menu-small, .my-menu-small,
.my-menu-small>i { .my-menu-small>i {
min-height: 40px; min-height: 40px;
min-width: 26px; min-width: 26px;
font-size: 0.75rem; font-size: 0.75rem;
} }
.isAdmin { .isAdmin {
color: red !important; color: red !important;
} }
.isSocioResidente { .isSocioResidente {
color: darkgreen; color: darkgreen;
} }
.isCalendar {} .isCalendar {}
.isManager { .isManager {
color: green !important; color: green !important;
} }
.isFacilitatore { .isFacilitatore {
color: #201a80; color: #201a80;
} }
.onlyCollaboratore { .onlyCollaboratore {
color: #bd7b10; color: #bd7b10;
} }
.my-menu-icon { .my-menu-icon {
min-width: 2px; min-width: 2px;
font-size: 1rem; font-size: 1rem;
} }
.my-menu-icon>i { .my-menu-icon>i {
min-width: 26px; min-width: 26px;
font-size: 1.25rem; font-size: 1.25rem;
} }
.clexpansion { .clexpansion {
min-width: 0 !important; min-width: 0 !important;
} }
.my-menu-active { .my-menu-active {
background-color: rgba(174, 189, 241, 0.71); background-color: rgba(174, 189, 241, 0.71);
} }
.my-menu-separat>i { .my-menu-separat>i {
min-width: 26px; min-width: 26px;
font-size: 1rem; font-size: 1rem;
} }
.my-menu-icon-none>i { .my-menu-icon-none>i {
display: none; display: none;
} }
.clicon img, .clicon img,
.clicon { .clicon {
font-size: 16px; font-size: 16px;
} }
.q-item__section--avatar { .q-item__section--avatar {
min-width: 30px; min-width: 30px;
} }
.OLD_q-item__section--side { .OLD_q-item__section--side {
padding-right: 8px; padding-right: 8px;
} }
.imgicon img { .imgicon img {
font-size: 2.5rem !important; font-size: 2.5rem !important;
border-radius: 8px; border-radius: 8px;
} }
/* /*
.menu-enter-active, .scale-enter { .menu-enter-active, .scale-enter {
-webkit-animation: moveFromTopFade .5s ease both; -webkit-animation: moveFromTopFade .5s ease both;
animation: moveFromTopFade .5s ease both; animation: moveFromTopFade .5s ease both;
} }
.menu-leave-to, .scale-leave-active { .menu-leave-to, .scale-leave-active {
-webkit-animation: moveToBottom .5s ease both; -webkit-animation: moveToBottom .5s ease both;
animation: moveToBottom .5s ease both; animation: moveToBottom .5s ease both;
} }
*/ */
.bigmenu { .bigmenu {
font-size: 1.25rem; font-size: 1.25rem;
font-weight: bold; font-weight: bold;
text-shadow: 0.0512rem 0.052rem .01rem #555; text-shadow: 0.0512rem 0.052rem .01rem #555;
} }
.subtitle { .subtitle {
font-size: 0.85em; font-size: 0.85em;
color: #666; color: #666;
} }
// ==========================================
// MIGLIORAMENTI STILE RISO - AGGIUNTI
// ==========================================
// ==========================================
// INDENTAZIONE LIVELLI - Più compatta
// ==========================================
[style*="paddingLeft"] {
transition: all 0.3s ease;
}
// ==========================================
// Q-SEPARATOR - Divisore migliorato
// ==========================================
.q-separator {
background: linear-gradient(90deg,
transparent 0%,
rgba(0, 0, 0, 0.1) 50%,
transparent 100%);
margin: 6px 0;
height: 1px;
}
// ==========================================
// Q-EXPANSION-ITEM - Espandibile migliorato
// ==========================================
.q-expansion-item {
border-radius: 8px;
margin-bottom: 2px;
overflow: hidden;
// Header dell'expansion
> .q-item {
border-radius: 8px;
padding: 6px 10px;
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
&:hover {
background: rgba(0, 0, 0, 0.04);
transform: translateX(2px);
}
}
// Label header
.q-item__label {
font-size: 0.95rem;
font-weight: 500;
}
// Icona expand/collapse
.q-icon {
transition: all 0.3s ease;
font-size: 0.9rem;
color: rgba(0, 0, 0, 0.5);
}
}
// Quando espanso
.q-expansion-item--expanded {
> .q-item {
background: rgba(0, 0, 0, 0.02);
.q-icon {
color: var(--q-primary);
transform: rotate(0deg);
}
}
}
// ==========================================
// Q-ITEM FOGLIA - Voce menu semplice
// ==========================================
.q-item {
border-radius: 8px;
padding: 6px 10px;
margin-bottom: 2px;
transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
min-height: 42px;
&:hover {
background: rgba(0, 0, 0, 0.05);
transform: translateX(3px);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
}
&:active {
transform: translateX(1px);
}
// Sezione thumbnail con avatar
.q-item__section--thumbnail {
min-width: 36px;
padding-right: 10px;
}
// Label principale
> .q-item__section > span:not(.subtitle) {
font-size: 0.95rem;
font-weight: 500;
color: rgba(0, 0, 0, 0.87);
}
}
// ==========================================
// Q-AVATAR - Icone migliorate
// ==========================================
.q-avatar {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
background: transparent !important;
&.rounded {
border-radius: 8px;
overflow: hidden;
}
.q-icon {
font-size: 1.3rem;
transition: all 0.3s ease;
}
}
.q-item:hover .q-avatar {
transform: scale(1.08);
.q-icon {
transform: rotate(-5deg);
}
}
// ==========================================
// MY-MENU-ACTIVE - Stato attivo
// ==========================================
.my-menu-active {
background: linear-gradient(90deg,
rgba(2, 123, 227, 0.12) 0%,
rgba(2, 123, 227, 0.05) 100%) !important;
border-radius: 8px;
border-right: 3px solid #027be3;
span {
color: #027be3;
font-weight: 600;
}
.q-avatar {
background: rgba(2, 123, 227, 0.1) !important;
.q-icon {
color: #027be3;
}
}
&:hover {
background: linear-gradient(90deg,
rgba(2, 123, 227, 0.16) 0%,
rgba(2, 123, 227, 0.08) 100%) !important;
}
}
// ==========================================
// CLASSI PERMESSI - Badge colorati
// ==========================================
.isAdmin {
color: #d32f2f !important;
border-left: 3px solid #d32f2f;
background: linear-gradient(90deg,
rgba(211, 47, 47, 0.08) 0%,
rgba(211, 47, 47, 0.02) 100%);
.q-avatar {
background: rgba(211, 47, 47, 0.12) !important;
.q-icon {
color: #d32f2f;
}
}
&:hover {
background: linear-gradient(90deg,
rgba(211, 47, 47, 0.12) 0%,
rgba(211, 47, 47, 0.04) 100%);
}
}
.isManager {
color: #388e3c !important;
border-left: 3px solid #388e3c;
background: linear-gradient(90deg,
rgba(56, 142, 60, 0.08) 0%,
rgba(56, 142, 60, 0.02) 100%);
.q-avatar {
background: rgba(56, 142, 60, 0.12) !important;
.q-icon {
color: #388e3c;
}
}
&:hover {
background: linear-gradient(90deg,
rgba(56, 142, 60, 0.12) 0%,
rgba(56, 142, 60, 0.04) 100%);
}
}
.isSocioResidente {
color: #1b5e20 !important;
.q-avatar .q-icon {
color: #1b5e20;
}
}
.isFacilitatore {
color: #4a148c !important;
.q-avatar .q-icon {
color: #4a148c;
}
}
.onlyCollaboratore {
color: #f57c00 !important;
.q-avatar .q-icon {
color: #f57c00;
}
}
.isEditor {
color: #6a1b9a !important;
.q-avatar .q-icon {
color: #6a1b9a;
}
}
.isCommerciale {
color: #e65100 !important;
.q-avatar .q-icon {
color: #e65100;
}
}
.isGrafico {
color: #00796b !important;
.q-avatar .q-icon {
color: #00796b;
}
}
.isDoc {
border-left: 3px solid #42a5f5;
background: linear-gradient(90deg,
rgba(66, 165, 245, 0.08) 0%,
rgba(66, 165, 245, 0.02) 100%);
}
// ==========================================
// SUBTITLE - Testo secondario
// ==========================================
.subtitle {
font-size: 0.8rem;
color: #757575;
font-style: italic;
margin-top: 2px;
opacity: 0.85;
line-height: 1.3;
}
// ==========================================
// BIGMENU - Titoli grandi
// ==========================================
.bigmenu {
font-size: 1.2rem;
font-weight: 700;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
letter-spacing: -0.01em;
}
// ==========================================
// CLASSI EXTRA - Supporto customizzazioni
// ==========================================
.extraclass {
// Placeholder per classi custom
}
// ==========================================
// RESPONSIVE
// ==========================================
@media screen and (max-width: 600px) {
.q-item {
padding: 5px 8px;
min-height: 40px;
}
.q-expansion-item > .q-item {
padding: 5px 8px;
}
.q-avatar {
width: 1.8rem !important;
height: 1.8rem !important;
font-size: 1.8rem !important;
.q-icon {
font-size: 1.1rem;
}
}
.q-item__section--thumbnail {
min-width: 32px;
padding-right: 8px;
}
.bigmenu {
font-size: 1.1rem;
}
.subtitle {
font-size: 0.75rem;
}
}
// ==========================================
// ANIMAZIONI ENTRATA
// ==========================================
@keyframes fadeSlideIn {
from {
opacity: 0;
transform: translateX(-8px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.q-item,
.q-expansion-item {
animation: fadeSlideIn 0.3s ease;
}
// ==========================================
// FOCUS ACCESSIBILITA
// ==========================================
.q-item:focus-visible,
.q-expansion-item:focus-visible {
outline: 2px solid var(--q-primary);
outline-offset: 2px;
border-radius: 8px;
}

View File

@@ -3,14 +3,14 @@ import draggable from 'vuedraggable';
import { tools } from '@tools'; import { tools } from '@tools';
import { useGlobalStore } from '@src/store/globalStore'; import { useGlobalStore } from '@/store/globalStore';
import { CMyEditorAI } from '@src/components/CMyEditorAI'; import { CMyEditorAI } from '@/components/CMyEditorAI';
import { CAITools } from '@src/components/CAITools'; import { CAITools } from '@/components/CAITools';
import { costanti } from '@costanti'; import { costanti } from '@costanti';
import type { IMyScheda, IProduct, IRecFields } from '@src/model'; import type { IMyScheda, IProduct, IRecFields } from '@/model';
import { shared_consts } from 'app/src/common/shared_vuejs'; import { shared_consts } from 'app/src/common/shared_vuejs';
import { useProducts } from 'app/src/store/Products'; import { useProducts } from 'app/src/store/Products';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';

Some files were not shown because too many files have changed in this diff Show More