diff --git a/pages/experience-coupon/claim.vue b/pages/experience-coupon/claim.vue index 4fbdfba..bb24395 100644 --- a/pages/experience-coupon/claim.vue +++ b/pages/experience-coupon/claim.vue @@ -54,6 +54,7 @@ const posterVisible = ref(false); const archiveBindPending = ref(false); const bindingTeamId = ref(""); const bindCorpName = ref(""); +const bindingTeam = ref(null); const projectNameText = computed(() => { const projects = Array.isArray(issue.value?.projectSnapshot) ? issue.value.projectSnapshot : []; @@ -70,7 +71,7 @@ async function ensureLogin() { if (!account.value) await login(); if (!account.value) { tip.value = "请先登录后再领取体验券"; - uni.navigateTo({ url: "/pages/login/login" }); + await openTeamLogin(); return false; } return true; @@ -107,7 +108,7 @@ async function getIssueCustomer({ force = false } = {}) { issueCustomer.value = customer; bindCorpName.value = detail?.corpName || issue.value?.corpName || ""; const teamIds = Array.isArray(customer?.teamId) ? customer.teamId : [customer?.teamId]; - bindingTeamId.value = teamIds.find(Boolean) || ""; + bindingTeamId.value = issue.value?.teamId || teamIds.find(Boolean) || ""; return customer; } catch (e) { console.warn("getCustomerByCustomerId failed", e); @@ -140,26 +141,52 @@ function buildTeamLoginUrl() { return `/pages/login/login?${query}`; } -async function ensurePhoneAuthorized() { - if (account.value?.mobile) return true; +async function getBindingTeam() { + if (!corpId.value || !bindingTeamId.value) return null; + if (bindingTeam.value) return bindingTeam.value; + try { + const res = await api( + "getTeamData", + { corpId: corpId.value, teamId: bindingTeamId.value, withCorpName: true }, + false + ); + const data = res?.data || null; + bindingTeam.value = data; + bindCorpName.value = data?.corpName || data?.corp_name || bindCorpName.value; + return data; + } catch (e) { + console.warn("getTeamData failed", e); + return null; + } +} +async function openTeamLogin() { const customer = await getIssueCustomer(); if (!customer || !bindingTeamId.value) { tip.value = "体验券发放档案缺少所属团队,暂无法领取"; return false; } + const team = await getBindingTeam(); set("invite-team-info", { corpId: corpId.value, teamId: bindingTeamId.value, corpName: bindCorpName.value || issue.value?.corpName || "", - teamName: issue.value?.teamName || "", - avatars: [], + teamName: team?.name || team?.teamName || "", + avatars: Array.isArray(team?.memberList) + ? team.memberList.map((member) => member?.avatar || "").filter(Boolean) + : [], }); - tip.value = "请先授权手机号后再领取体验券"; uni.navigateTo({ url: buildTeamLoginUrl() }); return false; } +async function ensurePhoneAuthorized() { + if (account.value?.mobile) return true; + + tip.value = "请先授权手机号后再领取体验券"; + return openTeamLogin(); +} + async function ensureTeamAdded() { const customer = await getIssueCustomer(); if (!customer || !bindingTeamId.value) { @@ -308,10 +335,10 @@ async function promptClaim() { async function bootstrap() { loading("加载中..."); try { - const okLogin = await ensureLogin(); - if (!okLogin) return; const okDetail = await loadIssueDetail(); if (!okDetail) return; + const okLogin = await ensureLogin(); + if (!okLogin) return; const phoneAuthorized = await ensurePhoneAuthorized(); if (!phoneAuthorized) return; const teamAdded = await ensureTeamAdded(); diff --git a/pages/login/login.vue b/pages/login/login.vue index e6716f0..c7c1284 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -134,7 +134,7 @@ async function bindTeam() { await syncExternalUserRelation(); const res1 = await api('getWxAppCustomerCount', { miniAppId: account.value.openid, corpId: team.value.corpId, teamId: team.value.teamId }); if (redirectUrl.value) { - attempToPage(redirectUrl.value) + await attempToPage(redirectUrl.value) } else if (res1 && res1.data > 0) { toHome(); } else { @@ -149,7 +149,7 @@ async function getPhoneNumber(e) { if (!res) return; } if (team.value) { - bindTeam() + await bindTeam() } else if (redirectUrl.value) { await attempToPage(redirectUrl.value); } else {