163 lines
5.9 KiB
JavaScript
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();
|
|
})();
|