-
-
유지보수 만료 예정
-
${permExp}개 만료 예정
+
+
+
+ 유지보수 만료 예정
+ 30일 이내
+
+
+ 전체 ${permTotal}개 제품 중 ${permExp}개 만료 예정
+
+
${permExp}개
-
+
+
+
+
+
${currentYear}년 소프트웨어 도입 비용
+
+
+
법인별 도입 금액 (원)
+
+
+
+
분야별 도입 금액 (원)
+
`;
+ // 차트 생성
+ setTimeout(() => {
+ const ctxCorp = (document.getElementById('chart-cost-corp') as HTMLCanvasElement)?.getContext('2d');
+ const ctxCat = (document.getElementById('chart-cost-cat') as HTMLCanvasElement)?.getContext('2d');
+
+ if (ctxCorp && typeof Chart !== 'undefined') {
+ const chartCorp = new Chart(ctxCorp, {
+ type: 'bar',
+ data: {
+ labels: corps,
+ datasets: [{
+ label: '도입 금액',
+ data: corps.map(c => costByCorp[c]),
+ backgroundColor: '#3b82f6',
+ borderRadius: 4,
+ barThickness: 20 // 막대 두께 줄임
+ }]
+ },
+ options: {
+ responsive: true,
+ maintainAspectRatio: false,
+ plugins: { legend: { display: false } },
+ scales: {
+ y: {
+ beginAtZero: true,
+ ticks: { callback: (v: any) => v.toLocaleString() },
+ grid: { display: false } // 가로줄 삭제
+ },
+ x: {
+ grid: { display: false }
+ }
+ }
+ }
+ });
+ state.activeCharts.push(chartCorp);
+ }
+
+ if (ctxCat && typeof Chart !== 'undefined') {
+ const chartCat = new Chart(ctxCat, {
+ type: 'bar',
+ data: {
+ labels: categories,
+ datasets: [{
+ label: '도입 금액',
+ data: categories.map(c => costByCat[c]),
+ backgroundColor: '#10b981',
+ borderRadius: 4,
+ barThickness: 20 // 막대 두께 줄임
+ }]
+ },
+ options: {
+ responsive: true,
+ maintainAspectRatio: false,
+ plugins: { legend: { display: false } },
+ scales: {
+ y: {
+ beginAtZero: true,
+ ticks: { callback: (v: any) => v.toLocaleString() },
+ grid: { display: false } // 가로줄 삭제
+ },
+ x: {
+ grid: { display: false }
+ }
+ }
+ }
+ });
+ state.activeCharts.push(chartCat);
+ }
+ }, 0);
+
// 클릭 이벤트 바인딩
container.querySelector('[data-action="sub-usage"]')?.addEventListener('click', () => {
openSwUsageDetail('구독 소프트웨어 사용 목록', state.masterData.sw.filter(sw => sw.type === '구독SW'));
@@ -285,3 +409,5 @@ function openSwUsageDetail(title: string, list: SoftwareAsset[]) {
});
modal.classList.remove('hidden');
}
+
+