- Aggiungere un campo "Vagliato dall'Editore" e aggiungere anche il campo "chi" e delle Note

This commit is contained in:
Surya Paolo
2025-05-02 19:11:29 +02:00
parent 8a20186e59
commit 70f1e5cbf1
24 changed files with 745 additions and 207 deletions

View File

@@ -1,11 +1,13 @@
VITE_APP_ID="18"
VITE_APP_URL="https://test.gruppomacro.app"
VITE_MONGODB_HOST="https://testapi.gruppomacro.app"
VITE_LOGO_REG="gruppomacro-logo-full.png"
VITE_APP_URL="https://gruppomacro.app"
VITE_MONGODB_HOST="https://api.gruppomacro.app"
VITE_LOGO_REG='gruppomacro-logo-full.png'
VITE_PUBLICKEY_PUSH="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
VITE_DEBUG="1"
VITE_VUE_APP_ISTEST="1"
VITE_DEBUG="0"
VITE_VUE_APP_ISTEST="0"
DIRECTORY_LOCAL="myprojplanet_vite"
DIRECTORY_SERVER="/var/www/nodejs_test.piuchebuono_server"
SERVERDIR_WEBSITE="/var/www/test.gruppomacro.app"
DIRECTORY_SERVER="/var/www/nodejs_piuchebuono_server"
SERVERDIR_WEBSITE="/var/www/gruppomacro.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"
PORT_SPA="8089"
PORT_PWA="8099"

View File

@@ -32,6 +32,7 @@
"@cubejs-client/core": "^1.2.26",
"@quasar/extras": "^1.16.17",
"@quasar/quasar-ui-qcalendar": "^4.1.2",
"@syncfusion/ej2-vue-pdfviewer": "^29.1.40",
"@types/jsbarcode": "^3.11.4",
"@types/leaflet": "^1.9.17",
"@vue/compat": "^3.5.13",

View File

@@ -18,8 +18,14 @@ fi
if [[ $risposta == "Y" || $risposta == "y" ]]; then
mv public/upload/products ../../
mv public/upload/profile ../../
npm run buildpwa
mv ../../products public/upload/
mv ../../profile public/upload/
echo "Sincronizzazione in remoto $SERVERDIR_WEBSITE ..."
rsync -e 'ssh -p 8822' -a dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
#rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js

View File

@@ -16,8 +16,14 @@ cp .env.test.gruppomacro .env.production
sleep 1
mv public/upload/products ../../
mv public/upload/profile ../../
npm run buildpwatest
mv ../../products public/upload/
mv ../../profile public/upload/
echo "Sincronizzazione $SERVERDIR_WEBSITE in remoto..."
rsync -e 'ssh -p 8822' -a --exclude 'upload' dist/pwa/ pcbuser@pcb:$SERVERDIR_WEBSITE
rsync -e 'ssh -p 8822' -av --delete dist/pwa/js/ pcbuser@pcb:$SERVERDIR_WEBSITE/js

View File

@@ -134,7 +134,7 @@
/>
</q-item-section>
<q-item-section>
<q-item-label>Scheda Libro</q-item-label>
<q-item-label>Scheda</q-item-label>
</q-item-section>
</q-item>
<q-item
@@ -194,7 +194,7 @@
/>
</q-item-section>
<q-item-section>
<q-item-label>Carica dati del Libro (da GM)</q-item-label>
<q-item-label>Carica dati (da GM)</q-item-label>
</q-item-section>
</q-item>
<q-item
@@ -213,7 +213,7 @@
/>
</q-item-section>
<q-item-section>
<q-item-label>Carica dati del Libro (dal DB Locale)</q-item-label>
<q-item-label>Carica dati (dal DB Locale)</q-item-label>
</q-item-section>
</q-item>
<!--<q-item
@@ -675,7 +675,6 @@
>
</CSchedaProdotto>
updateFieldToGM
</q-dialog>
<q-dialog
v-if="myproduct && modifTrafiletto"
@@ -695,7 +694,6 @@
>
</CModifTrafiletto>
updateFieldToGM
</q-dialog>
<q-dialog
v-if="visufromgm && myproduct"

View File

@@ -40,9 +40,6 @@ import { costanti } from '@costanti'
import objectId from '@src/js/objectId'
import { useProducts } from '@src/store/Products'
import html2pdf from 'html2pdf.js'
export default defineComponent({
name: 'CMyEditElem',
components: {
@@ -740,135 +737,11 @@ export default defineComponent({
}
}
function toggleDebug() {
myel.value.catalogo!.indebug = !myel.value.catalogo!.indebug
}
const preparePDF = async () => {
myel.value.catalogo!.generazionePDFInCorso = true
myel.value.catalogo!.areadistampa!.scale = myel.value.catalogo!.areadistampa!.scale_printable
}
const terminaPDF = async () => {
myel.value.catalogo!.generazionePDFInCorso = false
myel.value.catalogo!.areadistampa!.scale = 1
}
const generatePDF = async (optcatalogo: IOptCatalogo) => {
await nextTick()
$q.dialog({
message: 'Generare il PDF ?',
ok: {
label: t('dialog.yes'),
push: true
},
cancel: {
label: t('dialog.cancel')
},
title: 'Generazione PDF'
}).onOk(async () => {
$q.loading.show({
message: 'Caricamento immagini e generazione PDF in corso...'
})
try {
let defaultMargin = 0.1
if (optcatalogo.printable) {
defaultMargin = 0
} else {
defaultMargin = 0
}
const unit = optcatalogo.areadistampa!.unit
let myformat = { ...optcatalogo.areadistampa!.format }
const scale = tools.getScale(optcatalogo)
const scalecanvas = optcatalogo.areadistampa!.scalecanvas
if (tools.isObject(myformat) && scale > 0) {
} else {
myformat = [210, 297]
}
const formatwidth = (myformat[0] * scale)
const formatheight = (myformat[1] * scale)
let myfile = (optcatalogo.pdf_filename ?? 'catalogo_completo')
myfile += '_' + formatwidth + '_' + formatheight + '_' + unit + '_scale_' + scale
myfile += '.pdf'
const element = document.getElementById('pdf-content')
const opt = {
margin: [
optcatalogo.printable ? (parseFloat(optcatalogo.areadistampa!.margini?.top) || defaultMargin) : defaultMargin,
optcatalogo.printable ? (parseFloat(optcatalogo.areadistampa!.margini?.left) || defaultMargin) : defaultMargin,
optcatalogo.printable ? (parseFloat(optcatalogo.areadistampa!.margini?.bottom) || defaultMargin) : defaultMargin,
optcatalogo.printable ? (parseFloat(optcatalogo.areadistampa!.margini?.right) || defaultMargin) : defaultMargin
],
filename: myfile,
image: {
type: 'jpeg',
quality: 0.98
},
html2canvas: {
scale: scalecanvas,
useCORS: true,
letterRendering: true,
},
jsPDF: {
unit: unit,
format: [formatwidth, formatheight],
orientation: optcatalogo.areadistampa!.orientation,
compress: optcatalogo.areadistampa!.compress,
},
enableLinks: true,
pagebreak: { mode: 'avoid-all', before: '.card-page' }
}
console.log('opt di stampa', opt)
// a4: [595.28, 841.89]
await html2pdf().set(opt).from(element).save()
optcatalogo.generazionePDFInCorso = false
optcatalogo.areadistampa!.scale = 1
$q.loading.hide()
$q.notify({
color: 'positive',
message: 'PDF generato con successo!',
icon: 'check'
})
} catch (error) {
$q.loading.hide()
$q.notify({
color: 'negative',
message: 'Errore nella generazione del PDF',
icon: 'error'
})
console.error('Errore nella generazione del PDF:', error)
}
})
}
onMounted(mounted)
return {
preparePDF, terminaPDF, generatePDF,
toggleDebug,
tools,
shared_consts,
getArrDisciplines,

View File

@@ -2480,28 +2480,6 @@
</div>
</q-expansion-item>
<div></div>
<q-btn
v-if="myel.catalogo.pdf && !myel.catalogo.generazionePDFInCorso"
:label="`Prepara PDF`"
@click="preparePDF"
></q-btn>
<q-btn
v-if="myel.catalogo.generazionePDFInCorso"
:label="`Termina Generazione`"
@click="terminaPDF"
></q-btn>
<q-btn
v-if="myel.catalogo.pdf && myel.catalogo.generazionePDFInCorso"
:label="`Genera PDF ${myel.catalogo.pdf_filename}`"
@click="generatePDF(myel.catalogo)"
color="positive"
></q-btn>
<q-btn
label="Debug"
@click="toggleDebug()"
:push="myel.catalogo.indebug"
:color="myel.catalogo.indebug ? `positive` : 'primary'"
></q-btn>
</div>
</div>
</q-list>

View File

@@ -537,6 +537,14 @@ export default defineComponent({
}
// console.log('props.field', props.field, 'props.subfield', props.subfield, 'myvalue: ', myvalue)
}
if (props.type === costanti.FieldType.verifica && !myvalue.value) {
myvalue.value = {
esito: costanti.VALIDATO.NO,
username: '',
note: '',
}
}
} catch (e) {
}
@@ -631,6 +639,11 @@ export default defineComponent({
console.log('SaveValueInt', newVal, valinitial)
if (col.value.fieldtype === costanti.FieldType.verifica) {
newVal.username = userStore.my.username
newVal.data = tools.getDateNow()
}
if (props.tablesel) {
if (true) {
@@ -949,6 +962,14 @@ export default defineComponent({
}
}
function updateValidazione(esito: any) {
myvalue.value.esito = esito
myvalue.value.data = tools.getDateNow()
myvalue.value.username = userStore.my.username
changevalRec(myvalue.value)
Savedb(myvalue.value, '')
}
onBeforeMount(mounted)
@@ -998,6 +1019,7 @@ export default defineComponent({
handleCancel,
popupEditRef,
copyToClipboard,
updateValidazione,
}
}
})

View File

@@ -213,6 +213,46 @@
</span>
</div>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.verifica">
<div>
<div>
<q-chip
dense
class="q-ma-xs q-pa-xs"
:color="
myvalue.esito === costanti.VALIDATO.SI
? 'green'
: myvalue.esito === costanti.VALIDATO.TO_RESOLV
? 'red'
: 'grey-7'
"
text-color="white"
:icon="
myvalue.esito === costanti.VALIDATO.NO
? 'fas fa-question-circle'
: myvalue.esito === costanti.VALIDATO.SI
? 'fas fa-check-circle'
: 'fas fa-exclamation-circle'
"
:label="
myvalue.esito === costanti.VALIDATO.NO
? $t('validazione.NO')
: myvalue.esito === costanti.VALIDATO.SI
? $t('validazione.SI')
: $t('validazione.TO_RESOLV')
"
></q-chip>
</div>
<div v-if="myvalue.username">
<span>(Utente: {{ myvalue.username }} - in Data: {{ tools.getstrDateTime(myvalue.data) }})</span>
</div>
<div v-if="myvalue.note">
<span>Note: {{ myvalue.note }}</span>
</div>
</div>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.string || col.fieldtype === costanti.FieldType.crypted">
<div
v-if="isInModif"
@@ -1118,6 +1158,41 @@
>
</q-select>
</div>
<div v-else-if="col.fieldtype === costanti.FieldType.verifica">
<div>
<q-option-group
v-model="scope.value.esito"
type="radio"
:icon="
[costanti.VALIDATO.NO, costanti.VALIDATO.TO_RESOLV].includes(myvalue.esito)
? 'fas fa-question-circle'
: 'fas fa-check-circle'
"
:color="
myvalue.esito === costanti.VALIDATO.SI
? 'green'
: myvalue.esito === costanti.VALIDATO.TO_RESOLV
? 'red'
: 'grey-7'
"
inline
:options="[
{ label: '[Non verificato]', value: costanti.VALIDATO.NO },
{ label: 'Validato', value: costanti.VALIDATO.SI },
{ label: 'Da Risolvere', value: costanti.VALIDATO.TO_RESOLV },
]"
></q-option-group>
Username: {{ scope.value.username }}
<q-input
v-model="scope.value.note"
type="text"
icon="fas fa-sticky-note"
label="Nota"
:autogrow="true"
>
</q-input>
</div>
</div>
<div
v-else-if="col.fieldtype === costanti.FieldType.string || col.fieldtype === costanti.FieldType.crypted"
>
@@ -1146,7 +1221,7 @@
<div v-else-if="col.fieldtype === costanti.FieldType.editor_nohtml">
<div
class="q-pa-md"
style="min-width: 600px;"
style="min-width: 600px"
>
<CMyEditorAI
v-model:value="scope.value"

View File

@@ -17,7 +17,7 @@
:height="opt.heightimg"
class="clickable-image"
fit="cover"
:src="tools.getFullFileName([myrec.foto_collana], table, myrec.username, myrec._id)"
:src="tools.getFullFileName([myrec.foto_collana], table, '', myrec._id)"
>
<template v-slot:error>
<div class="absolute-full flex flex-center text-white">immagine non impostata</div>
@@ -35,12 +35,9 @@
{{ myrec.title }}
</div>
<div class="">
<div
v-if="numprodottistr"
class="text-caption text-h7 text-grey q-pb-xs"
>
<div class="text-caption text-h7 text-grey q-pb-xs">
<q-icon name="fas fa-list-ol" /> {{ $t('cataloglist.numprodotti') }}:
<span class="text-blue">{{ numprodottistr }}</span>
<span :class="`text-` + (numprodottistr === 0 ? 'red' : 'blue')">{{ numprodottistr }}</span>
</div>
<div class="text-caption text-h7 text-grey q-pb-xs">
<q-icon name="fas fa-user" /> {{ $t('cataloglist.referenti') }}:
@@ -114,6 +111,13 @@
>
(Data: {{ tools.getstrDate(myrec.data_generato) }})
</div>
<div class="text-caption text-h7 text-grey q-pb-xs">
<q-icon name="fas fa-list" /> Lista generata il:
<span :class="`text-` + (tools.isDateValid(myrec.data_lista_generata) ? 'blue' : 'red')"
>{{ tools.getstrDate(myrec.data_lista_generata) || '(non ancora generata)' }} da
{{ myrec.username_lista_generata }}
</span>
</div>
<div
v-if="myrec.pdf_online"
class="text-caption text-h7 text-blue q-pb-xs"
@@ -244,6 +248,20 @@
:color="esiste_descrintro ? 'green' : 'red'"
/>
</div>
<div
style="width: 300px"
class="q-ma-sm"
>
<CLabel
:value="
tools.getstrDate(myrec.data_lista_generata) + ' da ' + myrec.username_lista_generata ||
'ancora non è stata generata'
"
label="Lista generata"
:color="myrec.pdf_generato ? 'green' : 'red'"
/>
</div>
</div>
<div
style="width: 300px"
class="q-ma-sm"
@@ -261,7 +279,6 @@
:copy="true"
/>
</div>
</div>
</q-card-section>
</q-card>
<q-card-actions align="center">

View File

@@ -101,7 +101,7 @@ export default defineComponent({
maxlength: props.scheda?.testo_bottom?.maxlength
}
const savedColumns = tools.getCookie("selColCat");
const savedColumns = tools.getCookie("selColCat_2");
if (savedColumns) {
selectedColumns.value = savedColumns;
}
@@ -121,6 +121,7 @@ export default defineComponent({
const allColumns = [
{ name: "pos", label: "Ind", field: "pos", align: "left", style: "width: 50px" },
{ name: "drag", label: "Ord", field: "", align: "left", style: "width: 50px", edit: true },
{ name: "validato", label: "Val", field: "validato", align: "left", style: "" },
{ name: "image", label: "Foto", field: "image", align: "center" },
{ name: "name", label: "Titolo del Libro", field: "name", align: "left" },
{ name: "authors", label: "Autore", field: "authors", align: "left" },
@@ -133,12 +134,14 @@ export default defineComponent({
{ 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: "pagine", label: "Pag.", field: "pagine", align: "right" },
{ 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 },
@@ -167,6 +170,9 @@ export default defineComponent({
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 'isbn':
return element.isbn;
@@ -197,6 +203,12 @@ export default defineComponent({
case 'date_pub':
return tools.getstrDate(element.productInfo?.date_pub);
case 'prezzo':
return tools.getstrDate(element.price);
case 'prezzo_sconto':
return tools.getstrDate(element.sale_price);
case 'rank3M':
return element.productInfo?.rank3M;
@@ -260,6 +272,15 @@ export default defineComponent({
}
return '';
case 'validato':
if (element.validaprod?.esito === costanti.VALIDATO.SI) {
return 'bg-green';
} else if (element.validaprod?.esito === costanti.VALIDATO.TO_RESOLV) {
return 'bg-red';
} else {
return 'bg-grey';
}
case 'quantity':
if (products.isPubblicato(element.productInfo)) {
if (products.isQtaLimitata(element)) {
@@ -291,8 +312,15 @@ export default defineComponent({
function getFieldStyle(element: any, field: any): Record<string, string> {
if (!element)
return ''
return {}
switch (field.field) {
case 'validato':
return {
cursor: 'pointer',
textAlign: 'center',
color: 'white',
}
case 'image':
return {
width: '50px',
@@ -325,7 +353,7 @@ export default defineComponent({
let cookieValue: [] | null = null;
try {
cookieValue = tools.getCookie("selColCat");
cookieValue = tools.getCookie("selColCat_2");
// Se il cookie esiste e contiene una stringa JSON valida
cookieValue = cookieValue ? cookieValue : [];
} catch (error) {
@@ -333,7 +361,7 @@ export default defineComponent({
cookieValue = []; // In caso di errore, inizializza come array vuoto
}
const selectedColumns = ref(cookieValue.length > 0 ? cookieValue : ["pos", "drag", "image", "name", "authors", "isbn", "catprods", "stato", "date_pub", "pagine", "trafiletto", "vLast6M", "quantity", "actions"]);
const selectedColumns = ref(cookieValue.length > 0 ? cookieValue : ["pos", "drag", "validato", "image", "name", "authors", "isbn", "catprods", "stato", "date_pub", "pagine", "trafiletto", "fatLast1Y", "quantity", "actions"]);
// 3. Funzione per verificare se una colonna è visibile (isColumnVisible)
@@ -358,7 +386,7 @@ export default defineComponent({
// 8. Salvataggio delle colonne selezionate in un cookie
const saveSelectedColumns = () => {
tools.setCookie("selColCat", JSON.stringify(selectedColumns.value));
tools.setCookie("selColCat_2", JSON.stringify(selectedColumns.value));
};
// 9. Watcher per salvare automaticamente le preferenze quando cambiano
@@ -485,6 +513,8 @@ export default defineComponent({
function getFieldClick(element: any, field: any): (() => void) | null {
switch (field.field) {
case 'validato':
return () => modifyProduct(element)
case 'image':
return () => showProduct(element);

View File

@@ -7,13 +7,20 @@
:options="allColumns"
label="Colonne da visualizzare"
multiple
filled
dense
class="float-right"
outlined
emit-value
map-options
option-value="name"
option-label="label"
filled
style="max-width: 300px"
/>
style="max-width: 200px"
>
<template v-slot:prepend>
<q-icon name="settings" />
</template>
</q-select>
</div>
<div class="row justify-center q-mx-auto q-pt-sm text-italic">
@@ -107,7 +114,7 @@
:style="getFieldStyle(element, field)"
@click="getFieldClick(element, field)?.()"
>
{{ getFieldValue(element, field) }}
<span v-html="getFieldValue(element, field)"></span>
</td>
<!-- Azioni -->
<td v-else-if="field.name === 'actions' && isColumnVisible('actions', true)">

View File

@@ -274,6 +274,17 @@ export default defineComponent({
function getArrListScheda(): IRecFields[] {
const arrlist: IRecFields[] = [
{
editOn: true,
label: "Verifica",
table: "products",
id: myproduct.value._id,
rec: myproduct.value,
mykey: "validaprod",
debounce: "1000",
type: costanti.FieldType.verifica,
dense: true,
},
{
editOn: true,
label: "Titolo",

View File

@@ -26,6 +26,8 @@ export interface ICatalog {
pdf_generato?: string
data_generato?: Date
data_lista_generata?: Date
username_lista_generata?: string
pdf_online?: string
data_online?: Date

View File

@@ -674,7 +674,7 @@ export interface ITimeLineMain {
export interface IImgGallery {
_id?: string
imagefile: string
vers_img: number
vers_img?: number
// order?: number
alt?: string
description?: string

View File

@@ -1,6 +1,6 @@
import type { IUserFields, IUserShort } from './UserStore'
export interface IVerificaProd {
export interface IValidaProd {
esito?: number
data?: Date
username?: string
@@ -97,6 +97,7 @@ export interface IVariazione {
preOrderDate?: Date
addtocart_link?: string
eta?: string
validaprod?: IValidaProd
}
export interface IAuthor {

View File

@@ -2076,7 +2076,13 @@ const msg_it = {
withexplain: 'Con Spiegazione',
temperatura: 'Temperatura',
outputType: 'Formato di Uscita',
}
},
validazione: {
SI: 'Validato',
NO: 'NON Validato',
TO_RESOLV: 'Da Risolvere!',
},
},
};

View File

@@ -488,6 +488,7 @@ export const costanti = {
arrmenu: 18000,
op_andor: 19000,
editor_nohtml: 20000,
verifica: 21000,
},
@@ -557,6 +558,12 @@ export const costanti = {
OP_ANDOR: {
OP_OR: 0,
OP_AND: 1,
},
VALIDATO: {
NO: 0,
SI: 1,
TO_RESOLV: -1,
}
}

View File

@@ -2748,6 +2748,7 @@ export const colTableProducts = [
AddCol({ name: 'canBeShipped', label_trans: 'products.canBeShipped', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'canBeBuyOnline', label_trans: 'products.canBeBuyOnline', fieldtype: costanti.FieldType.boolean }),
AddCol({ name: 'validaprod', label_trans: 'products.validaprod', fieldtype: costanti.FieldType.verifica }),
AddCol(DeleteRec),
AddCol(DuplicateRec),
]

View File

@@ -9905,6 +9905,18 @@ export const tools = {
}
},
isDateValid(mydate: Date) {
try {
return (
mydate instanceof Date &&
isFinite(mydate.getTime()) &&
mydate.toISOString().split("T")[0] !== "1970-01-01"
)
} catch {
return false
}
},
// FINE !

View File

@@ -1943,8 +1943,25 @@ export const useProducts = defineStore('Products', {
}
)
},
getPathByPage(idpag: string) {
let linkpage = ''
const globalStore = useGlobalStore()
if (idpag) {
const mypage = globalStore.getPageById(idpag)
if (mypage)
linkpage = mypage.path!
}
return linkpage
},
},

View File

@@ -20,6 +20,10 @@ import { CProductTable } from '@src/components/CProductTable'
import { CSearchProduct } from '@src/components/CSearchProduct'
import { CContainerCatalogoCard } from '@src/components/CContainerCatalogoCard'
import { CSelectUserActive } from '@src/components/CSelectUserActive'
import html2pdf from 'html2pdf.js'
import type {
IOptCatalogo, IDimensioni, IFilterCatalogo,
IMyScheda, IProdView, IProduct, ISchedaSingola, ISearchList, ICatalog, IImg,
@@ -96,6 +100,17 @@ export default defineComponent({
const optcatalogo = ref(<IOptCatalogo>{ ...props.modelValue });
const getPdfFilename = () => {
let myfilename = (optcatalogo.value.pdf_filename ?? 'catalogo_completo')
const catalog = getCatalogoByMyPage.value
if (catalog) {
myfilename = productStore.getPathByPage(catalog.idPageAssigned)
}
return myfilename
}
function updateCatalogoPadre() {
console.log('catalogo.ts PADRE')
emit('update:modelValue', optcatalogo.value);
@@ -461,6 +476,25 @@ export default defineComponent({
return argomenti
}
function getidTipoFormatoDaFiltrare(def_idTipoFormato?: number[]) {
let idTipoFormato: number[] = []
// Cerca se nella lista cataloghi c'è la Collana di questa Pagina !
const trovatocatalogo = getCatalogoByMyPage.value
if (trovatocatalogo) {
idTipoFormato = trovatocatalogo.idTipoFormato! || []
} else {
if (def_idTipoFormato && def_idTipoFormato.length > 0) {
idTipoFormato = def_idTipoFormato
} else {
idTipoFormato = []
}
}
return idTipoFormato
}
function getEditoreDaFiltrare(def_editori?: string[]) {
let editore: string[] = []
@@ -546,7 +580,7 @@ export default defineComponent({
if (!(optrigenera.value.visibilitaDisp === costanti.DISP.TUTTI ||
(optrigenera.value.visibilitaDisp === costanti.DISP.ESAURITI && productStore.isEsaurito(product)) ||
(optrigenera.value.visibilitaDisp === costanti.DISP.DISPONIBILI && productStore.isDisponibile(product)))) {
(optrigenera.value.visibilitaDisp === costanti.DISP.DISPONIBILI && (productStore.isDisponibile(product) || productStore.isPrevendita(product))))) {
return false;
}
if (!(optrigenera.value.stato === costanti.STATO.TUTTI ||
@@ -675,7 +709,7 @@ export default defineComponent({
const filtroProductTypes = optcatalogo.value.productTypes || [0];
const filtroExcludeProductTypes = optcatalogo.value.excludeproductTypes || [0];
const filtroidTipologie = optcatalogo.value.idTipologie || [];
const filtroidTipoFormato = optcatalogo.value.idTipoFormato || [];
const filtroidTipoFormato = getidTipoFormatoDaFiltrare(optcatalogo.value.idTipoFormato);
const editore = getEditoreDaFiltrare(optcatalogo.value.editore);
const filtroPublishers = editore || [];
const idCollane = getIdCollaneDaFiltrare(optcatalogo.value.idCollane);
@@ -741,12 +775,31 @@ export default defineComponent({
generatearrProdToViewSorted(!generalista, salva, !optcatalogo.value.showListaArgomenti);
loaddata();
if (generalista) {
const catalog = getCatalogoByMyPage.value
if (catalog) {
catalog.data_lista_generata = tools.getDateNow()
catalog.username_lista_generata = userStore.my.username
await saveCatalog()
}
}
console.log('***** FINE calcArrPROD')
generatinglist.value = false
rigeneraLibri.value = false
}
async function saveCatalog() {
const catalog = getCatalogoByMyPage.value
const mydata = {
table: 'catalogs',
data: catalog
}
await globalStore.saveTable(mydata)
}
function generaListaLibri() {
// chiedi prima "Sei sicuro di rigenerare il catalogo?"
let risposta_si = false
@@ -815,7 +868,7 @@ export default defineComponent({
const filtroProductTypes = scheda.productTypes || [0];
const filtroExcludeProductTypes = scheda.excludeproductTypes || [0];
const filtroidTipologie = scheda.idTipologie || [];
const filtroidTipoFormato = scheda.idTipoFormato || [];
const filtroidTipoFormato = getidTipoFormatoDaFiltrare(scheda.idTipoFormato);
const editore = getEditoreDaFiltrare(scheda.editore);
const filtroPublishers = editore || [];
const idCollane = getIdCollaneDaFiltrare(scheda.idCollane);
@@ -1500,6 +1553,130 @@ export default defineComponent({
addnewProd.value = true
}
function toggleDebug() {
optcatalogo.value.indebug = !optcatalogo.value.indebug
}
const preparePDF = async () => {
optcatalogo.value.generazionePDFInCorso = true
optcatalogo.value.areadistampa!.scale = optcatalogo.value.areadistampa!.scale_printable
}
const terminaPDF = async () => {
optcatalogo.value.generazionePDFInCorso = false
optcatalogo.value.areadistampa!.scale = 1
}
const generatePDF = async () => {
await nextTick()
$q.dialog({
message: 'Generare il PDF ?',
ok: {
label: t('dialog.yes'),
push: true
},
cancel: {
label: t('dialog.cancel')
},
title: 'Generazione PDF'
}).onOk(async () => {
$q.loading.show({
message: 'Caricamento immagini e generazione PDF in corso...'
})
try {
let defaultMargin = 0.1
if (optcatalogo.value.printable) {
defaultMargin = 0
} else {
defaultMargin = 0
}
const unit = optcatalogo.value.areadistampa!.unit
let myformat = { ...optcatalogo.value.areadistampa!.format }
const scale = tools.getScale(optcatalogo.value)
const scalecanvas = optcatalogo.value.areadistampa!.scalecanvas
if (tools.isObject(myformat) && scale > 0) {
} else {
myformat = [210, 297]
}
const formatwidth = (myformat[0] * scale)
const formatheight = (myformat[1] * scale)
let myfile = getPdfFilename()
myfile += '_' + formatwidth + '_' + formatheight + '_' + unit + '_scale_' + scale
myfile += '.pdf'
const element = document.getElementById('pdf-content')
const opt = {
margin: [
optcatalogo.value.printable ? (parseFloat(optcatalogo.value.areadistampa!.margini?.top) || defaultMargin) : defaultMargin,
optcatalogo.value.printable ? (parseFloat(optcatalogo.value.areadistampa!.margini?.left) || defaultMargin) : defaultMargin,
optcatalogo.value.printable ? (parseFloat(optcatalogo.value.areadistampa!.margini?.bottom) || defaultMargin) : defaultMargin,
optcatalogo.value.printable ? (parseFloat(optcatalogo.value.areadistampa!.margini?.right) || defaultMargin) : defaultMargin
],
filename: myfile,
image: {
type: 'jpeg',
quality: 0.98
},
html2canvas: {
scale: scalecanvas,
useCORS: true,
letterRendering: true,
},
jsPDF: {
unit: unit,
format: [formatwidth, formatheight],
orientation: optcatalogo.value.areadistampa!.orientation,
compress: optcatalogo.value.areadistampa!.compress,
},
enableLinks: true,
pagebreak: { mode: 'avoid-all', before: '.card-page' }
}
console.log('opt di stampa', opt)
// a4: [595.28, 841.89]
await html2pdf().set(opt).from(element).save()
optcatalogo.value.generazionePDFInCorso = false
optcatalogo.value.areadistampa!.scale = 1
$q.loading.hide()
$q.notify({
color: 'positive',
message: 'PDF generato con successo!',
icon: 'check'
})
} catch (error) {
$q.loading.hide()
$q.notify({
color: 'negative',
message: 'Errore nella generazione del PDF',
icon: 'error'
})
console.error('Errore nella generazione del PDF:', error)
}
})
}
onMounted(mounted)
@@ -1571,6 +1748,9 @@ export default defineComponent({
getCatalogoByMyPage,
getReferentiCatalogo,
reSortList,
preparePDF, terminaPDF, toggleDebug,
generatePDF,
getPdfFilename,
}
}
})

View File

@@ -141,6 +141,7 @@
<q-btn
v-if="!showListaArgomenti"
rounded
icon="fas fa-redo"
label="Rigenera Lista"
color="primary"
@click="rigeneraLibri = true"
@@ -220,6 +221,31 @@
>
</q-spinner-tail>
</q-inner-loading>
<div>
<q-btn
v-if="optcatalogo.pdf && !optcatalogo.generazionePDFInCorso"
:label="`Prepara PDF`"
@click="preparePDF"
></q-btn>
<q-btn
v-if="optcatalogo.generazionePDFInCorso"
:label="`Termina Generazione`"
@click="terminaPDF"
></q-btn>
<q-btn
v-if="optcatalogo.pdf && optcatalogo.generazionePDFInCorso"
:label="`Genera PDF ` + getPdfFilename()"
@click="generatePDF()"
color="positive"
></q-btn>
<q-btn
label="Debug"
@click="toggleDebug()"
:push="optcatalogo.indebug"
:color="optcatalogo.indebug ? `positive` : 'primary'"
></q-btn>
</div>
<div class="row justify-center q-mx-auto bg-blue-1">
<div class="text-center">
@@ -760,7 +786,6 @@
</q-tab-panel>
</q-tab-panels>
<!--<div ref="pdfContent" class="pdf-content">-->
</div>
</q-page>
<CMyDialog
@@ -868,6 +893,14 @@
</div>
</q-card-section>
<q-card-actions align="center">
<q-btn
rounded
label="Rigenera"
color="primary"
icon="fas fa-redo"
@click="generaListaLibri()"
class="float-right"
></q-btn>
<q-btn
rounded
label="Chiudi"
@@ -875,13 +908,6 @@
class="float-right"
@click="rigeneraLibri = false"
></q-btn>
<q-btn
rounded
label="Rigenera"
color="primary"
@click="generaListaLibri()"
class="float-right"
></q-btn>
</q-card-actions>
</q-card>
</CMyDialog>

260
yarn.lock
View File

@@ -2704,6 +2704,266 @@
dependencies:
"@swc/counter" "^0.1.3"
"@syncfusion/ej2-base@~29.1.33", "@syncfusion/ej2-base@~29.1.36":
version "29.1.36"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-base/-/ej2-base-29.1.36.tgz#3c467967d4ed05c89c252d852940e9ff3e780519"
integrity sha512-XVRrymlbywtzNnxiaf/ByudElO3p7gieJuN2IHcs6FxsQNI60d3A5RdBqEF0znAH/KM0iSiWDFaaP2pqQltiEQ==
dependencies:
"@syncfusion/ej2-icons" "~29.1.33"
"@syncfusion/ej2-buttons@~29.1.33", "@syncfusion/ej2-buttons@~29.1.34":
version "29.1.34"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-buttons/-/ej2-buttons-29.1.34.tgz#bf401f5390ab942c8b6d2445d37aeda1aa01a18c"
integrity sha512-zCePhsc7w2OtRwifEzsWFvFgik2ISM03vwGrHbT3IZP5lbs9asrXOJUdxmhvqqH2/Jhv5LT0/oEILx2LclzQtw==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-calendars@~29.1.33", "@syncfusion/ej2-calendars@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-calendars/-/ej2-calendars-29.1.40.tgz#1df4559a856f4361e9ae36daefbac098248b548d"
integrity sha512-zYGGBGd1miZtYJysyQO+yoDN4mXxJ9PTKYhDGIR/5IeWVerDSXk5IPkVE0iAR3KmSnLvYYfA0nj6xbIFPOB4hQ==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-lists" "~29.1.40"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-compression@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-compression/-/ej2-compression-29.1.33.tgz#d8d11460ae91656fda4f17f462bef992accdc7df"
integrity sha512-NVVW988jmjMCuDl07jUyN7fO62Ak34dBZnLkew8/PzC1KqXj4abFvHmNJ+crUDaNq3kPvjR8YrhWDfLzLZGaZA==
dependencies:
"@syncfusion/ej2-file-utils" "~29.1.33"
"@syncfusion/ej2-data@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-data/-/ej2-data-29.1.33.tgz#73ea1b1943f3d35cf8a131447f0805cda3e9fedc"
integrity sha512-dqXJtljDm8fPmLl7kuO3GYuoF8xHtnUE7qwvFWE3VZTvJYWLyG68auf5gNCK47hckMp9zvgWXboTMXMBXpAkrA==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-drawings@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-drawings/-/ej2-drawings-29.1.40.tgz#d26c09a26673e65ae34268e21001af5365b32e9c"
integrity sha512-skfA1R5zqxhZNFr2ErmLqp2CBg3BJGLThpBDmdKR9+eIwJgVlJMwOdKWEE85Hl+HMVMo08BimoqX23RZDQfvgQ==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-dropdowns@~29.1.33", "@syncfusion/ej2-dropdowns@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-dropdowns/-/ej2-dropdowns-29.1.40.tgz#3db43f382eed81b68e5c5564f3c31e7424426d5b"
integrity sha512-ai1IWL82TlBSGYVEKyItxxeXVqSB1VagAvU4f7yA9j1k1BEvzUpo79U+Pt32rjW5EPacWaWHZsmUeMgfBrp+IA==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-lists" "~29.1.40"
"@syncfusion/ej2-navigations" "~29.1.40"
"@syncfusion/ej2-notifications" "~29.1.33"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-excel-export@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-excel-export/-/ej2-excel-export-29.1.33.tgz#b68c6702b86296b3dd2f062c1ed2bc1d10ca76cc"
integrity sha512-UOkX00nb45eTii+Y8kwsCn0Jkn+UBRwznF7l9d9MN9aIJ4zCg+AJ88V/SqASA7Y4+qtGR7I1f4b69Wr0uau0Zw==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-compression" "~29.1.33"
"@syncfusion/ej2-file-utils@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-file-utils/-/ej2-file-utils-29.1.33.tgz#821398f346e0bdf148fc6cd5ae5e2cdec9583158"
integrity sha512-RxHWK1Xk3Q1TP9XE93pWxwjheIygeeu6TkGvih8H7MQZUdr+igRYG65ii2OhFBAT26BndU7gtl3Jv5l+eZBNfA==
"@syncfusion/ej2-filemanager@~29.1.39":
version "29.1.39"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-filemanager/-/ej2-filemanager-29.1.39.tgz#f6b8d841941d784c9ad9dd284ca104784fee1c64"
integrity sha512-vpZoKCmMwjyhI/hLLV+79bDoYT2B6FeleBGwhZc4jjEtZKK7Ddbs0aqNJ2WBjgET8Da1mZdT7bK5AaU1R8scsQ==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-grids" "~29.1.39"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-layouts" "~29.1.39"
"@syncfusion/ej2-lists" "~29.1.34"
"@syncfusion/ej2-navigations" "~29.1.38"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-splitbuttons" "~29.1.33"
"@syncfusion/ej2-grids@~29.1.39":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-grids/-/ej2-grids-29.1.40.tgz#e8f1ae106883474c5eadd046c0a818fe8d8df63c"
integrity sha512-zv6StTIP3Q66gjnY9/Oz5vPcknHXCCVaevKPfM350LMfqhFvfTOrE8mUi5bPOphx7XY+oizug7bm1EfIRUZaDA==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-calendars" "~29.1.40"
"@syncfusion/ej2-compression" "~29.1.33"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-dropdowns" "~29.1.40"
"@syncfusion/ej2-excel-export" "~29.1.33"
"@syncfusion/ej2-file-utils" "~29.1.33"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-lists" "~29.1.40"
"@syncfusion/ej2-navigations" "~29.1.40"
"@syncfusion/ej2-notifications" "~29.1.33"
"@syncfusion/ej2-pdf-export" "~29.1.40"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-splitbuttons" "~29.1.33"
"@syncfusion/ej2-icons@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-icons/-/ej2-icons-29.1.33.tgz#8ac6fc04dc31dbb20a2f20f753dada2e9ee2d6e5"
integrity sha512-kfhXGZ5QQAIkvqGdPXOnZCkPqKnyw0ieK74vfoFXv3UlJKLiSIAbkBxr8xOWn7k+FtlADDkGnOTAtIKUpyHBfQ==
"@syncfusion/ej2-inplace-editor@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-inplace-editor/-/ej2-inplace-editor-29.1.33.tgz#95be3631efdf7a527c5a4105fa9eeecd48722fd0"
integrity sha512-Tl9fvHg1OMW4KwVkfLDLP3sCHKRRa9RvrK3VyVFCOIMvwcu3iHYn6NyHR3t2FvB5kSpKcxJ0OtUGIXMGP2RmhQ==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-buttons" "~29.1.33"
"@syncfusion/ej2-calendars" "~29.1.33"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-dropdowns" "~29.1.33"
"@syncfusion/ej2-inputs" "~29.1.33"
"@syncfusion/ej2-lists" "~29.1.33"
"@syncfusion/ej2-navigations" "~29.1.33"
"@syncfusion/ej2-notifications" "~29.1.33"
"@syncfusion/ej2-popups" "~29.1.33"
"@syncfusion/ej2-richtexteditor" "~29.1.33"
"@syncfusion/ej2-splitbuttons" "~29.1.33"
"@syncfusion/ej2-inputs@~29.1.33", "@syncfusion/ej2-inputs@~29.1.39":
version "29.1.39"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-inputs/-/ej2-inputs-29.1.39.tgz#a5c1a8a5fed9da88a3f9224a951c0ce3c2e4bddc"
integrity sha512-W9jPqWsms1IyhhRx4Z9nyT1GfZx58D7W4C4eiwgUiGTS3+D+ahdFcy/z3VqI0q56+Hekn2cfinnQxBttsgwy+w==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-splitbuttons" "~29.1.33"
"@syncfusion/ej2-layouts@~29.1.39":
version "29.1.39"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-layouts/-/ej2-layouts-29.1.39.tgz#73478a212e9f912397a6ed522dfc2b89ef267fc1"
integrity sha512-32IlwaZ2UVbvCzO2JW7zibICbIRF7DVjkeyysxihl1N7RMo1+ahFKb8pAOx24qzj95A4sDcrnhYga/hw7E9tAg==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-lists@~29.1.33", "@syncfusion/ej2-lists@~29.1.34", "@syncfusion/ej2-lists@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-lists/-/ej2-lists-29.1.40.tgz#49c419db6d6757659df0c46d80b65d5cfa7a3be0"
integrity sha512-2fYtWa/HqPeaquP6aF4p/fghvOHTKwXv4t9JCCd/sNFpSdUmfVkVBIvXSyAVEiSRgofMg7cHlVgxKfjpSH++Fg==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-navigations@~29.1.33", "@syncfusion/ej2-navigations@~29.1.38", "@syncfusion/ej2-navigations@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-navigations/-/ej2-navigations-29.1.40.tgz#4af9a223ee1dd25d8bf305bc1128d4e7db1f4785"
integrity sha512-AJfd1BHYi4USjgR+69CsIcj2ulRhGV0tfZ0kcuLhf+NLUTMhPB5ttKJHUKx1ABWAaDBt7Dt7Bd6zAqsC/cv/lA==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-lists" "~29.1.40"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-notifications@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-notifications/-/ej2-notifications-29.1.33.tgz#8f32f21148d7c66139349745311e89690f4f83f2"
integrity sha512-MNKwBHXlDeuvjn+BDeIc77Ei2PGm7egiKnIZoP4A93fxZCetaiqLLUbGOHHJYmvOPuL4OOifNXcKSrhMA6RcrQ==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-buttons" "~29.1.33"
"@syncfusion/ej2-popups" "~29.1.33"
"@syncfusion/ej2-pdf-export@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-pdf-export/-/ej2-pdf-export-29.1.40.tgz#3580a0ce520a90534230f83c5901f622b8ffacd1"
integrity sha512-LCfbVuQOhw1JDLEjpWA4Ez//5pei5g36X0Wq4xiMgdWGYf1TloU0LtfbgTc56nXZhCKYJ3a3yhyD9s/SJ6DJwg==
dependencies:
"@syncfusion/ej2-compression" "~29.1.33"
"@syncfusion/ej2-pdf@~29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-pdf/-/ej2-pdf-29.1.40.tgz#f7ec7612f536851b3a895b485ea5d7e767840984"
integrity sha512-cHdHA3yodqtSJs97Bernth3zcQoT3x79roV+dVBUI9wip80IFjpq28zARmbjcCkrIvBfvN9/Ushg3rgybRWEgw==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-compression" "~29.1.33"
"@syncfusion/ej2-pdfviewer@29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-pdfviewer/-/ej2-pdfviewer-29.1.40.tgz#1a2624ee65d6de7619ea49e1602ced0cceb4b872"
integrity sha512-IGNKUi+V8hEMDfnbOq0QkFtbx4rQIgv4wrvp04QARtyvx4PDOxi9xsiAIaQOEBQT3Sku5oJHXX1sDde9yZRfYw==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-data" "~29.1.33"
"@syncfusion/ej2-drawings" "~29.1.40"
"@syncfusion/ej2-dropdowns" "~29.1.40"
"@syncfusion/ej2-inplace-editor" "~29.1.33"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-lists" "~29.1.40"
"@syncfusion/ej2-navigations" "~29.1.40"
"@syncfusion/ej2-notifications" "~29.1.33"
"@syncfusion/ej2-pdf" "~29.1.40"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-popups@~29.1.33", "@syncfusion/ej2-popups@~29.1.37":
version "29.1.37"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-popups/-/ej2-popups-29.1.37.tgz#965f3888b36345afb953c824f21b994017111e8f"
integrity sha512-0LAqQeYVu+eOu21ZXWkjycej4gOgfuR9A2Zm+GsgF+jskvL6ev47hCHg60zjlt9dowHPGJimz2ksKLDulyP64A==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-richtexteditor@~29.1.33":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-richtexteditor/-/ej2-richtexteditor-29.1.40.tgz#7f12a65253c36725cbbd743c52ee4b56e27bef1e"
integrity sha512-hm/TL8tiowQ0GDjb7RR3BBxX3ChM6ygtb2Him0wyunEx8hQVnI9wzmC1b+p/MBywF22x6KSzhtXPxZIYzgRe8w==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-buttons" "~29.1.34"
"@syncfusion/ej2-dropdowns" "~29.1.40"
"@syncfusion/ej2-filemanager" "~29.1.39"
"@syncfusion/ej2-inputs" "~29.1.39"
"@syncfusion/ej2-navigations" "~29.1.40"
"@syncfusion/ej2-popups" "~29.1.37"
"@syncfusion/ej2-splitbuttons" "~29.1.33"
"@syncfusion/ej2-splitbuttons@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-splitbuttons/-/ej2-splitbuttons-29.1.33.tgz#595b9ef4de78462e1d9c609b1e91b700a050bbcd"
integrity sha512-ScZpb7fiBOd/55AkpFZPvcFrTs6MiEkUFtH8vtqrV1G9cmgCJ8zl+6QbJjAtCOsWYEWPA70Qh5JKppMXJWkhGw==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-popups" "~29.1.33"
"@syncfusion/ej2-vue-base@~29.1.33":
version "29.1.33"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-vue-base/-/ej2-vue-base-29.1.33.tgz#e75be00a529eed5f2fdc888fba100a53e43f40ea"
integrity sha512-XnvgVioEejFL8aHJ1V0/kYd7ikE5tCHHcQSkiu38vyPRylg2ZwmidXWJT61d3LIjHc/f817mkQQUqfK8kbwVoQ==
dependencies:
"@syncfusion/ej2-base" "~29.1.33"
"@syncfusion/ej2-vue-pdfviewer@^29.1.40":
version "29.1.40"
resolved "https://registry.yarnpkg.com/@syncfusion/ej2-vue-pdfviewer/-/ej2-vue-pdfviewer-29.1.40.tgz#9db58414836c30366b65e21723e93557d7ebe820"
integrity sha512-QHOmuxEzQD1P2LYFpFODne2zfjejFx2k1KI9HfnRWMXj99X96zf4+0DK6fjlP5B9mWo+MuGqsHJ/7Vv3ArMOAw==
dependencies:
"@syncfusion/ej2-base" "~29.1.36"
"@syncfusion/ej2-pdfviewer" "29.1.40"
"@syncfusion/ej2-vue-base" "~29.1.33"
"@szmarczak/http-timer@^4.0.5":
version "4.0.6"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"