- Ricerca delle Organizzazioni, per inviare i RIS.

This commit is contained in:
Surya Paolo
2025-07-21 22:49:49 +02:00
parent 31161b6a32
commit 85db3b4a61
6 changed files with 251 additions and 133 deletions

View File

@@ -1,28 +1,37 @@
import { computed, defineComponent, onMounted, PropType, ref, watch, reactive, toRefs } from 'vue' import {
computed,
defineComponent,
onMounted,
PropType,
ref,
watch,
reactive,
toRefs,
} from 'vue';
import type { ISearchList } from '../../model'; import type { ISearchList } from '../../model';
import { ICalcStat, IOperators } from '../../model' import { ICalcStat, IOperators } from '../../model';
import { useUserStore } from '../../store/UserStore' import { useUserStore } from '../../store/UserStore';
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router';
import { useGlobalStore } from '../../store/globalStore' import { useGlobalStore } from '../../store/globalStore';
import { useCircuitStore } from '../../store/CircuitStore' import { useCircuitStore } from '../../store/CircuitStore';
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n';
import { shared_consts } from '@src/common/shared_vuejs' import { shared_consts } from '@src/common/shared_vuejs';
import { costanti, IMainCard } from '@store/Modules/costanti' import { costanti, IMainCard } from '@store/Modules/costanti';
import { CMyUser } from '../CMyUser' import { CMyUser } from '../CMyUser';
import { CTitleBanner } from '../CTitleBanner' import { CTitleBanner } from '../CTitleBanner';
import { CMyGroup } from '../CMyGroup' import { CMyGroup } from '../CMyGroup';
import { CQRCode } from '../CQRCode' import { CQRCode } from '../CQRCode';
import { CCopyBtnSmall } from '../CCopyBtnSmall' import { CCopyBtnSmall } from '../CCopyBtnSmall';
import { CContactUser } from '../CContactUser' import { CContactUser } from '../CContactUser';
import { CGridTableRec } from '../CGridTableRec' import { CGridTableRec } from '../CGridTableRec';
import { CUserInfoAccount } from '../CUserInfoAccount' import { CUserInfoAccount } from '../CUserInfoAccount';
import { tools } from '@tools' import { tools } from '@tools';
import { useQuasar } from 'quasar' import { useQuasar } from 'quasar';
import { colmyUserPeople } from '@store/Modules/fieldsTable' import { colmyUserPeople, colmyUserGroup } from '@store/Modules/fieldsTable';
export default defineComponent({ export default defineComponent({
name: 'CFindUsers', name: 'CFindUsers',
@@ -39,51 +48,62 @@ export default defineComponent({
}, },
}, },
components: { components: {
CMyUser, CMyGroup, CUserInfoAccount, CCopyBtnSmall, CMyUser,
CTitleBanner, CContactUser, CGridTableRec, CQRCode CMyGroup,
CUserInfoAccount,
CCopyBtnSmall,
CTitleBanner,
CContactUser,
CGridTableRec,
CQRCode,
}, },
setup(props) { setup(props) {
const userStore = useUserStore();
const globalStore = useGlobalStore();
const circuitStore = useCircuitStore();
const { t } = useI18n();
const $q = useQuasar();
const $router = useRouter();
const userStore = useUserStore() const receiveRislist = computed(() =>
const globalStore = useGlobalStore() globalStore.datastat ? globalStore.datastat.receiveRislist : []
const circuitStore = useCircuitStore() );
const { t } = useI18n() const receiveRislistgroup = computed(() =>
const $q = useQuasar() globalStore.datastat ? globalStore.datastat.receiveRislistgroup : []
const $router = useRouter() );
const listlinksreg = computed(() =>
globalStore.datastat ? globalStore.datastat.listlinksreg : []
);
const receiveRislist = computed(() => globalStore.datastat ? globalStore.datastat.receiveRislist : []) const arrfilterand: any = ref([]);
const receiveRislistgroup = computed(() => globalStore.datastat ? globalStore.datastat.receiveRislistgroup : []) const filtercustom: any = ref([]);
const listlinksreg = computed(() => globalStore.datastat ? globalStore.datastat.listlinksreg : []) const searchList = ref(<ISearchList[]>[]);
const arrfilterand: any = ref([]) const filter = ref(costanti.FIND_PEOPLE);
const filtercustom: any = ref([])
const searchList = ref(<ISearchList[]>[])
const filter = ref(costanti.FIND_PEOPLE) const loading = ref(false);
const tipoConto = ref(0);
const loading = ref(false) const contact = computed(() => userStore.my);
const tipoConto = ref(0)
const contact = computed(() => userStore.my) const searchType = ref('receivers');
const searchType = ref('receivers') const usersList = ref(<any>{ show: false, title: '', list: [], listgroup: [] });
const usersList = ref(<any>{ show: false, title: '', list: [], listgroup: [] })
const options = ref([ const options = ref([
{ {
label: 'Lista dei Riceventi di oggi', label: 'Lista dei Riceventi di oggi',
value: 'receivers' value: 'receivers',
}, },
{ {
label: 'Cerca per Nome o Username', label: 'Cerca per Nome o Username',
value: 'username' value: 'username',
}, },
{ {
label: 'Scansiona il QRCode del Destinatario', label: 'Scansiona il QRCode del Destinatario',
value: 'qrcode' value: 'qrcode',
}, },
]) ]);
const arrTypesAccounts = ref(<any>[ const arrTypesAccounts = ref(<any>[
{ {
@@ -93,22 +113,20 @@ export default defineComponent({
{ {
label: t('circuit.conticollettivi'), label: t('circuit.conticollettivi'),
value: shared_consts.AccountType.CONTO_DI_GRUPPO, value: shared_consts.AccountType.CONTO_DI_GRUPPO,
} },
]) ]);
function getFilterProvinceByRegion(recProvince: any, index: number, arr: any) { function getFilterProvinceByRegion(recProvince: any, index: number, arr: any) {
const recreg: any = searchList.value.find((rec) => rec.table === 'regions') const recreg: any = searchList.value.find((rec) => rec.table === 'regions');
if (recreg) { if (recreg) {
return recProvince.reg === recreg.value return recProvince.reg === recreg.value;
} else { } else {
return true return true;
} }
} }
function mounted() { function mounted() {
usersList.value.listlinkreg = listlinksreg;
usersList.value.listlinkreg = listlinksreg
searchList.value = [ searchList.value = [
{ {
@@ -123,7 +141,7 @@ export default defineComponent({
arrvalue: [], arrvalue: [],
filter: null, filter: null,
useinput: false, useinput: false,
icon: 'fas fa-globe-europe' icon: 'fas fa-globe-europe',
}, },
{ {
visible: true, visible: true,
@@ -131,7 +149,10 @@ export default defineComponent({
table: 'provinces', table: 'provinces',
key: 'profile.resid_province', key: 'profile.resid_province',
type: costanti.FieldType.select, type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + 'provinces_fr', costanti.FILTER_TUTTI), value: tools.getCookie(
tools.COOK_SEARCH + 'provinces_fr',
costanti.FILTER_TUTTI
),
keycookie: '_fr', keycookie: '_fr',
addall: true, addall: true,
arrvalue: [], arrvalue: [],
@@ -140,21 +161,48 @@ export default defineComponent({
icon: 'flag', icon: 'flag',
tablesel: 'provinces', tablesel: 'provinces',
}, },
] ];
filtercustom.value = [] filtercustom.value = [];
arrfilterand.value = [] arrfilterand.value = [];
const filt_loaded = tools.getCookie(tools.COOK_SEARCH + tools.FRIENDS_SEARCH, costanti.FIND_PEOPLE, true) const filt_loaded = tools.getCookie(
filter.value = filt_loaded ? filt_loaded : costanti.FIND_PEOPLE tools.COOK_SEARCH + tools.FRIENDS_SEARCH,
costanti.FIND_PEOPLE,
true
);
filter.value = filt_loaded ? filt_loaded : costanti.FIND_PEOPLE;
updateUserListRIS() updateUserListRIS();
sendCoinsToClick() sendCoinsToClick();
}
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() { function extraparams() {
return { return {
lookup1: { lookup1: {
lk_tab: 'provinces', lk_tab: 'provinces',
@@ -175,38 +223,34 @@ export default defineComponent({
'profile.resid_province': 1, 'profile.resid_province': 1,
'mycities.reg': 1, 'mycities.reg': 1,
perm: 1, perm: 1,
} },
}, },
};
}
} }
onMounted(mounted);
onMounted(mounted)
async function updateUserListRIS() { async function updateUserListRIS() {
const userStore = useUserStore() const userStore = useUserStore();
loading.value = true loading.value = true;
await globalStore.getStatSite() await globalStore.getStatSite();
usersList.value.list = receiveRislist usersList.value.list = receiveRislist;
usersList.value.listgroup = receiveRislistgroup usersList.value.listgroup = receiveRislistgroup;
// usersList.value.listlinkreg = listlinksreg // usersList.value.listlinkreg = listlinksreg
loading.value = false loading.value = false;
} }
async function sendCoinsToClick() { async function sendCoinsToClick() {
usersList.value.show = true; usersList.value.show = true;
usersList.value.title = t('circuit.sendcoins'); usersList.value.title = t('circuit.sendcoins');
usersList.value.list = receiveRislist usersList.value.list = receiveRislist;
usersList.value.listgroup = receiveRislistgroup usersList.value.listgroup = receiveRislistgroup;
} }
return { return {
userStore, userStore,
tools, tools,
@@ -218,6 +262,7 @@ export default defineComponent({
t, t,
extraparams, extraparams,
colmyUserPeople, colmyUserPeople,
colmyUserGroup,
searchList, searchList,
options, options,
searchType, searchType,
@@ -227,6 +272,9 @@ export default defineComponent({
receiveRislistgroup, receiveRislistgroup,
tipoConto, tipoConto,
CQRCode, CQRCode,
} extraparams_groups,
filtercustom,
arrfilterand,
};
}, },
}) });

View File

@@ -6,39 +6,95 @@
:options="options" :options="options"
color="primary" color="primary"
/> />
<q-tab-panels v-model="searchType" keep-alive animated class="shadow-2 rounded-borders"> <q-tab-panels
v-model="searchType"
keep-alive
animated
class="shadow-2 rounded-borders"
>
<q-tab-panel name="username"> <q-tab-panel name="username">
<CGridTableRec <div class="column centeritems">
prop_mytable="users" <q-btn-toggle
prop_mytitle="" v-if="arrTypesAccounts.length > 0"
subtitle="" v-model="tipoConto"
:prop_mycolumns="colmyUserPeople" class="my-custom-toggle"
prop_colkey="_id" no-caps
col_title="username" rounded
:vertical="costanti.VISUTABLE_LISTA" unelevated
nodataLabel=" " toggle-color="primary"
:prop_search="true" color="white"
:prop_showfilter="true" text-color="primary"
hint="Cerca il nome o Username" :options="arrTypesAccounts"
:hintinbtnsearch="true" />
:findByDebounce="true" </div>
:showSearchOnTop="false"
:finder="true" <div v-if="tipoConto === shared_consts.AccountType.USER">
:choose_visutype="false" <CGridTableRec
:finder_noNull="false" prop_mytable="users"
:finder_noNullFilters="true" prop_mytitle=""
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS" subtitle=""
:butt_modif_new="false" :prop_mycolumns="colmyUserPeople"
noresultLabel="Username, Nome o Cognome non trovato" prop_colkey="_id"
:arrfilters="arrfilterand" col_title="username"
:filtercustom="filtercustom" :vertical="costanti.VISUTABLE_LISTA"
:prop_searchList="searchList" nodataLabel=" "
:showType="costanti.SHOW_USERINFO" :prop_search="true"
:showCol="false" :prop_showfilter="true"
:extraparams="extraparams()" hint="Cerca il nome o Username della persona"
:actionType="actionType" :hintinbtnsearch="true"
> :findByDebounce="true"
</CGridTableRec> :showSearchOnTop="false"
:finder="true"
:choose_visutype="false"
:finder_noNull="false"
:finder_noNullFilters="true"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username, Nome o Cognome non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:showType="costanti.SHOW_USERINFO"
:showCol="false"
:extraparams="extraparams()"
:actionType="actionType"
>
</CGridTableRec>
</div>
<div v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO">
<CGridTableRec
prop_mytable="mygroups"
prop_mytitle=""
subtitle=""
:prop_mycolumns="colmyUserGroup"
prop_colkey="_id"
col_title="groupname"
:vertical="costanti.VISUTABLE_SCHEDA_USER"
nodataLabel=" "
:prop_search="true"
:prop_showfilter="true"
:hint="$t('otherpages.find_group')"
:hintinbtnsearch="true"
:findByDebounce="true"
:showSearchOnTop="false"
:finder="true"
:choose_visutype="false"
:finder_noNull="false"
:finder_noNullFilters="true"
:options="shared_consts.OPTIONS_SEARCH_USER_ALL_WORDS"
:butt_modif_new="false"
noresultLabel="Username, Nome del gruppo non trovato"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:showType="costanti.SHOW_GROUPINFO"
:showCol="false"
:extraparams="extraparams_groups()"
:actionType="actionType"
:visufind="costanti.FIND_GROUP"
>
</CGridTableRec>
</div>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="receivers"> <q-tab-panel name="receivers">
<div class="column centeritems"> <div class="column centeritems">
@@ -56,7 +112,10 @@
/> />
<div v-if="tipoConto === shared_consts.AccountType.USER"> <div v-if="tipoConto === shared_consts.AccountType.USER">
<div v-for="(rec, i) in usersList.list" :key="i"> <div
v-for="(rec, i) in usersList.list"
:key="i"
>
<div class="q-pa-xs q-ma-xs q-border q-rounded my-custom-border"> <div class="q-pa-xs q-ma-xs q-border q-rounded my-custom-border">
<CMyUser <CMyUser
:mycontact="rec" :mycontact="rec"
@@ -74,11 +133,16 @@
</div> </div>
</div> </div>
</div> </div>
<div <div v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO">
v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO" <div
> v-for="(grp, i) in usersList.listgroup"
<div v-for="(grp, i) in usersList.listgroup" :key="i"> :key="i"
<CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS" :noaut="true"> >
<CMyGroup
:mygrp="grp"
:visu="costanti.USER_GROUPS"
:noaut="true"
>
</CMyGroup> </CMyGroup>
</div> </div>
</div> </div>
@@ -98,9 +162,13 @@
> >
</q-btn> </q-btn>
<q-spinner-radio v-if="loading" class="q-ma-sm" color="brown" /> <q-spinner-radio
v-if="loading"
class="q-ma-sm"
color="brown"
/>
<div class="q-ma-sm">&nbsp;</div> <div class="q-ma-sm">&nbsp;</div>
<br> <br />
</div> </div>
</q-tab-panel> </q-tab-panel>
<q-tab-panel name="qrcode"> <q-tab-panel name="qrcode">
@@ -109,8 +177,7 @@
</q-tab-panels> </q-tab-panels>
</template> </template>
<script lang="ts" src="./CFindUsers.ts"> <script lang="ts" src="./CFindUsers.ts"></script>
</script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import './CFindUsers.scss'; @import './CFindUsers.scss';

View File

@@ -65,9 +65,9 @@ export default defineComponent({
default: true, default: true,
}, },
heightcarousel: { heightcarousel: {
type: Number, type: String,
required: false, required: false,
default: 0, default: '',
}, },
enableExport: { enableExport: {
type: Boolean, type: Boolean,

View File

@@ -149,7 +149,7 @@
:optval="fieldsTable.getKeyByTable(item.table)" :optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)" :optlab="fieldsTable.getLabelByTable(item.table)"
:options="valoriopt(item, item.addall, item.addnone)" :options="valoriopt(item, item.addall, item.addnone)"
:filter="item && item.filter ? item.filter : ''" :filter="item && item.filter ? item.filter : null"
:filter_extra="item.filter_extra" :filter_extra="item.filter_extra"
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server" :useinput="item.useinput && item.type !== costanti.FieldType.select_by_server"
> >
@@ -173,7 +173,7 @@
:icon_alternative="item.icon" :icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)" :optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)" :optlab="fieldsTable.getLabelByTable(item.table)"
:filter="item.filter" :filter="item && item.filter ? item.filter : null"
:filter_extra="item.filter_extra" :filter_extra="item.filter_extra"
:options="valoriopt(item, false)" :options="valoriopt(item, false)"
:useinput="true" :useinput="true"
@@ -197,7 +197,7 @@
stack-label stack-label
:useinput="item.useinput" :useinput="item.useinput"
:options="valoriopt(item, item.addall, item.addnone)" :options="valoriopt(item, item.addall, item.addnone)"
:filter="item.filter" :filter="item && item.filter ? item.filter : null"
class="combowidth" class="combowidth"
:option-value="fieldsTable.getKeyByTable(item.table)" :option-value="fieldsTable.getKeyByTable(item.table)"
> >
@@ -825,7 +825,7 @@
:optval="fieldsTable.getKeyByTable(item.table)" :optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)" :optlab="fieldsTable.getLabelByTable(item.table)"
:options="valoriopt(item, item.addall, item.addnone)" :options="valoriopt(item, item.addall, item.addnone)"
:filter="item.filter" :filter="item && item.filter ? item.filter : null"
:filter_extra="item.filter_extra" :filter_extra="item.filter_extra"
:useinput="item.useinput && item.type !== costanti.FieldType.select_by_server" :useinput="item.useinput && item.type !== costanti.FieldType.select_by_server"
> >
@@ -854,7 +854,7 @@
:icon_alternative="item.icon" :icon_alternative="item.icon"
:optval="fieldsTable.getKeyByTable(item.table)" :optval="fieldsTable.getKeyByTable(item.table)"
:optlab="fieldsTable.getLabelByTable(item.table)" :optlab="fieldsTable.getLabelByTable(item.table)"
:filter="item.filter" :filter="item && item.filter ? item.filter : null"
:filter_extra="item.filter_extra" :filter_extra="item.filter_extra"
:options="valoriopt(item, false)" :options="valoriopt(item, false)"
:useinput="true" :useinput="true"
@@ -879,7 +879,7 @@
stack-label stack-label
:useinput="item.useinput" :useinput="item.useinput"
:options="valoriopt(item, item.addall, item.addnone)" :options="valoriopt(item, item.addall, item.addnone)"
:filter="item.filter" :filter="item && item.filter ? item.filter : null"
class="combowidth" class="combowidth"
:option-value="fieldsTable.getKeyByTable(item.table)" :option-value="fieldsTable.getKeyByTable(item.table)"
> >

View File

@@ -22,7 +22,8 @@ export default defineComponent({
}, },
arrvalue: { arrvalue: {
type: Array, type: Array,
required: true, required: false,
default: [],
}, },
value: [String, Number, Object], value: [String, Number, Object],
label: { label: {
@@ -155,7 +156,8 @@ export default defineComponent({
filter: { filter: {
type: Function, type: Function,
required: false, required: false,
} default: () => true,
},
}, },
components: {}, components: {},
setup(props, { emit }) { setup(props, { emit }) {
@@ -327,7 +329,7 @@ export default defineComponent({
} }
function mounted() { function mounted() {
console.log('CMYSELECT: mounted') // console.log('CMYSELECT: mounted')
optionsreal.value = props.options optionsreal.value = props.options
if (props.focus) { if (props.focus) {
focusVisibleSelect() focusVisibleSelect()

View File

@@ -150,6 +150,7 @@ const msg_it = {
sito_offline: 'Sito in Aggiornamento', sito_offline: 'Sito in Aggiornamento',
modifprof: 'Modifica', modifprof: 'Modifica',
modifgrp: 'Modifica Organizzazione', modifgrp: 'Modifica Organizzazione',
find_group: 'Cerca il nome dell\'Organizzazione',
biografia: 'Biografia', biografia: 'Biografia',
qualifica: 'Qualifica (in breve)', qualifica: 'Qualifica (in breve)',
update: 'Aggiornamento in Corso...', update: 'Aggiornamento in Corso...',