Integrazione ECommerce (conversione)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
APP_VERSION="1.0.21"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="16"
|
||||
APP_ID="17"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
DIRECTORY_SERVER="freeplanet_serverside"
|
||||
SERVERDIR_WEBSITE=""
|
||||
|
||||
@@ -147,7 +147,7 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
devServer: {
|
||||
https: false,
|
||||
port: 8087,
|
||||
port: 8088,
|
||||
open: false, // opens browser window automatically
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
APP_VERSION="1.0.20"
|
||||
APP_VERSION="1.0.21"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="13"
|
||||
APP_ID="16"
|
||||
DIRECTORY_LOCAL="newfreeplanet"
|
||||
DIRECTORY_SERVER="freeplanet_serverside"
|
||||
SERVERDIR_WEBSITE=""
|
||||
@@ -12,7 +12,7 @@ LANG_DEFAULT="it"
|
||||
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
|
||||
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
|
||||
MONGODB_HOST="https://localhost:3000"
|
||||
LOGO_REG='riso-logo-full.png'
|
||||
LOGO_REG='piuchebuono-logo-full.png'
|
||||
TEST_NAME="Paolo"
|
||||
TEST_SURNAME="Arena"
|
||||
TEST_EMAIL=""
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="1.0.19"
|
||||
APP_VERSION="1.0.20"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="13"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
APP_VERSION="1.0.19"
|
||||
APP_VERSION="1.0.20"
|
||||
SERVICE_WORKER_FILE="service-worker.js"
|
||||
APP_ID="13"
|
||||
DIRECTORY_LOCAL=newfreeplanet
|
||||
|
||||
@@ -1,89 +1,11 @@
|
||||
import { IEvents } from '../model';
|
||||
|
||||
export const db_data = {
|
||||
URL_FACEBOOK: 'https://www.facebook.com/associazioneshen',
|
||||
URL_FACEBOOK: '',
|
||||
|
||||
userdata: {
|
||||
calendar_editable: false,
|
||||
|
||||
},
|
||||
|
||||
events: [
|
||||
{
|
||||
title: 'Scambi Reiki',
|
||||
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
|
||||
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dell’inizio della serata per ricevere le informazioni pratiche.',
|
||||
date: '2019-07-11',
|
||||
time: '21:00',
|
||||
duration: 120,
|
||||
side: 'left',
|
||||
bgcolor: 'orange',
|
||||
icon: 'fas fa-praying-hands',
|
||||
img: 'images/reiki/reikisfondo.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Cristina Barattoni',
|
||||
avatar: 'cristina.png',
|
||||
infoextra: '',
|
||||
linkpdf: 'files/eventi/Reiki_aMICHI.pdf',
|
||||
},
|
||||
{
|
||||
title: 'Scambi Reiki',
|
||||
details: 'Nelle serate esperienziali è possibile <span class="boldhigh">Dare e Ricevere</span> un trattamento completo.<br />'
|
||||
+ 'Possono partecipare le persone che hanno già preso parte al <span class="boldhigh">seminario di 1° livello</span>, ma anche <span class="boldhigh">tutti quelli che hanno il desiderio di conoscere il Reiki</span> e sperimentarlo per la prima volta: in questo caso invitiamo gli interessati a contattarci per un appuntamento prima dell’inizio della serata per ricevere le informazioni pratiche.',
|
||||
date: '2019-07-20',
|
||||
time: '21:00',
|
||||
duration: 120,
|
||||
side: 'left',
|
||||
bgcolor: 'orange',
|
||||
icon: 'fas fa-praying-hands',
|
||||
img: 'images/reiki/reikisfondo.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Cristina Barattoni',
|
||||
avatar: 'cristina.png',
|
||||
infoextra: '',
|
||||
linkpdf: '',
|
||||
},
|
||||
{
|
||||
title: 'Seminario Reiki 1° Livello',
|
||||
details: 'I seminari vengono organizzati volutamente in gruppi poco numerosi.\n'
|
||||
+ 'Si crea così un ambiente accogliente e tranquillo con un atmosfera conviviale.<br />'
|
||||
+ ''
|
||||
+ 'Per info vedi <a href="reiki/seminari">Seminari Reiki</a>',
|
||||
date: '2019-07-22',
|
||||
days: 2,
|
||||
time: '9:00',
|
||||
side: 'left',
|
||||
bgcolor: 'red',
|
||||
icon: 'fas fa-chalkboard-teacher',
|
||||
img: 'images/reiki/reikisfondo.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Cristina Barattoni',
|
||||
avatar: 'cristina.png',
|
||||
teacher2: 'Elisa Ghizzardi',
|
||||
avatar2: 'elisa.png',
|
||||
infoextra: 'sabato e domenica dalle 10.00 alle 18.00',
|
||||
linkpdf: '',
|
||||
},
|
||||
{
|
||||
title: 'Presentazione Corsi per Operatori del Massaggio del Benessere',
|
||||
details: 'Vieni alla presentazione dei Corsi!<br>10 settembre a Ravenna, 17 settembre a Lugo',
|
||||
date: '2019-09-10',
|
||||
time: '20:30',
|
||||
duration: 120,
|
||||
side: 'left',
|
||||
bgcolor: 'blue',
|
||||
icon: 'fas fa-praying-hands',
|
||||
img: 'images/scuolaopbenessere/img1.jpg',
|
||||
where: 'Centro Shen',
|
||||
// whereicon: 'shen.png',
|
||||
teacher: 'Operatori',
|
||||
avatar: 'cristina.png',
|
||||
avatar2: 'elisa.png',
|
||||
infoextra: '',
|
||||
linkpdf: '',
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
const msg_website_enUs = {
|
||||
ws: {
|
||||
sitename: 'Riso',
|
||||
siteshortname: 'RISO',
|
||||
botname: 'Riso BOT',
|
||||
sitename: 'Fiore Della Vita',
|
||||
siteshortname: 'Fiore Della Vita',
|
||||
description: '',
|
||||
keywords: '',
|
||||
},
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
const msg_website_es = {
|
||||
ws: {
|
||||
sitename: 'Riso',
|
||||
siteshortname: 'RISO',
|
||||
botname: 'Riso BOT',
|
||||
sitename: 'Fiore Della Vita',
|
||||
siteshortname: 'Fiore Della Vita',
|
||||
description: '',
|
||||
keywords: '',
|
||||
},
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
const msg_website_fr = {
|
||||
ws: {
|
||||
sitename: 'Riso',
|
||||
siteshortname: 'RISO',
|
||||
botname: 'Riso BOT',
|
||||
sitename: 'Fiore Della Vita',
|
||||
siteshortname: 'Fiore Della Vita',
|
||||
description: '',
|
||||
keywords: '',
|
||||
},
|
||||
homepage: {
|
||||
titlecontatti: 'CONTACTS',
|
||||
|
||||
@@ -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: 'Fiore Della Vita',
|
||||
siteshortname: 'Fiore Della Vita',
|
||||
description: '',
|
||||
keywords: '',
|
||||
},
|
||||
products: {
|
||||
quantity: 'Quantità',
|
||||
@@ -131,7 +131,7 @@ const msg_website_it = {
|
||||
color: 'Colore',
|
||||
},
|
||||
msg: {
|
||||
myAppName: 'Riso',
|
||||
myAppName: 'Fiore della Vita',
|
||||
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
|
||||
underconstruction: 'App in costruzione...',
|
||||
myDescriz: '',
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
const msg_website_pt = {
|
||||
ws: {
|
||||
sitename: 'Riso',
|
||||
siteshortname: 'RISO',
|
||||
botname: 'Riso BOT',
|
||||
sitename: 'Fiore Della Vita',
|
||||
siteshortname: 'Fiore Della Vita',
|
||||
description: '',
|
||||
keywords: '',
|
||||
},
|
||||
pages: {
|
||||
home: 'Home',
|
||||
|
||||
@@ -7,30 +7,6 @@ import {
|
||||
import { func } from '@store/Modules/fieldsTable'
|
||||
|
||||
|
||||
// const SHOW_PROJINTHEMENU = false
|
||||
//
|
||||
// let arrlistafavourite = []
|
||||
// let arrlistaprojtutti = []
|
||||
// let arrlistaprojmiei = []
|
||||
// if (SHOW_PROJINTHEMENU) {
|
||||
// arrlistaprojtutti = Projects.getters.listaprojects(RouteNames.projectsall)
|
||||
// arrlistaprojmiei = Projects.getters.listaprojects(RouteNames.myprojects)
|
||||
// arrlistafavourite = Projects.getters.listaprojects(RouteNames.favouriteprojects)
|
||||
// }
|
||||
// PROGETTI -> FAVORITI :
|
||||
|
||||
// if (arrlistafavourite.length > 0) {
|
||||
// arrMenu.push({
|
||||
// icon: 'favorite_border',
|
||||
// nametranslate: 'pages.' + RouteNames.favouriteprojects,
|
||||
// urlroute: RouteNames.favouriteprojects,
|
||||
// level_parent: 0.0,
|
||||
// level_child: 0.5,
|
||||
// routes2: arrlistafavourite,
|
||||
// idelem: ''
|
||||
// })
|
||||
// }
|
||||
|
||||
const firstPage = {
|
||||
active: true,
|
||||
order: 5,
|
||||
@@ -46,7 +22,7 @@ const firstPage = {
|
||||
function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
|
||||
const baseroutes: IListRoutes[] = [
|
||||
{
|
||||
/*{
|
||||
active: true,
|
||||
order: 5,
|
||||
path: '/',
|
||||
@@ -57,61 +33,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 12,
|
||||
path: '/goods',
|
||||
materialIcon: 'fas fa-tshirt',
|
||||
name: 'mypages.goods',
|
||||
component: () => import('@/root/goods/goods.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/services',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.services',
|
||||
component: () => import('@/root/services/services.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/provapao',
|
||||
materialIcon: 'fas fa-house-user',
|
||||
name: 'mypages.provapao',
|
||||
component: () => import('@/root/provapao/provapao.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 15,
|
||||
path: '/hosps',
|
||||
materialIcon: 'fas fa-bed',
|
||||
name: 'mypages.hosp',
|
||||
component: () => import('@/root/hosp/hosp.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.enableCircuits,
|
||||
order: 16,
|
||||
path: '/circuits',
|
||||
materialIcon: 'fas fa-coins',
|
||||
name: 'mypages.circuits',
|
||||
component: () => import('@/views/user/mycircuits/mycircuits.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 20,
|
||||
@@ -122,145 +43,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 120,
|
||||
path: '/myprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile',
|
||||
component: () => import('@/views/user/myprofile/myprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 120,
|
||||
path: '/editprofile',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.profile3',
|
||||
component: () => import('@/views/user/editprofile/editprofile.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 130,
|
||||
path: '/friends',
|
||||
materialIcon: 'fas fa-user-friends',
|
||||
name: 'mypages.iscritti',
|
||||
component: () => import('@/views/user/myfriends/myfriends.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: true,
|
||||
},
|
||||
{
|
||||
active: site.confpages && site.confpages.enableGroups,
|
||||
order: 132,
|
||||
path: '/groups',
|
||||
materialIcon: 'fas fa-users',
|
||||
name: 'mypages.groups',
|
||||
component: () => import('@/views/user/mygroups/mygroups.vue'),
|
||||
meta: { requiresAuth: true },
|
||||
inmenu: true,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 136,
|
||||
path: '/grp/:groupname',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.group2',
|
||||
component: () => import('@/views/user/mygroup/mygroup.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
}, {
|
||||
active: true,
|
||||
order: 137,
|
||||
path: '/circuit/:path',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'proj.circuit2',
|
||||
component: () => import('@/views/user/mycircuit/mycircuit.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
path: '/separator',
|
||||
name: 'separator',
|
||||
order: 140,
|
||||
isseparator: true,
|
||||
inmenu: true,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 130,
|
||||
path: '/mypage/:idBacheca',
|
||||
materialIcon: 'fas fa-user',
|
||||
name: 'pages.mypage2',
|
||||
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 130,
|
||||
path: '/myservice/:idSkill',
|
||||
materialIcon: '',
|
||||
name: 'pages.myservice2',
|
||||
component: () => import('@/views/user/myservice/myservice.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 135,
|
||||
path: '/myhosps/:idHosp',
|
||||
materialIcon: '',
|
||||
name: 'pages.myhosps2',
|
||||
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 132,
|
||||
path: '/mygood/:idGood',
|
||||
materialIcon: '',
|
||||
name: 'pages.mygood2',
|
||||
component: () => import('@/views/user/mypagegood/mypagegood.vue'),
|
||||
meta: { requiresAuth: true, newpage: true },
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 150,
|
||||
path: '/fundraising',
|
||||
materialIcon: 'fas fa-hand-holding-heart',
|
||||
name: 'pages.fundraising',
|
||||
component: () => import('@src/root/fundraising/fundraising.vue'),
|
||||
inmenu: false,
|
||||
infooter: false,
|
||||
},
|
||||
{
|
||||
active: true,
|
||||
order: 80,
|
||||
path: '/calendario-eventi',
|
||||
materialIcon: 'event',
|
||||
name: 'ris.calendario_eventi_riso',
|
||||
component: () => import('@/root/calendarioeventi/calendarioeventi.vue'),
|
||||
extraclass: 'isCalendar',
|
||||
inmenu: false,
|
||||
infooter: false
|
||||
},
|
||||
},*/
|
||||
]
|
||||
|
||||
return baseroutes
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "riso",
|
||||
"version": "0.6.1",
|
||||
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
|
||||
"productName": "Riso",
|
||||
"name": "piuchebuono",
|
||||
"version": "2.0.1",
|
||||
"description": "PiuCheBuono",
|
||||
"productName": "PiuCheBuono",
|
||||
"author": "Paolo Arena",
|
||||
"private": true,
|
||||
"keywords": [],
|
||||
@@ -123,18 +123,17 @@
|
||||
"crypto": false
|
||||
},
|
||||
"browserslist": [
|
||||
"last 80 Chrome versions",
|
||||
"last 100 Chrome versions",
|
||||
"last 40 Firefox versions",
|
||||
"last 10 Edge versions",
|
||||
"last 45 Safari versions",
|
||||
"last 80 Android versions",
|
||||
"last 120 ChromeAndroid versions",
|
||||
"last 30 FirefoxAndroid versions",
|
||||
"last 20 iOS versions",
|
||||
"last 20 Edge versions",
|
||||
"last 55 Safari versions",
|
||||
"last 90 Android versions",
|
||||
"last 250 ChromeAndroid versions",
|
||||
"last 60 FirefoxAndroid versions",
|
||||
"last 35 iOS versions",
|
||||
"last 10 Opera versions",
|
||||
"> 0.03%",
|
||||
"not dead",
|
||||
"fully supports es6-module"
|
||||
"not dead"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">= 16.14.0",
|
||||
|
||||
@@ -147,7 +147,7 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
devServer: {
|
||||
https: false,
|
||||
port: 8084,
|
||||
port: 8088,
|
||||
open: false, // opens browser window automatically
|
||||
headers: {
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
@@ -305,9 +305,9 @@ module.exports = configure((ctx) => ({
|
||||
},
|
||||
|
||||
manifest: {
|
||||
name: 'Riso',
|
||||
short_name: '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.',
|
||||
name: 'Più che Buono',
|
||||
short_name: 'PiuCheBuono',
|
||||
description: 'PiuCheBuono è un GAS e Bottega',
|
||||
display: 'standalone',
|
||||
orientation: 'portrait',
|
||||
background_color: '#fff',
|
||||
@@ -317,54 +317,54 @@ module.exports = configure((ctx) => ({
|
||||
start_url: "/?homescreen=1",
|
||||
icons: [
|
||||
{
|
||||
src: 'images/riso-android-icon-512x512.png',
|
||||
src: 'images/fv-android-icon-512x512.png',
|
||||
sizes: '512x512',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-android-icon-384x384.png',
|
||||
src: 'images/fv-android-icon-384x384.png',
|
||||
sizes: '384x384',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-android-icon-192x192.png',
|
||||
src: 'images/fv-android-icon-192x192.png',
|
||||
sizes: '192x192',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-android-icon-144x144.png',
|
||||
src: 'images/fv-android-icon-144x144.png',
|
||||
sizes: '144x144',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-android-icon-96x96.png',
|
||||
src: 'images/fv-android-icon-96x96.png',
|
||||
sizes: '96x96',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-120x120.png',
|
||||
src: 'images/fv-apple-icon-120x120.png',
|
||||
sizes: '120x120',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-144x144.png',
|
||||
src: 'images/fv-apple-icon-144x144.png',
|
||||
sizes: '144x144',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-152x152.png',
|
||||
src: 'images/fv-apple-icon-152x152.png',
|
||||
sizes: '152x152',
|
||||
type: 'image/png',
|
||||
},
|
||||
{
|
||||
src: 'images/riso-apple-icon-180x180.png',
|
||||
src: 'images/fv-apple-icon-180x180.png',
|
||||
sizes: '180x180',
|
||||
type: 'image/png',
|
||||
},
|
||||
],
|
||||
related_applications: [{
|
||||
"platform": "webapp",
|
||||
"url": "https://www.riso.app/manifest.json"
|
||||
"url": "https://www.piuchebuono.app/manifest.json"
|
||||
}]
|
||||
},
|
||||
},
|
||||
@@ -399,7 +399,7 @@ module.exports = configure((ctx) => ({
|
||||
builder: {
|
||||
// https://www.electron.build/configuration/configuration
|
||||
|
||||
appId: 'Riso',
|
||||
appId: 'PiuCheBuono',
|
||||
},
|
||||
|
||||
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain
|
||||
|
||||
@@ -364,7 +364,7 @@ module.exports = configure((ctx) => ({
|
||||
],
|
||||
related_applications: [{
|
||||
"platform": "webapp",
|
||||
"url": "https://www.piuchebuono.app/manifest.json"
|
||||
"url": "https://www.riso.app/manifest.json"
|
||||
}]
|
||||
},
|
||||
},
|
||||
|
||||
@@ -75,7 +75,8 @@ export const shared_consts = {
|
||||
BTN_LOGIN: 260,
|
||||
FOOTER: 270,
|
||||
PROFILETUTORIAL: 280,
|
||||
VISUVIDEOPROMOANDPDF: 290
|
||||
VISUVIDEOPROMOANDPDF: 290,
|
||||
ECOMMERCE: 300,
|
||||
},
|
||||
|
||||
QUERYTYPE_MYGROUP: 1,
|
||||
@@ -1525,6 +1526,10 @@ export const shared_consts = {
|
||||
value: 70,
|
||||
label: 'Calendario',
|
||||
},
|
||||
{
|
||||
value: 300,
|
||||
label: 'E-COMMERCE',
|
||||
},
|
||||
|
||||
],
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@ import { tools } from '@store/Modules/tools'
|
||||
import { shared_consts } from '@/common/shared_vuejs'
|
||||
import { LandingFooter } from '@/components/LandingFooter'
|
||||
import { CMyActivities } from '@/components/CMyActivities'
|
||||
import { CECommerce } from '@/components/CECommerce'
|
||||
import { COpenStreetMap } from '@src/components/COpenStreetMap'
|
||||
import { CCardCarousel } from '@src/components/CCardCarousel'
|
||||
import { CMyPage } from '@src/components/CMyPage'
|
||||
|
||||
@@ -372,13 +372,7 @@
|
||||
>
|
||||
<div class="landing__header"></div>
|
||||
<div
|
||||
class="
|
||||
landing__hero-content
|
||||
row
|
||||
justify-center
|
||||
q-gutter-xs
|
||||
clgutter
|
||||
"
|
||||
class="landing__hero-content row justify-center q-gutter-xs clgutter"
|
||||
>
|
||||
<div class="row"> </div>
|
||||
<div class="flex justify-end">
|
||||
@@ -390,13 +384,7 @@
|
||||
{{ myel.container }}
|
||||
</div>
|
||||
<div
|
||||
class="
|
||||
text-subtitle1
|
||||
shadow-max
|
||||
big
|
||||
text-italic
|
||||
q-pl-sm
|
||||
"
|
||||
class="text-subtitle1 shadow-max big text-italic q-pl-sm"
|
||||
>
|
||||
{{ myel.container2 }}
|
||||
</div>
|
||||
@@ -488,9 +476,13 @@
|
||||
<div v-if="editOn" class="elemEdit">CCheckIfIsLogged</div>
|
||||
<CCheckIfIsLogged :showalways="myel.container"></CCheckIfIsLogged>
|
||||
</div>
|
||||
<div v-else-if="myel.type === shared_consts.ELEMTYPE.VISUVIDEOPROMOANDPDF">
|
||||
<div
|
||||
v-else-if="myel.type === shared_consts.ELEMTYPE.VISUVIDEOPROMOANDPDF"
|
||||
>
|
||||
<div v-if="editOn" class="elemEdit">Visu Video Promo and PDF</div>
|
||||
<CVisuVideoPromoAndPDF :showalways="myel.container"></CVisuVideoPromoAndPDF>
|
||||
<CVisuVideoPromoAndPDF
|
||||
:showalways="myel.container"
|
||||
></CVisuVideoPromoAndPDF>
|
||||
</div>
|
||||
<div v-else-if="myel.type === shared_consts.ELEMTYPE.INFO_VERSION">
|
||||
<div>Versione: {{ tools.getvers() }}</div>
|
||||
@@ -537,6 +529,10 @@
|
||||
<div v-if="editOn" class="elemEdit">Pagina Attività</div>
|
||||
<CMyActivities></CMyActivities>
|
||||
</div>
|
||||
<div v-else-if="myel.type === shared_consts.ELEMTYPE.ECOMMERCE">
|
||||
<div v-if="editOn" class="elemEdit">PRODOTTI ECOMMERCE:</div>
|
||||
<CECommerce> </CECommerce>
|
||||
</div>
|
||||
<div v-else-if="myel.type === shared_consts.ELEMTYPE.NOTIFATTOP">
|
||||
<div v-if="editOn" class="elemEdit">Notifiche in Cima</div>
|
||||
<CNotifAtTop></CNotifAtTop>
|
||||
@@ -582,7 +578,6 @@
|
||||
<span class="mybanner"
|
||||
>Chiudere e Riaprire la App, per completare l'Aggiornamento</span
|
||||
>
|
||||
|
||||
</div>
|
||||
<div v-else>
|
||||
<span class="mybanner"
|
||||
@@ -590,7 +585,6 @@
|
||||
scomparire questo messaggio, chiudere e riaprire la pagina.</span
|
||||
>
|
||||
</div>
|
||||
|
||||
</q-banner>
|
||||
</div>
|
||||
<div v-else-if="myel.type === shared_consts.ELEMTYPE.BTN_REG">
|
||||
|
||||
5
src/views/ecommerce/cartList/cartList.scss
Executable file
5
src/views/ecommerce/cartList/cartList.scss
Executable file
@@ -0,0 +1,5 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
59
src/views/ecommerce/cartList/cartList.ts
Executable file
59
src/views/ecommerce/cartList/cartList.ts
Executable file
@@ -0,0 +1,59 @@
|
||||
import { defineComponent, onMounted, ref } from 'vue'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useProducts } from '@store/Products'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
|
||||
import { CProductCard } from '@src/components/CProductCard'
|
||||
|
||||
export default defineComponent({
|
||||
name: 'CartList',
|
||||
components: { CProductCard },
|
||||
filters: {
|
||||
capitalize(value: any) {
|
||||
if (!value) {
|
||||
return ''
|
||||
}
|
||||
value = value.toString()
|
||||
return value.charAt(0).toUpperCase() + value.slice(1)
|
||||
}
|
||||
},
|
||||
props: {},
|
||||
setup() {
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const productStore = useProducts()
|
||||
const $router = useRouter()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n();
|
||||
|
||||
function getCart() {
|
||||
return productStore.getCart()
|
||||
}
|
||||
|
||||
function getProducts() {
|
||||
return productStore.getProducts()
|
||||
}
|
||||
|
||||
function mounted() {
|
||||
// Inizializza
|
||||
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
userStore,
|
||||
costanti,
|
||||
tools,
|
||||
toolsext,
|
||||
getCart,
|
||||
getProducts,
|
||||
}
|
||||
}
|
||||
})
|
||||
21
src/views/ecommerce/cartList/cartList.vue
Executable file
21
src/views/ecommerce/cartList/cartList.vue
Executable file
@@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<div class="panel">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="q-pa-md row items-start q-gutter-md" v-for="(product, index) in getProducts" :key="index">
|
||||
<CProductCard :product="product"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./cartList.ts">
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './cartList';
|
||||
</style>
|
||||
1
src/views/ecommerce/cartList/index.ts
Executable file
1
src/views/ecommerce/cartList/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as CartList} from './cartList.vue'
|
||||
5
src/views/ecommerce/checkOut/checkOut.scss
Executable file
5
src/views/ecommerce/checkOut/checkOut.scss
Executable file
@@ -0,0 +1,5 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
178
src/views/ecommerce/checkOut/checkOut.ts
Executable file
178
src/views/ecommerce/checkOut/checkOut.ts
Executable file
@@ -0,0 +1,178 @@
|
||||
import Vue from 'vue'
|
||||
import { Component, Watch } from 'vue-property-decorator'
|
||||
|
||||
import { SingleProject } from '../../../components/projects/SingleProject/index'
|
||||
import { CTodo } from '../../../components/todos/CTodo'
|
||||
|
||||
import { CProgress } from '../../../components/CProgress'
|
||||
import { CDate } from '../../../components/CDate'
|
||||
import { Action } from 'vuex'
|
||||
import Products from '@src/store/Modules/Products'
|
||||
import { CSingleCart } from '../../../components/CSingleCart'
|
||||
import { CTitleBanner } from '@components'
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
import { ICart } from '@src/model'
|
||||
import MixinBase from '@src/mixins/mixin-base'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
|
||||
const namespace: string = 'Products'
|
||||
|
||||
@Component({
|
||||
name: 'checkOut',
|
||||
components: { SingleProject, CProgress, CTodo, CDate, CSingleCart, CTitleBanner },
|
||||
filters: {
|
||||
capitalize(value) {
|
||||
if (!value) {
|
||||
return ''
|
||||
}
|
||||
value = value.toString()
|
||||
return value.charAt(0).toUpperCase() + value.slice(1)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
export default class CheckOut extends MixinBase {
|
||||
public $q: any
|
||||
public mycart: ICart = {}
|
||||
public myrec: any[]
|
||||
public note: string = ''
|
||||
public statusnow: number = shared_consts.OrderStatus.NONE
|
||||
|
||||
public conferma_carrello: boolean = false
|
||||
public conferma_ordine: boolean = false
|
||||
|
||||
/*public $refs: {
|
||||
singleproject: SingleProject[],
|
||||
ctodo: CTodo
|
||||
}*/
|
||||
|
||||
get getItemsCart() {
|
||||
const cart = Products.getters.getCart()
|
||||
return cart.items || null
|
||||
}
|
||||
|
||||
get getNumItems() {
|
||||
const cart = Products.getters.getCart()
|
||||
if (!!cart.items)
|
||||
return cart.items.length || 0
|
||||
else
|
||||
return 0
|
||||
}
|
||||
|
||||
get getCart() {
|
||||
return Products.getters.getCart()
|
||||
}
|
||||
|
||||
get getNote() {
|
||||
const cart = Products.getters.getCart()
|
||||
return cart.note
|
||||
}
|
||||
|
||||
public change_field(fieldname) {
|
||||
if (this.myrec[fieldname] !== this[fieldname]) {
|
||||
this.myrec[fieldname] = this[fieldname]
|
||||
|
||||
const mydata = {
|
||||
[fieldname]: this.myrec[fieldname]
|
||||
}
|
||||
|
||||
const aggiorna = fieldname !== 'status'
|
||||
tools.saveFieldToServer(this, 'carts', this.mycart._id, mydata, aggiorna)
|
||||
}
|
||||
}
|
||||
|
||||
get myTotalPrice() {
|
||||
if (Products.state.cart && Products.state.cart.totalPrice) {
|
||||
return Products.state.cart.totalPrice.toFixed(2)
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
get myTotalQty() {
|
||||
if (Products.state.cart) {
|
||||
return Products.state.cart.totalQty
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
public async mounted() {
|
||||
// Products.actions.loadCart()
|
||||
this.load()
|
||||
}
|
||||
|
||||
public async load() {
|
||||
this.mycart = this.getCart
|
||||
this.myrec = Object.keys(this.mycart)
|
||||
this.note = this.mycart.note
|
||||
|
||||
if (this.mycart)
|
||||
this.statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status })
|
||||
|
||||
console.log('myrec', this.myrec)
|
||||
}
|
||||
|
||||
public CanBeShipped() {
|
||||
return Products.state.cart.items.filter((rec) => rec.order.product.canBeShipped).length
|
||||
}
|
||||
|
||||
public CanBeBuyOnline() {
|
||||
return Products.state.cart.items.filter((rec) => rec.order.product.canBeBuyOnline).length
|
||||
}
|
||||
|
||||
get getnumsteps() {
|
||||
let numsteps = 1
|
||||
|
||||
if (this.CanBeShipped())
|
||||
numsteps++
|
||||
if (this.CanBeBuyOnline())
|
||||
numsteps++
|
||||
|
||||
return numsteps
|
||||
}
|
||||
|
||||
public docheckout() {
|
||||
|
||||
// Può essere spedito?
|
||||
|
||||
if (this.CanBeShipped()) {
|
||||
// mostra form di spedizione
|
||||
}
|
||||
|
||||
if (this.CanBeBuyOnline()) {
|
||||
// mostra form di acquisto Online
|
||||
}
|
||||
}
|
||||
|
||||
get nextstep() {
|
||||
return 0
|
||||
}
|
||||
|
||||
public completeOrder() {
|
||||
this.$q.dialog({
|
||||
message: 'Confermare l\'ordine di acquisto di ' + this.myTotalQty + ' prodotti ?',
|
||||
ok: {
|
||||
label: this.$t('dialog.yes'),
|
||||
push: true
|
||||
},
|
||||
cancel: {
|
||||
label: this.$t('dialog.cancel')
|
||||
},
|
||||
title: 'Ordine'
|
||||
}).onOk(async () => {
|
||||
const status = shared_consts.OrderStatus.CHECKOUT_SENT
|
||||
this.statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status })
|
||||
|
||||
if (this.statusnow === status) {
|
||||
tools.showPositiveNotif(this.$q, 'Ordine Confermato')
|
||||
setTimeout(() => {
|
||||
this.$router.push('/orderinfo')
|
||||
}, 2000)
|
||||
}
|
||||
// this.change_field('status')
|
||||
// this.change_field('status')
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
44
src/views/ecommerce/checkOut/checkOut.vue
Executable file
44
src/views/ecommerce/checkOut/checkOut.vue
Executable file
@@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<CTitleBanner title="Carrello"></CTitleBanner>
|
||||
<div class="panel">
|
||||
<div>
|
||||
<div class="container">
|
||||
<div class="q-pa-sm col items-start q-gutter-xs" v-for="(itemorder, index) in getItemsCart" :key="index">
|
||||
|
||||
<CSingleCart :order="itemorder.order" :showall="true"/>
|
||||
</div>
|
||||
</div>
|
||||
<q-separator></q-separator>
|
||||
<div class="col-6 q-mr-sm" style="text-align: right">
|
||||
<span class="text-grey q-mr-xs">Totale:</span> <span
|
||||
class="text-subtitle1 q-mr-sm ">€ {{ myTotalPrice }}</span>
|
||||
</div>
|
||||
|
||||
<q-input v-if="getNumItems > 0" v-model="note" style="max-width: 400px;" label="Scrivi qui per eventuali note o chiarimenti:"
|
||||
filled dense
|
||||
debounce="1000"
|
||||
autogrow
|
||||
@input="change_field('note')">
|
||||
</q-input>
|
||||
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<q-stepper-navigation>
|
||||
<q-btn v-if="statusnow < shared_consts.OrderStatus.CHECKOUT_SENT" rounded icon="fas fa-shopping-cart" color="green" label="Completa l'Ordine" class="q-mb-sm"
|
||||
:disabled="myTotalQty < 1"
|
||||
@click="completeOrder"></q-btn>
|
||||
</q-stepper-navigation>
|
||||
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./checkOut.ts">
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './checkOut';
|
||||
</style>
|
||||
1
src/views/ecommerce/checkOut/index.ts
Executable file
1
src/views/ecommerce/checkOut/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as checkOut} from './checkOut.vue'
|
||||
1
src/views/ecommerce/index.ts
Executable file
1
src/views/ecommerce/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export * from './productsList'
|
||||
1
src/views/ecommerce/orderInfo/index.ts
Executable file
1
src/views/ecommerce/orderInfo/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as orderInfo} from './orderInfo.vue'
|
||||
14
src/views/ecommerce/orderInfo/orderInfo.scss
Executable file
14
src/views/ecommerce/orderInfo/orderInfo.scss
Executable file
@@ -0,0 +1,14 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
|
||||
.mycol{
|
||||
color:gray;
|
||||
}
|
||||
|
||||
|
||||
.q-item__label--caption{
|
||||
color: blue;
|
||||
}
|
||||
227
src/views/ecommerce/orderInfo/orderInfo.ts
Executable file
227
src/views/ecommerce/orderInfo/orderInfo.ts
Executable file
@@ -0,0 +1,227 @@
|
||||
import Vue from 'vue'
|
||||
import { Component, Watch } from 'vue-property-decorator'
|
||||
|
||||
import { SingleProject } from '../../../components/projects/SingleProject/index'
|
||||
import { CTodo } from '../../../components/todos/CTodo'
|
||||
|
||||
import { CProgress } from '../../../components/CProgress'
|
||||
import { CDate } from '../../../components/CDate'
|
||||
import { Action } from 'vuex'
|
||||
import Products from '@src/store/Modules/Products'
|
||||
import { CSingleCart } from '../../../components/CSingleCart'
|
||||
import { CTitleBanner } from '@components'
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
import { ICart, IOrderCart } from '@src/model'
|
||||
import MixinBase from '@src/mixins/mixin-base'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
|
||||
const namespace: string = 'Products'
|
||||
|
||||
@Component({
|
||||
name: 'checkOut',
|
||||
components: { SingleProject, CProgress, CTodo, CDate, CSingleCart, CTitleBanner },
|
||||
filters: {
|
||||
capitalize(value) {
|
||||
if (!value) {
|
||||
return ''
|
||||
}
|
||||
value = value.toString()
|
||||
return value.charAt(0).toUpperCase() + value.slice(1)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
export default class OrderInfo extends MixinBase {
|
||||
public $q: any
|
||||
public myorderscart: IOrderCart[] = []
|
||||
public myarrrec: any = {}
|
||||
|
||||
public conferma_carrello: boolean = false
|
||||
public conferma_ordine: boolean = false
|
||||
|
||||
public taborders: string = 'incorso'
|
||||
public filter: string = ''
|
||||
public statusnow: number = 0
|
||||
public arrnumstatus: any = []
|
||||
public columns = [
|
||||
{
|
||||
name: 'numorder',
|
||||
required: true,
|
||||
align: 'left',
|
||||
label: 'Numero Ordine',
|
||||
field: 'numorder',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'nameSurname',
|
||||
required: true,
|
||||
align: 'left',
|
||||
label: 'Nome',
|
||||
field: 'nameSurname',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'created_at',
|
||||
required: true,
|
||||
align: 'center',
|
||||
label: 'Effettuato il',
|
||||
field: 'created_at',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'items',
|
||||
required: true,
|
||||
label: 'Articoli',
|
||||
field: 'items',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'totalPrice',
|
||||
required: true,
|
||||
label: 'Totale',
|
||||
field: 'totalPrice',
|
||||
sortable: true
|
||||
},
|
||||
{
|
||||
name: 'status',
|
||||
align: 'center',
|
||||
required: true,
|
||||
label: 'Stato',
|
||||
field: 'status',
|
||||
sortable: true
|
||||
}
|
||||
]
|
||||
|
||||
/*public $refs: {
|
||||
singleproject: SingleProject[],
|
||||
ctodo: CTodo
|
||||
}*/
|
||||
|
||||
get getOrdersCart() {
|
||||
return Products.getters.getOrdersCart(this.taborders)
|
||||
}
|
||||
|
||||
get getAllOrdersCart() {
|
||||
return Products.getters.getOrdersAllCart()
|
||||
}
|
||||
|
||||
public change_field(myorderid, fieldname) {
|
||||
if (this.myarrrec[myorderid][fieldname] !== this[fieldname]) {
|
||||
this.myarrrec[myorderid][fieldname] = this[fieldname]
|
||||
|
||||
const mydata = {
|
||||
[fieldname]: this.myarrrec[myorderid][fieldname]
|
||||
}
|
||||
|
||||
const aggiorna = fieldname !== 'status'
|
||||
tools.saveFieldToServer(this, 'orderscart', myorderid, mydata, aggiorna)
|
||||
}
|
||||
}
|
||||
public updateorders() {
|
||||
this.myorderscart = this.getOrdersCart
|
||||
for (const ordercart of this.myorderscart) {
|
||||
this.myarrrec[ordercart._id] = Object.keys(ordercart)
|
||||
}
|
||||
|
||||
const allorders = this.getAllOrdersCart
|
||||
for (const status of [
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
6,
|
||||
10
|
||||
]) {
|
||||
this.arrnumstatus[status] = allorders.filter((rec) => (rec.status === status)).reduce((sum, item) => sum + 1, 0)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public mounted() {
|
||||
|
||||
this.updateorders()
|
||||
|
||||
console.log('arrnumstatus;')
|
||||
console.log(this.arrnumstatus)
|
||||
|
||||
this.columns = [...this.columns,
|
||||
{
|
||||
name: 'comandi',
|
||||
align: 'center',
|
||||
required: false,
|
||||
label: 'Comandi',
|
||||
field: 'comandi',
|
||||
sortable: false
|
||||
}]
|
||||
|
||||
}
|
||||
|
||||
public CanBeShipped() {
|
||||
return Products.state.cart.items.filter((rec) => rec.order.product.canBeShipped).length
|
||||
}
|
||||
|
||||
public CanBeBuyOnline() {
|
||||
return Products.state.cart.items.filter((rec) => rec.order.product.canBeBuyOnline).length
|
||||
}
|
||||
|
||||
get getnumsteps() {
|
||||
let numsteps = 1
|
||||
|
||||
if (this.CanBeShipped())
|
||||
numsteps++
|
||||
if (this.CanBeBuyOnline())
|
||||
numsteps++
|
||||
|
||||
return numsteps
|
||||
}
|
||||
|
||||
public docheckout() {
|
||||
|
||||
// Può essere spedito?
|
||||
|
||||
if (this.CanBeShipped()) {
|
||||
// mostra form di spedizione
|
||||
}
|
||||
|
||||
if (this.CanBeBuyOnline()) {
|
||||
// mostra form di acquisto Online
|
||||
}
|
||||
}
|
||||
|
||||
get nextstep() {
|
||||
return 0
|
||||
}
|
||||
|
||||
public clickFunz(order, status) {
|
||||
|
||||
if (status === shared_consts.OrderStatus.ORDER_CONFIRMED) {
|
||||
// Conferma Ordine
|
||||
}
|
||||
|
||||
const statusStr = shared_consts.getStatusStr(status)
|
||||
|
||||
this.$q.dialog({
|
||||
message: 'Impostare l\'ordine n. ' + order.numorder + ' ' + statusStr + ' ?',
|
||||
ok: {
|
||||
label: this.$t('dialog.yes'),
|
||||
push: true
|
||||
},
|
||||
cancel: {
|
||||
label: this.$t('dialog.cancel')
|
||||
},
|
||||
title: 'Ordine'
|
||||
}).onOk(async () => {
|
||||
|
||||
this.statusnow = await Products.actions.UpdateOrderStatus({ order_id: order._id, status })
|
||||
|
||||
if (this.statusnow === status) {
|
||||
order.status = this.statusnow
|
||||
this.updateorders()
|
||||
tools.showPositiveNotif(this.$q, 'Ordine ' + statusStr)
|
||||
}
|
||||
// this.change_field('status')
|
||||
// this.change_field('status')
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
191
src/views/ecommerce/orderInfo/orderInfo.vue
Executable file
191
src/views/ecommerce/orderInfo/orderInfo.vue
Executable file
@@ -0,0 +1,191 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<CTitleBanner title="Ordini"></CTitleBanner>
|
||||
<div class="panel">
|
||||
<q-tabs
|
||||
v-model="taborders"
|
||||
inline-label
|
||||
class="text-blue"
|
||||
>
|
||||
<q-tab class="text-black" v-if="this.arrnumstatus[2] > 0" name="incorso" icon="fas fa-tasks" :label="`(` + this.arrnumstatus[2] +`) in Corso`"/>
|
||||
<q-tab class="text-blue" v-if="this.arrnumstatus[3] > 0" name="confermati" icon="fas fa-calendar" :label="`(` + this.arrnumstatus[3] +`) Confermati`"/>
|
||||
<q-tab class="text-green" v-if="this.arrnumstatus[4] > 0" name="pagati" icon="fas fa-calendar" :label="`(` + this.arrnumstatus[4] +`) Pagati`"/>
|
||||
<q-tab class="text-blue-grey-8" v-if="this.arrnumstatus[6] > 0" name="completati" icon="fas fa-check" :label="`(` + this.arrnumstatus[6] +`) Completati`"/>
|
||||
<q-tab class="text-red" v-if="this.arrnumstatus[10] > 0" name="cancellati" icon="delete" :label="`(` + this.arrnumstatus[10] +`) Cancellati`"/>
|
||||
</q-tabs>
|
||||
|
||||
<div class="q-pa-sm">
|
||||
<q-table
|
||||
:grid="$q.screen.lt.sm"
|
||||
:hide-header="$q.screen.lt.sm"
|
||||
:columns="columns"
|
||||
row-key="numorder"
|
||||
:data="getOrdersCart">
|
||||
|
||||
<template v-if="$q.screen.lt.sm" v-slot:item="props">
|
||||
<div class="q-pa-xs col-xs-12 col-sm-6 col-md-4">
|
||||
<q-card class="my-card-shadow yes_shadow">
|
||||
<q-list dense>
|
||||
<q-item v-for="col in props.cols.filter(col => col.name !== 'desc')" :key="col.name">
|
||||
<q-item-section>
|
||||
<q-item-label>{{ col.label }}</q-item-label>
|
||||
</q-item-section>
|
||||
<q-item-section side>
|
||||
<q-item-label v-if="col.name === 'created_at'" caption>{{
|
||||
tools.getstrDateTime(col.value)
|
||||
}}
|
||||
<span v-if="taborders === 'completati'">
|
||||
<br>Completato il: {{ tools.getstrDateTime(props.row.completed_at) }}
|
||||
</span>
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'items'" caption>
|
||||
<div v-for="item of props.row.items">
|
||||
<div v-if="!!item.order.product">
|
||||
{{ item.order.product.name }} ({{ item.order.quantity }})<br>
|
||||
</div>
|
||||
</div>
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'totalPrice'" caption>
|
||||
{{ props.row.totalPrice }} €
|
||||
</q-item-label>
|
||||
<q-item-label v-else-if="col.name === 'status'" caption>
|
||||
{{ shared_consts.getStatusStr(props.row.status) }}
|
||||
</q-item-label>
|
||||
<q-item-label v-else caption>{{ col.value }}</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
</q-card>
|
||||
</div>
|
||||
</template>
|
||||
<template v-else v-slot:body="props">
|
||||
<q-tr :props="props">
|
||||
<q-td key="numorder" :props="props">
|
||||
n. {{ props.row.numorder }}
|
||||
</q-td>
|
||||
<q-td key="nameSurname" :props="props">
|
||||
{{ props.row.nameSurname }}
|
||||
</q-td>
|
||||
<q-td key="created_at" :props="props">
|
||||
{{ tools.getstrDateTime(props.row.created_at) }}
|
||||
<span v-if="taborders === 'completati'">
|
||||
<br>Completato il:<br>{{ tools.getstrDateTime(props.row.completed_at) }}
|
||||
</span>
|
||||
</q-td>
|
||||
<q-td key="items" :props="props">
|
||||
<div v-for="item of props.row.items">
|
||||
<div v-if="!!item.order.product">
|
||||
{{ item.order.product.name }} ({{ item.order.quantity }})<br>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</q-td>
|
||||
<q-td key="totalPrice" :props="props">
|
||||
{{ props.row.totalPrice }} €
|
||||
</q-td>
|
||||
<q-td key="status" :props="props">
|
||||
<span :class="props.row.status">{{ shared_consts.getStatusStr(props.row.status) }}</span>
|
||||
</q-td>
|
||||
<q-td key="comandi" :props="props">
|
||||
Bottone:
|
||||
<div v-if="tools.isManager()" class="q-pa-sm">
|
||||
|
||||
<q-btn-dropdown rounded dense label="Azioni">
|
||||
<q-list class="text-primary">
|
||||
<q-item clickable v-close-popup
|
||||
@click="clickFunz(props.row, shared_consts.OrderStatus.ORDER_CONFIRMED)">
|
||||
<q-item-section avatar>
|
||||
<q-avatar icon="fas fa-list-ol" color="grey" text-color="white"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>Inviato</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item clickable v-close-popup
|
||||
@click="clickFunz(props.row, shared_consts.OrderStatus.ORDER_CONFIRMED)">
|
||||
<q-item-section avatar>
|
||||
<q-avatar icon="fas fa-calendar-check" color="secondary" text-color="white"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>Confermato</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item clickable v-close-popup @click="clickFunz(props.row, shared_consts.OrderStatus.PAYED)"
|
||||
color="blue">
|
||||
<q-item-section avatar>
|
||||
<q-avatar icon="money" color="positive" text-color="white"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>Pagato</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item clickable v-close-popup @click="clickFunz(props.row, shared_consts.OrderStatus.RECEIVED)"
|
||||
color="blue">
|
||||
<q-item-section avatar>
|
||||
<q-avatar icon="fas fa-check" color="primary" text-color="white"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>Completato</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
<q-item clickable v-close-popup @click="clickFunz(props.row, shared_consts.OrderStatus.CANCELED)"
|
||||
color="blue">
|
||||
<q-item-section avatar>
|
||||
<q-avatar icon="delete" color="negative" text-color="white"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label>Cancellato</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
|
||||
</q-list>
|
||||
</q-btn-dropdown>
|
||||
</div>
|
||||
</q-td>
|
||||
</q-tr>
|
||||
</template>
|
||||
</q-table>
|
||||
</div>
|
||||
|
||||
<!--
|
||||
<div v-for="(ordercart, index) in getOrdersCart" :key="index">
|
||||
|
||||
<div>
|
||||
{{ ordercart.numorder }}<br>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<div class="q-pa-sm col items-start q-gutter-xs" v-for="(itemorder, index) in ordercart.items" :key="index">
|
||||
|
||||
<CSingleCart :order="itemorder.order" :showall="true" :nomodif="true"/>
|
||||
</div>
|
||||
</div>
|
||||
<q-separator></q-separator>
|
||||
<div class="col-6 q-mr-sm" style="text-align: right">
|
||||
<span class="text-grey q-mr-xs">Totale:</span> <span
|
||||
class="text-subtitle1 q-mr-sm ">€ {{ ordercart.totalPrice.toFixed(2) }}</span>
|
||||
</div>
|
||||
|
||||
<q-input v-model="ordercart.note" style="max-width: 400px;" label="Note aggiuntive:"
|
||||
filled dense
|
||||
debounce="1000"
|
||||
autogrow
|
||||
@input="change_field(ordercart.id, 'note')">
|
||||
</q-input>
|
||||
|
||||
<br>
|
||||
</div>
|
||||
-->
|
||||
|
||||
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./orderInfo.ts">
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './orderInfo';
|
||||
</style>
|
||||
1
src/views/ecommerce/productInfo/index.ts
Executable file
1
src/views/ecommerce/productInfo/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as ProductInfo} from './ProductInfo.vue'
|
||||
5
src/views/ecommerce/productInfo/productInfo.scss
Executable file
5
src/views/ecommerce/productInfo/productInfo.scss
Executable file
@@ -0,0 +1,5 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
51
src/views/ecommerce/productInfo/productInfo.ts
Executable file
51
src/views/ecommerce/productInfo/productInfo.ts
Executable file
@@ -0,0 +1,51 @@
|
||||
import Vue from 'vue'
|
||||
import { Component, Prop, Watch } from 'vue-property-decorator'
|
||||
|
||||
import {
|
||||
IAction,
|
||||
IDrag, IProduct,
|
||||
IProductsState, ITodo, ITodosState,
|
||||
TypeProj
|
||||
} from '../../../model/index'
|
||||
import { SingleProject } from '../../../components/projects/SingleProject/index'
|
||||
import { CTodo } from '../../../components/todos/CTodo'
|
||||
|
||||
import { tools } from '../../../store/Modules/tools'
|
||||
import { toolsext } from '@src/store/Modules/toolsext'
|
||||
import { lists } from '../../../store/Modules/lists'
|
||||
import * as ApiTables from '../../../store/Modules/ApiTables'
|
||||
|
||||
import { GlobalStore, Projects, Todos } from '@store'
|
||||
import { UserStore } from '@store'
|
||||
|
||||
import { Getter } from 'vuex-class'
|
||||
|
||||
import { date, Screen } from 'quasar'
|
||||
import { CProgress } from '../../../components/CProgress'
|
||||
import { CDate } from '../../../components/CDate'
|
||||
import { RouteNames } from '@src/router/route-names'
|
||||
import { CProductCard } from '@src/components/CProductCard'
|
||||
import { Action } from 'vuex'
|
||||
import Products from '@src/store/Modules/Products'
|
||||
|
||||
const namespace: string = 'Products'
|
||||
|
||||
@Component({
|
||||
name: 'ProductInfo',
|
||||
components: { SingleProject, CProgress, CTodo, CDate, CProductCard }
|
||||
})
|
||||
|
||||
export default class ProductInfo extends Vue {
|
||||
public $q: any
|
||||
public code: string = ''
|
||||
|
||||
public created() {
|
||||
console.log('created productInfo')
|
||||
console.log(this.$route)
|
||||
if (!!this.$route.params.codprod) {
|
||||
this.code = this.$route.params.codprod.toString()
|
||||
}
|
||||
|
||||
console.log('this.code', this.code)
|
||||
}
|
||||
}
|
||||
19
src/views/ecommerce/productInfo/productInfo.vue
Executable file
19
src/views/ecommerce/productInfo/productInfo.vue
Executable file
@@ -0,0 +1,19 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<div class="panel">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<CProductCard :code="code" complete="true"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./productInfo.ts">
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './productInfo';
|
||||
</style>
|
||||
1
src/views/ecommerce/productsList/index.ts
Executable file
1
src/views/ecommerce/productsList/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as ProductsList} from './productsList.vue'
|
||||
5
src/views/ecommerce/productsList/productsList.scss
Executable file
5
src/views/ecommerce/productsList/productsList.scss
Executable file
@@ -0,0 +1,5 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
55
src/views/ecommerce/productsList/productsList.ts
Executable file
55
src/views/ecommerce/productsList/productsList.ts
Executable file
@@ -0,0 +1,55 @@
|
||||
import { defineComponent, onMounted, ref } from 'vue'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useProducts } from '@store/Products'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
|
||||
import { CProductCard } from '@src/components/CProductCard'
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
name: 'ProductsList',
|
||||
components: { CProductCard },
|
||||
filters: {
|
||||
capitalize(value: any) {
|
||||
if (!value) {
|
||||
return ''
|
||||
}
|
||||
value = value.toString()
|
||||
return value.charAt(0).toUpperCase() + value.slice(1)
|
||||
}
|
||||
},
|
||||
props: {},
|
||||
setup() {
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const productStore = useProducts()
|
||||
const $router = useRouter()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n();
|
||||
|
||||
function mounted() {
|
||||
// Inizializza
|
||||
productStore.loadProducts()
|
||||
}
|
||||
function getProducts() {
|
||||
return productStore.getProducts()
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
userStore,
|
||||
costanti,
|
||||
tools,
|
||||
toolsext,
|
||||
getProducts,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
21
src/views/ecommerce/productsList/productsList.vue
Executable file
21
src/views/ecommerce/productsList/productsList.vue
Executable file
@@ -0,0 +1,21 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<div class="panel">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="q-pa-md row items-start q-gutter-md" v-for="(product, index) in getProducts" :key="index">
|
||||
<CProductCard :product="product" :complete="false"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./productsList.ts">
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './productsList';
|
||||
</style>
|
||||
0
src/views/scheletro_convers/scheletro_convers.scss
Executable file
0
src/views/scheletro_convers/scheletro_convers.scss
Executable file
40
src/views/scheletro_convers/scheletro_convers.ts
Executable file
40
src/views/scheletro_convers/scheletro_convers.ts
Executable file
@@ -0,0 +1,40 @@
|
||||
import { defineComponent, onMounted, ref } from 'vue'
|
||||
import { tools } from '@store/Modules/tools'
|
||||
import { useUserStore } from '@store/UserStore'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { useGlobalStore } from '@store/globalStore'
|
||||
import { useProducts } from '@store/Products'
|
||||
import { useI18n } from '@/boot/i18n'
|
||||
import { toolsext } from '@store/Modules/toolsext'
|
||||
import { useQuasar } from 'quasar'
|
||||
import { costanti } from '@costanti'
|
||||
|
||||
|
||||
export default defineComponent({
|
||||
name: 'Scheletro',
|
||||
components: { },
|
||||
props: {},
|
||||
setup() {
|
||||
const userStore = useUserStore()
|
||||
const globalStore = useGlobalStore()
|
||||
const productStore = useProducts()
|
||||
const $router = useRouter()
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n();
|
||||
|
||||
|
||||
function mounted() {
|
||||
// Inizializza
|
||||
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
|
||||
return {
|
||||
userStore,
|
||||
costanti,
|
||||
tools,
|
||||
toolsext,
|
||||
}
|
||||
}
|
||||
})
|
||||
4
src/views/scheletro_convers/scheletro_convers.vue
Executable file
4
src/views/scheletro_convers/scheletro_convers.vue
Executable file
@@ -0,0 +1,4 @@
|
||||
<template>
|
||||
<div>
|
||||
</div>
|
||||
</template>
|
||||
Reference in New Issue
Block a user