From 6932590f3e013fb5f94b5ebedee5220d79f86d1f Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Thu, 28 Nov 2024 16:04:48 +0100 Subject: [PATCH] =?UTF-8?q?-=20Cataloghi:=20BestSeller,=20Novit=C3=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __inizia.sh | 2 + public/images/bestseller.png | Bin 0 -> 13888 bytes public/images/novita.png | Bin 0 -> 19871 bytes src/common/shared_vuejs.ts | 21 ++ src/components/CCatalogoCard/CCatalogoCard.ts | 53 ++- .../CCatalogoCard/CCatalogoCard.vue | 111 ++++--- .../CContainerCatalogoCard.ts | 7 +- .../CContainerCatalogoCard.vue | 2 + src/components/CMyDimensioni/CMyDimensioni.ts | 7 +- .../CMyDimensioni/CMyDimensioni.vue | 6 +- src/components/CMyEditElem/CMyEditElem.ts | 126 ++++---- src/components/CMyEditElem/CMyEditElem.vue | 305 +++++++++++------- src/components/CMyFieldRec/CMyFieldRec.ts | 5 +- src/components/CMySize/CMySize.ts | 12 + src/components/CMySize/CMySize.vue | 17 +- src/components/CMyText/CMyText.scss | 0 src/components/CMyText/CMyText.ts | 79 +++++ src/components/CMyText/CMyText.vue | 83 +++++ src/components/CMyText/index.ts | 1 + src/model/GlobalStore.ts | 46 ++- src/model/Products.ts | 16 + src/rootgen/admin/importdata/importdata.ts | 35 +- src/rootgen/admin/importdata/importdata.vue | 4 +- src/store/Modules/costanti.ts | 15 +- src/store/Modules/fieldsTable.ts | 6 +- src/store/Modules/tools.ts | 127 +++++++- src/store/Products.ts | 26 ++ src/views/ecommerce/catalogo/catalogo.scss | 22 +- src/views/ecommerce/catalogo/catalogo.ts | 263 ++++++++++----- src/views/ecommerce/catalogo/catalogo.vue | 145 +++------ 30 files changed, 1086 insertions(+), 456 deletions(-) create mode 100644 public/images/bestseller.png create mode 100644 public/images/novita.png create mode 100755 src/components/CMyText/CMyText.scss create mode 100755 src/components/CMyText/CMyText.ts create mode 100755 src/components/CMyText/CMyText.vue create mode 100755 src/components/CMyText/index.ts diff --git a/__inizia.sh b/__inizia.sh index aea4bfdb..1694b4fb 100644 --- a/__inizia.sh +++ b/__inizia.sh @@ -33,9 +33,11 @@ else rm -R ./public/upload/products/* rm -R ./public/upload/pages/* rm -R ./public/upload/catalogo/* + rm -R ./public/upload/scheda/* cp -R _ALL_SITES/$site/upload/products/* ./public/upload/products/ cp -R _ALL_SITES/$site/upload/pages/* ./public/upload/pages/ cp -R _ALL_SITES/$site/upload/catalogo/* ./public/upload/catalogo/ + cp -R _ALL_SITES/$site/upload/scheda/* ./public/upload/scheda/ rm -R ./public/images/* cp -R _ALL_SITES/$site/images/* ./public/images/ diff --git a/public/images/bestseller.png b/public/images/bestseller.png new file mode 100644 index 0000000000000000000000000000000000000000..c48abeac4c54088fdafdf245af1e8734e5d7f326 GIT binary patch literal 13888 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 O0000gHsI+3`9T6pX*)wf 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 literal 0 HcmV?d00001 diff --git a/src/common/shared_vuejs.ts b/src/common/shared_vuejs.ts index e08669af..e0178c44 100755 --- a/src/common/shared_vuejs.ts +++ b/src/common/shared_vuejs.ts @@ -379,6 +379,8 @@ export const shared_consts = { PRODUCTS_V2: 22, INVENTARIO: 30, MACRO_CATALOGO_JSON: 40, + MACRO_RANKING: 50, + MACRO_DESCRELINKSITOWEB: 60, }, BotType: [ @@ -2229,6 +2231,25 @@ export const shared_consts = { PRODUCT: 1000, }, + ORDINAMENTO_CATALOGHI: [ + { + label: '[Default]', + value: 0, + }, + { + label: 'Data di Uscita', + value: 1, + }, + { + label: 'Bestseller', + value: 2, + }, + { + label: 'Alfabetico', + value: 0, + }, + ], + VERSIONI_PRODOTTO: [ { label: '[Nessuno]', diff --git a/src/components/CCatalogoCard/CCatalogoCard.ts b/src/components/CCatalogoCard/CCatalogoCard.ts index 4fc5a6e5..695311eb 100755 --- a/src/components/CCatalogoCard/CCatalogoCard.ts +++ b/src/components/CCatalogoCard/CCatalogoCard.ts @@ -74,7 +74,7 @@ export default defineComponent({ type: Object as PropType, required: false, default: () => ({ - + }), }, }, @@ -160,7 +160,7 @@ export default defineComponent({ if (myproduct.value) { const ris = await products.addtoCartBase({ $q, t, id: myproduct.value._id, order: myorder, addqty: add }) - updateproduct() + updateproduct(false) if (ris && ris.myord) { } @@ -217,10 +217,22 @@ export default defineComponent({ } - async function updateproduct() { + async function updateproduct(atload: boolean) { - myproduct.value = null; - myproduct.value = await products.getProductById(props.id) + let carica = true + + if (atload) { + if (props.product) { + myproduct.value = props.product + carica = false + } + } else { + } + + if (carica) { + myproduct.value = null; + myproduct.value = await products.getProductById(props.id) + } // products.updateQuantityAvailable(myproduct.value._id) } @@ -325,7 +337,7 @@ export default defineComponent({ updateTimerLabel() } - async function mounted() { + async function mounted() { await load() // Start the timer when the component is mounted @@ -360,7 +372,7 @@ export default defineComponent({ async function load() { indvariazSel.value = -1 initproduct() - await updateproduct() + await updateproduct(true) labelDataArrivoMerce.value = '' labelDataRitiro.value = '' @@ -512,6 +524,31 @@ export default defineComponent({ return !escludiArticolo(variazione) } + function isProductNovita() { + const monthsAgo = props.scheda.etichette?.novita?.months ?? 6; // Numero di mesi da considerare "recenti" + + const publishingDate = new Date(myproduct.value!.productInfo.date_publishing!); + + // Calcola i millisecondi corrispondenti a X mesi fa + const monthsInMilliseconds = monthsAgo * 30 * 24 * 60 * 60 * 1000; // Approssimazione, non tutti i mesi hanno 30 giorni + + // Crea una data che rappresenta X mesi fa + const monthsAgoDate = new Date(tools.getTimeNow() - monthsInMilliseconds); + + // Confronta la data di pubblicazione con la data X mesi fa + return publishingDate > monthsAgoDate; + } + function isProductBestseller() { + + try { + //return myproduct.value!.productInfo.rank1Y! > 0 && (myproduct.value!.productInfo.rank1Y! < props.scheda.etichette?.bestseller?.primiNInClassifica!) + return myproduct.value!.indiceRanking! > 0 && (myproduct.value!.indiceRanking! < props.scheda.etichette?.bestseller?.primiNInClassifica!) + } catch (e) { + return false + } + + } + onMounted(mounted) onBeforeUnmount(beforeDestroy) @@ -568,6 +605,8 @@ export default defineComponent({ click_author, click_opendetail, checkIfVariazioneDaVisu, + isProductNovita, + isProductBestseller, } } }) diff --git a/src/components/CCatalogoCard/CCatalogoCard.vue b/src/components/CCatalogoCard/CCatalogoCard.vue index b898842a..4e7e892b 100755 --- a/src/components/CCatalogoCard/CCatalogoCard.vue +++ b/src/components/CCatalogoCard/CCatalogoCard.vue @@ -76,13 +76,15 @@ 'flex', // Classi comuni 'image-container', { 'shadow-2': options.in_3d }, // Classe condizionale - scheda.posiz_text === costanti.POSIZ_TESTO.IN_BASSO + scheda.testo_right.font?.posiz_text === + costanti.POSIZ_TESTO.IN_BASSO ? 'flex-col' : 'flex-row', // Layout flessibile ]" :style="{ justifyContent: - scheda.posiz_text === costanti.POSIZ_TESTO.IN_BASSO + scheda.testo_right.font?.posiz_text === + costanti.POSIZ_TESTO.IN_BASSO ? 'center' : 'flex-start', alignItems: 'stretch', // Cambiato in 'stretch' per occupare l'altezza @@ -113,6 +115,7 @@ : myproduct.productInfo.image_link " :alt="myproduct.productInfo.name" + :fit="scheda.dimensioni?.immagine_prodotto?.size?.fit ?? 'cover'" :class="{ 'book-image-fixed': complete, 'cursor-pointer': !complete, @@ -120,10 +123,11 @@ 'image-wrapper': optcatalogo.pdf, }" :style="{ - zIndex: 9000, + zIndex: 2, width: - scheda.posiz_text === costanti.POSIZ_TESTO.IN_BASSO - ? '50%' + scheda.testo_right.font?.posiz_text === + costanti.POSIZ_TESTO.IN_BASSO + ? scheda.testo_right.font?.perc_text ?? '50%' : '45%', ...(tools.adjustSize( optcatalogo, @@ -135,6 +139,12 @@ scheda.dimensioni?.immagine_prodotto.size?.width ) + ' !important', }), + height: scheda.dimensioni?.immagine_prodotto?.size?.height + ? tools.adjustSize( + optcatalogo, + scheda.dimensioni?.immagine_prodotto?.size?.height + ) + : undefined, display: 'block', }" @click="click_opendetail()" @@ -143,12 +153,14 @@
-
- - +
+
+ + +
+
+ +
+
+ +
@@ -200,28 +240,7 @@
- -
-
diff --git a/src/components/CMyEditElem/CMyEditElem.ts b/src/components/CMyEditElem/CMyEditElem.ts index 3d2fa4ba..7826e61a 100755 --- a/src/components/CMyEditElem/CMyEditElem.ts +++ b/src/components/CMyEditElem/CMyEditElem.ts @@ -26,6 +26,7 @@ import { CSelectFontSize } from '@src/components/CSelectFontSize' import { CMySize } from '@src/components/CMySize' import { CBorders } from '@src/components/CBorders' import { CMyDimensioni } from '@src/components/CMyDimensioni' +import { CMyText } from '@src/components/CMyText' import MixinMetaTags from '@/mixins/mixin-metatags' import MixinBase from '@/mixins/mixin-base' @@ -42,7 +43,7 @@ export default defineComponent({ CImgTitle, CTitle, LandingFooter, CEventsCalendar, CCardCarousel, COpenStreetMap, CMyPage, CMyPageIntro, CMyEditor, CMyFieldRec, CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation, CMySlider, - CMySize, CBorders, CMyDimensioni, + CMySize, CBorders, CMyDimensioni, CMyText, }, emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem', 'dupPage'], props: { @@ -81,28 +82,6 @@ export default defineComponent({ const $q = useQuasar() const { t } = useI18n() - const posizTextOptions = ref([ - { label: 'In basso', value: costanti.POSIZ_TESTO.IN_BASSO }, - { label: 'A Destra', value: costanti.POSIZ_TESTO.A_DESTRA }, - ]) - const formatOptions = ref([ - { label: 'auto', value: 'CODE128' }, - { label: 'EAN-13', value: 'EAN-13' }, - { label: 'UPC', value: 'upc' }, - ]) - const fontSizeOptions = ref([ - { label: '9', value: '9' }, - { label: '10', value: '10' }, - { label: '11', value: '11' }, - { label: '12', value: '12' }, - { label: '13', value: '13' }, - { label: '14', value: '14' }, - { label: '15', value: '15' }, - { label: '16', value: '16' }, - { label: '18', value: '18' }, - { label: '20', value: '20' }, - { label: '22', value: '22' }, - ]) const animare = ref(0) const slide = ref(0) @@ -243,6 +222,7 @@ export default defineComponent({ function modifElem() { disableSave.value = false elemChanged.value = true + } function modifElemAndSchede() { modifElem() @@ -276,33 +256,57 @@ export default defineComponent({ if (myel.value.catalogo && myel.value.catalogo?.arrSchede) { for (const recscheda of myel.value.catalogo?.arrSchede) { - if (recscheda.scheda && (!recscheda.scheda?.testo_bottom)) { - recscheda.scheda.testo_bottom = { contenuto: '', maxlength: 100 } - } - if (recscheda.scheda && !recscheda.scheda.testo_bottom!.font) { - recscheda.scheda.testo_bottom!.font = { name: '', size: ''} - } - if (recscheda.scheda && (!recscheda.scheda?.testo_right || !recscheda.scheda?.testo_right.font) ) { - recscheda.scheda.testo_right = { contenuto: '', font: { name: '', size: ''} } - } - if (recscheda.scheda && (!recscheda.scheda?.dimensioni.pagina.imgsfondo)) { - recscheda.scheda.dimensioni.pagina = tools.resetRecIDimensioni(recscheda.scheda?.dimensioni.pagina) - } - if (recscheda.scheda && (!recscheda.scheda?.barcode || !recscheda.scheda?.barcode.font)) { - recscheda.scheda.barcode = { - show: false, - format: '', - size: { - width: '2', - height: '33', - }, - font: { - name: '', - size: '11', + if (recscheda.scheda) { + if ((!recscheda.scheda?.testo_bottom)) { + recscheda.scheda.testo_bottom = { contenuto: '', maxlength: 100 } + } + if (!recscheda.scheda.testo_bottom!.font) { + recscheda.scheda.testo_bottom!.font = { name: '', size: '' } + } + if ((!recscheda.scheda?.testo_right || !recscheda.scheda?.testo_right.font)) { + recscheda.scheda.testo_right = { contenuto: '', font: { name: '', size: '' } } + } + if ((!recscheda.scheda?.dimensioni.pagina)) { + recscheda.scheda.dimensioni.pagina = tools.resetRecIPagina(recscheda.scheda?.dimensioni.pagina) + } + if ((!recscheda.scheda?.dimensioni.pagina.dimensioni)) { + recscheda.scheda.dimensioni.pagina = tools.resetRecIPagina(recscheda.scheda?.dimensioni.pagina) + } + if (!recscheda.scheda?.dimensioni?.pagina?.testo_up) { + recscheda.scheda!.dimensioni.pagina.testo_up = tools.resetIText(null) + } + if (!recscheda.scheda?.dimensioni?.pagina?.testo_down) { + recscheda.scheda!.dimensioni.pagina.testo_down = tools.resetIText(null) + } + + if (!recscheda.scheda?.etichette?.novita?.show) { + recscheda.scheda.etichette!.novita = { + show: false, + months: 6, + } + recscheda.scheda.etichette!.bestseller = { + show: false, + primiNInClassifica: 0, + + } + } + + if ((!recscheda.scheda?.barcode || !recscheda.scheda?.barcode.font)) { + recscheda.scheda.barcode = { + show: false, + format: '', + size: { + width: '2', + height: '33', + }, + font: { + name: '', + size: '11', + } } } - } + } } } @@ -322,7 +326,7 @@ export default defineComponent({ if (myel.value.catalogo) { if (!myel.value.catalogo.areadistampa) { myel.value.catalogo.areadistampa = tools.resetRecIAreaDiStampa(null) - myel.value.catalogo.areadistampa.margini = { left: '0.59', top: '0.59', right: '0.59', bottom: '0.28'} + myel.value.catalogo.areadistampa.margini = { left: '0.59', top: '0.59', right: '0.59', bottom: '0.28' } } myel.value.catalogo.areadistampa = tools.resetRecIAreaDiStampa(myel.value.catalogo.areadistampa) @@ -449,15 +453,19 @@ export default defineComponent({ show_separatore: true, name: 'Scheda Nuova', dimensioni, - line_height: 100, numschede_perRiga: 2, numschede_perCol: 2, - posiz_text: costanti.POSIZ_TESTO.A_DESTRA, testo_right: { contenuto: '', + font: { + posiz_text: costanti.POSIZ_TESTO.A_DESTRA, + }, }, testo_bottom: { contenuto: '', + font: { + posiz_text: costanti.POSIZ_TESTO.IN_BASSO, + } }, barcode: { show: false, @@ -487,7 +495,7 @@ export default defineComponent({ _id: objectId(), scheda: newscheda, order: maxorder + 10, - numSchede: 1, + numPagineMax: 0, } ) // console.log('arrschede', myel.value.catalogo!.arrSchede) @@ -533,13 +541,14 @@ export default defineComponent({ myschedadest.scheda = tools.jsonCopy(myschedatocopy.scheda!) myschedadest.scheda!._id = objectId() myschedadest.order = 20 - + myschedadest.scheda!.name = myschedadest.scheda!.name + '_copia' - myschedadest.scheda!.isTemplate = false + myschedadest.scheda!.isTemplate = false }) - + } } + function dupNewScheda(id: string) { if (!myel.value.catalogo!.arrSchede) return @@ -550,9 +559,9 @@ export default defineComponent({ let myscheda = tools.jsonCopy(myfindscheda) delete myscheda._id delete myscheda.scheda!._id - myscheda.numSchede = 1 + myscheda.numPagineMax = 0 myscheda.order = myscheda.order + 10, - myscheda._id = objectId() + myscheda._id = objectId() myscheda.scheda!._id = objectId() myscheda.scheda!.name = myscheda.scheda!.name + '_copia' myscheda.scheda!.isTemplate = false @@ -759,6 +768,8 @@ export default defineComponent({ let arr: any = [] + arr.push({ label: '[Nessuna]', value: '' }) + if (arrschede) { arrschede.forEach((recscheda: ISchedaSingola) => { arr.push({ label: recscheda.scheda!.name, value: recscheda.scheda!._id }) @@ -933,15 +944,12 @@ export default defineComponent({ saveFieldElem, updateCatalogoSizeWidth, dupPage, - posizTextOptions, tabScheda, addNewScheda, dupNewScheda, delRecScheda, SchedeOpt, addProdSpeciale, - formatOptions, - fontSizeOptions, idSchedaDaCopiare, copyfromTemplate, modifElemAndSchede, diff --git a/src/components/CMyEditElem/CMyEditElem.vue b/src/components/CMyEditElem/CMyEditElem.vue index f3babc8d..a92e65df 100755 --- a/src/components/CMyEditElem/CMyEditElem.vue +++ b/src/components/CMyEditElem/CMyEditElem.vue @@ -979,7 +979,7 @@ v-on:keyup.enter="saveElem" > - +
-->
@@ -1343,7 +1343,7 @@ label="Selezione Collane/Editori" icon="fas fa-play-circle" > -
+
+ + + @@ -1398,9 +1411,8 @@ :options="shared_consts.VERSIONI_PRODOTTO" @update:model-value="modifElem" multiple - dense label="Escludi" - style="width: 150px" + style="width: 300px" emit-value map-options > @@ -1414,9 +1426,8 @@ :options="Products.publishers" @update:model-value="modifElem" multiple - dense label="Editori" - style="width: 150px" + style="width: 300px" emit-value map-options option-value="_id" @@ -1439,6 +1450,7 @@ @@ -1536,7 +1548,6 @@ > - - +
+
+ + + + +
-
+
+ + @@ -1628,9 +1672,8 @@ :options="shared_consts.VERSIONI_PRODOTTO" @update:model-value="modifElem" multiple - dense label="Escludi" - style="width: 150px" + style="width: 300px" emit-value map-options > @@ -1646,9 +1689,8 @@ :options="Products.publishers" @update:model-value="modifElem" multiple - dense label="Editori" - style="width: 150px" + style="width: 300px" emit-value map-options option-value="_id" @@ -1670,7 +1712,6 @@ filled use-input new-value-mode="add-unique" - dense style="width: 350px" />
@@ -1681,14 +1722,36 @@ dense-toggle expand-separator label="Pagina" + :disabled="recscheda.scheda.linkIdTemplate" icon="fas fa-play-circle" > + + + + @@ -1711,6 +1776,7 @@ dense-toggle expand-separator label="Schede" + :disabled="recscheda.scheda.linkIdTemplate" icon="fas fa-play-circle" > - - - + -
- Parole Chiave: {autore} {titolo} {descrizione} - {descrizione_estesa} {prezzo} -
- - - - - - - - - - - - +
+ + + + + + + + +
@@ -1928,14 +1972,22 @@ label="Prima Pagina" icon="fas fa-play-circle" > - Prima Pagina:
+ +

@@ -1948,12 +2000,23 @@ label="Ultima Pagina" icon="fas fa-play-circle" > - +
+ + + +
({ width: '', height: '', + gap: '', + fit: '', }), }, label: { @@ -37,6 +39,11 @@ export default defineComponent({ required: false, default: false, }, + fit: { + type: Boolean, + required: false, + default: false, + }, addstr: { type: Boolean, required: false, @@ -75,6 +82,9 @@ export default defineComponent({ function modifValueGap(value: any) { emit('update:modelValue', { ...internalModel, gap: value }); } + function modifValueFit(value: any) { + emit('update:modelValue', { ...internalModel, fit: value }); + } function modifValueRatio(value: any) { // modifValueWidth(0) @@ -104,8 +114,10 @@ export default defineComponent({ modifValueHeight, modifValueRatio, modifValueGap, + modifValueFit, internalModel, ratio, + tools, keepRatio, } } diff --git a/src/components/CMySize/CMySize.vue b/src/components/CMySize/CMySize.vue index 301e665b..7ab9a22a 100755 --- a/src/components/CMySize/CMySize.vue +++ b/src/components/CMySize/CMySize.vue @@ -28,7 +28,7 @@ :disable="!keepRatio" @update:model-value="modifValueRatio" > - + + +
diff --git a/src/components/CMyText/CMyText.scss b/src/components/CMyText/CMyText.scss new file mode 100755 index 00000000..e69de29b diff --git a/src/components/CMyText/CMyText.ts b/src/components/CMyText/CMyText.ts new file mode 100755 index 00000000..f969bea1 --- /dev/null +++ b/src/components/CMyText/CMyText.ts @@ -0,0 +1,79 @@ +import { defineComponent, ref, computed, PropType, toRef, reactive, watch } from 'vue' +import { IOperators, ISize, IText } from 'model' + +import { useI18n } from '@/boot/i18n' +import { useQuasar } from 'quasar' + +import { tools } from '@store/Modules/tools' + +import { costanti } from '@costanti' + +import { CMySlider } from '@src/components/CMySlider' +import { CMyFieldRec } from '@src/components/CMyFieldRec' + +import { shared_consts } from '@/common/shared_vuejs' + +export default defineComponent({ + name: 'CMyText', + emits: ['update:modelValue', 'modifElem', 'saveFieldElem',], + components: { CMySlider, CMyFieldRec }, + props: { + modelValue: { + type: Object as PropType, + required: true, + }, + label: { + type: String, + required: true, + }, + disable: { + type: Boolean, + required: false, + default: false, + }, + show_maxlength: { + type: Boolean, + required: false, + default: true, + }, + }, + setup(props, { emit }) { + const $q = useQuasar() + const { t } = useI18n() + + const internalModel = reactive({ ...props.modelValue }) + + function modifElem() { + // console.log('modifElem') + emit('update:modelValue', { ...internalModel }); + emit('modifElem', null); + } + function update_col() { + // console.log('update_col') + emit('update:modelValue', { ...internalModel }); + emit('modifElem', null); + } + + function saveFieldElem() { + emit('update:modelValue', { ...internalModel }); + emit('saveFieldElem', null); + } + + // Sincronizzare i cambiamenti esterni con internalModel quando props cambiano + watch(() => props.modelValue, (newModel: any) => { + Object.assign(internalModel, newModel); + + }, { immediate: true }); + + return { + t, + shared_consts, + internalModel, + modifElem, + tools, + costanti, + saveFieldElem, + update_col, + } + } +}) diff --git a/src/components/CMyText/CMyText.vue b/src/components/CMyText/CMyText.vue new file mode 100755 index 00000000..60d24d21 --- /dev/null +++ b/src/components/CMyText/CMyText.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/components/CMyText/index.ts b/src/components/CMyText/index.ts new file mode 100755 index 00000000..5e78ef48 --- /dev/null +++ b/src/components/CMyText/index.ts @@ -0,0 +1 @@ +export {default as CMyText} from './CMyText.vue' diff --git a/src/model/GlobalStore.ts b/src/model/GlobalStore.ts index dde81bcf..f552fcc9 100755 --- a/src/model/GlobalStore.ts +++ b/src/model/GlobalStore.ts @@ -688,10 +688,14 @@ export interface ISize { width?: string height?: string gap?: string + fit?: string } export interface IFont { name?: string size?: string + line_height?: number + posiz_text?: number + perc_text?: string } export interface IBorder { @@ -706,6 +710,21 @@ export interface IImg { fit?: string } +export interface INovita { + show?: boolean + months?: number +} + +export interface IBestseller { + show?: boolean + primiNInClassifica?: number +} + +export interface IEtichette { + novita?: INovita + bestseller?: IBestseller +} + export interface IBarCode { show?: boolean format?: string @@ -714,6 +733,12 @@ export interface IBarCode { widthlines?: number } +export interface IPagina { + dimensioni?: IDimensioni + testo_up?: IText + testo_down?: IText +} + export interface IDimensioni { size?: ISize margini?: IBorder @@ -743,7 +768,7 @@ export interface IText { } export interface IElementiScheda { - pagina: IDimensioni + pagina: IPagina riga: IDimensioni scheda_prodotto: IDimensioni immagine_prodotto: IDimensioni @@ -753,15 +778,15 @@ export interface IMyScheda { _id?: string, idapp?: string, isTemplate?: boolean, + linkIdTemplate?: string, name?: string, - line_height?: number numschede_perRiga?: number numschede_perCol?: number show_separatore: boolean testo_right?: IText testo_bottom?: IText - posiz_text?: number barcode?: IBarCode, + etichette?: IEtichette, dimensioni: IElementiScheda productTypes?: number[] @@ -777,7 +802,7 @@ export interface ISchedaSingola { _id?: string scheda?: IMyScheda, order?: number, - numSchede?: number, + numPagineMax?: number, // In Memoria arrProdToShow?: IProduct[][][] @@ -785,12 +810,13 @@ export interface ISchedaSingola { export interface ICatalogo { //++AddCATALOGO_FIELDS - productTypes: number[] - excludeproductTypes: number[] - formato: string[] - Categoria: string[] - Editore: string[] - pdf: boolean + productTypes?: number[] + excludeproductTypes?: number[] + formato?: string[] + Categoria?: string[] + Editore?: string[] + sort?: number + pdf?: boolean pdf_filename?: string printable?: boolean diff --git a/src/model/Products.ts b/src/model/Products.ts index 185d2e33..a0e83758 100755 --- a/src/model/Products.ts +++ b/src/model/Products.ts @@ -42,6 +42,21 @@ export interface IProductInfo { productTypes?: number[] versioneGM?: string short_descr: string + + totaleVenduti?: number, + venditeLastM?: number, + venditeLast6M?: number, + venditeLastY?: number, + venditeLast2Y?: number, + dataUltimoOrdine?: Date, + rank3M?: number, + rank6M?: number, + rank1Y?: number, + + descrizione_breve_macro?: string, + descrizione_completa_macro?: string, + sottotitolo?: string, + link_macro?: string, } export interface IVariazione { @@ -76,6 +91,7 @@ export interface IProdView { export interface IProduct { _id?: any + indiceRanking?: number active?: boolean isbn?: string idProductInfo?: string, diff --git a/src/rootgen/admin/importdata/importdata.ts b/src/rootgen/admin/importdata/importdata.ts index b14183c8..2fc869d2 100755 --- a/src/rootgen/admin/importdata/importdata.ts +++ b/src/rootgen/admin/importdata/importdata.ts @@ -79,9 +79,17 @@ export default defineComponent({ value: shared_consts.Cmd.CAT_NO_SPAZI }, { - label: 'Importa da JSON (ImportaMacro)', + label: 'Importa Cataloghi da JSON (ImportaMacro)', value: shared_consts.Cmd.MACRO_CATALOGO_JSON }, + { + label: 'Importa Ranking da JSON (ImportaMacro)', + value: shared_consts.Cmd.MACRO_RANKING + }, + { + label: 'Importa Descrizioni e Link da Sito GruppoMacro (XML)', + value: shared_consts.Cmd.MACRO_DESCRELINKSITOWEB + }, ] ) @@ -356,8 +364,17 @@ export default defineComponent({ return importCmdTxt(cmd, testo); } else if (cmd === shared_consts.Cmd.CAT_NO_SPAZI) { return importNoSpazi(cmd, testo); - } else if (cmd === shared_consts.Cmd.MACRO_CATALOGO_JSON) { + } else if ((cmd === shared_consts.Cmd.MACRO_CATALOGO_JSON || cmd === shared_consts.Cmd.MACRO_RANKING)) { return importMacroCatalogoJson(cmd, testo); + } else if (cmd === shared_consts.Cmd.MACRO_DESCRELINKSITOWEB) { + + console.log('TESTO PRIMA:', testo) + const testoJSON = tools.convertXMLStringToJSON(testo) + + const testoJSONtoPrint = JSON.stringify(testoJSON, null, 2) + console.log(testoJSONtoPrint) + + return importMacroCatalogoJson(cmd, testoJSONtoPrint) } function addfield(col: number, field: string, rec: any, opt: any) { @@ -401,7 +418,7 @@ export default defineComponent({ if (cmd === shared_consts.Cmd.PRODUCTS_V2) { skipfirstrow.value = false - } else if (cmd === shared_consts.Cmd.MACRO_CATALOGO_JSON) { + } else if ((cmd === shared_consts.Cmd.MACRO_CATALOGO_JSON) || (cmd === shared_consts.Cmd.MACRO_RANKING) || (cmd === shared_consts.Cmd.MACRO_DESCRELINKSITOWEB)) { skipfirstrow.value = false } @@ -433,8 +450,6 @@ export default defineComponent({ strris += ' istat:\'' + tools.addslashes(rec[0]) + '\',' strris += ' comune:\'' + tools.addslashes(rec[1]) + '\',' strris += ' prov:\'' + tools.addslashes(rec[2]) + '\'' - - } else if (cmd === shared_consts.Cmd.PRODUCTS) { if (!primo) { strris += ', ' @@ -450,8 +465,8 @@ export default defineComponent({ col++; strris += addfield(col, 'weight', rec, { isnumero: true }); col++; strris += addfield(col, 'unit', rec, {}); col++; - strris += addfield(col, 'link', rec, {}); col++; - + strris += addfield(col, 'link', rec, {}); col++; + strris += addfield(col, 'perc_iva', rec, {}); col++; strris += addfield(col, 'price_acquistato', rec, { isnumero: true, iseuro: true }); col++; @@ -542,7 +557,7 @@ export default defineComponent({ try { console.log('ev', ev) reset() - + if (ev.target && ev.target.files) { const file = ev.target.files[0] const reader = new FileReader() @@ -580,8 +595,8 @@ export default defineComponent({ } function eseguiCmdCatalogoJson() { - let options = { aggiornaStockQty: checkAggiornaQta.value } - + let options = { aggiornaStockQty: checkAggiornaQta.value } + userStore.importToServerCmd($q, t, cosafare.value, { arrdata: risultato.value, options }, true) risultato.value = '' } diff --git a/src/rootgen/admin/importdata/importdata.vue b/src/rootgen/admin/importdata/importdata.vue index a3dc6855..48fef9ad 100755 --- a/src/rootgen/admin/importdata/importdata.vue +++ b/src/rootgen/admin/importdata/importdata.vue @@ -19,6 +19,8 @@ + +
@@ -28,7 +30,7 @@
{{ risraw }}
-
+


diff --git a/src/store/Modules/costanti.ts b/src/store/Modules/costanti.ts index 6a282f40..8ca3a86d 100755 --- a/src/store/Modules/costanti.ts +++ b/src/store/Modules/costanti.ts @@ -500,19 +500,8 @@ export const costanti = { TESTO_BORDATO: 5, }, - SORT_ALPHA: 0, + SORT_DEFAULT: 0, SORT_PUBDATE: 1, - - - ORDINAMENTO_CATALOGHI: [ - { - label: 'Data di Uscita', - value: 1, - }, - { - label: 'Alfabetico', - value: 0, - }, - ], + SORT_BESTSELLER: 2, } diff --git a/src/store/Modules/fieldsTable.ts b/src/store/Modules/fieldsTable.ts index 6b0e20a4..6ce9bd6f 100755 --- a/src/store/Modules/fieldsTable.ts +++ b/src/store/Modules/fieldsTable.ts @@ -161,6 +161,9 @@ export const colISize = [ export const colIText = [ AddCol({ name: 'contenuto', label_trans: 'catalogo.contenuto', fieldtype: costanti.FieldType.html }), AddCol({ name: 'maxlength', label_trans: 'catalogo.maxlength', fieldtype: costanti.FieldType.number }), + AddCol({ name: 'posiz_text', label_trans: 'catalogo.posiz_text', fieldtype: costanti.FieldType.number }), + AddCol({ name: 'perc_text', label_trans: 'catalogo.perc_text', fieldtype: costanti.FieldType.string }), + AddCol({ name: 'line_height', label_trans: 'catalogo.line_height', fieldtype: costanti.FieldType.number }), ] export const colmyIImg = [ AddCol({ name: 'imagefile', label_trans: 'iimg.imagefile', fieldtype: costanti.FieldType.image }), @@ -170,6 +173,7 @@ export const colmyIImg = [ export const colmyScheda = [ AddCol({ name: 'name', label_trans: 'scheda.name', fieldtype: costanti.FieldType.string }), AddCol({ name: 'isTemplate', label_trans: 'scheda.isTemplate', fieldtype: costanti.FieldType.boolean }), + AddCol({ name: 'linkIdTemplate', label_trans: 'scheda.linkIdTemplate', fieldtype: costanti.FieldType.string }), AddCol({ name: 'widthscheda', label_trans: 'scheda.widthscheda', fieldtype: costanti.FieldType.number }), AddCol({ name: 'widthpag', label_trans: 'scheda.widthpag', fieldtype: costanti.FieldType.number }), AddCol({ name: 'widthimg', label_trans: 'scheda.widthimg', fieldtype: costanti.FieldType.number }), @@ -180,8 +184,6 @@ export const colmyScheda = [ AddCol({ name: 'margine_top', label_trans: 'scheda.margine_top', fieldtype: costanti.FieldType.number }), AddCol({ name: 'margine_pagina', label_trans: 'scheda.margine_pagina', fieldtype: costanti.FieldType.string }), AddCol({ name: 'margine_riga', label_trans: 'scheda.margine_riga', fieldtype: costanti.FieldType.string }), - AddCol({ name: 'posiz_text', label_trans: 'catalogo.posiz_text', fieldtype: costanti.FieldType.number }), - AddCol({ name: 'line_height', label_trans: 'catalogo.line_height', fieldtype: costanti.FieldType.number }), AddCol({ name: 'productTypes', label_trans: 'productTypes', fieldtype: costanti.FieldType.number }), AddCol({ name: 'excludeproductTypes', label_trans: 'excludeproductTypes', fieldtype: costanti.FieldType.number }), diff --git a/src/store/Modules/tools.ts b/src/store/Modules/tools.ts index cdbc1abb..a169cd88 100644 --- a/src/store/Modules/tools.ts +++ b/src/store/Modules/tools.ts @@ -22,6 +22,7 @@ import { IText, IAreaDiStampa, ICatalogo, + IPagina, } from '@model' import MixinBase from '@/mixins/mixin-base' @@ -351,6 +352,31 @@ export const tools = { }, ], + posizTextOptions: [ + { label: 'In basso', value: costanti.POSIZ_TESTO.IN_BASSO }, + { label: 'A Destra', value: costanti.POSIZ_TESTO.A_DESTRA }, + ], + + fontSizeOptions: [ + { label: '9', value: '9' }, + { label: '10', value: '10' }, + { label: '11', value: '11' }, + { label: '12', value: '12' }, + { label: '13', value: '13' }, + { label: '14', value: '14' }, + { label: '15', value: '15' }, + { label: '16', value: '16' }, + { label: '18', value: '18' }, + { label: '20', value: '20' }, + { label: '22', value: '22' }, + ], + + formatOptions: [ + { label: 'auto', value: 'CODE128' }, + { label: 'EAN-13', value: 'EAN-13' }, + { label: 'UPC', value: 'upc' }, + ], + SelectListFormatPDF: [ { label: 'a4 (mm)', value: [210, 297] }, { label: '22,60 x 31,26 (in mm)', value: [226.0, 312.6] }, @@ -9223,6 +9249,23 @@ export const tools = { rec.contenuto = '' rec.maxlength = 0 + rec.font = { + line_height: 1, + posiz_text: 0, + perc_text: '50%', + name: '', + size: '14px', + } + } + + if (!rec.font) { + rec.font = { + line_height: 1, + posiz_text: 0, + perc_text: '50%', + name: '', + size: '14px', + } } return rec @@ -9253,6 +9296,35 @@ export const tools = { return myrec }, + resetRecIPagina(rec: IPagina | null) { + + let myrec: IPagina = {} + + if (!rec) { + let dimensioni: IDimensioni = this.resetRecIDimensioni(null) + + myrec = { + dimensioni, + testo_up: this.resetIText(null), + testo_down: this.resetIText(null), + } + } + + if (!myrec.dimensioni) { + myrec.dimensioni = this.resetRecIDimensioni(null) + } + if (!myrec.testo_up) { + myrec.testo_up = this.resetIText(null) + } + if (!myrec.testo_down) { + myrec.testo_down = this.resetIText(null) + } + + + + return myrec + }, + resetRecIAreaDiStampa(rec: IAreaDiStampa | null) { let myrec: IAreaDiStampa = {} @@ -9304,19 +9376,68 @@ export const tools = { } }, - getValueAndSuffix(myvalue: any): {value: number, suffix: string} { + getValueAndSuffix(myvalue: any): { value: number, suffix: string } { if (!myvalue) { - return {value: 0, suffix: ''}; + return { value: 0, suffix: '' }; } // Estrae l'unità di misura const unit = myvalue.replace(/[\d.]/g, ''); // Ottiene il suffisso (es. 'px') const numericalValue = parseFloat(myvalue) || 0; // Converti la parte numerica in float - return { value: numericalValue, suffix: unit}; // Restituisce il valore con il suffisso + return { value: numericalValue, suffix: unit }; // Restituisce il valore con il suffisso }, + xmlToJson(xml: any) { + // Converte un XML in un oggetto JavaScript + var obj: any = {}; + if (xml.nodeType === 1) { // Elemento + // Se ha attributi, aggiungili all'oggetto + if (xml.attributes.length > 0) { + obj["@attributes"] = {} + for (var j = 0; j < xml.attributes.length; j++) { + var attribute = xml.attributes.item(j); + obj["@attributes"][attribute.nodeName] = attribute.nodeValue; + } + } + } else if (xml.nodeType === 3) { // Testo + obj = xml.nodeValue; + } + + // Se ha figli, applica la funzione ricorsivamente + if (xml.hasChildNodes()) { + for (var i = 0; i < xml.childNodes.length; i++) { + var item = xml.childNodes.item(i); + var nodeName = item.nodeName; + if (typeof (obj[nodeName]) === "undefined") { + obj[nodeName] = this.xmlToJson(item); + } else { + if (typeof (obj[nodeName]) === "object") { + // Se l'elemento esiste già, trasformalo in un array + if (typeof (obj[nodeName].push) === "undefined") { + var old = obj[nodeName]; + obj[nodeName] = []; + obj[nodeName].push(old); + } + obj[nodeName].push(this.xmlToJson(item)); + } else { + obj[nodeName] = [obj[nodeName]]; + obj[nodeName].push(this.xmlToJson(item)); + } + } + } + } + return obj + }, + + // Esempio di utilizzo + convertXMLStringToJSON(xmlString: string): any { + var parser = new DOMParser(); + var xmlDoc = parser.parseFromString(xmlString, "application/xml"); + var jsonResult = this.xmlToJson(xmlDoc); + return jsonResult; + }, // FINE ! // getLocale() { diff --git a/src/store/Products.ts b/src/store/Products.ts index 135f2b6d..8a809557 100755 --- a/src/store/Products.ts +++ b/src/store/Products.ts @@ -1277,6 +1277,10 @@ export const useProducts = defineStore('Products', { const maxDescriptionLength = testo.maxlength ?? 100; const description = myproduct.productInfo.short_descr || ''; const long_descr = myproduct.productInfo.description || ''; + const date_pub = tools.getstrDateShort(myproduct.productInfo.date_publishing) || ''; + const ranking_globale = myproduct.productInfo.rank1Y || 0; + const ranking = myproduct.indiceRanking! || 0; + const venduti = myproduct.productInfo.totaleVenduti || 0; const truncatedDescription = description.length > maxDescriptionLength ? description.substring(0, description.lastIndexOf(' ', maxDescriptionLength)) + '...' @@ -1286,6 +1290,20 @@ export const useProducts = defineStore('Products', { ? long_descr.substring(0, long_descr.lastIndexOf(' ', maxDescriptionLength)) + '...' : long_descr; + + const long_descr_macro = myproduct.productInfo.descrizione_completa_macro || ''; + const descrizione_completa_macro = long_descr_macro.length > maxDescriptionLength + ? long_descr_macro.substring(0, long_descr_macro.lastIndexOf(' ', maxDescriptionLength)) + '...' + : long_descr_macro; + + const short_descr = myproduct.productInfo.descrizione_breve_macro || ''; + const descrizione_breve_macro = short_descr.length > maxDescriptionLength + ? short_descr.substring(0, short_descr.lastIndexOf(' ', maxDescriptionLength)) + '...' + : short_descr; + + const sottotitolo = myproduct.productInfo.sottotitolo || ''; + const link_macro = myproduct.productInfo.link_macro || ''; + const prezzo = myproduct.arrvariazioni ? myproduct.arrvariazioni[0].price?.toFixed(2) : '' const prezzo_scontato = myproduct.arrvariazioni ? myproduct.arrvariazioni[0].sale_price?.toFixed(2) : '' const misure = myproduct.arrvariazioni ? myproduct.arrvariazioni[0].misure : '' @@ -1301,10 +1319,18 @@ export const useProducts = defineStore('Products', { '{descrizione_estesa}': truncatedlongDescription || '', '{pagine}': pagine || '', '{misure}': misure || '', + '{date_pub}': date_pub || '', + '{ranking_globale}': ranking_globale || '', + '{ranking}': ranking || '', + '{venduti}': venduti || '', '{formato}': formato || '', '{prezzo}': prezzo || '', '{scale}': scale || '', '{prezzo_scontato}': prezzo_scontato || '', + '{descrizione_completa_macro}': descrizione_completa_macro || '', + '{descrizione_breve_macro}': descrizione_breve_macro || '', + '{link_macro}': link_macro || '', + '{sottotitolo}': sottotitolo || '', }; // Esegue le sostituzioni diff --git a/src/views/ecommerce/catalogo/catalogo.scss b/src/views/ecommerce/catalogo/catalogo.scss index 2823611e..964ac536 100755 --- a/src/views/ecommerce/catalogo/catalogo.scss +++ b/src/views/ecommerce/catalogo/catalogo.scss @@ -85,8 +85,28 @@ body { font-family: 'DINPro-BoldItalic', sans-serif; } - .book-details { font-family: 'DINPro', sans-serif; margin-bottom: calc(5 * var(--scalecatalog) * 1px); } + + +.book-descr-estesa { + font-family: 'DINPro', sans-serif; + 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); +} diff --git a/src/views/ecommerce/catalogo/catalogo.ts b/src/views/ecommerce/catalogo/catalogo.ts index 9f000ead..25796b00 100755 --- a/src/views/ecommerce/catalogo/catalogo.ts +++ b/src/views/ecommerce/catalogo/catalogo.ts @@ -14,7 +14,7 @@ import { CProductCard } from '@src/components/CProductCard' import { CMySelect } from '@src/components/CMySelect' import { CContainerCatalogoCard } from '@src/components/CContainerCatalogoCard' import { CSelectUserActive } from '@src/components/CSelectUserActive' -import { ICatalogo, IFilterCatalogo, IMyScheda, IProdView, IProduct, ISchedaSingola, ISearchList } from 'model' +import { ICatalogo, IDimensioni, IFilterCatalogo, IMyScheda, IProdView, IProduct, ISchedaSingola, ISearchList } from 'model' // import { VueHtmlToPaper } from 'vue-html-to-paper' import html2pdf from 'html2pdf.js' @@ -192,7 +192,7 @@ export default defineComponent({ } function calcArrProducts() { - // console.log('calcArrProducts') + console.log('calcArrProducts') // eventuali titoli specifici estratti dall'array di Prodotti Selezionati //const searchtext = getSearchText() @@ -270,20 +270,12 @@ export default defineComponent({ }); } - // console.log('filter.value.sort', filter.value.sort) - // sort using filter.value.sort : - if (filter.value.sort === costanti.SORT_PUBDATE) { - - arrprod = arrprod.sort((a: IProduct, b: IProduct) => { - return b.productInfo.date_publishing_ts - a.productInfo.date_publishing_ts - }) - - } else if (filter.value.sort === costanti.SORT_ALPHA) { - - } + arrprod = getProductsSorted(arrprod, filter.value.sort); arrProducts.value = arrprod + populateDataWithlinkIdTemplate() + generatearrProdToViewSorted() loaddata() @@ -291,7 +283,55 @@ export default defineComponent({ refreshpage.value = false } - function getProductsFilteredByScheda(scheda: IMyScheda) { + + function sovrascriviSchedaFromTemplate(idTemplate: string, origScheda: ISchedaSingola) { + if (!props.optcatalogo) + return + + const arrschede: ISchedaSingola[] = globalStore.getMySchede() + const myfindscheda = arrschede.find((recscheda: ISchedaSingola) => recscheda.scheda?._id === idTemplate) + + let mynewscheda = tools.jsonCopy(origScheda) + + const linkIdTemplate = origScheda.scheda?.linkIdTemplate + const precname = origScheda.scheda?.name + + if (myfindscheda) { + let myschedatocopy = tools.jsonCopy(myfindscheda) + + if (myschedatocopy) { + myschedatocopy.scheda._id = origScheda.scheda?._id + myschedatocopy.scheda.isTemplate = false + myschedatocopy.scheda.name = precname + myschedatocopy.scheda.linkIdTemplate = linkIdTemplate + + return myschedatocopy.scheda + } + } + + return null + } + + function populateDataWithlinkIdTemplate() { + + if (props.optcatalogo) { + + for (const recscheda of props.optcatalogo.arrSchede!) { + if (recscheda.scheda?.linkIdTemplate) { + // ricopia da Template: + const myscheda = sovrascriviSchedaFromTemplate(recscheda.scheda?.linkIdTemplate, recscheda) + if (myscheda) { + recscheda.scheda = myscheda + } + + } + } + } + + } + + + function getProductsFilteredByScheda(scheda: IMyScheda): IProduct[] { const searchtext = scheda.arrProdottiSpeciali @@ -346,7 +386,7 @@ export default defineComponent({ 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))) + hasProductTypes = !scheda.productTypes || (scheda.productTypes && (product.productInfo.productTypes || []).some((item: any) => scheda.productTypes!.includes(item))) } if (!boolfiltroVuotoEditore) { hasPublished = !scheda.editore || (scheda.editore && scheda.editore.includes(product.productInfo.idPublisher!)) @@ -354,7 +394,7 @@ export default defineComponent({ 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))) + hasExcludeProductTypes = !scheda.excludeproductTypes || (scheda.excludeproductTypes && (product.productInfo.productTypes || []).every((item: any) => scheda.excludeproductTypes!.includes(item))) } return searchMatch && hasCategoria && hasAuthor && hasProductTypes && hasPublished && !hasExcludeProductTypes; @@ -364,15 +404,35 @@ export default defineComponent({ } }) - // console.log('filter.value.sort', filter.value.sort) - // sort using filter.value.sort : - if (scheda.sort === costanti.SORT_PUBDATE) { + arrprod = getProductsSorted(arrprod, scheda?.sort!); + + return arrprod + + } + + function getProductsSorted(arrprod: IProduct[], sort: number) { + console.log('getProductsSorted', sort) + if (sort === costanti.SORT_PUBDATE) { arrprod = arrprod.sort((a: IProduct, b: IProduct) => { return b.productInfo.date_publishing_ts - a.productInfo.date_publishing_ts }) + } else if (sort === costanti.SORT_BESTSELLER) { - } else if (scheda.sort === costanti.SORT_ALPHA) { + arrprod = arrprod.sort((a: IProduct, b: IProduct) => { + return b.productInfo.rank1Y! - a.productInfo.rank1Y! + }) + + arrprod = arrprod.map((product, index) => { + return { + ...product, + indiceRanking: index + 1 + }; + }) + + console.log('arr', arrprod) + + } else if (sort === costanti.SORT_DEFAULT) { } @@ -423,20 +483,43 @@ export default defineComponent({ } function generatearrProdToViewSorted() { - // console.log('generatearrProdToViewSorted') + console.log('generatearrProdToViewSorted', arrProducts.value) // Svuota arrProdToView.value = [] + // gia filtrati + const arrGeneraleProdotti = arrProducts.value; + + let indprod = 0 + let indprodGenerale = 0 + for (const recscheda of props.optcatalogo.arrSchede!) { if (recscheda && recscheda.scheda) { let schedePerRiga = recscheda.scheda.numschede_perRiga || 1 let schedePerCol = recscheda.scheda.numschede_perCol || 1 let schedePerPagina = schedePerRiga * schedePerCol - // Filtra i prodotti in base ai filtri impostati ! - const arrProdFiltrati = getProductsFilteredByScheda(recscheda.scheda) - let indprod = 0 + let arrProdFiltrati: IProduct[] = [] + + if (recscheda.scheda.productTypes!.length > 0) { + // Filtra i prodotti in base ai filtri impostati ! + arrProdFiltrati = getProductsFilteredByScheda(recscheda.scheda) + indprod = 0 + } else { + if (recscheda.scheda?.sort! > 0) { + arrProdFiltrati = getProductsSorted(arrGeneraleProdotti, recscheda.scheda.sort!); + indprod = 0 + } else { + indprod = indprodGenerale + arrProdFiltrati = arrGeneraleProdotti + } + + + } + + // console.log('arrProdFiltrati indiceRanking = ', arrProdFiltrati[0].indiceRanking) + let indadded = 0 recscheda.arrProdToShow = [] @@ -463,17 +546,27 @@ export default defineComponent({ recscheda.arrProdToShow[pagina][riga] = []; } + console.log('RANKING: ', result.myrec.indiceRanking!) + recscheda.arrProdToShow[pagina][riga][col] = result.myrec indadded++ } } } + + if (recscheda.numPagineMax! > 0) { + if (pagina + 1 >= recscheda.numPagineMax!) + break; // fine pagine + } + } // console.log('*** arrProdToShow', recscheda.arrProdToShow) } } + + console.log('Fine...') } function getNextProd() { @@ -720,51 +813,8 @@ export default defineComponent({ } function groupedPages(recscheda: ISchedaSingola) { - - let numschedeattuali = 0 - if (recscheda.scheda) { - const schedePerRiga = recscheda.scheda.numschede_perRiga || 1 - const schedePerCol = recscheda.scheda.numschede_perCol || 1 - const schedePerPagina = schedePerRiga * schedePerCol - - let indiceprodotto = 0 - - const pages = [] - - // Iterate attraverso l'array prodotti con step = schedePerPagina - for (let pageStart = 0; pageStart < arrProducts.value.length; pageStart += schedePerPagina) { - const page = [] - - // Crea le righe per questa pagina - for (let rowStart = 0; rowStart < schedePerRiga; rowStart++) { - const row = [] - - // Riempi ogni riga con il numero corretto di prodotti - for (let col = 0; col < schedePerCol; col++) { - const productIndex = pageStart + (rowStart * schedePerRiga) + col - row.push(indiceprodotto) - indiceprodotto++ - } - - page.push(row) - } - - numschedeattuali++ - pages.push(page) - - if (recscheda.numSchede! > 0) { - if (numschedeattuali >= recscheda.numSchede!) - return pages - } - } - - return pages - } - - return null - + return recscheda.arrProdToShow } - function generateStyleCatalogo(optcatalogo: ICatalogo) { return { @@ -773,19 +823,19 @@ export default defineComponent({ } function generateStylePageScheda(optcatalogo: ICatalogo, scheda: IMyScheda) { - const marginTop = scheda.dimensioni?.pagina?.margini?.top ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.margini?.top) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.top) ?? '') - const marginBottom = scheda.dimensioni?.pagina?.margini?.bottom ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.margini?.bottom) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.bottom) ?? '') - const marginLeft = scheda.dimensioni?.pagina?.margini?.left ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.margini?.left) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.left) ?? '') - const marginRight = scheda.dimensioni?.pagina?.margini?.right ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.margini?.right): (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.right) ?? '') + const marginTop = scheda.dimensioni?.pagina?.dimensioni?.margini?.top ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.margini?.top) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.top) ?? '') + const marginBottom = scheda.dimensioni?.pagina?.dimensioni?.margini?.bottom ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.margini?.bottom) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.bottom) ?? '') + const marginLeft = scheda.dimensioni?.pagina?.dimensioni?.margini?.left ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.margini?.left) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.left) ?? '') + const marginRight = scheda.dimensioni?.pagina?.dimensioni?.margini?.right ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.margini?.right) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.right) ?? '') - const paddingTop = scheda.dimensioni?.pagina?.padding?.top ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.padding?.top) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.top) ?? '') - const paddingBottom = scheda.dimensioni?.pagina?.padding?.bottom ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.padding?.bottom) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.bottom) ?? '') - const paddingLeft = scheda.dimensioni?.pagina?.padding?.left ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.padding?.left) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.left) ?? '') - const paddingRight = scheda.dimensioni?.pagina?.padding?.right ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.padding?.right) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.right) ?? '') + const paddingTop = scheda.dimensioni?.pagina?.dimensioni?.padding?.top ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.padding?.top) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.top) ?? '') + const paddingBottom = scheda.dimensioni?.pagina?.dimensioni?.padding?.bottom ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.padding?.bottom) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.bottom) ?? '') + const paddingLeft = scheda.dimensioni?.pagina?.dimensioni?.padding?.left ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.padding?.left) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.left) ?? '') + const paddingRight = scheda.dimensioni?.pagina?.dimensioni?.padding?.right ? tools.adjustSize(props.optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.padding?.right) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.right) ?? '') // Esiste un immagine di sfondo specifica della singola pagina ? - let fileimg = scheda.dimensioni?.pagina?.imgsfondo?.imagefile - let backgroundSize = scheda.dimensioni?.pagina?.imgsfondo?.fit + let fileimg = scheda.dimensioni?.pagina?.dimensioni?.imgsfondo?.imagefile + let backgroundSize = scheda.dimensioni?.pagina?.dimensioni?.imgsfondo?.fit if (fileimg) { fileimg = fileimg ? `url(${costanti.DIR_UPLOAD + costanti.DIR_SCHEDA + fileimg})` : '' } @@ -799,8 +849,56 @@ export default defineComponent({ let backgroundImage = fileimg ?? '' - let width = scheda.dimensioni?.pagina?.size?.width ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.size?.width) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.width) ?? '') - let height = scheda.dimensioni?.pagina?.size?.height ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.size?.height) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.height) ?? '') + let width = scheda.dimensioni?.pagina?.dimensioni?.size?.width ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.size?.width) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.width) ?? '') + let height = scheda.dimensioni?.pagina?.dimensioni?.size?.height ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.size?.height) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.height) ?? '') + + return { + marginBottom, + marginTop, + marginLeft, + marginRight, + paddingBottom, + paddingTop, + paddingLeft, + paddingRight, + backgroundImage, + backgroundSize, + '--width': width, + '--height': height, + ...(width ? { width: `${width} !important;` } : {}), + ...(height ? { height: `${height} !important;` } : {}) // Aggiungi l'altezza solo se è valorizzata + }; + } + + function generateStyleByPageDim(optcatalogo: ICatalogo, mypage: IDimensioni) { + const marginTop = mypage!.margini?.top ? tools.adjustSize(props.optcatalogo, mypage!.margini?.top) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.top) ?? '') + const marginBottom = mypage!.margini?.bottom ? tools.adjustSize(props.optcatalogo, mypage!.margini?.bottom) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.bottom) ?? '') + const marginLeft = mypage!.margini?.left ? tools.adjustSize(props.optcatalogo, mypage!.margini?.left) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.left) ?? '') + const marginRight = mypage!.margini?.right ? tools.adjustSize(props.optcatalogo, mypage!.margini?.right) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.margini?.right) ?? '') + + const paddingTop = mypage!.padding?.top ? tools.adjustSize(props.optcatalogo, mypage!.padding?.top) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.top) ?? '') + const paddingBottom = mypage!.padding?.bottom ? tools.adjustSize(props.optcatalogo, mypage!.padding?.bottom) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.bottom) ?? '') + const paddingLeft = mypage!.padding?.left ? tools.adjustSize(props.optcatalogo, mypage!.padding?.left) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.left) ?? '') + const paddingRight = mypage!.padding?.right ? tools.adjustSize(props.optcatalogo, mypage!.padding?.right) : (tools.adjustSize(props.optcatalogo, optcatalogo.dimensioni_def?.pagina?.padding?.right) ?? '') + + // Esiste un immagine di sfondo specifica della singola pagina ? + let fileimg = mypage!.imgsfondo?.imagefile + let backgroundSize = mypage!.imgsfondo?.fit + if (fileimg) { + fileimg = fileimg ? `url(${costanti.DIR_UPLOAD + costanti.DIR_CATALOGO + fileimg})` : '' + } + + if (!fileimg) { + // Esiste un immagine di sfondo uguali per tutte le pagine ? + fileimg = optcatalogo.dimensioni_def?.pagina.imgsfondo?.imagefile + backgroundSize = optcatalogo.dimensioni_def?.pagina.imgsfondo?.fit + fileimg = fileimg ? `url(${costanti.DIR_UPLOAD + costanti.DIR_CATALOGO + fileimg})` : '' + } + + let backgroundImage = fileimg ?? '' + + let width = mypage!.size?.width ? tools.adjustSize(optcatalogo, mypage!.size?.width) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.width) ?? '') + let height = mypage!.size?.height ? tools.adjustSize(optcatalogo, mypage!.size?.height) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.height) ?? '') return { marginBottom, @@ -821,10 +919,10 @@ export default defineComponent({ } function getWidthPagina(optcatalogo: ICatalogo, scheda: IMyScheda) { - return scheda.dimensioni?.pagina?.size?.width ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.size?.width) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.width) ?? '') + return scheda.dimensioni?.pagina?.dimensioni?.size?.width ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.size?.width) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.width) ?? '') } function getHeightPagina(optcatalogo: ICatalogo, scheda: IMyScheda) { - return scheda.dimensioni?.pagina?.size?.height ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.size?.height) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.height) ?? '') + return scheda.dimensioni?.pagina?.dimensioni?.size?.height ? tools.adjustSize(optcatalogo, scheda.dimensioni?.pagina?.dimensioni?.size?.height) : (tools.adjustSize(optcatalogo, optcatalogo.dimensioni_def?.pagina?.size?.height) ?? '') } function getStyleRowSeparator(recscheda: ISchedaSingola) { @@ -938,6 +1036,7 @@ export default defineComponent({ getWidthPagina, getHeightPagina, getStyleRowSeparator, + generateStyleByPageDim, } } }) diff --git a/src/views/ecommerce/catalogo/catalogo.vue b/src/views/ecommerce/catalogo/catalogo.vue index 2e908e19..ca68b88d 100755 --- a/src/views/ecommerce/catalogo/catalogo.vue +++ b/src/views/ecommerce/catalogo/catalogo.vue @@ -48,9 +48,7 @@ -
+
- \
@@ -250,10 +232,7 @@ class="row items-start" style="place-content: center" > -
+
@@ -319,6 +300,30 @@ ) " > +
+
+
+
@@ -407,12 +374,17 @@
- - +
@@ -428,27 +400,12 @@