From 28f22dd0d30c5c4d44b43b35b46393034478c188 Mon Sep 17 00:00:00 2001 From: MehrdadAdabi <126083584+mehrdadAdabi@users.noreply.github.com> Date: Sat, 30 Aug 2025 18:21:46 +0330 Subject: [PATCH] fix: green inivation designed bugs --- .../digital-innovation-page.tsx | 106 ++++++------ .../green-innovation-page.tsx | 151 +++++++++++------- 2 files changed, 147 insertions(+), 110 deletions(-) diff --git a/app/components/dashboard/project-management/digital-innovation-page.tsx b/app/components/dashboard/project-management/digital-innovation-page.tsx index 15a18df..1a0aefb 100644 --- a/app/components/dashboard/project-management/digital-innovation-page.tsx +++ b/app/components/dashboard/project-management/digital-innovation-page.tsx @@ -69,6 +69,7 @@ interface DigitalInnovationMetrics { reduce_energy_consumption_percent: string; resource_productivity: string; resource_productivity_percent: string; + average_project_score?: number; } // Normalized interface for digital innovation stats @@ -82,6 +83,8 @@ interface DigitalInnovationStats { reduceEnergyConsumptionPercent: number; resourceProductivity: number; resourceProductivityPercent: number; + avarageProjectScore: number; + countInnovationDigitalProjects: number; } enum DigitalCardLabel { @@ -168,6 +171,7 @@ export function DigitalInnovationPage() { reduceEnergyConsumptionPercent: 0, resourceProductivity: 0, resourceProductivityPercent: 0, + avarageProjectScore: 0, }); const [sortConfig, setSortConfig] = useState({ field: "start_date", @@ -177,7 +181,7 @@ export function DigitalInnovationPage() { new Set() ); const [detailsDialogOpen, setDetailsDialogOpen] = useState(false); - const [avarage, setAvarage] = useState(0); + // const [avarage, setAvarage] = useState(0); const observerRef = useRef(null); const fetchingRef = useRef(false); @@ -288,7 +292,6 @@ export function DigitalInnovationPage() { Pagination: { PageNumber: pageToFetch, PageSize: pageSize }, }); - // console.log(JSON.parse(response.data)); if (response.state === 0) { const dataString = response.data; if (dataString && typeof dataString === "string") { @@ -297,7 +300,7 @@ export function DigitalInnovationPage() { if (Array.isArray(parsedData)) { if (reset) { setProjects(parsedData); - calculateAverage(parsedData); + // calculateAverage(parsedData); setTotalCount(parsedData.length); } else { setProjects((prev) => [...prev, ...parsedData]); @@ -422,8 +425,6 @@ export function DigitalInnovationPage() { const parsedData = JSON.parse(dataString); if (Array.isArray(parsedData) && parsedData[0]) { const count = parsedData[0].project_no_count || 0; - setActualTotalCount(count); - // Keep stats in sync if backend stats not yet loaded setStats((prev) => ({ ...prev, totalProjects: count })); } } catch (parseError) { @@ -440,7 +441,7 @@ export function DigitalInnovationPage() { const fetchStats = async () => { try { setStatsLoading(true); - const raw = await apiService.callInnovationProcess({ + const raw = await apiService.call({ innovation_digital_function: {}, }); @@ -474,8 +475,10 @@ export function DigitalInnovationPage() { resourceProductivityPercent: parseNum( payload?.resource_productivity_percent ), + avarageProjectScore: parseNum(payload?.average_project_score), + countInnovationDigitalProjects: parseNum(payload?.count_innovation_digital_projects), }; - + setActualTotalCount(normalized.countInnovationDigitalProjects); setStats(normalized); } catch (error) { console.error("Error fetching stats:", error); @@ -532,7 +535,7 @@ export function DigitalInnovationPage() { } }, [rating]); - const ststusColor = (status: projectStatus): any => { + const statusColor = (status: projectStatus): any => { let el = null; switch (status) { case projectStatus.contract: @@ -597,7 +600,7 @@ export function DigitalInnovationPage() { return (
) => { - let number = 0; - data.map( - (item: ProcessInnovationData) => (number = number + +item.project_rating) - ); - setAvarage(number / data.length); - }; + // const calculateAverage = (data: Array) => { + // let number = 0; + // data.map( + // (item: ProcessInnovationData) => (number = number + +item.project_rating) + // ); + // setAvarage(number / data.length); + // }; return ( -
+
{/* Stats Cards */} -
+
{/* Stats Grid */} -
+
{loading || statsLoading ? // Loading skeleton for stats cards - matching new design Array.from({ length: 4 }).map((_, index) => ( @@ -648,18 +651,18 @@ export function DigitalInnovationPage() { key={`skeleton-${index}`} className="bg-[linear-gradient(to_bottom_left,#464861,50%,#111628)] backdrop-blur-sm rounded-2xl overflow-hidden" > - +
-
+
-
+
-
+
- +
-
-

+
+

{card.title}

{card.icon}
-
+

@@ -708,7 +711,7 @@ export function DigitalInnovationPage() {

{/* Process Impacts Chart */} - + {/* */} {/* Data Table */} - + -
- +
+
{columns.map((column) => ( @@ -864,30 +867,29 @@ export function DigitalInnovationPage() { {/* Footer */}
-
-
+
+
- کل پروژه ها :{formatNumber(actualTotalCount)} + کل پروژه ها : {formatNumber(actualTotalCount)}
- {/* Project number column - empty */} -
- {/* Title column - empty */} -
- {/* Project status column - empty */} -
- - - - -
- {/* Project rating column - show average */} -
-
- میانگین امتیاز :‌ + +
+
+ + + +
-
- {formatNumber(((avarage ?? 0) as number).toFixed?.(1) ?? 0)} +
+
میانگین :‌
+
+ {formatNumber( + ((stats.avarageProjectScore ?? 0) as number).toFixed?.( + 1 + ) ?? 0 + )} +
diff --git a/app/components/dashboard/project-management/green-innovation-page.tsx b/app/components/dashboard/project-management/green-innovation-page.tsx index dfb7fa5..164bd3c 100644 --- a/app/components/dashboard/project-management/green-innovation-page.tsx +++ b/app/components/dashboard/project-management/green-innovation-page.tsx @@ -99,27 +99,10 @@ interface InnovationStats { waste_reduction_percent: number; water_recovery_reduction: number; water_recovery_reduction_percent: number; - average_project_score:number + average_project_score: number; + count_innovation_green_projects: number; } -interface GreenInnovationState { - water: { - value: any; - percent: number; - }; - food: { - value: any; - percent: number; - }; - power: { - value: any; - percent: number; - }; - oil: { - value: any; - percent: number; - }; -} interface Params { icon: any; @@ -145,6 +128,16 @@ interface ChartDataItem { amt: number; // max value or target } +enum projectStatus { + propozal = "پروپوزال", + contract = "پیشنویس قرارداد", + inprogress = "در حال انجام", + stop = "متوقف شده", + mafasa = "مرحله مفاصا", + finish = "پایان یافته", +} + + const columns = [ { key: "select", label: "", sortable: false, width: "50px" }, { key: "project_no", label: "شماره پروژه", sortable: true, width: "140px" }, @@ -179,7 +172,7 @@ export function GreenInnovationPage() { field: "start_date", direction: "asc", }); - const [tblAvarage , setTblAvarage] = useState(0); + const [tblAvarage, setTblAvarage] = useState(0); const [selectedProjects, setSelectedProjects] = useState>( new Set() ); @@ -215,7 +208,7 @@ export function GreenInnovationPage() { value: 0, suffix: "متر مربع", percent: 0, - } + }, }); const [sustainabilityStats, setSustainabilityStats] = useState({ pollution: { @@ -431,7 +424,6 @@ export function GreenInnovationPage() { const parsedData = JSON.parse(dataString); if (Array.isArray(parsedData) && parsedData[0]) { const count = parsedData[0].project_no_count || 0; - setActualTotalCount(count); // Keep stats in sync if backend stats not yet loaded setStats((prev) => ({ ...prev, totalProjects: count })); } @@ -510,9 +502,11 @@ export function GreenInnovationPage() { percent: formatNumber(parseNum(stats.waste_reduction_percent)), }, - avarage: stats.average_project_score + avarage: stats.average_project_score, + countInnovationGreenProjects: stats.count_innovation_green_projects, }; - setTblAvarage(normalized.avarage) + setActualTotalCount(normalized.countInnovationGreenProjects); + setTblAvarage(normalized.avarage); setPageData(normalized); } catch (error) { console.error("Error fetching stats:", error); @@ -623,18 +617,19 @@ export function GreenInnovationPage() { ); case "title": return {String(value)}; - case "project_status": - return ( - - {String(value)} - - ); + case "project_status": + return ( +
+ + {String(value)} +
+ ); case "project_rating": return ( @@ -654,6 +649,30 @@ export function GreenInnovationPage() { } }; + const statusColor = (status: projectStatus): any => { + let el = null; + switch (status) { + case projectStatus.contract: + el = "teal"; + break; + case projectStatus.finish: + el = "info"; + break; + case projectStatus.stop: + el = "warning"; + break; + case projectStatus.inprogress: + el = "teal"; + break; + case projectStatus.mafasa: + el = "destructive"; + break; + case projectStatus.propozal: + el = "info"; + } + return el; + }; + const [chartData, setChartData] = useState>([ { name: recycleParams.water.label, pv: 70, amt: 80 }, { name: recycleParams.power.label, pv: 45, amt: 60 }, @@ -673,7 +692,7 @@ export function GreenInnovationPage() { Array.from({ length: 2 }).map((_, index) => (
@@ -700,7 +719,7 @@ export function GreenInnovationPage() { : Object.entries(sustainabilityStats).map(([key, value]) => (
@@ -737,7 +756,7 @@ export function GreenInnovationPage() { {/* Process Impacts Chart */} {statsLoading ? ( - +
@@ -745,7 +764,7 @@ export function GreenInnovationPage() {
-
+
{[...Array(3)].map((_, paramIndex) => (
) : ( - +
@@ -861,7 +880,7 @@ export function GreenInnovationPage() { position: "top", fill: "#fff", fontWeight: "bold", - formatter: (value:any) => `${value}%`, + formatter: (value: any) => `${value}%`, }} /> @@ -872,7 +891,7 @@ export function GreenInnovationPage() { )} - +
@@ -890,9 +909,7 @@ export function GreenInnovationPage() {
-
+
{statsLoading ? Array.from({ length: 10 }).map((_, index) => (
@@ -915,7 +932,7 @@ export function GreenInnovationPage() {
{/* Data Table */} - +
@@ -1019,8 +1036,34 @@ export function GreenInnovationPage() { - {/* Footer */}
+
+
+
+ کل پروژه ها :{formatNumber(actualTotalCount)} +
+
+ +
+
+ + + + +
+
+
میانگین :‌
+
+ {formatNumber( + ((tblAvarage ?? 0) as number).toFixed?.(1) ?? 0 + )} +
+
+
+
+
+ + {/*
@@ -1029,13 +1072,7 @@ export function GreenInnovationPage() { {formatNumber(stats?.totalProjects || actualTotalCount)}
- {/* Project number column - empty */} -
- {/* Title column - empty */} -
- {/* Project status column - empty */} -
- {/* Project rating column - show average */} +
{" "} @@ -1049,10 +1086,8 @@ export function GreenInnovationPage() { )}
- - {/* Details column - show total count */}
-
+ */}