inverters

This commit is contained in:
sam 2025-02-21 01:19:10 +08:00
parent 660e1cd10b
commit e801111351
4 changed files with 111 additions and 16 deletions

View File

@ -0,0 +1,97 @@
"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'
type Props = {}
const SungrowInverters = (props: Props) => {
const [inverters, setInverters] = useState<any[]>([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
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()
}, [])
// 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 Sites">
<div className="table-responsive mb-5">
<table>
<thead>
<tr>
<th>Model</th>
<th>Site Name</th>
<th>Status</th>
<th>Created At</th>
<th>Updated At</th>
<th className="text-center">Action</th>
</tr>
</thead>
<tbody>
{inverters.map((data) => (
<tr key={data.id}>
<td>
<div className="whitespace-nowrap">{data.model}</div>
</td>
<td>
<div className="whitespace-nowrap">{data.siteName}</div>
</td>
<td>
<div className={`whitespace-nowrap ${
data.status === 0 ? "text-gray-500" // Initial
: data.status === 1 ? "text-green-500" // Standby
: data.status === 2 ? "text-red-500" // Fault
: data.status === 3 ? "text-blue-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>{formatUnixTimestamp(data.createdAt)}</td>
<td>{formatUnixTimestamp(data.updatedAt)}</td>
<td className="text-center">
<Tippy content="Delete">
<button type="button">
<IconTrashLines className="m-auto" />
</button>
</Tippy>
</td>
</tr>
))}
</tbody>
</table>
</div>
</PanelCodeHighlight>
)}
</div>
)
}
export default SungrowInverters

View File

@ -6,19 +6,19 @@ import axios from "axios";
import React, { useEffect, useState } from "react"; import React, { useEffect, useState } from "react";
const SungrowAssets = () => { const SungrowAssets = () => {
const [devices, setDevices] = useState<any[]>([]); const [sites, setSites] = useState<any[]>([]);
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
useEffect(() => { useEffect(() => {
const fetchData = async () => { const fetchData = async () => {
try { try {
const res = await axios.get("https://api-a.fomware.com.cn/asset/v1/list", { const res = await axios.get("https://api-a.fomware.com.cn/site/v1/list", {
headers: { headers: {
"Authorization": "Bearer lIywwAMdrOdsRxuWvRoekdxrPtmIPkxA" "Authorization": "Bearer " + process.env.NEXT_PUBLIC_CHINT_TOKEN
} }
}) })
console.log("res", res.data.data.devices) console.log("res", res.data.data.siteInfos)
setDevices(res.data.data.devices); setSites(res.data.data.siteInfos)
} catch (error) { } catch (error) {
console.error("Error fetching data:", error); console.error("Error fetching data:", error);
} finally { } finally {
@ -26,12 +26,12 @@ const SungrowAssets = () => {
} }
}; };
fetchData(); fetchData()
}, []); }, [])
return ( return (
<div> <div>
{loading ? <p>Loading...</p> : <ComponentsTablesSimple tableData={devices} />} {loading ? <p>Loading...</p> : <ComponentsTablesSimple tableData={sites} />}
</div> </div>
) )
} }

View File

@ -134,6 +134,9 @@ const Sidebar = () => {
<li> <li>
<Link href="/sungrow/sites">Sites</Link> <Link href="/sungrow/sites">Sites</Link>
</li> </li>
<li>
<Link href="/sungrow/inverters">Inverters</Link>
</li>
</ul> </ul>
</AnimateHeight> </AnimateHeight>
</li> </li>

View File

@ -27,22 +27,17 @@ const ComponentsTablesSimple = ({ tableData = [] }: { tableData: any[] }) => {
{tableData.map((data) => ( {tableData.map((data) => (
<tr key={data.id}> <tr key={data.id}>
<td> <td>
<div className="whitespace-nowrap">{data.siteName}</div> <div className="whitespace-nowrap">{data.name}</div>
</td> </td>
<td>{data.inverter.length}</td> <td>{data.deviceQty.inverterQty}</td>
<td> <td>
<div className={`whitespace-nowrap ${ data.status === 1 ? "text-danger" : "text-success" }`} > <div className={`whitespace-nowrap ${ data.status !== 1 ? "text-danger" : "text-success" }`} >
{data.statusLabel} {data.statusLabel}
</div> </div>
</td> </td>
<td>{formatUnixTimestamp(data.createdAt)}</td> <td>{formatUnixTimestamp(data.createdAt)}</td>
<td>{formatUnixTimestamp(data.updatedAt)}</td> <td>{formatUnixTimestamp(data.updatedAt)}</td>
<td className="text-center"> <td className="text-center">
<Tippy content="View">
<button type="button" className='mr-2'>
<IconEye className="m-auto" />
</button>
</Tippy>
<Tippy content="Delete"> <Tippy content="Delete">
<button type="button"> <button type="button">
<IconTrashLines className="m-auto" /> <IconTrashLines className="m-auto" />