fix Cliccando sul Titolo dell'evento, si apre una pagina in una nuova finestra ! (non rimane sulla APP)

This commit is contained in:
Surya Paolo
2022-12-02 13:24:20 +01:00
parent 009735afad
commit 9b7b25e657
26 changed files with 1201 additions and 499 deletions

View File

@@ -35,7 +35,7 @@
"autoprefixer": "^10.4.13",
"axios": "^1.2.0",
"bcryptjs": "^2.4.3",
"chart.js": "^3.9.1",
"chart.js": "^3.9.1",
"core-js": "^3.26.1",
"crypto": "^1.0.1",
"date-fns": "^2.29.3",
@@ -70,6 +70,7 @@
"vue-property-decorator": "^10.0.0-rc.3",
"vue-router": "^4.1.6",
"vue-scroll-reveal": "^1.0.11",
"vue-social-sharing": "^4.0.0-alpha4",
"vue-svgicon": "^4.0.0-alpha.3",
"vue2-dragula": "^2.5.5",
"vuex": "^4.1.0",

View File

@@ -37,7 +37,7 @@ module.exports = configure((ctx) => ({
// --> boot files are part of "main.js"
// https://v2.quasar.dev/quasar-cli/boot-files
// boot: ['vue-i18n', 'vue-meta', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'vue-idb', 'dragula', 'guard'],
boot: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'calendar'],
boot: ['i18n', 'axios', 'vee-validate', 'myconfig', 'local-storage', 'error-handler', 'globalroutines', 'calendar', 'social-sharing'],
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-css
css: [

8
src/boot/social-sharing.ts Executable file
View File

@@ -0,0 +1,8 @@
// import google from '../googlemap'
import { boot } from 'quasar/wrappers'
import VueSocialSharing from 'vue-social-sharing'
export default boot(({ app, router }) => {
// app.config.globalProperties.$google = google
app.use(VueSocialSharing);
})

View File

@@ -55,7 +55,7 @@
style="opacity: 0.7;"
>
<q-btn
push round color="white" text-color="black" icon="keyboard_arrow_left"
push round :color="$q.dark.isActive ? `black` : `white`" :text-color="$q.dark.isActive ? `white` : `black`" icon="keyboard_arrow_left"
@click="$refs.carousel.previous()"></q-btn>
</q-carousel-control>
<q-carousel-control
@@ -64,7 +64,7 @@
style="opacity: 0.7;"
>
<q-btn
push round color="white" text-color="black" icon="keyboard_arrow_right"
push round :color="$q.dark.isActive ? `black` : `white`" :text-color="$q.dark.isActive ? `white` : `black`" icon="keyboard_arrow_right"
@click="$refs.carousel.next()"></q-btn>
</q-carousel-control>
</template>

View File

@@ -23,7 +23,7 @@
<div class="text-h6 text-center">
Visualizza le FAQ (Risposte alle domande più frequenti)<br>
<div class="text-center">
<q-btn color="white" push glossy text-color="black" label="Apri le FAQ" to="/faq"/>
<q-btn :color="$q.dark.isActive ? `black` : `white`" push glossy :text-color="$q.dark.isActive ? `white` : `black`" label="Apri le FAQ" to="/faq"/>
</div>
</div>
</q-banner>

View File

@@ -937,6 +937,12 @@ export default defineComponent({
return event.title
}
function condividipag(href: string) {
const msg = self.location.host + href
return tools.copyStringToClipboard($q, msg, true)
}
onMounted(mounted)
onBeforeMount(beforeMount)
@@ -1022,6 +1028,7 @@ export default defineComponent({
EState,
CancelBookingEvent,
site: globalStore.site,
condividipag,
}
}
})

File diff suppressed because it is too large Load Diff

View File

@@ -95,7 +95,7 @@
<div class="q-ma-sm">
<q-btn
v-if="myrec._id"
text-color="black" icon="fas fa-share-alt"
:text-color="$q.dark.isActive ? `white` : `black`" icon="fas fa-share-alt"
label="Condividi"
@click="condividipag"></q-btn>
</div>

View File

@@ -79,7 +79,7 @@
<div class="q-ma-sm">
<q-btn
v-if="myrec._id"
text-color="black" icon="fas fa-share-alt"
:text-color="$q.dark.isActive ? `white` : `black`" icon="fas fa-share-alt"
label="Condividi"
@click="condividipag"></q-btn>
</div>

View File

@@ -112,7 +112,7 @@
<div class="q-ma-sm">
<q-btn
v-if="myrec._id"
text-color="black" icon="fas fa-share-alt"
:text-color="$q.dark.isActive ? `white` : `black`" icon="fas fa-share-alt"
label="Condividi"
@click="condividipag"></q-btn>
</div>

View File

@@ -2,7 +2,7 @@ import {
defineComponent, onMounted, PropType, ref, toRef, watch,
} from 'vue'
import { IMyCard, IMyElem, IMyPage, IOperators } from '@src/model'
import { IMyCard, IMyElem, IMyPage, IOperators, ISocial } from '@src/model'
import { useGlobalStore } from '@store/globalStore'
import { CImgTitle } from '../CImgTitle/index'
@@ -27,6 +27,7 @@ import { CCheckIfIsLogged } from '@src/components/CCheckIfIsLogged'
import { CSelectFontSize } from '@src/components/CSelectFontSize'
import { CNotifAtTop } from '@src/components/CNotifAtTop'
import { CPresentazione } from '@src/components/CPresentazione'
import { CShareSocial } from '@src/components/CShareSocial'
import MixinMetaTags from '@/mixins/mixin-metatags'
import MixinBase from '@/mixins/mixin-base'
@@ -43,7 +44,7 @@ export default defineComponent({
CSelectColor, CSelectFontSize, CImgPoster,
CCheckIfIsLogged, CStatusReg, CDashboard, CMainView, CNotifAtTop,
CPresentazione,
CTitleBanner,
CTitleBanner, CShareSocial,
},
emits: ['selElemClick'],
props: {
@@ -88,6 +89,9 @@ export default defineComponent({
const disableSave = ref(true)
const enableEdit = ref(false)
const enableAdd = ref(true)
const visushare = ref(false)
const social = ref(<ISocial>{})
const neworder = ref(<number | undefined>0)
@@ -227,6 +231,21 @@ export default defineComponent({
$router.replace('/signin')
}
async function clickshare() {
let mytext = await tools.sendMsgTelegramCmd(
$q,
t,
shared_consts.MsgTeleg.SHARE_MSGREG,
true
)
if (false) {
social.value.description = mytext
visushare.value = true
}
}
onMounted(mounted)
return {
@@ -256,6 +275,9 @@ export default defineComponent({
dupElem,
globalStore,
PagLogin,
visushare,
social,
clickshare,
}
},

View File

@@ -466,14 +466,7 @@
"
rounded
:label="$t('reg.link_reg_and_msg')"
@click="
tools.sendMsgTelegramCmd(
$q,
$t,
shared_consts.MsgTeleg.SHARE_MSGREG,
true
)
"
@click="clickshare"
>
</q-btn>
</div>
@@ -513,9 +506,7 @@
size="xs"
/>
</template>
<span class="mybanner"
>
TEST !</span>
<span class="mybanner"> TEST !</span>
</q-banner>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CHECKNEWVERSION">
@@ -600,6 +591,21 @@
</div>
</div>
</div>
<q-dialog
v-model="visushare"
transition-show="slide-up"
transition-hide="slide-down"
:maximized="$q.screen.lt.sm"
>
<CShareSocial
v-if="social && social.description"
:description="social.description"
:title="social.title"
:url="social.url"
>
</CShareSocial>
</q-dialog>
</template>
<script lang="ts" src="./CMyElem.ts">

View File

@@ -0,0 +1,42 @@
$heightBtn: 100%;
$grayshadow: #555;
.text-subtitle-gallery {
font-size: 1rem;
font-weight: 400;
line-height: 1.75rem;
letter-spacing: .00937em;
text-shadow: .1rem .1rem .1rem $grayshadow;
}
@media (max-width: 718px) {
// PER VERSIONE MOBILE
.text-subtitle-gallery {
font-size: 1rem;
}
}
.myimg {
border-radius: 10px !important;
height: 200px;
}
.q-img {
&__image {
border-radius: 10px !important;
}
}
.my-card-gallery {
width: 100%;
max-width: 300px;
min-width: 200px;
padding: 1rem 1rem;
height: 350px;
}
.my-card-gallery-view {
width: 100px;
height: 100px;
padding: 0.5rem 0.5rem;
}

View File

@@ -0,0 +1,52 @@
import { tools } from '../../store/Modules/tools'
import { useQuasar } from 'quasar'
import { useI18n } from '@src/boot/i18n'
import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { defineComponent } from 'vue'
export default defineComponent({
name: 'CShareSocial',
props: {
description: {
type: String,
required: true,
},
title: {
type: String,
required: false,
default: '',
},
url: {
type: String,
required: false,
default: '',
},
quote: {
type: String,
required: false,
default: '',
},
},
components: {},
setup(props) {
const $q = useQuasar()
const networks = [
{
network: 'whatsapp',
name: 'Whatsapp',
icon: 'fab fah fa-lg fa-whatsapp',
color: '#25d366'
},
{ network: 'email', name: 'Email', icon: 'far fah fa-lg fa-envelope', color: '#333333' },
{ network: 'facebook', name: 'Facebook', icon: 'fab fah fa-lg fa-facebook-f', color: '#1877f2' },
{ network: 'telegram', name: 'Telegram', icon: 'fab fah fa-lg fa-telegram-plane', color: '#0088cc' },
]
return {
tools,
networks,
}
},
})

View File

@@ -0,0 +1,40 @@
<template>
<div class="q-ma-sm">
<div>
<q-card>
<q-bar class="bg-primary text-white">
<span> Social Share </span>
<q-space />
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-bar>
<q-card-section class="inset-shadow">
<h2>Condividi su</h2><br>
<q-card class="dialog_card row q-pa-sm q-ma-sm">
<ShareNetwork
style="padding: 10px; margin: 10px"
v-for="network in networks"
:key="network.network"
:url="url"
:style="{ backgroundColor: network.color }"
:title="title"
:description="description"
:quote="quote"
>
<i :class="network.icon" class="q-mr-sm"></i>
<span>{{ network.name }}</span>
</ShareNetwork>
</q-card>
</q-card-section>
</q-card>
<br />
</div>
</div>
</template>
<script lang="ts" src="./CShareSocial.ts">
</script>
<style lang="scss" scoped>
@import './CShareSocial.scss';
</style>

View File

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

View File

@@ -14,6 +14,7 @@ export * from './CImgTitle'
export * from './CMyAvatar'
export * from './CMyCart'
export * from './CMyFieldDb'
export * from './CShareSocial'
export * from './CBarSelection'
export * from './CMyFieldRec'
export * from './CImgPoster'

View File

@@ -669,6 +669,14 @@ export interface IParamsQuery {
extrapar?: string
}
export interface ISocial {
description: string
network: string
title: string
url: string
quote: string
}
export interface ISpecialField {
findsubkey?: any
paramtosetsubkey?: any

View File

@@ -140,6 +140,7 @@ export default defineComponent({
setmeta,
myevent,
selected,
tools,
}
}

View File

@@ -734,7 +734,7 @@ const msg_it = {
booked_error: 'Prenotazione non avvenuta. Riprovare più tardi',
sendmsg_error: 'Messaggio non inviato. Riprovare più tardi',
sendmsg_sent: 'Messaggio Inviato',
sendmsg_sent_sharedlink: 'Il Messaggio da inviare lo trovi nella Chat Telegram',
sendmsg_sent_sharedlink: 'Condividi il messaggio che ti è appena arrivato sulla Chat Telegram',
sendmsgs_sent: 'Messaggi Inviati',
err_sendmsg: 'Errore durante l\'invio del Messaggio',
booking: 'Prenota Evento',

View File

@@ -4467,6 +4467,12 @@ export const tools = {
},
copyStringToClipboardSilent(mystr: string) {
copyToClipboard(mystr)
},
getlinkhref(mylink: string, text: string) {
return '<a href="' + mylink + '" target="_blank">' + text + '</a>'
},

View File

@@ -1047,7 +1047,7 @@ export const useUserStore = defineStore('UserStore', {
}
},
async loadUserProfile({username, idnotif}: {username: string, idnotif?: string}) {
async loadUserProfile({ username, idnotif }: { username: string, idnotif?: string }) {
const data = {
username,
idnotif
@@ -1104,9 +1104,9 @@ export const useUserStore = defineStore('UserStore', {
return Api.SendReq('/mygroup/load', 'POST', data)
.then((res) => {
return {data: res.data, status: res.status}
return { data: res.data, status: res.status }
}).catch((error) => {
return {data: null, status: error.status}
return { data: null, status: error.status }
})
},
@@ -1119,9 +1119,9 @@ export const useUserStore = defineStore('UserStore', {
return Api.SendReq('/circuit/load', 'POST', data)
.then((res) => {
return {data: res.data, status: res.status}
return { data: res.data, status: res.status }
}).catch((error) => {
return {data: null, status: error.status}
return { data: null, status: error.status }
})
},
@@ -1237,9 +1237,16 @@ export const useUserStore = defineStore('UserStore', {
let msgok = (res.data.nummsgsent === 1) ? res.data.nummsgsent + ' ' + t('cal.sendmsg_sent') : res.data.nummsgsent + ' ' + t('cal.sendmsgs_sent')
if (mydata.cmd === shared_consts.MsgTeleg.SHARE_MSGREG) {
msgok = t('cal.sendmsg_sent_sharedlink') + ' ' + tools.getBotName()
showmsgsent = true
}
if (showmsgsent && res.data.nummsgsent >= 0) {
tools.showPositiveNotif($q, msgok)
if (mydata.cmd === shared_consts.MsgTeleg.SHARE_MSGREG) {
if (res.data.textsent) {
return res.data.textsent
}
}
return true
}
return false

View File

@@ -1,49 +1,55 @@
<template>
<div class="q-pr-md">
<q-layout
view="hHh Lpr lff" container :style="`height: ` + getheight + `px`"
class="shadow-2 rounded-borders messages_page">
view="hHh Lpr lff"
container
:style="`height: ` + getheight + `px`"
class="shadow-2 rounded-borders messages_page"
>
<q-drawer
v-model="mydrawer"
:mini="!mydrawer || miniState"
@click.capture="drawerClick"
:width="widthdrawer"
:breakpoint="300"
bordered
content-class="bg-grey-3">
content-class="bg-grey-3"
>
<q-scroll-area class="fit">
<q-list bordered class="rounded-borders chat-list">
<q-item-label header class="title_msg">{{ $t('msgs.messages') }}</q-item-label>
<q-item-label header class="title_msg">{{
$t('msgs.messages')
}}</q-item-label>
<q-separator/>
<q-separator />
<div v-if="getNumMsg() === 0">
<q-item>
{{ $t('msgs.nomessage') }}
</q-item>
</div>
<q-item
clickable
:active="isMenuActive(msg.dest.username)"
active-class="active-user"
v-for="(msg, index) in lasts_messages()"
:key="index"
@click="selChat(msg)">
@click="selChat(msg)"
>
<q-item-section avatar>
<q-avatar>
<img :src="getImgByMsg(msg)" :alt="getUsernameChatByMsg(msg)">
<img
:src="getImgByMsg(msg)"
:alt="getUsernameChatByMsg(msg)"
/>
</q-avatar>
</q-item-section>
<q-item-section>
<q-item-label lines="1">{{ getUsernameChatByMsg(msg) }}</q-item-label>
<q-item-label lines="1">{{
getUsernameChatByMsg(msg)
}}</q-item-label>
<q-item-label caption lines="2">
{{ getMsgText(msg, false) }}
</q-item-label>
@@ -54,18 +60,22 @@
</q-item-section>
</q-item>
<q-separator/>
<q-separator />
</q-list>
</q-scroll-area>
<div class="q-mini-drawer-hide absolute" style="top: 15px; right: -17px">
<div
class="q-mini-drawer-hide absolute"
style="top: 15px; right: -17px"
>
<q-btn
dense
round
unelevated
color="accent"
icon="chevron_left"
@click="miniState = true">
@click="miniState = true"
>
</q-btn>
</div>
</q-drawer>
@@ -75,36 +85,53 @@
<q-page-container style="">
<q-page class="q-px-lg q-py-md">
<div>
<q-item clickable v-if="!!chatsel.username" @scroll="myonScroll">
<q-item
clickable
v-if="!!chatsel.username"
@scroll="myonScroll"
>
<q-item-section avatar>
<CMyAvatar :username="chatsel.username"></CMyAvatar>
</q-item-section>
<q-item-section>
<q-item-label lines="1">{{ getUserByUsername(chatsel.username) }}</q-item-label>
<q-item-label lines="1">{{
getUserByUsername(chatsel.username)
}}</q-item-label>
<q-item-label caption lines="2">
{{ func_tools.getDateTimeShortStr(chatsel.lasttimeActive) }}
{{
func_tools.getDateTimeShortStr(chatsel.lasttimeActive)
}}
</q-item-label>
</q-item-section>
</q-item>
</div>
<q-separator/>
<q-separator />
<div class="q-pa-md">
<q-item
clickable v-for="(msg, index) in msgchat_records()" :key="index">
clickable
v-for="(msg, index) in msgchat_records()"
:key="index"
>
<div v-if="msg.dest">
<div>
<div class="chat_dest" v-if="msg.dest.username === Username()">
<div
class="chat_dest"
v-if="msg.dest.username === Username()"
>
<q-chat-message
:name="getUsernameChatByMsg(msg)"
:text="getMsgText(msg, true)"
:stamp="tools.getstrDateTimeShort(msg.datemsg)"
text-color="black"
bg-color="grey-2">
:text-color="$q.dark.isActive ? `white` : `black`"
bg-color="grey-2"
>
<template v-slot:avatar>
<q-avatar size="sm">
<img :src="getImgByMsg(msg)" :alt="getUsernameChatByMsg(msg)">
<img
:src="getImgByMsg(msg)"
:alt="getUsernameChatByMsg(msg)"
/>
</q-avatar>
</template>
</q-chat-message>
@@ -115,37 +142,32 @@
:text="getMsgText(msg, true)"
:stamp="tools.getstrDateTimeShort(msg.datemsg)"
sent
bg-color="blue-2">
bg-color="blue-2"
>
<template v-slot:avatar>
<CMyAvatar size="sm" :username="Username()"></CMyAvatar>
<CMyAvatar
size="sm"
:username="Username()"
></CMyAvatar>
</template>
</q-chat-message>
</div>
</div>
</div>
</q-item>
<div id="last"></div>
<q-inner-loading id="spinner" :showing="loading">
<q-spinner-tail
color="primary"
size="4em">
</q-spinner-tail>
<q-spinner-tail color="primary" size="4em"> </q-spinner-tail>
</q-inner-loading>
</div>
</q-page>
</q-page-container>
</div>
<div class="bottomfixed row" :style="styletextbar">
<div class="" style="max-width: 50px; align-self: center; order: 1;">
<q-btn
rounded
size="sm"
icon="fas fa-smile">
</q-btn>
<div class="" style="max-width: 50px; align-self: center; order: 1">
<q-btn rounded size="sm" icon="fas fa-smile"> </q-btn>
</div>
<div class="" style="max-height: 100px; flex-grow:1; order: 2;">
<div class="" style="max-height: 100px; flex-grow: 1; order: 2">
<q-input
bordered
rounded
@@ -153,17 +175,12 @@
debounce="1000"
filled
autogrow
input-style="max-height: 95px;">
input-style="max-height: 95px;"
>
</q-input>
</div>
<div class="" style="max-width: 50px; align-self: center; order: 3;">
<q-btn
push
rounded
size="sm"
icon="send"
@click="sendMsg">
</q-btn>
<div class="" style="max-width: 50px; align-self: center; order: 3">
<q-btn push rounded size="sm" icon="send" @click="sendMsg"> </q-btn>
</div>
</div>
</div>

View File

@@ -1,5 +1,5 @@
<template>
<div class="">
<div class="q-my-sm">
<CNotifAtTop />
<!--<q-banner
rounded
@@ -20,6 +20,7 @@
>
<CFinder
:ind="10"
:table="toolsext.TABMYGROUPS"
:showFilterPersonal="true"
/>

View File

@@ -193,6 +193,7 @@
</div>
</div>
<CTitleBanner
v-if="site.confpages.showCompetenze"
class="" :title="$t('profile.skills')" bgcolor="bg-primary" clcolor="text-white"

View File

@@ -12605,6 +12605,11 @@ vue-scroll-reveal@^1.0.11:
dependencies:
scrollreveal "^4.0.2"
vue-social-sharing@^4.0.0-alpha4:
version "4.0.0-alpha4"
resolved "https://registry.yarnpkg.com/vue-social-sharing/-/vue-social-sharing-4.0.0-alpha4.tgz#48d17f4ff2828c60689f2a065df86588af2bd1fb"
integrity sha512-hMbgpZkY5aRAiznSB/sgzdMVgdSbkmIHEaELX7pUbuUd6KS1Z/GAi7a/q0Qn+GFn0+6qMMvwyp3ZOE0+WYPQ1w==
vue-style-loader@4.1.3:
version "4.1.3"
resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz#6d55863a51fa757ab24e89d9371465072aa7bc35"