175 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| "use client";
 | |
| import IconTrashLines from '@/components/icon/icon-trash-lines';
 | |
| import PanelCodeHighlight from '@/components/panel-code-highlight';
 | |
| import ComponentsTablesSimple from '@/components/tables/components-tables-simple';
 | |
| import { formatUnixTimestamp } from '@/utils/helpers';
 | |
| import Tippy from '@tippyjs/react';
 | |
| import axios from 'axios';
 | |
| import React, { useEffect, useState } from 'react'
 | |
| 
 | |
| // import ReactApexChart from 'react-apexcharts';
 | |
| import dynamic from 'next/dynamic';
 | |
| import Link from 'next/link';
 | |
| const ReactApexChart = dynamic(() => import('react-apexcharts'), { ssr: false });
 | |
| 
 | |
| type Props = {}
 | |
| 
 | |
| const SungrowInverters = (props: Props) => {
 | |
|     const [inverters, setInverters] = useState<any[]>([])
 | |
|     const [loading, setLoading] = useState(true)
 | |
|     const [isMounted, setIsMounted] = useState(false)
 | |
| 
 | |
|     useEffect(() => {
 | |
|         setIsMounted(true);
 | |
|         const fetchData = async () => {
 | |
|             try {
 | |
|                 const res = await axios.get("https://api-a.fomware.com.cn/asset/v1/list?type=2", {
 | |
|                     headers: {
 | |
|                         "Authorization": "Bearer " + process.env.NEXT_PUBLIC_CHINT_TOKEN
 | |
|                     }
 | |
|                 })
 | |
|                 console.log("res", res.data.data.devices)
 | |
|                 setInverters(res.data.data.devices)
 | |
|             } catch (error) {
 | |
|                 console.error("Error fetching data:", error);
 | |
|             } finally {
 | |
|                 setLoading(false);
 | |
|             }
 | |
|         };
 | |
| 
 | |
|         fetchData()
 | |
|     }, [])
 | |
| 
 | |
| 
 | |
|     const chartConfigs: any = {
 | |
|         options: {
 | |
|             chart: {
 | |
|                 height: 58,
 | |
|                 type: 'line',
 | |
|                 fontFamily: 'Nunito, sans-serif',
 | |
|                 sparkline: {
 | |
|                     enabled: true,
 | |
|                 },
 | |
|                 dropShadow: {
 | |
|                     enabled: true,
 | |
|                     blur: 3,
 | |
|                     color: '#009688',
 | |
|                     opacity: 0.4,
 | |
|                 },
 | |
|             },
 | |
|             stroke: {
 | |
|                 curve: 'smooth',
 | |
|                 width: 2,
 | |
|             },
 | |
|             colors: ['#009688'],
 | |
|             grid: {
 | |
|                 padding: {
 | |
|                     top: 5,
 | |
|                     bottom: 5,
 | |
|                     left: 5,
 | |
|                     right: 5,
 | |
|                 },
 | |
|             },
 | |
|             tooltip: {
 | |
|                 x: {
 | |
|                     show: false,
 | |
|                 },
 | |
|                 y: {
 | |
|                     title: {
 | |
|                         formatter: () => {
 | |
|                             return '';
 | |
|                         },
 | |
|                     },
 | |
|                 },
 | |
|             },
 | |
|         },
 | |
|     };
 | |
| 
 | |
|     // inverter status 0: initial, 1: standby, 2: fault, 3: running, 5: offline, 9: shutdown, 10: unknown
 | |
| 
 | |
|     return (
 | |
|         <div>
 | |
|             {loading ? <p>Loading...</p> : (
 | |
|             <PanelCodeHighlight title="Chint Inverters">
 | |
|                 <div className="table-responsive mb-5">
 | |
|                     <table>
 | |
|                         <thead>
 | |
|                             <tr>
 | |
|                                 <th>Inverter Name</th>
 | |
|                                 <th>Site Name</th>
 | |
|                                 <th>Gateway SN</th>
 | |
|                                 <th>Inverter Status</th>
 | |
|                                 <th>Model</th>
 | |
|                                 <th>SN</th>
 | |
|                                 <th>Real Time Power</th>
 | |
|                                 <th>E-Today</th>
 | |
|                                 <th>WeekData</th>
 | |
|                                 <th>Created At</th>
 | |
|                                 <th>Updated At</th>
 | |
|                             </tr>
 | |
|                         </thead>
 | |
|                         <tbody>
 | |
|                             {inverters.map((data) => (
 | |
|                                 <tr key={data.id}>
 | |
|                                     <td>
 | |
|                                         <div className="whitespace-nowrap"><Link href={`/chint/inverters/${data.name}`}>{data.name}</Link></div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div className="whitespace-nowrap">{data.siteName}</div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div>{data.gatewaySn}</div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div className={`whitespace-nowrap ${
 | |
|                                             data.status === 0 ? "text-gray-500"    // Initial
 | |
|                                             : data.status === 1 ? "text-blue-500"  // Standby
 | |
|                                             : data.status === 2 ? "text-red-500"  // Fault
 | |
|                                             : data.status === 3 ? "text-green-500" // Running
 | |
|                                             : data.status === 5 ? "text-yellow-500" // Offline
 | |
|                                             : data.status === 9 ? "text-purple-500" // Shutdown
 | |
|                                             : "text-gray-400" // Unknown (default)
 | |
|                                         }`}>
 | |
|                                             {data.statusLabel}
 | |
|                                         </div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div>{data.model}</div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div>{data.sn}</div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div>{data.activePowerWithUnit}</div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         <div>{data.eTodayWithUnit}</div>
 | |
|                                     </td>
 | |
|                                     <td>
 | |
|                                         {isMounted && (
 | |
|                                             <ReactApexChart
 | |
|                                                 series={[{ data: data.weekTrend.map((point: any) => point.y) }]}
 | |
|                                                 options={{
 | |
|                                                     ...chartConfigs.options,
 | |
|                                                     xaxis: { categories: data.weekTrend.map((point: any) => point.x) },
 | |
|                                                 }}
 | |
|                                                 type="line"
 | |
|                                                 height={58}
 | |
|                                                 width={'100%'}
 | |
|                                             />
 | |
|                                         )}                                    </td>
 | |
|                                     <td>{formatUnixTimestamp(data.createdAt)}</td>
 | |
|                                     <td>{formatUnixTimestamp(data.updatedAt)}</td>
 | |
|                                 </tr>
 | |
|                             ))}
 | |
|                         </tbody>
 | |
|                     </table>
 | |
|                 </div>
 | |
|             </PanelCodeHighlight>
 | |
|             )}
 | |
|         </div>
 | |
|     )
 | |
| }
 | |
| 
 | |
| export default SungrowInverters
 | 
