Spaces:
Running
Running
Update index.html
Browse files- index.html +106 -71
index.html
CHANGED
@@ -1476,84 +1476,119 @@
|
|
1476 |
}
|
1477 |
|
1478 |
// ์ปค์คํ
๋น์ฉ ๊ณ์ฐ ํจ์
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
-
// ์๋น์ค ๋น์ฉ ๊ณ์ฐ
|
1487 |
-
selectedComponents.service.forEach(serviceId => {
|
1488 |
-
|
1489 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1490 |
|
1491 |
-
|
1492 |
-
|
1493 |
-
|
1494 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1495 |
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1499 |
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
|
1513 |
-
const
|
1514 |
-
const
|
|
|
|
|
1515 |
|
1516 |
-
|
1517 |
-
|
|
|
|
|
|
|
|
|
|
|
1518 |
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
|
1531 |
-
|
1532 |
-
|
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) {
|