Compare commits

15 Commits

Author SHA1 Message Date
Paolo Arena
8b4cbe153b - Iscrizione Conacreis 2021-06-04 17:28:44 +02:00
Paolo Arena
cec0b4857f - Iscrizione Conacreis 2021-05-10 01:50:15 +02:00
Paolo Arena
1e8f58b930 - Iscrizione Conacreis
- Ordini
- Carrello
2021-04-30 01:31:44 +02:00
Paolo Arena
8ae63c3357 ECommerce Ordini Email 1 2021-03-30 02:21:59 +02:00
Paolo Arena
fada2ec2be Reportistica Ore 3 2021-02-25 03:00:02 +01:00
Paolo Arena
594fdcbee4 Reportistica Ore 3 2021-02-25 02:59:08 +01:00
Paolo Arena
8f9028ddba Reportistica Ore 2 2021-02-24 04:48:01 +01:00
Paolo Arena
e752c406dc Reportistica Ore 1 2021-02-21 02:05:17 +01:00
Paolo Arena
7a202fbe8e Progetti 2021-02-18 12:19:17 +01:00
Paolo Arena
0e6a350f4e Calcolo Hours 2021-02-11 02:21:08 +01:00
Paolo Arena
b9d451bd49 Project e Todos 2021-02-03 01:32:09 +01:00
Paolo Arena
316ebbb78b Ordini 2021-01-18 00:47:30 +01:00
Paolo Arena
d31a5e88ec Carrello Spesa 2020-12-25 03:54:41 +01:00
Paolo Arena
f094af396b Carrello Spesa 2020-12-25 03:53:36 +01:00
Paolo Arena
1ee08b57ab Creazione tabella Product 2020-12-21 02:15:34 +01:00
83 changed files with 1263 additions and 28396 deletions

1
note.txt Executable file
View File

@@ -0,0 +1 @@
"@quasar/app": "1.9.6",

28137
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -70,7 +70,6 @@
"vue-scroll-reveal": "^1.0.11",
"vue-svgicon": "^3.1.0",
"vue-tel-input": "^4.1.1",
"vue2-dragula": "^2.5.4",
"vuelidate": "^0.7.4",
"vuex": "^3.0.1",
"vuex-class": "^0.3.1",
@@ -94,7 +93,7 @@
"@babel/plugin-syntax-import-meta": "^7.2.0",
"@babel/preset-env": "^7.4.2",
"@quasar/app": "1.5.2",
"@quasar/quasar-app-extension-qcalendar": "^1.3.14",
"@quasar/quasar-app-extension-qcalendar": "^2.0.0",
"@quasar/quasar-app-extension-qmediaplayer": "^1.0.17",
"@quasar/quasar-app-extension-qscroller": "1.0.5",
"@quasar/quasar-app-extension-typescript": "^1.0.0-alpha.11",

View File

@@ -94,6 +94,7 @@ module.exports = function (ctx) {
store: 'src/store/index.ts'
},
// app plugins (/src/plugins)
// app plugins (/src/plugins)
boot: [
{ path: 'vue-i18n', server: true, client: true },
{ path: 'vue-meta', server: true, client: true },
@@ -104,10 +105,11 @@ module.exports = function (ctx) {
{ path: 'error-handler', server: true, client: true },
{ path: 'globalroutines', server: true, client: true },
{ path: 'vue-idb', server: true, client: true },
// { path: 'dragula', server: true, client: true },
{ path: 'guard', server: true, client: true },
{ path: 'vuetelinput', server: true, client: true },
{ path: 'mycharts', server: true, client: true }],
// { path: 'googlemap', server: true, client: true }],
// { path: 'googlemap', server: true, client: true }],
css: [
'app.styl'
],
@@ -166,6 +168,8 @@ module.exports = function (ctx) {
framework: {
components: [
'QLayout',
'QBreadcrumbs',
'QBreadcrumbsEl',
'QDrawer',
'QItemSection',
'QHeader',
@@ -306,12 +310,17 @@ module.exports = function (ctx) {
background_color: '#ffffff',
icons: [
{
'src': 'statics/icons/android-chrome-192x192.png',
'sizes': '192x192',
'src': 'statics/icons/android-chrome-36x36.png',
'sizes': '36x36',
'type': 'image/png'
},
{
'src': 'statics/icons/android-chrome-512x512',
'src': 'statics/icons/android-chrome-96x96.png',
'sizes': '96x96',
'type': 'image/png'
},
{
'src': 'statics/icons/android-chrome-512x512.png',
'sizes': '512x512',
'type': 'image/png'
}

View File

@@ -6,7 +6,7 @@
// Questo è il swSrc
console.log(' [ VER-0.0.62 ] _---------________------ PAO: this is my custom service worker');
console.log(' [ VER-0.0.83 ] _---------________------ PAO: this is my custom service worker');
importScripts('../statics/js/idb.js');
importScripts('../statics/js/storage.js');
@@ -23,7 +23,7 @@ if (self.location.hostname.startsWith('test')) {
const cfgenv = {
serverweb: self.location.protocol + "//" + self.location.hostname + ':' + port,
dbname: 'mydb3',
dbversion: 11,
dbversion: 12,
}
// console.log('serverweb', cfgenv.serverweb)
@@ -221,7 +221,11 @@ if (workbox) {
}
workbox.routing.registerRoute(function (routeData) {
return (routeData.event.request.headers.get('accept').includes('text/html'));
const myaccept = routeData.event.request.headers.get('accept')
if (myaccept)
return (myaccept.includes('text/html'));
else
return null
}, function (args) {
return caches.match(args.event.request)
.then(function (response) {

View File

@@ -24,6 +24,9 @@ register(process.env.SERVICE_WORKER_FILE, {
},
updated(registration) {
console.log('New content is available; please refresh.')
document.dispatchEvent(
new CustomEvent('swUpdated', { detail: registration })
)
},
offline() {
console.log('No internet connection found. App is running in offline mode.')

View File

@@ -85,7 +85,7 @@ $heightBtn: 100%;
margin-left: 3px;
margin-right: 3px;
color: #000;
font-size: 1rem;
font-size: 0.9rem;
height: $heightBtn;
line-height: $heightBtn;
vertical-align: middle;
@@ -201,6 +201,17 @@ $heightBtn: 100%;
}
}
.text-price {
margin-bottom: 6px;
font-size: 1.10rem;
font-weight: 400;
text-shadow: .25 .25rem .5rem $grayshadow;
letter-spacing: .00937em;
&.big {
font-size: 1.5rem;
}
}
.text-subtitle2, h3 {
margin-bottom: 4px;
font-size: 1.15rem;
@@ -237,6 +248,10 @@ $heightBtn: 100%;
font-size: 0.75rem;
}
.text-subtitle4 {
font-size: 0.7rem;
}
.cltexth3 {
font-size: 1.25rem;
}
@@ -247,18 +262,45 @@ $heightBtn: 100%;
.text-sobig {
font-size: 1.50rem;
}
}
.my-card {
width: 100%;
max-width: 350px;
max-width: 300px;
min-width: 300px;
padding: 1rem 1rem;
box-shadow: none;
}
.myimgtitle {
margin-left: auto;
margin-right: auto;
width: 400px;
@media (max-width: 718px) {
margin-left: auto;
margin-right: auto;
width: 300px;
}
}
.my-card-big {
width: 100%;
padding: 1rem 1rem;
box-shadow: none;
@media (max-width: 718px) {
// PER VERSIONE MOBILE
max-width: 400px;
padding: 1rem 1rem;
}
}
.text-trans {
opacity: 0.9;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=90)";
@@ -726,6 +768,13 @@ $heightBtn: 100%;
padding: 6px;
}
.clBorderShare {
border-radius: 32px;
font-size: 1rem;
padding: 6px;
border: #666cf6 solid 3px;
}
.clBorderImportant, .clBorderSteps {
border: red solid 5px;
border-radius: 16px;
@@ -783,6 +832,18 @@ $heightBtn: 100%;
}
}
.img2 {
margin-left: auto;
margin-right: auto;
max-height: 550px;
max-width: 550px;
@media (max-width: 718px) {
max-height: 350px;
max-width: 350px;
}
}
.center-150 {
width: 150px;
margin-left: auto;
@@ -793,6 +854,10 @@ $heightBtn: 100%;
font-size: 1rem;
}
.text-h8{
font-size: 0.85rem;
}
.bordo_stondato, .bordo_stondato_blu{
margin: 4px;
border-radius: 3rem;
@@ -885,3 +950,71 @@ $heightBtn: 100%;
font-size: 0.8rem !important;
}
}
#mycontainer {
min-height:100%;
position:relative;
}
.myheader {
padding: 5px;
@media (max-width: 500px) {
padding: 1px;
}
}
#mybody {
padding: 5px;
@media (max-width: 500px) {
padding: 1px;
}
}
.myfooter{
}
.iconplusminus{
font-size: 6px;
}
.clpos{
color: #C0C0C0;
}
.clresp{
color: #206d24;
}
.clrespempty{
color: #DDDDDD;
}
@media (max-width: 600px) {
.flex-item {
padding: 1px;
margin: 1px;
}
.flex-container {
margin: 0;
padding: 0;
}
.q-tab-panel {
padding: 4px;
}
.q-item {
padding: 2px 4px;
}
}
.underline {
text-decoration: underline;
color: blue;
}
.underline:hover {
font-weight: bold;
cursor: pointer;
}
.centeritems{
place-content: center;
}

View File

@@ -8,13 +8,13 @@ import { Header } from './components/Header'
import globalroutines from './globalroutines/index'
import { GlobalStore } from './store/Modules'
import { toolsext } from '@src/store/Modules/toolsext'
import { BannerCookies, CPreloadImages, CTesseraElettronica } from '@components'
import { BannerCookies, CPreloadImages } from '@components'
import { static_data } from '@src/db/static_data'
@Component({
components: {
appHeader: Header,
BannerCookies, CPreloadImages, CTesseraElettronica
BannerCookies, CPreloadImages
},
router
})

View File

@@ -1,35 +1,35 @@
<template>
<div id="q-app">
<div>
<q-layout view="hHh Lpr lff" class="shadow-2 rounded-borders">
<app-header>
</app-header>
<q-ajax-bar></q-ajax-bar>
<div id="q-app">
<div>
<q-layout view="hHh Lpr lff" class="shadow-2 rounded-borders">
<app-header>
</app-header>
<q-ajax-bar></q-ajax-bar>
<CPreloadImages :arrimg="static_data.preLoadImages">
</CPreloadImages>
<CPreloadImages :arrimg="static_data.preLoadImages">
</CPreloadImages>
<q-page-container id="mypage" >
<div v-if="finishLoading">
<transition name="fade" mode="out-in">
<router-view/>
</transition>
</div>
<q-inner-loading id="spinner" :showing="!finishLoading">
<q-spinner-tail
color="primary"
size="4em">
</q-spinner-tail>
</q-inner-loading>
</q-page-container>
</q-layout>
</div>
<BannerCookies urlInfo="/policy"></BannerCookies>
<q-page-container id="mypage">
<div v-if="finishLoading">
<transition name="fade" mode="out-in">
<router-view/>
</transition>
</div>
<q-inner-loading id="spinner" :showing="!finishLoading">
<q-spinner-tail
color="primary"
size="4em">
</q-spinner-tail>
</q-inner-loading>
</q-page-container>
</q-layout>
</div>
<BannerCookies urlInfo="/policy"></BannerCookies>
</div>
</template>
<script lang="ts" src="./App.ts">
</script>
<style lang="scss">
@import './App';
@import './App';
</style>

View File

@@ -4,16 +4,43 @@ const msg_website_it = {
siteshortname: 'CNM',
botname: 'CNM BOT',
},
products: {
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
weight: 'Peso',
stars: 'Voto',
},
hours: {
descr: 'Descrizione',
date: 'Data',
time_start: 'Ora Inizio',
time_end: 'Ora Fine',
hours: 'Ore',
note: 'Note Extra',
},
pages: {
home: 'Home',
profile: 'Profilo',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
storehouses: 'Magazzino',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Pagamenti',
regok: 'Registrazione Confermata',
presentazione: 'Presentazione',
presentazione2: 'Presentazione',
invita: 'Invita Persone',
SignUp: 'Nuova Registrazione',
SignUpIscrizione: 'Diventa Socio CNM',
SignUp_alreadylista: 'Registrazione per quelli che erano già nella lista di Notevole (del 2019) !',
SignUp2: 'Registrazione',
SignIn: 'Login',
@@ -30,19 +57,22 @@ const msg_website_it = {
Test: 'Test',
Category: 'Categorie',
Admin: 'Admin',
Sites: 'Siti Web',
extralist: 'Lista Extra',
Test1: 'Test1',
Test2: 'Test2',
chisiamo: 'Chi Siamo',
linkamici: 'Link Amici',
dovesiamo: 'Dove Siamo',
calendarioeventi: 'Calendario Eventi',
evento: 'Evento',
eventodef: 'Evento:',
prova: 'prova',
dbop: 'Operazioni',
projall: 'Tutti',
projectsShared: 'Miei Condivisi',
myprojects: 'Miei Personali',
projall: 'Comunitari',
groups: 'Lista Gruppi',
projectsShared: 'Condivisi da me',
myprojects: 'Privati',
favproj: 'Favoriti',
statusreg: {
reg: 'Partecipanti',
@@ -50,6 +80,7 @@ const msg_website_it = {
giainlista: 'Gia in Lista',
newreg: 'Ultime Registrazioni:',
nationality: 'Nazionalità',
nationality_born: 'Nazione di Nascita',
verified: 'Verificata',
nonverified: 'Non Verificata',
req7: 'Con 5 passi entri nella lista d\'Imbarco',
@@ -57,7 +88,11 @@ const msg_website_it = {
req: 'Passi',
people: 'Inv.',
peoplelegend: 'Numero d\'Invitati'
}
},
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore',
},
msg: {
myAppDescription: '',

View File

@@ -18,14 +18,29 @@ const functionality: IFunctionality = {
ENABLE_REG_AYNI: false,
SHOW_NEWSLETTER: false,
SHOW_ONLY_POLICY: true,
ENABLE_TODOS_LOADING: false,
ENABLE_TODOS_LOADING: true,
ENABLE_PROJECTS_LOADING: true,
SHOW_IF_IS_SERVER_CONNECTION: true,
SHOW_MESSAGES: false,
BOOKING_EVENTS: false
BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: true,
ENABLE_REG_CNM: true,
}
const routes_admin: IListRoutes[] = [
{
active: true,
order: 10,
path: '/admin/sites',
materialIcon: 'event_seat',
name: 'pages.Sites',
component: () => import('@/rootgen/admin/sites/sites.vue'),
level_parent: 0.0,
level_child: 0.5,
inmenu: true,
submenu: true,
onlyAdmin: true
},
{
active: true,
order: 1000,
@@ -51,70 +66,256 @@ const routes_admin: IListRoutes[] = [
inmenu: true,
submenu: true,
onlyAdmin: true
},
{
active: true,
order: 1030,
path: '/admin/sendpushnotif',
materialIcon: 'event_seat',
name: 'otherpages.manage.sendpushnotif',
component: () => import('@/rootgen/admin/sendpushnotif/sendpushnotif.vue'),
level_parent: 0.0,
level_child: 0.5,
inmenu: true,
submenu: true,
onlyAdmin: true
}
]
const routes_projects: IListRoutes[] = [
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 10,
path: '/' + RouteNames.projectsall + '/:idProj',
order: 5,
path: '/admin/groups',
materialIcon: 'accessibility_new',
name: RouteNames.projectsall,
name: 'pages.groups',
level_parent: 0.0,
level_child: 0.5,
component: () => import('@/rootgen/admin/groups/groups.vue'),
inmenu: true,
onlyManager: true,
onlyAdmin: true,
infooter: functionality.ENABLE_PROJECTS_LOADING,
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 10,
path: '/projall/',
materialIcon: 'accessibility_new',
urlroute: 'projall',
name: 'pages.projall',
level_parent: 0.0,
level_child: 0.5,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: functionality.SHOW_MESSAGES,
inmenu: functionality.ENABLE_PROJECTS_LOADING,
infooter: functionality.ENABLE_PROJECTS_LOADING,
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
},
onlySocioResidente: true,
onlyAdmin: true,
idelem: process.env.PROJECT_ID_MAIN
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 20,
path: '/' + RouteNames.myprojects + '/:idProj',
path: '/myprojects/',
materialIcon: 'accessibility_new',
name: RouteNames.myprojects,
name: 'pages.myprojects',
urlroute: 'myprojects',
level_parent: 0.0,
level_child: 0.5,
onlySocioResidente: true,
onlyAdmin: true,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: functionality.SHOW_MESSAGES,
inmenu: functionality.ENABLE_PROJECTS_LOADING,
infooter: functionality.ENABLE_PROJECTS_LOADING,
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
},
idelem: process.env.PROJECT_ID_MAIN
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 30,
path: '/' + RouteNames.projectsshared + '/:idProj',
path: '/projectsShared/',
urlroute: 'projectsShared',
materialIcon: 'accessibility_new',
name: RouteNames.projectsshared,
name: 'pages.projectsShared',
level_parent: 0.0,
level_child: 0.5,
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: functionality.SHOW_MESSAGES,
inmenu: functionality.ENABLE_PROJECTS_LOADING,
onlySocioResidente: true,
onlyAdmin: true,
infooter: functionality.ENABLE_PROJECTS_LOADING,
meta: {
requiresAuth: false,
async asyncData() {
// await Todos.actions.dbLoad({ checkPending: false })
await Projects.actions.dbLoad({ checkPending: false, onlyiffirsttime: true })
}
},
idelem: process.env.PROJECT_ID_MAIN
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 40,
path: '/report',
materialIcon: 'fas fa-chart-line',
name: 'pages.report',
level_parent: 0.0,
level_child: 0.5,
component: () => import('@/views/projects/report/report.vue'),
inmenu: functionality.ENABLE_PROJECTS_LOADING,
onlySocioResidente: true,
onlyAdmin: true,
infooter: functionality.ENABLE_PROJECTS_LOADING,
}
]
const routes_ecommerce: IListRoutes[] = [
{
active: true,
order: 30,
path: '/products',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.productslist',
component: () => import('@/views/ecommerce/productsList/productsList.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
},
{
active: true,
order: 30,
path: '/checkout',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.checkout',
component: () => import('@/views/ecommerce/checkOut/checkOut.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
},
{
active: true,
order: 30,
path: '/orderinfo',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.orderinfo',
component: () => import('@/views/ecommerce/orderInfo/orderInfo.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
},
{
active: true,
order: 35,
path: '/admin/ecommerce/orders',
materialIcon: 'fas fa-file-alt',
name: 'pages.orders',
component: () => import('@/rootgen/admin/orders/orders.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyDepartment: true
},
]
const routes_admin_ecommerce: IListRoutes[] = [
{
active: true,
order: 30,
path: '/admin/ecommerce/products',
materialIcon: 'fas fa-file-alt',
name: 'pages.products',
component: () => import('@/rootgen/admin/products/products.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 30,
path: '/admin/ecommerce/producers',
materialIcon: 'fas fa-file-alt',
name: 'pages.producer',
component: () => import('@/rootgen/admin/producer/producer.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 30,
path: '/admin/ecommerce/storehouses',
materialIcon: 'fas fa-file-alt',
name: 'pages.storehouses',
component: () => import('@/rootgen/admin/storehouses/storehouses.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 31,
path: '/admin/ecommerce/departments',
materialIcon: 'fas fa-file-alt',
name: 'pages.departments',
component: () => import('@/rootgen/admin/departments/departments.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
]
const routes_admin_ecommerce_menu: IListRoutes[] = [
{
active: true,
order: 30,
path: '/admin/ecommerce/products',
name: 'pages.products',
component: () => import('@/rootgen/admin/products/products.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 31,
path: '/admin/ecommerce/producers',
name: 'pages.producer',
component: () => import('@/rootgen/admin/producer/producer.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 32,
path: '/admin/ecommerce/storehouses',
name: 'pages.storehouses',
component: () => import('@/rootgen/admin/storehouses/storehouses.vue'),
infooter: false,
},
{
active: true,
order: 32,
path: '/admin/ecommerce/departments',
name: 'pages.departments',
component: () => import('@/rootgen/admin/departments/departments.vue'),
infooter: false,
},
{
active: true,
order: 35,
path: '/admin/ecommerce/orders',
name: 'pages.orders2',
component: () => import('@/rootgen/admin/orders/orders.vue'),
infooter: false,
},
]
@@ -178,6 +379,22 @@ const routes_newsletter: IListRoutes[] = [
]
const routes_manager: IListRoutes[] = [
{
active: functionality.BOOKING_EVENTS,
order: 70,
path: '/admin/usereventlist',
materialIcon: 'edit',
name: 'otherpages.admin.usereventlist',
component: () => import('@/rootgen/admin/eventlist/eventlist.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
infooter: true,
onlyManager: true,
onlyConsiglio: true,
onlyAdmin: true
},
{
active: true,
order: 10,
@@ -192,6 +409,20 @@ const routes_manager: IListRoutes[] = [
onlyManager: true,
onlyTutor: true
},
{
active: true,
order: 10,
path: '/admin/iscritticonacreis',
materialIcon: 'fas fa-users',
name: 'otherpages.admin.iscritticonacreis',
component: () => import('@/rootgen/admin/iscritticonacreis/iscritticonacreis.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyTutor: true
},
{
active: true,
order: 10,
@@ -232,11 +463,44 @@ const routes_manager: IListRoutes[] = [
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyTraduttrici: true
onlyEditor: true
},
{
active: true,
order: 30,
path: '/admin/newsletter',
order: 60,
faIcon: 'fa fa-list-alt',
materialIcon: 'fas fa-users',
name: 'otherpages.admin.newsletter',
routes2: routes_newsletter,
inmenu: false,
submenu: true,
level_parent: 0.5,
level_child: 0.5,
solotitle: true,
onlyAdmin: true,
onlyManager: true
},
{
active: functionality.ENABLE_ECOMMERCE,
path: '/admin/ecommerce',
order: 31,
faIcon: 'fa fa-list-alt',
materialIcon: 'next_week',
name: 'pages.admin_ecommerce',
routes2: routes_admin_ecommerce,
inmenu: false,
submenu: true,
level_parent: 0.5,
level_child: 0.5,
solotitle: true,
onlyAdmin: true,
onlyManager: true,
onlyDepartment: true
},
{
active: true,
order: 35,
path: '/admin/msg_template',
materialIcon: 'fas fa-file-alt',
name: 'msgs.messages',
@@ -277,36 +541,6 @@ const routes_manager: IListRoutes[] = [
onlyAdmin: true,
onlyManager: true
},
{
active: true,
order: 60,
path: '/admin/newsletter',
materialIcon: 'fas fa-users',
name: 'otherpages.admin.newsletter',
inmenu: false,
submenu: true,
routes2: routes_newsletter,
solotitle: true,
level_parent: 0.5,
level_child: 0.5,
onlyAdmin: true,
onlyManager: true
},
{
active: functionality.BOOKING_EVENTS,
order: 70,
path: '/admin/usereventlist',
materialIcon: 'edit',
name: 'otherpages.admin.usereventlist',
component: () => import('@/rootgen/admin/eventlist/eventlist.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
infooter: true,
onlyManager: true,
onlyAdmin: true
}
]
const baseroutes: IListRoutes[] = [
@@ -328,6 +562,29 @@ const baseroutes: IListRoutes[] = [
isseparator: true,
inmenu: true,
},
{
active: true,
order: 55,
path: '/iscrizione',
materialIcon: 'how_to_reg',
name: 'pages.SignUpIscrizione',
component: () => import('@/views/login/iscrizioneconacreis/iscrizioneconacreis.vue'),
inmenu: true,
infooter: true,
separator: false,
onlyNotSoci: false,
},
{
active: true,
order: 80,
path: '/calendario-eventi',
materialIcon: 'event',
name: 'pages.calendarioeventi',
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
extraclass: 'isCalendar',
inmenu: true,
infooter: true
},
{
active: true,
order: 120,
@@ -339,6 +596,16 @@ const baseroutes: IListRoutes[] = [
inmenu: true,
infooter: true,
},
{
active: true,
order: 90,
path: '/event/:typol/:eventid',
materialIcon: 'event',
name: 'pages.evento',
component: () => import('@/root/evento/evento.vue'),
inmenu: false,
infooter: false
},
{
active: true,
order: 1000,
@@ -349,6 +616,27 @@ const baseroutes: IListRoutes[] = [
inmenu: false,
infooter: false
},
{
active: true,
order: 110,
path: '/event/:typol',
materialIcon: 'event',
name: 'pages.eventodef',
component: () => import('@/root/evento/evento.vue'),
inmenu: false,
infooter: false
},
{
active: true,
order: 1000,
path: '/product/:codprod',
materialIcon: 'event',
name: 'otherpages.product',
component: () => import('@/views/ecommerce/productInfo/productInfo.vue'),
inmenu: false,
infooter: false
},
...routes_admin_ecommerce_menu,
{
active: true,
order: 1000,
@@ -360,7 +648,7 @@ const baseroutes: IListRoutes[] = [
infooter: false
},
{
active: true,
active: functionality.ENABLE_PROJECTS_LOADING,
path: '',
order: 10001,
faIcon: 'fa fa-list-alt',
@@ -369,9 +657,25 @@ const baseroutes: IListRoutes[] = [
routes2: routes_projects,
inmenu: true,
solotitle: true,
infooter: true,
onlySocioResidente: true,
onlyAdmin: true,
},
{
active: functionality.ENABLE_ECOMMERCE,
path: '',
order: 1402,
faIcon: 'fa fa-list-alt',
materialIcon: 'next_week',
name: 'pages.ecommerce',
routes2: routes_ecommerce,
inmenu: true,
onlyif_logged: true,
// onlySocioResidente: true,
solotitle: true,
infooter: true
},
...routes_projects,
...routes_ecommerce,
{
active: true,
order: 2000,
@@ -398,7 +702,7 @@ const baseroutes: IListRoutes[] = [
onlyAdmin: true,
onlyManager: true,
onlyTutor: true,
onlyTraduttrici: true
onlyEditor: true
},
...routes_manager,
{
@@ -425,7 +729,7 @@ const baseroutes: IListRoutes[] = [
path: '/signup',
materialIcon: 'how_to_reg',
name: 'pages.SignUp',
component: () => import('@/views/login/signup_complete/signup_complete.vue'),
component: () => import('@/views/login/signup/signup.vue'),
inmenu: false,
infooter: false,
separator: false
@@ -491,14 +795,93 @@ const baseroutes: IListRoutes[] = [
path: '/offline',
name: 'Offline',
component: () => import('@/views/offline/offline.vue')
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 5,
path: '/admin/groups',
materialIcon: 'accessibility_new',
name: 'pages.groups',
component: () => import('@/rootgen/admin/groups/groups.vue'),
infooter: functionality.ENABLE_PROJECTS_LOADING,
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 10,
path: '/projall/:idProj',
materialIcon: 'accessibility_new',
name: 'pages.projall',
urlroute: 'projall',
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: false,
infooter: false,
// idelem: process.env.PROJECT_ID_MAIN
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 10,
path: '/todos/:idProj',
materialIcon: 'accessibility_new',
name: 'pages.todos',
urlroute: 'todos',
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: false,
infooter: false,
// idelem: process.env.PROJECT_ID_MAIN
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 20,
path: '/myprojects/:idProj',
materialIcon: 'accessibility_new',
name: 'pages.myprojects',
urlroute: 'myprojects',
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: false,
infooter: false,
// idelem: process.env.PROJECT_ID_MAIN
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 30,
path: '/projectsShared/:idProj',
urlroute: 'projectsShared',
materialIcon: 'accessibility_new',
name: 'pages.projectsShared',
component: () => import('@/views/projects/proj-list/proj-list.vue'),
inmenu: false,
infooter: false,
// idelem: process.env.PROJECT_ID_MAIN
},
{
active: true,
path: '/separator',
name: 'separator',
order: 35,
isseparator: true,
inmenu: true,
},
{
active: functionality.ENABLE_PROJECTS_LOADING,
order: 40,
path: '/report',
urlroute: 'report',
materialIcon: 'accessibility_new',
name: 'pages.report',
component: () => import('@/views/projects/report/report.vue'),
inmenu: false,
infooter: false,
// idelem: process.env.PROJECT_ID_MAIN
}
]
export const routes = baseroutes
const preLoadImages: IPreloadImages[] = [
{ imgname: '../../statics/images/logo.png', alt: 'logo', mobile: false },
{ imgname: '../../statics/icons/flag_it.svg', alt: 'flag it', mobile: false }
{ imgname: '../../statics/icons/flag_it.svg', alt: 'flag it', mobile: false },
{ imgname: '../../statics/icons/flag_uk.svg', alt: 'flag en', mobile: false }
// { imgname: '../../statics/images/background.jpg', alt: 'corsi di formazione per operatori del massaggio del benessere', mobile: true },
// { imgname: '../../statics/images/background2.jpg', alt: 'stanza con cuscini per seminario reiki', mobile: true },
// { imgname: '../../statics/images/background3.jpg', alt: 'foto di gruppo seminaristi reiki', mobile: true },
@@ -510,13 +893,13 @@ export function preloadedimages() {
}
const arrLangUsed = [
'it',
'enUs'
'it'
// 'enUs'
]
const lang_available: ILang[] = [
{ label: 'Italiano', icon: 'fa-flag-it', value: 'it', image: '../statics/icons/flag_it.svg', short: 'IT' },
{ label: 'English', icon: 'fa-flag-us', value: 'enUs', image: '../statics/icons/flag_gb.svg', short: 'EN' }
// { label: 'English', icon: 'fa-flag-us', value: 'enUs', image: '../statics/icons/flag_gb.svg', short: 'EN' }
// { label: 'German', icon: 'fa-flag-de', value: 'de', image: '../statics/images/de.png', short: 'DE' },
]

View File

@@ -17,7 +17,7 @@
<link rel="icon" type="image/png" sizes="16x16"
href="<%= htmlWebpackPlugin.files.publicPath %>statics/icons/favicon-16x16.png">
<script src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/track.js"></script>
<!--<script src="<%= htmlWebpackPlugin.files.publicPath %>statics/js/track.js"></script>-->
<script src="https://www.gstatic.com/charts/loader.js"></script>

View File

@@ -0,0 +1,19 @@
import Vue from 'vue'
import { Component } from 'vue-property-decorator'
import { CEventsCalendar, CMyPage } from '@components'
import MixinBase from '@src/mixins/mixin-base'
import MixinMetaTags from '@src/mixins/mixin-metatags'
import { tools } from '@src/store/Modules/tools'
@Component({
mixins: [MixinBase],
components: { CEventsCalendar, CMyPage }
})
export default class Calendarioeventi extends MixinMetaTags {
public $t: any
public $q
public meta() {
return tools.metafunc(this)
}
}

View File

@@ -0,0 +1,25 @@
<template>
<CMyPage title='Calendario Eventi' imgbackground="../../statics/images/calendario_eventi.jpg" sizes="max-height: 120px" styleadd="bottom: -16px !important;">
<span>{{ setmeta({
title: 'Calendario Eventi',
description: "Calendario degli Eventi che si svolgono all'Associazione Shen di Lugo (RA)",
keywords: 'calendario eventi centro olistico' } ) }}
</span>
<CEventsCalendar :mysingleevent="null">
</CEventsCalendar>
<br>
<p class="cltexth3 text-blue q-ma-md" v-for="mycal in getarrValDb('EVENTS_CAL')">
<a :href="`../../statics/files/eventi/` + mycal.file" target="_blank">Calendario Eventi {{ mycal.label }} (PDF)</a><br>
</p>
<br>
</CMyPage>
</template>
<script lang="ts" src="./calendarioeventi.ts">
</script>
<style lang="scss" scoped>
@import './calendarioeventi.scss';
</style>

86
src/root/evento/evento.scss Executable file
View File

@@ -0,0 +1,86 @@
.listaev {
color: black;
font-size: 0.75rem;
font-weight: 400;
line-height: 1.25rem;
letter-spacing: 0.03333em;
&__date {
font-weight: bold;
color: #2ba0fd;
font-size: 1rem;
}
&__title {
color: red;
font-weight: 700;
letter-spacing: 0.066em;
}
&__details {
color: black;
}
&__tdimg {
width: 150px;
height: 150px;
}
&__tdimg_small {
width: auto;
height: 50px !important;
@media (max-width: 800px) {
height: 40px !important;
}
}
&__table {
margin: 10px;
border: solid 1px #4198ef;
border-radius: 1rem;
padding: 2px;
}
&__table tr {
border: solid 1px #4198ef;
border-radius: 1rem;
}
&__align_center_mobile {
text-align: center;
display: flex;
flex-direction: column;
align-items: center;
}
&__align_chips {
text-align: center;
display: flex;
flex-direction: column-reverse;
align-items: center;
}
&__img {
padding: 0.25rem !important;
float: left;
width: 150px;
height: 150px;
border-radius: 1rem;
@media (max-width: 718px) {
// PER VERSIONE MOBILE
float: none;
text-align: center;
margin: 0 auto;
}
}
&__img:hover {
transition: transform .2s;
transform: scale(1.05);
border: inset;
border-color: blue;
border-width: 1px;
}
}

127
src/root/evento/evento.ts Executable file
View File

@@ -0,0 +1,127 @@
import Vue from 'vue'
import { Component, Prop, Watch } from 'vue-property-decorator'
import { CalendarStore, GlobalStore, UserStore } from '@store'
import { Logo } from '../../components/logo/index'
import { Footer } from '../../components/Footer/index'
import { tools } from '../../store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext'
import { static_data } from '@src/db/static_data'
import { Screen } from 'quasar'
import { CImgText } from '../../components/CImgText/index'
import { CCard, CEventsCalendar, CMyAvatar, CMyPage, CMySingleEvent } from '@components'
import MixinOperator from '@src/mixins/mixin-operator'
import MixinEvents from '../../mixins/mixin-events'
import { IEvents } from '@src/model'
import MixinBase from '@src/mixins/mixin-base'
import MixinUsers from '@src/mixins/mixin-users'
import MixinMetaTags from '@src/mixins/mixin-metatags'
@Component({
mixins: [MixinOperator, MixinBase, MixinEvents, MixinUsers],
components: { Logo, CImgText, CCard, CMyPage, CMyAvatar, CEventsCalendar }
})
export default class Evento extends MixinMetaTags {
public $q
public $t
public myevent: IEvents = null
public mylastevtypol: IEvents[] = []
public selected: boolean = false
public meta() {
return tools.metafunc(this)
}
@Watch('$route.params.typol')
public changetypol() {
// this.mytypetransgroup = ''
const datenow = tools.addDays(tools.getDateNow(), -1)
this.mylastevtypol = CalendarStore.state.eventlist.filter((rec) => ((rec.typol === this.$route.params.typol) && (new Date(rec.dateTimeEnd) >= datenow))).slice(-5)
console.log('[1] this.mylastevtypol', this.mylastevtypol)
if (this.mylastevtypol.length === 0) {
this.mylastevtypol = CalendarStore.state.eventlist.filter((rec) => (rec.typol === this.$route.params.typol)).slice(-1)
}
// console.log('myevent', this.myevent, 'eventid=', this.$route.params.eventid)
}
get nextevents() {
if (!!this.mylastevtypol && this.mylastevtypol.length > 1) {
return this.mylastevtypol
} else {
return []
}
}
public isnotmyevent(ev) {
if (!!this.$route.params.eventid)
return ev._id !== this.$route.params.eventid
else
return true
}
@Watch('$route.params.eventid')
public changeevent() {
let eventid = null
if (!!this.$route.params.eventid)
eventid = this.$route.params.eventid
if (!!this.$route.query.eventid)
eventid = this.$route.query.eventid
console.log('changeevent', eventid)
// this.mytypetransgroup = ''
if (!!eventid) {
this.myevent = CalendarStore.state.eventlist.find((rec) => rec._id === eventid)
} else {
if (!!this.mylastevtypol)
this.myevent = this.mylastevtypol[0]
}
}
@Watch('$route.query.eventid')
public changeeventquery() {
// console.log('changeevent QUERY', this.$route.query.eventid)
// this.mytypetransgroup = ''
if (!!this.$route.query.eventid) {
this.myevent = CalendarStore.state.eventlist.find((rec) => rec._id === this.$route.query.eventid)
} else {
if (!!this.mylastevtypol)
this.myevent = this.mylastevtypol[0]
}
}
public selectEvent(eventparam: IEvents) {
this.selected = !this.selected
}
public getTextEvent(myevent: IEvents) {
if (myevent.bodytext === '') {
return myevent.details
} else {
return myevent.bodytext
}
}
public mounted() {
this.changetypol()
this.changeevent()
// console.log('myevent', this.myevent)
}
get static_data() {
return static_data
}
get gettitle() {
if (!!this.myevent && (!!this.myevent.title))
return this.myevent.title
else
return ''
}
}

56
src/root/evento/evento.vue Executable file
View File

@@ -0,0 +1,56 @@
<template>
<div>
<CMyPage imgbackground="../../statics/images/calendario_eventi.jpg" :title="gettitle" sizes="max-height: 110px;"
styleadd="bottom: -36px !important;">
<span>{{ setmeta({
title: gettitle,
description: "",
keywords: '' } ) }}
</span>
<CEventsCalendar :mysingleevent="myevent" v-if="myevent">
</CEventsCalendar>
<q-separator>
</q-separator>
<div class="q-pa-md text-center" style="max-width: 380px; margin: auto auto 2px; " v-if="nextevents.length > 0">
<q-list bordered>
<q-item>
<q-item-section>
<q-item-label overline>PROSSIME DATE:</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-ripple
v-for="(ev, index) in nextevents"
v-if="isnotmyevent(ev)"
:to="`/event/${ev.typol}/${ev._id}`"
:key="index">
<q-item-section avatar v-if="tools.getimgev(ev)">
<q-avatar>
<img :src="tools.getimgev(ev)" :alt="ev.title">
</q-avatar>
</q-item-section>
<q-item-section>{{ev.title}}</q-item-section>
<q-item-section side top>{{tools.getstrDateTimeEventShort(mythis, ev)}}</q-item-section>
</q-item>
</q-list>
</div>
<div class="q-ma-md text-center">
<q-btn rounded outline type="a" to="/calendario-eventi" color="primary" icon="event"
:label="$t('pages.calendarioeventi')">
</q-btn>
</div>
</CMyPage>
</div>
</template>
<script lang="ts" src="./evento.ts">
</script>
<style lang="scss" scoped>
@import './evento.scss';
</style>

View File

@@ -505,3 +505,6 @@ body.mobile .landing:before {
background-repeat: no-repeat;
background-position: 50%;
}
.add-button {
}

View File

@@ -1,16 +1,14 @@
import Vue from 'vue'
import { Component } from 'vue-property-decorator'
import { GlobalStore, UserStore, NotevoleStore } from '@store'
import { GlobalStore, UserStore } from '@store'
import { Logo } from '../../components/logo'
import { Footer } from '../../components/Footer'
import { CMyPage } from '../../components/CMyPage/index'
import VueScrollReveal from 'vue-scroll-reveal'
import { tools } from '@src/store/Modules/tools'
import { func_tools, toolsext } from '@src/store/Modules/toolsext'
import { Screen } from 'quasar'
import MixinMetaTags from '@src/mixins/mixin-metatags'
import {
CCardCarousel,
@@ -19,30 +17,34 @@ import {
CStatus,
CStatusReg,
CNextZoom,
CVerifyTelegram, CVerifyEmail
CVerifyTelegram, CVerifyEmail, CECommerce, CShareWithUs, CEventsCalendar
} from '@components'
import MixinBase from '@src/mixins/mixin-base'
import { static_data } from '@src/db/static_data'
import { INotData } from '@src/model'
// Vue.use(VueScrollReveal, {
// class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
// duration: 1200,
// scale: 0.95,
// distance: '10px',
// rotate: {
// x: 0,
// y: 0,
// z: 0
// }
// // mobile: true
// })
@Component({
mixins: [MixinBase],
components: { Logo, Footer, CMyPage, CCardCarousel, CTitleBanner, CImgText, CStatus, CStatusReg, CNextZoom, CVerifyTelegram, CVerifyEmail }
components: {
Logo,
Footer,
CMyPage,
CCardCarousel,
CTitleBanner,
CImgText,
CStatus,
CStatusReg,
CNextZoom,
CVerifyTelegram,
CVerifyEmail,
CECommerce,
CEventsCalendar,
CShareWithUs
}
})
export default class Home extends MixinBase {
public deferredPrompt: any = null
public showbuttonHS: boolean = false
public text: string = ''
public visibile: boolean = false
public cardvisible: string = 'hidden'
@@ -71,66 +73,12 @@ export default class Home extends MixinBase {
value: 0,
title: {
it: '<strong>Passo 1 - Contributore Finanziario</strong><br><br>' +
'A) Capisco come funziona e lo condivido ad altre 2 persone che vogliono partecipare.<br>' +
'B) Entro nella chat e dono i <strong>33€</strong> al gestore della Billettera.',
'A) Capisco come funziona e lo condivido ad altre 2 persone che vogliono partecipare.<br>' +
'B) Entro nella chat e dono i <strong>33€</strong> al gestore della Billettera.',
es: '',
enUs: ''
},
myicon: 'fas fa-donate',
},
{
label: '2',
value: 1,
title: {
it: '<strong>Passo 2 - Contributore solidale</strong><br><br>' +
'Invio il link per registrarsi alle mie 2 persone, che cosí verseranno i 33€.',
es: '',
enUs: ''
},
myicon: 'fas fa-user-friends',
myicon2: 'fas fa-coins'
},
{
label: '3',
value: 2,
title: {
it: '<strong>Passo 3 - Tesoriere/segretario</strong><br><br>' +
'Collaboro, aggiorno la lista dei doni, fornisco informazioni, ma anche conosco, condivido esperienze, passioni e sogni.',
es: '',
enUs: ''
},
myicon: 'fas fa-piggy-bank',
myicon2: 'far fa-laugh',
myicon3: 'far fa-comments'
},
{
label: '4',
value: 3,
title: {
it: '<strong>Passo 4 - Apertura tua Billettera</strong><br>' +
'Creo il mio gruppo Telegram nel quale entrano i miei 2 ospiti, i 2 ospiti dei miei 2 ospiti, che porteranno altre 8 persone (4x2).<br>' +
'<br>Ricevuti i 33€ da queste 8 persone (264€), mi tengo i mei <strong>iniziali 33€</strong> e <strong>dono 231 €</strong> alla Billettera "Mas Antigua".',
es: '',
enUs: ''
},
myicon: 'fab fa-whatsapp',
myicon2: 'fas fa-wallet'
},
{
label: '5',
value: 4,
title: {
it: '<strong>Passo 5</strong><br>' +
'Aspetto, da parte delle 8 nuove Billettere, le donazioni di 231€, per un totale di <strong>1848€</strong>.<br>' +
'<br>Ringrazio l\'<strong>Universo</strong> per il <strong>dono</strong> ricevuto e fornisco <strong>aiuto</strong> a chi ne ha bisogno.<br>' +
'Se desidero, posso <strong>ricominciare</strong>!',
es: '',
enUs: ''
},
myicon: 'far fa-clock',
myicon2: 'fas fa-euro-sign',
myicon3: 'fas fa-praying-hands',
myimg: '/' + tools.getimglogo(),
}
]
@@ -144,26 +92,6 @@ export default class Home extends MixinBase {
color: 'white', icon: 'fas fa-hands-helping',
textcolor: 'black'
},
{
title: {
it: 'È un lavoro di squadra, dove ognuno fa la sua parte.',
es: '',
enUs: ''
},
color: 'white',
icon: 'fas fa-users',
textcolor: 'black'
},
{
title: {
it: 'E\' un\'opportunità di risentire vecchi amici, ed avere un intento comune, per risentirci e di riconnetterci.<br>',
es: '',
enUs: ''
},
color: 'white',
icon: 'fas fa-hand-holding-heart',
textcolor: 'black'
}
]
constructor() {
@@ -246,6 +174,18 @@ export default class Home extends MixinBase {
return UserStore.state.isLogged
}
get isSocio() {
return UserStore.state.my.profile.socio
}
get isSocioResidente() {
return UserStore.state.my.profile.socioresidente
}
get isConsiglio() {
return UserStore.state.my.profile.consiglio
}
get static_data() {
return static_data
}
@@ -271,13 +211,38 @@ export default class Home extends MixinBase {
tools.showNotif(this.$q, String(my))
}
public addtoHomeScreen() {
if (!!this.deferredPrompt) {
this.deferredPrompt.prompt()
// Wait for the user to respond to the prompt
this.deferredPrompt.userChoice.then((choiceResult) => {
if (choiceResult.outcome === 'accepted') {
this.showbuttonHS = false
console.log('User accepted the A2HS prompt')
} else {
console.log('User dismissed the A2HS prompt')
}
this.deferredPrompt = null
})
}
}
public initprompt() {
window.addEventListener('beforeinstallprompt', (event) => {
// console.log('******************************** beforeinstallprompt fired')
console.log('******************************** beforeinstallprompt fired')
event.preventDefault()
// console.log('§§§§§§§§§§§§§§§§§§§§ IMPOSTA DEFERRED PROMPT !!!!!!!!!!!!!!!!! ')
// #Todo++ IMPOSTA DEFERRED PROMPT
return false
this.deferredPrompt = event
// Update UI to notify the user they can add to home screen
this.showbuttonHS = true
})
window.addEventListener('appinstalled', (evt) => {
// Log install to analytics
console.log('INSTALL: Success')
})
}
@@ -349,7 +314,8 @@ export default class Home extends MixinBase {
}
public openrighttoolbar() {
GlobalStore.state.RightDrawerOpen = true
GlobalStore.state.rightDrawerOpen = true
GlobalStore.state.rightCartOpen = false
}
get TelegCode() {

View File

@@ -1,14 +1,14 @@
<template>
<q-page>
<CMyPage title="">
<span>{{
setmeta({
title: 'Home',
description: $t('msg.myAppDescription'),
keywords: $t('msg.keywords_base')
})
}}
</span>
<CMyPage title="Home">
<!--<span>{{
setmeta({
title: 'Home',
description: $t('msg.myAppDescription'),
keywords: $t('msg.keywords_base')
})
}}
</span>-->
<div class="landing">
<div v-if="!isLogged">
@@ -19,6 +19,11 @@
</div>
</div>
<q-banner class="bg-positive text-white boldhigh"
style="text-align: center; ">
Benvenuti nella Nuova App della Comunità Nuovo Mondo
</q-banner>
<div v-if="!tools.sito_online(true)" class="row text-h4 text-center bg-warning">
{{ $t('otherpages.sito_offline') }}
</div>
@@ -57,17 +62,77 @@
@input="changetab"
>
<q-tab name="guida" icon="fas fa-check" :label="$t('pages.home')"></q-tab>
<q-tab name="zoom" icon="fas fa-video" :label="$t('pages.nextzoom')"></q-tab>
<q-tab name="statistiche" icon="fas fa-chart-line" :label="$t('pages.status')"></q-tab>
<q-tab v-if="isLogged && isSocio" name="prodotti" icon="fas fa-shopping-cart"
:label="$t('pages.products')"></q-tab>
<q-tab v-if="isLogged" name="collabora" icon="fas fa-users" :label="$t('pages.collabora')"></q-tab>
<!--<q-tab name="zoom" icon="fas fa-video" :label="$t('pages.nextzoom')"></q-tab>-->
<!--<q-tab name="statistiche" icon="fas fa-chart-line" :label="$t('pages.status')"></q-tab>-->
</q-tabs>
<q-tab-panels v-model="tab" animated>
<q-tab-panel name="guida">
<div v-if="isLogged">
<div class="q-ma-xs q-pa-xs text-center rounded-borders">
<div v-if="isLogged">
<div>
<!--<q-field-->
<!--v-if="getPermission() === 'granted'"-->
<!--icon="notifications"-->
<!--class="shadow"-->
<!--:label="$t('notification.titlegranted')"-->
<!--:helper="$t('notification.statusnot')">-->
<!--</q-field>-->
<q-field
v-if="NotServiceWorker()"
class="shadow"
icon="notifications"
label="Service Worker not present"
>
</q-field>
</div>
<div>
<q-btn v-if="getPermission() !== 'granted'"
class="enable-notifications shadow"
color="primary" rounded
size="md"
icon="notifications" @click="tools.askfornotification(mythis)"
:label="$t('notification.ask')"/>
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="primary" rounded size="lg" icon="notifications" @click="showNotificationExample" label="Send Notification"/>-->
<!--<q-btn v-if="getPermission() === 'granted'" class="enable-notifications" color="secondary" rounded size="lg" icon="notifications" @click="createPushSubscription" label="Create Push Subscription !"/>-->
</div>
</div>
<q-btn class="enable-notifications shadow add-button" v-if="showbuttonHS" @click="addtoHomeScreen"
color="primary" rounded
size="md"
icon="fas fa-plus"
label="Aggiungi alle tue Applicazioni">
</q-btn>
<CEventsCalendar :mysingleevent="null" :showfirstN="getValDb('SHOW_LAST_EVENTS', false, 3)">
</CEventsCalendar>
<br>
<div class="q-pt-md q-pl-sm">
<div class="text-body2 text-italic text-grey">Versione App {{ getenv('APP_VERSION') }}</div>
</div>
</div>
</q-tab-panel>
<q-tab-panel name="prodotti">
<CECommerce>
</CECommerce>
</q-tab-panel>
<q-tab-panel name="collabora">
<CShareWithUs></CShareWithUs>
</q-tab-panel>
<q-tab-panel name="zoom">
<CNextZoom>

View File

@@ -1,6 +1,6 @@
<template>
<q-page>
<CMyPage title="">
<CMyPage title="Intro">
<div class="q-ma-xs">
<div class="text-center">
<q-img src="statics/images/background.jpg" class="logo"></q-img>
@@ -15,9 +15,9 @@
</CVideoPromo>
<q-page v-if="!!invited" padding class="signup" >
<CSignUpNotevole :showadultcheck="true" :showcell="true" :showaportador="true" :shownationality="true">
<CSignUp>
</CSignUpNotevole>
</CSignUp>
</q-page>
</div>

View File

@@ -24,15 +24,16 @@ export default class Mypage extends MixinMetaTags {
public imgback
public rec: IMyPage = {}
public mounted() {
public async mounted() {
// console.log('this.$route.path', this.$route.path)
this.rec = GlobalStore.getters.getPage(this.$route.path)
console.log(this.rec)
this.rec = await GlobalStore.actions.loadPage(this.$route.path)
// console.log('mounted', this.rec)
}
@Watch('$route.path')
public changepage() {
this.rec = GlobalStore.getters.getPage(this.$route.path)
public async changepage() {
// console.log('changepage')
this.rec = await GlobalStore.actions.loadPage(this.$route.path)
}
public meta() {

View File

@@ -1,21 +1,47 @@
<template>
<div>
<CMyPage :title="rec.title" :imgbackground="`statics/` + rec.imgback" :sizes="`max-height: ` + rec.heightimg + `px`">
<span>{{ setmeta({
title: rec.title,
description: rec.description,
keywords: rec.keywords } ) }}
<div>
<CMyPage :title="rec.title" :imgbackground="`statics/` + rec.imgback"
:sizes="`max-height: ` + rec.heightimg + `px`">
<span>{{
setmeta({
title: rec.title,
description: rec.description,
keywords: rec.keywords
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<div v-html="rec.content"></div>
</div>
</CMyPage>
</div>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<div v-if="!!rec.img1" class="text-center">
<q-img :src="`statics/`+ rec.img1" class="img"></q-img>
</div>
<div v-if="!!rec.content" v-html="rec.content"></div>
<q-video v-if="!!rec.video1" :src="rec.video1" :ratio="rec.ratio1">
</q-video>
<div v-if="!!rec.img2" class="text-center">
<q-img :src="`statics/`+ rec.img2" class="img"></q-img>
</div>
<div v-if="!!rec.content2" v-html="rec.content2"></div>
<q-video v-if="!!rec.video2" :src="rec.video2" :ratio="rec.ratio2"></q-video>
<div v-if="!!rec.img3" class="text-center">
<q-img :src="`statics/`+ rec.img2" class="img"></q-img>
</div>
<div v-if="!!rec.content3" v-html="rec.content3"></div>
<q-video v-if="!!rec.video3" :src="rec.video3" :ratio="rec.ratio3"></q-video>
<div v-if="!!rec.content4" v-html="rec.content4"></div>
</div>
</CMyPage>
</div>
</template>
<script lang="ts" src="./mypage.ts">
</script>
<style lang="scss" scoped>
@import 'mypage.scss';
@import 'mypage.scss';
</style>

53
src/root/pr.html Executable file
View File

@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span id="docs-internal-guid-b6caaa89-7fff-7a30-fbd4-76b2341de2b7"><p dir="ltr"
style="line-height:1.4007525444030762;margin-left: 39.875091552734375pt;margin-right: 61.662750244140625pt;text-align: center;margin-top:0pt;margin-bottom:0pt;"><span
style="font-size: 28.021pt; font-family: &quot;Times New Roman&quot;; color: rgb(0, 176, 80); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">E.M. Microrganismi Effettivi </span></p><p
dir="ltr"
style="line-height:1.4007525444030762;margin-left: 39.875091552734375pt;margin-right: 61.662750244140625pt;text-align: center;margin-top:0pt;margin-bottom:0pt;"><span
style="font-size: 20.0118pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">Cosa sono e i loro molteplici usi e benefici. </span></p><p
dir="ltr"
style="line-height:1.4007525444030762;margin-left: 39.875091552734375pt;margin-right: 61.662750244140625pt;text-align: center;margin-top:0pt;margin-bottom:0pt;"><span
style="font-size: 14.0068pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">Ambiente - Agricoltura - Acqua - Salute - Casa&nbsp;</span></p><p
dir="ltr"
style="line-height:1.2;margin-right: 119.82754516601562pt;text-align: right;margin-top:0pt;margin-bottom:0pt;"><span
style="font-size: 16.0109pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;"><br></span></p><p
dir="ltr" style="text-align: center; line-height: 1.2; margin-right: 119.828pt; margin-top: 0pt; margin-bottom: 0pt;"><span
style="font-size: 16.0109pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">con il </span><span
style="font-size: 20.0118pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">Dott. Vanni Ficola&nbsp;</span></p><p
dir="ltr"
style="line-height:1.3744505882263183;margin-left: 8.128738403320312pt;text-align: center;margin-top:4.91497802734375pt;margin-bottom:0pt;"><span
style="font-size: 12.0101pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">Agronomo, esperto della tecnologia EM nelle pratiche agricole utili e sane per lAmbiente </span></p><p
dir="ltr"
style="line-height:1.3744505882263183;margin-left: 8.128738403320312pt;text-align: center;margin-top:4.91497802734375pt;margin-bottom:0pt;"><span
style="font-size: 12.0101pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">e per la Salute, Fondatore dellAssociazione Nazionale “Puliti senza Chimica”&nbsp;</span></p><p
dir="ltr"
style="text-align: center; line-height: 1.2; margin-right: 91.4182pt; margin-top: 27.7748pt; margin-bottom: 0pt;"><span
style="font-size: 12.0101pt; font-family: &quot;Times New Roman&quot;; color: rgb(152, 72, 6); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;"><span
style="border:none;display:inline-block;overflow:hidden;width:344px;height:188px;"><img
src="https://lh3.googleusercontent.com/Xumk5ylO3JuNynq2nalClacFU-IcwU1u7PNopArJO3xr4Z19B1vIz0H0QdmSWEzQLb7DBmVRsOw_ifxyRPJrFkq9b25wvu7IInwamxJ_3KXjfUFiWMvt4nWIisSuxNYOVjkLc5Or"
width="344" height="188" style="margin-left:0px;margin-top:0px;"></span></span></p><p dir="ltr"
style="line-height:1.2;margin-left: 129.79080200195312pt;margin-top:0pt;margin-bottom:0pt;"><span
style="font-size: 18.0151pt; font-family: &quot;Times New Roman&quot;; color: rgb(0, 112, 192); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;"><br></span></p><p
dir="ltr"
style="text-align: center; line-height: 1.2; margin-left: 129.791pt; margin-top: 0pt; margin-bottom: 0pt;"><span
style="font-size: 18.0151pt; font-family: &quot;Times New Roman&quot;; color: rgb(0, 112, 192); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space: pre-wrap;">Incontro In-formativo</span></p><p
dir="ltr"
style="line-height:1.3667760372161866;margin-right: 26.9189453125pt;text-align: center;margin-top:28.270233154296875pt;margin-bottom:0pt;"><span
style="font-size: 16.0109pt; font-family: &quot;Times New Roman&quot;; color: rgb(0, 112, 192); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">E possibile sostenersi e vivere meglio con unagricoltura Senza Chimica che rispetti la Vita e la nostra amata Madre Terra&nbsp; </span><span
style="font-size: 18.0151pt; font-family: &quot;Times New Roman&quot;; color: rgb(255, 0, 0); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">Scopriamolo Insieme&nbsp;</span></p><p
dir="ltr"
style="text-align: center; line-height: 1.2; margin-left: 136.773pt; margin-top: 12.6207pt; margin-bottom: 0pt;"><span
style="font-size: 14.0068pt; font-family: &quot;Times New Roman&quot;; color: rgb(0, 32, 96); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;">con INGRESSO LIBERO </span></p><div
style="text-align: center;"><span
style="font-size: 14.0068pt; font-family: &quot;Times New Roman&quot;; color: rgb(0, 32, 96); background-color: transparent; font-weight: 700; font-style: italic; font-variant-numeric: normal; font-variant-east-asian: normal; vertical-align: baseline; white-space: pre-wrap;"><br></span></div></span>
</body>
</html>

View File

@@ -32,10 +32,11 @@ export interface IMyRouteRecord extends RouteRecord {
meta: IMyMeta,
}
export interface IMyRouteConfig extends RouteConfig {
/*export interface IMyRouteConfig extends RouteConfig {
children?: IMyRouteConfig[],
meta?: IMyMeta
}
}*/
export const cfgrouter = {

View File

@@ -7,5 +7,6 @@ export const RouteNames = {
myprojects: 'myprojects',
favouriteprojects: 'favproj',
listprojects: 'listproj',
livelli: 'livelli'
livelli: 'livelli',
ecommerce: 'ecommerce'
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 451 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 288 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 207 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 27 KiB

BIN
src/statics/images/prodotti.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 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: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
src/statics/images/produttori.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 KiB

View File

@@ -208,6 +208,7 @@
}
UpgradeDB.prototype.createObjectStore = function() {
console.log('createObjectStore');
return new ObjectStore(this._db.createObjectStore.apply(this._db, arguments));
};

View File

@@ -1,6 +1,6 @@
const OtherTables = ['categories', 'config', 'swmsg']
const OtherTables = ['config', 'swmsg']
const MainTables = ['todos', 'projects']
const allMethod = ['sync_post_', 'sync_patch_', 'delete_']
const allMethod = ['sync_post_', 'sync_patch_', 'delete_', 'hide_']
// -------------------------------------
@@ -15,7 +15,8 @@ let idbKeyval = (() => {
if (!db) {
// console.log('CREO DB STORAGE JS !')
db = new Promise((resolve, reject) => {
const openreq = indexedDB.open('mydb3', 11);
// console.log('open mydb3')
const openreq = indexedDB.open('mydb3', 12);
openreq.onerror = () => {
reject(openreq.error);
@@ -24,14 +25,15 @@ let idbKeyval = (() => {
openreq.onupgradeneeded = () => {
// First time setup: create an empty object store
for (let mytab of MainTables) {
openreq.result.createObjectStore(mytab, { keyPath: '_id' });
openreq.result.createObjectStore(mytab, { keyPath: 'BOMID', autoIncrement: true });
for (let mymeth of allMethod) {
const tab = mymeth + mytab
openreq.result.createObjectStore(tab, { keyPath: '_id' });
openreq.result.createObjectStore(tab, { keyPath: 'BOMID', autoIncrement: true });
}
}
for (let mytab of OtherTables) {
openreq.result.createObjectStore(mytab, { keyPath: '_id' });
console.log('mytab', mytab);
openreq.result.createObjectStore(mytab, { keyPath: 'BOMID', autoIncrement: true });
}
};

View File

@@ -4,7 +4,7 @@ function geturl() {
if (miaurl.includes('localhost')) {
return 'http://localhost:8090/'
} else {
return 'https://ayni.gifteconomy.app/'
return 'https://comunitanuovomondo.app/'
}
}

View File

@@ -5,5 +5,5 @@ $_CONFIG['user'] = '';
$_CONFIG['pass'] = '';
$_CONFIG['dbname'] = '';
$_SITO['conndb'] = mysqli_connect($_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass'], $_CONFIG['dbname']) or die('Impossibile stabilire una connessione. ' . mysqli_connect_error());
// $_SITO['conndb'] = mysqli_connect($_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass'], $_CONFIG['dbname']) or die('Impossibile stabilire una connessione. ' . mysqli_connect_error());

View File

@@ -0,0 +1,5 @@
[Dolphin]
PreviewsShown=true
Timestamp=2021,3,26,23,47,48
Version=4
ViewMode=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.