GX720 GX720 Member Service

房产地图 · 会员服务

面向房产讲盘、城市全景展示和直播内容生产的会员工具包。

VR 全景浏览
Map 地图找房
KGT 控规图权益

选择会员套餐

选择套餐后会打开支付宝收银台,支付成功自动开通 VIP。

支付宝收银台
限时特惠 会员活动进行中 后台可设置折扣、暂停活动和调整到期时间。
剩余 -- -- -- --
周卡
19.90

短期体验 VR 全景、地图和控规图工具。

7 天有效期
月卡
39.90 69.90元

短期使用 VR 全景、地图和控规图工具。

1 个月有效期
推荐
年卡
368.00 499.00元

适合经纪人、置业顾问和内容运营长期使用。

12 个月有效期
机构年卡
1680.00 1999.00元

适合团队账号和多项目内容服务场景。

12 个月有效期
选择套餐后将创建订单并打开支付宝收银台。
卡密开通 已有 VIP 年卡卡密,可直接激活会员。

会员权益

围绕看房、讲盘、内容素材和地图工具组织。

01

无广告浏览

VIP 使用 VR 全景和控规图时减少干扰,适合直播讲解和客户演示。

02

地图找房工具

结合楼盘坐标、全景点位和城市片区,更快定位项目。

03

控规图权益

年费会员可配合控规图资料使用,支持日常选址和讲盘。

04

直播素材

全景截图、城市航拍和楼盘素材可用于内容生产。

05

学区查询

围绕楼盘、道路和学校标注辅助客户沟通。

06

客服响应

会员问题优先处理,减少资料和使用上的沟通成本。

`; payWindow.document.open(); payWindow.document.write(html); payWindow.document.close(); payWindow.focus(); } function openPayWindow() { const payWindow = window.open("", "gx720_vip_alipay", "width=520,height=720,menubar=no,toolbar=no,location=no,status=no,resizable=yes,scrollbars=yes"); if (!payWindow) return null; activePayWindow = payWindow; writePayWindow(payWindow, { state: "loading", title: "正在创建支付宝订单", message: "订单创建成功后会自动打开支付宝收银台。", }); return payWindow; } function redirectToPayUrl(payUrl, orderNo, payWindow = activePayWindow) { if (!payUrl) return; if (result) { result.innerHTML = `支付宝收银台已在新窗口打开,订单号:${escapeHtml(orderNo)}`; } if (payWindow && !payWindow.closed) { writePayWindow(payWindow, { state: "loading", title: "正在打开支付宝收银台", message: "请在新窗口中使用支付宝扫码完成支付。", orderNo, }); window.setTimeout(() => { if (!payWindow.closed) payWindow.location.href = payUrl; }, 120); } else { window.open(payUrl, "gx720_vip_alipay", "width=520,height=720,menubar=no,toolbar=no,location=no,status=no,resizable=yes,scrollbars=yes"); } } function startOrderPolling(orderNo) { stopOrderPolling(); orderPollTimer = window.setInterval(async () => { orderPollCount += 1; try { const response = await fetch(`${API_BASE}/api/payments/vip-orders/${encodeURIComponent(orderNo)}/?refresh=1`, { credentials: "include", }); const data = await response.json().catch(() => ({})); if (data.status === "paid") { stopOrderPolling(); if (result) { result.innerHTML = `
会员已开通 ${escapeHtml(data.plan?.name || "VIP")} · 有效期已更新
`; } window.dispatchEvent(new CustomEvent("gx:member-updated")); } else if (["closed", "failed"].includes(data.status)) { stopOrderPolling(); if (result) result.textContent = data.status === "closed" ? "订单已关闭,请重新下单。" : "支付失败,请重新下单。"; } } catch (error) { console.warn("Failed to poll VIP order", error); } if (orderPollCount >= 150) { stopOrderPolling(); if (result) result.textContent = "支付状态确认超时,如已付款请稍后刷新会员状态。"; } }, 2000); } async function createVipOrder(planId) { if (!result || !planId) return; stopOrderPolling(); const payWindow = openPayWindow(); if (!payWindow) { showPayNotice("浏览器拦截了支付窗口,请允许弹出窗口后重试。", "warning"); return; } result.textContent = "已打开支付窗口,正在创建订单..."; try { const response = await fetch(`${API_BASE}/api/payments/vip-orders/`, { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ plan_id: Number(planId), channel: "alipay" }), }); const data = await response.json().catch(() => ({})); if (response.status === 401) { if (payWindow && !payWindow.closed) payWindow.close(); result.textContent = ""; showPayNotice("请先登录会员帐号,再打开支付宝收银台。", "warning"); showLogin(); return; } if (!response.ok && response.status !== 202) { const message = data.detail || "订单创建失败"; result.textContent = message; showPayNotice(message, "error"); writePayWindow(payWindow, { state: "error", title: "订单创建失败", message, orderNo: data.order_no, }); return; } const payUrl = data.payment?.pay_url || data.pay_url; if (payUrl && data.order_no) { redirectToPayUrl(payUrl, data.order_no, payWindow); startOrderPolling(data.order_no); return; } const codeUrl = data.payment?.code_url || data.code_url; if (codeUrl && data.order_no) { renderPayQr(data.order_no); startOrderPolling(data.order_no); return; } result.innerHTML = `订单号:${escapeHtml(data.order_no)}
${escapeHtml(data.detail || "订单已创建,等待支付配置返回二维码。")}`; } catch (error) { result.textContent = "订单创建失败"; console.warn("Failed to create VIP order", error); } } async function activateVipCode() { if (!codeInput || !codeResult) return; const code = codeInput.value.trim(); if (!code) { codeResult.textContent = "请输入卡密。"; return; } codeResult.textContent = "正在激活卡密..."; try { const response = await fetch(`${API_BASE}/api/payments/vip-codes/activate/`, { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ code }), }); const data = await response.json().catch(() => ({})); if (response.status === 401) { codeResult.textContent = "请先登录再激活卡密。"; showLogin(); return; } if (!response.ok) { codeResult.textContent = data.detail || "卡密激活失败。"; return; } codeInput.value = ""; codeResult.innerHTML = `卡密激活成功,VIP 到期时间:${escapeHtml(formatVipTime(data.vip_expires_at))}`; closeCodeModal(); window.dispatchEvent(new CustomEvent("gx:member-updated")); } catch (error) { codeResult.textContent = "卡密激活失败,请稍后重试。"; console.warn("Failed to activate VIP code", error); } } function formatVipTime(value) { if (!value) return "已更新"; const date = new Date(value); if (Number.isNaN(date.getTime())) return String(value); return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, "0")}-${String(date.getDate()).padStart(2, "0")}`; } payButton?.addEventListener("click", () => createVipOrder(selectedPlanId())); codeOpen?.addEventListener("click", openCodeModal); document.querySelectorAll("[data-vip-code-close]").forEach((item) => item.addEventListener("click", closeCodeModal)); document.addEventListener("keydown", (event) => { if (event.key === "Escape" && codeModal?.getAttribute("aria-hidden") === "false") closeCodeModal(); }); codeForm?.addEventListener("submit", (event) => { event.preventDefault(); activateVipCode(); }); renderPromotion({ title: "限时 8 折会员活动", discount_percent: "80.00", ends_at: new Date(Date.now() + 7 * 86400000).toISOString() }); loadVipPlans(); bindPlanCards(); })();