{"id":32212,"date":"2025-12-05T19:15:14","date_gmt":"2025-12-05T11:15:14","guid":{"rendered":"https:\/\/jdssl.top\/?page_id=32212"},"modified":"2025-12-05T20:45:00","modified_gmt":"2025-12-05T12:45:00","slug":"danwei","status":"publish","type":"page","link":"https:\/\/jdssl.top\/index.php\/danwei\/","title":{"rendered":"\u5355\u4f4d\u6362\u7b97"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"32212\" class=\"elementor elementor-32212\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-74c9b5e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"74c9b5e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c94cedc\" data-id=\"c94cedc\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-11fe33a elementor-widget elementor-widget-html\" data-id=\"11fe33a\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"zh-CN\">\r\n<head>\r\n  <meta charset=\"UTF-8\" \/>\r\n  <title>\u6cd5\u5e01\u6c47\u7387 & \u91cd\u91cf\u4ef7\u683c\u6362\u7b97\u5668<\/title>\r\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\r\n  <style>\r\n    :root {\r\n      --bg: #020617;\r\n      --card-grad: radial-gradient(circle at top, #1f2937, #020617);\r\n      --border-soft: rgba(148, 163, 184, 0.35);\r\n      --text-main: #e5e7eb;\r\n      --text-muted: #9ca3af;\r\n      --accent: #38bdf8;\r\n      --accent-soft: rgba(56, 189, 248, 0.16);\r\n    }\r\n\r\n    * {\r\n      box-sizing: border-box;\r\n      margin: 0;\r\n      padding: 0;\r\n      font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\r\n    }\r\n\r\n    body {\r\n      min-height: 100vh;\r\n      background: var(--bg);\r\n      color: var(--text-main);\r\n      padding: 16px 8px;\r\n    }\r\n\r\n    .page {\r\n      width: 100%;\r\n      max-width: 1000px;\r\n      margin: 0 auto !important; \/* \u5728\u535a\u5ba2\u91cc\u4e5f\u80fd\u5c45\u4e2d *\/\r\n    }\r\n\r\n    \/* \u9876\u90e8\u83dc\u5355 *\/\r\n    .top-nav {\r\n      display: flex;\r\n      gap: 10px;\r\n      margin-bottom: 12px;\r\n      flex-wrap: wrap;\r\n    }\r\n\r\n    .nav-btn {\r\n      padding: 8px 16px;\r\n      border-radius: 9999px;\r\n      border: 1px solid rgba(148, 163, 184, 0.5);\r\n      background: rgba(15, 23, 42, 0.96);\r\n      color: var(--text-muted);\r\n      font-size: 13px;\r\n      cursor: pointer;\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      gap: 6px;\r\n      transition:\r\n        background 0.18s ease,\r\n        border-color 0.18s ease,\r\n        box-shadow 0.18s ease,\r\n        color 0.18s ease,\r\n        transform 0.18s ease;\r\n      min-width: 0;\r\n    }\r\n\r\n    .nav-btn span.dot {\r\n      width: 6px;\r\n      height: 6px;\r\n      border-radius: 999px;\r\n      background: rgba(148, 163, 184, 0.7);\r\n    }\r\n\r\n    .nav-btn:hover {\r\n      border-color: rgba(148, 163, 184, 0.9);\r\n      transform: translateY(-1px);\r\n    }\r\n\r\n    .nav-btn.active {\r\n      color: #f9fafb;\r\n      border-color: var(--accent);\r\n      box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.55);\r\n      background: radial-gradient(\r\n        circle at top,\r\n        rgba(56, 189, 248, 0.25),\r\n        rgba(15, 23, 42, 0.98)\r\n      );\r\n      transform: translateY(-1px) scale(1.02);\r\n    }\r\n\r\n    .nav-btn.active span.dot {\r\n      background: #22d3ee;\r\n    }\r\n\r\n    \/* \u624b\u673a\u7aef\u4e24\u4e2a\u83dc\u5355\u5e76\u6392 *\/\r\n    @media (max-width: 540px) {\r\n      .top-nav {\r\n        flex-wrap: nowrap;\r\n      }\r\n      .nav-btn {\r\n        flex: 1 1 0;\r\n      }\r\n    }\r\n\r\n    .card {\r\n      background: var(--card-grad);\r\n      border-radius: 24px;\r\n      padding: 20px 18px 18px;\r\n      border: 1px solid var(--border-soft);\r\n      box-shadow: 0 24px 64px rgba(0, 0, 0, 0.65);\r\n    }\r\n\r\n    @media (min-width: 768px) {\r\n      .card {\r\n        padding: 26px 26px 22px;\r\n      }\r\n    }\r\n\r\n    .card-header {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 6px;\r\n      margin-bottom: 18px;\r\n    }\r\n\r\n    .title {\r\n      font-size: 20px;\r\n      font-weight: 650;\r\n    }\r\n\r\n    .subtitle {\r\n      font-size: 12px;\r\n      color: var(--text-muted);\r\n      max-width: 720px;\r\n      line-height: 1.4;\r\n    }\r\n\r\n    .section-title {\r\n      font-size: 14px;\r\n      font-weight: 550;\r\n      margin-bottom: 6px;\r\n      display: flex;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n      align-items: baseline;\r\n    }\r\n\r\n    .section-title small {\r\n      font-size: 11px;\r\n      color: var(--text-muted);\r\n      font-weight: 400;\r\n    }\r\n\r\n    .input-group {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 4px;\r\n    }\r\n\r\n    label {\r\n      font-size: 12px;\r\n    }\r\n\r\n    .input-wrapper {\r\n      display: flex;\r\n      align-items: center;\r\n      background: rgba(15, 23, 42, 0.96);\r\n      border-radius: 9999px;\r\n      padding: 6px 10px;\r\n      border: 1px solid rgba(148, 163, 184, 0.55);\r\n      transition:\r\n        border-color 0.15s ease,\r\n        box-shadow 0.15s ease,\r\n        background 0.15s ease,\r\n        transform 0.12s ease;\r\n    }\r\n\r\n    .input-wrapper:focus-within {\r\n      border-color: var(--accent);\r\n      box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.55);\r\n      background: rgba(15, 23, 42, 1);\r\n      transform: translateY(-1px);\r\n    }\r\n\r\n    .input-wrapper span.unit {\r\n      font-size: 13px;\r\n      color: var(--text-muted);\r\n      margin-left: 6px;\r\n      white-space: nowrap;\r\n    }\r\n\r\n    input[type='number'] {\r\n      width: 100%;\r\n      border: none;\r\n      outline: none;\r\n      background: transparent;\r\n      color: #f9fafb;\r\n      font-size: 14px;\r\n    }\r\n\r\n    input[type='number']::placeholder {\r\n      color: #6b7280;\r\n    }\r\n\r\n    \/* \u5f3a\u5236 select \u6df1\u8272\u6837\u5f0f\uff08\u8986\u76d6\u535a\u5ba2\u4e3b\u9898\uff09 *\/\r\n    select {\r\n      border-radius: 9999px !important;\r\n      border: 1px solid rgba(148, 163, 184, 0.6) !important;\r\n      background: rgba(15, 23, 42, 0.96) !important;\r\n      color: var(--text-main) !important;\r\n      padding: 6px 10px !important;\r\n      font-size: 13px !important;\r\n      outline: none !important;\r\n      min-width: 120px;\r\n      appearance: none !important;\r\n      -webkit-appearance: none !important;\r\n      -moz-appearance: none !important;\r\n    }\r\n\r\n    select:focus {\r\n      border-color: #38bdf8 !important;\r\n      box-shadow: 0 0 0 1px rgba(56, 189, 248, 0.55) !important;\r\n    }\r\n\r\n    .fx-status {\r\n      font-size: 11px;\r\n      color: var(--text-muted);\r\n      margin-top: 4px;\r\n    }\r\n\r\n    .fx-status.error {\r\n      color: #fca5a5;\r\n    }\r\n\r\n    .help-text {\r\n      margin-top: 8px;\r\n      font-size: 11px;\r\n      color: var(--text-muted);\r\n      line-height: 1.5;\r\n    }\r\n\r\n    .footer {\r\n      margin-top: 12px;\r\n      font-size: 11px;\r\n      color: #6b7280;\r\n      display: flex;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n      flex-wrap: wrap;\r\n    }\r\n\r\n    \/* \u9762\u677f\u5207\u6362\u52a8\u6548 *\/\r\n    .section-panel {\r\n      opacity: 0;\r\n      transform: translateY(8px);\r\n      max-height: 0;\r\n      overflow: hidden;\r\n      pointer-events: none;\r\n      transition:\r\n        opacity 0.22s ease,\r\n        transform 0.22s ease,\r\n        max-height 0.22s ease;\r\n    }\r\n\r\n    .section-panel.active-panel {\r\n      opacity: 1;\r\n      transform: translateY(0);\r\n      max-height: 4000px;\r\n      pointer-events: auto;\r\n    }\r\n\r\n    \/* FX \u83dc\u5355\u5e03\u5c40 *\/\r\n    .fx-layout {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 14px;\r\n    }\r\n\r\n    @media (min-width: 768px) {\r\n      .fx-layout {\r\n        flex-direction: row;\r\n        align-items: stretch;\r\n      }\r\n    }\r\n\r\n    .fx-left,\r\n    .fx-right {\r\n      flex: 1;\r\n    }\r\n\r\n    .fx-result-card {\r\n      padding: 12px 14px;\r\n      border-radius: 18px;\r\n      border: 1px solid rgba(248, 250, 252, 0.2);\r\n      background: radial-gradient(\r\n        circle at top left,\r\n        var(--accent-soft),\r\n        rgba(15, 23, 42, 0.98)\r\n      );\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 6px;\r\n      min-height: 98px;\r\n    }\r\n\r\n    .fx-result-label {\r\n      font-size: 11px;\r\n      color: #cbd5f5;\r\n    }\r\n\r\n    .fx-result-main {\r\n      font-size: 22px;\r\n      font-weight: 650;\r\n      color: #e5f2ff;\r\n      word-break: break-all;\r\n    }\r\n\r\n    .fx-rate-info {\r\n      font-size: 11px;\r\n      color: #cbd5f5;\r\n      opacity: 0.85;\r\n    }\r\n\r\n    .fx-rate-update {\r\n      margin-top: 4px;\r\n      padding-top: 4px;\r\n      border-top: 1px dashed rgba(148, 163, 184, 0.4);\r\n      font-size: 11px;\r\n      color: #e5e7eb;\r\n      opacity: 0.9;\r\n    }\r\n\r\n    \/* \u91cd\u91cf\u9875\u9762\u5e03\u5c40 *\/\r\n    .top-layout {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 16px;\r\n    }\r\n\r\n    @media (min-width: 900px) {\r\n      .top-layout {\r\n        flex-direction: row;\r\n        align-items: flex-start;\r\n      }\r\n\r\n      .top-left,\r\n      .top-right {\r\n        flex: 1;\r\n      }\r\n\r\n      .top-right {\r\n        max-width: 360px;\r\n      }\r\n    }\r\n\r\n    .weight-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      gap: 10px;\r\n    }\r\n\r\n    @media (max-width: 600px) {\r\n      .weight-grid {\r\n        grid-template-columns: 1fr 1fr;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 460px) {\r\n      .weight-grid {\r\n        grid-template-columns: 1fr;\r\n      }\r\n    }\r\n\r\n    .price-row {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 10px;\r\n    }\r\n\r\n    .price-row > .input-group {\r\n      flex: 1;\r\n      min-width: 0;\r\n    }\r\n\r\n    .highlight-layout {\r\n      margin-top: 18px;\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 10px;\r\n    }\r\n\r\n    @media (min-width: 768px) {\r\n      .highlight-layout {\r\n        flex-direction: row;\r\n      }\r\n    }\r\n\r\n    .total-card {\r\n      flex: 1;\r\n      padding: 10px 12px;\r\n      border-radius: 16px;\r\n      background: rgba(15, 23, 42, 0.97);\r\n      border: 1px dashed rgba(148, 163, 184, 0.6);\r\n      font-size: 13px;\r\n    }\r\n\r\n    .total-card strong {\r\n      font-size: 18px;\r\n    }\r\n\r\n    .custom-card {\r\n      flex: 1.1;\r\n      padding: 10px 14px;\r\n      border-radius: 16px;\r\n      border: 1px solid rgba(248, 250, 252, 0.18);\r\n      background: radial-gradient(\r\n        circle at top left,\r\n        var(--accent-soft),\r\n        rgba(15, 23, 42, 0.98)\r\n      );\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 8px;\r\n    }\r\n\r\n    .custom-top {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 8px;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n    }\r\n\r\n    .custom-top-title {\r\n      font-size: 12px;\r\n      font-weight: 600;\r\n      color: #e5f2ff;\r\n    }\r\n\r\n    .custom-controls {\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 6px;\r\n      justify-content: flex-end;\r\n    }\r\n\r\n    .custom-controls select {\r\n      border-color: rgba(148, 163, 184, 0.9) !important;\r\n      background: rgba(15, 23, 42, 0.92) !important;\r\n      padding-inline: 8px !important;\r\n      font-size: 12px !important;\r\n    }\r\n\r\n    .custom-result-label {\r\n      font-size: 11px;\r\n      color: #cbd5f5;\r\n      opacity: 0.85;\r\n    }\r\n\r\n    .custom-result-value {\r\n      font-size: 20px;\r\n      font-weight: 650;\r\n      color: #e5f2ff;\r\n      word-break: break-all;\r\n    }\r\n\r\n    .sub-section {\r\n      margin-top: 12px;\r\n      font-size: 12px;\r\n      padding: 8px 10px;\r\n      border-radius: 12px;\r\n      background: rgba(15, 23, 42, 0.88);\r\n      border: 1px dashed rgba(148, 163, 184, 0.55);\r\n    }\r\n\r\n    .unit-prices-row {\r\n      display: flex;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n      margin-top: 3px;\r\n    }\r\n\r\n    .unit-prices-row span.label {\r\n      color: var(--text-muted);\r\n    }\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n  <div class=\"page\">\r\n    <!-- \u9876\u90e8\u83dc\u5355 -->\r\n    <div class=\"top-nav\">\r\n      <button class=\"nav-btn active\" id=\"navFx\">\r\n        <span class=\"dot\"><\/span>\r\n        \u6cd5\u5e01\u6c47\u7387\u6362\u7b97\r\n      <\/button>\r\n      <button class=\"nav-btn\" id=\"navWeight\">\r\n        <span class=\"dot\"><\/span>\r\n        \u91cd\u91cf & \u4ef7\u683c\u6362\u7b97\u5668\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <!-- \u6cd5\u5e01\u6c47\u7387\u6362\u7b97 -->\r\n    <div id=\"fxSection\" class=\"card section-panel active-panel\">\r\n      <div class=\"card-header\">\r\n        <div class=\"title\">\u6cd5\u5e01\u6c47\u7387\u6362\u7b97<\/div>\r\n        <div class=\"subtitle\">\r\n          \u652f\u6301\u7f8e\u5143 \/ \u4eba\u6c11\u5e01 \/ \u6e2f\u5e01 \/ \u6b27\u5143 \/ \u82f1\u9551 \/ \u65e5\u5143 \/ \u65b0\u52a0\u5761\u5e01 \/ \u9a6c\u6765\u897f\u4e9a\u5e01 \/ \u97e9\u5143 \/ \u6cf0\u94e2 \/ \u53f0\u5e01 (TWD)\r\n          \u4e4b\u95f4\u7684\u5b9e\u65f6\u6c47\u7387\u6362\u7b97\u3002\u8f93\u5165\u4efb\u610f\u91d1\u989d\u4e0e\u57fa\u7840\u8d27\u5e01\uff0c\u9009\u62e9\u76ee\u6807\u8d27\u5e01\u5373\u53ef\u770b\u5230\u6362\u7b97\u7ed3\u679c\u3002\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"fx-layout\">\r\n        <div class=\"fx-left\">\r\n          <div class=\"section-title\">\r\n            <span>\u8f93\u5165\u91d1\u989d & \u57fa\u7840\u8d27\u5e01<\/span>\r\n            <small>\u4f8b\u5982\uff1a1 \u6216 2 \u7f8e\u5143<\/small>\r\n          <\/div>\r\n          <div class=\"input-group\" style=\"margin-bottom:8px;\">\r\n            <label for=\"fxAmount\">\u91d1\u989d<\/label>\r\n            <div class=\"input-wrapper\">\r\n              <input id=\"fxAmount\" type=\"number\" min=\"0\" step=\"0.0001\" placeholder=\"\u8bf7\u8f93\u5165\u91d1\u989d\uff0c\u4f8b\u5982 1\" \/>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"input-group\">\r\n            <label for=\"fxBase\">\u57fa\u7840\u8d27\u5e01<\/label>\r\n            <select id=\"fxBase\"><\/select>\r\n          <\/div>\r\n          <div class=\"fx-status\" id=\"fxStatusFx\">\u6b63\u5728\u52a0\u8f7d\u5b9e\u65f6\u6c47\u7387...<\/div>\r\n        <\/div>\r\n\r\n        <div class=\"fx-right\">\r\n          <div class=\"section-title\">\r\n            <span>\u76ee\u6807\u8d27\u5e01<\/span>\r\n            <small>\u9009\u62e9\u8981\u6362\u7b97\u6210\u54ea\u79cd\u6cd5\u5e01<\/small>\r\n          <\/div>\r\n          <div class=\"input-group\" style=\"margin-bottom:8px;\">\r\n            <label for=\"fxTarget\">\u76ee\u6807\u8d27\u5e01<\/label>\r\n            <select id=\"fxTarget\"><\/select>\r\n          <\/div>\r\n          <div class=\"fx-result-card\">\r\n            <div class=\"fx-result-label\">\u6362\u7b97\u7ed3\u679c\uff1a<\/div>\r\n            <div class=\"fx-result-main\" id=\"fxResultMain\">-<\/div>\r\n            <div class=\"fx-rate-info\" id=\"fxRateInfo\">\u6c47\u7387\u4fe1\u606f\uff1a-<\/div>\r\n            <div class=\"fx-rate-update\" id=\"fxRateUpdate\">\u6700\u65b0\u6c47\u7387\uff1a--<\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"help-text\">\r\n        \u63d0\u793a\uff1a\u6c47\u7387\u4f1a\u81ea\u52a8\u6bcf 30 \u79d2\u66f4\u65b0\u4e00\u6b21\uff0c\u4e0b\u65b9\u6709\u4e0b\u4e00\u6b21\u81ea\u52a8\u66f4\u65b0\u7684\u5012\u8ba1\u65f6\u3002\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- \u91cd\u91cf & \u4ef7\u683c\u6362\u7b97\u5668 -->\r\n    <div id=\"weightSection\" class=\"card section-panel\">\r\n      <div class=\"card-header\">\r\n        <div class=\"title\">\u91cd\u91cf & \u4ef7\u683c\u6362\u7b97\u5668<\/div>\r\n        <div class=\"subtitle\">\r\n          \u652f\u6301\u76ce\u53f8 \/ \u78c5 \/ \u514b \/ \u65a4 \/ \u5343\u514b\u4e92\u76f8\u6362\u7b97\uff0c\u5e76\u6309\u4efb\u610f\u5355\u4f4d\u5355\u4ef7\u8ba1\u7b97\u603b\u4ef7\u3002\r\n          \u8fd8\u53ef\u4ee5\u628a\u300c\u67d0\u8d27\u5e01 \/ \u67d0\u91cd\u91cf\u5355\u4f4d\u300d\u6298\u7b97\u4e3a\u300c\u76ee\u6807\u8d27\u5e01 \/ \u76ee\u6807\u91cd\u91cf\u5355\u4f4d\u300d\u3002\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- \u4e0a\u534a\u90e8\u5206\uff1a\u91cd\u91cf + \u5355\u4ef7 -->\r\n      <div class=\"top-layout\">\r\n        <!-- \u5de6\uff1a\u91cd\u91cf -->\r\n        <div class=\"top-left\">\r\n          <div class=\"section-title\">\r\n            <span>\u91cd\u91cf\u8f93\u5165<\/span>\r\n            <small>\u4efb\u610f\u4e00\u4e2a\u8f93\u5165\u5373\u53ef\uff0c\u5176\u4ed6\u81ea\u52a8\u6362\u7b97<\/small>\r\n          <\/div>\r\n          <div class=\"weight-grid\">\r\n            <div class=\"input-group\">\r\n              <label for=\"oz\">\u76ce\u53f8 (oz)<\/label>\r\n              <div class=\"input-wrapper\">\r\n                <input id=\"oz\" type=\"number\" min=\"0\" step=\"0.0001\" placeholder=\"\u4f8b\u5982 1\" \/>\r\n                <span class=\"unit\">oz<\/span>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"input-group\">\r\n              <label for=\"lb\">\u78c5 (lb)<\/label>\r\n              <div class=\"input-wrapper\">\r\n                <input id=\"lb\" type=\"number\" min=\"0\" step=\"0.0001\" placeholder=\"\u81ea\u52a8\u8ba1\u7b97\" \/>\r\n                <span class=\"unit\">lb<\/span>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"input-group\">\r\n              <label for=\"g\">\u514b (g)<\/label>\r\n              <div class=\"input-wrapper\">\r\n                <input id=\"g\" type=\"number\" min=\"0\" step=\"0.01\" placeholder=\"\u81ea\u52a8\u8ba1\u7b97\" \/>\r\n                <span class=\"unit\">g<\/span>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"input-group\">\r\n              <label for=\"jin\">\u65a4 (\u5e02\u65a4)<\/label>\r\n              <div class=\"input-wrapper\">\r\n                <input id=\"jin\" type=\"number\" min=\"0\" step=\"0.0001\" placeholder=\"\u81ea\u52a8\u8ba1\u7b97\" \/>\r\n                <span class=\"unit\">\u65a4<\/span>\r\n              <\/div>\r\n            <\/div>\r\n            <div class=\"input-group\">\r\n              <label for=\"kg\">\u5343\u514b (kg)<\/label>\r\n              <div class=\"input-wrapper\">\r\n                <input id=\"kg\" type=\"number\" min=\"0\" step=\"0.0001\" placeholder=\"\u81ea\u52a8\u8ba1\u7b97\" \/>\r\n                <span class=\"unit\">kg<\/span>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <!-- \u53f3\uff1a\u5355\u4ef7\u8bbe\u7f6e -->\r\n        <div class=\"top-right\">\r\n          <div class=\"section-title\">\r\n            <span>\u5355\u4ef7\u8bbe\u7f6e<\/span>\r\n            <small>\u5982\uff1a4223 \u7f8e\u5143 \/ \u76ce\u53f8<\/small>\r\n          <\/div>\r\n          <div class=\"price-row\">\r\n            <div class=\"input-group\">\r\n              <label for=\"price\">\u5355\u4ef7<\/label>\r\n              <div class=\"input-wrapper\">\r\n                <input id=\"price\" type=\"number\" min=\"0\" step=\"0.0001\" placeholder=\"\u8f93\u5165\u5355\u4ef7\" \/>\r\n                <span class=\"unit\" id=\"currencyLabel\">\u8d27\u5e01 \/ \u5355\u4f4d<\/span>\r\n              <\/div>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"price-row\" style=\"margin-top: 6px;\">\r\n            <div class=\"input-group\">\r\n              <label for=\"priceUnit\">\u5355\u4ef7\u91cd\u91cf\u5355\u4f4d<\/label>\r\n              <select id=\"priceUnit\">\r\n                <option value=\"oz\">\u6bcf 1 \u76ce\u53f8<\/option>\r\n                <option value=\"lb\">\u6bcf 1 \u78c5<\/option>\r\n                <option value=\"g\">\u6bcf 1 \u514b<\/option>\r\n                <option value=\"kg\">\u6bcf 1 \u5343\u514b<\/option>\r\n                <option value=\"jin\">\u6bcf 1 \u65a4<\/option>\r\n              <\/select>\r\n            <\/div>\r\n            <div class=\"input-group\">\r\n              <label for=\"currencySelect\">\u8f93\u5165\u4ef7\u683c\u7684\u8d27\u5e01<\/label>\r\n              <select id=\"currencySelect\"><\/select>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"fx-status\" id=\"fxStatusWeight\">\u6b63\u5728\u52a0\u8f7d\u5b9e\u65f6\u6c47\u7387...<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- \u9ad8\u4eae\u7ed3\u679c\uff1a\u603b\u4ef7 + \u81ea\u5b9a\u4e49\u6298\u7b97 -->\r\n      <div class=\"highlight-layout\">\r\n        <div class=\"total-card\">\r\n          <div>\u5f53\u524d\u603b\u91cd\u91cf\uff1a<\/div>\r\n          <div style=\"margin-top:4px; font-size:13px;\">\r\n            <span id=\"summaryWeight\">-<\/span>\r\n          <\/div>\r\n          <div style=\"margin-top:6px;\">\u9884\u4f30\u603b\u4ef7\uff1a<\/div>\r\n          <strong id=\"totalPrice\">-<\/strong>\r\n        <\/div>\r\n\r\n        <div class=\"custom-card\">\r\n          <div class=\"custom-top\">\r\n            <div class=\"custom-top-title\">\u81ea\u5b9a\u4e49\u6298\u7b97\uff1a\u76ee\u6807\u8d27\u5e01 & \u91cd\u91cf\u5355\u4f4d<\/div>\r\n            <div class=\"custom-controls\">\r\n              <select id=\"customWeightUnit\">\r\n                <option value=\"g\">\u514b (g)<\/option>\r\n                <option value=\"kg\">\u5343\u514b (kg)<\/option>\r\n                <option value=\"oz\">\u76ce\u53f8 (oz)<\/option>\r\n                <option value=\"lb\">\u78c5 (lb)<\/option>\r\n                <option value=\"jin\">\u65a4<\/option>\r\n              <\/select>\r\n              <select id=\"customCurrency\"><\/select>\r\n            <\/div>\r\n          <\/div>\r\n          <div class=\"custom-result-label\">\u4f8b\u5982\uff1a4223 USD \/ oz \u2192 ? CNY \/ g<\/div>\r\n          <div class=\"custom-result-value\" id=\"customPriceText\">-<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- \u8be6\u7ec6\u5404\u5355\u4f4d\u5355\u4ef7 -->\r\n      <div class=\"sub-section\">\r\n        <div style=\"font-weight:600;\">\u6309\u5f53\u524d\u5355\u4ef7\u6362\u7b97\uff08\u4f7f\u7528\u4e0a\u65b9\u8f93\u5165\u8d27\u5e01\uff09\uff1a<\/div>\r\n        <div class=\"unit-prices-row\">\r\n          <span class=\"label\">\u6bcf\u514b\uff1a<\/span>\r\n          <span id=\"pricePerG\">-<\/span>\r\n        <\/div>\r\n        <div class=\"unit-prices-row\">\r\n          <span class=\"label\">\u6bcf\u5343\u514b\uff1a<\/span>\r\n          <span id=\"pricePerKg\">-<\/span>\r\n        <\/div>\r\n        <div class=\"unit-prices-row\">\r\n          <span class=\"label\">\u6bcf\u76ce\u53f8\uff1a<\/span>\r\n          <span id=\"pricePerOz\">-<\/span>\r\n        <\/div>\r\n        <div class=\"unit-prices-row\">\r\n          <span class=\"label\">\u6bcf\u78c5\uff1a<\/span>\r\n          <span id=\"pricePerLb\">-<\/span>\r\n        <\/div>\r\n        <div class=\"unit-prices-row\">\r\n          <span class=\"label\">\u6bcf\u65a4\uff1a<\/span>\r\n          <span id=\"pricePerJin\">-<\/span>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"help-text\">\r\n        \u7528\u6cd5\u793a\u4f8b\uff1a\u8f93\u5165\u91cd\u91cf 1 \u76ce\u53f8 \u2192 \u81ea\u52a8\u7b97\u51fa g \/ lb \/ kg \/ \u65a4\uff1b\r\n        \u518d\u8f93\u5165\u300c\u5355\u4ef7 = 4223\uff0c\u8d27\u5e01 = \u7f8e\u5143\uff0c\u5355\u4ef7\u5355\u4f4d = \u6bcf 1 \u76ce\u53f8\u300d\u3002\r\n        \u53f3\u4fa7\u5361\u7247\u4e2d\uff0c\u9009\u62e9\u300c\u514b + \u4eba\u6c11\u5e01\u300d\u5373\u53ef\u770b\u5230\r\n        \u300c4223 \u7f8e\u5143 \/ \u76ce\u53f8 = ? \u4eba\u6c11\u5e01 \/ \u514b\u300d\u3002\r\n      <\/div>\r\n\r\n      <div class=\"footer\">\r\n        <span>\u6362\u7b97\uff1a1 oz = 28.349523125 g\uff0c1 lb = 453.59237 g\uff0c1 \u65a4 \u2248 500 g\uff0c1 kg = 1000 g<\/span>\r\n        <span>\u7eaf\u524d\u7aef\u9875\u9762\uff0c\u53ef\u76f4\u63a5\u672c\u5730\u6253\u5f00\u4f7f\u7528<\/span>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    \/\/ ===== \u5e38\u91cf & \u6570\u636e =====\r\n    const OZ_TO_G = 28.349523125;\r\n    const LB_TO_G = 453.59237;\r\n    const JIN_TO_G = 500;\r\n    const KG_TO_G = 1000;\r\n\r\n    const CURRENCIES = [\r\n      { code: \"USD\", label: \"\u7f8e\u5143 (USD)\", symbol: \"$\" },\r\n      { code: \"CNY\", label: \"\u4eba\u6c11\u5e01 (CNY)\", symbol: \"\u00a5\" },\r\n      { code: \"HKD\", label: \"\u6e2f\u5e01 (HKD)\", symbol: \"HK$\" },\r\n      { code: \"EUR\", label: \"\u6b27\u5143 (EUR)\", symbol: \"\u20ac\" },\r\n      { code: \"GBP\", label: \"\u82f1\u9551 (GBP)\", symbol: \"\u00a3\" },\r\n      { code: \"JPY\", label: \"\u65e5\u5143 (JPY)\", symbol: \"\u00a5\" },\r\n      { code: \"SGD\", label: \"\u65b0\u52a0\u5761\u5e01 (SGD)\", symbol: \"S$\" },\r\n      { code: \"MYR\", label: \"\u9a6c\u6765\u897f\u4e9a\u5e01 (MYR)\", symbol: \"RM\" },\r\n      { code: \"KRW\", label: \"\u97e9\u5143 (KRW)\", symbol: \"\u20a9\" },\r\n      { code: \"THB\", label: \"\u6cf0\u94e2 (THB)\", symbol: \"\u0e3f\" },\r\n      { code: \"TWD\", label: \"\u65b0\u53f0\u5e01 (TWD)\", symbol: \"NT$\" }  \/\/ \u65b0\u589e\u53f0\u5e01\r\n    ];\r\n\r\n    function getCurrencyInfo(code) {\r\n      return CURRENCIES.find(c => c.code === code) || CURRENCIES[0];\r\n    }\r\n\r\n    function round(value, decimals) {\r\n      const factor = Math.pow(10, decimals);\r\n      return Math.round(value * factor) \/ factor;\r\n    }\r\n\r\n    function formatCurrency(value, code) {\r\n      if (!isFinite(value)) return \"-\";\r\n      const info = getCurrencyInfo(code);\r\n      return info.symbol + round(value, 4) + \" \/ \u5355\u4f4d (\" + info.code + \")\";\r\n    }\r\n\r\n    function formatCurrencyShort(value, code) {\r\n      if (!isFinite(value)) return \"-\";\r\n      const info = getCurrencyInfo(code);\r\n      return info.symbol + round(value, 2) + \" \" + info.code;\r\n    }\r\n\r\n    function parseNumber(input) {\r\n      const v = parseFloat(input.value);\r\n      return isNaN(v) ? null : v;\r\n    }\r\n\r\n    function formatTime(date) {\r\n      const pad = n => (n < 10 ? \"0\" + n : \"\" + n);\r\n      const y = date.getFullYear();\r\n      const m = pad(date.getMonth() + 1);\r\n      const d = pad(date.getDate());\r\n      const h = pad(date.getHours());\r\n      const mi = pad(date.getMinutes());\r\n      const s = pad(date.getSeconds());\r\n      return y + \"\/\" + m + \"\/\" + d + \" \" + h + \":\" + mi + \":\" + s;\r\n    }\r\n\r\n    \/\/ \u6c47\u7387\u6570\u636e\uff1a\u4ee5 USD \u4e3a\u57fa\u51c6\r\n    let fxRates = null;\r\n    let lastFxUpdate = null;\r\n    let countdownSeconds = 0; \/\/ \u8ddd\u79bb\u4e0b\u4e00\u6b21\u81ea\u52a8\u66f4\u65b0\u7684\u79d2\u6570\r\n\r\n    \/\/ ===== FX DOM =====\r\n    const fxSection = document.getElementById(\"fxSection\");\r\n    const fxAmountInput = document.getElementById(\"fxAmount\");\r\n    const fxBaseSelect = document.getElementById(\"fxBase\");\r\n    const fxTargetSelect = document.getElementById(\"fxTarget\");\r\n    const fxResultMain = document.getElementById(\"fxResultMain\");\r\n    const fxRateInfo = document.getElementById(\"fxRateInfo\");\r\n    const fxRateUpdate = document.getElementById(\"fxRateUpdate\");\r\n    const fxStatusFx = document.getElementById(\"fxStatusFx\");\r\n\r\n    \/\/ ===== \u91cd\u91cf DOM =====\r\n    const weightSection = document.getElementById(\"weightSection\");\r\n    const ozInput = document.getElementById(\"oz\");\r\n    const lbInput = document.getElementById(\"lb\");\r\n    const gInput = document.getElementById(\"g\");\r\n    const jinInput = document.getElementById(\"jin\");\r\n    const kgInput = document.getElementById(\"kg\");\r\n\r\n    const priceInput = document.getElementById(\"price\");\r\n    const priceUnitSelect = document.getElementById(\"priceUnit\");\r\n    const currencySelect = document.getElementById(\"currencySelect\");\r\n    const currencyLabel = document.getElementById(\"currencyLabel\");\r\n\r\n    const customWeightUnitSelect = document.getElementById(\"customWeightUnit\");\r\n    const customCurrencySelect = document.getElementById(\"customCurrency\");\r\n    const customPriceText = document.getElementById(\"customPriceText\");\r\n\r\n    const summaryWeightText = document.getElementById(\"summaryWeight\");\r\n    const totalPriceText = document.getElementById(\"totalPrice\");\r\n    const fxStatusWeight = document.getElementById(\"fxStatusWeight\");\r\n\r\n    const pricePerGText = document.getElementById(\"pricePerG\");\r\n    const pricePerKgText = document.getElementById(\"pricePerKg\");\r\n    const pricePerOzText = document.getElementById(\"pricePerOz\");\r\n    const pricePerLbText = document.getElementById(\"pricePerLb\");\r\n    const pricePerJinText = document.getElementById(\"pricePerJin\");\r\n\r\n    let isUpdating = false;\r\n    let currentGrams = 0;\r\n    let currentCurrency = \"USD\"; \/\/ \u91cd\u91cf\u5de5\u5177\u4e2d\u7684\u8d27\u5e01\r\n    let targetCurrency = \"CNY\"; \/\/ \u81ea\u5b9a\u4e49\u6298\u7b97\u76ee\u6807\u8d27\u5e01\r\n\r\n    \/\/ ===== \u6c47\u7387\u8f6c\u6362 =====\r\n    function convertAmount(amount, fromCode, toCode) {\r\n      if (!fxRates || !fxRates[fromCode] || !fxRates[toCode]) return amount;\r\n      const valueInUSD = amount \/ fxRates[fromCode];\r\n      return valueInUSD * fxRates[toCode];\r\n    }\r\n\r\n    function updateCurrencyLabel() {\r\n      const info = getCurrencyInfo(currentCurrency);\r\n      currencyLabel.textContent = info.symbol + \" \/ \u5355\u4f4d\";\r\n    }\r\n\r\n    \/\/ ===== \u91cd\u91cf\u903b\u8f91 =====\r\n    function updateFromGrams(grams) {\r\n      currentGrams = grams;\r\n\r\n      if (!isFinite(grams) || grams <= 0) {\r\n        ozInput.value = \"\";\r\n        lbInput.value = \"\";\r\n        gInput.value = \"\";\r\n        jinInput.value = \"\";\r\n        kgInput.value = \"\";\r\n        summaryWeightText.textContent = \"-\";\r\n        totalPriceText.textContent = \"-\";\r\n        updateUnitPrices(null);\r\n        return;\r\n      }\r\n\r\n      const oz = grams \/ OZ_TO_G;\r\n      const lb = grams \/ LB_TO_G;\r\n      const jin = grams \/ JIN_TO_G;\r\n      const kg = grams \/ KG_TO_G;\r\n\r\n      gInput.value = round(grams, 2);\r\n      ozInput.value = round(oz, 4);\r\n      lbInput.value = round(lb, 4);\r\n      jinInput.value = round(jin, 4);\r\n      kgInput.value = round(kg, 4);\r\n\r\n      const summary =\r\n        round(grams, 2) +\r\n        \" g \u2248 \" +\r\n        round(oz, 4) +\r\n        \" oz \/ \" +\r\n        round(lb, 4) +\r\n        \" lb \/ \" +\r\n        round(kg, 4) +\r\n        \" kg \/ \" +\r\n        round(jin, 4) +\r\n        \" \u65a4\";\r\n      summaryWeightText.textContent = summary;\r\n\r\n      updatePriceSection();\r\n    }\r\n\r\n    function computePricePerGram() {\r\n      const unitPrice = parseFloat(priceInput.value);\r\n      if (isNaN(unitPrice) || unitPrice <= 0) return null;\r\n\r\n      const unit = priceUnitSelect.value;\r\n      let pricePerGram;\r\n\r\n      switch (unit) {\r\n        case \"g\":\r\n          pricePerGram = unitPrice;\r\n          break;\r\n        case \"kg\":\r\n          pricePerGram = unitPrice \/ KG_TO_G;\r\n          break;\r\n        case \"oz\":\r\n          pricePerGram = unitPrice \/ OZ_TO_G;\r\n          break;\r\n        case \"lb\":\r\n          pricePerGram = unitPrice \/ LB_TO_G;\r\n          break;\r\n        case \"jin\":\r\n          pricePerGram = unitPrice \/ JIN_TO_G;\r\n          break;\r\n        default:\r\n          pricePerGram = null;\r\n      }\r\n\r\n      return pricePerGram;\r\n    }\r\n\r\n    function updateCustomConversion(pricePerGram) {\r\n      if (pricePerGram === null || !isFinite(pricePerGram) || pricePerGram <= 0) {\r\n        customPriceText.textContent = \"-\";\r\n        return;\r\n      }\r\n\r\n      const unit = customWeightUnitSelect.value;\r\n      const targetCur = targetCurrency;\r\n\r\n      let amountInInputCurrency;\r\n      switch (unit) {\r\n        case \"g\":\r\n          amountInInputCurrency = pricePerGram;\r\n          break;\r\n        case \"kg\":\r\n          amountInInputCurrency = pricePerGram * KG_TO_G;\r\n          break;\r\n        case \"oz\":\r\n          amountInInputCurrency = pricePerGram * OZ_TO_G;\r\n          break;\r\n        case \"lb\":\r\n          amountInInputCurrency = pricePerGram * LB_TO_G;\r\n          break;\r\n        case \"jin\":\r\n          amountInInputCurrency = pricePerGram * JIN_TO_G;\r\n          break;\r\n        default:\r\n          amountInInputCurrency = pricePerGram;\r\n      }\r\n\r\n      const converted = convertAmount(amountInInputCurrency, currentCurrency, targetCur);\r\n      const info = getCurrencyInfo(targetCur);\r\n      const unitLabel = unit === \"jin\" ? \"\u65a4\" : unit;\r\n\r\n      customPriceText.textContent =\r\n        info.symbol + round(converted, 4) + \" \/ \" + unitLabel + \" (\" + info.code + \")\";\r\n    }\r\n\r\n    function updateUnitPrices(pricePerGram) {\r\n      if (pricePerGram === null || !isFinite(pricePerGram) || pricePerGram <= 0) {\r\n        pricePerGText.textContent = \"-\";\r\n        pricePerKgText.textContent = \"-\";\r\n        pricePerOzText.textContent = \"-\";\r\n        pricePerLbText.textContent = \"-\";\r\n        pricePerJinText.textContent = \"-\";\r\n        updateCustomConversion(null);\r\n        return;\r\n      }\r\n\r\n      const cur = currentCurrency;\r\n\r\n      const perG = pricePerGram;\r\n      const perKg = pricePerGram * KG_TO_G;\r\n      const perOz = pricePerGram * OZ_TO_G;\r\n      const perLb = pricePerGram * LB_TO_G;\r\n      const perJin = pricePerGram * JIN_TO_G;\r\n\r\n      pricePerGText.textContent = formatCurrency(perG, cur).replace(\" \/ \u5355\u4f4d\", \" \/ g\");\r\n      pricePerKgText.textContent = formatCurrency(perKg, cur).replace(\" \/ \u5355\u4f4d\", \" \/ kg\");\r\n      pricePerOzText.textContent = formatCurrency(perOz, cur).replace(\" \/ \u5355\u4f4d\", \" \/ oz\");\r\n      pricePerLbText.textContent = formatCurrency(perLb, cur).replace(\" \/ \u5355\u4f4d\", \" \/ lb\");\r\n      pricePerJinText.textContent = formatCurrency(perJin, cur).replace(\" \/ \u5355\u4f4d\", \" \/ \u65a4\");\r\n\r\n      updateCustomConversion(pricePerGram);\r\n    }\r\n\r\n    function updatePriceSection() {\r\n      const pricePerGram = computePricePerGram();\r\n      updateUnitPrices(pricePerGram);\r\n\r\n      if (\r\n        pricePerGram === null ||\r\n        !isFinite(pricePerGram) ||\r\n        pricePerGram <= 0 ||\r\n        !currentGrams ||\r\n        currentGrams <= 0\r\n      ) {\r\n        totalPriceText.textContent = \"-\";\r\n        return;\r\n      }\r\n\r\n      const cur = currentCurrency;\r\n      const total = currentGrams * pricePerGram;\r\n      totalPriceText.textContent = formatCurrencyShort(total, cur);\r\n    }\r\n\r\n    \/\/ \u91cd\u91cf\u8f93\u5165\u4e8b\u4ef6\r\n    function handleOzChange() {\r\n      if (isUpdating) return;\r\n      isUpdating = true;\r\n      const oz = parseNumber(ozInput);\r\n      if (oz === null || oz <= 0) {\r\n        updateFromGrams(0);\r\n        isUpdating = false;\r\n        return;\r\n      }\r\n      updateFromGrams(oz * OZ_TO_G);\r\n      isUpdating = false;\r\n    }\r\n\r\n    function handleLbChange() {\r\n      if (isUpdating) return;\r\n      isUpdating = true;\r\n      const lb = parseNumber(lbInput);\r\n      if (lb === null || lb <= 0) {\r\n        updateFromGrams(0);\r\n        isUpdating = false;\r\n        return;\r\n      }\r\n      updateFromGrams(lb * LB_TO_G);\r\n      isUpdating = false;\r\n    }\r\n\r\n    function handleGChange() {\r\n      if (isUpdating) return;\r\n      isUpdating = true;\r\n      const grams = parseNumber(gInput);\r\n      if (grams === null || grams <= 0) {\r\n        updateFromGrams(0);\r\n        isUpdating = false;\r\n        return;\r\n      }\r\n      updateFromGrams(grams);\r\n      isUpdating = false;\r\n    }\r\n\r\n    function handleJinChange() {\r\n      if (isUpdating) return;\r\n      isUpdating = true;\r\n      const jin = parseNumber(jinInput);\r\n      if (jin === null || jin <= 0) {\r\n        updateFromGrams(0);\r\n        isUpdating = false;\r\n        return;\r\n      }\r\n      updateFromGrams(jin * JIN_TO_G);\r\n      isUpdating = false;\r\n    }\r\n\r\n    function handleKgChange() {\r\n      if (isUpdating) return;\r\n      isUpdating = true;\r\n      const kg = parseNumber(kgInput);\r\n      if (kg === null || kg <= 0) {\r\n        updateFromGrams(0);\r\n        isUpdating = false;\r\n        return;\r\n      }\r\n      updateFromGrams(kg * KG_TO_G);\r\n      isUpdating = false;\r\n    }\r\n\r\n    ozInput.addEventListener(\"input\", handleOzChange);\r\n    lbInput.addEventListener(\"input\", handleLbChange);\r\n    gInput.addEventListener(\"input\", handleGChange);\r\n    jinInput.addEventListener(\"input\", handleJinChange);\r\n    kgInput.addEventListener(\"input\", handleKgChange);\r\n\r\n    priceInput.addEventListener(\"input\", updatePriceSection);\r\n    priceUnitSelect.addEventListener(\"change\", updatePriceSection);\r\n    customWeightUnitSelect.addEventListener(\"change\", updatePriceSection);\r\n    customCurrencySelect.addEventListener(\"change\", function () {\r\n      targetCurrency = customCurrencySelect.value;\r\n      updatePriceSection();\r\n    });\r\n\r\n    \/\/ ===== FX \u663e\u793a\u5012\u8ba1\u65f6 =====\r\n    function updateFxUpdateDisplay(message) {\r\n      if (!fxRateUpdate) return;\r\n      if (message) {\r\n        fxRateUpdate.textContent = message;\r\n        return;\r\n      }\r\n      if (!lastFxUpdate) {\r\n        fxRateUpdate.textContent = \"\u6700\u65b0\u6c47\u7387\uff1a\u66f4\u65b0\u4e2d...\";\r\n        return;\r\n      }\r\n      const ts = formatTime(lastFxUpdate);\r\n      const sec = countdownSeconds > 0 ? countdownSeconds : 0;\r\n      fxRateUpdate.textContent = \"\u6700\u65b0\u6c47\u7387\uff1a\" + ts + \"\uff08\" + sec + \"s \u540e\u81ea\u52a8\u66f4\u65b0\uff09\";\r\n    }\r\n\r\n    \/\/ ===== FX \u8f6c\u6362\u903b\u8f91 =====\r\n    function updateFxResult() {\r\n      const amount = parseFloat(fxAmountInput.value);\r\n      const base = fxBaseSelect.value;\r\n      const target = fxTargetSelect.value;\r\n\r\n      if (!fxRates) {\r\n        fxResultMain.textContent = \"\u6c47\u7387\u672a\u5c31\u7eea\";\r\n        fxRateInfo.textContent = \"\u8bf7\u7a0d\u540e\u91cd\u8bd5\";\r\n        return;\r\n      }\r\n\r\n      if (isNaN(amount)) {\r\n        fxResultMain.textContent = \"-\";\r\n        fxRateInfo.textContent = \"\u8bf7\u8f93\u5165\u91d1\u989d\";\r\n        return;\r\n      }\r\n\r\n      const converted = convertAmount(amount, base, target);\r\n      const baseInfo = getCurrencyInfo(base);\r\n      const targetInfo = getCurrencyInfo(target);\r\n      const rate = convertAmount(1, base, target);\r\n\r\n      fxResultMain.textContent =\r\n        baseInfo.symbol +\r\n        round(amount, 4) +\r\n        \" \" +\r\n        base +\r\n        \" \u2248 \" +\r\n        targetInfo.symbol +\r\n        round(converted, 4) +\r\n        \" \" +\r\n        target;\r\n      fxRateInfo.textContent =\r\n        \"\u6c47\u7387\uff1a 1 \" + base + \" \u2248 \" + targetInfo.symbol + round(rate, 6) + \" \" + target;\r\n    }\r\n\r\n    fxAmountInput.addEventListener(\"input\", updateFxResult);\r\n    fxBaseSelect.addEventListener(\"change\", updateFxResult);\r\n    fxTargetSelect.addEventListener(\"change\", updateFxResult);\r\n\r\n    \/\/ ===== \u521d\u59cb\u5316\u4e0b\u62c9 & \u6c47\u7387 =====\r\n    function initCurrencySelects() {\r\n      CURRENCIES.forEach(function (cur) {\r\n        var opt1 = document.createElement(\"option\");\r\n        opt1.value = cur.code;\r\n        opt1.textContent = cur.label;\r\n        currencySelect.appendChild(opt1);\r\n\r\n        var opt2 = document.createElement(\"option\");\r\n        opt2.value = cur.code;\r\n        opt2.textContent = cur.label;\r\n        customCurrencySelect.appendChild(opt2);\r\n\r\n        var optFxBase = document.createElement(\"option\");\r\n        optFxBase.value = cur.code;\r\n        optFxBase.textContent = cur.label;\r\n        fxBaseSelect.appendChild(optFxBase);\r\n\r\n        var optFxTarget = document.createElement(\"option\");\r\n        optFxTarget.value = cur.code;\r\n        optFxTarget.textContent = cur.label;\r\n        fxTargetSelect.appendChild(optFxTarget);\r\n      });\r\n\r\n      currencySelect.value = currentCurrency;\r\n      customCurrencySelect.value = targetCurrency;\r\n\r\n      fxBaseSelect.value = \"USD\";\r\n      fxTargetSelect.value = \"CNY\";\r\n\r\n      updateCurrencyLabel();\r\n    }\r\n\r\n    function fetchFxRates(fromAuto) {\r\n      updateFxUpdateDisplay(\"\u6700\u65b0\u6c47\u7387\uff1a\u66f4\u65b0\u4e2d...\");\r\n      fetch(\"https:\/\/open.er-api.com\/v6\/latest\/USD\")\r\n        .then(function (res) {\r\n          return res.json();\r\n        })\r\n        .then(function (data) {\r\n          if (data && data.result === \"success\" && data.rates) {\r\n            fxRates = data.rates;\r\n            lastFxUpdate = new Date();\r\n            countdownSeconds = 30; \/\/ \u6210\u529f\u540e\u91cd\u7f6e 30 \u79d2\r\n\r\n            var ts = formatTime(lastFxUpdate);\r\n            var commonText = \"\u6c47\u7387\u5df2\u66f4\u65b0\uff08\u57fa\u51c6\uff1a USD \uff0c\u6700\u8fd1\uff1a\" + ts + \"\uff09\";\r\n\r\n            if (fxStatusWeight) {\r\n              fxStatusWeight.textContent = commonText;\r\n              fxStatusWeight.classList.remove(\"error\");\r\n            }\r\n            if (fxStatusFx) {\r\n              fxStatusFx.textContent = commonText;\r\n              fxStatusFx.classList.remove(\"error\");\r\n            }\r\n\r\n            updateFxUpdateDisplay();\r\n            updateFxResult();\r\n            updatePriceSection();\r\n          } else {\r\n            if (fxStatusWeight) {\r\n              fxStatusWeight.textContent = \"\u6c47\u7387\u63a5\u53e3\u5f02\u5e38\uff0c\u91d1\u989d\u4ec5\u4f5c\u663e\u793a\uff0c\u4e0d\u8fdb\u884c\u81ea\u52a8\u6362\u7b97\";\r\n              fxStatusWeight.classList.add(\"error\");\r\n            }\r\n            if (fxStatusFx) {\r\n              fxStatusFx.textContent = \"\u6c47\u7387\u63a5\u53e3\u5f02\u5e38\uff0c\u91d1\u989d\u4ec5\u4f5c\u663e\u793a\uff0c\u4e0d\u8fdb\u884c\u81ea\u52a8\u6362\u7b97\";\r\n              fxStatusFx.classList.add(\"error\");\r\n            }\r\n            updateFxUpdateDisplay(\"\u6700\u65b0\u6c47\u7387\uff1a\u83b7\u53d6\u5931\u8d25\uff0c\u5c06\u5728\u7a0d\u540e\u91cd\u8bd5\");\r\n          }\r\n        })\r\n        .catch(function () {\r\n          if (fxStatusWeight) {\r\n            fxStatusWeight.textContent = \"\u65e0\u6cd5\u83b7\u53d6\u6c47\u7387\uff0c\u91d1\u989d\u4ec5\u4f5c\u663e\u793a\uff0c\u4e0d\u8fdb\u884c\u81ea\u52a8\u6362\u7b97\";\r\n            fxStatusWeight.classList.add(\"error\");\r\n          }\r\n          if (fxStatusFx) {\r\n            fxStatusFx.textContent = \"\u65e0\u6cd5\u83b7\u53d6\u6c47\u7387\uff0c\u91d1\u989d\u4ec5\u4f5c\u663e\u793a\uff0c\u4e0d\u8fdb\u884c\u81ea\u52a8\u6362\u7b97\";\r\n            fxStatusFx.classList.add(\"error\");\r\n          }\r\n          updateFxUpdateDisplay(\"\u6700\u65b0\u6c47\u7387\uff1a\u7f51\u7edc\u9519\u8bef\uff0c\u5c06\u5728\u7a0d\u540e\u91cd\u8bd5\");\r\n        });\r\n    }\r\n\r\n    \/\/ \u5012\u8ba1\u65f6\u5b9a\u65f6\u5668\uff1a\u6bcf\u79d2 -1\uff0c\u5230 0 \u65f6\u81ea\u52a8\u5237\u65b0\u6c47\u7387\r\n    setInterval(function () {\r\n      if (countdownSeconds > 0) {\r\n        countdownSeconds -= 1;\r\n        if (countdownSeconds <= 0) {\r\n          fetchFxRates(true);\r\n        } else {\r\n          updateFxUpdateDisplay();\r\n        }\r\n      }\r\n    }, 1000);\r\n\r\n    \/\/ ===== \u9876\u90e8\u83dc\u5355\u5207\u6362 =====\r\n    const navFx = document.getElementById(\"navFx\");\r\n    const navWeight = document.getElementById(\"navWeight\");\r\n\r\n    function showSection(name) {\r\n      if (name === \"fx\") {\r\n        fxSection.classList.add(\"active-panel\");\r\n        weightSection.classList.remove(\"active-panel\");\r\n        navFx.classList.add(\"active\");\r\n        navWeight.classList.remove(\"active\");\r\n      } else {\r\n        weightSection.classList.add(\"active-panel\");\r\n        fxSection.classList.remove(\"active-panel\");\r\n        navWeight.classList.add(\"active\");\r\n        navFx.classList.remove(\"active\");\r\n      }\r\n    }\r\n\r\n    navFx.addEventListener(\"click\", function () {\r\n      showSection(\"fx\");\r\n    });\r\n    navWeight.addEventListener(\"click\", function () {\r\n      showSection(\"weight\");\r\n    });\r\n\r\n    \/\/ ===== \u542f\u52a8 =====\r\n    initCurrencySelects();\r\n    fetchFxRates(false); \/\/ \u9996\u6b21\u62c9\u53d6\r\n    showSection(\"fx\"); \/\/ \u9ed8\u8ba4\u6253\u5f00\u6cd5\u5e01\u6c47\u7387\u9875\r\n  <\/script>\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u6cd5\u5e01\u6c47\u7387 &#038; \u91cd\u91cf\u4ef7\u683c\u6362\u7b97\u5668 \u6cd5\u5e01\u6c47\u7387\u6362\u7b97 \u91cd\u91cf &#038; \u4ef7\u683c\u6362\u7b97\u5668 \u6cd5\u5e01\u6c47\u7387\u6362\u7b97 \u652f\u6301\u7f8e\u5143  &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/jdssl.top\/index.php\/danwei\/\"> <span class=\"screen-reader-text\">\u5355\u4f4d\u6362\u7b97<\/span> \u67e5\u770b\u5168\u6587 &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"_uag_custom_page_level_css":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"class_list":["post-32212","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"xiaoji","author_link":"https:\/\/jdssl.top\/index.php\/author\/bogond\/"},"uagb_comment_info":0,"uagb_excerpt":"\u6cd5\u5e01\u6c47\u7387 &#038; \u91cd\u91cf\u4ef7\u683c\u6362\u7b97\u5668 \u6cd5\u5e01\u6c47\u7387\u6362\u7b97 \u91cd\u91cf &#038; \u4ef7\u683c\u6362\u7b97\u5668 \u6cd5\u5e01\u6c47\u7387\u6362\u7b97 \u652f\u6301\u7f8e\u5143 &hellip;","_links":{"self":[{"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/pages\/32212","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/comments?post=32212"}],"version-history":[{"count":11,"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/pages\/32212\/revisions"}],"predecessor-version":[{"id":32223,"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/pages\/32212\/revisions\/32223"}],"wp:attachment":[{"href":"https:\/\/jdssl.top\/index.php\/wp-json\/wp\/v2\/media?parent=32212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}