diff --git a/docs/contact-telegram-channels-design.html b/docs/contact-telegram-channels-design.html index 8e0d4f7..e4e4c92 100644 --- a/docs/contact-telegram-channels-design.html +++ b/docs/contact-telegram-channels-design.html @@ -90,6 +90,9 @@ .p-detail-hd .nm{font-size:18px;font-weight:700;color:var(--p-fg1)} .p-detail-hd .sb{color:var(--p-fg3);font-size:12.5px} .hide{display:none!important} + .p-card.disabled{opacity:.5;cursor:not-allowed} + .p-card.disabled:hover{border-color:var(--p-border);background:var(--p-surface)} + .p-soon{font-size:10px;font-weight:600;padding:1px 7px;border-radius:999px;background:var(--p-bg-subtle);color:var(--p-fg3);border:1px solid var(--p-border)} .flag{margin-left:auto;color:var(--p-fg3);font-size:12px} .toggles{display:flex;gap:8px;margin:10px 0 2px} .toggles button{background:var(--panel2);color:var(--fg2);border:1px solid var(--border);border-radius:8px;padding:6px 12px;font-size:13px;cursor:pointer} @@ -141,9 +144,9 @@ › -
同一原型内切换三态 · 真机为路由 push(移动端整页)/ 内容区替换(桌面)
+同一原型内切换三态 · 真机为路由 push(移动端整页)/ 内容区替换(桌面)。 +L1 上 LINE 为灰置「即将开放」不可点;「L2 · LINE」按钮仅用于预览其预留的二级结构(去灰后即此样式)。
tg://resolve?domain=… 唤起已装 Telegram,失败回退 https://t.me/…(浏览器)。
enabled=0 → L1 不展示该平台;二级页某分组为空 → 不渲染该分组标题。
-全部为空的平台不出现在联系页。enabled=0(或库里无该平台行)→ 默认 L1 不展示该平台;二级页某分组为空 → 不渲染该分组标题。comingSoon 列表(当前 = [line])。列在其中且暂无 enabled 链接的平台,L1 置灰 + 「即将开放」角标、不可点进(占位预告,不隐藏)。
+运营在库里配好该平台链接后,从 comingSoon 列表移除该项(一行代码)→ 自动变可点二级页。LINE 即走此路:结构与 Telegram 同构,先灰、内容就绪即上。单表承载 L1 平台入口与 L2 子项:一行 = 一条可点链接。L1 由 platform 聚合而来,二级由 kind 分组。
一张表覆盖所有联系方式 —— Telegram 频道/群组/Bot、LINE、邮箱、发卡商店都是 contact_link 里的一行,
+差别只在 platform(分到哪个 L1 卡)+ kind(二级分到哪组 & 动作样式)+ url 协议。
+一行 = 一条可点链接;L1 按 platform 聚合,L2 按 kind 分组。
contact_link ───────────────────────────────────────────────────────────── id INTEGER PK -platform TEXT -- telegram | line | email | store | ...(L1 分组键) +platform TEXT -- telegram | line | email | store | whatsapp | ...(L1 分组键) kind TEXT -- channel | group | bot | link(L2 分组键 & 动作样式) -title TEXT -- "穿山甲 · 官方频道" -handle TEXT -- "@PangolinVPN"(展示;可空) -url TEXT -- "https://t.me/PangolinVPN"(点击目标;App 侧优先转 tg://) +title TEXT -- "穿山甲 · 官方频道" / "邮箱客服" / "自助发卡商店" +handle TEXT -- "@PangolinVPN"(展示;可空,邮箱/商店留空) +url TEXT -- 点击目标(见下表);App 侧对 telegram 优先转 tg:// description TEXT -- 一句说明(可空) -member_hint TEXT -- "12.3k"(纯展示缓存,可空;不实时拉) verified INTEGER -- 0/1 认证勾 sort_order INTEGER -- 组内排序 enabled INTEGER -- 0/1 下线开关 locale TEXT -- "zh"|"en"|NULL(全部) 可选按语言过滤-
L1 平台的图标 / 显示名 / 强调色由前端按 platform 枚举内置(Telegram=✈+强调、LINE=💬…),
-不入库,避免图标资源塞数据库。库里只配内容。单链接平台(email/store)建议各配 1 行 kind=link。
邮箱之类怎么进这张表 —— 就是把 url 换个协议、kind=link:
| 渠道 | platform | kind | url 示例 | 动作 |
|---|---|---|---|---|
| Telegram 频道 | telegram | channel | https://t.me/PangolinVPN(App 转 tg://) | 打开 |
| Telegram 群组 | telegram | group | https://t.me/PangolinChat | 加入 |
| Telegram Bot | telegram | bot | https://t.me/PangolinVPN_bot | 打开 |
| LINE 账号 | line | link | https://line.me/R/ti/p/@pangolinvpn | 打开 |
| 邮箱客服 | email | link | mailto:support@pangolin.vpn | 打开(拉起邮件) |
| 自助发卡商店 | store | link | https://shop.pangolin.vpn | 打开(浏览器) |
| WhatsApp(将来) | whatsapp | link | https://wa.me/… | 打开 |
动作按钮文案由 kind 决定:group → 「加入」(实心强调);其余(channel/bot/link)→ 「打开」(描边)。
+点击一律「用系统方式打开 url」,App 侧仅对 telegram 平台做 https://t.me/x → tg://resolve?domain=x 的唤起优化,失败回退原 url。
唯一不入库的是「皮」:L1 平台卡的图标 / 强调色 / 默认显示名由前端一个小 platform 注册表按 platform 键内置
+(telegram=✈+强调色、line=💬、email=✉、store=🛍…),避免把图标资源塞进数据库;未知 platform 用通用图标兜底。
+库里只配内容。加已有平台的新频道/群 = 纯 DB,无需发版;加一个全新平台类型(新图标)= 注册表加一行 + 发版。
GET /v1/contact # 无需登录亦可(客户端普通请求)
@@ -278,10 +294,9 @@ locale TEXT -- "zh"|"en"|NULL(全部) 可选按语言过滤
{ "platform":"telegram",
"links":[
{"kind":"channel","title":"穿山甲 · 官方频道","handle":"@PangolinVPN",
- "url":"https://t.me/PangolinVPN","description":"产品更新与公告",
- "member_hint":"12.3k","verified":true},
+ "url":"https://t.me/PangolinVPN","description":"产品更新与公告","verified":true},
{"kind":"group","title":"穿山甲 · 用户交流群","handle":"@PangolinChat",
- "url":"https://t.me/PangolinChat","description":"使用问题互助","member_hint":"8.7k"},
+ "url":"https://t.me/PangolinChat","description":"使用问题互助"},
{"kind":"bot","title":"客服机器人","handle":"@PangolinVPN_bot",
"url":"https://t.me/PangolinVPN_bot","description":"自动答疑/提交工单"}
]},
@@ -296,13 +311,19 @@ locale TEXT -- "zh"|"en"|NULL(全部) 可选按语言过滤
server/migrations/{mysql,sqlite}/ 各加建表 + 种子数据(把现有 4 渠道灌入,Telegram 先补真实频道/群)。member_hint 手工填/留空)/v1/contact 还是并进现有配置引导(如 /me bootstrap)一起下发?member_hint。kind=group,实心强调);频道/Bot/普通链接 「打开」(描边)。GET /v1/contact(不并进 /me 引导)。contact_link 表:邮箱/发卡/LINE 与 Telegram 同表,靠 url 协议区分(mailto: / https: / tg://)。