Ordini
This commit is contained in:
@@ -83,6 +83,9 @@ export const shared_consts = {
|
||||
|
||||
TypeMsg: {
|
||||
SEND_TO_ALL: 1,
|
||||
SEND_TO_SOCI: 2,
|
||||
SEND_TO_SOCIO_RESIDENTE: 3,
|
||||
SEND_TO_NON_SOCI: 10
|
||||
},
|
||||
|
||||
TypeMsg_Actions: {
|
||||
@@ -109,6 +112,40 @@ export const shared_consts = {
|
||||
}
|
||||
],
|
||||
|
||||
selectDestination: [
|
||||
{
|
||||
id: 0,
|
||||
label: 'A Tutti',
|
||||
value: 1
|
||||
},
|
||||
{
|
||||
id: 1,
|
||||
label: 'Solo ai Soci',
|
||||
value: 2
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
label: 'Solo ai Soci Residenti',
|
||||
value: 3
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
label: 'Solo ai NON Soci',
|
||||
value: 10
|
||||
}
|
||||
],
|
||||
|
||||
OrderStatus: {
|
||||
NONE: 0,
|
||||
IN_CART: 1,
|
||||
CHECKOUT_CONFIRMED: 2,
|
||||
PAYED: 3,
|
||||
DELIVEDED: 4,
|
||||
RECEIVED: 5,
|
||||
CANCELED: 10,
|
||||
},
|
||||
|
||||
|
||||
fieldsUserToChange() {
|
||||
return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'verified_email', 'img', 'ipaddr', 'lasttimeonline', 'profile', 'news_on']
|
||||
}
|
||||
|
||||
@@ -467,7 +467,7 @@ export default class CEventsCalendar extends MixinEvents {
|
||||
public addBookEventMenu(eventparam) {
|
||||
if (!UserStore.state.isLogged || !UserStore.state.my.verified_email) {
|
||||
// Visu right Toolbar to make SignIn
|
||||
GlobalStore.state.RightDrawerOpen = true
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
tools.showNeutralNotif(this.$q, this.$t('login.needlogin'))
|
||||
tools.scrollToTop()
|
||||
// window.scrollTo(0, 0)
|
||||
@@ -490,7 +490,7 @@ export default class CEventsCalendar extends MixinEvents {
|
||||
public askForInfoEventMenu(eventparam) {
|
||||
if (!UserStore.state.isLogged || !UserStore.state.my.verified_email) {
|
||||
// Visu right Toolbar to make SignIn
|
||||
GlobalStore.state.RightDrawerOpen = true
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
|
||||
tools.showNeutralNotif(this.$q, this.$t('login.needlogin'))
|
||||
tools.scrollToTop()
|
||||
|
||||
@@ -6,7 +6,7 @@ import { CCardState } from '../CCardState'
|
||||
import { CCopyBtn } from '../CCopyBtn'
|
||||
|
||||
import { IOrder, IProduct } from '@src/model'
|
||||
import { Products, UserStore } from '@store'
|
||||
import { GlobalStore, Products, UserStore } from '@store'
|
||||
import { CSingleCart } from '../../components/CSingleCart'
|
||||
import MixinUsers from '@src/mixins/mixin-users'
|
||||
|
||||
@@ -44,4 +44,8 @@ export default class CMyCart extends MixinUsers {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
public closecart() {
|
||||
GlobalStore.state.rightCartOpen = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
Il Carrello è Vuoto
|
||||
</div>
|
||||
<div v-else style="text-align: center">
|
||||
<q-btn rounded icon="fas fa-shopping-cart" color="green" label="Vai alla Cassa" class="q-mb-sm" to="/checkout"></q-btn>
|
||||
<q-btn rounded icon="fas fa-shopping-cart" color="green" label="Vai alla Cassa" class="q-mb-sm" to="/checkout" @click="closecart"></q-btn>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -17,7 +17,10 @@ import { Products, UserStore } from '@store'
|
||||
|
||||
export default class CProductCard extends MixinBase {
|
||||
public $t
|
||||
@Prop({ required: true }) public product: IProduct
|
||||
@Prop({ required: false, default: null }) public product: IProduct
|
||||
public myproduct: IProduct = null
|
||||
@Prop({ required: false, default: '' }) public code: string
|
||||
@Prop({ required: false, default: false }) public complete: boolean
|
||||
@Prop({
|
||||
required: false,
|
||||
type: Object,
|
||||
@@ -50,11 +53,17 @@ export default class CProductCard extends MixinBase {
|
||||
|
||||
public addtoCart() {
|
||||
|
||||
if (!UserStore.state.isLogged) {
|
||||
tools.showNeutralNotif(this.$q, 'Devi prima accedere alla tua Area Personale')
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
return false
|
||||
}
|
||||
|
||||
// Controlla se esiste già nel carrello il prodotto
|
||||
if (Products.getters.existProductInCart(this.product._id)) {
|
||||
if (Products.getters.existProductInCart(this.myproduct._id)) {
|
||||
tools.showNegativeNotif(this.$q, 'Questo prodotto è stato già aggiunto al Carrello')
|
||||
} else {
|
||||
Products.actions.addToCart({ product: this.product, order: this.order }).then((ris) => {
|
||||
Products.actions.addToCart({ product: this.myproduct, order: this.order }).then((ris) => {
|
||||
let strprod = 'prodotto'
|
||||
if (this.order.quantity > 1)
|
||||
strprod = 'prodotti'
|
||||
@@ -67,14 +76,14 @@ export default class CProductCard extends MixinBase {
|
||||
}
|
||||
|
||||
public getnumstore() {
|
||||
if (!!this.product.storehouses)
|
||||
return this.product.storehouses.length
|
||||
if (!!this.myproduct.storehouses)
|
||||
return this.myproduct.storehouses.length
|
||||
else
|
||||
return 0
|
||||
}
|
||||
|
||||
public getSingleStorehouse() {
|
||||
const mystore = this.product.storehouses[0]
|
||||
const mystore = this.myproduct.storehouses[0]
|
||||
return mystore.name + ' (' + mystore.city + ')'
|
||||
}
|
||||
|
||||
@@ -82,7 +91,7 @@ export default class CProductCard extends MixinBase {
|
||||
|
||||
const myarr = []
|
||||
let ind = 1
|
||||
this.product.storehouses.forEach((store) => {
|
||||
this.myproduct.storehouses.forEach((store) => {
|
||||
myarr.push(
|
||||
{
|
||||
id: ind,
|
||||
@@ -101,13 +110,36 @@ export default class CProductCard extends MixinBase {
|
||||
return !this.order.idStorehouse
|
||||
}
|
||||
|
||||
public infoproduct() {
|
||||
|
||||
@Watch('code')
|
||||
public codechanged(value) {
|
||||
console.log('change code')
|
||||
this.load()
|
||||
}
|
||||
|
||||
public created() {
|
||||
if (this.product.storehouses.length === 1) {
|
||||
this.order.idStorehouse = this.product.storehouses[0]._id
|
||||
public async load() {
|
||||
// console.log('created Cproductcard', this.code)
|
||||
if (this.code) {
|
||||
this.myproduct = await Products.actions.loadProduct({ code: this.code })
|
||||
} else {
|
||||
this.myproduct = this.product
|
||||
}
|
||||
// console.log('this.myproduct', this.myproduct)
|
||||
|
||||
if (!!this.myproduct) {
|
||||
if (this.myproduct.storehouses.length === 1) {
|
||||
this.order.idStorehouse = this.myproduct.storehouses[0]._id
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async created() {
|
||||
this.load()
|
||||
}
|
||||
|
||||
get getmycardcl() {
|
||||
return (this.complete) ? 'my-card-big' : 'my-card'
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,50 +1,49 @@
|
||||
<template>
|
||||
<q-card class="my-card">
|
||||
<img :src="`statics/` + product.img" :alt="product.name">
|
||||
<q-card :class="getmycardcl" v-if="!!myproduct">
|
||||
<img :src="`statics/` + myproduct.img" :alt="myproduct.name">
|
||||
|
||||
<q-card-section>
|
||||
<q-btn
|
||||
v-if="!complete"
|
||||
fab
|
||||
color="primary"
|
||||
icon="fas fa-info"
|
||||
class="absolute"
|
||||
style="top: 0; right: 12px; transform: translateY(-50%);"
|
||||
@click="infoproduct"
|
||||
:to="`/product/`+ myproduct.code"
|
||||
/>
|
||||
|
||||
<div class="row items-center">
|
||||
<div class="text-h7">
|
||||
{{ product.name }}
|
||||
<div class="row items-center centeritems">
|
||||
<div class="text-h7 boldhigh">
|
||||
{{ myproduct.name }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row items-center">
|
||||
<div v-if="complete" class="row items-center">
|
||||
<div class="text-title text-grey-9">
|
||||
<span class="text-grey-7">{{ product.description }}</span>
|
||||
<span class="text-grey-7">{{ myproduct.description }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<div v-if="complete">
|
||||
<div class="text-grey text-title row items-center q-mt-sm">
|
||||
<q-icon name="map" class="q-mr-xs"/>
|
||||
Origine: <span class="text-blue q-ml-xs text-h8"> {{ product.producer.city }} ({{
|
||||
product.producer.region
|
||||
Origine: <span class="text-blue q-ml-xs text-h8"> {{ myproduct.producer.city }} ({{
|
||||
myproduct.producer.region
|
||||
}})</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="text-grey text-title row items-center">
|
||||
<div v-if="complete" class="text-grey text-title row items-center">
|
||||
<q-icon name="place" class="q-mr-xs"/>
|
||||
Produttore: <span class="text-black q-ml-xs text-h8"> {{ product.producer.name }}</span>
|
||||
Produttore: <span class="text-black q-ml-xs text-h8"> {{ myproduct.producer.name }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--<q-rating v-model="product.stars" :max="5" size="32px" readonly/>-->
|
||||
</q-card-section>
|
||||
<!--<q-rating v-model="myproduct.stars" :max="5" size="32px" readonly/>-->
|
||||
|
||||
<q-card-section class="q-pt-none">
|
||||
<div class="row q-mb-sm no-wrap items-center centeritems">
|
||||
<div class="text-price q-mr-md no-wrap">
|
||||
€ {{ product.price.toFixed(2) }}
|
||||
<div class="text-price no-wrap">
|
||||
€ {{ myproduct.price.toFixed(2) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row q-mb-sm no-wrap items-center centeritems">
|
||||
@@ -56,6 +55,7 @@
|
||||
</q-field>
|
||||
<q-btn round size="xs" text-color="grey" icon="fas fa-plus" @click="addqty"></q-btn>
|
||||
</div>
|
||||
<div v-if="complete || getnumstore() > 1">
|
||||
<div class="text-blue text-title row items-center q-mr-md centeritems">
|
||||
<q-icon size="sm" name="fas fa-shipping-fast" class="q-mr-sm"/>
|
||||
Ritiro presso:
|
||||
@@ -73,14 +73,16 @@
|
||||
<span class="text-title text-center">{{ getSingleStorehouse() }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</q-card-section>
|
||||
|
||||
<q-separator/>
|
||||
|
||||
<q-card-actions vertical align="center">
|
||||
<q-btn icon="fas fa-cart-plus" color="primary" :disable="checkifCartDisable" rounded size="md" label="Aggiungi al Carrello" @click="addtoCart">
|
||||
<q-btn icon="fas fa-cart-plus" color="primary" :disable="checkifCartDisable" rounded size="md"
|
||||
label="Aggiungi al Carrello" @click="addtoCart">
|
||||
</q-btn>
|
||||
<q-btn :icon="iconWhishlist(product)" flat color="primary" rounded label="Lista Desideri">
|
||||
<q-btn :icon="iconWhishlist(myproduct)" flat color="primary" rounded label="Lista Desideri">
|
||||
</q-btn>
|
||||
</q-card-actions>
|
||||
</q-card>
|
||||
|
||||
18
src/components/CShareWithUs/CShareWithUs.scss
Executable file
18
src/components/CShareWithUs/CShareWithUs.scss
Executable file
@@ -0,0 +1,18 @@
|
||||
.zoom_data{
|
||||
font-size:1rem;
|
||||
font-weight: bold;
|
||||
text-shadow: .05rem .05rem .05rem #3d3d3d;
|
||||
color: green;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.id_conf{
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.note{
|
||||
font-style: italic;
|
||||
}
|
||||
224
src/components/CShareWithUs/CShareWithUs.ts
Executable file
224
src/components/CShareWithUs/CShareWithUs.ts
Executable file
@@ -0,0 +1,224 @@
|
||||
import { Component, Prop, Watch } from 'vue-property-decorator'
|
||||
import { INotData, IParamsQuery, IShareWithUs } from '../../model/index'
|
||||
import { tools } from '../../store/Modules/tools'
|
||||
import { NotevoleStore } from '@store'
|
||||
import MixinBase from '@src/mixins/mixin-base'
|
||||
import { validationMixin } from 'vuelidate'
|
||||
import { validations } from '../CSignUpNotevole/CSignUp-validate'
|
||||
import { CTitleBanner } from '@components'
|
||||
import { CCardState } from '../CCardState'
|
||||
import { UserStore } from '../../store/Modules'
|
||||
import { GlobalStore } from '../../store'
|
||||
import { CCopyBtn } from '../CCopyBtn'
|
||||
|
||||
import { date } from 'quasar'
|
||||
import objectId from '@src/js/objectId'
|
||||
|
||||
@Component({
|
||||
name: 'CShareWithUs',
|
||||
components: { CTitleBanner, CCardState, CCopyBtn }
|
||||
})
|
||||
|
||||
export default class CShareWithUs extends MixinBase {
|
||||
public $t
|
||||
public myshares: IShareWithUs[] = []
|
||||
public mydescr: string = ''
|
||||
|
||||
get listasharewithus() {
|
||||
return GlobalStore.state.sharewithus.sort((a, b) => b.numshared - a.numshared)
|
||||
}
|
||||
|
||||
get listamyshare() {
|
||||
return UserStore.state.my.profile.myshares
|
||||
}
|
||||
|
||||
public myload() {
|
||||
const sortBy = 'numshared'
|
||||
const descending = 1
|
||||
const myobj = {}
|
||||
if (descending)
|
||||
myobj[sortBy] = -1
|
||||
else
|
||||
myobj[sortBy] = 1
|
||||
|
||||
const params: IParamsQuery = {
|
||||
table: 'sharewithus',
|
||||
startRow: 0,
|
||||
endRow: 10000,
|
||||
filter: '',
|
||||
filterand: '',
|
||||
sortBy: myobj,
|
||||
descending
|
||||
}
|
||||
|
||||
console.log('myload', params)
|
||||
|
||||
GlobalStore.actions.loadTable(params).then((data) => {
|
||||
GlobalStore.state.sharewithus = data.rows
|
||||
})
|
||||
}
|
||||
|
||||
public mounted() {
|
||||
this.myload()
|
||||
}
|
||||
|
||||
public recsharenow(mydescr): IShareWithUs {
|
||||
return {
|
||||
idapp: process.env.APP_ID,
|
||||
description: mydescr,
|
||||
userId: UserStore.state.my._id,
|
||||
numshared: 0,
|
||||
rating: 0
|
||||
}
|
||||
}
|
||||
|
||||
public add_newshare(mydescr) {
|
||||
if (!mydescr)
|
||||
return false
|
||||
const recfound = UserStore.state.my.profile.myshares.find((rec) => rec.description.toLowerCase() === mydescr.toLowerCase())
|
||||
if (!!recfound) {
|
||||
tools.showNegativeNotif(this.$q, '"' + mydescr + '" è già presente!')
|
||||
return false
|
||||
}
|
||||
UserStore.state.my.profile.myshares.push({ description: mydescr, rating: 5 })
|
||||
|
||||
const mydata = {
|
||||
'profile.myshares': UserStore.state.my.profile.myshares
|
||||
}
|
||||
tools.saveFieldToServer(this, 'users', UserStore.state.my._id, mydata)
|
||||
|
||||
const myrec = this.recsharenow(mydescr)
|
||||
|
||||
const updatedexistingrec = this.updaterecnow(mydescr, true)
|
||||
if (!updatedexistingrec) {
|
||||
tools.createNewRecord(this, 'sharewithus', myrec, false).then((myrecris) => {
|
||||
GlobalStore.state.sharewithus.push(myrecris)
|
||||
this.myload()
|
||||
this.mydescr = ''
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public updaterecnow(mydescr, add) {
|
||||
const recesistente = GlobalStore.state.sharewithus.find((rec) => rec.description.toLowerCase() === mydescr.toLowerCase())
|
||||
const indrec = GlobalStore.state.sharewithus.findIndex((rec) => rec.description.toLowerCase() === mydescr.toLowerCase())
|
||||
console.log('recesistente', recesistente)
|
||||
if (recesistente) {
|
||||
const mydatatosave = {
|
||||
id: recesistente._id,
|
||||
table: tools.TABSHAREWITHUS,
|
||||
fieldsvalue: recesistente
|
||||
}
|
||||
|
||||
if (add)
|
||||
recesistente.numshared++
|
||||
else {
|
||||
if (recesistente.numshared <= 0)
|
||||
return false
|
||||
else
|
||||
recesistente.numshared--
|
||||
}
|
||||
|
||||
GlobalStore.actions.saveFieldValue(mydatatosave).then((myrecris) => {
|
||||
if (myrecris) {
|
||||
GlobalStore.state.sharewithus[indrec] = recesistente
|
||||
this.myload()
|
||||
}
|
||||
this.mydescr = ''
|
||||
})
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
public selected(value, shared) {
|
||||
shared.numshared++
|
||||
tools.saveFieldToServer(this, 'sharewithus', shared._id, { numshared: shared.numshared })
|
||||
|
||||
}
|
||||
|
||||
public checkifICanRemove(shared) {
|
||||
// Controlla se questo è stato aggiunto da me
|
||||
const recfound = GlobalStore.state.sharewithus.find((rec) => rec.description.toLowerCase() === shared.description.toLowerCase())
|
||||
if (!!recfound)
|
||||
return recfound.userId === UserStore.state.my._id
|
||||
else
|
||||
return true
|
||||
}
|
||||
|
||||
public removeShared(shared) {
|
||||
this.$q.dialog({
|
||||
message: 'Vuoi cancellare "' + shared.description + '" dalla tua lista ?',
|
||||
ok: {
|
||||
label: this.$t('dialog.yes'),
|
||||
push: true
|
||||
},
|
||||
cancel: {
|
||||
label: this.$t('dialog.cancel')
|
||||
},
|
||||
title: this.$t('pages.sharedwithus')
|
||||
}).onOk(async () => {
|
||||
|
||||
const descr = shared.description
|
||||
|
||||
// Aggiorna Record Personale
|
||||
UserStore.state.my.profile.myshares = UserStore.state.my.profile.myshares.filter((rec) => rec.description !== descr)
|
||||
|
||||
const mydata = {
|
||||
'profile.myshares': UserStore.state.my.profile.myshares
|
||||
}
|
||||
tools.saveFieldToServer(this, 'users', UserStore.state.my._id, mydata)
|
||||
|
||||
const updatedexistingrec = this.updaterecnow(shared.description, false)
|
||||
if (!updatedexistingrec) {
|
||||
if (this.checkifICanRemove(shared)) {
|
||||
const myrec = GlobalStore.state.sharewithus.find((rec) => rec.description.toLowerCase() === descr.toLowerCase())
|
||||
if (!!myrec) {
|
||||
GlobalStore.actions.DeleteRec({ table: tools.TABSHAREWITHUS, id: myrec._id })
|
||||
.then((ris) => {
|
||||
console.log('DELETEREC ris=', ris)
|
||||
if (ris) {
|
||||
|
||||
// Aggiorna Array Globale
|
||||
GlobalStore.state.sharewithus = GlobalStore.state.sharewithus.filter((rec) => rec.description !== descr)
|
||||
this.myload()
|
||||
|
||||
console.log('GlobalStore.state.sharewithus', GlobalStore.state.sharewithus)
|
||||
tools.showPositiveNotif(this.$q, this.$t('db.deletedrecord'))
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
public findrec(descr) {
|
||||
if (UserStore.state.my.profile.myshares.length === 0)
|
||||
return false
|
||||
return UserStore.state.my.profile.myshares.find((rec) => rec.description.toLowerCase() === descr.toLowerCase())
|
||||
}
|
||||
|
||||
public mycolorbtn(shared) {
|
||||
if (this.findrec(shared.description)) {
|
||||
return 'positive'
|
||||
} else {
|
||||
return 'primary'
|
||||
}
|
||||
}
|
||||
|
||||
public geticon(shared) {
|
||||
if (this.findrec(shared.description))
|
||||
return undefined
|
||||
else
|
||||
return 'fas fa-plus'
|
||||
}
|
||||
|
||||
public getifdisable(shared) {
|
||||
return this.findrec(shared.description)
|
||||
}
|
||||
}
|
||||
91
src/components/CShareWithUs/CShareWithUs.vue
Executable file
91
src/components/CShareWithUs/CShareWithUs.vue
Executable file
@@ -0,0 +1,91 @@
|
||||
<template>
|
||||
<div>
|
||||
<div>
|
||||
<CTitleBanner v-if="listasharewithus && listasharewithus.length > 0" class="q-pa-xs"
|
||||
:title="$t('pages.sharewithus')"
|
||||
bgcolor="bg-white" clcolor="text-blue"
|
||||
mystyle="" myclass="myshad" canopen="true">
|
||||
|
||||
|
||||
<div class="flex flex-center">
|
||||
|
||||
<div class="row animazione justify-center q-gutter-xs">
|
||||
|
||||
<q-item v-for="(shared, index) in listamyshare" :key="shared._id"
|
||||
class="q-mb-xs animated clBorderShare q-pa-sm" v-ripple>
|
||||
|
||||
<transition name="fade" mode="out-in"
|
||||
appear
|
||||
enter-active-class="animazione fadeIn"
|
||||
leave-active-class="animazione fadeOut">
|
||||
|
||||
<div class="row">
|
||||
<q-item-section class="text-center">
|
||||
<q-item-label class="title">{{ shared.description }}</q-item-label>
|
||||
<!--<q-item-label class="title">Condiviso: {{ shared.numshared }}</q-item-label>
|
||||
<q-item-label class="title">Rating: {{ shared.rating }}</q-item-label>-->
|
||||
</q-item-section>
|
||||
<!--<q-rating v-model="shared.rating" :max="5" size="16px" @input="change_rating(shared.rating, shared)"/>-->
|
||||
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
<q-btn class="q-ml-sm" round icon="fas fa-times" color="white" text-color="grey" size="sm" @click="removeShared(shared)"></q-btn>
|
||||
|
||||
</q-item>
|
||||
</div>
|
||||
</div>
|
||||
</CTitleBanner>
|
||||
Scrivi cosa vorresti fare con noi:<br>
|
||||
<div class="row no-wrap justify-between q-pa-md q-gutter-sm">
|
||||
|
||||
<q-input v-model="mydescr" label="Cosa vorresti fare?" class="full-width">
|
||||
</q-input>
|
||||
<q-btn rounded label="Aggiungi" color="positive" @click="add_newshare(mydescr)" :disable="mydescr === ''"></q-btn>
|
||||
</div>
|
||||
|
||||
<CTitleBanner v-if="listasharewithus && listasharewithus.length > 0" class="q-pa-xs"
|
||||
title="Graduatoria Attuale"
|
||||
bgcolor="bg-white" clcolor="text-blue"
|
||||
mystyle="" myclass="myshad" canopen="true">
|
||||
|
||||
|
||||
<div class="flex flex-center text-center">
|
||||
|
||||
<div class="animazione justify-center q-gutter-xs">
|
||||
|
||||
<q-item v-for="(shared, index) in listasharewithus" :key="shared._id"
|
||||
class="animated" style="padding: 4px;" v-ripple>
|
||||
|
||||
<transition name="fade" mode="out-in"
|
||||
appear
|
||||
enter-active-class="animazione fadeIn"
|
||||
leave-active-class="animazione fadeOut">
|
||||
|
||||
<div class="row no-wrap">
|
||||
|
||||
<q-btn dense size="md" :color="mycolorbtn(shared)" rounded :icon="geticon(shared)" :label="shared.description + ` (` + (shared.numshared + 1) + `)`"
|
||||
@click="add_newshare(shared.description)"></q-btn>
|
||||
<!--<q-item-label class="title">Condiviso: {{ shared.numshared }}</q-item-label>
|
||||
<q-item-label class="title">Rating: {{ shared.rating }}</q-item-label>-->
|
||||
<!--<q-rating v-model="shared.rating" :max="5" size="16px" @input="change_rating(shared.rating, shared)"/>-->
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
</q-item>
|
||||
</div>
|
||||
</div>
|
||||
</CTitleBanner>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" src="./CShareWithUs.ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import './CShareWithUs.scss';
|
||||
</style>
|
||||
1
src/components/CShareWithUs/index.ts
Executable file
1
src/components/CShareWithUs/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as CShareWithUs} from './CShareWithUs.vue'
|
||||
@@ -117,6 +117,7 @@ export default class CSignUp extends MixinBase {
|
||||
if (!item.$error) {
|
||||
return ''
|
||||
}
|
||||
console.log('item', item)
|
||||
// console.log('errorMsg', cosa, item)
|
||||
if (item.$params.email && !item.email) {
|
||||
return this.$t('reg.err.email')
|
||||
@@ -157,6 +158,8 @@ export default class CSignUp extends MixinBase {
|
||||
}
|
||||
} else if (cosa === 'username') {
|
||||
// console.log(item);
|
||||
console.log('username')
|
||||
console.log(item.$error)
|
||||
if (!item.isUnique) {
|
||||
return this.$t('reg.err.duplicate_username')
|
||||
}
|
||||
@@ -176,9 +179,22 @@ export default class CSignUp extends MixinBase {
|
||||
}
|
||||
}
|
||||
|
||||
public changeemail(value) {
|
||||
this.signup.email = tools.removespaces(this.signup.email)
|
||||
this.signup.email = this.signup.email.toLowerCase()
|
||||
this.$emit('update:value', this.signup.email)
|
||||
}
|
||||
|
||||
public changeusername(value) {
|
||||
this.signup.username = tools.removespaces(this.signup.username)
|
||||
this.$emit('update:value', this.signup.username)
|
||||
}
|
||||
|
||||
public submitOk() {
|
||||
this.$v.signup.$touch()
|
||||
|
||||
this.signup.email = tools.removespaces(this.signup.email)
|
||||
this.signup.email = this.signup.email.toLowerCase()
|
||||
this.signup.username = tools.removespaces(this.signup.username)
|
||||
|
||||
this.duplicate_email = false
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
v-model="signup.email"
|
||||
rounded outlined
|
||||
@blur="$v.signup.email.$touch"
|
||||
@input="changeemail"
|
||||
:error="$v.signup.email.$error"
|
||||
:error-message="errorMsg('email', $v.signup.email)"
|
||||
maxlength="50"
|
||||
@@ -29,6 +30,7 @@
|
||||
<q-input
|
||||
v-model="signup.username"
|
||||
rounded outlined
|
||||
@input="changeusername"
|
||||
@blur="$v.signup.username.$touch"
|
||||
:error="$v.signup.username.$error"
|
||||
@keydown.native.54="(event) => event.preventDefault()"
|
||||
|
||||
@@ -18,6 +18,7 @@ export default class CSingleCart extends MixinBase {
|
||||
public $t
|
||||
@Prop({ required: true }) public order: IOrder
|
||||
@Prop({ required: false, default: false }) public showall: boolean
|
||||
@Prop({ required: false, default: false }) public nomodif: boolean
|
||||
|
||||
get myimgclass() {
|
||||
if (this.showall) {
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="row q-mb-xs no-wrap items-center centeritems">
|
||||
<q-btn v-if="showall" round size="xs" text-color="grey" icon="fas fa-minus"
|
||||
<q-btn v-if="showall && !nomodif" round size="xs" text-color="grey" icon="fas fa-minus"
|
||||
@click="addsubqty(false, true)"></q-btn>
|
||||
<!--<q-field outlined dense style="width: 25px; height: 20px; " class="q-mx-xs text-subtitle4">
|
||||
<template v-slot:control>
|
||||
@@ -21,15 +21,15 @@
|
||||
</template>
|
||||
</q-field>-->
|
||||
<div class="q-mx-sm text-blue-14">{{ order.quantity }}</div>
|
||||
<q-btn v-if="showall" round size="xs" text-color="grey" icon="fas fa-plus"
|
||||
<q-btn v-if="showall && !nomodif" round size="xs" text-color="grey" icon="fas fa-plus"
|
||||
@click="addsubqty(true, false)"></q-btn>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2 no-wrap text-subtitle3 q-mr-sm">
|
||||
€ {{ (order.price * order.quantity).toFixed(2) }}
|
||||
€ {{ (order.price * order.quantity).toFixed(2) }}
|
||||
</div>
|
||||
<div class="col-1">
|
||||
<q-btn icon="fas fa-times" color="negative" round size="xs" @click="removeFromCard">
|
||||
<q-btn v-if="!nomodif" icon="fas fa-times" color="negative" round size="xs" @click="removeFromCard">
|
||||
</q-btn>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -18,6 +18,7 @@ import MixinUsers from '../../mixins/mixin-users'
|
||||
import { CMyAvatar } from '../CMyAvatar'
|
||||
import { CSigninNoreg } from '../CSigninNoreg'
|
||||
import { CMyCart } from '@components'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
|
||||
@Component({
|
||||
name: 'Header',
|
||||
@@ -62,6 +63,18 @@ export default class Header extends Vue {
|
||||
return UserStore.state.isManager
|
||||
}
|
||||
|
||||
get isSocio() {
|
||||
return UserStore.state.my.profile.socio
|
||||
}
|
||||
|
||||
get isSocioResidente() {
|
||||
return UserStore.state.my.profile.socioresidente
|
||||
}
|
||||
|
||||
get getcolormenu() {
|
||||
return this.isSocio ? 'green-7' : 'white'
|
||||
}
|
||||
|
||||
get isTutor() {
|
||||
return UserStore.state.isTutor
|
||||
}
|
||||
@@ -120,19 +133,25 @@ export default class Header extends Vue {
|
||||
}
|
||||
|
||||
get rightDrawerOpen() {
|
||||
return GlobalStore.state.RightDrawerOpen
|
||||
return GlobalStore.state.rightDrawerOpen
|
||||
}
|
||||
|
||||
set rightDrawerOpen(value) {
|
||||
GlobalStore.state.rightDrawerOpen = value
|
||||
|
||||
if (GlobalStore.state.rightDrawerOpen)
|
||||
GlobalStore.state.rightCartOpen = false
|
||||
}
|
||||
|
||||
get rightCartOpen() {
|
||||
return GlobalStore.state.rightCartOpen
|
||||
}
|
||||
|
||||
set rightDrawerOpen(value) {
|
||||
GlobalStore.state.RightDrawerOpen = value
|
||||
}
|
||||
|
||||
set rightCartOpen(value) {
|
||||
GlobalStore.state.rightCartOpen = value
|
||||
|
||||
if (GlobalStore.state.rightCartOpen)
|
||||
GlobalStore.state.rightDrawerOpen = false
|
||||
}
|
||||
|
||||
get lang() {
|
||||
@@ -195,11 +214,12 @@ export default class Header extends Vue {
|
||||
// console.log('SSSSSSSS: ', value, oldValue)
|
||||
|
||||
const color = (value === 'online') ? 'positive' : 'warning'
|
||||
const statoconn = this.$t('connection.conn') + ' ' + ((value === 'online') ? this.$t('connection.online') : this.$t('connection.offline'))
|
||||
|
||||
if (this.static_data.functionality.SHOW_IF_IS_SERVER_CONNECTION) {
|
||||
|
||||
if (!!oldValue) {
|
||||
tools.showNotif(this.$q, this.$t('connection') + ` {disc__value}`, {
|
||||
tools.showNotif(this.$q, statoconn, {
|
||||
color,
|
||||
icon: 'wifi'
|
||||
})
|
||||
@@ -390,6 +410,15 @@ export default class Header extends Vue {
|
||||
return 0
|
||||
}
|
||||
|
||||
get getnumOrdersCart() {
|
||||
// const arrorderscart = Products.state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED)
|
||||
const arrorderscart = Products.state.orders
|
||||
if (!!arrorderscart) {
|
||||
return arrorderscart.length
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
get getcart() {
|
||||
return Products.state.cart
|
||||
}
|
||||
|
||||
@@ -108,6 +108,7 @@
|
||||
icon="menu"
|
||||
@click="rightDrawerOpen = !rightDrawerOpen">
|
||||
</q-btn>
|
||||
|
||||
<q-btn class="q-mx-xs" v-if="static_data.functionality.ENABLE_ECOMMERCE && isLogged" round dense flat
|
||||
@click="rightCartOpen = !rightCartOpen" icon="fas fa-shopping-cart">
|
||||
|
||||
@@ -116,8 +117,23 @@
|
||||
{{ getnumItemsCart }}
|
||||
</q-badge>
|
||||
</q-btn>
|
||||
|
||||
|
||||
<q-btn class="q-mx-xs" v-if="static_data.functionality.ENABLE_ECOMMERCE && isLogged && getnumOrdersCart > 0" round dense flat
|
||||
to="/orderinfo" icon="fas fa-list-ol">
|
||||
|
||||
|
||||
<q-badge v-if="getnumOrdersCart > 0" color="blue" floating transparent>
|
||||
{{ getnumOrdersCart }}
|
||||
</q-badge>
|
||||
</q-btn>
|
||||
|
||||
|
||||
<q-btn class="q-mx-xs" v-if="static_data.functionality.SHOW_USER_MENU && isLogged" round dense flat
|
||||
@click="rightDrawerOpen = !rightDrawerOpen" :icon="getMyImgforIcon">
|
||||
@click="rightDrawerOpen = !rightDrawerOpen" :icon="getMyImgforIcon" :color="getcolormenu">
|
||||
<!--<q-badge v-if="isSocio" color="green" floating transparent>
|
||||
s
|
||||
</q-badge>-->
|
||||
</q-btn>
|
||||
|
||||
</q-toolbar>
|
||||
@@ -152,24 +168,31 @@
|
||||
style="height: 150px" alt="section page">
|
||||
</q-img>
|
||||
<div class="absolute-top bg-transparent text-black center_img" style="margin-top: 10px;">
|
||||
<div class="text-center q-ma-xs boldhigh text-white text-h7">Area Personale</div>
|
||||
|
||||
<CMyAvatar :myimg="getMyImg"></CMyAvatar>
|
||||
|
||||
<q-btn class="absolute-top-right" style="margin-right: 10px; color: white;"
|
||||
dense flat round icon="close" @click="rightDrawerOpen = !rightDrawerOpen">
|
||||
</q-btn>
|
||||
<div v-if="isLogged" class="text-weight-bold text-user">{{ Username }} - {{ myName }} <span
|
||||
v-if="isAdmin"> [Admin]</span>
|
||||
<span v-if="isManager"> [Manager]</span>
|
||||
<span v-if="isTutor"> [Tutor]</span>
|
||||
<span v-if="isTratuttrici"> [Trad]</span>
|
||||
|
||||
<div v-if="isLogged" class="text-weight-bold text-user">{{ Username }} - {{ myName }}
|
||||
</div>
|
||||
<div v-else class="text-user text-italic bg-red">
|
||||
<div class="row justify-evenly q-pa-xs-sm">
|
||||
<div v-if="isLogged && isAdmin" class="text-weight-bold text-user bg-red q-px-xs">Admin</div>
|
||||
<div v-if="isSocio" class="text-weight-bold text-user q-px-xs">Socio</div>
|
||||
<div v-if="isSocioResidente" class="text-weight-bold text-user q-px-xs bg-amber">Residente</div>
|
||||
<div v-if="isManager" class="text-weight-bold text-user bg-blue q-px-xs">Segreteria</div>
|
||||
<div v-if="isTutor" class="text-weight-bold text-user q-px-xs">Tutor</div>
|
||||
<div v-if="isTratuttrici" class="text-weight-bold text-user q-px-xs">Traduttrici</div>
|
||||
</div>
|
||||
<div v-if="!isLogged" class="text-user text-italic bg-red">
|
||||
{{ $t('user.loggati') }}
|
||||
</div>
|
||||
|
||||
<div v-if="isLogged && !isEmailVerified" class="text-verified">{{
|
||||
$t('components.authentication.email_verification.verify_email') }}
|
||||
$t('components.authentication.email_verification.verify_email')
|
||||
}}
|
||||
</div>
|
||||
|
||||
<!--<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>-->
|
||||
|
||||
@@ -27,6 +27,6 @@ export default class CTesseraElettronica extends Vue {
|
||||
}
|
||||
|
||||
get rightDrawerOpen() {
|
||||
return GlobalStore.state.RightDrawerOpen
|
||||
return GlobalStore.state.rightDrawerOpen
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,4 +63,5 @@ export * from './CMyFlotta'
|
||||
export * from './CECommerce'
|
||||
export * from './CSingleCart'
|
||||
export * from './CMyCart'
|
||||
export * from './CShareWithUs'
|
||||
export * from '../views/ecommerce/'
|
||||
|
||||
@@ -9,6 +9,8 @@ import { fieldsTable } from '@src/store/Modules/fieldsTable'
|
||||
import { CalendarStore } from '@store'
|
||||
import MixinMetaTags from '@src/mixins/mixin-metatags'
|
||||
|
||||
import { shared_consts } from '../common/shared_vuejs'
|
||||
|
||||
// You can declare a mixin as the same style as components.
|
||||
@Component
|
||||
export default class MixinBase extends MixinMetaTags {
|
||||
@@ -36,6 +38,10 @@ export default class MixinBase extends MixinMetaTags {
|
||||
return tools
|
||||
}
|
||||
|
||||
get shared_consts() {
|
||||
return shared_consts
|
||||
}
|
||||
|
||||
public getValDb(keystr, serv, def?, table?, subkey?, id?) {
|
||||
|
||||
return tools.getValDb(keystr, serv, def, table, subkey, id)
|
||||
|
||||
@@ -70,7 +70,7 @@ export default class MixinUsers extends Vue {
|
||||
|
||||
get getMyImgforIcon() {
|
||||
const ris = UserStore.getters.getImgByUsername(UserStore.state.my.username)
|
||||
return (ris !== '') ? 'img:statics/' + ris : 'fas fa-user-circle'
|
||||
return (ris !== '') ? 'img:statics/' + ris : 'fas fa-user'
|
||||
}
|
||||
|
||||
get getIconCart() {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { IAction } from '@src/model/Projects'
|
||||
import { Component } from 'vue-router/types/router'
|
||||
import { lists } from '@src/store/Modules/lists'
|
||||
import { IPaymentType } from '@src/model/UserStore'
|
||||
import { ICart, IProducer, IProduct, IStorehouse } from '@src/model/Products'
|
||||
import { ICart, IProducer, IProduct, IShareWithUs, IStorehouse } from '@src/model/Products'
|
||||
|
||||
export interface IPost {
|
||||
title: string
|
||||
@@ -149,7 +149,7 @@ export interface IGlobalState {
|
||||
mobileMode: boolean
|
||||
menuCollapse: boolean
|
||||
leftDrawerOpen: boolean
|
||||
RightDrawerOpen: boolean
|
||||
rightDrawerOpen: boolean
|
||||
rightCartOpen: boolean
|
||||
category: string
|
||||
stateConnection: string
|
||||
@@ -175,6 +175,7 @@ export interface IGlobalState {
|
||||
calzoom: ICalZoom[],
|
||||
producers: IProducer[],
|
||||
storehouses: IStorehouse[],
|
||||
sharewithus: IShareWithUs[],
|
||||
autoplaydisc: number
|
||||
}
|
||||
|
||||
@@ -345,6 +346,7 @@ export interface IFunctionality {
|
||||
BOOKING_EVENTS?: boolean
|
||||
ENABLE_REG_AYNI?: boolean
|
||||
ENABLE_REG_SIP?: boolean
|
||||
ENABLE_REG_CNM?: boolean
|
||||
}
|
||||
|
||||
export interface IParamsQuery {
|
||||
|
||||
@@ -1,17 +1,20 @@
|
||||
export interface IProduct {
|
||||
_id?: any
|
||||
descr?: string,
|
||||
idProducer?: string,
|
||||
idStorehouses?: string[],
|
||||
producer?: IProducer,
|
||||
storehouses?: IStorehouse[],
|
||||
code?: string,
|
||||
name?: string,
|
||||
description?: string,
|
||||
department?: string,
|
||||
category?: string,
|
||||
price?: number,
|
||||
color?: string,
|
||||
size?: string,
|
||||
quantityAvailable?: number,
|
||||
canBeShipped?: boolean,
|
||||
canBeBuyOnline?: boolean,
|
||||
weight?: number,
|
||||
stars?: number,
|
||||
date?: Date,
|
||||
@@ -51,6 +54,7 @@ export interface IOrder {
|
||||
export interface IProductsState {
|
||||
products: IProduct[]
|
||||
cart: ICart
|
||||
orders: IOrderCart[]
|
||||
}
|
||||
|
||||
export interface IProducer {
|
||||
@@ -59,6 +63,7 @@ export interface IProducer {
|
||||
name?: string,
|
||||
description?: string,
|
||||
referent?: string,
|
||||
username?: string,
|
||||
region?: string,
|
||||
city?: string,
|
||||
img?: string,
|
||||
@@ -85,4 +90,28 @@ export interface ICart {
|
||||
totalQty?: number
|
||||
totalPrice?: number
|
||||
items?: IBaseOrder[]
|
||||
note?: string
|
||||
modify_at?: Date
|
||||
}
|
||||
|
||||
export interface IOrderCart {
|
||||
_id?: any
|
||||
idapp?: string
|
||||
numorder?: number
|
||||
userId?: string
|
||||
totalQty?: number
|
||||
totalPrice?: number
|
||||
items?: IBaseOrder[]
|
||||
status?: number
|
||||
note?: string
|
||||
modify_at?: Date
|
||||
}
|
||||
|
||||
export interface IShareWithUs {
|
||||
_id?: any
|
||||
idapp?: string
|
||||
userId?: string
|
||||
description?: string
|
||||
numshared?: number
|
||||
rating?: number
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { IToken } from 'model/other'
|
||||
import { ICart } from '@src/model/Products'
|
||||
import { ICart, IOrderCart, IShareWithUs } from '@src/model/Products'
|
||||
|
||||
const enum ESexType {
|
||||
None = 0,
|
||||
@@ -33,6 +33,9 @@ export interface IUserProfile {
|
||||
saw_and_accepted?: boolean
|
||||
qualified?: boolean
|
||||
qualified_2invitati?: boolean
|
||||
myshares?: IShareWithUs[]
|
||||
socio?: boolean
|
||||
socioresidente?: boolean
|
||||
}
|
||||
|
||||
export interface IPaymentType {
|
||||
@@ -88,6 +91,7 @@ export interface IUserFields {
|
||||
numinvitati?: number
|
||||
numinvitatiattivi?: number
|
||||
cart?: ICart
|
||||
ordercart?: IOrderCart
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
keywords: '' } ) }}
|
||||
</span>
|
||||
|
||||
|
||||
<div class="q-ma-sm q-gutter-sm q-pa-xs">
|
||||
<CTitleBanner title="Prodotti"></CTitleBanner>
|
||||
<CGridTableRec prop_mytable="products"
|
||||
|
||||
@@ -7,6 +7,7 @@ import { fieldsTable, func } from '@src/store/Modules/fieldsTable'
|
||||
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
import { GlobalStore, UserStore } from '../../../store/Modules'
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
|
||||
@Component({
|
||||
components: { CMyPage }
|
||||
@@ -24,6 +25,7 @@ export default class Sendpushnotif extends Vue {
|
||||
public opz2: string = ''
|
||||
public tag: string = ''
|
||||
public actiontype: number = shared_consts.TypeMsg_Actions.NORMAL
|
||||
public destination: number = shared_consts.TypeMsg.SEND_TO_ALL
|
||||
|
||||
public created() {
|
||||
this.title = this.$t('ws.sitename')
|
||||
@@ -54,6 +56,9 @@ export default class Sendpushnotif extends Vue {
|
||||
|
||||
const ris = await GlobalStore.actions.sendPushNotif({ params })
|
||||
|
||||
if (!!ris.msg)
|
||||
tools.showPositiveNotif(this.$q, ris.msg)
|
||||
|
||||
this.$q.loading.hide()
|
||||
|
||||
this.incaricamento = false
|
||||
@@ -94,6 +99,7 @@ export default class Sendpushnotif extends Vue {
|
||||
}
|
||||
|
||||
public SendMsgToAll() {
|
||||
this.SendMsgToParam(shared_consts.TypeMsg.SEND_TO_ALL)
|
||||
|
||||
this.SendMsgToParam(this.destination)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,13 +20,18 @@
|
||||
:options="shared_consts.selectActions"
|
||||
label="Tipo Msg" emit-value map-options>
|
||||
</q-select>
|
||||
<q-select
|
||||
rounded outlined v-model="destination"
|
||||
:options="shared_consts.selectDestination"
|
||||
label="Destinazione" emit-value map-options>
|
||||
</q-select>
|
||||
<div v-if="actiontype === shared_consts.TypeMsg_Actions.OPZ1_2" class="row">
|
||||
<q-input v-model="opz1" autofocus label="Opzione 1" style="width: 100px;"></q-input>
|
||||
<q-input v-model="opz2" autofocus label="Opzione 2" style="width: 100px;"></q-input>
|
||||
</div>
|
||||
<br />
|
||||
<div class="">
|
||||
<q-btn label="Invia Msg a Tutti" color="primary" @click="SendMsgToAll()"></q-btn>
|
||||
<q-btn label="Invia Msg" color="primary" @click="SendMsgToAll()"></q-btn>
|
||||
</div>
|
||||
</div>
|
||||
<q-inner-loading id="spinner" :showing="incaricamento">
|
||||
|
||||
0
src/rootgen/admin/sharewithus/sharewithus.scss
Executable file
0
src/rootgen/admin/sharewithus/sharewithus.scss
Executable file
44
src/rootgen/admin/sharewithus/sharewithus.ts
Executable file
44
src/rootgen/admin/sharewithus/sharewithus.ts
Executable file
@@ -0,0 +1,44 @@
|
||||
import Vue from 'vue'
|
||||
import { Component, Prop } from 'vue-property-decorator'
|
||||
import { GlobalStore, UserStore } from '@store'
|
||||
|
||||
import { tools } from '../../../store/Modules/tools'
|
||||
import { toolsext } from '../../../store/Modules/toolsext'
|
||||
import { static_data } from '../../../db/static_data'
|
||||
import { Screen } from 'quasar'
|
||||
|
||||
import { colTableShareWithUs, colTableStorehouse } from '@src/store/Modules/fieldsTable'
|
||||
|
||||
import { CImgText } from '../../../components/CImgText/index'
|
||||
import { CCard, CGridTableRec, CMyPage, CTitleBanner } from '@components'
|
||||
import MixinMetaTags from '../../../mixins/mixin-metatags'
|
||||
import MixinBase from '@src/mixins/mixin-base'
|
||||
|
||||
@Component({
|
||||
mixins: [MixinBase],
|
||||
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec }
|
||||
})
|
||||
export default class ShareWithUsPage extends MixinMetaTags {
|
||||
public pagination = {
|
||||
sortBy: 'name',
|
||||
descending: false,
|
||||
page: 2,
|
||||
rowsPerPage: 5
|
||||
// rowsNumber: xx if getting data from a server
|
||||
}
|
||||
|
||||
public selected = []
|
||||
public dataPages = []
|
||||
|
||||
get getcolsharewithus() {
|
||||
return colTableShareWithUs
|
||||
}
|
||||
|
||||
public meta() {
|
||||
return tools.metafunc(this)
|
||||
}
|
||||
|
||||
get static_data() {
|
||||
return static_data
|
||||
}
|
||||
}
|
||||
27
src/rootgen/admin/sharewithus/sharewithus.vue
Executable file
27
src/rootgen/admin/sharewithus/sharewithus.vue
Executable file
@@ -0,0 +1,27 @@
|
||||
<template>
|
||||
<CMyPage title="Condividi" imgbackground="../../statics/images/sharewithus.jpg" sizes="max-height: 120px">
|
||||
<span>{{ setmeta({
|
||||
title: 'Condividi',
|
||||
description: "",
|
||||
keywords: '' } ) }}
|
||||
</span>
|
||||
|
||||
<div class="q-ma-sm q-gutter-sm q-pa-xs">
|
||||
<CTitleBanner title="Condividi Con Noi"></CTitleBanner>
|
||||
<CGridTableRec prop_mytable="sharewithus"
|
||||
prop_mytitle="Lista Condivisioni"
|
||||
:prop_mycolumns="getcolsharewithus"
|
||||
prop_colkey="description"
|
||||
nodataLabel="Nessuna Condivisione"
|
||||
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
|
||||
|
||||
</CGridTableRec>
|
||||
</div>
|
||||
</CMyPage>
|
||||
</template>
|
||||
<script lang="ts" src="./sharewithus.ts">
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
@import 'sharewithus.scss';
|
||||
</style>
|
||||
@@ -74,8 +74,8 @@ export default class UsersList extends Vue {
|
||||
|
||||
if (static_data.functionality.ENABLE_REG_AYNI) {
|
||||
return this.db_fieldsTable.colTableUsers
|
||||
} else if (static_data.functionality.ENABLE_REG_SIP) {
|
||||
return this.db_fieldsTable.colTableUsersSIP
|
||||
} else if (static_data.functionality.ENABLE_REG_CNM) {
|
||||
return this.db_fieldsTable.colTableUsersCNM
|
||||
} else {
|
||||
return this.db_fieldsTable.colTableUsersBase
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@ const msg_it = {
|
||||
come_aiutare: 'Cosa vorresti fare per aiutare il pianeta?',
|
||||
},
|
||||
otherpages: {
|
||||
product: 'Prodotto',
|
||||
sito_offline: 'Sito in Aggiornamento',
|
||||
modifprof: 'Modifica Profilo',
|
||||
biografia: 'Biografia',
|
||||
@@ -52,8 +53,8 @@ const msg_it = {
|
||||
listaflotte: 'Flotte',
|
||||
},
|
||||
manage: {
|
||||
menu: 'Gestione',
|
||||
manager: 'Gestore',
|
||||
menu: 'Segreteria',
|
||||
manager: 'Segreteria',
|
||||
nessuno: 'Nessuno',
|
||||
sendpushnotif: 'Invia Msg Push',
|
||||
},
|
||||
@@ -320,6 +321,8 @@ const msg_it = {
|
||||
ritessitura: 'RITESSITURA',
|
||||
},
|
||||
reg: {
|
||||
socio: 'Socio',
|
||||
socioresidente: 'Residente',
|
||||
volta: 'volta',
|
||||
volte: 'volte',
|
||||
registered: 'Registrato',
|
||||
@@ -508,7 +511,11 @@ const msg_it = {
|
||||
subscribed: 'Ora potrai ricevere i messaggi e le notifiche.',
|
||||
newVersionAvailable: 'Aggiorna',
|
||||
},
|
||||
connection: 'Connessione',
|
||||
connection: {
|
||||
conn: 'Connessione',
|
||||
online: 'Attiva',
|
||||
offline: 'Disattiva',
|
||||
},
|
||||
proj: {
|
||||
newproj: 'Titolo Progetto',
|
||||
newsubproj: 'Titolo Sotto-Progetto',
|
||||
|
||||
@@ -44,7 +44,7 @@ const state: IGlobalState = {
|
||||
mobileMode: false,
|
||||
menuCollapse: true,
|
||||
leftDrawerOpen: true,
|
||||
RightDrawerOpen: false,
|
||||
rightDrawerOpen: false,
|
||||
rightCartOpen: false,
|
||||
stateConnection: stateConnDefault,
|
||||
networkDataReceived: false,
|
||||
@@ -83,7 +83,8 @@ const state: IGlobalState = {
|
||||
mypage: [],
|
||||
calzoom: [],
|
||||
producers: [],
|
||||
storehouses: []
|
||||
storehouses: [],
|
||||
sharewithus: []
|
||||
}
|
||||
|
||||
async function getConfig(id) {
|
||||
@@ -204,6 +205,8 @@ namespace Getters {
|
||||
return GlobalStore.state.producers
|
||||
else if (table === 'storehouses')
|
||||
return GlobalStore.state.storehouses
|
||||
else if (table === 'sharewithus')
|
||||
return GlobalStore.state.sharewithus
|
||||
else if (table === 'paymenttypes')
|
||||
return GlobalStore.state.paymenttypes
|
||||
else if (table === 'bookings')
|
||||
@@ -1093,8 +1096,9 @@ namespace Actions {
|
||||
if (res.data.cart)
|
||||
Products.state.cart = (res.data.cart) ? {...res.data.cart} : {}
|
||||
else
|
||||
Products.state.cart = {}
|
||||
Products.state.cart = { items: [], totalPrice: 0, totalQty: 0, userId: ''}
|
||||
|
||||
Products.state.orders = (res.data.orders) ? [...res.data.orders] : []
|
||||
|
||||
if (showall) {
|
||||
GlobalStore.state.newstosent = (res.data.newstosent) ? [...res.data.newstosent] : []
|
||||
@@ -1121,7 +1125,7 @@ namespace Actions {
|
||||
// Fai Logout
|
||||
console.log('Fai Logout', 'islogged', islogged)
|
||||
UserStore.actions.logout()
|
||||
GlobalStore.state.RightDrawerOpen = true
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { ICart, IOrder, IProduct, IProductsState } from 'model'
|
||||
import { ICart, IOrder, IOrderCart, IProduct, IProductsState } from 'model'
|
||||
import { storeBuilder } from './Store/Store'
|
||||
|
||||
import Api from '@api'
|
||||
import { tools } from './tools'
|
||||
import { lists } from './lists'
|
||||
import * as ApiTables from './ApiTables'
|
||||
import { GlobalStore, Todos, UserStore } from '@store'
|
||||
import { GlobalStore, Products, Todos, UserStore } from '@store'
|
||||
import globalroutines from './../../globalroutines/index'
|
||||
import { Mutation } from 'vuex-module-decorators'
|
||||
import { serv_constants } from '@src/store/Modules/serv_constants'
|
||||
@@ -15,10 +15,12 @@ import { costanti } from '@src/store/Modules/costanti'
|
||||
import { IAction } from '@src/model'
|
||||
import * as Types from '@src/store/Api/ApiTypes'
|
||||
import { static_data } from '@src/db/static_data'
|
||||
import { shared_consts } from '@src/common/shared_vuejs'
|
||||
|
||||
const state: IProductsState = {
|
||||
products: [],
|
||||
cart: null,
|
||||
cart: { items: [], totalPrice: 0, totalQty: 0, userId: '' },
|
||||
orders: []
|
||||
}
|
||||
|
||||
// const listFieldsToChange: string [] = ['descr', 'statustodo', 'category', 'expiring_at', 'priority', 'id_prev', 'pos', 'enableExpiring', 'progress', 'phase', 'assigned_to_userId', 'hoursplanned', 'hoursworked', 'start_date', 'completed_at', 'themecolor', 'themebgcolor']
|
||||
@@ -36,7 +38,7 @@ function createOrderByProduct(product: IProduct, order: IOrder): IOrder {
|
||||
idapp: process.env.APP_ID,
|
||||
idProduct: product._id,
|
||||
idProducer: product.idProducer,
|
||||
status: tools.OrderStatus.IN_CART,
|
||||
status: shared_consts.OrderStatus.IN_CART,
|
||||
price: product.price,
|
||||
color: product.color,
|
||||
size: product.size,
|
||||
@@ -71,7 +73,15 @@ namespace Getters {
|
||||
return state.cart
|
||||
}, 'getCart')
|
||||
|
||||
const getOrdersCart = b.read((stateparamf: IProductsState) => (tipoord: string): IOrderCart[] => {
|
||||
if (tipoord === 'incorso')
|
||||
return state.orders.filter((rec) => rec.status <= shared_consts.OrderStatus.CHECKOUT_CONFIRMED)
|
||||
else
|
||||
return state.orders.filter((rec) => rec.status < shared_consts.OrderStatus.RECEIVED && rec.status > shared_consts.OrderStatus.CHECKOUT_CONFIRMED)
|
||||
}, 'getOrdersCart')
|
||||
|
||||
const existProductInCart = b.read((stateparamf: IProductsState) => (idproduct): boolean => {
|
||||
// console.log('.state.cart.items', state.cart.items)
|
||||
const ris = state.cart.items.filter((item) => item.order.idProduct === idproduct).reduce((sum, rec) => sum + 1, 0)
|
||||
return ris > 0
|
||||
}, 'existProductInCart')
|
||||
@@ -83,18 +93,21 @@ namespace Getters {
|
||||
|
||||
const objproduct: IProduct = {
|
||||
// _id: tools.getDateNow().toISOString(), // Create NEW
|
||||
descr: '',
|
||||
idProducer: '',
|
||||
idStorehouses: [],
|
||||
producer: null,
|
||||
storehouses: null,
|
||||
code: '',
|
||||
name: '',
|
||||
description: '',
|
||||
department: '',
|
||||
category: '',
|
||||
price: 0.0,
|
||||
color: '',
|
||||
size: '',
|
||||
quantityAvailable: 0,
|
||||
canBeShipped: false,
|
||||
canBeBuyOnline: false,
|
||||
weight: 0,
|
||||
stars: 0,
|
||||
date: tools.getDateNow(),
|
||||
@@ -114,6 +127,9 @@ namespace Getters {
|
||||
get getCart() {
|
||||
return getCart()
|
||||
},
|
||||
get getOrdersCart() {
|
||||
return getOrdersCart()
|
||||
},
|
||||
get existProductInCart() {
|
||||
return existProductInCart()
|
||||
},
|
||||
@@ -151,9 +167,9 @@ namespace Actions {
|
||||
state.products = []
|
||||
}
|
||||
|
||||
console.log('ARRAY PRODUCTS = ', state.products)
|
||||
// console.log('ARRAY PRODUCTS = ', state.products)
|
||||
if (process.env.DEBUG === '1') {
|
||||
console.log('dbLoad', 'state.products', state.products)
|
||||
// console.log('dbLoad', 'state.products', state.products)
|
||||
}
|
||||
|
||||
return res
|
||||
@@ -169,6 +185,39 @@ namespace Actions {
|
||||
return ris
|
||||
}
|
||||
|
||||
async function loadProduct(context, { code }) {
|
||||
|
||||
console.log('loadProduct', code)
|
||||
|
||||
if (!static_data.functionality.ENABLE_ECOMMERCE)
|
||||
return null
|
||||
|
||||
console.log('getProduct', 'code', code)
|
||||
|
||||
// if (UserStore.state.my._id === '') {
|
||||
// return new Types.AxiosError(0, null, 0, '')
|
||||
// }
|
||||
|
||||
let ris = null
|
||||
|
||||
ris = await Api.SendReq('/products/' + code, 'POST', { code })
|
||||
.then((res) => {
|
||||
console.log('product', res.data.product)
|
||||
if (res.data.product) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
|
||||
return res.data.product
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('error getProduct', error)
|
||||
UserStore.mutations.setErrorCatch(error)
|
||||
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, tools.ERR_GENERICO, error)
|
||||
})
|
||||
|
||||
return ris
|
||||
}
|
||||
|
||||
async function loadCart(context) {
|
||||
|
||||
console.log('loadCart')
|
||||
@@ -189,7 +238,7 @@ namespace Actions {
|
||||
if (res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
|
||||
state.cart = res.data.cart
|
||||
} else {
|
||||
state.cart = null
|
||||
state.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
|
||||
}
|
||||
|
||||
return res
|
||||
@@ -212,7 +261,7 @@ namespace Actions {
|
||||
if (res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
|
||||
state.cart = res.data.cart
|
||||
} else {
|
||||
state.cart = null
|
||||
state.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
|
||||
}
|
||||
|
||||
return res
|
||||
@@ -240,7 +289,7 @@ namespace Actions {
|
||||
if (res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
|
||||
state.cart = res.data.cart
|
||||
} else {
|
||||
state.cart = null
|
||||
state.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
|
||||
}
|
||||
|
||||
return res
|
||||
@@ -288,11 +337,41 @@ namespace Actions {
|
||||
return ris
|
||||
}
|
||||
|
||||
async function UpdateStatusCart(context, { cart_id, status }) {
|
||||
|
||||
if (!static_data.functionality.ENABLE_ECOMMERCE)
|
||||
return null
|
||||
|
||||
// console.log('addSubQtyToItem', 'userid=', UserStore.state.my._id, order)
|
||||
|
||||
let ris = null
|
||||
|
||||
ris = await Api.SendReq('/cart/' + UserStore.state.my._id + '/cartstatus', 'POST', { cart_id, status })
|
||||
.then((res) => {
|
||||
|
||||
if (res.data.status === shared_consts.OrderStatus.CHECKOUT_CONFIRMED) {
|
||||
ProductsModule.state.cart = {}
|
||||
if (res.data.orders)
|
||||
Products.state.orders = res.data.orders
|
||||
}
|
||||
return res.data.status
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('error UpdateStatusCart', error)
|
||||
UserStore.mutations.setErrorCatch(error)
|
||||
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, tools.ERR_GENERICO, error)
|
||||
})
|
||||
|
||||
return ris
|
||||
}
|
||||
|
||||
export const actions = {
|
||||
// loadCart: b.dispatch(loadCart),
|
||||
loadProduct: b.dispatch(loadProduct),
|
||||
loadProducts: b.dispatch(loadProducts),
|
||||
addToCart: b.dispatch(addToCart),
|
||||
addSubQtyToItem: b.dispatch(addSubQtyToItem),
|
||||
UpdateStatusCart: b.dispatch(UpdateStatusCart),
|
||||
removeFromCart: b.dispatch(removeFromCart),
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,9 @@ export const DefaultUser: IUserFields = {
|
||||
saw_and_accepted: false,
|
||||
qualified: false,
|
||||
qualified_2invitati: false,
|
||||
socio: false,
|
||||
socioresidente: false,
|
||||
myshares: [],
|
||||
},
|
||||
downline: [],
|
||||
calcstat: DefaultCalc,
|
||||
@@ -54,7 +57,8 @@ export const DefaultUser: IUserFields = {
|
||||
userId: '',
|
||||
items: [],
|
||||
totalPrice: 0,
|
||||
totalQty: 0
|
||||
totalQty: 0,
|
||||
note: '',
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +84,9 @@ export const DefaultProfile: IUserProfile = {
|
||||
saw_zoom_presentation: false,
|
||||
ask_zoom_partecipato: false,
|
||||
saw_and_accepted: false,
|
||||
socio: false,
|
||||
socioresidente: false,
|
||||
myshares: [],
|
||||
paymenttypes: [],
|
||||
qualified: false,
|
||||
qualified_2invitati: false,
|
||||
|
||||
@@ -167,12 +167,19 @@ export const colTableProducer = [
|
||||
AddCol({ name: 'name', label_trans: 'producer.name' }),
|
||||
AddCol({ name: 'description', label_trans: 'producer.description' }),
|
||||
AddCol({ name: 'referent', label_trans: 'producer.referent' }),
|
||||
AddCol({ name: 'username', label_trans: 'producer.username' }),
|
||||
AddCol({ name: 'region', label_trans: 'producer.region' }),
|
||||
AddCol({ name: 'city', label_trans: 'producer.city' }),
|
||||
AddCol({ name: 'img', label_trans: 'producer.img' }),
|
||||
AddCol({ name: 'website', label_trans: 'producer.website' }),
|
||||
]
|
||||
|
||||
export const colTableShareWithUs = [
|
||||
AddCol({ name: 'description', label_trans: 'share.description' }),
|
||||
AddCol({ name: 'numshared', label_trans: 'share.numshared', fieldtype: tools.FieldType.number }),
|
||||
AddCol({ name: 'rating', label_trans: 'share.rating', fieldtype: tools.FieldType.number }),
|
||||
]
|
||||
|
||||
export const colTableStorehouse = [
|
||||
AddCol({ name: 'name', label_trans: 'store.name' }),
|
||||
AddCol({ name: 'description', label_trans: 'store.description' }),
|
||||
@@ -185,6 +192,7 @@ export const colTableStorehouse = [
|
||||
]
|
||||
|
||||
export const colTableProducts = [
|
||||
AddCol({ name: 'code', label_trans: 'products.code' }),
|
||||
AddCol({ name: 'name', label_trans: 'products.name' }),
|
||||
AddCol({ name: 'description', label_trans: 'products.description' }),
|
||||
AddCol({ name: 'icon', label_trans: 'products.icon' }),
|
||||
@@ -208,6 +216,8 @@ export const colTableProducts = [
|
||||
AddCol({ name: 'color', label_trans: 'products.color' }),
|
||||
AddCol({ name: 'size', label_trans: 'products.size' }),
|
||||
AddCol({ name: 'quantityAvailable', label_trans: 'products.quantityAvailable', fieldtype: tools.FieldType.number }),
|
||||
AddCol({ name: 'canBeShipped', label_trans: 'products.canBeShipped', fieldtype: tools.FieldType.boolean }),
|
||||
AddCol({ name: 'canBeBuyOnline', label_trans: 'products.canBeBuyOnline', fieldtype: tools.FieldType.boolean }),
|
||||
AddCol({ name: 'weight', label_trans: 'products.weight', fieldtype: tools.FieldType.number }),
|
||||
AddCol({ name: 'stars', label_trans: 'products.stars', fieldtype: tools.FieldType.number }),
|
||||
AddCol({ name: 'date', label_trans: 'products.date', fieldtype: tools.FieldType.date }),
|
||||
@@ -723,6 +733,12 @@ export const fieldsTable = {
|
||||
label_trans: 'reg.manage_telegram',
|
||||
fieldtype: tools.FieldType.boolean
|
||||
}),
|
||||
AddCol({
|
||||
name: 'profile.myshares',
|
||||
field: 'profile',
|
||||
subfield: 'myshares',
|
||||
label_trans: 'reg.myshares'
|
||||
}),
|
||||
AddCol({ name: 'profile.img', field: 'profile', subfield: 'img', label_trans: 'reg.img', sortable: false }),
|
||||
AddCol({ name: 'date_reg', label_trans: 'reg.date_reg', fieldtype: tools.FieldType.date }),
|
||||
AddCol({ name: 'lasttimeonline', label_trans: 'reg.lasttimeonline', fieldtype: tools.FieldType.date }),
|
||||
@@ -733,7 +749,7 @@ export const fieldsTable = {
|
||||
AddCol(DuplicateRec)
|
||||
],
|
||||
|
||||
colTableUsersSIP: [
|
||||
colTableUsersCNM: [
|
||||
// AddCol({ name: '_id', label_trans: 'reg.id' }),
|
||||
AddCol({ name: 'ind_order', label_trans: 'reg.ind_order' }),
|
||||
AddCol({ name: 'sospeso', label_trans: 'reg.sospeso', fieldtype: tools.FieldType.boolean }),
|
||||
@@ -744,7 +760,7 @@ export const fieldsTable = {
|
||||
AddCol({ name: 'email', label_trans: 'reg.email' }),
|
||||
AddCol({ name: 'made_gift', label_trans: 'reg.made_gift', fieldtype: tools.FieldType.boolean }),
|
||||
AddCol({ name: 'note', label_trans: 'reg.note' }),
|
||||
AddCol({ name: 'aportador_solidario', label_trans: 'reg.aportador_solidario' }),
|
||||
// AddCol({ name: 'aportador_solidario', label_trans: 'reg.aportador_solidario' }),
|
||||
AddCol({ name: 'verified_email', label_trans: 'reg.verified_email', fieldtype: tools.FieldType.boolean }),
|
||||
AddCol({
|
||||
name: 'profile.special_req',
|
||||
@@ -816,6 +832,20 @@ export const fieldsTable = {
|
||||
label_trans: 'reg.manage_telegram',
|
||||
fieldtype: tools.FieldType.boolean
|
||||
}),
|
||||
AddCol({
|
||||
name: 'profile.socio',
|
||||
field: 'profile',
|
||||
subfield: 'socio',
|
||||
label_trans: 'reg.socio',
|
||||
fieldtype: tools.FieldType.boolean
|
||||
}),
|
||||
AddCol({
|
||||
name: 'profile.socioresidente',
|
||||
field: 'profile',
|
||||
subfield: 'socioresidente',
|
||||
label_trans: 'reg.socioresidente',
|
||||
fieldtype: tools.FieldType.boolean
|
||||
}),
|
||||
AddCol({ name: 'profile.chisei', field: 'profile', subfield: 'chisei', label_trans: 'reg.chisei' }),
|
||||
AddCol({
|
||||
name: 'profile.iltuoimpegno',
|
||||
@@ -827,7 +857,7 @@ export const fieldsTable = {
|
||||
name: 'profile.come_aiutare',
|
||||
field: 'profile',
|
||||
subfield: 'come_aiutare',
|
||||
label_trans: 'reg.iltuoimpegno'
|
||||
label_trans: 'reg.come_aiutare'
|
||||
}),
|
||||
AddCol({
|
||||
name: 'profile.paymenttypes',
|
||||
@@ -909,6 +939,13 @@ export const fieldsTable = {
|
||||
colkey: '_id',
|
||||
collabel: (rec) => rec.name + ' (' + rec.city + ')'
|
||||
},
|
||||
{
|
||||
value: 'sharewithus',
|
||||
label: 'Condividi con Noi',
|
||||
columns: colTableShareWithUs,
|
||||
colkey: '_id',
|
||||
collabel: 'description'
|
||||
},
|
||||
{
|
||||
value: 'wheres',
|
||||
label: 'Luoghi',
|
||||
|
||||
@@ -112,6 +112,7 @@ export const tools = {
|
||||
TABCALZOOM: 'calzoom',
|
||||
TABTEMPLEMAIL: 'templemail',
|
||||
TABOPZEMAIL: 'opzemail',
|
||||
TABSHAREWITHUS: 'sharewithus',
|
||||
|
||||
MAX_CHARACTERS: 60,
|
||||
projects: 'projects',
|
||||
@@ -164,16 +165,6 @@ export const tools = {
|
||||
PRIORITY_LOW: 0
|
||||
},
|
||||
|
||||
OrderStatus: {
|
||||
NONE: 0,
|
||||
IN_CART: 1,
|
||||
CHECKOUT_CONFIRMED: 2,
|
||||
PAYED: 3,
|
||||
DELIVEDED: 4,
|
||||
RECEIVED: 5,
|
||||
CANCELED: 10,
|
||||
},
|
||||
|
||||
Status: {
|
||||
NONE: 0,
|
||||
OPENED: 1,
|
||||
@@ -1775,7 +1766,7 @@ export const tools = {
|
||||
}
|
||||
},
|
||||
|
||||
async saveFieldToServer(myself: any, table, id, mydata) {
|
||||
async saveFieldToServer(myself: any, table, id, mydata, notif = true) {
|
||||
const mydatatosave = {
|
||||
id,
|
||||
table,
|
||||
@@ -1785,6 +1776,7 @@ export const tools = {
|
||||
|
||||
GlobalStore.actions.saveFieldValue(mydatatosave).then((ris) => {
|
||||
if (ris) {
|
||||
if (notif)
|
||||
tools.showPositiveNotif(myself.$q, myself.$t('db.recupdated'))
|
||||
} else {
|
||||
tools.showNegativeNotif(myself.$q, myself.$t('db.recfailed'))
|
||||
@@ -1898,7 +1890,7 @@ export const tools = {
|
||||
if (!(static_data.arrLangUsed.includes(mylang))) {
|
||||
// console.log('non incluso ', mylang)
|
||||
// mylang = static_data.arrLangUsed[0]
|
||||
mylang = 'enUs'
|
||||
mylang = 'it'
|
||||
|
||||
// Metti come default
|
||||
UserStore.mutations.setlang(mylang)
|
||||
@@ -2620,7 +2612,7 @@ export const tools = {
|
||||
if (GlobalStore.state.leftDrawerOpen)
|
||||
myw -= 300
|
||||
if (!this.isMobile())
|
||||
if (GlobalStore.state.RightDrawerOpen)
|
||||
if (GlobalStore.state.rightDrawerOpen)
|
||||
myw -= 300
|
||||
|
||||
maxh2 = (myw / coeff) + 20
|
||||
@@ -3040,7 +3032,7 @@ export const tools = {
|
||||
tools.showNotif(mythis.$q, mythis.$t('login.errato'), { color: 'negative', icon: 'notifications' })
|
||||
mythis.iswaitingforRes = false
|
||||
if (ispageLogin) {
|
||||
GlobalStore.state.RightDrawerOpen = true
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
// mythis.$router.push('/signin')
|
||||
}
|
||||
})
|
||||
@@ -3060,7 +3052,7 @@ export const tools = {
|
||||
tools.showNotif(mythis.$q, mythis.$t('login.subaccount'), { color: 'negative', icon: 'notifications' })
|
||||
mythis.iswaitingforRes = false
|
||||
if (ispageLogin) {
|
||||
GlobalStore.state.RightDrawerOpen = true
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
// mythis.$router.push('/signin')
|
||||
}
|
||||
})
|
||||
@@ -3177,7 +3169,7 @@ export const tools = {
|
||||
}
|
||||
,
|
||||
|
||||
async createNewRecord(mythis, table, data) {
|
||||
async createNewRecord(mythis, table, data, withnotif = true) {
|
||||
|
||||
const mydata = {
|
||||
table,
|
||||
@@ -3187,11 +3179,13 @@ export const tools = {
|
||||
return await
|
||||
GlobalStore.actions.saveTable(mydata)
|
||||
.then((record) => {
|
||||
if (withnotif) {
|
||||
if (record) {
|
||||
tools.showPositiveNotif(mythis.$q, mythis.$t('db.recupdated'))
|
||||
} else {
|
||||
tools.showNegativeNotif(mythis.$q, mythis.$t('db.recfailed'))
|
||||
}
|
||||
}
|
||||
return record
|
||||
})
|
||||
},
|
||||
@@ -3208,7 +3202,7 @@ export const tools = {
|
||||
}
|
||||
|
||||
if (withright)
|
||||
if (GlobalStore.state.RightDrawerOpen)
|
||||
if (GlobalStore.state.rightDrawerOpen)
|
||||
myw -= 300
|
||||
return myw
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ const VALIDATE_USER_URL = process.env.MONGODB_HOST + '/users/'
|
||||
|
||||
export function registereduser(userName: string) {
|
||||
|
||||
let onSuccess = (res: AxiosResponse) => {
|
||||
const onSuccess = (res: AxiosResponse) => {
|
||||
return res.status !== PayloadMessageTypes.statusfound
|
||||
}
|
||||
|
||||
|
||||
@@ -9,12 +9,17 @@ 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 },
|
||||
components: { SingleProject, CProgress, CTodo, CDate, CSingleCart, CTitleBanner },
|
||||
filters: {
|
||||
capitalize(value) {
|
||||
if (!value) {
|
||||
@@ -26,8 +31,14 @@ const namespace: string = 'Products'
|
||||
}
|
||||
})
|
||||
|
||||
export default class CheckOut extends Vue {
|
||||
export default class CheckOut extends MixinBase {
|
||||
public $q: any
|
||||
public mycart: ICart = {}
|
||||
public myrec: any[]
|
||||
public note: string = ''
|
||||
|
||||
public conferma_carrello: boolean = false
|
||||
public conferma_ordine: boolean = false
|
||||
|
||||
/*public $refs: {
|
||||
singleproject: SingleProject[],
|
||||
@@ -39,16 +50,110 @@ export default class CheckOut extends Vue {
|
||||
return cart.items || null
|
||||
}
|
||||
|
||||
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.totalPrice
|
||||
return Products.state.cart.totalQty
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
public mounted() {
|
||||
this.mycart = this.getCart
|
||||
this.myrec = Object.keys(this.mycart)
|
||||
this.note = this.mycart.note
|
||||
|
||||
console.log('myrec', this.myrec)
|
||||
// Products.actions.loadCart()
|
||||
}
|
||||
|
||||
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_CONFIRMED
|
||||
const statusnow = await Products.actions.UpdateStatusCart({ cart_id: this.mycart._id, status })
|
||||
|
||||
if (statusnow === status) {
|
||||
tools.showPositiveNotif(this.$q, 'Ordine Confermato')
|
||||
}
|
||||
// this.change_field('status')
|
||||
// this.change_field('status')
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<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">
|
||||
|
||||
@@ -10,8 +12,25 @@
|
||||
<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.toFixed(2) }}</span>
|
||||
class="text-subtitle1 q-mr-sm ">€ {{ myTotalPrice }}</span>
|
||||
</div>
|
||||
|
||||
<q-input v-model="note" style="max-width: 400px;" label="Note aggiuntive:"
|
||||
filled dense
|
||||
debounce="1000"
|
||||
autogrow
|
||||
@input="change_field('note')">
|
||||
</q-input>
|
||||
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<q-stepper-navigation>
|
||||
<q-btn 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>
|
||||
|
||||
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'
|
||||
5
src/views/ecommerce/orderInfo/orderInfo.scss
Executable file
5
src/views/ecommerce/orderInfo/orderInfo.scss
Executable file
@@ -0,0 +1,5 @@
|
||||
$heightBtn: 100%;
|
||||
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
149
src/views/ecommerce/orderInfo/orderInfo.ts
Executable file
149
src/views/ecommerce/orderInfo/orderInfo.ts
Executable file
@@ -0,0 +1,149 @@
|
||||
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 columns = [
|
||||
{
|
||||
name: 'numorder',
|
||||
required: true,
|
||||
align: 'left',
|
||||
label: 'Numero Ordine',
|
||||
field: 'numorder',
|
||||
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)
|
||||
}
|
||||
|
||||
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 mounted() {
|
||||
this.myorderscart = this.getOrdersCart
|
||||
for (const ordercart of this.myorderscart) {
|
||||
this.myarrrec[ordercart._id] = Object.keys(ordercart)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
88
src/views/ecommerce/orderInfo/orderInfo.vue
Executable file
88
src/views/ecommerce/orderInfo/orderInfo.vue
Executable file
@@ -0,0 +1,88 @@
|
||||
<template>
|
||||
<q-page>
|
||||
<CTitleBanner title="Ordini"></CTitleBanner>
|
||||
<div class="panel">
|
||||
<q-tabs
|
||||
v-model="taborders"
|
||||
inline-label
|
||||
class="text-blue"
|
||||
>
|
||||
<q-tab name="incorso" icon="fas fa-tasks" label="Ordini in Corso"/>
|
||||
<q-tab name="recenti" icon="fas fa-calendar" label="Ordini Recenti"/>
|
||||
</q-tabs>
|
||||
|
||||
<div class="q-pa-sm">
|
||||
<q-table
|
||||
:columns="columns"
|
||||
row-key="numorder"
|
||||
:data="getOrdersCart">
|
||||
|
||||
<template v-slot:body="props">
|
||||
<q-tr :props="props">
|
||||
<q-td key="numorder" :props="props">
|
||||
n. {{ props.row.numorder }}
|
||||
</q-td>
|
||||
<q-td key="created_at" :props="props">
|
||||
{{ tools.getstrDateTime(props.row.created_at) }}
|
||||
</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">
|
||||
{{ props.row.status }}
|
||||
</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>
|
||||
@@ -4,7 +4,7 @@
|
||||
<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"/>
|
||||
<CProductCard :product="product" :complete="false"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -63,6 +63,6 @@ export default class Vreg extends Vue {
|
||||
}
|
||||
|
||||
public openrighttoolbar() {
|
||||
GlobalStore.state.RightDrawerOpen = true
|
||||
GlobalStore.state.rightDrawerOpen = true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user