(function () { const elements = { title: document.getElementById("mainTitle"), corpName: document.getElementById("corpName"), hintText: document.getElementById("hintText"), openButton: document.getElementById("openButton"), statusText: document.getElementById("statusText"), primaryInitial: document.getElementById("primaryInitial"), primaryAvatar: document.getElementById("primaryAvatar"), primaryAvatarFallback: document.getElementById("primaryAvatarFallback"), secondaryAvatar: document.getElementById("secondaryAvatar"), secondaryAvatarFallback: document.getElementById("secondaryAvatarFallback"), friendMeta: document.getElementById("friendMeta"), }; let scheme = ""; function normalizeText(value) { return typeof value === "string" ? value.trim() : value ? String(value).trim() : ""; } function getRecordId() { const params = new URLSearchParams(window.location.search); const queryId = normalizeText(params.get("id")); if (queryId) return queryId; const match = window.location.pathname.match(/\/sms\/([^/?#]+)/); return match ? decodeURIComponent(match[1]) : ""; } function getApiBase() { const apiUrl = normalizeText(window.api_url); return apiUrl ? apiUrl.replace(/\/+$/, "") : ""; } function setStatus(text) { elements.statusText.textContent = text; } function setError(message) { elements.title.textContent = "链接暂不可用"; elements.hintText.textContent = message || "请联系工作人员重新获取好友链接"; elements.friendMeta.textContent = ""; elements.openButton.textContent = "无法打开"; elements.openButton.disabled = true; setStatus(""); } function setAvatar(src, friendName, imageEl, fallbackEl) { const avatar = normalizeText(src); if (fallbackEl === elements.primaryAvatarFallback) { elements.primaryInitial.textContent = friendName.slice(0, 1) || "医"; } fallbackEl.classList.remove("has-image"); imageEl.removeAttribute("src"); if (!avatar) return; imageEl.onload = function () { fallbackEl.classList.add("has-image"); }; imageEl.onerror = function () { fallbackEl.classList.remove("has-image"); imageEl.removeAttribute("src"); }; imageEl.src = avatar; } function fillPage(data) { const friendName = normalizeText(data.friendName) || "医生"; const corpName = normalizeText(data.corpName) || "患者精益管理服务平台"; const friendJob = normalizeText(data.friendJob || data.job); const friendIntro = normalizeText(data.friendIntro || data.memberTroduce); const friendAvatar = normalizeText(data.friendAvatar || data.avatar); const avatarList = Array.isArray(data.avatarList) ? data.avatarList.map(normalizeText).filter(Boolean) : []; const secondaryAvatar = normalizeText(data.patientAvatar || data.customerAvatar || avatarList[1]); const title = friendName.endsWith("医生") ? `${friendName}服务好友` : `${friendName}医生服务好友`; document.title = normalizeText(data.title) || "添加好友"; elements.title.textContent = title; elements.corpName.textContent = corpName; elements.friendMeta.textContent = friendJob || friendIntro || ""; elements.friendMeta.hidden = !elements.friendMeta.textContent; elements.hintText.textContent = normalizeText(data.hintText) || "点击下方按钮,添加企业微信好友"; elements.openButton.textContent = normalizeText(data.actionText) || "去 加 好 友"; setAvatar(friendAvatar || avatarList[0], friendName, elements.primaryAvatar, elements.primaryAvatarFallback); setAvatar(secondaryAvatar, "患", elements.secondaryAvatar, elements.secondaryAvatarFallback); elements.openButton.disabled = false; scheme = normalizeText(data.scheme); setStatus(""); } async function loadLink() { const recordId = getRecordId(); if (!recordId) { setError("好友链接参数缺失"); return; } try { const apiBase = getApiBase(); if (!apiBase) { setError("接口地址未配置"); return; } const response = await fetch(`${apiBase}/sms/friend-link/${encodeURIComponent(recordId)}/data`, { method: "GET", }); const contentType = response.headers.get("content-type") || ""; if (!contentType.includes("application/json")) { setError("好友链接不存在或已失效"); return; } const result = await response.json(); if (!response.ok || !result.success || !result.data?.scheme) { setError(result.message || "好友链接不存在或已失效"); return; } fillPage(result.data); } catch (error) { setError("好友链接加载失败,请稍后重试"); } } elements.openButton.addEventListener("click", function () { if (!scheme) return; window.location.href = scheme; }); loadLink(); })();