Pannello Utente

Aggiornamento Yarn
This commit is contained in:
Paolo Arena
2022-07-10 01:24:54 +02:00
parent 51e13794c3
commit 42cb624f41
82 changed files with 2379 additions and 1162 deletions

View File

@@ -207,7 +207,7 @@ const msg_website_it = {
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>' + '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>' + '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>'
+ '<li>👨🏻‍💻 Con una <strong>piccola donazione</strong> per le spese dei Server</li></ul>' + + '<li>👨🏻‍💻 Con una <strong>piccola donazione</strong> per le spese dei Server</li></ul>' +
'<strong>Tramite Paypal:</strong><br><em>clicca sull\'importo per fare una donazione. </em><br>' + '<strong>Tramite Paypal:</strong><br>' +
'<div style="font-size: 1.5rem; background-color: white; color: blue; border: solid 2px #f00; margin: 10px; padding: 10px; border-radius: 10px; " ' + '<div style="font-size: 1.5rem; background-color: white; color: blue; border: solid 2px #f00; margin: 10px; padding: 10px; border-radius: 10px; " ' +
'class="row justify-around">' + 'class="row justify-around">' +
'<span><a href="https://paypal.me/paoloarena/1" target="_blank">1€</a></span>' + '<span><a href="https://paypal.me/paoloarena/1" target="_blank">1€</a></span>' +
@@ -215,7 +215,7 @@ const msg_website_it = {
'<span><a href="https://paypal.me/paoloarena/5" target="_blank">5€</a></span>' + '<span><a href="https://paypal.me/paoloarena/5" target="_blank">5€</a></span>' +
'<span><a href="https://paypal.me/paoloarena/10" target="_blank">10€</a></span>' + '<span><a href="https://paypal.me/paoloarena/10" target="_blank">10€</a></span>' +
'<span><a href="https://paypal.me/paoloarena" target="_blank">scegli</a></span>' + '<span><a href="https://paypal.me/paoloarena" target="_blank">scegli</a></span>' +
'</div><br>' + '</div><em>clicca sull\'importo per fare una <strong>donazione</strong> </em><br>' +
'In alternativa inventati una forma di scambio da donare a Paolo (soprannome <a href="https://t.me/surya1977" target="_blank">Surya</a>)<br />' + 'In alternativa inventati una forma di scambio da donare a Paolo (soprannome <a href="https://t.me/surya1977" target="_blank">Surya</a>)<br />' +
'<span style="color: red; font-size: 2rem;">❤</span> Sono graditi messaggi sia di suggerimenti che di apprezzamenti.<br>' + '<span style="color: red; font-size: 2rem;">❤</span> Sono graditi messaggi sia di suggerimenti che di apprezzamenti.<br>' +
'Grazie Mille per l\'Aiuto' + 'Grazie Mille per l\'Aiuto' +

View File

@@ -4,13 +4,14 @@ import {
IFunctionality, IFunctionality,
IPreloadImages, IPreloadImages,
} from '@model' } from '@model'
import { func } from '@store/Modules/fieldsTable'
const functionality: IFunctionality = { const functionality: IFunctionality = {
PWA: true, PWA: true,
SHOW_USER_MENU: true, // Cambiare con true SHOW_USER_MENU: true, // Cambiare con true
SHOW_PROFILE: true, SHOW_PROFILE: true,
SHOW_REG_BUTTON: false, SHOW_REG_BUTTON: false,
ENABLE_REGISTRATION: true, // Cambiare con true ENABLE_REGISTRATION: true,
ENABLE_REG_NEED_TELEGRAM: true, ENABLE_REG_NEED_TELEGRAM: true,
SHOW_NEWSLETTER: false, SHOW_NEWSLETTER: false,
SHOW_ONLY_POLICY: true, SHOW_ONLY_POLICY: true,
@@ -18,6 +19,7 @@ const functionality: IFunctionality = {
ENABLE_PROJECTS_LOADING: false, ENABLE_PROJECTS_LOADING: false,
SHOW_IF_IS_SERVER_CONNECTION: false, SHOW_IF_IS_SERVER_CONNECTION: false,
SHOW_MESSAGES: false, SHOW_MESSAGES: false,
SHOW_NOTIF: true,
BOOKING_EVENTS: true, BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false, ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true, ENABLE_REG_ISP: true,
@@ -579,7 +581,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -590,7 +592,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -601,7 +603,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -612,7 +614,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -623,7 +625,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -709,7 +711,7 @@ const baseroutes: IListRoutes[] = [
infooter: true infooter: true
}, },
{ {
active: functionality.ENABLE_REGISTRATION, active: functionality.ENABLE_REGISTRATION && functionality.ENABLE_REG_NEED_TELEGRAM,
order: 1000, order: 1000,
path: '/signup/:invited/:usernameteleg/:idteleg', path: '/signup/:invited/:usernameteleg/:idteleg',
materialIcon: 'how_to_reg', materialIcon: 'how_to_reg',
@@ -719,6 +721,17 @@ const baseroutes: IListRoutes[] = [
infooter: false, infooter: false,
separator: false separator: false
}, },
/*{
active: functionality.ENABLE_REGISTRATION && !functionality.ENABLE_REG_NEED_TELEGRAM,
order: 1000,
path: '/signup',
materialIcon: 'how_to_reg',
name: 'pages.SignUp',
component: () => import('@/views/login/signup/signup_noteleg.vue'),
inmenu: false,
infooter: false,
separator: false
},*/
{ {
active: true, active: true,
order: 1001, order: 1001,

View File

@@ -6,7 +6,7 @@ import { useUserStore } from '@store/UserStore'
import { Logo } from '../../components/logo' import { Logo } from '../../components/logo'
import { Footer } from '../../components/Footer' import { LandingFooter } from '../../components/LandingFooter'
import { CMyPage } from '../../components/CMyPage/index' import { CMyPage } from '../../components/CMyPage/index'
import { tools } from '@src/store/Modules/tools' import { tools } from '@src/store/Modules/tools'
@@ -21,7 +21,7 @@ import { IGallery } from 'model'
export default defineComponent({ export default defineComponent({
name: 'Home_tdv', name: 'Home_tdv',
components: { Logo, Footer, CMyPage, CCardCarousel, CEventsCalendar, COpenStreetMap }, components: { Logo, LandingFooter, CMyPage, CCardCarousel, CEventsCalendar, COpenStreetMap },
setup() { setup() {
const animare = ref(0) const animare = ref(0)

View File

@@ -22,27 +22,27 @@
"generate-sw": "workbox generateSW workbox-config.js" "generate-sw": "workbox generateSW workbox-config.js"
}, },
"dependencies": { "dependencies": {
"@quasar/extras": "^1.13.6", "@quasar/extras": "^1.14.2",
"@quasar/quasar-ui-qcalendar": "^4.0.0-beta.13", "@quasar/quasar-ui-qcalendar": "^4.0.0-beta.13",
"@vue-leaflet/vue-leaflet": "^0.6.1", "@vue-leaflet/vue-leaflet": "^0.6.1",
"@vue/compat": "^3.2.33", "@vue/compat": "^3.2.37",
"@vue/compiler-sfc": "^3.2.33", "@vue/compiler-sfc": "^3.2.37",
"@vue/eslint-config-standard": "6.1.0", "@vue/eslint-config-standard": "7.0.0",
"@vuelidate/core": "^2.0.0-alpha.41", "@vuelidate/core": "^2.0.0-alpha.42",
"@vuelidate/validators": "^2.0.0-alpha.29", "@vuelidate/validators": "^2.0.0-alpha.30",
"acorn": "^8.7.1", "acorn": "^8.7.1",
"autoprefixer": "^10.4.7", "autoprefixer": "^10.4.7",
"axios": "^0.26.0", "axios": "^0.26.0",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"chart.js": "^3.7.1", "chart.js": "^3.8.0",
"core-js": "^3.22.4", "core-js": "^3.23.3",
"crypto": "^1.0.1", "crypto": "^1.0.1",
"date-fns": "^2.28.0", "date-fns": "^2.28.0",
"dotenv": "^16.0.0", "dotenv": "^16.0.1",
"echarts": "^5.3.2", "echarts": "^5.3.3",
"eslint-plugin-quasar": "^1.1.0", "eslint-plugin-quasar": "^1.1.0",
"eslint-plugin-standard": "^5.0.0", "eslint-plugin-standard": "^5.0.0",
"graphql": "^16.4.0", "graphql": "^16.5.0",
"graphql-tag": "^2.12.6", "graphql-tag": "^2.12.6",
"gsap": "^3.10.4", "gsap": "^3.10.4",
"jquery": "^3.6.0", "jquery": "^3.6.0",
@@ -50,24 +50,24 @@
"localforage": "^1.10.0", "localforage": "^1.10.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"npm": "^8.9.0", "npm": "^8.13.2",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.0.14", "pinia": "^2.0.14",
"prerender-spa-plugin": "^3.4.0", "prerender-spa-plugin": "^3.4.0",
"quasar": "^2.6.6", "quasar": "^2.7.5",
"quasar-extras": "^2.0.9", "quasar-extras": "^2.0.9",
"register-service-worker": "^1.7.2", "register-service-worker": "^1.7.2",
"vee-validate": "^4.5.11", "vee-validate": "^4.5.11",
"vue": "^3.2.33", "vue": "^3.2.37",
"vue-chart-3": "^3.1.8", "vue-chart-3": "^3.1.8",
"vue-class-component": "^8.0.0-rc.1", "vue-class-component": "^8.0.0-rc.1",
"vue-country-code": "^1.1.3", "vue-country-code": "^1.1.3",
"vue-echarts": "^6.0.2", "vue-echarts": "^6.1.0",
"vue-i18n": "^9.2.0-beta.26", "vue-i18n": "^9.2.0-beta.26",
"vue-idb": "^0.2.0", "vue-idb": "^0.2.0",
"vue-loader": "^17.0.0", "vue-loader": "^17.0.0",
"vue-property-decorator": "^10.0.0-rc.3", "vue-property-decorator": "^10.0.0-rc.3",
"vue-router": "^4.0.15", "vue-router": "^4.1.0",
"vue-scroll-reveal": "^1.0.11", "vue-scroll-reveal": "^1.0.11",
"vue-svgicon": "^4.0.0-alpha.3", "vue-svgicon": "^4.0.0-alpha.3",
"vue2-dragula": "^2.5.5", "vue2-dragula": "^2.5.5",
@@ -79,38 +79,38 @@
"@types/bcryptjs": "^2.4.2", "@types/bcryptjs": "^2.4.2",
"@types/dotenv": "^8.2.0", "@types/dotenv": "^8.2.0",
"@types/googlemaps": "^3.43.3", "@types/googlemaps": "^3.43.3",
"@types/jest": "^27.5.0", "@types/jest": "^28.1.4",
"@types/js-cookie": "^3.0.2", "@types/js-cookie": "^3.0.2",
"@types/node": "17.0.31", "@types/node": "18.0.1",
"@types/nprogress": "^0.2.0", "@types/nprogress": "^0.2.0",
"@types/vue-tel-input": "^2.1.2", "@types/vue-tel-input": "^2.1.2",
"@types/vuelidate": "^0.7.15", "@types/vuelidate": "^0.7.15",
"@typescript-eslint/eslint-plugin": "^5.22.0", "@typescript-eslint/eslint-plugin": "^5.30.5",
"@typescript-eslint/parser": "^5.22.0", "@typescript-eslint/parser": "^5.30.5",
"eslint": "^8.14.0", "eslint": "^8.19.0",
"eslint-config-prettier": "^8.5.0", "eslint-config-prettier": "^8.5.0",
"eslint-plugin-import": "^2.26.0", "eslint-plugin-import": "^2.26.0",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^6.0.0", "eslint-plugin-promise": "^6.0.0",
"eslint-plugin-vue": "^8.7.1", "eslint-plugin-vue": "^9.1.1",
"file-loader": "^6.2.0", "file-loader": "^6.2.0",
"html-webpack-plugin": "^5.5.0", "html-webpack-plugin": "^5.5.0",
"http-proxy-middleware": "^2.0.6", "http-proxy-middleware": "^2.0.6",
"jest": "^28.0.3", "jest": "^28.1.2",
"json-loader": "^0.5.7", "json-loader": "^0.5.7",
"node-sass": "7.0.1", "node-sass": "7.0.1",
"npm-check-updates": "^12.5.11", "npm-check-updates": "^15.0.3",
"optimize-css-assets-webpack-plugin": "^6.0.1", "optimize-css-assets-webpack-plugin": "^6.0.1",
"postcss": "^8.4.13", "postcss": "^8.4.14",
"postcss-loader": "^6.2.1", "postcss-loader": "^7.0.0",
"sass-loader": "^12.6.0", "sass-loader": "^13.0.2",
"strip-ansi": "=7.0.1", "strip-ansi": "=7.0.1",
"ts-jest": "^28.0.1", "ts-jest": "^28.0.5",
"ts-loader": "^9.3.0", "ts-loader": "^9.3.1",
"tslint": "^6.1.3", "tslint": "^6.1.3",
"tslint-config-standard": "^9.0.0", "tslint-config-standard": "^9.0.0",
"tslint-loader": "^3.5.4", "tslint-loader": "^3.5.4",
"typescript": "^4.6.4", "typescript": "^4.7.4",
"vue-cli-plugin-element-ui": "^1.1.4", "vue-cli-plugin-element-ui": "^1.1.4",
"vueify": "^9.4.1", "vueify": "^9.4.1",
"webpack": "^5.0.0", "webpack": "^5.0.0",

View File

@@ -300,13 +300,8 @@ module.exports = configure((ctx) => ({
type: 'image/png', type: 'image/png',
}, },
{ {
src: 'images/riso-android-icon-96x96.png', src: 'images/riso-android-icon-384x384.png',
sizes: '96x96', sizes: '384x384',
type: 'image/png',
},
{
src: 'images/riso-android-icon-144x144.png',
sizes: '144x144',
type: 'image/png', type: 'image/png',
}, },
{ {
@@ -315,8 +310,13 @@ module.exports = configure((ctx) => ({
type: 'image/png', type: 'image/png',
}, },
{ {
src: 'images/riso-android-icon-384x384.png', src: 'images/riso-android-icon-144x144.png',
sizes: '384x384', sizes: '144x144',
type: 'image/png',
},
{
src: 'images/riso-android-icon-96x96.png',
sizes: '96x96',
type: 'image/png', type: 'image/png',
}, },
], ],
@@ -353,7 +353,7 @@ module.exports = configure((ctx) => ({
builder: { builder: {
// https://www.electron.build/configuration/configuration // https://www.electron.build/configuration/configuration
appId: 'InsiemeSiPuo', appId: 'Riso',
}, },
// "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain // "chain" is a webpack-chain object https://github.com/neutrinojs/webpack-chain

View File

@@ -257,6 +257,7 @@ if (workbox) {
return fetch(args.event.request) return fetch(args.event.request)
.then((res) => caches.open('dynamic') .then((res) => caches.open('dynamic')
.then((cache) => { .then((cache) => {
console.log('cache', args.event.request.url)
cache.put(args.event.request.url, res.clone()) cache.put(args.event.request.url, res.clone())
return res return res
})) }))

View File

@@ -4,7 +4,7 @@ import { BannerCookies } from '@/components/BannerCookies'
import { useI18n } from '@src/boot/i18n' import { useI18n } from '@src/boot/i18n'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { Header } from '@/components/Header' import { MyHeader } from '@/components/MyHeader'
import { MyFooter } from '@/components/MyFooter' import { MyFooter } from '@/components/MyFooter'
import { CFirstPageApp } from '@/components/CFirstPageApp' import { CFirstPageApp } from '@/components/CFirstPageApp'
import { computed } from 'vue' import { computed } from 'vue'
@@ -13,7 +13,7 @@ import { tools } from '@store/Modules/tools'
export default { export default {
components: { components: {
appHeader: Header, appHeader: MyHeader,
appFooter: MyFooter, appFooter: MyFooter,
CFirstPageApp, CFirstPageApp,
CProvaPao, CProvaPao,

View File

@@ -280,10 +280,14 @@ export const shared_consts = {
}, },
{ {
value: 8, value: 8,
label: 'Giardino', label: 'Yurta',
}, },
{ {
value: 9, value: 9,
label: 'Giardino',
},
{
value: 10,
label: 'Aria aperta', label: 'Aria aperta',
}, },
], ],
@@ -426,6 +430,22 @@ export const shared_consts = {
value: 19, value: 19,
label: 'Adatto ai neonati (fino ai 2 anni)', label: 'Adatto ai neonati (fino ai 2 anni)',
}, },
{
value: 20,
label: 'Biancheria inclusa',
},
{
value: 21,
label: 'Biancheria su richiesta (a parte)',
},
{
value: 22,
label: 'Asciugamani',
},
{
value: 23,
label: 'Asciugacapelli',
},
], ],
Regions: [ Regions: [

View File

@@ -2,6 +2,7 @@ import {
defineComponent, onMounted, ref, defineComponent, onMounted, ref,
} from 'vue' } from 'vue'
import { useI18n } from '@src/boot/i18n' import { useI18n } from '@src/boot/i18n'
import { useQuasar } from 'quasar'
// PropType, // PropType,
@@ -18,6 +19,8 @@ export default defineComponent({
setup(props, context) { setup(props, context) {
const { t } = useI18n(); const { t } = useI18n();
const $q = useQuasar()
const elementId = ref<string>('id'); const elementId = ref<string>('id');
const disableDecline = ref<boolean>(true); const disableDecline = ref<boolean>(true);
const debug = ref<boolean>(false); const debug = ref<boolean>(false);
@@ -95,13 +98,33 @@ export default defineComponent({
} }
const decline = (): void => { const decline = (): void => {
if (!debug.value) {
setCookieStatus('decline')
}
status.value = 'decline' const mytitle = 'Cookies'
isOpen.value = false const mytext = t('reg.refuse_cookie')
context.emit('clicked-decline')
return $q.dialog({
message: mytext,
html: true,
ok: {
label: 'Rifiuta Cookies',
push: true,
},
title: mytitle,
cancel: true,
persistent: false,
}).onOk(() => {
if (!debug.value) {
setCookieStatus('decline')
}
status.value = 'decline'
isOpen.value = false
context.emit('clicked-decline')
}).onCancel(() => {
//
})
} }
const clickInfo = (): void => { const clickInfo = (): void => {

View File

@@ -1,27 +1,29 @@
<template> <template>
<div v-if="isOpen" class="tothebottomfixed" role="dialog"> <div v-if="isOpen" class="tothebottomfixed" role="dialog">
<div class="q-pa-md q-gutter-sm"> <div class="q-pa-md q-gutter-sm">
<transition appear name="slide-up" mode="out-in" :duration="2000"> <transition appear name="slide-up" mode="out-in" :duration="2000">
<q-banner class="bg-primary text-white" transition-show="jump-down"> <q-banner class="bg-primary text-white" transition-show="jump-down">
{{t('cookies')}} {{ t('cookies') }}
<template v-slot:action> <template v-slot:action>
<div class="row justify-center margin_buttons_cook q-gutter-lg text-center" > <div class="row justify-center margin_buttons_cook q-gutter-lg text-center">
<q-btn label="INFO" to="/policy"></q-btn> <q-btn label="INFO" to="/policy"></q-btn>
<q-btn <q-btn color="green" label="ACCETTA" @click="accept"></q-btn>
color="red" label="RIFIUTA" <q-btn
@click="decline"></q-btn> color="red" label="RIFIUTA"
<q-btn color="green" label="ACCETTA" @click="accept"></q-btn> @click="decline">
</div>
</template> </q-btn>
</q-banner> </div>
</transition> </template>
</div> </q-banner>
</transition>
</div> </div>
</div>
</template> </template>
<script lang="ts" src="./BannerCookies.ts"> <script lang="ts" src="./BannerCookies.ts">
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './BannerCookies.scss'; @import './BannerCookies.scss';
</style> </style>

View File

@@ -6,7 +6,7 @@ import { useQuasar } from 'quasar'
import { colors, Screen, Platform, date } from 'quasar' import { colors, Screen, Platform, date } from 'quasar'
import { EState, IBookedEvent, IBookedEventPage, IEvents, IMessage, IMessagePage, IParamDialog } from '@model' import { EState, IBookedEvent, IBookedEventPage, IEvents, IMessage, IMessagePage, IParamDialog } from '@model'
import { Logo } from '../logo' import { Logo } from '../logo'
import { Footer } from '../Footer' import { LandingFooter } from '../LandingFooter'
import { CTitle } from '../CTitle' import { CTitle } from '../CTitle'
import { CImgText } from '../CImgText' import { CImgText } from '../CImgText'
import { CMyEditor } from '../CMyEditor' import { CMyEditor } from '../CMyEditor'
@@ -44,7 +44,7 @@ export default defineComponent({
}, },
components: { components: {
Logo, Logo,
Footer, LandingFooter,
CTitle, CTitle,
CImgText, CImgText,
CMySelect, CMySelect,

View File

@@ -4,12 +4,12 @@ import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useI18n } from '@/boot/i18n' import { useI18n } from '@/boot/i18n'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
import { Footer, Logo } from '@components' import { LandingFooter, Logo } from '@components'
export default defineComponent({ export default defineComponent({
name: 'CFundRaising', name: 'CFundRaising',
components: {Logo, Footer}, components: {Logo, LandingFooter},
props: {}, props: {},
setup() { setup() {
const { t } = useI18n(); const { t } = useI18n();

View File

@@ -13,7 +13,7 @@
</div> </div>
</section> </section>
<Footer></Footer> <LandingFooter></LandingFooter>
</div> </div>
</q-page> </q-page>
</template> </template>

View File

@@ -36,6 +36,7 @@ import translate from '@/globalroutines/util'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
import { CMyCardPopup } from '@/components/CMyCardPopup' import { CMyCardPopup } from '@/components/CMyCardPopup'
import { CMyCardGrpPopup } from '@/components/CMyCardGrpPopup' import { CMyCardGrpPopup } from '@/components/CMyCardGrpPopup'
import { useRouter } from 'vue-router'
export default defineComponent({ export default defineComponent({
name: 'CGridTableRec', name: 'CGridTableRec',
@@ -248,6 +249,8 @@ export default defineComponent({
const startsearch = ref(false) const startsearch = ref(false)
const $router = useRouter()
const serverData: any = ref([]) const serverData: any = ref([])
const spinner_visible = ref(false) const spinner_visible = ref(false)
const searchList = ref(<ISearchList[]>[]) const searchList = ref(<ISearchList[]>[])
@@ -311,6 +314,16 @@ export default defineComponent({
refresh() refresh()
}) })
$router.beforeResolve((to: any) => {
// console.log('beforeResolve', visupagedialog.value, 'to', to)
if (visupagedialog.value && !to.meta.newpage) {
visupagedialog.value = false
return false
}
})
function setCategBySector(tablecat: string, tabsector: string, newval: any) { function setCategBySector(tablecat: string, tabsector: string, newval: any) {
const recSector = searchList.value.find((rec) => rec.table === tabsector) const recSector = searchList.value.find((rec) => rec.table === tabsector)
@@ -1418,44 +1431,70 @@ export default defineComponent({
} }
} }
function enableSaveNewRec() { function enableSaveNewRec(newrec: boolean) {
let ok = true let ok = true
const showmsg = true
let myrec = recModif.value
if (newrec) {
myrec = newRecord.value
}
//mycolumns.value.forEach((col: IColGridTable) => { //mycolumns.value.forEach((col: IColGridTable) => {
let col: IColGridTable let col: IColGridTable
let msg = ''
for (col of mycolumns.value) { for (col of mycolumns.value) {
if (col.required) { if (!msg) {
// console.log('newRecord.value', newRecord.value, newRecord.value[col.name]) if (col.required) {
if (tools.isArray(newRecord.value[col.name])) { // console.log('newRecord.value', newRecord.value, newRecord.value[col.name])
if (newRecord.value[col.name].length <= 0) { if (tools.isArray(myrec[col.name])) {
return false if (myrec[col.name].length <= 0) {
msg = 'Si prega di compilare il campo \'' + getColMissing(myrec) + '\''
}
} else {
if (!myrec[col.name]) {
msg = 'Si prega di compilare il campo \'' + getColMissing(myrec) + '\''
}
} }
} else { }
if (!newRecord.value[col.name]) { if (!msg && col.maxlength! > 0) {
return false if (myrec[col.name].length > col.maxlength!) {
msg = t('annunci.maxlength', { name: translate(col.label_trans), maxlength: col.maxlength })
}
}
if (!msg && col.minlength! > 0) {
if (myrec[col.name].length < col.minlength!) {
msg = t('annunci.minlength', { name: translate(col.label_trans), minlength: col.minlength })
} }
} }
} }
} }
if (showmsg && msg) {
tools.showNegativeNotif($q, msg, 5000)
return false
}
return ok return ok
} }
function getColMissing() { function getColMissing(myrec: any) {
let col: IColGridTable let col: IColGridTable
for (col of mycolumns.value) { for (col of mycolumns.value) {
if (col.required) { if (col.required) {
// console.log('newRecord.value', newRecord.value, newRecord.value[col.name]) // console.log('newRecord.value', newRecord.value, newRecord.value[col.name])
if (tools.isArray(newRecord.value[col.name])) { if (tools.isArray(myrec[col.name])) {
if (newRecord.value[col.name].length <= 0) { if (myrec[col.name].length <= 0) {
return translate(col.label_trans) return translate(col.label_trans)
} }
} else { } else {
if (!newRecord.value[col.name]) { if (!myrec[col.name]) {
// console.log('col.name', col.name) // console.log('col.name', col.name)
return translate(col.label_trans) return translate(col.label_trans)
} }
@@ -1469,9 +1508,7 @@ export default defineComponent({
async function saveNewRecord() { async function saveNewRecord() {
// check if the field are setted // check if the field are setted
if (!enableSaveNewRec()) { if (!enableSaveNewRec(true)) {
tools.showNeutralNotif($q, 'Si prega di compilare il campo \'' + getColMissing() + '\'', 5000)
return false return false
} }
@@ -1548,6 +1585,11 @@ export default defineComponent({
data: {} data: {}
} }
if (!enableSaveNewRec(false)) {
return false
}
mydata.data = recModif.value mydata.data = recModif.value
const oldrec = serverData.value.find((rec: IMySkill) => rec._id === recModif.value._id) const oldrec = serverData.value.find((rec: IMySkill) => rec._id === recModif.value._id)

View File

View File

@@ -0,0 +1,55 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { useGlobalStore } from '@store/globalStore'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { tools } from '@store/Modules/tools'
import { costanti } from '@costanti'
import { CDateTime } from '@/components/CDateTime'
export default defineComponent({
name: 'CKeyAndValue',
props: {
mykey: {
type: String,
required: true,
},
myvalue: {
type: String,
required: false,
default: '',
},
mydate: {
type: Date,
required: false,
default: null,
},
color: {
type: String,
required: false,
default: '',
},
},
components: { CDateTime },
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const globalStore = useGlobalStore()
function mounted() {
//
}
onMounted(mounted)
return {
tools,
costanti,
fieldsTable,
globalStore,
}
},
})

View File

@@ -0,0 +1,38 @@
<template>
<div class="text-center">
<div class="row items-center justify-center q-gutter-md q-ma-xs">
<div class="q-ma-xs">
<q-field rounded outlined bg-color="blue-1" dense style="min-width:110px;">
<template v-slot:control>
<div class="centermydiv">
<div class="self-center full-width no-outline text-center" tabindex="0">{{ mykey }}</div>
</div>
</template>
</q-field>
</div>
<div :class="` q-ma-sm q-pa-sm col-grow `">
<span :style="color ? `background-color: ${color} !important; color: white;` : ``">
<span v-if="mydate">
<CDateTime
v-model:value="mydate"
:canEdit="false">
</CDateTime>
</span>
<span v-else>
{{myvalue}}
</span>
</span>
</div>
</div>
</div>
</template>
<script lang="ts" src="./CKeyAndValue.ts">
</script>
<style lang="scss" scoped>
@import './CKeyAndValue.scss';
</style>

View File

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

View File

@@ -36,6 +36,11 @@ export default defineComponent({
required: false, required: false,
default: 0, default: 0,
}, },
minlength: {
type: Number,
required: false,
default: 0,
},
mysubsubkey: { mysubsubkey: {
type: String, type: String,
required: false, required: false,
@@ -114,7 +119,7 @@ export default defineComponent({
const { t } = useI18n() const { t } = useI18n()
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const col = ref(<IColGridTable> { name: 'test', fieldtype: 0, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView, visible: true, maxlength: props.maxlength }) const col = ref(<IColGridTable> { name: 'test', fieldtype: 0, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView, visible: true, maxlength: props.maxlength, minlength: props.minlength })
const row = ref({}) const row = ref({})
const { setValDb, getValDb } = MixinBase() const { setValDb, getValDb } = MixinBase()

View File

@@ -4,14 +4,14 @@ import {
import { IMyPage } from '@src/model' import { IMyPage } from '@src/model'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { CImgTitle } from '../CImgTitle/index' import { CImgTitle } from '../CImgTitle/index'
import { CTitle } from '../CTitle/index' import { CTitle } from '../CTitle/index'
export default defineComponent({ export default defineComponent({
name: 'CMyPage', name: 'CMyPage',
components: { Footer, CImgTitle, CTitle }, components: { LandingFooter, CImgTitle, CTitle },
props: { props: {
title: String, title: String,
mypath: { mypath: {

View File

@@ -41,7 +41,7 @@
</div> </div>
<slot></slot> <slot></slot>
<div v-if="!nofooter"> <div v-if="!nofooter">
<Footer></Footer> <LandingFooter></LandingFooter>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -196,7 +196,8 @@ export default defineComponent({
fieldtype: 0, fieldtype: 0,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView,
visible: true, visible: true,
maxlength: props.mycol ? props.mycol.maxlength : 0 maxlength: props.mycol ? props.mycol.maxlength : 0,
minlength: props.mycol ? props.mycol.minlength : undefined
}) })
const { setValDb, getValDb } = MixinBase() const { setValDb, getValDb } = MixinBase()

View File

@@ -44,7 +44,7 @@
color="white" text-color="blue" color="white" text-color="blue"
:icon="col.icon ? col.icon : `fas fa-globe`" :icon="col.icon ? col.icon : `fas fa-globe`"
:href="tools.getlinkstd(myvalue)" :href="tools.getlinkstd(myvalue)"
:label="myvalue" :label="tools.firstchars(myvalue, 40)"
target="_blank" target="_blank"
> >
</q-btn> </q-btn>
@@ -613,6 +613,7 @@
counter counter
:type="col.fieldtype === costanti.FieldType.crypted ? 'password' : 'text'" :type="col.fieldtype === costanti.FieldType.crypted ? 'password' : 'text'"
:maxlength="col.maxlength ? col.maxlength : undefined" :maxlength="col.maxlength ? col.maxlength : undefined"
:minlength="col.minlength ? col.minlength : undefined"
v-model="scope.value" v-model="scope.value"
:autogrow="col.fieldtype !== costanti.FieldType.crypted" :autogrow="col.fieldtype !== costanti.FieldType.crypted"
@keyup.enter.stop @keyup.enter.stop
@@ -841,6 +842,7 @@
<q-input <q-input
v-model="scope.value" v-model="scope.value"
:maxlength="col.maxlength ? col.maxlength : undefined" :maxlength="col.maxlength ? col.maxlength : undefined"
:minlength="col.minlength ? col.minlength : undefined"
type="password" type="password"
@keyup.enter="scope.set" @keyup.enter="scope.set"
autofocus> autofocus>

View File

@@ -43,6 +43,7 @@ export default defineComponent({
mounted() mounted()
}) })
function mounted() { function mounted() {
if (props.prop_myrec) { if (props.prop_myrec) {
myrec.value = props.prop_myrec myrec.value = props.prop_myrec
@@ -73,6 +74,14 @@ export default defineComponent({
emit('cmdext', cmd, val1, val2) emit('cmdext', cmd, val1, val2)
} }
function navigaExt(obj: any) {
cmdExt(costanti.CMD_SHOW_PAGE, obj, null)
//let link = tools.getDirectoryByTable(props.table) + '/' + obj._id
//console.log('link', link)
//$router.push(link)
}
onMounted(mounted) onMounted(mounted)
return { return {
@@ -81,6 +90,7 @@ export default defineComponent({
costanti, costanti,
getImgUser, getImgUser,
naviga, naviga,
navigaExt,
setCmd, setCmd,
shared_consts, shared_consts,
userStore, userStore,

View File

@@ -29,7 +29,7 @@
</q-avatar> </q-avatar>
</q-item-section> </q-item-section>
<q-item-section @click="cmdExt(costanti.CMD_SHOW_PAGE, myrec)"> <q-item-section @click="navigaExt(myrec)">
<q-item-label class="full-width"> <q-item-label class="full-width">
<span v-for="(rec, ind) of myrec.recSkill" :key="ind"> <q-chip <span v-for="(rec, ind) of myrec.recSkill" :key="ind"> <q-chip
dense dense

View File

@@ -2,7 +2,7 @@ import { defineComponent, PropType, ref } from 'vue'
import { Logo } from '../../components/logo/index' import { Logo } from '../../components/logo/index'
import { Footer } from '../../components/Footer/index' import { LandingFooter } from '../../components/LandingFooter/index'
import { tools } from '../../store/Modules/tools' import { tools } from '../../store/Modules/tools'
import { static_data } from '@src/db/static_data' import { static_data } from '@src/db/static_data'
@@ -14,7 +14,7 @@ import MixinEvents from '@/mixins/mixin-events'
export default defineComponent({ export default defineComponent({
name: 'CMySingleEvent', name: 'CMySingleEvent',
components: { Logo, Footer, CImgText, CCard, CMyPage, CMyAvatar, CMyTeacher }, components: { Logo, LandingFooter, CImgText, CCard, CMyPage, CMyAvatar, CMyTeacher },
props: { props: {
myevent: { myevent: {
type: Object as PropType<IEvents>, type: Object as PropType<IEvents>,

View File

@@ -2,7 +2,7 @@ import { defineComponent, onBeforeUnmount, onMounted, ref } from 'vue'
import { Logo } from '../../components/logo' import { Logo } from '../../components/logo'
import { Footer } from '../../components/Footer' import { LandingFooter } from '../../components/LandingFooter'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { CImgTitle } from '../../components/CImgTitle/index' import { CImgTitle } from '../../components/CImgTitle/index'
@@ -17,7 +17,7 @@ import { IColl } from 'model'
export default defineComponent({ export default defineComponent({
name: 'PhotosGallery', name: 'PhotosGallery',
components: { Logo, Footer, CImgTitle }, components: { Logo, LandingFooter, CImgTitle },
props: { props: {
mygallery: { mygallery: {
type: Array, type: Array,

View File

@@ -4,12 +4,12 @@ import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useI18n } from '@/boot/i18n' import { useI18n } from '@/boot/i18n'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
import { Footer, Logo } from '@components' import { LandingFooter, Logo } from '@components'
export default defineComponent({ export default defineComponent({
name: 'CPresentazione', name: 'CPresentazione',
components: {Logo, Footer}, components: {Logo, LandingFooter},
props: {}, props: {},
setup() { setup() {
const { t } = useI18n(); const { t } = useI18n();

View File

@@ -299,11 +299,11 @@
<p class="feat-descr" v-html="t('homepage.freecollabora.descr')"></p></div> <p class="feat-descr" v-html="t('homepage.freecollabora.descr')"></p></div>
</div> </div>
<div class="col-12 col-sm-5"> <div class="col-12 col-sm-5">
<div class="feature-item"><i
aria-hidden="true" <div class="feature-item" style="margin-top: 0px !important;">
class="q-icon fas fa-hands-helping"> </i><h4> <div class="text-big" style="margin: 0px !important; padding: 2px !important;" v-html="t('homepage.freesostieni.title')"></div>
{{ t('homepage.freesostieni.title') }}</h4> <p class="feat-descr" v-html="t('homepage.freesostieni.descr')"></p>
<p class="feat-descr" v-html="t('homepage.freesostieni.descr')"></p></div> </div>
</div> </div>
<div class="col-12 col-sm-5"> <div class="col-12 col-sm-5">
<div class="feature-item"><i <div class="feature-item"><i
@@ -329,7 +329,7 @@
</div> </div>
</section> </section>
<Footer></Footer> <LandingFooter></LandingFooter>
</div> </div>
</q-page> </q-page>
</template> </template>

View File

@@ -97,10 +97,10 @@ export default defineComponent({
userStore.signin($router, signin.value) userStore.signin($router, signin.value)
.then((riscode: number) => { .then((riscode: number) => {
console.log('signin FINITO CALL: riscode=', riscode)
if ($q.screen.lt.sm) { if ($q.screen.lt.sm) {
globalStore.setleftDrawerOpen(false) globalStore.setleftDrawerOpen(false)
} }
console.log('signin FINITO CALL: riscode=', riscode)
if (riscode === tools.OK) { if (riscode === tools.OK) {
if (userStore.isLogged) { if (userStore.isLogged) {
globalStore.rightDrawerOpen = false globalStore.rightDrawerOpen = false
@@ -133,7 +133,7 @@ export default defineComponent({
}) })
.catch((err: any) => { .catch((err: any) => {
// console.log('ERROR SIGNIN = ' + error) console.log('ERROR SIGNIN = ' + err)
emit('checkErrors', err) emit('checkErrors', err)
}) })

View File

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

View File

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

View File

@@ -16,7 +16,7 @@ import { CFacebookFrame } from '@/components/CFacebookFrame'
import MixinBase from '../../mixins/mixin-base' import MixinBase from '../../mixins/mixin-base'
export default defineComponent({ export default defineComponent({
name: 'Footer', name: 'LandingFooter',
components: { Logo, FormNewsletter, CFacebookFrame }, components: { Logo, FormNewsletter, CFacebookFrame },
setup() { setup() {
@@ -25,7 +25,7 @@ export default defineComponent({
const { getarrValDb, getValDb } = MixinBase() const { getarrValDb, getValDb } = MixinBase()
console.log('Footer - INIT') console.log('LandingFooter - INIT')
function TelegramSupport() { function TelegramSupport() {
return globalStore.getValueSettingsByKey('TELEGRAM_SUPPORT', false) return globalStore.getValueSettingsByKey('TELEGRAM_SUPPORT', false)

View File

@@ -169,9 +169,9 @@ class="footer_link" @click="navigate" @keypress.enter="navigate"
</div> </div>
</template> </template>
<script lang="ts" src="./Footer.ts"> <script lang="ts" src="./LandingFooter.ts">
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './Footer.scss'; @import './LandingFooter.scss';
</style> </style>

View File

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

View File

@@ -11,6 +11,7 @@ import { boot } from 'quasar/wrappers'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { static_data } from '@/db/static_data' import { static_data } from '@/db/static_data'
import messagePopover from '../../layouts/toolbar/messagePopover/messagePopover.vue' import messagePopover from '../../layouts/toolbar/messagePopover/messagePopover.vue'
import notifPopover from '../../layouts/toolbar/notifPopover/notifPopover.vue'
import drawer from '../../layouts/drawer/drawer.vue' import drawer from '../../layouts/drawer/drawer.vue'
import { CMyAvatar } from '@/components/CMyAvatar' import { CMyAvatar } from '@/components/CMyAvatar'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
@@ -22,9 +23,9 @@ import MixinUsers from '../../mixins/mixin-users'
import { CMyCart, CSigninNoreg } from '@/components' import { CMyCart, CSigninNoreg } from '@/components'
export default defineComponent({ export default defineComponent({
name: 'Header', name: 'MyHeader',
components: { components: {
drawer, messagePopover, CMyAvatar, CSigninNoreg, CMyCart drawer, messagePopover, CMyAvatar, CSigninNoreg, CMyCart, notifPopover
}, },
props: { props: {
extraContent: { extraContent: {
@@ -344,7 +345,7 @@ export default defineComponent({
} }
function getappname() { function getappname() {
return tools.getappname(tools.isMobile()) + ' ' + getAppVersion() return tools.getappname(tools.isMobile())
} }

View File

@@ -91,6 +91,9 @@
<div v-if="static_data.functionality.SHOW_MESSAGES"> <div v-if="static_data.functionality.SHOW_MESSAGES">
<message-popover></message-popover> <message-popover></message-popover>
</div> </div>
<div v-if="static_data.functionality.SHOW_NOTIF">
<notif-popover></notif-popover>
</div>
<!-- <!--
<div class="right-itens"> <div class="right-itens">
@@ -240,9 +243,9 @@
</div> </div>
</template> </template>
<script lang="ts" src="./Header.ts"> <script lang="ts" src="./MyHeader.ts">
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './Header.scss'; @import './MyHeader.scss';
</style> </style>

View File

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

View File

@@ -1,5 +1,5 @@
import { defineComponent } from 'vue' import { defineComponent } from 'vue'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
export default defineComponent({ export default defineComponent({
@@ -14,7 +14,7 @@ export default defineComponent({
lastdataupdate: [String], lastdataupdate: [String],
country: [String], country: [String],
}, },
components: { Footer }, components: { LandingFooter },
setup(props, { emit }) { setup(props, { emit }) {
return { return {

View File

@@ -26,11 +26,11 @@ export * from './CSignUp'
export * from './CSingleCart' export * from './CSingleCart'
export * from './CTitle' export * from './CTitle'
export * from './CTitleBanner' export * from './CTitleBanner'
export * from './Footer' export * from './LandingFooter'
export * from './FormNewsletter' export * from './FormNewsletter'
export * from './CLineChart' export * from './CLineChart'
export * from './CStatusReg' export * from './CStatusReg'
export * from './Header' export * from './MyHeader'
export * from './logo' export * from './logo'
export * from './testpao' export * from './testpao'
export * from './CEventsCalendar' export * from './CEventsCalendar'
@@ -54,4 +54,5 @@ export * from './CAccomodation'
export * from './COpenStreetMap' export * from './COpenStreetMap'
export * from './COperators' export * from './COperators'
export * from './CFundRaising' export * from './CFundRaising'
export * from './CKeyAndValue'
// export * from './CPreloadImages' // export * from './CPreloadImages'

View File

@@ -50,7 +50,7 @@ ol li::before {
} }
li { li {
color: #2f2c8b; /*color: #2f2c8b;*/
font-size: 18px; font-size: 18px;
@media (max-width: 600px) { @media (max-width: 600px) {
font-size: 1rem; font-size: 1rem;

View File

@@ -206,8 +206,8 @@ const msg_website_it = {
+ '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>' + '<li>📱<strong>Condividendo la APP</strong> a tutti coloro che vogliono far parte insieme della crescita e sviluppo di una Nuova Era</li>'
+ '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>' + '<li>👥 Aiutando a creare Gruppi Territoriali nella vostra città, impegnandosi a realizzare progetti per il Bene Comune, in onore ai principi Amorevoli e di condivisione.</li>'
+ '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>' + '<li>🌱 Sostenendo le persone attorno a voi, e rispettando la nostra vera Casa: Madre Natura e Tutti gli Esseri Viventi. ❤️</li>'
+ '<li>👨🏻‍💻 Con una <strong>piccola donazione</strong> per le spese dei Server</li></ul>' + + '<li>👨🏻‍💻 Con una <strong>piccola donazione</strong> per le spese dei Server, manutenzione e per i continui sviluppi e miglioramenti</li></ul>' +
'<strong>Tramite Paypal:</strong><br>' + '1) Tramite <strong>Paypal</strong>:<br>' +
'<div style="font-size: 1.5rem; background-color: white; color: blue; border: solid 2px #f00; margin: 10px; padding: 10px; border-radius: 10px; " ' + '<div style="font-size: 1.5rem; background-color: white; color: blue; border: solid 2px #f00; margin: 10px; padding: 10px; border-radius: 10px; " ' +
'class="row justify-around">' + 'class="row justify-around">' +
'<span><a href="https://paypal.me/paoloarena/1" target="_blank">1€</a></span>' + '<span><a href="https://paypal.me/paoloarena/1" target="_blank">1€</a></span>' +
@@ -216,9 +216,14 @@ const msg_website_it = {
'<span><a href="https://paypal.me/paoloarena/10" target="_blank">10€</a></span>' + '<span><a href="https://paypal.me/paoloarena/10" target="_blank">10€</a></span>' +
'<span><a href="https://paypal.me/paoloarena" target="_blank">scegli</a></span>' + '<span><a href="https://paypal.me/paoloarena" target="_blank">scegli</a></span>' +
'</div><em>clicca sull\'importo per fare una <strong>donazione</strong> </em><br>' + '</div><em>clicca sull\'importo per fare una <strong>donazione</strong> </em><br>' +
'In alternativa inventati una forma di scambio da donare a Paolo (soprannome <a href="https://t.me/surya1977" target="_blank">Surya</a>)<br />' + '<br>2) Tramite <strong>Bonifico Bancario</strong>:<br>' +
'Intestato a Paolo Arena<br>' +
'IBAN: IT76O0347501605CC0010311400<br>' +
'Causale: "donazione riso.app"<br><br>' +
'' +
'3) In alternativa scegli tu una forma di scambio da donare a Paolo (per scrivergli su Telegram: <a href="https://t.me/surya1977" target="_blank">Surya Paolo</a>)<br />' +
'<span style="color: red; font-size: 2rem;">❤</span> Sono graditi messaggi sia di suggerimenti che di apprezzamenti.<br>' + '<span style="color: red; font-size: 2rem;">❤</span> Sono graditi messaggi sia di suggerimenti che di apprezzamenti.<br>' +
'Grazie Mille per l\'Aiuto' + 'Grazie Mille per l\'Aiuto ed il Supporto' +
'<br>', '<br>',
}, },
multiplatform: { multiplatform: {

View File

@@ -19,6 +19,7 @@ const functionality: IFunctionality = {
ENABLE_PROJECTS_LOADING: false, ENABLE_PROJECTS_LOADING: false,
SHOW_IF_IS_SERVER_CONNECTION: false, SHOW_IF_IS_SERVER_CONNECTION: false,
SHOW_MESSAGES: false, SHOW_MESSAGES: false,
SHOW_NOTIF: true,
BOOKING_EVENTS: true, BOOKING_EVENTS: true,
ENABLE_ECOMMERCE: false, ENABLE_ECOMMERCE: false,
ENABLE_REG_ISP: true, ENABLE_REG_ISP: true,
@@ -252,6 +253,20 @@ const routes_manager: IListRoutes[] = [
onlyManager: true, onlyManager: true,
onlyTutor: true onlyTutor: true
}, },
{
active: true,
order: 10,
path: '/admin/userpanel',
materialIcon: 'fas fa-users',
name: 'otherpages.admin.userpanel',
component: () => import('@/rootgen/admin/userPanel/userPanel.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyTutor: true
},
/* /*
{ {
active: true, active: true,
@@ -580,7 +595,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'proj.group2', name: 'proj.group2',
component: () => import('@/views/user/mygroup/mygroup.vue'), component: () => import('@/views/user/mygroup/mygroup.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -591,7 +606,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: 'fas fa-user', materialIcon: 'fas fa-user',
name: 'pages.mypage2', name: 'pages.mypage2',
component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'), component: () => import('@/views/user/mypagebacheca/mypagebacheca.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -602,7 +617,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: '', materialIcon: '',
name: 'pages.myservice2', name: 'pages.myservice2',
component: () => import('@/views/user/myservice/myservice.vue'), component: () => import('@/views/user/myservice/myservice.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -613,7 +628,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: '', materialIcon: '',
name: 'pages.myhosps2', name: 'pages.myhosps2',
component: () => import('@/views/user/mypagehosp/mypagehosp.vue'), component: () => import('@/views/user/mypagehosp/mypagehosp.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
@@ -624,7 +639,7 @@ const baseroutes: IListRoutes[] = [
materialIcon: '', materialIcon: '',
name: 'pages.mygood2', name: 'pages.mygood2',
component: () => import('@/views/user/mypagegood/mypagegood.vue'), component: () => import('@/views/user/mypagegood/mypagegood.vue'),
meta: { requiresAuth: true }, meta: { requiresAuth: true, newpage: true },
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },

View File

@@ -17,10 +17,14 @@ export default defineComponent({
setup(props) { setup(props) {
const $router = useRouter() const $router = useRouter()
const { getNumMsgUnread, getNumMsg, getUsernameChatByMsg, getImgByMsg, getNumNotifUnread } = MixinUsers()
// function lasts_messages (state: IUserState) => IMessage[] { // function lasts_messages (state: IUserState) => IMessage[] {
// //
// } // }
function lasts_messages() { function lasts_messages() {
// ++Todo: lasts_messages // ++Todo: lasts_messages
return [] return []
@@ -30,10 +34,6 @@ export default defineComponent({
// $router.replace(`/messages/${ msg.dest.username}`) // $router.replace(`/messages/${ msg.dest.username}`)
} }
function getNumNotifUnread() {
return 0
}
function randomDate(): Date { function randomDate(): Date {
const myval = Math.floor(Math.random() * 10000000000) const myval = Math.floor(Math.random() * 10000000000)
return tools.getstrDateTime(new Date(tools.getTimestampsNow() - myval)) return tools.getstrDateTime(new Date(tools.getTimestampsNow() - myval))
@@ -69,6 +69,12 @@ export default defineComponent({
return { return {
lasts_messages, lasts_messages,
clickChat, clickChat,
getNumMsgUnread,
getNumMsg,
getUsernameChatByMsg,
getImgByMsg,
getNumNotifUnread,
tools,
} }
}, },
}) })

View File

@@ -1,16 +1,16 @@
<template> <template>
<div> <div>
<q-btn flat round dense icon="fas fa-comment" class="q-mx-xs" > <q-btn flat round dense icon="fas fa-comment" class="q-mx-xs">
<q-badge v-if="getNumMsgUnread > 0" floating color="red">{{getNumMsgUnread}}</q-badge> <q-badge v-if="getNumMsgUnread() > 0" floating color="red">{{getNumMsgUnread()}}</q-badge>
<q-menu self="top right"> <q-menu self="top right">
<q-list bordered class="rounded-borders" style="max-width: 350px; min-width: 250px;"> <q-list bordered class="rounded-borders" style="max-width: 350px; min-width: 250px;">
<q-item-label header>{{t('msgs.messages')}}</q-item-label> <q-item-label header>{{$t('msgs.messages')}}</q-item-label>
<q-separator/> <q-separator/>
<div v-if="getNumMsg === 0"> <div v-if="getNumMsg() === 0">
<q-item> <q-item>
{{t('msgs.nomessage')}} {{$t('msgs.nomessage')}}
</q-item> </q-item>
</div> </div>
@@ -39,8 +39,8 @@
</q-list> </q-list>
</q-menu> </q-menu>
</q-btn> </q-btn>
<q-btn v-if="false" flat round dense icon="fas fa-bell"> <q-btn v-if="false" flat round dense icon="fas fa-comment">
<q-badge v-if="getNumNotifUnread > 0" floating color="red">{{getNumNotifUnread}}</q-badge> <q-badge v-if="getNumNotifUnread() > 0" floating color="red">{{getNumNotifUnread()}}</q-badge>
</q-btn> </q-btn>
</div> </div>
</template> </template>

View File

@@ -0,0 +1,17 @@
.list {
max-width: 400px;
}
.item > img.item-primary:not(.thumbnail) {
border-radius: 10px !important;
}
.item > img.item-primary {
width: 48px;
height: 46px;
}
.item > .item-secondary {
width: 57px;
font-size: 13px;
}

View File

@@ -0,0 +1,107 @@
import { computed, defineComponent, ref } from 'vue'
import {
IChat,
IMessage, IMsgUsers, INotif,
} from '@model'
import './notifPopover.scss'
import { tools } from '@src/store/Modules/tools'
import { useRouter } from 'vue-router'
import MixinUsers from '../../../mixins/mixin-users'
import { useNotifStore } from '@store/NotifStore'
import { useUserStore } from '@store/UserStore'
const namespace = 'notifModule'
export default defineComponent({
name: 'notifPopover',
setup(props) {
const $router = useRouter()
const userStore = useUserStore()
const notifStore = useNotifStore()
const loading = ref(false)
const lasts_notifs = computed(() => notifStore.getlasts_notifs)
const notifsel = ref(<INotif>{
dest: '',
datenotif: new Date()
})
const { getNumNotifUnread, getNumNotif, getUsernameChatByNotif, getImgByNotif, getNotifText } = MixinUsers()
// function lasts_notifs (state: IUserState) => IMessage[] {
//
// }
function clickChat(msg: IMessage) {
// $router.replace(`/notifs/${ msg.dest.username}`)
}
function getlastnotif(username: string): any {
// Get msg for this chat
if (notifStore.last_notifs)
return notifStore.last_notifs.find((rec: INotif) => rec.dest === username)
// return users_msg_saved[username]
}
function getlastdataread(username: string): any {
// Get msg for this
let myrec = getlastnotif(username)
const lastdata: any = (myrec) ? myrec.lastdataread : tools.getLastDateReadReset()
let mydate = ''
if (!tools.isIsoDate(lastdata))
mydate = lastdata.toISOString()
else
return lastdata
// console.log('getlastdataread', mydate)
return mydate
}
function refreshdata(username: string) {
loading.value = true
notifsel.value.dest = ''
return notifStore.updateNotifDataFromServer({
username,
lastdataread: getlastdataread(username)
}).then((ris) => {
notifsel.value.dest = username
loading.value = false
const element = document.getElementById('last')
tools.scrollToElement(element)
// changemsgs('', '')
}).catch((err) => {
loading.value = false
})
}
function mounted() {
refreshdata(userStore.my.username)
}
return {
lasts_notifs,
clickChat,
getNumNotifUnread,
getNumNotif,
getUsernameChatByNotif,
getImgByNotif,
getNotifText,
tools,
}
},
})

View File

@@ -0,0 +1,67 @@
<template>
<div>
<q-btn flat round dense icon="fas fa-bell" class="q-mx-xs">
<q-badge v-if="getNumNotifUnread() > 0" floating color="red">{{ getNumNotifUnread() }}</q-badge>
<q-menu anchor="bottom right" self="top right">
<q-bar class="bg-primary text-white">
{{ $t('notifs.notifs') }}
<q-space/>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-bar>
<div>
Imposta notifiche:<br>
<q-toggle dark v-model="notifs[0]" :label="$t('notifs.warn_province')"/>
</div>
<q-list bordered class="rounded-borders" style="max-width: 350px; min-width: 250px;">
<q-separator/>
<div v-if="getNumNotif() === 0">
<q-item>
{{ $t('notifs.nonotif') }}
</q-item>
</div>
<q-item clickable v-ripple v-for="(notif, index) in lasts_notifs()" :key="index" @click="clickChat(notif)">
<q-item-section avatar>
<q-avatar>
<q-item-label lines="1">{{ getTypeNotif(notif) }}</q-item-label>
</q-avatar>
</q-item-section>
<!--<q-item-section avatar>
<q-avatar>
<img :src="getImgByNotif(notif)" :alt="getUsernameChatByNotif(notif)">
</q-avatar>
</q-item-section>-->
<q-item-section>
<q-item-label lines="1">{{ getUsernameChatByNotif(notif) }}</q-item-label>
<q-item-label caption lines="2">
{{ getNotifText(notif, false) }}
</q-item-label>
</q-item-section>
<q-item-section side top>
{{ tools.getstrDateTimeShort(notif.datenotif) }}
</q-item-section>
</q-item>
<q-separator/>
</q-list>
</q-menu>
</q-btn>
<q-btn v-if="false" flat round dense icon="fas fa-bell">
<q-badge v-if="getNumNotifUnread() > 0" floating color="red">{{ getNumNotifUnread() }}</q-badge>
</q-btn>
</div>
</template>
<script lang="ts" src="./notifPopover.ts">
</script>

View File

@@ -1,4 +1,4 @@
import { IMessage } from '@src/model' import { IMessage, INotif } from '@src/model'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useProducts } from '@store/Products' import { useProducts } from '@store/Products'
@@ -155,6 +155,60 @@ export default function () {
return ris return ris
} }
function getNotifText(notif: INotif) {
return notif.descr
}
function getNumNotif() {
// ++Todo: conv
/*
return NotifStore.getlasts_messages().length
*/
return 0
}
function getNumNotifUnread() {
// return userStore.getlasts_messages().length
// ++Todo: conv
// return NotifStore.getnumMsgUnread()
return 0
}
function getUsernameChatByNotif(msg: INotif) {
if (msg) {
if (msg.dest) {
return msg.dest
}
} else {
return ''
}
return ''
}
function getTypeNotif(msg: INotif) {
if (msg) {
if (msg.type) {
return msg.type
}
} else {
return ''
}
return ''
}
function getImgByNotif(msg: INotif) {
const userStore = useUserStore()
//++Todo: Notif
return ''
// @ts-ignore
// return `${userStore.getImgByUsername(this.getUsernameChatByMsg(msg))}`
}
return { return {
getUsernameChatByMsg, getUsernameChatByMsg,
getMyUsername, getMyUsername,
@@ -177,5 +231,11 @@ export default function () {
getMsgText, getMsgText,
paotest, paotest,
getRefLink, getRefLink,
getNumNotifUnread,
getNumNotif,
getUsernameChatByNotif,
getTypeNotif,
getImgByNotif,
getNotifText,
} }
} }

View File

@@ -490,6 +490,7 @@ export interface IFunctionality {
SHOW_NEWSLETTER?: boolean SHOW_NEWSLETTER?: boolean
SHOW_ONLY_POLICY?: boolean SHOW_ONLY_POLICY?: boolean
SHOW_MESSAGES?: boolean SHOW_MESSAGES?: boolean
SHOW_NOTIF?: boolean
BOOKING_EVENTS?: boolean BOOKING_EVENTS?: boolean
ENABLE_REG_AYNI?: boolean ENABLE_REG_AYNI?: boolean
ENABLE_REG_CNM?: boolean ENABLE_REG_CNM?: boolean
@@ -575,6 +576,7 @@ export interface IColGridTable {
isadvanced_field?: boolean isadvanced_field?: boolean
showWhen?: number showWhen?: number
maxlength?: number maxlength?: number
minlength?: number
allowchar?: number allowchar?: number
filter_table?: string filter_table?: string
filter_field?: string filter_field?: string

View File

@@ -50,6 +50,19 @@ export const MsgDefault: IMessage = {
status: StatusMessage.None, status: StatusMessage.None,
} }
export const NotifDefault: INotif = {
_id: '',
idapp: '',
type: 0,
sender: '',
dest: '',
descr: '',
datenotif: new Date(),
read: false,
deleted: false,
status: StatusMessage.None,
}
export interface IMessage { export interface IMessage {
_id?: any _id?: any
idapp?: string idapp?: string
@@ -64,6 +77,19 @@ export interface IMessage {
options?: number options?: number
} }
export interface INotif {
_id?: any
idapp?: string
type: number
sender: string,
dest: string,
descr: string
datenotif?: Date
status?: StatusMessage
read?: boolean
deleted?: boolean
}
export interface IChat { export interface IChat {
username: string username: string
lasttimeActive?: Date lasttimeActive?: Date
@@ -79,3 +105,7 @@ export interface IMessageState {
last_msgs: IMessage[] last_msgs: IMessage[]
users_msg: IMsgUsers[] users_msg: IMsgUsers[]
} }
export interface INotifState {
last_notifs: INotif[]
}

View File

@@ -120,6 +120,14 @@ export interface IUserFields {
calcstat?: ICalcStat|null calcstat?: ICalcStat|null
} }
export interface IUserExport {
_id: string
email?: string
username: string
username_telegram: string
firstname_telegram: string
lastname_telegram: string
}
/* /*
password?: string password?: string
lang lang

View File

@@ -1,15 +0,0 @@
import { reactive } from '@vue/reactivity'
import useValidators from '@/modules/validators'
const errors: any = reactive({})
export default function useFormValidation() {
const { isEmpty, minLength, isEmail } = useValidators()
const validateNameField = (fieldName: string, fieldValue: string) => {
errors[fieldName] = !fieldValue ? isEmpty(fieldName, fieldValue) : minLength(fieldName, fieldValue, 4)
}
const validateEmailField = (fieldName: string, fieldValue: string) => {
errors[fieldName] = !fieldValue ? isEmpty(fieldName, fieldValue) : isEmail(fieldName, fieldValue)
}
return { errors, validateNameField, validateEmailField }
}

View File

@@ -6,7 +6,7 @@ import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { CSkill } from '@/components/CSkill' import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder' import { CFinder } from '@/components/CFinder'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { CDashboard } from '@/components/CDashboard' import { CDashboard } from '@/components/CDashboard'
import { CChartMap } from '@src/components/CChartMap' import { CChartMap } from '@src/components/CChartMap'
import { CUserNonVerif } from '@/components/CUserNonVerif' import { CUserNonVerif } from '@/components/CUserNonVerif'
@@ -24,7 +24,7 @@ import { colmyBachecas } from '@store/Modules/fieldsTable'
export default defineComponent({ export default defineComponent({
name: 'eventi', name: 'eventi',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, Footer }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, LandingFooter },
setup() { setup() {
return { return {
colmyBachecas, colmyBachecas,

View File

@@ -21,7 +21,7 @@
</div> </div>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</template> </template>

View File

@@ -13,7 +13,7 @@ import { CTitlePage } from '@/components/CTitlePage'
import { CMapsEsempio } from '@src/components/CMapsEsempio' import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail' import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram' import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data' import { static_data } from '@/db/static_data'
@@ -22,7 +22,7 @@ import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({ export default defineComponent({
name: 'Goods', name: 'Goods',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, Footer }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, LandingFooter },
setup() { setup() {
return { return {

View File

@@ -19,7 +19,7 @@
</div> </div>
</div> </div>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</template> </template>

View File

@@ -6,7 +6,7 @@ import { tools } from '@src/store/Modules/tools'
import { toolsext } from '@src/store/Modules/toolsext' import { toolsext } from '@src/store/Modules/toolsext'
import { CSkill } from '@/components/CSkill' import { CSkill } from '@/components/CSkill'
import { CFinder } from '@/components/CFinder' import { CFinder } from '@/components/CFinder'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { CDashboard } from '@/components/CDashboard' import { CDashboard } from '@/components/CDashboard'
import { CChartMap } from '@src/components/CChartMap' import { CChartMap } from '@src/components/CChartMap'
import { CUserNonVerif } from '@/components/CUserNonVerif' import { CUserNonVerif } from '@/components/CUserNonVerif'
@@ -24,7 +24,7 @@ import { colmyHosp } from '@store/Modules/fieldsTable'
export default defineComponent({ export default defineComponent({
name: 'hosp', name: 'hosp',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, Footer }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, LandingFooter },
setup() { setup() {
return { return {
colmyHosp, colmyHosp,

View File

@@ -21,7 +21,7 @@
</div> </div>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</template> </template>

View File

@@ -7,7 +7,7 @@ import { CSkill } from '@/components/CSkill'
import { CMainView } from '@/components/CMainView' import { CMainView } from '@/components/CMainView'
import { CDashboard } from '@/components/CDashboard' import { CDashboard } from '@/components/CDashboard'
import { CChartMap } from '@src/components/CChartMap' import { CChartMap } from '@src/components/CChartMap'
import { Footer } from '@src/components/Footer' import { LandingFooter } from '@src/components/LandingFooter'
import { CUserNonVerif } from '@/components/CUserNonVerif' import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CStatusReg } from '@/components/CStatusReg' import { CStatusReg } from '@/components/CStatusReg'
import { CCopyBtn } from '@/components/CCopyBtn' import { CCopyBtn } from '@/components/CCopyBtn'
@@ -24,7 +24,7 @@ import MixinMetaTags from '@/mixins/mixin-metatags'
export default defineComponent({ export default defineComponent({
name: 'mainview', name: 'mainview',
components: { CSkill, CChartMap, CMapsEsempio, CDashboard, CUserNonVerif, CMainView, CCopyBtn, Footer, CCheckIfIsLogged, CStatusReg, CPresentazione }, components: { CSkill, CChartMap, CMapsEsempio, CDashboard, CUserNonVerif, CMainView, CCopyBtn, LandingFooter, CCheckIfIsLogged, CStatusReg, CPresentazione },
setup() { setup() {
const globalStore = useGlobalStore() const globalStore = useGlobalStore()
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -94,7 +94,7 @@
</div> </div>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</template> </template>

View File

@@ -14,7 +14,7 @@
</PagePolicy> </PagePolicy>
<Footer></Footer> <LandingFooter></LandingFooter>
</div> </div>
</q-page> </q-page>

View File

@@ -13,7 +13,7 @@ import { CUserNonVerif } from '@/components/CUserNonVerif'
import { CMapsEsempio } from '@src/components/CMapsEsempio' import { CMapsEsempio } from '@src/components/CMapsEsempio'
import { CVerifyEmail } from '@src/components/CVerifyEmail' import { CVerifyEmail } from '@src/components/CVerifyEmail'
import { CVerifyTelegram } from '@src/components/CVerifyTelegram' import { CVerifyTelegram } from '@src/components/CVerifyTelegram'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { useGlobalStore } from '@store/globalStore' import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { static_data } from '@/db/static_data' import { static_data } from '@/db/static_data'
@@ -23,7 +23,7 @@ import { costanti } from '@costanti'
export default defineComponent({ export default defineComponent({
name: 'Services', name: 'Services',
components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, Footer }, components: { CSkill, CChartMap, CMapsEsempio, CFinder, CVerifyEmail, CVerifyTelegram, CDashboard, CUserNonVerif, CTitlePage, LandingFooter },
setup() { setup() {
return { return {
tools, tools,

View File

@@ -20,7 +20,7 @@
</div> </div>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</template> </template>

View File

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

View File

View File

@@ -0,0 +1,72 @@
import { defineComponent, onMounted, ref } from 'vue'
import { CMyPage } from '@/components/CMyPage'
import { CKeyAndValue } from '@/components/CKeyAndValue'
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'
import { useUserStore } from '@store/UserStore'
import { costanti } from '@costanti'
export default defineComponent({
name: 'userPanel',
components: { CMyPage, CKeyAndValue },
setup() {
const arrfilterand: any = ref([])
const search = ref('')
const colVisib = ref('')
const mycolumns = ref([])
const myuser = ref({})
const userStore = useUserStore()
async function mounted() {
//
search.value = tools.getCookie(tools.COOK_SEARCH + 'searchpanel')
await refresh()
}
function changeCol(newval: any) {
//
}
async function refresh() {
if (!!search.value)
myuser.value = await userStore.loadUserPanel(search.value)
else
myuser.value = {}
}
function db_fieldsTable() {
return fieldsTable
}
async function doSearch() {
tools.setCookie(tools.COOK_SEARCH + 'searchpanel', search.value)
await refresh()
}
onMounted(mounted)
return {
arrfilterand,
fieldsTable,
search,
tools,
doSearch,
changeCol,
myuser,
refresh,
mycolumns,
colVisib,
}
}
})

View File

@@ -0,0 +1,105 @@
<template>
<CMyPage img="" :title="$t('otherpages.admin.userpanel')" keywords="" :description="$t('otherpages.admin.userpanel')">
<div
class="row justify-center vertical-middle">
<div class="q-mr-sm full-width">
<q-input
v-model="search" filled dense type="search" debounce="500"
label="Cerca"
v-on:keyup.enter="doSearch"
>
<template v-slot:after>
<q-btn dense label="" color="primary" @click="doSearch" icon="search"></q-btn>
</template>
</q-input>
</div>
<q-space></q-space>
<q-select
v-model="colVisib"
rounded
outlined
multiple
dense
options-dense
:display-value="$t('grid.columns')"
emit-value
map-options
:options="mycolumns"
option-value="name"
@update:model-value="changeCol">
</q-select>
</div>
<div v-if="!!myuser">
username cercato: <em>"{{ search }}"</em><br>
<br>
<div v-if="myuser.verified_by_aportador">
<q-banner
rounded
class="bg-green text-white"
style="text-align: center;"
>
<span class="mybanner">
Verificato da {{ myuser.aportador_solidario }}<br>
</span>
</q-banner>
</div>
<div v-else>
<q-banner
rounded
class="bg-red text-white"
style="text-align: center;"
>
<span class="mybanner">
NON Verificato da {{ myuser.aportador_solidario }}<br>
</span>
</q-banner>
</div>
<CKeyAndValue mykey="Username:" :myvalue="myuser.username"></CKeyAndValue>
<div v-if="!!myuser.profile">
<CKeyAndValue mykey="Email:" :myvalue="myuser.email"></CKeyAndValue>
<div class="q-ml-xs bg-blue text-white text-h6">
<q-banner
dense
rounded class="bg-blue text-white"
style="text-align: center;">
<span class="mybanner">Telegram<br></span>
</q-banner>
<CKeyAndValue mykey="Username Telegram:" :myvalue="myuser.profile.username_telegram"></CKeyAndValue>
<CKeyAndValue mykey="Telegram ID:" :myvalue="myuser.profile.teleg_id"></CKeyAndValue>
<span v-if="myuser.profile.firstname_telegram">
<CKeyAndValue mykey="Nome e Cognome Telegram:" :myvalue="myuser.profile.firstname_telegram + ` ` + myuser.profile.lastname_telegram"></CKeyAndValue>
</span>
</div>
<CKeyAndValue mykey="Invitato da:" :myvalue="myuser.aportador_solidario"></CKeyAndValue>
<CKeyAndValue mykey="Online il:" :mydate="myuser.lasttimeonline"></CKeyAndValue>
<CKeyAndValue mykey="Città di Nascita:" :myvalue="myuser.profile.born_city"></CKeyAndValue>
<CKeyAndValue mykey="Data di Nascita:" :mydate="myuser.profile.dateofbirth"></CKeyAndValue>
<CKeyAndValue mykey="Biografia:" :myvalue="myuser.profile.biografia"></CKeyAndValue>
<CKeyAndValue mykey="qualifica:" :myvalue="myuser.profile.qualifica"></CKeyAndValue>
</div>
</div>
<br>
</CMyPage>
</template>
<script lang="ts" src="./userPanel.ts">
</script>
<style lang="scss" scoped>
@import './userPanel.scss';
</style>

View File

@@ -47,6 +47,7 @@ const msg_it = {
eventlist: 'Le tue Prenotazioni', eventlist: 'Le tue Prenotazioni',
usereventlist: 'Prenotazioni Utenti', usereventlist: 'Prenotazioni Utenti',
userlist: 'Lista Utenti', userlist: 'Lista Utenti',
userpanel: 'Pannello Utenti',
circuitslist: 'Circuiti', circuitslist: 'Circuiti',
accountslist: 'Conti', accountslist: 'Conti',
movslist: 'Movimenti', movslist: 'Movimenti',
@@ -535,6 +536,7 @@ const msg_it = {
pub_updated: 'Aggiornato il', pub_updated: 'Aggiornato il',
options: 'Opzioni', options: 'Opzioni',
link_telegram: 'Link al Canale/Gruppo Telegram', link_telegram: 'Link al Canale/Gruppo Telegram',
refuse_cookie: 'Sei sicuro di rifiutare i Cookies? Se continui dovrai reinserire username e password tutte le volte che entri. I cookies servono per riproporti i filtri che utilizzi solitamente. (E\' Consigliato ACCETTARE i Cookies)',
err: { err: {
required: 'è richiesto', required: 'è richiesto',
email: 'inserire una email valida', email: 'inserire una email valida',
@@ -648,7 +650,8 @@ const msg_it = {
newproj: 'Titolo Progetto', newproj: 'Titolo Progetto',
newsubproj: 'Titolo Sotto-Progetto', newsubproj: 'Titolo Sotto-Progetto',
insertbottom: 'Inserisci Nuovo Project', insertbottom: 'Inserisci Nuovo Project',
shortdescr: 'Descrizione', shortdescr: 'Descrizione Breve',
descrapprof: 'Descrizione Approfondita',
longdescr: 'Testo', longdescr: 'Testo',
note: 'Note', note: 'Note',
hoursplanned: 'Ore Preventivate', hoursplanned: 'Ore Preventivate',
@@ -742,6 +745,13 @@ const msg_it = {
messages: 'Messaggi', messages: 'Messaggi',
nomessage: 'Nessun Messaggio', nomessage: 'Nessun Messaggio',
}, },
notifs: {
telegrammsg: 'Telegram',
notif: 'Notifica',
notifs: 'Notifiche',
nonotif: 'Nessuna Notifica',
warn_province: 'Avvisami se nuovo annuncio in provincia',
},
event: { event: {
_id: 'id', _id: 'id',
typol: 'Typology', typol: 'Typology',
@@ -841,7 +851,7 @@ const msg_it = {
wrongerr: 'Email non valida', wrongerr: 'Email non valida',
}, },
privacy_policy: 'Privacy Policy', privacy_policy: 'Privacy Policy',
cookies: 'Usiamo i Cookie per una migliore prestazione web. Accetti l\'utilizzo?', cookies: 'Usiamo i Cookie per una migliore prestazione web. Accetti l\'utilizzo? (Consigliato ACCETTA)',
sites: { sites: {
active: 'Attivo', active: 'Attivo',
idapp: 'IdApp', idapp: 'IdApp',
@@ -973,6 +983,10 @@ const msg_it = {
reg: 'Regione', reg: 'Regione',
link_grp: 'Link Territoriale', link_grp: 'Link Territoriale',
}, },
annunci: {
maxlength: 'Il campo "{name}" dev\'essere non più lungo di {maxlength} caratteri',
minlength: 'Compilare il campo "{name}" lungo almeno {minlength} caratteri',
},
hosps: { hosps: {
visibile: 'Pubblica', visibile: 'Pubblica',
typeHosp: 'Tipologia', typeHosp: 'Tipologia',

View File

@@ -89,6 +89,7 @@ function AddCol(params: IColGridTable) {
remote_key: (params.remote_key === undefined) ? '' : params.remote_key, remote_key: (params.remote_key === undefined) ? '' : params.remote_key,
remote_field: (params.remote_field === undefined) ? '' : params.remote_field, remote_field: (params.remote_field === undefined) ? '' : params.remote_field,
maxlength: (params.maxlength === undefined) ? 0 : params.maxlength, maxlength: (params.maxlength === undefined) ? 0 : params.maxlength,
minlength: (params.minlength === undefined) ? 0 : params.minlength,
filter_field: (params.filter_field === undefined) ? '' : params.filter_field, filter_field: (params.filter_field === undefined) ? '' : params.filter_field,
isadvanced_field: (params.isadvanced_field === undefined) ? false : params.isadvanced_field, isadvanced_field: (params.isadvanced_field === undefined) ? false : params.isadvanced_field,
} }
@@ -687,6 +688,14 @@ export const colmyGoods = [
required: true, required: true,
sortable: false, sortable: false,
}), }),
AddCol({
name: 'note', label_trans: 'proj.descrapprof', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
minlength: 50,
isadvanced_field: true,
required: true,
}),
AddCol({ AddCol({
name: 'idSectorGood', name: 'idSectorGood',
label_trans: 'sectors.name', label_trans: 'sectors.name',
@@ -784,12 +793,6 @@ export const colmyGoods = [
*/ */
AddCol({
name: 'note', label_trans: 'proj.longdescr', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
isadvanced_field: true,
}),
//**ADDFIELD_MYSKILL //**ADDFIELD_MYSKILL
AddCol({ AddCol({
name: 'website', label_trans: 'reg.website', isadvanced_field: true, fieldtype: costanti.FieldType.link, name: 'website', label_trans: 'reg.website', isadvanced_field: true, fieldtype: costanti.FieldType.link,
@@ -864,6 +867,13 @@ export const colmySkills = [
required: true, required: true,
sortable: false, sortable: false,
}), }),
AddCol({
name: 'note', label_trans: 'proj.descrapprof', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
required: true,
isadvanced_field: true,
}),
AddCol({ AddCol({
name: 'idSector', name: 'idSector',
label_trans: 'sectors.name', label_trans: 'sectors.name',
@@ -952,12 +962,6 @@ export const colmySkills = [
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
isadvanced_field: true, isadvanced_field: true,
}), }),
AddCol({
name: 'note', label_trans: 'proj.longdescr', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
isadvanced_field: true,
}),
//**ADDFIELD_MYSKILL //**ADDFIELD_MYSKILL
AddCol({ AddCol({
name: 'website', label_trans: 'reg.website', isadvanced_field: true, fieldtype: costanti.FieldType.link, name: 'website', label_trans: 'reg.website', isadvanced_field: true, fieldtype: costanti.FieldType.link,
@@ -1076,6 +1080,14 @@ export const colmyHosp = [
required: true, required: true,
sortable: false, sortable: false,
}), }),
AddCol({
name: 'note', label_trans: 'proj.descrapprof', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
isadvanced_field: true,
required: true,
sortable: false,
}),
AddCol({ AddCol({
name: 'photos', name: 'photos',
label_trans: 'skill.photos', label_trans: 'skill.photos',
@@ -1086,13 +1098,6 @@ export const colmyHosp = [
isadvanced_field: true, isadvanced_field: true,
sortable: false, sortable: false,
}), }),
AddCol({
name: 'note', label_trans: 'proj.longdescr', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
isadvanced_field: true,
sortable: false,
}),
//**ADDFIELD_MYBACHECAS //**ADDFIELD_MYBACHECAS
AddCol({ AddCol({
name: 'link_maplocation', label_trans: 'reg.link_maplocation', isadvanced_field: true, fieldtype: costanti.FieldType.link, name: 'link_maplocation', label_trans: 'reg.link_maplocation', isadvanced_field: true, fieldtype: costanti.FieldType.link,
@@ -1194,6 +1199,14 @@ export const colmyBachecas = [
required: true, required: true,
sortable: false, sortable: false,
}), }),
AddCol({
name: 'note', label_trans: 'proj.descrapprof', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
required: true,
isadvanced_field: true,
sortable: false,
}),
AddCol({ AddCol({
name: 'idSector', name: 'idSector',
label_trans: 'sectors.name', label_trans: 'sectors.name',
@@ -1257,13 +1270,6 @@ export const colmyBachecas = [
isadvanced_field: true, isadvanced_field: true,
sortable: false, sortable: false,
}), }),
AddCol({
name: 'note', label_trans: 'proj.longdescr', fieldtype: costanti.FieldType.html,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
titlepopupedit: 'Dettagli', field_extra1: 'username', subfield_extra1: '',
isadvanced_field: true,
sortable: false,
}),
//**ADDFIELD_MYBACHECAS //**ADDFIELD_MYBACHECAS
AddCol({ AddCol({
name: 'website', label_trans: 'reg.website', isadvanced_field: true, fieldtype: costanti.FieldType.link, name: 'website', label_trans: 'reg.website', isadvanced_field: true, fieldtype: costanti.FieldType.link,

View File

@@ -12,7 +12,7 @@ import {
ITodo, ITodo,
IUserFields, IUserFields,
Privacy, Privacy,
TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, IUserExport,
} from '@model' } from '@model'
import { addToDate } from '@quasar/quasar-ui-qcalendar' import { addToDate } from '@quasar/quasar-ui-qcalendar'
@@ -1945,8 +1945,8 @@ export const tools = {
this.showNotif(q, msg, { color: 'positive', icon: 'notifications' }) this.showNotif(q, msg, { color: 'positive', icon: 'notifications' })
}, },
showNegativeNotif(q: any, msg: string) { showNegativeNotif(q: any, msg: string, time = 5000) {
this.showNotif(q, msg, { color: 'negative', icon: 'notifications' }, 10000) this.showNotif(q, msg, { color: 'negative', icon: 'notifications' }, time)
}, },
showNeutralNotif(q: any, msg: string, time = 10000) { showNeutralNotif(q: any, msg: string, time = 10000) {
@@ -3022,7 +3022,7 @@ export const tools = {
}, },
loginOk($router: Router, route: any, mythisq: any, ispageLogin: boolean) { loginOk($router: Router, route: any, mythisq: any, ispageLogin: boolean) {
// console.log('loginOk') console.log('loginOk')
const userStore = useUserStore() const userStore = useUserStore()
if (toolsext.getLocale() !== '') { if (toolsext.getLocale() !== '') {
@@ -5487,6 +5487,63 @@ export const tools = {
return [] return []
}, },
loadrecProfile() {
const userStore = useUserStore()
const globalStore = useGlobalStore()
const params: any = {
table: 'exp',
userId: userStore.my._id
}
console.log('loadrecProfile', params)
return globalStore.loadExp(params)
},
async exportListaEmail() {
let myrec = await this.loadrecProfile()
const sep = ';'
let mystr = ''
mystr += 'username' + sep + 'username_telegram' + sep + 'nome_telegram' + sep + 'cognome_telegram' + sep + 'email' + sep + 'verificato_telegram' + sep + 'verificato_invitante' + '\n'
let index = 1
for (const rec of myrec) {
mystr += rec.username + sep
mystr += rec.profile.username_telegram + sep
mystr += rec.profile.firstname_telegram + sep
mystr += rec.profile.lastname_telegram + sep
mystr += rec.email + sep
mystr += (rec.profile.teleg_id) ? 'SI' : 'NO'
mystr += (rec.verified_by_aportador) ? 'SI' : 'NO'
mystr += '\n'
index++
}
// tools.copyStringToClipboard(this, mystr, false)
return mystr
},
get_SI_NO(myvalue: boolean) {
return myvalue ? 'SI' : 'NO'
},
getvalueAll(myval: string | Date) {
const mydate = new Date(myval);
if (mydate instanceof Date && !isNaN(mydate.valueOf())) {
return this.getstrDateTime(mydate)
} else {
return myval
}
}
// getLocale() { // getLocale() {
// if (navigator.languages && navigator.languages.length > 0) { // if (navigator.languages && navigator.languages.length > 0) {

87
src/store/NotifStore.ts Executable file
View File

@@ -0,0 +1,87 @@
import { defineStore } from 'pinia'
import { Api } from '@api'
import { serv_constants } from './Modules/serv_constants'
import { INotif, INotifState } from '../model'
import { tools } from '@src/store/Modules/tools'
import { NotifDefault } from '@src/model'
import { shared_consts } from '@src/common/shared_vuejs'
import { useUserStore } from '@store/UserStore'
export const useNotifStore = defineStore('NotifStore', {
state: (): INotifState => ({
last_notifs: [],
}),
getters: {
getlasts_notifs: (mystate: INotifState) => (): INotif[] => {
const ctrec = (mystate.last_notifs) ? mystate.last_notifs.slice(0, 5) : []
// const ctrec = (mystate.notifs) ? mystate.notifs.slice().reverse().slice(0, 5) : []
return (ctrec)
},
getnumNotifUnread: (mystate: INotifState) => () => {
return mystate.last_notifs.filter((notif) => !notif.read).length
},
},
actions: {
setNotif(notif: INotif) {
// console.log('arrnotif', arrnotif)
if (notif) {
this.last_notifs = [notif, ...this.last_notifs]
}
},
async updateNotifDataFromServer({ username, lastdataread }: {username: string, lastdataread: Date}) {
// console.log('updateNotifDataFromServer', username, lastdataread)
return Api.SendReq(`/sendnotif/${username}/${lastdataread}/${process.env.APP_ID}`, 'GET', null)
.then((res) => {
// console.log('res', res)
return true
})
.catch((error) => {
console.error(error)
return false
})
},
async SendNotifEvent(notif: INotif) {
console.log('SendNotifEvent', notif)
const data: INotif = { ...NotifDefault, ...notif }
data.idapp = process.env.APP_ID
data.type = notif.type
data.sender = notif.sender
data.dest = notif.dest
data.descr = notif.descr
data.datenotif = tools.getDateNow()
data.read = false
// console.log('DOPO:')
// console.table(data)
return Api.SendReq('/sendnotif', 'POST', data)
.then((res) => {
// console.log('res', res)
if (res.status === 200) {
if (res.data.code === serv_constants.RIS_CODE_OK) {
this.setNotif(res.data)
return true
}
}
return false
})
.catch((error) => {
console.error(error)
return false
})
},
},
})

View File

@@ -991,6 +991,21 @@ export const useUserStore = defineStore('UserStore', {
}, },
async loadUserPanel(username: string) {
const data = {
username
}
return Api.SendReq('/users/panel', 'POST', data)
.then((ris) => {
console.log('out:', ris)
return ris.data
}).catch((error) => {
return {}
})
},
async loadGroup(groupname: string) { async loadGroup(groupname: string) {
const data = { const data = {
groupname groupname

View File

@@ -30,6 +30,7 @@ import urlBase64ToUint8Array from '@src/js/utility'
import translate from '@src/globalroutines/util' import translate from '@src/globalroutines/util'
import { useTodoStore } from '@store/Todos' import { useTodoStore } from '@store/Todos'
import { useMessageStore } from './MessageStore' import { useMessageStore } from './MessageStore'
import { useNotifStore } from './NotifStore'
const stateConnDefault = 'online' const stateConnDefault = 'online'
@@ -201,6 +202,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
const calendarStore = useCalendarStore() const calendarStore = useCalendarStore()
const userStore = useUserStore() const userStore = useUserStore()
const messageStore = useMessageStore() const messageStore = useMessageStore()
const notifStore = useNotifStore()
if (table === costanti.TABEVENTS) if (table === costanti.TABEVENTS)
return calendarStore.eventlist return calendarStore.eventlist
@@ -240,6 +242,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
return userStore.groups return userStore.groups
else if (table === 'sendmsgs') else if (table === 'sendmsgs')
return messageStore.last_msgs return messageStore.last_msgs
else if (table === 'sendnotifs')
return notifStore.last_notifs
else if (table === 'settings') else if (table === 'settings')
return state.settings return state.settings
else if (table === 'levels') else if (table === 'levels')
@@ -811,6 +815,19 @@ export const useGlobalStore = defineStore('GlobalStore', {
}) })
}, },
async loadExp(params: any) {
// console.log('loadTable', params)
params.filtersearch2 = 'fdsgas1'
return Api.SendReq('/getexp', 'POST', params)
.then((res) => {
return res.data ? res.data : []
})
.catch((error) => {
return []
})
},
loadPickup(params: IParamsPickup) { loadPickup(params: IParamsPickup) {
console.log('loadPickup', params) console.log('loadPickup', params)
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -5,7 +5,7 @@ import { useGlobalStore } from '@store/globalStore'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { CMyPage } from '../../../components/CMyPage' import { CMyPage } from '../../../components/CMyPage'
import { Footer } from '../../../components/Footer' import { LandingFooter } from '../../../components/LandingFooter'
import { CTitleBanner } from '../../../components/CTitleBanner' import { CTitleBanner } from '../../../components/CTitleBanner'
@@ -28,7 +28,7 @@ export default defineComponent({
default: false, default: false,
}, },
}, },
components: { CSignUpIscrizioneConacreis, CMyPage, Footer, CTitleBanner }, components: { CSignUpIscrizioneConacreis, CMyPage, LandingFooter, CTitleBanner },
setup(props, { emit }) { setup(props, { emit }) {
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -14,7 +14,7 @@
</CSignUpIscrizioneConacreis> </CSignUpIscrizioneConacreis>
</div> </div>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</div> </div>
</template> </template>

View File

@@ -1,12 +1,12 @@
import { defineComponent } from 'vue' import { defineComponent } from 'vue'
import { Footer } from '@/components/Footer' import { LandingFooter } from '@/components/LandingFooter'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import MixinUsers from '@/mixins/mixin-users' import MixinUsers from '@/mixins/mixin-users'
export default defineComponent({ export default defineComponent({
name: 'Regok', name: 'Regok',
components: { Footer }, components: { LandingFooter },
props: {}, props: {},
setup() { setup() {
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -43,7 +43,7 @@
<br> <br>
<br> <br>
<Footer></Footer> <LandingFooter></LandingFooter>
</q-page> </q-page>
</template> </template>

View File

@@ -44,7 +44,7 @@
<q-item-section> <q-item-section>
<q-item-label>{{rec.title}}</q-item-label> <q-item-label>{{rec.title}}</q-item-label>
<q-item-label caption v-html="rec.description"></q-item-label> <q-item-label caption><span v-html="rec.description"></span></q-item-label>
<q-item-label> <q-item-label>
<span class="est__price">{{getPrice(rec)}} </span> <span class="est__price">{{getPrice(rec)}} </span>
</q-item-label> </q-item-label>

2193
yarn.lock

File diff suppressed because it is too large Load Diff