trabajando en interior

This commit is contained in:
Jaime Jiménez
2025-07-30 22:18:06 +02:00
parent 8b34d6dca9
commit eb0b5610d8
41 changed files with 1082 additions and 201 deletions

View File

@ -7,8 +7,98 @@ Website: https://themesbrand.com/
Contact: support@themesbrand.com
File: Main Css File
*/
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap");
@import url("https://fonts.googleapis.com/css2?family=Public+Sans:wght@300;400;500;600;700&display=swap");
/* poppins-300 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Poppins';
font-style: normal;
font-weight: 300;
src: url('../fonts/poppins/poppins-v23-latin-300.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* poppins-regular - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Poppins';
font-style: normal;
font-weight: 400;
src: url('../fonts/poppins/poppins-v23-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* poppins-500 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Poppins';
font-style: normal;
font-weight: 500;
src: url('../fonts/poppins/poppins-v23-latin-500.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* poppins-600 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Poppins';
font-style: normal;
font-weight: 600;
src: url('../fonts/poppins/poppins-v23-latin-600.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* poppins-700 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Poppins';
font-style: normal;
font-weight: 700;
src: url('../fonts/poppins/poppins-v23-latin-700.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* public-sans-300 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Public Sans';
font-style: normal;
font-weight: 300;
src: url('../fonts/public-sans/public-sans-v20-latin-300.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* public-sans-regular - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Public Sans';
font-style: normal;
font-weight: 400;
src: url('../fonts/public-sans/public-sans-v20-latin-regular.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* public-sans-500 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Public Sans';
font-style: normal;
font-weight: 500;
src: url('../fonts/public-sans/public-sans-v20-latin-500.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* public-sans-600 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Public Sans';
font-style: normal;
font-weight: 600;
src: url('../fonts/public-sans/public-sans-v20-latin-600.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
/* public-sans-700 - latin */
@font-face {
font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */
font-family: 'Public Sans';
font-style: normal;
font-weight: 700;
src: url('../fonts/public-sans/public-sans-v20-latin-700.woff2') format('woff2'); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */
}
@font-face {
font-family: "hkgrotesk";
src: url("../fonts/hkgrotesk-light.eot");

File diff suppressed because one or more lines are too long

View File

@ -70,4 +70,26 @@
min-height: 70px; /* Alto mínimo */
max-width: 70px; /* Ancho máximo */
max-height: 70px; /* Alto máximo */
}
@keyframes fadeInUpBounce {
0% {
opacity: 0;
transform: translateY(30px);
}
60% {
opacity: 1;
transform: translateY(-10px);
}
80% {
transform: translateY(5px);
}
100% {
transform: translateY(0);
}
}
.animate-fadeInUpBounce {
animation: fadeInUpBounce 0.6s ease-out both;
animation-delay: 0.1s;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 484 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 481 KiB

View File

@ -1,23 +1,65 @@
$(() => {
$('.imagen-container-group').on('click', '.imagen-selector', function () {
const clicked = $(this);
const group = clicked.closest('.imagen-container-group');
class imagen_presupuesto {
// Limpiar selección anterior
group.find('.imagen-selector').removeClass('selected preselected')
.find('.image-presupuesto').removeClass('selected');
constructor(data) {
this.id = data.id;
this.imagen = data.imagen;
this.alt = data.alt || "";
this.group = data.group || ""; // Grupo al que pertenece el radio
this.texto = data.texto || ""; // Texto de la etiqueta
this.selected = data.selected || false;
this.extraClass = data.extraClass + " " || "";
this.extraData = data.extra_data || {}; // Datos extra opcionales
}
// Marcar nuevo seleccionado
clicked.addClass('selected');
const img = clicked.find('.image-presupuesto');
img.addClass('selected');
render() {
const contenedor = $('<div>', {
id: this.id,
class: `${this.extraClass}image-container imagen-selector${this.selected ? ' selected' : ''}`
});
// Añadir atributos extra al contenedor
for (const [key, value] of Object.entries(this.extraData)) {
contenedor.attr(`data-${key}`, value);
}
// Aplicar animación (reset antes para que se repita)
img.removeClass('zoom-anim');
void img[0].offsetWidth; // "reflow" para reiniciar animación
img.addClass('zoom-anim');
const input = $('<input>', {
type: 'radio',
name: this.group,
value: this.id,
hidden: true
});
// Guardar ID en hidden si lo necesitas
$('#tipoEncuadernacionSeleccionada').val(clicked.attr('id'));
});
});
const imagen = $('<img>', {
class: 'image-presupuesto',
id: this.id + '-img',
src: this.imagen,
alt: this.alt
});
const etiqueta = $('<label>', {
for: this.id + '-img',
class: 'form-label',
text: this.texto
});
contenedor.append(imagen, etiqueta);
return contenedor;
}
setSelected(selected) {
this.selected = selected;
const contenedor = $(`#${this.id}`);
const radio = contenedor.find('input[type="radio"]');
if (selected) {
contenedor.addClass('selected');
radio.prop('checked', true).trigger('change'); // <-- esto actualiza el input y lanza evento
} else {
contenedor.removeClass('selected');
radio.prop('checked', false);
}
}
}
export default imagen_presupuesto;

View File

@ -0,0 +1,22 @@
$('.imagen-container-group').on('click', '.image-container', function () {
const clicked = $(this);
const group = clicked.closest('.imagen-container-group');
// Limpiar selección anterior
group.find('.image-container').removeClass('selected')
.find('.image-presupuesto').removeClass('zoom-anim');
// Marcar nuevo seleccionado
clicked.addClass('selected');
// Aplicar animación de zoom
const img = clicked.find('.image-presupuesto');
void img[0].offsetWidth; // Forzar reflow
img.addClass('zoom-anim');
// Guardar selección en hidden
$('#tipoEncuadernacionSeleccionada').val(clicked.attr('id'));
clicked.find('input[type="radio"]').prop('checked', true).trigger('change');
});

View File

@ -1,8 +1,38 @@
import imagen_presupuesto from "./imagen-presupuesto.js";
class PresupuestoCliente {
constructor() {
this.DEBUG = true; // Activar o desactivar el modo de depuración
this.formData = {
datosGenerales: {
titulo: '',
autor: '',
isbn: '',
tirada1: '',
tirada2: '',
tirada3: '',
tirada4: '',
ancho: '',
alto: '',
formatoPersonalizado: false,
paginasNegro: '',
paginasColor: '',
posicionPaginasColor: '',
tipoImpresion: 'fresado',
},
interior: {
color: '',
papel: '',
gramaje: '',
},/*
cubierta: {},*/
}
// pestaña datos generales
this.divContentDatosGenerales = $('#content-datos-generales');
this.titulo = $('#titulo');
this.autor = $('#autor');
this.isbn = $('#isbn');
@ -10,25 +40,318 @@ class PresupuestoCliente {
this.tirada2 = $('#tirada2');
this.tirada3 = $('#tirada3');
this.tirada4 = $('#tirada4');
this.formatoPersonalizado = $('#formato-personalizado');
this.divFormato = $('.div-formato');
this.divFormatoPersonalizado = $('.div-formato-personalizado');
this.formato = $('#formato');
this.ancho = $('#ancho');
this.alto = $('#alto');
this.paginasNegro = $('#paginas-negro');
this.paginasColor = $('#paginas-color')
this.paginasColor = $('#paginas-color');
this.divPosicionPaginasColor = $('#div-posicion-paginas-color');
this.posicionPaginasColor = $('#posicionPaginasColor');
this.paginas = $('#paginas');
this.btn_next_datos_generales = $('#next-datos-generales');
this.datos_generales_alert = $('#datos-generales-alert');
// pestaña interior
this.divContentInterior = $('#content-interior');
this.divOpcionesColor = $('#div-opciones-color');
this.divPapelInterior = $('#div-papel-interior');
// pestaña cubierta
this.btn_plantilla_cubierta = $('#btn-plantilla-cubierta');
this.btn_impresion_cubierta_help = $('#impresion-cubierta-help');
}
init() {
this.initButtonsEventListeners();
this.#initDatosGenerales();
this.#initCubierta();
const stored = sessionStorage.getItem("formData");
if (stored) {
this.formData = JSON.parse(stored);
this.#loadDatosGeneralesData();
}
}
initButtonsEventListeners() {
#cacheFormData() {
sessionStorage.setItem("formData", JSON.stringify(this.formData));
}
#changeTab(idContenidoTab) {
const tabButton = document.querySelector(`[data-bs-target="#${idContenidoTab}"]`);
if (tabButton) {
const tab = new bootstrap.Tab(tabButton);
tab.show();
}
}
/******************************
* END OF DATOS GENERALES
******************************/
#initDatosGenerales() {
$('.datos-generales-data').on('change', () => {
const dataToStore = this.#getDatosGeneralesData();
this.#updateDatosGeneralesData(dataToStore);
this.#cacheFormData();
});
$('.paginas').on('change', () => {
this.paginas.val(parseInt(this.paginasNegro.val()) + parseInt(this.paginasColor.val()));
if (parseInt(this.paginasColor.val()) == 0) {
this.divPosicionPaginasColor.addClass('d-none');
this.posicionPaginasColor.val("");
}
else {
this.divPosicionPaginasColor.removeClass('d-none');
}
this.#updateTipoImpresion();
});
this.formatoPersonalizado.on('change', () => {
if (this.formatoPersonalizado.is(':checked')) {
this.divFormato.addClass('d-none');
this.divFormatoPersonalizado.removeClass('d-none');
}
else {
this.divFormatoPersonalizado.addClass('d-none');
this.divFormato.removeClass('d-none');
}
});
this.btn_next_datos_generales.on('click', () => {
this.#nextDatosGenerales();
});
}
#nextDatosGenerales() {
const data = this.#getDatosGeneralesData();
$.ajax({
url: '/presupuesto/validar/datos-generales',
type: 'POST',
data: data,
success: (data) => {
this.#processDatosGenerales(data);
},
error: (xhr, status, error) => {
this.datos_generales_alert.removeClass('d-none');
this.datos_generales_alert.find('#datos-generales-alert-list').empty();
const errors = xhr.responseJSON;
if (errors && typeof errors === 'object') {
if (!this.DEBUG && xhr.responseJSON.error && xhr.responseJSON.error == 'Internal Server Error') {
console.error("Error al validar los datos generales. Internal Server Error");
return;
}
Object.values(errors).forEach(errorMsg => {
this.datos_generales_alert.find('#datos-generales-alert-list').append(`<li>${errorMsg}</li>`);
});
} else {
this.datos_generales_alert.find('#datos-generales-alert-list').append('<li>Error desconocido. Por favor, inténtelo de nuevo más tarde.</li>');
}
$(window).scrollTop(0);
}
});
}
#processDatosGenerales(data) {
this.datos_generales_alert.addClass('d-none');
this.#loadInteriorData(data);
this.#changeTab('pills-inside');
this.divContentInterior.addClass('animate-fadeInUpBounce');
}
#getDatosGeneralesData() {
const tamanio = this.#getTamanio();
return {
titulo: this.titulo.val(),
autor: this.autor.val(),
isbn: this.isbn.val(),
tirada1: this.tirada1.val(),
tirada2: this.tirada2.val(),
tirada3: this.tirada3.val(),
tirada4: this.tirada4.val(),
formatoPersonalizado: this.formatoPersonalizado.is(':checked'),
ancho: parseInt(tamanio.ancho),
alto: parseInt(tamanio.alto),
paginasNegro: this.paginasNegro.val(),
paginasColor: this.paginasColor.val(),
posicionPaginasColor: this.posicionPaginasColor.val(),
tipoImpresion: ($('.tipo-libro.selected').length > 0) ? $('.tipo-libro.selected').attr('id') : 'fresado',
};
}
#updateDatosGeneralesData(data) {
this.formData.datosGenerales = {
titulo: data.titulo,
autor: data.autor,
isbn: data.isbn,
tirada1: data.tirada1,
tirada2: data.tirada2,
tirada3: data.tirada3,
tirada4: data.tirada4,
formatoPersonalizado: data.formatoPersonalizado,
ancho: parseInt(data.ancho),
alto: parseInt(data.alto),
paginasNegro: data.paginasNegro,
paginasColor: data.paginasColor,
posicionPaginasColor: data.posicionPaginasColor,
tipoImpresion: data.tipoImpresion,
};
}
#loadDatosGeneralesData() {
this.titulo.val(this.formData.datosGenerales.titulo);
this.autor.val(this.formData.datosGenerales.autor);
this.isbn.val(this.formData.datosGenerales.isbn);
this.tirada1.val(this.formData.datosGenerales.tirada1);
this.tirada2.val(this.formData.datosGenerales.tirada2);
this.tirada3.val(this.formData.datosGenerales.tirada3);
this.tirada4.val(this.formData.datosGenerales.tirada4);
this.paginasNegro.val(this.formData.datosGenerales.paginasNegro);
this.paginasColor.val(this.formData.datosGenerales.paginasColor);
this.posicionPaginasColor.val(this.formData.datosGenerales.posicionPaginasColor);
$('.tipo-libro').removeClass('selected');
$('.image-container#' + this.formData.datosGenerales.tipoImpresion).trigger('click');
this.#updateTipoImpresion();
this.formatoPersonalizado.prop('checked', this.formData.datosGenerales.formatoPersonalizado).trigger('change');
$('.paginas').trigger('change');
if (this.formatoPersonalizado.is(':checked')) {
this.ancho.val(this.formData.datosGenerales.ancho);
this.alto.val(this.formData.datosGenerales.alto);
} else {
const option = this.formato.find('option').filter(() => {
return $(this).data('ancho') == this.formData.datosGenerales.ancho &&
$(this).data('alto') == this.formData.datosGenerales.alto;
});
if (option.length) {
this.formato.val(option.val()).trigger('change');
}
}
}
#getTamanio() {
if (this.formatoPersonalizado.is(':checked')) {
return {
ancho: this.ancho.val(),
alto: this.alto.val()
};
}
else {
const opcionSeleccionada = $('#formato option:selected');
const ancho = opcionSeleccionada.data('ancho');
const alto = opcionSeleccionada.data('alto');
return {
ancho: ancho,
alto: alto
};
}
}
#updateTipoImpresion() {
const paginas = parseInt(this.paginas.val());
const selectedTipo = $('.tipo-libro.selected').attr('id');
$('.tipo-libro').removeClass('selected');
if (paginas < 32) {
$('.tipo-libro#fresado').addClass('d-none');
$('.tipo-libro#cosido').addClass('d-none');
}
if (paginas < 20) {
$('.tipo-libro#espiral').addClass('d-none');
$('.tipo-libro#wireo').addClass('d-none');
}
if (paginas < 12 || paginas > 40) {
$('.tipo-libro#grapado').addClass('d-none');
}
if (selectedTipo && $('.tipo-libro#' + selectedTipo).length > 0 && !$('.tipo-libro#' + selectedTipo).hasClass('d-none')) {
$('.tipo-libro#' + selectedTipo).addClass('selected');
}
else {
let firstVisible = $('.tipo-libro').not('.d-none').first();
if (firstVisible.length) {
firstVisible.addClass('selected');
}
}
if ($('.tipo-libro.selected').length > 0) {
this.formData.datosGenerales.tipoImpresion = $('.tipo-libro.selected').attr('id');
}
else {
this.formData.datosGenerales.tipoImpresion = '';
}
}
/******************************
* END OF DATOS GENERALES
******************************/
/******************************
* INTERIOR
******************************/
#loadInteriorData(data) {
this.divOpcionesColor.empty();
this.divPapelInterior.empty();
const opciones_color = data.opciones_color;
for (let i = 0; i < opciones_color.length; i++) {
const opcion = opciones_color[i];
const item = new imagen_presupuesto(opcion);
if ((this.formData.interior.color === '' && i === 0) ||
this.formData.interior.color === opcion.color) {
item.setSelected(true);
}
this.divOpcionesColor.append(item.render());
}
const opciones_papel_interior = data.opciones_papel_interior;
for (let i = 0; i < opciones_papel_interior.length; i++) {
const opcion = opciones_papel_interior[i];
const item = new imagen_presupuesto(opcion);
if ((this.formData.interior.papel === '' && i === 0) ||
this.formData.interior.papel === opcion.papel) {
item.setSelected(true);
}
this.divPapelInterior.append(item.render());
}
}
/******************************
* END INTERIOR
******************************/
/******************************
* CUBIERTA
******************************/
#initCubierta() {
this.btn_plantilla_cubierta.on('click', () => {
Swal.fire({
@ -60,48 +383,10 @@ class PresupuestoCliente {
showCloseButton: true
});
});
this.btn_next_datos_generales.on('click', () => {
this.nextDatosGenerales();
});
}
nextDatosGenerales() {
const data = {
titulo: this.titulo.val(),
autor: this.autor.val(),
isbn: this.isbn.val(),
tirada1: this.tirada1.val(),
tirada2: this.tirada2.val(),
tirada3: this.tirada3.val(),
tirada4: this.tirada4.val(),
paginasNegro: this.paginasNegro.val(),
paginasColor: this.paginasColor.val()
}
$.ajax({
url: '/presupuesto/validar/datos-generales',
type: 'POST',
data: data,
success: (response) => {
this.datos_generales_alert.addClass('d-none');
},
error: (xhr, status, error) => {
this.datos_generales_alert.removeClass('d-none');
this.datos_generales_alert.find('#datos-generales-alert-list').empty();
const errors = xhr.responseJSON;
if (errors && typeof errors === 'object') {
Object.values(errors).forEach(errorMsg => {
this.datos_generales_alert.find('#datos-generales-alert-list').append(`<li>${errorMsg}</li>`);
});
} else {
this.datos_generales_alert.find('#datos-generales-alert-list').append('<li>Error desconocido. Por favor, inténtelo de nuevo más tarde.</li>');
}
$(window).scrollTop(0);
}
});
}
/******************************
* END CUBIERTA
******************************/
}

View File

@ -2,7 +2,7 @@
const head = document.head || document.getElementsByTagName("head")[0];
const scripts = [
"https://cdn.jsdelivr.net/npm/toastify-js",
"/assets/libs/toastify-js/src/toastify.js",
"/assets/libs/choices.js/public/assets/scripts/choices.min.js",
"/assets/libs/flatpickr/flatpickr.min.js",
"/assets/libs/feather-icons/feather.min.js" // <- AÑADIMOS feather aquí

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long