Compare commits
17 Commits
cfb830a0ad
...
feat/new_r
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b746e3b6f | ||
|
|
99d623da79 | ||
|
|
a305bd8493 | ||
|
|
d1a66ef4ea | ||
|
|
7c1946debe | ||
|
|
7aeced4232 | ||
|
|
6d78f82099 | ||
|
|
89a8d10eae | ||
|
|
6fdb101092 | ||
|
|
f238630dd7 | ||
|
|
a22eca0f58 | ||
|
|
a4ca394e49 | ||
|
|
5d35930dc8 | ||
|
|
a51bc5a8a2 | ||
|
|
8b6a636a96 | ||
|
|
2abdda3b44 | ||
|
|
3018542868 |
4
.env
@@ -1,6 +1,6 @@
|
||||
VITE_APP_VERSION="1.2.85"
|
||||
VITE_APP_VERSION="1.2.87"
|
||||
VITE_LANG_DEFAULT="it"
|
||||
VITE_PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
VITE_SERVICE_WORKER_FILE="sw-1.2.85.js"
|
||||
VITE_SERVICE_WORKER_FILE="sw-1.2.87.js"
|
||||
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
|
||||
VITE_VUE_ROUTER_MODE="history"
|
||||
@@ -1,11 +1,11 @@
|
||||
VITE_APP_ID="13"
|
||||
VITE_APP_URL="https://test.riso.app"
|
||||
VITE_MONGODB_HOST="https://testapi.riso.app"
|
||||
VITE_LOGO_REG="riso-logo-full.png"
|
||||
VITE_APP_URL="https://riso.app"
|
||||
VITE_MONGODB_HOST="https://api.riso.app"
|
||||
VITE_LOGO_REG='riso-logo-full.png'
|
||||
VITE_PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs"
|
||||
VITE_DEBUG="1"
|
||||
VITE_VUE_APP_ISTEST="1"
|
||||
DIRECTORY_LOCAL="myprojplanet_vite"
|
||||
DIRECTORY_SERVER="/var/www/nodejs_test.riso_server"
|
||||
SERVERDIR_WEBSITE="/var/www/test.riso.app"
|
||||
VITE_DEBUG="0"
|
||||
VITE_VUE_APP_ISTEST="0"
|
||||
DIRECTORY_LOCAL=myprojplanet_vite
|
||||
DIRECTORY_SERVER=/var/www/nodejs_riso_server
|
||||
SERVERDIR_WEBSITE="/var/www/riso.app"
|
||||
SERVERPW_WEBSITE="pwdadmin@1AOK"
|
||||
1778
_LIMBO/Casi d'Uso Ollama - Esempi Pratici.html
Normal file
1026
_LIMBO/aaa.scss
Normal file
2969
_LIMBO/faq_ris.html
Normal file
0
_LIMBO/grid.html
Normal file
2293
_LIMBO/risospiegazione.html
Normal file
@@ -10,7 +10,7 @@
|
||||
<meta name="description" content="<%= productDescription %>">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<meta name="version" content="1.2.85">
|
||||
<meta name="version" content="1.2.87">
|
||||
<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<% } %>">
|
||||
|
||||
|
||||
28
migrate-repos.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
# Salva come migrate-repos.sh
|
||||
|
||||
GITEA_URL="http://95.216.147.38:3000"
|
||||
USERNAME="surya"
|
||||
TOKEN="8ed0622aac269414f4d333d0c89e22b1c42dd4d1" # Crea su Gitea: Settings → Applications → Generate Token
|
||||
SEARCH_PATH="$HOME/myproject"
|
||||
|
||||
# Trova tutti i repository
|
||||
find "$SEARCH_PATH" -name ".git" -type d 2>/dev/null | while read gitdir; do
|
||||
REPO_PATH=$(dirname "$gitdir")
|
||||
REPO_NAME=$(basename "$REPO_PATH")
|
||||
|
||||
echo "Processing: $REPO_NAME"
|
||||
|
||||
# Crea repository su Gitea via API
|
||||
curl -X POST "$GITEA_URL/api/v1/user/repos" \
|
||||
-H "Authorization: token $TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"name\":\"$REPO_NAME\",\"private\":false}"
|
||||
|
||||
# Push
|
||||
cd "$REPO_PATH"
|
||||
git remote remove origin 2>/dev/null
|
||||
git remote add origin "$GITEA_URL/$USERNAME/$REPO_NAME.git"
|
||||
git push -u origin --all
|
||||
git push -u origin --tags
|
||||
done
|
||||
111
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "riso",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"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.",
|
||||
"author": "Surya",
|
||||
@@ -9,11 +9,11 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev",
|
||||
"dev": "APP_VERSION='1.2.87' PORT=8084 quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "quasar build -m spa",
|
||||
@@ -21,35 +21,35 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
"postinstall": "quasar prepare"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cubejs-client/core": "^1.3.21",
|
||||
"@cubejs-client/core": "^1.5.11",
|
||||
"@quasar/extras": "^1.17.0",
|
||||
"@quasar/quasar-ui-qcalendar": "^4.1.2",
|
||||
"@types/jsbarcode": "^3.11.4",
|
||||
"@types/leaflet": "^1.9.18",
|
||||
"@vue/compat": "^3.5.16",
|
||||
"@vue/compiler-sfc": "^3.5.16",
|
||||
"@types/leaflet": "^1.9.21",
|
||||
"@vue/compat": "^3.5.25",
|
||||
"@vue/compiler-sfc": "^3.5.25",
|
||||
"@vuelidate/core": "^2.0.3",
|
||||
"@vuelidate/validators": "^2.0.4",
|
||||
"acorn": "^8.15.0",
|
||||
"animate.css": "^4.1.1",
|
||||
"apexcharts": "^4.7.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"axios": "^1.9.0",
|
||||
"bcryptjs": "^3.0.2",
|
||||
"chart.js": "^4.4.9",
|
||||
"core-js": "^3.43.0",
|
||||
"apexcharts": "^5.3.6",
|
||||
"autoprefixer": "^10.4.22",
|
||||
"axios": "^1.13.2",
|
||||
"bcryptjs": "^3.0.3",
|
||||
"chart.js": "^4.5.1",
|
||||
"core-js": "^3.47.0",
|
||||
"crypto-browserify": "^3.12.1",
|
||||
"date-fns": "^4.1.0",
|
||||
"echarts": "5.6.0",
|
||||
"eslint-plugin-n": "^17.19.0",
|
||||
"echarts": "6.0.0",
|
||||
"eslint-plugin-n": "^17.23.1",
|
||||
"eslint-plugin-quasar": "^1.1.0",
|
||||
"gsap": "^3.13.0",
|
||||
"jquery": "^3.7.1",
|
||||
@@ -63,76 +63,77 @@
|
||||
"mongoose-paginate-v2": "^1.9.1",
|
||||
"normalize.css": "^8.0.1",
|
||||
"nprogress": "^0.2.0",
|
||||
"pinia": "^3.0.3",
|
||||
"quasar": "^2.18.1",
|
||||
"pinia": "^3.0.4",
|
||||
"qrcode-vue3": "^1.7.1",
|
||||
"quasar": "^2.18.6",
|
||||
"quasar-extras": "^2.0.9",
|
||||
"register-service-worker": "^1.7.2",
|
||||
"scrollreveal": "^4.0.9",
|
||||
"typescript-eslint": "^8.34.0",
|
||||
"typescript-eslint": "^8.48.1",
|
||||
"vee-validate": "^4.15.1",
|
||||
"vue": "^3.5.16",
|
||||
"vue": "^3.5.25",
|
||||
"vue-class-component": "^8.0.0-rc.1",
|
||||
"vue-country-code": "^1.1.3",
|
||||
"vue-echarts": "^7.0.3",
|
||||
"vue-i18n": "^11.1.5",
|
||||
"vue-echarts": "^8.0.1",
|
||||
"vue-i18n": "^11.2.2",
|
||||
"vue-idb": "^0.2.0",
|
||||
"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-social-sharing": "^4.0.0-alpha4",
|
||||
"vue-svgicon": "^4.0.0-alpha.3",
|
||||
"vue-timeago3": "^2.3.2",
|
||||
"vue2-dragula": "^2.5.5",
|
||||
"vue3-apexcharts": "^1.8.0",
|
||||
"vue3-apexcharts": "^1.10.0",
|
||||
"vue3-qr-reader": "^1.0.0",
|
||||
"vuedraggable": "^4.1.0",
|
||||
"vuex": "^4.1.0",
|
||||
"vuex-router-sync": "^6.0.0-rc.1",
|
||||
"workbox-core": "^7.3.0",
|
||||
"workbox-precaching": "^7.3.0",
|
||||
"workbox-routing": "^7.3.0",
|
||||
"workbox-strategies": "^7.3.0",
|
||||
"workbox-window": "^7.3.0",
|
||||
"workbox-core": "^7.4.0",
|
||||
"workbox-precaching": "^7.4.0",
|
||||
"workbox-routing": "^7.4.0",
|
||||
"workbox-strategies": "^7.4.0",
|
||||
"workbox-window": "^7.4.0",
|
||||
"xlsx": "^0.18.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.28.0",
|
||||
"@intlify/unplugin-vue-i18n": "^6.0.8",
|
||||
"@quasar/app-vite": "^2.2.1",
|
||||
"@eslint/js": "^9.39.1",
|
||||
"@intlify/unplugin-vue-i18n": "^11.0.1",
|
||||
"@quasar/app-vite": "^2.4.0",
|
||||
"@types/google.maps": "^3.58.1",
|
||||
"@types/jest": "^29.5.14",
|
||||
"@types/jest": "^30.0.0",
|
||||
"@types/js-cookie": "^3.0.6",
|
||||
"@types/node": "^24.0.1",
|
||||
"@types/node": "^24.10.1",
|
||||
"@types/nprogress": "^0.2.3",
|
||||
"@types/vue-tel-input": "^2.1.7",
|
||||
"@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-typescript": "^14.5.0",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"@vue/eslint-config-typescript": "^14.6.0",
|
||||
"autoprefixer": "^10.4.22",
|
||||
"eslint": "9",
|
||||
"eslint-plugin-import": "^2.31.0",
|
||||
"eslint-plugin-vue": "^10.2.0",
|
||||
"eslint-plugin-import": "^2.32.0",
|
||||
"eslint-plugin-vue": "^10.6.2",
|
||||
"file-loader": "^6.2.0",
|
||||
"globals": "^16.2.0",
|
||||
"globals": "^16.5.0",
|
||||
"http-proxy-middleware": "^3.0.5",
|
||||
"jest": "^30.0.0",
|
||||
"jest": "^30.2.0",
|
||||
"json-loader": "^0.5.7",
|
||||
"nodemon": "^3.1.10",
|
||||
"npm-check-updates": "^18.0.1",
|
||||
"parcel": "^2.15.2",
|
||||
"postcss": "^8.5.5",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"nodemon": "^3.1.11",
|
||||
"npm-check-updates": "^19.1.2",
|
||||
"parcel": "^2.16.1",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-loader": "^8.2.0",
|
||||
"prettier": "3",
|
||||
"strip-ansi": "=7.1.0",
|
||||
"ts-jest": "^29.4.0",
|
||||
"typescript": "5.8.3",
|
||||
"vite-plugin-checker": "^0.9.3",
|
||||
"strip-ansi": "=7.1.2",
|
||||
"ts-jest": "^29.4.6",
|
||||
"typescript": "5.9.3",
|
||||
"vite-plugin-checker": "^0.11.0",
|
||||
"vue-cli-plugin-element-ui": "^1.1.4",
|
||||
"vue-eslint-parser": "^10.1.3",
|
||||
"vue-tsc": "^2.2.10",
|
||||
"vue-eslint-parser": "^10.2.0",
|
||||
"vue-tsc": "^3.1.5",
|
||||
"vueify": "^9.4.1",
|
||||
"workbox-build": "^7.3.0"
|
||||
"workbox-build": "^7.4.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18",
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 424 KiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 181 KiB After Width: | Height: | Size: 180 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 276 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
BIN
public/images/riso_quadrato.jpg
Normal file
|
After Width: | Height: | Size: 140 KiB |
330
quasar.config.ts
@@ -1,21 +1,9 @@
|
||||
import { defineConfig } from '#q-app/wrappers';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
import path from 'path';
|
||||
|
||||
// console.log(process.env)
|
||||
|
||||
export default defineConfig((ctx) => {
|
||||
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: [
|
||||
'i18n',
|
||||
'axios',
|
||||
@@ -31,56 +19,90 @@ export default defineConfig((ctx) => {
|
||||
'trackPageViews',
|
||||
],
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
|
||||
css: [
|
||||
'app.scss',
|
||||
// '~quasar-ui-qcalendar/src/css/calendar-day.sass'
|
||||
],
|
||||
css: ['app.scss'],
|
||||
|
||||
// https://github.com/quasarframework/quasar/tree/dev/extras
|
||||
extras: [
|
||||
// 'ionicons-v4',
|
||||
// 'mdi-v5',
|
||||
// 'eva-icons',
|
||||
// 'themify',
|
||||
// 'line-awesome',
|
||||
'ionicons-v4',
|
||||
// 'mdi-v3',
|
||||
'fontawesome-v5',
|
||||
'roboto-font', // optional, you are not bound to it
|
||||
'material-icons', // optional, you are not bound to it
|
||||
'roboto-font',
|
||||
'material-icons',
|
||||
'material-icons-outlined',
|
||||
],
|
||||
|
||||
// Full list of options: https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-build
|
||||
|
||||
build: {
|
||||
target: {
|
||||
browser: ['es2021', 'chrome100', 'firefox100', 'safari14'],
|
||||
node: 'node20',
|
||||
},
|
||||
|
||||
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'),
|
||||
'@types': path.resolve(__dirname, 'src/types'),
|
||||
'@services': path.resolve(__dirname, 'src/services'),
|
||||
},
|
||||
};
|
||||
|
||||
// ✅ AGGIUNTO: SCSS preprocessor con variables.scss globale
|
||||
viteConf.css = {
|
||||
...(viteConf.css || {}),
|
||||
preprocessorOptions: {
|
||||
scss: {
|
||||
additionalData: `@use "sass:color"; @use "src/css/variables.scss" as *;`,
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
|
||||
viteConf: {
|
||||
server: {
|
||||
hmr: {
|
||||
protocol: 'wss', // o 'ws' se usi HTTP
|
||||
protocol: 'wss',
|
||||
host: 'localhost',
|
||||
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) {
|
||||
// Se la variabile d'ambiente SKIP_TSC è impostata, disabilita il type checking
|
||||
if (process.env.SKIP_TSC === 'true') {
|
||||
console.log('⚠️ TypeScript type checking is disabled');
|
||||
|
||||
// Disattiva TypeScript checking per Vite
|
||||
if (api && api.chainWebpack) {
|
||||
api.chainWebpack((chain) => {
|
||||
chain.plugin('fork-ts-checker').tap((args) => {
|
||||
@@ -91,113 +113,19 @@ export default defineConfig((ctx) => {
|
||||
}
|
||||
}
|
||||
},
|
||||
// @quasar/app-vite v2.0.3+
|
||||
|
||||
envFilter(originalEnv) {
|
||||
const newEnv = {};
|
||||
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'),
|
||||
},
|
||||
};
|
||||
return originalEnv; // Ritorna tutto per semplicità
|
||||
},
|
||||
|
||||
vitePlugins: [
|
||||
[
|
||||
'@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',
|
||||
|
||||
// you need to set i18n resource including paths !
|
||||
include: [fileURLToPath(new URL('./src/i18n', import.meta.url))],
|
||||
},
|
||||
],
|
||||
|
||||
[
|
||||
'vite-plugin-checker',
|
||||
{
|
||||
@@ -211,60 +139,25 @@ export default defineConfig((ctx) => {
|
||||
{ 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: {
|
||||
https: {
|
||||
key: path.resolve(__dirname, 'localhost-key.pem'),
|
||||
cert: path.resolve(__dirname, 'localhost.pem'),
|
||||
},
|
||||
|
||||
port: parseInt(process.env.PORT, 10),
|
||||
vueDevtools: false, // automatically opening remote Vue Devtools
|
||||
open: false, // opens browser window automatically
|
||||
hot: true, // Enable hot module replacement
|
||||
vueDevtools: false,
|
||||
open: false,
|
||||
hot: true,
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Access-Control-Allow-Headers': '*',
|
||||
},
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework
|
||||
framework: {
|
||||
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: [
|
||||
'QLayout',
|
||||
'QDrawer',
|
||||
@@ -332,9 +225,10 @@ export default defineConfig((ctx) => {
|
||||
'QTabPanel',
|
||||
'QTree',
|
||||
'QSeparator',
|
||||
'QPageSticky',
|
||||
],
|
||||
directives: ['Ripple', 'ClosePopup'],
|
||||
_plugins: [
|
||||
plugins: [
|
||||
'Meta',
|
||||
'Dialog',
|
||||
'Notify',
|
||||
@@ -344,59 +238,27 @@ export default defineConfig((ctx) => {
|
||||
'LocalStorage',
|
||||
'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',
|
||||
lang: 'it', // Quasar language
|
||||
lang: 'it',
|
||||
},
|
||||
|
||||
animations: 'all', // --- includes all animations
|
||||
// https://v2.quasar.dev/options/animations
|
||||
// animations: [],
|
||||
animations: 'all',
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli/developing-ssr/configuring-ssr
|
||||
ssr: {
|
||||
pwa: false,
|
||||
|
||||
// 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)
|
||||
|
||||
prodPort: 3000,
|
||||
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', // keep this as last one
|
||||
],
|
||||
middlewares: [ctx.prod ? 'compression' : '', 'render'],
|
||||
},
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli/developing-pwa/configuring-pwa
|
||||
pwa: {
|
||||
workboxMode: 'InjectManifest', // 'GenerateSW' or 'InjectManifest'
|
||||
workboxMode: 'InjectManifest',
|
||||
swFilename: 'sw-' + process.env.APP_VERSION + '.js',
|
||||
workboxOptions: {
|
||||
swSrc: 'src-pwa/custom-service-worker.js', // Assicurati che il file esista
|
||||
include: [/\.html$/, /\.js$/, /\.css$/, /\.png$/, /\.svg$/, /\.json$/], // File da precacheare
|
||||
swSrc: 'src-pwa/custom-service-worker.js',
|
||||
include: [/\.html$/, /\.js$/, /\.css$/, /\.png$/, /\.svg$/, /\.json$/],
|
||||
},
|
||||
suppressWarnings: true,
|
||||
/*extendGenerateSWOptions(cfg) {
|
||||
cfg.skipWaiting = false
|
||||
cfg.clientsClaim = false
|
||||
},*/
|
||||
},
|
||||
|
||||
sourceFiles: {
|
||||
@@ -405,36 +267,12 @@ export default defineConfig((ctx) => {
|
||||
pwaManifestFile: 'src-pwa/manifest.json',
|
||||
},
|
||||
|
||||
// Full list of options: https://v2.quasar.dev/quasar-cli/developing-cordova-apps/configuring-cordova
|
||||
cordova: {
|
||||
// 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
|
||||
cordova: {},
|
||||
capacitor: { hideSplashscreen: true },
|
||||
electron: {
|
||||
bundler: 'packager', // 'packager' or 'builder'
|
||||
|
||||
packager: {
|
||||
// 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: '-',
|
||||
},
|
||||
bundler: 'packager',
|
||||
packager: {},
|
||||
builder: { appId: '-' },
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "cnm",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"description": "Comunita Nuovo Mondo",
|
||||
"productName": "ComunitaNuovoMondo",
|
||||
"author": "Surya",
|
||||
@@ -9,7 +9,7 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "PORT=8083 APP_VERSION='1.2.85' quasar dev",
|
||||
"dev": "PORT=8083 APP_VERSION='1.2.87' quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production quasar build -m pwa",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -25,6 +25,7 @@ const msg_website_it = {
|
||||
Ammetti: 'Ammetti',
|
||||
AbilitaCircuito: 'Abilita Circuito',
|
||||
installaApp: 'Installa App',
|
||||
VideoPage: 'Video',
|
||||
fundraising: 'Sostieni il Progetto',
|
||||
notifs: 'Configura le Notifiche',
|
||||
unsubscribe: 'Disiscriviti',
|
||||
@@ -88,6 +89,7 @@ const msg_website_it = {
|
||||
eventodef: 'Evento:',
|
||||
prova: 'prova',
|
||||
dbop: 'Operazioni',
|
||||
VideoPage: 'Video',
|
||||
dbopmacro: 'Operazioni Macro',
|
||||
projall: 'Comunitari',
|
||||
groups: 'Lista Gruppi',
|
||||
|
||||
@@ -36,7 +36,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -51,7 +51,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -62,7 +62,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -72,7 +72,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-tshirt',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@src/root/goods/goods.vue'),
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -83,7 +83,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@src/root/services/services.vue'),
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -94,7 +94,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/activities',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.activities',
|
||||
component: () => import('@src/root/activities/activities.vue'),
|
||||
component: () => import('@/root/activities/activities.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -105,7 +105,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@src/root/provapao/provapao.vue'),
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -116,7 +116,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/hosps',
|
||||
materialIcon: 'fas fa-bed',
|
||||
name: 'mypages.hosp',
|
||||
component: () => import('@src/root/hosp/hosp.vue'),
|
||||
component: () => import('@/root/hosp/hosp.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -127,7 +127,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -138,7 +138,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -149,7 +149,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -160,7 +160,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -171,7 +171,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@src/views/user/editprofile/editprofile.vue'),
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -182,7 +182,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -193,7 +193,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -204,7 +204,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -215,7 +215,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -234,7 +234,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -245,7 +245,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -256,7 +256,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -267,7 +267,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -278,7 +278,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/sostieniilprogetto',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
component: () => import('@/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -288,7 +288,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -62,7 +62,7 @@ const routes_admin: IListRoutes[] = [
|
||||
path: '/admin/sites',
|
||||
materialIcon: 'event_seat',
|
||||
name: 'pages.Sites',
|
||||
component: () => import('@src/rootgen/admin/sites/sites.vue'),
|
||||
component: () => import('@/rootgen/admin/sites/sites.vue'),
|
||||
level_parent: 0.0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
@@ -75,7 +75,7 @@ const routes_admin: IListRoutes[] = [
|
||||
path: '/admin/cfgserv',
|
||||
materialIcon: 'event_seat',
|
||||
name: 'pages.Admin',
|
||||
component: () => import('@src/views/admin/cfgServer/cfgServer.vue'),
|
||||
component: () => import('@/views/admin/cfgServer/cfgServer.vue'),
|
||||
level_parent: 0.0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
@@ -88,7 +88,7 @@ const routes_admin: IListRoutes[] = [
|
||||
path: '/admin/dbop',
|
||||
materialIcon: 'event_seat',
|
||||
name: 'pages.dbop',
|
||||
component: () => import('@src/views/admin/dbop/dbop.vue'),
|
||||
component: () => import('@/views/admin/dbop/dbop.vue'),
|
||||
level_parent: 0.0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
@@ -101,7 +101,7 @@ const routes_admin: IListRoutes[] = [
|
||||
path: '/admin/importfile',
|
||||
materialIcon: 'event_seat',
|
||||
name: 'otherpages.manage.importfile',
|
||||
component: () => import('@src/rootgen/admin/importdata/importdata.vue'),
|
||||
component: () => import('@/rootgen/admin/importdata/importdata.vue'),
|
||||
level_parent: 0.0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
@@ -117,7 +117,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/usereventlist',
|
||||
materialIcon: 'edit',
|
||||
name: 'otherpages.admin.usereventlist',
|
||||
component: () => import('@src/rootgen/admin/eventlist/eventlist.vue'),
|
||||
component: () => import('@/rootgen/admin/eventlist/eventlist.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -133,7 +133,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/userlist',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'otherpages.admin.userlist',
|
||||
component: () => import('@src/rootgen/admin/usersList/usersList.vue'),
|
||||
component: () => import('@/rootgen/admin/usersList/usersList.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -148,7 +148,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/iscritticonacreis',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'otherpages.admin.iscritticonacreis',
|
||||
component: () => import('@src/rootgen/admin/iscritticonacreis/iscritticonacreis.vue'),
|
||||
component: () => import('@/rootgen/admin/iscritticonacreis/iscritticonacreis.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -164,7 +164,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/zoomlist',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'otherpages.admin.zoomlist',
|
||||
component: () => import('@src/rootgen/admin/zoomList/zoomList.vue'),
|
||||
component: () => import('@/rootgen/admin/zoomList/zoomList.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -178,7 +178,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/tableslist',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'otherpages.admin.tableslist',
|
||||
component: () => import('@src/rootgen/admin/tablesList/tablesList.vue'),
|
||||
component: () => import('@/rootgen/admin/tablesList/tablesList.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -192,7 +192,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/pages',
|
||||
materialIcon: 'fas fa-file-alt',
|
||||
name: 'otherpages.admin.pages',
|
||||
component: () => import('@src/rootgen/admin/pages/pages.vue'),
|
||||
component: () => import('@/rootgen/admin/pages/pages.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -206,7 +206,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/bot',
|
||||
materialIcon: 'fas fa-file-alt',
|
||||
name: 'otherpages.admin.bot',
|
||||
component: () => import('@src/rootgen/admin/bot/bot.vue'),
|
||||
component: () => import('@/rootgen/admin/bot/bot.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -240,7 +240,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/msg_template',
|
||||
materialIcon: 'fas fa-file-alt',
|
||||
name: 'msgs.messages',
|
||||
component: () => import('@src/rootgen/admin/msg_template/msg_template.vue'),
|
||||
component: () => import('@/rootgen/admin/msg_template/msg_template.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -255,7 +255,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/sendpushnotif',
|
||||
materialIcon: 'event_seat',
|
||||
name: 'otherpages.manage.sendpushnotif',
|
||||
component: () => import('@src/rootgen/admin/sendpushnotif/sendpushnotif.vue'),
|
||||
component: () => import('@/rootgen/admin/sendpushnotif/sendpushnotif.vue'),
|
||||
level_parent: 0.0,
|
||||
level_child: 0.5,
|
||||
inmenu: true,
|
||||
@@ -269,7 +269,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/gallery',
|
||||
materialIcon: 'fas fa-file-alt',
|
||||
name: 'otherpages.admin.gallery',
|
||||
component: () => import('@src/rootgen/admin/gallery/gallery.vue'),
|
||||
component: () => import('@/rootgen/admin/gallery/gallery.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -283,7 +283,7 @@ const routes_manager: IListRoutes[] = [
|
||||
path: '/admin/media',
|
||||
materialIcon: 'fas fa-file-alt',
|
||||
name: 'otherpages.admin.media',
|
||||
component: () => import('@src/rootgen/admin/uploader/uploader.vue'),
|
||||
component: () => import('@/rootgen/admin/uploader/uploader.vue'),
|
||||
inmenu: true,
|
||||
submenu: true,
|
||||
level_parent: 0,
|
||||
@@ -301,7 +301,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -312,7 +312,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -323,7 +323,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-briefcase',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@src/root/goods/goods.vue'),
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -334,7 +334,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-briefcase',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@src/root/services/services.vue'),
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -345,7 +345,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/presentazione',
|
||||
materialIcon: 'fas fa-info',
|
||||
name: 'pages.presentazione',
|
||||
component: () => import('@src/root/presentazione/presentazione.vue'),
|
||||
component: () => import('@/root/presentazione/presentazione.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -356,7 +356,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -367,7 +367,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@src/views/user/editprofile/editprofile.vue'),
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -378,7 +378,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.friends',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -389,7 +389,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -400,7 +400,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/my/:username',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile2',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -411,7 +411,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -422,7 +422,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -433,7 +433,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -444,7 +444,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -484,7 +484,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/404error',
|
||||
materialIcon: 'fas fa-calendar-plus',
|
||||
name: 'otherpages.error404',
|
||||
component: () => import('@src/root/My404page/My404page.vue'),
|
||||
component: () => import('@/root/My404page/My404page.vue'),
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
},
|
||||
@@ -494,7 +494,7 @@ const baseroutes: IListRoutes[] = [
|
||||
order: 8,
|
||||
path: '/policy',
|
||||
name: 'pages.policy',
|
||||
component: () => import('@src/root/policy/policy.vue'),
|
||||
component: () => import('@/root/policy/policy.vue'),
|
||||
},*/
|
||||
{
|
||||
active: functionality.ENABLE_REGISTRATION,
|
||||
@@ -502,7 +502,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/signup/:invited',
|
||||
materialIcon: 'how_to_reg',
|
||||
name: 'pages.SignUp',
|
||||
component: () => import('@src/views/login/signup/signup.vue'),
|
||||
component: () => import('@/views/login/signup/signup.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
separator: false
|
||||
@@ -513,7 +513,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/regok',
|
||||
materialIcon: 'how_to_reg',
|
||||
name: 'pages.regok',
|
||||
component: () => import('@src/views/login/regok/regok.vue'),
|
||||
component: () => import('@/views/login/regok/regok.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
separator: false,
|
||||
@@ -524,7 +524,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/signin',
|
||||
materialIcon: 'account_circle',
|
||||
name: 'pages.SignIn',
|
||||
component: () => import('@src/views/login/signin_noreg/signin_noreg.vue'),
|
||||
component: () => import('@/views/login/signin_noreg/signin_noreg.vue'),
|
||||
inmenu: true,
|
||||
infooter: true
|
||||
},
|
||||
@@ -533,28 +533,28 @@ const baseroutes: IListRoutes[] = [
|
||||
order: 1000,
|
||||
path: '/vreg',
|
||||
name: 'pages.vreg',
|
||||
component: () => import('@src/views/login/vreg/vreg.vue')
|
||||
component: () => import('@/views/login/vreg/vreg.vue')
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 1000,
|
||||
path: '/requestresetpwd',
|
||||
name: 'pages.requestresetpwd',
|
||||
component: () => import('@src/views/requestresetpwd/requestresetpwd.vue')
|
||||
component: () => import('@/views/requestresetpwd/requestresetpwd.vue')
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 1000,
|
||||
path: '/updatepassword',
|
||||
name: 'pages.updatepassword',
|
||||
component: () => import('@src/views/updatepassword/updatepassword.vue')
|
||||
component: () => import('@/views/updatepassword/updatepassword.vue')
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 1000,
|
||||
path: '/offline',
|
||||
name: 'Offline',
|
||||
component: () => import('@src/views/offline/offline.vue')
|
||||
component: () => import('@/views/offline/offline.vue')
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
@@ -570,7 +570,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'pages.calendarioeventi',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: true,
|
||||
infooter: true
|
||||
@@ -581,7 +581,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/admin/newsletter/:idparam',
|
||||
materialIcon: 'event',
|
||||
name: 'pages.newsletter.menu',
|
||||
component: () => import('@src/rootgen/admin/newsletter/newsletter.vue'),
|
||||
component: () => import('@/rootgen/admin/newsletter/newsletter.vue'),
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
},
|
||||
@@ -591,7 +591,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/event/:typol/:eventid',
|
||||
materialIcon: 'event',
|
||||
name: 'pages.evento',
|
||||
component: () => import('@src/root/evento/evento.vue'),
|
||||
component: () => import('@/root/evento/evento.vue'),
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
},
|
||||
@@ -601,7 +601,7 @@ const baseroutes: IListRoutes[] = [
|
||||
path: '/event/:typol',
|
||||
materialIcon: 'event',
|
||||
name: 'pages.eventodef',
|
||||
component: () => import('@src/root/evento/evento.vue'),
|
||||
component: () => import('@/root/evento/evento.vue'),
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "freeplanet",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"description": "freeplanet",
|
||||
"productName": "freeplanet",
|
||||
"author": "Surya",
|
||||
@@ -9,11 +9,11 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "PORT=8087 APP_VERSION='1.2.85' quasar dev",
|
||||
"dev": "PORT=8087 APP_VERSION='1.2.87' quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "quasar build -m spa",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "riso",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"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.",
|
||||
"author": "Surya",
|
||||
@@ -9,11 +9,11 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev",
|
||||
"dev": "APP_VERSION='1.2.87' PORT=8084 quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "quasar build -m spa",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -38,7 +38,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -53,7 +53,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -64,7 +64,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-tshirt',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@src/root/goods/goods.vue'),
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@src/root/services/services.vue'),
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/activities',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.activities',
|
||||
component: () => import('@src/root/activities/activities.vue'),
|
||||
component: () => import('@/root/activities/activities.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@src/root/provapao/provapao.vue'),
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -118,7 +118,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/hosps',
|
||||
materialIcon: 'fas fa-bed',
|
||||
name: 'mypages.hosp',
|
||||
component: () => import('@src/root/hosp/hosp.vue'),
|
||||
component: () => import('@/root/hosp/hosp.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -129,7 +129,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -140,7 +140,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -151,7 +151,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -162,7 +162,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -184,7 +184,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -195,7 +195,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -206,7 +206,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -236,7 +236,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -247,7 +247,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -258,7 +258,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -269,7 +269,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -280,7 +280,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/sostieniilprogetto',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
component: () => import('@/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -290,7 +290,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "gruppomacro",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"productName": "Gruppo Macro",
|
||||
"description": "Il Gruppo Editoriale Macro, attivo dal 1987, è leader europeo nella pubblicazione di libri per il benessere e la consapevolezza. Con oltre 1.500 titoli, promuove una visione armonica del mondo, offrendo opere di autori internazionali e italiani come Gregg Braden, Bruce Lipton, Joe Dispenza, Louise Hay, Eckhart Tolle e molti altri. Scopri un'editoria che abbraccia il corpo, la mente, lo spirito e l'ecologia.",
|
||||
"author": "Surya",
|
||||
@@ -9,20 +9,20 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "PORT=8089 APP_VERSION='1.2.85' quasar dev",
|
||||
"dev": "PORT=8089 APP_VERSION='1.2.87' quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "APP_VERSION='1.2.85' quasar build -m spa",
|
||||
"buildspa": "APP_VERSION='1.2.87' quasar build -m spa",
|
||||
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -38,7 +38,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -54,7 +54,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -65,7 +65,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -75,7 +75,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test-lungo',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test_lungo',
|
||||
component: () => import('@src/views/testLungo/testLungo.vue'),
|
||||
component: () => import('@/views/testLungo/testLungo.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@src/root/provapao/provapao.vue'),
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -118,7 +118,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -129,7 +129,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -140,7 +140,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -151,7 +151,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -162,7 +162,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -173,7 +173,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -192,7 +192,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -203,7 +203,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -214,7 +214,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -225,7 +225,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -236,7 +236,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nuovomondo",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"description": "Nuovo Mondo",
|
||||
"productName": "Nuovo Mondo",
|
||||
"author": "Surya",
|
||||
@@ -9,11 +9,11 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "APP_VERSION='1.2.85' PORT=8083 quasar dev",
|
||||
"dev": "APP_VERSION='1.2.87' PORT=8083 quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "quasar build -m spa",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -14,7 +14,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -29,7 +29,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -40,7 +40,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -52,7 +52,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -63,7 +63,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@src/views/user/editprofile/editprofile.vue'),
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -120,7 +120,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -133,7 +133,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -144,7 +144,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -163,7 +163,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -174,7 +174,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -185,7 +185,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -196,7 +196,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -207,7 +207,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/fundraising',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
component: () => import('@/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "nutriben",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"description": "Nutriben",
|
||||
"productName": "Nutriben",
|
||||
"author": "Surya",
|
||||
@@ -9,20 +9,20 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "PORT=8093 APP_VERSION='1.2.85' quasar dev",
|
||||
"dev": "PORT=8093 APP_VERSION='1.2.87' quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "APP_VERSION='1.2.85' quasar build -m spa",
|
||||
"buildspa": "APP_VERSION='1.2.87' quasar build -m spa",
|
||||
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -38,7 +38,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/nutriben/home/home.vue'),
|
||||
component: () => import('@/root/nutriben/home/home.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -54,7 +54,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -65,7 +65,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -75,7 +75,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@src/root/provapao/provapao.vue'),
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -86,7 +86,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -97,7 +97,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -108,7 +108,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -119,7 +119,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -130,7 +130,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@src/views/user/editprofile/editprofile.vue'),
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -141,7 +141,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -152,7 +152,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -163,7 +163,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -174,7 +174,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -193,7 +193,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -204,7 +204,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -215,7 +215,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -226,7 +226,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -237,7 +237,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "piuchebuono",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"description": "PiuCheBuono",
|
||||
"productName": "PiuCheBuono",
|
||||
"author": "Surya",
|
||||
@@ -9,11 +9,11 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "PORT=8085 APP_VERSION='1.2.85' quasar dev",
|
||||
"dev": "PORT=8085 APP_VERSION='1.2.87' quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "quasar build -m spa",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -14,7 +14,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -29,7 +29,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -40,7 +40,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -52,7 +52,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -63,7 +63,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@src/views/user/editprofile/editprofile.vue'),
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -120,7 +120,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -133,7 +133,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -144,7 +144,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -163,7 +163,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -174,7 +174,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -185,7 +185,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -196,7 +196,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -207,7 +207,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/fundraising',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
component: () => import('@/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "riso",
|
||||
"version": "1.2.85",
|
||||
"version": "1.2.87",
|
||||
"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.",
|
||||
"author": "Surya",
|
||||
@@ -9,11 +9,11 @@
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "APP_VERSION='1.2.85' PORT=8084 quasar dev",
|
||||
"dev": "APP_VERSION='1.2.87' PORT=8084 quasar dev",
|
||||
"dev_noCheck": "SKIP_TSC=true quasar dev",
|
||||
"build": "quasar build",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.85' quasar build -m pwa",
|
||||
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.87' quasar build -m pwa",
|
||||
"type-check": "vue-tsc --noEmit",
|
||||
"type-check:watch": "vue-tsc --noEmit --watch",
|
||||
"buildspa": "quasar build -m spa",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
|
||||
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.85' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.85' quasar dev",
|
||||
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.87' quasar dev -m pwa",
|
||||
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.87' quasar dev",
|
||||
"debug": "quasar dev --mode debug",
|
||||
"test": "echo \"No test specified\" && exit 0",
|
||||
"generate-sw": "workbox generateSW workbox-config.js",
|
||||
|
||||
@@ -38,7 +38,7 @@ const firstPage = {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -53,7 +53,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/',
|
||||
materialIcon: 'home',
|
||||
name: 'pages.home',
|
||||
component: () => import('@src/root/mainview/mainview.vue'),
|
||||
component: () => import('@/root/mainview/mainview.vue'),
|
||||
reqauth: false,
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -64,7 +64,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/test',
|
||||
materialIcon: 'fas fa-test',
|
||||
name: 'mypages.test',
|
||||
component: () => import('@src/views/testServer/testServer.vue'),
|
||||
component: () => import('@/views/testServer/testServer.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -74,7 +74,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-tshirt',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@src/root/goods/goods.vue'),
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -85,7 +85,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@src/root/services/services.vue'),
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -96,7 +96,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/activities',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.activities',
|
||||
component: () => import('@src/root/activities/activities.vue'),
|
||||
component: () => import('@/root/activities/activities.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -107,7 +107,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@src/root/provapao/provapao.vue'),
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -118,7 +118,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/hosps',
|
||||
materialIcon: 'fas fa-bed',
|
||||
name: 'mypages.hosp',
|
||||
component: () => import('@src/root/hosp/hosp.vue'),
|
||||
component: () => import('@/root/hosp/hosp.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -129,7 +129,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@src/views/user/mycircuits/mycircuits.vue'),
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -140,7 +140,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/events',
|
||||
materialIcon: 'fas fa-bullhorn',
|
||||
name: 'mypages.events',
|
||||
component: () => import('@src/root/eventi/eventi.vue'),
|
||||
component: () => import('@/root/eventi/eventi.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -151,7 +151,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/install_site',
|
||||
materialIcon: 'fas fa-user',
|
||||
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 },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -162,7 +162,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@src/views/user/myprofile/myprofile.vue'),
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -184,7 +184,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@src/views/user/myfriends/myfriends.vue'),
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
@@ -195,7 +195,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@src/views/user/mygroups/mygroups.vue'),
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
@@ -206,7 +206,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@src/views/user/mygroup/mygroup.vue'),
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -217,7 +217,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@src/views/user/mycircuit/mycircuit.vue'),
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -236,7 +236,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@src/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -247,7 +247,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@src/views/user/myservice/myservice.vue'),
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -258,7 +258,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@src/views/user/mypagehosp/mypagehosp.vue'),
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -269,7 +269,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@src/views/user/mypagegood/mypagegood.vue'),
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
@@ -280,7 +280,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/sostieniilprogetto',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
component: () => import('@/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
@@ -290,7 +290,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@src/root/calendarioeventi/calendarioeventi.vue'),
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/* global workbox */
|
||||
/* global cfgenv */
|
||||
|
||||
const VITE_APP_VERSION = '1.2.85';
|
||||
const VITE_APP_VERSION = '1.2.87';
|
||||
|
||||
// Costanti di configurazione
|
||||
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(
|
||||
' [ VER-' +
|
||||
VITE_APP_VERSION +
|
||||
|
||||
12
src/App.ts
@@ -1,15 +1,15 @@
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { BannerCookies } from '@src/components/BannerCookies';
|
||||
import { BannerCookies } from '@/components/BannerCookies';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useGlobalStore } from '@store/globalStore';
|
||||
import { useUserStore } from '@store/UserStore';
|
||||
import { MyHeader } from '@src/components/MyHeader';
|
||||
import { MyFooter } from '@src/components/MyFooter';
|
||||
import { CCheckUpdatesPWA } from '@src/components/CCheckUpdatesPWA';
|
||||
import { CFirstPageApp } from '@src/components/CFirstPageApp';
|
||||
import { MyHeader } from '@/components/MyHeader';
|
||||
import { MyFooter } from '@/components/MyFooter';
|
||||
import { CCheckUpdatesPWA } from '@/components/CCheckUpdatesPWA';
|
||||
import { CFirstPageApp } from '@/components/CFirstPageApp';
|
||||
import { computed, onMounted, ref, watch } from 'vue';
|
||||
import { CProvaPao } from '@src/components/CProvaPao';
|
||||
import { CProvaPao } from '@/components/CProvaPao';
|
||||
import { tools } from '@tools';
|
||||
import { toolsext } from '@store/Modules/toolsext';
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
// import something here
|
||||
|
||||
// import { isEqual } from 'lodash'
|
||||
// import { ProgressBar } from '@src/store/Modules/Interface'
|
||||
// import { ProgressBar } from '@/store/Modules/Interface'
|
||||
// import { UserStore } from "@store"
|
||||
|
||||
// @ts-ignore
|
||||
import { boot } from 'quasar/wrappers'
|
||||
|
||||
import { useGlobalStore } from '@src/store/globalStore';
|
||||
import { useUserStore } from '@src/store/UserStore';
|
||||
import { tools } from '@src/store/Modules/tools';
|
||||
import { useGlobalStore } from '@/store/globalStore';
|
||||
import { useUserStore } from '@/store/UserStore';
|
||||
import { tools } from '@/store/Modules/tools';
|
||||
|
||||
export default boot(({ app, router }) => {
|
||||
// ******************************************
|
||||
@@ -35,7 +35,7 @@ export default boot(({ app, router }) => {
|
||||
globalStore.editOn = tools.getCookie('edn_' + pageKey, '0') === '1'
|
||||
}
|
||||
} catch(e) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
next()
|
||||
@@ -53,10 +53,10 @@ export default boot(({ app, router }) => {
|
||||
//} else {
|
||||
// next()
|
||||
//}
|
||||
|
||||
|
||||
|
||||
// Continue with the navigation
|
||||
|
||||
|
||||
});
|
||||
|
||||
/* router.beforeEach((to, from, next) => {
|
||||
|
||||
@@ -5,7 +5,7 @@ import axios, {
|
||||
} from 'axios'
|
||||
|
||||
// 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";
|
||||
|
||||
let initialized = false
|
||||
|
||||
@@ -5,7 +5,7 @@ import axios, {
|
||||
} from 'axios'
|
||||
|
||||
// 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";
|
||||
|
||||
let initialized = false
|
||||
|
||||
@@ -147,7 +147,6 @@ export const shared_consts = {
|
||||
DASHBOARD: 140,
|
||||
DASHGROUP: 145,
|
||||
MOVEMENTS: 148,
|
||||
CSENDRISTO: 150,
|
||||
STATUSREG: 160,
|
||||
CHECKIFISLOGGED: 170,
|
||||
INFO_VERSION: 180,
|
||||
@@ -190,6 +189,11 @@ export const shared_consts = {
|
||||
PAGE_SECTION: 1500,
|
||||
PROFILE_COMPLETITION: 1510,
|
||||
RISOHOME: 1600,
|
||||
RISOHOME_MODERN: 1610,
|
||||
RISOHOME_PAGFINALE: 1615,
|
||||
PAGERIS: 1620,
|
||||
CMYCIRCUITS: 1630,
|
||||
CREA_VOLANTINO: 1700,
|
||||
},
|
||||
|
||||
QUERYTYPE_MYGROUP: 1,
|
||||
@@ -321,6 +325,8 @@ export const shared_consts = {
|
||||
'sectors',
|
||||
'goods',
|
||||
'sectorgoods',
|
||||
'bachecas',
|
||||
'sectorbachecas',
|
||||
'catgrps',
|
||||
'skills',
|
||||
'subskills',
|
||||
@@ -440,6 +446,7 @@ export const shared_consts = {
|
||||
TABLES_REC_ID: [
|
||||
'skills',
|
||||
'goods',
|
||||
'bachecas',
|
||||
'subskills',
|
||||
'myskills',
|
||||
'mybachecas',
|
||||
@@ -788,98 +795,266 @@ export const shared_consts = {
|
||||
{
|
||||
value: 2,
|
||||
label: 'Si accettano cani',
|
||||
icon: 'pets',
|
||||
color: '#795548', // brown
|
||||
},
|
||||
{
|
||||
value: 3,
|
||||
label: 'Si accettano gatti',
|
||||
icon: 'pets',
|
||||
color: '#FF9800', // orange
|
||||
},
|
||||
{
|
||||
value: 4,
|
||||
label: "E' consentito fumare in casa",
|
||||
icon: 'smoking_rooms',
|
||||
color: '#9E9E9E', // grey
|
||||
},
|
||||
{
|
||||
value: 5,
|
||||
label: 'Accessibile con sedia a rotelle',
|
||||
icon: 'accessible',
|
||||
color: '#2196F3', // blue
|
||||
},
|
||||
{
|
||||
value: 6,
|
||||
label: 'Parcheggio gratuito nella proprietà',
|
||||
icon: 'local_parking',
|
||||
color: '#3F51B5', // indigo
|
||||
},
|
||||
{
|
||||
value: 7,
|
||||
label: 'Wi-fi disponibile',
|
||||
icon: 'wifi',
|
||||
color: '#00BCD4', // cyan
|
||||
},
|
||||
{
|
||||
value: 8,
|
||||
label: 'Sono permessi soggiorni a lungo termine',
|
||||
icon: 'calendar_month',
|
||||
color: '#009688', // teal
|
||||
},
|
||||
{
|
||||
value: 9,
|
||||
label: 'Cucina Vegetariana',
|
||||
icon: 'restaurant',
|
||||
color: '#4CAF50', // green
|
||||
},
|
||||
{
|
||||
value: 10,
|
||||
label: 'Cucina Vegana',
|
||||
icon: 'spa',
|
||||
color: '#8BC34A', // light-green
|
||||
},
|
||||
{
|
||||
value: 11,
|
||||
label: 'Uso della Cucina',
|
||||
icon: 'kitchen',
|
||||
color: '#FFC107', // amber
|
||||
},
|
||||
{
|
||||
value: 12,
|
||||
label: 'Uso della Lavatrice',
|
||||
icon: 'local_laundry_service',
|
||||
color: '#607D8B', // blue-grey
|
||||
},
|
||||
{
|
||||
value: 13,
|
||||
label: 'Aria condizionata',
|
||||
icon: 'ac_unit',
|
||||
color: '#03A9F4', // light-blue
|
||||
},
|
||||
{
|
||||
value: 14,
|
||||
label: 'Ventilatore',
|
||||
icon: 'air',
|
||||
color: '#00BCD4', // cyan
|
||||
},
|
||||
{
|
||||
value: 15,
|
||||
label: "Doccia all'aperto",
|
||||
icon: 'shower',
|
||||
color: '#2196F3', // blue
|
||||
},
|
||||
{
|
||||
value: 16,
|
||||
label: 'TV',
|
||||
icon: 'tv',
|
||||
color: '#673AB7', // deep-purple
|
||||
},
|
||||
{
|
||||
value: 17,
|
||||
label: 'Eventi consentiti',
|
||||
icon: 'celebration',
|
||||
color: '#E91E63', // pink
|
||||
},
|
||||
{
|
||||
value: 18,
|
||||
label: 'Adatto a bambini da 2 a 12 anni',
|
||||
icon: 'child_care',
|
||||
color: '#F9A825'
|
||||
},
|
||||
{
|
||||
value: 19,
|
||||
label: 'Adatto ai neonati (fino ai 2 anni)',
|
||||
icon: 'baby_changing_station',
|
||||
color: '#F8BBD0', // pink-light
|
||||
},
|
||||
{
|
||||
value: 20,
|
||||
label: 'Biancheria inclusa',
|
||||
icon: 'bed',
|
||||
color: '#9C27B0', // purple
|
||||
},
|
||||
{
|
||||
value: 21,
|
||||
label: 'Biancheria su richiesta (a parte)',
|
||||
icon: 'bedroom_parent',
|
||||
color: '#673AB7', // deep-purple
|
||||
},
|
||||
{
|
||||
value: 22,
|
||||
label: 'Asciugamani',
|
||||
icon: 'dry_cleaning',
|
||||
color: '#009688', // teal
|
||||
},
|
||||
{
|
||||
value: 23,
|
||||
label: 'Asciugacapelli',
|
||||
icon: 'iron',
|
||||
color: '#F44336', // red
|
||||
},
|
||||
{
|
||||
value: 24,
|
||||
label: 'Riscaldamento a legna',
|
||||
icon: 'fireplace',
|
||||
color: '#FF5722', // deep-orange
|
||||
},
|
||||
{
|
||||
value: 25,
|
||||
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
|
||||
},
|
||||
],
|
||||
|
||||
@@ -1835,11 +2010,6 @@ export const shared_consts = {
|
||||
label: 'Lista Movimenti',
|
||||
icon: 'fas fa-list',
|
||||
},
|
||||
{
|
||||
value: 150,
|
||||
label: 'SendCoinTo',
|
||||
icon: 'fas fa-wallet',
|
||||
},
|
||||
{
|
||||
value: 280,
|
||||
label: 'Tutorial',
|
||||
@@ -1883,6 +2053,11 @@ export const shared_consts = {
|
||||
label: 'Check Email',
|
||||
icon: 'fas fa-envelope',
|
||||
},
|
||||
{
|
||||
value: 1700, // CREA_VOLANTINO
|
||||
label: 'Genera Volantini',
|
||||
icon: 'fas fa-user-tie',
|
||||
},
|
||||
{
|
||||
value: 120,
|
||||
label: 'OpenStreetMap',
|
||||
@@ -1943,6 +2118,26 @@ export const shared_consts = {
|
||||
label: 'HomePage RISO',
|
||||
icon: 'fas fa-home',
|
||||
},
|
||||
{
|
||||
value: 1610, // RISOHOME_MODERN
|
||||
label: 'RISO Home Modern',
|
||||
icon: 'fas fa-home',
|
||||
},
|
||||
{
|
||||
value: 1615, // RISOHOME_PAGFINALE
|
||||
label: 'RISO Home (Parte Finale))',
|
||||
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,
|
||||
label: 'Registration',
|
||||
@@ -2292,6 +2487,7 @@ export const shared_consts = {
|
||||
link_group: 1,
|
||||
totCircolante: 1,
|
||||
totTransato: 1,
|
||||
numTransazioni: 1,
|
||||
systemUserId: 1,
|
||||
createdBy: 1,
|
||||
date_created: 1,
|
||||
@@ -2388,9 +2584,9 @@ export const shared_consts = {
|
||||
} else if (table === this.TABLES_MYBACHECAS) {
|
||||
proj = {
|
||||
recSkill: 1,
|
||||
sector: 1,
|
||||
idSector: 1,
|
||||
idSkill: 1,
|
||||
sectorBacheca: 1,
|
||||
idSectorBacheca: 1,
|
||||
idBacheca: 1,
|
||||
// 'idSubSkill': 1,
|
||||
idStatusSkill: 1,
|
||||
idContribType: 1,
|
||||
@@ -2672,5 +2868,5 @@ export const shared_consts = {
|
||||
FILETYPE: {
|
||||
IMG: 1,
|
||||
PDF: 2,
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
749
src/components/AIImageGenerator/AIImageGenerator.vue
Normal file
@@ -0,0 +1,749 @@
|
||||
<template>
|
||||
<q-card class="ai-generator-dialog">
|
||||
<!-- Header -->
|
||||
<q-card-section class="dialog-header">
|
||||
<div class="header-content">
|
||||
<q-icon name="auto_awesome" size="32px" color="amber" />
|
||||
<div>
|
||||
<h2>Genera Immagine con AI</h2>
|
||||
<p>{{ assetTypeLabel }}</p>
|
||||
</div>
|
||||
</div>
|
||||
<q-btn flat round icon="close" @click="$emit('close')" />
|
||||
</q-card-section>
|
||||
|
||||
<q-separator />
|
||||
|
||||
<!-- Content -->
|
||||
<q-card-section class="dialog-body">
|
||||
<div class="generator-layout">
|
||||
<!-- Left: Form -->
|
||||
<div class="form-panel">
|
||||
<!-- Provider Selection -->
|
||||
<div class="form-section">
|
||||
<label class="section-label">Provider AI</label>
|
||||
<div class="provider-options">
|
||||
<div
|
||||
v-for="provider in providers"
|
||||
:key="provider.value"
|
||||
class="provider-option"
|
||||
:class="{ 'is-selected': selectedProvider === provider.value }"
|
||||
@click="selectedProvider = provider.value"
|
||||
>
|
||||
<q-icon :name="provider.icon" size="24px" />
|
||||
<div class="provider-info">
|
||||
<span class="provider-name">{{ provider.label }}</span>
|
||||
<q-badge
|
||||
v-if="provider.free"
|
||||
color="green"
|
||||
text-color="white"
|
||||
label="Gratis"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Prompt -->
|
||||
<div class="form-section">
|
||||
<label class="section-label">
|
||||
Descrivi l'immagine
|
||||
<q-btn
|
||||
flat
|
||||
dense
|
||||
size="sm"
|
||||
icon="help_outline"
|
||||
@click="showPromptTips = true"
|
||||
>
|
||||
<q-tooltip>Suggerimenti per prompt efficaci</q-tooltip>
|
||||
</q-btn>
|
||||
</label>
|
||||
<q-input
|
||||
v-model="prompt"
|
||||
filled
|
||||
type="textarea"
|
||||
rows="4"
|
||||
placeholder="Descrivi l'immagine che vuoi generare..."
|
||||
counter
|
||||
maxlength="1000"
|
||||
/>
|
||||
|
||||
<!-- Quick prompts -->
|
||||
<div class="quick-prompts">
|
||||
<span class="quick-label">Suggerimenti rapidi:</span>
|
||||
<q-chip
|
||||
v-for="(suggestion, idx) in promptSuggestions"
|
||||
:key="idx"
|
||||
clickable
|
||||
size="sm"
|
||||
@click="appendToPrompt(suggestion)"
|
||||
>
|
||||
{{ suggestion }}
|
||||
</q-chip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Negative Prompt -->
|
||||
<div class="form-section">
|
||||
<label class="section-label">
|
||||
Prompt Negativo
|
||||
<span class="optional">(opzionale)</span>
|
||||
</label>
|
||||
<q-input
|
||||
v-model="negativePrompt"
|
||||
filled
|
||||
type="textarea"
|
||||
rows="2"
|
||||
placeholder="Cosa NON vuoi vedere nell'immagine..."
|
||||
/>
|
||||
<div class="negative-presets">
|
||||
<q-btn
|
||||
flat
|
||||
dense
|
||||
size="sm"
|
||||
label="Usa preset standard"
|
||||
@click="useStandardNegative"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Aspect Ratio -->
|
||||
<div class="form-section">
|
||||
<label class="section-label">Formato</label>
|
||||
<q-btn-toggle
|
||||
v-model="aspectRatio"
|
||||
:options="aspectRatioOptions"
|
||||
spread
|
||||
no-caps
|
||||
toggle-color="primary"
|
||||
class="full-width"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Advanced Options -->
|
||||
<q-expansion-item
|
||||
icon="tune"
|
||||
label="Opzioni Avanzate"
|
||||
header-class="advanced-header"
|
||||
>
|
||||
<div class="advanced-options">
|
||||
<div class="options-row">
|
||||
<q-input
|
||||
v-model.number="seed"
|
||||
type="number"
|
||||
filled
|
||||
dense
|
||||
label="Seed"
|
||||
hint="Lascia vuoto per casuale"
|
||||
/>
|
||||
<q-input
|
||||
v-model.number="steps"
|
||||
type="number"
|
||||
filled
|
||||
dense
|
||||
label="Steps"
|
||||
:min="10"
|
||||
:max="50"
|
||||
/>
|
||||
<q-input
|
||||
v-model.number="cfg"
|
||||
type="number"
|
||||
filled
|
||||
dense
|
||||
label="CFG Scale"
|
||||
:min="1"
|
||||
:max="20"
|
||||
step="0.5"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</q-expansion-item>
|
||||
|
||||
<!-- Generate Button -->
|
||||
<div class="generate-actions">
|
||||
<q-btn
|
||||
color="primary"
|
||||
icon="auto_awesome"
|
||||
label="Genera Immagine"
|
||||
size="lg"
|
||||
:loading="isGenerating"
|
||||
:disable="!prompt.trim()"
|
||||
class="full-width"
|
||||
@click="generateImage"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right: Preview -->
|
||||
<div class="preview-panel">
|
||||
<div class="preview-container" :class="{ 'has-image': !!generatedImage }">
|
||||
<template v-if="isGenerating">
|
||||
<div class="generating-state">
|
||||
<q-spinner-orbit size="80px" color="primary" />
|
||||
<p>Generazione in corso...</p>
|
||||
<span class="time-estimate">Tempo stimato: ~15-30 secondi</span>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-else-if="generatedImage">
|
||||
<img :src="generatedImage" alt="Generated image" class="preview-image" />
|
||||
<div class="preview-actions">
|
||||
<q-btn
|
||||
round
|
||||
color="white"
|
||||
text-color="primary"
|
||||
icon="refresh"
|
||||
@click="generateImage"
|
||||
>
|
||||
<q-tooltip>Rigenera</q-tooltip>
|
||||
</q-btn>
|
||||
<q-btn
|
||||
round
|
||||
color="green"
|
||||
icon="check"
|
||||
@click="confirmImage"
|
||||
>
|
||||
<q-tooltip>Usa questa immagine</q-tooltip>
|
||||
</q-btn>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template v-else>
|
||||
<div class="empty-preview">
|
||||
<q-icon name="image" size="80px" color="grey-4" />
|
||||
<p>L'immagine generata apparirà qui</p>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<!-- Generation History -->
|
||||
<div v-if="history.length > 0" class="generation-history">
|
||||
<h4>Generazioni recenti</h4>
|
||||
<div class="history-grid">
|
||||
<div
|
||||
v-for="(item, idx) in history"
|
||||
:key="idx"
|
||||
class="history-item"
|
||||
@click="selectFromHistory(item)"
|
||||
>
|
||||
<img :src="item.url" :alt="`Generation ${idx + 1}`" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-card-section>
|
||||
|
||||
<!-- Prompt Tips Dialog -->
|
||||
<q-dialog v-model="showPromptTips">
|
||||
<q-card style="max-width: 500px">
|
||||
<q-card-section>
|
||||
<div class="text-h6">💡 Suggerimenti per Prompt Efficaci</div>
|
||||
</q-card-section>
|
||||
<q-card-section>
|
||||
<ul class="tips-list">
|
||||
<li><strong>Sii specifico:</strong> Descrivi dettagli come colori, stile, atmosfera</li>
|
||||
<li><strong>Indica lo stile:</strong> "fotorealistico", "illustrazione", "acquerello"</li>
|
||||
<li><strong>Specifica la qualità:</strong> "high quality", "4k", "detailed"</li>
|
||||
<li><strong>Evita il testo:</strong> Aggiungi sempre "no text, no letters"</li>
|
||||
<li><strong>Composizione:</strong> Indica "central composition", "clean layout"</li>
|
||||
</ul>
|
||||
|
||||
<div class="example-prompt q-mt-md">
|
||||
<strong>Esempio:</strong>
|
||||
<p class="q-mt-sm">"Mystical autumn forest at golden hour, morning mist between oak trees, photorealistic, cinematic lighting, warm colors, high quality, no text, no letters"</p>
|
||||
</div>
|
||||
</q-card-section>
|
||||
<q-card-actions align="right">
|
||||
<q-btn flat label="Capito!" color="primary" v-close-popup />
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
</q-card>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { Api } from 'src/store/Api';
|
||||
import { PROVIDER_OPTIONS, ASPECT_RATIO_OPTIONS } from '../../types/poster.types';
|
||||
|
||||
const props = defineProps<{
|
||||
assetType: 'backgroundImage' | 'mainImage';
|
||||
template: any;
|
||||
initialPrompt?: string;
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(e: 'generated', result: { url: string; aiParams: any }): void;
|
||||
(e: 'close'): void;
|
||||
}>();
|
||||
|
||||
const $q = useQuasar();
|
||||
|
||||
// State
|
||||
const selectedProvider = ref('hf');
|
||||
const prompt = ref('');
|
||||
const negativePrompt = ref('');
|
||||
const aspectRatio = ref('9:16');
|
||||
const seed = ref<number | null>(null);
|
||||
const steps = ref(28);
|
||||
const cfg = ref(7.5);
|
||||
const isGenerating = ref(false);
|
||||
const generatedImage = ref<string | null>(null);
|
||||
const history = ref<{ url: string; prompt: string }[]>([]);
|
||||
const showPromptTips = ref(false);
|
||||
|
||||
// Computed
|
||||
const assetTypeLabel = computed(() => {
|
||||
return props.assetType === 'backgroundImage' ? 'Immagine di sfondo' : 'Immagine principale';
|
||||
});
|
||||
|
||||
const providers = computed(() => PROVIDER_OPTIONS);
|
||||
|
||||
const aspectRatioOptions = computed(() =>
|
||||
ASPECT_RATIO_OPTIONS.map(opt => ({
|
||||
label: opt.label,
|
||||
value: opt.value
|
||||
}))
|
||||
);
|
||||
|
||||
const promptSuggestions = computed(() => {
|
||||
const suggestions = [
|
||||
'high quality, 4k',
|
||||
'cinematic lighting',
|
||||
'no text, no letters',
|
||||
'photorealistic',
|
||||
'warm colors',
|
||||
'dramatic atmosphere'
|
||||
];
|
||||
|
||||
// Add template-specific suggestions
|
||||
if (props.template?.defaultAiPromptHints?.[props.assetType]) {
|
||||
const hint = props.template.defaultAiPromptHints[props.assetType];
|
||||
const words = hint.split(',').slice(0, 3).map((w: string) => w.trim());
|
||||
return [...words, ...suggestions.slice(0, 3)];
|
||||
}
|
||||
|
||||
return suggestions;
|
||||
});
|
||||
|
||||
// Methods
|
||||
const appendToPrompt = (text: string) => {
|
||||
if (prompt.value) {
|
||||
prompt.value += ', ' + text;
|
||||
} else {
|
||||
prompt.value = text;
|
||||
}
|
||||
};
|
||||
|
||||
const useStandardNegative = () => {
|
||||
negativePrompt.value = 'text, letters, words, watermark, signature, blurry, low quality, distorted, ugly, bad anatomy, disfigured';
|
||||
};
|
||||
|
||||
const generateImage = async () => {
|
||||
if (!prompt.value.trim()) {
|
||||
$q.notify({
|
||||
type: 'warning',
|
||||
message: 'Inserisci una descrizione per l\'immagine'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
isGenerating.value = true;
|
||||
generatedImage.value = null;
|
||||
|
||||
try {
|
||||
const res = await Api.SendReq('/api/assets/generate-ai', 'POST', {
|
||||
prompt: prompt.value,
|
||||
negativePrompt: negativePrompt.value,
|
||||
provider: selectedProvider.value,
|
||||
aspectRatio: aspectRatio.value,
|
||||
category: props.assetType === 'backgroundImage' ? 'background' : 'main',
|
||||
seed: seed.value,
|
||||
steps: steps.value,
|
||||
cfg: cfg.value
|
||||
});
|
||||
|
||||
if (res?.data?.success) {
|
||||
generatedImage.value = res.data.data.file.url;
|
||||
|
||||
// Add to history
|
||||
history.value.unshift({
|
||||
url: res.data.data.file.url,
|
||||
prompt: prompt.value
|
||||
});
|
||||
|
||||
// Keep only last 6
|
||||
if (history.value.length > 6) {
|
||||
history.value = history.value.slice(0, 6);
|
||||
}
|
||||
|
||||
$q.notify({
|
||||
type: 'positive',
|
||||
message: 'Immagine generata con successo!',
|
||||
icon: 'auto_awesome'
|
||||
});
|
||||
} else {
|
||||
throw new Error(res?.data?.error || 'Errore durante la generazione');
|
||||
}
|
||||
} catch (error: any) {
|
||||
$q.notify({
|
||||
type: 'negative',
|
||||
message: error.message || 'Errore durante la generazione',
|
||||
icon: 'error'
|
||||
});
|
||||
} finally {
|
||||
isGenerating.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const confirmImage = () => {
|
||||
if (!generatedImage.value) return;
|
||||
|
||||
emit('generated', {
|
||||
url: generatedImage.value,
|
||||
aiParams: {
|
||||
prompt: prompt.value,
|
||||
negativePrompt: negativePrompt.value,
|
||||
provider: selectedProvider.value,
|
||||
aspectRatio: aspectRatio.value,
|
||||
seed: seed.value,
|
||||
steps: steps.value,
|
||||
cfg: cfg.value
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const selectFromHistory = (item: { url: string; prompt: string }) => {
|
||||
generatedImage.value = item.url;
|
||||
prompt.value = item.prompt;
|
||||
};
|
||||
|
||||
// Initialize with hint
|
||||
onMounted(() => {
|
||||
if (props.initialPrompt) {
|
||||
prompt.value = props.initialPrompt;
|
||||
}
|
||||
useStandardNegative();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.ai-generator-dialog {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.dialog-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 1rem 1.5rem;
|
||||
|
||||
.header-content {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
|
||||
h2 {
|
||||
margin: 0;
|
||||
font-size: 1.3rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
font-size: 0.85rem;
|
||||
color: #888;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dialog-body {
|
||||
flex: 1;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.generator-layout {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
height: 100%;
|
||||
|
||||
@media (max-width: 900px) {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
// Form Panel
|
||||
.form-panel {
|
||||
padding: 1.5rem;
|
||||
overflow-y: auto;
|
||||
border-right: 1px solid #e0e0e0;
|
||||
}
|
||||
|
||||
.form-section {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
|
||||
.section-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
color: #555;
|
||||
margin-bottom: 0.5rem;
|
||||
|
||||
.optional {
|
||||
font-weight: 400;
|
||||
color: #999;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
// Provider Options
|
||||
.provider-options {
|
||||
display: flex;
|
||||
gap: 0.75rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.provider-option {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.75rem;
|
||||
padding: 0.75rem 1rem;
|
||||
border: 2px solid #e0e0e0;
|
||||
border-radius: 12px;
|
||||
cursor: pointer;
|
||||
transition: all 0.2s;
|
||||
flex: 1;
|
||||
min-width: 140px;
|
||||
|
||||
&:hover {
|
||||
border-color: #667eea;
|
||||
background: rgba(102, 126, 234, 0.05);
|
||||
}
|
||||
|
||||
&.is-selected {
|
||||
border-color: #667eea;
|
||||
background: rgba(102, 126, 234, 0.1);
|
||||
}
|
||||
|
||||
.provider-info {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
.provider-name {
|
||||
font-weight: 500;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
// Quick Prompts
|
||||
.quick-prompts {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
margin-top: 0.75rem;
|
||||
|
||||
.quick-label {
|
||||
font-size: 0.8rem;
|
||||
color: #888;
|
||||
}
|
||||
}
|
||||
|
||||
.negative-presets {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
.advanced-header {
|
||||
background: #fafafa;
|
||||
}
|
||||
|
||||
.advanced-options {
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
.options-row {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 0.75rem;
|
||||
}
|
||||
|
||||
.generate-actions {
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.full-width {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
// Preview Panel
|
||||
.preview-panel {
|
||||
padding: 1.5rem;
|
||||
background: #f5f5f5;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.preview-container {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: white;
|
||||
border-radius: 16px;
|
||||
overflow: hidden;
|
||||
min-height: 400px;
|
||||
position: relative;
|
||||
|
||||
&.has-image {
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.generating-state,
|
||||
.empty-preview {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
color: #888;
|
||||
|
||||
p {
|
||||
margin: 1rem 0 0.5rem;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.time-estimate {
|
||||
font-size: 0.85rem;
|
||||
color: #aaa;
|
||||
}
|
||||
}
|
||||
|
||||
.preview-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.preview-actions {
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
display: flex;
|
||||
gap: 1rem;
|
||||
padding: 0.75rem 1.5rem;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
border-radius: 30px;
|
||||
}
|
||||
|
||||
// History
|
||||
.generation-history {
|
||||
margin-top: 1.5rem;
|
||||
|
||||
h4 {
|
||||
margin: 0 0 0.75rem;
|
||||
font-size: 0.9rem;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
.history-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(6, 1fr);
|
||||
gap: 0.5rem;
|
||||
|
||||
@media (max-width: 600px) {
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
}
|
||||
}
|
||||
|
||||
.history-item {
|
||||
aspect-ratio: 1;
|
||||
border-radius: 8px;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
opacity: 0.7;
|
||||
transition: all 0.2s;
|
||||
|
||||
&:hover {
|
||||
opacity: 1;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
}
|
||||
|
||||
// Tips Dialog
|
||||
.tips-list {
|
||||
margin: 0;
|
||||
padding-left: 1.25rem;
|
||||
|
||||
li {
|
||||
margin-bottom: 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
.example-prompt {
|
||||
background: #f5f5f5;
|
||||
padding: 1rem;
|
||||
border-radius: 8px;
|
||||
|
||||
p {
|
||||
margin: 0;
|
||||
font-style: italic;
|
||||
color: #666;
|
||||
}
|
||||
}
|
||||
|
||||
// Dark mode
|
||||
.body--dark {
|
||||
.form-panel {
|
||||
border-color: #404040;
|
||||
}
|
||||
|
||||
.provider-option {
|
||||
border-color: #444;
|
||||
|
||||
&:hover,
|
||||
&.is-selected {
|
||||
border-color: #667eea;
|
||||
background: rgba(102, 126, 234, 0.15);
|
||||
}
|
||||
}
|
||||
|
||||
.preview-panel {
|
||||
background: #252525;
|
||||
}
|
||||
|
||||
.preview-container {
|
||||
background: #333;
|
||||
}
|
||||
|
||||
.advanced-header {
|
||||
background: #333;
|
||||
}
|
||||
|
||||
.example-prompt {
|
||||
background: #333;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -3,7 +3,7 @@ import { useI18n } from 'vue-i18n'
|
||||
|
||||
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 { useGlobalStore } from '@store/globalStore'
|
||||
|
||||
@@ -5,9 +5,9 @@ import { useUserStore } from '@store/UserStore'
|
||||
import { useQuasar } from 'quasar'
|
||||
import type { IAccomodation} from 'model';
|
||||
import { IGallery, IImgGallery } from 'model'
|
||||
import { CMyPage } from '@src/components/CMyPage'
|
||||
import { CMyPage } from '@/components/CMyPage'
|
||||
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 { costanti } from '@costanti'
|
||||
import { CMySelect } from '../CMySelect'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
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 { useI18n } from 'vue-i18n'
|
||||
|
||||
@@ -5,7 +5,7 @@ import { tools } from '../../store/Modules/tools'
|
||||
|
||||
import { fieldsTable } from '@store/Modules/fieldsTable'
|
||||
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
|
||||
import type {
|
||||
ISearchList
|
||||
@@ -35,11 +35,11 @@ import { useUserStore } from '@store/UserStore'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useQuasar, exportFile } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
import translate from '@src/globalroutines/util'
|
||||
import translate from '@/globalroutines/util'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { CMyCardPopup } from '@src/components/CMyCardPopup'
|
||||
import { CMyCardGrpPopup } from '@src/components/CMyCardGrpPopup'
|
||||
import { CMyCardCircuitPopup } from '@src/components/CMyCardCircuitPopup'
|
||||
import { CMyCardPopup } from '@/components/CMyCardPopup'
|
||||
import { CMyCardGrpPopup } from '@/components/CMyCardGrpPopup'
|
||||
import { CMyCardCircuitPopup } from '@/components/CMyCardCircuitPopup'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { table } from 'console'
|
||||
import { globals } from 'jest.config'
|
||||
@@ -256,7 +256,11 @@ export default defineComponent({
|
||||
if (recSector) {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,42 +1,188 @@
|
||||
.text-cls{
|
||||
font-weight: bold;
|
||||
// Spacing ridotto
|
||||
$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 {
|
||||
font-size: 1rem;
|
||||
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;
|
||||
|
||||
// Bottoni moderni
|
||||
.modern-bigbtn {
|
||||
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 {
|
||||
min-width: 112px;
|
||||
min-height: 112px;
|
||||
|
||||
.modern-smallbtn {
|
||||
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 {
|
||||
min-width: 110px;
|
||||
width: 100%;
|
||||
}
|
||||
// Responsive adjustments
|
||||
@media (max-width: 599px) {
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,27 +1,63 @@
|
||||
<template>
|
||||
<div v-if="numcol === 3" class="col-xs-4 col-sm-4 col-md-3 col-lg-2">
|
||||
<div class="q-ma-sm">
|
||||
<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)">
|
||||
<q-icon class="q-ma-sm" :name="icon"/>
|
||||
<div class="q-ma-sm my-text_3 text-cls no-wrap"><span v-html="label"></span></div>
|
||||
</q-btn>
|
||||
<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)">
|
||||
<q-icon class="q-ma-sm" :name="icon" size="sm"/>
|
||||
<div class="q-ma-xs my-text-small text-cls no-wrap"><span v-html="label"></span></div>
|
||||
</q-btn>
|
||||
</div>
|
||||
<div v-if="numcol === 3" class="modern-btn-wrapper modern-btn-col-3">
|
||||
<q-btn
|
||||
v-if="!small"
|
||||
:flat="flat"
|
||||
class="modern-bigbtn"
|
||||
:color="color"
|
||||
rounded
|
||||
push
|
||||
:to="tools.updateLink(to)"
|
||||
v-bind="$attrs"
|
||||
: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 v-else class="col-xs-6 col-sm-6 col-md-4 col-lg-3">
|
||||
<div class="q-ma-sm">
|
||||
<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)">
|
||||
<q-icon class="q-ma-sm" size="3rem" :name="icon"/>
|
||||
<div class="q-ma-sm text-h5-diff text-cls no-wrap"><span v-html="label"></span></div>
|
||||
</q-btn>
|
||||
<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)">
|
||||
<q-icon class="q-ma-sm" :name="icon" size="sm"/>
|
||||
<div class="q-ma-xs my-text-small text-cls no-wrap"><span v-html="label"></span></div>
|
||||
</q-btn>
|
||||
</div>
|
||||
<div v-else class="modern-btn-wrapper modern-btn-col-2">
|
||||
<q-btn
|
||||
v-if="!small"
|
||||
:flat="flat"
|
||||
class="modern-bigbtn"
|
||||
:color="color"
|
||||
rounded
|
||||
push
|
||||
:to="tools.updateLink(to)"
|
||||
v-bind="$attrs"
|
||||
: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>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -6,9 +6,9 @@ import { IOperators, ISize } from 'model'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
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({
|
||||
name: 'CBorders',
|
||||
|
||||
@@ -2,9 +2,9 @@ import { ref, computed, defineComponent, onMounted } from 'vue';
|
||||
import { useQuasar } from 'quasar';
|
||||
|
||||
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({
|
||||
name: 'ElementComponent',
|
||||
|
||||
@@ -6,7 +6,7 @@ import type { IDiscipline, IEvents } from 'model'
|
||||
|
||||
import { useCalendarStore } from '@store/CalendarStore'
|
||||
|
||||
import { CMyTeacher } from '@src/components/CMyTeacher'
|
||||
import { CMyTeacher } from '@/components/CMyTeacher'
|
||||
|
||||
// @ts-ignore
|
||||
import MixinOperator from '../../mixins/mixin-operator'
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { CCard } from '@src/components/CCard'
|
||||
import { CCard } from '@/components/CCard'
|
||||
import MixinOperator from '../../mixins/mixin-operator'
|
||||
import { defineComponent, ref } from 'vue'
|
||||
|
||||
|
||||
@@ -8,14 +8,14 @@ import { useI18n } from 'vue-i18n';
|
||||
import { toolsext } from '@store/Modules/toolsext';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { costanti } from '@costanti';
|
||||
import type { ICart, IOrder, IOrderCart, IProduct } from '@src/model/Products';
|
||||
import { IShareWithUs } from '@src/model/Products';
|
||||
import type { ICart, IOrder, IOrderCart, IProduct } from '@/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 { CTitleBanner } from '@src/components/CTitleBanner';
|
||||
import { CSelectUserActive } from '@src/components/CSelectUserActive';
|
||||
import { CTitleBanner } from '@/components/CTitleBanner';
|
||||
import { CSelectUserActive } from '@/components/CSelectUserActive';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CCart',
|
||||
|
||||
@@ -12,13 +12,13 @@ import {
|
||||
} from 'vue';
|
||||
|
||||
import { tools } from '@tools';
|
||||
import { CMyFieldDb } from '@src/components/CMyFieldDb';
|
||||
import { CMyFieldDb } from '@/components/CMyFieldDb';
|
||||
import { costanti } from '@costanti';
|
||||
import { useGlobalStore } from '@store/globalStore';
|
||||
import { useUserStore } from '@store/UserStore';
|
||||
|
||||
import { CTitlePage } from '@src/components/CTitlePage';
|
||||
import { CGridTableRec } from '@src/components/CGridTableRec';
|
||||
import { CTitlePage } from '@/components/CTitlePage';
|
||||
import { CGridTableRec } from '@/components/CGridTableRec';
|
||||
import type { ICatalog, IColGridTable, INewCatalog, ISearchList } from 'model';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { toolsext } from '@store/Modules/toolsext';
|
||||
|
||||
@@ -107,6 +107,13 @@
|
||||
/>
|
||||
|
||||
<div class="row justify-center">
|
||||
<q-btn
|
||||
label="Annulla"
|
||||
v-close-popup
|
||||
color="primary"
|
||||
flat
|
||||
class="q-ml-sm"
|
||||
/>
|
||||
<q-btn
|
||||
label="Aggiungi"
|
||||
type="submit"
|
||||
@@ -120,13 +127,6 @@
|
||||
"
|
||||
color="primary"
|
||||
/>
|
||||
<q-btn
|
||||
label="Annulla"
|
||||
v-close-popup
|
||||
color="primary"
|
||||
flat
|
||||
class="q-ml-sm"
|
||||
/>
|
||||
</div>
|
||||
</q-form>
|
||||
</q-card-section>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import type { PropType} from 'vue';
|
||||
import { defineComponent, ref, watch } from 'vue'
|
||||
|
||||
import { Catalogo } from '@src/views/ecommerce/catalogo'
|
||||
import type { IOptCatalogo } from '@src/model'
|
||||
import { Catalogo } from '@/views/ecommerce/catalogo'
|
||||
import type { IOptCatalogo } from '@/model'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CCatalogo',
|
||||
|
||||
@@ -21,9 +21,9 @@ import { CViewTable } from '../CViewTable';
|
||||
import { CMyValueDb } from '../CMyValueDb';
|
||||
import { CPrice } from '../CPrice';
|
||||
import { CText } from '../CText';
|
||||
import { CLabel } from '@src/components/CLabel';
|
||||
import { CSchedaProdotto } from '@src/components/CSchedaProdotto';
|
||||
import { CModifTrafiletto } from '@src/components/CModifTrafiletto';
|
||||
import { CLabel } from '@/components/CLabel';
|
||||
import { CSchedaProdotto } from '@/components/CSchedaProdotto';
|
||||
import { CModifTrafiletto } from '@/components/CModifTrafiletto';
|
||||
|
||||
import { CBarCode } from '../CBarCode';
|
||||
import { CTableCupleLabelValue } from '../CTableCupleLabelValue';
|
||||
@@ -40,12 +40,12 @@ import type {
|
||||
IVariazione,
|
||||
IRecFields,
|
||||
ICatalog,
|
||||
} from '@src/model';
|
||||
import { IBaseOrder } from '@src/model';
|
||||
} from '@/model';
|
||||
import { IBaseOrder } from '@/model';
|
||||
import { tools } from '@tools';
|
||||
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 { costanti } from '@costanti';
|
||||
|
||||
@@ -5,8 +5,8 @@ import { useGlobalStore } from '@store/globalStore'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { tools } from '@tools'
|
||||
import { costanti } from '@store/Modules/costanti'
|
||||
import { static_data } from '@src/db/static_data'
|
||||
import { CRegistration } from '@src/components/CRegistration'
|
||||
import { static_data } from '@/db/static_data'
|
||||
import { CRegistration } from '@/components/CRegistration'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CCheckIfIsLogged',
|
||||
|
||||
@@ -13,15 +13,15 @@
|
||||
<div class="card-icon-wrapper">
|
||||
<q-icon name="fas fa-sign-in-alt" size="48px" class="card-icon" />
|
||||
</div>
|
||||
|
||||
|
||||
<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">
|
||||
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>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="card-actions">
|
||||
<q-btn
|
||||
unelevated
|
||||
@@ -47,7 +47,7 @@
|
||||
<span class="telegram-subtitle">Unisciti al gruppo Provinciale</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<q-btn
|
||||
rounded
|
||||
unelevated
|
||||
@@ -71,7 +71,7 @@
|
||||
<span class="help-subtitle">Consulta la guida completa</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<q-btn
|
||||
rounded
|
||||
unelevated
|
||||
|
||||
@@ -6,9 +6,9 @@ import { useGlobalStore } from '@store/globalStore'
|
||||
import type { PropType} from 'vue';
|
||||
import { defineComponent, computed, ref } from 'vue'
|
||||
import type { IUserFields } from 'model'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
import { CLabel } from '@src/components/CLabel'
|
||||
import { CSendCoins } from '@src/components/CSendCoins'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
import { CLabel } from '@/components/CLabel'
|
||||
import { CSendCoins } from '@/components/CSendCoins'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CContactUser',
|
||||
@@ -31,6 +31,11 @@ export default defineComponent({
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
circuitSel: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
causalDest: {
|
||||
type: String,
|
||||
required: false,
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
:to_user="myuser"
|
||||
:sendRIS="sendRIS"
|
||||
:causalDest="causalDest"
|
||||
:circuitname="circuitSel"
|
||||
@close="
|
||||
showsendCoinTo = false;
|
||||
loading = false;
|
||||
|
||||
@@ -12,11 +12,11 @@ import { func_tools, toolsext } from '@store/Modules/toolsext'
|
||||
import { tools } from '@tools'
|
||||
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 { costanti } from '@costanti'
|
||||
import type { IOptCatalogo, IMyScheda, IProduct, ICatalog } from '@src/model'
|
||||
import type { IOptCatalogo, IMyScheda, IProduct, ICatalog } from '@/model'
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,9 +1,215 @@
|
||||
.my-custom-container {
|
||||
max-width: 100%; /* Imposta la larghezza massima per il contenitore */
|
||||
// Variables
|
||||
$border-radius-sm: 8px;
|
||||
$border-radius-md: 12px;
|
||||
$transition-fast: 0.2s ease;
|
||||
|
||||
.copy-share-container {
|
||||
width: 100%;
|
||||
|
||||
&.small-variant {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
&.btn-only {
|
||||
display: inline-flex;
|
||||
}
|
||||
}
|
||||
|
||||
.wrapword {
|
||||
overflow: hidden; /* Nasconde il contenuto in eccesso */
|
||||
white-space: nowrap; /* Impedisce il wrapping del testo */
|
||||
text-overflow: ellipsis; /* Mostra "..." se il testo è troppo lungo */
|
||||
// ═══════════════════════════════════════════
|
||||
// Link Display Wrapper
|
||||
// ═══════════════════════════════════════════
|
||||
.link-display-wrapper {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
gap: 12px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
// Link Preview Box
|
||||
.link-preview-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 10px 12px;
|
||||
background: #f8fafc;
|
||||
border: 1.5px solid #e2e8f0;
|
||||
border-radius: $border-radius-sm;
|
||||
transition: all $transition-fast;
|
||||
|
||||
&:hover {
|
||||
border-color: #cbd5e1;
|
||||
background: #f1f5f9;
|
||||
}
|
||||
|
||||
&.compact {
|
||||
padding: 8px 10px;
|
||||
}
|
||||
|
||||
.link-icon {
|
||||
flex-shrink: 0;
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.link-text {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
color: #475569;
|
||||
font-size: 13px;
|
||||
font-family: 'SF Mono', 'Monaco', 'Consolas', monospace;
|
||||
}
|
||||
|
||||
.copy-icon-btn {
|
||||
flex-shrink: 0;
|
||||
transition: all $transition-fast;
|
||||
|
||||
&:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// Action Buttons
|
||||
// ═══════════════════════════════════════════
|
||||
.action-buttons {
|
||||
display: flex;
|
||||
gap: 10px;
|
||||
justify-content: center;
|
||||
flex-wrap: wrap;
|
||||
|
||||
&.compact {
|
||||
gap: 8px;
|
||||
|
||||
.q-btn {
|
||||
min-width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.share-btn,
|
||||
.whatsapp-btn,
|
||||
.telegram-btn {
|
||||
flex: 1;
|
||||
max-width: 160px;
|
||||
text-transform: none;
|
||||
font-weight: 600;
|
||||
font-size: 13px;
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
}
|
||||
|
||||
.whatsapp-btn {
|
||||
&:not(.q-btn--flat) {
|
||||
background: linear-gradient(135deg, #25d366 0%, #128c7e 100%) !important;
|
||||
border: none !important;
|
||||
color: white !important;
|
||||
}
|
||||
}
|
||||
|
||||
.telegram-btn {
|
||||
&:not(.q-btn--flat) {
|
||||
background: linear-gradient(135deg, #0088cc 0%, #0077b5 100%) !important;
|
||||
border: none !important;
|
||||
color: white !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// Default Layout
|
||||
// ═══════════════════════════════════════════
|
||||
.default-layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
width: 100%;
|
||||
|
||||
.text-preview {
|
||||
text-align: center;
|
||||
color: #64748b;
|
||||
font-size: 14px;
|
||||
word-break: break-all;
|
||||
padding: 0 8px;
|
||||
|
||||
&.small {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.share-main-btn {
|
||||
text-transform: none;
|
||||
font-weight: 600;
|
||||
padding: 10px 24px;
|
||||
box-shadow: 0 2px 8px rgba(102, 126, 234, 0.25);
|
||||
transition: all $transition-fast;
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.35);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// Copied State Animation
|
||||
// ═══════════════════════════════════════════
|
||||
.copied-state {
|
||||
animation: pulse-success 0.3s ease;
|
||||
}
|
||||
|
||||
@keyframes pulse-success {
|
||||
0% {
|
||||
transform: scale(1);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// Dark Mode
|
||||
// ═══════════════════════════════════════════
|
||||
.body--dark {
|
||||
.link-preview-box {
|
||||
background: #1e293b;
|
||||
border-color: #334155;
|
||||
|
||||
&:hover {
|
||||
border-color: #475569;
|
||||
background: #273449;
|
||||
}
|
||||
|
||||
.link-text {
|
||||
color: #cbd5e1;
|
||||
}
|
||||
}
|
||||
|
||||
.text-preview {
|
||||
color: #94a3b8;
|
||||
}
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════
|
||||
// Responsive
|
||||
// ═══════════════════════════════════════════
|
||||
@media (max-width: 400px) {
|
||||
.action-buttons:not(.compact) {
|
||||
flex-direction: column;
|
||||
|
||||
.share-btn,
|
||||
.whatsapp-btn,
|
||||
.telegram-btn {
|
||||
max-width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,55 +1,208 @@
|
||||
import { tools } from '../../store/Modules/tools'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { defineComponent } from 'vue'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
import { defineComponent, ref, computed } from 'vue'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CCopyBtnSmall',
|
||||
props: {
|
||||
// Testo/link da copiare
|
||||
texttocopy: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
// Titolo per la condivisione
|
||||
title: {
|
||||
type: String,
|
||||
required: false,
|
||||
default: 'Condividi questo link',
|
||||
},
|
||||
// Messaggio personalizzato per la condivisione
|
||||
shareMessage: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
// Lunghezza massima del testo visualizzato
|
||||
maxLength: {
|
||||
type: Number,
|
||||
default: 400,
|
||||
},
|
||||
// Dimensione compatta
|
||||
small: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false,
|
||||
}
|
||||
},
|
||||
// Mostra solo il pulsante (senza link preview)
|
||||
btn: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// Mostra solo icona (senza label)
|
||||
iconOnly: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// Stile flat
|
||||
flat: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// Stile outline
|
||||
outline: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// Colore del pulsante
|
||||
btnColor: {
|
||||
type: String,
|
||||
default: 'primary',
|
||||
},
|
||||
// Label personalizzata
|
||||
label: {
|
||||
type: String,
|
||||
default: 'Copia link',
|
||||
},
|
||||
// Mostra il link preview
|
||||
showLink: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
// Mostra i pulsanti di azione
|
||||
showActions: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
// Mostra pulsante Share nativo
|
||||
showShareBtn: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
// Mostra pulsante WhatsApp
|
||||
showWhatsApp: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
// Mostra pulsante Telegram
|
||||
showTelegram: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
components: {},
|
||||
setup(props) {
|
||||
|
||||
emits: ['copied', 'shared'],
|
||||
|
||||
setup(props, { emit }) {
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
|
||||
async function copytoclipandsend() {
|
||||
tools.copyStringToClipboard($q, props.texttocopy, true)
|
||||
// State
|
||||
const copied = ref(false)
|
||||
let copyTimeout: ReturnType<typeof setTimeout> | null = null
|
||||
|
||||
let msg = 'Questo è il link che puoi condividere per farti inviare i RIS:<br><br>👉🏻 ' + props.texttocopy
|
||||
// Computed
|
||||
const truncatedText = computed(() => {
|
||||
if (!props.texttocopy) return ''
|
||||
if (props.texttocopy.length <= props.maxLength) return props.texttocopy
|
||||
return props.texttocopy.substring(0, props.maxLength) + '...'
|
||||
})
|
||||
|
||||
tools.sendMsgTelegramCmd($q, t, shared_consts.MsgTeleg.SHARE_TEXT, false, msg)
|
||||
const containerClasses = computed(() => ({
|
||||
'small-variant': props.small,
|
||||
'btn-only': props.btn && !props.showLink,
|
||||
}))
|
||||
|
||||
}
|
||||
const shareText = computed(() => {
|
||||
if (props.shareMessage) return props.shareMessage
|
||||
return `${props.title}\n\n👉 ${props.texttocopy}`
|
||||
})
|
||||
|
||||
function getclass() {
|
||||
if (props.small) {
|
||||
return 'text-h7'
|
||||
} else {
|
||||
return 'text-h5'
|
||||
// Methods
|
||||
async function handleCopy() {
|
||||
try {
|
||||
await navigator.clipboard.writeText(props.texttocopy)
|
||||
|
||||
copied.value = true
|
||||
emit('copied', props.texttocopy)
|
||||
|
||||
$q.notify({
|
||||
type: 'positive',
|
||||
message: 'Link copiato negli appunti!',
|
||||
icon: 'check',
|
||||
timeout: 2000,
|
||||
position: 'bottom',
|
||||
})
|
||||
|
||||
// Reset stato dopo 2 secondi
|
||||
if (copyTimeout) clearTimeout(copyTimeout)
|
||||
copyTimeout = setTimeout(() => {
|
||||
copied.value = false
|
||||
}, 2000)
|
||||
|
||||
} catch (err) {
|
||||
// Fallback per browser più vecchi
|
||||
tools.copyStringToClipboard($q, props.texttocopy, true)
|
||||
copied.value = true
|
||||
|
||||
if (copyTimeout) clearTimeout(copyTimeout)
|
||||
copyTimeout = setTimeout(() => {
|
||||
copied.value = false
|
||||
}, 2000)
|
||||
}
|
||||
}
|
||||
|
||||
async function handleShare() {
|
||||
// Prima copia negli appunti
|
||||
await handleCopy()
|
||||
|
||||
// Prova Web Share API
|
||||
if (navigator.share) {
|
||||
try {
|
||||
await navigator.share({
|
||||
title: props.title,
|
||||
text: props.shareMessage || 'Ecco il link:',
|
||||
url: props.texttocopy,
|
||||
})
|
||||
emit('shared', 'native')
|
||||
} catch (err) {
|
||||
// L'utente ha annullato o errore
|
||||
console.log('Share cancelled or failed')
|
||||
}
|
||||
} else {
|
||||
// Fallback: usa Telegram come default
|
||||
handleTelegram()
|
||||
}
|
||||
}
|
||||
|
||||
function handleWhatsApp() {
|
||||
const text = encodeURIComponent(shareText.value)
|
||||
window.open(`https://wa.me/?text=${text}`, '_blank')
|
||||
emit('shared', 'whatsapp')
|
||||
}
|
||||
|
||||
function handleTelegram() {
|
||||
const msg = props.shareMessage ||
|
||||
`Questo è il link che puoi condividere:\n\n👉 ${props.texttocopy}`
|
||||
|
||||
tools.sendMsgTelegramCmd($q, t, shared_consts.MsgTeleg.SHARE_TEXT, false, msg)
|
||||
emit('shared', 'telegram')
|
||||
}
|
||||
|
||||
return {
|
||||
copytoclipandsend,
|
||||
// State
|
||||
copied,
|
||||
|
||||
// Computed
|
||||
truncatedText,
|
||||
containerClasses,
|
||||
|
||||
// Methods
|
||||
handleCopy,
|
||||
handleShare,
|
||||
handleWhatsApp,
|
||||
handleTelegram,
|
||||
|
||||
// Utils
|
||||
tools,
|
||||
getclass,
|
||||
t,
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1,11 +1,127 @@
|
||||
<template>
|
||||
<div class="" style="width: 100%; overflow: hidden;">
|
||||
<div class="row justify-center">
|
||||
{{ tools.firstchars(texttocopy, 80) }}
|
||||
</div>
|
||||
<div class="row justify-center q-mt-sm">
|
||||
<q-btn rounded label="Condividi link" color="primary" @click="copytoclipandsend" />
|
||||
</div>
|
||||
<div class="copy-share-container" :class="containerClasses">
|
||||
<!-- Variante: Solo pulsante -->
|
||||
<template v-if="btn && !showLink">
|
||||
<q-btn
|
||||
:size="small ? 'sm' : 'md'"
|
||||
:round="iconOnly"
|
||||
:rounded="!iconOnly"
|
||||
:flat="flat"
|
||||
:outline="outline"
|
||||
:unelevated="!flat && !outline"
|
||||
:color="btnColor"
|
||||
:icon="copied ? 'check' : 'content_copy'"
|
||||
:label="iconOnly ? undefined : (copied ? 'Copiato!' : label)"
|
||||
:class="{ 'copied-state': copied }"
|
||||
@click="handleCopy"
|
||||
>
|
||||
<q-tooltip v-if="iconOnly">{{ copied ? 'Copiato!' : 'Copia link' }}</q-tooltip>
|
||||
</q-btn>
|
||||
</template>
|
||||
|
||||
<!-- Variante: Link + Azioni -->
|
||||
<template v-else-if="showLink">
|
||||
<div class="link-display-wrapper">
|
||||
<!-- Link Preview -->
|
||||
<div class="link-preview-box" :class="{ 'compact': small }">
|
||||
<q-icon name="link" :size="small ? '18px' : '20px'" color="primary" class="link-icon" />
|
||||
<span class="link-text" :title="texttocopy">
|
||||
{{ truncatedText }}
|
||||
</span>
|
||||
<q-btn
|
||||
flat
|
||||
round
|
||||
dense
|
||||
:size="small ? 'sm' : 'md'"
|
||||
:icon="copied ? 'check' : 'content_copy'"
|
||||
:color="copied ? 'positive' : 'grey-7'"
|
||||
class="copy-icon-btn"
|
||||
@click="handleCopy"
|
||||
>
|
||||
<q-tooltip>{{ copied ? 'Copiato!' : 'Copia' }}</q-tooltip>
|
||||
</q-btn>
|
||||
</div>
|
||||
|
||||
<!-- Action Buttons -->
|
||||
<div v-if="showActions" class="action-buttons" :class="{ 'compact': small }">
|
||||
<q-btn
|
||||
v-if="showShareBtn"
|
||||
:outline="!small"
|
||||
:flat="small"
|
||||
:rounded="!small"
|
||||
:round="small"
|
||||
:size="small ? 'sm' : 'md'"
|
||||
color="primary"
|
||||
:icon="small ? 'share' : undefined"
|
||||
:label="small ? undefined : 'Condividi'"
|
||||
class="share-btn"
|
||||
@click="handleShare"
|
||||
>
|
||||
<template v-if="!small" v-slot:prepend>
|
||||
<q-icon name="share" />
|
||||
</template>
|
||||
<q-tooltip v-if="small">Condividi</q-tooltip>
|
||||
</q-btn>
|
||||
|
||||
<q-btn
|
||||
v-if="showWhatsApp"
|
||||
:outline="!small"
|
||||
:flat="small"
|
||||
:rounded="!small"
|
||||
:round="small"
|
||||
:size="small ? 'sm' : 'md'"
|
||||
color="green"
|
||||
:icon="small ? 'fab fa-whatsapp' : undefined"
|
||||
:label="small ? undefined : 'WhatsApp'"
|
||||
class="whatsapp-btn"
|
||||
@click="handleWhatsApp"
|
||||
>
|
||||
<template v-if="!small" v-slot:prepend>
|
||||
<q-icon name="fab fa-whatsapp" />
|
||||
</template>
|
||||
<q-tooltip v-if="small">WhatsApp</q-tooltip>
|
||||
</q-btn>
|
||||
|
||||
<q-btn
|
||||
v-if="showTelegram"
|
||||
:outline="!small"
|
||||
:flat="small"
|
||||
:rounded="!small"
|
||||
:round="small"
|
||||
:size="small ? 'sm' : 'md'"
|
||||
color="light-blue"
|
||||
:icon="small ? 'fab fa-telegram' : undefined"
|
||||
:label="small ? undefined : 'Telegram'"
|
||||
class="telegram-btn"
|
||||
@click="handleTelegram"
|
||||
>
|
||||
<template v-if="!small" v-slot:prepend>
|
||||
<q-icon name="fab fa-telegram" />
|
||||
</template>
|
||||
<q-tooltip v-if="small">Telegram</q-tooltip>
|
||||
</q-btn>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- Variante: Default (testo + bottone) -->
|
||||
<template v-else>
|
||||
<div class="default-layout">
|
||||
<div class="text-preview" :class="{ 'small': small }">
|
||||
{{ truncatedText }}
|
||||
</div>
|
||||
<q-btn
|
||||
rounded
|
||||
unelevated
|
||||
:size="small ? 'sm' : 'md'"
|
||||
:label="copied ? 'Copiato!' : 'Condividi link'"
|
||||
:color="copied ? 'positive' : 'primary'"
|
||||
:icon="copied ? 'check' : 'share'"
|
||||
class="share-main-btn"
|
||||
@click="handleShare"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
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 { useI18n } from 'vue-i18n'
|
||||
import { CCurrencyValue } from '@src/components/CCurrencyValue'
|
||||
import { CMyFieldDb } from '@src/components/CMyFieldDb'
|
||||
import { CCurrencyValue } from '@/components/CCurrencyValue'
|
||||
import { CMyFieldDb } from '@/components/CMyFieldDb'
|
||||
|
||||
|
||||
import { costanti } from '@costanti'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
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 { useI18n } from 'vue-i18n'
|
||||
|
||||
@@ -6,7 +6,7 @@ import { useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '../../store/globalStore'
|
||||
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 { costanti } from '@store/Modules/costanti'
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import { useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '../../store/globalStore'
|
||||
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 { costanti } from '@costanti'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
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'
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { defineComponent, ref, watch, computed } from 'vue';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { tools } from '@src/store/Modules/tools';
|
||||
import { tools } from '@/store/Modules/tools';
|
||||
import { toolsext } from '@store/Modules/toolsext';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { defineComponent, ref, watch, computed } from 'vue';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { tools } from '@src/store/Modules/tools';
|
||||
import { tools } from '@/store/Modules/tools';
|
||||
import { toolsext } from '@store/Modules/toolsext';
|
||||
|
||||
function toTS(s: string | null): number | null {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { defineComponent } from 'vue'
|
||||
|
||||
import { ProductsList } from '@src/views/ecommerce'
|
||||
import { ProductsList } from '@/views/ecommerce'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CECommerce',
|
||||
|
||||
@@ -5,6 +5,8 @@ $card-radius-mobile: 14px;
|
||||
$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);
|
||||
|
||||
$gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
||||
|
||||
.stat-card {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
@@ -15,7 +17,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
padding: 0;
|
||||
border-radius: $card-radius-desktop;
|
||||
background: linear-gradient(145deg, #ffffff 0%, #f8f9fa 100%);
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 10px 30px -5px rgba(0, 0, 0, 0.1),
|
||||
0 0 0 1px rgba(0, 0, 0, 0.02);
|
||||
transition: $transition-base;
|
||||
@@ -24,7 +26,7 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-6px) scale(1.02);
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 20px 40px -8px rgba(0, 0, 0, 0.15),
|
||||
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;
|
||||
border-radius: 50%;
|
||||
background: linear-gradient(145deg, #ffffff, #f5f5f5);
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 4px 12px rgba(0, 0, 0, 0.08),
|
||||
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 {
|
||||
font-size: 0.75rem;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.03em;
|
||||
line-height: 1.3;
|
||||
opacity: 0.85;
|
||||
text-transform: uppercase;
|
||||
margin: 4px 0;
|
||||
color: #424242;
|
||||
color: #718096;
|
||||
|
||||
@media (max-width: 960px) {
|
||||
font-size: 0.7rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
@media (max-width: 718px) {
|
||||
font-size: 0.65rem;
|
||||
font-size: 0.8rem;
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
@media (max-width: 480px) {
|
||||
font-size: 0.6rem;
|
||||
font-size: 0.8rem;
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
}
|
||||
@@ -195,11 +197,14 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
.stat-value {
|
||||
font-size: 1.5rem;
|
||||
font-weight: 700;
|
||||
line-height: 1.1;
|
||||
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) {
|
||||
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-weight: 600;
|
||||
color: white;
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 3px 8px rgba(0, 0, 0, 0.2),
|
||||
inset 0 1px 2px rgba(255, 255, 255, 0.2);
|
||||
backdrop-filter: blur(8px);
|
||||
@@ -276,12 +281,10 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
left: -50%;
|
||||
width: 200%;
|
||||
height: 200%;
|
||||
background: linear-gradient(
|
||||
45deg,
|
||||
transparent 30%,
|
||||
rgba(255, 255, 255, 0.4) 50%,
|
||||
transparent 70%
|
||||
);
|
||||
background: linear-gradient(45deg,
|
||||
transparent 30%,
|
||||
rgba(255, 255, 255, 0.4) 50%,
|
||||
transparent 70%);
|
||||
transform: translateX(-100%) translateY(-100%);
|
||||
transition: transform 0.8s ease;
|
||||
pointer-events: none;
|
||||
@@ -294,8 +297,8 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
border-radius: inherit;
|
||||
padding: 2px;
|
||||
background: linear-gradient(145deg, rgba(33, 150, 243, 0.3), rgba(156, 39, 176, 0.3));
|
||||
-webkit-mask:
|
||||
linear-gradient(#fff 0 0) content-box,
|
||||
-webkit-mask:
|
||||
linear-gradient(#fff 0 0) content-box,
|
||||
linear-gradient(#fff 0 0);
|
||||
-webkit-mask-composite: xor;
|
||||
mask-composite: exclude;
|
||||
@@ -307,10 +310,13 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
|
||||
// Animations
|
||||
@keyframes pulse {
|
||||
0%, 100% {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
opacity: 0.3;
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
50% {
|
||||
opacity: 0.5;
|
||||
transform: scale(1.05);
|
||||
@@ -318,9 +324,12 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
}
|
||||
|
||||
@keyframes bounce-subtle {
|
||||
0%, 100% {
|
||||
|
||||
0%,
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
50% {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
@@ -339,9 +348,11 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
opacity: 0;
|
||||
transform: scale(0.5) translateY(10px);
|
||||
}
|
||||
|
||||
60% {
|
||||
transform: scale(1.1) translateY(-2px);
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
transform: scale(1) translateY(0);
|
||||
@@ -398,12 +409,12 @@ $transition-base: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
.body--dark {
|
||||
.stat-card {
|
||||
background: linear-gradient(145deg, #1e1e1e 0%, #2a2a2a 100%);
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 10px 30px -5px rgba(0, 0, 0, 0.4),
|
||||
0 0 0 1px rgba(255, 255, 255, 0.05);
|
||||
|
||||
&:hover {
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 20px 40px -8px rgba(0, 0, 0, 0.5),
|
||||
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 {
|
||||
background: linear-gradient(145deg, #2a2a2a, #1e1e1e);
|
||||
box-shadow:
|
||||
box-shadow:
|
||||
0 4px 12px rgba(0, 0, 0, 0.3),
|
||||
inset 0 1px 2px rgba(255, 255, 255, 0.05);
|
||||
}
|
||||
|
||||
@@ -6,18 +6,16 @@
|
||||
<div :class="['stat-content', classColor]">
|
||||
<!-- Icon con effetto hover e glow -->
|
||||
<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
|
||||
:name="icon"
|
||||
:class="['stat-icon', classColor]"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<!-- Title -->
|
||||
<div class="stat-title">
|
||||
{{ title }}
|
||||
</div>
|
||||
|
||||
<!-- Value con tipografia gerarchica -->
|
||||
<div class="stat-value-container">
|
||||
<div class="stat-value">
|
||||
@@ -32,11 +30,19 @@
|
||||
:style="{ backgroundColor: colBack }"
|
||||
>
|
||||
<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>
|
||||
</div>
|
||||
</transition>
|
||||
</div>
|
||||
<!-- Title -->
|
||||
<div class="stat-title">
|
||||
{{ title }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Decorative elements -->
|
||||
@@ -45,9 +51,8 @@
|
||||
</q-card>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CElemStat.ts">
|
||||
</script>
|
||||
<script lang="ts" src="./CElemStat.ts"></script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import "./CElemStat.scss";
|
||||
@import './CElemStat.scss';
|
||||
</style>
|
||||
|
||||
@@ -12,10 +12,10 @@ import { LandingFooter } from '../LandingFooter'
|
||||
import { CTitle } from '../CTitle'
|
||||
import { CImgText } from '../CImgText'
|
||||
import { CMyEditor } from '../CMyEditor'
|
||||
import { CDateTime } from '@src/components/CDateTime'
|
||||
import { CDateTime } from '@/components/CDateTime'
|
||||
import { CMyAvatar } from '../CMyAvatar'
|
||||
import { CMySingleEvent } from '@src/components/CMySingleEvent'
|
||||
import { CMyTeacher } from '@src/components/CMyTeacher'
|
||||
import { CMySingleEvent } from '@/components/CMySingleEvent'
|
||||
import { CMyTeacher } from '@/components/CMyTeacher'
|
||||
import { CMySelect } from '../CMySelect'
|
||||
import { tools } from '@tools'
|
||||
import { costanti } from '@costanti'
|
||||
@@ -26,10 +26,10 @@ import MixinEvents from '../../mixins/mixin-events'
|
||||
import { useCalendarStore } from '@store/CalendarStore'
|
||||
import { func_tools, toolsext } from '@store/Modules/toolsext'
|
||||
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 translate from '@src/globalroutines/util'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
import translate from '@/globalroutines/util'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CEventsCalendar',
|
||||
|
||||
@@ -10,24 +10,48 @@
|
||||
</div>-->
|
||||
<div>
|
||||
<!-- display an myevent -->
|
||||
<q-dialog v-model="displayEvent" :maximized="$q.screen.lt.sm">
|
||||
<q-card v-if="myevent" class="dialog_card">
|
||||
<q-dialog
|
||||
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="tools.displayClasses(myevent)"-->
|
||||
<!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">-->
|
||||
<q-toolbar-title>
|
||||
{{ t('cal.event') }}
|
||||
</q-toolbar-title>
|
||||
<q-btn v-if="editable" flat round color="white" icon="fas fa-copy">
|
||||
<q-menu transition-show="flip-right" transition-hide="flip-left">
|
||||
<q-btn
|
||||
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-item clickable @click="duplicateEvent(myevent, 7)">
|
||||
<q-item
|
||||
clickable
|
||||
@click="duplicateEvent(myevent, 7)"
|
||||
>
|
||||
<q-item-section>Tra 1 Settimana</q-item-section>
|
||||
</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>
|
||||
<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>
|
||||
</q-list>
|
||||
@@ -86,7 +110,10 @@
|
||||
:class="`cal__details` + ($q.dark.isActive ? `_darktheme` : ``)"
|
||||
v-html="myevent.details"
|
||||
></div>
|
||||
<div v-if="myevent.teacher" class="cal__teacher">
|
||||
<div
|
||||
v-if="myevent.teacher"
|
||||
class="cal__teacher"
|
||||
>
|
||||
<span class="cal__teacher-title"
|
||||
>{{ t('cal.teacher') }}: <span class="margin_with"></span
|
||||
></span>
|
||||
@@ -96,16 +123,17 @@
|
||||
<CMyTeacher :username="myevent.teacher3"></CMyTeacher>
|
||||
<CMyTeacher :username="myevent.teacher4"></CMyTeacher>
|
||||
</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 class="cal__where-title">{{ t('cal.where') }}: </span>
|
||||
<span class="cal__where-content">
|
||||
<q-chip>
|
||||
<q-avatar v-if="getWhereIcon(myevent.wherecode)">
|
||||
<img
|
||||
:src="
|
||||
`/images/avatar/` + getWhereIcon(myevent.wherecode)
|
||||
"
|
||||
:src="`/images/avatar/` + getWhereIcon(myevent.wherecode)"
|
||||
alt="Località"
|
||||
/>
|
||||
</q-avatar>
|
||||
@@ -129,17 +157,16 @@
|
||||
>
|
||||
<span class="cal__quota-title">{{ t('event.price') }}:</span>
|
||||
<q-chip>
|
||||
<span class="cal__quota-content">{{
|
||||
getPrice(myevent)
|
||||
}}</span>
|
||||
<span class="cal__quota-content">{{ getPrice(myevent) }}</span>
|
||||
</q-chip>
|
||||
</div>
|
||||
<div v-if="myevent.dateTimeStart" class="cal__when">
|
||||
<div
|
||||
v-if="myevent.dateTimeStart"
|
||||
class="cal__when"
|
||||
>
|
||||
<span class="cal__where-title"
|
||||
>{{ t('cal.when') }}:
|
||||
<span
|
||||
v-html="tools.getstrDateTimeEvent($t, myevent, true)"
|
||||
></span>
|
||||
<span v-html="tools.getstrDateTimeEvent($t, myevent, true)"></span>
|
||||
</span>
|
||||
</div>
|
||||
<p
|
||||
@@ -181,16 +208,33 @@
|
||||
</q-dialog>
|
||||
<!-- id_bookedeventadd/edit an myevent -->
|
||||
|
||||
<q-dialog v-model="addEvent" no-backdrop-dismiss persistent>
|
||||
<q-card v-if="addEvent" class="dialog_card">
|
||||
<q-dialog
|
||||
v-model="addEvent"
|
||||
no-backdrop-dismiss
|
||||
persistent
|
||||
>
|
||||
<q-card
|
||||
v-if="addEvent"
|
||||
class="dialog_card"
|
||||
>
|
||||
<q-toolbar class="bg-primary text-white">
|
||||
<q-toolbar-title>
|
||||
{{ addOrUpdateEvent() }} {{ t('cal.event') }}
|
||||
</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-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
|
||||
:label="$t('event.typol')"
|
||||
v-model:value="eventForm.typol"
|
||||
@@ -254,7 +298,10 @@
|
||||
/>
|
||||
</q-tabs>
|
||||
|
||||
<q-tab-panels v-model="tabeditor" animated>
|
||||
<q-tab-panels
|
||||
v-model="tabeditor"
|
||||
animated
|
||||
>
|
||||
<q-tab-panel name="details">
|
||||
<div class="q-gutter-sm myflex">
|
||||
<q-input
|
||||
@@ -320,7 +367,10 @@
|
||||
</CMyEditor>
|
||||
</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>-->
|
||||
|
||||
<div class="q-gutter-sm row myflex">
|
||||
@@ -507,28 +557,40 @@
|
||||
</q-form>
|
||||
</q-card-section>
|
||||
<q-card-actions align="right">
|
||||
<q-btn
|
||||
:label="$t('dialog.ok')"
|
||||
color="primary"
|
||||
@click="saveEvent"
|
||||
></q-btn>
|
||||
<q-btn
|
||||
flat
|
||||
:label="$t('dialog.cancel')"
|
||||
color="primary"
|
||||
v-close-popup
|
||||
></q-btn>
|
||||
<q-btn
|
||||
:label="$t('dialog.ok')"
|
||||
color="primary"
|
||||
@click="saveEvent"
|
||||
></q-btn>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
|
||||
<q-dialog v-model="bookEventpage.show" no-backdrop-dismiss>
|
||||
<q-card v-if="bookEventpage.show" class="dialog_card">
|
||||
<q-dialog
|
||||
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-title>
|
||||
{{ t('cal.booking') }}
|
||||
</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-card-section class="inset-shadow">
|
||||
@@ -548,16 +610,20 @@
|
||||
>
|
||||
{{ myevent.title }}
|
||||
</q-chip>
|
||||
<div v-if="myevent.dateTimeStart" class="cal__when">
|
||||
<div
|
||||
v-if="myevent.dateTimeStart"
|
||||
class="cal__when"
|
||||
>
|
||||
<span class="cal__where-title"
|
||||
>{{ t('cal.when') }}:
|
||||
<span
|
||||
v-html="tools.getstrDateTimeEvent($t, myevent, true)"
|
||||
></span>
|
||||
<span v-html="tools.getstrDateTimeEvent($t, myevent, true)"></span>
|
||||
</span>
|
||||
</div>
|
||||
<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">
|
||||
<div
|
||||
style="display: inline-flex"
|
||||
@@ -583,9 +649,7 @@
|
||||
style="min-width: 140px"
|
||||
>
|
||||
<q-select
|
||||
:behavior="
|
||||
$q.platform.is.ios === true ? 'dialog' : 'menu'
|
||||
"
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
rounded
|
||||
outlined
|
||||
v-model="bookEventForm.numpeople"
|
||||
@@ -614,9 +678,7 @@
|
||||
style="min-width: 140px; margin-left: 10px"
|
||||
>
|
||||
<q-select
|
||||
:behavior="
|
||||
$q.platform.is.ios === true ? 'dialog' : 'menu'
|
||||
"
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
rounded
|
||||
outlined
|
||||
v-model="bookEventForm.numpeopleLunch"
|
||||
@@ -647,9 +709,7 @@
|
||||
style="min-width: 180px; margin-left: 10px"
|
||||
>
|
||||
<q-select
|
||||
:behavior="
|
||||
$q.platform.is.ios === true ? 'dialog' : 'menu'
|
||||
"
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
rounded
|
||||
outlined
|
||||
v-model="bookEventForm.numpeopleDinner"
|
||||
@@ -679,9 +739,7 @@
|
||||
style="min-width: 180px; margin-left: 10px"
|
||||
>
|
||||
<q-select
|
||||
:behavior="
|
||||
$q.platform.is.ios === true ? 'dialog' : 'menu'
|
||||
"
|
||||
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
|
||||
rounded
|
||||
outlined
|
||||
v-model="bookEventForm.numpeopleDinnerShared"
|
||||
@@ -726,6 +784,13 @@
|
||||
</div>
|
||||
</q-card-section>
|
||||
<q-card-actions align="right">
|
||||
<q-btn
|
||||
flat
|
||||
:label="$t('dialog.cancel')"
|
||||
color="primary"
|
||||
v-close-popup
|
||||
></q-btn>
|
||||
|
||||
<q-btn
|
||||
v-if="bookEventpage.state === EState.Modifying"
|
||||
flat
|
||||
@@ -745,28 +810,31 @@
|
||||
:label="getTitleBtnBooking()"
|
||||
color="primary"
|
||||
@click="saveBookEvent(myevent)"
|
||||
:disable="
|
||||
!(bookEventpage.state === EState.Creating || hasModifiedBooking)
|
||||
"
|
||||
></q-btn>
|
||||
|
||||
<q-btn
|
||||
flat
|
||||
:label="$t('dialog.cancel')"
|
||||
color="primary"
|
||||
v-close-popup
|
||||
:disable="!(bookEventpage.state === EState.Creating || hasModifiedBooking)"
|
||||
></q-btn>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
|
||||
<q-dialog v-model="askInfopage.show" no-backdrop-dismiss>
|
||||
<q-card v-if="askInfopage.show" class="dialog_card">
|
||||
<q-dialog
|
||||
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-title>
|
||||
{{ t('cal.booking') }}
|
||||
</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-card-section class="inset-shadow">
|
||||
@@ -786,12 +854,13 @@
|
||||
>
|
||||
{{ myevent.title }}
|
||||
</q-chip>
|
||||
<div v-if="myevent.dateTimeStart" class="cal__when">
|
||||
<div
|
||||
v-if="myevent.dateTimeStart"
|
||||
class="cal__when"
|
||||
>
|
||||
<span class="cal__where-title"
|
||||
>{{ t('cal.when') }}:
|
||||
<span
|
||||
v-html="tools.getstrDateTimeEvent($t, myevent, true)"
|
||||
></span>
|
||||
<span v-html="tools.getstrDateTimeEvent($t, myevent, true)"></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="q-pa-xs">
|
||||
@@ -812,18 +881,17 @@
|
||||
</div>
|
||||
</q-card-section>
|
||||
<q-card-actions align="right">
|
||||
<q-btn
|
||||
flat
|
||||
:label="$t('dialog.sendmsg')"
|
||||
color="primary"
|
||||
@click="sendMsg(myevent)"
|
||||
></q-btn>
|
||||
<q-btn
|
||||
flat
|
||||
:label="$t('dialog.cancel')"
|
||||
color="primary"
|
||||
v-close-popup
|
||||
></q-btn>
|
||||
<q-btn
|
||||
:label="$t('dialog.sendmsg')"
|
||||
color="primary"
|
||||
@click="sendMsg(myevent)"
|
||||
></q-btn>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
</q-dialog>
|
||||
@@ -956,20 +1024,13 @@
|
||||
class="q-ma-xs"
|
||||
:class="badgeClasses(event, 'header')"
|
||||
:style="badgeStyles(event, 'header')"
|
||||
style="
|
||||
width: 10px;
|
||||
max-width: 10px;
|
||||
height: 10px;
|
||||
max-height: 10px;
|
||||
"
|
||||
style="width: 10px; max-width: 10px; height: 10px; max-height: 10px"
|
||||
></q-badge>
|
||||
</template>
|
||||
</div>
|
||||
</template>
|
||||
<template
|
||||
#day-body="{
|
||||
scope: { timestamp, timeStartPos, timeDurationHeight },
|
||||
}"
|
||||
#day-body="{ scope: { timestamp, timeStartPos, timeDurationHeight } }"
|
||||
>
|
||||
<template
|
||||
v-for="(event, index) in getEvents(timestamp.date)"
|
||||
@@ -1012,12 +1073,7 @@
|
||||
class="my-event-rel justify-center rounded-borders"
|
||||
:class="badgeClasses(event, 'body')"
|
||||
:style="
|
||||
badgeStyles(
|
||||
event,
|
||||
'body',
|
||||
timeStartPos,
|
||||
timeDurationHeight
|
||||
)
|
||||
badgeStyles(event, 'body', timeStartPos, timeDurationHeight)
|
||||
"
|
||||
@click.stop.prevent="showEvent(event)"
|
||||
:draggable="tools.isManager()"
|
||||
@@ -1087,13 +1143,7 @@
|
||||
<img
|
||||
:src="getImgEvent(event)"
|
||||
@click="selectEvent(event)"
|
||||
class="
|
||||
text-left
|
||||
padding_cell
|
||||
listaev__tdimg listaev__img
|
||||
cursor-pointer
|
||||
q-mx-sm
|
||||
"
|
||||
class="text-left padding_cell listaev__tdimg listaev__img cursor-pointer q-mx-sm"
|
||||
:style="getStyleByEvent(event, event === myevent)"
|
||||
:alt="event.title"
|
||||
/>
|
||||
@@ -1139,9 +1189,7 @@
|
||||
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-list>
|
||||
</q-menu>
|
||||
@@ -1187,22 +1235,17 @@
|
||||
</q-chip>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="
|
||||
listaev__date listaev__align_center_mobile
|
||||
text-center
|
||||
"
|
||||
>
|
||||
<span
|
||||
v-html="tools.getstrDateTimeEvent($t, event, true)"
|
||||
></span>
|
||||
<div class="listaev__date listaev__align_center_mobile text-center">
|
||||
<span v-html="tools.getstrDateTimeEvent($t, event, true)"></span>
|
||||
</div>
|
||||
|
||||
<div class="listaev__align_center_mobile">
|
||||
<div style="margin: 10px"></div>
|
||||
|
||||
<div v-if="event.internal">
|
||||
<q-chip color="blue" text-color="white"
|
||||
<q-chip
|
||||
color="blue"
|
||||
text-color="white"
|
||||
>Evento Interno:</q-chip
|
||||
>
|
||||
</div>
|
||||
@@ -1247,17 +1290,15 @@
|
||||
<div style="margin: 10px"></div>
|
||||
|
||||
<p
|
||||
:class="
|
||||
`listaev__details` + ($q.dark.isActive
|
||||
? `_darktheme`
|
||||
: ``)
|
||||
"
|
||||
:class="`listaev__details` + ($q.dark.isActive ? `_darktheme` : ``)"
|
||||
v-html="event.details"
|
||||
></p>
|
||||
<div v-if="event.teacher" class="">
|
||||
<div
|
||||
v-if="event.teacher"
|
||||
class=""
|
||||
>
|
||||
<span class="cal__teacher-title"
|
||||
>{{ t('cal.teacher') }}:
|
||||
<span class="margin_with"></span
|
||||
>{{ t('cal.teacher') }}: <span class="margin_with"></span
|
||||
></span>
|
||||
|
||||
<CMyTeacher :username="event.teacher"></CMyTeacher>
|
||||
@@ -1265,18 +1306,17 @@
|
||||
<CMyTeacher :username="event.teacher3"></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 class="cal__where-title"
|
||||
>{{ t('cal.where') }}:
|
||||
</span>
|
||||
<span class="cal__where-title">{{ t('cal.where') }}: </span>
|
||||
|
||||
<q-chip>
|
||||
<q-avatar v-if="getWhereIcon(event.wherecode)">
|
||||
<img
|
||||
:src="
|
||||
`/images/avatar/` + getWhereIcon(event.wherecode)
|
||||
"
|
||||
:src="`/images/avatar/` + getWhereIcon(event.wherecode)"
|
||||
:alt="event.wherecode"
|
||||
/>
|
||||
</q-avatar>
|
||||
@@ -1293,13 +1333,17 @@
|
||||
</q-chip>
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="event.contribtype" class="">
|
||||
<div
|
||||
v-if="event.contribtype"
|
||||
class=""
|
||||
>
|
||||
<span class="cal__quota-title"
|
||||
>{{ t('event.price') }}:<span
|
||||
class="margin_with"
|
||||
></span
|
||||
>{{ t('event.price') }}:<span class="margin_with"></span
|
||||
></span>
|
||||
<span v-if="!isShowPrice(event)" class="">
|
||||
<span
|
||||
v-if="!isShowPrice(event)"
|
||||
class=""
|
||||
>
|
||||
<q-chip
|
||||
class="glossy"
|
||||
color="orange"
|
||||
@@ -1318,9 +1362,7 @@
|
||||
text-color="white"
|
||||
icon-right="star"
|
||||
>
|
||||
<span class="cal__quota-content">{{
|
||||
getPrice(event)
|
||||
}}</span>
|
||||
<span class="cal__quota-content">{{ getPrice(event) }}</span>
|
||||
</q-chip>
|
||||
</div>
|
||||
|
||||
@@ -1418,8 +1460,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" src="./CEventsCalendar.ts">
|
||||
</script>
|
||||
<script lang="ts" src="./CEventsCalendar.ts"></script>
|
||||
<style lang="scss" scoped>
|
||||
@import './CEventsCalendar.scss';
|
||||
</style>
|
||||
|
||||
@@ -3,9 +3,9 @@ import { useQuasar } from 'quasar'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { CDownloadJsonFile } from '@src/components/CDownloadJsonFile'
|
||||
import { CDownloadJsonFile } from '@/components/CDownloadJsonFile'
|
||||
import { PropType, defineComponent, onMounted, ref } from 'vue'
|
||||
import type { IMyPage } from '@src/model'
|
||||
import type { IMyPage } from '@/model'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CExportImportPage',
|
||||
|
||||
@@ -17,7 +17,7 @@ import { useGlobalStore } from '../../store/globalStore';
|
||||
import { useCircuitStore } from '../../store/CircuitStore';
|
||||
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 { CMyUser } from '../CMyUser';
|
||||
@@ -35,6 +35,7 @@ import { colmyUserPeople, colmyUserGroup } from '@store/Modules/fieldsTable';
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CFindUsers',
|
||||
emits: ['clickContact'],
|
||||
props: {
|
||||
actionType: {
|
||||
type: Number,
|
||||
@@ -46,6 +47,11 @@ export default defineComponent({
|
||||
required: false,
|
||||
default: '',
|
||||
},
|
||||
enableContactClick: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
default: false,
|
||||
},
|
||||
},
|
||||
components: {
|
||||
CMyUser,
|
||||
@@ -57,7 +63,7 @@ export default defineComponent({
|
||||
CGridTableRec,
|
||||
CQRCode,
|
||||
},
|
||||
setup(props) {
|
||||
setup(props, { emit }) {
|
||||
const userStore = useUserStore();
|
||||
const globalStore = useGlobalStore();
|
||||
const circuitStore = useCircuitStore();
|
||||
@@ -253,6 +259,10 @@ export default defineComponent({
|
||||
usersList.value.listgroup = receiveRislistgroup;
|
||||
}
|
||||
|
||||
function clickContact(data: any) {
|
||||
emit('clickContact', data)
|
||||
}
|
||||
|
||||
return {
|
||||
userStore,
|
||||
tools,
|
||||
@@ -277,6 +287,7 @@ export default defineComponent({
|
||||
extraparams_groups,
|
||||
filtercustom,
|
||||
arrfilterand,
|
||||
clickContact,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -65,6 +65,9 @@
|
||||
:showCol="false"
|
||||
:extraparams="extraparams()"
|
||||
:actionType="actionType"
|
||||
@clickContact="clickContact"
|
||||
:enableContactClick="enableContactClick"
|
||||
|
||||
>
|
||||
</CGridTableRec>
|
||||
</div>
|
||||
@@ -99,6 +102,8 @@
|
||||
:extraparams="extraparams_groups()"
|
||||
:actionType="actionType"
|
||||
:visufind="costanti.FIND_GROUP"
|
||||
@clickContact="clickContact"
|
||||
:enableContactClick="enableContactClick"
|
||||
>
|
||||
</CGridTableRec>
|
||||
</div>
|
||||
|
||||
@@ -4,16 +4,16 @@ import {
|
||||
} from 'vue'
|
||||
|
||||
import { tools } from '@tools'
|
||||
import { CMyFieldDb } from '@src/components/CMyFieldDb'
|
||||
import { CMyFieldDb } from '@/components/CMyFieldDb'
|
||||
import { costanti } from '@costanti'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
|
||||
import { CTitlePage } from '@src/components/CTitlePage'
|
||||
import { CGridTableRec } from '@src/components/CGridTableRec'
|
||||
import { CTitlePage } from '@/components/CTitlePage'
|
||||
import { CGridTableRec } from '@/components/CGridTableRec'
|
||||
import type { IColGridTable, ISearchList} 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 { toolsext } from '@store/Modules/toolsext'
|
||||
import { fieldsTable } from '@store/Modules/fieldsTable'
|
||||
@@ -306,7 +306,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
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)
|
||||
if (recsectorGoods && recGood.idSectorGood) {
|
||||
return recGood.idSectorGood.includes(recsectorGoods.value)
|
||||
@@ -314,6 +314,15 @@ export default defineComponent({
|
||||
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) {
|
||||
const recskills: any = searchList.value.find((rec) => rec.table === 'skills')
|
||||
@@ -614,9 +623,9 @@ export default defineComponent({
|
||||
{
|
||||
visible: true,
|
||||
label: 'Settore',
|
||||
table: toolsext.TABSECTORS,
|
||||
key: 'idSector',
|
||||
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORS, 0, true),
|
||||
table: toolsext.TABSECTORBACHECAS,
|
||||
key: 'idSectorBacheca',
|
||||
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORBACHECAS, 0, true),
|
||||
arrvalue: [],
|
||||
type: costanti.FieldType.select,
|
||||
filter: null,
|
||||
@@ -624,6 +633,19 @@ export default defineComponent({
|
||||
notinsearch: 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,
|
||||
label: 'Data Inizio',
|
||||
@@ -898,7 +920,7 @@ export default defineComponent({
|
||||
{
|
||||
visible: true,
|
||||
label: 'Settore',
|
||||
table: 'sectorgoods',
|
||||
table: toolsext.TABSECTORGOODS,
|
||||
key: 'idSectorGood',
|
||||
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + toolsext.TABSECTORGOODS, 0, true),
|
||||
arrvalue: [],
|
||||
@@ -911,7 +933,7 @@ export default defineComponent({
|
||||
{
|
||||
visible: true,
|
||||
label: 'Categoria',
|
||||
table: 'goods',
|
||||
table: toolsext.TABGOODS,
|
||||
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),
|
||||
arrvalue: [],
|
||||
|
||||
@@ -5,10 +5,10 @@ import {
|
||||
|
||||
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 { 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 { useUserStore } from '@store/UserStore'
|
||||
|
||||
|
||||