Parcourir la source

Added admin link to Tasmota power plugs card

maziggy il y a 8 mois
Parent
commit
02f437b349

+ 23 - 2
frontend/src/components/SmartPlugCard.tsx

@@ -1,6 +1,6 @@
 import { useState } from 'react';
 import { useState } from 'react';
 import { useMutation, useQueryClient, useQuery } from '@tanstack/react-query';
 import { useMutation, useQueryClient, useQuery } from '@tanstack/react-query';
-import { Plug, Power, PowerOff, Loader2, Trash2, Settings2, Thermometer, Clock, Wifi, WifiOff, Edit2, Bell, Calendar, LayoutGrid } from 'lucide-react';
+import { Plug, Power, PowerOff, Loader2, Trash2, Settings2, Thermometer, Clock, Wifi, WifiOff, Edit2, Bell, Calendar, LayoutGrid, ExternalLink } from 'lucide-react';
 import { api } from '../api/client';
 import { api } from '../api/client';
 import type { SmartPlug, SmartPlugUpdate } from '../api/client';
 import type { SmartPlug, SmartPlugUpdate } from '../api/client';
 import { Card, CardContent } from './Card';
 import { Card, CardContent } from './Card';
@@ -66,6 +66,16 @@ export function SmartPlugCard({ plug, onEdit }: SmartPlugCardProps) {
   const isReachable = status?.reachable ?? false;
   const isReachable = status?.reachable ?? false;
   const isPending = controlMutation.isPending;
   const isPending = controlMutation.isPending;
 
 
+  // Generate admin URL with auto-login credentials
+  const getAdminUrl = () => {
+    const ip = plug.ip_address;
+    if (plug.username && plug.password) {
+      // Use HTTP Basic Auth in URL for auto-login
+      return `http://${encodeURIComponent(plug.username)}:${encodeURIComponent(plug.password)}@${ip}/`;
+    }
+    return `http://${ip}/`;
+  };
+
   return (
   return (
     <>
     <>
       <Card className="relative">
       <Card className="relative">
@@ -83,7 +93,7 @@ export function SmartPlugCard({ plug, onEdit }: SmartPlugCardProps) {
             </div>
             </div>
 
 
             {/* Status indicator */}
             {/* Status indicator */}
-            <div className="flex items-center gap-2">
+            <div className="flex flex-col items-end gap-1">
               {statusLoading ? (
               {statusLoading ? (
                 <Loader2 className="w-4 h-4 text-bambu-gray animate-spin" />
                 <Loader2 className="w-4 h-4 text-bambu-gray animate-spin" />
               ) : isReachable ? (
               ) : isReachable ? (
@@ -97,6 +107,17 @@ export function SmartPlugCard({ plug, onEdit }: SmartPlugCardProps) {
                   <span>Offline</span>
                   <span>Offline</span>
                 </div>
                 </div>
               )}
               )}
+              {/* Admin page link */}
+              <a
+                href={getAdminUrl()}
+                target="_blank"
+                rel="noopener noreferrer"
+                className="flex items-center gap-1 px-2 py-0.5 bg-bambu-dark hover:bg-bambu-dark-tertiary text-bambu-gray hover:text-white text-xs rounded-full transition-colors"
+                title="Open plug admin page"
+              >
+                <ExternalLink className="w-3 h-3" />
+                Admin
+              </a>
             </div>
             </div>
           </div>
           </div>
 
 

Fichier diff supprimé car celui-ci est trop grand
+ 0 - 0
static/assets/index-Bo9Lo1_A.js


+ 1 - 1
static/index.html

@@ -23,7 +23,7 @@
 
 
     <!-- Splash screens for iOS -->
     <!-- Splash screens for iOS -->
     <link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
     <link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
-    <script type="module" crossorigin src="/assets/index-Buplsh8i.js"></script>
+    <script type="module" crossorigin src="/assets/index-Bo9Lo1_A.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-j3n1gAEX.css">
     <link rel="stylesheet" crossorigin href="/assets/index-j3n1gAEX.css">
   </head>
   </head>
   <body>
   <body>

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff