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

@@ -1,4 +1,4 @@
APP_VERSION="0.5.49" APP_VERSION="0.5.51"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.5.49" APP_VERSION="0.5.51"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.5.49" APP_VERSION="0.5.51"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.5.49" APP_VERSION="0.5.51"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="0.5.49" APP_VERSION="0.5.51"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="14" APP_ID="14"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -82,6 +82,8 @@ export default {
darkcookie.value = tools.getCookie('darkmode', false, false, false) === '-1' darkcookie.value = tools.getCookie('darkmode', false, false, false) === '-1'
scroll() scroll()
tools.initprompt()
tools.checkApp() tools.checkApp()
} }

View File

@@ -1 +1 @@
/home/paolo/myproject/freeplanet_serverside/src/server/tools/shared_nodejs.js ../../../freeplanet_serverside/src/server/tools/shared_nodejs.js

View File

@@ -171,8 +171,8 @@ export const shared_consts = {
TABLES_WITH_SORTING: ['mybachecas', 'myhosps'], TABLES_WITH_SORTING: ['mybachecas', 'myhosps'],
TABLES_REC_ID: ['skills', 'goods', 'subskills', 'myskills', 'mybachecas', 'myhosps', 'mygoods'], TABLES_REC_ID: ['skills', 'goods', 'subskills', 'myskills', 'mybachecas', 'myhosps', 'mygoods'],
// costanti.VISUTABLE_SCHEDA_USER, VISUTABLE_SCHEDA_GROUP, VISUTABLE_USER_TABGROUP, VISUTABLE_USER_TABCIRCUIT // costanti.VISUTABLE_SCHEDA_USER, VISUTABLE_SCHEDA_GROUP, VISUTABLE_USER_TABGROUP, VISUTABLE_USER_TABCIRCUIT, VISUTABLE_GROUP_CIRCUIT
VERTIC_SHOW_GRID: [-1, 2, -3, -4, -5], VERTIC_SHOW_GRID: [-1, 2, -3, -4, -5, -6],
TABLES_UPDATE_LASTIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots'], TABLES_UPDATE_LASTIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots'],
TABLES_FINDER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups'], TABLES_FINDER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups'],
@@ -1216,6 +1216,11 @@ export const shared_consts = {
FASE3_MONETA_ABILITATA: 3, FASE3_MONETA_ABILITATA: 3,
}, },
CIRCUIT_PARAMS: {
SCOPERTO_MIN_GRP: 200,
SCOPERTO_MAX_GRP: 500,
},
FontsInstalled: [ FontsInstalled: [
{ {
label: 'Arial', label: 'Arial',

View File

@@ -25,22 +25,24 @@ export default defineComponent({
const deferredPrompt = computed(() => globalStore.deferredPrompt) const deferredPrompt = computed(() => globalStore.deferredPrompt)
function initprompt() {
window.addEventListener('beforeinstallprompt', (event) => {
event.preventDefault()
console.log('beforeinstallprompt !')
// Stash the event so it can be triggered later.
globalStore.deferredPrompt = event
})
}
function installApp() { function installApp() {
if (globalStore.deferredPrompt) if (globalStore.deferredPrompt) {
globalStore.deferredPrompt.prompt() globalStore.deferredPrompt.prompt()
// Wait for the user to respond to the prompt
globalStore.deferredPrompt.userChoice.then((choiceResult: any)=>{
if (choiceResult.outcome === 'accepted') {
globalStore.deferredPrompt = null;
// console.log('User accepted the A2HS prompt');
} else {
// console.log('User dismissed the A2HS prompt');
}
});
}
} }
function mounted() { function mounted() {
initprompt()
tools.checkApp() tools.checkApp()
} }

View File

@@ -9,8 +9,8 @@
</q-chip> </q-chip>
</div> </div>
<div v-else> <div v-else>
<div v-if="value !== null" :class="`text-h5 ` + small ? `bordo_stondato_small`: `bordo_stondato_stretto` + ` full-width`" <div v-if="value !== null" :class="`text-h5 ` + (small ? `bordo_stondato_small`: `bordo_stondato_stretto`) + ` full-width`"
:style="(!$q.screen.lt.sm && !small ? `min-width: 250px; ` : small ? ` max-width: 120px;` : ``) + (color_border ? `border-color: ` + color_border + `!important;`: '')"> :style="(!$q.screen.lt.sm && !small ? `min-width: 250px; ` : (small ? ` max-width: 120px;` : ``)) + (color_border ? `border-color: ` + color_border + `!important;`: '')">
<div class="text-center text-h7-dense text-italic text-grey-14"> <div class="text-center text-h7-dense text-italic text-grey-14">
<span v-if="small"> <span v-if="small">
<em class="q-px-xs text-white rounded-borders" :style="`background-color: ` + (color ? color : '#ff5500')">{{ symbol }}</em> <em class="q-px-xs text-white rounded-borders" :style="`background-color: ` + (color ? color : '#ff5500')">{{ symbol }}</em>
@@ -41,7 +41,7 @@
<q-icon v-else name="fas fa-coins" :size="small ? `xs`: `sm`"/> <q-icon v-else name="fas fa-coins" :size="small ? `xs`: `sm`"/>
</template> </template>
<template v-slot:control> <template v-slot:control>
<div :class="`align_elem_right `+ small ? `text-h7` : ``">{{ valueextra }}{{ tools.roundDec2(value) }} <div :class="`align_elem_right `+ (small ? `text-h7` : ``)">{{ valueextra }}{{ tools.roundDec2(value) }}
<q-tooltip :offset="[10, 10]" v-model="showingtooltip">{{ tips }}</q-tooltip> <q-tooltip :offset="[10, 10]" v-model="showingtooltip">{{ tips }}</q-tooltip>
</div> </div>
</template> </template>

View File

@@ -135,8 +135,8 @@ export default defineComponent({
*/ */
watch(() => myrecfiltertoggle.value, (value: any, oldval: any) => { watch(() => myrecfiltertoggle.value, (value: any, oldval: any) => {
updatefilter(value) updatefilter(value)
}, },
) )
const mypagination = computed(() => { const mypagination = computed(() => {
@@ -1115,6 +1115,8 @@ export default defineComponent({
status: 1, status: 1,
transactionsEnabled: 1, transactionsEnabled: 1,
qta_max_default: 1, qta_max_default: 1,
fido_scoperto_default_grp: 1,
qta_max_default_grp: 1,
valuta_per_euro: 1, valuta_per_euro: 1,
symbol: 1, symbol: 1,
idCity: 1, idCity: 1,
@@ -1239,7 +1241,7 @@ export default defineComponent({
username: 1, username: 1,
name: 1, name: 1,
surname: 1, surname: 1,
lasttimeonline: 1, lasttimeonline: 1,
comune: 1, comune: 1,
mycities: 1, mycities: 1,
'profile.img': 1, 'profile.img': 1,
@@ -1310,7 +1312,7 @@ lasttimeonline: 1,
username: 1, username: 1,
name: 1, name: 1,
surname: 1, surname: 1,
lasttimeonline: 1, lasttimeonline: 1,
comune: 1, comune: 1,
mycities: 1, mycities: 1,
'profile.img': 1, 'profile.img': 1,
@@ -1358,7 +1360,7 @@ lasttimeonline: 1,
username: 1, username: 1,
name: 1, name: 1,
surname: 1, surname: 1,
lasttimeonline: 1, lasttimeonline: 1,
comune: 1, comune: 1,
mycities: 1, mycities: 1,
'profile.img': 1, 'profile.img': 1,

View File

@@ -321,6 +321,7 @@
:offset="350" :offset="350"
debounce="300" debounce="300"
> >
<div v-if="showHeaderCol"> <div v-if="showHeaderCol">
<div <div
v-for="col in mycolumns" v-for="col in mycolumns"
@@ -417,15 +418,16 @@
</div> </div>
<div <div
v-else-if=" v-else-if="
(showType === costanti.SHOW_GROUPINFO && ((showType === costanti.SHOW_GROUPINFO &&
myvertical !== costanti.VISUTABLE_SCHEDA_GROUP) || myvertical !== costanti.VISUTABLE_SCHEDA_GROUP) ||
(myvertical === 2 && tablesel === 'mygroups') (myvertical === 2 && tablesel === 'mygroups')) || (myvertical === costanti.VISUTABLE_GROUP_CIRCUIT)
" "
class="fill-all-width" class="fill-all-width"
> >
<div> <div>
<CMyGroups <CMyGroups
v-model="filtergrp" v-model="filtergrp"
:circuitname="circuitname"
:finder="false" :finder="false"
:mygrp="row" :mygrp="row"
:visu="costanti.FIND_GROUP" :visu="costanti.FIND_GROUP"

View File

@@ -1,6 +1,6 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue' import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
import { IMyGroup, IImgGallery, IUserFields, IUserProfile, IFriends } from 'model' import { IMyGroup, IImgGallery, IUserFields, IUserProfile, IFriends, ICircuit, IAccount } from 'model'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import { shared_consts } from '@/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
@@ -9,11 +9,14 @@ import { useI18n } from '@/boot/i18n'
import { useRoute, useRouter } from 'vue-router' import { useRoute, useRouter } from 'vue-router'
import { CUserNonVerif } from '@/components/CUserNonVerif' import { CUserNonVerif } from '@/components/CUserNonVerif'
import { toolsext } from '@store/Modules/toolsext' import { toolsext } from '@store/Modules/toolsext'
import { CSaldo } from '@/components/CSaldo'
import { CSendCoins } from '@/components/CSendCoins'
import { useCircuitStore } from '@store/CircuitStore'
export default defineComponent({ export default defineComponent({
name: 'CMyGroup', name: 'CMyGroup',
emits: ['setCmd'], emits: ['setCmd'],
components: {CUserNonVerif}, components: {CUserNonVerif, CSaldo, CSendCoins},
props: { props: {
mygrp: { mygrp: {
type: Object as PropType<IMyGroup | null>, type: Object as PropType<IMyGroup | null>,
@@ -28,7 +31,12 @@ export default defineComponent({
visu: { visu: {
type: Number, type: Number,
required: true, required: true,
} },
circuitname: {
type: String,
required: false,
default: '',
},
}, },
setup(props, { emit }) { setup(props, { emit }) {
@@ -40,11 +48,16 @@ export default defineComponent({
const $route = useRoute() const $route = useRoute()
const groupname = ref('') const groupname = ref('')
const circuitStore = useCircuitStore()
const showsendCoinTo = ref(false)
const grp = ref(<IMyGroup | null>null) const grp = ref(<IMyGroup | null>null)
const table = ref(toolsext.TABMYGROUPS) const table = ref(toolsext.TABMYGROUPS)
const circuit = ref(<ICircuit | null | undefined>null)
watch(() => props.mygrp, (newval, oldval) => { watch(() => props.mygrp, (newval, oldval) => {
mounted() mounted()
}) })
@@ -62,6 +75,7 @@ export default defineComponent({
groupname.value = props.mygrp.groupname groupname.value = props.mygrp.groupname
} }
} }
circuit.value = circuitStore.getCircuitByName(props.circuitname)
} }
function getImgGroup(group: IMyGroup) { function getImgGroup(group: IMyGroup) {
@@ -93,6 +107,8 @@ export default defineComponent({
tools, tools,
table, table,
myusername, myusername,
circuit,
showsendCoinTo,
} }
}, },
}) })

View File

@@ -2,130 +2,435 @@
<div v-if="tools.isUserOk()"> <div v-if="tools.isUserOk()">
<div v-if="grp"> <div v-if="grp">
<q-item class="q-my-sm" clickable> <q-item class="q-my-sm" clickable>
<q-item-section avatar @click="naviga(tools.getPathByGroup(grp, table))"> <q-item-section
avatar
@click="naviga(tools.getPathByGroup(grp, table))"
>
<q-avatar size="60px"> <q-avatar size="60px">
<q-img :src="getImgGroup(grp)" :alt="grp.groupname" img-class="imgprofile" height="60px"/> <q-img
:src="getImgGroup(grp)"
:alt="grp.groupname"
img-class="imgprofile"
height="60px"
/>
</q-avatar> </q-avatar>
</q-item-section> </q-item-section>
<q-item-section @click="naviga(tools.getPathByGroup(grp, table))"> <q-item-section @click="naviga(tools.getPathByGroup(grp, table))">
<q-item-label><strong>{{ grp.title }}</strong> ({{ grp.groupname }}) <q-item-label
><strong>{{ grp.title }}</strong> ({{ grp.groupname }})
</q-item-label>
<q-item-label v-if="grp.descr" caption lines="3"
><em>{{ grp.descr }}</em></q-item-label
>
<q-item-label v-if="grp.account && circuitname" caption lines="2">
<CSaldo
:small="true"
:account="grp.account"
:symbol="tools.getSymbolByCircuit(circuit)"
:color="tools.getColorByCircuit(circuit)"
:saldo="grp.account.saldo"
>
</CSaldo>
</q-item-label> </q-item-label>
<q-item-label v-if="grp.descr" caption lines="3"><em>{{ grp.descr }}</em></q-item-label>
</q-item-section> </q-item-section>
<q-item-section side v-if="visu === costanti.MY_GROUPS"> <q-item-label>
<q-item-label> <q-btn
v-if="userStore.my.profile.calc.numGoodsAndServices > 0 && circuitname"
icon="fas fa-coins"
color="green"
size="md"
dense
@click="showsendCoinTo = true"
>
</q-btn>
</q-item-label>
<q-item-section side>
<q-item-label v-if="visu === costanti.MY_GROUPS">
<q-btn rounded icon="fas fa-ellipsis-h"> <q-btn rounded icon="fas fa-ellipsis-h">
<q-menu> <q-menu>
<q-list style="min-width: 150px"> <q-list style="min-width: 150px">
<q-item clickable icon="fas fa-user-minus" v-close-popup <q-item
@click="tools.setCmd($q, shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP, myusername(), '', grp.groupname)"> clickable
<q-item-section>{{ $t('groups.remove_from_mygroups') }}</q-item-section> icon="fas fa-user-minus"
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.remove_from_mygroups')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-if="tools.iAmAdminGroup(grp.groupname)" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.DELETE_GROUP, myusername(), '', grp.groupname)"> v-if="tools.iAmAdminGroup(grp.groupname)"
<q-item-section>{{ $t('groups.delete_group') }}</q-item-section> style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.DELETE_GROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.delete_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list style="min-width: 150px"> <q-list style="min-width: 150px">
<q-item v-if="!tools.iAmAdminGroup(grp.groupname)" clickable icon="fas fa-ban" v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.BLOCK_GROUP, myusername(), '', grp.groupname)"> <q-item
<q-item-section>{{ $t('groups.block_group') }}</q-item-section> v-if="!tools.iAmAdminGroup(grp.groupname)"
clickable
icon="fas fa-ban"
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.BLOCK_GROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.block_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
</q-menu> </q-menu>
</q-btn> </q-btn>
</q-item-label> </q-item-label>
</q-item-section> <q-item-label v-else-if="visu === costanti.USER_GROUPS">
<q-item-section side v-if="visu === costanti.USER_GROUPS"> <q-btn
<q-item-label> rounded
<q-btn rounded :icon="userStore.IsMyGroupByGroupname(grp.groupname) ? `fas fa-ellipsis-h` : `fas fa-user`"> :icon="
userStore.IsMyGroupByGroupname(grp.groupname)
? `fas fa-ellipsis-h`
: `fas fa-user`
"
>
<q-menu> <q-menu>
<q-list v-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && !userStore.IsAskedGroupByGroupname(grp.groupname) && !userStore.IsRefusedGroupByGroupname(grp.groupname))" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), true, grp.groupname)"> v-if="
<q-item-section>{{ $t('groups.ask_group') }}</q-item-section> !userStore.IsMyGroupByGroupname(grp.groupname) &&
!userStore.IsAskedGroupByGroupname(grp.groupname) &&
!userStore.IsRefusedGroupByGroupname(grp.groupname)
"
style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REQGROUP,
myusername(),
true,
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.ask_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-else-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && userStore.IsAskedGroupByGroupname(grp.groupname) && !userStore.IsRefusedGroupByGroupname(grp.groupname))" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REFUSE_REQ_GROUP, myusername(), false, grp.groupname)"> v-else-if="
<q-item-section>{{ $t('shared.refuse_ask') }}</q-item-section> !userStore.IsMyGroupByGroupname(grp.groupname) &&
userStore.IsAskedGroupByGroupname(grp.groupname) &&
!userStore.IsRefusedGroupByGroupname(grp.groupname)
"
style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REFUSE_REQ_GROUP,
myusername(),
false,
grp.groupname
)
"
>
<q-item-section>{{
$t('shared.refuse_ask')
}}</q-item-section>
</q-item> </q-item>
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), false, grp.groupname)"> <q-item
<q-item-section>{{ $t('shared.cancel_ask') }}</q-item-section> clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REQGROUP,
myusername(),
false,
grp.groupname
)
"
>
<q-item-section>{{
$t('shared.cancel_ask')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-else-if="userStore.IsMyGroupByGroupname(grp.groupname)" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP, myusername(), '', grp.groupname)"> v-else-if="userStore.IsMyGroupByGroupname(grp.groupname)"
<q-item-section>{{ $t('groups.exit_group') }}</q-item-section> style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.exit_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-if="tools.iAmAdminGroup(grp.groupname)" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.DELETE_GROUP, myusername(), '', grp.groupname)"> v-if="tools.iAmAdminGroup(grp.groupname)"
<q-item-section>{{ $t('groups.delete_group') }}</q-item-section> style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.DELETE_GROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.delete_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
</q-menu> </q-menu>
</q-btn> </q-btn>
</q-item-label> </q-item-label>
</q-item-section> <q-item-label v-else-if="visu === costanti.REQ_GROUP">
<q-item-section side v-if="visu === costanti.REQ_GROUP">
<q-item-label>
<q-btn rounded icon="fas fa-ellipsis-h"> <q-btn rounded icon="fas fa-ellipsis-h">
<q-menu> <q-menu>
<q-list style="min-width: 150px"> <q-list style="min-width: 150px">
<q-item clickable icon="fas fa-user-minus" v-close-popup <q-item
@click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), false, grp.groupname)"> clickable
<q-item-section>{{ $t('groups.reject_ask_group') }}</q-item-section> icon="fas fa-user-minus"
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REQGROUP,
myusername(),
false,
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.reject_ask_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
</q-menu> </q-menu>
</q-btn> </q-btn>
</q-item-label> </q-item-label>
</q-item-section> <q-item-label v-else-if="visu === costanti.ASK_SENT_GROUP">
<q-item-section side v-if="visu === costanti.ASK_SENT_GROUP">
<q-item-label>
<q-btn rounded icon="fas fa-ellipsis-h"> <q-btn rounded icon="fas fa-ellipsis-h">
<q-menu> <q-menu>
<q-list style="min-width: 150px"> <q-list style="min-width: 150px">
<q-item clickable icon="fas fa-user-minus" v-close-popup <q-item
@click="tools.setCmd($q, shared_consts.GROUPSCMD.REFUSE_REQ_GROUP, myusername(), '', grp.groupname)"> clickable
<q-item-section>{{ $t('shared.refuse_ask') }}</q-item-section> icon="fas fa-user-minus"
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REFUSE_REQ_GROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('shared.refuse_ask')
}}</q-item-section>
</q-item> </q-item>
<q-item clickable icon="fas fa-user-minus" v-close-popup <q-item
@click="tools.setCmd($q, shared_consts.GROUPSCMD.CANCEL_REQ_GROUP, myusername(), '', grp.groupname)"> clickable
<q-item-section>{{ $t('shared.cancel_ask') }}</q-item-section> icon="fas fa-user-minus"
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.CANCEL_REQ_GROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('shared.cancel_ask')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
</q-menu> </q-menu>
</q-btn> </q-btn>
</q-item-label> </q-item-label>
</q-item-section> <q-item-label v-else-if="visu === costanti.FIND_GROUP">
<q-item-section side v-if="visu === costanti.FIND_GROUP"> <q-btn
<q-item-label> rounded
<q-btn rounded :icon="userStore.IsMyGroupByGroupname(grp.groupname) ? `fas fa-ellipsis-h` : `fas fa-user`"> :icon="
userStore.IsMyGroupByGroupname(grp.groupname)
? `fas fa-ellipsis-h`
: `fas fa-user`
"
>
<q-menu> <q-menu>
<q-list v-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && !userStore.IsAskedGroupByGroupname(grp.groupname))" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), true, grp.groupname)"> v-if="
<q-item-section>{{ $t('groups.ask_group') }}</q-item-section> !userStore.IsMyGroupByGroupname(grp.groupname) &&
!userStore.IsAskedGroupByGroupname(grp.groupname)
"
style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REQGROUP,
myusername(),
true,
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.ask_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-else-if="(!userStore.IsMyGroupByGroupname(grp.groupname) && userStore.IsAskedGroupByGroupname(grp.groupname))" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REFUSE_REQ_GROUP, myusername(), false, grp.groupname)"> v-else-if="
<q-item-section>{{ $t('shared.refuse_ask') }}</q-item-section> !userStore.IsMyGroupByGroupname(grp.groupname) &&
userStore.IsAskedGroupByGroupname(grp.groupname)
"
style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REFUSE_REQ_GROUP,
myusername(),
false,
grp.groupname
)
"
>
<q-item-section>{{
$t('shared.refuse_ask')
}}</q-item-section>
</q-item> </q-item>
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REQGROUP, myusername(), false, grp.groupname)"> <q-item
<q-item-section>{{ $t('shared.cancel_ask') }}</q-item-section> clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REQGROUP,
myusername(),
false,
grp.groupname
)
"
>
<q-item-section>{{
$t('shared.cancel_ask')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-else-if="userStore.IsMyGroupByGroupname(grp.groupname)" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP, myusername(), '', grp.groupname)"> v-else-if="userStore.IsMyGroupByGroupname(grp.groupname)"
<q-item-section>{{ $t('groups.exit_group') }}</q-item-section> style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.exit_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
<q-list v-if="tools.iAmAdminGroup(grp.groupname)" style="min-width: 200px"> <q-list
<q-item clickable v-close-popup @click="tools.setCmd($q, shared_consts.GROUPSCMD.DELETE_GROUP, myusername(), '', grp.groupname)"> v-if="tools.iAmAdminGroup(grp.groupname)"
<q-item-section>{{ $t('groups.delete_group') }}</q-item-section> style="min-width: 200px"
>
<q-item
clickable
v-close-popup
@click="
tools.setCmd(
$q,
shared_consts.GROUPSCMD.DELETE_GROUP,
myusername(),
'',
grp.groupname
)
"
>
<q-item-section>{{
$t('groups.delete_group')
}}</q-item-section>
</q-item> </q-item>
</q-list> </q-list>
</q-menu> </q-menu>
@@ -138,11 +443,20 @@
<div v-else> <div v-else>
<CUserNonVerif></CUserNonVerif> <CUserNonVerif></CUserNonVerif>
</div> </div>
<div v-if="showsendCoinTo">
<CSendCoins
:showprop="showsendCoinTo"
:to_group="grp"
:circuitname="circuitname"
@close="showsendCoinTo = false"
>
</CSendCoins>
</div>
</template> </template>
<script lang="ts" src="./CMyGroup.ts"> <script lang="ts" src="./CMyGroup.ts">
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './CMyGroup.scss'; @import './CMyGroup.scss';
</style> </style>

View File

@@ -44,6 +44,11 @@ export default defineComponent({
required: false, required: false,
default: 0, default: 0,
}, },
circuitname: {
type: String,
required: false,
default: '',
},
}, },
setup(props, { emit }) { setup(props, { emit }) {
const userStore = useUserStore() const userStore = useUserStore()

View File

@@ -27,7 +27,7 @@
class="q-my-sm" class="q-my-sm"
clickable clickable
> >
<CMyGroup :mygrp="grp" :visu="modelValue"> </CMyGroup> <CMyGroup :mygrp="grp" :visu="modelValue" :circuitname="circuitname"> </CMyGroup>
</span> </span>
</q-list> </q-list>
</div> </div>
@@ -35,7 +35,7 @@
<div v-else> <div v-else>
<q-list class="width-container"> <q-list class="width-container">
<span class="q-my-sm" clickable> <span class="q-my-sm" clickable>
<CMyGroup :mygrp="mygrp" :visu="visu"> </CMyGroup> <CMyGroup :mygrp="mygrp" :visu="visu" :circuitname="circuitname"> </CMyGroup>
</span> </span>
</q-list> </q-list>
</div> </div>

View File

@@ -11,12 +11,7 @@
img-class="imgprofile" height="60px"/> img-class="imgprofile" height="60px"/>
</q-avatar> </q-avatar>
</q-item-section> </q-item-section>
<q-item-section v-else avatar @click="naviga(`/my/` + myrec.username)"> <q-item-section v-else avatar>
<q-badge v-if="showBadge" class="q-my-xs self-center" :color="fieldsTable.getColByAdType(myrec.adType)">
{{ fieldsTable.getValByTabAndId(table, 'adType', myrec.adType) }}
<q-icon :name="fieldsTable.getIconByAdType(myrec.adType)" color="white"
class="q-ml-xs"/>
</q-badge>
<q-avatar size="60px"> <q-avatar size="60px">
<q-img :src="getImgUser(myrec)" :alt="myrec.username" img-class="imgprofile" height="60px"/> <q-img :src="getImgUser(myrec)" :alt="myrec.username" img-class="imgprofile" height="60px"/>
</q-avatar> </q-avatar>
@@ -37,11 +32,10 @@
<q-item-label lines="3" v-if="myrec.descr">{{ myrec.descr }}<br> <q-item-label lines="3" v-if="myrec.descr">{{ myrec.descr }}<br>
</q-item-label> </q-item-label>
<q-item-label lines="1" style="text-align: right" class="text_user_city"> <q-item-label lines="1" style="text-align: right" class="text_user_city">
<span v-if="myrec.visibility.includes(shared_consts.Visibility_Group.PRIVATE)" class="q-mr-xs"> <span v-if="myrec.visibility && myrec.visibility.includes(shared_consts.Visibility_Group.PRIVATE)" class="q-mr-xs">
<q-icon name="fas fa-lock"></q-icon></span> <q-icon name="fas fa-lock"></q-icon></span>
<span v-if="myrec.visibility.includes(shared_consts.Visibility_Group.HIDDEN)" class="q-mr-xs"> <span v-if="myrec.visibility && myrec.visibility.includes(shared_consts.Visibility_Group.HIDDEN)" class="q-mr-xs">
<q-icon name="fas fa-eye-slash"></q-icon></span> <q-icon name="fas fa-eye-slash"></q-icon></span>
<span class="text-weight-bold">{{ tools.getNameToShow(myrec) }}</span> -
<span v-for="(rec, ind) of myrec.mycities" :key="ind"><span v-if="ind > 0">, </span>{{ rec.comune }}</span> <span v-for="(rec, ind) of myrec.mycities" :key="ind"><span v-if="ind > 0">, </span>{{ rec.comune }}</span>
</q-item-label> </q-item-label>

View File

@@ -33,7 +33,7 @@
<q-btn <q-btn
v-if="userStore.IsMyCircuitByUser(contact).length > 0 && contact.username !== userStore.my.username && userStore.my.profile.calc.numGoodsAndServices > 0" v-if="userStore.getMyCircuitsInCommonByUser(contact).length > 0 && contact.username !== userStore.my.username && userStore.my.profile.calc.numGoodsAndServices > 0"
icon="fas fa-coins" icon="fas fa-coins"
color="green" color="green"
size="md" size="md"

View File

@@ -271,7 +271,6 @@
</div> </div>
</section> </section>
<LandingFooter></LandingFooter>
</div> </div>
</q-page> </q-page>
</template> </template>

View File

@@ -1,6 +1,6 @@
import { computed, defineComponent, onMounted, PropType, ref, watch } from 'vue' import { computed, defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { IAccount, ICircuit, IOperators, ISendCoin, ISpecialField, IUserFields } from '../../model' import { IAccount, ICircuit, IMyGroup, IOperators, ISendCoin, ISpecialField, IUserFields } from '../../model'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
import { CSaldo } from '@/components/CSaldo' import { CSaldo } from '@/components/CSaldo'
import { useUserStore } from '@store/UserStore' import { useUserStore } from '@store/UserStore'
@@ -24,7 +24,18 @@ export default defineComponent({
}, },
to_user: { to_user: {
type: Object as PropType<IUserFields>, type: Object as PropType<IUserFields>,
required: true, required: false,
default: null
},
to_group: {
type: Object as PropType<IMyGroup>,
required: false,
default: null,
},
from_group: {
type: Object as PropType<IMyGroup>,
required: false,
default: null,
}, },
}, },
components: { CSaldo, CMyUserOnlyView }, components: { CSaldo, CMyUserOnlyView },
@@ -36,10 +47,9 @@ export default defineComponent({
const userStore = useUserStore() const userStore = useUserStore()
const circuitStore = useCircuitStore() const circuitStore = useCircuitStore()
const from_username = ref(userStore.my.username) const from_username = ref(userStore.my.username)
const circuitsel = ref('') const circuitsel = ref('')
const qty = ref(<string|number>'') const qty = ref(<string | number>'')
const causal = ref('') const causal = ref('')
const bothcircuits = ref(<any>[]) const bothcircuits = ref(<any>[])
@@ -111,7 +121,25 @@ export default defineComponent({
// .... // ....
if (props.to_user) { if (props.to_user) {
console.log('user', props.to_user) console.log('user', props.to_user)
bothcircuits.value = userStore.IsMyCircuitByUser(props.to_user) bothcircuits.value = userStore.getMyCircuitsInCommonByUser(props.to_user)
if (props.circuitname) {
circuitsel.value = props.circuitname
} else {
circuitsel.value = tools.getCookie(tools.CIRCUIT_USE, bothcircuits.value[0])
}
if (!userStore.IsMyCircuitByName(circuitsel.value)) {
circuitsel.value = bothcircuits.value[0]
}
aggiorna()
show.value = true
}
if (props.to_group) {
console.log('group', props.to_group)
bothcircuits.value = userStore.getMyCircuitsInCommonByGroup(props.to_group)
if (props.circuitname) { if (props.circuitname) {
circuitsel.value = props.circuitname circuitsel.value = props.circuitname
@@ -133,16 +161,25 @@ export default defineComponent({
} }
function sendCoin() { function sendCoin() {
console.log('sendcoin', qty.value, props.to_user.username) console.log('sendcoin', qty.value, props.to_group ? props.to_group.groupname : props.to_user.username)
if (props.to_user.username && qty.value && circuitloaded.value) { let ok = (props.to_user && props.to_user.username) || (props.to_group && props.to_group.groupname)
const myrecsendcoin: ISendCoin = {
if (ok && qty.value && circuitloaded.value) {
let myrecsendcoin: ISendCoin = {
qty: tools.convstrToNum(qty.value), qty: tools.convstrToNum(qty.value),
dest: props.to_user.username, dest: '',
groupdest: '',
grouporig: '',
circuitname: circuitsel.value, circuitname: circuitsel.value,
causal: causal.value, causal: causal.value,
symbol: circuitloaded.value.symbol, symbol: circuitloaded.value.symbol,
} }
myrecsendcoin.groupdest = props.to_group ? props.to_group.groupname : ''
myrecsendcoin.dest = props.to_user ? props.to_user.username : ''
myrecsendcoin.grouporig = props.from_group ? props.from_group.groupname : ''
if (myrecsendcoin) { if (myrecsendcoin) {
tools.sendCoinsByCircuit($q, circuitloaded.value, myrecsendcoin) tools.sendCoinsByCircuit($q, circuitloaded.value, myrecsendcoin)
.then((ris: any) => { .then((ris: any) => {

View File

@@ -93,7 +93,7 @@
<q-btn <q-btn
v-if="circuitloaded" v-if="circuitloaded"
:disable="qtyRef ? (qtyRef.hasError || !circuitloaded.transactionsEnabled) : false" :disable="qtyRef ? (qtyRef.hasError || !circuitloaded.transactionsEnabled) : false"
:label="$t('circuit.sendcoinsto', {qty, coin: circuitsel, dest: to_user.username })" color="positive" :label="$t('circuit.sendcoinsto', {qty, coin: circuitsel, dest: to_group ? to_group.groupname : to_user.username })" color="positive"
@click="sendCoin()"></q-btn> @click="sendCoin()"></q-btn>
<q-btn flat :label="$t('dialog.cancel')" color="primary" v-close-popup></q-btn> <q-btn flat :label="$t('dialog.cancel')" color="primary" v-close-popup></q-btn>
</q-card-actions> </q-card-actions>

View File

@@ -13,7 +13,7 @@ export const validations = computed(() => {
}, },
username: { username: {
required, required,
minLength: minLength(6), minLength: minLength(3),
}, },
}, },
} }

View File

@@ -10,7 +10,7 @@ import { CTitleBanner } from '../CTitleBanner'
import { CCopyBtn } from '../CCopyBtn' import { CCopyBtn } from '../CCopyBtn'
import { CRegistration } from '../CRegistration' import { CRegistration } from '../CRegistration'
import { PagePolicy } from '../PagePolicy' import { PagePolicy } from '../PagePolicy'
import { computed, defineComponent, reactive, ref, watch } from 'vue' import { computed, defineComponent, onMounted, reactive, ref, watch } from 'vue'
import { CSignIn } from '@/components/CSignIn' import { CSignIn } from '@/components/CSignIn'
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n' import { useI18n } from '@/boot/i18n'
@@ -64,11 +64,26 @@ export default defineComponent({
required: false, required: false,
default: '', default: '',
}, },
name_default: {
type: String,
required: false,
default: '',
},
username_default: {
type: String,
required: false,
default: '',
},
need_Telegram: { need_Telegram: {
type: Boolean, type: Boolean,
required: false, required: false,
default: false, default: false,
}, },
collettivo: {
type: Boolean,
required: false,
default: false,
},
}, },
setup(props, { emit }) { setup(props, { emit }) {
const $q = useQuasar() const $q = useQuasar()
@@ -143,10 +158,13 @@ export default defineComponent({
}, },
username: { username: {
required, required,
minLength: minLength(6), minLength: minLength(3),
complexityUser, complexityUser,
registereduser, registereduser,
}, },
name: {
required: props.collettivo ? true : false,
},
terms: { terms: {
required, required,
}, },
@@ -296,6 +314,11 @@ export default defineComponent({
signup.profile.teleg_id = $route.params.idteleg ? parseInt($route.params.idteleg.toString(), 10) : 0 signup.profile.teleg_id = $route.params.idteleg ? parseInt($route.params.idteleg.toString(), 10) : 0
} }
if (props.collettivo) {
signup.username = props.username_default!
signup.name = props.name_default!
}
console.log('1) aportador_solidario', signup.aportador_solidario) console.log('1) aportador_solidario', signup.aportador_solidario)
if (!signup.aportador_solidario) if (!signup.aportador_solidario)

View File

@@ -1,7 +1,9 @@
<template> <template>
<div> <div>
<div <div
v-if="needTelegram && tools.isLogged() && tools.getUsername()" v-if="
needTelegram && tools.isLogged() && tools.getUsername() && !collettivo
"
class="text-center" class="text-center"
> >
<q-banner rounded class="bg-green text-white" style="text-align: center"> <q-banner rounded class="bg-green text-white" style="text-align: center">
@@ -30,7 +32,7 @@
<br /> <br />
</div> </div>
</div> </div>
<div v-if="!tools.isLogged() || visureg" class="text-center"> <div v-if="!tools.isLogged() || visureg || collettivo" class="text-center">
<div> <div>
<div> <div>
<logo <logo
@@ -43,7 +45,10 @@
</div> </div>
</div> </div>
<div v-if="visubuttBOT && needTelegram" class="q-gutter-md"> <div
v-if="visubuttBOT && needTelegram && !collettivo"
class="q-gutter-md"
>
<div class="q-ma-md"> <div class="q-ma-md">
<CRegistration <CRegistration
:invited="signup.aportador_solidario" :invited="signup.aportador_solidario"
@@ -54,7 +59,7 @@
</div> </div>
</div> </div>
<div v-else-if="!isalreadyReg" class="q-gutter-sm q-mt-sm"> <div v-else-if="!isalreadyReg || collettivo" class="q-gutter-sm q-mt-sm">
<div v-if="signup.username === 'undefined'"> <div v-if="signup.username === 'undefined'">
<br /> <br />
Vai su <b>BOT RISO</b> Telegram ed imposta l'Username di Telegram.<br /><br /> Vai su <b>BOT RISO</b> Telegram ed imposta l'Username di Telegram.<br /><br />
@@ -96,7 +101,11 @@
" "
maxlength="20" maxlength="20"
debounce="1000" debounce="1000"
:label="$t('reg.aportador_solidario')" :label="
collettivo
? $t('reg.username_admin_collettivo')
: $t('reg.aportador_solidario')
"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="person" /> <q-icon name="person" />
@@ -114,7 +123,11 @@
v-on:keyup.enter="!checkifDisabled ? $refs.carousel.next() : null" v-on:keyup.enter="!checkifDisabled ? $refs.carousel.next() : null"
debounce="2000" debounce="2000"
:rules="[myRuleEmail]" :rules="[myRuleEmail]"
:label="$t('reg.email_reg')" :label="
collettivo
? $t('reg.email_reg_collettivo')
: $t('reg.email_reg')
"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="email" /> <q-icon name="email" />
@@ -150,7 +163,29 @@
</template> </template>
</q-input> </q-input>
<div v-if="show_namesurname"> <div v-if="collettivo">
<q-input
ref="inputName"
v-model="signup.name"
rounded
outlined
@blur="v$.name.$touch"
:error="v$.name.$error"
maxlength="30"
debounce="1000"
v-on:keyup.enter="
!checkifDisabled ? $refs.carousel.next() : null
"
:error-message="tools.errorMsg('name', v$.name)"
:label="$t('reg.name_opt_collettivo')"
>
<template v-slot:prepend>
<q-icon name="person" />
</template>
</q-input>
</div>
<div v-else-if="show_namesurname">
<q-input <q-input
ref="inputName" ref="inputName"
v-model="signup.name" v-model="signup.name"
@@ -265,7 +300,7 @@
:label="$t('reg.submit')" :label="$t('reg.submit')"
> >
</q-btn> </q-btn>
<br> <br />
</div> </div>
</div> </div>
<div v-else> <div v-else>
@@ -332,7 +367,11 @@
" "
maxlength="20" maxlength="20"
debounce="1000" debounce="1000"
:label="$t('reg.aportador_solidario')" :label="
collettivo
? $t('reg.username_admin_collettivo')
: $t('reg.aportador_solidario')
"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="person" /> <q-icon name="person" />
@@ -352,7 +391,11 @@
" "
debounce="2000" debounce="2000"
:rules="[myRuleEmail]" :rules="[myRuleEmail]"
:label="$t('reg.email_reg')" :label="
collettivo
? $t('reg.email_reg_collettivo')
: $t('reg.email_reg')
"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="email" /> <q-icon name="email" />
@@ -384,14 +427,36 @@
tools.errorMsg('username', v$.username) || tools.errorMsg('username', v$.username) ||
(isalreadyReg ? 'L\'Username è gia stato registrato!' : '') (isalreadyReg ? 'L\'Username è gia stato registrato!' : '')
" "
:label="$t('reg.username_reg')" :label="$t('reg.username_reg_collettivo')"
> >
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="person" /> <q-icon name="person" />
</template> </template>
</q-input> </q-input>
<div v-if="show_namesurname"> <div v-if="collettivo">
<q-input
ref="inputName"
v-model="signup.name"
rounded
outlined
@blur="v$.name.$touch"
:error="v$.name.$error"
maxlength="30"
debounce="1000"
v-on:keyup.enter="
!checkifDisabled ? $refs.carousel.next() : null
"
:error-message="tools.errorMsg('name', v$.name)"
:label="$t('reg.name_opt_collettivo')"
>
<template v-slot:prepend>
<q-icon name="person" />
</template>
</q-input>
</div>
<div v-else-if="show_namesurname">
<q-input <q-input
ref="inputName" ref="inputName"
v-model="signup.name" v-model="signup.name"
@@ -623,7 +688,7 @@
</div> </div>
</div> </div>
</div> </div>
<div v-else-if="isalreadyReg"> <div v-else-if="isalreadyReg && !collettivo">
<q-banner <q-banner
class="bg-negative text-white text-h5" class="bg-negative text-white text-h5"
transition-show="jump-down" transition-show="jump-down"

View File

@@ -0,0 +1,9 @@
.myshad {
text-shadow: .125rem .125rem .125rem darkgray;
}
.nonvisibile{
border-radius: 16px;
border: red solid 3px;
padding: 4px;
}

View File

@@ -0,0 +1,37 @@
import { defineComponent, ref } from 'vue'
export default defineComponent({
name: 'CTitleSec',
props: {
title: {
type: String,
required: true,
},
bgcolor: {
type: String,
required: false,
default: 'bg-primary',
},
clcolor: {
type: String,
required: false,
default: 'text-white',
},
icon: {
type: String,
required: false,
default: '',
},
},
components: {},
setup(props, { emit }) {
function iconopen() {
return 'fas fa-chevron-down q-icon q-expansion-item__toggle-icon q-focusable rotate-180'
}
return {
iconopen,
}
},
})

View File

@@ -0,0 +1,30 @@
<template>
<div>
<q-banner
inline-actions
rounded
dense
:class="bgcolor + ` cursor-pointer q-my-sm ` + clcolor + ` `"
style="text-align: center"
>
<template v-slot:avatar>
<q-icon v-if="icon" :name="icon" color="white" />
</template>
<span :class="`mybanner `">{{
title
}}</span>
</q-banner>
<q-slide-transition>
<div>
<slot></slot>
</div>
</q-slide-transition>
</div>
</template>
<script lang="ts" src="./CTitleSec.ts">
</script>
<style lang="scss" scoped>
@import './CTitleSec.scss';
</style>

View File

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

View File

@@ -373,6 +373,7 @@
id="user-actions" id="user-actions"
class="column justify-center q-gutter-sm q-ma-sm center-150" class="column justify-center q-gutter-sm q-ma-sm center-150"
> >
<q-btn <q-btn
rounded rounded
color="primary" color="primary"
@@ -385,7 +386,7 @@
rounded rounded
color="orange" color="orange"
icon="house" icon="house"
:to="`/skills/` + getMyUsername()" :to="`/attivita/` + getMyUsername()"
> &nbsp;{{ t('otherpages.myactivities') }} > &nbsp;{{ t('otherpages.myactivities') }}
</q-btn> </q-btn>
<!--<q-btn round color="warning" icon="lock"></q-btn>--> <!--<q-btn round color="warning" icon="lock"></q-btn>-->

View File

@@ -51,6 +51,8 @@ const msg_website_it = {
presentazione2: 'Presentazione', presentazione2: 'Presentazione',
invita: 'Invita Persone', invita: 'Invita Persone',
SignUp: 'Modulo di Registrazione:', SignUp: 'Modulo di Registrazione:',
SignUpCollettivo: 'Reg. Collettiva:',
SignUpCollettivo2: 'Registrazione Collettiva:',
need_Telegram: 'Per poter utilizzare la Piattaforma occorre avere <a href="https://play.google.com/store/apps/details?id=org.telegram.messenger" target="_blank">Telegram</a> installato<br>', need_Telegram: 'Per poter utilizzare la Piattaforma occorre avere <a href="https://play.google.com/store/apps/details?id=org.telegram.messenger" target="_blank">Telegram</a> installato<br>',
Registrazione_Con_Bot: '1) Copia questo username cliccandoci sopra:', Registrazione_Con_Bot: '1) Copia questo username cliccandoci sopra:',
SignUpIscrizione: 'Diventa Socio CNM', SignUpIscrizione: 'Diventa Socio CNM',

View File

@@ -112,17 +112,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: true, inmenu: true,
infooter: true, infooter: true,
}, },
{
active: true,
order: 100,
path: '/presentazione',
materialIcon: 'fas fa-info',
name: 'pages.presentazione',
component: () => import('@src/root/presentazione/presentazione.vue'),
reqauth: false,
inmenu: true,
infooter: true,
},
{ {
active: true, active: true,
order: 120, order: 120,

View File

@@ -1,5 +1,5 @@
import { IAction } from '@src/model/Projects' import { IAction } from '@src/model/Projects'
import { IFriends, IMyGroup, IPaymentType } from '@src/model/UserStore' import { IFriends, IGroupShort, IMyGroup, IPaymentType } from '@src/model/UserStore'
import { import {
IDepartment, IProducer, IShareWithUs, IStorehouse, IDepartment, IProducer, IShareWithUs, IStorehouse,
} from '@src/model/Products' } from '@src/model/Products'
@@ -1033,10 +1033,6 @@ export interface IMyHosp extends IMyMain {
date_updated?: Date, date_updated?: Date,
} }
export interface ICircuitList {
_id: string,
inscription_date?: Date
}
export interface IMyCircuit { export interface IMyCircuit {
_id: string _id: string
@@ -1048,6 +1044,8 @@ export interface ISendCoin {
circuitname: string circuitname: string
qty: number qty: number
dest: string dest: string
groupdest: string
grouporig: string
causal: string causal: string
symbol: string symbol: string
} }
@@ -1072,6 +1070,8 @@ export interface ICircuit {
valuta_per_euro?: number valuta_per_euro?: number
fido_scoperto_default?: number fido_scoperto_default?: number
qta_max_default?: number qta_max_default?: number
fido_scoperto_default_grp?: number
qta_max_default_grp?: number
data_costituz?: Date data_costituz?: Date
deperimento: boolean deperimento: boolean
transactionsEnabled: boolean transactionsEnabled: boolean
@@ -1090,6 +1090,10 @@ export interface ICircuit {
createdBy?: string createdBy?: string
regulation?: string regulation?: string
numMembers?: number numMembers?: number
req_users?: IFriends[]
refused_users?: IFriends[]
req_groups?: IGroupShort[]
refused_groups?: IGroupShort[]
// --- Mem: // --- Mem:
movements: IMovement[] movements: IMovement[]
} }

View File

@@ -1,6 +1,6 @@
import { IToken } from '@model/other' import { IToken } from '@model/other'
import { ICart, IOrderCart, IShareWithUs } from '@src/model/Products' import { ICart, IOrderCart, IShareWithUs } from '@src/model/Products'
import { IAccount, ICircuit, ICircuitList, IGallery, IImgGallery, IMyCircuit } from '@model/GlobalStore' import { IAccount, ICircuit, IGallery, IImgGallery, IMyCircuit } from '@model/GlobalStore'
const enum ESexType { const enum ESexType {
None = 0, None = 0,
@@ -12,6 +12,16 @@ export interface IFriends {
username: string username: string
date?: Date date?: Date
} }
export interface IGroupShort {
groupname: string
date?: Date
}
export interface IUserAdmins {
username: string
perm?: number
date?: Date
}
export interface IMyGroup { export interface IMyGroup {
_id: string _id: string
@@ -30,7 +40,7 @@ export interface IMyGroup {
username_who_block?: string username_who_block?: string
date_blocked?: Date date_blocked?: Date
createdBy?: string createdBy?: string
circuits_list?: ICircuitList[] mycircuits?: IMyCircuit[]
} }
export interface ICalcStat { export interface ICalcStat {
@@ -98,8 +108,8 @@ export interface IUserProfile {
// in memory // in memory
asked_friends: any[] asked_friends: any[]
asked_groups: any[] asked_groups: IGroupShort[]
refused_groups: any[] refused_groups: IGroupShort[]
list_usersgroup?: IFriends[] list_usersgroup?: IFriends[]
asked_circuits: any[] asked_circuits: any[]

View File

@@ -441,6 +441,17 @@ function getRoutesAd(site: ISites) {
inmenu: false, inmenu: false,
infooter: false, infooter: false,
}, },
{
active: true,
order: 141,
path: '/attivita/:username',
materialIcon: 'fas fa-user',
name: 'otherpages.myactivities2',
component: () => import('@/views/user/myactivities/myactivities.vue'),
meta: { requiresAuth: true },
inmenu: false,
infooter: false,
},
{ {
active: true, active: true,
order: 200, order: 200,
@@ -577,6 +588,28 @@ function getRoutesAd(site: ISites) {
infooter: false, infooter: false,
separator: false separator: false
}, },
{
active: true,
order: 1002,
path: '/signup_collettivo/:invited/:username_default/:name_default',
materialIcon: 'how_to_reg',
name: 'pages.SignUpCollettivo',
component: () => import('@/views/login/signup_collettivo/signup_collettivo.vue'),
inmenu: false,
infooter: false,
separator: false
},
{
active: true,
order: 1003,
path: '/signup_collettivo',
materialIcon: 'how_to_reg',
name: 'pages.SignUpCollettivo2',
component: () => import('@/views/login/signup_collettivo/signup_collettivo.vue'),
inmenu: false,
infooter: false,
separator: false
},
{ {
active: site.confpages && site.confpages.enableReg && site.confpages.enabledRegNeedTelegram, active: site.confpages && site.confpages.enableReg && site.confpages.enabledRegNeedTelegram,
order: 1000, order: 1000,

View File

@@ -43,6 +43,7 @@ const msg_it = {
}, },
otherpages: { otherpages: {
myactivities: 'Attività', myactivities: 'Attività',
myactivities2: 'Mie Attività',
product: 'Prodotto', product: 'Prodotto',
sito_offline: 'Sito in Aggiornamento', sito_offline: 'Sito in Aggiornamento',
modifprof: 'Modifica', modifprof: 'Modifica',
@@ -439,6 +440,7 @@ const msg_it = {
invitante_regalato: 'Invitante Regalato', invitante_regalato: 'Invitante Regalato',
legenda: 'Legenda', legenda: 'Legenda',
aportador_solidario: 'Username di chi ti ha Invitato', aportador_solidario: 'Username di chi ti ha Invitato',
username_admin_collettivo: 'Username dell\'Amministratore',
verified_by_aportador: 'Verificato', verified_by_aportador: 'Verificato',
notAsk_ToVerify: 'No Verif. Reg', notAsk_ToVerify: 'No Verif. Reg',
trust_modified: 'Fiducia Modificata', trust_modified: 'Fiducia Modificata',
@@ -465,6 +467,7 @@ const msg_it = {
email: 'Email', email: 'Email',
email2: 'Altra Email (eventuale)', email2: 'Altra Email (eventuale)',
email_reg: 'la tua Email', email_reg: 'la tua Email',
email_reg_collettivo: 'Email dell\'Amministratore',
website: 'Sito Web', website: 'Sito Web',
link_maplocation: 'Link posizione su mappa', link_maplocation: 'Link posizione su mappa',
intcode_cell: 'Prefisso Int.', intcode_cell: 'Prefisso Int.',
@@ -513,11 +516,13 @@ const msg_it = {
sospeso: 'Sospeso', sospeso: 'Sospeso',
username: 'Username', username: 'Username',
username_reg: 'Username', username_reg: 'Username',
username_reg_collettivo: 'Username Collettivo',
username_hint: 'caratteri consentiti: tratteggio (_)', username_hint: 'caratteri consentiti: tratteggio (_)',
username_pseudonimo: 'Username (Pseudonimo)', username_pseudonimo: 'Username (Pseudonimo)',
username_short: 'Username', username_short: 'Username',
name: 'Nome', name: 'Nome',
name_opt: 'Nome (Facoltativo)', name_opt: 'Nome (Facoltativo)',
name_opt_collettivo: 'Nome del Collettivo',
surname: 'Cognome', surname: 'Cognome',
surname_opt: 'Cognome (facoltativo)', surname_opt: 'Cognome (facoltativo)',
username_login: 'Username o email', username_login: 'Username o email',
@@ -616,6 +621,7 @@ const msg_it = {
sameaspassword: 'Le password devono essere identiche', sameaspassword: 'Le password devono essere identiche',
accetta_carta_costituzionale_on: 'Occorre accettare la sintesi della Carta Costituzionale', accetta_carta_costituzionale_on: 'Occorre accettare la sintesi della Carta Costituzionale',
}, },
accedi_come: 'Accedi come...',
tips: { tips: {
email: 'inserisci la tua email', email: 'inserisci la tua email',
username: 'username lunga almeno 6 caratteri', username: 'username lunga almeno 6 caratteri',
@@ -1160,10 +1166,14 @@ const msg_it = {
valuta_per_euro: 'Valuta per Euro', valuta_per_euro: 'Valuta per Euro',
fido_scoperto_default: 'Fiducia concessa', fido_scoperto_default: 'Fiducia concessa',
fido_scoperto_default_tips: 'Rappresenta quanta moneta puoi creare autonomamente', fido_scoperto_default_tips: 'Rappresenta quanta moneta puoi creare autonomamente',
fido_scoperto_default_grp: 'Fiducia concessa Gruppi',
fido_scoperto_default_tips_grp: 'Rappresenta quanta moneta puo creare autonomamente il Gruppo',
transactionsEnabled: 'Transazioni Abilitate', transactionsEnabled: 'Transazioni Abilitate',
transactionsEnabled_text: 'Le transazioni al Circuito sono attualmente sospese, in attesa di attivare il gruppo territoriale', transactionsEnabled_text: 'Le transazioni al Circuito sono attualmente sospese, in attesa di attivare il gruppo territoriale',
qta_max_default: 'Massimo accumulo', qta_max_default: 'Massimo accumulo',
qta_max_default_tips: 'Rappresenta quanta moneta ti è concesso accumulare temporaneamente. Incentiviamo di utilizzarla...', qta_max_default_tips: 'Rappresenta quanta moneta ti è concesso accumulare temporaneamente. Incentiviamo di utilizzarla...',
qta_max_default_grp: 'Massimo accumulo Gruppo',
qta_max_default_tips_grp: 'Rappresenta quanta moneta è concesso accumulare temporaneamente al Gruppo. Incentiviamo di utilizzarla...',
data_costituz: 'Data Costituzione', data_costituz: 'Data Costituzione',
deperimento: 'Deperimento', deperimento: 'Deperimento',
freq_deper: 'Frequenza Deperimento', freq_deper: 'Frequenza Deperimento',
@@ -1206,6 +1216,7 @@ const msg_it = {
sendcoins: 'Invia Monete', sendcoins: 'Invia Monete',
sendcoinsto: 'Invia {qty} {coin} a {dest}', sendcoinsto: 'Invia {qty} {coin} a {dest}',
question_sendcoinsto: 'Inviare {qty} {coin} a {dest}?', question_sendcoinsto: 'Inviare {qty} {coin} a {dest}?',
question_sendcoinsto_from: 'Inviare {qty} {coin} da {from} a {dest}?',
coins_sendrequest_sent: 'Richiesta d\'invio monete avvenuto', coins_sendrequest_sent: 'Richiesta d\'invio monete avvenuto',
coins_sendrequest_failed: 'Richiesta d\'invio monete non avvenuta, riprovare', coins_sendrequest_failed: 'Richiesta d\'invio monete non avvenuta, riprovare',
coins_accepted: 'Monete accettate', coins_accepted: 'Monete accettate',
@@ -1215,7 +1226,7 @@ const msg_it = {
refuse_coins_qty: 'Rifiuta', refuse_coins_qty: 'Rifiuta',
refuse_coins: 'Rifiuta Monete', refuse_coins: 'Rifiuta Monete',
movements: 'Movimenti', movements: 'Movimenti',
conticomunitari: 'Conti Comunitari', gruppicom: 'Gruppi Com.',
qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}', qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
qta_not_valid: 'Quantità non valida', qta_not_valid: 'Quantità non valida',
qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}', qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}',

View File

@@ -2,7 +2,7 @@ import { defineStore } from 'pinia'
import { import {
IAccount, IAccount,
ICircuit, ICircuitState, IGlobalState, ICircuit, ICircuitState, IGlobalState, IGroupShort, IMyCircuit, IMyGroup,
} from '@src/model' } from '@src/model'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
import translate from '@src/globalroutines/util' import translate from '@src/globalroutines/util'
@@ -82,5 +82,18 @@ export const useCircuitStore = defineStore('CircuitStore', {
}, },
getCircuitsListByGroup(mygrp: IMyGroup): ICircuit[] | undefined | null {
return this.listcircuits.filter((rec: ICircuit) => mygrp.mycircuits!.findIndex((circ: IMyCircuit) => circ.circuitname === rec.name) >= 0)
},
IsAskedCircuitByNameAndGroup(name: string, groupname: string): boolean {
let circuit = this.listcircuits.find((circ: ICircuit) => circ.name === name)
if (circuit && circuit.req_groups) {
return circuit.req_groups?.findIndex((grp: IGroupShort) => grp.groupname === groupname) >= 0
}
return false
},
}, },
}) })

View File

@@ -223,6 +223,7 @@ export const costanti = {
VISUTABLE_SCHEDA_GROUP: -3, VISUTABLE_SCHEDA_GROUP: -3,
VISUTABLE_USER_TABGROUP: -4, VISUTABLE_USER_TABGROUP: -4,
VISUTABLE_USER_TABCIRCUIT: -5, VISUTABLE_USER_TABCIRCUIT: -5,
VISUTABLE_GROUP_CIRCUIT: -6,
DIR_UPLOAD: 'upload/', // upload/ DIR_UPLOAD: 'upload/', // upload/

View File

@@ -141,9 +141,9 @@ export const colmylistcards = [
] ]
export const colmyelems = [ export const colmyelems = [
AddCol({ name: 'active', label_trans: 'myelems.active', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'active', label_trans: 'myelems.active', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'path', label_trans: 'myelems.path' }), AddCol({ name: 'path', label_trans: 'myelems.path' }),
AddCol({ name: 'order', label_trans: 'myelems.order', fieldtype: costanti.FieldType.number }), AddCol({ name: 'order', label_trans: 'myelems.order', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'type', label_trans: 'myelems.type', fieldtype: costanti.FieldType.select, jointable: 'elemtypes' }), AddCol({ name: 'type', label_trans: 'myelems.type', fieldtype: costanti.FieldType.select, jointable: 'elemtypes' }),
AddCol({ name: 'container', label_trans: 'myelems.container' }), AddCol({ name: 'container', label_trans: 'myelems.container' }),
AddCol({ name: 'container2', label_trans: 'myelems.container2' }), AddCol({ name: 'container2', label_trans: 'myelems.container2' }),
@@ -157,18 +157,18 @@ export const colmyelems = [
AddCol({ name: 'parambool', label_trans: 'myelems.parambool', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'parambool', label_trans: 'myelems.parambool', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'parambool2', label_trans: 'myelems.parambool2', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'parambool2', label_trans: 'myelems.parambool2', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'parambool3', label_trans: 'myelems.parambool3', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'parambool3', label_trans: 'myelems.parambool3', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'number', label_trans: 'myelems.number', fieldtype: costanti.FieldType.number }), AddCol({ name: 'number', label_trans: 'myelems.number', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'imgback', label_trans: 'myelems.imgback' }), AddCol({ name: 'imgback', label_trans: 'myelems.imgback' }),
AddCol({ name: 'size', label_trans: 'myelems.size' }), AddCol({ name: 'size', label_trans: 'myelems.size' }),
AddCol({ name: 'ratio', label_trans: 'myelems.ratio' }), AddCol({ name: 'ratio', label_trans: 'myelems.ratio' }),
AddCol({ name: 'containerHtml', label_trans: 'myelems.containerHtml', fieldtype: costanti.FieldType.html }), AddCol({ name: 'containerHtml', label_trans: 'myelems.containerHtml', fieldtype: costanti.FieldType.html }),
AddCol({ name: 'listcards', label_trans: 'myelems.listcards', fieldtype: costanti.FieldType.listimages }), AddCol({ name: 'listcards', label_trans: 'myelems.listcards', fieldtype: costanti.FieldType.listimages }),
AddCol({ name: 'height', label_trans: 'myelems.height', fieldtype: costanti.FieldType.number }), AddCol({ name: 'height', label_trans: 'myelems.height', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'heightimg', label_trans: 'myelems.heightimg', fieldtype: costanti.FieldType.string }), AddCol({ name: 'heightimg', label_trans: 'myelems.heightimg', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'widthimg', label_trans: 'pages.widthimg', fieldtype: costanti.FieldType.string }), AddCol({ name: 'widthimg', label_trans: 'pages.widthimg', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'link', label_trans: 'pages.link', fieldtype: costanti.FieldType.string }), AddCol({ name: 'link', label_trans: 'pages.link', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'width', label_trans: 'myelems.width', fieldtype: costanti.FieldType.number }), AddCol({ name: 'width', label_trans: 'myelems.width', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'onlyif_logged', label_trans: 'myelems.onlyif_logged', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'onlyif_logged', label_trans: 'myelems.onlyif_logged', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'color', label_trans: 'myelems.color' }), AddCol({ name: 'color', label_trans: 'myelems.color' }),
AddCol({ name: 'colorsub', label_trans: 'myelems.colorsub' }), AddCol({ name: 'colorsub', label_trans: 'myelems.colorsub' }),
AddCol({ name: 'colorsub2', label_trans: 'myelems.colorsub2' }), AddCol({ name: 'colorsub2', label_trans: 'myelems.colorsub2' }),
@@ -620,8 +620,10 @@ export const colmyMovement = [
noshowlabel: true, noshowlabel: true,
}), }),
AddCol({ name: 'amount', label_trans: 'movement.amount', AddCol({
fieldtype: costanti.FieldType.currency, required: true, tipovisu: costanti.TipoVisu.TESTO_BORDATO }), name: 'amount', label_trans: 'movement.amount',
fieldtype: costanti.FieldType.currency, required: true, tipovisu: costanti.TipoVisu.TESTO_BORDATO
}),
AddCol({ name: 'causal', label_trans: 'movement.causal', tipovisu: costanti.TipoVisu.TESTO_BORDATO }), AddCol({ name: 'causal', label_trans: 'movement.causal', tipovisu: costanti.TipoVisu.TESTO_BORDATO }),
] ]
@@ -632,8 +634,10 @@ export const colmyMovementTable = [
AddCol({ name: 'userfrom.username', field: 'userfrom', subfield: 'username', label_trans: 'movement.accountFromId', fieldtype: costanti.FieldType.string, required: true }), AddCol({ name: 'userfrom.username', field: 'userfrom', subfield: 'username', label_trans: 'movement.accountFromId', fieldtype: costanti.FieldType.string, required: true }),
AddCol({ name: 'userto.username', field: 'userto', subfield: 'username', label_trans: 'movement.accountToId', fieldtype: costanti.FieldType.string, required: true }), AddCol({ name: 'userto.username', field: 'userto', subfield: 'username', label_trans: 'movement.accountToId', fieldtype: costanti.FieldType.string, required: true }),
AddCol({ name: 'amount', label_trans: 'movement.amount', AddCol({
fieldtype: costanti.FieldType.currency, required: true, tipovisu: costanti.TipoVisu.TESTO_BORDATO }), name: 'amount', label_trans: 'movement.amount',
fieldtype: costanti.FieldType.currency, required: true, tipovisu: costanti.TipoVisu.TESTO_BORDATO
}),
AddCol({ name: 'causal', label_trans: 'movement.causal', tipovisu: costanti.TipoVisu.TESTO_BORDATO }), AddCol({ name: 'causal', label_trans: 'movement.causal', tipovisu: costanti.TipoVisu.TESTO_BORDATO }),
] ]
@@ -676,9 +680,11 @@ export const colmyUserPeople = [
export const colmyUserGroup = [ export const colmyUserGroup = [
// AddCol({ name: '_id', label_trans: 'reg.id' }), // AddCol({ name: '_id', label_trans: 'reg.id' }),
AddCol({ name: 'title', label_trans: 'reg.name', AddCol({
name: 'title', label_trans: 'reg.name',
field_toduplicate_nospace: 'groupname', field_toduplicate_nospace: 'groupname',
required: true, noshowlabel: true, maxlength: 40 }), required: true, noshowlabel: true, maxlength: 40
}),
AddCol({ AddCol({
name: 'groupname', label_trans: 'reg.groupname', required: false, name: 'groupname', label_trans: 'reg.groupname', required: false,
maxlength: 30, maxlength: 30,
@@ -2717,10 +2723,13 @@ export const colTableSubCashCategory = [
export const colTableCircuitComplete = [ export const colTableCircuitComplete = [
// AddCol({ name: 'groupnameId', label_trans: 'circuit.groupnameId', fieldtype: costanti.FieldType.select, jointable: 'mygroups' }), // da togliere poi // AddCol({ name: 'groupnameId', label_trans: 'circuit.groupnameId', fieldtype: costanti.FieldType.select, jointable: 'mygroups' }), // da togliere poi
AddCol({ name: 'name', label_trans: 'circuit.name', AddCol({
name: 'name', label_trans: 'circuit.name',
maxlength: 40, maxlength: 40,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage }), showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage
AddCol({ name: 'path', label_trans: 'circuit.path', }),
AddCol({
name: 'path', label_trans: 'circuit.path',
allowchar: costanti.ALLOWCHAR_CODE, allowchar: costanti.ALLOWCHAR_CODE,
}), }),
AddCol({ name: 'subname', label_trans: 'circuit.subname' }), AddCol({ name: 'subname', label_trans: 'circuit.subname' }),
@@ -2749,7 +2758,8 @@ export const colTableCircuitComplete = [
AddCol({ name: 'regulation', label_trans: 'circuit.regulation', fieldtype: costanti.FieldType.html }), AddCol({ name: 'regulation', label_trans: 'circuit.regulation', fieldtype: costanti.FieldType.html }),
AddCol({ name: 'systemUserDescr', label_trans: 'circuit.systemUserDescr' }), AddCol({ name: 'systemUserDescr', label_trans: 'circuit.systemUserDescr' }),
AddCol({ name: 'systemUserId', label_trans: 'circuit.systemUserId', fieldtype: costanti.FieldType.select, jointable: 'users' }), AddCol({ name: 'systemUserId', label_trans: 'circuit.systemUserId', fieldtype: costanti.FieldType.select, jointable: 'users' }),
AddCol({ name: 'createdBy', label_trans: 'circuit.founder', fieldtype: costanti.FieldType.select, jointable: 'users', AddCol({
name: 'createdBy', label_trans: 'circuit.founder', fieldtype: costanti.FieldType.select, jointable: 'users',
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView, showWhen: costanti.showWhen.InPage + costanti.showWhen.InView,
}), }),
AddCol({ name: 'totCircolante', label_trans: 'circuit.totCircolante', fieldtype: costanti.FieldType.number }), AddCol({ name: 'totCircolante', label_trans: 'circuit.totCircolante', fieldtype: costanti.FieldType.number }),
@@ -2763,6 +2773,8 @@ export const colTableCircuitComplete = [
AddCol({ name: 'valuta_per_euro', label_trans: 'circuit.valuta_per_euro', fieldtype: costanti.FieldType.number }), AddCol({ name: 'valuta_per_euro', label_trans: 'circuit.valuta_per_euro', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'fido_scoperto_default', label_trans: 'circuit.fido_scoperto_default', fieldtype: costanti.FieldType.currency }), AddCol({ name: 'fido_scoperto_default', label_trans: 'circuit.fido_scoperto_default', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'qta_max_default', label_trans: 'circuit.qta_max_default', fieldtype: costanti.FieldType.currency }), AddCol({ name: 'qta_max_default', label_trans: 'circuit.qta_max_default', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'fido_scoperto_default_grp', label_trans: 'circuit.fido_scoperto_default_grp', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'qta_max_default_grp', label_trans: 'circuit.qta_max_default_grp', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }), AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }),
AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }),
@@ -2809,11 +2821,14 @@ export const colTableCircuitComplete = [
export const colTableCircuit = [ export const colTableCircuit = [
// AddCol({ name: 'groupnameId', label_trans: 'circuit.groupnameId', fieldtype: costanti.FieldType.select, jointable: 'mygroups' }), // da togliere poi // AddCol({ name: 'groupnameId', label_trans: 'circuit.groupnameId', fieldtype: costanti.FieldType.select, jointable: 'mygroups' }), // da togliere poi
AddCol({ name: 'name', label_trans: 'circuit.name', AddCol({
name: 'name', label_trans: 'circuit.name',
required: true, required: true,
maxlength: 30, maxlength: 30,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InView }), showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InView
AddCol({ name: 'path', label_trans: 'circuit.path', required: true, }),
AddCol({
name: 'path', label_trans: 'circuit.path', required: true,
maxlength: 30, maxlength: 30,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InView,
allowchar: costanti.ALLOWCHAR_CODE, allowchar: costanti.ALLOWCHAR_CODE,
@@ -2841,10 +2856,12 @@ export const colTableCircuit = [
jointable: 'visibilGroup', jointable: 'visibilGroup',
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
}), }),
AddCol({ name: 'systemUserId', label_trans: 'circuit.systemUserId', fieldtype: costanti.FieldType.select, jointable: 'users', AddCol({
name: 'systemUserId', label_trans: 'circuit.systemUserId', fieldtype: costanti.FieldType.select, jointable: 'users',
showWhen: costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.InEdit + costanti.showWhen.InView,
}), }),
AddCol({ name: 'createdBy', label_trans: 'circuit.founder', fieldtype: costanti.FieldType.select, jointable: 'users', AddCol({
name: 'createdBy', label_trans: 'circuit.founder', fieldtype: costanti.FieldType.select, jointable: 'users',
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView, showWhen: costanti.showWhen.InPage + costanti.showWhen.InView,
}), }),
AddCol({ AddCol({
@@ -2864,28 +2881,37 @@ export const colTableCircuit = [
// AddCol({ name: 'nome_valuta', label_trans: 'circuit.nome_valuta', required: true }), // AddCol({ name: 'nome_valuta', label_trans: 'circuit.nome_valuta', required: true }),
AddCol({ name: 'symbol', label_trans: 'circuit.symbol' }), AddCol({ name: 'symbol', label_trans: 'circuit.symbol' }),
AddCol({ name: 'color', label_trans: 'circuit.color' }), AddCol({ name: 'color', label_trans: 'circuit.color' }),
AddCol({ name: 'fido_scoperto_default', label_trans: 'circuit.fido_scoperto_default', AddCol({
fieldtype: costanti.FieldType.currency, required: true, visulabel: true }), name: 'fido_scoperto_default', label_trans: 'circuit.fido_scoperto_default',
AddCol({ name: 'qta_max_default', label_trans: 'circuit.qta_max_default', fieldtype: costanti.FieldType.currency, required: true, visulabel: true
fieldtype: costanti.FieldType.currency, required: true, visulabel: true }), }),
AddCol({
name: 'qta_max_default', label_trans: 'circuit.qta_max_default',
fieldtype: costanti.FieldType.currency, required: true, visulabel: true
}),
AddCol({ name: 'fido_scoperto_default_grp', label_trans: 'circuit.fido_scoperto_default_grp', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'qta_max_default_grp', label_trans: 'circuit.qta_max_default_grp', fieldtype: costanti.FieldType.currency }),
AddCol({ name: 'valuta_per_euro', label_trans: 'circuit.valuta_per_euro', fieldtype: costanti.FieldType.number }), AddCol({ name: 'valuta_per_euro', label_trans: 'circuit.valuta_per_euro', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'totCircolante', label_trans: 'circuit.totCircolante', AddCol({
name: 'totCircolante', label_trans: 'circuit.totCircolante',
fieldtype: costanti.FieldType.currency, visulabel: true, fieldtype: costanti.FieldType.currency, visulabel: true,
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView, showWhen: costanti.showWhen.InPage + costanti.showWhen.InView,
}), }),
AddCol({ name: 'totTransato', label_trans: 'circuit.totTransato', AddCol({
name: 'totTransato', label_trans: 'circuit.totTransato',
fieldtype: costanti.FieldType.currency, visulabel: true, fieldtype: costanti.FieldType.currency, visulabel: true,
showWhen: costanti.showWhen.InPage + costanti.showWhen.InView, showWhen: costanti.showWhen.InPage + costanti.showWhen.InView,
}), }),
AddCol({ name: 'regulation', label_trans: 'circuit.regulation', fieldtype: costanti.FieldType.html, required: true }), AddCol({ name: 'regulation', label_trans: 'circuit.regulation', fieldtype: costanti.FieldType.html, required: true }),
AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean, disable: true }), AddCol({ name: 'deperimento', label_trans: 'circuit.deperimento', fieldtype: costanti.FieldType.boolean, disable: true }),
AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'transactionsEnabled', label_trans: 'circuit.transactionsEnabled', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'status', label_trans: 'circuit.status', AddCol({
fieldtype: costanti.FieldType.select, name: 'status', label_trans: 'circuit.status',
jointable: 'statuscircuit', fieldtype: costanti.FieldType.select,
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist, jointable: 'statuscircuit',
} showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView_OnlyifExist,
), }
),
AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }), AddCol({ name: 'data_costituz', label_trans: 'circuit.data_costituz', fieldtype: costanti.FieldType.date }),
AddCol({ AddCol({
name: 'photos', name: 'photos',

View File

@@ -12,7 +12,7 @@ import {
ITodo, ITodo,
IUserFields, IUserFields,
Privacy, Privacy,
TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, IUserExport, ISpecialField, IAccount, IMyCircuit, ISendCoin, IMovement, IMovVisu, INotif, IMyElem, IMyCard, ILabelValue, ILabelValueStr, IAnim, ILang, TipoVisu, IGroup, IMySkill, IMyBacheca, IImgGallery, IMsgGlobParam, IUserExport, ISpecialField, IAccount, IMyCircuit, ISendCoin, IMovement, IMovVisu, INotif, IMyElem, IMyCard, ILabelValue, ILabelValueStr, IAnim, ILang, IGroupShort,
} from '@model' } from '@model'
import { fieldsTable } from '@store/Modules/fieldsTable' import { fieldsTable } from '@store/Modules/fieldsTable'
@@ -5528,6 +5528,7 @@ export const tools = {
updateMyData(res: any) { updateMyData(res: any) {
const userStore = useUserStore() const userStore = useUserStore()
const circuitStore = useCircuitStore() const circuitStore = useCircuitStore()
const globalStore = useGlobalStore()
// console.log('OUT', res) // console.log('OUT', res)
@@ -5538,6 +5539,9 @@ export const tools = {
if (res.listcircuits) { if (res.listcircuits) {
circuitStore.listcircuits = res.listcircuits circuitStore.listcircuits = res.listcircuits
} }
if (res.mygroups) {
globalStore.mygroups = res.mygroups
}
} }
}, },
@@ -5641,7 +5645,7 @@ export const tools = {
if (res) { if (res) {
notifStore.updateNotification = true notifStore.updateNotification = true
if (username === userStore.my.username) { if (username === userStore.my.username) {
userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IMyGroup) => rec.groupname !== groupnameDest) userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IGroupShort) => rec.groupname !== groupnameDest)
} }
tools.showPositiveNotif($q, t('db.refusedgroup', { username })) tools.showPositiveNotif($q, t('db.refusedgroup', { username }))
} }
@@ -5833,7 +5837,7 @@ export const tools = {
tools.showPositiveNotif($q, t('db.askedtogroup', { groupname: groupnameDest })) tools.showPositiveNotif($q, t('db.askedtogroup', { groupname: groupnameDest }))
} else { } else {
// REMOVE to req Friends // REMOVE to req Friends
userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IMyGroup) => rec.groupname !== groupnameDest) userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IGroupShort) => rec.groupname !== groupnameDest)
tools.showPositiveNotif($q, t('db.revoketogroup', { groupname: groupnameDest })) tools.showPositiveNotif($q, t('db.revoketogroup', { groupname: groupnameDest }))
} }
@@ -5872,7 +5876,7 @@ export const tools = {
userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.CANCEL_REQ_GROUP, null).then((res) => { userStore.setGroupsCmd($q, t, username, groupnameDest, shared_consts.GROUPSCMD.CANCEL_REQ_GROUP, null).then((res) => {
if (res) { if (res) {
if (username === userStore.my.username) { if (username === userStore.my.username) {
userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IMyGroup) => rec.groupname !== groupnameDest) userStore.my.profile.asked_groups = userStore.my.profile.asked_groups.filter((rec: IGroupShort) => rec.groupname !== groupnameDest)
} }
tools.showPositiveNotif($q, t('db.cancel_req_group')) tools.showPositiveNotif($q, t('db.cancel_req_group'))
} }
@@ -6037,7 +6041,7 @@ export const tools = {
return risultato return risultato
}, },
setRequestCircuit($q: any, username: string, circuitname: string, value: boolean) { setRequestCircuit($q: any, username: string, circuitname: string, value: boolean, groupname?: string) {
const userStore = useUserStore() const userStore = useUserStore()
@@ -6060,7 +6064,7 @@ export const tools = {
title: t('db.domanda') title: t('db.domanda')
}).onOk(() => { }).onOk(() => {
userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.REQ, value) userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.REQ, value, { groupname })
.then((res: any) => { .then((res: any) => {
if (res) { if (res) {
if (value) { if (value) {
@@ -6088,8 +6092,15 @@ export const tools = {
const username = userStore.my.username const username = userStore.my.username
let orig = sendcoinrec.grouporig ? sendcoinrec.grouporig : ''
let dest = sendcoinrec.groupdest ? sendcoinrec.groupdest : sendcoinrec.dest
let msg = '' let msg = ''
msg = t('circuit.question_sendcoinsto', { coin: circuit.symbol, dest: sendcoinrec.dest, qty: sendcoinrec.qty }) if (orig) {
msg = t('circuit.question_sendcoinsto_from', { coin: circuit.symbol, from: orig, dest, qty: sendcoinrec.qty })
} else {
msg = t('circuit.question_sendcoinsto', { coin: circuit.symbol, dest, qty: sendcoinrec.qty })
}
return $q.dialog({ return $q.dialog({
message: msg, message: msg,
@@ -6124,7 +6135,7 @@ export const tools = {
}) })
}, },
cancelReqCircuit($q: any, username: string, circuitname: string) { cancelReqCircuit($q: any, username: string, circuitname: string, groupname?: string) {
const userStore = useUserStore() const userStore = useUserStore()
$q.dialog({ $q.dialog({
message: t('circuit.domanda_cancel_req', { username, circuitname }), message: t('circuit.domanda_cancel_req', { username, circuitname }),
@@ -6133,7 +6144,7 @@ export const tools = {
title: t('db.domanda') title: t('db.domanda')
}).onOk(() => { }).onOk(() => {
userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.CANCEL_REQ, null).then((res) => { userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.CANCEL_REQ, null, { groupname }).then((res) => {
if (res && res.result) { if (res && res.result) {
if (username === userStore.my.username) { if (username === userStore.my.username) {
userStore.my.profile.asked_circuits = userStore.my.profile.asked_circuits.filter((rec: ICircuit) => rec.name !== circuitname) userStore.my.profile.asked_circuits = userStore.my.profile.asked_circuits.filter((rec: ICircuit) => rec.name !== circuitname)
@@ -6145,7 +6156,7 @@ export const tools = {
}) })
}, },
refuseReqCircuit($q: any, username: string, circuitname: string) { refuseReqCircuit($q: any, username: string, circuitname: string, groupname?: string) {
const userStore = useUserStore() const userStore = useUserStore()
const notifStore = useNotifStore() const notifStore = useNotifStore()
@@ -6156,7 +6167,7 @@ export const tools = {
title: t('db.domanda') title: t('db.domanda')
}).onOk(() => { }).onOk(() => {
userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.REFUSE_REQ, null).then((res) => { userStore.setCircuitCmd($q, t, username, circuitname, shared_consts.CIRCUITCMD.REFUSE_REQ, null, { groupname }).then((res) => {
if (res && res.result) { if (res && res.result) {
notifStore.updateNotification = true notifStore.updateNotification = true
if (username === userStore.my.username) { if (username === userStore.my.username) {
@@ -6696,6 +6707,8 @@ export const tools = {
symbol: 'RIS', symbol: 'RIS',
fido_scoperto_default: 100, fido_scoperto_default: 100,
qta_max_default: 200, qta_max_default: 200,
fido_scoperto_default_grp: shared_consts.CIRCUIT_PARAMS.SCOPERTO_MIN_GRP,
qta_max_default_grp: shared_consts.CIRCUIT_PARAMS.SCOPERTO_MAX_GRP,
valuta_per_euro: 1, valuta_per_euro: 1,
totTransato: 0, totTransato: 0,
totCircolante: 0, totCircolante: 0,
@@ -7415,6 +7428,16 @@ export const tools = {
} }
}, },
initprompt() {
const globalStore = useGlobalStore()
window.addEventListener('beforeinstallprompt', (event) => {
event.preventDefault()
console.log('beforeinstallprompt !')
// Stash the event so it can be triggered later.
globalStore.deferredPrompt = event
})
},
// FINE ! // FINE !

View File

@@ -35,7 +35,7 @@ import { Router } from 'vue-router'
import { useProjectStore } from '@store/Projects' import { useProjectStore } from '@store/Projects'
import { shared_consts } from '@/common/shared_vuejs' import { shared_consts } from '@/common/shared_vuejs'
import { costanti } from '@costanti' import { costanti } from '@costanti'
import { IMyGroup } from '@model/UserStore' import { IGroupShort, IMyGroup, IUserAdmins } from '@model/UserStore'
import globalroutines from '../globalroutines/index' import globalroutines from '../globalroutines/index'
import { useNotifStore } from '@store/NotifStore' import { useNotifStore } from '@store/NotifStore'
@@ -228,6 +228,22 @@ export const useUserStore = defineStore('UserStore', {
return false return false
}, },
GroupsListWhereIAmAdmin(username: string): string[] {
let myarr: any[] = []
const globalStore = useGlobalStore()
if (this.my.profile && globalStore.mygroups) {
myarr = globalStore.mygroups.filter((mygroup: IMyGroup) => {
if (mygroup.admins && mygroup.admins.findIndex((useradmin: IUserAdmins) => useradmin.username === username) >= 0) {
return true
}
return false
})
}
return myarr
},
IsAskedFriendByUsername(username: string): boolean { IsAskedFriendByUsername(username: string): boolean {
if (this.my.profile.asked_friends) if (this.my.profile.asked_friends)
return this.my.profile.asked_friends.findIndex((rec) => rec.username === username) >= 0 return this.my.profile.asked_friends.findIndex((rec) => rec.username === username) >= 0
@@ -244,14 +260,14 @@ export const useUserStore = defineStore('UserStore', {
IsAskedGroupByGroupname(groupname: string): boolean { IsAskedGroupByGroupname(groupname: string): boolean {
if (this.my.profile.asked_groups) if (this.my.profile.asked_groups)
return this.my.profile.asked_groups.findIndex((rec: IMyGroup) => rec.groupname === groupname) >= 0 return this.my.profile.asked_groups.findIndex((rec: IGroupShort) => rec.groupname === groupname) >= 0
else else
return false return false
}, },
IsRefusedGroupByGroupname(groupname: string): boolean { IsRefusedGroupByGroupname(groupname: string): boolean {
if (this.my.profile.refused_groups) if (this.my.profile.refused_groups)
return this.my.profile.refused_groups.findIndex((rec: IMyGroup) => rec.groupname === groupname) >= 0 return this.my.profile.refused_groups.findIndex((rec: IGroupShort) => rec.groupname === groupname) >= 0
else else
return false return false
}, },
@@ -340,13 +356,34 @@ export const useUserStore = defineStore('UserStore', {
}, },
IsMyCircuitByUser(user: IUserFields): any[] { IsMyCircuitByNameAndGroup(circuitname: string, groupname: string): boolean {
const globalStore = useGlobalStore()
if (globalStore.mygroups) {
const group: IMyGroup | undefined = globalStore.mygroups.find((rec: IMyGroup) => rec.groupname === groupname)
if (group && group.mycircuits) {
return group.mycircuits.findIndex((rec: any) => rec.circuitname === circuitname) >= 0
}
return false
} else
return false
},
getMyCircuitsInCommonByUser(user: IUserFields): any[] {
if (!this.my.profile.mycircuits || (!user || !user.profile || !user.profile.mycircuits)) if (!this.my.profile.mycircuits || (!user || !user.profile || !user.profile.mycircuits))
return [] return []
return tools.getCommon([...this.my.profile.mycircuits], [...user.profile.mycircuits], 'circuitname') return tools.getCommon([...this.my.profile.mycircuits], [...user.profile.mycircuits], 'circuitname')
}, },
getMyCircuitsInCommonByGroup(group: IMyGroup): any[] {
if (!this.my.profile.mycircuits || (!group || !group.mycircuits))
return []
return tools.getCommon([...this.my.profile.mycircuits], [...group.mycircuits], 'circuitname')
},
getAccountByCircuitId(circuitId: string): any { getAccountByCircuitId(circuitId: string): any {
if (this.my.profile.useraccounts) { if (this.my.profile.useraccounts) {

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 class="q-gutter-sm q-pa-sm q-pb-md">
<div <div
v-if="myuser && myuser.date_reg" 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 <CTitleBanner
v-if="site.confpages.showCompetenze" v-if="site.confpages.showCompetenze"
class="" class=""
@@ -40,24 +87,10 @@
myclass="myshad" myclass="myshad"
:canopen="true" :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 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'"> <div v-if="card.table === 'mygroups'">
<q-list> <q-list>
<span <span
@@ -65,7 +98,7 @@
:key="index" :key="index"
class="q-my-sm q-mx-none" class="q-my-sm q-mx-none"
clickable clickable
> >
<CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS"> <CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS">
</CMyGroup> </CMyGroup>
</span> </span>

View File

@@ -7,6 +7,7 @@ import { CCheckIfIsLogged } from '@/components/CCheckIfIsLogged'
import { CMyFieldRec } from '@/components/CMyFieldRec' import { CMyFieldRec } from '@/components/CMyFieldRec'
import { CCurrencyValue } from '@/components/CCurrencyValue' import { CCurrencyValue } from '@/components/CCurrencyValue'
import { CSaldo } from '@/components/CSaldo' import { CSaldo } from '@/components/CSaldo'
import { CTitleSec } from '@/components/CTitleSec'
import { CSkill } from '@/components/CSkill' import { CSkill } from '@/components/CSkill'
import { CDateTime } from '@/components/CDateTime' import { CDateTime } from '@/components/CDateTime'
import { tools } from '@store/Modules/tools' import { tools } from '@store/Modules/tools'
@@ -29,7 +30,7 @@ import { useCircuitStore } from '@store/CircuitStore'
export default defineComponent({ export default defineComponent({
name: 'mycircuit', name: 'mycircuit',
components: { components: {
CProfile, CTitleBanner, CMyFieldRec, CSkill, CDateTime, CMyFriends, CProfile, CTitleBanner, CMyFieldRec, CSkill, CTitleSec, CDateTime, CMyFriends,
CGridTableRec, CMyUser, CCheckIfIsLogged, CCurrencyValue, CSaldo, CNotifAtTop CGridTableRec, CMyUser, CCheckIfIsLogged, CCurrencyValue, CSaldo, CNotifAtTop
}, },
props: {}, props: {},
@@ -43,6 +44,8 @@ export default defineComponent({
const showonlymine = ref(true) const showonlymine = ref(true)
const tabellare = ref(false) const tabellare = ref(false)
const groupsListAdmin = ref(<string[]>[])
const groupnameSel = ref('')
const animation = ref('fade') const animation = ref('fade')
@@ -70,11 +73,13 @@ export default defineComponent({
const arrfilterand: any = ref([]) const arrfilterand: any = ref([])
const filterextra: any = ref([]) const filterextra: any = ref([])
const filterextra_group: any = ref([])
const filterextra2: any = ref([]) const filterextra2: any = ref([])
const filtercustom: any = ref([]) const filtercustom: any = ref([])
const filtercustom_rich: any = ref([]) const filtercustom_rich: any = ref([])
const searchList = ref([] as ISearchList[]) const searchList = ref([] as ISearchList[])
const cities = ref([] as ICity[]) const cities = ref([] as ICity[])
watch(() => path.value, (to: any, from: any) => { watch(() => path.value, (to: any, from: any) => {
@@ -117,20 +122,7 @@ export default defineComponent({
]; ];
filterextra.value = [ filterextra.value = [ {
/*{
'profile.mycircuits':
{
$elemMatch: {
circuitname:
{ $eq: circuit.value.name }
}
}
},
*/
{
$match: { $match: {
idapp: process.env.APP_ID, idapp: process.env.APP_ID,
'profile.mycircuits': { 'profile.mycircuits': {
@@ -199,6 +191,68 @@ export default defineComponent({
}, },
{ $unwind: '$account' }, { $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 = [] arrfilterand.value = []
filtercustom_rich.value = [] filtercustom_rich.value = []
@@ -212,6 +266,9 @@ export default defineComponent({
async function mounted() { async function mounted() {
await loadCircuit() await loadCircuit()
if (userStore.my.username)
groupsListAdmin.value = userStore.GroupsListWhereIAmAdmin(userStore.my.username)
} }
function getImgCircuit() { 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() { function extraparams_rich() {
return { return {
querytype: shared_consts.QUERYTYPE_CIRCUIT, querytype: shared_consts.QUERYTYPE_CIRCUIT,
@@ -349,6 +430,10 @@ export default defineComponent({
showonlymine, showonlymine,
tabellare, tabellare,
showsaldi, showsaldi,
extraparams_groups,
filterextra_group,
groupsListAdmin,
groupnameSel,
} }
} }
}) })

View File

@@ -67,8 +67,10 @@
</CSaldo> </CSaldo>
<div> <div>
<q-banner <q-banner
v-if="userStore.my.profile.calc.numGoodsAndServices <= 0 && v-if="
userStore.IsMyCircuitByName(circuit.name)" userStore.my.profile.calc.numGoodsAndServices <= 0 &&
userStore.IsMyCircuitByName(circuit.name)
"
rounded rounded
class="bg-orange text-white" class="bg-orange text-white"
style="text-align: center" style="text-align: center"
@@ -107,7 +109,8 @@
</q-banner> </q-banner>
<q-btn <q-btn
v-if="userStore.my.profile.calc.numGoodsAndServices > 0 && v-if="
userStore.my.profile.calc.numGoodsAndServices > 0 &&
!userStore.IsMyCircuitByName(circuit.name) && !userStore.IsMyCircuitByName(circuit.name) &&
!userStore.IsAskedCircuitByName(circuit.name) && !userStore.IsAskedCircuitByName(circuit.name) &&
!userStore.IsRefusedCircuitByName(circuit.name) !userStore.IsRefusedCircuitByName(circuit.name)
@@ -115,7 +118,10 @@
icon="fas fa-user-plus" icon="fas fa-user-plus"
color="primary" color="primary"
:label="$t('circuit.ask')" :label="$t('circuit.ask')"
@click="requestToEnterCircuit = true" @click="
requestToEnterCircuit = true;
groupnameSel = null;
"
/> />
<q-btn <q-btn
v-if="userStore.IsMyCircuitByName(circuit.name)" v-if="userStore.IsMyCircuitByName(circuit.name)"
@@ -222,16 +228,100 @@
icon="fas fa-file-word" icon="fas fa-file-word"
></q-tab> ></q-tab>
<q-tab <q-tab
v-if="tools.iAmAdminCircuit(circuit.name)" v-if="false && tools.iAmAdminCircuit(circuit.name)"
:label="t('circuit.conticomunitari')" :label="t('circuit.gruppicom')"
name="accounts" name="gruppicom"
icon="fas fa-coins" icon="fas fa-coins"
></q-tab> ></q-tab>
</q-tabs> </q-tabs>
<q-tab-panels v-model="tabcircuit" animated> <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>
<q-tab-panel name="mov"> <q-tab-panel name="mov">
<q-toggle <q-toggle
@@ -418,6 +508,36 @@
> >
</CCurrencyValue> </CCurrencyValue>
</div> </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>
<div class="sezioni"> <div class="sezioni">
<q-icon name="fas fa-stats" class="iconcirc"></q-icon> <q-icon name="fas fa-stats" class="iconcirc"></q-icon>
@@ -701,6 +821,9 @@
<!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">--> <!--:style="tools.displayStyles(myevent) + ` min-width: `+ tools.myheight_dialog() + `px;`">-->
<q-toolbar-title> <q-toolbar-title>
{{ circuit.name }} {{ circuit.name }}
<div v-if="groupnameSel">
Gruppo: {{ groupnameSel.groupname }}
</div>
</q-toolbar-title> </q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn> <q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar> </q-toolbar>
@@ -708,7 +831,9 @@
<div v-html="t('circuit.disclaimer')"></div> <div v-html="t('circuit.disclaimer')"></div>
</q-card-section> </q-card-section>
<q-card-section class="inset-shadow"> <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> <div v-html="circuit.regulation"></div>
</q-card-section> </q-card-section>
<q-card-actions align="center"> <q-card-actions align="center">
@@ -723,7 +848,8 @@
$q, $q,
userStore.my.username, userStore.my.username,
circuit.name, circuit.name,
true true,
groupnameSel ? groupnameSel.groupname : ''
); );
" "
/> />

View File

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

View File

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

View File

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