- Le immagini uploadate non vengono visualizzate subito... cache... aggiungere la versione dell'immagine: vers_img

- Aggiunto il Server TESTRISO e TEST_PCB.
This commit is contained in:
Surya Paolo
2024-09-17 17:38:57 +02:00
parent 0872afbb39
commit b9a5c54071
86 changed files with 2154 additions and 1532 deletions

View File

@@ -3,7 +3,7 @@ SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=freeplanet_serverside
SERVERDIR_WEBSITE="/var/customers/webs/paolouser/piuchebuono.app/"
SERVERDIR_WEBSITE="/var/www/piuchebuono.app/"
SERVERPW_WEBSITE=pwdadmin@1AOK
APP_URL="https://piuchebuono.app"
URL_FACEBOOK=""
@@ -11,7 +11,7 @@ PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://piuchebuono.app:3000"
MONGODB_HOST="https://api.piuchebuono.app"
LOGO_REG='piuchebuono-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""

View File

@@ -3,14 +3,14 @@ SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside
SERVERDIR_WEBSITE="/var/customers/webs/paolouser/test.gruppomacro.app/"
SERVERDIR_WEBSITE="/var/www/test.gruppomacro.app/"
APP_URL="https://test.gruppomacro.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://test.gruppomacro.app:3001"
MONGODB_HOST="https://testapi.gruppomacro.app"
LOGO_REG='gruppomacro-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""

View File

@@ -3,14 +3,14 @@ SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside
SERVERDIR_WEBSITE="/var/customers/webs/paolouser/test.piuchebuono.app/"
SERVERDIR_WEBSITE="/var/www/test.piuchebuono.app/"
APP_URL="https://test.piuchebuono.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://piuchebuono.app:3001"
MONGODB_HOST="https://testapi.piuchebuono.app"
LOGO_REG='piuchebuono-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""

View File

@@ -1,16 +1,16 @@
APP_VERSION="1.0.60"
SERVICE_WORKER_FILE="service-worker_1.0.39.js"
SERVICE_WORKER_FILE="service-worker_1.0.60.js"
APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=/var/www/testriso.freeplanet_serverside
SERVERDIR_WEBSITE="/var/www/testriso.piuchebuono.app"
APP_URL="https://testriso.piuchebuono.app"
DIRECTORY_SERVER=/var/www/nodejs_test.riso_server
SERVERDIR_WEBSITE="/var/www/test.riso.app"
APP_URL="https://test.riso.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://piuchebuono.app:3001"
MONGODB_HOST="https://testapi.riso.app"
LOGO_REG='riso-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""

View File

@@ -1,17 +1,17 @@
APP_VERSION="1.0.60"
APP_VERSION="1.0.55"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside
SERVERDIR_WEBSITE="test.piuchebuono.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"
APP_URL="https://test.abitaregliiblei.it"
APP_URL="https://test.piuchebuono.app"
URL_FACEBOOK=""
PROVA_PAOLO=""
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://testapi.abitaregliiblei.it"
MONGODB_HOST="https://testapi.piuchebuono.app"
LOGO_REG='piuchebuono-logo-full.png'
TEST_NAME=""
TEST_SURNAME=""

View File

@@ -1,9 +1,9 @@
const msg_website_it = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
description: 'Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.',
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS',
sitename: 'AbitareGliIblei',
siteshortname: 'AbitareGliIblei',
description: 'Abitare Gli Iblei',
keywords: '',
},
hours: {
descr: 'Descrizione',

View File

@@ -68,7 +68,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false,
},
{
active: true,
active: site.confpages && site.confpages.enableGoods,
order: 12,
path: '/goods',
materialIcon: 'fas fa-tshirt',
@@ -79,7 +79,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true,
},
{
active: true,
active: site.confpages && site.confpages.enableServices,
order: 15,
path: '/services',
materialIcon: 'fas fa-house-user',
@@ -90,7 +90,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true,
},
{
active: true,
active: site.confpages && site.confpages.enableActivities,
order: 15,
path: '/activities',
materialIcon: 'fas fa-house-user',
@@ -112,7 +112,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false,
},
{
active: true,
active: site.confpages && site.confpages.enableHosps,
order: 15,
path: '/hosps',
materialIcon: 'fas fa-bed',
@@ -134,7 +134,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true,
},
{
active: true,
active: site.confpages && site.confpages.enableEvents,
order: 20,
path: '/events',
materialIcon: 'fas fa-bullhorn',
@@ -156,7 +156,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false,
},
{
active: true,
active: site.confpages && site.confpages.showProfile,
order: 120,
path: '/myprofile',
materialIcon: 'fas fa-user',
@@ -178,7 +178,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false,
},
{
active: true,
active: site.confpages && site.confpages.showiscrittiMenu,
order: 130,
path: '/friends',
materialIcon: 'fas fa-user-friends',
@@ -294,6 +294,18 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false
},
{
active: true,
order: 1000,
path: '/404error',
materialIcon: 'fas fa-calendar-plus',
name: 'otherpages.error404',
component: () => import('@/root/My404page/My404page.vue'),
inmenu: false,
infooter: false
},
]
return baseroutes

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 634 KiB

View File

@@ -52,9 +52,11 @@
"graphql": "^16.8.1",
"graphql-tag": "^2.12.6",
"gsap": "^3.12.5",
"html2pdf.js": "^0.10.2",
"jquery": "^3.7.1",
"js-cookie": "^3.0.5",
"leaflet": "^1.9.4",
"leaflet-routing-machine": "^3.2.12",
"leaflet.markercluster": "^1.5.3",
"localforage": "^1.10.0",
"lodash": "^4.17.21",

View File

@@ -39,7 +39,7 @@ module.exports = configure((ctx) => ({
// --> 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', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'calendar', 'social-sharing', 'timeago'],
boot: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'calendar', 'social-sharing', 'timeago', 'guard'],
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
css: [

View File

@@ -0,0 +1,452 @@
.testo-banda {
//background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent));
//background: linear-gradient(180deg, #3144f0, transparent);
//background: rgba(0, 0, 0, .6)
}
$grayshadow: #555;
$textcol: blue;
$textcol_scuro: darkblue;
p {
margin: 0 0 1.25rem;
//text-shadow: .125rem .125rem .25rem $grayshadow;
}
h4 {
font-size: 1.25rem;
}
.mycard {
visibility: hidden;
}
.landing {
}
.landing_background {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
background-size: cover
}
.landing > section {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
//padding: 0 16px
}
.intro {
display: flex;
justify-content: space-between;
align-items: stretch;
/* flex-flow: row nowrap; */
padding: 1.25rem 0 1.25rem 0;
margin: .125rem;
* {
width: 100%;
flex: 1;
margin-left: auto;
margin-right: auto;
}
&__associazione {
min-width: 350px;
}
&__comeassociarsi {
min-width: 350px;
}
}
.subtitle {
font-weight: 600;
text-align: center;
letter-spacing: 0.125rem;
text-transform: uppercase;
font-size: 1rem;
}
.landing > section.padding {
padding: 5.62rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing > section > div {
position: relative;
width: 100%
}
.maxwidth1200 {
max-width: 1200px;
}
.landing__toolbar {
background: -webkit-gradient(linear, left top, left bottom, from(#000), to(transparent));
background: linear-gradient(180deg, #000, transparent);
padding: 0 !important
}
.landing__toolbar .q-btn {
border-radius: 0 0 .315rem .315rem;
-ms-flex-item-align: stretch;
align-self: stretch
}
.landing__hero {
min-height: 50vh
}
.landing__header {
height: 18vh
}
.landing__arrow {
bottom: 1.5rem;
opacity: .4
}
.landing__front {
background: -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(15%, rgba(0, 0, 0, .6)));
background: linear-gradient(180deg, transparent, rgba(0, 0, 0, .6) 15%)
}
.landing__logo {
width: 9.40rem;
height: 9.40rem;
margin-top: 1.315rem;
//-webkit-animation: logo-rotate 240s linear infinite;
//animation: logo-rotate 240s linear infinite
}
.landing__features .q-icon {
font-size: 4rem
}
h4 {
line-height: 1.5;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.landing__features h4, .landing__features h6 {
margin: 1rem 0
}
.landing__features p {
opacity: .7;
font-size: 1rem;
line-height: 1.5;
}
.landing__footer {
//background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000));
background: linear-gradient(180deg, rgba(0, 0, 0, .8) 95%, #FFF);
padding-top: 4.5rem !important;
padding-bottom: 4.5rem !important;
padding-left: 1.25rem;
padding-right: 1.25rem;
color: #9f9f9f;
}
.icon_contact:hover {
color: blue;
border-color: white;
border-width: .0625rem;
}
.landing__footer .doc-link {
color: $textcol;
}
.landing__footer .doc-link:hover {
opacity: .8
}
.landing__swirl-bg {
background-repeat: no-repeat !important;
background-position: top;
background-size: contain !important;
background-image: url(../../../public/images/landing_first_section.png) !important
}
.feat-descr {
font-size: 1.15rem;
}
.feat-descr:hover {
transition: opacity 0.5s ease-in-out;
opacity: 0.9;
}
.q-col-gutter-sm {
padding: 3.125rem 3.125rem;
//margin-left: -48px
}
body.mobile .landing {
//background: unset
}
body.mobile .landing:before {
content: "";
position: fixed;
top: 0;
height: 100vh;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
//background: #000 url(../../public/images/cover.jpg) 50%;
background-size: cover
}
/*
@-webkit-keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
@keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
*/
.home {
//background-color: rgb(250, 250, 250);
padding: 3.125rem;
display: flex;
//flex-wrap: nowrap;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
.btn-start {
margin: 3.125rem;
}
.shadow {
//color: white;
text-shadow: 0.125rem 0.125rem 0.25rem $grayshadow;
}
.text-h1, h1 {
font-size: 3rem;
font-weight: bold;
line-height: 3rem;
letter-spacing: -.01562em;
margin-bottom: 8px !important;
}
.text-h2 {
font-size: 3.75rem;
font-weight: 300;
line-height: 3.75rem;
letter-spacing: -.00833em;
}
.text-weight-bold {
font-weight: 700;
}
.text-vers {
font-size: 0.75rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.homep-cover-img-1 {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-2 {
background: #000 url(../../../public/images/foto2.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-3 {
background: #000 url(../../../public/images/foto3.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img.hide-filter:before {
opacity: 0
}
.landing__footer-icons {
font-size: 1.75rem
}
.landing__footer-icons a {
margin: 0 .5rem .5rem;
text-decoration: none;
outline: 0;
color: $textcol;
transition: color .28s
}
.landing__footer-icons a:hover {
color: $textcol_scuro;
}
.doc-img {
max-width: 100%;
}
.mylist {
background: #3fdaff;
padding-left: 1.25rem;
}
.clgutter {
margin-top: 1.25rem;
padding: .62rem;
}
.carousel_img_3 {
//background-image: url(../../public/images/cibo_sano.jpg);
background-size: cover !important;
background-position: 50% center !important;
background-repeat: no-repeat !important;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.landing__hero {
text-align: center
}
.landing__header {
height: 7vh
}
.clgutter {
margin-top: 0;
padding: 0;
}
.landing__hero .text-h1, h1 {
font-size: 2rem;
line-height: 2.05rem;
margin-bottom: 1.25rem
}
.landing > section.padding {
padding: 2.5rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
max-width: 800px;
}
.landing > section.padding_gallery > div {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing__features h4, .landing__features h6 {
margin: 1.25rem 0
}
h4 {
line-height: 1.4;
text-shadow: 0.25rem 0.25rem 0.5rem $grayshadow;
}
.landing .feature-item {
text-align: center;
margin-top: 1.25rem;
}
.landing__hero-content {
padding-bottom: 11.25rem;
}
.landing__hero2-content {
padding-bottom: 7.25rem;
}
.landing__hero-btns {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}
.q-col-gutter-sm {
padding: .625rem .315rem;
}
.text-subtitle1 {
font-size: 1.25rem;
}
.text-vers {
font-size: 0.6rem;
}
.carousel_img_3 {
//background-image: url(../../public/images/cibo_sano.jpg);
background-size: 620px 620px !important;
background-position: 50% top !important;
background-repeat: no-repeat !important;
}
}
.custom-caption {
text-align: center;
padding: .75rem;
color: $textcol;
background-color: rgba(0, 0, 0, .3);
}
.sfondo-grigio {
padding: 1rem;
color: $textcol;
background-color: rgba(0, 0, 0, .35);
}
.mycontacts {
color: gray;
letter-spacing: 0.078rem;
}
.mycontacts_title {
text-shadow: 0.125rem 0.125rem 0.125rem #555;
font-weight: bold;
color: #999;
letter-spacing: 0.125rem;
}
.mycontacts_text {
color: #999;
letter-spacing: 0.093rem;
}

View File

@@ -0,0 +1,78 @@
import { defineComponent, ref, onMounted, watch, computed } from 'vue'
import { useGlobalStore } from '@store/globalStore'
import { useRoute } from 'vue-router'
import { useUserStore } from '@store/UserStore'
import { Logo } from '../../components/logo'
import { LandingFooter } from '../../components/LandingFooter'
import { CMyPage } from '../../components/CMyPage/index'
import { tools } from '@src/store/Modules/tools'
import { static_data } from '@src/db/static_data'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import { CCardCarousel, CEventsCalendar, COpenStreetMap } from '@components'
import MixinBase from '@src/mixins/mixin-base'
import { firstimagehome } from '@src/db/static_data'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'home_arcadei',
components: { Logo, LandingFooter, CMyPage, CCardCarousel, CEventsCalendar, COpenStreetMap },
setup() {
const animare = ref(0)
const slide = ref('first')
const slide2 = ref(1)
const getImmagini = ref([
{
title: '', subtitle: '',
alt: 'Arcadei',
img: 'images/arcadei/img1.png'
},
])
const userStore = useUserStore()
const globalStore = useGlobalStore()
const { setValDb, getValDb } = MixinBase()
const { setmeta, getsrcbyimg } = MixinMetaTags()
function getheightgallery() {
if (tools.isMobile())
return '400px'
else
return '600px'
}
function created() {
//
}
function getArrDisciplines() {
return globalStore.disciplines.filter((rec: any) => rec.showinhome)
}
created()
return {
tools,
toolsext,
static_data,
animare,
slide,
slide2,
getheightgallery,
getArrDisciplines,
getImmagini,
getValDb,
firstimagehome,
getsrcbyimg,
setmeta,
}
},
})

View File

@@ -0,0 +1,221 @@
<template>
<q-page>
<CMyPage title="Home">
<div class="landing">
<section>
<div class="landing__hero maxwidth1200 text-white">
<q-carousel
animated
:autoplay="animare"
swipeable
infinite
navigation
transition-next="slide-left"
transition-prev="slide-right"
v-model="slide"
:height="getheightgallery()"
width="100%"
>
<q-carousel-slide name="first"
:img-src="getsrcbyimg(firstimagehome())">
<div class="landing__header"></div>
<div class="landing__hero-content row justify-center q-gutter-xs clgutter">
<div class="row">
&nbsp;
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
&nbsp;
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm">
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
</div>
<div>
<br>
<br>
<div v-if="!tools.isLogged()" style="margin: 5px; padding: 5px;" class="home">
<br>
<br>
</div>
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="second"
:img-src="getsrcbyimg('images/background2.jpg')" alt="">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<h2 class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</h2>
<h2 class="text-subtitle1 shadow-max big text-italic q-pl-sm">
<strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</h2>
<h2 class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</h2>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="third"
:img-src="getsrcbyimg('images/background3.jpg')">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<div class="text-h1 shadow-max">{{tools.getappname()}}</div>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm"><strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</div>
<div class="text-subtitle3 shadow text-italic q-pl-sm ">
{{$t('msg.sottoTitoloApp4')}}
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<!--<i aria-hidden="true"-->
<!--class="q-icon text-h2 text-white material-icons">expand_more</i>-->
</div>
</q-carousel-slide>
</q-carousel>
</div>
</section>
<div class="q-pa-md q-gutter-md">
<div v-if="isLogged && !isVerified" class="text-verified">{{
$t('components.authentication.email_verification.link_sent') }}
</div>
</div>
<CCardCarousel :myarr="getArrDisciplines()">
</CCardCarousel>
<CEventsCalendar :mysingleevent="null" :showfirstN="getValDb('SHOW_LAST_EVENTS', false, 3)">
</CEventsCalendar>
<div v-if="getValDb('VIDEO_HOME', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('VIDEO_TITLE', false)"></h4>
<div class="">
<video :width="tools.getwidthscale(mythis, 320, 800)"
:height="tools.getheightbywidth(mythis, 320, 180, 800)" controls>
<source :src="getValDb('VIDEO_HOME', false)" type="video/mp4">
</video>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<div v-if="getValDb('YT_VIDEO', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('YT_TITLE', false)"></h4>
<div class="">
<div class="">
<iframe
:width="tools.getwidthscale(mythis, getValDb('YT_W', false), 800)"
:height="tools.getheightbywidth(mythis, getValDb('YT_W', false), getValDb('YT_H', false), 800)"
:src="getValDb('YT_VIDEO', false)"
frameborder="0"
allowfullscreen
></iframe>
</div>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<section :class="`maxwidth padding_gallery `+ ($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-grey-10 text-center`" >
<q-carousel
swipeable
animated
:autoplay="8000"
v-model="slide2"
arrows
thumbnails
infinite
height="600">
<q-carousel-slide v-for="(rec, index) in getImmagini" :key="index" :name="index"
:img-src="rec.img"
:alt="rec.alt"
class="carousel_slide">
<div class="absolute-bottom custom-caption" style="margin-bottom: 70px">
<div class="text-h5"><span
class="text-h6 text-grey-1 shadow-max">{{index + 1}}. </span><span
class="text-h6 text-grey-2 shadow">{{rec.title}}</span></div>
<div class="text-subtitle1"><span class="text-grey-4 shadow">{{rec.subtitle}}</span>
</div>
</div>
</q-carousel-slide>
</q-carousel>
</section>
<div v-if="!tools.isMobile()" style="margin: 60px 60px;"></div>
<COpenStreetMap :imgmap="getValDb('IMGMAP', false)" :urlmap="getValDb('URLMAP', false)" :title="getValDb('MAP_TITLE', false)"
:coordinates="getValDb('COORD_MAP_1', false)" :coord_big="getValDb('COORD_MAP_BIG', false)">
</COpenStreetMap>
<div class="q-ma-md"></div>
</div>
</CMyPage>
</q-page>
</template>
<script lang="ts" src="./home_arcadei.ts">
</script>
<style lang="scss" scoped>
@import './home_arcadei.scss';
</style>

View File

@@ -0,0 +1,446 @@
.testo-banda {
//background: -webkit-gradient(linear, left top, left bottom, from(#3144f0), to(transparent));
//background: linear-gradient(180deg, #3144f0, transparent);
//background: rgba(0, 0, 0, .6)
}
$grayshadow: #555;
$textcol: blue;
$textcol_scuro: darkblue;
p {
margin: 0 0 1.25rem;
//text-shadow: .125rem .125rem .25rem $grayshadow;
}
h4 {
font-size: 1.25rem;
}
.mycard {
visibility: hidden;
}
.landing {
}
.landing_background {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
background-size: cover
}
.landing > section {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
//padding: 0 16px
}
.intro {
display: flex;
justify-content: space-between;
align-items: stretch;
/* flex-flow: row nowrap; */
padding: 1.25rem 0 1.25rem 0;
margin: .125rem;
* {
width: 100%;
flex: 1;
margin-left: auto;
margin-right: auto;
}
&__associazione {
min-width: 350px;
}
&__comeassociarsi {
min-width: 350px;
}
}
.subtitle {
font-weight: 600;
text-align: center;
letter-spacing: 0.125rem;
text-transform: uppercase;
font-size: 1rem;
}
.landing > section.padding {
padding: 5.62rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing > section > div {
position: relative;
width: 100%
}
.maxwidth1200 {
max-width: 1200px;
}
.landing__toolbar {
background: -webkit-gradient(linear, left top, left bottom, from(#000), to(transparent));
background: linear-gradient(180deg, #000, transparent);
padding: 0 !important
}
.landing__toolbar .q-btn {
border-radius: 0 0 .315rem .315rem;
-ms-flex-item-align: stretch;
align-self: stretch
}
.landing__hero {
min-height: 50vh
}
.landing__header {
height: 18vh
}
.landing__arrow {
bottom: 1.5rem;
opacity: .4
}
.landing__front {
background: -webkit-gradient(linear, left top, left bottom, from(transparent), color-stop(15%, rgba(0, 0, 0, .6)));
background: linear-gradient(180deg, transparent, rgba(0, 0, 0, .6) 15%)
}
.landing__logo {
width: 9.40rem;
height: 9.40rem;
margin-top: 1.315rem;
//-webkit-animation: logo-rotate 240s linear infinite;
//animation: logo-rotate 240s linear infinite
}
.landing__features .q-icon {
font-size: 4rem
}
h4 {
line-height: 1.5;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.landing__features h4, .landing__features h6 {
margin: 1rem 0
}
.landing__features p {
opacity: .7;
font-size: 1rem;
line-height: 1.5;
}
.landing__footer {
//background: -webkit-gradient(linear, left top, left bottom, color-stop(65%, rgba(0, 0, 0, .1)), to(#000));
background: linear-gradient(180deg, rgba(0, 0, 0, .8) 95%, #FFF);
padding-top: 4.5rem !important;
padding-bottom: 4.5rem !important;
padding-left: 1.25rem;
padding-right: 1.25rem;
color: #9f9f9f;
}
.icon_contact:hover {
color: blue;
border-color: white;
border-width: .0625rem;
}
.landing__footer .doc-link {
color: $textcol;
}
.landing__footer .doc-link:hover {
opacity: .8
}
.landing__swirl-bg {
background-repeat: no-repeat !important;
background-position: top;
background-size: contain !important;
background-image: url(../../../public/images/landing_first_section.png) !important
}
.feat-descr {
font-size: 1.15rem;
}
.feat-descr:hover {
transition: opacity 0.5s ease-in-out;
opacity: 0.9;
}
.q-col-gutter-sm {
padding: 3.125rem 3.125rem;
//margin-left: -48px
}
body.mobile .landing {
//background: unset
}
body.mobile .landing:before {
content: "";
position: fixed;
top: 0;
height: 100vh;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
//background: #000 url(../../public/images/cover.jpg) 50%;
background-size: cover
}
/*
@-webkit-keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
@keyframes logo-rotate {
to {
-webkit-transform: rotate(-1turn);
transform: rotate(-1turn)
}
}
*/
.home {
//background-color: rgb(250, 250, 250);
padding: 3.125rem;
display: flex;
//flex-wrap: nowrap;
flex-direction: column;
align-items: center;
justify-content: space-between;
}
.btn-start {
margin: 3.125rem;
}
.shadow {
//color: white;
text-shadow: 0.125rem 0.125rem 0.25rem $grayshadow;
}
.text-h1, h1 {
font-size: 3rem;
font-weight: bold;
line-height: 3rem;
letter-spacing: -.01562em;
margin-bottom: 8px !important;
}
.text-h2 {
font-size: 3.75rem;
font-weight: 300;
line-height: 3.75rem;
letter-spacing: -.00833em;
}
.text-weight-bold {
font-weight: 700;
}
.text-vers {
font-size: 0.75rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .25rem .25rem .5rem $grayshadow;
}
.homep-cover-img-1 {
background: #000 url(../../../public/images/foto1.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-2 {
background: #000 url(../../../public/images/foto2.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img-3 {
background: #000 url(../../../public/images/foto3.jpg) no-repeat 50% fixed;
//transition: background-image 1s ease-in-out;
}
.homep-cover-img.hide-filter:before {
opacity: 0
}
.landing__footer-icons {
font-size: 1.75rem
}
.landing__footer-icons a {
margin: 0 .5rem .5rem;
text-decoration: none;
outline: 0;
color: $textcol;
transition: color .28s
}
.landing__footer-icons a:hover {
color: $textcol_scuro;
}
.doc-img {
max-width: 100%;
}
.mylist {
background: #3fdaff;
padding-left: 1.25rem;
}
.clgutter {
margin-top: 1.25rem;
padding: .62rem;
}
.carousel_img_3 {
//background-image: url(../../public/images/cibo_sano.jpg);
background-size: cover !important;
background-position: 50% center !important;
background-repeat: no-repeat !important;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.landing__hero {
text-align: center
}
.landing__header {
height: 7vh
}
.clgutter {
margin-top: 0;
padding: 0;
}
.landing__hero .text-h1, h1 {
font-size: 2rem;
line-height: 2.05rem;
margin-bottom: 1.25rem
}
.landing > section.padding {
padding: 2.5rem 1rem;
}
.landing > section.padding_testo {
padding-top: 1.25rem;
padding-bottom: 1rem;
}
.landing > section.padding_gallery {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
max-width: 800px;
}
.landing > section.padding_gallery > div {
padding-top: 3.125rem;
padding-bottom: 5.625rem;
}
.landing__features h4, .landing__features h6 {
margin: 1.25rem 0
}
h4 {
line-height: 1.4;
text-shadow: 0.25rem 0.25rem 0.5rem $grayshadow;
}
.landing .feature-item {
text-align: center;
margin-top: 1.25rem;
}
.landing__hero-content {
padding-bottom: 11.25rem;
}
.landing__hero2-content {
padding-bottom: 7.25rem;
}
.landing__hero-btns {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center
}
.q-col-gutter-sm {
padding: .625rem .315rem;
}
.text-subtitle1 {
font-size: 1.25rem;
}
.text-vers {
font-size: 0.6rem;
}
}
.custom-caption {
text-align: center;
padding: .75rem;
color: $textcol;
background-color: rgba(0, 0, 0, .3);
}
.sfondo-grigio {
padding: 1rem;
color: $textcol;
background-color: rgba(0, 0, 0, .35);
}
.mycontacts {
color: gray;
letter-spacing: 0.078rem;
}
.mycontacts_title {
text-shadow: 0.125rem 0.125rem 0.125rem #555;
font-weight: bold;
color: #999;
letter-spacing: 0.125rem;
}
.mycontacts_text {
color: #999;
letter-spacing: 0.093rem;
}

View File

@@ -0,0 +1,78 @@
import { defineComponent, ref, onMounted, watch, computed } from 'vue'
import { useGlobalStore } from '@store/globalStore'
import { useRoute } from 'vue-router'
import { useUserStore } from '@store/UserStore'
import { Logo } from '../../components/logo'
import { LandingFooter } from '../../components/LandingFooter'
import { CMyPage } from '../../components/CMyPage/index'
import { tools } from '@src/store/Modules/tools'
import { static_data } from '@src/db/static_data'
import { toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import { CCardCarousel, CEventsCalendar, COpenStreetMap } from '@components'
import MixinBase from '@src/mixins/mixin-base'
import { firstimagehome } from '@src/db/static_data'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'Home_tdv',
components: { Logo, LandingFooter, CMyPage, CCardCarousel, CEventsCalendar, COpenStreetMap },
setup() {
const animare = ref(0)
const slide = ref('first')
const slide2 = ref(1)
const getImmagini = ref([
{
title: '', subtitle: '',
alt: 'Elisa e Cristina insieme',
img: '../../statics/images/eventi_esterni/IMG_6035.jpg'
},
])
const userStore = useUserStore()
const globalStore = useGlobalStore()
const { setValDb, getValDb } = MixinBase()
const { setmeta, getsrcbyimg } = MixinMetaTags()
function getheightgallery() {
if (tools.isMobile())
return '400px'
else
return '600px'
}
function created() {
//
}
function getArrDisciplines() {
return globalStore.disciplines.filter((rec: any) => rec.showinhome)
}
created()
return {
tools,
toolsext,
static_data,
animare,
slide,
slide2,
getheightgallery,
getArrDisciplines,
getImmagini,
getValDb,
firstimagehome,
getsrcbyimg,
setmeta,
}
},
})

View File

@@ -0,0 +1,220 @@
<template>
<q-page>
<CMyPage title="Home">
<div class="landing">
<section>
<div class="landing__hero maxwidth1200 text-white">
<q-carousel
animated
:autoplay="animare"
swipeable
infinite
navigation
transition-next="slide-left"
transition-prev="slide-right"
v-model="slide"
:height="getheightgallery()"
width="100%"
>
<q-carousel-slide name="first"
:img-src="getsrcbyimg(firstimagehome())">
<div class="landing__header"></div>
<div class="landing__hero-content row justify-center q-gutter-xs clgutter">
<div class="row">
&nbsp;
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
&nbsp;
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm">
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
</div>
<div>
<br>
<br>
<div v-if="!tools.isLogged()" style="margin: 5px; padding: 5px;" class="home">
<br>
<br>
</div>
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="second"
:img-src="getsrcbyimg('images/background2.jpg')" alt="">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<h1 class="text-h1 shadow-max">{{tools.getappname()}}</h1>
<h2 class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</h2>
<h2 class="text-subtitle1 shadow-max big text-italic q-pl-sm">
<strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</h2>
<h2 class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</h2>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<i aria-hidden="true"
class="q-icon text-h2 text-white material-icons">expand_more</i>
</div>
</q-carousel-slide>
<q-carousel-slide name="third"
:img-src="getsrcbyimg('images/background3.jpg')">
<div class="landing__header"></div>
<div class="landing__hero2-content row justify-center q-gutter-xs clgutter">
<div class="row">
<logo></logo>
</div>
<div class="flex justify-end">
<div class="q-gutter-xs testo-banda clgutter">
<div class="text-h1 shadow-max">{{tools.getappname()}}</div>
<div class="text-subtitle1 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp')}}
</div>
<div class="text-subtitle1 shadow-max big text-italic q-pl-sm"><strong>{{$t('msg.sottoTitoloApp2')}}</strong>
</div>
<div class="text-subtitle2 shadow text-italic q-pl-sm">
{{$t('msg.sottoTitoloApp3')}}
</div>
<div class="text-subtitle3 shadow text-italic q-pl-sm ">
{{$t('msg.sottoTitoloApp4')}}
</div>
</div>
</div>
</div>
<div class="landing__arrow absolute-bottom text-center">
<!--<i aria-hidden="true"-->
<!--class="q-icon text-h2 text-white material-icons">expand_more</i>-->
</div>
</q-carousel-slide>
</q-carousel>
</div>
</section>
<div class="q-pa-md q-gutter-md">
<div v-if="isLogged && !isVerified" class="text-verified">{{
$t('components.authentication.email_verification.link_sent') }}
</div>
</div>
<CCardCarousel :myarr="getArrDisciplines()">
</CCardCarousel>
<CEventsCalendar :mysingleevent="null" :showfirstN="getValDb('SHOW_LAST_EVENTS', false, 3)">
</CEventsCalendar>
<div v-if="getValDb('VIDEO_HOME', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('VIDEO_TITLE', false)"></h4>
<div class="">
<video :width="tools.getwidthscale(mythis, 320, 800)"
:height="tools.getheightbywidth(mythis, 320, 180, 800)" controls>
<source :src="getValDb('VIDEO_HOME', false)" type="video/mp4">
</video>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<div v-if="getValDb('YT_VIDEO', false)" class="row justify-evenly items-center q-gutter-md ">
<div class="text-center">
<h4 class="subtitle text-blue" v-html="getValDb('YT_TITLE', false)"></h4>
<div class="">
<div class="">
<iframe
:width="tools.getwidthscale(mythis, getValDb('YT_W', false), 800)"
:height="tools.getheightbywidth(mythis, getValDb('YT_W', false), getValDb('YT_H', false), 800)"
:src="getValDb('YT_VIDEO', false)"
frameborder="0"
allowfullscreen
></iframe>
</div>
</div>
<!--<q-video src="../../statics/video/Intervista_Cristina_Barattoni.mp4">-->
<!--</q-video>-->
</div>
</div>
<section class="maxwidth padding_gallery bg-white text-grey-10 text-center" >
<q-carousel
swipeable
animated
:autoplay="8000"
v-model="slide2"
arrows
thumbnails
infinite
:height="tools.heightgallery()">
<q-carousel-slide v-for="(rec, index) in getImmagini" :key="index" :name="index"
:img-src="rec.img"
:alt="rec.alt"
class="carousel_slide">
<div class="absolute-bottom custom-caption" style="margin-bottom: 70px">
<div class="text-h5"><span
class="text-h6 text-grey-1 shadow-max">{{index + 1}}. </span><span
class="text-h6 text-grey-2 shadow">{{rec.title}}</span></div>
<div class="text-subtitle1"><span class="text-grey-4 shadow">{{rec.subtitle}}</span>
</div>
</div>
</q-carousel-slide>
</q-carousel>
</section>
<div v-if="!tools.isMobile()" style="margin: 60px 60px;"></div>
<COpenStreetMap :imgmap="getValDb('IMGMAP', false)" :urlmap="getValDb('URLMAP', false)" :title="getValDb('MAP_TITLE', false)"
:coordinates="getValDb('COORD_MAP_1', false)" :coord_big="getValDb('COORD_MAP_BIG', false)">
</COpenStreetMap>
<div class="q-ma-md"></div>
</div>
</CMyPage>
</q-page>
</template>
<script lang="ts" src="./home_tdv.ts">
</script>
<style lang="scss" scoped>
@import './home_tdv.scss';
</style>

View File

@@ -7,7 +7,6 @@ SERVERDIR_WEBSITE=""
SERVERPW_WEBSITE=""
APP_URL="https://localhost"
URL_FACEBOOK="https://www.facebook.com/freeplanetapp"
PROVA_PAOLO="PROVA ENV FUNZIONA!"
LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
@@ -25,6 +24,5 @@ DEBUG="1"
TELEGRAM_SUPPORT=""
PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
TEST_CELL=""
ISTEST=1
INLOCALE=1
BAK_MONGODB_HOST="http://192.168.0.200:3000"
ISTEST="1"
INLOCALE="1"

View File

@@ -52,9 +52,11 @@
"graphql": "^16.8.1",
"graphql-tag": "^2.12.6",
"gsap": "^3.12.5",
"html2pdf.js": "^0.10.2",
"jquery": "^3.7.1",
"js-cookie": "^3.0.5",
"leaflet": "^1.9.4",
"leaflet-routing-machine": "^3.2.12",
"leaflet.markercluster": "^1.5.3",
"localforage": "^1.10.0",
"lodash": "^4.17.21",

2
__close_if_opened.sh Normal file
View File

@@ -0,0 +1,2 @@
#!/bin/bash

View File

@@ -7,6 +7,10 @@ else
echo "****************************"
mkdir __$site
# Se era aperta un altro Sito, allora prima chiudilo
source __close_if_opened.sh
mkdir _BAK
cp -R src/db _BAK/1/

View File

@@ -19,7 +19,7 @@ npm run buildpwa
echo "Sincronizzazione $SERVERDIR_WEBSITE in remoto..."
rsync -e 'ssh -p 8822' -a dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
rsync -e 'ssh -p 8822' -a dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js
cp .env.prod.bak .env.production

View File

@@ -101,11 +101,6 @@ export default defineComponent({
}
function showandsave(value: any) {
console.log('EMIT: showandsave')
emit('showandsave', value)
}
function getnumimages() {
if (gallerylist.value)
return gallerylist.value.length
@@ -228,19 +223,31 @@ export default defineComponent({
function uploaded(info: any) {
console.log('uploaded', info)
let vers_img = tools.getGenerateVersionImage()
if (gallerylist.value) {
console.log('vers_img', vers_img)
if (props.single && info.files) {
console.log('gallerylist.value[0]', info.files[0].name)
gallerylist.value[0] = { imagefile: info.files[0].name }
if (info.files[0].name.imagefile) {
gallerylist.value[0] = info.files[0].name
} else {
gallerylist.value[0] = { imagefile: info.files[0].name, vers_img }
}
} else {
for (const file of info.files) {
gallerylist.value.push({ imagefile: file.name })
if (file.name.imagefile) {
gallerylist.value.push(file.name)
} else {
gallerylist.value.push({ imagefile: file.name, vers_img })
}
}
}
save()
console.log('gallerylist', gallerylist.value)
console.log('CGALLERY gallerylist', gallerylist.value)
}
}
@@ -313,7 +320,7 @@ export default defineComponent({
if (!props.single) {
emit('showandsave', gallerylist.value)
} else {
emit('showandsave', gallerylist.value[0].imagefile)
emit('showandsave', gallerylist.value[0])
}
} else {
emit('showandsave', !props.single ? [] : '')
@@ -331,27 +338,6 @@ export default defineComponent({
return props.directory
}
function getsrcimg(gallerylistery: any) {
if (!gallerylistery.imagefile) {
return 'images/noimg.png';
}
if (gallerylistery) {
if (tools.getextfile(gallerylistery.imagefile) === 'pdf')
return 'images/images/pdf.jpg'
else {
if (tools.contieneSlash(gallerylistery.imagefile)) {
return gallerylistery.imagefile
} else {
return costanti.DIR_UPLOAD + getrealdirectory() + '/' + gallerylistery.imagefile
}
}
} else {
return 'images/noimg.png';
}
}
function getParamDir() {
return tools.escapeslash(getrealdirectory())
}
@@ -389,7 +375,6 @@ export default defineComponent({
getclimg,
copytoclipboard,
deleteFile,
getsrcimg,
tools,
uploaded,
gallerylist,

View File

@@ -5,54 +5,60 @@
<div class="q-pa-xs">
<q-card v-if="isListImgValid" :class="getclass()" @click="apri">
<div v-for="(mygallery, index) in getlistimages()" :key="index">
<div v-if="index === 0">
<q-img
:src="getsrcimg(mygallery)" :class="getclimg()"
:alt="mygallery.alt">
<div v-if="getnumimages() > 1" class="absolute-bottom text-shadow no-padding">
:src="tools.getsrcimg(mygallery, getrealdirectory())"
:class="getclimg()"
:alt="mygallery.alt"
>
<div
v-if="getnumimages() > 1"
class="absolute-bottom text-shadow no-padding"
>
({{ getnumimages() }})
</div>
</q-img>
</div>
</div>
</q-card>
<div v-else-if="!isInModif && !isListImgValid && imagebak">
<q-card v-if="imagebak !== costanti.NESSUN_IMMAGINE" :class="getclass()" @click="ImgFullScreen(mygallery)">
<q-img
:src="imagebak" :class="getclimg()">
</q-img>
<q-card
v-if="imagebak !== costanti.NESSUN_IMMAGINE"
:class="getclass()"
@click="ImgFullScreen(mygallery)"
>
<q-img :src="imagebak" :class="getclimg()"> </q-img>
</q-card>
</div>
<div v-else>
<q-card :class="getclass()" @click="apri">
<q-img
src="images/noimg.png" :class="getclimg()"
alt="no image">
<q-img src="images/noimg.png" :class="getclimg()" alt="no image">
</q-img>
</q-card>
</div>
<q-btn
v-if="isInModif"
color="primary" @click="apri"
color="primary"
@click="apri"
icon="fas fa-file-upload"
:label="$t('gallery.load_image')">
:label="$t('gallery.load_image')"
>
</q-btn>
</div>
</div>
<div v-else>
<div v-if="!isListImgValid">
<q-btn
flat round color="blue" icon="fas fa-tools" size="md"
@click="apri"></q-btn>
flat
round
color="blue"
icon="fas fa-tools"
size="md"
@click="apri"
></q-btn>
</div>
<div v-else>
<div class="row">
<!--<q-draggable-rows
v-model="order">-->
@@ -61,34 +67,34 @@
class="q-pa-sm q-gutter-sm"
@dragenter="onDragEnter"
@dragleave="onDragLeave"
@dragover="onDragOver">
@dragover="onDragOver"
>
<q-card
:id="mygallery._id" :class="getclass()"
:id="mygallery._id"
:class="getclass()"
:draggable="canModify"
@dragstart="onDragStart"
@drop="onDrop"
>
<q-img
:src="getsrcimg(mygallery)"
:src="tools.getsrcimg(mygallery, getrealdirectory())"
:class="getclimg()"
:alt="mygallery.alt">
:alt="mygallery.alt"
>
<div class="absolute-bottom text-shadow">
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
<div class="text-subtitle-carica text-trans">{{ mygallery.description }}</div>
<div class="text-subtitle-carica text-trans">
{{ mygallery.description }}
</div>
</div>
</q-img>
<q-field
v-if="canModify"
stack-label
dense
label="Nome File">
<q-field v-if="canModify" stack-label dense label="Nome File">
<template v-slot:control>
<div class="self-center full-width no-outline" tabindex="0">{{ mygallery.imagefile }}</div>
<div class="self-center full-width no-outline" tabindex="0">
{{ mygallery.imagefile }}
</div>
</template>
</q-field>
<q-input
@@ -99,26 +105,47 @@
@keyup.enter.stop
@update:model-value="save"
debounce="1000"
autofocus>
autofocus
>
</q-input>
<q-card-actions align="center">
<q-btn
v-if="canModify"
flat round color="blue" icon="fas fa-copy" size="sm"
@click="copytoclipboard(mygallery)"></q-btn>
flat
round
color="blue"
icon="fas fa-copy"
size="sm"
@click="copytoclipboard(mygallery)"
></q-btn>
<q-btn
v-if="canModify"
flat round color="red" icon="fas fa-trash-alt" size="sm"
@click="deleteFile(mygallery)"></q-btn>
flat
round
color="red"
icon="fas fa-trash-alt"
size="sm"
@click="deleteFile(mygallery)"
></q-btn>
</q-card-actions>
</q-card>
</div>
</div>
<div class="q-pa-sm">
<div v-if="edit" class="q-gutter-sm " style="max-height: 200px; width: 208px;">
<div
v-if="edit"
class="q-gutter-sm"
style="max-height: 200px; width: 208px"
>
<q-uploader
:label="single && (gallerylist.length > 0 && gallerylist[0].imagefile !== '') ? 'Sostituisci Immagine' : 'Aggiungi Immagine'"
:label="
single &&
gallerylist.length > 0 &&
gallerylist[0].imagefile !== ''
? 'Sostituisci Immagine'
: 'Aggiungi Immagine'
"
accept="image/*"
:url="getUrl()"
:headers="tools.getheaders()"
@@ -147,14 +174,43 @@
<q-bar class="bg-primary text-white">
<q-space />
<q-btn dense flat icon="minimize" @click="maximizedToggle = false" :disable="!maximizedToggle">
<q-tooltip v-if="maximizedToggle" :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`">Minimize</q-tooltip>
<q-btn
dense
flat
icon="minimize"
@click="maximizedToggle = false"
:disable="!maximizedToggle"
>
<q-tooltip
v-if="maximizedToggle"
:class="
($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
"
>Minimize</q-tooltip
>
</q-btn>
<q-btn dense flat icon="crop_square" @click="maximizedToggle = true" :disable="maximizedToggle">
<q-tooltip v-if="!maximizedToggle" :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`">Maximize</q-tooltip>
<q-btn
dense
flat
icon="crop_square"
@click="maximizedToggle = true"
:disable="maximizedToggle"
>
<q-tooltip
v-if="!maximizedToggle"
:class="
($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
"
>Maximize</q-tooltip
>
</q-btn>
<q-btn dense flat icon="close" v-close-popup>
<q-tooltip :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`">{{t('dialog.close')}}</q-tooltip>
<q-tooltip
:class="
($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
"
>{{ t('dialog.close') }}</q-tooltip
>
</q-btn>
</q-bar>
@@ -164,7 +220,6 @@
<q-card-section class="q-pt-none">
<div class="row">
<div v-for="(mygallery, index) in getlistimages()" :key="index">
<div
class="q-pa-sm barwidth"
@@ -172,49 +227,62 @@
@dragleave="onDragLeave"
@dragover="onDragOver"
>
<q-bar
class="bg-primary text-white"
>
<q-bar class="bg-primary text-white">
<q-btn flat round dense icon="menu" class="q-mr-sm" />
<q-btn
v-if="canModify"
flat round icon="fas fa-copy" size="sm"
@click="copytoclipboard(mygallery)"></q-btn>
<div>
Foto {{ index + 1 }}
</div>
flat
round
icon="fas fa-copy"
size="sm"
@click="copytoclipboard(mygallery)"
></q-btn>
<div>Foto {{ index + 1 }}</div>
<q-space></q-space>
<q-btn v-if="canModify" flat round color="red" icon="fas fa-trash-alt"
@click="deleteFile(mygallery)"></q-btn>
<q-btn
v-if="canModify"
flat
round
color="red"
icon="fas fa-trash-alt"
@click="deleteFile(mygallery)"
></q-btn>
</q-bar>
<q-card
:id="mygallery._id" :class="getclass()"
:id="mygallery._id"
:class="getclass()"
:data-ind="index"
:draggable="canModify"
@dragstart="onDragStart"
@drop="onDrop"
>
<q-img
:src="getsrcimg(mygallery)"
:src="tools.getsrcimg(mygallery, getrealdirectory())"
:class="getclimg()"
@click="ImgFullScreen(mygallery)"
:alt="mygallery.alt">
<div v-if="mygallery.description" class="absolute-bottom text-shadow">
:alt="mygallery.alt"
>
<div
v-if="mygallery.description"
class="absolute-bottom text-shadow"
>
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
<div class="text-subtitle-carica text-trans">{{ mygallery.description }}</div>
<div class="text-subtitle-carica text-trans">
{{ mygallery.description }}
</div>
</div>
</q-img>
<q-card-section>
<q-field
v-if="canModify"
stack-label
dense
label="Nome File">
<q-field v-if="canModify" stack-label dense label="Nome File">
<template v-slot:control>
<div class="self-center full-width no-outline" tabindex="0">{{ mygallery.imagefile }}</div>
<div
class="self-center full-width no-outline"
tabindex="0"
>
{{ mygallery.imagefile }}
</div>
</template>
</q-field>
<q-input
v-if="canModify"
@@ -224,17 +292,15 @@
@keyup.enter.stop
@update:model-value="save"
debounce="1000"
autofocus>
autofocus
>
</q-input>
</q-card-section>
</q-card>
</div>
</div>
<div
v-if="canModify"
class="q-pa-sm">
<div class="q-gutter-sm " style="max-height: 200px; width: 208px;">
<div v-if="canModify" class="q-pa-sm">
<div class="q-gutter-sm" style="max-height: 200px; width: 208px">
<q-uploader
label="Aggiungi Immagine"
accept="image/*"
@@ -252,24 +318,34 @@
</div>
</div>
<div v-if="!isInModif && !isListImgValid && imagebak">
<q-card :class="getclass()" @click="ImgFullScreen(mygallery)">
<q-img
:src="imagebak" :class="getclimg()">
</q-img>
<q-img :src="imagebak" :class="getclimg()"> </q-img>
</q-card>
</div>
</div>
<q-card-actions align="right">
<q-btn v-if="canModify" flat label="Annulla" color="primary" v-close-popup/>
<q-btn v-if="canModify" label="salva" color="primary" v-close-popup @click="save"/>
<q-btn v-if="!canModify" label="Chiudi" color="primary" v-close-popup/>
<q-btn
v-if="canModify"
flat
label="Annulla"
color="primary"
v-close-popup
/>
<q-btn
v-if="canModify"
label="salva"
color="primary"
v-close-popup
@click="save"
/>
<q-btn
v-if="!canModify"
label="Chiudi"
color="primary"
v-close-popup
/>
</q-card-actions>
</q-card-section>
</q-card>
</q-dialog>
@@ -280,7 +356,12 @@
transition-hide="slide-down"
>
<q-card class="my-card">
<q-img v-if="fullscreensrc" alt="fullscreen" :src="fullscreensrc" @click="fullscreen = false"></q-img>
<q-img
v-if="fullscreensrc"
alt="fullscreen"
:src="fullscreensrc"
@click="fullscreen = false"
></q-img>
</q-card>
</q-dialog>
</template>

View File

@@ -233,7 +233,7 @@ export default defineComponent({
if (!myel.value.listcards)
myel.value.listcards = []
myel.value.listcards.push({ _id: objectId(), imagefile: '', alt: '', description: '' })
myel.value.listcards.push({ _id: objectId(), imagefile: '', alt: '', description: '', vers_img: 0 })
modifElem()
@@ -299,6 +299,7 @@ export default defineComponent({
} else if ((props.myelem.type === shared_consts.ELEMTYPE.IMGTITLE) ||
(props.myelem.type === shared_consts.ELEMTYPE.IMAGE)) {
myel.value.image = myval
myel.value.vers_img = tools.getGenerateVersionImage()
}
modifElem()
}
@@ -312,13 +313,13 @@ export default defineComponent({
|| (myel.value.type === shared_consts.ELEMTYPE.CAROUSEL_IMGS)
}
function updateElem(myvalue: any) {
/*function updateElem(myvalue: any) {
console.log('updateElem', myvalue)
if (myel.value.type === shared_consts.ELEMTYPE.IMGTITLE) {
myel.value.container = myvalue
}
modifElem()
}
}*/
function generateSizeOptions() {
const options = [];
@@ -434,7 +435,7 @@ export default defineComponent({
costanti,
delRecCard,
saveCard,
updateElem,
// updateElem,
showAnimation,
tabCard,
tabElemsText,

View File

@@ -746,6 +746,18 @@
:fieldtype="costanti.FieldType.image"
>
</CMyFieldRec>
<CMyFieldRec
title="Versione Img:"
table="myelems"
:id="myel._id"
:rec="myel"
field="vers_img"
@update:model-value="modifElem"
:canEdit="true"
:canModify="true"
:fieldtype="costanti.FieldType.number"
>
</CMyFieldRec>
</div>
</div>

View File

@@ -148,11 +148,10 @@ export default defineComponent({
const { setValDb, getValDb } = MixinBase()
function showandsel(row: any, col: any, newval: any, valinitial: any) {
console.log('showandsel CMyFieldDb', row, col, newval)
console.log('showandsel CMyFieldDb:', newval)
console.log('subkey', props.mysubkey, 'sskey', props.mysubsubkey)
if (newval !== valinitial) {
setValDb($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField)
}
tools.saveInDBForTypes($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField);
}

View File

@@ -184,8 +184,9 @@ export default defineComponent({
if (props.nosaveToDb)
return
if (newval !== valinitial)
setValDb($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value, props.specialField)
if (newval !== valinitial) {
tools.saveInDBForTypes($q, mykey.value, newval, props.fieldtype || col.fieldtype, false, props.table, mysubkey.value, props.id, props.indrec, mysubsubkey.value, props.specialField)
}
}

View File

@@ -294,6 +294,7 @@ export default defineComponent({
myImgGall.value = [{
_id: '',
imagefile: myvalue.value,
vers_img: 1,
// order: 1,
alt: 'img',
}]
@@ -629,7 +630,7 @@ export default defineComponent({
function savefield(value: any, initialval: any, myq: any) {
if (!props.insertMode) {
myvalue.value = value
setValDb(myq, props.field, myvalue.value, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey, props.specialField)
tools.saveInDBForTypes(myq, props.field, myvalue.value, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey, props.specialField)
}
}
@@ -644,7 +645,7 @@ export default defineComponent({
else
myvalue.value = value
setValDb($q, props.field, myvalue, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey, props.specialField)
tools.saveInDBForTypes($q, props.field, myvalue, props.type, props.serv, props.table, props.subfield, props.id, props.indrec, props.mysubsubkey, props.specialField)
}
@@ -826,7 +827,12 @@ export default defineComponent({
function uploaded(info: any) {
if (info.files) {
if (info.files[0].name.imagefile) {
myvalue.value = tools.geturlrelativeprofile() + '/' + getMyUsername() + '/' + info.files[0].name.imagefile
} else {
myvalue.value = tools.geturlrelativeprofile() + '/' + getMyUsername() + '/' + info.files[0].name
}
console.log('uploaded', myvalue.value)
savefield(myvalue.value, '', $q)
}

View File

@@ -389,7 +389,9 @@
"
:title="tools.getTitleGall(table)"
:directory="tools.getDirectoryGall(myrow, table, mypath)"
:imgGall="myvalue"
:imgGall="
myvalue && myvalue.imagefile ? myvalue.imagefile : myvalue
"
:isInModif="isInModif"
:edit="isviewfield() && isInModif"
:canModify="canModify && isInModif"
@@ -426,7 +428,11 @@
"
:title="tools.getTitleGall(table)"
:directory="tools.getDirectoryGall(myrow, table, mypath)"
:imgGall="[{ imagefile: myvalue }]"
:imgGall="
myvalue && myvalue.imagefile
? [myvalue]
: [{ imagefile: myvalue, vers_img: 1 }]
"
:edit="isviewfield()"
:canModify="canModify"
:isInModif="isInModif"
@@ -490,7 +496,11 @@
"
:title="tools.getTitleGall(table)"
:directory="tools.getDirectoryGall(myrow, table, mypath)"
:imgGall="[{ imagefile: myvalue }]"
:imgGall="
myvalue && myvalue.imagefile
? [myvalue]
: [{ imagefile: myvalue, vers_img: 1 }]
"
:edit="isviewfield()"
:canModify="canModify"
:isInModif="isInModif"
@@ -545,7 +555,9 @@
"
:title="tools.getTitleGall(table)"
:directory="tools.getDirectoryGall(myrow, table, mypath)"
:imgGall="[myvalue]"
:imgGall="
myvalue && myvalue.imagefile ? [myvalue.imagefile] : [myvalue]
"
:edit="isviewfield()"
:canModify="canModify"
:isInModif="isInModif"
@@ -1601,7 +1613,11 @@
"
:title="tools.getTitleGall(table)"
:directory="tools.getDirectoryGall(myrow, table, mypath)"
:imgGall="[{ imagefile: myvalue }]"
:imgGall="
myvalue && myvalue.imagefile
? [myvalue]
: [{ imagefile: myvalue, vers_img: 1 }]
"
:edit="isviewfield()"
:canModify="canModify"
:isInModif="isInModif"

View File

@@ -151,7 +151,7 @@ export default defineComponent({
console.log('showandsel CMyFieldDb', row, col, newval)
if (newval !== valinitial) {
setValDb($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField)
tools.saveInDBForTypes($q, props.mykey, newval, props.type, props.serv, props.table, props.mysubkey, props.id, props.indrec, props.mysubsubkey, props.specialField)
}
}

View File

@@ -81,7 +81,7 @@ export default defineComponent({
if (Array.isArray(myarr)) {
myarr.forEach((imgfile: string) => {
if (imgfile) {
gallerylist.value.push({ imagefile: imgfile })
gallerylist.value.push({ imagefile: imgfile, vers_img: 1 })
}
})
}
@@ -92,11 +92,6 @@ export default defineComponent({
}
function showandsave(value: any) {
console.log('EMIT: showandsave')
emit('showandsave', value)
}
function getnumimages() {
if (gallerylist.value)
return gallerylist.value.length
@@ -218,12 +213,18 @@ export default defineComponent({
function uploaded(info: any) {
console.log('uploaded', info)
let vers_img = tools.getGenerateVersionImage()
if (gallerylist.value) {
for (const file of info.files) {
gallerylist.value.push({ imagefile: file.name })
if (file.name.imagefile) {
gallerylist.value.push(file.name)
} else {
gallerylist.value.push({ imagefile: file.name, vers_img })
}
}
console.log('gallerylist', gallerylist.value)
console.log('CSELECtIMAGE gallerylist', gallerylist.value)
}
}
@@ -288,11 +289,11 @@ export default defineComponent({
}
function save() {
console.log('CGallery save', gallerylist.value)
console.log('CSelectImage save', gallerylist.value)
if (gallerylist.value.length > 0) {
emit('showandsave', gallerylist.value[0].imagefile)
emit('showandsave', gallerylist.value[0])
} else {
emit('showandsave', '')
emit('showandsave', { imagefile: '' })
}
}
@@ -300,21 +301,6 @@ export default defineComponent({
return ''
}
function getsrcimg(imgfile: any) {
if (!imgfile.imagefile) {
return 'images/noimg.png';
}
if (imgfile) {
if (tools.getextfile(imgfile.imagefile) === 'pdf')
return 'images/images/pdf.jpg'
else
return costanti.DIR_UPLOAD + props.directory + '/' + imgfile.imagefile
} else {
return 'images/noimg.png';
}
}
function getParamDir() {
return tools.escapeslash(props.directory)
}
@@ -341,18 +327,25 @@ export default defineComponent({
}
onMounted(created)
function getrealdirectory() {
if (props.directory == 'productinfos')
return 'products'
else
return props.directory
}
return {
getlistimages,
onDragStart,
onDragEnter,
onDragLeave,
onDragOver,
getrealdirectory,
onDrop,
getclass,
getclimg,
copytoclipboard,
deleteFile,
getsrcimg,
tools,
uploaded,
gallerylist,

View File

@@ -7,45 +7,54 @@
<div v-for="(imgfile, index) in getlistimages()" :key="index">
<div v-if="index === 0">
<q-img
:src="getsrcimg(imgfile)" :class="getclimg()">
<div v-if="getnumimages() > 1" class="absolute-bottom text-shadow no-padding">
:src="tools.getsrcimg(imgfile, getrealdirectory())"
:class="getclimg()"
>
<div
v-if="getnumimages() > 1"
class="absolute-bottom text-shadow no-padding"
>
({{ getnumimages() }})
</div>
</q-img>
</div>
</div>
</q-card>
<div v-else-if="!isInModif && !isListImgValid && imagebak">
<q-card v-if="imagebak !== costanti.NESSUN_IMMAGINE" :class="getclass()" @click="ImgFullScreen(imgfile)">
<q-img
:src="imagebak" :class="getclimg()">
</q-img>
<q-card
v-if="imagebak !== costanti.NESSUN_IMMAGINE"
:class="getclass()"
@click="ImgFullScreen(imgfile)"
>
<q-img :src="imagebak" :class="getclimg()"> </q-img>
</q-card>
</div>
<div v-else>
<q-card :class="getclass()" @click="apri">
<q-img
src="images/noimg.png" :class="getclimg()"
alt="no image">
<q-img src="images/noimg.png" :class="getclimg()" alt="no image">
</q-img>
</q-card>
</div>
<q-btn
v-if="isInModif"
color="primary" @click="apri"
color="primary"
@click="apri"
icon="fas fa-file-upload"
:label="$t('gallery.load_image')">
:label="$t('gallery.load_image')"
>
</q-btn>
</div>
</div>
<div v-else>
<div v-if="!isListImgValid">
<q-btn
flat round color="blue" icon="fas fa-tools" size="md"
@click="apri"></q-btn>
flat
round
color="blue"
icon="fas fa-tools"
size="md"
@click="apri"
></q-btn>
</div>
<div v-else>
<div class="row">
@@ -57,34 +66,34 @@
class="q-pa-sm q-gutter-sm"
@dragenter="onDragEnter"
@dragleave="onDragLeave"
@dragover="onDragOver">
@dragover="onDragOver"
>
<q-card
:id="mygallery._id" :class="getclass()"
:id="mygallery._id"
:class="getclass()"
:draggable="canModify"
@dragstart="onDragStart"
@drop="onDrop"
>
<q-img
:src="getsrcimg(mygallery)"
:src="tools.getsrcimg(mygallery, getrealdirectory())"
:class="getclimg()"
:alt="mygallery.alt">
:alt="mygallery.alt"
>
<div class="absolute-bottom text-shadow">
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
<div class="text-subtitle-carica text-trans">{{ mygallery.description }}</div>
<div class="text-subtitle-carica text-trans">
{{ mygallery.description }}
</div>
</div>
</q-img>
<q-field
v-if="canModify"
stack-label
dense
label="Nome File">
<q-field v-if="canModify" stack-label dense label="Nome File">
<template v-slot:control>
<div class="self-center full-width no-outline" tabindex="0">{{ mygallery.imagefile }}</div>
<div class="self-center full-width no-outline" tabindex="0">
{{ mygallery.imagefile }}
</div>
</template>
</q-field>
<q-input
@@ -95,24 +104,39 @@
@keyup.enter.stop
@update:model-value="save"
debounce="1000"
autofocus>
autofocus
>
</q-input>
<q-card-actions align="center">
<q-btn
v-if="canModify"
flat round color="blue" icon="fas fa-copy" size="sm"
@click="copytoclipboard(mygallery)"></q-btn>
flat
round
color="blue"
icon="fas fa-copy"
size="sm"
@click="copytoclipboard(mygallery)"
></q-btn>
<q-btn
v-if="canModify"
flat round color="red" icon="fas fa-trash-alt" size="sm"
@click="deleteFile(mygallery)"></q-btn>
flat
round
color="red"
icon="fas fa-trash-alt"
size="sm"
@click="deleteFile(mygallery)"
></q-btn>
</q-card-actions>
</q-card>
</div>
</div>
<div class="q-pa-sm">
<div v-if="edit" class="q-gutter-sm " style="max-height: 200px; width: 208px;">
<div
v-if="edit"
class="q-gutter-sm"
style="max-height: 200px; width: 208px"
>
<q-uploader
label="Aggiungi Immagine"
accept="image/*"
@@ -143,14 +167,43 @@
<q-bar class="bg-primary text-white">
<q-space />
<q-btn dense flat icon="minimize" @click="maximizedToggle = false" :disable="!maximizedToggle">
<q-tooltip v-if="maximizedToggle" :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`">Minimize</q-tooltip>
<q-btn
dense
flat
icon="minimize"
@click="maximizedToggle = false"
:disable="!maximizedToggle"
>
<q-tooltip
v-if="maximizedToggle"
:class="
($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
"
>Minimize</q-tooltip
>
</q-btn>
<q-btn dense flat icon="crop_square" @click="maximizedToggle = true" :disable="maximizedToggle">
<q-tooltip v-if="!maximizedToggle" :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`">Maximize</q-tooltip>
<q-btn
dense
flat
icon="crop_square"
@click="maximizedToggle = true"
:disable="maximizedToggle"
>
<q-tooltip
v-if="!maximizedToggle"
:class="
($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
"
>Maximize</q-tooltip
>
</q-btn>
<q-btn dense flat icon="close" v-close-popup>
<q-tooltip :class="($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`">{{t('dialog.close')}}</q-tooltip>
<q-tooltip
:class="
($q.dark.isActive ? `bg-black` : `bg-white`) + ` text-primary`
"
>{{ t('dialog.close') }}</q-tooltip
>
</q-btn>
</q-bar>
@@ -160,7 +213,6 @@
<q-card-section class="q-pt-none">
<div class="row">
<div v-for="(mygallery, index) in getlistimages()" :key="index">
<div
class="q-pa-sm barwidth"
@@ -168,49 +220,62 @@
@dragleave="onDragLeave"
@dragover="onDragOver"
>
<q-bar
class="bg-primary text-white"
>
<q-bar class="bg-primary text-white">
<q-btn flat round dense icon="menu" class="q-mr-sm" />
<q-btn
v-if="canModify"
flat round icon="fas fa-copy" size="sm"
@click="copytoclipboard(mygallery)"></q-btn>
<div>
Foto {{ index + 1 }}
</div>
flat
round
icon="fas fa-copy"
size="sm"
@click="copytoclipboard(mygallery)"
></q-btn>
<div>Foto {{ index + 1 }}</div>
<q-space></q-space>
<q-btn v-if="canModify" flat round color="red" icon="fas fa-trash-alt"
@click="deleteFile(mygallery)"></q-btn>
<q-btn
v-if="canModify"
flat
round
color="red"
icon="fas fa-trash-alt"
@click="deleteFile(mygallery)"
></q-btn>
</q-bar>
<q-card
:id="mygallery._id" :class="getclass()"
:id="mygallery._id"
:class="getclass()"
:data-ind="index"
:draggable="canModify"
@dragstart="onDragStart"
@drop="onDrop"
>
<q-img
:src="getsrcimg(mygallery)"
:src="tools.getsrcimg(mygallery, getrealdirectory())"
:class="getclimg()"
@click="ImgFullScreen(mygallery)"
:alt="mygallery.alt">
<div v-if="mygallery.description" class="absolute-bottom text-shadow">
:alt="mygallery.alt"
>
<div
v-if="mygallery.description"
class="absolute-bottom text-shadow"
>
<!-- <div class="text-h6 text-trans">{{ mygallery.description }} </div> -->
<div class="text-subtitle-carica text-trans">{{ mygallery.description }}</div>
<div class="text-subtitle-carica text-trans">
{{ mygallery.description }}
</div>
</div>
</q-img>
<q-card-section>
<q-field
v-if="canModify"
stack-label
dense
label="Nome File">
<q-field v-if="canModify" stack-label dense label="Nome File">
<template v-slot:control>
<div class="self-center full-width no-outline" tabindex="0">{{ mygallery.imagefile }}</div>
<div
class="self-center full-width no-outline"
tabindex="0"
>
{{ mygallery.imagefile }}
</div>
</template>
</q-field>
<q-input
v-if="canModify"
@@ -220,17 +285,15 @@
@keyup.enter.stop
@update:model-value="save"
debounce="1000"
autofocus>
autofocus
>
</q-input>
</q-card-section>
</q-card>
</div>
</div>
<div
v-if="canModify"
class="q-pa-sm">
<div class="q-gutter-sm " style="max-height: 200px; width: 208px;">
<div v-if="canModify" class="q-pa-sm">
<div class="q-gutter-sm" style="max-height: 200px; width: 208px">
<q-uploader
label="Aggiungi Immagine"
accept="image/*"
@@ -248,24 +311,34 @@
</div>
</div>
<div v-if="!isInModif && !isListImgValid && imagebak">
<q-card :class="getclass()" @click="ImgFullScreen(mygallery)">
<q-img
:src="imagebak" :class="getclimg()">
</q-img>
<q-img :src="imagebak" :class="getclimg()"> </q-img>
</q-card>
</div>
</div>
<q-card-actions align="right">
<q-btn v-if="canModify" flat label="Annulla" color="primary" v-close-popup/>
<q-btn v-if="canModify" label="salva" color="primary" v-close-popup @click="save"/>
<q-btn v-if="!canModify" label="Chiudi" color="primary" v-close-popup/>
<q-btn
v-if="canModify"
flat
label="Annulla"
color="primary"
v-close-popup
/>
<q-btn
v-if="canModify"
label="salva"
color="primary"
v-close-popup
@click="save"
/>
<q-btn
v-if="!canModify"
label="Chiudi"
color="primary"
v-close-popup
/>
</q-card-actions>
</q-card-section>
</q-card>
</q-dialog>
@@ -276,7 +349,12 @@
transition-hide="slide-down"
>
<q-card class="my-card">
<q-img v-if="fullscreensrc" alt="fullscreen" :src="fullscreensrc" @click="fullscreen = false"></q-img>
<q-img
v-if="fullscreensrc"
alt="fullscreen"
:src="fullscreensrc"
@click="fullscreen = false"
></q-img>
</q-card>
</q-dialog>
</template>

View File

@@ -7,7 +7,6 @@
</p>
</div>
<!--Prova URL : {{env('PROVA_PAOLO')}}-->
<q-form ref="myForm" @submit="onSubmit" @reset="onReset">
<div class="q-gutter-xs">
<q-input

View File

@@ -294,6 +294,18 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false
},
{
active: true,
order: 1000,
path: '/404error',
materialIcon: 'fas fa-calendar-plus',
name: 'otherpages.error404',
component: () => import('@/root/My404page/My404page.vue'),
inmenu: false,
infooter: false
},
]
return baseroutes

View File

@@ -149,6 +149,7 @@ export interface IMyElem {
active?: boolean
class?: string
image?: string
vers_img?: number
class2?: string
class3?: string
class4?: string
@@ -639,6 +640,7 @@ export interface ITimeLineMain {
export interface IImgGallery {
_id?: string
imagefile: string
vers_img: number
// order?: number
alt?: string
description?: string
@@ -647,6 +649,7 @@ export interface IImgGallery {
export interface IMyCard {
_id?: string
imagefile?: string
vers_img?: number
alt?: string
description?: string
style?: string

View File

@@ -1,13 +1,10 @@
<template>
<div>
<q-banner rounded class="bg-negative text-white">
<div class="text-h6 text-center">
Pagina non Trovata
</div>
<div class="text-h6 text-center">La Pagina non è stata Trovata</div>
</q-banner>
</div>
</template>
<script lang="ts" src="./My404page.ts">
</script>
im

View File

@@ -47,7 +47,7 @@ function getRoutesAd(site: ISites) {
order: 1020,
path: '/admin/server',
materialIcon: 'event_seat',
name: 'pages.server',
name: 'otherpages.server',
component: () => import('@/views/admin/server/server.vue'),
level_parent: 0.0,
level_child: 0.5,

View File

@@ -130,6 +130,7 @@ const msg_it = {
myactivities: 'Attività',
myactivities2: 'Mie Attività',
product: 'Prodotto',
server: 'Server',
catalogo: 'Catalogo',
orderscart: 'Ordini',
sito_offline: 'Sito in Aggiornamento',

View File

@@ -135,6 +135,7 @@ export const colgallery = [
export const colmylistcards = [
AddCol({ name: 'imagefile', label_trans: 'imagefile', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'image', label_trans: 'image', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'vers_img', label_trans: 'vers_img', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'alt', label_trans: 'alt', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'description', label_trans: 'description', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'style', label_trans: 'style' }),

View File

@@ -16,6 +16,8 @@ import {
TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, IUserExport, ISpecialField, IAccount, IMyCircuit, ISendCoin, IMovement, IMovVisu, INotif, IMyElem, IMyCard, ILabelValue, ILabelValueStr, IAnim, ILang, IGroupShort, IPagination, IFavorite, IBookmark,
} from '@model'
import MixinBase from '@/mixins/mixin-base'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { addToDate } from '@quasar/quasar-ui-qcalendar'
@@ -4425,9 +4427,13 @@ export const tools = {
getextfile(filename: string) {
if (filename) {
try {
const mystr = filename.split('.')
if (mystr)
return mystr.pop()!.toLowerCase()
} catch (e) {
return ''
}
}
return ''
},
@@ -5240,7 +5246,7 @@ export const tools = {
const site = globalStore.site
if (site) {
return site.host!.replace(/^(https?:\/\/)/, '');
return site.host ? site.host!.replace(/^(https?:\/\/)/, '') : '';
}
return ''
},
@@ -7883,19 +7889,33 @@ export const tools = {
getImgFileByElem(elem: IMyElem, reccard?: IMyCard) {
if (elem) {
let addtourl = ''
if (elem && elem.vers_img) {
addtourl = '?v=' + elem.vers_img
}
if (elem.type === shared_consts.ELEMTYPE.CARD) {
if (reccard?.imagefile)
return 'upload/pages/' + elem.path + '/' + reccard.imagefile
else
if (reccard?.imagefile) {
if (reccard.vers_img) {
addtourl = '?v=' + reccard.vers_img
}
return 'upload/pages/' + elem.path + '/' + reccard.imagefile + addtourl
} else
return ''
} else if (elem.type === shared_consts.ELEMTYPE.IMAGE) {
return 'upload/pages/' + elem.path + '/' + elem.container
return 'upload/pages/' + elem.path + '/' + elem.container + addtourl
} else {
return 'upload/pages/' + elem.path + '/' + elem.image
return 'upload/pages/' + elem.path + '/' + elem.image + addtourl
}
}
},
getGenerateVersionImage() {
return 100000 + Math.round(Math.random() * 899999)
},
findFirstElemInCommon(arr1: ILabelValueStr[], arr2: string[]) {
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
@@ -8584,7 +8604,11 @@ export const tools = {
},
contieneSlash(str: string) {
try {
return str.includes('/');
} catch (e) {
return ''
}
},
refreshPage() {
@@ -8781,8 +8805,68 @@ export const tools = {
// Attualmente se sei loggato puoi inserire Record
return this.isLogged() && this.isUserOk()
},
getsrcimg(gallerylist: any, dir: string) {
console.log('getsrcimg', gallerylist)
let addtourl = ''
if (!gallerylist) {
return 'images/noimg.png';
}
if (gallerylist && gallerylist.vers_img) {
addtourl = '?v=' + gallerylist.vers_img
}
if (gallerylist && !gallerylist.imagefile) {
return 'images/noimg.png';
}
if (gallerylist) {
if (this.getextfile(gallerylist.imagefile) === 'pdf')
return 'images/images/pdf.jpg'
else {
if (this.contieneSlash(gallerylist.imagefile)) {
return gallerylist.imagefile + addtourl
} else {
return costanti.DIR_UPLOAD + dir + '/' + gallerylist.imagefile + addtourl
}
}
} else {
return 'images/noimg.png';
}
},
async saveInDBForTypes($q: any, mykey: string, newval: any, type: any, serv: boolean, table?: string, mysubkey: string, id: any, indrec?: number, mysubsubkey: string, specialField: ISpecialField): boolean {
const { setValDb, getValDb } = MixinBase()
let eseguito = false
if (table === 'myelems') {
if (type === costanti.FieldType.image && newval.imagefile) {
let myval = newval.imagefile
setValDb($q, mykey, myval, type, serv, table, mysubkey, id, indrec, mysubsubkey, specialField)
myval = newval.vers_img
let mykey2 = 'vers_img'
setValDb($q, mykey2, myval, type, serv, table, mysubkey, id, indrec, mysubsubkey, specialField)
eseguito = true
}
}
if (!eseguito) {
// if (newval !== valinitial) {
setValDb($q, mykey, newval, type, serv, table, mysubkey, id, indrec, mysubsubkey, specialField)
// }
}
return eseguito
},
// FINE !

View File

@@ -989,7 +989,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
},
async saveCfgServerKey(dataval: ICfgServer) {
console.log('saveCfgServerKey dataval', dataval)
//console.log('saveCfgServerKey dataval', dataval)
const ris = await Api.SendReq('/admin/updateval', 'POST', { pairval: dataval })
},

View File

@@ -0,0 +1,36 @@
.results-container {
border: 2px solid #4CAF50;
/* Colore del bordo */
border-radius: 10px;
/* Angoli arrotondati */
padding: 20px;
/* Spaziatura interna */
background-color: #f9f9f9;
/* Colore di sfondo */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
/* Ombra */
margin: 20px 0;
/* Margine sopra e sotto */
}
.results-title {
color: #333;
/* Colore del testo */
font-family: Arial, sans-serif;
/* Tipo di font */
margin-bottom: 15px;
/* Spaziatura sotto il titolo */
font-size: 24px;
/* Dimensione del font */
}
.results-content {
color: #555;
/* Colore del testo dei risultati */
font-family: Arial, sans-serif;
/* Tipo di font */
font-size: 18px;
/* Dimensione del font */
white-space: pre-wrap;
/* Mantiene gli spazi e le interruzioni di riga */
}

View File

@@ -36,6 +36,7 @@ export default defineComponent({
const defpersmax = ref(200)
const search_username = ref('')
const replace_username = ref('')
const risultato = ref('')
const incaricamento = ref(false)
function EseguiFunz(miafunz: string, search_username?: string, replace_username?: string, valmin?: number, valmax?: number, circuitId?: string) {
@@ -80,12 +81,9 @@ export default defineComponent({
ris.value = ''
if (miafunz === 'visuPlacca') {
placca.value = risfunz.placca
} else if (miafunz === 'visuListaIngresso' || miafunz === 'visuListaIngressoNuovi' || miafunz === 'visuNaviUtentiEliminati'
|| miafunz === 'visuListaNave' || miafunz === 'visuNave' || miafunz === 'creaNavi'
|| (miafunz === 'visuStat')) {
placca.value = risfunz.mystr
risultato.value = ''
if (risfunz.data && risfunz.data.mystr) {
risultato.value = risfunz.data.mystr
}
})
}
@@ -106,6 +104,7 @@ export default defineComponent({
circuitStore,
incaricamento,
ris,
risultato,
}
},
})

View File

@@ -98,29 +98,6 @@
<br>
</div>
<div v-if="!incaricamento" class="row">
<CMyFieldDb title="Riga"
mykey="riga"
:serv="false"
:type="costanti.FieldType.number">
</CMyFieldDb>
<CMyFieldDb title="Col"
mykey="col"
:serv="false"
:type="costanti.FieldType.number">
</CMyFieldDb>
<CMyFieldDb title="Visu_TEST"
mykey="VISU_TEST"
:serv="false"
:type="costanti.FieldType.boolean">
</CMyFieldDb>
<CMyFieldDb title="VISU_NAVE_BOT"
mykey="VISU_NAVE_BOT"
:serv="false"
:type="costanti.FieldType.boolean">
</CMyFieldDb>
</div>
<div class="row">
<q-btn label="Statistiche" color="warning" @click="EseguiFunz('visuStat')"></q-btn>
@@ -705,8 +682,20 @@
color="positive"
@click="EseguiFunz('insertGeojsonToMongoDB')"
></q-btn>
<q-btn
label="Lista Tabelle Database (spazio occupato)"
color="positive"
@click="EseguiFunz('listCollectionsBySize')"
></q-btn>
<br />
</div>
<div class="results-container">
<h2 class="results-title">Risultati:</h2>
<div class="results-content">
{{ risultato }}
</div>
</div>
<br />
<br />
<br />