10 Commits

Author SHA1 Message Date
Surya Paolo
2533da3692 Cataloghi... 2025-02-05 12:13:36 +01:00
Surya Paolo
979f90f980 ver 1.1.20:
- corretto campo foto che non compariva più.
 - sistemato i campi aggiuntivi e i richiesti.
- migliorato la barra in alto di selezione.
- aggiunto alcune icone.
2025-02-03 17:18:33 +01:00
Surya Paolo
997fd136ea 1.1.18 2025-01-29 09:17:38 +01:00
Surya Paolo
d65d4e3ffa - Gruppi si chiamano ora "Organizzazioni".
- Categorie dei Gruppi aggiornate.
- Email ora compare sul profilo se non hai telegram e anche sugli annunci.
2025-01-28 23:32:37 +01:00
Surya Paolo
17bcc1644d - sono uscito da tutti i circuiti che sono a zero e anche admin. 2025-01-15 16:48:38 +01:00
Surya Paolo
7160eee734 - nella lista circuiti ora si vedono tutti gli annunci del circuito stesso 2025-01-15 15:39:58 +01:00
Surya Paolo
e2dbe08139 - Lista iscritti: aggiunto le note e il flag "Da Contattare" 2025-01-14 19:17:05 +01:00
Surya Paolo
08a089881c - aggiunto anche nei beni, servizi e ospitalità la possibilità di aggiungerli come "Gruppo" 2025-01-14 18:34:58 +01:00
Surya Paolo
37970c5c91 piccole modifiche... 2025-01-12 21:29:16 +01:00
Surya Paolo
2b1fc9b090 - varie sistemazioni: filtri iscritti, profilo, ecc... 2025-01-11 12:08:03 +01:00
121 changed files with 3467 additions and 1409 deletions

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

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

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

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

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19"
DIRECTORY_LOCAL="newfreeplanet"
@@ -13,8 +13,8 @@ PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://localhost:3000"
LOGO_REG='abitaregliiblei-logo-full.png'
TEST_NAME="Paolo"
TEST_SURNAME="Arena"
TEST_NAME="Surya"
TEST_SURNAME=""
TEST_EMAIL=""
TEST_USERNAME=""
TEST_PASSWORD=""

View File

@@ -99,9 +99,6 @@ const msg_website_enUs = {
people: 'Gue.',
peoplelegend: 'Number of guests',
},
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore',
department: 'Uffici',
title: 'Titolo',

View File

@@ -1,9 +1,9 @@
{
"name": "abitaregliiblei",
"version": "1.1.15",
"version": "1.1.20",
"description": "Abitare Gli Iblei",
"productName": "AbitareGliIblei",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

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

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,9 +1,9 @@
{
"name": "riso",
"version": "1.1.15",
"version": "1.1.20",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,9 +1,9 @@
{
"name": "fioredellavita",
"version": "1.1.15",
"version": "1.1.20",
"description": "Fiore Della Vita",
"productName": "Fiore Della Vita",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

@@ -3,7 +3,7 @@
"version": "0.0.8",
"description": "FreePlanet",
"productName": "FreePlanet",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [
],

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL="newfreeplanet"
@@ -13,8 +13,8 @@ PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://localhost:3000"
LOGO_REG='gruppomacro-logo-full.png'
TEST_NAME="Paolo"
TEST_SURNAME="Arena"
TEST_NAME="Surya"
TEST_SURNAME=""
TEST_EMAIL=""
TEST_USERNAME=""
TEST_PASSWORD=""

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet

View File

@@ -30,27 +30,6 @@ const msg_website_it = {
test: 'Test',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
cash: 'Cassa',
productInfos: 'Info Prodotti',
listinoprodotti: 'Listino Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
categories: 'Categorie',
storehouses: 'Magazzino',
providers: 'Fornitori',
catprods: 'Categorie',
subcatprods: 'Sotto-Categorie',
gasordine: 'Gas Ordine',
scontisticas: 'Scontistica',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Pagamenti',
regok: 'Registrazione Confermata',
presentazione: 'Presentazione',
presentazione2: 'Presentazione',
@@ -101,9 +80,6 @@ const msg_website_it = {
projectsShared: 'Condivisi da me',
myprojects: 'Privati',
favproj: 'Favoriti',
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
hours: 'Ore',
department: 'Uffici',
title: 'Titolo',
@@ -133,8 +109,6 @@ const msg_website_it = {
only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri',
color: 'Colore',
gasordini: 'Gas Ordini',
gestoreordini: 'Gestore Ordini',
},
msg: {
myAppName: 'Più che Buono',

View File

@@ -1,9 +1,9 @@
{
"name": "gruppomacro",
"version": "1.1.15",
"version": "1.1.20",
"description": "GruppoMacro",
"productName": "Gruppo Macro",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,9 +1,9 @@
{
"name": "piuchebuono",
"version": "1.1.15",
"version": "1.1.20",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

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

View File

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

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.15"
APP_VERSION="1.1.20"
SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet

Binary file not shown.

Before

Width:  |  Height:  |  Size: 634 KiB

After

Width:  |  Height:  |  Size: 424 KiB

View File

@@ -1,9 +1,9 @@
{
"name": "riso",
"version": "1.1.15",
"version": "1.1.20",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

@@ -1,9 +1,9 @@
{
"name": "riso",
"version": "1.1.15",
"version": "1.1.20",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso",
"author": "Paolo Arena",
"author": "Surya",
"private": true,
"keywords": [],
"license": "MIT",

View File

@@ -34,7 +34,7 @@ self.addEventListener('activate', (event) => {
});
const APP_VERSION = "1.1.15";
const APP_VERSION = "1.1.20";
console.log(' [ VER-' + APP_VERSION + ' ] _---------________------ PAO: this is my custom service worker');

View File

@@ -169,6 +169,7 @@ export const shared_consts = {
EDITADDRESSBYCOORD: 390,
GRID_ORIZ: 400,
QRCODE: 410,
CATALOGLIST: 420,
},
QUERYTYPE_MYGROUP: 1,
@@ -208,6 +209,13 @@ export const shared_consts = {
FILTER_USER_WITHOUT_USERNAME_TELEGRAM: 8388608,
FILTER_USER_PROVINCE: 16777216,
FILTER_USER_SENZA_PROVINCE: 33554432,
FILTER_USER_SENZA_CIRCUITO: 67108864,
FILTER_USER_CON_CIRCUITO: 134217728,
FILTER_USER_ONLINE_6_MESI: 268435456,
FILTER_NOTE: 536870912,
FILTER_SENZA_NOTE: 1073741824,
FILTER_DA_CONTATTARE: 2147483648,
FILTER_FACILITATORE: 4294967296,
OPTIONS_SEARCH_ONLY_FULL_WORDS: 1,
OPTIONS_SEARCH_USER_ONLY_FULL_WORDS: 2,
@@ -288,6 +296,72 @@ export const shared_consts = {
TABLES_CIRCUITS: 'circuits',
TABLES_MYGROUPS: 'mygroups',
TABLES_ATTIVITAS: 'attivitas',
TABLES_CATALOG: 'catalogs',
TABFILTRI_UTENTE: 'filtriutente',
RECFILTRI_UTENTE: [
{
label: '[Tutti]',
value: -100,
},
// {
// label: 'Online almeno da 6 mesi',
// value: 268435456, // FILTER_USER_ONLINE_6_MESI: 268435456,
// },
{
label: 'Senza Provincia',
value: 33554432, // FILTER_USER_SENZA_PROVINCE
},
{
label: 'Dentro ad un Circuito RIS',
value: 134217728, //FILTER_USER_CON_CIRCUITO:
},
{
label: 'Senza Circuito RIS',
value: 67108864, // FILTER_USER_SENZA_CIRCUITO
},
{
label: 'Con Provincia inserita',
value: 16777216, //FILTER_USER_PROVINCE:
},
],
RECFILTRI_UTENTE_FACIL: [
{
label: 'Facilitatore RISO',
value: 4294967296, //FILTER_FACILITATORE: ,:
},
{
label: 'Non ancora approvati dall\'invitante',
value: 2097152, // shared_consts.FILTER_USER_NO_VERIFIED_APORTADOR
},
{
label: 'Senza Telegram BOT',
value: 32, //shared_consts.FILTER_USER_NO_TELEGRAM_ID
},
{
label: 'Senza username Telegram',
value: 8388608, // shared_consts.FILTER_USER_WITHOUT_USERNAME_TELEGRAM
},
{
label: 'Chat "BOT RISO" eliminata',
value: 1024, //shared_consts.FILTER_USER_TELEGRAM_BLOCKED
},
{
label: 'Con Note Facilitatore',
value: 536870912, //shared_consts.FILTER_NOTE
},
{
label: 'Senza Note Facilitatore',
value: 1073741824, //shared_consts.FILTER_SENZA_NOTE
},
{
label: 'Da Contattare',
value: 2147483648, //shared_consts.FILTER_DA_CONTATTARE
},
],
MYTABS: [{ id: 0, table: 'none' },
{ id: 1, table: 'myskills' },
@@ -322,7 +396,7 @@ export const shared_consts = {
TABLES_UPDATE_LASTIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots'],
TABLES_FINDER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups'],
TABLES_VISU_CMYSRECCARD: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups'],
TABLES_VISU_CMYSRECCARD: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups', 'catalogs'],
TABLES_SHOW_ADTYPE: ['myskills', 'mygoods', 'myhosps'],
TABLES_VISU_LISTA_USER: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'users'],
@@ -334,9 +408,11 @@ export const shared_consts = {
TABLES_VISU_IMG: ['myskills', 'myhosps', 'mygoods', 'mygroups'],
TABLES_DIRECTORY_A_PARTE: ['mygroups'],
TABLES_WITH_ADMINS: ['mygroups', 'circuits'],
TABLES_DIRECTORY_SINGLE_IMG: ['circuits'],
TABLES_DIRECTORY_SINGLE_IMG: ['circuits', 'catalogs'],
TABLES_IMAGEFILE_SINGOLO: ['productInfos'],
TABLES_PER_EDITORI: ['catalogs'],
TABLES_VISU_MAP: 'attivitas',
VISIB_ALL: 0,
@@ -1102,7 +1178,7 @@ export const shared_consts = {
},
{
id: 4,
label: 'a Paolo (test)',
label: 'a Surya (test)',
value: 20,
},
{
@@ -1691,6 +1767,10 @@ export const shared_consts = {
value: 410,
label: 'Qr Code',
},
{
value: 420,
label: 'Lista Cataloghi',
},
],
TypesElemAdminTools: [
@@ -2131,6 +2211,14 @@ export const shared_consts = {
}
}
const proj_common = {
'mygrp.groupname': 1,
'mygrp.title': 1,
'mygrp.photos': 1,
}
proj = Object.assign({}, proj, proj_common);
if (proj_add)
proj = Object.assign({}, proj, proj_add);
@@ -2146,6 +2234,7 @@ export const shared_consts = {
adType: 1,
photos: 1,
note: 1,
da_contattare: 1,
descr: 1,
date_createzd: 1,
date_updated: 1,
@@ -2162,6 +2251,8 @@ export const shared_consts = {
'profile.mygroups': 1,
'profile.mycircuits': 1,
'profile.qualifica': 1,
'profile.note': 1,
'profile.da_contattare': 1,
'profile.resid_province': 1,
'profile.resid_card': 1,
'profile.username_telegram': 1,
@@ -2177,6 +2268,7 @@ export const shared_consts = {
username_who_report: 1,
namecomplete: 1,
date_reg: 1,
perm: 1,
};
if (proj_add)

View File

@@ -123,6 +123,17 @@ export default defineComponent({
}
return ''
})
const colorsel = computed(() => {
const myarr: any = tools.getoptionsMainCards(false)
if (myarr) {
const rec = myarr.find((rec: any) => rec.value === tablesel.value)
if (rec) {
return rec.color
}
}
return ''
})
const myfilter = ref('')
const myfilterand: any = ref([])
let rowsel: any = {}
@@ -362,6 +373,7 @@ export default defineComponent({
iconsel,
filtri,
clickButtBar,
colorsel,
}
}
})

View File

@@ -25,20 +25,22 @@
/>
</q-avatar>
</div>
<div class="col-fixed" style="width: 200px">
<div class="col-fixed " style="width: 200px;">
<q-select
dense
v-model="tablesel"
:options="optionsMainCards"
emit-value
borderless
class="text-blue"
rounded
dense
filled
class="text-blue q-ml-sm"
bg-color="light-blue-2"
map-options
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
@update:model-value="gotoPageSel"
>
<template v-slot:prepend>
<q-icon :name="iconsel" />
<q-icon :name="iconsel" :color="colorsel" />
</template>
<template v-slot:option="scope">
<q-item v-bind="scope.itemProps">

View File

View File

@@ -0,0 +1,199 @@
import {
computed,
provide, defineComponent, onBeforeMount, onBeforeUnmount, onMounted, ref, toRef, toRefs, watch,
} from 'vue'
import { tools } from '@store/Modules/tools'
import { CMyFieldDb } from '@/components/CMyFieldDb'
import { costanti } from '@costanti'
import { useGlobalStore } from '@store/globalStore'
import { useUserStore } from '@store/UserStore'
import { CTitlePage } from '@/components/CTitlePage'
import { CGridTableRec } from '@/components/CGridTableRec'
import { IColGridTable, IMyBacheca, IMySkill, ISearchList, ISkill } from 'model'
import { shared_consts } from '@/common/shared_vuejs'
import { useI18n } from '@/boot/i18n'
import { toolsext } from '@store/Modules/toolsext'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { useQuasar } from 'quasar'
export default defineComponent({
name: 'CCatalogList',
emits: ['clickButtBar'],
props: {
ind: {
type: Number,
required: false,
default: -1,
},
prop_search: {
type: Boolean,
required: false,
default: true,
},
finder: {
type: Boolean,
required: false,
default: true,
},
heightcarousel: {
type: Number,
required: false,
default: 0,
},
},
components: {
CMyFieldDb, CGridTableRec, CTitlePage,
},
setup(props, { attrs, slots, emit }) {
const { t } = useI18n()
const $q = useQuasar()
const globalStore = useGlobalStore()
const userStore = useUserStore()
const table = ref('catalogs')
const searchList_Base = ref(<ISearchList[]>[])
const arrfilterand: any = ref([])
const filtercustom: any = ref([])
const search = ref('')
const myrecfiltertoggle = ref(tools.FILTER_ALL)
const prop_colkey = ref('')
const col_title = ref('')
const col_footer = ref('')
const col_tabfooter = ref('')
const strextra = ref('')
const myoptions = ref(<any>[])
const col = ref(<IColGridTable[]>[])
const myCatRef = ref(<any>null)
/*
const idSectorServizi = computed(() => {
let myval: any = null
myval = searchList_Servizi.value.find((rec) => (rec.table === toolsext.TABSECTORS))
if (myval) {
const ris = myval.value || 0
// console.log('idSectorServizi=', ris)
return ris
} else {
return 0
}
})
*/
function updatefilter(value: any) {
//
}
watch(() => myrecfiltertoggle.value, (value: any, oldval: any) => {
updatefilter(value)
},
)
const mypagination = computed(() => {
return { sortBy: 'title', descending: false, page: 1, rowsNumber: 0, rowsPerPage: 10 }
})
const searchList = computed(() => {
return searchList_Base.value
})
const showType = computed(() => {
return costanti.SHOW_MYCARD
})
const hint = computed(() => {
return 'digita una parola da cercare'
})
const visuType = computed(() => {
return false // $q.screen.gt.xs
})
const noMsgRecord = computed(() => {
return 'Nessun dato trovato con i filtri selezionati'
})
function mounted() {
let obj = tools.getParamsByTable(table.value)
prop_colkey.value = obj.prop_colkey
col_title.value = obj.col_title
col_footer.value = obj.col_footer
col_tabfooter.value = obj.col_tabfooter
searchList_Base.value = []
filtercustom.value = []
col.value = fieldsTable.getArrColsByTable(table.value)
}
function mySortFieldsAvailable() {
if (table.value === toolsext.TABUSER) {
return userStore.getSortFieldsAvailable()
}
return []
}
function doSearch() {
//
}
function clickButtBar(item: any) {
if (myCatRef.value) {
myCatRef.value.clickButtBar(item)
}
// emit('clickButtBar', item)
}
onMounted(mounted)
return {
t,
tools,
costanti,
arrfilterand,
filtercustom,
searchList,
search,
doSearch,
myrecfiltertoggle,
prop_colkey,
col_title,
col_footer,
col_tabfooter,
col,
toolsext,
mypagination,
noMsgRecord,
showType,
visuType,
hint,
myoptions,
mySortFieldsAvailable,
clickButtBar,
myCatRef,
table,
}
},
})

View File

@@ -0,0 +1,47 @@
<template>
<div class="q-ma-xs">
<CGridTableRec
v-if="col && col.length > 0"
ref="myCatRef"
:prop_mytable="table"
:options="tools.optionsTable(table)"
:prop_mytitlenew="tools.getTitleAnnuncio(table)"
prop_mytitle="Cataloghi"
:prop_mycolumns="col"
:prop_colkey="prop_colkey"
:col_title="col_title"
:col_footer="col_footer"
:col_tabfooter="col_tabfooter"
:vertical="costanti.VISUTABLE_LISTA"
:prop_pagination="mypagination"
:showType="showType"
:hint="hint"
:nodataLabel="noMsgRecord"
:prop_search="prop_search"
:finder="finder"
labelElemFind="trovati"
:choose_visutype="visuType"
:butt_modif_new="tools.isAdmin()"
:noresultLabel="t('grid.nosearchfound')"
:arrfilters="arrfilterand"
:filtercustom="filtercustom"
:prop_searchList="searchList"
:defaultnewrec="tools.getdefaultnewrec(table)"
labelBtnAddRow="NONE"
:prop_SortFieldsAvailable="mySortFieldsAvailable"
labelBtnAddExtra="Aggiungi Catalogo"
:extraparams="tools.extraparams(table, { myrecfiltertoggle })"
:prop_showMap="false"
:heightcarousel="heightcarousel"
@clickButtBar="clickButtBar"
:opt="{rowclass: true, widthcard: '170px', heightcard: '170px'}"
>
</CGridTableRec>
</div>
</template>
<script lang="ts" src="./CCatalogList.ts">
</script>
<style lang="scss" scoped>
@import './CCatalogList.scss';
</style>

View File

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

View File

@@ -1,23 +1,23 @@
import { PropType, defineComponent, ref, watch } from 'vue'
import { Catalogo } from '@src/views/ecommerce/catalogo'
import { ICatalogo } from '@src/model'
import { IOptCatalogo } from '@src/model'
export default defineComponent({
name: 'CCatalogo',
components: { Catalogo },
emits: ['update:modelValue', 'updateCatalogo'],
props: {
// add options ICatalogo
// add options IOptCatalogo
modelValue: {
type: Object as PropType<ICatalogo>,
type: Object as PropType<IOptCatalogo>,
required: true,
},
},
setup(props, { emit }) {
// Crea una copia locale reattiva di modelValue
const localCatalogo = ref<ICatalogo>({ ...props.modelValue });
const localCatalogo = ref<IOptCatalogo>({ ...props.modelValue });
// Watcher per sincronizzare le modifiche di modelValue
watch(() => props.modelValue, (newVal) => {
@@ -31,12 +31,12 @@ export default defineComponent({
}
// Metodo per aggiornare il valore del catalogo
const updateCatalogo = (updatedCatalogo: ICatalogo) => {
const updateCatalogo = (updatedCatalogo: IOptCatalogo) => {
localCatalogo.value = updatedCatalogo; // Aggiorna la copia locale
updateCatalogoPadre()
};
function updateCatalogoEmit(updatedCatalogo: ICatalogo) {
function updateCatalogoEmit(updatedCatalogo: IOptCatalogo) {
console.log('updateCatalogoEmit')
localCatalogo.value = updatedCatalogo; // Aggiorna la copia locale
updateCatalogoPadre()

View File

@@ -17,7 +17,7 @@ import { CBarCode } from '../CBarCode'
import { func_tools, toolsext } from '@store/Modules/toolsext'
import {
IBaseOrder, ICatalogo, IGasordine, IMyScheda, IOrder, IOrderCart,
IBaseOrder, IOptCatalogo, IGasordine, IMyScheda, IOrder, IOrderCart,
IProduct, IVariazione
} from '@src/model'
import { tools } from '@store/Modules/tools'
@@ -63,7 +63,7 @@ export default defineComponent({
default: () => { }
},
modelValue: {
type: Object as PropType<ICatalogo>,
type: Object as PropType<IOptCatalogo>,
required: true,
},
scheda: {
@@ -100,7 +100,7 @@ export default defineComponent({
const apriSchedaPDF = ref(false)
// Crea una copia locale reattiva di modelValue
const optcatalogo = ref<ICatalogo>({ ...props.modelValue });
const optcatalogo = ref<IOptCatalogo>({ ...props.modelValue });
// Watcher per sincronizzare le modifiche di modelValue
watch(() => props.modelValue, (newVal) => {
@@ -113,7 +113,7 @@ export default defineComponent({
}
// Metodo per aggiornare il valore del catalogo
const updateCatalogo = (updatedCatalogo: ICatalogo) => {
const updateCatalogo = (updatedCatalogo: IOptCatalogo) => {
optcatalogo.value = updatedCatalogo; // Aggiorna la copia locale
updateCatalogoPadre()
};

View File

@@ -52,17 +52,6 @@ export default defineComponent({
return userStore.my.username
}
function getLinkUserTelegram() {
if (props.myuser) {
if (!!props.myuser.profile.username_telegram) {
return 'https://t.me/' + props.myuser.profile.username_telegram
}
} else {
return ''
}
}
function getLinkWebSite() {
if (props.myuser) {
let mysite = props.myuser.profile.website!
@@ -98,7 +87,6 @@ export default defineComponent({
userStore,
shared_consts,
showsendCoinTo,
getLinkUserTelegram,
getLinkWebSite,
myusername,
showingtooltip,

View File

@@ -1,12 +1,16 @@
<template>
<div
v-if="(getLinkUserTelegram() && tools.isUserOk()) || showBtnActivities"
v-if="
((tools.getLinkUserTelegramByUser(myuser) || (myuser.email && tools.isEmailVerifiedByUser(myuser))) &&
tools.isUserOk()) ||
showBtnActivities
"
class=""
>
<q-inner-loading id="spinner" :showing="loading">
<q-spinner-tail color="primary" size="4em"> </q-spinner-tail>
</q-inner-loading>
<div class="row justify-evenly items-center q-ma-xs">
<div class="row justify-center items-center q-ma-xs">
<div class="q-pa-xs">
<q-btn
v-if="
@@ -35,42 +39,48 @@
</div>
<div class="q-pa-xs">
<q-btn
v-if="getLinkUserTelegram() && tools.isUserOk()"
v-if="tools.getLinkUserTelegramByUser(myuser) && tools.isUserOk()"
icon="fab fa-telegram"
color="blue"
:type="tools.isUserOk() ? 'a' : 'btn'"
size="md"
rounded
:label="$t('dialog.contact')"
:href="tools.isUserOk() ? getLinkUserTelegram() : null"
:href="tools.isUserOk() ? tools.getLinkUserTelegramByUser(myuser) : null"
@click="
!tools.isUserOk() ? (showingtooltip = !showingtooltip) : false
"
target="__blank"
>
</q-btn>
<div v-else-if="myuser.email && tools.isUserOk()" class="row q-ma-sx">
<CLabel
v-bind="$attrs"
:copy="true"
:value="tools.isUserOk() ? myuser.email : ''"
:label="$t('reg.email')"
/>
<q-btn
outline
icon="fas fa-envelope"
:color="$q.dark.isActive ? `white` : `black`"
:type="tools.isUserOk() ? 'a' : 'btn'"
size="md"
:label="$t('msgs.send_email')"
:href="tools.isUserOk() ? tools.getemailto(myuser.email) : null"
@click="
!tools.isUserOk() ? (showingtooltip = !showingtooltip) : false
"
target="__blank"
>
</q-btn>
<div
v-else-if="myuser.email && !tools.isUsernameTelegOkByUser(myuser)"
class="row justify-center q-ma-sx"
>
<div>
<CLabel
v-bind="$attrs"
:copy="true"
:value="!tools.isUsernameTelegOkByUser(myuser) ? myuser.email : ''"
:label="$t('reg.email')"
/>
</div>
<div>
<q-btn
outline
icon="fas fa-envelope"
:color="$q.dark.isActive ? `white` : `black`"
:type="tools.isUserOk() ? 'a' : 'btn'"
size="md"
:label="$t('msgs.write_email')"
:href="tools.isUserOk() ? tools.getemailto(myuser.email) : null"
@click="
!tools.isUserOk() ? (showingtooltip = !showingtooltip) : false
"
target="__blank"
>
</q-btn>
</div>
</div>
</div>
</div>

View File

@@ -15,7 +15,7 @@ import { shared_consts } from '@src/common/shared_vuejs'
import { useRouter } from 'vue-router'
import { costanti } from '@costanti'
import { ICatalogo, IMyScheda, IProduct } from '@src/model'
import { IOptCatalogo, IMyScheda, IProduct } from '@src/model'
export default defineComponent({
@@ -48,7 +48,7 @@ export default defineComponent({
default: () => { }
},
modelValue: {
type: Object as PropType<ICatalogo>,
type: Object as PropType<IOptCatalogo>,
required: true,
},
scheda: {
@@ -69,7 +69,7 @@ export default defineComponent({
const opendetailbool = ref(false)
// Crea una copia locale reattiva di modelValue
const optcatalogo = ref<ICatalogo>({ ...props.modelValue });
const optcatalogo = ref<IOptCatalogo>({ ...props.modelValue });
// Watcher per sincronizzare le modifiche di modelValue
watch(() => props.modelValue, (newVal) => {
@@ -82,7 +82,7 @@ export default defineComponent({
}
// Metodo per aggiornare il valore del catalogo
const updateCatalogo = (updatedCatalogo: ICatalogo) => {
const updateCatalogo = (updatedCatalogo: IOptCatalogo) => {
optcatalogo.value = updatedCatalogo; // Aggiorna la copia locale
updateCatalogoPadre()
};

View File

@@ -59,6 +59,11 @@ export default defineComponent({
required: false,
default: 'date-time',
},
addstrrequired: {
type: String,
required: false,
default: '',
},
},
components: {},
setup(props, { emit }) {

View File

@@ -108,6 +108,7 @@ export default defineComponent({
searchList.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -121,6 +122,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'profile.resid_province',
@@ -164,8 +166,11 @@ export default defineComponent({
'profile.img': 1,
'profile.mygroups': 1,
'profile.qualifica': 1,
'profile.note': 1,
'profile.da_contattare': 1,
'profile.resid_province': 1,
'mycities.reg': 1,
perm: 1,
}
},

View File

@@ -51,6 +51,11 @@ export default defineComponent({
required: false,
default: '',
},
filtrocircuito: {
type: String,
required: false,
default: '',
},
selector: {
type: Object,
required: false,
@@ -263,8 +268,8 @@ export default defineComponent({
if (props.table === shared_consts.TABLES_MYGROUPS) {
myoptions.value = [
{ label: '🌎 Tutti', value: tools.FILTER_ALL },
{ label: '👤 Gruppi che Gestisci', value: tools.FILTER_MYREC },
{ label: '🌎 ' + t('groups.tutti'), value: tools.FILTER_ALL },
{ label: '👤 ' + t('groups.che_gestisci'), value: tools.FILTER_MYREC },
// {label: 'Seguo', value: tools.FILTER_MYFOLLOW},
]
@@ -272,7 +277,7 @@ export default defineComponent({
myoptions.value = []
if (tools.gestiscoAlmeno1Circuito()) {
myoptions.value = [
{ label: '🌎 Tutti', value: tools.FILTER_ALL },
{ label: '🌎 ' + t('groups.tutti'), value: tools.FILTER_ALL },
{ label: '👤 Circuiti che Gestisci', value: tools.FILTER_MYREC },
// {label: 'Seguo', value: tools.FILTER_MYFOLLOW},
]
@@ -343,11 +348,12 @@ export default defineComponent({
searchList_Servizi.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
@@ -355,11 +361,12 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: getFilterProvinceByRegion,
@@ -368,11 +375,12 @@ export default defineComponent({
tablesel: 'provinces',
},
{
visible: props.filtrocircuito ? false : true,
label: 'Circuito',
table: 'circuits',
key: 'profile.mycircuits.circuitname',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? props.filtrocircuito : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
@@ -380,11 +388,12 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
type: costanti.FieldType.select_by_server,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
useinput: true,
@@ -406,6 +415,7 @@ export default defineComponent({
filter: null,
},*/
{
visible: true,
label: 'Settore',
table: toolsext.TABSECTORS,
key: 'idSector',
@@ -430,6 +440,7 @@ export default defineComponent({
useinput: false,
},*/
{
visible: true,
label: 'Offro/Cerco',
table: 'adtypes',
key: 'adType',
@@ -475,6 +486,7 @@ export default defineComponent({
*/
{
visible: true,
label: 'Disponibile',
table: 'statusSkills',
key: 'idStatusSkill',
@@ -487,6 +499,7 @@ export default defineComponent({
filteradv: true,
},
{
visible: true,
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
@@ -500,6 +513,7 @@ export default defineComponent({
//icon: 'swap_horizontal_circle',
},
{
visible: true,
label: '',
table: '',
key: '',
@@ -530,11 +544,12 @@ export default defineComponent({
filteradv: false,
},*/
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
@@ -542,11 +557,12 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: getFilterProvinceByRegion,
@@ -554,11 +570,12 @@ export default defineComponent({
icon: 'flag',
},
{
visible: props.filtrocircuito ? false : true,
label: 'Circuito',
table: 'circuits',
key: 'profile.mycircuits.circuitname',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? props.filtrocircuito : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
@@ -566,11 +583,12 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
type: costanti.FieldType.select_by_server,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
useinput: true,
@@ -593,6 +611,7 @@ export default defineComponent({
tablesel: 'pub_to_share',
},*/
{
visible: true,
label: 'Settore',
table: toolsext.TABSECTORS,
key: 'idSector',
@@ -605,6 +624,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Data Inizio',
table: 'caldate',
key: 'dateTimeStart',
@@ -629,6 +649,7 @@ export default defineComponent({
useinput: false,
},*/
{
visible: true,
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
@@ -642,6 +663,7 @@ export default defineComponent({
//icon: 'swap_horizontal_circle',
},
{
visible: true,
label: '',
table: '',
key: '',
@@ -660,11 +682,12 @@ export default defineComponent({
searchList_Hosp.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
keycookie: '_hosp',
addall: true,
arrvalue: [],
@@ -673,11 +696,12 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
keycookie: '_hosp',
addall: true,
arrvalue: [],
@@ -686,11 +710,12 @@ export default defineComponent({
icon: 'flag',
},
{
visible: props.filtrocircuito ? false : true,
label: 'Circuito',
table: 'circuits',
key: 'profile.mycircuits.circuitname',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? props.filtrocircuito : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
@@ -702,7 +727,7 @@ export default defineComponent({
table: 'cities',
key: 'idCity',
type: costanti.FieldType.select_by_server,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
keycookie: '_hosp',
addall: true,
arrvalue: [],
@@ -712,6 +737,7 @@ export default defineComponent({
// param1: shared_consts.PARAM_SHOW_PROVINCE,
tablesel: 'cities',
filteradv: true,
visible: true,
},
{
label: 'Offro/Cerco',
@@ -724,6 +750,7 @@ export default defineComponent({
filter: null,
useinput: false,
filteradv: true,
visible: true,
},
{
label: 'Tipologia',
@@ -737,6 +764,7 @@ export default defineComponent({
useinput: false,
icon: 'flag',
filteradv: true,
visible: true,
},
{
label: 'N° max Ospiti',
@@ -750,6 +778,7 @@ export default defineComponent({
useinput: false,
icon: 'fas fa-users',
filteradv: true,
visible: true,
},
{
label: 'Preferenze',
@@ -763,6 +792,7 @@ export default defineComponent({
useinput: false,
icon: 'fas fa-asterisk',
filteradv: true,
visible: true,
},
{
label: 'In cambio di',
@@ -775,6 +805,7 @@ export default defineComponent({
useinput: false,
icon: 'fas fa-hand-holding',
filteradv: true,
visible: true,
//icon: 'swap_horizontal_circle',
},
{
@@ -790,29 +821,32 @@ export default defineComponent({
useinput: false,
notinsearch: true,
icon: '',
visible: true,
},
]
searchList_Beni.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'regions', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
useinput: false,
icon: 'fas fa-globe-europe'
icon: 'fas fa-globe-europe',
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'provinces', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: getFilterProvinceByRegion,
@@ -820,23 +854,25 @@ export default defineComponent({
icon: 'flag',
},
{
visible: props.filtrocircuito ? false : true,
label: 'Circuito',
table: 'circuits',
key: 'profile.mycircuits.circuitname',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? props.filtrocircuito : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
useinput: false,
icon: 'fas fa-globe-europe'
icon: 'fas fa-globe-europe',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
type: costanti.FieldType.select_by_server,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? costanti.FILTER_TUTTI : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'cities', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
useinput: true,
@@ -859,6 +895,7 @@ export default defineComponent({
tablesel: 'pub_to_share',
},*/
{
visible: true,
label: 'Settore',
table: 'sectorgoods',
key: 'idSectorGood',
@@ -871,6 +908,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Categoria',
table: 'goods',
key: 'idGood',
@@ -883,6 +921,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Offro/Cerco',
table: 'adtypes',
key: 'adType',
@@ -940,6 +979,7 @@ export default defineComponent({
*/
{
visible: true,
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
@@ -953,6 +993,7 @@ export default defineComponent({
//icon: 'swap_horizontal_circle',
},
{
visible: true,
label: 'Altri Filtri',
table: 'otherfilters',
key: 'otherfilters',
@@ -966,6 +1007,7 @@ export default defineComponent({
filteradv: true,
},
{
visible: true,
label: '',
table: '',
key: '',
@@ -984,6 +1026,7 @@ export default defineComponent({
searchList_MyCircuits.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -996,6 +1039,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -1008,6 +1052,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -1025,6 +1070,7 @@ export default defineComponent({
searchList_Attivita.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -1037,6 +1083,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -1049,6 +1096,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -1063,6 +1111,7 @@ export default defineComponent({
tablesel: 'cities',
},
{
visible: true,
label: '',
table: '',
key: '',
@@ -1080,6 +1129,7 @@ export default defineComponent({
searchList_MyGroups.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -1092,6 +1142,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -1104,6 +1155,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -1120,18 +1172,21 @@ export default defineComponent({
filteradv: true,
},
{
visible: props.filtrocircuito ? false : true,
label: 'Circuito',
table: 'circuits',
key: 'profile.mycircuits.circuitname',
type: costanti.FieldType.select,
value: tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
value: props.filtrocircuito ? props.filtrocircuito : tools.getCookie(tools.COOK_SEARCH + costanti.FILTER_SEP + props.table + costanti.FILTER_SEP + 'circuits', costanti.FILTER_TUTTI),
addall: true,
arrvalue: [],
filter: null,
useinput: false,
icon: 'fas fa-globe-europe'
icon: 'fas fa-globe-europe',
filteradv: true,
},
{
visible: true,
label: 'Categorie',
table: 'catgrps',
key: 'idCatGrp',
@@ -1142,8 +1197,10 @@ export default defineComponent({
addall: true,
useinput: false,
icon: 'engineering',
filteradv: true,
},
{
visible: true,
label: 'Visiblità',
table: 'visibilGroup',
key: 'visibility',
@@ -1154,8 +1211,10 @@ export default defineComponent({
useinput: true,
filter: null,
tablesel: 'visibility',
filteradv: true,
},
{
visible: true,
label: '',
table: '',
key: '',

View File

@@ -20,16 +20,40 @@
:img-src="directory + '/' + myimg.imagefile"
@click="showImage(myimg)"
>
<div
v-if="myimg.description"
class="absolute-bottom custom-caption text-center subtitle"
>
{{ myimg.description }}
</div>
</q-carousel-slide>
</q-carousel>
<q-dialog v-model="dialogVisible">
<q-img
mode="contain"
v-if="selectedImage.imagefile"
:src="directory + '/' + selectedImage.imagefile"
:alt="selectedImage.imagefile"
/>
<q-btn color="primary" :label="t('dialog.close')" @click="closeDialog" />
<q-dialog v-model="dialogVisible" maximized>
<div class="q-ma-sm column justify-center">
<q-img
mode="contain"
v-if="selectedImage.imagefile"
:src="directory + '/' + selectedImage.imagefile"
:alt="selectedImage.imagefile"
@click="closeDialog"
>
<div
v-if="selectedImage.description"
class="absolute-bottom custom-caption text-center"
>
<div class="subtitle">{{ selectedImage.description }}</div>
</div>
</q-img>
<div>
<div class="text-center">
<q-btn
color="primary"
:label="t('dialog.close')"
@click="closeDialog"
/>
</div>
</div>
</div>
</q-dialog>
</template>

View File

@@ -259,7 +259,7 @@ export default defineComponent({
if (props.table === shared_consts.TABLES_MYGROUPS) {
myoptions.value = [
{ label: '🌎 Tutti', value: tools.FILTER_ALL },
{ label: '👤 Gruppi che Gestisci', value: tools.FILTER_MYREC },
{ label: '👤 ' + t('groups.che_gestisci'), value: tools.FILTER_MYREC },
// {label: 'Seguo', value: tools.FILTER_MYFOLLOW},
]
@@ -338,6 +338,7 @@ export default defineComponent({
searchList_Servizi.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -350,6 +351,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -363,6 +365,7 @@ export default defineComponent({
tablesel: 'provinces',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -388,6 +391,7 @@ export default defineComponent({
filter: null,
},*/
{
visible: true,
label: 'Settore',
table: toolsext.TABSECTORS,
key: 'idSector',
@@ -400,6 +404,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Categoria',
table: 'skills',
key: 'idSkill',
@@ -412,6 +417,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Offro/Cerco',
table: 'adtypes',
key: 'adType',
@@ -456,6 +462,7 @@ export default defineComponent({
*/
{
visible: true,
label: 'Disponibile',
table: 'statusSkills',
key: 'idStatusSkill',
@@ -468,6 +475,7 @@ export default defineComponent({
filteradv: true,
},
{
visible: true,
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
@@ -514,6 +522,7 @@ export default defineComponent({
filteradv: false,
},*/
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -526,6 +535,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -564,6 +574,7 @@ export default defineComponent({
tablesel: 'pub_to_share',
},*/
{
visible: true,
label: 'Settore',
table: toolsext.TABSECTORS,
key: 'idSector',
@@ -576,6 +587,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Data Inizio',
table: 'caldate',
key: 'dateTimeStart',
@@ -616,6 +628,7 @@ export default defineComponent({
searchList_Hosp.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -629,6 +642,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -642,6 +656,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -657,6 +672,7 @@ export default defineComponent({
tablesel: 'cities',
},
{
visible: true,
label: 'Offro/Cerco',
table: 'adtypes',
key: 'adType',
@@ -668,6 +684,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Tipologia',
table: toolsext.TABTYPEHOSP,
key: 'typeHosp',
@@ -680,6 +697,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'N° max Ospiti',
table: toolsext.TABPEOPLE,
key: 'numMaxPeopleHosp',
@@ -692,6 +710,7 @@ export default defineComponent({
icon: 'fas fa-users',
},
{
visible: true,
label: 'Preferenze',
table: toolsext.TABPREF,
key: 'preferences',
@@ -704,6 +723,7 @@ export default defineComponent({
icon: 'fas fa-asterisk',
},
{
visible: true,
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
@@ -721,6 +741,7 @@ export default defineComponent({
searchList_Beni.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -733,6 +754,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -745,6 +767,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -771,6 +794,7 @@ export default defineComponent({
tablesel: 'pub_to_share',
},*/
{
visible: true,
label: 'Settore',
table: 'sectorgoods',
key: 'idSectorGood',
@@ -783,6 +807,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Categoria',
table: 'goods',
key: 'idGood',
@@ -795,6 +820,7 @@ export default defineComponent({
useinput: false,
},
{
visible: true,
label: 'Offro/Cerco',
table: 'adtypes',
key: 'adType',
@@ -851,6 +877,7 @@ export default defineComponent({
*/
{
visible: true,
label: 'In cambio di',
table: 'contribtypes',
key: 'idContribType',
@@ -864,6 +891,7 @@ export default defineComponent({
//icon: 'swap_horizontal_circle',
},
{
visible: true,
label: 'Altri Filtri',
table: 'otherfilters',
key: 'otherfilters',
@@ -876,6 +904,7 @@ export default defineComponent({
icon: 'fas fa-filter'
},
{
visible: true,
label: '',
table: '',
key: '',
@@ -894,6 +923,7 @@ export default defineComponent({
searchList_MyCircuits.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -906,6 +936,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -918,6 +949,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -935,6 +967,7 @@ export default defineComponent({
searchList_Attivita.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -947,6 +980,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -959,6 +993,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -976,6 +1011,7 @@ export default defineComponent({
searchList_MyGroups.value = [
{
visible: true,
label: 'Regione',
table: 'regions',
key: 'idReg',
@@ -988,6 +1024,7 @@ export default defineComponent({
icon: 'fas fa-globe-europe'
},
{
visible: true,
label: 'Provincia',
table: 'provinces',
key: 'idProvince',
@@ -1000,6 +1037,7 @@ export default defineComponent({
icon: 'flag',
},
{
visible: true,
label: 'Comune',
table: 'cities',
key: 'idCity',
@@ -1015,6 +1053,7 @@ export default defineComponent({
icon: 'fas fa-map-marker-alt',
},
{
visible: true,
label: 'Categorie',
table: 'catgrps',
key: 'idCatGrp',
@@ -1027,6 +1066,7 @@ export default defineComponent({
icon: 'engineering',
},
{
visible: true,
label: 'Visiblità',
table: 'visibilGroup',
key: 'visibility',

View File

@@ -16,7 +16,8 @@ import {
IParamDialog,
IMySkill,
ICoordLatLng,
ICoordGPS
ICoordGPS,
IOptGrid
} from 'model'
import { lists } from '@store/Modules/lists'
import { IParamsQuery } from 'model'
@@ -27,6 +28,7 @@ import { CMyUser } from '../CMyUser'
import { CMyGroups } from '../CMyGroups'
import { CMyFieldDb } from '../CMyFieldDb'
import { CMyRecCard } from '../CMyRecCard'
import { CMyRecCatalog } from '../CMyRecCatalog'
import { CMapByTable } from '../CMapByTable'
import { CMyRecGrpCard } from '../CMyRecGrpCard'
import { CMyRecCircuitCard } from '../CMyRecCircuitCard'
@@ -207,6 +209,11 @@ export default defineComponent({
required: false,
default: null,
},
opt: {
type: Object as PropType<IOptGrid>,
required: false,
default: {},
},
filterdef: {
type: Array,
required: false,
@@ -343,7 +350,7 @@ export default defineComponent({
},
components: {
CMyPopupEdit, CTitleBanner, CMyFieldDb, CMySelect, CMyFriends, CMyGroups,
CMyUser, CMyRecCard, CMyCardPopup, CMyRecGrpCard, CMyCardGrpPopup, CMyCardCircuitPopup,
CMyUser, CMyRecCard, CMyRecCatalog, CMyCardPopup, CMyRecGrpCard, CMyCardGrpPopup, CMyCardCircuitPopup,
CMyRecCircuitCard, CMyCardService, CNotifSettings, CMapByTable, CSingleMovement,
},
setup(props, { emit }) {
@@ -920,7 +927,11 @@ export default defineComponent({
obj[myfield] = item.value
if (myfield) {
if (item.value !== '' && item.value !== costanti.FILTER_TUTTI) {
filtersearch3and.push({ "profile.mycircuits.circuitname": item.value.name })
let nomecircuito = item.value
if (tools.isObject(item.value))
nomecircuito = item.value.name
filtersearch3and.push({ "profile.mycircuits.circuitname": nomecircuito })
}
}
@@ -938,6 +949,66 @@ export default defineComponent({
arrfilter_cities.push({ key: 'prov', value: idProvince })
}
} else if (item.table === shared_consts.TABFILTRI_UTENTE) {
item.arrvalue.forEach((myitemsingle: any) => {
if (myitemsingle === shared_consts.FILTER_USER_SENZA_PROVINCE) {
filtercustom.push({ 'profile.resid_province': { $exists: false } });
} else if (myitemsingle === shared_consts.FILTER_USER_CON_CIRCUITO) {
filtercustom.push({
'profile.mycircuits': { $exists: true, $ne: [] }
});
} else if (myitemsingle === shared_consts.FILTER_USER_ONLINE_6_MESI) {
const numgiorni_attivi = 30 * 6
let daytocheck = new Date();
daytocheck.setDate(daytocheck.getDate() - numgiorni_attivi);
daytocheck.setHours(0, 0, 0, 0)
filtercustom.push({ lasttimeonline: { $gt: daytocheck } })
} else if (myitemsingle === shared_consts.FILTER_USER_SENZA_CIRCUITO) {
filtercustom.push({
$or: [
{ 'profile.mycircuits': { $exists: false } },
{ 'profile.mycircuits': { $eq: [] } }
]
});
} else if (myitemsingle === shared_consts.FILTER_USER_PROVINCE) {
filtercustom.push({ 'profile.resid_province': { $exists: true, $ne: '' } });
} else if (myitemsingle === shared_consts.FILTER_USER_TELEGRAM_BLOCKED) {
filtercustom.push({ 'profile.teleg_id_old': { $gt: 1 } });
} else if (myitemsingle === shared_consts.FILTER_NOTE) {
filtercustom.push({ 'profile.note': { $exists: true, $ne: '' } });
} else if (myitemsingle === shared_consts.FILTER_DA_CONTATTARE) {
filtercustom.push({ 'profile.da_contattare': { $exists: true, $ne: false } });
} else if (myitemsingle === shared_consts.FILTER_SENZA_NOTE) {
filtercustom.push({
$or: [
{ 'profile.note': { $exists: false } },
{ 'profile.note': { $exists: true, $eq: '' } }],
});
} else if (myitemsingle === shared_consts.FILTER_USER_WITHOUT_USERNAME_TELEGRAM) {
filtercustom.push({
$or: [
{ 'profile.username_telegram': { $exists: false } },
{ 'profile.username_telegram': { $exists: true, $eq: '' } }],
});
} else if (myitemsingle === shared_consts.FILTER_USER_NO_VERIFIED_APORTADOR) {
filtercustom.push({
verified_by_aportador: { $exists: false },
});
} else if (myitemsingle === shared_consts.FILTER_USER_NO_TELEGRAM_ID) {
filtercustom.push({ 'profile.teleg_id': { $lt: 1 } });
} else if (myitemsingle === shared_consts.FILTER_FACILITATORE) {
filtercustom.push({
perm: { $bitsAnySet: 0b1000 }
})
// { 'perm': { $bit: { and: } } });
}
})
} else if (item.table === 'cities') {
if (item.value && item.value.hasOwnProperty('_id')) {
@@ -2365,8 +2436,8 @@ export default defineComponent({
function showColCheck(col: IColGridTable, tipovis: number, visulabel: boolean, value: any = '', record: any = null) {
// if (col.isadvanced_field && !showfilteradv.value)
// return false
if (col.isadvanced_field && !showfilteradv.value)
return false
const check = tools.checkIfShowField(col, tipovis, visulabel, value)

View File

@@ -25,10 +25,10 @@
</div>
<div
v-if="butt_modif_new || mytitle"
v-if="(butt_modif_new || mytitle)"
:class="$q.screen.lt.sm ? `` : `q-ma-xs` + ` `"
>
<q-toolbar class="bg-primary text-white">
<q-toolbar v-if="mytitle" class="bg-primary text-white">
<q-toolbar-title>{{ mytitle }}</q-toolbar-title>
</q-toolbar>
@@ -103,16 +103,20 @@
>
<q-btn
size="sm"
dense
color="positive"
rounded
:icon="
!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'
"
:label="$t('grid.advanced_filters')"
:label="!showfilteradv ? $t('grid.advanced_filters') : $t('grid.hide_advanced_filters')"
@click="showfilteradv = !showfilteradv"
></q-btn>
</div>
<div v-if="!(item.filteradv && !showfilteradv)">
<div
v-if="!(item.filteradv && !showfilteradv)"
v-show="item.visible"
>
<CMySelect
:col="fieldsTable.getColByColumns(mycolumns, item.key)"
v-if="
@@ -263,9 +267,8 @@
<div v-if="searchList && finder" class="row items-start">
<q-btn
v-if="searchList && searchList.length > 0"
:dense="search"
class="q-mx-xs"
color="positive"
:color="!showfilter ? 'positive' : 'blue-grey-4'"
:icon="!showfilter ? 'fas fa-filter' : 'fas fa-arrow-up'"
@click="showfilter = !showfilter"
>
@@ -282,7 +285,6 @@
<q-input
v-model="search"
filled
dense
type="search"
debounce="500"
:hint="!hintinbtnsearch ? hint : ''"
@@ -510,7 +512,11 @@
<div
:style="heightcarousel ? `height: ${heightcarousel}` : ''"
:class="{ 'carousel-scroll-container': !!heightcarousel }"
:class="{
'carousel-scroll-container': !!heightcarousel,
row: opt.rowclass,
'justify-evenly': opt.rowclass,
}"
>
<div v-for="(row, indexrow) in serverData" :key="indexrow">
<div
@@ -551,6 +557,16 @@
@cmdext="cmdExt"
>
</CMyRecCircuitCard>
<CMyRecCatalog
v-else-if="tablesel === shared_consts.TABLES_CATALOG"
:table="tablesel"
:prop_myrec="row"
:opt="opt"
@cmdext="cmdExt"
:editOn="editOn"
:margin_right="margin_right"
>
</CMyRecCatalog>
<CMyRecCard
v-else
:table="tablesel"
@@ -762,11 +778,11 @@
>
<q-btn
size="sm"
dense
color="positive"
:icon="
!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'
"
:label="$t('grid.advanced_filters')"
:label="!showfilteradv ? $t('grid.advanced_filters') : $t('grid.hide_advanced_filters')"
@click="showfilteradv = !showfilteradv"
></q-btn>
</div>
@@ -777,6 +793,7 @@
item.type === costanti.FieldType.select ||
item.type === costanti.FieldType.select_by_server
"
v-show="item.visible"
:label="labelcombo(item)"
v-model:value="item.value"
@update:value="searchval(item.value, item.table)"
@@ -810,6 +827,7 @@
<CMySelect
v-if="item.type === costanti.FieldType.multiselect_by_server"
v-show="item.visible"
:col="fieldsTable.getColByColumns(mycolumns, item.key)"
:multiselect_by_server="true"
:label="labelcombo(item)"
@@ -836,6 +854,7 @@
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="item.type === costanti.FieldType.multiselect"
v-show="item.visible"
v-model="item.arrvalue"
label-color="primary"
:label="labelcombo(item)"
@@ -921,13 +940,12 @@
<q-input
v-model="search"
filled
dense
type="search"
debounce="500"
:hint="hint"
:error-message="noresultLabel"
:error="getNumRecFromQuery() === 0 && !startsearch"
label="Cerca"
:label="$t('grid.search')"
v-on:keyup.enter="doSearch"
>
<template v-slot:after>
@@ -1027,6 +1045,7 @@
@save="SaveValue"
@show="selItem(props.row, col)"
@showandsave="showandsave"
:dense="true"
>
</CMyPopupEdit>
</div>
@@ -1084,11 +1103,11 @@
props.row['adType']
)
}}
<q-icon
<!--<q-icon
:name="fieldsTable.getIconByAdType(props.row['adType'])"
color="white"
class="q-ml-xs"
/>
/>-->
</q-badge>
<q-space />
@@ -1177,6 +1196,7 @@
@save="SaveValue"
@show="selItem(props.row, col)"
@showandsave="showandsave"
:dense="true"
>
</CMyPopupEdit>
</div>
@@ -1372,6 +1392,7 @@
@showandsave="showandsave"
@annulla="annulla"
@update_col="update_col"
:dense="true"
>
</CMyPopupEdit>
</div>
@@ -1384,7 +1405,7 @@
@hide="hidewindow"
class="dialog_class"
:persistent="true"
:maximized="false"
:maximized="$q.screen.lt.sm"
>
<q-card class="dialog_card">
<q-bar dense class="bg-primary text-white">
@@ -1398,10 +1419,22 @@
v-for="col in mycolumns"
:key="col.name"
>
<!--<div class="text-center q-my-xs" v-if="(col.fieldtype === costanti.FieldType.separator)">
<q-btn color="primary" size="md" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>-->
<div
class="text-center q-my-xs"
v-if="col.fieldtype === costanti.FieldType.separator"
>
<q-btn
color="positive"
size="md"
dense
rounded
:icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
:label="showfilteradv ? $t('grid.hide_campi_avanzati') : $t('grid.show_campi_avanzati')"
:class="{ 'q-btn--active': showfilteradv }"
:aria-expanded="showfilteradv.toString()"
@click="showfilteradv = !showfilteradv"
></q-btn>
</div>
<div
v-if="
showColCheck(
@@ -1428,6 +1461,7 @@
minuteinterval="1"
:visulabel="true"
:insertMode="true"
:dense="false"
@save="SaveValue"
@show="selItem(newRecord, col)"
@showandsave="showandsave"
@@ -1467,12 +1501,21 @@
</q-bar>
<q-card-section class="inset-shadow">
<div v-for="col in mycolumns" :key="col.name">
<!--<div class="text-center q-my-xs" v-if="(col.fieldtype === costanti.FieldType.separator)">
<q-btn color="primary" size="md" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>-->
<div
v-if="
class="text-center q-my-xs"
v-if="col.fieldtype === costanti.FieldType.separator"
>
<q-btn
color="primary"
size="md"
dense
:icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
:label="!showfilteradv ? $t('grid.show_campi_avanzati') : $t('grid.hide_campi_avanzati')"
@click="showfilteradv = !showfilteradv"
></q-btn>
</div>
<div
v-else-if="
showColCheck(col, tools.TIPOVIS_EDIT_RECORD, false) &&
col.foredit
"
@@ -1491,6 +1534,7 @@
v-model:row="recModif"
:field="col.field"
:subfield="col.subfield"
:dense="false"
:value_extra="getValueExtra(col, recModif)"
minuteinterval="1"
@save="SaveValue"

View File

@@ -2400,6 +2400,7 @@ export default defineComponent({
showInnerDialog,
lengthopt,
update_col,
showfilteradv,
}
}
})

View File

@@ -304,10 +304,19 @@
v-for="col in mycolumns"
:key="col.name"
>
<!--<div class="text-center q-my-xs" v-if="(col.fieldtype === costanti.FieldType.separator)">
<q-btn color="primary" size="md" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>-->
<div
class="text-center q-my-xs"
v-if="col.fieldtype === costanti.FieldType.separator"
>
<q-btn
color="primary"
size="md"
dense
:icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
:label="$t('grid.show_campi_avanzati')"
@click="showfilteradv = !showfilteradv"
></q-btn>
</div>
<div
v-if="
showColCheck(
@@ -373,10 +382,19 @@
</q-bar>
<q-card-section class="inset-shadow">
<div v-for="col in mycolumns" :key="col.name">
<!--<div class="text-center q-my-xs" v-if="(col.fieldtype === costanti.FieldType.separator)">
<q-btn color="primary" size="md" dense :icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
label="Campi Avanzati" @click="showfilteradv = !showfilteradv"></q-btn>
</div>-->
<div
class="text-center q-my-xs"
v-if="col.fieldtype === costanti.FieldType.separator"
>
<q-btn
color="primary"
size="md"
dense
:icon="!showfilteradv ? 'fas fa-arrow-down' : 'fas fa-arrow-up'"
:label="$t('grid.show_campi_avanzati')"
@click="showfilteradv = !showfilteradv"
></q-btn>
</div>
<div
v-if="
showColCheck(col, tools.TIPOVIS_EDIT_RECORD, false) &&

View File

@@ -40,6 +40,16 @@
</div>
<q-card-section>
<span v-for="(rec, ind) of myaccount.recCatGrp" :key="ind">
<q-chip
dense
class="text-center shadow-5 glossy chipmodif text-white"
:style="`background-color: ${rec.color};`"
>
<q-icon :name="rec.icon" left />
{{ rec.descr }}</q-chip
></span
>
<div v-if="myaccount.date_created" class="container">
<q-icon name="fas fa-lightbulb" class="iconcirc"></q-icon>
{{

View File

@@ -41,6 +41,11 @@ export default defineComponent({
CTimeAgo, CContactUser
},
props: {
username_prop: {
type: String,
required: true,
default : '',
},
introUser: {
type: Boolean,
required: false,
@@ -63,7 +68,8 @@ export default defineComponent({
const animation = ref('fade')
const mytab = ref('my')
const username = computed(() => $route.params.username ? $route.params.username.toString() : userStore.my.username)
// const username = computed(() => $route.params.username ? $route.params.username.toString() : userStore.my.username)
const username = ref('')
const idnotif = computed(() => $route.query.idnotif ? $route.query.idnotif.toString() : '')
const filtroutente = ref(<any[]>[])
@@ -79,7 +85,7 @@ export default defineComponent({
const notifStore = useNotifStore()
const mycards = computed(() => {
return costanti.MAINCARDS.filter((rec: any) => rec.table && rec.visible)
return costanti.MAINCARDS.filter((rec: any) => rec.table && rec.showinprofile)
})
const optionsMainCards = ref({})
@@ -105,12 +111,12 @@ export default defineComponent({
// Carica il profilo di quest'utente
if (username.value) {
await userStore.loadUserActivities({ username: username.value, idnotif: idnotif.value }).then((ris) => {
// console.log('loadUserProfile = ', ris)
// console.log('loadUserActivities = ', ris)
myuser.value = ris
if (myuser.value) {
// filtro_eventi.value = [{ userId: myuser.value._id }, { dateTimeStart: { $gte: today } }]
let mydate = tools.addDays(tools.getDateNow(), -1)
let mydateend = tools.addDays(mydate, 30)
let mydateend = tools.addDays(mydate, 180)
mydate = tools.getstrYYMMDDDate(mydate)
filtro_eventi.value = [{ userId: myuser.value._id }, { dateTimeStart: { $gte: mydate, $lte: mydateend } }]
filtroutente.value = [{ userId: myuser.value._id }]
@@ -163,6 +169,7 @@ export default defineComponent({
})
function mounted() {
username.value = props.username_prop || userStore.my.username
loadProfile()
}
@@ -178,17 +185,6 @@ export default defineComponent({
return true
}
function getLinkUserTelegram() {
if (myuser.value) {
if (!!myuser.value.profile.username_telegram) {
return 'https://t.me/' + myuser.value.profile.username_telegram
}
} else {
return ''
}
}
function getLinkWebSite() {
if (myuser.value) {
let site = myuser.value.profile.website!
@@ -244,7 +240,6 @@ export default defineComponent({
shared_consts,
getImgUser,
checkifShow,
getLinkUserTelegram,
getLinkWebSite,
filtroutente,
filtro_eventi,

View File

@@ -111,7 +111,7 @@
<div v-for="(card, ind) of mycards" :key="ind" :name="card.table">
<q-card class="q-my-md">
<div v-if="card.table === 'mygroups' && tools.isUserOk()">
<div class="row text-h6 text-bold">Gruppi:</div>
<div class="row text-h6 text-bold">{{t('circuit.conticollettivi')}}:</div>
<q-list>
<span
v-for="(grp, index) in listgroupsfiltered"
@@ -128,7 +128,7 @@
</span>
</q-list>
</div>
<div v-else-if="card.table === shared_consts.TAB_MYCIRCUITS">
<div v-else-if="card.table === shared_consts.TABLES_CIRCUITS">
<div class="text-h6">{{ card.title }}</div>
<q-list>
<span

View File

@@ -90,6 +90,26 @@
>
</q-item-section>
</q-item>
<q-item
v-else-if="myrec.profile && !myrec.profile.username_telegram"
clickable
v-close-popup
>
<q-item-section avatar>
<q-icon color="blue" name="email" />
</q-item-section>
<q-item-section>
<a
v-if="
myrec.email
"
:href="tools.isUserOk() ? tools.getemailto(myrec.email) : null"
target="_blank"
>{{ $t('msgs.write_email') }} -
{{ tools.getNomeUtenteByRecUser(myrec) }}</a
>
</q-item-section>
</q-item>
<q-item
v-if="!nopopup && myrec.myreact"
clickable
@@ -430,7 +450,7 @@
</q-item-label>
</q-item-section>
</q-item>
<q-item v-if="getSectorByRec(myrec)">
<q-item-section avatar>
<q-icon color="blue" name="category" />
@@ -580,7 +600,6 @@
</q-item>
<q-card
v-if="
table === 'mybachecas' &&
myrec.mygrp &&
myrec.mygrp.groupname
"
@@ -728,13 +747,13 @@
v-html="
tools.getlinkhref(
myrec.website,
t('services.visit_website')
t('services.visit_website', {link: tools.getMainLink(myrec.website)})
)
"
/></q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-if="myrec.email">
<q-item clickable v-if="myrec.email && !myrec.contact_email">
<q-item-section avatar>
<q-icon color="blue-grey-6" name="fas fa-envelope" />
</q-item-section>
@@ -999,6 +1018,24 @@
)
"
/>
<q-btn
v-else-if="
(myrec.profile && !myrec.profile.username_telegram) &&
!myrec.contact_telegram
"
class="q-mx-xxs q-my-xs"
rounded
:label="$t('msgs.write_email')"
text-color="primary"
color="white"
icon="mail"
target="_blank"
@click="
tools.openUrl(
tools.getemailto(myrec.email)
)
"
/>
<q-btn
v-if="table === shared_consts.TABLES_MYBACHECAS"
class="q-mx-xxs q-my-xs"

View File

@@ -3,7 +3,7 @@ import {
nextTick,
} from 'vue'
import { ICatalogo, IColGridTable, IElemText, IElementiScheda, IImgGallery, ILabelValue, IMyCard, IMyElem, IMyPage, IMyScheda, IOperators, ISchedaSingola } from '@src/model'
import { IOptCatalogo, IColGridTable, IElemText, IElementiScheda, IImgGallery, ILabelValue, IMyCard, IMyElem, IMyPage, IMyScheda, IOperators, ISchedaSingola } from '@src/model'
import { useGlobalStore } from '@store/globalStore'
import { CImgTitle } from '@/components/CImgTitle'
@@ -776,34 +776,6 @@ export default defineComponent({
return options;
}
function SchedeOpt() {
const arrschede: ISchedaSingola[] = globalStore.getMySchede()
let arr: any = []
arr.push({ label: '[Nessuna]', value: '' })
if (arrschede) {
arrschede.forEach((recscheda: ISchedaSingola) => {
let pagename = ''
if (recscheda.scheda) {
if (recscheda.idPageOrig) {
const page = globalStore.getPageById(recscheda.idPageOrig)
pagename = page ? page.title! : ''
}
if (pagename)
pagename = '[Pag: ' + pagename + '] '
const mylabel = pagename + (recscheda.scheda ? recscheda.scheda!.name : '')
arr.push({ label: mylabel, value: recscheda.scheda!._id })
}
});
}
return arr
}
function updateSizeWidth(value: any) {
// Gestisce l'input dell'utente per un nuovo valore
myel.value.widthimg = value; // Aggiorna widthimg con il nuovo valore
@@ -815,7 +787,10 @@ export default defineComponent({
modifElem()
}
function updateSizeHeight(value: any) {
myel.value.heightimg = value; // Aggiorna widthimg con il nuovo valore
if (value)
myel.value.heightimg = value; // Aggiorna widthimg con il nuovo valore
else
myel.value.heightimg = ''
modifElem()
}
@@ -931,7 +906,7 @@ export default defineComponent({
}
const generatePDF = async (optcatalogo: ICatalogo) => {
const generatePDF = async (optcatalogo: IOptCatalogo) => {
await nextTick()
@@ -1101,13 +1076,13 @@ export default defineComponent({
addNewScheda,
dupNewScheda,
delRecScheda,
SchedeOpt,
addProdSpeciale,
idSchedaDaCopiare,
copyfromTemplate,
modifElemAndSchede,
exportPage,
importPage,
globalStore,
}
},

View File

@@ -7,7 +7,7 @@
(!myel.active ? ` clEditNotActive` : ``)
"
>
<div v-if="!!myel.type">
<div v-if="myel && myel.type">
<div class="row justify-evenly q-gutter-sm">
<q-btn
class="q-ma-sm"
@@ -217,7 +217,8 @@
<CMySlider
v-if="
myel.type === shared_consts.ELEMTYPE.CARD ||
myel.type === shared_consts.ELEMTYPE.GRID_ORIZ
myel.type === shared_consts.ELEMTYPE.GRID_ORIZ||
myel.type === shared_consts.ELEMTYPE.CATALOGLIST
"
label="Altezza Carosello:"
v-model="myel.heightcarousel"
@@ -1326,6 +1327,23 @@
></q-toggle>
</div>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CATALOGLIST">
<div v-if="enableEdit" class="row">
<br />
<q-toggle
v-model="myel.parambool"
color="positive"
label="Search"
@update:model-value="modifElem"
></q-toggle>
<q-toggle
v-model="myel.parambool2"
color="positive"
label="Finder"
@update:model-value="modifElem"
></q-toggle>
</div>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CALENDAR">
<div v-if="enableEdit" class="row">
<q-input
@@ -1490,15 +1508,16 @@
v-if="enableEdit"
rounded
outlined
v-model="myel.catalogo.idCollana"
v-model="myel.catalogo.idCollane"
:options="Products.collane"
@update:model-value="modifElem"
label="Collana"
label="Collane"
style="width: 300px"
multiple
emit-value
map-options
option-value="idCollana"
option-label="descrizione"
option-label="title"
>
</q-select>
</div>
@@ -1640,7 +1659,7 @@
rounded
outlined
v-model="recscheda.scheda.linkIdTemplate"
:options="SchedeOpt()"
:options="globalStore.SchedeOpt()"
@update:model-value="modifElem"
label="Scheda collegata:"
style="width: 250px"
@@ -1658,7 +1677,7 @@
rounded
outlined
v-model="idSchedaDaCopiare"
:options="SchedeOpt()"
:options="globalStore.SchedeOpt()"
@update:model-value="modifElem"
label="Scegli Scheda"
style="width: 250px"

View File

@@ -3,13 +3,14 @@ import {
defineComponent, onMounted, PropType, ref, toRef, watch, nextTick,
} from 'vue'
import { ICatalogo, ICoordGPS, IMyCard, IMyElem, IMyPage, IOperators, ISocial } from '@src/model'
import { IOptCatalogo, ICoordGPS, IMyCard, IMyElem, IMyPage, IOperators, ISocial } from '@src/model'
import { useGlobalStore } from '@store/globalStore'
import { CImgTitle } from '../CImgTitle/index'
import { CImgPoster } from '@/components/CImgPoster'
import { CTitle } from '@/components/CTitle/index'
import { CGridOriz } from '@/components/CGridOriz/index'
import { CCatalogList } from '@/components/CCatalogList/index'
import { tools } from '@store/Modules/tools'
import { shared_consts } from '@/common/shared_vuejs'
import { LandingFooter } from '@/components/LandingFooter'
@@ -68,7 +69,7 @@ export default defineComponent({
CTitleBanner, CShareSocial, CCheckAppRunning, CRegistration,
CVisuVideoPromoAndPDF, CECommerce, CCatalogo, CAITools,
CMapComuni, CMapUsers, CMapGetCoordinates, CMapEditAddressByCoord,
CDashGroup, CMovements, CGridOriz, CQRCode,
CDashGroup, CMovements, CGridOriz, CQRCode, CCatalogList,
// , //CMapMarker,
},
emits: ['selElemClick'],
@@ -283,7 +284,7 @@ export default defineComponent({
return `col-${width}`
}
function updateCatalogoEmit(updatedCatalogo: ICatalogo) {
function updateCatalogoEmit(updatedCatalogo: IOptCatalogo) {
console.log('CMyElem: updateCatalogoEmit')
myel.value.catalogo = updatedCatalogo
}

View File

@@ -8,9 +8,10 @@
getClass() +
(!myel.active ? ` clEditNotActive` : ``)
"
@click="clickOnElem"
>
<div v-if="myel.type">
<q-btn v-if="editOn" rounded dense icon="fas fa-pencil-alt" @click="clickOnElem">
</q-btn>
<div v-if="myel.type === shared_consts.ELEMTYPE.TEXT">
<transition
appear
@@ -92,9 +93,7 @@
:key="groupIndex"
:name="groupIndex"
>
<div
class="row no-wrap justify-start items-center q-px-sm"
>
<div class="row no-wrap justify-start items-center q-px-sm">
<template v-for="(rec, cardIndex) in group" :key="cardIndex">
<div :class="cardColumnClass">
<q-card
@@ -565,6 +564,14 @@
:heightcarousel="myel.heightcarousel"
></CGridOriz>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CATALOGLIST">
<div v-if="editOn" class="elemEdit">Lista Cataloghi</div>
<CCatalogList
:prop_search="myel.parambool"
:finder="myel.parambool2"
:heightcarousel="myel.heightcarousel"
></CCatalogList>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.STATUSREG">
<div v-if="editOn" class="elemEdit">CStatusReg</div>
<CStatusReg> </CStatusReg>
@@ -658,7 +665,10 @@
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.CATALOGO">
<div v-if="editOn" class="elemEdit">PRODOTTI CATALOGO:</div>
<CCatalogo v-model="myel.catalogo" @updateCatalogo="updateCatalogoEmit()"/>
<CCatalogo
v-model="myel.catalogo"
@updateCatalogo="updateCatalogoEmit()"
/>
</div>
<div v-else-if="myel.type === shared_consts.ELEMTYPE.MAPPA">
<div v-if="editOn" class="elemEdit">MAPPA:</div>

View File

@@ -95,7 +95,7 @@ export default defineComponent({
const myelemVoid = ref({ _id: objectId(), active: true, type: shared_consts.ELEMTYPE.TEXT, container: '...', path: mypathin.value } as IMyElem)
const selElem = ref(globalStore.selElem)
const selElem = ref(<IMyElem|null>globalStore.selElem)
const site = ref(globalStore.site)
const onloading = ref(false)
@@ -166,7 +166,7 @@ export default defineComponent({
visuEditor.value = false
}
function selElemClick(myelem: IMyElem) {
// console.log('mypageelem selElemClick', myelem)
console.log('mypageelem selElemClick', myelem)
selElem.value = {}
selElem.value = myelem

View File

@@ -243,6 +243,8 @@ export default defineComponent({
const loaded = ref(false)
const addstrrequired = ref('')
const col = ref(<IColGridTable>{
name: 'test',
fieldtype: 0,
@@ -318,6 +320,8 @@ export default defineComponent({
}
}
addstrrequired.value = col.value.required ? '* ' : ''
// console.log('popupedit myvalue.value: ', myvalue.value)
if (props.tablesel) {
@@ -407,7 +411,7 @@ export default defineComponent({
return changevalRecOrig(newval)
}
function changevalRec(newval: any) {
return changevalRecOrig(newval, '')
return changevalRecOrig(newval, props.subfield)
}
function changevalRecOrig(newval: any, subcol: string = '') {
@@ -428,16 +432,30 @@ export default defineComponent({
}
if (subcol) {
if (!myrow.value[col.value.name]) {
myrow.value[col.value.name] = {}
const arrcol = col.value.name.split('.')
if (arrcol.length > 0) {
const primo = arrcol[0]
let sec = null
if (arrcol.length > 1)
sec = arrcol[1]
if (sec) {
if (!myrow.value[primo]) {
myrow.value[primo] = {}
}
myrow.value[primo][sec] = newval
} else {
myrow.value[primo] = newval
}
/*if (!myrow.value[col.value.name]) {
myrow.value[col.value.name] = {}
}
myrow.value[col.value.name][subcol] = newval*/
// console.log('myrow.value[col.value.name]', myrow.value[col.value.name])
}
myrow.value[col.value.name][subcol] = newval
// console.log('myrow.value[col.value.name]', myrow.value[col.value.name])
} else {
myrow.value[col.value.name] = newval
}
// console.log('changevalRec update:row', myrow.value)
// emit('update:row', myrow.value)
emit('update_col', col.value.name, newval)
@@ -930,6 +948,7 @@ export default defineComponent({
gotoPage,
mypath,
changeValRecCoordAddr,
addstrrequired,
}
}
})

View File

@@ -102,7 +102,7 @@
:minlength="col.minlength ? col.minlength : undefined"
v-model="myvalue"
@update:model-value="changevalRec"
:label="col.visulabel ? $t(col.label_trans) : ''"
:label="col.visulabel ? addstrrequired + $t(col.label_trans) : ''"
:autogrow="col.fieldtype !== costanti.FieldType.crypted"
@keyup.enter.stop
autofocus
@@ -230,16 +230,12 @@
@keyup.enter.stop
@update:model-value="changevalRec"
autofocus
:label="col.visulabel ? $t(col.label_trans) : col.label"
:rules="[val => (!!val || !col.required) || 'Campo richiesto']"
:label="col.visulabel ? addstrrequired + $t(col.label_trans) : col.label"
>
</q-input>
<q-field v-if="col.showLinkResult">
Diventerà:
<a
:href="tools.generateURL(col.showLinkResult, myvalue)"
target="_blank"
>{{ tools.generateURL(col.showLinkResult, myvalue) }}</a
>
<q-field v-if="col.showLinkResult && myvalue">
Diventerà: {{ tools.generateURL(col.showLinkResult, myvalue) }}
</q-field>
</div>
<div
@@ -326,9 +322,9 @@
:label="
col.visulabel
? $t(col.label_trans)
: visulabel
? $t(col.label_trans)
: ''
: (visulabel
? addstrrequired + $t(col.label_trans)
: '')
"
type="number"
autofocus
@@ -361,6 +357,7 @@
:col="col"
:row="row"
:options="tools.SelectHours"
:addstrrequired="addstrrequired"
>
</CMySelect>
</div>
@@ -627,6 +624,7 @@
)
"
:useinput="false"
:addstrrequired="addstrrequired"
>
</CMySelect>
</div>
@@ -659,6 +657,7 @@
)
"
:useinput="false"
:addstrrequired="addstrrequired"
>
</CMySelect>
</div>
@@ -671,9 +670,9 @@
<CDateTime
:label="
col.label
? col.label
? addstrrequired + col.label
: col.label_trans
? $t(col.label_trans)
? (addstrrequired + $t(col.label_trans))
: ''
"
:class="{ 'cursor-pointer': canEdit }"
@@ -698,7 +697,7 @@
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.onlydate">
<CDateTime
:label="col.label ? col.label : $t(col.label_trans)"
:label="col.label ? (addstrrequired + col.label) : (addstrrequired + $t(col.label_trans))"
:class="{ 'cursor-pointer': canEdit }"
:valueDate="myvalue"
v-model:value="myvalue"
@@ -787,6 +786,8 @@
:sola_lettura="!isInModif"
:useinput="col.allowNewValue"
:newvaluefunc="addNewValue"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
@@ -909,6 +910,8 @@
)
"
:useinput="col.allowNewValue"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
</div>
@@ -980,6 +983,8 @@
"
:sola_lettura="!isInModif"
:useinput="isInModif"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
</div>
@@ -1011,6 +1016,8 @@
)
"
:useinput="false"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
</div>
@@ -1190,10 +1197,11 @@
:maxlength="col.maxlength ? col.maxlength : undefined"
:minlength="col.minlength ? col.minlength : undefined"
v-model="scope.value"
:label="col.visulabel ? $t(col.label_trans) : ''"
:label="col.visulabel ? (addstrrequired + $t(col.label_trans)) : ''"
:autogrow="col.fieldtype !== costanti.FieldType.crypted"
@keyup.enter.stop
autofocus
:rules="[val => (!!val || !col.required) || 'Campo richiesto']"
>
<template v-if="notAllowAtChar" v-slot:prepend>
<span class="text-h7 text-blue">@</span>
@@ -1212,7 +1220,7 @@
col.visulabel
? $t(col.label_trans)
: visulabel
? col.label
? (addstrrequired + col.label)
: ''
"
>
@@ -1266,6 +1274,7 @@
@changeval="changevalRecHours"
style="max-width: 100px"
:options="tools.SelectHours"
:addstrrequired="addstrrequired"
>
</CMySelect>
</div>
@@ -1313,6 +1322,8 @@
)
"
:useinput="col.allowNewValue"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
</div>
@@ -1350,6 +1361,8 @@
)
"
:useinput="true"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
</div>
@@ -1384,6 +1397,8 @@
:sola_lettura="!isInModif"
:useinput="col.allowNewValue"
:newvaluefunc="addNewValue"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
@@ -1450,6 +1465,8 @@
:optlab="fieldsTable.getLabelByTable(tablesel)"
:options="[]"
:useinput="false"
:addstrrequired="addstrrequired"
:dense="dense"
>
</CMySelect>
</div>
@@ -1469,6 +1486,7 @@
:optlab="fieldsTable.getLabelByTable(tablesel)"
:options="[]"
:useinput="false"
:addstrrequired="addstrrequired"
>
</CMySelect>
</div>
@@ -1477,10 +1495,10 @@
<CDateTime
:label="
col.label
? col.label
: col.label_trans
? $t(col.label_trans)
: ''
? (addstrrequired + col.label)
: (col.label_trans
? (addstrrequired + $t(col.label_trans))
: '')
"
:class="{ 'cursor-pointer': canEdit }"
v-model:value="myvalue"
@@ -1495,7 +1513,7 @@
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.onlydate">
<CDateTime
:label="col.label ? col.label : $t(col.label_trans)"
:label="col.label ? addstrrequired + col.label : (addstrrequired + $t(col.label_trans))"
:class="{ 'cursor-pointer': canEdit }"
:valueDate="myvalue"
v-model:value="myvalue"
@@ -1536,7 +1554,7 @@
:maxlength="col.maxlength ? col.maxlength : undefined"
:minlength="col.minlength ? col.minlength : undefined"
v-model="scope.value"
:label="col.visulabel ? $t(col.label_trans) : ''"
:label="col.visulabel ? (addstrrequired + $t(col.label_trans)) : ''"
:autogrow="col.fieldtype !== costanti.FieldType.crypted"
@keyup.enter.stop
autofocus
@@ -1566,6 +1584,7 @@
)
"
:useinput="false"
:addstrrequired="addstrrequired"
>
</CMySelect>
</div>

View File

@@ -99,7 +99,7 @@ export default defineComponent({
}
function getNameToShow(user: IUserFields, col = null) {
if (props.table === shared_consts.TABLES_MYBACHECAS && myrec.value.groupname)
if (myrec.value.groupname)
return myrec.value.groupname
else
return userStore.getNameToShow(user, col)

View File

@@ -118,11 +118,11 @@
:color="fieldsTable.getColByAdType(myrec.adType)"
>
{{ fieldsTable.getValByTabAndId(table, 'adType', myrec.adType) }}
<q-icon
<!--<q-icon
:name="fieldsTable.getIconByAdType(myrec.adType)"
color="white"
class="q-ml-xs"
/>
/>-->
</q-badge>
<q-avatar size="60px">
@@ -167,11 +167,6 @@
: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" class="self-center">
<q-img
@@ -332,7 +327,7 @@
>
</q-item-label>
</q-item-section>
<q-item-section side v-if="tools.canModifyThisRec(myrec) || editOn">
<q-item-section side v-if="tools.canModifyThisRec(myrec, table) || editOn">
<q-item-label>
<q-btn rounded dense icon="fas fa-pencil-alt">
<q-menu>

View File

@@ -0,0 +1,81 @@
.cardrec {
/* Aggiungi un bordo sottile */
border: 1px solid #ddd;
/* Applica un'ombreggiatura per dare l'effetto di elevazione */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
/* Arrotonda leggermente gli angoli */
border-radius: 8px;
/* Aggiungi un po' di spazio interno intorno ai contenuti */
padding: 8px;
/* Colore di sfondo bianco per separare dal resto del contenuto */
background-color: #eff;
margin: 4px;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
@media (min-width: 500px) {
margin: 1px;
padding: 4px;
}
}
.catalog-image {
max-width: 100%;
height: auto;
margin-bottom: 20px;
}
.imgcatalog {
border: 4px solid #ffffff;
/* Bordo bianco */
border-radius: 12px;
/* Angoli arrotondati */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
/* Ombra per un effetto 3D */
transition: transform 0.3s ease, box-shadow 0.3s ease;
/* Transizione fluida */
object-fit: cover;
/* Mantiene l'aspetto dell'immagine senza distorsioni */
}
.imgcatalog:hover {
transform: scale(1.05);
/* Effetto di ingrandimento al passaggio del mouse */
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
/* Ombra più pronunciata al passaggio del mouse */
}
.back_img {
background-repeat: no-repeat !important;
background-size: cover;
background-position: center;
}
.flex-grow {
flex-grow: 1;
/* Usa flex-grow per occupare spazio disponibile */
}
.title-container {
background-color: rgba(0, 0, 0, 0.3);
/* Sfondo bianco con trasparenza */
padding: 4px;
/* Aggiunta di padding per creare spazio attorno al testo */
border-radius: 8px;
/* Arrotonda gli angoli dello sfondo */
}
.text-h6 {
font-family: 'Arial', sans-serif;
/* Scegli un font accattivante e comune */
font-size: 1.15rem;
/* Dimensione del font modificabile */
color: #FFF;
/* Colore del testo */
margin-top: auto;
/* Assicura che il titolo sia posizionato alla base della scheda */
}

View File

@@ -0,0 +1,143 @@
import { defineComponent, onMounted, PropType, ref, watch, computed } from 'vue'
import { useUserStore } from '@store/UserStore'
import { IImgGallery, IOptGrid, IUserFields, IUserProfile } from 'model'
import { costanti } from '@costanti'
import { shared_consts } from '@/common/shared_vuejs'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { tools } from '@store/Modules/tools'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { CMyCardPopup } from '@/components/CMyCardPopup'
import { useRouter } from 'vue-router'
import { useCalendarStore } from '@src/store/CalendarStore'
import { useGlobalStore } from '@src/store/globalStore'
export default defineComponent({
name: 'CMyRecCatalog',
components: { CMyCardPopup },
emits: ['setCmd', 'cmdext'],
props: {
table: {
type: String,
required: true,
},
prop_myrec: {
type: Object as PropType<any>,
required: false,
default: null,
},
editOn: {
type: Boolean,
required: false,
default: false,
},
margin_right: {
type: Number,
required: false,
default: 0,
},
opt: {
type: Object as PropType<IOptGrid>,
required: false,
default: {},
},
},
setup(props, { emit }) {
const userStore = useUserStore()
const calendarStore = useCalendarStore()
const globalStore = useGlobalStore()
const $q = useQuasar()
const { t } = useI18n()
const $router = useRouter()
const myrec = ref(<any>null)
const visupage = ref(false)
const disabilita = computed(() => {
return props.table === shared_consts.TABLES_MYBACHECAS
})
watch(() => props.prop_myrec, (newval, oldval) => {
mounted()
})
function mounted() {
if (props.prop_myrec) {
myrec.value = props.prop_myrec
}
}
function showBadge() {
if (shared_consts.TABLES_SHOW_ADTYPE.includes(props.table)) {
return true
}
return false
}
function getImgUser(profile: IUserFields) {
return userStore.getImgByProfile(profile)
}
function naviga(path: string) {
$router.push(path)
}
function setCmd($q: any, cmd: number, myusername: string, value: any, groupname: string) {
emit('setCmd', $q, cmd, myusername, value, groupname)
}
function cmdExt(cmd: any, val1: any, val2: any) {
emit('cmdext', cmd, val1, val2)
}
function navigaExt(obj: any) {
cmdExt(costanti.CMD_SHOW_PAGE, null, obj)
//let link = shared_consts.getDirectoryByTable(props.table) + '/' + obj._id
//console.log('link', link)
//$router.push(link)
}
function getNameToShow(user: IUserFields, col = null) {
if (myrec.value.groupname)
return myrec.value.groupname
else
return userStore.getNameToShow(user, col)
}
function computedWidth() {
const width = tools.getwidth($q) - 20;
return `${Math.min(width, 600)}px`; // Limita la larghezza massima a 600px
}
onMounted(mounted)
return {
t,
myrec,
costanti,
getImgUser,
naviga,
navigaExt,
setCmd,
shared_consts,
userStore,
tools,
toolsext,
fieldsTable,
cmdExt,
visupage,
showBadge,
getNameToShow,
calendarStore,
disabilita,
globalStore,
computedWidth,
}
},
})

View File

@@ -0,0 +1,80 @@
<template>
<div
v-if="myrec"
class="q-py-xs centermydiv cardrec back_img column justify-between"
:style="{
width: opt.widthcard,
height: opt.heightcard,
backgroundImage:
`url(` +
tools.getFullFileName(
[myrec.foto_collana],
table,
myrec.username,
myrec._id
) +
`)`,
}"
>
<div class="flex-grow" />
<!-- Questo elemento occupa spazio per separare l'immagine dal titolo -->
<div class="title-container">
<div class="text-h6 text-center">
{{ myrec.title }}
</div>
</div>
<q-item>
<q-item-section side v-if="tools.canModifyThisRec(myrec, table) || editOn">
<q-item-label>
<q-btn rounded dense icon="fas fa-pencil-alt" color="blue">
<q-menu>
<q-list style="min-width: 150px">
<q-item
clickable
v-close-popup
@click="cmdExt(costanti.CMD_MODIFY, myrec._id, null)"
>
<q-item-section side>
<q-icon name="fas fa-pencil-alt" />
</q-item-section>
<q-item-section>{{ $t('reg.edit') }}</q-item-section>
</q-item>
</q-list>
<q-list style="min-width: 150px">
<q-item
clickable
v-close-popup
@click="cmdExt(costanti.CMD_CLONE, myrec._id, null)"
>
<q-item-section side>
<q-icon name="fas fa-copy" />
</q-item-section>
<q-item-section>{{ $t('event.duplicate') }}</q-item-section>
</q-item>
</q-list>
<q-list style="min-width: 150px">
<q-item
clickable
v-close-popup
@click="cmdExt(costanti.CMD_DELETE, myrec._id, null)"
>
<q-item-section side>
<q-icon name="fas fa-trash-alt" />
</q-item-section>
<q-item-section>{{ $t('reg.elimina') }}</q-item-section>
</q-item>
</q-list>
</q-menu>
</q-btn>
</q-item-label>
</q-item-section>
</q-item>
</div>
</template>
<script lang="ts" src="./CMyRecCatalog.ts">
</script>
<style lang="scss" scoped>
@import './CMyRecCatalog.scss';
</style>

View File

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

View File

@@ -36,7 +36,7 @@
circuit.numMembers
}}</span></q-chip
>
<span v-if="circuit.link_group" :class="` `">
<q-btn
icon="fab fa-telegram"
@@ -59,8 +59,9 @@
v-if="circuit.longdescr"
caption
lines="3"
><em>{{ circuit.longdescr }}</em></q-item-label
>
><em>
<div v-html="circuit.longdescr"></div> </em
></q-item-label>
<q-item-label caption lines="2">
<q-chip
v-if="circuit.status !== undefined && circuit.status !== 0"

View File

@@ -1,62 +1,137 @@
<template>
<div class="q-py-xs centermydiv cardrec"
:style="`max-width: `+ (tools.getwidth($q) - 20) +`px; ` + ($q.screen.lt.sm ? (`min-width: `+ (tools.getwidth($q) - 20) +`px;`) : ``)">
<q-item v-if="myrec" clickable v-ripple :class="`shadow-2 q-btn--rounded `+ ($q.dark.isActive ? `bg-black`: `bg-teal-1`)">
<q-item-section v-if="(shared_consts.TABLES_VISU_IMG.includes(table)) && (myrec.photos && myrec.photos.length > 0)" avatar
@click="cmdExt(costanti.CMD_OPEN_PAGE, myrec)">
<div
class="q-py-xs centermydiv cardrec"
:style="
`max-width: ` +
(tools.getwidth($q) - 20) +
`px; ` +
($q.screen.lt.sm ? `min-width: ` + (tools.getwidth($q) - 20) + `px;` : ``)
"
>
<q-item
v-if="myrec"
clickable
v-ripple
:class="
`shadow-2 q-btn--rounded ` +
($q.dark.isActive ? `bg-black` : `bg-teal-1`)
"
>
<q-item-section
v-if="
shared_consts.TABLES_VISU_IMG.includes(table) &&
myrec.photos &&
myrec.photos.length > 0
"
avatar
@click="cmdExt(costanti.CMD_OPEN_PAGE, myrec)"
>
<q-avatar size="60px">
<q-img :src="tools.getFullFileName(myrec.photos, table, myrec.username, myrec.groupname)" :alt="myrec.descr"
img-class="imgprofile" height="60px"/>
<q-img
:src="
tools.getFullFileName(
myrec.photos,
table,
myrec.username,
myrec.groupname
)
"
:alt="myrec.descr"
img-class="imgprofile"
height="60px"
/>
</q-avatar>
</q-item-section>
<q-item-section v-else avatar>
<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-item-section>
<q-item-section @click="cmdExt(costanti.CMD_OPEN_PAGE, null, myrec)">
<q-item-label class="full-width">
<span v-for="(rec, ind) of myrec.recCatGrp" :key="ind"> <q-chip
<q-item-label class="row no-wrap" style="overflow-x: auto; white-space: nowrap;">
<q-chip
v-for="(rec, ind) of myrec.recCatGrp"
:key="ind"
dense
class="text-center shadow-5 glossy bg-blue chipmodif">{{ rec.descr }}</q-chip></span>
class="text-center shadow-5 glossy chipmodif text-white"
:style="`background-color: ${rec.color};`"
>
<q-icon :name="rec.icon" left />
{{ rec.descr }}</q-chip
>
<!--<span class="dateevent" v-if="myrec.dateTimeStart">dal <span class="datainizio">{{tools.getstrVeryShortDate(myrec.dateStart) }}</span> al <span class="datafine">{{ tools.getstrVeryShortDate(myrec.dateEnd) }}</span>
</span>-->
</q-item-label>
<q-item-label v-if="myrec.title" lines="1" :class="($q.dark.isActive ? `text_title_dark`: `text_title`)">
<q-item-label
v-if="myrec.title"
lines="1"
:class="$q.dark.isActive ? `text_title_dark` : `text_title`"
>
<span class="text-weight-bold">{{ myrec.title }}</span>
</q-item-label>
<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 lines="1" style="text-align: right" class="text_user_city">
<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>
<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>
<span v-for="(rec, ind) of myrec.mycities" :key="ind"><span v-if="ind > 0">, </span>{{ rec.comune }}</span>
<q-item-label
lines="1"
style="text-align: right"
class="text_user_city"
>
<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>
<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>
<span v-for="(rec, ind) of myrec.mycities" :key="ind"
><span v-if="ind > 0">, </span>{{ rec.comune }}</span
>
</q-item-label>
</q-item-section>
<q-item-section side v-if="tools.canModifyThisRec(myrec, table)">
<q-item-label>
<q-btn rounded dense icon="fas fa-pencil-alt">
<q-menu>
<q-list style="min-width: 150px">
<q-item clickable v-close-popup
@click="cmdExt(costanti.CMD_MODIFY, myrec._id, null)">
<q-item
clickable
v-close-popup
@click="cmdExt(costanti.CMD_MODIFY, myrec._id, null)"
>
<q-item-section side>
<q-icon name="fas fa-pencil-alt"/>
<q-icon name="fas fa-pencil-alt" />
</q-item-section>
<q-item-section>{{ $t('reg.edit') }}</q-item-section>
</q-item>
</q-list>
<q-list style="min-width: 150px">
<q-item clickable v-close-popup @click="cmdExt(costanti.CMD_DELETE, myrec._id, null)">
<q-item
clickable
v-close-popup
@click="cmdExt(costanti.CMD_DELETE, myrec._id, null)"
>
<q-item-section side>
<q-icon name="fas fa-trash-alt"/>
<q-icon name="fas fa-trash-alt" />
</q-item-section>
<q-item-section>{{ $t('reg.elimina') }}</q-item-section>
</q-item>
@@ -65,11 +140,9 @@
</q-btn>
</q-item-label>
</q-item-section>
</q-item>
<q-separator inset="item"/>
<q-separator inset="item" />
</div>
</template>
<script lang="ts" src="./CMyRecGrpCard.ts">

View File

@@ -30,6 +30,11 @@ export default defineComponent({
required: false,
default: undefined,
},
addstrrequired: {
type: String,
required: false,
default: '',
},
myclass: {
type: String,
required: false,
@@ -385,7 +390,8 @@ export default defineComponent({
}
myarrvalue.value = []
for (const val of props.arrvalue) {
let myarr = props.arrvalue
for (const val of myarr) {
rec = arrtempOpt.value.find((myrec: any) => val === (myrec[`${props.optval}`]))
if (rec) {
myarrvalue.value.push(rec[`${props.optval}`])
@@ -412,8 +418,13 @@ export default defineComponent({
if (props.multiple) {
let arrrec = []
if (props.arrvalue) {
for (const val of props.arrvalue) {
let myarr = props.arrvalue
if (myarr && !tools.isArray(myarr)) {
myarr = [myarr]
}
if (myarr) {
for (const val of myarr) {
rec = optionsreal.value.find((myrec: any) => val === (myrec[`${props.optval}`]))
if (rec) {
arrrec.push(rec[`${props.optval}`])
@@ -577,7 +588,7 @@ export default defineComponent({
valori.value = myarr.filter((v: any) => {
let mioval = tools.getRecordByField(optlab, v)
if (mioval)
return mioval.toLowerCase().indexOf(mystr) > -1
return mioval?.toLowerCase().indexOf(mystr) > -1
else
return false
@@ -687,7 +698,7 @@ export default defineComponent({
// Se esiste già, non crearlo
const esiste = optionsreal.value.find((rec: any) => {
// console.log('rec[fieldval]',rec[fieldval], value.toLowerCase())
return rec[fieldval].toLowerCase() === value.toLowerCase() && (rec[props.filter_field] === props.value_extra)
return rec[fieldval]?.toLowerCase() === value.toLowerCase() && (rec[props.filter_field] === props.value_extra)
})
console.log('esiste', esiste)
if (!esiste || (esiste && esiste.length === 0)) {

View File

@@ -6,7 +6,7 @@
@update:model-value="changeval"
v-bind="$attrs"
label-color="primary"
:label="label"
:label="addstrrequired + label"
@filter="filterFn"
@filter-abort="abortFilterFn"
input-debounce="600"
@@ -89,7 +89,7 @@
:dense="dense"
options-dense
use-input
:label="label"
:label="addstrrequired + label"
input-debounce="300"
:input-class="myclass"
:options="valori"
@@ -137,7 +137,7 @@
:multiple="true"
:model-value="myarrvalue"
label-color="primary"
:label="label"
:label="addstrrequired + label"
@update:model-value="changeval"
rounded
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
@@ -218,7 +218,7 @@
@update:model-value="changeval"
@filter="filterFn"
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
:label="label"
:label="addstrrequired + label"
:use-input="useinput"
@new-value="newvaluefuncfirst"
emit-value

View File

@@ -37,7 +37,12 @@
}}</em></q-item-label
>
<q-item-label v-if="contact.profile" caption lines="3"
><em>{{ contact.profile.qualifica }}</em></q-item-label
>
<em>{{ contact.profile.qualifica }}</em>
<span v-if="tools.isFacil() && contact.profile.note"><span v-if="contact.profile.qualifica"><br></span><em style="color: blue;">Note: {{ contact.profile.note }}</em></span>
<span v-if="tools.isFacil() && contact.profile.da_contattare"><br><em style="color: red;">Da Contattare</em></span>
<!--<span v-if="tools.isBitActive(contact.perm, shared_consts.Permissions.Facilitatore.value)"><br><em style="color: blue;"> Facilitatore RISO</em></span>-->
</q-item-label
>
<q-item-label caption lines="1"></q-item-label>
<div v-if="visu === costanti.ASK_TRUST">
@@ -321,7 +326,7 @@
<q-list style="min-width: 150px">
<q-item
clickable
v-if="!tools.isUserAdminGroup(groupname, contact.username)"
v-if="!tools.isUserAdminGroup(groupname, contact.username, true)"
v-close-popup
@click="
tools.addtoAdminOfMyGroup($q, contact.username, groupname)
@@ -335,7 +340,7 @@
<q-item
clickable
v-if="
tools.isUserAdminGroup(groupname, contact.username) &&
tools.isUserAdminGroup(groupname, contact.username, true) &&
tools.iAmTheCreatorOfTheGroup(groupname)
"
v-close-popup
@@ -512,7 +517,7 @@
<q-item
clickable
v-if="
!tools.isUserAdminCircuit(circuitname, contact.username)
!tools.isUserAdminCircuit(circuitname, contact.username, true)
"
v-close-popup
@click="
@@ -529,7 +534,7 @@
<q-item
clickable
v-if="
tools.isUserAdminCircuit(circuitname, contact.username) &&
tools.isUserAdminCircuit(circuitname, contact.username, true) &&
tools.iAmTheCreatorOfTheCircuit(circuitname)
"
v-close-popup
@@ -589,7 +594,7 @@
<q-item
clickable
v-if="
!tools.isUserAdminCircuit(circuitname, contact.username)
!tools.isUserAdminCircuit(circuitname, contact.username, true)
"
v-close-popup
@click="
@@ -606,7 +611,7 @@
<q-item
clickable
v-if="
tools.isUserAdminCircuit(circuitname, contact.username) &&
tools.isUserAdminCircuit(circuitname, contact.username, true) &&
tools.iAmTheCreatorOfTheCircuit(circuitname)
"
v-close-popup

View File

@@ -201,7 +201,7 @@
<q-list style="min-width: 150px">
<q-item
clickable
v-if="!tools.isUserAdminGroup(groupname, contact.username)"
v-if="!tools.isUserAdminGroup(groupname, contact.username, true)"
v-close-popup
@click="
tools.addtoAdminOfMyGroup($q, contact.username, groupname)
@@ -215,7 +215,7 @@
<q-item
clickable
v-if="
tools.isUserAdminGroup(groupname, contact.username) &&
tools.isUserAdminGroup(groupname, contact.username, true) &&
tools.iAmTheCreatorOfTheGroup(groupname)
"
v-close-popup

View File

@@ -26,6 +26,7 @@
:labelBtnAddExtra="`Aggiungi ` + title"
:prop_pagination="tools.getPagination()"
:groupname="groupname"
:extrafield="groupname"
:margin_right="30">
</CGridTableRec>

View File

@@ -5,7 +5,7 @@ import {
} from 'vue'
import { tools } from '@store/Modules/tools'
import { ICatalogo, IMyScheda, IProduct, ISchedaSingola, IText } from '@src/model'
import { IOptCatalogo, IMyScheda, IProduct, ISchedaSingola, IText } from '@src/model'
import { useProducts } from '@store/Products'
import { useGlobalStore } from '@src/store/globalStore'
@@ -24,7 +24,7 @@ export default defineComponent({
required: true,
},
optcatalogo: {
type: Object as PropType<ICatalogo>,
type: Object as PropType<IOptCatalogo>,
required: true,
},
scheda: {

View File

@@ -1,11 +1,6 @@
<template>
<div v-if="!globalStore.serverError" class="q-ma-sm">
<!--
<CVerifyTelegram v-if="!tools.TelegVerificato() || !tools.isUsernameTelegOk()">
</CVerifyTelegram>
-->
<div v-if="tools.isLogged() && (site.confpages.enableRegMultiChoice || (!site.confpages.enabledRegNeedTelegram))">
<CVerifyEmail v-if="!tools.isEmailVerified() && !tools.TelegVerificato()">

View File

View File

@@ -0,0 +1,76 @@
import { defineComponent, onMounted, PropType, ref, watch } from 'vue'
import { useQuasar } from 'quasar'
import { useI18n } from '@/boot/i18n'
import { useGlobalStore } from '@store/globalStore'
import { fieldsTable } from '@store/Modules/fieldsTable'
import { tools } from '@store/Modules/tools'
import { costanti } from '@costanti'
import { CMyFieldDb } from '@/components/CMyFieldDb'
import { CMyFieldRec } from '@/components/CMyFieldRec'
import { IColGridTable, IOperators, ISpecialField, IUserFields } from 'model'
import MixinBase from '@/mixins/mixin-base'
import { useCalendarStore } from '@src/store/CalendarStore'
export default defineComponent({
name: 'CUserNote',
emits: ['closenote', 'save'],
props: {
username: String,
userprofile_param: {
type: Object as PropType<IUserFields>,
required: true,
}
},
components: { CMyFieldDb, CMyFieldRec },
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const globalStore = useGlobalStore()
const shownote = ref(false)
const userprofile = ref(<IUserFields>{})
function mounted() {
shownote.value = true
userprofile.value = props.userprofile_param
}
function UpdateDbNote() {
const globalStore = useGlobalStore()
const { t } = useI18n()
const mydatatosave = {
id: userprofile.value._id,
table: 'users',
fieldsvalue: { 'profile.note': userprofile.value.profile.note }
}
globalStore.saveFieldValue(mydatatosave).then((esito) => {
if (esito) {
emit('save', userprofile.value)
tools.showPositiveNotif($q, t('db.recupdated'))
shownote.value = false
} else {
tools.showNegativeNotif($q, t('db.recfailed'))
}
})
}
onMounted(mounted)
return {
tools,
costanti,
fieldsTable,
globalStore,
shownote,
userprofile,
UpdateDbNote,
t,
}
},
})

View File

@@ -0,0 +1,60 @@
<template>
<div v-if="shownote" class="text-center q-ma-sm">
<q-dialog v-model="shownote" maximized>
<q-card>
<q-toolbar class="bg-primary text-white">
<q-toolbar-title> Note per {{ username }}: </q-toolbar-title>
<q-btn
flat
round
color="white"
icon="close"
@click="
$emit('closenote');
shownote = false;
"
></q-btn>
</q-toolbar>
<q-card-section>
Note per {{ username }} da parte del Facilitatore:
<br />
<CMyFieldRec
table="users"
:id="userprofile._id"
:rec="userprofile"
field="profile.note"
class="cursor-pointer"
:canEdit="true"
:canModify="true"
>
</CMyFieldRec>
</q-card-section>
<q-card-actions align="center">
<q-btn
filled
:label="t('dialog.save')"
color="primary"
@click="UpdateDbNote"
></q-btn>
<q-btn
filled
:label="$t('dialog.close')"
icon="close"
@click="
$emit('closenote');
shownote = false;
"
></q-btn>
</q-card-actions>
</q-card>
</q-dialog>
</div>
</template>
<script lang="ts" src="./CUserNote.ts">
</script>
<style lang="scss" scoped>
@import './CUserNote.scss';
</style>

View File

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

View File

@@ -19,7 +19,6 @@ import { CMyFieldDb } from '@/components/CMyFieldDb'
import { CSelectUserActive } from '@/components/CSelectUserActive'
import { toolsext } from '@store/Modules/toolsext'
import { useGlobalStore } from '@store/globalStore'
import { useTestStore } from '@store/testStore'
import { useUserStore } from '@store/UserStore'
import { useProducts } from '@store/Products'
@@ -70,7 +69,6 @@ export default defineComponent({
const userStore = useUserStore()
const globalStore = useGlobalStore()
const products = useProducts()
const testStore = useTestStore()
const notifStore = useNotifStore()
const { getnumItemsCart } = MixinUsers()

View File

@@ -1342,7 +1342,7 @@ h3 {
font-family: WalterTurncoat, handwriting, Arial, sans-serif;
font-size: 1.15rem;
text-shadow: .05rem .05rem .05rem $grayshadow;
letter-spacing: 0.25px;
letter-spacing: 0px !important;
}
.title_view_small_shadow {
@@ -1483,7 +1483,7 @@ h3 {
opacity: 0.7;
margin-top: -10px;
color: white;
z-index: 1000;
z-index: 100;
margin-bottom: 5px;
padding: 5px;
border-radius: 20px;
@@ -2586,4 +2586,13 @@ body.body--dark {
/* Supporto per lingue specifiche */
lang: it; /* Imposta la lingua a italiano */
}
.custom-z-index {
z-index: 2000 !important;
}
.mybadge {
border-radius: 10px !important;
text-shadow: .05rem .05rem .15rem #878787;
}

View File

@@ -10,7 +10,7 @@
<meta name="description" content="<%= productDescription %>">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="version" content="1.1.15">
<meta name="version" content="1.1.20">
<meta name="viewport"
content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">

38
src/model/CatalogStore.ts Executable file
View File

@@ -0,0 +1,38 @@
import { ICollana } from "./Products"
export interface FotoCatalogo {
imagefile: string
alt: string
description: string
}
export interface FilesCataloghi {
per_web: string
per_stampa: string
}
export interface ICatalog {
idapp: string
active?: boolean
title: string
foto_collana?: FotoCatalogo,
idCollane?: number[]
collana_info?: ICollana
descr_introduttiva?: string
idPageAssigned?: string
referenti?: string[]
img_bordata_web?: FotoCatalogo,
img_bordata_stampa?: FotoCatalogo,
img_intro_web?: FotoCatalogo,
img_intro_stampa?: FotoCatalogo,
generati?: FilesCataloghi,
online?: FilesCataloghi,
date_created?: Date,
date_updated?: Date,
}
export interface ICatalogState {
catalogs?: ICatalog[]
}

View File

@@ -167,7 +167,7 @@ export interface IMyElem {
styleadd?: string
list?: IImgGallery[]
listcards?: IMyCard[]
catalogo?: ICatalogo
catalogo?: IOptCatalogo
elemsText?: IElemText[]
titleBanner: string
classBanner: string
@@ -799,7 +799,7 @@ export interface IMyScheda {
excludeproductTypes?: number[]
editore?: string[]
argomenti?: string[]
collana?: string
idCollane?: number[]
author?: string
sort_field?: string
sort_dir?: number
@@ -818,7 +818,7 @@ export interface ISchedaSingola {
arrProdToShow?: IProduct[][][]
}
export interface ICatalogo {
export interface IOptCatalogo {
//++AddCATALOGO_FIELDS
productTypes?: number[]
excludeproductTypes?: number[]
@@ -826,7 +826,7 @@ export interface ICatalogo {
Categoria?: string[]
editore?: string[]
argomenti?: string[]
collana?: string
idCollane?: number[]
sort_field?: string
sort_dir?: number
pdf?: boolean
@@ -1026,6 +1026,13 @@ export interface ISearchList {
icon?: string
filteradv?: boolean
filter_extra?: object
visible: boolean
}
export interface IOptGrid {
rowclass?: boolean
widthcard?: string
heightcard?: string
}
export interface IFilter {

View File

@@ -34,8 +34,8 @@ export interface IProductInfo {
checkout_link?: string
idAuthors?: string[]
authors?: string[]
idCollana?: string
collana?: string
idCollana?: number
collana?: ICollana
collezione?: string
idPublisher?: string
publisher?: IPublisher
@@ -223,8 +223,7 @@ export interface ICatProd {
export interface ICollana {
_id?: any
idCollana: number,
descrizione: string,
descrizione_estesa?: string,
title: string,
}
export interface ICatAI {

View File

@@ -132,6 +132,8 @@ export interface IUserProfile {
special_req?: boolean
sex?: ESexType
biografia?: string
note?: string
da_contattare?: boolean
socio?: boolean
socioresidente?: boolean
consiglio?: boolean

View File

@@ -12,3 +12,4 @@ export * from './Projects'
export * from './Calendar'
export * from './Estimate'
export * from './Products'
export * from './CatalogStore'

View File

@@ -2,7 +2,7 @@
<CMyPage title="Gruppi" imgbackground="images/produttori.jpg" sizes="max-height: 120px">
<span>{{
setmeta({
title: 'Gruppi',
title: 'Organizzazioni',
description: '',
keywords: '',
})
@@ -11,7 +11,7 @@
<div class="q-ma-sm q-gutter-sm q-pa-xs">
<CTitleBanner title="Gruppi"></CTitleBanner>
<CTitleBanner title="Organizzazioni"></CTitleBanner>
<CGridTableRec
prop_mytable="groups"
prop_mytitle="Gruppi"

View File

@@ -169,6 +169,9 @@
<CKeyAndValue mykey="Città di Nascita:" :myvalue="myuser.profile.born_city"></CKeyAndValue>
<CKeyAndValue mykey="Data di Nascita:" :mydate="myuser.profile.dateofbirth"></CKeyAndValue>
<CKeyAndValue mykey="Biografia:" :myvalue="myuser.profile.biografia"></CKeyAndValue>
<CKeyAndValue mykey="Note:" :myvalue="myuser.profile.note"></CKeyAndValue>
<CKeyAndValue mykey="Da Contattare:" :myvalue="myuser.profile.da_contattare"></CKeyAndValue>
<CKeyAndValue mykey="Facilitatore:" :myvalue="tools.isBitActive(myuser.perm, shared_consts.Permissions.Facilitatore.value)"></CKeyAndValue>
<CKeyAndValue mykey="qualifica:" :myvalue="myuser.profile.qualifica"></CKeyAndValue>
</div>

View File

@@ -9,7 +9,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/products',
materialIcon: 'fas fa-lemon',
name: 'pages.productslist',
name: 'mypages.productslist',
component: () => import('@/views/ecommerce/productsList/productsList.vue'),
inmenu: true,
submenu: true,
@@ -21,7 +21,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/checkout',
materialIcon: 'fas fa-shopping-cart',
name: 'pages.checkout',
name: 'mypages.checkout',
component: () => import('@/views/ecommerce/checkOut/checkOut.vue'),
inmenu: true,
submenu: true,
@@ -33,7 +33,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/orderinfo',
materialIcon: 'fas fa-file-alt',
name: 'pages.orderinfo',
name: 'mypages.orderinfo',
component: () => import('@/views/ecommerce/orderInfo/orderInfo.vue'),
inmenu: true,
submenu: true,
@@ -45,7 +45,7 @@ function getRoutesEcomm(site: ISites) {
order: 35,
path: '/admin/ecommerce/orders',
materialIcon: 'fas fa-file-alt',
name: 'pages.orders',
name: 'mypages.orders',
component: () => import('@/rootgen/admin/orders/orders.vue'),
inmenu: true,
submenu: true,
@@ -75,7 +75,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/cash',
materialIcon: 'fas fa-cash-register',
name: 'pages.cash',
name: 'mypages.cash',
component: () => import('@/views/ecommerce/cash/cash.vue'),
inmenu: true,
submenu: true,
@@ -89,7 +89,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/productInfos',
materialIcon: 'fas fa-lemon',
name: 'pages.productInfos',
name: 'mypages.productInfos',
component: () => import('@/rootgen/admin/productInfos/productInfos.vue'),
inmenu: true,
submenu: true,
@@ -103,7 +103,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/gestoreordini',
materialIcon: 'fas fa-lemon',
name: 'pages.gestoreordini',
name: 'mypages.gestoreordini',
component: () => import('@/views/admin/gestoreordini/gestoreordini.vue'),
inmenu: true,
submenu: true,
@@ -117,7 +117,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/products',
materialIcon: 'fas fa-lemon',
name: 'pages.listinoprodotti',
name: 'mypages.listinoprodotti',
component: () => import('@/rootgen/admin/products/products.vue'),
inmenu: true,
submenu: true,
@@ -131,7 +131,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/producers',
materialIcon: 'fas fa-tractor',
name: 'pages.producer',
name: 'mypages.producer',
component: () => import('@/rootgen/admin/producer/producer.vue'),
inmenu: true,
submenu: true,
@@ -145,7 +145,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/storehouses',
materialIcon: 'fas fa-store',
name: 'pages.storehouses',
name: 'mypages.storehouses',
component: () => import('@/rootgen/admin/storehouses/storehouses.vue'),
inmenu: true,
submenu: true,
@@ -159,7 +159,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/providers',
materialIcon: 'fas fa-file-alt',
name: 'pages.providers',
name: 'mypages.providers',
component: () => import('@/rootgen/admin/providers/providers.vue'),
inmenu: true,
submenu: true,
@@ -173,7 +173,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/gasordini',
materialIcon: 'fas fa-file-alt',
name: 'pages.gasordini',
name: 'mypages.gasordini',
component: () => import('@/rootgen/admin/gasordini/gasordini.vue'),
inmenu: true,
submenu: true,
@@ -187,7 +187,7 @@ function getRoutesEcomm(site: ISites) {
order: 30,
path: '/admin/ecommerce/scontistica',
materialIcon: 'fas fa-gift',
name: 'pages.scontisticas',
name: 'mypages.scontisticas',
component: () => import('@/rootgen/admin/scontistica/scontistica.vue'),
inmenu: true,
submenu: true,
@@ -201,7 +201,7 @@ function getRoutesEcomm(site: ISites) {
order: 31,
path: '/admin/ecommerce/departments',
materialIcon: 'fas fa-file-alt',
name: 'pages.departments',
name: 'mypages.departments',
component: () => import('@/rootgen/admin/departments/departments.vue'),
inmenu: true,
submenu: true,
@@ -215,7 +215,7 @@ function getRoutesEcomm(site: ISites) {
order: 31,
path: '/admin/ecommerce/orders',
materialIcon: 'fas fa-file-alt',
name: 'pages.orders',
name: 'mypages.orders',
component: () => import('@/rootgen/admin/orders/orders.vue'),
inmenu: true,
submenu: true,
@@ -229,7 +229,7 @@ function getRoutesEcomm(site: ISites) {
order: 32,
path: '/admin/ecommerce/catprods',
materialIcon: 'fas fa-file-alt',
name: 'pages.catprods',
name: 'mypages.catprods',
component: () => import('@/rootgen/admin/catprods/catprods.vue'),
inmenu: true,
submenu: true,
@@ -238,6 +238,20 @@ function getRoutesEcomm(site: ISites) {
onlyManager: true,
onlyEditor: true
},
{
active: true,
order: 35,
path: '/admin/ecommerce/collane',
materialIcon: 'fas fa-file-alt',
name: 'mypages.collane',
component: () => import('@/rootgen/admin/collane/collane.vue'),
inmenu: true,
submenu: true,
level_parent: 0,
level_child: 0.5,
onlyManager: true,
onlyEditor: true
},
]
@@ -248,7 +262,7 @@ function getRoutesEcomm(site: ISites) {
order: 1402,
faIcon: 'fas fa-lemon',
materialIcon: 'fas fa-lemon',
name: 'pages.ecommerce',
name: 'mypages.ecommerce',
routes2: routes_ecommerce,
inmenu: true,
onlyif_logged: true,
@@ -262,7 +276,7 @@ function getRoutesEcomm(site: ISites) {
path: '/admin/ecommerce',
order: 1420,
materialIcon: 'next_week',
name: 'pages.admin_ecommerce',
name: 'mypages.admin_ecommerce',
routes2: routes_admin_ecommerce,
inmenu: true,
solotitle: true,

View File

@@ -839,7 +839,7 @@ const msg_enUs = {
name: 'Livello',
},
statusSkill: {
name: 'Di Persona / On Line',
name: '👤 Di Persona / 💻 On Line',
},
store: {
description: 'Descrizione',

View File

@@ -14,7 +14,10 @@ const msg_it = {
csv: 'Esporta Movimenti',
},
grid: {
advanced_filters: 'Filtri Avanzati',
show_campi_avanzati: 'Visualizza campi aggiuntivi',
hide_campi_avanzati: 'Nascondi campi aggiuntivi',
advanced_filters: 'Vedi Altri Filtri ...',
hide_advanced_filters: 'Nascondo Filtri ...',
found: 'trovato',
newrecord: 'Aggiungi',
table: 'Tabella',
@@ -45,6 +48,14 @@ const msg_it = {
data_choose: 'Scegli la Data',
},
profile: {
info_pers: 'Info Personali',
aggiungi_note: 'Aggiungi note',
da_contattare: 'Da Contattare',
facilitatore: 'Facilitatore RISO',
togli_facilitatore: 'Togli: Facilitatore',
togli_da_contattare: 'Togli: "Da Contattare"',
annunci: 'Annunci',
share_link: 'Copia Link',
info_msg: 'Puoi compilare facoltativamente questi tuoi dati personali.',
info: 'Informazioni su di te',
chisei: 'Chi Sei? Raccontaci di te:',
@@ -136,7 +147,7 @@ const msg_it = {
orderscart: 'Ordini',
sito_offline: 'Sito in Aggiornamento',
modifprof: 'Modifica',
modifgrp: 'Modifica Gruppo',
modifgrp: 'Modifica Organizzazione',
biografia: 'Biografia',
qualifica: 'Qualifica (in breve)',
update: 'Aggiornamento in Corso...',
@@ -315,30 +326,30 @@ const msg_it = {
handshakesadded: 'Aggiunto alla lista Strette di Mano',
domanda_removefriend: 'Rimuovi dagli Amici {username}?',
domanda_removehandshake: 'Rimuovi dalla lista Strette di Mano {username}?',
domanda_exit_fromgroup: 'Uscire dal Gruppo {groupname} ?',
domanda_addadminofmygroup: 'Aggiungere {username} come Amministratore / Amministratrice del Gruppo {groupname} ?',
domanda_removeadminofmygroup: 'Rimuovere {username} dall\' incarico di Amministratore del Gruppo {groupname} ?',
domanda_exit_fromgroup: 'Uscire dall\'Organizzazione {groupname} ?',
domanda_addadminofmygroup: 'Aggiungere {username} come Amministratore / Amministratrice dell\'Organizzazione {groupname} ?',
domanda_removeadminofmygroup: 'Rimuovere {username} dall\' incarico di Amministratore dell\'Organizzazione {groupname} ?',
removedfriend: 'Rimosso dalla lista di Amici',
removedhandshake: 'Rimosso dalla lista Strette di Mano',
addedtoadmin: 'Aggiunto {username} come amministratore',
removedtoadmin: 'Rimosso {username} come amministratore',
refusedgroup: 'Rifiutato a {username} la richiesta di entrare nel Gruppo',
youarerefusedgroup: 'Ti è stato rifiutata la richiesta di entrare in questo Gruppo (per info chiedi all\'amministratore del gruppo)',
youarerefusedcircuit: 'Ti è stato rifiutata la richiesta di entrare in questo Circuito (per info chiedi all\'amministratore del gruppo)',
refusedgroup: 'Rifiutato a {username} la richiesta di entrare nell\'Organizzazione',
youarerefusedgroup: 'Ti è stato rifiutata la richiesta di entrare in questa Organizzazione (per info chiedi all\'amministratore dell\'Organizzazione)',
youarerefusedcircuit: 'Ti è stato rifiutata la richiesta di entrare in questo Circuito (per info chiedi all\'amministratore dell\'Organizzazione)',
insertgoodorservices_to_enter_circuit: 'Per poter inviare RIS è consigliato partecipare al circuito, aggiungendo quello che possiamo proporre noi (un Bene, un Servizio, Ospitalità, ecc...)',
deletedgroup: 'Gruppo Eliminato',
deletedgroup: 'Organizzazione Eliminata',
domanda_addtofriend: 'Aggiungere agli amici {username}?',
domanda_addtohandshake: 'Confermi che hai conosciuto personalmente e dai la tua fiducia a {username} ?',
handshake_you: 'Hai stretto la mano a {username}',
handshake_him: '{username} ti ha stretto la mano',
both_fiducia: 'Fiducia reciproca tra te e {username}',
domanda_addtogroup: 'Aggiungi {username} al gruppo {groupname}?',
domanda_addtogroup: 'Aggiungi {username} all\'Organizzazione {groupname}?',
domanda_addfidotocircuit: 'Abilita la fiducia a {username} al {circuitname}?',
domanda_addtocircuit: 'Aggiungi {username} al {circuitname}?',
domanda_addgrouptocircuit: 'Aggiungi il Conto del Gruppo {groupname} al {circuitname}?',
domanda_addgrouptocircuit: 'Aggiungi il Conto dell\'Organizzazione {groupname} al {circuitname}?',
addedfriend: 'Aggiunto alla lista di Amici',
addedhandshake: 'Aggiunto alla lista Strette di Mano',
addedgroup: 'Aggiunto al Gruppo',
addedgroup: 'Aggiunto all\'Organizzazione',
addedfidocircuit: 'Fiducia abilitata al {circuitname}',
addedcircuit: 'Aggiunto al {circuitname}',
domanda_trusted: 'Accettare la Fiducia a {username}?',
@@ -347,34 +358,34 @@ const msg_it = {
rejected: 'Hai Rifiutato l\'accesso a {username}',
domanda_ask_friend: 'Chiedere l\'Amicizia a {username}?',
domanda_ask_handshake: 'Confermi che hai conosciuto personalmente e dai la tua fiducia a {username} ?',
domanda_ask_group: 'Chiedere l\'invito al Gruppo {groupname}?',
domanda_ask_group: 'Chiedere l\'invito all\'Organizzazione {groupname}?',
askedtofriend: 'Chiesto l\'Amicizia a {username}',
askedtohandshake: 'Hai confermato la tua fiducia a {username}',
domanda_revoke_friend: 'Revocare la richiesta di Amicizia a {username}?',
domanda_revoke_handshake: 'Revocare la richiesta di Stretta di mano a {username}?',
domanda_revoke_group: 'Revocare la richiesta al gruppo {groupname}?',
domanda_refuse_group: 'Rifiutare la richiesta di {username} per entrare nel gruppo {groupname}?',
domanda_revoke_group: 'Revocare la richiesta all\'Organizzazione {groupname}?',
domanda_refuse_group: 'Rifiutare la richiesta di {username} per entrare nella Organizzazione {groupname}?',
revoketofriend: 'Revocato la richiesta di Amicizia a {username}',
revoketohandshake: 'Hai revocato la fiducia a {username}',
domanda_cancel_req_friend: 'Annullare la richiesta di Amicizia a {username}?',
domanda_cancel_req_group: 'Annullare la richiesta d\'invito di {username} al gruppo {groupname}?',
domanda_cancel_req_group: 'Annullare la richiesta d\'invito di {username} alla Organizzazione {groupname}?',
cancel_req_friend: 'Annullata la richiesta di Amicizia a {username}',
cancel_req_group: 'Annullata la richiesta al gruppo {groupname}',
cancel_req_group: 'Annullata la richiesta alla Organizzazione {groupname}',
domanda_rejectedtrust: 'Rifiutare la Fiducia a {username}?',
rejected: 'Hai rifiutato l\'accesso alla App a {username}',
domanda_blockuser: 'Bloccare {username}?',
domanda_unblockuser: 'Sbloccare {username}?',
domanda_reportuser: 'Segnalare l\'utente {username}?',
domanda_blockgroup: 'Bloccare il gruppo {groupname}?',
domanda_blockgroup: 'Bloccare l\'Organizzazione {groupname}?',
reporteduser: 'Utente Segnalato in data {date_report}',
blockedfriend: 'Utente Bloccato',
unblockedfriend: 'Utente Sbloccato',
domanda: 'Domanda',
askedtogroup: 'Chiesto l\'invito al Gruppo {groupname}',
revoketogroup: 'Revocato la richiesta d\'invito al gruppo {groupname}',
domanda_removegroup: 'Rimuovere dal Gruppo {username} ?',
removedgroup: 'Rimosso dal Gruppo',
domanda_remove_group: 'Sicuro di voler Eliminare il Gruppo {groupname} ?',
askedtogroup: 'Chiesto l\'invito all\'Organizzazione {groupname}',
revoketogroup: 'Revocato la richiesta d\'invito alla Organizzazione {groupname}',
domanda_removegroup: 'Rimuovere dalla Organizzazione {username} ?',
removedgroup: 'Rimosso dall\'Organizzazione',
domanda_remove_group: 'Sicuro di voler Eliminare l\'Organizzazione {groupname} ?',
enabled_to_app: 'Hai Ammesso {username} alla App',
rejected_to_app: 'Hai rifiutato {username} alla App',
},
@@ -528,6 +539,7 @@ const msg_it = {
ritessitura: 'RITESSITURA',
},
reg: {
nameorg: 'Nome Organizzazione',
version: 'Versione',
socio: 'Socio',
socioresidente: 'Residente',
@@ -565,7 +577,7 @@ const msg_it = {
aportador_solidario: 'Username di chi ti ha Invitato',
username_admin_collettivo: 'Username dell\'Amministratore',
verified_by_aportador: 'Verificato',
idMyGroup: 'Id Gruppo Appartenenza',
idMyGroup: 'Id Organizzazione Appartenenza',
notAsk_ToVerify: 'No Verif. Reg',
trust_modified: 'Fiducia Modificata',
reported: 'Segnalato',
@@ -584,7 +596,7 @@ const msg_it = {
invited_i_know: '',
made_gift: 'Dono',
note: 'Note',
detailsPage: 'Pagina Dettagliata sul Gruppo',
detailsPage: 'Pagina Dettagliata sull\'Organizzazione',
incorso: 'Registrazione in corso...',
iscrizioneincorso: 'Iscrizione in corso...',
richiesto: 'Campo Richiesto',
@@ -641,14 +653,14 @@ const msg_it = {
sospeso: 'Sospeso',
username: 'Username',
username_reg: 'Username',
username_reg_collettivo: 'Username Gruppo',
username_reg_collettivo: 'Username Organizzazione',
username_hint: 'caratteri consentiti: tratteggio (_)',
username_pseudonimo: 'Username (Pseudonimo)',
username_short: 'Username',
name: 'Nome',
insert_name: 'Inserisci il tuo Nome (o Soprannome)',
name_opt: 'Nome (Facoltativo)',
name_opt_collettivo: 'Nome del Gruppo',
name_opt_collettivo: 'Nome dell\'Organizzazione',
surname: 'Cognome',
insert_surname: 'Inserisci il Cognome',
surname_opt: 'Cognome (facoltativo)',
@@ -947,6 +959,7 @@ const msg_it = {
messages: 'Messaggi',
nomessage: 'Nessun Messaggio',
send_email: 'Invia Email',
write_email: 'Scrivi una email',
},
notifs: {
all: 'Tutte',
@@ -965,7 +978,7 @@ const msg_it = {
warn_sector: 'in un Settore...',
warn_region: 'nelle Regioni...',
warn_city: 'in una Città selezionata',
warn_my_groups: 'nei miei Gruppi',
warn_my_groups: 'nelle mie Organizzazioni',
warn_my_ris_circuit: 'nei miei Circuiti',
new_event: 'Nuovo Evento',
new_attend: 'Nuovo Partecipante',
@@ -980,7 +993,7 @@ const msg_it = {
new_rec_bacheca: 'Annunci',
new_rec_bacheca_descr: 'Avvisami quando viene aggiunto un Annuncio:',
friends: 'Richieste di Amicizia',
groups: 'Gruppi',
groups: 'Organizzazioni',
friends_descr: 'Notifiche:',
events: 'Eventi',
events_descr: 'Notifiche:',
@@ -998,7 +1011,7 @@ const msg_it = {
bacheca_new_hosp: 'Nuova Ospitalità',
events_new: 'Nuovo Evento',
friends_new: 'Nuova Richiesta di Amicizia',
groups_new: 'Si creano Nuovi Gruppi',
groups_new: 'Si creano Nuove Organizzazioni',
circuits_new: 'Si creano Nuovi Circuiti',
test_new: 'Nuovo Test',
favorite_new: '"Mi Piace" su un tuo annuncio o post',
@@ -1150,6 +1163,7 @@ const msg_it = {
skill: {
name: 'Categoria',
city: 'Comune',
cityorprovince: 'Comuni o Province',
pub_to_share: 'Visibilità',
photos: 'Foto',
note: 'Note',
@@ -1162,6 +1176,15 @@ const msg_it = {
statusSkill: {
name: 'Di Persona / On Line',
},
producer: {
name: 'Produttore',
description: 'Descrizione',
referent: 'Referente',
username: 'Username',
city: 'Città',
region: 'Regione',
img: 'Immagine',
},
store: {
description: 'Descrizione',
main: 'Principale',
@@ -1175,6 +1198,13 @@ const msg_it = {
email_html_GAS_order_confirmed: '2) Ordine GAS Confermato da noi',
email_html_order_consegnato: '3) Ordine Consegnato',
email_html_GAS_order_consegnato: '3) Ordine GAS Consegnato',
name: 'Nome Fornitore',
referent: 'Referente',
address: 'Indirizzo',
city: 'Città',
region: 'Regione',
},
sectors: {
name: 'Settore',
@@ -1185,7 +1215,7 @@ const msg_it = {
sector_goods_select: 'Scegli i Settori Preferiti dei Beni',
},
services: {
visit_website: 'Visita il Sito Web',
visit_website: 'Visita il Sito Web "{link}"',
email: 'Email:',
whatsapp: 'Whatsapp',
createdBy: 'Creato da',
@@ -1211,15 +1241,42 @@ const msg_it = {
date_updated: 'Ult. Aggiornamento',
},
mypages: {
admin_ecommerce: 'ECommerce',
ecommerce: 'Prodotti',
ecommerce_menu: 'ECommerce1',
gasordini: 'Gas Ordini',
gestoreordini: 'Gestore Ordini',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
cash: 'Cassa',
productInfos: 'Info Prodotti',
listinoprodotti: 'Listino Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
collane: 'Collane',
categories: 'Categorie',
storehouses: 'Magazzino',
providers: 'Fornitori',
catprods: 'Categorie',
subcatprods: 'Sotto-Categorie',
gasordine: 'Gas Ordine',
scontisticas: 'Scontistica',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Pagamenti',
duplica_newname: 'Inserisci il nome della Nuova Pagina (senza spazi)',
duplica_conferma: 'Duplicare {path} creando {newpath}',
esporta_conferma: 'Esportare la pagina {path} su {nomefile} ?',
attivita: 'Attività',
find_people: 'Cerca Persone',
find_group: 'Cerca Gruppo',
find_group: 'Cerca Organizzazione',
manage_my_groups: 'Amministratore',
follow_groups: 'Gruppi di cui fai parte',
create_group: 'Crea Gruppo',
follow_groups: 'Organizzazioni di cui fai parte',
create_group: 'Crea Organizzazione',
friends: 'Amici',
iscritti: 'Iscritti',
bacheca: 'Bacheca',
@@ -1231,7 +1288,8 @@ const msg_it = {
events: 'Eventi',
goods: 'Beni',
test: 'Test',
groups: 'Gruppi',
groups: 'Organizzazioni',
group: 'Organizzazione',
request_friends: 'Richieste Amicizia',
request_sent: 'Richieste Inviate',
request_trust: 'Richieste Fiducia',
@@ -1303,30 +1361,33 @@ const msg_it = {
short_descr: 'Descrizione Breve',
},
groups: {
info: 'Informazioni su questo gruppo',
che_gestisci: 'Organizzazioni che gestisci',
tutti: 'Tutti',
info: 'Informazioni su questa Organizzazione',
infoaccount: 'Informazioni sul Conto',
accepted: 'Ingresso Accettato',
refused: 'Ingresso Rifiutato',
deleted: 'Cancellato',
blocked: 'Bloccato',
removed: 'Rimosso',
ask_group: 'Chiedi di entrare nel Gruppo',
exit_group: 'Esci dal Gruppo',
delete_group: 'Elimina il Gruppo',
ask_group: 'Chiedi di entrare nell\'Organizzazione',
exit_group: 'Esci dall\'Organizzazione',
delete_group: 'Elimina l\'Organizzazione',
accept_group: 'Accetta la richiesta',
accept_circuit: 'Accetta la richiesta',
addasadmin: 'Aggiungi come Admin del Gruppo',
remove_as_admin: 'Rimuovi come Admin del Gruppo',
remove_from_mygroups: 'Rimuovi dal Gruppo',
block_group: 'Blocca Gruppo',
addasadmin: 'Aggiungi come Admin della Organizzazione',
remove_as_admin: 'Rimuovi come Admin della Organizzazione',
remove_from_mygroups: 'Rimuovi dalla Organizzazione',
block_group: 'Blocca Organizzazione',
pwd: 'Password per accedere',
private: 'Privato',
hidden: 'Nascosto',
private_descr: 'Solo i membri possono vedere chi fa parte del gruppo',
hidden_descr: 'il Gruppo non sarà visibile nella ricerca',
descrizione: 'Descrizione',
private_descr: 'Solo i membri possono vedere chi fa parte dell\'Organizzazione',
hidden_descr: 'l\'Organizzazione non sarà visibile nella ricerca',
page: 'Pagina',
circuits: 'Circuiti',
groupname: 'Gruppo',
groupname: 'Organizzazione',
contocom: 'Conto Comunitario',
events: 'Eventi',
},
@@ -1397,7 +1458,7 @@ const msg_it = {
iscritti: 'iscritti trovati',
addtothereceiverlist: 'Aggiungiti alla Lista dei Riceventi',
coins_requestedris: 'Il tuo profilo {username} è ora visibile dalla "lista dei Riceventi di oggi".',
coins_requestedrisgroup: 'Il Conto del Gruppo {groupname} sarà visibile sulla lista dei riceventi per 8 ore. Fai cliccare \'Invia RIS a..\' a chi ti deve inviare i RIS.',
coins_requestedrisgroup: 'Il Conto dell\'Organizzazione {groupname} sarà visibile sulla lista dei riceventi per 8 ore. Fai cliccare \'Invia RIS a..\' a chi ti deve inviare i RIS.',
lista_ricev_title: 'Questa è la lista degli Utenti che hanno cliccato su "Ricevi RIS" nelle ultime 8 ore',
info: 'Informazioni su questo Circuito',
aggiuntive: 'Il Circuito è una una rete di individui, che fanno riferimento ad un territorio provinciale, nella quale ciascuno può offrire i propri talenti, competenze e produzioni (Beni, Servizi, Ospitalità, ecc.) e riceverne da altri, utilizzando anche i <strong>RIS</strong> come metodo di scambio, sulla base di <strong>relazioni di fiducia</strong>.',
@@ -1424,7 +1485,7 @@ const msg_it = {
valuta_per_euro: 'Valuta per Euro',
fido_scoperto_default: 'Fiducia concessa',
fido_scoperto_default_tips: 'Rappresenta quanto credito puoi creare autonomamente',
fido_scoperto_default_grp: 'Fiducia concessa Gruppi',
fido_scoperto_default_grp: 'Fiducia concessa Organizzazione',
fido_scoperto_default_tips_grp: 'Rappresenta quanto credito puo creare autonomamente il Gruppo',
fido_scoperto_default_contocom: 'Fiducia concessa Conto Comunitario',
fido_scoperto_default_tips_contocom: 'Rappresenta quanto credito puo creare autonomamente il Conto Comunitario',
@@ -1449,7 +1510,7 @@ const msg_it = {
durata_deper: 'Durata Dep.',
img_logo: 'NomeFile Logo',
regulation: 'Regolamento',
disclaimer: 'Lo scopo di questo strumento è quello di aiutare a contabilizzare gli scambi tra i vari gruppi territoriali. ' +
disclaimer: 'Lo scopo di questo strumento è quello di aiutare a contabilizzare gli scambi tra i vari circuiti territoriali. ' +
'La responsabilità di come verrà utilizzato, sarà di ognuno di noi.',
acceptregulation: 'Accetta il Regolamento',
domanda_ask: 'Confermi di voler entrare nel {circuitname} accettando il suo Regolamento?',
@@ -1506,16 +1567,16 @@ const msg_it = {
movements_made: 'Movimenti effettuati',
contocomunitario: 'Conto Comunitario',
comunitario: 'Comunitario',
conticollettivi: 'Gruppi',
contideigruppi: 'Conti dei Gruppi',
listaconticollettivi: 'Lista Gruppi',
conticollettivi: 'Organizzazioni',
contideigruppi: 'Conti delle Organizzazioni',
listaconticollettivi: 'Lista Organizzazioni',
qta_remaining_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
qta_not_valid: 'Quantità non valida',
qta_max_to_send: 'Quantità massima inviabile {maxqta} {symbol}',
transaction_suspended: 'Transazioni sospese',
choosecontocom: 'Scegli il Conto del Gruppo',
choosecontocom: 'Scegli il Conto dell\'Organizzazione',
contocom: 'Conto Comunitario',
contocoll: 'Conto del Gruppo',
contocoll: 'Conto dell\'Organizzazione',
user: 'Utente',
sender: 'Mittente',
da: 'Da',
@@ -1559,10 +1620,10 @@ const msg_it = {
movement: {
transactionDate: 'Data Transazione',
accountFromId: 'Dal Conto',
accountFromCollId: 'Dal Conto del Gruppo',
accountFromCollId: 'Dal Conto dell\'Organizzazione',
accountFromComId: 'Dal Conto Com.',
accountToId: 'Al Conto',
accountToCollId: 'Al Conto del Gruppo',
accountToCollId: 'Al Conto dell\'Organizzazione',
accountToComId: 'Al Conto Com.',
amount_sent: 'Quantità inviate',
amount_to_send: 'Quantità da inviare',
@@ -1575,10 +1636,10 @@ const msg_it = {
movin: 'RIS Ricevuti',
movout: 'RIS Inviati',
from: 'Inviate da:',
fromCColl: 'Inviate dal Conto del Gruppo:',
fromCColl: 'Inviate dal Conto dell\'Organizzazione:',
fromCCom: 'Inviate dal Conto Comunitario:',
to: 'A favore di:',
toCColl: 'Al Conto del Gruppo:',
toCColl: 'Al Conto dell\'Organizzazione:',
toCCom: 'Al Conto Comunitario:',
pendingtransaction: '* Transazioni Pendenti',
viewpendingtransaction: 'Vedi Transazioni Pendenti',
@@ -1596,7 +1657,7 @@ const msg_it = {
tabdown: {
home: 'Home',
groups: 'Gruppi',
groups: 'Organizzazioni',
eventi: 'Eventi',
friends: 'Iscritti',
bookings: 'Prenotaz.',
@@ -1668,17 +1729,17 @@ const msg_it = {
showConnected: 'Stato Connessione',
bookingEvents: 'Prenotazione Eventi',
enableEcommerce: 'ECommerce',
enableGroups: 'Gruppi',
enableGroups: 'Organizzazioni',
enableCircuits: 'Circuiti',
enableAI: 'AI Tools',
enableProj: 'Mostra Project',
enableTodos: 'Mostra Todos',
enableRegByBot: 'Registratione By Bot',
enableRegByBot: 'Registrazione usando il BOT',
enableRegMultiChoice: 'Registratione a Scelta tra Email e Telegram',
enableTokenExpired: 'Attiva Scadenza Token',
enableDebugOn: 'Attiva Debug',
enabledRegNeedTelegram: 'Reg con Telegram',
showViewGroups: 'Bott. Gruppi',
showViewGroups: 'Bott. Organizzazioni',
showViewEventi: 'Bott. Eventi',
showViewUsers: 'Bott. Users',
showViewCircuits: 'Bott. Circuiti',
@@ -1946,6 +2007,15 @@ const msg_it = {
totVen: 'Totale Venduti',
totFat: 'Totale Fatturati',
},
cataloglist: {
foto_collana: 'Foto Collana',
referenti: 'Referenti',
img_bordata_web: 'Foto Bordo per Web',
collane: 'Collane',
idPageAssigned: 'Pagina Assegnata',
descr_introduttiva: 'Descrizione Introduttiva',
}
},

34
src/store/CatalogStore.ts Executable file
View File

@@ -0,0 +1,34 @@
import { defineStore } from 'pinia'
import {
IAccount,
ICircuit, ICatalog, IGlobalState, IGroupShort, IMyCircuit, IMyGroup, IUserFields,
ICatalogState
} from '@src/model'
import { tools } from '@store/Modules/tools'
import translate from '@src/globalroutines/util'
import * as Types from '@src/store/Api/ApiTypes'
import { useGlobalStore } from '@store/globalStore'
import { serv_constants } from '@store/Modules/serv_constants'
import { Api } from '@api'
import { toolsext } from '@store/Modules/toolsext'
import { static_data } from '@src/db/static_data'
import { shared_consts } from '@/common/shared_vuejs'
import { costanti } from '@costanti'
import globalroutines from '../globalroutines/index'
export const useCatalogStore = defineStore('CatalogStore', {
state: (): ICatalogState => ({
catalogs: [{ idapp: '', title: '' }]
}),
getters: {},
actions: {
},
})

Some files were not shown because too many files have changed in this diff Show More