163 lines
5.9 KiB
JavaScript

(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"),
};
const DEFAULT_AVATAR = "/sms/assets/default-avatar.png";
const REVIEW_MODE = true;
const REVIEW_RECORD_ID = "7du4g";
const REVIEW_FRIEND_LINK_DATA = {
id: REVIEW_RECORD_ID,
corpId: "wwe3fb2faa52cf9dfb",
friendUserId: "huangjiafeng",
friendName: "黄医生",
corpName: "患者精益管理服务平台",
title: "添加好友",
actionText: "去 加 好 友",
hintText: "点击下方按钮,添加企业微信好友",
path: "pages/team/friend",
query: "corpId=wwe3fb2faa52cf9dfb&userid=huangjiafeng",
scheme: "weixin://dl/business/?t=IwNKzYOXnRo",
status: "success",
createTime: 1780540926600,
updateTime: 1780540927442,
};
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, options = {}) {
const avatar = normalizeText(src);
const fallbackAvatar = options.fallbackAvatar === false ? "" : DEFAULT_AVATAR;
if (fallbackEl === elements.primaryAvatarFallback) {
elements.primaryInitial.textContent = friendName.slice(0, 1) || "医";
}
fallbackEl.classList.remove("has-image");
imageEl.removeAttribute("src");
fallbackEl.hidden = false;
if (!avatar && !fallbackAvatar) {
fallbackEl.hidden = true;
return;
}
imageEl.onload = function () {
fallbackEl.classList.add("has-image");
};
imageEl.onerror = function () {
fallbackEl.classList.remove("has-image");
imageEl.removeAttribute("src");
};
imageEl.src = avatar || fallbackAvatar;
}
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, {
fallbackAvatar: false,
});
elements.openButton.disabled = false;
scheme = normalizeText(data.scheme);
setStatus("");
}
async function loadLink() {
const recordId = getRecordId();
if (!recordId) {
setError("好友链接参数缺失");
return;
}
if (REVIEW_MODE && recordId === REVIEW_RECORD_ID) {
fillPage(REVIEW_FRIEND_LINK_DATA);
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();
})();