From 732e0d7a4ac70f3951e0df27b644fa0618c8acdd Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Wed, 17 Jun 2026 11:03:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=9B=B4=E6=96=B0=20README.md=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=9F=AD=E8=B7=AF=E5=BE=84=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E5=B9=B6=E6=B7=BB=E5=8A=A0=E8=BF=90=E8=90=A5=E5=95=86=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E4=B8=B4=E6=97=B6=E5=9C=B0=E5=9D=80=EF=BC=9B=E5=9C=A8?= =?UTF-8?q?=20main.js=20=E4=B8=AD=E6=B7=BB=E5=8A=A0=E5=AE=A1=E6=A0=B8?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F=E5=92=8C=E9=BB=98=E8=AE=A4=E5=A5=BD=E5=8F=8B?= =?UTF-8?q?=E9=93=BE=E6=8E=A5=E6=95=B0=E6=8D=AE=EF=BC=9B=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E6=A0=B7=E5=BC=8F=E6=96=87=E4=BB=B6=E4=B8=AD=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E5=A4=A7=E5=B0=8F=E5=92=8C=E6=A0=B7=E5=BC=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +++++++++++- src/main.js | 40 ++++++++++++++++++++++++++++++++++++---- src/styles.css | 18 ++++++++++++------ 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 79dd69e..d68002b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # YKT Friend Bridge H5 -短信好友邀请中转页。发布包名为 `sms.zip`,默认短路径为 `/sms/{recordId}`。 +短信好友邀请中转页。发布包名为 `sms.zip`,默认短路径为 `/sms/{id}`。 + +正式短信链接由后端生成随机短码,路径形态为 `/sms/{shortCode}`,例如 `/sms/K8q2Z`。 ## Local Dev @@ -20,6 +22,14 @@ api_url=http://localhost:8080 http://localhost:5174/sms/{recordId} ``` +运营商审核临时写死地址: + +```text +https://ykt.youcan365.com/sms/7du4g +``` + +当前 `src/main.js` 开启 `REVIEW_MODE`,页面不请求后端接口,直接使用审核用好友链接数据。 + 本地服务端默认读取: ```text diff --git a/src/main.js b/src/main.js index 9511bbb..033167a 100644 --- a/src/main.js +++ b/src/main.js @@ -13,6 +13,26 @@ 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) { @@ -46,15 +66,20 @@ setStatus(""); } - function setAvatar(src, friendName, imageEl, fallbackEl) { + 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) return; + if (!avatar && !fallbackAvatar) { + fallbackEl.hidden = true; + return; + } imageEl.onload = function () { fallbackEl.classList.add("has-image"); }; @@ -62,7 +87,7 @@ fallbackEl.classList.remove("has-image"); imageEl.removeAttribute("src"); }; - imageEl.src = avatar; + imageEl.src = avatar || fallbackAvatar; } function fillPage(data) { @@ -83,7 +108,9 @@ 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); + setAvatar(secondaryAvatar, "患", elements.secondaryAvatar, elements.secondaryAvatarFallback, { + fallbackAvatar: false, + }); elements.openButton.disabled = false; scheme = normalizeText(data.scheme); setStatus(""); @@ -96,6 +123,11 @@ return; } + if (REVIEW_MODE && recordId === REVIEW_RECORD_ID) { + fillPage(REVIEW_FRIEND_LINK_DATA); + return; + } + try { const apiBase = getApiBase(); if (!apiBase) { diff --git a/src/styles.css b/src/styles.css index 868b7c5..0606f97 100644 --- a/src/styles.css +++ b/src/styles.css @@ -155,20 +155,26 @@ body { .avatar-large { left: 0; top: 0; - width: 36px; - height: 36px; - border-radius: 2px; + width: 72px; + height: 72px; + border-radius: 6px; + background: #f4f5f7; } .avatar-small { right: 0; bottom: 0; - width: 36px; - height: 36px; - border-radius: 2px; + width: 28px; + height: 28px; + border: 2px solid #fff; + border-radius: 50%; background: linear-gradient(160deg, #d5e8ff, #48a0ff); } +.avatar-small[hidden] { + display: none; +} + .doctor-name { margin: 20px 0 0; color: #1d2129;