- sendcoins

- font
- catalogo
This commit is contained in:
Surya Paolo
2025-03-26 23:23:35 +01:00
parent 285db5f995
commit 7624f16723
134 changed files with 3594798 additions and 1941 deletions

View File

@@ -2466,7 +2466,7 @@ export const shared_consts = {
AccountType: {
USER: 0,
COLLECTIVE_ACCOUNT: 1,
CONTO_DI_GRUPPO: 1,
COMMUNITY_ACCOUNT: 2,
},

File diff suppressed because it is too large Load Diff

View File

@@ -92,7 +92,7 @@ export default defineComponent({
},
{
label: t('circuit.conticollettivi'),
value: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
value: shared_consts.AccountType.CONTO_DI_GRUPPO,
}
])

View File

@@ -75,7 +75,7 @@
</div>
</div>
<div
v-else-if="tipoConto === shared_consts.AccountType.COLLECTIVE_ACCOUNT"
v-else-if="tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO"
>
<div v-for="(grp, i) in usersList.listgroup" :key="i">
<CMyGroup :mygrp="grp" :visu="costanti.USER_GROUPS" :noaut="true">

View File

@@ -121,7 +121,7 @@ export default defineComponent({
if (from) {
if (mov.tipocontofrom === shared_consts.AccountType.USER) {
link = `/my/` + mov.userfrom.username
} else if (mov.tipocontofrom === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (mov.tipocontofrom === shared_consts.AccountType.CONTO_DI_GRUPPO) {
link = tools.getPathByGroup(mov.groupfrom)
} else if (mov.tipocontofrom === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
link = '' // mov.contocomfrom.name
@@ -129,7 +129,7 @@ export default defineComponent({
} else {
if (mov.tipocontoto === shared_consts.AccountType.USER) {
link = `/my/` + mov.userto.username
} else if (mov.tipocontoto === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (mov.tipocontoto === shared_consts.AccountType.CONTO_DI_GRUPPO) {
link = tools.getPathByGroup(mov.groupto)
} else if (mov.tipocontoto === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
link = ''

View File

@@ -1470,6 +1470,20 @@
dense
:label="`${ind}. ` + recscheda.scheda.name ? recscheda.scheda.name : `Scheda ` + (ind + 1)"
>
<q-expansion-item
dense
dense-toggle
expand-separator
label="Schede"
icon="fas fa-play-circle"
>
<CMySize
label="Immagini:"
:fit="true"
v-model="recscheda.scheda.dimensioni.immagine_prodotto.size"
@update:model-value="modifElem"
></CMySize>
</q-expansion-item>
<q-expansion-item
dense
dense-toggle
@@ -1504,6 +1518,14 @@
:show_dimensioni="true"
>
</CMyText>
<CMySize
label="Schede:"
v-model="recscheda.scheda.dimensioni.scheda_prodotto.size"
:gap="true"
@update:model-value="modifElem"
></CMySize>
˚
</q-expansion-item>
</div>
</div>

View File

@@ -233,7 +233,7 @@
<div v-if="false" class="barcode">
<CBarCode :value="myproduct.productInfo.code" format="EAN-13" text="ISBN:">
</CBarCode>
</div>
<div
v-if="

View File

@@ -1,126 +0,0 @@
$heightBtn: 100%;
$colore_titolo_libro: rgb(210, 12, 12);
body {
line-height: 1.2 !important;
}
.card .product-image {
height: 300px;
}
.container {
margin-top: 4px;
margin-bottom: 4px;
}
.prod_trov {
font-style: italic;
color: grey;
}
.fixed-group {
position: fixed;
top: 0;
left: 0;
width: 100%;
background-color: #ffffff;
/* Customize the background color as needed */
z-index: 1000;
/* Adjust the z-index to ensure it's above other elements */
transition: all 1s ease;
}
// Underline like a href
.category {
color: darkblue;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
line-height: 19px;
cursor: pointer;
}
.category_sel {
color: white !important;
background: #5c8ef4 !important;
padding: 2px;
}
.category-title{
font-weight: bold;
font-size: 1.1rem;
margin-bottom: 0.5rem;
margin-top: 0.5rem;
color: black;
text-align: center;
}
.fixed-width {
width: var(--width) !important; /* Usa una variabile CSS */
}
.fixed-height {
height: var(--height) !important; /* Usa una variabile CSS */
}
.break {
flex-basis: 100%;
height: 0;
}
.book-title {
font-family: 'DINPro-CondensedBold', sans-serif;
color: $colore_titolo_libro;
text-transform: uppercase;
margin-top: calc(5 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalog) * 1px);
line-height: 100%;
}
.book-author {
font-family: 'DIN-Pro-Condensed-Regular', sans-serif;
font-size: calc(18 * var(--scalecatalog) * 1px);
}
.book-descr {
font-family: 'DIN-Pro-Condensed-Bold-Italic', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
}
.book-details {
font-family: 'DIN-Pro-Condensed-Regular', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(13 * var(--scalecatalog) * 1px);
text-align: left !important;
}
.book-descr-estesa {
font-family: 'AGaramondPro-Regular', sans-serif;
font-size: calc(15 * var(--scalecatalog) * 1px);
text-align: justify;
word-wrap: break-word;
}
.book-link{
font-style: italic;
font-size: calc(14 * var(--scalecatalog) * 1px);
}
.book-novita {
font-size: calc(20 * var(--scalecatalog) * 1px);
}
.book-text-up {
font-family: 'DINPro', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalog) * 1px);
}
.book-text-down {
font-family: 'DINPro', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
}

View File

@@ -45,7 +45,7 @@
<div
v-if="myproduct?._id"
class="row justify-center"
style="height: 400px; text-align: center;"
style="text-align: center;"
>
<CContainerCatalogoCard
:id="myproduct._id"
@@ -68,5 +68,5 @@
<script lang="ts" src="./CSearchProduct.ts"></script>
<style lang="scss">
@import './CSearchProduct.scss';
@import '../../views/ecommerce/catalogo/catalogo.scss';
</style>

View File

@@ -121,7 +121,7 @@ export default defineComponent({
watch(() => tipoConto.value, (newval, oldval) => {
if (tipoConto.value === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
if (tipoConto.value === shared_consts.AccountType.CONTO_DI_GRUPPO) {
if (arrGroupsList.value.length >= 1)
from_groupname.value = arrGroupsList.value[0].value
}
@@ -176,7 +176,7 @@ export default defineComponent({
if (tipoConto.value === shared_consts.AccountType.USER) {
accountloaded.value = userStore.getAccountByCircuitId(circuitloaded.value._id)
} else if (tipoConto.value === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (tipoConto.value === shared_consts.AccountType.CONTO_DI_GRUPPO) {
groupSel.value = userStore.my.profile.manage_mygroups.find((group: IMyGroup) => from_groupname.value === group.groupname)
accountloaded.value = groupSel.value ? groupSel.value.account : null
@@ -206,7 +206,7 @@ export default defineComponent({
arrTypesAccounts.value.push(
{
label: t('circuit.conticollettivi'),
value: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
value: shared_consts.AccountType.CONTO_DI_GRUPPO,
})
}
@@ -268,7 +268,7 @@ export default defineComponent({
},
]
tipoConto.value = tools.getCookie(tools.COOK_TIPOCONTO, shared_consts.AccountType.USER, true)
let salvatoprec = tools.getCookie(tools.COOK_TIPOCONTO, -2, true)
// ....
if (props.to_user) {
@@ -296,6 +296,16 @@ export default defineComponent({
await aggiorna()
// Se quello scelto c'è ancora sulla lista, allora lo imposto
if (arrTypesAccounts.value.findIndex((rec: any) => rec.value === salvatoprec) >= 0) {
tipoConto.value = salvatoprec
} else {
tipoConto.value = shared_consts.AccountType.USER
}
// tipoConto.value = tools.getCookie(tools.COOK_TIPOCONTO, shared_consts.AccountType.USER, true)
showpage.value = true
}
@@ -365,7 +375,7 @@ export default defineComponent({
myrecsendcoin.groupdest = props.to_group ? props.to_group.groupname : ''
myrecsendcoin.contoComDest = props.to_contocom
myrecsendcoin.grouporig = tipoConto.value === shared_consts.AccountType.COLLECTIVE_ACCOUNT ? from_groupname.value : ''
myrecsendcoin.grouporig = tipoConto.value === shared_consts.AccountType.CONTO_DI_GRUPPO ? from_groupname.value : ''
myrecsendcoin.contoComOrig = tipoConto.value === shared_consts.AccountType.COMMUNITY_ACCOUNT ? from_contocom.value : ''
myrecsendcoin.dest = props.to_user ? props.to_user.username : ''
@@ -393,10 +403,10 @@ export default defineComponent({
props.to_user &&
from_username.value === props.to_user.username) ||
(tipoConto.value ===
shared_consts.AccountType.COLLECTIVE_ACCOUNT &&
shared_consts.AccountType.CONTO_DI_GRUPPO &&
!from_groupname.value) ||
(tipoConto.value ===
shared_consts.AccountType.COLLECTIVE_ACCOUNT &&
shared_consts.AccountType.CONTO_DI_GRUPPO &&
props.to_group &&
from_groupname.value &&
props.to_group.groupname === from_groupname.value) ||

View File

@@ -85,7 +85,7 @@
</div>
<div
v-if="
tipoConto === shared_consts.AccountType.COLLECTIVE_ACCOUNT
tipoConto === shared_consts.AccountType.CONTO_DI_GRUPPO
"
>
<q-select

View File

@@ -88,7 +88,7 @@ export default defineComponent({
},
{
label: t('circuit.conticollettivi'),
value: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
value: shared_consts.AccountType.CONTO_DI_GRUPPO,
}
])

View File

@@ -52,7 +52,7 @@ export default defineComponent({
if (from) {
if (mov.tipocontofrom === shared_consts.AccountType.USER) {
link = `/my/` + mov.userfrom.username
} else if (mov.tipocontofrom === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (mov.tipocontofrom === shared_consts.AccountType.CONTO_DI_GRUPPO) {
link = tools.getPathByGroup(mov.groupfrom)
} else if (mov.tipocontofrom === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
link = '' // mov.contocomfrom.name
@@ -60,7 +60,7 @@ export default defineComponent({
} else {
if (mov.tipocontoto === shared_consts.AccountType.USER) {
link = `/my/` + mov.userto.username
} else if (mov.tipocontoto === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (mov.tipocontoto === shared_consts.AccountType.CONTO_DI_GRUPPO) {
link = tools.getPathByGroup(mov.groupto)
} else if (mov.tipocontoto === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
link = ''

View File

@@ -1,22 +1,26 @@
<template>
<q-inner-loading id="spinner" :showing="loading">
<q-spinner-tail color="primary" size="4em"> </q-spinner-tail>
</q-inner-loading>
<div v-if="options">
<div class="text-center text-bold text-h6 text-blue">
Tabella: {{ options.nameTable }}<br>
</div>
<div class="text-center text-h7">
<q-inner-loading
id="spinner"
:showing="loading"
>
<q-spinner-tail
color="primary"
size="4em"
>
</q-spinner-tail>
</q-inner-loading>
<div v-if="loading" class="q-ma-lg q-pa-lg"></div>
<!--<div class="text-center text-h7">
Query: {{ options.where }}<br>
</div>
<br><br>
<div v-html="risultatoHTML">
</div>
<br><br>-->
<div v-html="risultatoHTML"></div>
</div>
</template>
<script lang="ts" src="./CViewTable.ts">
</script>
<script lang="ts" src="./CViewTable.ts"></script>
<style lang="scss" scoped>
@import './CViewTable.scss';
</style>

View File

@@ -1,5 +1,6 @@
@use "sass:color";
@import 'variables.scss';
body {
font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";

Binary file not shown.

BIN
src/css/fonts/font_maps.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -187,63 +187,64 @@ $contentSize: 170px;
@font-face {
font-family: 'AGaramondPro-Regular';
src: url('/src/assets/fonts/AGaramondPro-Regular.otf') format('opentype');
src: url('/src/css/fonts/AGaramondPro-Regular.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DINPro-BoldItalic';
src: url('/src/assets/fonts/DINPro-BoldItalic.otf') format('opentype');
font-family: 'DINPro-Bold-Italic';
src: url('/src/css/fonts/DINPro-BoldItalic.otf') format('opentype');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: 'DINPro-CondBlack';
src: url('/src/assets/fonts/DINPro-CondBlack.otf') format('opentype');
src: url('/src/css/fonts/DINPro-CondBlack.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DINPro-CondensedBold';
src: url('/src/assets/fonts/DINPro-CondensedBold.otf') format('opentype');
font-family: 'DINPro-Condensed-Bold';
src: url('/src/css/fonts/DINPro-Condensed-Bold.otf') format('opentype');
font-weight: bold;
font-style: normal;
}
@font-face {
font-family: 'DIN-Pro-Condensed-Bold-Italic';
src: url('/src/assets/fonts/DIN-Pro-Condensed-Bold-Italic.otf') format('opentype');
font-family: 'DINPro-Condensed-Bold-Italic';
src: url('/src/css/fonts/DINPro-Condensed-Bold-Italic.otf') format('opentype');
font-weight: bold;
font-style: italic;
}
@font-face {
font-family: 'DIN-Pro-Condensed-Regular';
src: url('/src/assets/fonts/DIN-Pro-Condensed-Regular.otf') format('opentype');
font-family: 'DINPro-Condensed-Regular';
src: url('/src/css/fonts/DINPro-Condensed-Regular.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DIN-Pro-Condensed-Medium-Italic';
src: url('/src/assets/fonts/DIN-Pro-Condensed-Medium-Italic.otf') format('opentype');
font-family: 'DINPro-Condensed-Medium-Italic';
src: url('/src/css/fonts/DINPro-Condensed-Medium-Italic.otf') format('opentype');
font-weight: normal;
font-style: italic;
}
@font-face {
font-family: 'DINPro';
src: url('/src/assets/fonts/DINPro.otf') format('opentype');
src: url('/src/css/fonts/DINPro.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'DINPro-Medium';
src: url('/src/assets/fonts/DINPro-Medium.otf') format('opentype');
src: url('/src/css/fonts/DINPro-Medium.otf') format('opentype');
font-weight: normal;
font-style: normal;
}

View File

@@ -1,9 +1,9 @@
const msg_website_it = {
ws: {
sitename: 'Riso',
siteshortname: 'RISO',
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.',
keywords: 'riso, piattaforma di scambio, rete italiana scambio orizzontale, riso app, riso piattaforma, scambio e baratto, momenta RIS',
sitename: 'Gruppo Macro',
siteshortname: 'Gruppo Macro',
description: '',
keywords: '',
},
hours: {
descr: 'Descrizione',
@@ -16,29 +16,20 @@ const msg_website_it = {
pages: {
home: 'Home',
profile: 'Profilo',
install_site: 'Installa Sito',
profile2: 'ProfiloU',
mypage2: 'mypage2',
myservice2: 'myservice2',
myhosps2: 'myhosps2',
mygood2: 'mygood2',
catalogo: 'Catalogo',
fundraising: 'Sostieni il Progetto',
notifs: 'Configura le Notifiche',
unsubscribe: 'Disiscriviti',
unsubscribe_user: 'Disiscriviti User',
test: 'Test',
projects: 'Progetti',
report: 'Report Ore',
producer: 'Produttore',
orderinfo: 'Ordini Effettuati',
products: 'Prodotti',
productslist: 'Lista Prodotti',
collabora: 'Collabora',
storehouses: 'Magazzino',
departments: 'Uffici',
orders: 'Ordini Ricevuti',
orders2: 'Ordini Ricevuti',
sharewithus: 'Condividi con Noi',
checkout: 'Carrello',
payment: 'Pagamenti',
regok: 'Registrazione Confermata',
presentazione: 'Presentazione',
presentazione2: 'Presentazione',
@@ -89,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',
@@ -121,15 +109,9 @@ const msg_website_it = {
only_residenti: 'Solo Residenti',
only_consiglio: 'Solo Consiglieri',
color: 'Colore',
mainMenu: 'Menu Principale',
subtitle: 'Sottotitolo',
lang: 'Lingua',
keywords: 'Parole Chiave',
desctiption: 'Descrizione',
heightimg: 'Altezza Immagine',
},
msg: {
myAppName: 'Riso',
myAppName: 'Più che Buono',
myAppDescription: 'Il primo Vero Social Libero, Equo e Solidale, dove Vive Consapevolezza e Aiuto Comunitario. Gratuito',
underconstruction: 'App in costruzione...',
myDescriz: '',

View File

@@ -1,6 +1,6 @@
/* RISO APP
/* GRUPPOMACRO APP
*/
import type {
import {
IListRoutes,
ILang,
IPreloadImages,
@@ -68,39 +68,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false,
},
{
active: true,
order: 12,
path: '/goods',
materialIcon: 'fas fa-tshirt',
name: 'mypages.goods',
component: () => import('@src/root/goods/goods.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: true,
order: 15,
path: '/services',
materialIcon: 'fas fa-house-user',
name: 'mypages.services',
component: () => import('@src/root/services/services.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: true,
order: 15,
path: '/activities',
materialIcon: 'fas fa-house-user',
name: 'mypages.activities',
component: () => import('@src/root/activities/activities.vue'),
meta: { requiresAuth: true },
inmenu: false,
infooter: false,
},
{
active: true,
order: 15,
@@ -112,17 +79,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false,
},
{
active: true,
order: 15,
path: '/hosps',
materialIcon: 'fas fa-bed',
name: 'mypages.hosp',
component: () => import('@src/root/hosp/hosp.vue'),
meta: { requiresAuth: true },
inmenu: true,
infooter: true,
},
{
active: site.confpages && site.confpages.enableCircuits,
order: 16,
@@ -135,7 +91,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true,
},
{
active: true,
active: site.confpages && site.confpages.enableEvents,
order: 20,
path: '/events',
materialIcon: 'fas fa-bullhorn',
@@ -157,7 +113,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false,
},
{
active: true,
active: site.confpages && site.confpages.showProfile,
order: 120,
path: '/myprofile',
materialIcon: 'fas fa-user',
@@ -168,7 +124,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: true,
},
{
active: true,
active: site.confpages && site.confpages.showProfile,
order: 120,
path: '/editprofile',
materialIcon: 'fas fa-user',
@@ -179,7 +135,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
infooter: false,
},
{
active: true,
active: site.confpages && site.confpages.showiscrittiMenu,
order: 130,
path: '/friends',
materialIcon: 'fas fa-user-friends',
@@ -274,16 +230,6 @@ function getDynamicPages(site: ISites): IListRoutes[] {
inmenu: false,
infooter: false,
},
{
active: true,
order: 150,
path: '/sostieniilprogetto',
materialIcon: 'fas fa-hand-holding-heart',
name: 'pages.fundraising',
component: () => import('@src/root/fundraising/fundraising.vue'),
inmenu: false,
infooter: false,
},
{
active: true,
order: 80,
@@ -302,7 +248,7 @@ function getDynamicPages(site: ISites): IListRoutes[] {
export function firstimagehome() {
const img = 'statics/images/background.jpg'
let img = 'statics/images/background.jpg'
return img
}

View File

@@ -92,7 +92,8 @@ export const Api = {
const refrTok = localStorage.getItem(toolsext.localStorage.refreshToken);
if (!refrTok || refrTok === 'undefined') {
throw new Error('Refresh token non disponibile');
//throw new Error('Refresh token non disponibile');
return false;
}
const response = await sendRequest('/users/newtok', 'POST', { refreshToken: refrTok });
@@ -145,14 +146,16 @@ export const Api = {
} catch (err2) {
console.error('Errore durante il refresh token:', err2);
if (err2?.code === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
let mystatus = err2?.code || err2?.status
if (mystatus === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN || mystatus === toolsext.ERR_RETRY_LOGIN) {
userStore.setServerCode(toolsext.ERR_AUTHENTICATION);
userStore.setAuth('', '');
throw { status: err2.code };
throw { status: toolsext.ERR_RETRY_LOGIN };
}
// Gestione di altri errori critici
throw err2;
throw err2 || {status: serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN} ;
}
} else if (status === serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN) {
userStore.setAuth('', '');

View File

@@ -516,4 +516,9 @@ export const costanti = {
TESTO_BORDATO: 5,
},
CATALOGHI: {
PAG_INTRO_DEFAULT: 'introduttiva_default.png',
PAG_SFONDO_DEFAULT: 'sfondo_default.png',
}
}

View File

@@ -965,7 +965,7 @@ export const colmyMovement = [
link: '/grp/groupfrom.groupname',
noshowlabel: true,
extrafield: 'movement.fromCColl',
tipoconto: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
tipoconto: shared_consts.AccountType.CONTO_DI_GRUPPO,
}),
AddCol({
name: 'contocomfrom.path',
@@ -1005,7 +1005,7 @@ export const colmyMovement = [
link: '/grp/groupto.groupname',
extrafield: 'movement.toCColl',
noshowlabel: true,
tipoconto: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
tipoconto: shared_consts.AccountType.CONTO_DI_GRUPPO,
}),
AddCol({
name: 'contocomfto.path',
@@ -1052,7 +1052,7 @@ export const colmyMovementTable = [
tipovisu: costanti.TipoVisu.LINK,
fieldtype: costanti.FieldType.username_chip,
link: '/grp/groupfrom.groupname',
tipoconto: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
tipoconto: shared_consts.AccountType.CONTO_DI_GRUPPO,
required: true,
}),
AddCol({
@@ -1089,7 +1089,7 @@ export const colmyMovementTable = [
tipovisu: costanti.TipoVisu.LINK,
fieldtype: costanti.FieldType.username_chip,
link: '/grp/groupto.groupname',
tipoconto: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
tipoconto: shared_consts.AccountType.CONTO_DI_GRUPPO,
required: true,
}),
AddCol({
@@ -4047,7 +4047,7 @@ export const colmyUserCircuit = [
fieldtype: costanti.FieldType.username_chip,
link: '/circuit/groupname',
noshowlabel: true,
tipoconto: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
tipoconto: shared_consts.AccountType.CONTO_DI_GRUPPO,
}),
AddCol({ name: 'deperibile', label_trans: 'account.deperibile', fieldtype: costanti.FieldType.boolean }),
@@ -4093,7 +4093,7 @@ export const colTableNotifCoins = [
fieldtype: costanti.FieldType.username_chip,
link: '/grp/extrarec.groupdest',
noshowlabel: true,
tipoconto: shared_consts.AccountType.COLLECTIVE_ACCOUNT,
tipoconto: shared_consts.AccountType.CONTO_DI_GRUPPO,
}),
AddCol({
name: 'extrarec.contoComDest',

View File

@@ -9395,7 +9395,7 @@ export const tools = {
}
if (mov.groupfrom) {
mystrfrom += mov.groupfrom.groupname + ' '
tipocontofrom = shared_consts.AccountType.COLLECTIVE_ACCOUNT
tipocontofrom = shared_consts.AccountType.CONTO_DI_GRUPPO
}
if (mov.userfrom) {
mystrfrom += mov.userfrom.username + ' '
@@ -9407,7 +9407,7 @@ export const tools = {
}
if (mov.groupto) {
mystrto += mov.groupto.groupname + ' '
tipocontoto = shared_consts.AccountType.COLLECTIVE_ACCOUNT
tipocontoto = shared_consts.AccountType.CONTO_DI_GRUPPO
}
if (mov.userto) {
mystrto += mov.userto.username + ' '

View File

@@ -152,13 +152,18 @@ export const useProducts = defineStore('Products', {
getCatProdsStrByCatProds: (state: IProductsState) => (catProds: ICatProd[]): string => {
let mystr = ''
for (const catprod of catProds) {
const myarrcat = state.catprods.find((rec: ICatProd) => rec._id === catprod)
let myarrcat = null
if (tools.isObject(catprod)) {
myarrcat = catprod
} else {
myarrcat = state.catprods.find((rec: ICatProd) => rec._id === catprod)
}
if (myarrcat) {
if (mystr)
mystr = ' - '
mystr += myarrcat.name
}
}
}
return mystr
},
@@ -1427,6 +1432,8 @@ export const useProducts = defineStore('Products', {
const misure = myproduct.arrvariazioni![0].misure || ''
const formato = myproduct.arrvariazioni![0].formato || ''
const pagine = myproduct.arrvariazioni![0].pagine || ''
const qta = myproduct.arrvariazioni![0].quantita || ''
const isbn = myproduct.productInfo.code || ''
const scale = optcatalogo.printable ? optcatalogo.areadistampa?.scale : 1
// Crea una mappa di sostituzioni
@@ -1442,7 +1449,9 @@ export const useProducts = defineStore('Products', {
'{sottocategoria}': (sottocategoria) || '',
'{descr_categoria}': (descr_categoria) || '',
'{pagine}': (pagine) || '',
'{isbn}': (isbn) || '',
'{misure}': misure || '',
'{argomento}': categoria || '',
'{date_pub}': date_pub || '',
'{ranking_globale}': ranking_globale || '',
'{ranking}': ranking || '',
@@ -1455,6 +1464,7 @@ export const useProducts = defineStore('Products', {
'{descrizione_completa_macro}': descrizione_completa_macro || '',
'{descrizione_breve_macro}': descrizione_breve_macro || '',
'{link_macro}': link_macro || '',
'{qta}': qta || '',
};
// Esegue le sostituzioni

View File

@@ -441,7 +441,7 @@ export const useUserStore = defineStore('UserStore', {
let img = ''
if (tipoconto === shared_consts.AccountType.USER) {
img = this.getImgByUsername(value)
} else if (tipoconto === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (tipoconto === shared_consts.AccountType.CONTO_DI_GRUPPO) {
img = this.getImgByGroupname(value)
} else if (tipoconto === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
img = this.getImgByCircuitpath(value)
@@ -469,7 +469,7 @@ export const useUserStore = defineStore('UserStore', {
tipoconto = col.tipoconto
}
if (tipoconto === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
if (tipoconto === shared_consts.AccountType.CONTO_DI_GRUPPO) {
img = this.getImgByGroupname(myrec.groupname)
} else if (tipoconto === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
img = this.getImgByCircuitpath(myrec.path)
@@ -496,7 +496,7 @@ export const useUserStore = defineStore('UserStore', {
if (!reale)
img = '/images/noimg-user.svg'
if (tipoconto === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
if (tipoconto === shared_consts.AccountType.CONTO_DI_GRUPPO) {
img = this.getImgByGroup(from ? mov.groupfrom : mov.groupto)
// img = this.getImgByGroupname(from ? mov.groupfrom.groupname : mov.groupto.groupname)
} else if (tipoconto === shared_consts.AccountType.COMMUNITY_ACCOUNT) {
@@ -802,7 +802,7 @@ export const useUserStore = defineStore('UserStore', {
if (col && col.field === 'extrarec' && !name) {
name = myrec.dest
}
} else if (tipoconto === shared_consts.AccountType.COLLECTIVE_ACCOUNT) {
} else if (tipoconto === shared_consts.AccountType.CONTO_DI_GRUPPO) {
if (tools.existProp(myrec, 'descr'))
return myrec.descr
else if (tools.existProp(myrec, 'groupname'))

View File

@@ -71,27 +71,29 @@ body {
}
.book-title {
font-family: 'DINPro-CondensedBold', sans-serif;
font-family: 'DINPro-Condensed-Bold', sans-serif;
color: $colore_titolo_libro;
text-transform: uppercase;
margin-top: calc(5 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalog) * 1px);
font-size: calc(18 * var(--scalecatalog) * 1px);
line-height: 100%;
font-weight: bold;
}
.book-author {
font-family: 'DIN-Pro-Condensed-Regular', sans-serif;
font-size: calc(18 * var(--scalecatalog) * 1px);
font-family: 'DINPro-Condensed-Regular', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
font-style: italic;
}
.book-descr {
font-family: 'DIN-Pro-Condensed-Bold-Italic', sans-serif;
font-family: 'DINPro-Condensed-Bold-Italic', sans-serif;
font-size: calc(16 * var(--scalecatalog) * 1px);
}
.book-details {
font-family: 'DIN-Pro-Condensed-Regular', sans-serif;
font-family: 'DINPro-Condensed-Regular', sans-serif;
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(13 * var(--scalecatalog) * 1px);
text-align: left !important;

View File

@@ -266,7 +266,7 @@ export default defineComponent({
const trovatocatalogo = getCatalogoByMyPage.value
let imagefile = ''
let fit = ''
let fit = 'contain'
if (trovatocatalogo && scheda.isPagIntro) {
const recimg = trovatocatalogo.img_intro
@@ -284,7 +284,7 @@ export default defineComponent({
const trovatocatalogo = getCatalogoByMyPage.value
let imagefile = ''
let fit = ''
let fit = 'contain'
if (trovatocatalogo) {
// Cerca prima se c'è un Immagine Introduttiva
@@ -301,6 +301,15 @@ export default defineComponent({
fit = recimg.fit! || 'contain'
imagefile = imagefile ? `url(${tools.getDirUpload() + shared_consts.getDirectoryByTable(shared_consts.TABLES_CATALOG) + '/' + trovatocatalogo._id + '/' + imagefile})` : ''
}
}
if (!imagefile) {
let myimg = costanti.CATALOGHI.PAG_SFONDO_DEFAULT
if (scheda.isPagIntro) {
myimg = costanti.CATALOGHI.PAG_INTRO_DEFAULT
}
// Se non c'è un immagine di sfondo, allora prende quella di default
imagefile = `url(${tools.getDirUpload() + shared_consts.getDirectoryByTable(shared_consts.TABLES_CATALOG) + '/' + myimg})`
}
if (!imagefile && scheda) {
@@ -366,129 +375,6 @@ export default defineComponent({
return editore
}
function calcArrProducts() {
// console.log('calcArrProducts')
let arrargomstr: any = []
// eventuali titoli specifici estratti dall'array di Prodotti Selezionati
//const searchtext = getSearchText()
const searchtext = getSearchText()
let arrprod = productStore.getProducts(cosa.value) || [];
const filtroAuthor = filter.value.author || '';
//++AddCATALOGO_FIELDS
const filtroProductTypes = optcatalogo.value.productTypes || [0]
const filtroExcludeProductTypes = optcatalogo.value.excludeproductTypes || [0]
const boolfiltroVuotoProductTypes = (filtroProductTypes.length === 0 || (filtroProductTypes.length === 1 && (filtroProductTypes[0] === 0)))
const boolfiltroVuotoExcludeProductTypes = filtroExcludeProductTypes.length === 0
const editore = getEditoreDaFiltrare(optcatalogo.value.editore)
const filtroPublishers = editore || []
const idCollane = getIdCollaneDaFiltrare(optcatalogo.value.idCollane)
const filtroCollane = idCollane || []
const boolfiltroVuotoEditore = (filtroPublishers.length === 0)
const boolfiltroVuotoCollane = (filtroCollane.length === 0)
//console.log('filtroVersione', filtroProductTypes)
const catstr = ''
if (optcatalogo.value.argomenti && optcatalogo.value.argomenti.length > 0) {
// ha la priorità questo scelto sul catalogo
arrargomstr = getArgomentiDaFiltrare(optcatalogo.value.argomenti)
} else {
arrargomstr = getArgomentiDaFiltrare(cat.value ? [cat.value] : [])
// catstr = cat.value || ''
}
const filtroArgomenti = arrargomstr || []
const boolfiltroVuotoArgomenti = (filtroArgomenti.length === 0)
let gasselstr = ''
if (cosa.value === shared_consts.PROD.GAS) {
gasselstr = idGasSel.value || '';
}
let lowerSearchText = (searchtext || '').toLowerCase().trim();
lowerSearchText = lowerSearchText.replace(/[-@:=]/g, '');
if ((!lowerSearchText || (lowerSearchText && lowerSearchText.length < 2)) && !catstr && boolfiltroVuotoArgomenti && boolfiltroVuotoProductTypes && boolfiltroVuotoExcludeProductTypes && boolfiltroVuotoCollane && boolfiltroVuotoEditore && !filtroAuthor && (!gasselstr && (cosa.value !== shared_consts.PROD.GAS))) {
} else {
arrprod = arrprod.filter((product: IProduct) => {
if (product && product.productInfo) {
const lowerName = (product.productInfo.name || '').toLowerCase();
let hasCategoria = false
let hasArgomentiCat = true
if (arrargomstr && arrargomstr.length > 0) {
hasArgomentiCat = (product.productInfo.idCatProds || []).some(idCat => arrargomstr.includes(idCat))
hasCategoria = true
} else {
hasCategoria = (!catstr || (catstr && (product.productInfo.idCatProds || []).includes(catstr))) ? true : false
}
const hasAuthor = !filtroAuthor || (filtroAuthor && (product.productInfo.idAuthors || []).includes(filtroAuthor));
let hasProductTypes = true
let hasPublished = true
let hasCollana = true
let hasExcludeProductTypes = false
//++AddCATALOGO_FIELDS
if (optcatalogo.value && !boolfiltroVuotoProductTypes) {
// check if productInfo.productTypes array includes some item in optcatalogo.value.ProductTypes array
hasProductTypes = !optcatalogo.value.productTypes || (optcatalogo.value.productTypes && (product.productInfo.productTypes || []).some((item: any) => optcatalogo.value.productTypes!.includes(item)))
}
if (optcatalogo.value && !boolfiltroVuotoEditore) {
hasPublished = !editore || (editore && editore.includes(product.productInfo.idPublisher))
}
if (optcatalogo.value && !boolfiltroVuotoCollane) {
hasCollana = !idCollane || (idCollane && idCollane.includes(product.productInfo.idCollana))
}
if (optcatalogo.value && !boolfiltroVuotoExcludeProductTypes) {
// check if productInfo.productTypes array exclude some item in optcatalogo.value.ProductTypes array
hasExcludeProductTypes = !optcatalogo.value.excludeproductTypes || (optcatalogo.value.excludeproductTypes && (product.productInfo.productTypes || []).every((item: any) => optcatalogo.value.excludeproductTypes!.includes(item)))
}
let productgassel = true
if (gasselstr || (cosa.value === shared_consts.PROD.GAS)) {
productgassel = (product.idGasordine === gasselstr)
}
// Use a regular expression to match whole words
const codeMatch = new RegExp(`\\b${lowerSearchText}\\b`, 'i');
// let nameMatch = new RegExp(`\\b(?=.*\\b${lowerSearchText.split(/\s+/).map(word => `(${word})\\b`).join('.*\\b')}\\b)`, 'i');
// Check if all words in lowerSearchText are present in lowerName
const allWordsPresent = lowerSearchText.split(/\s+/).every(word => new RegExp(`\\b${word}\\b`, 'i').test(lowerName));
return (codeMatch.test(product.productInfo.code || '') || allWordsPresent) && hasCategoria && hasCollana && hasArgomentiCat && hasAuthor && productgassel && hasProductTypes && hasPublished && !hasExcludeProductTypes;
} else {
console.error('product or product.productInfo is null');
return false;
}
});
}
arrprod = getProductsSorted(arrprod, filter.value.sort_field, filter.value.sort_dir);
arrProducts.value = arrprod
populateDataWithlinkIdTemplate()
generatearrProdToViewSorted()
loaddata()
refreshpage.value = false
}
function sovrascriviSchedaFromTemplate(idTemplate: string, origScheda: ISchedaSingola) {
if (!optcatalogo.value)
@@ -539,110 +425,176 @@ export default defineComponent({
}
function getProductsFilteredByScheda(scheda: IMyScheda): IProduct[] {
function filterProducts(
products: IProduct[],
searchtext: string | string[],
filtroAuthor: string,
filtroProductTypes: number[],
filtroExcludeProductTypes: number[],
editore: string[],
idCollane: string[],
arrargomstr: any[],
catstr: string,
gasselstr: string,
cosaValue: any,
sortField?: string,
sortDir?: string
): IProduct[] {
const lowerSearchTexts = Array.isArray(searchtext)
? searchtext.map((text: string) => text.toLowerCase().trim().replace(/[-@:=]/g, ''))
: [searchtext.toLowerCase().trim().replace(/[-@:=]/g, '')];
const searchtext = scheda.arrProdottiSpeciali
const boolfiltroVuotoProductTypes =
filtroProductTypes.length === 0 || (filtroProductTypes.length === 1 && filtroProductTypes[0] === 0);
const boolfiltroVuotoExcludeProductTypes = filtroExcludeProductTypes.length === 0;
const boolfiltroVuotoEditore = editore.length === 0;
const boolfiltroVuotoCollane = idCollane.length === 0;
const boolfiltroVuotoArgomenti = arrargomstr.length === 0;
let arrargomstr: any = []
return products
.filter((product: IProduct) => {
if (!product || !product.productInfo) {
console.error('product or product.productInfo is null');
return false;
}
let arrprod = productStore.getProducts(cosa.value) || [];
const filtroAuthor = filter.value.author || '';
const filtroProductTypes = scheda.productTypes || [0]
const filtroExcludeProductTypes = scheda.excludeproductTypes || [0]
const boolfiltroVuotoProductTypes = (filtroProductTypes.length === 0 || (filtroProductTypes.length === 1 && (filtroProductTypes[0] === 0)))
const boolfiltroVuotoExcludeProductTypes = filtroExcludeProductTypes.length === 0
const editore = getEditoreDaFiltrare(scheda.editore)
const filtroPublishers = editore || []
const idCollane = getIdCollaneDaFiltrare(scheda.idCollane)
const filtroCollane = idCollane || []
const boolfiltroVuotoEditore = (filtroPublishers.length === 0)
const boolfiltroVuotoCollane = (filtroCollane.length === 0)
//console.log('filtroVersione', filtroProductTypes)
let catstr = ''
if (optcatalogo.value.argomenti && optcatalogo.value.argomenti.length > 0) {
// ha la priorità questo scelto sul catalogo
arrargomstr = getArgomentiDaFiltrare(optcatalogo.value.argomenti)
} else {
catstr = cat.value || ''
}
let gasselstr = ''
if (cosa.value === shared_consts.PROD.GAS) {
gasselstr = idGasSel.value || '';
}
const lowerSearchTexts = (searchtext || []).map((text: string) =>
text.toLowerCase().trim().replace(/[-@:=]/g, '')
)
// Remove the condition that skips filtering if search text is too short
// Now it will work with multiple search terms
arrprod = arrprod.filter((product: IProduct) => {
if (product && product.productInfo) {
const lowerName = (product.productInfo.name || '').toLowerCase();
const lowerCode = (product.productInfo.code || '').toLowerCase();
let hasCategoria = false
let hasArgomentiCat = true
// Filtri per argomenti e categorie
let hasCategoria = false;
let hasArgomentiCat = true;
if (arrargomstr && arrargomstr.length > 0) {
hasArgomentiCat = (product.productInfo.idCatProds || []).some(idCat => arrargomstr.includes(idCat))
hasCategoria = true
hasArgomentiCat = (product.productInfo.idCatProds || []).some((idCat: any) => arrargomstr.includes(idCat));
hasCategoria = true;
} else {
hasCategoria = (!catstr || (catstr && (product.productInfo.idCatProds || []).includes(catstr))) ? true : false
hasCategoria = !catstr || (catstr && (product.productInfo.idCatProds || []).includes(catstr));
}
const hasAuthor = !filtroAuthor || (filtroAuthor && (product.productInfo.idAuthors || []).includes(filtroAuthor));
// Filtri per autore
const hasAuthor = !filtroAuthor || (product.productInfo.idAuthors || []).includes(filtroAuthor);
// Check if ANY search term matches the product name or code
const searchMatch = lowerSearchTexts.length === 0 || lowerSearchTexts.some((searchTerm: any) => {
// Check if the entire search term is a whole word in name or code
// Filtri per tipi di prodotto
const hasProductTypes = boolfiltroVuotoProductTypes
? true
: (product.productInfo.productTypes || []).some((item: any) => filtroProductTypes.includes(item));
// Filtri per esclusione di tipi di prodotto
const hasExcludeProductTypes = boolfiltroVuotoExcludeProductTypes
? false
: (product.productInfo.productTypes || []).every((item: any) => filtroExcludeProductTypes.includes(item));
// Filtri per editore
const hasPublished = boolfiltroVuotoEditore
? true
: editore.includes(product.productInfo.idPublisher);
// Filtri per collana
const hasCollana = boolfiltroVuotoCollane
? true
: idCollane.includes(product.productInfo.idCollana);
// Filtri per GAS
const productgassel = !gasselstr || (cosaValue === shared_consts.PROD.GAS && product.idGasordine === gasselstr);
// Filtri per testo di ricerca
const searchMatch = lowerSearchTexts.length === 0 || lowerSearchTexts.some((searchTerm: string) => {
const codeMatch = new RegExp(`\\b${searchTerm}\\b`, 'i').test(lowerCode);
// Check if all words in the search term are present in the name
const allWordsPresent = searchTerm.split(/\s+/).every((word: string) =>
new RegExp(`\\b${word}\\b`, 'i').test(lowerName)
);
return codeMatch || allWordsPresent;
});
let hasProductTypes = true
let hasPublished = true
let hasCollane = true
let hasExcludeProductTypes = false
return (
searchMatch &&
hasAuthor &&
productgassel &&
hasProductTypes &&
(
hasPublished ||
hasCollana ||
hasCategoria ||
hasArgomentiCat
)
&&
!hasExcludeProductTypes
);
})
.sort((a, b) => getProductsSorted([a, b], sortField, sortDir)[0] === a ? -1 : 1);
}
if (!boolfiltroVuotoProductTypes) {
// check if productInfo.productTypes array includes some item in scheda.ProductTypes array
hasProductTypes = !scheda.productTypes || (scheda.productTypes && (product.productInfo.productTypes || []).some((item: any) => scheda.productTypes!.includes(item)))
}
if (!boolfiltroVuotoEditore) {
hasPublished = !editore || (editore && editore.includes(product.productInfo.idPublisher))
}
function calcArrProducts() {
const searchtext = getSearchText();
let arrprod = productStore.getProducts(cosa.value) || [];
const filtroAuthor = filter.value.author || '';
const filtroProductTypes = optcatalogo.value.productTypes || [0];
const filtroExcludeProductTypes = optcatalogo.value.excludeproductTypes || [0];
const editore = getEditoreDaFiltrare(optcatalogo.value.editore);
const filtroPublishers = editore || [];
const idCollane = getIdCollaneDaFiltrare(optcatalogo.value.idCollane);
const filtroCollane = idCollane || [];
const arrargomstr = optcatalogo.value.argomenti && optcatalogo.value.argomenti.length > 0
? getArgomentiDaFiltrare(optcatalogo.value.argomenti)
: getArgomentiDaFiltrare(cat.value ? [cat.value] : []);
const catstr = cat.value || '';
const gasselstr = cosa.value === shared_consts.PROD.GAS ? idGasSel.value || '' : '';
if (optcatalogo.value && !boolfiltroVuotoCollane) {
hasCollane = !idCollane || (idCollane && idCollane.includes(product.productInfo.idCollana))
}
arrprod = filterProducts(
arrprod,
searchtext,
filtroAuthor,
filtroProductTypes,
filtroExcludeProductTypes,
filtroPublishers,
filtroCollane,
arrargomstr,
catstr,
gasselstr,
cosa.value,
filter.value.sort_field,
filter.value.sort_dir
);
if (!boolfiltroVuotoExcludeProductTypes) {
// check if productInfo.productTypes array exclude some item in scheda.ProductTypes array
hasExcludeProductTypes = !scheda.excludeproductTypes || (scheda.excludeproductTypes && (product.productInfo.productTypes || []).every((item: any) => scheda.excludeproductTypes!.includes(item)))
}
arrProducts.value = arrprod;
populateDataWithlinkIdTemplate();
generatearrProdToViewSorted();
loaddata();
refreshpage.value = false;
}
return searchMatch && hasCategoria && hasArgomentiCat && hasAuthor && hasProductTypes && hasPublished && hasCollane && !hasExcludeProductTypes;
} else {
console.error('product or product.productInfo is null');
return false;
}
})
function getProductsFilteredByScheda(scheda: IMyScheda): IProduct[] {
let arrprod = productStore.getProducts(cosa.value) || [];
const filtroAuthor = filter.value.author || '';
const filtroProductTypes = scheda.productTypes || [0];
const filtroExcludeProductTypes = scheda.excludeproductTypes || [0];
const editore = getEditoreDaFiltrare(scheda.editore);
const filtroPublishers = editore || [];
const idCollane = getIdCollaneDaFiltrare(scheda.idCollane);
const filtroCollane = idCollane || [];
const arrargomstr = optcatalogo.value.argomenti && optcatalogo.value.argomenti.length > 0
? getArgomentiDaFiltrare(optcatalogo.value.argomenti)
: [];
const catstr = cat.value || '';
const gasselstr = cosa.value === shared_consts.PROD.GAS ? idGasSel.value || '' : '';
arrprod = getProductsSorted(arrprod, scheda?.sort_field, scheda?.sort_dir);
return arrprod
arrprod = filterProducts(
arrprod,
scheda.arrProdottiSpeciali || [],
filtroAuthor,
filtroProductTypes,
filtroExcludeProductTypes,
filtroPublishers,
filtroCollane,
arrargomstr,
catstr,
gasselstr,
cosa.value,
scheda?.sort_field,
scheda?.sort_dir
);
return arrprod;
}
function getProductsSorted(arrprod: IProduct[], sort_field: string, sort_dir: number): IProduct[] {

View File

@@ -609,6 +609,6 @@
<script lang="ts" src="./catalogo.ts">
</script>
<style lang="scss">
<style lang="scss" scoped>
@import "./catalogo.scss";
</style>