openfree commited on
Commit
36954f4
ยท
verified ยท
1 Parent(s): d6aea1c

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +106 -71
index.html CHANGED
@@ -1476,84 +1476,119 @@
1476
  }
1477
 
1478
  // ์ปค์Šคํ…€ ๋น„์šฉ ๊ณ„์‚ฐ ํ•จ์ˆ˜
1479
- function calculateCustomCost() {
1480
- let totalInitialCost = 0;
1481
- let totalResourceCost = 0;
1482
- let maxTime = 0;
1483
- let componentDetails = [];
1484
-
1485
- // ์„œ๋น„์Šค ๋น„์šฉ ๊ณ„์‚ฐ
1486
- // ์„œ๋น„์Šค ๋น„์šฉ ๊ณ„์‚ฐ ๋ถ€๋ถ„์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •
1487
- selectedComponents.service.forEach(serviceId => {
1488
- const card = document.querySelector(`[data-category="service"][data-id="${serviceId}"]`);
1489
- if (!card) return; // ์นด๋“œ๊ฐ€ ์—†์œผ๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ธฐ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1490
 
1491
- const cost = parseFloat(card.dataset.cost);
1492
- const time = parseFloat(card.dataset.time);
1493
- const resource = parseFloat(card.dataset.resource) || 0;
1494
- const name = card.querySelector('.option-name').textContent;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1495
 
1496
- totalInitialCost += cost;
1497
- totalResourceCost += resource;
1498
- maxTime = Math.max(maxTime, time);
 
 
 
 
 
 
 
 
 
 
 
 
1499
 
1500
- componentDetails.push({
1501
- name: name,
1502
- cost: cost,
1503
- type: 'service'
 
 
 
 
 
 
 
 
 
 
 
 
 
1504
  });
1505
- });
1506
-
1507
- // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋น„์šฉ ๊ณ„์‚ฐ ๋ถ€๋ถ„๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜์ •
1508
- selectedComponents.additional.forEach(additionalId => {
1509
- const card = document.querySelector(`[data-category="additional"][data-id="${additionalId}"]`);
1510
- if (!card) return; // ์นด๋“œ๊ฐ€ ์—†์œผ๋ฉด ๊ฑด๋„ˆ๋›ฐ๊ธฐ
1511
 
1512
- const cost = parseFloat(card.dataset.cost);
1513
- const time = parseFloat(card.dataset.time);
1514
- const name = card.querySelector('.option-name').textContent;
 
 
1515
 
1516
- totalInitialCost += cost;
1517
- maxTime = Math.max(maxTime, time);
 
 
 
 
 
1518
 
1519
- componentDetails.push({
1520
- name: name,
1521
- cost: cost,
1522
- type: 'additional'
1523
- });
1524
- });
1525
-
1526
-
1527
-
1528
- // ์›”๊ฐ„ ์šด์˜ ๋น„์šฉ ๊ณ„์‚ฐ
1529
- const serverCost = totalInitialCost > 100 ? 5 : totalInitialCost > 50 ? 3 : totalInitialCost > 20 ? 2 : 1;
1530
- const resourceCost = totalResourceCost;
1531
- const maintenanceCost = totalInitialCost * 0.05; // ์ดˆ๊ธฐ ๋น„์šฉ์˜ 5%
1532
- const totalMonthlyCost = serverCost + resourceCost + maintenanceCost + monthlySupport;
1533
-
1534
- // ๊ฒฐ๊ณผ ํ‘œ์‹œ
1535
- document.getElementById('initialCost').textContent = `$${totalInitialCost}K`;
1536
- document.getElementById('devTime').textContent = `${maxTime}๊ฐœ์›”`;
1537
- document.getElementById('serverCost').textContent = `$${serverCost}K`;
1538
- document.getElementById('resourceCost').textContent = `$${resourceCost.toFixed(1)}K`;
1539
- document.getElementById('maintenanceCost').textContent = `$${maintenanceCost.toFixed(1)}K`;
1540
- document.getElementById('totalMonthlyCost').textContent = `$${totalMonthlyCost.toFixed(1)}K`;
1541
-
1542
- // ์ด ๋น„์šฉ ๊ณ„์‚ฐ (๊ธฐ๊ฐ„๋ณ„)
1543
- updateTotalCost(totalInitialCost, totalMonthlyCost);
1544
-
1545
- // ์„ ํƒํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๋ชฉ๋ก ํ‘œ์‹œ
1546
- displayComponentList(componentDetails);
1547
-
1548
- // ๊ตฌ์ถ• ๋ฐฉ์‹๋ณ„ ๋น„๊ต
1549
- compareBuilderMethods(totalInitialCost, totalMonthlyCost, maxTime);
1550
-
1551
- // ์ฐจํŠธ ์—…๋ฐ์ดํŠธ
1552
- updateCustomChart(totalInitialCost, totalMonthlyCost);
1553
-
1554
- // ๊ฒฐ๊ณผ ์„น์…˜ ํ‘œ์‹œ
1555
- document.getElementById('customResult').style.display = 'block';
1556
- }
1557
 
1558
  // ์ด ๋น„์šฉ ์—…๋ฐ์ดํŠธ
1559
  function updateTotalCost(initialCost, monthlyCost) {
 
1476
  }
1477
 
1478
  // ์ปค์Šคํ…€ ๋น„์šฉ ๊ณ„์‚ฐ ํ•จ์ˆ˜
1479
+ // ์ปค์Šคํ…€ ๋น„์šฉ ๊ณ„์‚ฐ ํ•จ์ˆ˜
1480
+ function calculateCustomCost() {
1481
+ let totalInitialCost = 0;
1482
+ let totalResourceCost = 0;
1483
+ let maxTime = 0;
1484
+ let componentDetails = [];
1485
+
1486
+ // ์„œ๋น„์Šค ๋น„์šฉ ๊ณ„์‚ฐ
1487
+ selectedComponents.service.forEach(serviceId => {
1488
+ const card = document.querySelector(`[data-category="service"][data-id="${serviceId}"]`);
1489
+ if (!card) return;
1490
+
1491
+ const cost = parseFloat(card.dataset.cost);
1492
+ const time = parseFloat(card.dataset.time);
1493
+ const resource = parseFloat(card.dataset.resource) || 0;
1494
+ const name = card.querySelector('.option-name').textContent;
1495
+
1496
+ totalInitialCost += cost;
1497
+ totalResourceCost += resource;
1498
+ maxTime = Math.max(maxTime, time);
1499
+
1500
+ componentDetails.push({
1501
+ name: name,
1502
+ cost: cost,
1503
+ type: 'service'
1504
+ });
1505
+ });
1506
 
1507
+ // ๊ธฐํƒ€ ๊ตฌ์„ฑ ์š”์†Œ ๋น„์šฉ ๊ณ„์‚ฐ
1508
+ ['db', 'auth', 'credit', 'payment', 'marketing', 'monitoring'].forEach(category => {
1509
+ if (selectedComponents[category]) {
1510
+ const card = document.querySelector(`[data-category="${category}"][data-id="${selectedComponents[category]}"]`);
1511
+ if (!card) return;
1512
+
1513
+ const cost = parseFloat(card.dataset.cost);
1514
+ const time = parseFloat(card.dataset.time);
1515
+ const name = card.querySelector('.option-name').textContent;
1516
+
1517
+ totalInitialCost += cost;
1518
+ maxTime = Math.max(maxTime, time);
1519
+
1520
+ componentDetails.push({
1521
+ name: name,
1522
+ cost: cost,
1523
+ type: category
1524
+ });
1525
+ }
1526
+ });
1527
 
1528
+ // ์ง€์› ์„œ๋น„์Šค (์›”๊ฐ„ ๋น„์šฉ)
1529
+ let monthlySupport = 0;
1530
+ if (selectedComponents.support) {
1531
+ const card = document.querySelector(`[data-category="support"][data-id="${selectedComponents.support]}"]`);
1532
+ if (card) {
1533
+ monthlySupport = parseFloat(card.dataset.cost);
1534
+ const name = card.querySelector('.option-name').textContent;
1535
+
1536
+ componentDetails.push({
1537
+ name: name,
1538
+ cost: monthlySupport,
1539
+ type: 'monthly'
1540
+ });
1541
+ }
1542
+ }
1543
 
1544
+ // ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋น„์šฉ ๊ณ„์‚ฐ
1545
+ selectedComponents.additional.forEach(additionalId => {
1546
+ const card = document.querySelector(`[data-category="additional"][data-id="${additionalId}"]`);
1547
+ if (!card) return;
1548
+
1549
+ const cost = parseFloat(card.dataset.cost);
1550
+ const time = parseFloat(card.dataset.time);
1551
+ const name = card.querySelector('.option-name').textContent;
1552
+
1553
+ totalInitialCost += cost;
1554
+ maxTime = Math.max(maxTime, time);
1555
+
1556
+ componentDetails.push({
1557
+ name: name,
1558
+ cost: cost,
1559
+ type: 'additional'
1560
+ });
1561
  });
 
 
 
 
 
 
1562
 
1563
+ // ์›”๊ฐ„ ์šด์˜ ๋น„์šฉ ๊ณ„์‚ฐ
1564
+ const serverCost = totalInitialCost > 100 ? 5 : totalInitialCost > 50 ? 3 : totalInitialCost > 20 ? 2 : 1;
1565
+ const resourceCost = totalResourceCost;
1566
+ const maintenanceCost = totalInitialCost * 0.05; // ์ดˆ๊ธฐ ๋น„์šฉ์˜ 5%
1567
+ const totalMonthlyCost = serverCost + resourceCost + maintenanceCost + monthlySupport;
1568
 
1569
+ // ๊ฒฐ๊ณผ ํ‘œ์‹œ
1570
+ document.getElementById('initialCost').textContent = `$${totalInitialCost}K`;
1571
+ document.getElementById('devTime').textContent = `${maxTime}๊ฐœ์›”`;
1572
+ document.getElementById('serverCost').textContent = `$${serverCost}K`;
1573
+ document.getElementById('resourceCost').textContent = `$${resourceCost.toFixed(1)}K`;
1574
+ document.getElementById('maintenanceCost').textContent = `$${maintenanceCost.toFixed(1)}K`;
1575
+ document.getElementById('totalMonthlyCost').textContent = `$${totalMonthlyCost.toFixed(1)}K`;
1576
 
1577
+ // ์ด ๋น„์šฉ ๊ณ„์‚ฐ (๊ธฐ๊ฐ„๋ณ„)
1578
+ updateTotalCost(totalInitialCost, totalMonthlyCost);
1579
+
1580
+ // ์„ ํƒํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๋ชฉ๋ก ํ‘œ์‹œ
1581
+ displayComponentList(componentDetails);
1582
+
1583
+ // ๊ตฌ์ถ• ๋ฐฉ์‹๋ณ„ ๋น„๊ต
1584
+ compareBuilderMethods(totalInitialCost, totalMonthlyCost, maxTime);
1585
+
1586
+ // ์ฐจํŠธ ์—…๋ฐ์ดํŠธ
1587
+ updateCustomChart(totalInitialCost, totalMonthlyCost);
1588
+
1589
+ // ๊ฒฐ๊ณผ ์„น์…˜ ํ‘œ์‹œ
1590
+ document.getElementById('customResult').style.display = 'block';
1591
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1592
 
1593
  // ์ด ๋น„์šฉ ์—…๋ฐ์ดํŠธ
1594
  function updateTotalCost(initialCost, monthlyCost) {