diff --git a/packages/common/business_components/src/ui/chart/DoubleBar.tsx b/packages/common/business_components/src/ui/chart/DoubleBar.tsx
new file mode 100644
index 000000000..5b136690a
--- /dev/null
+++ b/packages/common/business_components/src/ui/chart/DoubleBar.tsx
@@ -0,0 +1,137 @@
+"use client"
+import { Bar, BarChart, CartesianGrid, Legend, XAxis, YAxis } from "recharts";
+import {
+ ChartContainer,
+ ChartTooltip,
+ type ChartConfig
+} from "./lib/chart";
+import type { CSSProperties } from "react";
+
+const customStyles = {
+ legendContainer: {
+ display: "flex",
+ justifyContent: "center",
+ gap: "20px",
+ fontSize: "9px",
+ fontWeight : "bold",
+ marginTop: "10px",
+ } as CSSProperties,
+};
+
+type BarChartProps = {
+ chartConfig: ChartConfig | undefined;
+ chartData: any[] | undefined;
+ chartTitle: string;
+ chartClassName?: string;
+ graphSize?: number;
+ yFieldText?: string;
+ showLegend?: boolean;
+}
+
+// 커스텀 툴팁
+const CustomTooltip = ({
+ active,
+ payload,
+ label
+}: {
+ active?: boolean;
+ payload?: Array<{
+ name: string;
+ value: number;
+ color: string;
+ }>;
+ label?: string;
+}) => {
+ if (active && payload && payload.length) {
+ return (
+
+
{label}
+ {payload.map((item, index) => (
+
+ {/* 색상 박스 추가 (범례 색상과 동일) */}
+
+
{` ${item.name} : ${item.value}`}
+
+ ))}
+
+ );
+ }
+ return null;
+};
+
+// 커스텀 범례 (글씨 크기 키우기 + 스타일 추가)
+const CustomLegend = (props: any) => {
+ const { payload } = props;
+ return (
+
+ {payload.map((entry: unknown, index: number) => (
+
+
+
{(entry as {value: string}).value}
+
+ ))}
+
+ );
+};
+
+export default function DoubleBarChart({chartConfig=undefined, chartData=[], chartTitle='차트', chartClassName='w-full h-full', graphSize=40, yFieldText='', showLegend=false} : BarChartProps) {
+ const colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEEAD", "#D4A5A5"];
+ const getMaxValue = (data: any[], keyPrefix: string) => {
+ return Math.max(...data.map(item =>
+ Object.keys(item)
+ .filter(key => key.includes(keyPrefix))
+ .map(key => item[key])
+ ).flat());
+ };
+ console.log(chartData);
+ const barMaxValue = getMaxValue(chartData, 'barVal');
+ return (
+ <>
+ {chartTitle && chartTitle !== "" && chartTitle !== "undefined" ? (
+
+ {chartTitle}
+
): null}
+
+
+
+
+
+
+ }/>
+ {chartData && chartData.length > 0 && (
+ Object.keys(chartData[0])
+ .filter(key => key !== "label")
+ .map((key, idx) => (
+
+ ))
+ )}
+ {showLegend &&
+
+
+ >
+ )
+}
\ No newline at end of file
diff --git a/packages/common/business_components/src/ui/chart/index.tsx b/packages/common/business_components/src/ui/chart/index.tsx
index 0d17a99b1..4c58549cc 100644
--- a/packages/common/business_components/src/ui/chart/index.tsx
+++ b/packages/common/business_components/src/ui/chart/index.tsx
@@ -5,6 +5,7 @@ import DoughnutChart from './DoughnutChart';
import { type ChartConfig } from './lib/chart';
import LineChart from './LineChart';
import LineBarchart from './LineBarChart';
+import DoubleBarChart from './DoubleBar';
/**차트 FORM */
const CHART_FORM = {
@@ -15,7 +16,9 @@ const CHART_FORM = {
/**도넛 차트 형태*/
DN :'daughnut',
/**LINE,BAR차트 */
- LINEBAR : 'linebar'
+ LINEBAR : 'linebar',
+ /**더블바 차트 형태*/
+ DOUBLEBAR : 'doublebar'
};
/**
@@ -61,6 +64,10 @@ function MainChart(props: MainChartProps) {
return (
);
+ } else if (props.chartForm == CHART_FORM.DOUBLEBAR){
+ return (
+
+ );
}
}