From 8792c5b283243d4483454c22d740a969714ddf66 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Thu, 14 Aug 2025 16:32:20 -0600 Subject: [PATCH] Se creo el archivo de obras --- .../Controllers/Dashboard/ObrasController.php | 29 ++++++++++++++++ .../Dashboard/TramiteController.php | 29 ++++++++++++++++ resources/js/Layouts/DashboardLayout.vue | 5 --- resources/js/Pages/Dashboard/Obras.vue | 29 ++++++++++++++++ resources/js/Pages/Dashboard/Tramites.vue | 33 +++++++++++-------- routes/api.php | 7 ++++ routes/web.php | 7 ++-- 7 files changed, 115 insertions(+), 24 deletions(-) create mode 100644 app/Http/Controllers/Dashboard/ObrasController.php create mode 100644 app/Http/Controllers/Dashboard/TramiteController.php create mode 100644 resources/js/Pages/Dashboard/Obras.vue diff --git a/app/Http/Controllers/Dashboard/ObrasController.php b/app/Http/Controllers/Dashboard/ObrasController.php new file mode 100644 index 0000000..38f34bc --- /dev/null +++ b/app/Http/Controllers/Dashboard/ObrasController.php @@ -0,0 +1,29 @@ +only(['start', 'end', 'type']); + $query = array_merge(['type' => 'api'], $query); + + try { + $response = Http::timeout(5)->get('https://obras-information.comalcalco.gob.mx/api/controller.php?action=getCounters', $query); + + if (! $response->successful()) { + return response()->json(['error' => 'External service error'], $response->status()); + } + + return response()->json($response->json(), $response->status()) + ->header('Content-Type', $response->header('Content-Type', 'application/json')); + } catch (\Throwable $e) { + Log::error('Proxy error: '.$e->getMessage()); + return response()->json(['error' => 'Unable to contact external service'], 502); + } + } +} diff --git a/app/Http/Controllers/Dashboard/TramiteController.php b/app/Http/Controllers/Dashboard/TramiteController.php new file mode 100644 index 0000000..12cccf2 --- /dev/null +++ b/app/Http/Controllers/Dashboard/TramiteController.php @@ -0,0 +1,29 @@ +only(['start', 'end', 'type']); + $query = array_merge(['type' => 'api'], $query); + + try { + $response = Http::timeout(5)->get('https://tramites.comalcalco.gob.mx/reporte-especial', $query); + + if (! $response->successful()) { + return response()->json(['error' => 'External service error'], $response->status()); + } + + return response()->json($response->json(), $response->status()) + ->header('Content-Type', $response->header('Content-Type', 'application/json')); + } catch (\Throwable $e) { + Log::error('Proxy error: '.$e->getMessage()); + return response()->json(['error' => 'Unable to contact external service'], 502); + } + } +} diff --git a/resources/js/Layouts/DashboardLayout.vue b/resources/js/Layouts/DashboardLayout.vue index b26c1cb..cbacbaa 100644 --- a/resources/js/Layouts/DashboardLayout.vue +++ b/resources/js/Layouts/DashboardLayout.vue @@ -55,11 +55,6 @@ onMounted(()=> { name="help.title" to="dashboard.help" /> -
+ + +const fetchReport = async ({ start, end }) => { + // cancelar petición previa + if (cancelTokenSource) { + try { cancelTokenSource.cancel('cancel'); } catch (e) {} + } + cancelTokenSource = axios.CancelToken.source(); + + const params = {}; + if (start) params.start = start; + if (end) params.end = end; + + const res = await axios.get('/api/reporte-especial', { + params, + cancelToken: cancelTokenSource.token, + headers: { 'X-Requested-With': 'XMLHttpRequest' } + }); + + // axios lanza en error si status >= 400, aquí devolvemos data directamente + return res.data; +}; + + + diff --git a/resources/js/Pages/Dashboard/Tramites.vue b/resources/js/Pages/Dashboard/Tramites.vue index 7514808..fa27f74 100644 --- a/resources/js/Pages/Dashboard/Tramites.vue +++ b/resources/js/Pages/Dashboard/Tramites.vue @@ -1,6 +1,7 @@