{"id":38,"date":"2026-04-01T14:19:51","date_gmt":"2026-04-01T06:19:51","guid":{"rendered":"http:\/\/121.41.175.173\/?page_id=38"},"modified":"2026-04-01T20:31:51","modified_gmt":"2026-04-01T12:31:51","slug":"%e6%99%ba%e6%85%a7%e5%8c%96%e7%a2%b3%e6%a0%b8%e7%ae%97%e5%b9%b3%e5%8f%b0","status":"publish","type":"page","link":"http:\/\/121.41.175.173\/index.php\/%e6%99%ba%e6%85%a7%e5%8c%96%e7%a2%b3%e6%a0%b8%e7%ae%97%e5%b9%b3%e5%8f%b0\/","title":{"rendered":"\u667a\u6167\u5316\u78b3\u6838\u7b97\u5e73\u53f0"},"content":{"rendered":"\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"http:\/\/121.41.175.173\/index.php\/%e6%96%b9%e6%b3%95%e5%ad%a6\/\">\u65b9\u6cd5\u8bba<\/a><\/div>\n<\/div>\n\n\n\n<div class=\"carbon-calculator-wrapper\">\n    <div class=\"dashboard-grid\">\n        <!-- \u5de6\u4fa7\u4e3b\u9762\u677f -->\n        <div class=\"main-panel\">\n            <div class=\"card\">\n                <div class=\"card-title\">\ud83c\udfed \u6c34\u5382\u7c7b\u578b\u4e0e\u6838\u7b97\u8fb9\u754c<\/div>\n                <div class=\"flow-chart\">\n                    <div class=\"flow-node\">\u786c\u4ef6\u5236\u9020<\/div><span>\u2192<\/span>\n                    <div class=\"flow-node\">\u6a21\u578b\u8bad\u7ec3<\/div><span>\u2192<\/span>\n                    <div class=\"flow-node\">\u6a21\u578b\u63a8\u7406<\/div><span>\u2192<\/span>\n                    <div class=\"flow-node\">\u6c34\u5382\u4f18\u5316<\/div><span>\u2192<\/span>\n                    <div class=\"flow-node\">\u51c0\u51cf\u6392<\/div>\n                <\/div>\n                <div class=\"plant-type-selector\">\n                    <div class=\"plant-type-card water-supply active\" onclick=\"selectPlantType('water-supply')\">\n                        <div class=\"plant-icon\">\ud83d\udca7<\/div>\n                        <div class=\"plant-name\">\u4f9b\u6c34\u5382<\/div>\n                    <\/div>\n                    <div class=\"plant-type-card wastewater\" onclick=\"selectPlantType('wastewater')\">\n                        <div class=\"plant-icon\">\ud83c\udf0a<\/div>\n                        <div class=\"plant-name\">\u6c61\u6c34\u5904\u7406\u5382<\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"section-title\">\u2699\ufe0f \u57fa\u7840\u53c2\u6570<\/div>\n                <div class=\"input-grid\">\n                    <div class=\"input-group\"><label>\u5904\u7406\u89c4\u6a21 (m\u00b3\/\u65e5)<\/label><input type=\"number\" id=\"totalCapacity\" value=\"10000\"><\/div>\n                    <div class=\"input-group\"><label>\u5e74\u8fd0\u884c\u5929\u6570<\/label><input type=\"number\" id=\"operatingDays\" value=\"365\"><\/div>\n                    <div class=\"input-group\"><label>\u7535\u7f51\u56e0\u5b50 (kgCO\u2082\/kWh)<\/label><select id=\"gridFactor\"><option value=\"0.475\">\u5168\u56fd\u5e73\u5747 0.475<\/option><option value=\"0.33\">\u5357\u65b9\u7535\u7f51 0.33<\/option><option value=\"0.55\">\u5317\u65b9\u7535\u7f51 0.55<\/option><option value=\"0.058\">\u9752\u6d77\/\u53ef\u518d\u751f 0.058<\/option><option value=\"custom\">\u81ea\u5b9a\u4e49<\/option><\/select><\/div>\n                    <div class=\"input-group\"><label>\u81ea\u5b9a\u4e49\u56e0\u5b50<\/label><input type=\"number\" id=\"customGridFactor\" value=\"0.475\" disabled><\/div>\n                <\/div>\n\n                <div class=\"section-title\">\ud83e\udd16 AI\u90e8\u7f72\u914d\u7f6e\uff08\u5168\u5382\u5171\u4eab\uff09<\/div>\n                <div class=\"deploy-grid\">\n                    <div class=\"input-grid\">\n                        <div class=\"input-group\"><label>GPU\u7c7b\u578b<\/label><select id=\"ai_gpuType\"><option value=\"4090\">RTX 4090<\/option><option value=\"3090\">RTX 3090<\/option><option value=\"a100\">A100<\/option><option value=\"h100\">H100<\/option><\/select><\/div>\n                        <div class=\"input-group\"><label>GPU\u6570\u91cf<\/label><input type=\"number\" id=\"ai_gpuCount\" value=\"1\"><\/div>\n                        <div class=\"input-group\"><label>\u6570\u636e\u4e2d\u5fc3PUE<\/label><input type=\"number\" id=\"ai_pue\" value=\"1.2\" step=\"0.1\"><\/div>\n                    <\/div>\n                    <details style=\"margin-top: 12px;\">\n                        <summary style=\"cursor:pointer; color:#764ba2;\">\ud83d\udcca \u9ad8\u7ea7\u53c2\u6570\uff08\u6c34\u5382\u6a21\u578b\u63a8\u8350\u503c\uff09<\/summary>\n                        <div class=\"input-grid\" style=\"margin-top: 12px;\">\n                            <div class=\"input-group\"><label>\u6a21\u578b\u53c2\u6570\u91cf (\u4ebf)<\/label><input type=\"number\" id=\"ai_modelParams\" value=\"0.5\" step=\"0.1\"><\/div>\n                            <div class=\"input-group\"><label>\u8bad\u7ec3Token\u6570 (\u4ebf)<\/label><input type=\"number\" id=\"ai_trainTokens\" value=\"10\"><\/div>\n                            <div class=\"input-group\"><label>\u5e74\u63a8\u7406Token\u6570 (\u4ebf)<\/label><input type=\"number\" id=\"ai_infTokens\" value=\"30\"><\/div>\n                            <div class=\"input-group\"><label>GPU\u5229\u7528\u7387<\/label><input type=\"number\" id=\"ai_eff\" value=\"0.4\" step=\"0.05\"><\/div>\n                            <div class=\"input-group\"><label>\u786c\u4ef6\u5bff\u547d(\u5e74)<\/label><input type=\"number\" id=\"ai_lifetime\" value=\"5\"><\/div>\n                        <\/div>\n                    <\/details>\n                    <div class=\"result-box\" style=\"background:#f1f5f9; border-radius:20px; padding:12px; margin-top:16px;\">\n                        <div>\ud83c\udfaf \u8bad\u7ec3\u4e00\u6b21\u6027\u78b3\u6392\u653e: <span id=\"ai_trainOnce\">0<\/span> kg<\/div>\n                        <div>\ud83d\udcc5 \u8bad\u7ec3\u5e74\u5206\u644a: <span id=\"ai_trainAnnual\">0<\/span> kg\/\u5e74<\/div>\n                        <div>\u26a1 \u63a8\u7406\u5e74\u78b3\u6392\u653e: <span id=\"ai_inferenceAnnual\">0<\/span> kg\/\u5e74<\/div>\n                        <div>\ud83d\udda5\ufe0f \u786c\u4ef6\u5236\u9020\u5e74\u5206\u644a: <span id=\"ai_hardwareAnnual\">0<\/span> kg\/\u5e74<\/div>\n                        <div><strong>\ud83e\udd16 \u603bAI\u5e74\u78b3\u6392\u653e: <span id=\"ai_totalAnnual\">0<\/span> kg\/\u5e74<\/strong><\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div id=\"waterSupplyZones\" class=\"zones-container\"><\/div>\n            <div id=\"wastewaterZones\" class=\"zones-container hidden\"><\/div>\n        <\/div>\n\n        <!-- \u53f3\u4fa7\u7ed3\u679c\u9762\u677f -->\n        <div class=\"side-panel\">\n            <div class=\"result-card\">\n                <div class=\"total-emission\">\n                    <div>\ud83d\udcca \u5e38\u89c4\u8fd0\u884c\u603b\u6392\u653e<\/div>\n                    <div class=\"emission-value\" id=\"totalConventional\">0<\/div>\n                    <div>\u5428 CO\u2082eq\/\u5e74<\/div>\n                    <div style=\"margin-top: 16px;\">\u2728 \u667a\u6167\u5316\u540e\u603b\u6392\u653e<\/div>\n                    <div class=\"emission-value\" id=\"totalSmart\" style=\"color:#4caf50;\">0<\/div>\n                    <div>\u5428 CO\u2082eq\/\u5e74<\/div>\n                <\/div>\n                <div class=\"zone-breakdown\" id=\"zoneBreakdown\"><\/div>\n                <div class=\"smart-benefit\">\n                    <div>\ud83c\udf31 \u51c0\u51cf\u6392\u6548\u76ca<\/div>\n                    <div class=\"benefit-value\" id=\"totalSaving\">0 \u5428<\/div>\n                    <div>\u8fd0\u884c\u51cf\u6392\u91cf: <span id=\"operationalSaving\">0<\/span> \u5428 CO\u2082\/\u5e74<\/div>\n                    <div>\u90e8\u7f72\u78b3\u6210\u672c(\u5e74\u5206\u644a): <span id=\"deployCost\">0<\/span> \u5428 CO\u2082\/\u5e74<\/div>\n                    <details><summary>AI\u78b3\u6392\u653e\u660e\u7ec6<\/summary><div id=\"aiDetails\"><\/div><\/details>\n                <\/div>\n                <div style=\"display: flex; gap: 12px; margin-top: 20px;\">\n                    <button class=\"btn btn-primary\" onclick=\"calculateAll()\">\ud83d\udd04 \u6838\u7b97\u5168\u5382<\/button>\n                    <button class=\"btn\" onclick=\"generateReport()\">\ud83d\udcc4 \u751f\u6210\u62a5\u544a<\/button>\n                <\/div>\n                <div id=\"calcDetail\" style=\"margin-top: 20px; font-size: 0.75rem; color: #475569; display: none;\"><\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n    \/* \u78b3\u6838\u7b97\u5de5\u5177\u4e13\u7528\u6837\u5f0f\uff0c\u907f\u514d\u4e0e\u4e3b\u9898\u51b2\u7a81 *\/\n    .carbon-calculator-wrapper {\n        width: 100%;\n        max-width: 100%;\n        margin: 0;\n        padding: 0;\n        background: #f0f4f8;\n        box-sizing: border-box;\n    }\n    .carbon-calculator-wrapper * {\n        box-sizing: border-box;\n    }\n    .dashboard-grid {\n        display: grid;\n        grid-template-columns: 1fr 420px;\n        gap: 24px;\n        align-items: start;\n        padding: 20px 16px;\n    }\n    @media (max-width: 1100px) {\n        .dashboard-grid { grid-template-columns: 1fr; gap: 20px; }\n    }\n    .card, .result-card {\n        background: white;\n        border-radius: 28px;\n        padding: 24px;\n        box-shadow: 0 8px 24px rgba(0,0,0,0.05);\n    }\n    .card-title {\n        font-size: 1.35rem;\n        font-weight: 700;\n        color: #0f2b2d;\n        margin-bottom: 20px;\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        border-left: 5px solid #1a5f4a;\n        padding-left: 16px;\n    }\n    .plant-type-selector {\n        display: flex;\n        gap: 20px;\n        margin-bottom: 30px;\n        flex-wrap: wrap;\n    }\n    .plant-type-card {\n        flex: 1;\n        padding: 20px;\n        border: 2px solid #e2e8f0;\n        border-radius: 24px;\n        cursor: pointer;\n        text-align: center;\n        transition: all 0.2s;\n        background: white;\n    }\n    .plant-type-card.active {\n        border-color: #1a5f4a;\n        background: linear-gradient(145deg, #e6f4ea, #ffffff);\n        box-shadow: 0 6px 14px rgba(26,95,74,0.15);\n    }\n    .plant-icon { font-size: 2.8rem; }\n    .plant-name { font-weight: 700; font-size: 1.2rem; margin: 8px 0 4px; }\n    .zones-container { display: flex; flex-direction: column; gap: 20px; }\n    .zone-card {\n        border-radius: 24px;\n        padding: 18px;\n        border: 1px solid #eef2f6;\n        background: white;\n    }\n    .zone-header {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        cursor: pointer;\n        margin-bottom: 12px;\n    }\n    .zone-title { font-weight: 700; font-size: 1.1rem; display: flex; align-items: center; gap: 10px; }\n    .zone-toggle {\n        background: #f1f5f9;\n        border: none;\n        width: 32px;\n        height: 32px;\n        border-radius: 50%;\n        cursor: pointer;\n        font-weight: bold;\n    }\n    .zone-content { display: none; }\n    .zone-content.expanded { display: block; }\n    .input-grid {\n        display: grid;\n        grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n        gap: 16px;\n        margin: 16px 0;\n    }\n    .input-group {\n        display: flex;\n        flex-direction: column;\n        gap: 6px;\n    }\n    .input-group label { font-size: 0.85rem; font-weight: 600; color: #334155; }\n    .input-group input, .input-group select {\n        padding: 10px 12px;\n        border: 1.5px solid #cbd5e1;\n        border-radius: 16px;\n        font-size: 0.9rem;\n        background: white;\n    }\n    .result-card {\n        position: sticky;\n        top: 20px;\n    }\n    .total-emission {\n        text-align: center;\n        padding-bottom: 20px;\n        border-bottom: 2px solid #eef2f6;\n    }\n    .emission-value { font-size: 2.5rem; font-weight: 800; color: #1a5f4a; }\n    .smart-benefit {\n        background: #ecfdf5;\n        border-radius: 20px;\n        padding: 16px;\n        margin-top: 20px;\n    }\n    .benefit-value { font-size: 1.8rem; font-weight: 800; color: #4caf50; }\n    .btn {\n        padding: 12px 18px;\n        border: none;\n        border-radius: 40px;\n        font-weight: 600;\n        cursor: pointer;\n        background: #eef2ff;\n        transition: all 0.2s;\n    }\n    .btn-primary { background: #1a5f4a; color: white; }\n    .hidden { display: none; }\n    .section-title {\n        font-size: 1.2rem;\n        font-weight: 700;\n        margin: 24px 0 16px;\n        padding-left: 12px;\n        border-left: 4px solid #764ba2;\n    }\n    .deploy-grid {\n        background: #f8fafc;\n        border-radius: 20px;\n        padding: 18px;\n        margin: 16px 0;\n    }\n    .zone-breakdown {\n        max-height: 280px;\n        overflow-y: auto;\n        margin: 16px 0;\n    }\n    .zone-item {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        padding: 8px 0;\n        font-size: 0.85rem;\n    }\n    .zone-color { width: 12px; height: 12px; border-radius: 20px; }\n    .flow-chart {\n        display: flex;\n        flex-wrap: wrap;\n        justify-content: center;\n        gap: 12px;\n        background: #f1f5f9;\n        padding: 16px;\n        border-radius: 40px;\n        margin-bottom: 24px;\n    }\n    .flow-node {\n        background: white;\n        padding: 8px 16px;\n        border-radius: 40px;\n        font-size: 0.8rem;\n        font-weight: 500;\n    }\n<\/style>\n\n<script>\n    \/\/ \u6392\u653e\u56e0\u5b50\u5e93\n    const emissionFactors = { electricity: 0.475, pac: 2.45, pam: 3.8, ozone: 2.1, n2o_gwp: 265, n2o_factor: 0.016, ch4_gwp: 28 };\n    const gpuDatabase = {\n        '4090': { name: 'RTX 4090', tdp: 450, flops: 82.6, cpa: 80, area: 609 },\n        '3090': { name: 'RTX 3090', tdp: 350, flops: 35.6, cpa: 70, area: 628 },\n        'a100': { name: 'A100', tdp: 400, flops: 19.5, cpa: 150, area: 826 },\n        'h100': { name: 'H100', tdp: 700, flops: 51.0, cpa: 180, area: 814 }\n    };\n    let currentPlantType = 'water-supply';\n    let zoneResults = {};\n\n    \/\/ \u8f85\u52a9\u51fd\u6570\n    function getGridFactor() {\n        let s = document.getElementById('gridFactor');\n        if (s.value === 'custom') return parseFloat(document.getElementById('customGridFactor').value) || 0.475;\n        return parseFloat(s.value);\n    }\n\n    function calculateAICarbon() {\n        let gpuType = document.getElementById('ai_gpuType').value;\n        let gpuCount = parseFloat(document.getElementById('ai_gpuCount').value) || 1;\n        let pue = parseFloat(document.getElementById('ai_pue').value) || 1.2;\n        let P = parseFloat(document.getElementById('ai_modelParams').value) * 1e8;\n        let D_train = parseFloat(document.getElementById('ai_trainTokens').value) * 1e8;\n        let D_inf = parseFloat(document.getElementById('ai_infTokens').value) * 1e8;\n        let eff = parseFloat(document.getElementById('ai_eff').value) || 0.4;\n        let lifetime = parseFloat(document.getElementById('ai_lifetime').value) || 5;\n        let gpu = gpuDatabase[gpuType] || gpuDatabase['4090'];\n        let C_train = 6 * P * D_train;\n        let C_inf = 2 * P * D_inf;\n        let trainTime = C_train \/ (gpuCount * gpu.flops * 1e12 * eff);\n        let infTime = C_inf \/ (gpuCount * gpu.flops * 1e12 * eff);\n        let trainEnergy = gpuCount * trainTime * (gpu.tdp \/ 1000) * pue;\n        let infEnergy = gpuCount * infTime * (gpu.tdp \/ 1000) * pue;\n        let gridFactor = getGridFactor();\n        let trainEmissionOnce = trainEnergy * gridFactor;\n        let infEmissionAnnual = infEnergy * gridFactor;\n        let totalHardwareEmission = gpuCount * gpu.area * gpu.cpa;\n        let hardwareAnnual = totalHardwareEmission \/ lifetime;\n        let trainAnnual = trainEmissionOnce \/ lifetime;\n        let totalAI = trainAnnual + infEmissionAnnual + hardwareAnnual;\n        document.getElementById('ai_trainOnce').innerText = trainEmissionOnce.toFixed(1);\n        document.getElementById('ai_trainAnnual').innerText = trainAnnual.toFixed(1);\n        document.getElementById('ai_inferenceAnnual').innerText = infEmissionAnnual.toFixed(1);\n        document.getElementById('ai_hardwareAnnual').innerText = hardwareAnnual.toFixed(1);\n        document.getElementById('ai_totalAnnual').innerText = totalAI.toFixed(1);\n        return { total: totalAI, trainAnnual, inferenceAnnual: infEmissionAnnual, hardwareAnnual };\n    }\n\n    \/\/ \u4f9b\u6c34\u5382\u533a\u57dfUI\u521d\u59cb\u5316\n    function initWaterZones() {\n        const container = document.getElementById('waterSupplyZones');\n        container.innerHTML = `\n            ${makeZone('water',1,'\u2697\ufe0f','\u5e38\u89c4\u5904\u7406\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u7535\u8017(kWh\/m\u00b3)<\/label><input id=\"w_conv_e\" value=\"0.25\"><\/div><div class=\"input-group\"><label>PAC(g\/m\u00b3)<\/label><input id=\"w_conv_pac\" value=\"30\"><\/div><div class=\"input-group\"><label>\u6d88\u6bd2\u5242(g\/m\u00b3)<\/label><input id=\"w_conv_cl\" value=\"5\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u7535\u8017<\/label><input id=\"w_smart_e\" value=\"0.20\"><\/div><div class=\"input-group\"><label>\u667a\u6167PAC<\/label><input id=\"w_smart_pac\" value=\"20\"><\/div><div class=\"input-group\"><label>\u667a\u6167\u6d88\u6bd2<\/label><input id=\"w_smart_cl\" value=\"5\"><\/div><\/div>`)}\n            ${makeZone('water',2,'\ud83d\udd2c','\u6df1\u5ea6\u5904\u7406\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u81ed\u6c27\u7535\u8017<\/label><input id=\"w_depth_e1\" value=\"0.15\"><\/div><div class=\"input-group\"><label>\u819c\u7535\u8017<\/label><input id=\"w_depth_e2\" value=\"0.10\"><\/div><div class=\"input-group\"><label>\u81ed\u6c27\u6295\u52a0(g\/m\u00b3)<\/label><input id=\"w_depth_ozone\" value=\"2\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u81ed\u6c27\u7535\u8017<\/label><input id=\"w_smart_depth_e\" value=\"0.12\"><\/div><div class=\"input-group\"><label>\u667a\u6167\u819c\u7535\u8017<\/label><input id=\"w_smart_mem_e\" value=\"0.08\"><\/div><div class=\"input-group\"><label>\u667a\u6167\u81ed\u6c27\u6295\u52a0<\/label><input id=\"w_smart_ozone\" value=\"1.2\"><\/div><\/div>`)}\n            ${makeZone('water',3,'\ud83d\udeb0','\u8f93\u914d\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u9001\u6c34\u6cf5\u7535\u8017<\/label><input id=\"w_trans_pump\" value=\"0.15\"><\/div><div class=\"input-group\"><label>\u4e8c\u6b21\u52a0\u538b\u7535\u8017<\/label><input id=\"w_trans_boost\" value=\"0.05\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u6cf5\u7535\u8017<\/label><input id=\"w_smart_pump\" value=\"0.12\"><\/div><div class=\"input-group\"><label>\u667a\u6167\u52a0\u538b\u7535\u8017<\/label><input id=\"w_smart_boost\" value=\"0.04\"><\/div><\/div>`)}\n            ${makeZone('water',4,'\ud83c\udfe2','\u884c\u653f\u751f\u6d3b\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u5efa\u7b51\u5e74\u7535\u8017(kWh)<\/label><input id=\"w_admin_e\" value=\"50000\"><\/div><div class=\"input-group\"><label>\u67f4\u6cb9(L\/\u5e74)<\/label><input id=\"w_admin_fuel\" value=\"5000\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u5efa\u7b51\u7535\u8017<\/label><input id=\"w_smart_admin_e\" value=\"40000\"><\/div><div class=\"input-group\"><label>\u65b0\u80fd\u6e90\u66ff\u4ee3\u7387(%)<\/label><input id=\"w_smart_fuel_replace\" value=\"50\"><\/div><\/div>`)}\n        `;\n    }\n\n    \/\/ \u6c61\u6c34\u5904\u7406\u5382\u533a\u57dfUI\uff086\u533a\uff09\n    function initWasteZones() {\n        const container = document.getElementById('wastewaterZones');\n        container.innerHTML = `\n            ${makeZone('waste',1,'\ud83d\uddd1\ufe0f','\u9884\u5904\u7406\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u7535\u8017(kWh\/m\u00b3)<\/label><input id=\"ww_pre_e\" value=\"0.05\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u7535\u8017<\/label><input id=\"ww_smart_pre_e\" value=\"0.04\"><\/div><\/div>`)}\n            ${makeZone('waste',2,'\ud83e\udda0','\u6df1\u5ea6\u5904\u7406\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u7535\u8017(kWh\/m\u00b3)<\/label><input id=\"ww_depth_e\" value=\"0.30\"><\/div><div class=\"input-group\"><label>\u8fdb\u6c34TN(mg\/L)<\/label><input id=\"ww_tn_in\" value=\"35\"><\/div><div class=\"input-group\"><label>\u51fa\u6c34TN(mg\/L)<\/label><input id=\"ww_tn_out\" value=\"10\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u7535\u8017<\/label><input id=\"ww_smart_depth_e\" value=\"0.25\"><\/div><div class=\"input-group\"><label>\u8fdb\u6c34TN<\/label><input id=\"ww_smart_tn_in\" value=\"35\"><\/div><div class=\"input-group\"><label>\u667a\u6167\u51fa\u6c34TN<\/label><input id=\"ww_smart_tn_out\" value=\"5\"><\/div><\/div>`)}\n            ${makeZone('waste',3,'\ud83d\udfe4','\u6c61\u6ce5\u5904\u7406\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u7535\u8017(kWh\/m\u00b3)<\/label><input id=\"ww_sludge_e\" value=\"0.10\"><\/div><div class=\"input-group\"><label>\u6c61\u6ce5\u5904\u7f6e\u65b9\u5f0f<\/label><select id=\"ww_sludge_disp\"><option value=\"landfill\">\u586b\u57cb<\/option><option value=\"incineration\">\u711a\u70e7<\/option><\/select><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u7535\u8017<\/label><input id=\"ww_smart_sludge_e\" value=\"0.08\"><\/div><div class=\"input-group\"><label>\u80fd\u6e90\u56de\u6536\u7387(%)<\/label><input id=\"ww_energy_recovery\" value=\"30\"><\/div><\/div>`)}\n            ${makeZone('waste',4,'\u26a1','\u8f85\u52a9\u751f\u4ea7\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u7535\u8017(kWh\/m\u00b3)<\/label><input id=\"ww_aux_e\" value=\"0.05\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u7535\u8017<\/label><input id=\"ww_smart_aux_e\" value=\"0.04\"><\/div><\/div>`)}\n            ${makeZone('waste',5,'\ud83c\udfe2','\u884c\u653f\u751f\u6d3b\u533a',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u5efa\u7b51\u5e74\u7535\u8017(kWh)<\/label><input id=\"ww_admin_e\" value=\"30000\"><\/div><div class=\"input-group\"><label>\u67f4\u6cb9(L\/\u5e74)<\/label><input id=\"ww_admin_fuel\" value=\"3000\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u5efa\u7b51\u7535\u8017<\/label><input id=\"ww_smart_admin_e\" value=\"25000\"><\/div><div class=\"input-group\"><label>\u65b0\u80fd\u6e90\u66ff\u4ee3\u7387(%)<\/label><input id=\"ww_smart_fuel_replace\" value=\"50\"><\/div><\/div>`)}\n            ${makeZone('waste',6,'\ud83c\udf33','\u5382\u524d\u533a\u4e0e\u5916\u56f4',\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u7535\u8017(kWh\/m\u00b3)<\/label><input id=\"ww_peri_e\" value=\"0.02\"><\/div><\/div>`,\n                `<div class=\"input-grid\"><div class=\"input-group\"><label>\u667a\u6167\u7535\u8017<\/label><input id=\"ww_smart_peri_e\" value=\"0.015\"><\/div><\/div>`)}\n        `;\n    }\n\n    function makeZone(type, idx, icon, title, convHtml, smartHtml) {\n        return `<div class=\"zone-card ${type}-zone-${idx}\">\n            <div class=\"zone-header\" onclick=\"toggleZone(this)\">\n                <div class=\"zone-title\">${icon} ${title}<\/div>\n                <button class=\"zone-toggle\">\u25bc<\/button>\n            <\/div>\n            <div class=\"zone-content expanded\">\n                <div class=\"scenario-tabs\" style=\"display:flex; gap:8px; margin-bottom:12px;\">\n                    <button class=\"scenario-tab active\" onclick=\"switchScenario(this,'${type}_${idx}_conv')\">\u5e38\u89c4\u8fd0\u884c<\/button>\n                    <button class=\"scenario-tab\" onclick=\"switchScenario(this,'${type}_${idx}_smart')\">\u667a\u6167\u5316<\/button>\n                <\/div>\n                <div id=\"${type}_${idx}_conv\" class=\"zone-input-panel\">${convHtml}<\/div>\n                <div id=\"${type}_${idx}_smart\" class=\"zone-input-panel hidden\">${smartHtml}<\/div>\n            <\/div>\n        <\/div>`;\n    }\n\n    window.toggleZone = (header) => {\n        const content = header.nextElementSibling;\n        content.classList.toggle('expanded');\n        header.querySelector('.zone-toggle').innerText = content.classList.contains('expanded') ? '\u25bc' : '\u25b2';\n    };\n    window.switchScenario = (btn, targetId) => {\n        const parent = btn.closest('.zone-content');\n        parent.querySelectorAll('.scenario-tab').forEach(t => t.classList.remove('active'));\n        btn.classList.add('active');\n        parent.querySelectorAll('.zone-input-panel').forEach(p => p.classList.add('hidden'));\n        document.getElementById(targetId).classList.remove('hidden');\n    };\n\n    function selectPlantType(type) {\n        currentPlantType = type;\n        document.querySelectorAll('.plant-type-card').forEach(c => c.classList.remove('active'));\n        document.querySelector(`.plant-type-card.${type}`).classList.add('active');\n        document.getElementById('waterSupplyZones').classList.toggle('hidden', type !== 'water-supply');\n        document.getElementById('wastewaterZones').classList.toggle('hidden', type !== 'wastewater');\n        calculateAll();\n    }\n\n    \/\/ \u4f9b\u6c34\u5382\u6838\u7b97\n    function calculateWaterSupply(cap, days, gf, aiTotal) {\n        let totalConventional = 0, totalSmartRun = 0;\n        let zones = {};\n\n        \/\/ \u5e38\u89c4\u5904\u7406\u533a\n        let conv_e = parseFloat(document.getElementById('w_conv_e')?.value || 0.25);\n        let conv_pac = parseFloat(document.getElementById('w_conv_pac')?.value || 30);\n        let conv_cl = parseFloat(document.getElementById('w_conv_cl')?.value || 5);\n        let conv_em = conv_e * cap * days * gf + (conv_pac\/1000)*cap*days*emissionFactors.pac + (conv_cl\/1000)*cap*days*emissionFactors.ozone;\n        totalConventional += conv_em;\n        let smart_e = parseFloat(document.getElementById('w_smart_e')?.value || 0.2);\n        let smart_pac = parseFloat(document.getElementById('w_smart_pac')?.value || 20);\n        let smart_cl = parseFloat(document.getElementById('w_smart_cl')?.value || 5);\n        let smart_em = smart_e * cap * days * gf + (smart_pac\/1000)*cap*days*emissionFactors.pac + (smart_cl\/1000)*cap*days*emissionFactors.ozone;\n        totalSmartRun += smart_em;\n        zones['\u5e38\u89c4\u5904\u7406\u533a'] = { conventional: conv_em, smartRun: smart_em };\n\n        \/\/ \u6df1\u5ea6\u5904\u7406\u533a\n        let depth_e1 = parseFloat(document.getElementById('w_depth_e1')?.value || 0.15);\n        let depth_e2 = parseFloat(document.getElementById('w_depth_e2')?.value || 0.10);\n        let depth_oz = parseFloat(document.getElementById('w_depth_ozone')?.value || 2);\n        let depth_em = (depth_e1 + depth_e2) * cap * days * gf + (depth_oz\/1000)*cap*days*emissionFactors.ozone;\n        totalConventional += depth_em;\n        let smart_depth_e = parseFloat(document.getElementById('w_smart_depth_e')?.value || 0.12);\n        let smart_mem_e = parseFloat(document.getElementById('w_smart_mem_e')?.value || 0.08);\n        let smart_oz = parseFloat(document.getElementById('w_smart_ozone')?.value || 1.2);\n        let smart_depth_em = (smart_depth_e + smart_mem_e) * cap * days * gf + (smart_oz\/1000)*cap*days*emissionFactors.ozone;\n        totalSmartRun += smart_depth_em;\n        zones['\u6df1\u5ea6\u5904\u7406\u533a'] = { conventional: depth_em, smartRun: smart_depth_em };\n\n        \/\/ \u8f93\u914d\u533a\n        let trans_pump = parseFloat(document.getElementById('w_trans_pump')?.value || 0.15);\n        let trans_boost = parseFloat(document.getElementById('w_trans_boost')?.value || 0.05);\n        let trans_em = (trans_pump + trans_boost) * cap * days * gf;\n        totalConventional += trans_em;\n        let smart_pump = parseFloat(document.getElementById('w_smart_pump')?.value || 0.12);\n        let smart_boost = parseFloat(document.getElementById('w_smart_boost')?.value || 0.04);\n        let smart_trans_em = (smart_pump + smart_boost) * cap * days * gf;\n        totalSmartRun += smart_trans_em;\n        zones['\u8f93\u914d\u533a'] = { conventional: trans_em, smartRun: smart_trans_em };\n\n        \/\/ \u884c\u653f\u751f\u6d3b\u533a\n        let admin_e = parseFloat(document.getElementById('w_admin_e')?.value || 50000);\n        let admin_fuel = parseFloat(document.getElementById('w_admin_fuel')?.value || 5000);\n        let admin_em = admin_e * gf + admin_fuel * 2.68;\n        totalConventional += admin_em;\n        let smart_admin_e = parseFloat(document.getElementById('w_smart_admin_e')?.value || 40000);\n        let fuel_replace = parseFloat(document.getElementById('w_smart_fuel_replace')?.value || 50) \/ 100;\n        let smart_admin_em = smart_admin_e * gf + (admin_fuel * (1 - fuel_replace)) * 2.68;\n        totalSmartRun += smart_admin_em;\n        zones['\u884c\u653f\u751f\u6d3b\u533a'] = { conventional: admin_em, smartRun: smart_admin_em };\n\n        return { totalConventional, totalSmartRun, zones };\n    }\n\n    \/\/ \u6c61\u6c34\u5904\u7406\u5382\u6838\u7b97\n    function calculateWastewater(cap, days, gf, aiTotal) {\n        let totalConventional = 0, totalSmartRun = 0;\n        let zones = {};\n\n        \/\/ \u9884\u5904\u7406\u533a\n        let pre_e = parseFloat(document.getElementById('ww_pre_e')?.value || 0.05);\n        let pre_em = pre_e * cap * days * gf;\n        totalConventional += pre_em;\n        let smart_pre_e = parseFloat(document.getElementById('ww_smart_pre_e')?.value || 0.04);\n        let smart_pre_em = smart_pre_e * cap * days * gf;\n        totalSmartRun += smart_pre_em;\n        zones['\u9884\u5904\u7406\u533a'] = { conventional: pre_em, smartRun: smart_pre_em };\n\n        \/\/ \u6df1\u5ea6\u5904\u7406\u533a\uff08\u542bTN\u53bb\u9664N2O\uff09\n        let depth_e = parseFloat(document.getElementById('ww_depth_e')?.value || 0.30);\n        let tn_in = parseFloat(document.getElementById('ww_tn_in')?.value || 35);\n        let tn_out = parseFloat(document.getElementById('ww_tn_out')?.value || 10);\n        let tn_removed = (tn_in - tn_out) \/ 1000; \/\/ kg\/m\u00b3\n        let n2o_em = tn_removed * cap * days * emissionFactors.n2o_factor * emissionFactors.n2o_gwp;\n        let depth_em = depth_e * cap * days * gf + n2o_em;\n        totalConventional += depth_em;\n\n        let smart_depth_e = parseFloat(document.getElementById('ww_smart_depth_e')?.value || 0.25);\n        let smart_tn_out = parseFloat(document.getElementById('ww_smart_tn_out')?.value || 5);\n        let smart_tn_removed = (tn_in - smart_tn_out) \/ 1000;\n        let smart_n2o_em = smart_tn_removed * cap * days * emissionFactors.n2o_factor * emissionFactors.n2o_gwp;\n        let smart_depth_em = smart_depth_e * cap * days * gf + smart_n2o_em;\n        totalSmartRun += smart_depth_em;\n        zones['\u6df1\u5ea6\u5904\u7406\u533a'] = { conventional: depth_em, smartRun: smart_depth_em };\n\n        \/\/ \u6c61\u6ce5\u5904\u7406\u533a\n        let sludge_e = parseFloat(document.getElementById('ww_sludge_e')?.value || 0.10);\n        let sludge_em = sludge_e * cap * days * gf;\n        totalConventional += sludge_em;\n        let smart_sludge_e = parseFloat(document.getElementById('ww_smart_sludge_e')?.value || 0.08);\n        let energy_recovery = parseFloat(document.getElementById('ww_energy_recovery')?.value || 30) \/ 100;\n        let smart_sludge_em = smart_sludge_e * cap * days * gf * (1 - energy_recovery);\n        totalSmartRun += smart_sludge_em;\n        zones['\u6c61\u6ce5\u5904\u7406\u533a'] = { conventional: sludge_em, smartRun: smart_sludge_em };\n\n        \/\/ \u8f85\u52a9\u751f\u4ea7\u533a\n        let aux_e = parseFloat(document.getElementById('ww_aux_e')?.value || 0.05);\n        let aux_em = aux_e * cap * days * gf;\n        totalConventional += aux_em;\n        let smart_aux_e = parseFloat(document.getElementById('ww_smart_aux_e')?.value || 0.04);\n        let smart_aux_em = smart_aux_e * cap * days * gf;\n        totalSmartRun += smart_aux_em;\n        zones['\u8f85\u52a9\u751f\u4ea7\u533a'] = { conventional: aux_em, smartRun: smart_aux_em };\n\n        \/\/ \u884c\u653f\u751f\u6d3b\u533a\n        let admin_e = parseFloat(document.getElementById('ww_admin_e')?.value || 30000);\n        let admin_fuel = parseFloat(document.getElementById('ww_admin_fuel')?.value || 3000);\n        let admin_em = admin_e * gf + admin_fuel * 2.68;\n        totalConventional += admin_em;\n        let smart_admin_e = parseFloat(document.getElementById('ww_smart_admin_e')?.value || 25000);\n        let fuel_replace = parseFloat(document.getElementById('ww_smart_fuel_replace')?.value || 50) \/ 100;\n        let smart_admin_em = smart_admin_e * gf + (admin_fuel * (1 - fuel_replace)) * 2.68;\n        totalSmartRun += smart_admin_em;\n        zones['\u884c\u653f\u751f\u6d3b\u533a'] = { conventional: admin_em, smartRun: smart_admin_em };\n\n        \/\/ \u5382\u524d\u533a\u4e0e\u5916\u56f4\n        let peri_e = parseFloat(document.getElementById('ww_peri_e')?.value || 0.02);\n        let peri_em = peri_e * cap * days * gf;\n        totalConventional += peri_em;\n        let smart_peri_e = parseFloat(document.getElementById('ww_smart_peri_e')?.value || 0.015);\n        let smart_peri_em = smart_peri_e * cap * days * gf;\n        totalSmartRun += smart_peri_em;\n        zones['\u5382\u524d\u533a\u4e0e\u5916\u56f4'] = { conventional: peri_em, smartRun: smart_peri_em };\n\n        return { totalConventional, totalSmartRun, zones };\n    }\n\n    function calculateAll() {\n        let cap = parseFloat(document.getElementById('totalCapacity').value) || 10000;\n        let days = parseFloat(document.getElementById('operatingDays').value) || 365;\n        let gf = getGridFactor();\n        let ai = calculateAICarbon();\n        let result;\n        if (currentPlantType === 'water-supply') {\n            result = calculateWaterSupply(cap, days, gf, ai.total);\n        } else {\n            result = calculateWastewater(cap, days, gf, ai.total);\n        }\n\n        let totalConventional = result.totalConventional;\n        let totalSmartRun = result.totalSmartRun;\n        let totalSmart = totalSmartRun + ai.total;\n        let saving = (totalConventional - totalSmart) \/ 1000;\n        let operationalSaving = (totalConventional - totalSmartRun) \/ 1000;\n        let deployCostTon = ai.total \/ 1000;\n\n        document.getElementById('totalConventional').innerText = (totalConventional \/ 1000).toFixed(1);\n        document.getElementById('totalSmart').innerText = (totalSmart \/ 1000).toFixed(1);\n        document.getElementById('totalSaving').innerText = saving.toFixed(1) + ' \u5428';\n        document.getElementById('operationalSaving').innerText = operationalSaving.toFixed(1);\n        document.getElementById('deployCost').innerText = deployCostTon.toFixed(3);\n        document.getElementById('aiDetails').innerHTML = `\u8bad\u7ec3\u5206\u644a: ${ai.trainAnnual.toFixed(1)} kg | \u63a8\u7406: ${ai.inferenceAnnual.toFixed(1)} kg | \u786c\u4ef6: ${ai.hardwareAnnual.toFixed(1)} kg`;\n\n        \/\/ \u6309\u5e38\u89c4\u6392\u653e\u5360\u6bd4\u5206\u644aAI\u6210\u672c\u5230\u5404\u533a\u57df\n        let totalConventionalZones = 0;\n        for (let z in result.zones) totalConventionalZones += result.zones[z].conventional;\n        let zoneSmartTotal = {};\n        for (let z in result.zones) {\n            let ratio = totalConventionalZones > 0 ? result.zones[z].conventional \/ totalConventionalZones : 1 \/ Object.keys(result.zones).length;\n            let zoneAICost = ai.total * ratio;\n            zoneSmartTotal[z] = (result.zones[z].smartRun + zoneAICost) \/ 1000;\n        }\n        let breakdownHtml = '';\n        for (let z in result.zones) {\n            let convTon = result.zones[z].conventional \/ 1000;\n            let smartTon = zoneSmartTotal[z];\n            breakdownHtml += `<div class=\"zone-item\"><div class=\"zone-color\" style=\"background:#1a5f4a\"><\/div>${z}: \u5e38\u89c4 ${convTon.toFixed(1)} t &nbsp;\u2192 \u667a\u6167 ${smartTon.toFixed(1)} t<\/div>`;\n        }\n        document.getElementById('zoneBreakdown').innerHTML = breakdownHtml;\n        document.getElementById('calcDetail').style.display = 'block';\n        document.getElementById('calcDetail').innerHTML = `\u2705 \u8ba1\u7b97\u5b8c\u6210 | \u8fd0\u884c\u51cf\u6392: ${operationalSaving.toFixed(1)}\u5428 | AI\u78b3\u6210\u672c: ${deployCostTon.toFixed(3)}\u5428 | \u51c0\u51cf\u6392: ${saving.toFixed(1)}\u5428`;\n        window.zoneResults = zoneSmartTotal;\n    }\n\n    function generateReport() {\n        calculateAll();\n        alert(\"\u62a5\u544a\u751f\u6210\u529f\u80fd\u53ef\u6269\u5c55\u4e3aPDF\u4e0b\u8f7d\uff0c\u5f53\u524d\u5c55\u793a\u8ba1\u7b97\u7ed3\u679c\u3002\");\n    }\n\n    \/\/ \u9875\u9762\u52a0\u8f7d\u5b8c\u6210\u540e\u521d\u59cb\u5316\n    window.addEventListener('DOMContentLoaded', () => {\n        initWaterZones();\n        initWasteZones();\n        calculateAll();\n    });\n<\/script>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udfed \u6c34\u5382\u7c7b\u578b\u4e0e\u6838\u7b97\u8fb9\u754c \u786c\u4ef6\u5236\u9020 \u2192 \u6a21\u578b\u8bad\u7ec3 \u2192 \u6a21\u578b\u63a8\u7406 \u2192 \u6c34\u5382\u4f18\u5316 \u2192 \u51c0\u51cf\u6392 \ud83d\udca7 \u4f9b\u6c34\u5382 \ud83c\udf0a \u6c61\u6c34\u5904 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-no-title","meta":{"footnotes":""},"class_list":["post-38","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/pages\/38","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/comments?post=38"}],"version-history":[{"count":3,"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/pages\/38\/revisions"}],"predecessor-version":[{"id":64,"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/pages\/38\/revisions\/64"}],"wp:attachment":[{"href":"http:\/\/121.41.175.173\/index.php\/wp-json\/wp\/v2\/media?parent=38"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}