| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- <!DOCTYPE html>
- <html lang="vi">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Model — DoTouch.AI</title>
- <link rel="stylesheet" href="style.css">
- </head>
- <body>
- <div class="dev-note" id="demoLoginBanner" style="bottom:56px;"></div>
- <div class="dev-note">v1.2.0 · 模型详情页(数据驱动:glm-5.2 / deepseek-v4 / deepseek-v4-pro / qwen-max · 支持 ?m= 参数与语言联动)</div>
- <header>
- <div class="wrap nav">
- <a class="nav-logo" href="index.html">
- <svg viewBox="0 0 460 120" xmlns="http://www.w3.org/2000/svg">
- <defs><linearGradient id="g1" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#9B7BFF"/><stop offset="1" stop-color="#5C3DF0"/></linearGradient></defs>
- <g transform="translate(0,6) scale(0.92)"><circle cx="50" cy="50" r="33" stroke="rgba(124,92,255,.3)" stroke-width="1.5" stroke-dasharray="2 7" fill="none"/><g stroke="#00E5A0" stroke-width="1.8" opacity=".55"><line x1="50" y1="50" x2="76" y2="26"/><line x1="50" y1="50" x2="26" y2="76"/><line x1="50" y1="50" x2="78" y2="75"/></g><circle cx="50" cy="50" r="12" stroke="rgba(124,92,255,.4)" fill="none"/><circle cx="50" cy="50" r="7.5" fill="url(#g1)"/><circle cx="76" cy="26" r="4" fill="#00E5A0"/><circle cx="26" cy="76" r="4" fill="#00E5A0"/><circle cx="78" cy="75" r="4" fill="#00E5A0"/></g>
- <text x="128" y="78" font-size="50" font-weight="700" fill="#E8ECF8" font-family="inherit">DoTouch</text><text x="348" y="78" font-size="50" font-weight="700" fill="url(#g1)" font-family="inherit">.AI</text>
- </svg>
- </a>
- <nav class="nav-links">
- <a href="index.html" data-i18n="nav_home">Trang chủ</a>
- <a href="models.html" data-i18n="nav_models">Models</a>
- <a href="pricing.html" data-i18n="nav_pricing">Pricing</a>
- <a href="docs.html" data-i18n="nav_docs_ops">Hướng dẫn</a>
- <a href="../console-v1.0.0/user-console.html" data-i18n="nav_console">Console</a>
- </nav>
- <div class="nav-right">
- <div class="lang-switch">
- <button class="lang-btn active" data-lang="vi">VI</button><button class="lang-btn" data-lang="en">EN</button><button class="lang-btn" data-lang="zh-CN">简</button><button class="lang-btn" data-lang="zh-TW">繁</button>
- </div>
- <a class="btn btn-sm" href="#" data-open-auth="login" data-i18n="nav_login">Đăng nhập</a>
- <a class="btn btn-primary btn-sm" href="#" data-open-auth="register" data-i18n="nav_signup">Bắt đầu</a>
- </div>
- </div>
- </header>
- <div class="wrap">
- <div class="crumbs"><a href="index.html" data-i18n="crumb_home">Trang chủ</a><span class="sep">/</span><a href="models.html" data-i18n="detail_bread">Mô hình</a><span class="sep">/</span><b id="crumbModel">GLM 5.2</b></div>
- <!-- 头部 -->
- <div class="page-hero" style="display:flex;justify-content:space-between;align-items:flex-end;gap:20px;flex-wrap:wrap;">
- <div>
- <h1 style="display:flex;align-items:center;gap:12px;"><span id="modelName">GLM 5.2</span> <span class="tag tag-purple" id="modelTag" data-i18n="tag_flagship">Cao cấp</span></h1>
- <p id="modelDesc">Mô hình đa phương thức hàng đầu, suy luận + lập trình + tác vụ agent.</p>
- </div>
- <a class="btn btn-primary" href="#" data-i18n="detail_use_btn">Bắt đầu với API này</a>
- </div>
- <div class="grid3">
- <!-- 技术规格 -->
- <div class="card">
- <h3 style="font-size:15px;color:var(--purple-l);margin-bottom:14px;" data-i18n="detail_spec">Thông số kỹ thuật</h3>
- <table style="width:100%;font-size:13.5px;border-collapse:collapse;">
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_spec_vendor">Nhà cung cấp</td><td style="padding:7px 0;text-align:right;" id="specVendor">Zhipu AI</td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_spec_ctx">Ngữ cảnh</td><td style="padding:7px 0;text-align:right;" class="price" id="specCtx">128K tokens</td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_spec_out">Đầu ra tối đa</td><td style="padding:7px 0;text-align:right;" class="price" id="specOut">64K tokens</td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_spec_base">BASE URL</td><td style="padding:7px 0;text-align:right;" class="price">api.dotouch.ai/v1</td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_spec_rate">Giới hạn tốc độ</td><td style="padding:7px 0;text-align:right;" class="price" id="specRate">60 req/min</td></tr>
- </table>
- </div>
- <!-- 能力矩阵 -->
- <div class="card">
- <h3 style="font-size:15px;color:var(--purple-l);margin-bottom:14px;" data-i18n="detail_cap">Khả năng</h3>
- <table style="width:100%;font-size:13.5px;border-collapse:collapse;">
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_cap_json">JSON Output</td><td style="padding:7px 0;text-align:right;" id="capJson"><span class="save-tag" data-i18n="spec_ok">Hỗ trợ</span></td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_cap_tool">Tool Calls</td><td style="padding:7px 0;text-align:right;" id="capTool"><span class="save-tag" data-i18n="spec_ok">Hỗ trợ</span></td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_cap_stream">Streaming (SSE)</td><td style="padding:7px 0;text-align:right;" id="capStream"><span class="save-tag" data-i18n="spec_ok">Hỗ trợ</span></td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_cap_think">Chế độ suy luận</td><td style="padding:7px 0;text-align:right;" id="capThink"><span class="save-tag" data-i18n="spec_ok">Hỗ trợ</span></td></tr>
- <tr><td style="padding:7px 0;color:var(--muted);" data-i18n="detail_cap_json">Vision (Hình ảnh)</td><td style="padding:7px 0;text-align:right;" id="capVision"><span class="tag tag-gray" data-i18n="spec_no">Không hỗ trợ</span></td></tr>
- </table>
- </div>
- <!-- 价格 -->
- <div class="card">
- <h3 style="font-size:15px;color:var(--purple-l);margin-bottom:14px;" data-i18n="detail_pricing">Giá</h3>
- <p style="font-size:12px;color:var(--muted);margin-bottom:10px;" data-i18n="detail_pricing_note">Giá mỗi 1 triệu tokens · đã gồm ưu đãi 70% giá Trung Quốc</p>
- <div style="font-size:13.5px;color:var(--muted);padding:8px 0;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;"><span data-i18n="detail_price_in">Đầu vào</span><b class="price" style="color:var(--text);" id="priceIn"><span class="price-usd" data-usd="0.98">$0.98</span></b></div>
- <div style="font-size:13.5px;color:var(--muted);padding:8px 0;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;"><span data-i18n="detail_price_out">Đầu ra</span><b class="price" style="color:var(--text);" id="priceOut"><span class="price-usd" data-usd="3.08">$3.08</span></b></div>
- <div style="font-size:13.5px;color:var(--muted);padding:8px 0;display:flex;justify-content:space-between;"><span data-i18n="price_th_save">Tiết kiệm</span><span class="save-tag">-30% <span style="text-decoration:line-through;opacity:.6;" id="priceCut">$1.40 / $4.40</span></span></div>
- <div class="rate-box" style="margin-top:12px;font-size:12px;" data-i18n="rate_note">Tỷ giá tham khảo: 1 USD ≈ 25.400₫</div>
- </div>
- </div>
- <!-- 代码示例 -->
- <section style="padding-top:36px;">
- <h2 class="sec-head" style="font-size:18px;font-weight:800;margin-bottom:14px;" data-i18n="detail_code">Ví dụ gọi API</h2>
- <div class="code-block" style="max-width:820px;">
- <div class="code-head"><span class="dots"><i></i><i></i><i></i></span><span>cURL</span></div>
- <pre><code><span class="c-c"># OpenAI-compatible — chỉ cần đổi base URL và key</span>
- <span class="c-k">curl</span> https://api.dotouch.ai/v1/chat/completions \
- -H <span class="c-s">"Authorization: Bearer dt_your_key_here"</span> \
- -H <span class="c-s">"Content-Type: application/json"</span> \
- -d <span class="c-s">'{
- "model": "<span class="c-p" id="codeModel">glm-5.2</span>",
- "messages": [{"role": "user", "content": "Xin chào!"}],
- "stream": true
- }'</span></code></pre>
- </div>
- <div class="code-block" style="max-width:820px;margin-top:14px;">
- <div class="code-head"><span class="dots"><i></i><i></i><i></i></span><span>Python SDK</span></div>
- <pre><code><span class="c-k">from</span> openai <span class="c-k">import</span> OpenAI
- client = OpenAI(
- base_url=<span class="c-s">"https://api.dotouch.ai/v1"</span>,
- api_key=<span class="c-s">"dt_your_key_here"</span>,
- )
- resp = client.chat.completions.create(
- model=<span class="c-s">"<span class="c-p" id="codeModel2">glm-5.2</span>"</span>,
- messages=[{<span class="c-s">"role"</span>: <span class="c-s">"user"</span>, <span class="c-s">"content"</span>: <span class="c-s">"Xin chào!"</span>}],
- )
- <span class="c-k">print</span>(resp.choices[0].message.content)</code></pre>
- </div>
- </section>
- <!-- 扣费规则 -->
- <section>
- <div class="notice" style="max-width:820px;">
- <b data-i18n="detail_billing">Quy tắc tính phí:</b> <span data-i18n="detail_billing_p">Phí = token tiêu thụ × đơn giá, trừ trực tiếp từ số dư nạp trước. Giá có thể thay đổi; xem trang này để cập nhật mới nhất.</span>
- </div>
- </section>
- <!-- 相关模型 -->
- <section>
- <h2 style="font-size:18px;font-weight:800;margin-bottom:14px;" data-i18n="detail_rel">Mô hình liên quan</h2>
- <div class="grid3" id="relatedBox">
- <a class="card hover-up" href="model-detail.html?m=deepseek-v4"><b data-i18n="m_dsv4_name">DeepSeek V4</b><span class="tag tag-green" style="margin-left:8px;" data-i18n="tag_best">Đáng giá</span><p style="font-size:12.5px;color:var(--muted);margin-top:6px;" data-i18n="m_dsv4_short">Cỗ máy suy luận mã nguồn mở, lý tưởng cho chat & RAG khối lượng lớn.</p><div style="margin-top:10px;font-size:12px;color:var(--muted);"><span class="price-usd" data-usd="0.14">$0.14</span> / 1M in</div></a>
- <a class="card hover-up" href="model-detail.html?m=deepseek-v4-pro"><b data-i18n="m_dsv4p_name">DeepSeek V4 Pro</b><span class="tag tag-gold" style="margin-left:8px;" data-i18n="tag_reasoning">Suy luận</span><p style="font-size:12.5px;color:var(--muted);margin-top:6px;" data-i18n="m_dsv4p_short">Suy luận sâu cho toán học, logic và kế hoạch agent dài hạn.</p><div style="margin-top:10px;font-size:12px;color:var(--muted);"><span class="price-usd" data-usd="0.30">$0.30</span> / 1M in</div></a>
- <a class="card hover-up" href="model-detail.html?m=qwen-max"><b data-i18n="m_qwen_name">Qwen Max</b><span class="tag tag-gray" style="margin-left:8px;" data-i18n="tag_enterprise">Doanh nghiệp</span><p style="font-size:12.5px;color:var(--muted);margin-top:6px;" data-i18n="m_qwen_short">Mô hình tổng quát mạnh nhất, đa ngôn ngữ & gọi công cụ.</p><div style="margin-top:10px;font-size:12px;color:var(--muted);"><span class="price-usd" data-usd="1.96">$1.96</span> / 1M in</div></a>
- </div>
- <a href="models.html" style="display:inline-block;margin-top:16px;font-size:14px;color:var(--purple-l);font-weight:600;" data-i18n="detail_rel_view">Xem tất cả mô hình →</a>
- </section>
- </div>
- <footer>
- <div class="wrap">
- <div class="foot-grid">
- <div class="foot-brand">
- <svg viewBox="0 0 460 120" width="140" xmlns="http://www.w3.org/2000/svg">
- <defs><linearGradient id="fg" x1="0" y1="0" x2="1" y2="1"><stop offset="0" stop-color="#9B7BFF"/><stop offset="1" stop-color="#5C3DF0"/></linearGradient></defs>
- <g transform="translate(0,6) scale(0.92)"><circle cx="50" cy="50" r="33" stroke="rgba(124,92,255,.3)" stroke-width="1.5" stroke-dasharray="2 7" fill="none"/><g stroke="#00E5A0" stroke-width="1.8" opacity=".55"><line x1="50" y1="50" x2="76" y2="26"/><line x1="50" y1="50" x2="26" y2="76"/><line x1="50" y1="50" x2="78" y2="75"/></g><circle cx="50" cy="50" r="7.5" fill="url(#fg)"/><circle cx="76" cy="26" r="4" fill="#00E5A0"/><circle cx="26" cy="76" r="4" fill="#00E5A0"/><circle cx="78" cy="75" r="4" fill="#00E5A0"/></g>
- <text x="128" y="78" font-size="50" font-weight="700" fill="#E8ECF8" font-family="inherit">DoTouch</text><text x="348" y="78" font-size="50" font-weight="700" fill="url(#fg)" font-family="inherit">.AI</text>
- </svg>
- <p data-i18n="foot_p">AI Trung Quốc giá rẻ cho lập trình viên và doanh nghiệp nhỏ trên toàn thế giới.</p>
- </div>
- <div class="foot-col"><h4 data-i18n="foot_product">Sản phẩm</h4><a href="models.html" data-i18n="nav_models">Mô hình</a><a href="pricing.html" data-i18n="nav_pricing">Bảng giá</a><a href="../console-v1.0.0/user-console.html" data-i18n="foot_console">Console</a><a href="#" data-i18n="foot_status">Trạng thái</a></div>
- <div class="foot-col"><h4 data-i18n="foot_dev">Nhà phát triển</h4><a href="docs.html" data-i18n="foot_docs">Tài liệu</a><a href="docs.html" data-i18n="foot_quickstart">Bắt đầu nhanh</a><a href="#" data-i18n="foot_support">Hỗ trợ</a></div>
- <div class="foot-col"><h4 data-i18n="foot_legal">Pháp lý</h4><a href="#" data-i18n="foot_tos">Điều khoản dịch vụ</a><a href="#" data-i18n="foot_privacy">Chính sách bảo mật</a><a href="#" data-i18n="foot_refund">Chính sách hoàn tiền</a></div>
- </div>
- <div class="foot-bottom"><span>© 2026 DoTouch.AI — doTouch.ai</span><span data-i18n="foot_made">Thế giới mã nguồn mở · AI phổ cập</span></div>
- </div>
- </footer>
- <div class="support-panel" id="supportPanel">
- <div class="support-head"><b data-i18n="chat_title">Trợ giúp & Hỗ trợ</b><span class="chat-status" data-i18n="chat_online">Trực tuyến</span></div>
- <div class="support-body">
- <p data-i18n="chat_hello">Xin chào! Chúng tôi có thể giúp gì cho bạn?</p>
- <div class="chat-sugg">
- <button data-i18n="chat_q_balance">Làm sao để nạp tiền?</button>
- <button data-i18n="chat_q_key">Tạo API key thế nào?</button>
- <button data-i18n="chat_q_model">Nên chọn mô hình nào?</button>
- </div>
- <div class="chat-input"><input placeholder="Nhập tin nhắn..." data-i18n="chat_input"><button>➤</button></div>
- <div class="chat-channels"><a class="tag tag-purple" href="#">Zalo</a><a class="tag tag-green" href="#">Telegram</a><a class="tag tag-gray" href="#">Email</a></div>
- </div>
- </div>
- <button class="support-fab" id="supportFab" aria-label="Support">
- <span class="pulse-ring"></span>
- <svg viewBox="0 0 24 24" width="26" height="26" fill="#fff"><path d="M12 3C7 3 3 6.6 3 11c0 2.3 1 4.3 2.7 5.8L5 20l3.4-1.5c1.1.4 2.3.5 3.6.5 5 0 9-3.6 9-8s-4-8-9-8z"/><circle cx="8.5" cy="11" r="1.2" fill="#0B1020"/><circle cx="12" cy="11" r="1.2" fill="#0B1020"/><circle cx="15.5" cy="11" r="1.2" fill="#0B1020"/></svg>
- </button>
- <div class="modal-mask" id="authModal">
- <div class="modal">
- <button class="modal-close" aria-label="Close">✕</button>
- <div id="viewLogin">
- <h3 data-i18n="auth_login_title">Đăng nhập</h3>
- <div class="auth-error" data-i18n="auth_err_email">Email không hợp lệ</div>
- <div class="field"><label data-i18n="auth_email">Email</label><input type="email" placeholder="you@example.com"></div>
- <div class="field"><label data-i18n="auth_password">Mật khẩu</label><input type="password"></div>
- <button class="btn btn-primary btn-block" data-i18n="auth_login_btn">Đăng nhập</button>
- <div class="auth-links"><a data-auth-view="reset" data-i18n="auth_forgot">Quên mật khẩu?</a><a data-auth-view="register" data-i18n="auth_to_register">Tạo tài khoản</a></div>
- </div>
- <div id="viewRegister" hidden>
- <h3 data-i18n="auth_register_title">Tạo tài khoản</h3>
- <div class="auth-error" data-i18n="auth_err_pwd">Mật khẩu không khớp</div>
- <div class="field"><label data-i18n="auth_email">Email</label><input type="email" placeholder="you@example.com"></div>
- <div class="field"><label data-i18n="auth_password">Mật khẩu</label><input type="password"></div>
- <div class="field"><label data-i18n="auth_confirm">Xác nhận mật khẩu</label><input type="password"></div>
- <div class="field">
- <label data-i18n="auth_code_label">Mã xác minh</label>
- <div class="code-row">
- <input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1">
- <button class="btn btn-sm code-send" data-send-code data-i18n="auth_code_send">Gửi mã</button>
- </div>
- <p class="auth-note" data-code-note data-i18n="auth_code_note">Mã gồm 8 ký tự chữ hoa & số, hiệu lực 15 phút</p>
- </div>
- <button class="btn btn-primary btn-block" data-i18n="auth_register_btn">Đăng ký</button>
- <div class="auth-links"><a data-auth-view="login" data-i18n="auth_to_login">Đã có tài khoản? Đăng nhập</a></div>
- </div>
- <div id="viewReset" hidden>
- <h3 data-i18n="auth_reset_title">Đặt lại mật khẩu</h3>
- <div class="auth-error" data-i18n="auth_err_pwd">Mật khẩu không khớp</div>
- <div class="field"><label data-i18n="auth_email">Email</label><input type="email" placeholder="you@example.com"></div>
- <div class="field">
- <label data-i18n="auth_code_label">Mã xác minh</label>
- <div class="code-row">
- <input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1"><input class="code-cell" maxlength="1">
- <button class="btn btn-sm code-send" data-send-code data-i18n="auth_code_send">Gửi mã</button>
- </div>
- <p class="auth-note" data-code-note data-i18n="auth_code_note">Mã gồm 8 ký tự chữ hoa & số, hiệu lực 15 phút</p>
- </div>
- <div class="field"><label data-i18n="auth_new_pwd">Mật khẩu mới</label><input type="password"></div>
- <div class="field"><label data-i18n="auth_confirm_new">Xác nhận mật khẩu mới</label><input type="password"></div>
- <button class="btn btn-primary btn-block" data-i18n="auth_reset_btn">Đặt lại mật khẩu</button>
- <div class="auth-links"><a data-auth-view="login" data-i18n="auth_back_login">Quay lại đăng nhập</a></div>
- </div>
- </div>
- </div>
- <script src="i18n.js"></script>
- <script>
- /* ══ 模型数据(4 个主推模型;描述/名称引用 i18n 键,随语言联动) ══ */
- const MODEL_DATA = {
- 'glm-5.2': {
- nameKey: 'm_glm_name', descKey: 'm_glm_desc', vendorKey: 'm_glm_vendor', tagKey: 'tag_flagship', tagCls: 'tag-purple',
- ctx: '128K', out: '64K', rate: '60 req/min',
- caps: { json: 1, tool: 1, stream: 1, think: 1, vision: 0 },
- inUsd: 0.98, outUsd: 3.08, cut: '1.40 / 4.40',
- rel: ['deepseek-v4', 'deepseek-v4-pro', 'qwen-max']
- },
- 'deepseek-v4': {
- nameKey: 'm_dsv4_name', descKey: 'm_dsv4_desc', vendorKey: 'm_dsv4_vendor', tagKey: 'tag_best', tagCls: 'tag-green',
- ctx: '1M', out: '128K', rate: '120 req/min',
- caps: { json: 0, tool: 1, stream: 1, think: 1, vision: 0 },
- inUsd: 0.14, outUsd: 0.28, cut: '0.20 / 0.40',
- rel: ['glm-5.2', 'deepseek-v4-pro', 'qwen-max']
- },
- 'deepseek-v4-pro': {
- nameKey: 'm_dsv4p_name', descKey: 'm_dsv4p_desc', vendorKey: 'm_dsv4p_vendor', tagKey: 'tag_reasoning', tagCls: 'tag-gold',
- ctx: '1M', out: '128K', rate: '60 req/min',
- caps: { json: 0, tool: 1, stream: 1, think: 1, vision: 0 },
- inUsd: 0.42, outUsd: 0.84, cut: '0.60 / 1.20',
- rel: ['glm-5.2', 'deepseek-v4', 'qwen-max']
- },
- 'qwen-max': {
- nameKey: 'm_qwen_name', descKey: 'm_qwen_desc', vendorKey: 'm_qwen_vendor', tagKey: 'tag_enterprise', tagCls: 'tag-gray',
- ctx: '256K', out: '64K', rate: '60 req/min',
- caps: { json: 1, tool: 1, stream: 1, think: 1, vision: 1 },
- inUsd: 1.96, outUsd: 7.84, cut: '2.80 / 11.20',
- rel: ['glm-5.2', 'deepseek-v4', 'deepseek-v4-pro']
- }
- };
- const capIds = { json: 'capJson', tool: 'capTool', stream: 'capStream', think: 'capThink', vision: 'capVision' };
- function curLang() { return document.documentElement.lang || 'vi'; }
- function t(key) { return (I18N[curLang()] || {})[key] || key; }
- function renderModel(id) {
- const m = MODEL_DATA[id] || MODEL_DATA['glm-5.2'];
- document.getElementById('modelName').textContent = t(m.nameKey);
- document.getElementById('crumbModel').textContent = t(m.nameKey);
- document.getElementById('modelDesc').textContent = t(m.descKey);
- const tag = document.getElementById('modelTag');
- tag.className = 'tag ' + m.tagCls;
- tag.textContent = t(m.tagKey);
- document.getElementById('specVendor').textContent = t(m.vendorKey);
- document.getElementById('specCtx').textContent = m.ctx + ' tokens';
- document.getElementById('specOut').textContent = m.out + ' tokens';
- document.getElementById('specRate').textContent = m.rate;
- document.getElementById('codeModel').textContent = id;
- document.getElementById('codeModel2').textContent = id;
- Object.entries(capIds).forEach(([k, elId]) => {
- const el = document.getElementById(elId);
- el.innerHTML = m.caps[k]
- ? '<span class="save-tag">' + t('spec_ok') + '</span>'
- : '<span class="tag tag-gray">' + t('spec_no') + '</span>';
- });
- const pi = document.getElementById('priceIn').querySelector('[data-usd]');
- pi.dataset.usd = m.inUsd; pi.textContent = fmtPrice(m.inUsd);
- const po = document.getElementById('priceOut').querySelector('[data-usd]');
- po.dataset.usd = m.outUsd; po.textContent = fmtPrice(m.outUsd);
- document.getElementById('priceCut').textContent = '$' + m.cut;
- /* 相关模型(去重当前) */
- const rb = document.getElementById('relatedBox');
- rb.innerHTML = m.rel.map(rid => {
- const r = MODEL_DATA[rid];
- const cls = 'card hover-up';
- return '<a class="' + cls + '" href="model-detail.html?m=' + rid + '"><b>' + t(r.nameKey) + '</b><span class="tag ' + r.tagCls + '" style="margin-left:8px;">' + t(r.tagKey) + '</span><p style="font-size:12.5px;color:var(--muted);margin-top:6px;">' + t(r.descKey) + '</p><div style="margin-top:10px;font-size:12px;color:var(--muted);"><span class="price-usd" data-usd="' + r.inUsd + '">' + fmtPrice(r.inUsd) + '</span> / 1M in</div></a>';
- }).join('');
- applyCurrency();
- }
- /* 初始化:读取 ?m= 参数 */
- const param = new URLSearchParams(location.search).get('m') || 'glm-5.2';
- renderModel(param);
- /* 语言切换后重渲染(拦截 lang-btn 点击,setLang 执行后渲染) */
- document.querySelectorAll('.lang-btn').forEach(b => b.addEventListener('click', () => {
- setTimeout(() => renderModel(new URLSearchParams(location.search).get('m') || 'glm-5.2'), 0);
- }));
- </script>
- </body>
- </html>
|