
{"id":13290,"date":"2025-12-04T05:50:07","date_gmt":"2025-12-04T05:50:07","guid":{"rendered":"https:\/\/bluetti.com\/?page_id=13290"},"modified":"2026-03-27T08:10:00","modified_gmt":"2026-03-27T08:10:00","slug":"get-more-product-info","status":"publish","type":"page","link":"https:\/\/bluetti.com\/es\/get-more-product-info\/","title":{"rendered":""},"content":{"rendered":"<!-- wp:html -->\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>Get More Product Info - BLUETTI<\/title>\n  <!-- \u5f15\u5165 PDF.js \u548c JSZip\u3001FileSaver \u7528\u4e8e\u6e32\u67d3\u548c\u4e0b\u8f7d -->\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.min.js\"><\/script>\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jszip\/3.10.1\/jszip.min.js\"><\/script>\n  <script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/FileSaver.js\/2.0.5\/FileSaver.min.js\"><\/script>\n  <style>\n    footer {\n      display: none !important;\n    }\n\n    :root {\n      --primary-color: #0071E3;\n      --text-main: #1D1D1F;\n      --text-secondary: #6E6E73;\n    }\n\n    .pattnerpolicy_banner.bg_tran {\n      display: none;\n    }\n\n    .container {\n      max-width: 960px;\n      margin: 0 auto;\n      padding: 60px 20px;\n    }\n\n    @media (max-width: 768px) {\n      .container {\n        padding: 40px 20px;\n      }\n    }\n\n    \/* Message States *\/\n    .message-container {\n      display: none;\n      text-align: center;\n      padding: 40px 20px;\n      flex-direction: column;\n      align-items: center;\n      justify-content: center;\n      animation: fadeIn 0.5s ease;\n    }\n\n    .message-container.show {\n      display: flex;\n    }\n\n    .sub-message-text {\n      font-size: 16px;\n      color: var(--text-secondary);\n      margin-bottom: 32px;\n      margin-top: 0;\n    }\n\n    .action-btn {\n      min-width: 200px;\n      height: 48px;\n      background-color: var(--primary-color);\n      color: white;\n      border: none;\n      border-radius: 24px;\n      font-size: 16px;\n      font-weight: 500;\n      cursor: pointer;\n      transition: background-color 0.3s;\n    }\n\n    .action-btn:hover {\n      background-color: #0077ED;\n    }\n\n    @keyframes fadeIn {\n      from {\n        opacity: 0;\n        transform: translateY(10px);\n      }\n\n      to {\n        opacity: 1;\n        transform: translateY(0);\n      }\n    }\n\n    \/* \u9aa8\u67b6\u5c4f\u6837\u5f0f *\/\n    @keyframes shimmer {\n      0% {\n        background-position: -1000px 0;\n      }\n\n      100% {\n        background-position: 1000px 0;\n      }\n    }\n\n    .skeleton {\n      background: #f6f7f8;\n      background-image: linear-gradient(90deg, #f6f7f8 0px, #edeef1 160px, #f6f7f8 320px);\n      background-size: 1000px 100%;\n      animation: shimmer 2s infinite linear forwards;\n    }\n\n    .skeleton-container {\n      display: none;\n      flex-direction: column;\n      gap: 24px;\n      width: 100%;\n      animation: fadeIn 0.5s ease;\n    }\n\n    .skeleton-container.show {\n      display: flex;\n    }\n\n    .skeleton-header {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 12px;\n      margin-bottom: 20px;\n    }\n\n    .skeleton-title {\n      width: 200px;\n      height: 38px;\n      border-radius: 8px;\n    }\n\n    .skeleton-subtitle {\n      width: 260px;\n      height: 19px;\n      border-radius: 4px;\n    }\n\n    .skeleton-list {\n      display: flex;\n      flex-direction: column;\n      gap: 16px;\n    }\n\n    .skeleton-item {\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      padding: 20px 24px;\n      background: #F5F5F7;\n      border-radius: 16px;\n    }\n\n    .skeleton-info {\n      display: flex;\n      align-items: center;\n      gap: 16px;\n      flex: 1;\n    }\n\n    .skeleton-icon {\n      width: 32px;\n      height: 32px;\n      border-radius: 4px;\n    }\n\n    .skeleton-text {\n      width: 60%;\n      height: 20px;\n      border-radius: 4px;\n    }\n\n    .skeleton-btn {\n      width: 72px;\n      height: 36px;\n      border-radius: 20px;\n    }\n\n    .hidden {\n      display: none !important;\n    }\n\n    \/* PDF \u5c55\u793a\u5bb9\u5668\u6837\u5f0f *\/\n    .pdf-container {\n      display: none;\n      flex-direction: column;\n      gap: 24px;\n      animation: fadeIn 0.5s ease;\n    }\n\n    .pdf-container.show {\n      display: flex;\n    }\n\n    .pdf-render-container {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      width: 100%;\n      max-width: 960px;\n      margin: 0 auto;\n    }\n\n    .pdf-page-canvas {\n      width: 100%;\n      height: auto;\n      display: block;\n      margin-bottom: 16px;\n      background-color: #ffffff;\n      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);\n      border-radius: 8px;\n    }\n\n    \/* \u60ac\u6d6e\u4e0b\u8f7d\u6309\u94ae *\/\n    .floating-download-btn {\n      position: fixed;\n      bottom: 40px;\n      left: 50%;\n      transform: translateX(-50%);\n      background-color: var(--primary-color);\n      color: white;\n      padding: 14px 32px;\n      border-radius: 30px;\n      font-size: 16px;\n      font-weight: 600;\n      box-shadow: 0 8px 24px rgba(0, 113, 227, 0.3);\n      cursor: pointer;\n      z-index: 1000;\n      display: none;\n      \/* \u9ed8\u8ba4\u9690\u85cf *\/\n      align-items: center;\n      gap: 8px;\n      border: none;\n      transition: all 0.3s ease;\n    }\n\n    @media screen and (max-width: 1023px) {\n      .floating-download-btn {\n        padding: 10px 20px;\n        font-size: 14px;\n      }\n    }\n\n    .floating-download-btn:hover {\n      background-color: #0077ED;\n      transform: translateX(-50%) translateY(-2px);\n      box-shadow: 0 12px 28px rgba(0, 113, 227, 0.4);\n    }\n\n    .floating-download-btn:active {\n      transform: translateX(-50%) translateY(0);\n    }\n\n    .floating-download-btn svg {\n      width: 20px;\n      height: 20px;\n      fill: currentColor;\n    }\n\n    @media screen and (max-width: 786px) {\n      .content .container {\n        padding-left: 0;\n        padding-right: 0;\n      }\n\n\n    }\n\n    .pattnerpolicymain {\n      padding-top: 0;\n      padding-bottom: 0;\n    }\n\n    .container.pattnerpolicymain-container {\n      min-height: 100vh;\n    }\n  <\/style>\n<\/head>\n\n<body>\n  <div class=\"container pattnerpolicymain-container\">\n    <!-- PDF \u5c55\u793a\u5bb9\u5668 -->\n    <div id=\"pdfContainer\" class=\"pdf-container\">\n      <div id=\"pdfRenderContainer\" class=\"pdf-render-container\">\n        <!-- Canvas \u5143\u7d20\u5c06\u5728\u8fd9\u91cc\u52a8\u6001\u751f\u6210 -->\n      <\/div>\n    <\/div>\n\n    <!-- \u60ac\u6d6e\u4e0b\u8f7d\u6309\u94ae -->\n    <button id=\"floatingDownloadBtn\" class=\"floating-download-btn\" onclick=\"downloadAllPdfs()\">\n      <svg viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\n        <path d=\"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z\" \/>\n      <\/svg>\n      <span>Download all PDF<\/span>\n    <\/button>\n\n    <!-- \u9aa8\u67b6\u5c4f\u52a0\u8f7d\u72b6\u6001 -->\n    <div id=\"skeletonState\" class=\"skeleton-container show\">\n      <div class=\"skeleton-header\">\n        <div class=\"skeleton skeleton-title\"><\/div>\n        <div class=\"skeleton skeleton-subtitle\"><\/div>\n      <\/div>\n      <div class=\"skeleton-list\">\n        <div class=\"skeleton-item\">\n          <div class=\"skeleton-info\">\n            <div class=\"skeleton skeleton-icon\"><\/div>\n            <div class=\"skeleton skeleton-text\"><\/div>\n          <\/div>\n          <div class=\"skeleton skeleton-btn\"><\/div>\n        <\/div>\n        <div class=\"skeleton-item\">\n          <div class=\"skeleton-info\">\n            <div class=\"skeleton skeleton-icon\"><\/div>\n            <div class=\"skeleton skeleton-text\" style=\"width: 40%;\"><\/div>\n          <\/div>\n          <div class=\"skeleton skeleton-btn\"><\/div>\n        <\/div>\n        <div class=\"skeleton-item\">\n          <div class=\"skeleton-info\">\n            <div class=\"skeleton skeleton-icon\"><\/div>\n            <div class=\"skeleton skeleton-text\" style=\"width: 50%;\"><\/div>\n          <\/div>\n          <div class=\"skeleton skeleton-btn\"><\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- \u4e8c\u7ef4\u7801\u65e0\u6548\u63d0\u793a -->\n    <div id=\"qrInvalidMessage\" class=\"message-container\">\n      <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\" fill=\"none\" version=\"1.1\"\n        width=\"105.4599609375\" height=\"48\" viewBox=\"0 0 105.4599609375 48\">\n        <defs>\n          <linearGradient x1=\"14.4599609375\" y1=\"0\" x2=\"14.4599609375\" y2=\"48\" gradientUnits=\"userSpaceOnUse\"\n            id=\"master_svg0_27_04719\">\n            <stop offset=\"0%\" stop-color=\"#000000\" stop-opacity=\"1\" \/>\n            <stop offset=\"69.9999988079071%\" stop-color=\"#0071E3\" stop-opacity=\"1\" \/>\n          <\/linearGradient>\n          <clipPath id=\"master_svg1_27_04724\">\n            <rect x=\"35.4599609375\" y=\"6\" width=\"36\" height=\"36\" rx=\"0\" \/>\n          <\/clipPath>\n          <linearGradient x1=\"0.5\" y1=\"0\" x2=\"0.5\" y2=\"1\" id=\"master_svg2_27_04719\">\n            <stop offset=\"0%\" stop-color=\"#000000\" stop-opacity=\"1\" \/>\n            <stop offset=\"69.9999988079071%\" stop-color=\"#0071E3\" stop-opacity=\"1\" \/>\n          <\/linearGradient>\n          <linearGradient x1=\"92.4599609375\" y1=\"0\" x2=\"92.4599609375\" y2=\"48\" gradientUnits=\"userSpaceOnUse\"\n            id=\"master_svg3_27_04719\">\n            <stop offset=\"0%\" stop-color=\"#000000\" stop-opacity=\"1\" \/>\n            <stop offset=\"69.9999988079071%\" stop-color=\"#0071E3\" stop-opacity=\"1\" \/>\n          <\/linearGradient>\n        <\/defs>\n        <g>\n          <g>\n            <path\n              d=\"M13.1999609375,34.16L-0.00003866249999995297,34.16L1.2399613275,28.240002L18.2799609375,9.6400013L25.7199609375,9.6400013L21.8799609375,27.84L26.4799609375,27.84L25.1199609375,34.16L20.5199599375,34.16L19.1599619375,40.560001L11.8399609375,40.560001L13.1999609375,34.16ZM14.5599609375,27.84L16.2799609375,19.640001L8.9999613375,27.84L14.5599609375,27.84Z\"\n              fill=\"url(#master_svg0_27_04719)\" fill-opacity=\"1\" style=\"mix-blend-mode:passthrough\" \/>\n          <\/g>\n          <g clip-path=\"url(#master_svg1_27_04724)\">\n            <g>\n              <path\n                d=\"M57.382760937499995,8.39242621C57.8347109375,8.64433622,58.0564079375,9.17194629,57.9203609375,9.6710414L54.9329619375,20.625047000000002L65.8349589375,20.625047000000002C66.2830109375,20.625047000000002,66.6883089375,20.890817,66.8668119375,21.301652C67.0453089375,21.712502,66.9631119375,22.190103,66.6574099375,22.517702L50.9074099375,39.392702C50.5544599375,39.770853,49.989019937500004,39.859503000000004,49.5371751375,39.607653C49.085313837499996,39.355801,48.8635101375,38.828103999999996,48.9996194375,38.329052000000004L51.9871089375,27.375002L41.0849902375,27.375002C40.6370152275,27.375002,40.2317302275,27.109201,40.0532002445,26.698351C39.8746552465,26.287502,39.9568853378,25.809902,40.2625552375,25.482454L56.0125099375,8.60743621C56.3654609375,8.229226291,56.9309579375,8.14051633,57.382760937499995,8.39242621Z\"\n                fill=\"url(#master_svg2_27_04719)\" fill-opacity=\"1\" style=\"mix-blend-mode:passthrough\" \/>\n            <\/g>\n          <\/g>\n          <g>\n            <path\n              d=\"M91.1999609375,34.16L77.9999613375,34.16L79.2399613275,28.240002L96.2799609375,9.6400013L103.7199609375,9.6400013L99.8799609375,27.84L104.4799609375,27.84L103.1199609375,34.16L98.5199599375,34.16L97.1599619375,40.560001L89.8399609375,40.560001L91.1999609375,34.16ZM92.5599609375,27.84L94.2799609375,19.640001L86.9999613375,27.84L92.5599609375,27.84Z\"\n              fill=\"url(#master_svg3_27_04719)\" fill-opacity=\"1\" style=\"mix-blend-mode:passthrough\" \/>\n          <\/g>\n        <\/g>\n      <\/svg>\n      <p class=\"sub-message-text\">The QR code ID does not exist or has expired. Please scan a valid QR code.<\/p>\n      <button class=\"action-btn\" onclick=\"goToHome()\">Finish<\/button>\n    <\/div>\n\n  <\/div>\n\n  <script>\n\n    const qrBusinessID = new URLSearchParams(window.location.search).get('qrcodeID');\n    const isDebugger = new URLSearchParams(window.location.search).get('debug');\n    \/\/ API \u57fa\u7840\u5730\u5740\uff08\u5e26 debug \u53c2\u6570\u65f6\u4f7f\u7528\u5f00\u53d1\u73af\u5883\uff09\n    const baseUrl = Boolean(isDebugger) ? 'https:\/\/dev-api.essmonitor.com' : 'https:\/\/api.bluettipower.com';\n\n    const qrInvalidMessage = document.getElementById('qrInvalidMessage');\n    const skeletonState = document.getElementById('skeletonState');\n\n    \/\/ \u8bbe\u7f6e PDF.js worker\n    pdfjsLib.GlobalWorkerOptions.workerSrc = 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.worker.min.js';\n\n    let currentPdfUrls = []; \/\/ \u4fdd\u5b58\u5f53\u524d\u52a0\u8f7d\u7684 PDF \u94fe\u63a5\uff0c\u7528\u4e8e\u4e0b\u8f7d\n\n    \/\/ \u83b7\u53d6\u4e8c\u7ef4\u7801\u4fe1\u606f\n    async function getQrInfo () {\n      try {\n        const url = `${baseUrl}\/activityapi\/b2b\/exhibitionQrDetail\/${qrBusinessID}`;\n        const response = await fetch(url);\n        const res = await response.json();\n        return res;\n      } catch (err) {\n        console.error('getQrInfo failed:', err.message || err);\n        \/\/ \u7f51\u7edc\/\u8de8\u57df\u5931\u8d25\u65f6\u8fd4\u56de\u5931\u8d25\u7ed3\u6784\uff0c\u907f\u514d\u9875\u9762\u62a5\u9519\n        return { code: -1, message: err.message || 'Network error' };\n      }\n    }\n\n    \/\/ \u5f02\u6b65\u9a8c\u8bc1\u4e8c\u7ef4\u7801\n    getQrInfo()\n      .then(res => {\n        \/\/ \u9690\u85cf\u9aa8\u67b6\u5c4f\n        if (skeletonState) {\n          skeletonState.classList.remove('show');\n        }\n\n        if (!res || res.code !== 0) {\n          showQrInvalidState();\n        } else {\n          showPdfList(res.data);\n        }\n      })\n      .catch(err => {\n        console.error('QR check error:', err);\n        \/\/ \u9690\u85cf\u9aa8\u67b6\u5c4f\n        if (skeletonState) {\n          skeletonState.classList.remove('show');\n        }\n        showQrInvalidState();\n      });\n\n    function showPdfList (data) {\n      if (data && data.qrProductInfo) {\n        const { fileInfos } = data.qrProductInfo;\n\n        if (fileInfos && fileInfos.length > 0) {\n          currentPdfUrls = fileInfos;\n          initPdfViewer(fileInfos);\n          \/\/ \u663e\u793a\u60ac\u6d6e\u4e0b\u8f7d\u6309\u94ae\n          document.getElementById('floatingDownloadBtn').style.display = 'flex';\n        } else {\n          const pdfRenderContainer = document.getElementById('pdfRenderContainer');\n          if (pdfRenderContainer) {\n            pdfRenderContainer.innerHTML = '<p style=\"text-align: center; color: var(--text-secondary);\">\u6682\u65e0\u53ef\u7528\u6587\u6863\u3002<\/p>';\n          }\n        }\n      }\n\n      const pdfContainer = document.getElementById('pdfContainer');\n      if (pdfContainer) {\n        pdfContainer.classList.add('show');\n      }\n    }\n\n    async function initPdfViewer (pdfUrls) {\n      const container = document.getElementById('pdfRenderContainer');\n      container.innerHTML = ''; \/\/ \u6e05\u7a7a\u5bb9\u5668\n\n      \/\/ \u8bbe\u7f6e Intersection Observer \u7528\u4e8e\u61d2\u52a0\u8f7d\n      const observer = new IntersectionObserver((entries) => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) {\n            const canvas = entry.target;\n            \/\/ \u5982\u679c\u8fd8\u6ca1\u6709\u6e32\u67d3\u8fc7\uff0c\u5219\u5f00\u59cb\u6e32\u67d3\n            if (!canvas.dataset.rendered) {\n              renderPageToCanvas(canvas);\n            }\n          }\n        });\n      }, {\n        rootMargin: '400px 0px' \/\/ \u63d0\u524d 400px \u5f00\u59cb\u52a0\u8f7d\uff0c\u63d0\u5347\u4f53\u9a8c\n      });\n\n      for (let i = 0; i < pdfUrls.length; i++) {\n        const url = pdfUrls[i];\n        try {\n          \/\/ \u52a0\u8f7d PDF \u6587\u6863\n          const loadingTask = pdfjsLib.getDocument(url);\n          const pdf = await loadingTask.promise;\n\n          \/\/ \u904d\u5386\u8be5 PDF \u7684\u6bcf\u4e00\u9875\n          for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) {\n            \/\/ \u5148\u83b7\u53d6\u9875\u9762\u7684\u89c6\u53e3\u4fe1\u606f\n            const page = await pdf.getPage(pageNum);\n            \/\/ \u79fb\u52a8\u7aef\u901a\u5e38\u4f7f\u7528 1.5 \u6216 2 \u7684 scale \u4ee5\u4fdd\u8bc1\u6e05\u6670\u5ea6\n            const viewport = page.getViewport({ scale: 1.5 });\n\n            \/\/ \u521b\u5efa Canvas \u5360\u4f4d\n            const canvas = document.createElement('canvas');\n            canvas.className = 'pdf-page-canvas';\n            canvas.dataset.rendered = ''; \/\/ \u6807\u8bb0\u662f\u5426\u5df2\u6e32\u67d3\n\n            \/\/ \u8bbe\u7f6e\u5185\u90e8\u5b9e\u9645\u5206\u8fa8\u7387\n            canvas.width = viewport.width;\n            canvas.height = viewport.height;\n\n            \/\/ \u4e3a\u4e86\u9632\u6b62\u9875\u9762\u6296\u52a8\uff0c\u8bbe\u7f6e\u5bbd\u9ad8\u6bd4\n            canvas.style.aspectRatio = `${viewport.width} \/ ${viewport.height}`;\n\n            \/\/ \u6302\u8f7d\u5230\u9875\u9762\u5e76\u52a0\u5165\u89c2\u5bdf\u8005\n            container.appendChild(canvas);\n\n            \/\/ \u5c06 page \u5bf9\u8c61\u5b58\u8d77\u6765\uff0c\u907f\u514d\u61d2\u52a0\u8f7d\u65f6\u91cd\u590d\u8bf7\u6c42\n            canvas.pdfPage = page;\n            canvas.pdfViewport = viewport;\n\n            observer.observe(canvas);\n          }\n        } catch (error) {\n          console.error(`\u52a0\u8f7d PDF \u5931\u8d25: ${url}`, error);\n        }\n      }\n    }\n\n    async function renderPageToCanvas (canvas) {\n      canvas.dataset.rendered = 'true';\n\n      const page = canvas.pdfPage;\n      const viewport = canvas.pdfViewport;\n      const context = canvas.getContext('2d');\n\n      const renderContext = {\n        canvasContext: context,\n        viewport: viewport\n      };\n\n      try {\n        await page.render(renderContext).promise;\n        \/\/ \u6e32\u67d3\u5b8c\u6210\u540e\u53ef\u4ee5\u6e05\u7406\u6302\u8f7d\u7684\u5bf9\u8c61\u91ca\u653e\u5185\u5b58\n        canvas.pdfPage = null;\n        canvas.pdfViewport = null;\n      } catch (error) {\n        console.error('\u6e32\u67d3\u9875\u9762\u5931\u8d25', error);\n        canvas.dataset.rendered = ''; \/\/ \u6e32\u67d3\u5931\u8d25\u5141\u8bb8\u91cd\u8bd5\n      }\n    }\n\n    \/\/ \u4e0b\u8f7d\u6240\u6709 PDF\n    async function downloadAllPdfs () {\n      if (!currentPdfUrls || currentPdfUrls.length === 0) return;\n\n      const btn = document.getElementById('floatingDownloadBtn');\n      const originalText = btn.querySelector('span').textContent;\n      btn.querySelector('span').textContent = '\u6b63\u5728\u51c6\u5907\u4e0b\u8f7d...';\n      btn.style.pointerEvents = 'none';\n      btn.style.opacity = '0.8';\n\n      try {\n        if (currentPdfUrls.length === 1) {\n          \/\/ \u53ea\u6709\u4e00\u4e2a\u6587\u4ef6\uff0c\u76f4\u63a5\u4e0b\u8f7d\n          const url = currentPdfUrls[0];\n          let fileName = 'document.pdf';\n          try {\n            fileName = decodeURIComponent(new URL(url).pathname.split('\/').pop());\n          } catch (e) { }\n          saveAs(url, fileName);\n        } else {\n          \/\/ \u591a\u4e2a\u6587\u4ef6\uff0c\u6253\u5305\u6210 ZIP\n          const zip = new JSZip();\n\n          const promises = currentPdfUrls.map(async (url, index) => {\n            const response = await fetch(url);\n            const blob = await response.blob();\n            let fileName = `document_${index + 1}.pdf`;\n            try {\n              const decodedName = decodeURIComponent(new URL(url).pathname.split('\/').pop());\n              if (decodedName) fileName = decodedName;\n            } catch (e) { }\n            zip.file(fileName, blob);\n          });\n\n          await Promise.all(promises);\n\n          const content = await zip.generateAsync({ type: \"blob\" });\n          saveAs(content, \"documents.zip\");\n        }\n      } catch (error) {\n        console.error('\u4e0b\u8f7d\u5931\u8d25:', error);\n        alert('\u4e0b\u8f7d\u5931\u8d25\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5');\n      } finally {\n        btn.querySelector('span').textContent = originalText;\n        btn.style.pointerEvents = 'auto';\n        btn.style.opacity = '1';\n      }\n    }\n\n    \/\/ \u8fd4\u56de\u9996\u9875\uff08\u4e8c\u7ef4\u7801\u65e0\u6548\u9875\u6309\u94ae\uff09\n    window.goToHome = function () {\n      window.location.href = '\/';\n    };\n\n    function showQrInvalidState () {\n      if (qrInvalidMessage) qrInvalidMessage.classList.add('show');\n    }\n  <\/script>\n<\/body>\n\n<\/html>\n<!-- \/wp:html -->\n\n<!-- wp:paragraph -->\n<p><\/p>\n<!-- \/wp:paragraph -->","protected":false},"excerpt":{"rendered":"<p>Get More Product Info &#8211; BLUETTI Download all PDF The QR code ID does not exist or has expired. Please scan a valid QR code. Finish<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-13290","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>| BLUETTI<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/bluetti.com\/es\/get-more-product-info\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"| BLUETTI\" \/>\n<meta property=\"og:description\" content=\"Get More Product Info - BLUETTI Download all PDF The QR code ID does not exist or has expired. Please scan a valid QR code. Finish\" \/>\n<meta property=\"og:url\" content=\"https:\/\/bluetti.com\/get-more-product-info\/\" \/>\n<meta property=\"og:site_name\" content=\"BLUETTI\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-27T08:10:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/bluetti.com\/get-more-product-info\/\",\"url\":\"https:\/\/bluetti.com\/get-more-product-info\/\",\"name\":\"| BLUETTI\",\"isPartOf\":{\"@id\":\"https:\/\/bluetti.com\/de\/#website\"},\"datePublished\":\"2025-12-04T05:50:07+00:00\",\"dateModified\":\"2026-03-27T08:10:00+00:00\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/bluetti.com\/get-more-product-info\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/bluetti.com\/de\/#website\",\"url\":\"https:\/\/bluetti.com\/de\/\",\"name\":\"BLUETTI\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/bluetti.com\/de\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"| BLUETTI","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/bluetti.com\/es\/get-more-product-info\/","og_locale":"en_US","og_type":"article","og_title":"| BLUETTI","og_description":"Get More Product Info - BLUETTI Download all PDF The QR code ID does not exist or has expired. Please scan a valid QR code. Finish","og_url":"https:\/\/bluetti.com\/get-more-product-info\/","og_site_name":"BLUETTI","article_modified_time":"2026-03-27T08:10:00+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/bluetti.com\/get-more-product-info\/","url":"https:\/\/bluetti.com\/get-more-product-info\/","name":"| BLUETTI","isPartOf":{"@id":"https:\/\/bluetti.com\/de\/#website"},"datePublished":"2025-12-04T05:50:07+00:00","dateModified":"2026-03-27T08:10:00+00:00","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/bluetti.com\/get-more-product-info\/"]}]},{"@type":"WebSite","@id":"https:\/\/bluetti.com\/de\/#website","url":"https:\/\/bluetti.com\/de\/","name":"BLUETTI","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/bluetti.com\/de\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/pages\/13290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/comments?post=13290"}],"version-history":[{"count":26,"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/pages\/13290\/revisions"}],"predecessor-version":[{"id":13857,"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/pages\/13290\/revisions\/13857"}],"wp:attachment":[{"href":"https:\/\/bluetti.com\/es\/wp-json\/wp\/v2\/media?parent=13290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}