diff --git a/api/controller/Banners/banners.controller.js b/api/controller/Banners/banners.controller.js new file mode 100644 index 0000000..49b7df0 --- /dev/null +++ b/api/controller/Banners/banners.controller.js @@ -0,0 +1,16 @@ +const db = require("../../db/db"); +const fs = require('fs'); +const path = require('path'); + +class BannersController { + async findAll(req, res) { + const rows = await db.findAll_banner() + return res.status(200).send({ + data: rows + }) + } + +} + + +module.exports = new BannersController() \ No newline at end of file diff --git a/api/controller/Contact/contact.controller.js b/api/controller/Contact/contact.controller.js index 84aa1fb..39f7562 100644 --- a/api/controller/Contact/contact.controller.js +++ b/api/controller/Contact/contact.controller.js @@ -4,7 +4,6 @@ class ContactController { async Create(req, res) { try { const { name, phone, email, message } = req.body; - console.log(name, phone, email, message); const contact = await db.contact_Request(name, phone, email, message); return res.status(200).send({ diff --git a/api/controller/Payment/payment.services.js b/api/controller/Payment/payment.services.js index f0db6d0..fb07715 100644 --- a/api/controller/Payment/payment.services.js +++ b/api/controller/Payment/payment.services.js @@ -1,21 +1,16 @@ const db = require("../../db/db"); -const payPalProviders = require('./paypal.providers') -const redsysProviders = require('./redsys.providers') +const payPalProviders = require('./paypal/paypal.providers') +const redsysProviders = require('./redsys/redsys.providers') class PaymentServices { async Create(req, res) { try { - //parâmetros para retornar os produtos que serão comprados + //parameters to return the products that will be purchased const { products, dateExpired, postalCode, customer, type } = req.body - const _products = await db.getProducts(dateExpired, postalCode) - const productsFilter = _products[0].filter((item) => { - if (products.includes(item.id)) { - return item - } - }); + const productsFilter = await db.getProductById(products[0]); - if (productsFilter.length !== products.length) { + if (productsFilter[0][0].length !== products.length) { return res.status(422).send({ data: { message: "Uno de los productos no existe." @@ -24,7 +19,7 @@ class PaymentServices { } let priceIntial = 0 - let price = productsFilter.reduce((accumulator, curValue) => accumulator + Number(curValue.price), priceIntial) + let price = productsFilter[0][0].reduce((accumulator, curValue) => accumulator + Number(curValue.price), priceIntial) let productsIds = '' for (let i = 0; i < products.length; i++) { @@ -37,12 +32,13 @@ class PaymentServices { customerData: { ...customer.customerData, type: type, - products: productsFilter + products: productsFilter[0][0] } }, }) + const order = await db.orderData_put(jsonOrderData); - const orderFk = order[0][0].orderFk + const orderFk = productsFilter[0][0][0].id; if (type === "paypal") { const data = await payPalProviders.New(orderFk, price) @@ -56,16 +52,12 @@ class PaymentServices { data: { ...data, orderId: orderFk } }) } - /* if (newOrder) { - return res.status(200).send({ - data: { link: newOrder.links, orderId: orderFk } - }) - } */ + } catch (error) { - console.log(error); return res.status(422).send({ data: { - message: "Error al iniciar el pago" + message: "Error al iniciar el pago", + error: error.message } }) } @@ -74,40 +66,35 @@ class PaymentServices { async Success(req, res) { try { //Parameters payment - const { paymentId, PayerID, orderId } = req.body - const payerId = { 'payer_id': PayerID }; - - //API validation payent and confirnm order - paypal.payment.execute(paymentId, payerId, async function (error, payment) { - if (error) { - return res.status(422).send({ - data: { - message: "payment not successful" - } - }) - } else { - if (payment.state == 'approved') { - await db.order_confirm(orderId) - return res.status(200).send({ - data: { - id: payment.id, - message: "payment completed successfully", - } - }) - } else { - return res.status(422).send({ - data: { - message: "payment not successful" - } - }) + const { orderId, type, ...paramns } = req.body + if (type === "paypal") { + const payerId = { 'payer_id': paramns.PayerID }; + const data = await payPalProviders.success(paramns.paymentId, payerId, orderId) + return res.status(200).send({ + data: { + ...data, + message: "Payment success" } - } - }); + }) + } + if (type === "redsys") { + await redsysProviders.success(orderId) + return res.status(200).send({ + data: { + message: "Payment success" + } + }) + } + } catch (error) { - throw error; + return res.status(422).send({ + data: { + message: "Payment Error" + } + }) } } } -module.exports = new PaymentServices(); +module.exports = new PaymentServices(); \ No newline at end of file diff --git a/api/controller/Payment/paypal.providers.js b/api/controller/Payment/paypal/paypal.providers.js similarity index 69% rename from api/controller/Payment/paypal.providers.js rename to api/controller/Payment/paypal/paypal.providers.js index d1c3edf..5e3bb9a 100644 --- a/api/controller/Payment/paypal.providers.js +++ b/api/controller/Payment/paypal/paypal.providers.js @@ -1,4 +1,5 @@ const paypal = require('paypal-rest-sdk'); +const db = require("../../../db/db"); class PayPalProviders { async New(orderFk, price) { @@ -6,7 +7,7 @@ class PayPalProviders { const payReq = JSON.stringify({ 'intent': 'sale', 'redirect_urls': { - 'return_url': `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}`, + 'return_url': `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}&type=paypal`, 'cancel_url': `${process.env.BASE_URL}/checkout/error` }, 'payer': { @@ -14,14 +15,13 @@ class PayPalProviders { }, 'transactions': [{ 'amount': { - 'total': 0.0000000001, + 'total': price, 'currency': 'EUR' }, 'description': 'This is the payment transaction description.' }] }); - //Starting checkout process and returning sandbox url const newOrder = await new Promise(async (resolve, reject) => { paypal.payment.create(payReq, function (error, payment) { if (error) { @@ -54,6 +54,28 @@ class PayPalProviders { throw error; } } + + async success(paymentId, payerId, orderId) { + try { + return new Promise(async (resolve, reject) => { + paypal.payment.execute(paymentId, payerId, async function (error, payment) { + if (error) { + reject() + } else { + if (payment.state == 'approved') { + await db.order_confirm(orderId) + resolve({ id: payment.id }) + } else { + reject() + } + } + }); + }).then(res => res) + } catch (error) { + throw error + } + + } } module.exports = new PayPalProviders(); \ No newline at end of file diff --git a/api/controller/Payment/redsys-easy.text b/api/controller/Payment/redsys-easy.text deleted file mode 100644 index b24064d..0000000 --- a/api/controller/Payment/redsys-easy.text +++ /dev/null @@ -1,39 +0,0 @@ -const Redsys = require('redsys-easy'); -const { - SANDBOX_URLS, - PRODUCTION_URLS, - TRANSACTION_TYPES -} = Redsys - -class RedsysProviders { - async New(orderFk, price) { - console.log("Chama"); - try { - const redsys = new Redsys({ - secretKey: 'sq7HjrUOBfKmC576ILgskD5srU870gJ7', - urls: SANDBOX_URLS, // Also PRODUCTION_URLS - }); - const obj = { - amount: price, - currency: 'EUR', - order: orderFk, - merchantName: 'Floraner', - merchantCode: '999008881', - transactionType: TRANSACTION_TYPES.AUTHORIZATION, // '0' - terminal: '001', - merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`, - successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}`, - errorURL: `${process.env.BASE_URL}/checkout/error` - } - - const form = redsys.redirectPetition(obj) - - console.log(form); - return true - } catch (error) { - throw error; - } - } -} - -module.exports = new RedsysProviders(); \ No newline at end of file diff --git a/api/controller/Payment/redsys-pos.text b/api/controller/Payment/redsys-pos.text deleted file mode 100644 index 59dd6c7..0000000 --- a/api/controller/Payment/redsys-pos.text +++ /dev/null @@ -1,34 +0,0 @@ -const RedsysPos = require('redsys-pos'); -const { - CURRENCIES, TRANSACTION_TYPES -} = RedsysPos; - -class RedsysProviders { - async New(orderFk, price) { - console.log("Chama"); - try { - const MERCHANT_KEY = "sq7HjrUOBfKmC576ILgskD5srU870gJ7"; - const redsys = new RedsysPos(MERCHANT_KEY); - const obj = JSON.stringify({ - amount: 100, // 100 euros - orderReference: orderFk, - merchantName: "Floranet", - merchantCode: "999008881", - currency: CURRENCIES.EUR, - transactionType: TRANSACTION_TYPES.AUTHORIZATION, // '0' - terminal: "001", - merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`, - successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}`, - errorURL: `${process.env.BASE_URL}/checkout/error` - }); - - console.log(obj); - const result = redsys.makePaymentParameters(obj); - return "" - } catch (error) { - throw error; - } - } -} - -module.exports = new RedsysProviders(); \ No newline at end of file diff --git a/api/controller/Payment/redsys.providers.js b/api/controller/Payment/redsys.providers.js deleted file mode 100644 index bab2fa8..0000000 --- a/api/controller/Payment/redsys.providers.js +++ /dev/null @@ -1,33 +0,0 @@ -const RedsysPos = require('redsys-pos'); -const { - CURRENCIES, TRANSACTION_TYPES -} = RedsysPos; - -class RedsysProviders { - async New(orderFk, price) { - try { - const MERCHANT_KEY = "sq7HjrUOBfKmC576ILgskD5srU870gJ7"; - const redsys = new RedsysPos(MERCHANT_KEY); - const obj = { - amount: String(price), - orderReference: String(orderFk), - merchantName: "Floranet", - merchantCode: "999008881", - currency: CURRENCIES.EUR, - transactionType: TRANSACTION_TYPES.AUTHORIZATION, // '0' - terminal: "001", - merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`, - successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}`, - errorURL: `${process.env.BASE_URL}/checkout/error` - }; - - const result = redsys.makePaymentParameters(obj); - console.log(result); - return result - } catch (error) { - throw error; - } - } -} - -module.exports = new RedsysProviders(); \ No newline at end of file diff --git a/api/controller/Payment/redsys/redsys.providers.js b/api/controller/Payment/redsys/redsys.providers.js new file mode 100644 index 0000000..6bfaf9b --- /dev/null +++ b/api/controller/Payment/redsys/redsys.providers.js @@ -0,0 +1,53 @@ +const db = require("../../../db/db"); + +const RedsysPos = require('redsys-pos'); +const { + CURRENCIES, TRANSACTION_TYPES +} = RedsysPos; + +class RedsysProviders { + async New(orderFk, price) { + try { + const MERCHANT_KEY = process.env.REDSYS_MERCHANT_KEY; + const redsys = new RedsysPos(MERCHANT_KEY); + + let orderValue = String(orderFk) + while (true) { + if (orderValue.length == 4) { + break + } + orderValue = '0' + orderValue + } + const regexAmount = /[,.]/ + const amountValue = regexAmount.test(String(price)) ? String(price).replace(/[,.]/g, '') : String(price + '00') + + const obj = { + amount: amountValue, + orderReference: orderValue, + merchantName: process.env.REDSYS_MERCHANT_NAME, + merchantCode: process.env.REDSYS_MERCHANT_CODE, + currency: "978", + transactionType: "0", // '0' + terminal: process.env.REDSYS_MERCHANT_TERMINAL, + merchantURL: `${process.env.BASE_URL}/payments/redsys/notification`, + successURL: `${process.env.BASE_URL}/checkout/success?orderId=${orderFk}&type=redsys`, + errorURL: `${process.env.BASE_URL}/checkout/error` + }; + + const result = redsys.makePaymentParameters(obj); + return { ...result, DS_MERCHANT_ORDER: obj.orderReference } + } catch (error) { + throw error; + } + } + + async success(orderId) { + try { + return await db.order_confirm(orderId) + } catch (error) { + throw error + } + } +} + +module.exports = new RedsysProviders(); \ No newline at end of file diff --git a/api/controller/Product/product.controller.js b/api/controller/Product/product.controller.js index 968e619..cecbec6 100644 --- a/api/controller/Product/product.controller.js +++ b/api/controller/Product/product.controller.js @@ -95,9 +95,10 @@ class ProductController { } async findById(req, res) { + const { dateExpired, postalCode } = req.query const id = Number(req.params.id) - const _products = await db.getProducts(); - const filterProduct = _products[0].filter(item => item.id === id) + const product = await db.getProductById(req.params.id); + const filterProduct = (product[0][0] && product[0][0])?product[0][0]:{}; return res.status(200).send({ data: filterProduct diff --git a/api/controller/product/product.controller.js b/api/controller/product/product.controller.js deleted file mode 100644 index f1f9a9e..0000000 --- a/api/controller/product/product.controller.js +++ /dev/null @@ -1,113 +0,0 @@ -const db = require("../../db/db"); -<<<<<<<< HEAD:api/controller/product/product.controller.js - -const productsJson = require("./products.json") -======== ->>>>>>>> master:api/controller/Product/product.controller.js - -class ProductController { - async findAll(req, res) { - - const params = req.query; - const _products = await db.getProducts(params.dateExpired, params.postalCode); - let productsFilter = _products[0] - - if (Number(params.recommend)) { - productsFilter = productsFilter.filter(item => item.recommend == params.recommend) - } - if (params.type) { - productsFilter = productsFilter.filter(item => item.type === params.type) - } - - if (params.minPrice && !params.maxPrice) { - productsFilter = productsFilter.filter(item => { - const price = Number(item.price) - if (price >= Number(params.minPrice)) { - return item - } - }) - } - if (params.maxPrice && !params.minPrice) { - productsFilter = productsFilter.filter(item => { - const price = Number(item.price) - if (price <= Number(params.maxPrice)) { - return item - } - }) - } - if (params.maxPrice && params.minPrice) { - productsFilter = productsFilter.filter(item => { - const price = Number(item.price) - if (price >= Number(params.minPrice) && price <= Number(params.maxPrice)) { - return item - } - }) - } - - - if (Number(params.bigPrice)) { - productsFilter.sort((a, b) => { - const itemA = Number(a.price) - const itemB = Number(b.price) - return itemB - itemA; - }) - } - - if (Number(params.lowPrice)) { - productsFilter.sort((a, b) => { - const itemA = Number(a.price) - const itemB = Number(b.price) - return itemA - itemB; - }) - } - - if (Number(params.order_descending)) { - productsFilter.sort((a, b) => { - const itemA = a.order_position - const itemB = b.order_position - return itemB - itemA; - }) - } - - if (Number(params.order_crescent)) { - productsFilter.sort((a, b) => { - const itemA = a.order_position - const itemB = b.order_position - return itemA - itemB; - }) - } - - if (Number(params.isNew)) { - productsFilter = productsFilter.filter(item => item.isNew == Number(params.isNew)) - } - - /* let productsFilterPages = [] - const totalItens = params?.itens ? Number(params.itens) : 200 - const page = params.page ? Number(params.page) : 1 - const startIndex = (totalItens * page) - totalItens - const lastIndex = (totalItens * page) - const products = productsFilter.slice(startIndex, lastIndex) - productsFilterPages.push({ - page: page, - productsPerPage: products.length, - products: products - }) */ - - - return res.status(200).send({ - data: productsFilter - }) - } - - async findById(req, res) { - const id = Number(req.params.id) - const _products = await db.getProducts(); - const filterProduct = _products[0].filter(item => item.id === id) - - return res.status(200).send({ - data: filterProduct - }) - } -} - -module.exports = new ProductController(); diff --git a/api/db/db.js b/api/db/db.js index 733d2e9..62c77c9 100644 --- a/api/db/db.js +++ b/api/db/db.js @@ -11,7 +11,7 @@ async function connect() { const mysql = require("mysql2/promise"); - const connection = await mysql.createConnection("mysql://" + user + ":" + password + "@" + host + ":" + port + "/" + database + ""); + const connection = await mysql.createConnection({host: host,port: port,user: user,password: password,database: database}); global.connection = connection; return connection; } @@ -23,14 +23,20 @@ async function getProducts(dateExpired, postalCode) { return rows; } +async function getProductById(id) { + const conn = await connect(); + const rows = await conn.query(`CALL catalogue_findById(${id})`); + return rows; +} + //Procedure for create transactions, do not carry out any manipulation at the bank async function orderData_put(jsonOrderData) { const conn = await connect(); - const [rows] = await conn.query(`CALL orderData_put(?)`, [jsonOrderData], (err, results) => { + const [rows] = await conn.query(`CALL order_put(?)`, [jsonOrderData], (err, results) => { if (err) { console.error(err); } else { - console.log('Result:', results); + } }); return rows; @@ -68,9 +74,25 @@ async function deliveryDate_get(postalCode) { async function contact_Request(name, phone, email, message) { const conn = await connect(); - const [rows] = await conn.query(`CALL contact_Request("${name}", "${phone}", "${email}", "${message}")`); + const [rows] = await conn.query(`CALL contact_request("${name}", "${phone}", "${email}", "${message}")`); + return rows; +} + +async function findAll_banner() { + const conn = await connect(); + const [rows] = await conn.query(`CALL sliders_get`); return rows; } -module.exports = { getProducts, orderData_get, orderData_put, getProvinces, deliveryDate_get, contact_Request, order_confirm } \ No newline at end of file +module.exports = { + getProducts, + getProductById, + orderData_get, + orderData_put, + getProvinces, + deliveryDate_get, + contact_Request, + order_confirm, + findAll_banner +} \ No newline at end of file diff --git a/api/index.js b/api/index.js index a65219e..8a4821e 100644 --- a/api/index.js +++ b/api/index.js @@ -7,6 +7,7 @@ const paymengtController = require('./controller/Payment/payment.controller'); const provincesController = require('./controller/Provinces/provinces.controller'); const deliveryController = require('./controller/Delivery/delivery.controller'); const contactController = require('./controller/Contact/contact.controller'); +const bannersController = require('./controller/Banners/banners.controller'); paypal.configure({ 'mode': 'sandbox', @@ -17,7 +18,7 @@ paypal.configure({ const app = express(); const port = 9999; -const allowedOrigins = ['http://localhost:9100', 'https://floranet.onecommerce.dev','http://49.13.85.117','http://floranet.onecommerce.dev']; +const allowedOrigins = ['https://staging.floranet.es','http://localhost:9100', 'https://floranet.onecommerce.dev', 'http://49.13.85.117', 'http://floranet.onecommerce.dev']; const corsOptions = { origin: allowedOrigins, optionsSuccessStatus: 200, @@ -46,7 +47,7 @@ app.get('/api/payment/cancel', paymengtController.Cancel) app.get('/api/provinces', provincesController.findAll) app.get('/api/delivery/dates', deliveryController.findByPostalCode) app.post('/api/contact/save', contactController.Create) - +app.get('/api/banners/', bannersController.findAll) app.listen(port, () => { diff --git a/package-lock.json b/package-lock.json index 171528a..4b4ef1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -157,14 +157,6 @@ "npm": ">=6.14.13" } }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "engines": { - "node": ">=14" - } - }, "node_modules/@floating-ui/core": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", @@ -2162,6 +2154,118 @@ "esbuild-windows-arm64": "0.14.51" } }, + "node_modules/esbuild-android-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz", + "integrity": "sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz", + "integrity": "sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz", + "integrity": "sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz", + "integrity": "sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz", + "integrity": "sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz", + "integrity": "sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz", + "integrity": "sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-linux-64": { "version": "0.14.51", "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz", @@ -2178,6 +2282,198 @@ "node": ">=12" } }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz", + "integrity": "sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz", + "integrity": "sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz", + "integrity": "sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz", + "integrity": "sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz", + "integrity": "sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz", + "integrity": "sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz", + "integrity": "sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz", + "integrity": "sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz", + "integrity": "sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz", + "integrity": "sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz", + "integrity": "sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.51", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz", + "integrity": "sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -2819,6 +3115,20 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -5425,12 +5735,9 @@ } }, "node_modules/undici": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.6.2.tgz", - "integrity": "sha512-vSqvUE5skSxQJ5sztTZ/CdeJb1Wq0Hf44hlYMciqHghvz+K88U0l7D6u1VsndoFgskDcnU+nG3gYmMzJVzd9Qg==", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.9.0.tgz", + "integrity": "sha512-XPWfXzJedevUziHwun70EKNvGnxv4CnfraFZ4f/JV01+fcvMYzHE26r/j8AY/9c/70nkN4B1zX7E2Oyuqwz4+Q==", "engines": { "node": ">=18.0" } diff --git a/public/assets/Cabecera-flornatura-1.jpg b/public/assets/Cabecera-flornatura-1.jpg new file mode 100755 index 0000000..3f2341e Binary files /dev/null and b/public/assets/Cabecera-flornatura-1.jpg differ diff --git a/public/assets/Cabecera-flornatura-2.jpg b/public/assets/Cabecera-flornatura-2.jpg new file mode 100755 index 0000000..0a9ac36 Binary files /dev/null and b/public/assets/Cabecera-flornatura-2.jpg differ diff --git a/public/assets/Cabecera-flornatura-3.jpg b/public/assets/Cabecera-flornatura-3.jpg new file mode 100755 index 0000000..3cf2bef Binary files /dev/null and b/public/assets/Cabecera-flornatura-3.jpg differ diff --git a/quasar.config.js b/quasar.config.js index 1f8b723..95a17ec 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -60,7 +60,7 @@ module.exports = configure(function (ctx) { env: { API: ctx.dev ? "http://localhost:9999/api/" - : "https://floranet-back.onecommerce.dev/api/", + : "https://api-staging.floranet.es/api/", }, target: { diff --git a/src/components/@inputs/Calendar.vue b/src/components/@inputs/Calendar.vue index e5f9ffe..1a03adc 100644 --- a/src/components/@inputs/Calendar.vue +++ b/src/components/@inputs/Calendar.vue @@ -10,17 +10,16 @@ import IconCalendar from "../icons/IconCalendar.vue"; export default defineComponent({ name: "calendar-input", components: { IconCalendar }, - props: ["modelValue", "bindValue", "setValues"], - setup({ setValues }, { emit }) { + props: ["modelValue", "bindValue", "setValues", "dateCookies"], + setup({ setValues, dateCookies, modelValue }, { emit }) { const formStore = useFormStore(); const { availability, postalCodeValid } = storeToRefs(formStore); const [year, month, day] = fullCurrentDate.replaceAll("/", "-").split("-"); const currentDate = `${day}-${month}-${year}`; - const proxyDate = ref(invertDate(currentDate)); - + const proxyDate = ref(invertDate(modelValue)); function updateProxy() { - proxyDate.value = invertDate(currentDate); + proxyDate.value = invertDate(proxyDate.value); } function optionsValidDates(date) { @@ -37,6 +36,8 @@ export default defineComponent({ watch(proxyDate, (newProxy) => { setValues({ date: invertDate(newProxy) }); + const btn = document.querySelector(".buttons-close-modal button") + if(btn) btn.click() }); const LOCALE = { @@ -71,7 +72,6 @@ export default defineComponent({ -
+
- +
@@ -108,4 +108,4 @@ export default defineComponent({ />
- + \ No newline at end of file diff --git a/src/components/@inputs/PostalCode.vue b/src/components/@inputs/PostalCode.vue index 91b1743..4b3e565 100644 --- a/src/components/@inputs/PostalCode.vue +++ b/src/components/@inputs/PostalCode.vue @@ -43,8 +43,8 @@ export default defineComponent({ } = await apiBack.get(`/delivery/dates`, { params: { postalCode: postalCodeInput.value }, }); - const dates = data.map(({ dated }) => { - const getDate = new Date(dated); + const dates = data.map(({ nextDay }) => { + const getDate = new Date(nextDay); const day = getDate.getDate().toString().padStart(2, "0"); const month = (getDate.getMonth() + 1).toString().padStart(2, "0"); const year = getDate.getFullYear(); @@ -53,6 +53,14 @@ export default defineComponent({ return formattedDate; }); + if(!dates.length) { + quasarNotify({ + type: "erro", + message: `No tenemos fechas de entrega posibles para este código postal`, + }); + setFieldError("postalCode", M.fiveLength); + } + postalCodeValid.value.dataOptions = dates; postalCodeValid.value.isValid = true; isPostalCodeLoading.value = false; @@ -63,9 +71,8 @@ export default defineComponent({ "Se ha producido un error en el proceso de identificación del código postal", }); isPostalCodeLoading.value = false; - console.error(`FATAL ERROR ::: ${error}`); } finally { - // console.log("click"); + } } @@ -88,7 +95,7 @@ export default defineComponent({ :model-value="modelValue" @update:model-value="updateModel" v-bind="bindValue" - class="custom-main-paragraph" + class="custom-main-paragraph field-postal-code" :error="false" placeholder="código postal" mask="#####" @@ -110,4 +117,4 @@ export default defineComponent({ } } } - + \ No newline at end of file diff --git a/src/components/header/UserArea.vue b/src/components/header/UserArea.vue index b89d7dc..a1af6d0 100644 --- a/src/components/header/UserArea.vue +++ b/src/components/header/UserArea.vue @@ -66,6 +66,8 @@ export default defineComponent({ display: flex; align-items: center; gap: 34px; + min-width: 190px; + justify-content: flex-end; & .user-area-link { color: $white; @@ -108,6 +110,8 @@ export default defineComponent({ @media only screen and (max-width: $med-md) { gap: 27px; + min-width: auto; + & .user-area-link { &.help { display: none; diff --git a/src/components/quasar-components/carousel/VerticalCarouselImgs.vue b/src/components/quasar-components/carousel/VerticalCarouselImgs.vue index 2343e4c..ad7237b 100644 --- a/src/components/quasar-components/carousel/VerticalCarouselImgs.vue +++ b/src/components/quasar-components/carousel/VerticalCarouselImgs.vue @@ -1,4 +1,5 @@ diff --git a/src/components/sections/QuestionSection.vue b/src/components/sections/QuestionSection.vue index c81eb7b..486c875 100644 --- a/src/components/sections/QuestionSection.vue +++ b/src/components/sections/QuestionSection.vue @@ -25,10 +25,10 @@ export default defineComponent({
diff --git a/src/components/ui/Card.vue b/src/components/ui/Card.vue index 7b8d66e..84f72a2 100644 --- a/src/components/ui/Card.vue +++ b/src/components/ui/Card.vue @@ -34,6 +34,7 @@ export default defineComponent({ default: "", }, isNew: String, + hasPostalCode: Boolean, size: { type: String, default: "md-card", @@ -77,7 +78,7 @@ export default defineComponent({ diff --git a/src/pages/CheckoutPage.vue b/src/pages/CheckoutPage.vue index 645376d..f2c769a 100644 --- a/src/pages/CheckoutPage.vue +++ b/src/pages/CheckoutPage.vue @@ -16,6 +16,7 @@ export default defineComponent({ provinceOptions, handleClickStep, stepsFormated, + getFormatedDate, stepList, checkoutBlock, cart, @@ -92,6 +93,7 @@ export default defineComponent({ checkoutBlock, stepsFormated, + getFormatedDate, provinceOptions, totalPrice, stepList, @@ -141,39 +143,29 @@ export default defineComponent({
-

¿A quién y dónde lo entregamos"

+

¿A quién y dónde lo entregamos?

-

+

-
+
-
+
{{ value }}
- +
@@ -199,85 +191,37 @@ export default defineComponent({
- +
- +
- +
- + -
+

No se puede editar este campo - + ¿No conoce su código postal?

@@ -285,49 +229,23 @@ export default defineComponent({
- +
- +
- +

{{ errors.phone }}

@@ -342,57 +260,30 @@ export default defineComponent({
- +
- +
- +
- +

{{ errors.senderPhone }}

@@ -401,43 +292,19 @@ export default defineComponent({
+ name="senderNotes" type="textarea" v-model="senderNotes" v-bind:="senderNotesAttrs" + :error="!!errors.senderNotes" :error-message="errors.senderNotes" class="message" autogrow + outlined />
-
- - - + + + +
@@ -449,7 +316,7 @@ export default defineComponent({
-

13 de julio - De 11h - 12 h

+

{{ getFormatedDate((cart.length > 0)?cart[0].dated:'') }}

@@ -462,11 +329,7 @@ export default defineComponent({
    -
  • +
  • {{ name }} {{ price }}€ @@ -487,32 +350,19 @@ export default defineComponent({

    - + Método de pago

    - +

    Paypal

    - -

    Redsys

    + +

    Tarjeta de crédito

    @@ -525,13 +375,7 @@ export default defineComponent({

    - + PROCEDER AL PAGO
@@ -585,13 +429,16 @@ export default defineComponent({ align-items: center; border-radius: 50%; user-select: none; + .step-value { font-family: $font-questrial; color: $primary-dark; font-size: 1.25rem; } + &.active { background-color: $primary-dark; + .step-value { color: $white; } @@ -603,6 +450,7 @@ export default defineComponent({ flex-direction: column; align-items: center; font-family: $font-questrial; + h4 { font-size: 1rem; font-weight: 700; @@ -611,6 +459,7 @@ export default defineComponent({ margin-bottom: 4px; line-height: 1.3; } + p { font-size: 0.875rem; color: $text-default; @@ -631,6 +480,7 @@ export default defineComponent({ width: 100%; margin-bottom: 21px; border-radius: 5px; + & h3 { color: $text-default; font-weight: 600; @@ -647,8 +497,10 @@ export default defineComponent({ & .checkout-form { flex: 1 0 min(100%, 795px); } + & .checkout-aside { flex: 1 0 min(100%, 329px); + & .checkout-delivery-date, & .checkout-summary, & .checkout-payment-methods { @@ -672,6 +524,7 @@ export default defineComponent({ visibility: hidden; height: 0; overflow: hidden; + &.active { height: min-content; padding-block: 16px 18px; @@ -683,6 +536,7 @@ export default defineComponent({ & .checkout-summary { margin-bottom: 33px; + & .checkout-aside-header, & .checkout-summary-body, & .checkout-summary-footer { @@ -691,6 +545,7 @@ export default defineComponent({ & .checkout-aside-header { padding-block: 16px 17px; + & .checkout-aside-title { font-family: $font-lora; font-weight: 600; @@ -701,6 +556,7 @@ export default defineComponent({ & .checkout-summary-body { padding-bottom: 23px; + & p { font-size: $font-12; line-height: 21px; @@ -713,12 +569,14 @@ export default defineComponent({ flex-direction: column; gap: 4px; margin-bottom: 4px; + & .checkout-summary-item p { display: flex; justify-content: space-between; } } } + & .checkout-summary-footer { display: flex; justify-content: space-between; @@ -737,19 +595,23 @@ export default defineComponent({ & .checkout-payment-methods { padding: 9px 16px 20px 21px; margin-bottom: 21px; + & .checkout-aside-header { margin-bottom: 14px; } + & .checkout-payment-body { display: flex; flex-direction: column; gap: 12px; + & p { width: min(100%, 200px); display: inline-flex; justify-content: space-between; gap: 31px; font-size: $font-12; + & .card-flags { display: inline-flex; align-items: center; @@ -773,6 +635,7 @@ export default defineComponent({ display: flex; flex-direction: column; gap: 23px; + & .terms p { margin-left: 10px; font-size: $font-12; @@ -799,29 +662,36 @@ export default defineComponent({ width: min(100%, 499px); margin: 122px auto 0; text-align: center; + & .checkout-success-title { margin-bottom: 26px; } + & .checkout-success-body { & .checkout-success-content { background-color: $secondary-5; padding: 30px 46px 42px 38px; border-radius: 5px 5px 0px 0px; + & .checkout-success-list { display: flex; flex-direction: column; gap: 28px; + & .checkout-success-item { display: flex; flex: 1; + & .checkout-item-content { display: flex; justify-content: space-between; flex: 1; min-height: 61px; + & .checkout-product-details { display: flex; gap: 14px; + & .checkout-product-img { object-fit: cover; width: 54px; @@ -875,8 +745,9 @@ export default defineComponent({ & .form-fields-container { display: flex; flex-wrap: wrap; - &.delivery { - } + + &.delivery {} + &.sender { margin-top: 12px; } @@ -886,6 +757,7 @@ export default defineComponent({ display: flex; flex-wrap: wrap; gap: 12px 9px; + @media only screen and (max-width: $med-lg) { gap: 15px; } @@ -896,6 +768,7 @@ export default defineComponent({ &.telephone { flex: 0 0 calc(50% - 5px); + @media only screen and (max-width: $med-lg) { flex: 1 0 min(100%, 390px); } @@ -905,10 +778,12 @@ export default defineComponent({ label { padding-bottom: 10px; } + & .q-field__control { background-color: #fff; height: 40px; border: 1px solid $primary-light; + & input { padding: 0px 0px 0px 20px; font-family: $font-questrial; @@ -923,20 +798,24 @@ export default defineComponent({ &.text-negative { border-color: $negative; } + &::after, &::before { display: none; } } + .q-field__marginal { height: 40px; padding-right: 30px; } } + .q-field--error .q-field__bottom { padding-top: 4px; font-size: 0.675rem; } + &.field-select { .q-field__control { min-height: initial; @@ -944,23 +823,28 @@ export default defineComponent({ height: 40px; padding: 0px 30px; border: 1px solid $primary-light; + .q-field__native span { display: none; } } + .q-field__append { height: 40px; } + .q-field__label { font-family: $font-questrial; color: $text-default !important; } + .q-field__control-container { padding-top: 0; height: 36px; } } } + @media only screen and (max-width: $med-lg) { &.sender { margin-top: 45px; @@ -972,6 +856,7 @@ export default defineComponent({ padding: 10.5px 1px; border-radius: 4px; transition: 200ms ease-in-out; + &:hover { border-color: $black; } @@ -1007,4 +892,4 @@ export default defineComponent({ font-family: "Roboto" !important; } } - + \ No newline at end of file diff --git a/src/pages/CheckoutSuccessPage.vue b/src/pages/CheckoutSuccessPage.vue index 12e3231..94a0322 100644 --- a/src/pages/CheckoutSuccessPage.vue +++ b/src/pages/CheckoutSuccessPage.vue @@ -55,7 +55,7 @@ export default defineComponent({ if (!value) return push("/"); } */ - if (cart.length === 0) return push("/"); + //if (cart.length === 0) return push("/"); await getSuccessData(); }); @@ -130,12 +130,12 @@ export default defineComponent({
- Has efectuado la siguiente compra + Gracias por realizar tu compra
-
    +
-
+
diff --git a/src/pages/HomePage.vue b/src/pages/HomePage.vue index 364d360..d51e5d0 100644 --- a/src/pages/HomePage.vue +++ b/src/pages/HomePage.vue @@ -2,6 +2,7 @@ import { storeToRefs } from "pinia"; import { defineComponent, onBeforeMount, ref } from "vue"; +import IconArrowCircleFilledRight from "src/components/icons/IconArrowCircleFilledRight.vue"; import VerticalCarouselImgs from "src/components/quasar-components/carousel/VerticalCarouselImgs.vue"; import Swiper from "src/components/swiper/Swiper.vue"; import Card from "src/components/ui/Card.vue"; @@ -18,6 +19,7 @@ export default defineComponent({ Card, }, setup() { + const banners = ref() const mobileStore = useMobileStore(); const { isCarouselVisible, isOpenNav, screenWidth } = storeToRefs(mobileStore); @@ -26,35 +28,37 @@ export default defineComponent({ const { getProducts } = cartStore; const { products, homeSection } = storeToRefs(cartStore); + async function getBanners() { + //const { data: { data } } = await apiBack("/banners/") + return [ + { + "url": "/assets/Cabecera-flornatura-1.jpg", + "longName": "Regala un verano lleno de flores y plantas" + }, + { + "url": "/assets/Cabecera-flornatura-2.jpg", + "longName": "Regala un verano lleno de flores y plantas" + }, + { + "url": "/assets/Cabecera-flornatura-3.jpg", + "longName": "Regala un verano lleno de flores y plantas" + } + ] + } + + onBeforeMount(async () => { + //banners.value = await getBanners(); await getProducts(); }); - const slidesContent = ref([]); - - onBeforeMount(async () => { - const images = await new Promise((resolve) => { - setTimeout(() => { - resolve([ - "assets/1.jpg", - "assets/2.jpg", - "assets/3.jpg", - "assets/4.jpg", - "assets/5.jpg", - ]); - }, 1000); - }); - - slidesContent.value = images; - }); - return { isCarouselVisible, - slidesContent, screenWidth, homeSection, isOpenNav, products, + banners }; }, }); @@ -63,7 +67,7 @@ export default defineComponent({