Files
memind/public/learn/join.html
T
john 348e192800 feat(learn): add family learning assistant API routes and public pages
Wire /learn static delivery, parent/child portal routes, and Tang page build scripts for 103 deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-11 17:09:52 +08:00

18 lines
1.8 KiB
HTML

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>加入家庭</title>
<style>body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC",sans-serif;background:#f2f4fa;padding:24px}.card{max-width:420px;margin:40px auto;background:#fff;border-radius:16px;padding:24px;box-shadow:0 1px 3px rgba(0,0,0,.08)}button,a.btn{display:block;width:100%;text-align:center;padding:12px;border-radius:12px;border:none;font-weight:600;text-decoration:none;margin-top:10px}button{background:#3b5bfd;color:#fff}a.btn{background:#e8edff;color:#3b5bfd}</style></head><body>
<div class="card"><h1>加入学习家庭</h1><p id="msg" class="sub">正在处理邀请…</p><a class="btn" id="login" href="/" style="display:none">登录 / 注册 Memind</a></div>
<script>
var token=new URLSearchParams(location.search).get('token');
(async function(){
var msg=document.getElementById('msg');
if(!token){msg.textContent='邀请链接无效';return}
var st=await fetch('/auth/status',{credentials:'include'}).then(function(r){return r.json()});
if(!st.authenticated||!st.user){msg.textContent='请先登录 Memind,再加入家庭';document.getElementById('login').href='/?return_to='+encodeURIComponent(location.pathname+location.search);document.getElementById('login').style.display='block';return}
try{
var j=await fetch('/api/learn/me/join',{method:'POST',credentials:'include',headers:{'Content-Type':'application/json'},body:JSON.stringify({token:token})}).then(function(r){return r.json()});
if(j.error)throw new Error(j.error);
msg.textContent='已加入「'+j.family.name+'」,正在进入家长后台…';
location.href='/learn/parent.html?f='+encodeURIComponent(j.family.slug);
}catch(e){msg.textContent=e.message}
})();
</script></body></html>