+
{{ text }}
diff --git a/src/components/CCatalogoCard/CCatalogoCard.scss b/src/components/CCatalogoCard/CCatalogoCard.scss
index 58e6f4e4..ed8c9b8e 100755
--- a/src/components/CCatalogoCard/CCatalogoCard.scss
+++ b/src/components/CCatalogoCard/CCatalogoCard.scss
@@ -384,4 +384,13 @@ $grigioscuro: rgb(120, 120, 120);
.boxtitleval{
padding: 10px;
vertical-align: middle;
-}
\ No newline at end of file
+}
+
+.flex-details_and_barcode {
+ display: flex; /* Rende il div un container flex per allineare i contenuti */
+ align-items: center; /* Allineamento verticale al centro */
+ padding-top: calc(5 * var(--scalecatalog) * 1px);
+ justify-content: space-between !important;
+ flex-grow: 0; /* Opzionale: permette agli elementi di crescere uniformemente */
+}
+
diff --git a/src/components/CCatalogoCard/CCatalogoCard.ts b/src/components/CCatalogoCard/CCatalogoCard.ts
index c2efcb05..c5908fc9 100755
--- a/src/components/CCatalogoCard/CCatalogoCard.ts
+++ b/src/components/CCatalogoCard/CCatalogoCard.ts
@@ -9,6 +9,7 @@ import { CCardState } from '../CCardState'
import { CCopyBtn } from '../CCopyBtn'
import { CMyValueDb } from '../CMyValueDb'
import { CPrice } from '../CPrice'
+import { CText } from '../CText'
import { CLabel } from '@src/components/CLabel'
import { CBarCode } from '../CBarCode'
@@ -73,7 +74,10 @@ export default defineComponent({
}),
},
},
- components: { CTitleBanner, CCardState, CCopyBtn, CMyValueDb, VuePdfApp, CPrice, CBarCode, CLabel },
+ components: {
+ CTitleBanner, CCardState, CCopyBtn, CMyValueDb, VuePdfApp, CPrice, CBarCode, CLabel,
+ CText
+ },
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
@@ -151,6 +155,13 @@ export default defineComponent({
props.scheda!.testo_right!
)
})
+ const getTesto_Right_attaccato = computed(() => {
+ return products.replaceKeyWordsByProduct(
+ optcatalogo.value,
+ myproduct.value!,
+ props.scheda!.testo_right_attaccato!
+ )
+ })
const getTesto_Debug = computed(() => {
return products.replaceKeyWordsByProduct(
optcatalogo.value,
@@ -657,6 +668,7 @@ export default defineComponent({
modifOn,
modifProd,
getTesto_Right,
+ getTesto_Right_attaccato,
getTesto_Bottom,
getTesto_Debug,
getScale,
diff --git a/src/components/CCatalogoCard/CCatalogoCard.vue b/src/components/CCatalogoCard/CCatalogoCard.vue
index a50fc601..69deee75 100755
--- a/src/components/CCatalogoCard/CCatalogoCard.vue
+++ b/src/components/CCatalogoCard/CCatalogoCard.vue
@@ -40,25 +40,18 @@
-
-
-
+
+
+
testo: "{{ getTesto_Bottom }}"
@@ -674,8 +747,11 @@
:type="costanti.FieldType.number"
>
-
-
+
+
3 Mesi:
{
+ // Crea un blob dalla jsonString passata come proprietà
+ const blob = new Blob([props.testoJson], { type: 'application/json' });
+ const url = URL.createObjectURL(blob);
+
+ // Crea un link temporaneo
+ const link = document.createElement('a');
+ link.href = url;
+ const fileName = `${props.nomefile}-${tools.getDateYYYYMMDD_Today()}.json`;
+ link.download = fileName; // Nome del file da scaricare
+
+ // Aggiungi il link al DOM e clicca per scaricare
+ document.body.appendChild(link);
+ link.click();
+
+ // Rimuovi il link dal DOM e libera l'oggetto URL
+ document.body.removeChild(link);
+ URL.revokeObjectURL(url);
+ };
+
+ return {
+ tools,
+ downloadJsonFile,
+ }
+ },
+})
diff --git a/src/components/CDownloadJsonFile/CDownloadJsonFile.vue b/src/components/CDownloadJsonFile/CDownloadJsonFile.vue
new file mode 100755
index 00000000..8dcee9aa
--- /dev/null
+++ b/src/components/CDownloadJsonFile/CDownloadJsonFile.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/src/components/CDownloadJsonFile/index.ts b/src/components/CDownloadJsonFile/index.ts
new file mode 100755
index 00000000..7e7a4b11
--- /dev/null
+++ b/src/components/CDownloadJsonFile/index.ts
@@ -0,0 +1 @@
+export {default as CDownloadJsonFile} from './CDownloadJsonFile.vue'
diff --git a/src/components/CExportPage/CExportPage.scss b/src/components/CExportPage/CExportPage.scss
new file mode 100755
index 00000000..e69de29b
diff --git a/src/components/CExportPage/CExportPage.ts b/src/components/CExportPage/CExportPage.ts
new file mode 100755
index 00000000..ceadd0f2
--- /dev/null
+++ b/src/components/CExportPage/CExportPage.ts
@@ -0,0 +1,91 @@
+import { tools } from '../../store/Modules/tools'
+import { useQuasar } from 'quasar'
+import { useI18n } from '@src/boot/i18n'
+import { useUserStore } from '@store/UserStore'
+import { useGlobalStore } from '@store/globalStore'
+import { CDownloadJsonFile } from '@/components/CDownloadJsonFile'
+import { PropType, defineComponent, onMounted, ref } from 'vue'
+import { IMyPage } from '@src/model'
+
+export default defineComponent({
+ name: 'CExportPage',
+ props: {
+ idPage: {
+ type: String,
+ required: true,
+ },
+ nomefile: {
+ type: String,
+ required: true,
+ },
+ },
+ components: {CDownloadJsonFile},
+ setup(props) {
+ const $q = useQuasar()
+ const { t } = useI18n()
+ const globalStore = useGlobalStore()
+
+ const myrec = ref({})
+
+ const nomefile = ref('')
+ const testoJson = ref('')
+ let fileContent = ref('')
+
+ const ris = ref('')
+
+ const onFileChange = (event: any) => {
+ const file = event.target.files[0];
+ if (file && file.type === "application/json") {
+ const reader = new FileReader();
+ reader.onload = (e: any) => {
+ fileContent.value = e.target.result; // Carica il contenuto del file JSON
+ };
+ reader.readAsText(file);
+ } else {
+ tools.showNotif($q, 'Seleziona un file JSON valido.', { color: 'negative', icon: 'notifications' })
+ }
+ }
+
+ const importaPagina = async () => {
+ try {
+ if (!fileContent.value) {
+ tools.showNotif($q, 'Nessun file JSON caricato.', { color: 'negative', icon: 'notifications' })
+ return
+ }
+
+ // Chiama la funzione di importazione passandole il contenuto del file
+ ris.value = await globalStore.importPage(fileContent.value, $q, t);
+
+ } catch (error) {
+ console.error(error);
+ }
+ };
+
+ async function esportaPagina() {
+
+ if (myrec.value) {
+ testoJson.value = await globalStore.exportPage(myrec.value.path!, $q, t)
+ }
+ }
+
+ async function mounted() {
+ nomefile.value = props.nomefile
+
+ myrec.value = globalStore.getPageById(props.idPage)
+
+ }
+
+ onMounted(mounted)
+
+ return {
+ myrec,
+ tools,
+ testoJson,
+ esportaPagina,
+ importaPagina,
+ nomefile,
+ onFileChange,
+ ris,
+ }
+ },
+})
diff --git a/src/components/CExportPage/CExportPage.vue b/src/components/CExportPage/CExportPage.vue
new file mode 100755
index 00000000..d0b157f9
--- /dev/null
+++ b/src/components/CExportPage/CExportPage.vue
@@ -0,0 +1,51 @@
+
+
+
Pagina '{{ myrec.path }}'
+
+
+
+ Esporta:
+
+
+
+
+
+
+
+ Importa file JSON:
+
+ fileContent: {{fileContent}}
+
+
+
Risultato:
+ {{ ris }}
+
+
+
+
+
+
diff --git a/src/components/CExportPage/index.ts b/src/components/CExportPage/index.ts
new file mode 100755
index 00000000..f611552f
--- /dev/null
+++ b/src/components/CExportPage/index.ts
@@ -0,0 +1 @@
+export {default as CExportPage} from './CExportPage.vue'
diff --git a/src/components/CMyEditElem/CMyEditElem.ts b/src/components/CMyEditElem/CMyEditElem.ts
index 093a2623..6a939f9e 100755
--- a/src/components/CMyEditElem/CMyEditElem.ts
+++ b/src/components/CMyEditElem/CMyEditElem.ts
@@ -49,7 +49,7 @@ export default defineComponent({
CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation, CMySlider,
CMySize, CBorders, CMyDimensioni, CMyText,
},
- emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem', 'dupPage'],
+ emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem', 'dupPage', 'expPage'],
props: {
myelem: {
type: Object as PropType,
@@ -60,7 +60,7 @@ export default defineComponent({
required: false,
default: '',
},
- IdPath: {
+ idPage: {
type: String,
required: false,
default: '',
@@ -142,7 +142,7 @@ export default defineComponent({
let neword = 0
if (myelem) {
neword = myelem.order!
- const recfound = globalStore.getMyElemNextThisElemId(props.path, myelem._id!)
+ const recfound = globalStore.getMyElemNextThisElemId(props.idPage, myelem._id!)
if (recfound) {
neword = Math.round((recfound.order! + myelem.order!) / 2)
@@ -161,10 +161,10 @@ export default defineComponent({
if (direz === -1) { // Sopra
// ottieni l'elemento precedente, mantenendo l'ordinamento
- recfound = globalStore.getMyElemPrecThisElemId(props.path, elemsel._id)
+ recfound = globalStore.getMyElemPrecThisElemId(props.idPage, elemsel._id)
} else if (direz === 1) { // Sotto
// ottieni l'elemento precedente, mantenendo l'ordinamento
- recfound = globalStore.getMyElemNextThisElemId(props.path, elemsel._id)
+ recfound = globalStore.getMyElemNextThisElemId(props.idPage, elemsel._id)
}
if (recfound) {
@@ -182,6 +182,9 @@ export default defineComponent({
async function dupPage() {
emit('dupPage', null)
}
+ async function exportPage() {
+ emit('expPage', null)
+ }
async function dupElem(order?: number) {
const newrec: IMyElem = tools.jsonCopy(props.myelem)
@@ -246,7 +249,7 @@ export default defineComponent({
// @ts-ignore
label: page.title,
// @ts-ignore
- value: page.path
+ value: page.idPage
}
arrPages.value.push(rec)
}
@@ -261,15 +264,10 @@ export default defineComponent({
if (myel.value.catalogo && myel.value.catalogo?.arrSchede) {
for (const recscheda of myel.value.catalogo?.arrSchede) {
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: '' } }
- }
+ recscheda.scheda.testo_right_attaccato = tools.resetIText(recscheda.scheda?.testo_right_attaccato!)
+ recscheda.scheda.testo_right = tools.resetIText(recscheda.scheda?.testo_right!)
+ recscheda.scheda.testo_bottom = tools.resetIText(recscheda.scheda?.testo_bottom!)
+
if ((!recscheda.scheda?.dimensioni.pagina)) {
recscheda.scheda.dimensioni.pagina = tools.resetRecIPagina(recscheda.scheda?.dimensioni.pagina)
}
@@ -459,6 +457,12 @@ export default defineComponent({
dimensioni,
numschede_perRiga: 2,
numschede_perCol: 2,
+ testo_right_attaccato: {
+ contenuto: '',
+ font: {
+ posiz_text: costanti.POSIZ_TESTO.A_DESTRA,
+ },
+ },
testo_right: {
contenuto: '',
font: {
@@ -827,8 +831,11 @@ export default defineComponent({
async function moveElem(direz: any) {
let myelem = props.myelem
- const elemprec = globalStore.getMyElemPrecThisElemId(props.path, myelem._id!)
- const elemnext = globalStore.getMyElemNextThisElemId(props.path, myelem._id!)
+ const elemprec = globalStore.getMyElemPrecThisElemId(props.idPage, myelem._id!)
+ const elemnext = globalStore.getMyElemNextThisElemId(props.idPage, myelem._id!)
+
+ if (!elemprec || !elemnext)
+ return false
let neworder = 0
let oldorder = myelem.order!
@@ -839,7 +846,7 @@ export default defineComponent({
elemprec.order = oldorder
if (oldorder === elemprec.order!) {
- const elemprec2 = globalStore.getMyElemPrecThisElemId(props.path, elemprec._id!)
+ const elemprec2 = globalStore.getMyElemPrecThisElemId(props.idPage, elemprec._id!)
neworder = (elemprec2.order! + elemprec.order) / 2
elemprec.order = Math.round((oldorder + neworder) / 2)
@@ -853,7 +860,7 @@ export default defineComponent({
elemnext.order = oldorder
if (oldorder === elemnext.order!) {
- const elemnext2 = globalStore.getMyElemNextThisElemId(props.path, elemnext._id!)
+ const elemnext2 = globalStore.getMyElemNextThisElemId(props.idPage, elemnext._id!)
neworder = (elemnext2.order! + elemnext.order) / 2
elemnext.order = Math.round((oldorder + neworder) / 2)
@@ -1082,6 +1089,7 @@ export default defineComponent({
idSchedaDaCopiare,
copyfromTemplate,
modifElemAndSchede,
+ exportPage,
}
},
diff --git a/src/components/CMyEditElem/CMyEditElem.vue b/src/components/CMyEditElem/CMyEditElem.vue
index b3855584..91483c0a 100755
--- a/src/components/CMyEditElem/CMyEditElem.vue
+++ b/src/components/CMyEditElem/CMyEditElem.vue
@@ -44,24 +44,33 @@
>