{"id":648,"date":"2026-01-03T14:36:07","date_gmt":"2026-01-03T06:36:07","guid":{"rendered":"https:\/\/www.allwincpa.com\/?page_id=648"},"modified":"2026-01-03T23:30:07","modified_gmt":"2026-01-03T15:30:07","slug":"%e5%a0%b1%e5%83%b9%e5%96%ae","status":"publish","type":"page","link":"https:\/\/www.allwincpa.com\/?page_id=648","title":{"rendered":"\u5831\u50f9\u55ae"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"zh-TW\">\n<head>\n    <meta charset=\"UTF-8\">\n    <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/html2pdf.js\/0.10.1\/html2pdf.bundle.min.js\"><\/script>\n    <style>\n        body { font-family: \"Microsoft JhengHei\", sans-serif; background: #525659; margin: 0; padding: 20px; display: flex; flex-direction: column; align-items: center; }\n        .admin-panel { width: 800px; background: white; padding: 15px; border-radius: 8px; margin-bottom: 20px; box-shadow: 0 4px 10px rgba(0,0,0,0.3); }\n        \n        #print-area { \n            width: 210mm; height: 297mm; background: white; padding: 12mm 15mm; \n            box-sizing: border-box; position: relative; display: flex; flex-direction: column;\n        }\n\n        \/* \u6a19\u982d\u85cd\u8272\u5340\u584a - \u79fb\u9664\u5716\u6848\uff0c\u78ba\u4fdd\u4e0b\u8f09\u7121\u9ed1\u584a *\/\n        .header-box { background: #1a4a8e; color: white; padding: 15px 20px; display: flex; justify-content: space-between; align-items: center; }\n        .logo-text { font-size: 22px; font-weight: bold; letter-spacing: 1px; }\n        .header-info { text-align: right; font-size: 10px; line-height: 1.5; }\n\n        .doc-title-row { text-align: center; margin: 15px 0; position: relative; }\n        .doc-title { font-size: 24px; font-weight: bold; text-decoration: underline; text-underline-offset: 8px; }\n        .copy-tag { position: absolute; right: 0; top: 5px; border: 1.5px solid #000; padding: 2px 8px; font-size: 14px; font-weight: bold; background: white; }\n\n        \/* \u8868\u683c\u6a23\u5f0f\u512a\u5316 *\/\n        table { width: 100%; border-collapse: collapse; border: 1.5px solid #000; table-layout: fixed; }\n        td, th { border: 1px solid #000; padding: 8px 12px; font-size: 14px; color: #000; height: 35px; }\n        th { background: #f2f2f2; font-weight: bold; }\n\n        .footer-info { display: grid; grid-template-columns: 1.4fr 1fr; border: 1.5px solid #000; border-top: none; }\n        .bank-details { padding: 10px; font-size: 12px; line-height: 1.8; border-right: 1.5px solid #000; color: #1a4a8e; }\n        .total-summary { display: grid; grid-template-columns: 1fr 1fr; }\n        .total-summary div { border-bottom: 1px solid #000; padding: 8px; text-align: center; font-weight: bold; display: flex; align-items: center; justify-content: center; }\n        .highlight-bg { background: #fff9c4 !important; font-size: 16px; }\n\n        .dash-divider { border-top: 1px dashed #666; margin: 25px 0; position: relative; text-align: center; }\n        .dash-divider span { position: absolute; top: -10px; background: white; padding: 0 15px; font-size: 12px; color: #666; left: 50%; transform: translateX(-50%); }\n\n        .input-group { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 10px; }\n        input { padding: 6px; border: 1px solid #ccc; border-radius: 4px; }\n        .edit-row { display: grid; grid-template-columns: 140px 240px 100px 140px 50px; gap: 5px; margin-bottom: 5px; }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"admin-panel\">\n    <div style=\"display:flex; justify-content:space-between; align-items:center; margin-bottom:15px;\">\n        <h3 style=\"margin:0\">\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240 &#8211; \u6536\u6b3e\u55ae\u7ba1\u7406 (\u7d14\u6de8\u7248)<\/h3>\n        <button onclick=\"generatePDF()\" style=\"background:#e53935; color:white; border:none; padding:10px 25px; border-radius:4px; font-weight:bold; cursor:pointer;\">\u4e0b\u8f09 A4 PDF (\u4e0d\u542b\u5370\u7ae0)<\/button>\n    <\/div>\n    <div class=\"input-group\">\n        \u516c\u53f8\uff1a<input type=\"text\" id=\"inComp\" value=\"\u4eba\u751f\u597d\u96e3\u6709\u9650\u516c\u53f8\" oninput=\"sync()\">\n        \u7d71\u7de8\uff1a<input type=\"text\" id=\"inTax\" value=\"50879329\" oninput=\"sync()\">\n        \u65e5\u671f\uff1a<input type=\"text\" id=\"inDate\" value=\"2025\/11\" oninput=\"sync()\">\n        \u806f\u7d61\uff1a<input type=\"text\" id=\"inContact\" value=\"\u9673\u5148\u751f\" oninput=\"sync()\">\n    <\/div>\n    <div id=\"itemsContainer\"><\/div>\n    <button onclick=\"addItem()\" style=\"margin-top:10px; background:#43a047; color:white; border:none; padding:6px 15px; border-radius:4px; cursor:pointer;\">+ \u65b0\u589e\u6536\u8cbb\u9805\u76ee<\/button>\n<\/div>\n\n<div id=\"print-area\">\n    <div class=\"doc-section\">\n        <div class=\"header-box\">\n            <div class=\"logo-text\">\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240<div style=\"font-size:13px; font-weight:normal;\">All Win CPA Firm<\/div><\/div>\n            <div class=\"header-info\">\u5730\u5740\uff1a\u53f0\u5317\u5e02\u5927\u540c\u5340\u5ef6\u5e73\u5317\u8def\u4e8c\u6bb5202\u865f <br>\u7d71\u7de8\uff1a42451006 | \u627f\u8fa6\u4eba\uff1a\u5468\u6021\u4f36<\/div>\n        <\/div>\n        <div class=\"doc-title-row\"><span class=\"doc-title\">\u6536\u6b3e\u901a\u77e5\u55ae<\/span><span class=\"copy-tag\">\u6536\u57f7\u806f<\/span><\/div>\n        <table>\n            <tr><td width=\"15%\" align=\"center\">\u516c\u53f8\u540d\u7a31<\/td><td width=\"45%\" id=\"vComp1\"><\/td><td width=\"15%\" align=\"center\">\u806f\u7d61\u4eba<\/td><td width=\"25%\" id=\"vContact1\"><\/td><\/tr>\n            <tr><td align=\"center\">\u7d71\u4e00\u7de8\u865f<\/td><td id=\"vTax1\"><\/td><td align=\"center\">\u65e5\u671f<\/td><td id=\"vDate1\"><\/td><\/tr>\n        <\/table>\n        <table style=\"border-top:none;\">\n            <thead><tr><th width=\"8%\">\u9805\u6b21<\/th><th width=\"52%\">\u670d\u52d9\u9805\u76ee \/ \u5167\u5bb9\u63cf\u8ff0<\/th><th width=\"18%\">\u91d1\u984d<\/th><th width=\"22%\">\u5099\u8a3b<\/th><\/tr><\/thead>\n            <tbody id=\"list1\"><\/tbody>\n        <\/table>\n        <div class=\"footer-info\">\n            <div class=\"bank-details\">\n                \u25cf \u532f\u6b3e\u8cc7\u8a0a\uff1a\u7389\u5c71\u9280\u884c 808 (\u5357\u4eac\u6771\u8def\u5206\u884c)<br>\u6236\u540d\uff1a\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240<br>\u5e33\u865f\uff1a0026-940-039725\n            <\/div>\n            <div class=\"total-summary\">\n                <div>\u7e3d\u8a08<\/div><div id=\"t1A\">0<\/div>\n                <div class=\"highlight-bg\">\u672c\u6b21\u6536\u8cbb<\/div><div class=\"highlight-bg\" id=\"t1B\" style=\"color:red;\">0<\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <div class=\"dash-divider\"><span>\u2702&#8212; \u5207\u5272\u7dda (\u8acb\u6cbf\u7dda\u6495\u4e0b) &#8212;\u2702<\/span><\/div>\n\n    <div class=\"doc-section\">\n        <div class=\"header-box\" style=\"padding: 10px 20px;\">\n            <div class=\"logo-text\" style=\"font-size:18px;\">\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240<\/div>\n            <div style=\"font-size:10px;\">\u5c0d\u5e33\u806f<\/div>\n        <\/div>\n        <div class=\"doc-title-row\"><span class=\"doc-title\">\u6536\u6b3e\u901a\u77e5\u55ae<\/span><span class=\"copy-tag\">\u5c0d\u5e33\u806f<\/span><\/div>\n        <table>\n            <tr><td width=\"15%\" align=\"center\">\u516c\u53f8\u540d\u7a31<\/td><td width=\"45%\" id=\"vComp2\"><\/td><td width=\"15%\" align=\"center\">\u806f\u7d61\u4eba<\/td><td width=\"25%\" id=\"vContact2\"><\/td><\/tr>\n            <tr><td align=\"center\">\u7d71\u4e00\u7de8\u865f<\/td><td id=\"vTax2\"><\/td><td align=\"center\">\u65e5\u671f<\/td><td id=\"vDate2\"><\/td><\/tr>\n        <\/table>\n        <table style=\"border-top:none;\">\n            <thead><tr><th width=\"8%\">\u9805\u6b21<\/th><th width=\"52%\">\u670d\u52d9\u9805\u76ee<\/th><th width=\"18%\">\u91d1\u984d<\/th><th width=\"22%\">\u5099\u8a3b<\/th><\/tr><\/thead>\n            <tbody id=\"list2\"><\/tbody>\n        <\/table>\n        <div style=\"display:flex; justify-content:flex-end;\">\n            <div style=\"width:40%; border:1.5px solid #000; border-top:none; display:grid; grid-template-columns:1fr 1fr;\">\n                <div style=\"padding:8px; border-right:1px solid #000; text-align:center; font-weight:bold;\">\u7e3d\u8a08<\/div><div id=\"t2A\" style=\"font-weight:bold; padding:8px; text-align:center;\">0<\/div>\n            <\/div>\n        <\/div>\n        <div style=\"margin-top:15px; display:flex; justify-content:space-between; align-items:flex-end;\">\n            <div style=\"font-size:11px; color:#333;\">\u5099\u8a3b\uff1a\u70ba\u4fdd\u969c\u6b0a\u76ca\uff0c\u8acb\u4fdd\u5b58\u672c\u6536\u57f7\u806f\uff0c\u4ee5\u4fbf\u65e5\u5f8c\u67e5\u5c0d\u3002<\/div>\n            <div style=\"border:1.5px solid #000; width:140px; height:80px; text-align:center; padding-top:5px; font-weight:bold;\">\n                \u7c3d\u6536\u6b04\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>\n    let dataItems = [{ name: '\u5e33\u52d9\u6703\u8a08\u8655\u7406', desc: '\u8a18\u5e33\u7a05\u52d9\u7533\u5831 \u6bcf\u6708 2,500 * 6', amt: 15000, note: '2025\/7-12' }];\n\n    function sync() {\n        ['Comp', 'Date', 'Tax', 'Contact'].forEach(key => {\n            const val = document.getElementById('in' + key).value;\n            if(document.getElementById('v' + key + '1')) document.getElementById('v' + key + '1').innerText = val;\n            if(document.getElementById('v' + key + '2')) document.getElementById('v' + key + '2').innerText = val;\n        });\n\n        let h1 = '', h2 = '', editH = '', total = 0;\n        dataItems.forEach((item, i) => {\n            h1 += `<tr><td align=\"center\">${i+1}<\/td><td><b>${item.name}<\/b><br><small>${item.desc}<\/small><\/td><td align=\"right\">${Number(item.amt).toLocaleString()}<\/td><td>${item.note}<\/td><\/tr>`;\n            h2 += `<tr><td align=\"center\">${i+1}<\/td><td>${item.name}<\/td><td align=\"right\">${Number(item.amt).toLocaleString()}<\/td><td>${item.note}<\/td><\/tr>`;\n            editH += `<div class=\"edit-row\">\n                <input type=\"text\" value=\"${item.name}\" oninput=\"dataItems[${i}].name=this.value; syncLists()\">\n                <input type=\"text\" value=\"${item.desc}\" oninput=\"dataItems[${i}].desc=this.value; syncLists()\">\n                <input type=\"number\" value=\"${item.amt}\" oninput=\"dataItems[${i}].amt=this.value; syncLists()\">\n                <input type=\"text\" value=\"${item.note}\" oninput=\"dataItems[${i}].note=this.value; syncLists()\">\n                <button onclick=\"dataItems.splice(${i},1); sync()\" style=\"color:red\">\u522a\u9664<\/button>\n            <\/div>`;\n            total += Number(item.amt);\n        });\n        document.getElementById('itemsContainer').innerHTML = editH;\n        document.getElementById('list1').innerHTML = h1;\n        document.getElementById('list2').innerHTML = h2;\n        updateTotal(total);\n    }\n\n    function syncLists() {\n        let h1 = '', h2 = '', total = 0;\n        dataItems.forEach((item, i) => {\n            h1 += `<tr><td align=\"center\">${i+1}<\/td><td><b>${item.name}<\/b><br><small>${item.desc}<\/small><\/td><td align=\"right\">${Number(item.amt).toLocaleString()}<\/td><td>${item.note}<\/td><\/tr>`;\n            h2 += `<tr><td align=\"center\">${i+1}<\/td><td>${item.name}<\/td><td align=\"right\">${Number(item.amt).toLocaleString()}<\/td><td>${item.note}<\/td><\/tr>`;\n            total += Number(item.amt);\n        });\n        document.getElementById('list1').innerHTML = h1;\n        document.getElementById('list2').innerHTML = h2;\n        updateTotal(total);\n    }\n\n    function updateTotal(t) {\n        const s = t.toLocaleString();\n        document.getElementById('t1A').innerText = s;\n        document.getElementById('t1B').innerText = s;\n        document.getElementById('t2A').innerText = s;\n    }\n\n    function addItem() { dataItems.push({ name: '', desc: '', amt: 0, note: '' }); sync(); }\n\n    function generatePDF() {\n        const element = document.getElementById('print-area');\n        const opt = {\n            margin: 0,\n            filename: `\u6536\u6b3e\u901a\u77e5\u55ae_${document.getElementById('inComp').value}.pdf`,\n            html2canvas: { scale: 3, useCORS: true },\n            jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }\n        };\n        html2pdf().set(opt).from(element).save();\n    }\n    sync();\n<\/script>\n<\/body>\n<\/html>\n\n\n\n<!DOCTYPE html>\n<html lang=\"zh-TW\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240 &#8211; \u5ba2\u6236\u7ba1\u7406\u7cfb\u7d71<\/title>\n    <style>\n        body { font-family: \"Microsoft JhengHei\", sans-serif; background: #f0f2f5; padding: 20px; color: #333; }\n        .container { max-width: 950px; margin: auto; background: white; padding: 30px; border-radius: 12px; box-shadow: 0 4px 20px rgba(0,0,0,0.08); }\n        .header { background: #1a4a8e; color: white; padding: 20px; border-radius: 8px 8px 0 0; margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center; }\n        \n        .management-panel { background: #eef2f7; padding: 15px; border-radius: 8px; margin-bottom: 20px; border-left: 5px solid #1a4a8e; }\n        .info-grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 15px; margin-bottom: 20px; }\n        \n        table { width: 100%; border-collapse: collapse; margin-top: 10px; }\n        th { background: #f8f9fa; border: 1px solid #ddd; padding: 12px; text-align: left; }\n        td { border: 1px solid #ddd; padding: 10px; }\n        \n        input, select { width: 90%; padding: 8px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; }\n        .total-section { text-align: right; font-size: 1.3em; font-weight: bold; margin-top: 20px; color: #d32f2f; }\n        \n        .btn { padding: 8px 16px; cursor: pointer; border: none; border-radius: 4px; font-weight: bold; transition: 0.3s; }\n        .btn-save { background: #1a4a8e; color: white; }\n        .btn-add { background: #28a745; color: white; }\n        .btn-export { background: #17a2b8; color: white; }\n        .btn-del { background: #dc3545; color: white; padding: 4px 8px; font-size: 12px; }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"container\">\n    <div class=\"header\">\n        <div>\n            <h2 style=\"margin:0;\">\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240<\/h2>\n            <span>All Win CPA Firm &#8211; \u6536\u6b3e\u7ba1\u7406<\/span>\n        <\/div>\n    <\/div>\n\n    <div class=\"management-panel\">\n        <strong>\u5feb\u901f\u9078\u64c7\u5ba2\u6236\uff1a<\/strong>\n        <select id=\"clientSelect\" onchange=\"loadClientData()\" style=\"width: 200px;\">\n            <option value=\"\">&#8212; \u9078\u64c7\u65e2\u6709\u5ba2\u6236 &#8212;<\/option>\n        <\/select>\n        <button class=\"btn btn-del\" onclick=\"deleteClient()\">\u522a\u9664\u9078\u4e2d\u5ba2\u6236<\/button>\n    <\/div>\n\n    <div class=\"info-grid\">\n        <div>\u516c\u53f8\u540d\u7a31\uff1a<input type=\"text\" id=\"compName\" placeholder=\"\u8f38\u5165\u540d\u7a31\"><\/div>\n        <div>\u7d71\u4e00\u7de8\u865f\uff1a<input type=\"text\" id=\"taxId\" placeholder=\"\u8f38\u5165\u7d71\u7de8\"><\/div>\n        <div>\u806f\u7d61\u4eba\uff1a<input type=\"text\" id=\"contact\" placeholder=\"\u59d3\u540d\"><\/div>\n        <div>\u55ae\u64da\u65e5\u671f\uff1a<input type=\"month\" id=\"docDate\"><\/div>\n        <div><button class=\"btn btn-save\" onclick=\"saveClient()\">\u5132\u5b58\/\u66f4\u65b0\u5ba2\u6236\u8cc7\u6599<\/button><\/div>\n    <\/div>\n\n    <table id=\"itemTable\">\n        <thead>\n            <tr>\n                <th width=\"5%\">#<\/th>\n                <th width=\"20%\">\u670d\u52d9\u9805\u76ee<\/th>\n                <th width=\"35%\">\u63cf\u8ff0<\/th>\n                <th width=\"15%\">\u91d1\u984d<\/th>\n                <th width=\"15%\">\u5099\u8a3b<\/th>\n                <th width=\"10%\">\u64cd\u4f5c<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr>\n                <td>1<\/td>\n                <td><input type=\"text\" class=\"svc-item\" value=\"\u5e33\u52d9\u6703\u8a08\u8655\u7406\"><\/td>\n                <td><input type=\"text\" class=\"svc-desc\" value=\"\u8a18\u5e33 \u6bcf\u6708 2500 * 6\"><\/td>\n                <td><input type=\"number\" class=\"svc-amt\" value=\"15000\" oninput=\"calcTotal()\"><\/td>\n                <td><input type=\"text\" class=\"svc-note\" value=\"2025 \u5e74 7-12 \u6708\"><\/td>\n                <td><button onclick=\"this.parentElement.parentElement.remove(); calcTotal();\">\u522a<\/button><\/td>\n            <\/tr>\n        <\/tbody>\n    <\/table>\n\n    <div style=\"margin-top: 15px;\">\n        <button class=\"btn btn-add\" onclick=\"addRow()\">+ \u65b0\u589e\u9805\u76ee<\/button>\n    <\/div>\n\n    <div class=\"total-section\">\n        \u672c\u6b21\u6536\u8cbb\u7e3d\u8a08\uff1aNT$ <span id=\"totalDisplay\">15,000<\/span>\n    <\/div>\n\n    <div style=\"margin-top: 30px; border-top: 1px solid #eee; pt: 20px;\">\n        <button class=\"btn btn-export\" onclick=\"exportToExcel()\">\u532f\u51fa\u672c\u55ae CSV (Excel)<\/button>\n        <button class=\"btn btn-export\" style=\"background:#6c757d\" onclick=\"window.print()\">\u5217\u5370\u6536\u6b3e\u901a\u77e5\u55ae<\/button>\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ \u521d\u59cb\u5316\u65e5\u671f\n    document.getElementById('docDate').value = new Date().toISOString().slice(0, 7);\n\n    \/\/ --- \u5ba2\u6236\u7ba1\u7406\u908f\u8f2f ---\n    let clients = JSON.parse(localStorage.getItem('cpa_clients')) || {};\n\n    function updateClientSelect() {\n        const select = document.getElementById('clientSelect');\n        select.innerHTML = '<option value=\"\">-- \u9078\u64c7\u65e2\u6709\u5ba2\u6236 --<\/option>';\n        for (let name in clients) {\n            let opt = document.createElement('option');\n            opt.value = name;\n            opt.textContent = name;\n            select.appendChild(opt);\n        }\n    }\n\n    function saveClient() {\n        const name = document.getElementById('compName').value;\n        if (!name) return alert(\"\u8acb\u8f38\u5165\u516c\u53f8\u540d\u7a31\");\n        clients[name] = {\n            taxId: document.getElementById('taxId').value,\n            contact: document.getElementById('contact').value\n        };\n        localStorage.setItem('cpa_clients', JSON.stringify(clients));\n        updateClientSelect();\n        alert(\"\u5ba2\u6236\u8cc7\u6599\u5df2\u5132\u5b58\uff01\");\n    }\n\n    function loadClientData() {\n        const name = document.getElementById('clientSelect').value;\n        if (clients[name]) {\n            document.getElementById('compName').value = name;\n            document.getElementById('taxId').value = clients[name].taxId;\n            document.getElementById('contact').value = clients[name].contact;\n        }\n    }\n\n    function deleteClient() {\n        const name = document.getElementById('clientSelect').value;\n        if (name && confirm(`\u78ba\u5b9a\u8981\u522a\u9664 ${name} \u7684\u8cc7\u6599\u55ce\uff1f`)) {\n            delete clients[name];\n            localStorage.setItem('cpa_clients', JSON.stringify(clients));\n            updateClientSelect();\n            document.getElementById('compName').value = \"\";\n        }\n    }\n\n    \/\/ --- \u8868\u683c\u8a08\u7b97\u908f\u8f2f ---\n    function calcTotal() {\n        let sum = 0;\n        document.querySelectorAll('.svc-amt').forEach(input => {\n            sum += Number(input.value) || 0;\n        });\n        document.getElementById('totalDisplay').innerText = sum.toLocaleString();\n    }\n\n    function addRow() {\n        const table = document.getElementById('itemTable').getElementsByTagName('tbody')[0];\n        const row = table.insertRow(-1);\n        row.innerHTML = `\n            <td>${table.rows.length}<\/td>\n            <td><input type=\"text\" class=\"svc-item\"><\/td>\n            <td><input type=\"text\" class=\"svc-desc\"><\/td>\n            <td><input type=\"number\" class=\"svc-amt\" value=\"0\" oninput=\"calcTotal()\"><\/td>\n            <td><input type=\"text\" class=\"svc-note\"><\/td>\n            <td><button onclick=\"this.parentElement.parentElement.remove(); calcTotal();\">\u522a<\/button><\/td>\n        `;\n    }\n\n    \/\/ --- \u532f\u51fa CSV \u908f\u8f2f ---\n    function exportToExcel() {\n        let csvContent = \"\\uFEFF\u9805\u6b21,\u670d\u52d9\u9805\u76ee,\u5167\u5bb9\u63cf\u8ff0,\u91d1\u984d,\u5099\u8a3b\\n\";\n        document.querySelectorAll('#itemTable tbody tr').forEach((row, index) => {\n            const inputs = row.querySelectorAll('input');\n            const line = [index + 1, inputs[0].value, inputs[1].value, inputs[2].value, inputs[3].value];\n            csvContent += line.join(\",\") + \"\\n\";\n        });\n        \n        const blob = new Blob([csvContent], { type: 'text\/csv;charset=utf-8;' });\n        const link = document.createElement(\"a\");\n        link.href = URL.createObjectURL(blob);\n        link.download = `\u6536\u6b3e\u55ae_${document.getElementById('compName').value || '\u672a\u547d\u540d'}.csv`;\n        link.click();\n    }\n\n    \/\/ \u521d\u59cb\u5316\u4e0b\u62c9\u9078\u55ae\n    updateClientSelect();\n<\/script>\n\n<\/body>\n<\/html>\n\n\n\n<!DOCTYPE html>\n<html lang=\"zh-TW\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240 &#8211; \u5831\u50f9\u7cfb\u7d71<\/title>\n    <style>\n        body { font-family: \"Microsoft JhengHei\", sans-serif; background: #f4f7f6; padding: 20px; }\n        .container { max-width: 900px; margin: auto; background: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }\n        .header { background: #1a4a8e; color: white; padding: 20px; display: flex; justify-content: space-between; align-items: center; border-radius: 5px 5px 0 0; }\n        .info-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 20px 0; border: 1px solid #ddd; padding: 15px; }\n        table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }\n        th { background: #f8f9fa; border: 1px solid #ddd; padding: 10px; }\n        td { border: 1px solid #ddd; padding: 8px; }\n        input { width: 90%; padding: 5px; border: 1px solid #ccc; }\n        .total-section { text-align: right; font-size: 1.2em; font-weight: bold; padding: 10px; background: #fffde7; }\n        .btn-group { margin-top: 20px; display: flex; gap: 10px; }\n        button { padding: 10px 20px; cursor: pointer; border: none; border-radius: 4px; }\n        .btn-add { background: #28a745; color: white; }\n        .btn-export { background: #17a2b8; color: white; }\n        .btn-print { background: #6c757d; color: white; }\n    <\/style>\n<\/head>\n<body>\n\n<div class=\"container\">\n    <div class=\"header\">\n        <div>\n            <h2 style=\"margin:0;\">\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240<\/h2>\n            <span>All Win CPA Firm<\/span>\n        <\/div>\n        <div style=\"font-size: 1.5em;\">\u6536\u6b3e\u901a\u77e5\u55ae<\/div>\n    <\/div>\n\n    <div class=\"info-grid\">\n        <div>\u516c\u53f8\u540d\u7a31\uff1a<input type=\"text\" id=\"compName\" value=\"\u597d\u597d\u73a9\u5fc3\u7406\u6cbb\u7642\u6240\"><\/div>\n        <div>\u806f\u7d61\u4eba\uff1a<input type=\"text\" id=\"contact\" value=\"\u9ec3\u5c0f\u59d0\"><\/div>\n        <div>\u7d71\u4e00\u7de8\u865f\uff1a<input type=\"text\" id=\"taxId\" value=\"88326811\"><\/div>\n        <div>\u65e5\u671f\uff1a<input type=\"month\" id=\"docDate\" value=\"2025-11\"><\/div>\n    <\/div>\n\n    <table id=\"itemTable\">\n        <thead>\n            <tr>\n                <th width=\"5%\">\u9805\u6b21<\/th>\n                <th width=\"20%\">\u670d\u52d9\u9805\u76ee<\/th>\n                <th width=\"30%\">\u5167\u5bb9\u63cf\u8ff0<\/th>\n                <th width=\"15%\">\u91d1\u984d<\/th>\n                <th width=\"20%\">\u5099\u8a3b<\/th>\n                <th width=\"10%\">\u64cd\u4f5c<\/th>\n            <\/tr>\n        <\/thead>\n        <tbody>\n            <tr>\n                <td>1<\/td>\n                <td><input type=\"text\" value=\"\u5e33\u52d9\u6703\u8a08\u8655\u7406\"><\/td>\n                <td><input type=\"text\" value=\"\u8a18\u5e33 \u6bcf\u6708 2500 * 6\"><\/td>\n                <td><input type=\"number\" class=\"amt\" value=\"15000\" oninput=\"calcTotal()\"><\/td>\n                <td><input type=\"text\" value=\"2025 \u5e74 7-12 \u6708\"><\/td>\n                <td><button onclick=\"deleteRow(this)\">\u522a\u9664<\/button><\/td>\n            <\/tr>\n        <\/tbody>\n    <\/table>\n\n    <button class=\"btn-add\" onclick=\"addRow()\">+ \u65b0\u589e\u9805\u76ee<\/button>\n\n    <div class=\"total-section\">\n        \u7e3d\u8a08\u91d1\u984d\uff1aNT$ <span id=\"totalDisplay\">15,000<\/span>\n    <\/div>\n\n    <div class=\"btn-group\">\n        <button class=\"btn-export\" onclick=\"exportData()\">\u5c0e\u51fa\u8cc7\u6599 (JSON)<\/button>\n        <button class=\"btn-print\" onclick=\"window.print()\">\u5217\u5370 \/ \u8f49\u5b58 PDF<\/button>\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ \u81ea\u52d5\u8a08\u7b97\u7e3d\u91d1\u984d\n    function calcTotal() {\n        let sum = 0;\n        document.querySelectorAll('.amt').forEach(input => {\n            sum += Number(input.value) || 0;\n        });\n        document.getElementById('totalDisplay').innerText = sum.toLocaleString();\n    }\n\n    \/\/ \u65b0\u589e\u4e00\u5217\n    function addRow() {\n        const table = document.getElementById('itemTable').getElementsByTagName('tbody')[0];\n        const rowCount = table.rows.length + 1;\n        const row = table.insertRow(-1);\n        row.innerHTML = `\n            <td>${rowCount}<\/td>\n            <td><input type=\"text\"><\/td>\n            <td><input type=\"text\"><\/td>\n            <td><input type=\"number\" class=\"amt\" value=\"0\" oninput=\"calcTotal()\"><\/td>\n            <td><input type=\"text\"><\/td>\n            <td><button onclick=\"deleteRow(this)\">\u522a\u9664<\/button><\/td>\n        `;\n    }\n\n    \/\/ \u522a\u9664\u4e00\u5217\n    function deleteRow(btn) {\n        btn.parentElement.parentElement.remove();\n        calcTotal();\n    }\n\n    \/\/ \u5c0e\u51fa\u8cc7\u6599\u529f\u80fd\n    function exportData() {\n        const data = {\n            client: document.getElementById('compName').value,\n            taxId: document.getElementById('taxId').value,\n            total: document.getElementById('totalDisplay').innerText,\n            items: []\n        };\n        \n        document.querySelectorAll('#itemTable tbody tr').forEach(row => {\n            const inputs = row.querySelectorAll('input');\n            data.items.push({\n                service: inputs[0].value,\n                description: inputs[1].value,\n                amount: inputs[2].value\n            });\n        });\n\n        console.log(\"\u5c0e\u51fa\u7684\u8cc7\u6599\u5982\u4e0b\uff1a\", data);\n        alert(\"\u8cc7\u6599\u5df2\u5c0e\u51fa\u81f3\u63a7\u5236\u53f0 (Console)\uff0c\u55ae\u4eba\u4f7f\u7528\u6642\u53ef\u900f\u904e\u6b64\u908f\u8f2f\u4e32\u63a5\u8cc7\u6599\u5eab\u3002\");\n    }\n\n    \/\/ \u521d\u59cb\u5316\u8a08\u7b97\u4e00\u6b21\n    calcTotal();\n<\/script>\n\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>\u6b50\u81f4\u8056\u6703\u8a08\u5e2b\u4e8b\u52d9\u6240 &#8211; \u6536\u6b3e\u55ae\u7ba1\u7406 (\u7d14\u6de8\u7248) \u4e0b\u8f09 A4 PDF (\u4e0d\u542b\u5370\u7ae0) \u516c\u53f8\uff1a \u7d71\u7de8\uff1a  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-648","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=\/wp\/v2\/pages\/648","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=648"}],"version-history":[{"count":19,"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=\/wp\/v2\/pages\/648\/revisions"}],"predecessor-version":[{"id":707,"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=\/wp\/v2\/pages\/648\/revisions\/707"}],"wp:attachment":[{"href":"https:\/\/www.allwincpa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}