- Cataloghi

- Import ed Export Pagine
- ObjectID sostituita con ObjectId
This commit is contained in:
Surya Paolo
2024-12-17 17:56:03 +01:00
parent 8baf1e99f0
commit 7619ce5b51
67 changed files with 287 additions and 173 deletions

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18" APP_ID="18"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18" APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17" APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19" APP_ID="19"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18" APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17" APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="19" APP_ID="19"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,6 +1,6 @@
{ {
"name": "abitaregliiblei", "name": "abitaregliiblei",
"version": "1.1.12", "version": "1.1.14",
"description": "Abitare Gli Iblei", "description": "Abitare Gli Iblei",
"productName": "AbitareGliIblei", "productName": "AbitareGliIblei",
"author": "Paolo Arena", "author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16" APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{ {
"name": "riso", "name": "riso",
"version": "1.1.12", "version": "1.1.14",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.", "description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso", "productName": "Riso",
"author": "Paolo Arena", "author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15" APP_ID="15"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="15" APP_ID="15"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{ {
"name": "fioredellavita", "name": "fioredellavita",
"version": "1.1.12", "version": "1.1.14",
"description": "Fiore Della Vita", "description": "Fiore Della Vita",
"productName": "Fiore Della Vita", "productName": "Fiore Della Vita",
"author": "Paolo Arena", "author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="18" APP_ID="18"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,25 +1,24 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16" APP_ID="18"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet
DIRECTORY_SERVER=test.freeplanet_serverside DIRECTORY_SERVER=/var/www/nodejs_test.piuchebuono_server
SERVERDIR_WEBSITE="test.piuchebuono.app" SERVERDIR_WEBSITE="/var/www/test.gruppomacro.app"
SERVERPW_WEBSITE="pwdadmin@1AOK" APP_URL="https://test.gruppomacro.app"
APP_URL="https://test.piuchebuono.app"
URL_FACEBOOK="" URL_FACEBOOK=""
PROVA_PAOLO="" PROVA_PAOLO=""
LANG_DEFAULT="it" LANG_DEFAULT="it"
PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF" PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T" MASTER_KEY="KKPPSS5KJK435J3KSS9F9D8S9F8SD3CR3T"
MONGODB_HOST="https://test.freeplanet.app:3001" MONGODB_HOST="https://testapi.gruppomacro.app"
LOGO_REG='piuchebuono-logo-full.png' LOGO_REG='gruppomacro-logo-full.png'
TEST_NAME="" TEST_NAME=""
TEST_SURNAME="" TEST_SURNAME=""
TEST_EMAIL="" TEST_EMAIL=""
TEST_USERNAME="" TEST_USERNAME=""
TEST_PASSWORD="" TEST_PASSWORD=""
TEST_APORTADOR="" TEST_APORTADOR=""
PUBLICKEY_PUSH="BGXRf1TgcqocqD6J7qnRgCG7AvM2lxAoW7peb7UEzB4SxBb6DxGRdJ0UvD9ewnrB9KrSrh0-aDCODXBm7sZ1DDs" PUBLICKEY_PUSH="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
IN_CONSTRUCTION="0" IN_CONSTRUCTION="0"
DEBUG="1" DEBUG="1"
TELEGRAM_SUPPORT="" TELEGRAM_SUPPORT=""

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -1,6 +1,6 @@
{ {
"name": "gruppomacro", "name": "gruppomacro",
"version": "1.1.12", "version": "1.1.14",
"description": "GruppoMacro", "description": "GruppoMacro",
"productName": "Gruppo Macro", "productName": "Gruppo Macro",
"author": "Paolo Arena", "author": "Paolo Arena",
@@ -57,8 +57,8 @@
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"html2pdf.js": "^0.10.2", "html2pdf.js": "^0.10.2",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"jsbarcode": "^3.11.6",
"js-cookie": "^3.0.5", "js-cookie": "^3.0.5",
"jsbarcode": "^3.11.6",
"jspdf": "^2.5.2", "jspdf": "^2.5.2",
"leaflet": "^1.9.4", "leaflet": "^1.9.4",
"leaflet-routing-machine": "^3.2.12", "leaflet-routing-machine": "^3.2.12",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17" APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="17" APP_ID="17"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

View File

@@ -1,6 +1,6 @@
{ {
"name": "piuchebuono", "name": "piuchebuono",
"version": "1.1.12", "version": "1.1.14",
"description": "PiuCheBuono", "description": "PiuCheBuono",
"productName": "PiuCheBuono", "productName": "PiuCheBuono",
"author": "Paolo Arena", "author": "Paolo Arena",

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL="newfreeplanet" DIRECTORY_LOCAL="newfreeplanet"

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="13" APP_ID="13"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,4 +1,4 @@
APP_VERSION="1.1.12" APP_VERSION="1.1.14"
SERVICE_WORKER_FILE="service-worker.js" SERVICE_WORKER_FILE="service-worker.js"
APP_ID="16" APP_ID="16"
DIRECTORY_LOCAL=newfreeplanet DIRECTORY_LOCAL=newfreeplanet

View File

@@ -1,6 +1,6 @@
{ {
"name": "riso", "name": "riso",
"version": "1.1.12", "version": "1.1.14",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.", "description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso", "productName": "Riso",
"author": "Paolo Arena", "author": "Paolo Arena",

View File

@@ -1 +1 @@
TERMINA DI LAVORARE SU riso.app: (Sovrascrivo !) TERMINA DI LAVORARE SU piuchebuono.app: (Sovrascrivo !)

View File

@@ -1,6 +1,6 @@
{ {
"name": "gruppomacro", "name": "gruppomacro",
"version": "1.1.12", "version": "1.1.14",
"description": "GruppoMacro", "description": "GruppoMacro",
"productName": "Gruppo Macro", "productName": "Gruppo Macro",
"author": "Paolo Arena", "author": "Paolo Arena",

View File

@@ -34,7 +34,7 @@ self.addEventListener('activate', (event) => {
}); });
const APP_VERSION = "1.1.12"; const APP_VERSION = "1.1.14";
console.log(' [ VER-' + APP_VERSION + ' ] _---------________------ PAO: this is my custom service worker'); console.log(' [ VER-' + APP_VERSION + ' ] _---------________------ PAO: this is my custom service worker');

View File

@@ -207,6 +207,7 @@ export const shared_consts = {
FILTER_USER_SI_TELEGRAM_ID: 4194304, FILTER_USER_SI_TELEGRAM_ID: 4194304,
FILTER_USER_WITHOUT_USERNAME_TELEGRAM: 8388608, FILTER_USER_WITHOUT_USERNAME_TELEGRAM: 8388608,
FILTER_USER_PROVINCE: 16777216, FILTER_USER_PROVINCE: 16777216,
FILTER_USER_SENZA_PROVINCE: 33554432,
OPTIONS_SEARCH_ONLY_FULL_WORDS: 1, OPTIONS_SEARCH_ONLY_FULL_WORDS: 1,
OPTIONS_SEARCH_USER_ONLY_FULL_WORDS: 2, OPTIONS_SEARCH_USER_ONLY_FULL_WORDS: 2,

View File

@@ -166,11 +166,11 @@
{{ myproduct.productInfo.publisher.name }} {{ myproduct.productInfo.publisher.name }}
</div> </div>
<div <div
v-if="myproduct.productInfo.date_publishing && complete" v-if="myproduct.productInfo.date_pub && complete"
class="book-data-pub" class="book-data-pub"
> >
Data Pubblicazione: Data Pubblicazione:
{{ tools.getstrDate(myproduct.productInfo.date_publishing) }} {{ tools.getstrDate(myproduct.productInfo.date_pub) }}
</div> </div>
<q-separator class="q-my-sm"></q-separator> <q-separator class="q-my-sm"></q-separator>

View File

@@ -578,7 +578,7 @@ export default defineComponent({
function isProductNovita() { function isProductNovita() {
const monthsAgo = props.scheda.etichette?.novita?.months ?? 6; // Numero di mesi da considerare "recenti" const monthsAgo = props.scheda.etichette?.novita?.months ?? 6; // Numero di mesi da considerare "recenti"
const publishingDate = new Date(myproduct.value!.productInfo.date_publishing!); const publishingDate = new Date(myproduct.value!.productInfo.date_pub!);
// Calcola i millisecondi corrispondenti a X mesi fa // Calcola i millisecondi corrispondenti a X mesi fa
const monthsInMilliseconds = monthsAgo * 30 * 24 * 60 * 60 * 1000; // Approssimazione, non tutti i mesi hanno 30 giorni const monthsInMilliseconds = monthsAgo * 30 * 24 * 60 * 60 * 1000; // Approssimazione, non tutti i mesi hanno 30 giorni

View File

@@ -623,7 +623,7 @@
table="productinfos" table="productinfos"
:id="myproduct.productInfo._id" :id="myproduct.productInfo._id"
:rec="myproduct.productInfo" :rec="myproduct.productInfo"
mykey="date_publishing" mykey="date_pub"
debounce="1000" debounce="1000"
:save="updateproductmodif()" :save="updateproductmodif()"
:type="costanti.FieldType.date" :type="costanti.FieldType.date"
@@ -717,7 +717,7 @@
table="productinfos" table="productinfos"
:id="myproduct.productInfo._id" :id="myproduct.productInfo._id"
:rec="myproduct.productInfo" :rec="myproduct.productInfo"
mykey="totaleVenduti" mykey="totVen"
debounce="1000" debounce="1000"
:save="updateproductmodif()" :save="updateproductmodif()"
:type="costanti.FieldType.number" :type="costanti.FieldType.number"
@@ -729,7 +729,7 @@
table="productinfos" table="productinfos"
:id="myproduct.productInfo._id" :id="myproduct.productInfo._id"
:rec="myproduct.productInfo" :rec="myproduct.productInfo"
mykey="venditeLastM" mykey="vLastM"
debounce="1000" debounce="1000"
:save="updateproductmodif()" :save="updateproductmodif()"
:type="costanti.FieldType.number" :type="costanti.FieldType.number"
@@ -741,7 +741,7 @@
table="productinfos" table="productinfos"
:id="myproduct.productInfo._id" :id="myproduct.productInfo._id"
:rec="myproduct.productInfo" :rec="myproduct.productInfo"
mykey="venditeLast6M" mykey="vLast6M"
debounce="1000" debounce="1000"
:save="updateproductmodif()" :save="updateproductmodif()"
:type="costanti.FieldType.number" :type="costanti.FieldType.number"

View File

@@ -8,12 +8,16 @@ import { PropType, defineComponent, onMounted, ref } from 'vue'
import { IMyPage } from '@src/model' import { IMyPage } from '@src/model'
export default defineComponent({ export default defineComponent({
name: 'CExportPage', name: 'CExportImportPage',
props: { props: {
idPage: { idPage: {
type: String, type: String,
required: true, required: true,
}, },
esporta: {
type: Boolean,
required: true,
},
nomefile: { nomefile: {
type: String, type: String,
required: true, required: true,

View File

@@ -0,0 +1,55 @@
<template>
<div v-if="myrec && myrec.path" style="width: 800px;" class="">
<div v-if="esporta">
<h2>Pagina '{{ myrec.path }}'</h2>
<br />
<div class="column">
Esporta:
<q-input
outlined
autofocus
v-model="nomefile"
label="Nome File"
></q-input>
<q-btn
color="primary"
:label="esporta ? 'Esporta Pagina' : 'Importa Pagina'"
@click="esportaPagina"
></q-btn>
<CDownloadJsonFile
v-if="testoJson"
:testoJson="testoJson"
:title="`Scarica file ${nomefile}`"
:nomefile="nomefile"
>
</CDownloadJsonFile>
</div>
</div>
<div v-else>
<div class="column">
Importa file JSON:
<input
type="file"
@change="onFileChange">
</input>
fileContent: {{fileContent}}
<q-btn
color="primary"
label="Importa file"
@click="importaPagina"
></q-btn>
</div>
</div>
<div class="row">Risultato:<br>
{{ ris }}</div>
</div>
</template>
<script lang="ts" src="./CExportImportPage.ts"></script>
<style lang="scss" scoped>
@import './CExportImportPage.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as CExportImportPage} from './CExportImportPage.vue'

View File

@@ -1,51 +0,0 @@
<template>
<div v-if="myrec && myrec.path" style="width: 800px;" class="">
<h2>Pagina '{{ myrec.path }}'</h2>
<br />
<div class="column">
Esporta:
<q-input
outlined
autofocus
v-model="nomefile"
label="Nome File"
></q-input>
<q-btn
color="primary"
label="Esporta Pagina"
@click="esportaPagina"
></q-btn>
<CDownloadJsonFile
v-if="testoJson"
:testoJson="testoJson"
:title="`Scarica file ${nomefile}`"
:nomefile="nomefile"
>
</CDownloadJsonFile>
</div>
<div class="column">
Importa file JSON:
<input
type="file"
@change="onFileChange"
outlined
></input>
fileContent: {{fileContent}}
<q-btn
color="primary"
label="Importa file"
@click="importaPagina"
></q-btn>
</div>
<div class="row">Risultato:<br>
{{ ris }}</div>
</div>
</template>
<script lang="ts" src="./CExportPage.ts"></script>
<style lang="scss" scoped>
@import './CExportPage.scss';
</style>

View File

@@ -1 +0,0 @@
export {default as CExportPage} from './CExportPage.vue'

View File

@@ -50,11 +50,13 @@ export default defineComponent({
onMounted(mounted) onMounted(mounted)
function makeClick() {
}
return { return {
tools, tools,
getmenuByPath, getmenuByPath,
makeClick,
} }
} }
}) })

View File

@@ -1,8 +1,9 @@
<template> <template>
<div :style="{ paddingLeft: `${level * 4}px` }"> <div :style="{ paddingLeft: `${level * 4}px` }">
<q-separator v-if="item.isseparator" /> <q-separator v-if="item.isseparator" />
<q-expansion-item <q-expansion-item
v-else-if="item.routes2 || item.sottoMenu" v-else-if="item.routes2 || (item.sottoMenu && item.sottoMenu.length > 0)"
:content-inset-level="item.level_parent" :content-inset-level="item.level_parent"
:header-class="getmymenuclass(item)" :header-class="getmymenuclass(item)"
:header-inset-level="item.level_parent" :header-inset-level="item.level_parent"
@@ -14,45 +15,49 @@
item.mainMenu || item.routes2 ? 'fas fa-chevron-down' : 'none' item.mainMenu || item.routes2 ? 'fas fa-chevron-down' : 'none'
" "
> >
<c-menu-item <router-link :to="getroute(item)" custom>
v-for="(childItem, childIndex) in item.routes2 || item.sottoMenu" <c-menu-item
:key="childIndex" v-for="(childItem, childIndex) in item.routes2 || (item.sottoMenu && item.sottoMenu.length > 0)"
:item="getmenuByPath(childItem)" :key="childIndex"
:tools="tools" :item="getmenuByPath(childItem)"
:getroute="getroute" :tools="tools"
:getmymenuclass="getmymenuclass" :getroute="getroute"
:getimgiconclass="getimgiconclass" :getmymenuclass="getmymenuclass"
:clBase="clBase" :getimgiconclass="getimgiconclass"
:mainMenu="item.mainMenu" :clBase="clBase"
:level="level + 1" :mainMenu="item.mainMenu"
/> :level="level + 1"
/>
</router-link>
</q-expansion-item> </q-expansion-item>
<q-item <router-link v-else :to="getroute(item)" custom>
v-else <q-item
clickable clickable
:to="getroute(item)" :to="getroute(item)"
:content-inset-level="item.level_parent" @click="makeClick"
:header-inset-level="item.level_parent" :content-inset-level="item.level_parent"
active-class="my-menu-active" :header-inset-level="item.level_parent"
expand-icon="none" active-class="my-menu-active"
> expand-icon="none"
<q-item-section thumbnail> >
<q-avatar <q-item-section thumbnail>
:icon="item.materialIcon" <q-avatar
:size="!!item.iconsize ? item.iconsize : '2rem'" :icon="item.materialIcon"
:font-size="!!item.iconsize ? item.iconsize : '2rem'" :size="!!item.iconsize ? item.iconsize : '2rem'"
text-color="primary" :font-size="!!item.iconsize ? item.iconsize : '2rem'"
square text-color="primary"
rounded square
> rounded
</q-avatar> >
</q-item-section> </q-avatar>
</q-item-section>
<q-item-section> <q-item-section>
<span :class="item.extraclass">{{ tools.getLabelByItem(item) }}</span> <span :class="item.extraclass">{{ tools.getLabelByItem(item) }}</span>
<span v-if="item.subtitle" class="subtitle">{{ item.subtitle }}</span> <span v-if="item.subtitle" class="subtitle">{{ item.subtitle }}</span>
</q-item-section> </q-item-section>
</q-item> </q-item>
</router-link>
</div> </div>
</template> </template>

View File

@@ -49,7 +49,7 @@ export default defineComponent({
CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation, CMySlider, CSelectColor, CSelectFontSize, CSelectImage, CImgPoster, CSelectAnimation, CMySlider,
CMySize, CBorders, CMyDimensioni, CMyText, CMySize, CBorders, CMyDimensioni, CMyText,
}, },
emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem', 'dupPage', 'expPage'], emits: ['saveElem', 'selElemClick', 'toggleSize', 'deleteElem', 'dupPage', 'expPage', 'impPage'],
props: { props: {
myelem: { myelem: {
type: Object as PropType<IMyElem>, type: Object as PropType<IMyElem>,
@@ -185,6 +185,9 @@ export default defineComponent({
async function exportPage() { async function exportPage() {
emit('expPage', null) emit('expPage', null)
} }
async function importPage() {
emit('impPage', null)
}
async function dupElem(order?: number) { async function dupElem(order?: number) {
const newrec: IMyElem = tools.jsonCopy(props.myelem) const newrec: IMyElem = tools.jsonCopy(props.myelem)
@@ -1090,6 +1093,7 @@ export default defineComponent({
copyfromTemplate, copyfromTemplate,
modifElemAndSchede, modifElemAndSchede,
exportPage, exportPage,
importPage,
} }
}, },

View File

@@ -57,6 +57,15 @@
@click="dupPage()" @click="dupPage()"
> >
</q-btn> </q-btn>
<q-btn
icon="fas fa-expand-alt"
label="Importa"
dense
size="sm"
color="primary"
@click="importPage()"
>
</q-btn>
<q-btn <q-btn
icon="fas fa-expand-alt" icon="fas fa-expand-alt"
label="Esporta" label="Esporta"

View File

@@ -10,7 +10,7 @@ import { CMyElem } from '@/components/CMyElem'
import { CTitleBanner } from '@/components/CTitleBanner' import { CTitleBanner } from '@/components/CTitleBanner'
import { CMyEditElem } from '@/components/CMyEditElem' import { CMyEditElem } from '@/components/CMyEditElem'
import { CMyPageElem2 } from '@/components/CMyPageElem2' import { CMyPageElem2 } from '@/components/CMyPageElem2'
import { CExportPage } from '@/components/CExportPage' import { CExportImportPage } from '@src/components/CExportImportPage'
import { CImgTitle } from '../CImgTitle/index' import { CImgTitle } from '../CImgTitle/index'
import { CTitle } from '../CTitle/index' import { CTitle } from '../CTitle/index'
@@ -25,7 +25,7 @@ export default defineComponent({
name: 'CMyPageElem', name: 'CMyPageElem',
components: { components: {
LandingFooter, CImgTitle, CTitle, CMyElem, LandingFooter, CImgTitle, CTitle, CMyElem,
CMyEditElem, CMyPageElem2, CTitleBanner, CExportPage, CMyEditElem, CMyPageElem2, CTitleBanner, CExportImportPage,
}, },
props: { props: {
title: String, title: String,
@@ -79,6 +79,7 @@ export default defineComponent({
const mywidthEditor = ref(400) const mywidthEditor = ref(400)
const showexportPage = ref(false) const showexportPage = ref(false)
const showimportPage = ref(false)
const editOn = computed({ const editOn = computed({
get(): boolean { get(): boolean {
@@ -199,6 +200,7 @@ export default defineComponent({
deleteElem, deleteElem,
duplicatePage, duplicatePage,
showexportPage, showexportPage,
showimportPage,
} }
}, },

View File

@@ -52,6 +52,7 @@
@toggleSize="toggleSize" @toggleSize="toggleSize"
@dupPage="duplicatePage" @dupPage="duplicatePage"
@expPage="showexportPage = !showexportPage" @expPage="showexportPage = !showexportPage"
@impPage="showimportPage = !showimportPage"
> >
</CMyEditElem> </CMyEditElem>
</q-drawer> </q-drawer>
@@ -177,7 +178,22 @@
</q-toolbar> </q-toolbar>
<q-card-section class="q-pa-xs inset-shadow"> <q-card-section class="q-pa-xs inset-shadow">
<br> <br>
<CExportPage :idPage="selElem.idPage" :nomefile="`esporta_${rec.path}.json`"> </CExportPage> <CExportImportPage :idPage="rec._id" :nomefile="`esporta_${rec.path}.json`" :esporta="true"> </CExportImportPage>
<br>
</q-card-section>
</q-card>
</q-dialog>
<q-dialog v-model="showimportPage">
<q-card class="dialog_card">
<q-toolbar class="bg-primary text-white">
<q-toolbar-title>
Esporta Pagina
</q-toolbar-title>
<q-btn flat round color="white" icon="close" v-close-popup></q-btn>
</q-toolbar>
<q-card-section class="q-pa-xs inset-shadow">
<br>
<CExportImportPage :idPage="rec._id" :nomefile="`esporta_${rec.path}.json`"> </CExportImportPage>
<br> <br>
</q-card-section> </q-card-section>
</q-card> </q-card>

View File

@@ -468,7 +468,7 @@ export default defineComponent({
try { try {
console.log('mounted', 'isFieldDb()', myrow.value, 'sub', props.subfield, 'field', props.field) // console.log('mounted', 'isFieldDb()', myrow.value, 'sub', props.subfield, 'field', props.field)
if (isFieldDb() && !props.isrec) { if (isFieldDb() && !props.isrec) {
// console.log(' . none...') // console.log(' . none...')
} else { } else {

View File

@@ -10,7 +10,7 @@
<meta name="description" content="<%= productDescription %>"> <meta name="description" content="<%= productDescription %>">
<meta name="format-detection" content="telephone=no"> <meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no"> <meta name="msapplication-tap-highlight" content="no">
<meta name="version" content="1.1.12"> <meta name="version" content="1.1.14">
<meta name="viewport" <meta name="viewport"
content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>"> content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">

View File

@@ -69,10 +69,15 @@ export default defineComponent({
} */ } */
function getroute(elem: IListRoutes) { function getroute(elem: IListRoutes) {
let link = ''
if (elem.idelem) { if (elem.idelem) {
return tools.getUrlByTipoProj(elem.urlroute ? elem.urlroute : '') + elem.idelem link = tools.getUrlByTipoProj(elem.urlroute ? elem.urlroute : '') + elem.idelem
} }
return elem.path if (!link)
link = elem.path
// console.log('getroute LINK=', link)
return link
} }
function getmymenuclass(elem: IListRoutes) { function getmymenuclass(elem: IListRoutes) {

View File

@@ -37,18 +37,18 @@ export interface IProductInfo {
collezione?: string collezione?: string
idPublisher?: string idPublisher?: string
publisher?: IPublisher publisher?: IPublisher
date_publishing?: Date date_pub?: Date
date_publishing_ts: number date_pub_ts: number
pagine?: number pagine?: number
productTypes?: number[] productTypes?: number[]
versioneGM?: string versioneGM?: string
short_descr: string short_descr: string
totaleVenduti?: number, totVen?: number,
venditeLastM?: number, vLastM?: number,
venditeLast6M?: number, vLast6M?: number,
venditeLastY?: number, vLastY?: number,
venditeLast2Y?: number, vLast2Y?: number,
dataUltimoOrdine?: Date, dataUltimoOrdine?: Date,
rank3M?: number, rank3M?: number,
rank6M?: number, rank6M?: number,

View File

@@ -368,11 +368,11 @@ export default defineComponent({
return importMacroCatalogoJson(cmd, testo); return importMacroCatalogoJson(cmd, testo);
} else if (cmd === shared_consts.Cmd.MACRO_DESCRELINKSITOWEB) { } else if (cmd === shared_consts.Cmd.MACRO_DESCRELINKSITOWEB) {
console.log('TESTO PRIMA:', testo) // console.log('TESTO PRIMA:', testo)
const testoJSON = tools.convertXMLStringToJSON(testo) const testoJSON = tools.convertXMLStringToJSON(testo)
const testoJSONtoPrint = JSON.stringify(testoJSON, null, 2) const testoJSONtoPrint = JSON.stringify(testoJSON, null, 2)
console.log(testoJSONtoPrint) // console.log(testoJSONtoPrint)
return importMacroCatalogoJson(cmd, testoJSONtoPrint) return importMacroCatalogoJson(cmd, testoJSONtoPrint)
} }

View File

@@ -65,7 +65,11 @@ export default defineComponent({
{ {
label: 'Provincia', label: 'Provincia',
value: shared_consts.FILTER_USER_PROVINCE value: shared_consts.FILTER_USER_PROVINCE
} },
{
label: 'Senza Provincia',
value: shared_consts.FILTER_USER_SENZA_PROVINCE
},
] ]
} else if (tools.appid() === tools.IDAPP_FREEPLANET) { } else if (tools.appid() === tools.IDAPP_FREEPLANET) {

View File

@@ -0,0 +1,29 @@
.maintenance-page {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
background-color: #f8f9fa;
color: #343a40;
text-align: center;
}
h1 {
margin-bottom: 16px;
}
button {
margin-top: 16px;
padding: 10px 15px;
font-size: 16px;
color: white;
background-color: #007bff;
border: none;
border-radius: 5px;
cursor: pointer;
}
button:hover {
background-color: #0056b3;
}

View File

@@ -1,8 +1,25 @@
import { defineComponent } from 'vue' import { computed, defineComponent, onMounted, ref } from 'vue'
import { tools } from '@store/Modules/tools'
import { useRouter } from 'vue-router';
export default defineComponent({ export default defineComponent({
name: 'sito_offline', name: 'sito_offline',
setup() { setup() {
return {}
const $router = useRouter()
onMounted(() => {
});
const checkStatus = () => {
// Logica per controllare lo stato del servizio (opzionale)
$router.replace('/')
};
return {
checkStatus,
tools,
};
}, },
}) })

View File

@@ -1,7 +1,19 @@
<template> <template>
<div> <div class="maintenance-page">
sito_offline <h1 class="text-blue text-bold">Sito "{{ tools.getappname() }}" In Manutenzione</h1>
<q-img src="images/sito_in_manutenzione.jpg" width="200px" height="200px">
</q-img>
<br>
<p>Ci scusiamo per l'inconveniente, ma stiamo effettuando lavori di manutenzione sul sito.</p>
<p>Ritorneremo online il prima possibile. Grazie per la vostra pazienza!</p>
<button @click="checkStatus">Riaggiorna la pagina</button>
</div> </div>
</template> </template>
<script lang="ts" src="./sito_offline.ts"> <script lang="ts" src="./sito_offline.ts">
</script> </script>
<style lang="scss" scoped>
@import "./sito_offline.scss";
</style>

View File

@@ -1929,7 +1929,7 @@ const msg_it = {
descrizione_completa_macro: '{descrizione_completa_macro}', descrizione_completa_macro: '{descrizione_completa_macro}',
descrizione_breve_macro: '{descrizione_breve_macro}', descrizione_breve_macro: '{descrizione_breve_macro}',
link_macro: '{link_macro}', link_macro: '{link_macro}',
totaleVenduti: 'Totale Venduti', totVen: 'Totale Venduti',
} }

View File

@@ -1368,7 +1368,7 @@ export const colAttivita = [
showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView, showWhen: costanti.showWhen.NewRec + costanti.showWhen.InPage + costanti.showWhen.InEdit + costanti.showWhen.InView,
}), }),
AddCol({ AddCol({
name: 'date_publishing', label_trans: 'products.date_publishing', name: 'date_pub', label_trans: 'products.date_pub',
fieldtype: costanti.FieldType.onlydate, fieldtype: costanti.FieldType.onlydate,
foredit: false, foredit: false,
noshowlabel: true, noshowlabel: true,
@@ -2338,7 +2338,7 @@ export const colTableProductInfos = [
AddCol({ name: 'valori_nutrizionali', label_trans: 'products.valori_nutrizionali', fieldtype: costanti.FieldType.html }), AddCol({ name: 'valori_nutrizionali', label_trans: 'products.valori_nutrizionali', fieldtype: costanti.FieldType.html }),
AddCol({ name: 'author', label_trans: 'products.author', fieldtype: costanti.FieldType.string }), AddCol({ name: 'author', label_trans: 'products.author', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'collezione', label_trans: 'products.collezione', fieldtype: costanti.FieldType.string }), AddCol({ name: 'collezione', label_trans: 'products.collezione', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'date_publishing', label_trans: 'products.date_publishing', fieldtype: costanti.FieldType.onlydate }), AddCol({ name: 'date_pub', label_trans: 'products.date_pub', fieldtype: costanti.FieldType.onlydate }),
AddCol({ name: 'publisher', label_trans: 'products.publisher', fieldtype: costanti.FieldType.string }), AddCol({ name: 'publisher', label_trans: 'products.publisher', fieldtype: costanti.FieldType.string }),
AddCol({ name: 'pagine', label_trans: 'products.pagine', fieldtype: costanti.FieldType.number }), AddCol({ name: 'pagine', label_trans: 'products.pagine', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'note', label_trans: 'products.note', fieldtype: costanti.FieldType.html }), AddCol({ name: 'note', label_trans: 'products.note', fieldtype: costanti.FieldType.html }),

View File

@@ -115,6 +115,7 @@ export const tools = {
IDAPP_CNM: '10', IDAPP_CNM: '10',
IDAPP_FREEPLANET: '1', IDAPP_FREEPLANET: '1',
IDAPP_RISO: '13', IDAPP_RISO: '13',
IDAPP_PCB: '17',
IDAPP_MACRO: '18', IDAPP_MACRO: '18',
TipoMsg: { TipoMsg: {
@@ -8035,7 +8036,7 @@ export const tools = {
} catch (e) { } catch (e) {
console.error('err getDirectoryGall', e) console.error('err getDirectoryGall', e)
} }
console.log('getDirectoryGall', ris, 'mypath', path, 'myrow', myrow) // console.log('getDirectoryGall', ris, 'mypath', path, 'myrow', myrow)
return ris return ris
}, },

View File

@@ -1278,10 +1278,10 @@ export const useProducts = defineStore('Products', {
const maxDescriptionLength = testo.maxlength ?? 100; const maxDescriptionLength = testo.maxlength ?? 100;
const description = myproduct.productInfo.short_descr || ''; const description = myproduct.productInfo.short_descr || '';
const long_descr = myproduct.productInfo.description || ''; const long_descr = myproduct.productInfo.description || '';
const date_pub = tools.getstrDateShort(myproduct.productInfo.date_publishing) || ''; const date_pub = tools.getstrDateShort(myproduct.productInfo.date_pub) || '';
const ranking_globale = myproduct.productInfo.rank1Y! || 0; const ranking_globale = myproduct.productInfo.rank1Y! || 0;
const ranking = myproduct.indiceRanking! || 0; const ranking = myproduct.indiceRanking! || 0;
const venduti = myproduct.productInfo.totaleVenduti! || 0; const venduti = myproduct.productInfo.totVen! || 0;
const linkvenduti = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">'+venduti+'</a>' const linkvenduti = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">'+venduti+'</a>'
const debugstr = " Rank=" + ranking + "<br> 1Y=" + (myproduct.productInfo.rank1Y! || '') + '<br> Venduti=' + linkvenduti + '<br> Data Pubb=' + date_pub const debugstr = " Rank=" + ranking + "<br> 1Y=" + (myproduct.productInfo.rank1Y! || '') + '<br> Venduti=' + linkvenduti + '<br> Data Pubb=' + date_pub

View File

@@ -638,8 +638,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
materialIcon: 'home', materialIcon: 'home',
name: 'otherpages.sito_offline', name: 'otherpages.sito_offline',
component: () => import('@src/rootgen/sito_offline/sito_offline.vue'), component: () => import('@src/rootgen/sito_offline/sito_offline.vue'),
inmenu: true, inmenu: false,
infooter: true, infooter: false,
} }
// console.log('Sito Online? ', toolsext.sito_online(false)) // console.log('Sito Online? ', toolsext.sito_online(false))
@@ -647,7 +647,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (!toolsext.sito_online(false)) { if (!toolsext.sito_online(false)) {
static_data.routes = [sito_offline, last] static_data.routes = [sito_offline, last]
} else { } else {
static_data.routes = [...baseroutes, ...ecommRoutes, ...adminRoutes, ...arrpagesroute, ...AIRoutes, last] static_data.routes = [sito_offline, ...baseroutes, ...ecommRoutes, ...adminRoutes, ...arrpagesroute, ...AIRoutes, last]
} }
/*for (const menu of static_data.routes) { /*for (const menu of static_data.routes) {

View File

@@ -426,12 +426,12 @@ export default defineComponent({
if (sort === costanti.SORT_PUBDATE) { if (sort === costanti.SORT_PUBDATE) {
arrprod = arrprod.sort((a: IProduct, b: IProduct) => { arrprod = arrprod.sort((a: IProduct, b: IProduct) => {
return b.productInfo.date_publishing_ts - a.productInfo.date_publishing_ts return b.productInfo.date_pub_ts - a.productInfo.date_pub_ts
}) })
} else if (sort === costanti.SORT_BESTSELLER) { } else if (sort === costanti.SORT_BESTSELLER) {
arrprod = arrprod.sort((a: IProduct, b: IProduct) => { arrprod = arrprod.sort((a: IProduct, b: IProduct) => {
return b.productInfo.rank1Y! - a.productInfo.rank1Y! return b.productInfo.rank3M! - a.productInfo.rank3M!
}) })
arrprod = arrprod.map((product, index) => { arrprod = arrprod.map((product, index) => {