ver 0.5.51

This commit is contained in:
Surya Paolo
2023-01-03 16:51:45 +01:00
parent 3f9f608d4e
commit ce4bf65fc4
49 changed files with 1610 additions and 440 deletions

View File

@@ -0,0 +1,12 @@
.signup {
width: 100%;
margin: 0 auto;
max-width: 450px;
}
.wrapper {
display: flex;
align-items: center;
justify-content: center;
}

View File

@@ -0,0 +1,43 @@
import { computed, defineComponent, ref, watch } from 'vue'
import { CSignUp } from '../../../components/CSignUp'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { useUserStore } from '@store/UserStore'
import { useRoute } from 'vue-router'
import { tools } from '@store/Modules/tools'
export default defineComponent({
name: 'SignUpCollettivo',
components: { CSignUp },
props: {},
setup() {
const $route = useRoute()
const adult = ref(false)
const invited = computed(() => $route.params.invited)
const regexpire = computed(() => $route.params.regexpire)
const username_default = computed(() => $route.params.username_default)
const name_default = computed(() => $route.params.name_default)
// @ts-ignore
watch(() => invited, (newval, oldval) => {
console.log('$route.params.invited')
adult.value = !!$route.params.invited
})
function created() {
if (!tools.getCookie(tools.APORTADOR_SOLIDARIO, '')) {
// @ts-ignore
tools.setCookie(tools.APORTADOR_SOLIDARIO, $route.params.invited ? $route.params.invited : '')
}
}
created()
return {
regexpire,
username_default,
name_default,
}
},
})

View File

@@ -0,0 +1,13 @@
<template>
<q-page padding class="signup">
<CSignUp :showcell="false" :showaportador="true" :show_namesurname="true" :need_Telegram="true" :regexpire="regexpire" :collettivo="true" :name_default="name_default" :username_default="username_default">
</CSignUp>
</q-page>
</template>
<script lang="ts" src="./signup_collettivo.ts">
</script>
<style lang="scss" scoped>
@import './signup_collettivo.scss';
</style>

View File

@@ -29,8 +29,55 @@
<div class="q-gutter-sm q-pa-sm q-pb-md">
<div
v-if="myuser && myuser.date_reg"
class="row wrap justify-evenly items-center content-start"
class="fit column no-wrap justify-evenly items-center content-start"
>
<div class="">
<q-avatar size="140px">
<q-img
:src="myuser.profile ? getImgUser(myuser.profile) : ''"
:alt="username"
img-class="imgprofile"
height="140px"
@click="showPic = true"
/>
<q-badge
v-if="tools.isUserOnline(myuser)"
align="top"
floating
color="green"
>online</q-badge
>
</q-avatar>
</div>
<div class="last_access">
OnLine: {{ tools.timeAgo(myuser.lasttimeonline) }}
</div>
<div v-if="myuser.reported">
<CTitleBanner
title="⚠️ L'utente è stato Segnalato per comportamento non idoneo."
bgcolor="bg-red"
clcolor="text-white"
>
</CTitleBanner>
</div>
<div v-if="site && site.confpages && site.confpages.showNameSurname">
<div class="text-h6">
<span v-if="checkifShow('name') && myuser.name">
{{ myuser.name }}</span
>
<span v-if="checkifShow('surname') && myuser.surname"
>&nbsp;{{ myuser.surname }}</span
>
</div>
</div>
<div class="col-12 text-h7 text-blue text-shadow-2">
{{ myuser.username }}
</div>
<br>
<CTitleBanner
v-if="site.confpages.showCompetenze"
class=""
@@ -40,24 +87,10 @@
myclass="myshad"
:canopen="true"
>
<div
class="fit column no-wrap justify-evenly items-center content-start"
>
<div v-if="site.confpages.showNameSurname">
<div class="text-h6">
<span v-if="checkifShow('name') && myuser.name"> {{ myuser.name }}</span>
<span v-if="checkifShow('surname') && myuser.surname">&nbsp;{{
myuser.surname
}}</span>
</div>
</div>
<div class="col-12 text-h7 text-blue text-shadow-2">
{{ myuser.username }}
</div>
</div>
<div v-for="(card, ind) of mycards" :key="ind" :name="card.table">
<div class="text-h6">{{card.title}}</div>
<div class="text-h6">{{ card.title }}</div>
<div v-if="card.table === 'mygroups'">
<q-list>
<span
@@ -65,7 +98,7 @@
:key="index"
class="q-my-sm q-mx-none"
clickable
>
>
<CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS">
</CMyGroup>
</span>

View File

@@ -7,6 +7,7 @@ import { CCheckIfIsLogged } from '@/components/CCheckIfIsLogged'
import { CMyFieldRec } from '@/components/CMyFieldRec'
import { CCurrencyValue } from '@/components/CCurrencyValue'
import { CSaldo } from '@/components/CSaldo'
import { CTitleSec } from '@/components/CTitleSec'
import { CSkill } from '@/components/CSkill'
import { CDateTime } from '@/components/CDateTime'
import { tools } from '@store/Modules/tools'
@@ -29,7 +30,7 @@ import { useCircuitStore } from '@store/CircuitStore'
export default defineComponent({
name: 'mycircuit',
components: {
CProfile, CTitleBanner, CMyFieldRec, CSkill, CDateTime, CMyFriends,
CProfile, CTitleBanner, CMyFieldRec, CSkill, CTitleSec, CDateTime, CMyFriends,
CGridTableRec, CMyUser, CCheckIfIsLogged, CCurrencyValue, CSaldo, CNotifAtTop
},
props: {},
@@ -43,6 +44,8 @@ export default defineComponent({
const showonlymine = ref(true)
const tabellare = ref(false)
const groupsListAdmin = ref(<string[]>[])
const groupnameSel = ref('')
const animation = ref('fade')
@@ -70,11 +73,13 @@ export default defineComponent({
const arrfilterand: any = ref([])
const filterextra: any = ref([])
const filterextra_group: any = ref([])
const filterextra2: any = ref([])
const filtercustom: any = ref([])
const filtercustom_rich: any = ref([])
const searchList = ref([] as ISearchList[])
const cities = ref([] as ICity[])
watch(() => path.value, (to: any, from: any) => {
@@ -117,20 +122,7 @@ export default defineComponent({
];
filterextra.value = [
/*{
'profile.mycircuits':
{
$elemMatch: {
circuitname:
{ $eq: circuit.value.name }
}
}
},
*/
{
filterextra.value = [ {
$match: {
idapp: process.env.APP_ID,
'profile.mycircuits': {
@@ -199,6 +191,68 @@ export default defineComponent({
},
{ $unwind: '$account' },
]
filterextra_group.value = [ {
$match: {
idapp: process.env.APP_ID,
'mycircuits': {
$elemMatch: { circuitname: { $eq: circuit.value.name } },
},
},
},
{
$lookup: {
from: 'circuits',
as: 'circuit',
let: { circuitname: circuit.value.name, idapp: '$idapp' },
pipeline: [
{
$match:
{
$expr:
{
$and:
[
{ $eq: ['$name', '$$circuitname'] },
{ $eq: ['$idapp', '$$idapp'] },
],
},
},
},
],
},
},
{ $unwind: '$circuit' },
{
$project: {
groupname: 1,
title: 1,
descr: 1,
photos: 1,
surname: 1,
admins: 1,
idapp: 1,
'circuit.name': 1, 'circuit._id': 1
}
},
{
$lookup: {
from: 'accounts',
localField: 'circuit._id',
foreignField: 'circuitId',
as: 'account',
},
},
{
$unwind: '$account',
},
{ $match: { 'account.groupname': { $exists: true, $ne: '' } }
},
]
}
arrfilterand.value = []
filtercustom_rich.value = []
@@ -212,6 +266,9 @@ export default defineComponent({
async function mounted() {
await loadCircuit()
if (userStore.my.username)
groupsListAdmin.value = userStore.GroupsListWhereIAmAdmin(userStore.my.username)
}
function getImgCircuit() {
@@ -257,6 +314,30 @@ export default defineComponent({
}
}
function extraparams_groups() {
const lk_tab = 'mygroups'
const lk_LF = 'userId'
const lk_FF = '_id'
const lk_as = 'group'
const af_objId_tab = 'myId'
return {
lookup1: {
lk_tab,
lk_LF,
lk_FF,
lk_as,
af_objId_tab,
lk_proj: {
groupname: 1,
title: 1,
descr: 1,
photos: 1,
}
},
}
}
function extraparams_rich() {
return {
querytype: shared_consts.QUERYTYPE_CIRCUIT,
@@ -349,6 +430,10 @@ export default defineComponent({
showonlymine,
tabellare,
showsaldi,
extraparams_groups,
filterextra_group,
groupsListAdmin,
groupnameSel,
}
}
})

View File

@@ -67,8 +67,10 @@
</CSaldo>
<div>
<q-banner
v-if="userStore.my.profile.calc.numGoodsAndServices <= 0 &&
userStore.IsMyCircuitByName(circuit.name)"
v-if="
userStore.my.profile.calc.numGoodsAndServices <= 0 &&
userStore.IsMyCircuitByName(circuit.name)
"
rounded
class="bg-orange text-white"
style="text-align: center"
@@ -107,7 +109,8 @@
</q-banner>
<q-btn
v-if="userStore.my.profile.calc.numGoodsAndServices > 0 &&
v-if="
userStore.my.profile.calc.numGoodsAndServices > 0 &&
!userStore.IsMyCircuitByName(circuit.name) &&
!userStore.IsAskedCircuitByName(circuit.name) &&
!userStore.IsRefusedCircuitByName(circuit.name)
@@ -115,7 +118,10 @@
icon="fas fa-user-plus"
color="primary"
:label="$t('circuit.ask')"
@click="requestToEnterCircuit = true"
@click="
requestToEnterCircuit = true;
groupnameSel = null;
"
/>
<q-btn
v-if="userStore.IsMyCircuitByName(circuit.name)"
@@ -222,16 +228,100 @@
icon="fas fa-file-word"
></q-tab>
<q-tab
v-if="tools.iAmAdminCircuit(circuit.name)"
:label="t('circuit.conticomunitari')"
name="accounts"
v-if="false && tools.iAmAdminCircuit(circuit.name)"
:label="t('circuit.gruppicom')"
name="gruppicom"
icon="fas fa-coins"
></q-tab>
</q-tabs>
<q-tab-panels v-model="tabcircuit" animated>
<q-tab-panel name="accounts">
<q-tab-panel name="gruppicom">
<div
v-for="(group, ind) of groupsListAdmin"
:key="ind"
class="q-pa-sm"
>
<q-btn
v-if="group.groupname &&
!circuitStore.IsAskedCircuitByNameAndGroup(
circuit.name,
group.groupname
) &&
!userStore.IsMyCircuitByNameAndGroup(
circuit.name,
group.groupname
)
"
icon="fas fa-user-plus"
color="primary"
:label="$t('circuit.ask') + ' con ' + group.groupname"
@click="
requestToEnterCircuit = true;
groupnameSel = group;
"
/>
<q-btn
v-else-if="group.groupname && circuitStore.IsAskedCircuitByNameAndGroup(
circuit.name,
group.groupname
) &&
!userStore.IsMyCircuitByNameAndGroup(
circuit.name,
group.groupname
)"
icon="fas fa-user-minus"
flat
:label="$t('shared.cancel_ask_short')"
@click="
tools.cancelReqCircuit(
$q,
userStore.my.username,
circuit.name,
group.groupname,
)
"
/>
</div>
<CTitleSec title="Lista Gruppi Comunitari" />
<CGridTableRec
v-if="!loading"
ref="tabGroups"
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="
showsaldi ? colmyUserPeopleSaldi : colmyUserPeople
"
prop_colkey="_id"
col_title="groupname"
:vertical="costanti.VISUTABLE_GROUP_CIRCUIT"
nodataLabel="Nessun Gruppo Comunitario"
:prop_search="true"
hint="gruppo da trovare"
:finder="false"
:choose_visutype="true"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="gruppo non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:filterextra="filterextra_group"
:filterextra2="filterextra2"
:prop_searchList="searchList"
:showType="costanti.SHOW_GROUPINFO"
:showCol="false"
:circuitname="circuit.name"
extraparams=""
:visufind="
tools.iAmAdminCircuit(circuit.name)
? costanti.REQ_REMOVE_USER_TO_CIRCUIT
: costanti.FIND_PEOPLE
"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="mov">
<q-toggle
@@ -418,6 +508,36 @@
>
</CCurrencyValue>
</div>
<div
v-if="circuit.fido_scoperto_default_grp"
class="sezioni"
>
<CCurrencyValue
:symbol="tools.getSymbolByCircuit(circuit)"
:color="tools.getColorByCircuit(circuit)"
color_border="red"
:value="circuit.fido_scoperto_default_grp"
icon="fas fa-battery-quarter"
:label="t('circuit.fido_scoperto_default_grp')"
:tips="t('circuit.fido_scoperto_default_tips_grp')"
>
</CCurrencyValue>
</div>
<div
v-if="circuit.fido_scoperto_default_grp"
class="sezioni"
>
<CCurrencyValue
:symbol="tools.getSymbolByCircuit(circuit)"
:color="tools.getColorByCircuit(circuit)"
color_border="green"
:value="circuit.qta_max_default_grp"
icon="fas fa-battery-quarter"
:label="t('circuit.qta_max_default_grp')"
:tips="t('circuit.qta_max_default_tips_grp')"
>
</CCurrencyValue>
</div>
</div>
<div class="sezioni">
<q-icon name="fas fa-stats" class="iconcirc"></q-icon>
@@ -701,6 +821,9 @@
<!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">-->
<q-toolbar-title>
{{ circuit.name }}
<div v-if="groupnameSel">
Gruppo: {{ groupnameSel.groupname }}
</div>
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
@@ -708,7 +831,9 @@
<div v-html="t('circuit.disclaimer')"></div>
</q-card-section>
<q-card-section class="inset-shadow">
<div style="font-weight: bold; font-size: 1.25rem;">Regolamento:</div>
<div style="font-weight: bold; font-size: 1.25rem">
Regolamento:
</div>
<div v-html="circuit.regulation"></div>
</q-card-section>
<q-card-actions align="center">
@@ -723,7 +848,8 @@
$q,
userStore.my.username,
circuit.name,
true
true,
groupnameSel ? groupnameSel.groupname : ''
);
"
/>

View File

@@ -7,6 +7,7 @@ import { CCheckIfIsLogged } from '@/components/CCheckIfIsLogged'
import { CMyFieldRec } from '@/components/CMyFieldRec'
import { CSkill } from '@/components/CSkill'
import { CDateTime } from '@/components/CDateTime'
import { CSaldo } from '@/components/CSaldo'
import { tools } from '@store/Modules/tools'
import { computed, defineComponent, onMounted, ref, watch } from 'vue'
import { useUserStore } from '@store/UserStore'
@@ -16,19 +17,22 @@ import { useI18n } from '@/boot/i18n'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
import { ICity, IFriends, IMyGroup, ISearchList, IUserFields } from 'model'
import { ICircuit, ICity, IFriends, IMyCircuit, IMyGroup, ISearchList, IUserFields } from 'model'
import { shared_consts } from '@/common/shared_vuejs'
import { colmyUserPeople, colmyUserGroup } from '@store/Modules/fieldsTable'
import { useNotifStore } from '@store/NotifStore'
import { useCircuitStore } from '@src/store/CircuitStore'
export default defineComponent({
name: 'mygroup',
components: { CProfile, CTitleBanner, CMyFieldRec, CSkill, CDateTime, CMyFriends, CGridTableRec, CMyUser, CCheckIfIsLogged },
components: { CProfile, CTitleBanner, CMyFieldRec,
CSaldo, CSkill, CDateTime, CMyFriends, CGridTableRec, CMyUser, CCheckIfIsLogged },
props: {},
setup() {
const userStore = useUserStore()
const notifStore = useNotifStore()
const circuitStore = useCircuitStore()
const $route = useRoute()
const $q = useQuasar()
const { t } = useI18n()
@@ -41,7 +45,7 @@ export default defineComponent({
const filtroutente = ref(<any[]>[])
const showPic = ref(false)
const mygrp = ref(<IMyGroup|null>{})
const mygrp = ref(<IMyGroup | null>{})
const mystatus = ref(<number>0)
const users_in_group = ref(<IFriends[]>[])
@@ -58,6 +62,8 @@ export default defineComponent({
const cities = ref(<ICity[]>[])
const circuitslist = ref(<ICircuit[] | null | undefined>[])
function profile() {
return userStore.my.profile
}
@@ -69,13 +75,18 @@ export default defineComponent({
async function loadGroup() {
// Carica il profilo di quest'utente
if (groupname.value) {
await userStore.loadGroup(groupname.value, idnotif.value).then(({ data, status }: {data: any, status: number}) => {
await userStore.loadGroup(groupname.value, idnotif.value).then(({ data, status }: { data: any, status: number }) => {
console.log('data', data)
circuitslist.value = []
if (data) {
mygrp.value = data.mygroup
cities.value = data.cities
notifStore.setAsRead(idnotif.value)
users_in_group.value = data.users_in_group
if (mygrp.value && tools.iAmAdminGroup(groupname.value)) {
circuitslist.value = circuitStore.getCircuitsListByGroup(mygrp.value)
}
} else {
mygrp.value = null
users_in_group.value = []
@@ -99,7 +110,7 @@ export default defineComponent({
await loadGroup()
searchList.value = []
filtercustom.value = [{ 'profile.mygroups': { $elemMatch: {groupname: {$eq: groupname.value }} } } ]
filtercustom.value = [{ 'profile.mygroups': { $elemMatch: { groupname: { $eq: groupname.value } } } }]
arrfilterand.value = []
filtercustom_rich.value = []
@@ -236,6 +247,7 @@ export default defineComponent({
loading,
mystatus,
cities,
circuitslist,
}
}
})

View File

@@ -1,35 +1,45 @@
<template>
<div class="q-gutter-sm q-pa-sm q-pb-md">
<div v-if="!mygrp && !loading">
<div v-if="mystatus === 403">
<h3>Non hai i permessi per accedere al Gruppo.<br>
<h3>
Non hai i permessi per accedere al Gruppo.<br />
Occorre prima registrarsi alla App </h3>
Occorre prima registrarsi alla App
</h3>
</div>
<div v-else>
<h3>Gruppo non Esistente</h3>
</div>
</div>
<div v-else>
<div v-if="!tools.isLogged()">
<CCheckIfIsLogged></CCheckIfIsLogged>
</div>
<div>
<div v-if="mygrp.descr" class="fit column no-wrap justify-evenly items-center content-start">
<div
v-if="mygrp.descr"
class="fit column no-wrap justify-evenly items-center content-start"
>
<div class="">
<q-avatar size="140px">
<q-img :src="getImgGrp()" :alt="mygrpname()" img-class="imgprofile" height="140px" @click="showPic = true"/>
<q-img
:src="getImgGrp()"
:alt="mygrpname()"
img-class="imgprofile"
height="140px"
@click="showPic = true"
/>
</q-avatar>
</div>
<div class="text-h6">
<span v-if="checkifShow('name')"> {{ mygrp.title }}</span>
</div>
<div v-if="mygrp.title !== mygrp.groupname" class="col-12 text-h7 text-blue text-shadow-2">
<div
v-if="mygrp.title !== mygrp.groupname"
class="col-12 text-h7 text-blue text-shadow-2"
>
{{ mygrp.groupname }}
</div>
@@ -37,58 +47,111 @@
v-if="userStore.IsRefusedGroupByGroupname(mygrp.groupname)"
rounded
class="bg-red text-white"
style="text-align: center;"
style="text-align: center"
>
<em style="font-weight: bold">{{ $t('db.youarerefusedgroup') }}</em><br>
<em style="font-weight: bold">{{ $t('db.youarerefusedgroup') }}</em
><br />
</q-banner>
<div>
<q-btn
v-if="!userStore.IsMyGroupByGroupname(mygrp.groupname) && !userStore.IsAskedGroupByGroupname(mygrp.groupname) && !userStore.IsRefusedGroupByGroupname(mygrp.groupname)"
v-if="
!userStore.IsMyGroupByGroupname(mygrp.groupname) &&
!userStore.IsAskedGroupByGroupname(mygrp.groupname) &&
!userStore.IsRefusedGroupByGroupname(mygrp.groupname)
"
icon="fas fa-user-plus"
color="primary" :label="$t('groups.ask_group')"
@click="tools.setRequestGroup($q, userStore.my.username, mygrp.groupname, true)"
color="primary"
:label="$t('groups.ask_group')"
@click="
tools.setRequestGroup(
$q,
userStore.my.username,
mygrp.groupname,
true
)
"
/>
<q-btn
v-if="userStore.IsMyGroupByGroupname(mygrp.groupname)"
rounded icon="fas fa-ellipsis-h">
rounded
icon="fas fa-ellipsis-h"
>
<q-menu>
<q-list v-if="true" style="min-width: 150px">
<q-item clickable v-close-popup
@click="tools.removeFromMyGroups($q, userStore.my.username, mygrp.groupname, $t('db.domanda_exit_fromgroup', {groupname: mygrp.groupname }))">
<q-item
clickable
v-close-popup
@click="
tools.removeFromMyGroups(
$q,
userStore.my.username,
mygrp.groupname,
$t('db.domanda_exit_fromgroup', {
groupname: mygrp.groupname,
})
)
"
>
<q-item-section avatar>
<q-icon color="negative" name="fas fa-user-minus"/>
<q-icon color="negative" name="fas fa-user-minus" />
</q-item-section>
<q-item-section>{{ $t('groups.exit_group') }}</q-item-section>
<q-item-section>{{
$t('groups.exit_group')
}}</q-item-section>
</q-item>
<q-list v-if="tools.iAmAdminGroup(mygrp.groupname)" style="min-width: 200px">
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.DELETE_GROUP, userStore.my.username, '', mygrp.groupname)">
<q-list
v-if="tools.iAmAdminGroup(mygrp.groupname)"
style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.DELETE_GROUP,
userStore.my.username,
'',
mygrp.groupname
)
"
>
<q-item-section avatar>
<q-icon color="negative" name="fas fa-trash-alt"/>
<q-icon color="negative" name="fas fa-trash-alt" />
</q-item-section>
<q-item-section>{{ $t('groups.delete_group') }}</q-item-section>
<q-item-section>{{
$t('groups.delete_group')
}}</q-item-section>
</q-item>
</q-list>
</q-list>
</q-menu>
</q-btn>
<q-btn
v-if="userStore.IsAskedGroupByGroupname(mygrp.groupname) && !userStore.IsMyGroupByGroupname(mygrp.groupname)"
v-if="
userStore.IsAskedGroupByGroupname(mygrp.groupname) &&
!userStore.IsMyGroupByGroupname(mygrp.groupname)
"
icon="fas fa-user-minus"
flat :label="$t('shared.cancel_ask_short')"
@click="tools.cancelReqGroups($q, userStore.my.username, mygrp.groupname)"
flat
:label="$t('shared.cancel_ask_short')"
@click="
tools.cancelReqGroups(
$q,
userStore.my.username,
mygrp.groupname
)
"
/>
</div>
</div>
<div v-if="mygrp.descr" class="no-wrap justify-evenly items-center content-start">
<div
v-if="mygrp.descr"
class="no-wrap justify-evenly items-center content-start"
>
<!--
<q-btn
v-if="tools.iAmAdminGroup(groupname)" icon="fas fa-pencil-alt"
@@ -100,10 +163,35 @@
-->
<q-tabs v-model="tabgrp" class="text-blue">
<q-tab :label="t('shared.info1')" name="info" icon="fas fa-info"></q-tab>
<q-tab v-if="!!mygrp.note" :label="t('groups.page')" name="page" icon="fas fa-file-word"></q-tab>
<q-tab v-if="tools.iCanShowGroupsMember(mygrp) || tools.iAmAdminGroup(groupname)"
:label="t('shared.subscribes')" name="members" icon="fas fa-users"></q-tab>
<q-tab
:label="t('shared.info1')"
name="info"
icon="fas fa-info"
></q-tab>
<q-tab
v-if="!!mygrp.note"
:label="t('groups.page')"
name="page"
icon="fas fa-file-word"
></q-tab>
<q-tab
v-if="
tools.iCanShowGroupsMember(mygrp) ||
tools.iAmAdminGroup(groupname)
"
:label="t('shared.subscribes')"
name="members"
icon="fas fa-users"
></q-tab>
<q-tab
v-if="
tools.iCanShowGroupsMember(mygrp) ||
tools.iAmAdminGroup(groupname)
"
:label="t('groups.circuits')"
name="circuits"
icon="fas fa-coins"
></q-tab>
</q-tabs>
<q-tab-panels v-model="tabgrp" animated>
@@ -114,39 +202,66 @@
<div class="text-h6">{{ t('groups.info') }}</div>
</q-card-section>
<q-separator/>
<q-separator />
<q-card-section>
<div class="element">
<q-icon name="fas fa-lightbulb"></q-icon>
{{ $t('shared.createdby', {
username: mygrp.createdBy,
date: tools.getstrDateYY(mygrp.date_created), })
{{
$t('shared.createdby', {
username: mygrp.createdBy,
date: tools.getstrDateYY(mygrp.date_created),
})
}}
</div>
<div v-if="!!mygrp.date_updated && tools.getstrshortDate(mygrp.date_updated) !== tools.getstrshortDate(mygrp.createdBy)" class="element">
<div
v-if="
!!mygrp.date_updated &&
tools.getstrshortDate(mygrp.date_updated) !==
tools.getstrshortDate(mygrp.createdBy)
"
class="element"
>
<q-icon name="fas fa-pencil-alt"></q-icon>
{{ $t('shared.lastmodify', {
date: tools.getstrDateYY(mygrp.date_updated), })
{{
$t('shared.lastmodify', {
date: tools.getstrDateYY(mygrp.date_updated),
})
}}
</div>
<div v-if="mygrp.visibility.includes(shared_consts.Visibility_Group.PRIVATE)" class="row">
<div
v-if="
mygrp.visibility.includes(
shared_consts.Visibility_Group.PRIVATE
)
"
class="row"
>
<div class="q-pa-xs">
<q-icon name="fas fa-lock"></q-icon>
</div>
<div>
<div class="title_param"> {{ $t('groups.private') }}</div>
<div class="title_param">
{{ $t('groups.private') }}
</div>
{{ $t('groups.private_descr') }}
</div>
</div>
<div v-if="mygrp.visibility.includes(shared_consts.Visibility_Group.HIDDEN)" class="row">
<div
v-if="
mygrp.visibility.includes(
shared_consts.Visibility_Group.HIDDEN
)
"
class="row"
>
<div class="q-pa-xs">
<q-icon name="fas fa-eye-slash"></q-icon>
</div>
<div>
<div class="title_param"> {{ $t('groups.hidden') }}</div>
<div class="title_param">{{ $t('groups.hidden') }}</div>
{{ $t('groups.hidden_descr') }}
</div>
</div>
@@ -166,11 +281,21 @@
<div class="members">
<q-icon name="fas fa-users"></q-icon>
{{ numUsers() }} {{ numUsers() === 1 ? t('shared.member') : t('shared.members') }}
{{ numUsers() }}
{{
numUsers() === 1
? t('shared.member')
: t('shared.members')
}}
</div>
<div class="admins">
<q-icon name="fas fa-user-cog"></q-icon>
{{ numAdmins() }} {{ numAdmins() === 1 ? t('shared.admin') : t('shared.admins') }}
{{ numAdmins() }}
{{
numAdmins() === 1
? t('shared.admin')
: t('shared.admins')
}}
</div>
<div v-for="(user, index) of mygrp.admins" :key="index">
<CMyUser
@@ -183,13 +308,13 @@
</q-card-section>
</q-card>
<br>
<br />
</div>
<q-card v-if="mygrp.title">
<q-card-section>
<div class="text-h6">Descrizione:</div>
</q-card-section>
<q-separator/>
<q-separator />
<q-card-section>
<div class="col-12 text-h7">
@@ -197,187 +322,215 @@
</div>
<div class="col-6 q-ma-xs">
<q-btn
v-if="getLinkGrpTelegram()" icon="fab fa-telegram"
color="blue" type="a"
v-if="getLinkGrpTelegram()"
icon="fab fa-telegram"
color="blue"
type="a"
size="md"
rounded
:label="$t('msgs.telegrammsg')"
:href="getLinkGrpTelegram()" target="__blank">
:href="getLinkGrpTelegram()"
target="__blank"
>
</q-btn>
</div>
<div class="col-6 q-ma-xs">
<q-btn
v-if="getLinkWebSite()" icon="fas fa-globe"
color="blue" type="a"
v-if="getLinkWebSite()"
icon="fas fa-globe"
color="blue"
type="a"
size="md"
rounded
:label="$t('reg.website')"
:href="getLinkWebSite()" target="__blank">
:href="getLinkWebSite()"
target="__blank"
>
</q-btn>
</div>
</q-card-section>
</q-card>
</q-tab-panel>
<q-tab-panel name="page">
<div v-if="mygrp.note">
<br>
<br />
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<div v-if="mygrp.note" v-html="mygrp.note">
</div>
<div v-if="mygrp.note" v-html="mygrp.note"></div>
</div>
</div>
</q-tab-panel>
<q-tab-panel name="members" style="max-width: 500px;" v-if="tools.iCanShowGroupsMember(mygrp)">
<q-tab-panel
name="members"
style="max-width: 500px"
v-if="tools.iCanShowGroupsMember(mygrp)"
>
<q-tabs
v-show="tools.iAmAdminGroup(groupname)"
v-model="tabmembers" class="text-blue">
v-model="tabmembers"
class="text-blue"
>
<q-tab label="Tutti" name="all" icon="fas fa-users"></q-tab>
<q-tab v-if="tools.iAmAdminGroup(groupname)" label="Richieste" name="rich" icon="fas fa-user-plus"></q-tab>
<q-tab v-if="tools.iAmAdminGroup(groupname)" label="Rifiutati" name="refused" icon="fas fa-user-minus"></q-tab>
<q-tab
v-if="tools.iAmAdminGroup(groupname)"
label="Richieste"
name="rich"
icon="fas fa-user-plus"
></q-tab>
<q-tab
v-if="tools.iAmAdminGroup(groupname)"
label="Rifiutati"
name="refused"
icon="fas fa-user-minus"
></q-tab>
</q-tabs>
<q-tab-panels v-model="tabmembers" animated>
<q-tab-panel name="all">
<CGridTableRec
ref="tabMembri"
prop_mytable="users"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessun Iscritto"
:prop_search="true"
hint="Username da trovare"
:finder="false"
:choose_visutype="true"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
:showCol="false"
:extrafield="groupname"
:extraparams="extraparams()"
:visufind="tools.iAmAdminGroup(groupname) ? costanti.REQ_REMOVE_USER_TO_GROUP : costanti.FIND_PEOPLE"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="rich">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title=""
:vertical="costanti.VISUTABLE_USER_TABGROUP"
nodataLabel="Nessuna Richiesta in sospeso"
:prop_search="false"
hint="Username da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extraparams="extraparams_rich()"
:extrafield="groupname"
:visufind="costanti.REQ_ADD_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="refused">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title=""
:vertical="costanti.VISUTABLE_USER_TABGROUP"
nodataLabel="Nessun utente Rifiutato"
:prop_search="false"
hint="Username da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extraparams="extraparams_refused()"
:extrafield="groupname"
:visufind="costanti.REQ_ADD_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="all">
<CGridTableRec
ref="tabMembri"
prop_mytable="users"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title="username"
:vertical="costanti.VISUTABLE_LISTA"
nodataLabel="Nessun Iscritto"
:prop_search="true"
hint="Username da trovare"
:finder="false"
:choose_visutype="true"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
:showCol="false"
:extrafield="groupname"
:extraparams="extraparams()"
:visufind="
tools.iAmAdminGroup(groupname)
? costanti.REQ_REMOVE_USER_TO_GROUP
: costanti.FIND_PEOPLE
"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="rich">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title=""
:vertical="costanti.VISUTABLE_USER_TABGROUP"
nodataLabel="Nessuna Richiesta in sospeso"
:prop_search="false"
hint="Username da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extraparams="extraparams_rich()"
:extrafield="groupname"
:visufind="costanti.REQ_ADD_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
<q-tab-panel name="refused">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
:prop_mycolumns="colmyUserPeople"
prop_colkey="_id"
col_title=""
:vertical="costanti.VISUTABLE_SCHEDA_GROUP"
nodataLabel="Nessun utente Rifiutato"
:prop_search="false"
hint="Username da trovare"
:finder="false"
:choose_visutype="false"
:finder_noNull="false"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom_rich"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
keyMain=""
:showCol="false"
:extraparams="extraparams_refused()"
:extrafield="groupname"
:visufind="costanti.REQ_ADD_USER_TO_GROUP"
>
</CGridTableRec>
</q-tab-panel>
</q-tab-panels>
</q-tab-panel>
<q-tab-panel name="circuits">
<div v-for="(circuit, ind) of circuitslist" :key="ind">
circuit.account: {{ circuit.account}}
<CSaldo
:account="circuit.account"
:symbol="circuit.symbol"
:color="circuit.color"
:saldo="circuit.account"
:qtarem="circuit.account ? circuitStore.getRemainingCoinsToSend(circuit.account) : 0"
>
</CSaldo>
</div>
</q-tab-panel>
</q-tab-panels>
</div>
<div v-else class="fit column no-wrap justify-evenly items-center content-start">
<q-skeleton type="QAvatar" size="140px" height="140px" animation="fade"/>
<div
v-else
class="fit column no-wrap justify-evenly items-center content-start"
>
<q-skeleton
type="QAvatar"
size="140px"
height="140px"
animation="fade"
/>
<q-card flat bordered style="width: 250px">
<div class="text-h6">
<q-skeleton :animation="animation"/>
<q-skeleton :animation="animation" />
</div>
<div class="col-12 text-h7 text-grey text-center">
{{ groupname }}
</div>
<div class="col-12 text-h7">
<q-skeleton :animation="animation"/>
<q-skeleton :animation="animation" />
</div>
<div class="col-12 text-h8 q-mt-sm">
<q-skeleton :animation="animation"/>
<q-skeleton :animation="animation" />
</div>
<div class="col-12 text-h8 q-mt-sm">
<q-skeleton :animation="animation"/>
<q-skeleton :animation="animation" />
</div>
</q-card>
</div>
</div>
<q-dialog
v-model="showPic"
full-height full-width
>
<img :src="getImgGrp()" :alt="groupname" class="full-width">
<q-dialog v-model="showPic" full-height full-width>
<img :src="getImgGrp()" :alt="groupname" class="full-width" />
</q-dialog>
</div>
</div>
</template>
<script lang="ts" src="./mygroup.ts">

View File

@@ -294,14 +294,14 @@
size="md"
color="orange"
:label="$t('profile.myactivities')"
:to="`/skills/` + myuser.username"
:to="`/attivita/` + myuser.username"
>
</q-btn>
</div>
<div class="col-md-6 col-sm-6 q-ma-xs col-xs-12">
<q-btn
v-if="
userStore.IsMyCircuitByUser(myuser).length > 0 &&
userStore.getMyCircuitsInCommonByUser(myuser).length > 0 &&
myuser.username !== myusername() &&
userStore.my.profile.calc.numGoodsAndServices > 0
"