CGridTableRec + fields + page

pagine:
- Siti Web
- Operazioni
- Push...
This commit is contained in:
Paolo Arena
2021-09-19 20:07:28 +02:00
parent 622bd6943d
commit db4b06f67f
96 changed files with 2561 additions and 4328 deletions

View File

View File

@@ -0,0 +1,34 @@
import { colTabledepartments } from '@src/store/Modules/fieldsTable'
import { CImgText } from '../../../components/CImgText/index'
import { defineComponent } from 'vue'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import MixinMetaTags from '../../../mixins/mixin-metatags'
export default defineComponent({
name: 'StorehousePage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const pagination = {
sortBy: 'name',
descending: false,
page: 2,
rowsPerPage: 5
// rowsNumber: xx if getting data from a server
}
const { setmeta } = MixinMetaTags()
return {
colTabledepartments,
setmeta,
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Uffici" imgbackground="../../public/images/produttori.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Uffici',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Uffici"></CTitleBanner>
<CGridTableRec
prop_mytable="departments"
prop_mytitle="Lista Uffici"
:prop_mycolumns="colTabledepartments"
prop_colkey="name"
nodataLabel="Nessun Ufficio"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./departments.ts">
</script>
<style lang="scss" scoped>
@import 'departments.scss';
</style>

View File

@@ -0,0 +1,58 @@
.listaev {
color: black;
font-size: 0.75rem;
font-weight: 400;
line-height: 1.25rem;
letter-spacing: 0.03333em;
&__date {
font-weight: bold;
color: #2ba0fd;
font-size: 1rem;
}
&__title {
color: red;
font-weight: 700;
letter-spacing: 0.066em;
}
&__details {
color: black;
}
&__tdimg {
width: 150px;
height: 150px;
}
&__table {
margin: 10px;
border-radius: 1rem;
padding: 2px;
}
&__align_center_mobile {
text-align: left;
@media (max-width: 718px) {
text-align: center;
display: flex;
}
}
&__img {
padding: 0.5rem !important;
float: left;
width: 150px;
height: 150px;
border-radius: 1rem;
@media (max-width: 718px) {
// PER VERSIONE MOBILE
float: none;
text-align: center;
margin: 0 auto;
}
}
}

View File

@@ -0,0 +1,156 @@
import { defineComponent, onMounted, ref } from 'vue'
import { tools } from '@src/store/Modules/tools'
import { func_tools } from '@src/store/Modules/toolsext'
import { CTitle } from '../../../components/CTitle/index'
import { CMyPage } from '../../../components/CMyPage/index'
import { IBookedEvent, ICalendarState, IEvents, ITodo, ITodosState, IUserState, IUserFields } from '@src/model'
import { lists } from '@src/store/Modules/lists'
import MixinUsers from '@src/mixins/mixin-users'
import MixinOperator from '@src/mixins/mixin-operator'
import MixinEvents from '@src/mixins/mixin-events'
import { useRoute } from 'vue-router'
import { useCalendarStore } from '@store/CalendarStore'
import { useUserStore } from '@store/UserStore'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
export default defineComponent({
name: 'Eventlist',
components: { CTitle, CMyPage },
setup() {
const shownote = ref(false)
const eventsel = ref(null)
const showPrev = ref(false)
const numrec = ref(0)
const $q = useQuasar()
const { t } = useI18n()
const calendarStore = useCalendarStore()
const userStore = useUserStore()
const $route = useRoute()
const { getTeacherByUsername } = MixinOperator()
const { UpdateDbByFields } = MixinEvents()
function getEventList() {
const eventsloc: IEvents[] = []
const datenow = tools.addDays(tools.getDateNow(), -1)
let numevent = 0
calendarStore.eventlist.forEach((myevent: IEvents) => {
// console.log(' ciclo i = ', i, calendarStore.eventlist[i])
// let dateEvent = new Date(myevent.date + ' 00:00:00')
const dateEvent = new Date(myevent.dateTimeEnd!)
let add = true
if (!showall) {
add = calendarStore.getNumParticipants(myevent, showall(), tools.peopleWhere.participants) > 0
}
if (add) {
if (showPrev.value) {
if (dateEvent < datenow) {
eventsloc.push(myevent)
numevent++
}
} else {
if (dateEvent >= datenow) {
eventsloc.push(myevent)
numevent++
}
}
}
})
numrec.value = numevent
if (showPrev.value) {
eventsloc.reverse()
}
return eventsloc.filter((rec) => rec.title !== '')
}
function getNumEvent() {
const eventsloc: IEvents[] = []
const datenow = tools.addDays(tools.getDateNow(), -1)
let numevent = 0
calendarStore.eventlist.forEach((myevent: IEvents) => {
// console.log(' ciclo i = ', i, calendarStore.eventlist[i])
// let dateEvent = new Date(myevent.date + ' 00:00:00')
const dateEvent = new Date(myevent.dateTimeEnd!)
let add = true
if (!showall) {
add = calendarStore.getNumParticipants(myevent, showall(), tools.peopleWhere.participants) > 0
}
if (add) {
if (showPrev.value) {
if (dateEvent < datenow)
numevent++
} else {
if (dateEvent >= datenow)
numevent++
}
}
})
numrec.value = numevent
return eventsloc
}
function mostra() {
return $route.name
}
function showall() {
return $route.name === 'otherpages.admin.usereventlist'
}
function gettitle() {
if (showall())
return t('otherpages.admin.usereventlist')
else
return t('otherpages.admin.eventlist')
}
function mounted() {
getNumEvent()
}
function change_rec(eventparam: any) {
UpdateDbByFields($q, eventparam)
}
onMounted(mounted)
return {
getEventList,
tools,
func_tools,
lists,
showall,
calendarStore,
userStore,
getTeacherByUsername,
numrec,
shownote,
}
}
})

View File

@@ -0,0 +1,190 @@
<template>
<CMyPage
title="Events" keywords="" description="" imgbackground="../../public/images/calendario_eventi.jpg"
sizes="max-height: 120px">
<div class="q-ma-sm q-pa-xs">
<div v-if="!showall" class="text-h6 bg-red text-white text-center q-pa-xs shadow-max">Lista delle tue
prenotazioni agli Eventi:
</div>
<q-space></q-space>
<!--<q-toggle v-model="showPrev" :val="lists.MenuAction.SHOW_PREV_REC"
:label="$t('grid.showprevedit')"></q-toggle>-->
</div>
<div>
<q-markup-table wrap-cells bordered separator="horizontal" class="listaev__table">
<thead>
<th>{{ $t('cal.data') }}</th>
<th>{{ $t('cal.event') }}</th>
<th v-if="!tools.isMobile()">{{ $t('cal.teachertitle') }}</th>
<th v-if="showall">
<span v-if="!tools.isMobile()">{{ $t('cal.selnumpeople') }}</span>
<span v-else>{{ $t('cal.selnumpeople_short') }}</span>
</th>
<th v-if="showall">
{{ $t('cal.selnumpeopleLunch') }}
</th>
<th v-if="showall">
{{ $t('cal.selnumpeopleDinner') }}
</th>
<th v-if="showall">
{{ $t('cal.selnumpeopleDinnerShared') }}
</th>
<th>{{ $t('cal.peoplebooked') }}</th>
</thead>
<tbody>
<tr v-for="(event, index) in getEventList()" :key="index" class="listaev listaev__table">
<td>
<div class="text-center text-blue">{{ func_tools.getDateStr(event.dateTimeStart) }}</div>
</td>
<td>
<div class="text-center boldhigh">{{ event.title }}</div>
</td>
<td v-if="!tools.isMobile()">
<div class="text-center">{{ getTeacherByUsername(event.teacher) }}
<span v-if="isValidUsername(event.teacher2)"> - {{ getTeacherByUsername(event.teacher2) }}</span>
<span v-if="isValidUsername(event.teacher3)"> - {{ getTeacherByUsername(event.teacher3) }}</span>
<span v-if="isValidUsername(event.teacher4)"> - {{ getTeacherByUsername(event.teacher4) }}</span>
</div>
</td>
<td v-if="showall">
<div class="text-center">{{
calendarStore.getNumParticipants(event, showall, tools.peopleWhere.participants)
}}
</div>
</td>
<td v-if="showall">
<div class="text-center">{{
calendarStore.getNumParticipants(event, showall, tools.peopleWhere.lunch)
}}
</div>
</td>
<td v-if="showall">
<div class="text-center">{{
calendarStore.getNumParticipants(event, showall, tools.peopleWhere.dinner)
}}
</div>
</td>
<td v-if="showall">
<div class="text-center">{{
calendarStore.getNumParticipants(event, showall, tools.peopleWhere.dinnerShared)
}}
</div>
</td>
<td class="text-center">
<q-btn
v-if="calendarStore.getNumParticipants(event, showall, tools.peopleWhere.participants) > 0"
flat
dense
color="positive"
rounded
icon="fas fa-user-check"
@click="showpeople = true; eventsel = event"
>
</q-btn>
<q-btn
dense
flat
rounded
:color="!!event.note ? 'positive' : 'dark'"
icon="fas fa-pencil-alt"
@click="shownote = true; eventsel = event"
>
</q-btn>
</td>
</tr>
</tbody>
</q-markup-table>
<q-dialog v-model="shownote">
<q-card v-if="eventsel" :style="`min-width: ` + tools.myheight_dialog() + `px;`">
<q-toolbar class="bg-primary text-white">
<q-toolbar-title>
Note: {{ eventsel.title }}
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="q-pa-xs inset-shadow">
<q-input
v-model="eventsel.note" style="min-height: 50px; " label="Note:"
filled dense
autogrow
type="textarea" debounce="500"
input-class="myinput-area"
@input="change_rec(eventsel)">
</q-input>
</q-card-section>
</q-card>
</q-dialog>
<q-dialog v-model="showpeople">
<q-card v-if="eventsel" :style="`min-width: ` + tools.myheight_dialog() + `px;`">
<q-toolbar class="bg-primary text-white">
<q-toolbar-title>
{{ eventsel.title }}
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="q-pa-xs inset-shadow">
<q-markup-table wrap-cells bordered separator="horizontal" class="listaev__table">
<thead>
<th>Data</th>
<th>Messaggio</th>
<th>Partec</th>
<th>Azione</th>
</thead>
<tbody>
<tr
v-for="(eventbook, index) in calendarStore.getEventsBookedByIdEvent(eventsel._id, showall)"
:key="index"
class="listaev listaev__table">
<td class="text-center">
<div>{{ func_tools.getDateTimeShortStr(eventbook.datebooked) }}
</div>
</td>
<td class="text-center">
<strong>{{ userStore.getNameSurnameByUserId(eventbook.userId) }}</strong> <span
v-if="eventbook.msgbooking"> {{ $t('sendmsg.write') }}: </span><br>
{{ eventbook.msgbooking }}
</td>
<td class="text-center">
<span v-if="eventbook.numpeople > 0">Partecipanti: {{ eventbook.numpeople }}<br></span>
<span v-if="eventbook.numpeopleLunch > 0">Pranzo: {{ eventbook.numpeopleLunch }}<br></span>
<span v-if="eventbook.numpeopleDinner > 0">Cena: {{ eventbook.numpeopleDinner }}<br></span>
<span v-if="eventbook.numpeopleDinnerShared > 0">Cena Condivisa: {{ eventbook.numpeopleDinnerShared }}<br></span>
</td>
<td class="text-center">
<q-btn
flat round color="red" icon="fas fa-trash-alt" size="sm"
@click="tools.CancelBookingEvent(mythis, eventsel, eventbook._id, false)"></q-btn>
</td>
</tr>
</tbody>
</q-markup-table>
</q-card-section>
</q-card>
</q-dialog>
<div v-if="numrec === 0">
<div v-if="!showPrev" class="text-blue text-center q-pa-xs shadow">
Attualmente non hai nessuna Prenotazione futura.
</div>
<div v-else class="text-blue text-center q-pa-xs shadow">
Non hai nessuna Prenotazione passata.
</div>
</div>
<br>
</div>
</CMyPage>
</template>
<script lang="ts" src="./eventlist.ts">
</script>
<style lang="scss" scoped>
@import './eventlist.scss';
</style>

View File

View File

@@ -0,0 +1,19 @@
import { defineComponent, ref, computed } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colgallery } from '@src/store/Modules/fieldsTable'
export default defineComponent({
name: 'Gallery',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
return {
colgallery
}
}
})

View File

@@ -0,0 +1,23 @@
<template>
<CMyPage title="Gallerie" imgbackground="../../public/images/calendario_eventi.jpg" sizes="max-height: 120px">
<div class="q-ma-sm q-gutter-sm">
<CTitleBanner title="Gallerie"></CTitleBanner>
<CGridTableRec
prop_mytable="gallery"
prop_mytitle=""
:prop_mycolumns="colgallery"
prop_colkey="_id"
nodataLabel="Nessuna Galleria"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./gallery.ts">
</script>
<style lang="scss" scoped>
@import 'gallery.scss';
</style>

View File

View File

@@ -0,0 +1,19 @@
import { defineComponent, ref, computed } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTablegroups } from '@src/store/Modules/fieldsTable'
export default defineComponent({
name: 'GroupPage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
return {
colTablegroups
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Gruppi" imgbackground="../../public/images/produttori.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Gruppi',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Gruppi"></CTitleBanner>
<CGridTableRec
prop_mytable="groups"
prop_mytitle="Gruppi"
:prop_mycolumns="colTablegroups"
prop_colkey="descr"
nodataLabel="Nessun Gruppo"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./groups.ts">
</script>
<style lang="scss" scoped>
@import 'groups.scss';
</style>

View File

@@ -0,0 +1,35 @@
import { defineComponent, ref, onMounted } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colmsg_templates } from '@src/store/Modules/fieldsTable'
import { useGlobalStore } from '@store/globalStore'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'Msgtemplate',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const globalStore = useGlobalStore()
const dataMsg_Templates = ref([])
const { setmeta } = MixinMetaTags()
async function mounted() {
dataMsg_Templates.value = await globalStore.GetMsgTemplates()
}
onMounted(mounted)
return {
colmsg_templates,
dataMsg_Templates,
setmeta,
}
}
})

View File

@@ -0,0 +1,33 @@
<template>
<CMyPage
title="Template Messaggi" imgbackground="../../public/images/calendario_eventi.jpg"
sizes="max-height: 100px">
<span>{{
setmeta({
title: 'Template Messaggi',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Template Messaggi"></CTitleBanner>
<CGridTableRec
prop_mytable="msg_templates"
prop_mytitle="Lista Messaggi"
:prop_mycolumns="colmsg_templates"
prop_colkey="title"
nodataLabel="Nessun Messaggio"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./msg_template.ts">
</script>
<style lang="scss" scoped>
@import 'msg_template.scss';
</style>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent, ref, onMounted } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { getcolorderscart } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'StorehousePage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
getcolorderscart,
setmeta,
}
}
})

View File

@@ -0,0 +1,28 @@
<template>
<CMyPage title="Ordini Ufficio" imgbackground="../../public/images/produttori.jpg" sizes="max-height: 120px">
<span>{{ setmeta({
title: 'Ordini Ufficio',
description: "",
keywords: '' } ) }}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Ordini Ufficio"></CTitleBanner>
<!--<CGridTableRec prop_mytable="orderscart"
prop_mytitle="Lista Ordini"
:prop_mycolumns="getcolorderscart"
prop_colkey="name"
nodataLabel="Nessun Ordine"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
-->
</div>
</CMyPage>
</template>
<script lang="ts" src="./orders.ts">
</script>
<style lang="scss" scoped>
@import 'orders.scss';
</style>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent, ref, onMounted } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colmypage } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'Pages',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
colmypage,
setmeta,
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Pagine" imgbackground="../../public/images/calendario_eventi.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Pagine',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Pagine"></CTitleBanner>
<CGridTableRec
prop_mytable="mypage"
prop_mytitle="Lista Pagine"
:prop_mycolumns="colmypage"
prop_colkey="title"
nodataLabel="Nessuna Pagina"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./pages.ts">
</script>
<style lang="scss" scoped>
@import 'pages.scss';
</style>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTableProducer } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'ProducerPage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
colTableProducer,
setmeta,
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Produttori" imgbackground="../../public/images/produttori.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Produttori',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Produttori"></CTitleBanner>
<CGridTableRec
prop_mytable="producers"
prop_mytitle="Lista Produttori"
:prop_mycolumns="colTableProducer"
prop_colkey="name"
nodataLabel="Nessun Produttore"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./producer.ts">
</script>
<style lang="scss" scoped>
@import 'producer.scss';
</style>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTableProducts } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'ProductsPage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
colTableProducts,
setmeta,
}
}
})

View File

@@ -0,0 +1,32 @@
<template>
<CMyPage title="Prodotti" imgbackground="../../public/images/prodotti.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Prodotti',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Prodotti"></CTitleBanner>
<CGridTableRec
prop_mytable="products"
prop_mytitle="Lista Prodotti"
:prop_mycolumns="colTableProducts"
prop_colkey="name"
nodataLabel="Nessun Prodotto"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./products.ts">
</script>
<style lang="scss" scoped>
@import 'products.scss';
</style>

View File

@@ -0,0 +1,125 @@
import { CMyPage } from '../../../components/CMyPage/index'
import { shared_consts } from '@src/common/shared_vuejs'
import { tools } from '@src/store/Modules/tools'
import { defineComponent, ref, onMounted } from 'vue'
import { useI18n } from '@src/boot/i18n'
import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { useQuasar } from 'quasar'
export default defineComponent({
name: 'Sendpushnotif',
components: { CMyPage },
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const userStore = useUserStore()
const globalStore = useGlobalStore()
const incaricamento = ref(false)
const title= ref('')
const content= ref('')
const openUrl= ref('')
const openUrl2= ref('')
const opz1= ref('')
const opz2= ref('')
const tag= ref('')
const actiontype = ref(shared_consts.TypeMsg_Actions.NORMAL)
const destination = ref(shared_consts.TypeMsg.SEND_TO_ALL)
function created() {
title.value = t('ws.sitename')
openUrl.value = '/'
openUrl2.value = ''
tag.value = 'msg'
}
function SendMsg(params: any) {
$q.dialog({
message: t('dialog.continue') + ' ' + params.content + ' ?',
cancel: {
label: t('dialog.cancel')
},
ok: {
label: t('dialog.yes'),
push: true
},
title: params.title
}).onOk(async () => {
incaricamento.value = true
$q.loading.show({ message: t('otherpages.update') })
const ris = await globalStore.sendPushNotif({ params })
if (!!ris.msg)
tools.showPositiveNotif($q, ris.msg)
$q.loading.hide()
incaricamento.value = false
})
}
function SendMsgToParam(typemsg: any) {
/*const param: any = {
typemsg,
title: title,
content: content,
openUrl: openUrl,
openUrl2: openUrl2,
tag: tag,
actions: []
}
*/
let param: any = []
if (actiontype.value === shared_consts.TypeMsg_Actions.YESNO) {
param.value = [
{ action: 'confirm', title: 'Si', icon: '/statics/icons/opz1-icon-96x96.png' },
{ action: 'cancel', title: 'No', icon: '/statics/icons/opz2-icon-96x96.png' }
]
} else if (actiontype.value === shared_consts.TypeMsg_Actions.OPZ1_2) {
param.value = [
{ action: 'opz1', title: opz1, icon: '/statics/icons/opz1-icon-96x96.png' },
{ action: 'opz2', title: opz2, icon: '/statics/icons/opz2-icon-96x96.png' }
]
}
// action: A DOMString identifying a user action to be displayed on the notification.
// title: A DOMString containing action text to be shown to the user.
// icon: A USVString containing the URL of an icon to display with the action.
return SendMsg(param)
}
function SendMsgToAll() {
SendMsgToParam(destination)
}
onMounted(created)
return {
title,
tag,
openUrl,
openUrl2,
actiontype,
destination,
SendMsgToAll,
opz1,
opz2,
content,
shared_consts,
incaricamento,
}
}
})

View File

@@ -0,0 +1,52 @@
<template>
<CMyPage img="" title="Invio Push Notifiche" keywords="" description="">
<div class="q-ma-sm">
<div class="row center_img clBorderSteps" style="max-width: 600px;">
<div class="row">
<q-input v-model="title" autofocus label="Titolo" style="width: 300px;"></q-input>
</div>
<div class="row">
<q-input
v-model="content" type="textarea" autofocus label="Contenuto"
input-class="myinput-area"
style="height: 100px; width: 500px;"></q-input>
</div>
<div class="row">
<q-input v-model="openUrl" autofocus label="openUrl" style="width: 200px;"></q-input>
<q-input v-model="openUrl2" autofocus label="openUrl2" style="width: 200px;"></q-input>
<q-input v-model="tag" autofocus label="tag" style="width: 100px;"></q-input>
</div>
<q-select
rounded outlined v-model="actiontype"
: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" color="primary" @click="SendMsgToAll()"></q-btn>
</div>
</div>
<q-inner-loading id="spinner" :showing="incaricamento">
<q-spinner-tail
color="primary"
size="4em">
</q-spinner-tail>
</q-inner-loading>
</div>
</CMyPage>
</template>
<script lang="ts" src="./sendpushnotif.ts">
</script>
<style lang="scss" scoped>
@import './sendpushnotif.scss';
</style>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTableShareWithUs } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'ShareWithUsPage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
colTableShareWithUs,
setmeta,
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Condividi" imgbackground="../../public/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="colTableShareWithUs"
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>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTableSites } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'SitesPage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
colTableSites,
setmeta,
}
}
})

View File

@@ -0,0 +1,32 @@
<template>
<CMyPage title="Siti" imgbackground="images/calendario_eventi.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Siti',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Siti Web"></CTitleBanner>
<CGridTableRec
prop_mytable="sites"
prop_mytitle="Lista Siti"
:prop_mycolumns="colTableSites"
prop_colkey="name"
nodataLabel="Nessun Sito"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./sites.ts">
</script>
<style lang="scss" scoped>
@import 'sites.scss';
</style>

View File

View File

@@ -0,0 +1,24 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTableStorehouse } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'StorehousePage',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
return {
colTableStorehouse,
setmeta,
}
}
})

View File

@@ -0,0 +1,31 @@
<template>
<CMyPage title="Magazzini" imgbackground="../../public/images/produttori.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Magazzini',
description: '',
keywords: '',
})
}}
</span>
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Magazzini"></CTitleBanner>
<CGridTableRec
prop_mytable="storehouses"
prop_mytitle="Lista Magazzini"
:prop_mycolumns="colTableStorehouse"
prop_colkey="name"
nodataLabel="Nessun Magazzino"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</div>
</CMyPage>
</template>
<script lang="ts" src="./storehouses.ts">
</script>
<style lang="scss" scoped>
@import 'storehouses.scss';
</style>

View File

View File

@@ -0,0 +1,28 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { func } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({
name: 'TablesList',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
const { setmeta } = MixinMetaTags()
function gettablesList() {
return func.gettablesList()
}
return {
gettablesList,
setmeta,
}
}
})

View File

@@ -0,0 +1,18 @@
<template>
<CMyPage img="" :title="$t('otherpages.admin.userlist')" keywords="" description="">
<CGridTableRec
:prop_mytitle="$t('otherpages.admin.tableslist')"
:nodataLabel="$t('grid.nodata')"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato"
:tablesList="gettablesList()"
>
</CGridTableRec>
</CMyPage>
</template>
<script lang="ts" src="./tablesList.ts">
</script>
<style lang="scss" scoped>
@import './tablesList.scss';
</style>

View File

View File

@@ -0,0 +1,22 @@
import { defineComponent } from 'vue'
import { CImgText } from '../../../components/CImgText/index'
import { CCard } from '@/components/CCard'
import { CMyPage } from '@/components/CMyPage'
import { CTitleBanner } from '@/components/CTitleBanner'
import { CGridTableRec } from '@/components/CGridTableRec'
import { colTableStorehouse } from '@src/store/Modules/fieldsTable'
import MixinMetaTags from '@/mixins/mixin-metatags'
import { tools } from '@store/Modules/tools'
export default defineComponent({
name: 'Uploader',
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
setup() {
return {
tools
}
}
})

View File

@@ -0,0 +1,40 @@
<template>
<div class="q-pa-md">
<div class="q-gutter-sm row items-start">
<q-uploader
label="Galleria Home"
accept=".jpg, image/*"
:url="tools.geturlupload()+`/gallery_home`"
:headers="tools.getheaders()"
:max-file-size="2000000"
multiple
style="max-width: 300px"
></q-uploader>
<q-uploader
label="Immagini"
accept=".jpg, image/*"
:url="tools.geturlupload()+`/img`"
:headers="tools.getheaders()"
:max-file-size="1000000"
multiple
style="max-width: 300px"
></q-uploader>
<q-uploader
label="Invia PDF"
accept=".pdf"
:url="tools.geturlupload()+`/pdf`"
:headers="tools.getheaders()"
multiple
style="max-width: 300px"
></q-uploader>
</div>
</div>
</template>
<script lang="ts" src="./uploader.ts">
</script>
<style lang="scss" scoped>
@import 'uploader';
</style>

View File

@@ -0,0 +1 @@
export {default as usersList} from './usersList.vue'

View File

View File

@@ -0,0 +1,94 @@
import { defineComponent, onMounted, ref } from 'vue'
import { CMyPage } from '@/components/CMyPage'
import { CGridTableRec } from '@/components/CGridTableRec'
import { tools } from '../../../store/Modules/tools'
import { static_data } from '../../../db/static_data'
import { fieldsTable } from '@src/store/Modules/fieldsTable'
import { shared_consts } from '@/common/shared_vuejs'
export default defineComponent({
name: 'UsersList',
components: { CGridTableRec, CMyPage },
setup() {
const arrfilterand: any = ref([])
function mounted() {
if (tools.appid() === tools.IDAPP_AYNI) {
arrfilterand.value = [
{
label: 'Attivi',
value: shared_consts.FILTER_ATTIVI
},
{
label: 'Nascosti',
value: shared_consts.FILTER_NASCOSTI
},
{
label: 'Navi Non Presenti!',
value: shared_consts.FILTER_NAVI_NON_PRESENTI
},
{
label: 'Non hanno visto Zoom',
value: shared_consts.FILTER_USER_NO_ZOOM
},
{
label: 'hanno detto di aver visto lo Zoom',
value: shared_consts.FILTER_ASK_ZOOM_VISTO
},
{
label: 'Non hanno l\'Invitante',
value: shared_consts.FILTER_USER_NO_INVITANTE
},
{
label: 'No Telegram ID',
value: shared_consts.FILTER_USER_NO_TELEGRAM_ID
},
{
label: 'Verifica Telegram interrotta',
value: shared_consts.FILTER_USER_CODICE_AUTH_TELEGRAM
},
{
label: 'Email non Verificata',
value: shared_consts.FILTER_USER_NO_EMAIL_VERIFICATA
},
{
label: 'Non hanno compilato il sogno',
value: shared_consts.FILTER_USER_NO_DREAM
},
{
label: 'Telegram BOT Rimosso',
value: shared_consts.FILTER_USER_TELEGRAM_BLOCKED
}
]
}
}
function db_fieldsTable() {
return fieldsTable
}
function userlist() {
if (static_data.functionality.ENABLE_REG_AYNI) {
return db_fieldsTable().colTableUsers
} else if (static_data.functionality.ENABLE_REG_CNM) {
return db_fieldsTable().colTableUsersCNM
} else {
return db_fieldsTable().colTableUsersBase
}
}
onMounted(mounted)
return {
arrfilterand,
userlist,
}
}
})

View File

@@ -0,0 +1,22 @@
<template>
<CMyPage img="" :title="$t('otherpages.admin.userlist')" keywords="" description="Lista Utenti">
<CGridTableRec
prop_mytable="users"
prop_mytitle="Lista Utenti"
:prop_mycolumns="userlist()"
prop_colkey="_id"
nodataLabel="Nessun Utente"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato"
:arrfilters="arrfilterand">
</CGridTableRec>
</CMyPage>
</template>
<script lang="ts" src="./usersList.ts">
</script>
<style lang="scss" scoped>
@import './usersList.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as zoomList} from './zoomList.vue'

View File

View File

@@ -0,0 +1,20 @@
import { defineComponent } from 'vue'
import { CMyPage } from '@/components/CMyPage'
import { CGridTableRec } from '@/components/CGridTableRec'
import { fieldsTable } from '@src/store/Modules/fieldsTable'
export default defineComponent({
name: 'ZoomList',
components: { CMyPage,CGridTableRec },
setup() {
function db_fieldsTable() {
return fieldsTable
}
return {
db_fieldsTable,
}
}
})

View File

@@ -0,0 +1,21 @@
<template>
<CMyPage img="" :title="$t('otherpages.admin.zoomlist')" keywords="" :description="$t('otherpages.admin.zoomlist')">
<CGridTableRec
prop_mytable="calzoom"
:prop_mytitle="$t('otherpages.admin.zoomlist')"
:prop_mycolumns="db_fieldsTable().colTableCalZoom"
prop_colkey="_id"
nodataLabel="Nessuno Zoom"
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
</CGridTableRec>
</CMyPage>
</template>
<script lang="ts" src="./zoomList.ts">
</script>
<style lang="scss" scoped>
@import './zoomList.scss';
</style>