miscellaneous updates
@ -20,7 +20,7 @@ DB_CONNECTION=mysql
|
|||||||
DB_HOST=localhost
|
DB_HOST=localhost
|
||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_DATABASE=
|
DB_DATABASE=
|
||||||
DB_USERNAME=root
|
DB_USERNAME=
|
||||||
DB_PASSWORD=
|
DB_PASSWORD=
|
||||||
|
|
||||||
CACHE_STORE=database
|
CACHE_STORE=database
|
||||||
@ -32,7 +32,12 @@ SESSION_LIFETIME=120
|
|||||||
BROADCAST_CONNECTION=log
|
BROADCAST_CONNECTION=log
|
||||||
FILESYSTEM_DISK=local
|
FILESYSTEM_DISK=local
|
||||||
|
|
||||||
|
AUTH_MODEL=Modules\Admin\App\Models\User::class
|
||||||
|
|
||||||
MEMCACHED_HOST=127.0.0.1
|
MEMCACHED_HOST=127.0.0.1
|
||||||
|
MEMCACHED_PORT=11211
|
||||||
|
MEMCACHED_USERNAME=null
|
||||||
|
MEMCACHED_PASSWORD=null
|
||||||
|
|
||||||
REDIS_HOST=127.0.0.1
|
REDIS_HOST=127.0.0.1
|
||||||
REDIS_PASSWORD=null
|
REDIS_PASSWORD=null
|
||||||
|
205
README.md
@ -1,66 +1,185 @@
|
|||||||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
|
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
|
<a href="https://koneko.mx" target="_blank">
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
<img src="https://git.koneko.mx/Koneko-ST/koneko-st/raw/branch/main/logo-images/horizontal-05.png" width="400" alt="Koneko Soluciones Tecnológicas Logo">
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
</a>
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
## About Laravel
|
<p align="center">
|
||||||
|
<a href="https://packagist.org/packages/koneko/laravel-vuexy-admin"><img src="https://img.shields.io/packagist/v/koneko/laravel-vuexy-admin" alt="Latest Stable Version"></a>
|
||||||
|
<a href="https://packagist.org/packages/koneko/laravel-vuexy-admin"><img src="https://img.shields.io/packagist/l/koneko/laravel-vuexy-admin" alt="License"></a>
|
||||||
|
<a href="mailto:contacto@koneko.mx"><img src="https://img.shields.io/badge/contact-email-green" alt="Email"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
---
|
||||||
|
|
||||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
# Laravel Vuexy Admin para México
|
||||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
|
||||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
|
||||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
|
||||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
|
||||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
|
||||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
|
||||||
|
|
||||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
**Laravel Vuexy Admin para México** es un proyecto basado en Laravel optimizado para necesidades específicas del mercado mexicano. Incluye integración con los catálogos del SAT (CFDI 4.0), herramientas avanzadas y una interfaz moderna inspirada en el template premium Vuexy.
|
||||||
|
|
||||||
## Learning Laravel
|
## Características destacadas
|
||||||
|
|
||||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
|
- **Optimización para México**:
|
||||||
|
- Uso de los catálogos oficiales del SAT (versión CFDI 4.0):
|
||||||
|
- Banco (`sat_banco`)
|
||||||
|
- Clave de Producto o Servicio (`sat_clave_prod_serv`)
|
||||||
|
- Clave de Unidad (`sat_clave_unidad`)
|
||||||
|
- Forma de Pago (`sat_forma_pago`)
|
||||||
|
- Moneda (`sat_moneda`)
|
||||||
|
- Código Postal (`sat_codigo_postal`)
|
||||||
|
- Régimen Fiscal (`sat_regimen_fiscal`)
|
||||||
|
- País (`sat_pais`)
|
||||||
|
- Uso CFDI (`sat_uso_cfdi`)
|
||||||
|
- Colonia (`sat_colonia`)
|
||||||
|
- Estado (`sat_estado`)
|
||||||
|
- Localidad (`sat_localidad`)
|
||||||
|
- Municipio (`sat_municipio`)
|
||||||
|
- Deducción (`sat_deduccion`)
|
||||||
|
- Percepción (`sat_percepcion`)
|
||||||
|
- Compatible con los lineamientos y formatos del Anexo 20 del SAT.
|
||||||
|
- Útil para generar comprobantes fiscales digitales (CFDI) y otros procesos administrativos locales.
|
||||||
|
|
||||||
You may also try the [Laravel Bootcamp](https://bootcamp.laravel.com), where you will be guided through building a modern Laravel application from scratch.
|
- **Otras características avanzadas**:
|
||||||
|
- Autenticación y gestión de usuarios con Laravel Fortify.
|
||||||
|
- Gestión de roles y permisos usando Spatie Permission.
|
||||||
|
- Tablas dinámicas con Laravel Datatables y Yajra.
|
||||||
|
- Integración con Redis para caching eficiente.
|
||||||
|
- Exportación y manejo de Excel mediante Maatwebsite.
|
||||||
|
|
||||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
## Requisitos del Sistema
|
||||||
|
|
||||||
## Laravel Sponsors
|
- **PHP**: >= 8.2
|
||||||
|
- **Composer**: >= 2.0
|
||||||
|
- **Node.js**: >= 16.x
|
||||||
|
- **MySQL** o cualquier base de datos compatible con Laravel.
|
||||||
|
|
||||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
|
---
|
||||||
|
|
||||||
### Premium Partners
|
## Instalación
|
||||||
|
|
||||||
- **[Vehikl](https://vehikl.com/)**
|
Este proyecto ofrece dos métodos de instalación: mediante Composer o manualmente. A continuación, te explicamos ambos procesos.
|
||||||
- **[Tighten Co.](https://tighten.co)**
|
|
||||||
- **[WebReinvent](https://webreinvent.com/)**
|
|
||||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
|
||||||
- **[64 Robots](https://64robots.com)**
|
|
||||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
|
|
||||||
- **[Cyber-Duck](https://cyber-duck.co.uk)**
|
|
||||||
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
|
|
||||||
- **[Jump24](https://jump24.co.uk)**
|
|
||||||
- **[Redberry](https://redberry.international/laravel/)**
|
|
||||||
- **[Active Logic](https://activelogic.com)**
|
|
||||||
- **[byte5](https://byte5.de)**
|
|
||||||
- **[OP.GG](https://op.gg)**
|
|
||||||
|
|
||||||
## Contributing
|
### Opción 1: Usar Composer (Recomendado)
|
||||||
|
|
||||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
Para instalar el proyecto rápidamente usando Composer, ejecuta el siguiente comando:
|
||||||
|
|
||||||
## Code of Conduct
|
```bash
|
||||||
|
composer create-project koneko/laravel-vuexy-admin
|
||||||
|
```
|
||||||
|
|
||||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
Este comando realizará automáticamente los siguientes pasos:
|
||||||
|
1. Configurará el archivo `.env` basado en `.env.example`.
|
||||||
|
2. Generará la clave de la aplicación.
|
||||||
|
|
||||||
## Security Vulnerabilities
|
Una vez completado, debes configurar una base de datos válida en el archivo `.env` y luego ejecutar:
|
||||||
|
|
||||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
```bash
|
||||||
|
php artisan migrate --seed
|
||||||
|
```
|
||||||
|
|
||||||
## License
|
Finalmente, compila los activos iniciales:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Inicia el servidor local con:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
php artisan serve
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Opción 2: Instalación manual
|
||||||
|
|
||||||
|
Si prefieres instalar el proyecto de forma manual, sigue estos pasos:
|
||||||
|
|
||||||
|
1. Clona el repositorio:
|
||||||
|
```bash
|
||||||
|
git clone https://git.koneko.mx/Koneko-ST/laravel-vuexy-admin.git
|
||||||
|
cd laravel-vuexy-admin
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Instala las dependencias de Composer:
|
||||||
|
```bash
|
||||||
|
composer install
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Instala las dependencias de npm:
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Configura las variables de entorno:
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Configura una base de datos válida en el archivo `.env`.
|
||||||
|
|
||||||
|
6. Genera la clave de la aplicación:
|
||||||
|
```bash
|
||||||
|
php artisan key:generate
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Migra y llena la base de datos:
|
||||||
|
```bash
|
||||||
|
php artisan migrate --seed
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Compila los activos frontend:
|
||||||
|
```bash
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
9. Inicia el servidor de desarrollo:
|
||||||
|
```bash
|
||||||
|
php artisan serve
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Notas importantes
|
||||||
|
|
||||||
|
- Asegúrate de tener instalado:
|
||||||
|
- **PHP**: >= 8.2
|
||||||
|
- **Composer**: >= 2.0
|
||||||
|
- **Node.js**: >= 16.x
|
||||||
|
- Este proyecto utiliza los catálogos SAT de la versión CFDI 4.0. Si deseas más información, visita la documentación oficial del SAT en [Anexo 20](http://omawww.sat.gob.mx/tramitesyservicios/Paginas/anexo_20.htm).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Uso del Template Vuexy
|
||||||
|
|
||||||
|
Este proyecto está diseñado para funcionar con el template premium [Vuexy](https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599). Para utilizarlo:
|
||||||
|
|
||||||
|
1. Adquiere una licencia válida de Vuexy en [ThemeForest](https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599).
|
||||||
|
2. Incluye los archivos necesarios en las carpetas correspondientes (`resources`, `public`, etc.) de este proyecto.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Créditos
|
||||||
|
|
||||||
|
Este proyecto utiliza herramientas y recursos de código abierto, así como un template premium. Queremos agradecer a los desarrolladores y diseñadores que hacen posible esta implementación:
|
||||||
|
|
||||||
|
- [Laravel](https://laravel.com)
|
||||||
|
- [Vuexy Template](https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599)
|
||||||
|
- [Spatie Permission](https://spatie.be/docs/laravel-permission)
|
||||||
|
- [Yajra Datatables](https://yajrabox.com/docs/laravel-datatables)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Licencia
|
||||||
|
|
||||||
|
Este proyecto está licenciado bajo la licencia MIT. Consulta el archivo [LICENSE](LICENSE) para más detalles.
|
||||||
|
|
||||||
|
El template "Vuexy" debe adquirirse por separado y está sujeto a su propia licencia comercial.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<p align="center">
|
||||||
|
Hecho con ❤️ por <a href="https://koneko.mx">Koneko Soluciones Tecnológicas</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
namespace App\Services;
|
namespace App\Services;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Modules\Admin\App\Models\Setting;
|
use Modules\Admin\App\Models\Setting;
|
||||||
|
|
||||||
class WebsiteTemplateService
|
class WebsiteTemplateService
|
||||||
@ -25,9 +26,14 @@ class WebsiteTemplateService
|
|||||||
/**
|
/**
|
||||||
* Obtiene las variables del sitio web desde el caché o la base de datos.
|
* Obtiene las variables del sitio web desde el caché o la base de datos.
|
||||||
*/
|
*/
|
||||||
public function getWebsiteVars(String $setting = ''): array
|
public function getWebsiteVars(string $setting = ''): array
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
// Verifica si la base de datos está inicializada
|
||||||
|
if (!Schema::hasTable('migrations')) {
|
||||||
|
return $this->getDefaultWebsiteVars($setting);
|
||||||
|
}
|
||||||
|
|
||||||
$webVars = Cache::remember('website_settings', $this->cacheTTL, function () {
|
$webVars = Cache::remember('website_settings', $this->cacheTTL, function () {
|
||||||
$settings = Setting::global()
|
$settings = Setting::global()
|
||||||
->where(function ($query) {
|
->where(function ($query) {
|
||||||
@ -38,31 +44,58 @@ class WebsiteTemplateService
|
|||||||
->pluck('value', 'key')
|
->pluck('value', 'key')
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
||||||
return [
|
return $this->buildWebsiteVars($settings);
|
||||||
'title' => $settings['website_title'] ?? config('_var.appTitle'),
|
|
||||||
'author' => config('_var.author'),
|
|
||||||
'description' => $settings['website_description'] ?? config('_var.appDescription'),
|
|
||||||
'favicon' => $this->getFaviconPaths($settings),
|
|
||||||
'app_name' => $settings['website_app_name'] ?? config('_var.appName'),
|
|
||||||
'image_logo' => $this->getImageLogoPaths($settings),
|
|
||||||
'template' => $this->getTemplateVars($settings),
|
|
||||||
'google' => $this->getGoogleVars($settings),
|
|
||||||
'chat' => $this->getChatVars($settings),
|
|
||||||
'contact' => $this->getContactVars(),
|
|
||||||
'social' => $this->getSocialVars(),
|
|
||||||
];
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return $setting
|
return $setting ? ($webVars[$setting] ?? []) : $webVars;
|
||||||
? $webVars[$setting]
|
|
||||||
: $webVars;
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
echo __METHOD__;
|
// Manejo de excepciones: devolver valores predeterminados
|
||||||
echo "<br>" . $e->getMessage() . "<br><br>";
|
return $this->getDefaultWebsiteVars($setting);
|
||||||
die('You must configure the database.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construye las variables del sitio web.
|
||||||
|
*/
|
||||||
|
private function buildWebsiteVars(array $settings): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => $settings['website_title'] ?? config('_var.appTitle'),
|
||||||
|
'author' => config('_var.author'),
|
||||||
|
'description' => $settings['website_description'] ?? config('_var.appDescription'),
|
||||||
|
'favicon' => $this->getFaviconPaths($settings),
|
||||||
|
'app_name' => $settings['website_app_name'] ?? config('_var.appName'),
|
||||||
|
'image_logo' => $this->getImageLogoPaths($settings),
|
||||||
|
'template' => $this->getTemplateVars($settings),
|
||||||
|
'google' => $this->getGoogleVars($settings),
|
||||||
|
'chat' => $this->getChatVars($settings),
|
||||||
|
'contact' => $this->getContactVars(),
|
||||||
|
'social' => $this->getSocialVars(),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Devuelve las variables predeterminadas del sitio web.
|
||||||
|
*/
|
||||||
|
private function getDefaultWebsiteVars(string $setting = ''): array
|
||||||
|
{
|
||||||
|
$defaultVars = [
|
||||||
|
'title' => config('_var.appTitle', 'Default Title'),
|
||||||
|
'author' => config('_var.author', 'Default Author'),
|
||||||
|
'description' => config('_var.appDescription', 'Default Description'),
|
||||||
|
'favicon' => $this->getFaviconPaths([]),
|
||||||
|
'app_name' => config('_var.appName', 'Default App Name'),
|
||||||
|
'image_logo' => $this->getImageLogoPaths([]),
|
||||||
|
'template' => $this->getTemplateVars([]),
|
||||||
|
'google' => $this->getGoogleVars([]),
|
||||||
|
'chat' => $this->getChatVars([]),
|
||||||
|
'contact' => [],
|
||||||
|
'social' => [],
|
||||||
|
];
|
||||||
|
|
||||||
|
return $setting ? ($defaultVars[$setting] ?? []) : $defaultVars;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Obtiene los paths de favicon en distintos tamaños.
|
* Obtiene los paths de favicon en distintos tamaños.
|
||||||
*/
|
*/
|
||||||
@ -269,4 +302,4 @@ class WebsiteTemplateService
|
|||||||
? $legalDocuments[$legalDocument]
|
? $legalDocuments[$legalDocument]
|
||||||
: $legalDocuments;
|
: $legalDocuments;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,12 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "koneko/laravel-vuexy-admin",
|
"name": "koneko/laravel-vuexy-admin-mexico",
|
||||||
"type": "project",
|
"type": "project",
|
||||||
"description": "Template Laravel Vuexy Admin with fortify, Spatie, Redis, Taillwind and more...",
|
"description": "Laravel Vuexy Admin para México. Un proyecto optimizado para México.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"laravel",
|
"laravel",
|
||||||
"framework",
|
"framework",
|
||||||
"vuexy",
|
"vuexy",
|
||||||
"admin"
|
"admin",
|
||||||
|
"mexico",
|
||||||
|
"Catálogos SAT"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"require": {
|
"require": {
|
||||||
@ -80,4 +82,4 @@
|
|||||||
},
|
},
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"prefer-stable": true
|
"prefer-stable": true
|
||||||
}
|
}
|
||||||
|
2
composer.lock
generated
@ -4,7 +4,7 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "74ca673c06906baa677d4fc9af44d6a5",
|
"content-hash": "08a4f5e6c8df4c107ea90b13425f6396",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
|
204
config/auth.php
@ -2,114 +2,114 @@
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Authentication Defaults
|
| Authentication Defaults
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| This option defines the default authentication "guard" and password
|
| This option defines the default authentication "guard" and password
|
||||||
| reset "broker" for your application. You may change these values
|
| reset "broker" for your application. You may change these values
|
||||||
| as required, but they're a perfect start for most applications.
|
| as required, but they're a perfect start for most applications.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'defaults' => [
|
'defaults' => [
|
||||||
'guard' => env('AUTH_GUARD', 'web'),
|
'guard' => env('AUTH_GUARD', 'web'),
|
||||||
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
|
'passwords' => env('AUTH_PASSWORD_BROKER', 'users'),
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Authentication Guards
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Next, you may define every authentication guard for your application.
|
|
||||||
| Of course, a great default configuration has been defined for you
|
|
||||||
| which utilizes session storage plus the Eloquent user provider.
|
|
||||||
|
|
|
||||||
| All authentication guards have a user provider, which defines how the
|
|
||||||
| users are actually retrieved out of your database or other storage
|
|
||||||
| system used by the application. Typically, Eloquent is utilized.
|
|
||||||
|
|
|
||||||
| Supported: "session"
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'guards' => [
|
|
||||||
'web' => [
|
|
||||||
'driver' => 'session',
|
|
||||||
'provider' => 'users',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| User Providers
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| All authentication guards have a user provider, which defines how the
|
|
||||||
| users are actually retrieved out of your database or other storage
|
|
||||||
| system used by the application. Typically, Eloquent is utilized.
|
|
||||||
|
|
|
||||||
| If you have multiple user tables or models you may configure multiple
|
|
||||||
| providers to represent the model / table. These providers may then
|
|
||||||
| be assigned to any extra authentication guards you have defined.
|
|
||||||
|
|
|
||||||
| Supported: "database", "eloquent"
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'providers' => [
|
|
||||||
'users' => [
|
|
||||||
'driver' => 'eloquent',
|
|
||||||
'model' => env('AUTH_MODEL', Modules\Admin\App\Models\User::class),
|
|
||||||
],
|
],
|
||||||
|
|
||||||
// 'users' => [
|
/*
|
||||||
// 'driver' => 'database',
|
|--------------------------------------------------------------------------
|
||||||
// 'table' => 'users',
|
| Authentication Guards
|
||||||
// ],
|
|--------------------------------------------------------------------------
|
||||||
],
|
|
|
||||||
|
| Next, you may define every authentication guard for your application.
|
||||||
|
| Of course, a great default configuration has been defined for you
|
||||||
|
| which utilizes session storage plus the Eloquent user provider.
|
||||||
|
|
|
||||||
|
| All authentication guards have a user provider, which defines how the
|
||||||
|
| users are actually retrieved out of your database or other storage
|
||||||
|
| system used by the application. Typically, Eloquent is utilized.
|
||||||
|
|
|
||||||
|
| Supported: "session"
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
'guards' => [
|
||||||
|--------------------------------------------------------------------------
|
'web' => [
|
||||||
| Resetting Passwords
|
'driver' => 'session',
|
||||||
|--------------------------------------------------------------------------
|
'provider' => 'users',
|
||||||
|
|
],
|
||||||
| These configuration options specify the behavior of Laravel's password
|
|
||||||
| reset functionality, including the table utilized for token storage
|
|
||||||
| and the user provider that is invoked to actually retrieve users.
|
|
||||||
|
|
|
||||||
| The expiry time is the number of minutes that each reset token will be
|
|
||||||
| considered valid. This security feature keeps tokens short-lived so
|
|
||||||
| they have less time to be guessed. You may change this as needed.
|
|
||||||
|
|
|
||||||
| The throttle setting is the number of seconds a user must wait before
|
|
||||||
| generating more password reset tokens. This prevents the user from
|
|
||||||
| quickly generating a very large amount of password reset tokens.
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'passwords' => [
|
|
||||||
'users' => [
|
|
||||||
'provider' => 'users',
|
|
||||||
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
|
|
||||||
'expire' => 60,
|
|
||||||
'throttle' => 60,
|
|
||||||
],
|
],
|
||||||
],
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Password Confirmation Timeout
|
| User Providers
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| Here you may define the amount of seconds before a password confirmation
|
| All authentication guards have a user provider, which defines how the
|
||||||
| window expires and users are asked to re-enter their password via the
|
| users are actually retrieved out of your database or other storage
|
||||||
| confirmation screen. By default, the timeout lasts for three hours.
|
| system used by the application. Typically, Eloquent is utilized.
|
||||||
|
|
|
|
||||||
*/
|
| If you have multiple user tables or models you may configure multiple
|
||||||
|
| providers to represent the model / table. These providers may then
|
||||||
|
| be assigned to any extra authentication guards you have defined.
|
||||||
|
|
|
||||||
|
| Supported: "database", "eloquent"
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
|
'providers' => [
|
||||||
|
'users' => [
|
||||||
|
'driver' => 'eloquent',
|
||||||
|
'model' => env('AUTH_MODEL', App\Models\User::class),
|
||||||
|
],
|
||||||
|
|
||||||
|
// 'users' => [
|
||||||
|
// 'driver' => 'database',
|
||||||
|
// 'table' => 'users',
|
||||||
|
// ],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Resetting Passwords
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| These configuration options specify the behavior of Laravel's password
|
||||||
|
| reset functionality, including the table utilized for token storage
|
||||||
|
| and the user provider that is invoked to actually retrieve users.
|
||||||
|
|
|
||||||
|
| The expiry time is the number of minutes that each reset token will be
|
||||||
|
| considered valid. This security feature keeps tokens short-lived so
|
||||||
|
| they have less time to be guessed. You may change this as needed.
|
||||||
|
|
|
||||||
|
| The throttle setting is the number of seconds a user must wait before
|
||||||
|
| generating more password reset tokens. This prevents the user from
|
||||||
|
| quickly generating a very large amount of password reset tokens.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'passwords' => [
|
||||||
|
'users' => [
|
||||||
|
'provider' => 'users',
|
||||||
|
'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'),
|
||||||
|
'expire' => 60,
|
||||||
|
'throttle' => 60,
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Password Confirmation Timeout
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may define the amount of seconds before a password confirmation
|
||||||
|
| window expires and users are asked to re-enter their password via the
|
||||||
|
| confirmation screen. By default, the timeout lasts for three hours.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -100,7 +100,7 @@ return [
|
|||||||
| ignored by enabling the setting ignore_empty to true.
|
| ignored by enabling the setting ignore_empty to true.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'ignore_empty' => false,
|
'ignore_empty' => true,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -4,6 +4,7 @@ namespace Modules\Admin\App\Services;
|
|||||||
|
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Config;
|
use Illuminate\Support\Facades\Config;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Modules\Admin\App\Models\Setting;
|
use Modules\Admin\App\Models\Setting;
|
||||||
|
|
||||||
class AdminTemplateService
|
class AdminTemplateService
|
||||||
@ -20,35 +21,61 @@ class AdminTemplateService
|
|||||||
return $setting->save();
|
return $setting->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAdminVars($adminSetting = false)
|
public function getAdminVars($adminSetting = false): array
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
// Verificar si el sistema está inicializado (la tabla `migrations` existe)
|
||||||
|
if (!Schema::hasTable('migrations')) {
|
||||||
|
return $this->getDefaultAdminVars($adminSetting);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cargar desde el caché o la base de datos si está disponible
|
||||||
return Cache::remember('admin_settings', $this->cacheTTL, function () use ($adminSetting) {
|
return Cache::remember('admin_settings', $this->cacheTTL, function () use ($adminSetting) {
|
||||||
$settings = Setting::global()
|
$settings = Setting::global()
|
||||||
->where('key', 'LIKE', 'admin_%')
|
->where('key', 'LIKE', 'admin_%')
|
||||||
->pluck('value', 'key')
|
->pluck('value', 'key')
|
||||||
->toArray();
|
->toArray();
|
||||||
|
|
||||||
$adminSettings = [
|
$adminSettings = $this->buildAdminVarsArray($settings);
|
||||||
'title' => $settings['admin_title'] ?? config('_var.appTitle'),
|
|
||||||
'author' => config('_var.author'),
|
|
||||||
'description' => config('_var.description'),
|
|
||||||
'favicon' => $this->getFaviconPaths($settings),
|
|
||||||
'app_name' => $settings['admin_app_name'] ?? config('_var.appName'),
|
|
||||||
'image_logo' => $this->getImageLogoPaths($settings),
|
|
||||||
];
|
|
||||||
|
|
||||||
return $adminSetting
|
return $adminSetting
|
||||||
? $adminSettings[$adminSetting]
|
? $adminSettings[$adminSetting]
|
||||||
: $adminSettings;
|
: $adminSettings;
|
||||||
});
|
});
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
echo __METHOD__;
|
// En caso de error, devolver valores predeterminados
|
||||||
echo "<br>" . $e->getMessage() . "<br><br>";
|
return $this->getDefaultAdminVars($adminSetting);
|
||||||
die('You must configure the database.');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getDefaultAdminVars($adminSetting = false): array
|
||||||
|
{
|
||||||
|
$defaultSettings = [
|
||||||
|
'title' => config('_var.appTitle', 'Default Title'),
|
||||||
|
'author' => config('_var.author', 'Default Author'),
|
||||||
|
'description' => config('_var.description', 'Default Description'),
|
||||||
|
'favicon' => $this->getFaviconPaths([]),
|
||||||
|
'app_name' => config('_var.appName', 'Default App Name'),
|
||||||
|
'image_logo' => $this->getImageLogoPaths([]),
|
||||||
|
];
|
||||||
|
|
||||||
|
return $adminSetting
|
||||||
|
? $defaultSettings[$adminSetting] ?? null
|
||||||
|
: $defaultSettings;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function buildAdminVarsArray(array $settings): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => $settings['admin_title'] ?? config('_var.appTitle'),
|
||||||
|
'author' => config('_var.author'),
|
||||||
|
'description' => config('_var.description'),
|
||||||
|
'favicon' => $this->getFaviconPaths($settings),
|
||||||
|
'app_name' => $settings['admin_app_name'] ?? config('_var.appName'),
|
||||||
|
'image_logo' => $this->getImageLogoPaths($settings),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function getVuexyCustomizerVars()
|
public function getVuexyCustomizerVars()
|
||||||
{
|
{
|
||||||
// Obtener valores de la base de datos
|
// Obtener valores de la base de datos
|
||||||
@ -126,4 +153,4 @@ class AdminTemplateService
|
|||||||
{
|
{
|
||||||
Cache::forget("admin_settings");
|
Cache::forget("admin_settings");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ use Illuminate\Support\Arr;
|
|||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Illuminate\Support\Facades\Config;
|
use Illuminate\Support\Facades\Config;
|
||||||
use Illuminate\Support\Facades\Crypt;
|
use Illuminate\Support\Facades\Crypt;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Modules\Admin\App\Models\Setting;
|
use Modules\Admin\App\Models\Setting;
|
||||||
|
|
||||||
class GlobalSettingsService
|
class GlobalSettingsService
|
||||||
@ -34,29 +35,57 @@ class GlobalSettingsService
|
|||||||
public function loadSystemConfig(): void
|
public function loadSystemConfig(): void
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$config = Cache::remember('global_system_config', $this->cacheTTL, function () {
|
if (!Schema::hasTable('migrations')) {
|
||||||
$settings = Setting::global()
|
// Base de datos no inicializada: usar valores predeterminados
|
||||||
->where('key', 'LIKE', 'config.%')
|
$config = $this->getDefaultSystemConfig();
|
||||||
->pluck('value', 'key')
|
} else {
|
||||||
->toArray();
|
// Cargar configuración desde la caché o base de datos
|
||||||
|
$config = Cache::remember('global_system_config', $this->cacheTTL, function () {
|
||||||
|
$settings = Setting::global()
|
||||||
|
->where('key', 'LIKE', 'config.%')
|
||||||
|
->pluck('value', 'key')
|
||||||
|
->toArray();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'servicesFacebook' => $this->buildServiceConfig($settings, 'config.services.facebook.', 'services.facebook'),
|
'servicesFacebook' => $this->buildServiceConfig($settings, 'config.services.facebook.', 'services.facebook'),
|
||||||
'servicesGoogle' => $this->buildServiceConfig($settings, 'config.services.google.', 'services.google'),
|
'servicesGoogle' => $this->buildServiceConfig($settings, 'config.services.google.', 'services.google'),
|
||||||
'custom' => $this->buildVuexyCustomConfig($settings),
|
'custom' => $this->buildVuexyCustomConfig($settings),
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Aplicar configuración al sistema
|
||||||
Config::set('services.facebook', $config['servicesFacebook']);
|
Config::set('services.facebook', $config['servicesFacebook']);
|
||||||
Config::set('services.google', $config['servicesGoogle']);
|
Config::set('services.google', $config['servicesGoogle']);
|
||||||
Config::set('custom', $config['custom']);
|
Config::set('custom', $config['custom']);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
echo __METHOD__;
|
// Manejo silencioso de errores para evitar interrupciones
|
||||||
echo "<br>" . $e->getMessage() . "<br><br>";
|
Config::set('services.facebook', config('services.facebook', []));
|
||||||
die('You must configure the database.');
|
Config::set('services.google', config('services.google', []));
|
||||||
|
Config::set('custom', config('custom', []));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Devuelve una configuración predeterminada si la base de datos no está inicializada.
|
||||||
|
*/
|
||||||
|
private function getDefaultSystemConfig(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'servicesFacebook' => config('services.facebook', [
|
||||||
|
'client_id' => '',
|
||||||
|
'client_secret' => '',
|
||||||
|
'redirect' => '',
|
||||||
|
]),
|
||||||
|
'servicesGoogle' => config('services.google', [
|
||||||
|
'client_id' => '',
|
||||||
|
'client_secret' => '',
|
||||||
|
'redirect' => '',
|
||||||
|
]),
|
||||||
|
'custom' => config('custom', []),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verifica si un bloque de configuraciones está presente.
|
* Verifica si un bloque de configuraciones está presente.
|
||||||
*/
|
*/
|
||||||
|
@ -26,8 +26,6 @@ class WebsiteSettingsService
|
|||||||
private $imageLogoMaxPixels2 = 75625; // Segunda versión (px^2) en Base64
|
private $imageLogoMaxPixels2 = 75625; // Segunda versión (px^2) en Base64
|
||||||
private $imageLogoMaxPixels3 = 230400; // Tercera versión (px^2)
|
private $imageLogoMaxPixels3 = 230400; // Tercera versión (px^2)
|
||||||
|
|
||||||
protected $cacheTTL = 60 * 24 * 30; // 30 días en minutos
|
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->driver = config('image.driver', 'gd');
|
$this->driver = config('image.driver', 'gd');
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
name,email,role
|
name,email,role,password
|
||||||
Administrador Web,webadmin@concierge.test,Administrador Web
|
Administrador Web,webadmin@concierge.test,Administrador Web,LAdmin123
|
||||||
Productos y servicios,productos@concierge.test,Productos y servicios
|
Productos y servicios,productos@concierge.test,Productos y servicios,LAdmin123
|
||||||
Recursos humanos,rrhh@concierge.test,Recursos humanos
|
Recursos humanos,rrhh@concierge.test,Recursos humanos,LAdmin123
|
||||||
Nómina,nomina@concierge.test,Nómina
|
Nómina,nomina@concierge.test,Nómina,LAdmin123
|
||||||
Activos fijos,activos@concierge.test,Activos fijos
|
Activos fijos,activos@concierge.test,Activos fijos,LAdmin123
|
||||||
Compras y gastos,compras@concierge.test,Compras y gastos
|
Compras y gastos,compras@concierge.test,Compras y gastos,LAdmin123
|
||||||
CRM,crm@concierge.test,CRM
|
CRM,crm@concierge.test,CRM,LAdmin123
|
||||||
Vendedor,vendedor@concierge.test,Vendedor
|
Vendedor,vendedor@concierge.test,Vendedor,LAdmin123
|
||||||
Gerente,gerente@concierge.test,Gerente
|
Gerente,gerente@concierge.test,Gerente,LAdmin123
|
||||||
Facturación,facturacion@concierge.test,Facturación
|
Facturación,facturacion@concierge.test,Facturación,LAdmin123
|
||||||
Facturación avanzado,facturacion_avanzado@concierge.test,Facturación avanzado
|
Facturación avanzado,facturacion_avanzado@concierge.test,Facturación avanzado,LAdmin123
|
||||||
Finanzas,finanzas@concierge.test,Finanzas
|
Finanzas,finanzas@concierge.test,Finanzas,LAdmin123
|
||||||
Auditor,auditor@concierge.test,Auditor
|
Auditor,auditor@concierge.test,Auditor,LAdmin123
|
||||||
|
|
@ -10,7 +10,7 @@ class AdminDatabaseSeeder extends Seeder
|
|||||||
{
|
{
|
||||||
$this->call(RoleSeeder::class);
|
$this->call(RoleSeeder::class);
|
||||||
$this->call(UserSeeder::class);
|
$this->call(UserSeeder::class);
|
||||||
$this->call(SettingSeeder::class);
|
//$this->call(SettingSeeder::class);
|
||||||
$this->call(SATCatalogsSeeder::class);
|
$this->call(SATCatalogsSeeder::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@ class SettingSeeder extends Seeder
|
|||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
$settings_array = [
|
$settings_array = [
|
||||||
/*
|
|
||||||
'app_title' => 'Quimiplastic S.A de C.V.',
|
'app_title' => 'Quimiplastic S.A de C.V.',
|
||||||
'app_faviconIcon' => '../assets/img/logo/koneko-02.png',
|
'app_faviconIcon' => '../assets/img/logo/koneko-02.png',
|
||||||
'app_name' => 'Quimiplastic',
|
'app_name' => 'Quimiplastic',
|
||||||
@ -96,7 +95,7 @@ class SettingSeeder extends Seeder
|
|||||||
'chat.whatsapp.message' => '👋 Hola! Estoy buscando más información sobre Covirsa Soluciones en Tecnología. ¿Podrías proporcionarme los detalles que necesito? ¡Te lo agradecería mucho! 💻✨',
|
'chat.whatsapp.message' => '👋 Hola! Estoy buscando más información sobre Covirsa Soluciones en Tecnología. ¿Podrías proporcionarme los detalles que necesito? ¡Te lo agradecería mucho! 💻✨',
|
||||||
|
|
||||||
'webTpl.container' => 'custom-container',
|
'webTpl.container' => 'custom-container',
|
||||||
*/];
|
];
|
||||||
|
|
||||||
foreach ($settings_array as $key => $value) {
|
foreach ($settings_array as $key => $value) {
|
||||||
Setting::create([
|
Setting::create([
|
||||||
|
77
modules/Admin/Database/seeders/UserSeeder.php
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Modules\Admin\Database\seeders;
|
||||||
|
|
||||||
|
use Modules\Admin\App\Models\User;
|
||||||
|
use Illuminate\Http\UploadedFile;
|
||||||
|
use Illuminate\Support\Facades\Storage;
|
||||||
|
use Illuminate\Database\Seeder;
|
||||||
|
|
||||||
|
class UserSeeder extends Seeder
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the database seeds.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
// Define el disco y la carpeta
|
||||||
|
$disk = 'public';
|
||||||
|
$directory = 'profile-photos';
|
||||||
|
|
||||||
|
// Verifica si la carpeta existe
|
||||||
|
if (Storage::disk($disk)->exists($directory))
|
||||||
|
Storage::disk($disk)->deleteDirectory($directory);
|
||||||
|
|
||||||
|
// Arturo Corro
|
||||||
|
$user = User::create([
|
||||||
|
'name' => 'Koneko Admin',
|
||||||
|
'email' => 'admin@koneko.mx',
|
||||||
|
'email_verified_at' => now(),
|
||||||
|
'password' => bcrypt('LAdmin123'),
|
||||||
|
'status' => User::STATUS_ENABLED,
|
||||||
|
])->assignRole('SuperAdmin');
|
||||||
|
|
||||||
|
$user->updateProfilePhoto(new UploadedFile(
|
||||||
|
'public/assets/img/logo/koneko-02.png',
|
||||||
|
'koneko-02.png'
|
||||||
|
));
|
||||||
|
|
||||||
|
|
||||||
|
// Webmaster admin
|
||||||
|
$user = User::create([
|
||||||
|
'name' => 'Admin',
|
||||||
|
'email' => 'servers@koneko.mx',
|
||||||
|
'email_verified_at' => now(),
|
||||||
|
'password' => bcrypt('LAdmin123'),
|
||||||
|
'status' => User::STATUS_ENABLED,
|
||||||
|
])->assignRole('Admin');
|
||||||
|
|
||||||
|
$user->updateProfilePhoto(new UploadedFile(
|
||||||
|
'public/assets/img/logo/koneko-03.png',
|
||||||
|
'koneko-03.png'
|
||||||
|
));
|
||||||
|
|
||||||
|
// Usuarios CSV
|
||||||
|
$csvFile = fopen(base_path("modules/Admin/Database/data/users.csv"), "r");
|
||||||
|
|
||||||
|
$firstline = true;
|
||||||
|
|
||||||
|
while (($data = fgetcsv($csvFile, 2000, ",")) !== FALSE) {
|
||||||
|
if (!$firstline) {
|
||||||
|
User::create([
|
||||||
|
'name' => $data['0'],
|
||||||
|
'email' => $data['1'],
|
||||||
|
'email_verified_at' => now(),
|
||||||
|
'password' => bcrypt($data['3']),
|
||||||
|
'status' => User::STATUS_ENABLED,
|
||||||
|
])->assignRole($data['2']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$firstline = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose($csvFile);
|
||||||
|
}
|
||||||
|
}
|
BIN
public/assets/img/logo/horizontal-02.png
Normal file
After Width: | Height: | Size: 219 KiB |
BIN
public/assets/img/logo/horizontal-04.png
Normal file
After Width: | Height: | Size: 219 KiB |
BIN
public/assets/img/logo/horizontal-circulo-01.png
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
public/assets/img/logo/horizontal-circulo-03.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
public/assets/img/logo/koneko-01.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
public/assets/img/logo/koneko-02.png
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
public/assets/img/logo/koneko-03.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
public/assets/img/logo/koneko-04.png
Normal file
After Width: | Height: | Size: 96 KiB |
69
public/assets/img/logo/koneko-ico.svg
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
width="595.28px" height="595.28px" viewBox="0 0 595.28 595.28" enable-background="new 0 0 595.28 595.28" xml:space="preserve">
|
||||||
|
<path fill="#1A2633" d="M550.755,86.874c8.834-8.014,9.5-21.668,1.486-30.5c-8.012-8.834-21.664-9.5-30.498-1.488
|
||||||
|
c-6.1,5.537-60.079,55.109-76.11,90.92c-5.912,13.205-7.15,31.532-4.78,55.171c0.142,1.405,0.282,2.811,0.448,4.255
|
||||||
|
c4.881,42.324,20.602,100.925,41.744,177.167l2.301,8.301c11.565,41.734,20.351,77.316,10.675,90.037
|
||||||
|
c-3.002,3.945-8.538,7.063-15.774,9.531c-7.811-146.764-35.873-231.179-52.177-268.888c-7.096-16.41-12.806-25.643-14.273-27.99
|
||||||
|
c-24.253-40.404-67.307-94.077-87.411-108.625c-21.559-15.6-40.832-25.561-70.816-35.479c-1.416,11.371-1.403,18.625-2.583,33.521
|
||||||
|
c-11.326-5.67-20.761-9.713-19.297-6.601c1.996,4.241,5.437,20.335,7.979,33.122c-4.114,3.243-8.08,6.714-12.028,10.142
|
||||||
|
c-8.389,7.285-13.305,15.853-15.028,27.699c-0.03,0.212-0.075,0.421-0.107,0.629c-0.648-4.69-1.661-7.76-2.764-7.747
|
||||||
|
c-1.792,0.024-3.139,8.148-3.009,18.145c0.057,4.324,0.38,8.287,0.875,11.394c-2.39,8.447-5.152,16.835-7.711,25.215
|
||||||
|
c-2.132,6.979-0.929,12.301,4.238,17.096c1.48,1.376,2.778,2.942,4.154,4.427c5.074,5.463,10.39,9.779,15.933,13.004
|
||||||
|
c8.807,5.124,18.2,7.469,28.146,7.186c0.892,0.172,1.399,0.263,1.399,0.263s0.362-0.137,1.004-0.38
|
||||||
|
c5.128-0.359,10.4-1.398,15.812-3.102l7.398,40.879c-0.055-0.301-42.806,29.955-79.087,37.785c-0.032,0.006-0.059,0.016-0.089,0.02
|
||||||
|
c-10.676,1.469-21.764,3.547-31.943,6.516c-1.458,0.428-2.87,0.861-4.251,1.299l-52.985-136.984c0,0-32.208-0.089-34.846,1.05
|
||||||
|
c-5.53,2.384-8.083,8.798-5.702,14.329l54.592,126.742c-7.692,1.541-17.844,32.23,7.304,37.668c2.615,0.967,5.697,1.322,9.271,0.822
|
||||||
|
l7.172,16.641c2.382,5.531,8.798,8.084,14.329,5.703c3.354-1.445,14.035-21.318,14.035-21.318c32.569,1.389,73.41,2.84,73.41,2.84
|
||||||
|
c-5,10.695-9.305,20.662-11.867,29.881c-24.889-4.781-54.369-8.871-63.353-3.658c0,0-11.948,23.479-23.653,46.332
|
||||||
|
c-14.621,1.289-18.456,1.453-19.234,0.158c-0.942-1.561-6.088-11.045-19.775-8.336c-13.688,2.709-2.85,17.885,0.159,22.883
|
||||||
|
c2.041,3.389,5.44,12.613,22.644,15.934c0.117,0.023,0.267,0.045,0.402,0.066c-1.793,3.451-3.302,6.336-4.408,8.416
|
||||||
|
c-8.901,16.75-10.975,30.215-14.699,30.549c-29.812,2.676-36.652,3.387-37.849,1.396c-1.199-1.99-7.76-14.08-25.209-10.627
|
||||||
|
c-17.451,3.453-3.633,22.801,0.203,29.172c2.602,4.32,6.937,16.078,28.867,20.311c9.068,1.75,60.858,1.781,82.097-3.41
|
||||||
|
c2.727-0.201,4.726-0.502,5.752-0.928c9.034-3.754,20.381-28.092,38.504-30.049c15.589-1.689,71.342,27.322,97.716,26.67l1.72,0.568
|
||||||
|
c0-0.164-0.264-0.373-0.711-0.611c0.273-0.018,0.541-0.037,0.806-0.061l-0.095,0.672l72.061-0.07c0.448,0.027,0.895,0.07,1.35,0.07
|
||||||
|
c3.563,0,7.045-0.02,10.486-0.047l22.904,0.047c0.365-0.186,0.742-0.348,1.107-0.527c25.459-0.881,47.021-3.004,64.789-7.346
|
||||||
|
l0.018,0.004v-0.008c21.837-5.334,37.942-14.016,48.474-27.861c21.791-28.652,12.789-69.168-3.434-127.711l-2.303-8.307
|
||||||
|
c-12.908-46.547-26.256-94.679-34.196-133.517c-10.895-53.272-7.418-69.423-5.418-73.893
|
||||||
|
C495.513,140.059,536.032,100.237,550.755,86.874z M209.939,168.38c-0.35-2.778-0.585-6.323-0.635-10.192
|
||||||
|
c-0.116-8.92,0.793-16.168,2.03-16.184c0.994-0.012,1.895,4.642,2.272,11.092C212.624,158.223,211.35,163.313,209.939,168.38z
|
||||||
|
M224.716,180.545c-3.29,0.043-6.093-10.406-6.262-23.338c-0.168-12.932,2.362-23.449,5.653-23.491
|
||||||
|
c3.29-0.042,6.093,10.405,6.263,23.337C230.538,169.984,228.006,180.502,224.716,180.545z M162.66,374.102L86.444,192.594
|
||||||
|
l25.545-1.434l63.626,163.41L162.66,374.102z"/>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="301.7852" y1="70.9863" x2="301.7851" y2="515.588">
|
||||||
|
<stop offset="0.0054" style="stop-color:#1E2633"/>
|
||||||
|
<stop offset="1" style="stop-color:#131424"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path opacity="0.8" fill="url(#SVGID_1_)" enable-background="new " d="M550.755,86.874c8.834-8.014,9.5-21.668,1.486-30.5
|
||||||
|
c-8.012-8.834-21.664-9.5-30.498-1.488c-6.1,5.537-60.079,55.109-76.11,90.92c-5.912,13.205-7.15,31.532-4.78,55.171
|
||||||
|
c0.142,1.405,0.282,2.811,0.448,4.255c4.881,42.324,20.602,100.925,41.744,177.167l2.301,8.301
|
||||||
|
c11.565,41.734,20.351,77.316,10.675,90.037c-3.002,3.945-8.538,7.063-15.774,9.531c-7.811-146.764-35.873-231.179-52.177-268.888
|
||||||
|
c-7.096-16.41-12.806-25.643-14.273-27.99c-24.253-40.404-67.307-94.077-87.411-108.625c-21.559-15.6-40.832-25.561-70.816-35.479
|
||||||
|
c-1.416,11.371-1.403,18.625-2.583,33.521c-11.326-5.67-20.761-9.713-19.297-6.601c1.996,4.241,5.437,20.335,7.979,33.122
|
||||||
|
c-4.114,3.243-8.08,6.714-12.028,10.142c-8.389,7.285-13.305,15.853-15.028,27.699c-0.03,0.212-0.075,0.421-0.107,0.629
|
||||||
|
c-0.648-4.69-1.661-7.76-2.764-7.747c-1.792,0.024-3.139,8.148-3.009,18.145c0.057,4.324,0.38,8.287,0.875,11.394
|
||||||
|
c-2.39,8.447-5.152,16.835-7.711,25.215c-2.132,6.979-0.929,12.301,4.238,17.096c1.48,1.376,2.778,2.942,4.154,4.427
|
||||||
|
c5.074,5.463,10.39,9.779,15.933,13.004c8.807,5.124,18.2,7.469,28.146,7.186c0.892,0.172,1.399,0.263,1.399,0.263
|
||||||
|
s0.362-0.137,1.004-0.38c5.128-0.359,10.4-1.398,15.812-3.102l7.398,40.879c-0.055-0.301-42.806,29.955-79.087,37.785
|
||||||
|
c-0.032,0.006-0.059,0.016-0.089,0.02c-10.676,1.469-21.764,3.547-31.943,6.516c-1.458,0.428-2.87,0.861-4.251,1.299
|
||||||
|
l-52.985-136.984c0,0-32.208-0.089-34.846,1.05c-5.53,2.384-8.083,8.798-5.702,14.329l54.592,126.742
|
||||||
|
c-7.692,1.541-17.844,32.23,7.304,37.668c2.615,0.967,5.697,1.322,9.271,0.822l7.172,16.641c2.382,5.531,8.798,8.084,14.329,5.703
|
||||||
|
c3.354-1.445,14.035-21.318,14.035-21.318c32.569,1.389,73.41,2.84,73.41,2.84c-5,10.695-9.305,20.662-11.867,29.881
|
||||||
|
c-24.889-4.781-54.369-8.871-63.353-3.658c0,0-11.948,23.479-23.653,46.332c-14.621,1.289-18.456,1.453-19.234,0.158
|
||||||
|
c-0.942-1.561-6.088-11.045-19.775-8.336c-13.688,2.709-2.85,17.885,0.159,22.883c2.041,3.389,5.44,12.613,22.644,15.934
|
||||||
|
c0.117,0.023,0.267,0.045,0.402,0.066c-1.793,3.451-3.302,6.336-4.408,8.416c-8.901,16.75-10.975,30.215-14.699,30.549
|
||||||
|
c-29.812,2.676-36.652,3.387-37.849,1.396c-1.199-1.99-7.76-14.08-25.209-10.627c-17.451,3.453-3.633,22.801,0.203,29.172
|
||||||
|
c2.602,4.32,6.937,16.078,28.867,20.311c9.068,1.75,60.858,1.781,82.097-3.41c2.727-0.201,4.726-0.502,5.752-0.928
|
||||||
|
c9.034-3.754,20.381-28.092,38.504-30.049c15.589-1.689,71.342,27.322,97.716,26.67l1.72,0.568c0-0.164-0.264-0.373-0.711-0.611
|
||||||
|
c0.273-0.018,0.541-0.037,0.806-0.061l-0.095,0.672l72.061-0.07c0.448,0.027,0.895,0.07,1.35,0.07c3.563,0,7.045-0.02,10.486-0.047
|
||||||
|
l22.904,0.047c0.365-0.186,0.742-0.348,1.107-0.527c25.459-0.881,47.021-3.004,64.789-7.346l0.018,0.004v-0.008
|
||||||
|
c21.837-5.334,37.942-14.016,48.474-27.861c21.791-28.652,12.789-69.168-3.434-127.711l-2.303-8.307
|
||||||
|
c-12.908-46.547-26.256-94.679-34.196-133.517c-10.895-53.272-7.418-69.423-5.418-73.893
|
||||||
|
C495.513,140.059,536.032,100.237,550.755,86.874z M209.939,168.38c-0.35-2.778-0.585-6.323-0.635-10.192
|
||||||
|
c-0.116-8.92,0.793-16.168,2.03-16.184c0.994-0.012,1.895,4.642,2.272,11.092C212.624,158.223,211.35,163.313,209.939,168.38z
|
||||||
|
M224.716,180.545c-3.29,0.043-6.093-10.406-6.262-23.338c-0.168-12.932,2.362-23.449,5.653-23.491
|
||||||
|
c3.29-0.042,6.093,10.405,6.263,23.337C230.538,169.984,228.006,180.502,224.716,180.545z M162.66,374.102L86.444,192.594
|
||||||
|
l25.545-1.434l63.626,163.41L162.66,374.102z"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 7.2 KiB |
BIN
public/assets/img/logo/vertical-02.png
Normal file
After Width: | Height: | Size: 599 KiB |
BIN
public/assets/img/logo/vertical-04.png
Normal file
After Width: | Height: | Size: 599 KiB |
@ -1,101 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
"Web App" => "Web App",
|
|
||||||
"List of appointments" => "Listado de citas",
|
|
||||||
"Calendar medico" => "Calendario Médico",
|
|
||||||
"Vacations" => "Vacaciones",
|
|
||||||
"Specialties" => "Especialidades",
|
|
||||||
"Email contact" => "Correo de contacto",
|
|
||||||
|
|
||||||
"Billing API" => "API de facturación",
|
|
||||||
"PAC status" => "Info. del Pack",
|
|
||||||
|
|
||||||
"Social media" => "Redes sociales",
|
|
||||||
"Location" => "Ubicación",
|
|
||||||
"Office hours" => "Horario consultorio",
|
|
||||||
|
|
||||||
"Online dating" => "Citas en línea",
|
|
||||||
"Billing" => "Facturación",
|
|
||||||
"Invoice consultation" => "Facturar consultas",
|
|
||||||
"CFDI Ingresos" => "CFDI Ingresos",
|
|
||||||
"CFDI 4.0 Catalogs" => "Catálogos CFDI 4.0",
|
|
||||||
"Catalogs" => "Catálogos",
|
|
||||||
|
|
||||||
"CRM" => "CRM",
|
|
||||||
"Diary" => "Agenda",
|
|
||||||
"Diary settings" => "Configuraciones de Agenda",
|
|
||||||
"QR Codes" => "Códigos QR",
|
|
||||||
|
|
||||||
"Dropdown Lists" => "Listas desplegables",
|
|
||||||
"Agenda" => "Agenda",
|
|
||||||
"koneko.mx" => "koneko.mx",
|
|
||||||
"medico.esys.mx" => "medico.esys.mx",
|
|
||||||
|
|
||||||
"General setting" => "Ajustes generales",
|
|
||||||
"Working hours" => "Horario laboral",
|
|
||||||
"Working hours new users" => "Hor. nuevos usuarios",
|
|
||||||
|
|
||||||
"System users" => "Usuarios del sistema",
|
|
||||||
|
|
||||||
"medico users" => "Usuarios Médico",
|
|
||||||
"System settings" => "Ajustes de sistema",
|
|
||||||
"Settings" => "Ajustes",
|
|
||||||
"Appointment tags" => "Etiquetas de citas",
|
|
||||||
|
|
||||||
"My page" => "Mi página",
|
|
||||||
"Relationship" => "Amistades",
|
|
||||||
"Colleagues" => "Colegas",
|
|
||||||
"Galleries" => "Galerias",
|
|
||||||
"Posts" => "Publicaciones",
|
|
||||||
"My profile" => "Mi perfil",
|
|
||||||
"User profile" => "Perfil de usuario",
|
|
||||||
"Patients" => "Pacientes",
|
|
||||||
"Doctors" => "Médicos",
|
|
||||||
"Clinics" => "Médicos",
|
|
||||||
"My account" => "Mi cuenta",
|
|
||||||
|
|
||||||
"Appointments and payments" => "Citas",
|
|
||||||
"Administration" => "Administración",
|
|
||||||
"Roles and permissions" => "Roles y permisos",
|
|
||||||
"Payments" => "Pagos",
|
|
||||||
"new payment" => "Nuevo pago",
|
|
||||||
"Appointment, Calendar" => "Citas (Calendario)",
|
|
||||||
"Appointment, List" => "Citas (Lista)",
|
|
||||||
"Appointment" => "Cita",
|
|
||||||
"Appointments" => "Citas",
|
|
||||||
"Book appointment" => "Reservar una cita",
|
|
||||||
"My services" => "Mis servicios",
|
|
||||||
"Services" => "Servicios",
|
|
||||||
"New service" => "Nuevo servicio",
|
|
||||||
"Patients" => "Pacientes",
|
|
||||||
"Secretaries" => "Secretárias",
|
|
||||||
"Secretary" => "Secretaria",
|
|
||||||
"Administrators" => "Administratores",
|
|
||||||
"Security" => "Seguridad",
|
|
||||||
"Legal contents" => "Contenidos legales",
|
|
||||||
|
|
||||||
"Roles" => "Roles",
|
|
||||||
"Role" => "Role",
|
|
||||||
"Permissions" => 'Permisos',
|
|
||||||
|
|
||||||
"new destination" => "Nuevo destino",
|
|
||||||
"new post" => "Nueva publicación",
|
|
||||||
|
|
||||||
"about" => 'Acerca de',
|
|
||||||
|
|
||||||
"Destination" => "Destino",
|
|
||||||
"Destinations" => "Destinos",
|
|
||||||
|
|
||||||
"Profiles" => "Perfiles",
|
|
||||||
"Drop-down list" => "Listas desplegables",
|
|
||||||
|
|
||||||
"Slider" => "Rotador",
|
|
||||||
"Newsletter" => "Boletín",
|
|
||||||
|
|
||||||
"Main" => "Principal",
|
|
||||||
"Subscriptors" => "Suscriptores",
|
|
||||||
|
|
||||||
"Miscellaneous" => "Varios",
|
"Miscellaneous" => "Varios",
|
||||||
"System" => "Sistema",
|
"System" => "Sistema",
|
||||||
"Users" => "Usuarios",
|
"Users" => "Usuarios",
|
||||||
|
18
resources/views/errors/404.blade.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
@extends('layouts.porto.layout')
|
||||||
|
|
||||||
|
@section('title', 'Página no encontrada ¡Ups!')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<!-- Error -->
|
||||||
|
<div class="container-xxl container-p-y">
|
||||||
|
<div class="misc-wrapper">
|
||||||
|
<h1 class="mb-2 mx-2 fs-xxlarge" style="line-height: 6rem;font-size: 6rem;">404</h1>
|
||||||
|
<h4 class="mb-2 mx-2">Página no encontrada ⚠️</h4>
|
||||||
|
<p class="mb-6 mx-2">No pudimos encontrar la página que estás buscando.</p>
|
||||||
|
<a href="{{url('/')}}" class="btn btn-primary mb-10">Regresar al inicio</a>
|
||||||
|
<div class="mt-4">
|
||||||
|
<img src="{{ asset('assets/admin/img/illustrations/page-misc-error.png') }}" alt="page-misc-error" width="225" class="img-fluid">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endsection
|
@ -1,168 +1,147 @@
|
|||||||
@extends('layouts.porto.layout')
|
@php
|
||||||
|
use Illuminate\Support\Facades\Route;
|
||||||
|
@endphp
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{ session()->get('locale') ?? app()->getLocale() }}"
|
||||||
|
data-assets-path="{{ asset('/assets') . '/' }}"
|
||||||
|
data-base-url="{{ url('/') }}"
|
||||||
|
data-route="{{ Route::currentRouteName() }}">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
@section('content')
|
<title>@hasSection('title') @yield('title') | @endif{{ $_web['title'] }}</title>
|
||||||
<div class="body coming-soon">
|
|
||||||
<header id="header" data-plugin-options="{'stickyEnabled': false}">
|
<meta name="description" content="{{ $_web['description'] }}" />
|
||||||
<div class="header-body border border-top-0 border-end-0 border-start-0">
|
<meta name="author" content="{{ config('_var.author') }}">
|
||||||
<div class="header-container container py-2">
|
|
||||||
<div class="header-row">
|
<!-- laravel CRUD token -->
|
||||||
<div class="header-column">
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
||||||
<div class="header-row">
|
|
||||||
<p class="mb-0 text-dark"><strong>Get in touch!</strong> (123) 456-789</span><span
|
<!-- Favicons-->
|
||||||
class="d-none d-sm-inline-block ps-1"> | <a href="#">mail@domain.com</a></span>
|
<link rel="icon" href="{{ asset('storage/' . $_web['favicon']['16x16']) }}" type="image/x-icon">
|
||||||
</p>
|
<link rel="icon" sizes="192x192" href="{{ asset('storage/' . $_web['favicon']['192x192']) }}">
|
||||||
</div>
|
<link rel="apple-touch-icon" type="image/x-icon" sizes="76x76" href="{{ asset('storage/' . $_web['favicon']['76x76']) }}">
|
||||||
</div>
|
<link rel="apple-touch-icon" type="image/x-icon" sizes="120x120" href="{{ asset('storage/' . $_web['favicon']['120x120']) }}">
|
||||||
<div class="header-column justify-content-end">
|
<link rel="apple-touch-icon" type="image/x-icon" sizes="152x152" href="{{ asset('storage/' . $_web['favicon']['152x152']) }}">
|
||||||
<div class="header-row">
|
<link rel="apple-touch-icon" type="image/x-icon" sizes="180x180" href="{{ asset('storage/' . $_web['favicon']['180x180']) }}">
|
||||||
<ul class="header-social-icons social-icons me-2">
|
|
||||||
<li class="social-icons-facebook"><a href="http://www.facebook.com/" target="_blank"
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
title="Facebook"><i class="fab fa-facebook-f"></i></a></li>
|
|
||||||
<li class="social-icons-x"><a href="http://www.x.com/" target="_blank" title="X"><i
|
<!-- Mobile Metas -->
|
||||||
class="fab fa-x-twitter"></i></a></li>
|
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, shrink-to-fit=no">
|
||||||
<li class="social-icons-linkedin"><a href="http://www.linkedin.com/" target="_blank"
|
</head>
|
||||||
title="Linkedin"><i class="fab fa-linkedin-in"></i></a></li>
|
<body class="bg-gray-50 text-gray-800">
|
||||||
</ul>
|
<!-- Header -->
|
||||||
<div class="header-nav-features">
|
<header class="bg-white shadow">
|
||||||
<div class="header-nav-features-search-reveal-container">
|
<div class="container mx-auto px-4 py-4 flex justify-between items-center">
|
||||||
<div
|
<a href="/" class="text-2xl font-bold text-blue-600">
|
||||||
class="header-nav-feature header-nav-features-search header-nav-features-search-reveal d-inline-flex">
|
<img src="{{ asset('storage/' . $_web['image_logo']['small']) }}" style="width: 50px;" class="inline-block" alt="{{ $_web['app_name'] }}" />
|
||||||
<a href="#"
|
{{ $_web['app_name'] }}
|
||||||
class="header-nav-features-search-show-icon d-inline-flex text-decoration-none"><i
|
</a>
|
||||||
class="fas fa-search header-nav-top-icon"></i></a>
|
<nav class="hidden md:flex space-x-6">
|
||||||
</div>
|
<a href="#features" class="hover:text-blue-600">Características</a>
|
||||||
</div>
|
<a href="#about" class="hover:text-blue-600">Sobre Nosotros</a>
|
||||||
</div>
|
<a href="#contact" class="hover:text-blue-600">Contacto</a>
|
||||||
</div>
|
</nav>
|
||||||
</div>
|
<a href="/login" class="hidden md:block px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-500">Ingresar</a>
|
||||||
</div>
|
<button class="md:hidden text-gray-600 focus:outline-none" id="menu-btn">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
||||||
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16m-7 6h7" />
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<nav class="md:hidden bg-white shadow hidden" id="menu">
|
||||||
|
<a href="#features" class="block px-4 py-2 hover:bg-gray-100">Características</a>
|
||||||
|
<a href="#about" class="block px-4 py-2 hover:bg-gray-100">Sobre Nosotros</a>
|
||||||
|
<a href="#contact" class="block px-4 py-2 hover:bg-gray-100">Contacto</a>
|
||||||
|
<a href="/login" class="block px-4 py-2 bg-blue-600 text-white text-center hover:bg-blue-500">Ingresar</a>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<!-- Hero Section -->
|
||||||
|
<section class="bg-blue-600 text-white">
|
||||||
|
<div class="container mx-auto px-4 py-16 text-center">
|
||||||
|
<h1 class="text-4xl font-bold mb-4">Bienvenido a {{ $_web['title'] }}</h1>
|
||||||
|
<p class="text-lg mb-6">El mejor administrador para negocios en México, optimizado con los catálogos SAT y herramientas avanzadas.</p>
|
||||||
|
<a href="/login" class="px-6 py-3 bg-white text-blue-600 rounded shadow hover:bg-gray-100">Empezar ahora</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
@php
|
||||||
|
print_r($_web);
|
||||||
|
@endphp
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<!-- Features -->
|
||||||
|
<section id="features" class="py-16">
|
||||||
|
<div class="container mx-auto px-4">
|
||||||
|
<h2 class="text-3xl font-bold text-center mb-8">Características</h2>
|
||||||
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||||
|
<div class="bg-white shadow p-6 rounded">
|
||||||
|
<h3 class="text-xl font-bold mb-2">Optimización SAT</h3>
|
||||||
|
<p class="text-gray-600">Automatiza y gestiona tus procesos fiscales con los catálogos CFDI 4.0.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bg-white shadow p-6 rounded">
|
||||||
<div class="header-nav-features header-nav-features-no-border p-static">
|
<h3 class="text-xl font-bold mb-2">Interfaz moderna</h3>
|
||||||
<div
|
<p class="text-gray-600">Diseño limpio y responsivo con tecnología de última generación.</p>
|
||||||
class="header-nav-feature header-nav-features-search header-nav-features-search-reveal header-nav-features-search-reveal-big-search header-nav-features-search-reveal-big-search-full">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row h-100 d-flex">
|
|
||||||
<div class="col h-100 d-flex">
|
|
||||||
<form role="search" class="d-flex h-100 w-100" action="page-search-results.html"
|
|
||||||
method="get">
|
|
||||||
<div class="big-search-header input-group">
|
|
||||||
<input class="form-control text-1" id="headerSearch" name="q" type="search"
|
|
||||||
value="" placeholder="Type and hit enter...">
|
|
||||||
<a href="#" class="header-nav-features-search-hide-icon"><i
|
|
||||||
class="fas fa-times header-nav-top-icon"></i></a>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="bg-white shadow p-6 rounded">
|
||||||
</header>
|
<h3 class="text-xl font-bold mb-2">Herramientas avanzadas</h3>
|
||||||
|
<p class="text-gray-600">Spatie Permission, Redis, Excel y más para tu negocio.</p>
|
||||||
<div role="main" class="main" style="min-height: calc(100vh - 393px);">
|
|
||||||
|
|
||||||
<pre>
|
|
||||||
@php
|
|
||||||
print_r($_web);
|
|
||||||
@endphp
|
|
||||||
</pre>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
|
||||||
<div class="row mt-5">
|
|
||||||
<div class="col text-center">
|
|
||||||
<div class="logo">
|
|
||||||
<a href="index.html">
|
|
||||||
<img width="100" height="48" src="/assets/img/logo-default-slim.png" alt="Porto">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
|
||||||
<div class="col">
|
|
||||||
<hr class="solid my-5">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<section class="http-error py-0">
|
|
||||||
<div class="row justify-content-center py-3">
|
|
||||||
<div class="col-6 text-center">
|
|
||||||
<div class="http-error-main">
|
|
||||||
<h2 class="mb-0">500!</h2>
|
|
||||||
<span class="text-6 font-weight-bold text-color-dark">UNEXPECTED ERROR</span>
|
|
||||||
<p class="text-3 my-4 line-height-8">An unexpected error has occured. Lorem ipsum dolor sit
|
|
||||||
amet, consectetur adipiscing elit. Phasellus blandit massa enim.</p>
|
|
||||||
</div>
|
|
||||||
<a href="index.html"
|
|
||||||
class="btn btn-primary btn-rounded btn-xl font-weight-semibold text-2 px-4 py-3 mt-1 mb-4"><i
|
|
||||||
class="fas fa-angle-left pe-3"></i>GO BACK TO HOME PAGE</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
<footer id="footer">
|
<!-- About -->
|
||||||
<div class="container">
|
<section id="about" class="bg-gray-100 py-16">
|
||||||
<div class="row py-5">
|
<div class="container mx-auto px-4 text-center">
|
||||||
<div class="col-md-4 d-flex justify-content-center justify-content-md-start mb-4 mb-lg-0">
|
<h2 class="text-3xl font-bold mb-4">Sobre Nosotros</h2>
|
||||||
<a href="index.html" class="logo pe-0 pe-lg-3 ps-3 ps-md-0">
|
<p class="text-gray-600 max-w-3xl mx-auto">Koneko es una empresa dedicada a ofrecer soluciones tecnológicas avanzadas, centradas en la eficiencia y la simplicidad para negocios en México. Nuestro objetivo es facilitar tus operaciones.</p>
|
||||||
<img alt="Porto Website Template" src="/assets/img/logo-footer.png" height="32">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-8 d-flex justify-content-center justify-content-md-end mb-4 mb-lg-0">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-6 mb-3 mb-md-0">
|
|
||||||
<div class="ms-3 text-center text-md-end">
|
|
||||||
<h5 class="text-3 mb-0 text-color-light">NEW YORK</h5>
|
|
||||||
<p class="text-4 mb-0"><i
|
|
||||||
class="fab fa-whatsapp text-color-primary top-1 p-relative"></i><span
|
|
||||||
class="ps-1">(123) 465-7890</span></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6">
|
|
||||||
<div class="ms-3 text-center text-md-end">
|
|
||||||
<h5 class="text-3 mb-0 text-color-light">LOS ANGELES</h5>
|
|
||||||
<p class="text-4 mb-0"><i
|
|
||||||
class="fab fa-whatsapp text-color-primary top-1 p-relative"></i><span
|
|
||||||
class="ps-1">(123) 465-7890</span></p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="footer-copyright footer-copyright-style-2">
|
|
||||||
<div class="container py-2">
|
|
||||||
<div class="row py-4">
|
|
||||||
<div
|
|
||||||
class="col-md-4 d-flex align-items-center justify-content-center justify-content-md-start mb-2 mb-lg-0">
|
|
||||||
<p>© Copyright 2024. All Rights Reserved.</p>
|
|
||||||
</div>
|
|
||||||
<div
|
|
||||||
class="col-md-8 d-flex align-items-center justify-content-center justify-content-md-end mb-4 mb-lg-0">
|
|
||||||
<p><i class="far fa-envelope text-color-primary top-1 p-relative"></i><a
|
|
||||||
href="mailto:mail@example.com" class="opacity-7 ps-1">mail@example.com</a></p>
|
|
||||||
<ul class="footer-social-icons social-icons social-icons-clean social-icons-icon-light ms-3">
|
|
||||||
<li class="social-icons-facebook"><a href="http://www.facebook.com/" target="_blank"
|
|
||||||
title="Facebook"><i class="fab fa-facebook-f text-2"></i></a></li>
|
|
||||||
<li class="social-icons-x"><a href="http://www.x.com/" target="_blank" title="X"><i
|
|
||||||
class="fab fa-x-twitter text-2"></i></a></li>
|
|
||||||
<li class="social-icons-linkedin"><a href="http://www.linkedin.com/" target="_blank"
|
|
||||||
title="Linkedin"><i class="fab fa-linkedin-in text-2"></i></a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<a class="style-switcher-open-loader" href="#" data-base-path="" data-skin-src="" data-bs-toggle="tooltip"
|
|
||||||
data-bs-animation="false" data-bs-placement="right" title="Style Switcher" aria-label="Style Switcher"><i
|
|
||||||
class="fas fa-cogs"></i>
|
|
||||||
<div class="style-switcher-tooltip"><strong>Style Switcher</strong>
|
|
||||||
<p>Check out different color options and styles.</p>
|
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</section>
|
||||||
@endsection
|
|
||||||
|
<!-- Contact -->
|
||||||
|
<section id="contact" class="py-16">
|
||||||
|
<div class="container mx-auto px-4">
|
||||||
|
<h2 class="text-3xl font-bold text-center mb-4">Contáctanos</h2>
|
||||||
|
<p class="text-gray-600 text-center mb-8">¿Tienes preguntas o necesitas más información? Estamos aquí para ayudarte.</p>
|
||||||
|
<div class="max-w-lg mx-auto bg-white shadow p-6 rounded">
|
||||||
|
<form action="#" method="POST">
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="name" class="block text-gray-600">Nombre</label>
|
||||||
|
<input type="text" id="name" name="name" class="w-full">
|
||||||
|
</div>
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="email" class="block text-gray-600">Correo Electrónico</label>
|
||||||
|
<input type="email" id="email" name="email" class="w-full">
|
||||||
|
</div>
|
||||||
|
<div class="mb-4">
|
||||||
|
<label for="message" class="block text-gray-600">Mensaje</label>
|
||||||
|
<textarea id="message" name="message" rows="4" class="w-full"></textarea>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="w-full bg-blue-600 text-white py-2 rounded hover:bg-blue-500">Enviar</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="bg-blue-600 text-white py-6">
|
||||||
|
<div class="container mx-auto text-center">
|
||||||
|
<p>© 2025 Koneko Soluciones Tecnológicas. Todos los derechos reservados.</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const menuBtn = document.getElementById('menu-btn');
|
||||||
|
const menu = document.getElementById('menu');
|
||||||
|
|
||||||
|
menuBtn.addEventListener('click', () => {
|
||||||
|
menu.classList.toggle('hidden');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|