- Generazione della Raccolta dei Cataloghi (web e Stampa), e creazione del PDF Online.
- Lista Raccolta Cataloghi, aggiungi/togli catalogo.
This commit is contained in:
@@ -1,35 +1,35 @@
|
||||
import { PropType, computed, defineComponent, onMounted, ref, watch } from "vue";
|
||||
import draggable from 'vuedraggable'
|
||||
import { PropType, computed, defineComponent, onMounted, ref, watch } from 'vue';
|
||||
import draggable from 'vuedraggable';
|
||||
|
||||
import { tools } from '@tools'
|
||||
import { tools } from '@tools';
|
||||
|
||||
import { useGlobalStore } from '@src/store/globalStore'
|
||||
import { useGlobalStore } from '@src/store/globalStore';
|
||||
|
||||
import { CMyValueDb } from '@src/components/CMyValueDb'
|
||||
import { CSchedaProdotto } from '@src/components/CSchedaProdotto'
|
||||
import { CSearchProduct } from '@src/components/CSearchProduct'
|
||||
import { CMyDialog } from '@src/components/CMyDialog'
|
||||
import { CMyValueDb } from '@src/components/CMyValueDb';
|
||||
import { CSchedaProdotto } from '@src/components/CSchedaProdotto';
|
||||
import { CSearchProduct } from '@src/components/CSearchProduct';
|
||||
import { CMyDialog } from '@src/components/CMyDialog';
|
||||
|
||||
import { costanti } from '@costanti'
|
||||
import { IAuthor, ICatProd } from "app/src/model";
|
||||
|
||||
import type {
|
||||
IMyScheda,
|
||||
IOptCatalogo,
|
||||
IProduct
|
||||
} from '@src/model';
|
||||
import { shared_consts } from "app/src/common/shared_vuejs";
|
||||
import { useProducts } from "app/src/store/Products";
|
||||
import { CViewTable } from "../CViewTable";
|
||||
import { CLabel } from "../CLabel";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { costanti } from '@costanti';
|
||||
import { IAuthor, ICatProd } from 'app/src/model';
|
||||
|
||||
import type { IMyScheda, IOptCatalogo, IProduct } from '@src/model';
|
||||
import { shared_consts } from 'app/src/common/shared_vuejs';
|
||||
import { useProducts } from 'app/src/store/Products';
|
||||
import { CViewTable } from '../CViewTable';
|
||||
import { CLabel } from '../CLabel';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
export default defineComponent({
|
||||
name: "CProductTable",
|
||||
emits: ["update:lista_prodotti", "update:optcatalogo", "rigenera"],
|
||||
name: 'CProductTable',
|
||||
emits: ['update:lista_prodotti', 'update:optcatalogo', 'rigenera'],
|
||||
components: {
|
||||
draggable, CSearchProduct, CMyDialog, CMyValueDb, CViewTable, CLabel,
|
||||
draggable,
|
||||
CSearchProduct,
|
||||
CMyDialog,
|
||||
CMyValueDb,
|
||||
CViewTable,
|
||||
CLabel,
|
||||
CSchedaProdotto,
|
||||
},
|
||||
props: {
|
||||
@@ -37,6 +37,10 @@ export default defineComponent({
|
||||
type: Array,
|
||||
required: true,
|
||||
},
|
||||
table: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
optcatalogo: {
|
||||
type: Object as PropType<IOptCatalogo>,
|
||||
required: false,
|
||||
@@ -45,53 +49,52 @@ export default defineComponent({
|
||||
scheda: {
|
||||
type: Object as PropType<IMyScheda>,
|
||||
required: false,
|
||||
default: () => ({
|
||||
|
||||
}),
|
||||
default: () => ({}),
|
||||
},
|
||||
},
|
||||
setup(props, { emit }) {
|
||||
// Copia locale della lista_prodotti per manipolazione interna
|
||||
const internalProducts = ref([...props.lista_prodotti || []]);
|
||||
const internalProducts = ref([...(props.lista_prodotti || [])]);
|
||||
|
||||
const { t } = useI18n()
|
||||
const { t } = useI18n();
|
||||
|
||||
const globalStore = useGlobalStore()
|
||||
const products = useProducts()
|
||||
const globalStore = useGlobalStore();
|
||||
const products = useProducts();
|
||||
|
||||
const showProd = ref(false)
|
||||
const selProd = ref(<IProduct | null>null)
|
||||
const showProd = ref(false);
|
||||
const selProd = ref(<IProduct | null>null);
|
||||
|
||||
const cmd = ref(shared_consts.SCHEDA_PRODOTTO.CMD_NONE)
|
||||
const cmd = ref(shared_consts.SCHEDA_PRODOTTO.CMD_NONE);
|
||||
|
||||
const showQtaDisponibile = ref(false)
|
||||
const loading = ref(true)
|
||||
const visufromgm = ref(false)
|
||||
const updatefromgm = ref(false)
|
||||
const field_updated_fromGM = ref('')
|
||||
const showQtaDisponibile = ref(false);
|
||||
const loading = ref(true);
|
||||
const visufromgm = ref(false);
|
||||
const updatefromgm = ref(false);
|
||||
const field_updated_fromGM = ref('');
|
||||
|
||||
const modifOn = ref(false)
|
||||
const modifOn = ref(false);
|
||||
|
||||
const sortAttribute = ref('')
|
||||
const sortDirection = ref(1)
|
||||
const sortAttribute = ref('');
|
||||
const sortDirection = ref(1);
|
||||
|
||||
const optionscatalogo = ref(<any>{ maxlength: 0 })
|
||||
const addstr = ref('');
|
||||
|
||||
const optionscatalogo = ref(<any>{ maxlength: 0 });
|
||||
|
||||
function handleUpdate(newList) {
|
||||
internalProducts.value = newList
|
||||
emit('update:lista_prodotti', internalProducts.value)
|
||||
internalProducts.value = newList;
|
||||
emit('update:lista_prodotti', internalProducts.value);
|
||||
}
|
||||
|
||||
const editOn = computed({
|
||||
get(): boolean {
|
||||
return globalStore.editOn ? globalStore.editOn : false
|
||||
return globalStore.editOn ? globalStore.editOn : false;
|
||||
},
|
||||
|
||||
set(value: boolean) {
|
||||
return tools.updateEditOn(value)
|
||||
}
|
||||
})
|
||||
|
||||
return tools.updateEditOn(value);
|
||||
},
|
||||
});
|
||||
|
||||
// Aggiorna la copia locale quando il prop cambia
|
||||
watch(
|
||||
@@ -99,172 +102,276 @@ export default defineComponent({
|
||||
(newVal) => {
|
||||
internalProducts.value = [...newVal];
|
||||
}
|
||||
), { deep: true };
|
||||
),
|
||||
{ deep: true };
|
||||
|
||||
const allColumns = ref([]);
|
||||
|
||||
// Colonne della tabella
|
||||
const allColumns = [
|
||||
{ name: "pos", label: "Ind", field: "pos", align: "left", style: "width: 50px", notsortable: true },
|
||||
{ name: "drag", label: "Ord", field: "", align: "left", style: "width: 50px", edit: true, noexp: true, notsortable: true },
|
||||
{ name: "validato", label: "Val", field: "validato", align: "left", style: "", },
|
||||
{ name: "image", label: "Foto", field: "image", align: "center", noexp: true, notsortable: true },
|
||||
{ name: "name", label: "Titolo", field: "name", align: "left" },
|
||||
{ name: "sottotitolo", label: "Sottotitolo", field: "sottotitolo", align: "left" },
|
||||
{ name: "authors", label: "Autore", field: "authors", align: "left" },
|
||||
{ name: "isbn", label: "ISBN", field: "isbn", align: "left" },
|
||||
{ name: "trafiletto", label: "Sinossi", field: "trafiletto", align: "left" },
|
||||
{ name: "catprods", label: "Argomento", field: "catprods", align: "left" },
|
||||
{ name: "edizione", label: "Edizione", field: "edizione", align: "left" },
|
||||
{ name: "casaeditrice", label: "Casa Editrice", field: "casaeditrice", align: "left" },
|
||||
{ name: "idCollana", label: "Collana", field: "idCollana", align: "left" },
|
||||
{ name: "stato", label: "Stato", field: "stato", align: "left" },
|
||||
{ name: "tipologia", label: "Tipologia", field: "tipologia", align: "left" },
|
||||
{ name: "tipoformato", label: "Formato", field: "tipoformato", align: "left" },
|
||||
{ name: "pagine", label: "Pag.", field: "pagine", align: "right" },
|
||||
{ name: "prezzo", label: "€", field: "prezzo", align: "right" },
|
||||
{ name: "prezzo_sconto", label: "€ (sconto)", field: "prezzo_sconto", align: "right" },
|
||||
{ name: "date_pub", label: "Pubblicato", field: "date_pub", align: "left" },
|
||||
const allColumns_Raccolta = ref([
|
||||
{ name: 'pos', label: 'Ind', field: 'pos', align: 'left', style: 'width: 50px', notsortable: true },
|
||||
{
|
||||
name: 'drag',
|
||||
label: 'Ord',
|
||||
field: '',
|
||||
align: 'left',
|
||||
style: 'width: 50px',
|
||||
edit: true,
|
||||
noexp: true,
|
||||
notsortable: true,
|
||||
},
|
||||
{ name: 'image', label: 'Foto', field: 'image', align: 'center', noexp: true, notsortable: true },
|
||||
{ name: 'title', label: 'Titolo', field: 'title', align: 'left' },
|
||||
{ name: 'pdf_generato', label: 'Generato', field: 'pdf_generato', align: 'center' },
|
||||
{ name: 'data_generato', label: 'Data Generato', field: 'data_generato', align: 'center' },
|
||||
{ name: 'pdf_generato_stampa', label: 'Generato Stampa', field: 'pdf_generato_stampa', align: 'center' },
|
||||
{ name: 'data_generato_stampa', label: 'Data Generato Stampa', field: 'data_generato_stampa', align: 'center' },
|
||||
{ name: 'pdf_online', label: 'PDF OnLine', field: 'pdf_online', align: 'center' },
|
||||
{ name: 'pdf_online_stampa', label: 'PDF OnLine Stampa', field: 'pdf_online_stampa', align: 'center' },
|
||||
{ name: 'data_online', label: 'Data Online', field: 'data_online', align: 'center' },
|
||||
{ name: 'data_online_stampa', label: 'Data Online Stampa', field: 'data_online_stampa', align: 'center' },
|
||||
{
|
||||
name: 'actions',
|
||||
label: 'Azioni',
|
||||
field: '',
|
||||
align: 'center',
|
||||
visu: costanti.VISUCAMPI.PER_EDITORE,
|
||||
noexp: true,
|
||||
notsortable: true,
|
||||
},
|
||||
]);
|
||||
|
||||
const allColumns_Catalog = ref([
|
||||
{ name: 'pos', label: 'Ind', field: 'pos', align: 'left', style: 'width: 50px', notsortable: true },
|
||||
{
|
||||
name: 'drag',
|
||||
label: 'Ord',
|
||||
field: '',
|
||||
align: 'left',
|
||||
style: 'width: 50px',
|
||||
edit: true,
|
||||
noexp: true,
|
||||
notsortable: true,
|
||||
},
|
||||
{ name: 'validato', label: 'Val', field: 'validato', align: 'left', style: '' },
|
||||
{ name: 'image', label: 'Foto', field: 'image', align: 'center', noexp: true, notsortable: true },
|
||||
{ name: 'name', label: 'Titolo', field: 'name', align: 'left' },
|
||||
{ name: 'sottotitolo', label: 'Sottotitolo', field: 'sottotitolo', align: 'left' },
|
||||
{ name: 'authors', label: 'Autore', field: 'authors', align: 'left' },
|
||||
{ name: 'isbn', label: 'ISBN', field: 'isbn', align: 'left' },
|
||||
{ name: 'trafiletto', label: 'Sinossi', field: 'trafiletto', align: 'left' },
|
||||
{ name: 'catprods', label: 'Argomento', field: 'catprods', align: 'left' },
|
||||
{ name: 'edizione', label: 'Edizione', field: 'edizione', align: 'left' },
|
||||
{ name: 'casaeditrice', label: 'Casa Editrice', field: 'casaeditrice', align: 'left' },
|
||||
{ name: 'idCollana', label: 'Collana', field: 'idCollana', align: 'left' },
|
||||
{ name: 'stato', label: 'Stato', field: 'stato', align: 'left' },
|
||||
{ name: 'tipologia', label: 'Tipologia', field: 'tipologia', align: 'left' },
|
||||
{ name: 'tipoformato', label: 'Formato', field: 'tipoformato', align: 'left' },
|
||||
{ name: 'pagine', label: 'Pag.', field: 'pagine', align: 'right' },
|
||||
{ name: 'prezzo', label: '€', field: 'prezzo', align: 'right' },
|
||||
{ name: 'prezzo_sconto', label: '€ (sconto)', field: 'prezzo_sconto', align: 'right' },
|
||||
{ name: 'date_pub', label: 'Pubblicato', field: 'date_pub', align: 'left' },
|
||||
//{ name: "ranking", label: "Class.", field: "ranking", align: "right" },
|
||||
//{ name: "rank3M", label: "Class. 3M", field: "rank3M", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
//{ name: "rank6M", label: "Class. 6M", field: "rank6M", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
//{ name: "rank1Y", label: "Class. 1Y", field: "rank1Y", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "totVen", label: "Vend", field: "totVen", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "vLast6M", label: "Ven 6M", field: "vLast6M", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "fatLast6M", label: "Fat 6M", field: "fatLast6M", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "fatLast1Y", label: "Fat 1A", field: "fatLast1Y", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "fatLast2Y", label: "Fat 2A", field: "fatLast2Y", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "totFat", label: "Fat 5A", field: "totFat", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "ult_ord", label: "Ult. Ordine", field: "ult_ord", align: "left", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "quantity", label: "Magazz.", field: "quantity", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: "actions", label: "Azioni", field: "", align: "center", visu: costanti.VISUCAMPI.PER_EDITORE, noexp: true, notsortable: true },
|
||||
];
|
||||
{ name: 'totVen', label: 'Vend', field: 'totVen', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'vLast6M', label: 'Ven 6M', field: 'vLast6M', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'fatLast6M', label: 'Fat 6M', field: 'fatLast6M', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'fatLast1Y', label: 'Fat 1A', field: 'fatLast1Y', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'fatLast2Y', label: 'Fat 2A', field: 'fatLast2Y', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'totFat', label: 'Fat 5A', field: 'totFat', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'ult_ord', label: 'Ult. Ordine', field: 'ult_ord', align: 'left', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{ name: 'quantity', label: 'Magazz.', field: 'quantity', align: 'right', visu: costanti.VISUCAMPI.PER_EDITORE },
|
||||
{
|
||||
name: 'actions',
|
||||
label: 'Azioni',
|
||||
field: '',
|
||||
align: 'center',
|
||||
visu: costanti.VISUCAMPI.PER_EDITORE,
|
||||
noexp: true,
|
||||
notsortable: true,
|
||||
},
|
||||
]);
|
||||
|
||||
async function mounted() {
|
||||
console.log('mounted CProductTable')
|
||||
loading.value = true
|
||||
console.log('mounted CProductTable');
|
||||
loading.value = true;
|
||||
|
||||
optionscatalogo.value = {
|
||||
maxlength: props.scheda?.testo_bottom?.maxlength
|
||||
if (props.table === shared_consts.TABLES_CATALOG) {
|
||||
selectedColumns.value = selectedColumns_Catalogs.value;
|
||||
} else {
|
||||
selectedColumns.value = tools.isUtente() ? selectedColumns_Utenti.value : selectedColumns_Editori.value;
|
||||
}
|
||||
|
||||
const savedColumns = tools.getCookie("selColCat_2");
|
||||
addstr.value = tools.addstrCookie(props.table);
|
||||
|
||||
if (props.table === 'products') {
|
||||
allColumns.value = allColumns_Catalog.value;
|
||||
} else if (props.table === 'catalogs') {
|
||||
allColumns.value = allColumns_Raccolta.value;
|
||||
}
|
||||
|
||||
optionscatalogo.value = {
|
||||
maxlength: props.scheda?.testo_bottom?.maxlength,
|
||||
};
|
||||
|
||||
const savedColumns = tools.getCookie(addstr.value + 'selColCat_2');
|
||||
if (savedColumns) {
|
||||
selectedColumns.value = savedColumns;
|
||||
}
|
||||
|
||||
const savedSortAttribute = tools.getCookie("sortAttr");
|
||||
const savedSortAttribute = tools.getCookie(addstr.value + 'sortAttr');
|
||||
if (savedSortAttribute && props.optcatalogo.showListaArgomenti) {
|
||||
if (isColumnVisible(savedSortAttribute)) {
|
||||
sortAttribute.value = savedSortAttribute;
|
||||
|
||||
const savedSortDir = tools.getCookie("sortDir");
|
||||
const savedSortDir = tools.getCookie(addstr.value + 'sortDir');
|
||||
if (savedSortDir) {
|
||||
sortDirection.value = savedSortDir;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
loading.value = false
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
|
||||
function getFieldValue(element: any, field: any): any {
|
||||
if (!element)
|
||||
return ''
|
||||
if (!element) return '';
|
||||
|
||||
try {
|
||||
switch (field.field) {
|
||||
case 'image':
|
||||
return element.productInfo?.imagefile
|
||||
? tools.getFullFileNameByImageFile('productInfos', element.productInfo?.imagefile)
|
||||
: element.productInfo?.image_link;
|
||||
if (props.table === shared_consts.TABLES_CATALOG) {
|
||||
const catalog = element;
|
||||
switch (field.field) {
|
||||
case 'active':
|
||||
return catalog.active;
|
||||
case 'title':
|
||||
return catalog.title;
|
||||
case 'pdf_generato':
|
||||
return catalog.pdf_generato
|
||||
? `<a href="${catalog.pdf_generato}" target="_blank" rel="noopener noreferrer">PDF</a>`
|
||||
: '';
|
||||
case 'pdf_generato_stampa':
|
||||
return catalog.pdf_generato_stampa
|
||||
? `<a href="${catalog.pdf_generato_stampa}" target="_blank" rel="noopener noreferrer">PDF</a>`
|
||||
: '';
|
||||
case 'data_generato':
|
||||
return tools.getstrDate(catalog.data_generato);
|
||||
case 'data_generato_stampa':
|
||||
return tools.getstrDate(catalog.data_generato_stampa);
|
||||
case 'pdf_online':
|
||||
return catalog.pdf_online
|
||||
? `<a href="${catalog.pdf_online}" target="_blank" rel="noopener noreferrer">PDF</a>`
|
||||
: '';
|
||||
case 'pdf_online_stampa':
|
||||
return catalog.pdf_online_stampa
|
||||
? `<a href="${catalog.pdf_online_stampa}" target="_blank" rel="noopener noreferrer">PDF</a>`
|
||||
: '';
|
||||
case 'data_online':
|
||||
return tools.getstrDate(catalog.data_online);
|
||||
case 'data_online_stampa':
|
||||
return tools.getstrDate(catalog.data_online_stampa);
|
||||
case 'image':
|
||||
return catalog.foto_collana?.imagefile
|
||||
? tools.getFullFileNameByImageFile(shared_consts.TABLES_CATALOG, catalog.foto_collana?.imagefile)
|
||||
: '';
|
||||
}
|
||||
} else {
|
||||
switch (field.field) {
|
||||
case 'image':
|
||||
return element.productInfo?.imagefile
|
||||
? tools.getFullFileNameByImageFile('productInfos', element.productInfo?.imagefile)
|
||||
: element.productInfo?.image_link;
|
||||
|
||||
case 'name':
|
||||
return element.productInfo?.name;
|
||||
case 'name':
|
||||
return element.productInfo?.name;
|
||||
|
||||
case 'sottotitolo':
|
||||
return element.productInfo?.sottotitolo;
|
||||
case 'sottotitolo':
|
||||
return element.productInfo?.sottotitolo;
|
||||
|
||||
case 'authors':
|
||||
return formatAuthors(element.productInfo?.authors);
|
||||
case 'authors':
|
||||
return formatAuthors(element.productInfo?.authors);
|
||||
|
||||
case 'validato':
|
||||
return element.validaprod?.esito === costanti.VALIDATO.SI ? '<span class="text-bold">SI</span>' : (element.validaprod?.esito === costanti.VALIDATO.TO_RESOLV ? '<span class="text-bold">ERR</span>' : 'NO');
|
||||
case 'validato':
|
||||
return element.validaprod?.esito === costanti.VALIDATO.SI
|
||||
? '<span class="text-bold">SI</span>'
|
||||
: element.validaprod?.esito === costanti.VALIDATO.TO_RESOLV
|
||||
? '<span class="text-bold">ERR</span>'
|
||||
: 'NO';
|
||||
|
||||
case 'isbn':
|
||||
return element.isbn;
|
||||
case 'isbn':
|
||||
return element.isbn;
|
||||
|
||||
case 'trafiletto':
|
||||
return element.productInfo?.descr_trafiletto_catalogo?.length > 100 ? 'SI' : 'NO';
|
||||
case 'trafiletto':
|
||||
return element.productInfo?.descr_trafiletto_catalogo?.length > 100 ? 'SI' : 'NO';
|
||||
|
||||
case 'catprods':
|
||||
return tools.formatCatProds(element.productInfo?.catprods);
|
||||
case 'catprods':
|
||||
return tools.formatCatProds(element.productInfo?.catprods);
|
||||
|
||||
case 'edizione':
|
||||
return element.arrvariazioni?.[0]?.edizione;
|
||||
case 'edizione':
|
||||
return element.arrvariazioni?.[0]?.edizione;
|
||||
|
||||
case 'casaeditrice':
|
||||
return products.getCasaEditriceByIdPublisher(element.productInfo?.idPublisher);
|
||||
case 'casaeditrice':
|
||||
return products.getCasaEditriceByIdPublisher(element.productInfo?.idPublisher);
|
||||
|
||||
case 'idCollana':
|
||||
return tools.formatCollane(element.productInfo?.idCollana);
|
||||
case 'idCollana':
|
||||
return tools.formatCollane(element.productInfo?.idCollana);
|
||||
|
||||
case 'stato':
|
||||
return products.getDescrStatiProdottoByIdStatoProdotto(element.productInfo?.idStatoProdotto || '');
|
||||
case 'stato':
|
||||
return products.getDescrStatiProdottoByIdStatoProdotto(element.productInfo?.idStatoProdotto || '');
|
||||
|
||||
case 'tipologia':
|
||||
return products.getDescrByIdTipologia(element.arrvariazioni?.[0]?.idTipologia || '');
|
||||
case 'tipologia':
|
||||
return products.getDescrByIdTipologia(element.arrvariazioni?.[0]?.idTipologia || '');
|
||||
|
||||
case 'tipoformato':
|
||||
return products.getDescrByIdTipoFormato(element.arrvariazioni?.[0]?.idTipoFormato || '');
|
||||
case 'tipoformato':
|
||||
return products.getDescrByIdTipoFormato(element.arrvariazioni?.[0]?.idTipoFormato || '');
|
||||
|
||||
case 'date_pub':
|
||||
return tools.getstrDate(element.productInfo?.date_pub);
|
||||
case 'date_pub':
|
||||
return tools.getstrDate(element.productInfo?.date_pub);
|
||||
|
||||
case 'prezzo':
|
||||
return element.price ? '€ ' + element.price.toFixed(2) : '';
|
||||
case 'prezzo':
|
||||
return element.price ? '€ ' + element.price.toFixed(2) : '';
|
||||
|
||||
case 'prezzo_sconto':
|
||||
return element.sale_price ? '€ ' + element.sale_price.toFixed(2) : '';
|
||||
case 'prezzo_sconto':
|
||||
return element.sale_price ? '€ ' + element.sale_price.toFixed(2) : '';
|
||||
|
||||
case 'rank3M':
|
||||
return element.productInfo?.rank3M;
|
||||
case 'rank3M':
|
||||
return element.productInfo?.rank3M;
|
||||
|
||||
case 'rank6M':
|
||||
return element.productInfo?.rank6M;
|
||||
case 'rank6M':
|
||||
return element.productInfo?.rank6M;
|
||||
|
||||
case 'rank1Y':
|
||||
return element.productInfo?.rank1Y;
|
||||
case 'rank1Y':
|
||||
return element.productInfo?.rank1Y;
|
||||
|
||||
case 'pagine':
|
||||
return element.arrvariazioni?.[0]?.pagine;
|
||||
case 'pagine':
|
||||
return element.arrvariazioni?.[0]?.pagine;
|
||||
|
||||
case 'totVen':
|
||||
return element.productInfo?.totVen;
|
||||
case 'totVen':
|
||||
return element.productInfo?.totVen;
|
||||
|
||||
case 'totFat':
|
||||
return element.productInfo?.totFat;
|
||||
case 'totFat':
|
||||
return element.productInfo?.totFat;
|
||||
|
||||
case 'fatLast6M':
|
||||
return element.productInfo?.fatLast6M;
|
||||
case 'fatLast6M':
|
||||
return element.productInfo?.fatLast6M;
|
||||
|
||||
case 'fatLast1Y':
|
||||
return element.productInfo?.fatLast1Y;
|
||||
case 'fatLast1Y':
|
||||
return element.productInfo?.fatLast1Y;
|
||||
|
||||
case 'fatLast2Y':
|
||||
return element.productInfo?.fatLast2Y;
|
||||
case 'fatLast2Y':
|
||||
return element.productInfo?.fatLast2Y;
|
||||
|
||||
case 'ult_ord':
|
||||
return tools.getstrDate(element.productInfo?.dataUltimoOrdine);
|
||||
case 'ult_ord':
|
||||
return tools.getstrDate(element.productInfo?.dataUltimoOrdine);
|
||||
|
||||
case 'quantity':
|
||||
if (tools.isUtente())
|
||||
return tools.getDescrQuantitàByQuantity(element.arrvariazioni?.[0]?.quantita);
|
||||
else
|
||||
return element.arrvariazioni?.[0]?.quantita;
|
||||
case 'quantity':
|
||||
if (tools.isUtente()) return tools.getDescrQuantitàByQuantity(element.arrvariazioni?.[0]?.quantita);
|
||||
else return element.arrvariazioni?.[0]?.quantita;
|
||||
|
||||
default:
|
||||
return null;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Errore getFieldValue:', e, element, field);
|
||||
@@ -273,13 +380,10 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
function getFieldClass(element: any, field: any): string {
|
||||
if (!element)
|
||||
return ''
|
||||
if (!element) return '';
|
||||
switch (field.field) {
|
||||
case 'trafiletto':
|
||||
return element.productInfo?.descr_trafiletto_catalogo?.length > 100
|
||||
? 'text-green'
|
||||
: 'text-red';
|
||||
return element.productInfo?.descr_trafiletto_catalogo?.length > 100 ? 'text-green' : 'text-red';
|
||||
|
||||
case 'stato':
|
||||
if (products.isProssimaUscita(element.productInfo)) {
|
||||
@@ -332,8 +436,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
function getFieldStyle(element: any, field: any): Record<string, string> {
|
||||
if (!element)
|
||||
return {}
|
||||
if (!element) return {};
|
||||
|
||||
switch (field.field) {
|
||||
case 'prezzo':
|
||||
@@ -344,11 +447,11 @@ export default defineComponent({
|
||||
cursor: 'pointer',
|
||||
textAlign: 'center',
|
||||
color: 'white',
|
||||
}
|
||||
};
|
||||
case 'image':
|
||||
return {
|
||||
width: '50px',
|
||||
height: '50px'
|
||||
height: '50px',
|
||||
};
|
||||
|
||||
case 'pagine':
|
||||
@@ -359,12 +462,12 @@ export default defineComponent({
|
||||
case 'fatLast2Y':
|
||||
case 'quantity':
|
||||
return {
|
||||
textAlign: 'right'
|
||||
textAlign: 'right',
|
||||
};
|
||||
|
||||
case 'trafiletto':
|
||||
return {
|
||||
textAlign: 'center'
|
||||
textAlign: 'center',
|
||||
};
|
||||
|
||||
default:
|
||||
@@ -374,9 +477,8 @@ export default defineComponent({
|
||||
|
||||
let cookieValue: [] | null = null;
|
||||
|
||||
let keyvalue = 'selColCat_2'
|
||||
if (tools.isUtente())
|
||||
keyvalue += '_utente'
|
||||
let keyvalue = addstr.value + 'selColCat_2';
|
||||
if (tools.isUtente()) keyvalue += '_utente';
|
||||
try {
|
||||
cookieValue = tools.getCookie(keyvalue);
|
||||
// Se il cookie esiste e contiene una stringa JSON valida
|
||||
@@ -386,100 +488,139 @@ export default defineComponent({
|
||||
cookieValue = []; // In caso di errore, inizializza come array vuoto
|
||||
}
|
||||
|
||||
const selectedColumns_Editori = ref(cookieValue.length > 0 ? cookieValue : ["pos", "drag", "validato", "image", "name", "authors", "isbn", "catprods", "stato", "date_pub", "pagine", "trafiletto", "fatLast1Y", "quantity", "actions"]);
|
||||
const selectedColumns_Utenti = ref(cookieValue.length > 0 ? cookieValue : ["pos", "image", "name", "authors", "isbn", "catprods", "stato", "date_pub", "pagine", "trafiletto", "quantity"]);
|
||||
const selectedColumns_Editori = ref(
|
||||
cookieValue.length > 0
|
||||
? cookieValue
|
||||
: [
|
||||
'pos',
|
||||
'drag',
|
||||
'validato',
|
||||
'image',
|
||||
'name',
|
||||
'authors',
|
||||
'isbn',
|
||||
'catprods',
|
||||
'stato',
|
||||
'date_pub',
|
||||
'pagine',
|
||||
'trafiletto',
|
||||
'fatLast1Y',
|
||||
'quantity',
|
||||
'actions',
|
||||
]
|
||||
);
|
||||
const selectedColumns_Utenti = ref(
|
||||
cookieValue.length > 0
|
||||
? cookieValue
|
||||
: [
|
||||
'pos',
|
||||
'image',
|
||||
'name',
|
||||
'authors',
|
||||
'isbn',
|
||||
'catprods',
|
||||
'stato',
|
||||
'date_pub',
|
||||
'pagine',
|
||||
'trafiletto',
|
||||
'quantity',
|
||||
]
|
||||
);
|
||||
const selectedColumns_Catalogs = ref(
|
||||
cookieValue.length > 0 ? cookieValue : ['pos', 'drag', 'image', 'title', 'pdf_generato', 'actions']
|
||||
);
|
||||
|
||||
const selectedColumns = computed({
|
||||
get: () => tools.isUtente() ? selectedColumns_Utenti.value : selectedColumns_Editori.value,
|
||||
set: (value) => {
|
||||
if (tools.isUtente()) {
|
||||
selectedColumns_Utenti.value = value;
|
||||
} else {
|
||||
selectedColumns_Editori.value = value;
|
||||
}
|
||||
}
|
||||
});
|
||||
const selectedColumns = ref([]);
|
||||
|
||||
// 3. Funzione per verificare se una colonna è visibile (isColumnVisible)
|
||||
const isColumnVisible = (column, real?: boolean) => {
|
||||
if (column === 'actions' && !real) {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
if (internalProducts.value?.length > 1000) {
|
||||
if (column === 'image') {
|
||||
return false
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const ok = allColumns.some((col) => col.name === column) && (!props.optcatalogo.showListaArgomenti || (props.optcatalogo.showListaArgomenti && !column.edit))
|
||||
const ok =
|
||||
allColumns.value.some((col) => col.name === column) &&
|
||||
(!props.optcatalogo.showListaArgomenti || (props.optcatalogo.showListaArgomenti && !column.edit));
|
||||
return selectedColumns.value.includes(column) && ok;
|
||||
}
|
||||
};
|
||||
|
||||
const getColumnLabelByName = (name: string): string => {
|
||||
const column = allColumns.find((col) => col.name === name);
|
||||
const column = allColumns.value.find((col) => col.name === name);
|
||||
return column ? column.label : '';
|
||||
}
|
||||
};
|
||||
|
||||
// Funzione per eliminare un prodotto
|
||||
const removeProduct = (product) => {
|
||||
internalProducts.value = internalProducts.value.filter((p: any) => p._id !== product._id);
|
||||
emit("update:lista_prodotti", internalProducts.value); // Notifica il parent del cambiamento
|
||||
}
|
||||
emit('update:lista_prodotti', internalProducts.value); // Notifica il parent del cambiamento
|
||||
};
|
||||
|
||||
// 8. Salvataggio delle colonne selezionate in un cookie
|
||||
const saveSelectedColumns = () => {
|
||||
tools.setCookie("selColCat_2", JSON.stringify(selectedColumns.value));
|
||||
tools.setCookie(addstr.value + 'selColCat_2', JSON.stringify(selectedColumns.value));
|
||||
};
|
||||
|
||||
// 9. Watcher per salvare automaticamente le preferenze quando cambiano
|
||||
watch(() => selectedColumns.value, () => {
|
||||
saveSelectedColumns();
|
||||
});
|
||||
watch(
|
||||
() => selectedColumns.value,
|
||||
() => {
|
||||
saveSelectedColumns();
|
||||
}
|
||||
);
|
||||
|
||||
watch(() => sortAttribute.value, (newVal) => {
|
||||
tools.setCookie("sortAttr", newVal);
|
||||
});
|
||||
|
||||
watch(() => sortDirection.value, (newVal) => {
|
||||
tools.setCookie("sortDir", newVal);
|
||||
});
|
||||
watch(
|
||||
() => sortAttribute.value,
|
||||
(newVal) => {
|
||||
tools.setCookie(addstr.value + 'sortAttr', newVal);
|
||||
}
|
||||
);
|
||||
|
||||
watch(
|
||||
() => sortDirection.value,
|
||||
(newVal) => {
|
||||
tools.setCookie(addstr.value + 'sortDir', newVal);
|
||||
}
|
||||
);
|
||||
|
||||
// Funzione chiamata alla fine del drag-and-drop
|
||||
const onDragEnd = () => {
|
||||
// console.log("Nuovo ordine:", internalProducts.value);
|
||||
emit("update:lista_prodotti", internalProducts.value); // Notifica il parent del cambiamento
|
||||
}
|
||||
emit('update:lista_prodotti', internalProducts.value); // Notifica il parent del cambiamento
|
||||
};
|
||||
|
||||
function formatAuthors(authors: IAuthor[] | undefined | null): string {
|
||||
if (!authors || !Array.isArray(authors)) {
|
||||
return ""; // Restituisci una stringa vuota se authors non è un array valido
|
||||
return ''; // Restituisci una stringa vuota se authors non è un array valido
|
||||
}
|
||||
|
||||
// Estrai il nome e il cognome di ogni autore e uniscili con ', '
|
||||
return authors
|
||||
.map((author) => `${author.name ?? ""} ${author.surname ?? ""}`.trim())
|
||||
.map((author) => `${author.name ?? ''} ${author.surname ?? ''}`.trim())
|
||||
.filter((name) => name.length > 0) // Filtra eventuali nomi vuoti
|
||||
.join(", ");
|
||||
.join(', ');
|
||||
}
|
||||
|
||||
|
||||
function showProduct(element: any) {
|
||||
selProd.value = element
|
||||
selProd.value = element;
|
||||
|
||||
showProd.value = true
|
||||
showProd.value = true;
|
||||
}
|
||||
|
||||
function modifyProduct(element: any) {
|
||||
if (element) {
|
||||
selProd.value = element
|
||||
selProd.value = element;
|
||||
|
||||
cmd.value = shared_consts.SCHEDA_PRODOTTO.CMD_MODIFICA
|
||||
modifOn.value = true
|
||||
cmd.value = shared_consts.SCHEDA_PRODOTTO.CMD_MODIFICA;
|
||||
modifOn.value = true;
|
||||
}
|
||||
}
|
||||
|
||||
function updateProduct(element: any) {
|
||||
selProd.value = element
|
||||
selProd.value = element;
|
||||
|
||||
// Aggiorna l'elemento nella lista interna
|
||||
internalProducts.value = internalProducts.value.map((prod: any) => {
|
||||
@@ -489,17 +630,16 @@ export default defineComponent({
|
||||
return prod;
|
||||
});
|
||||
|
||||
emit("update:lista_prodotti", internalProducts.value); // Notifica il parent del cambiamento
|
||||
|
||||
emit('update:lista_prodotti', internalProducts.value); // Notifica il parent del cambiamento
|
||||
}
|
||||
|
||||
async function updateproductmodif(element: any) {
|
||||
console.log('PRODUCT TABLE: updateproductmodif')
|
||||
console.log('PRODUCT TABLE: updateproductmodif');
|
||||
try {
|
||||
if (element?._id) {
|
||||
selProd.value = await products.getProductById(element?._id)
|
||||
selProd.value = await products.getProductById(element?._id);
|
||||
} else {
|
||||
selProd.value = await products.getProductById(selProd.value?._id)
|
||||
selProd.value = await products.getProductById(selProd.value?._id);
|
||||
}
|
||||
|
||||
// update record inside internalProducts
|
||||
@@ -509,36 +649,34 @@ export default defineComponent({
|
||||
}
|
||||
return prod;
|
||||
});
|
||||
|
||||
|
||||
|
||||
} catch (e) {
|
||||
console.error('err', e)
|
||||
console.error('err', e);
|
||||
}
|
||||
}
|
||||
|
||||
async function refreshFieldFromGM(field: string) {
|
||||
if (selProd.value) {
|
||||
loading.value = true
|
||||
updatefromgm.value = true
|
||||
field_updated_fromGM.value = ''
|
||||
field_updated_fromGM.value = await globalStore.getGM_FieldOf_T_Web_Articoli(selProd.value.productInfo.sku!, field, shared_consts.CmdQueryMs.GET)
|
||||
loading.value = false
|
||||
loading.value = true;
|
||||
updatefromgm.value = true;
|
||||
field_updated_fromGM.value = '';
|
||||
field_updated_fromGM.value = await globalStore.getGM_FieldOf_T_Web_Articoli(
|
||||
selProd.value.productInfo.sku!,
|
||||
field,
|
||||
shared_consts.CmdQueryMs.GET
|
||||
);
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const sortTable = (sortAttributeToSort: string) => {
|
||||
|
||||
if (!props.optcatalogo.showListaArgomenti)
|
||||
return false
|
||||
if (!props.optcatalogo.showListaArgomenti) return false;
|
||||
|
||||
if (sortAttributeToSort) {
|
||||
if (sortAttribute.value === sortAttributeToSort) {
|
||||
sortDirection.value = -sortDirection.value
|
||||
sortDirection.value = -sortDirection.value;
|
||||
} else {
|
||||
sortAttribute.value = sortAttributeToSort
|
||||
sortDirection.value = 1
|
||||
sortAttribute.value = sortAttributeToSort;
|
||||
sortDirection.value = 1;
|
||||
}
|
||||
internalProducts.value = internalProducts.value.sort((a: any, b: any) => {
|
||||
const aVal = getFieldValue(a, { field: sortAttributeToSort });
|
||||
@@ -546,7 +684,12 @@ export default defineComponent({
|
||||
if (aVal instanceof Date && bVal instanceof Date) {
|
||||
return sortDirection.value === 1 ? aVal.getTime() - bVal.getTime() : bVal.getTime() - aVal.getTime();
|
||||
}
|
||||
if (typeof aVal === 'string' && typeof bVal === 'string' && aVal.match(/^\d{1,2}\/\d{1,2}\/\d{4}$/) && bVal.match(/^\d{1,2}\/\d{1,2}\/\d{4}$/)) {
|
||||
if (
|
||||
typeof aVal === 'string' &&
|
||||
typeof bVal === 'string' &&
|
||||
aVal.match(/^\d{1,2}\/\d{1,2}\/\d{4}$/) &&
|
||||
bVal.match(/^\d{1,2}\/\d{1,2}\/\d{4}$/)
|
||||
) {
|
||||
const aDate = new Date(aVal.split('/').reverse().join('-'));
|
||||
const bDate = new Date(bVal.split('/').reverse().join('-'));
|
||||
return sortDirection.value === 1 ? aDate.getTime() - bDate.getTime() : bDate.getTime() - aDate.getTime();
|
||||
@@ -557,19 +700,21 @@ export default defineComponent({
|
||||
if (typeof aVal === 'string' && typeof bVal === 'string') {
|
||||
return sortDirection.value === 1 ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal);
|
||||
}
|
||||
return sortDirection.value === 1 ? String(aVal).localeCompare(String(bVal)) : String(bVal).localeCompare(String(aVal));
|
||||
})
|
||||
return sortDirection.value === 1
|
||||
? String(aVal).localeCompare(String(bVal))
|
||||
: String(bVal).localeCompare(String(aVal));
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function rigenera() {
|
||||
emit('rigenera')
|
||||
emit('rigenera');
|
||||
}
|
||||
|
||||
function getFieldClick(element: any, field: any): (() => void) | null {
|
||||
switch (field.field) {
|
||||
case 'validato':
|
||||
return () => modifyProduct(element)
|
||||
return () => modifyProduct(element);
|
||||
case 'image':
|
||||
return () => showProduct(element);
|
||||
|
||||
@@ -593,16 +738,19 @@ export default defineComponent({
|
||||
function exportToCSV() {
|
||||
const csvContent = [
|
||||
selectedColumns.value
|
||||
.filter((col) => !allColumns.find((c) => c.name === col)?.noexp)
|
||||
.filter((col) => !allColumns.value.find((c) => c.name === col)?.noexp)
|
||||
.map((col) => getColumnLabelByName(col))
|
||||
.join('|'),
|
||||
...internalProducts.value.map((product: any) => {
|
||||
return selectedColumns.value
|
||||
.filter((col) => !allColumns.find((c) => c.name === col)?.noexp)
|
||||
.filter((col) => !allColumns.value.find((c) => c.name === col)?.noexp)
|
||||
.map((col: string) => {
|
||||
const field = { field: col };
|
||||
return field.field === 'pos' ? internalProducts.value.indexOf(product) + 1 : getFieldValue(product, field);
|
||||
}).join('|');
|
||||
const field = { field: col };
|
||||
return field.field === 'pos'
|
||||
? internalProducts.value.indexOf(product) + 1
|
||||
: getFieldValue(product, field);
|
||||
})
|
||||
.join('|');
|
||||
}),
|
||||
].join('\r\n');
|
||||
|
||||
@@ -618,14 +766,24 @@ export default defineComponent({
|
||||
document.body.appendChild(link);
|
||||
link.click();
|
||||
document.body.removeChild(link);
|
||||
|
||||
}
|
||||
|
||||
function isSortable(field: string) : boolean {
|
||||
return allColumns && !allColumns.find((col) => col.name === field)?.notsortable;
|
||||
function isSortable(field: string): boolean {
|
||||
return allColumns && !allColumns.value.find((col) => col.name === field)?.notsortable;
|
||||
}
|
||||
|
||||
onMounted(mounted)
|
||||
function getImageByElement(element) {
|
||||
let image = '';
|
||||
if (props.table === shared_consts.TABLES_CATALOG) {
|
||||
image = element.foto_collana?.imagefile;
|
||||
} else {
|
||||
image = element.productInfo?.imagefile;
|
||||
}
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
onMounted(mounted);
|
||||
|
||||
return {
|
||||
allColumns,
|
||||
@@ -666,6 +824,7 @@ export default defineComponent({
|
||||
handleUpdate,
|
||||
exportToCSV,
|
||||
isSortable,
|
||||
}
|
||||
}
|
||||
})
|
||||
getImageByElement,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user