PageSourceSearch

https://watcha.cn/_nuxt/fhMTmC4F.js

js watcha.cn collected 2026-10-07 03:07:36 UTC 34,959 bytes, 1 lines download raw bytes

1import{ct as de,c5 as ne,df as K,bv as A,cd as X,bn as J,o as a,m as o,G as e,y as f,bF as c,F as S,K as $,A as N,t as P,dZ as V,E as I,gs as me,bo as T,bm as _,de as j,bA as D,cF as se,fB as le,f6 as fe,dm as Ae,dn as we,r as ie,L as x,bP as De,n as H,fz as qe,N as U,cm as ce,bQ as Ee,fo as Oe,bW as Ge,bk as $e,gt as O,d4 as Ve,b7 as ye,bb as Ue,cr as Fe,aj as He,ce as We,T as Ce,d5 as Ye,u as xe,gu as _e,ao as Ze,es as Je,bY as Ke}from"./zBomRP-_.js";import{u as ve}from"./NaRybLV7.js";import{c as Xe}from"./DnZ8uqQ2.js";import{M as Le}from"./DDGrID3F.js";import"./CccGf0K7.js";const et=de("book-open",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);const Re=de("message-square-text",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}],["path",{d:"M13 8H7",key:"14i4kc"}],["path",{d:"M17 12H7",key:"16if0g"}]]);const he=de("package-open",[["path",{d:"M12 22v-9",key:"x3hkom"}],["path",{d:"M15.17 2.21a1.67 1.67 0 0 1 1.63 0L21 4.57a1.93 1.93 0 0 1 0 3.36L8.82 14.79a1.655 1.655 0 0 1-1.64 0L3 12.43a1.93 1.93 0 0 1 0-3.36z",key:"2ntwy6"}],["path",{d:"M20 13v3.87a2.06 2.06 0 0 1-1.11 1.83l-6 3.08a1.93 1.93 0 0 1-1.78 0l-6-3.08A2.06 2.06 0 0 1 4 16.87V13",key:"1pmm1c"}],["path",{d:"M21 12.43a1.93 1.93 0 0 0 0-3.36L8.83 2.2a1.64 1.64 0 0 0-1.63 0L3 4.57a1.93 1.93 0 0 0 0 3.36l12.18 6.86a1.636 1.636 0 0 0 1.63 0z",key:"12ttoo"}]]);function tt(){return K("/checkins")}function st(){return ne("/checkins/today")}function at(t){return ne("/checkins/calendar",t)}function nt(){return{async checkin(){return(await tt()).data},async getToday(){return(await st()).data},async getCalendar(t){return(await at(t)).data}}}const Ie=nt(),it={class:"daily-checkin-card"},ot={class:"daily-date"},lt={class:"checkin-summary"},rt={class:"checkin-title"},ut=["disabled"],ct={key:1,class:"reward-result"},dt=["src"],mt=A({__name:"index",props:{status:{},loading:{type:Boolean,default:!1}},emits:["checkedIn"],setup(t,{emit:l}){const s=t,b=l,v=T(!1),u=T(0),d=X(),p=new Intl.DateTimeFormat("zh-CN",{month:"long",day:"numeric",weekday:"short",timeZone:"Asia/Shanghai"}).format(new Date),y=_(()=>d.isLogin?s.loading?"正在查询今日签到状态…":u.value?`今天抽到了 ${u.value} 瓜子,明天再来试试手气`:s.status?.checked_in?"今日已签到,明天再来试试手气":"今日签到可随机获得 5~15 瓜子。":"登录后每天签到,都能收获一份随机瓜子奖励。"),C=_(()=>s.loading?"加载中…":v.value?"签到中…":s.status?.checked_in?"今日已签到":d.isLogin?"立
1即签到":"登录后签到");J(()=>d.isLogin,n=>{n||(u.value=0)});async function w(){if(!(!d.ensureLogin()||v.value||s.status?.checked_in)){v.value=!0;try{const n=await Ie.checkin();u.value=n.reward_count,b("checkedIn",n),j.success(`签到成功,+${n.reward_count} 瓜子`)}catch{}finally{v.value=!1}}}return(n,r)=>(a(),o("article",it,[e("span",ot,f(c(p)),1),e("div",lt,[e("div",rt,[c(d).isLogin?(a(),o(S,{key:1},[r[0]||(r[0]=$("已连续签到 ",-1)),e("strong",null,f(t.loading||!t.status?"—":t.status.streak_days),1),r[1]||(r[1]=$(" 天",-1))],64)):(a(),o(S,{key:0},[$("每天来领一把瓜子")],64))]),e("p",null,f(y.value),1),e("button",{type:"button",class:N(["checkin-button",{"is-completed":t.status?.checked_in}]),disabled:t.loading||v.value||t.status?.checked_in,onClick:w},[t.loading||v.value?(a(),P(c(V),{key:0,size:18,class:"animate-spin"})):I("",!0),e("span",null,f(C.value),1),c(d).isLogin&&u.value?(a(),o("span",ct,[e("img",{src:c(me),alt:""},null,8,dt),$("+"+f(u.value)+" 瓜子",1)])):I("",!0)],10,ut)])]))}}),vt=Object.assign(D(mt,[["__scopeId","data-v-a753aed0"]]),{__name:"DailyCheckinCard"});function Se(t){return t?.items.filter(l=>l.promotion_name==="瓜子").reduce((l,s)=>l+s.count,0)??0}function Me(t){const l=Se(t);return l>0?`+${l} 瓜子`:"任务奖励"}function ae(t){if(!t)return"";if(typeof t=="string")try{const l=JSON.parse(t);if(l&&typeof l=="object")return ae(l)}catch{return t.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim()}if(Array.isArray(t))return t.map(ae).filter(Boolean).join(" ");if(typeof t=="object"){const l=t;return typeof l.text=="string"?l.text:ae(l.content)}return""}function gt(t){return K("/quests/progresses/batch-by-codes",t)}function pt(t){return ne(`/quests/${t}/progresses`)}function ft(t){return ne("/quests/progresses/me",t)}function yt(t){return K(`/quests/${t}/receive`)}function _t(t,l){return K(`/quests/${t}/claim-reward`,l)}function ht(t,l,s){return K(`/quests/${t}/completion-items/${l}/claim-reward`,s)}function re(t){return se.store("quest",{...t,id:t.quest_id})}function bt(){return{async batchByCodes(t){const l=await gt({codes:t}),s={};for(const[b,v]of Object.entries(l.data.items))s[b]=re(v);return s},async get(t){const l=await pt(t);return re(l.data)},async getMany(t){return(await ft(t)).data.items.map(s=>re(s))},async receive(t){const l=se.get("quest",t);if(!l)throw new Error("receive: quest not found in store");return await le(l,s=>(s.status="__receiving",yt(t))),this.get(t)},async claimReward(t,l){const s=se.get("quest",t);if(!s)throw new Error("claimReward: quest not found in store");await le(s,b=>(b.status="__claiming",_t(t,l))),await this.get(t)},async claimItemReward(t,l,s){const b=se.get("quest",t);if(!b)throw new Error("claimItemReward: quest not found in store");await le(b,v=>{const u=v.completion_items?.find(d=>d.item_id===l);return u&&(u.status="__claiming"),ht(t,l,s)}),await this.get(t)}}}const G=bt(),kt={class:"daily-product-quest-card"},wt={class:"product-stage","aria-live":"polite"},qt=["inert","aria-hidden"],$t=["src","alt"],Ct={key:1,class:"product-cover cover-placeholder"},xt={key:1,class:"product-status-cover"},Lt={class:"product-status-copy"},Rt={class:"product-footer"},It={key:0,class:"product-author"},St=["src"],Mt={key:1,class:"product-status-skeleton"},zt=["disabled"],Tt={key:3,type:"button",class:"product-action",disabled:""},Pt={key:3,class:"product-action"},Qt={class:"recommendation-note"},Bt={key:0},jt=A({__name:"index",props:{quest:{},products:{default:()=>[]},loading:{type:Boolean,default:!1},error:{type:Boolean,default:!1}},emits:["retry","rewardClaimed"],setup(t,{emit:l}){const s=t,b=l,v=T(0),u=X(),d=fe("(min-width: 840px)"),p=fe("(prefers-reduced-motion: reduce)"),y=_(()=>s.products[v.value]),C=_(()=>y.value?Ge(y.value):"/products"),w=_(()=>Se(s.quest?.reward));function n(z){s.products.length<2||(v.value=(v.value+z+s.products.length)%s.products.length)}async function r(){if(!(!s.quest||s.quest.status!=="claimable"))try{await G.claimReward(s.quest.quest_id,s.quest.quest_instance_id?{instance_id:s.quest.quest_instance_id}:void 0),b("rewardClaimed"),j.success("今日猹评奖励领取成功")}catch{}}J(()=>s.products,z=>{v.value>=z.length&&(v.value=0)});const q=_(()=>!s.loading&&!s.error&&s.quest&&y.value?s.products:[void 0,void 0,void 0]);function i(z){return(z-(y.value?v.value:0)+q.value.length)%q.value.length}let M;function Q(){M!==void 0&&clearInterval(M),M=void 0}return J(()=>[d.value,p.value,s.loading,s.error,s.quest?.status,s.products.length],()=>{Q(),!(!d.value||p.value||s.loading||s.error||s.products.length<2)&&(!s.quest||!["in_progress","claimable","completed"].includes(s.quest.status)||(M=Ae(()=>n(1),6800)))},{immediate:!0}),we(Q),(z,m)=>{const L=ie("RouterLink");return a(),o("article",kt,[t.products.length>
11?(a(),o("button",{key:0,type:"button",class:"carousel-arrow is-prev","aria-label":"上一个推荐产品",onClick:m[0]||(m[0]=h=>n(-1))},[x(c(De),{size:24})])):I("",!0),e("div",wt,[(a(!0),o(S,null,H(q.value,(h,R)=>(a(),o("article",{key:h?.id??`status-${R}`,class:N(["product-card",[`is-position-${i(R)}`,{"is-active":i(R)===0}]]),inert:i(R)!==0?!0:void 0,"aria-hidden":i(R)!==0},[h?(a(),o(S,{key:0},[h.image_url?(a(),o("img",{key:0,class:"product-cover",src:h.image_url,alt:h.name},null,8,$t)):(a(),o("div",Ct,[x(c(he),{size:36})]))],64)):(a(),o("div",xt,[e("div",Lt,[t.loading?(a(),o(S,{key:0},[m[3]||(m[3]=e("strong",null,"正在读取今日推荐",-1)),m[4]||(m[4]=e("span",null,"今日推荐将在当天保持不变",-1))],64)):t.error?(a(),o(S,{key:1},[m[5]||(m[5]=e("strong",null,"今日推荐暂时加载失败",-1)),m[6]||(m[6]=e("span",null,"请稍后重试,今日推荐不会因刷新而改变",-1))],64)):t.quest?(a(),o(S,{key:3},[m[8]||(m[8]=e("strong",null,"今日推荐准备中",-1)),m[9]||(m[9]=e("span",null,"暂时没有可展示的产品,请稍后再来",-1))],64)):(a(),o(S,{key:2},[e("strong",null,f(c(u).isLogin?"今日任务暂未开放":"登录后查看今日推荐"),1),m[7]||(m[7]=e("span",null,"登录后即可查看今日推荐和完成进度",-1))],64))])])),e("div",Rt,[h?(a(),o("div",It,[h.avatar_url?(a(),o("img",{key:0,src:h.avatar_url,alt:""},null,8,St)):(a(),P(c(he),{key:1,size:32,class:"shrink-0"})),e("div",null,[e("strong",null,f(h.name),1),e("span",null,f(h.slogan||"去产品详情页发表你的真实体验"),1)])])):(a(),o("div",Mt,[...m[10]||(m[10]=[e("i",{class:"skeleton-avatar"},null,-1),e("div",null,[e("i"),e("i")],-1)])])),i(R)===0?(a(),o(S,{key:2},[t.error?(a(),o("button",{key:0,type:"button",class:"product-action",onClick:m[1]||(m[1]=E=>b("retry"))}
1,[m[11]||(m[11]=$(" 重新加载 ",-1)),x(c(qe),{size:15})])):t.quest?.status==="claimable"||t.quest?.status==="__claiming"?(a(),o("button",{key:1,type:"button",class:"product-action reward-action",disabled:t.quest.status==="__claiming",onClick:r},[t.quest.status==="__claiming"?(a(),P(c(V),{key:0,size:16,class:"animate-spin"})):I("",!0),$(" "+f(t.quest.status==="__claiming"?"领取中…":`领取 ${w.value} 瓜子`),1)],8,zt)):y.value?(a(),P(L,{key:2,class:"product-action",to:C.value},{default:U(()=>[$(f(t.quest?.status==="completed"?"继续逛产品":"去测评")+" ",1),x(c(ce),{size:16})]),_:1},8,["to"])):(a(),o("button",Tt,f(t.quest?.status==="receivable"?"任务准备中":"暂不可用"),1))],64)):h?(a(),o("span",Pt,[m[12]||(m[12]=$("去测评 ",-1)),x(c(ce),{size:16})])):I("",!0)])],10,qt))),128))]),t.products.length>1?(a(),o("button",{key:1,type:"button",class:"carousel-arrow is-next","aria-label":"下一个推荐产品",onClick:m[2]||(m[2]=h=>n(1))},[x(c(Ee),{size:24})])):I("",!0),e("div",Qt,[x(c(Oe),{size:12}),m[13]||(m[13]=$("每天推荐3款产品",-1)),w.value?(a(),o("span",Bt,",完成测评可获得 "+f(w.value)+" 瓜子",1)):I("",!0)])])}}}),Nt=Object.assign(D(jt,[["__scopeId","data-v-4382864f"]]),{__name:"DailyProductQuestCard"});function At(){return{async createReferralCode(){return(await Xe()).data.code}}}const Dt=At(),Et={class:"invite-heading"},Ot=["src"],Gt=["disabled"],Vt={key:1,class:"invite-status"},Ut=["src"],Ft={key:1,class:"invite-link-row"},Ht={class:"truncate"},Wt=["disabled"],Yt=["src"],Zt=A({__name:"index",props:{quest:{},loading:{type:Boolean,default:!1}},emits:["rewardClaimed"],setup(t,{emit:l}){const s=t,b=l,v=T(""),u=T(!1),d=T(!1),p=X(),y=ve(),C=_(()=>v.value?`https://watcha.cn/r/${v.value}`:""),w=_(()=>C.value?C.value.replace("https://",""):s.loading?"正在生成专属链接…":"链接暂不可用,请稍后重试"),n=_(()=>s.quest?.completion_items??[]),r=_(()=>n.value.filter(L=>L.status==="claimable")),q=_(()=>n.value.filter(L=>["claimable","__claiming","claimed"].includes(L.status)).length),i=_(()=>s.loading?"加载中":`${Math.min(q.value,5)}/5`),M=_(()=>s.loading?"正在加载邀请进度…":s.quest?s.quest.status==="paused"?"任务已暂停":s.quest.status==="expired"?"今日任务已结束":q.value>=5&&!r.value.length?"今日奖励已全部领取":"":"邀请任务暂不可用");async function Q(){if(!(!p.isLogin||v.value))try{v.value=await Dt.createReferralCode()}catch{j.error("获取邀请码失败,请稍后重试")}}async function z(){if(!s.quest||d.value||!r.value.length)return;const L=r.value.map(R=>R.item_id),h=s.quest.quest_instance_id?{instance_id:s.quest.quest_instance_id}:void 0;d.value=!0;try{for(const R of L)await G.claimItemReward(s.quest.quest_id,R,h);await y.refreshGuazi(),b("rewardClaimed"),j.success(L.length>1?`已领取 ${L.length} 份邀请奖励`:"邀请奖励领取成功")}catch{await y.refreshGuazi()}finally{d.value=!1}}async function m(){if(C.value)try{await navigator.clipboard.writeText(C.value),u.value=!0,j.success("邀请链接已复制"),setTimeout(()=>{u.value=!1},2e3)}catch{j.error("复制失败,请手动复制")}}return J(()=>p.isLogin,L=>{L?Q():v.value=""}),$e(()=>{Q()}),(L,h)=>(a(),o("section",{class:N(["invite-newcomer-card",{"is-compact":!c(p).isLogin}])},[e("div",Et,[c(p).isLogin?I("",!0):(a(),o("img",{key:0,class:"invite-gift",src:c(O).inviteGift,alt:""},null,8,Ot)),e("div",null,[e("h2",null,[h[1]||(h[1]=$(" 邀请新人 ",-1)),e("span",null,"("+f(c(p).isLogin?i.value:"0/5")+")",1)]),h[2]||(h[2]=e("p",null,"邀请好友加入观猹,好友成功注册后双方均可获得30瓜子奖励,每日最多5人。",-1))]),c(p).isLogin?(a(),o(S,{key:1},[r.value.length||d.value?(a(),o("button",{key:0,type:"button",class:"claim-button invite-status",disabled:d.value,onClick:z},[d.value?(a(),P(c(V),{key:0,size:14,class:"animate-spin"})):I("",!0),$(f(d.value?"领取中…":`可领取 ${r.value.length} 份`),1)],8,Gt)):M.value?(a(),o("span",Vt,f(M.value),1)):I("",!0)],64)):I("",!0)]),c(p).isLogin?(a(),o("div",Ft,[e("div",{class:N(["link-box",{"is-placeholder":!C.value}])},[e("span",Ht,f(w.value),1)],2),e("button",{type:"button",class:"copy-button",disabled:!C.value,onClick:m},[u.value?(a(),P(c(Ve),{key:0,size:16})):(a(),o("img",{key:1,src:c(O).inviteCopy,alt:""},null,8,Yt)),$(f(u.value?"已复制":"复制链接"),1)],8,Wt)])):(a(),o("button",{key:0,t
1ype:"button",class:"login-button",onClick:h[0]||(h[0]=R=>c(p).ensureLogin())},[h[3]||(h[3]=$(" 去邀请 ",-1)),e("img",{src:c(O).inviteArrow,alt:""},null,8,Ut)]))],2))}}),Jt=Object.assign(D(Zt,[["__scopeId","data-v-334b9bb8"]]),{__name:"InviteNewcomerCard"}),Kt=["data-state","disabled"],be="cursor-pointer border-primary-500 bg-primary-500 text-white hover:border-primary-600 hover:bg-primary-600",ke="cursor-default border-primary text-primary",te="cursor-pointer border-amber-5 bg-white text-amber-5",ue="cursor-not-allowed border-[#C6CDC9] bg-[#f9f9f9] text-[#C6CDC9]",Xt="cursor-not-allowed border-gray-200 bg-gray-100 text-gray-400",es=A({__name:"index",props:{quest:{},item:{},appearance:{}},emits:["success"],setup(t,{emit:l}){const s=t,b=l,v=X();function u(n){return{className:Xt,disabled:!0,loading:!1,...n}}function d(n){switch(n){case"receivable":return u({status:n,text:"接取任务",className:be,disabled:!1,action:"receive"});case"claimable":return u({status:n,text:"领取奖励",className:te,disabled:!1,action:"claimReward"});case"in_progress":return u({status:n,text:"进行中",className:ke});case"locked":return u({status:n,text:"未解锁"});case"completed":return u({status:n,text:"已完成",className:ue});case"paused":return u({status:n,text:"已暂停",className:ue});case"expired":return u({status:n,text:"已过期"});case"__receiving":return u({status:n,text:"接取中...",className:be,loading:!0});case"__claiming":return u({status:n,text:"领取中...",className:te,loading:!0})}}function p(n){switch(n){case"claimable":return u({status:n,text:"领取奖励",className:te,disabled:!1,action:"claimItemReward"});case"in_progress":return u({status:n,text:"待完成",className:ke});case"locked":return u({status:n,text:"未解锁"});case"claimed":return u({status:n,text:"已领取",className:ue});case"__claiming":return u({status:n,text:"领取中...",className:te,loading:!0})}}const y=_(()=>s.item?p(s.item.status):d(s.quest.status));function C(){return s.quest.quest_instance_id?{instance_id:s.quest.quest_instance_id}:void 0}async function w(){const{action:n,disabled:r}=y.value;if(!(r||!n)&&v.ensureLogin())try{switch(n){case"receive":await G.receive(s.quest.quest_id),j.success("任务接取成功");break;case"claimReward":await G.claimReward(s.quest.quest_id,C()),j.success("奖励领取成功");break;case"claimItemReward":if(!s.item)return;await G.claimItemReward(s.quest.quest_id,s.item.item_id,C()),j.success("奖励领取成功");break}b("success",n)}catch{}}return(n,r)=>(a(),o("button",{type:"button",class:N(["quest-operation-button",[y.value.className,{"is-figma":t.appearance==="figma"}]]),"data-state":y.value.status,disabled:y.value.disabled,onClick:w},[y.value.loading?(a(),P(c(V),{key:0,size:14,class:"shrink-0 animate-spin"})):I("",!0),e("span",null,f(y.value.text),1)],10,Kt))}}),ze=Object.assign(D(es,[["__scopeId","data-v-7fd2d300"]]),{__name:"QuestOperationButton"}),ts=["aria-label"],ss={class:"achievement-heading"},as={class:"badge-shell"},ns=["src","alt"],is={class:"achievement-stage"},os={class:"achievement-progress"},ls={class:"progress-heading"},rs={class:"progress-track","aria-label":"成就进度"},us={class:"progress-scale"},cs="https://watcha.tos-cn-beijing.volces.com/public/badge/quest/",ds=A({__name:"index",props:{quest:{}},emits:["success"],setup(t,{emit:l}){const s={emoji:"emoji.png",like:"like.png",friends:"friends.png",write:"write.png",tea:"tea.png",aiproducts:"aiproducts.png",referral:"referral.png"},b={"milestone.emoji_master":"emoji","milestone.like":"like","milestone.user_subscribe":"friends","milestone.review":"write","milestone.posting":"tea","milestone.product_star":"aiproducts","milestone.referral":"referral"},v=t,u=l,d=_(()=>
1b[v.quest.quest_code]??"emoji"),p=_(()=>`${cs}${s[d.value]}`),y=_(()=>v.quest.quest_code==="milestone.referral"?"呼朋引猹":v.quest.name),C=_(()=>ae(v.quest.description)||"持续参与社区,解锁阶段奖励。"),w=_(()=>v.quest.completion_items??[]),n=_(()=>w.value.find(m=>m.status==="in_progress")??w.value.find(m=>m.status==="locked")??w.value.at(-1)),r=_(()=>w.value.find(m=>m.status==="claimable"||m.status==="__claiming")),q=_(()=>n.value?.progress?.target??0),i=_(()=>{const m=n.value?.progress;return!m||m.state==="unavailable"?0:Math.min(q.value,Math.max(0,m.current))}),M=_(()=>w.value.length?w.value.reduce((L,h,R)=>{if(["claimed","claimable","__claiming"].includes(h.status))return L+1;const E=h.progress;if(!E||E.state==="unavailable"||E.type!=="progress")return L;const ee=w.value[R-1]?.progress?.target??0,W=E.target-ee;return W<=0?L:L+Math.min(1,Math.max(0,(E.current-ee)/W))},0)/w.value.length*100:0),Q=_(()=>[0,...w.value.map(m=>m.progress?.target||"—")]),z=_(()=>{if(r.value)return r.value.status==="__claiming"?"领取中":"可领奖";switch(v.quest.status){case"receivable":return"待接取";case"__receiving":return"接取中";case"completed":return"已点亮";case"locked":return"待解锁";case"paused":return"已暂停";case"expired":return"已结束";default:return"成长中"}});return(m,L)=>(a(),o("article",{class:N(["milestone-badge-card",`variant-${d.value}`]),"aria-label":`${y.value}:${z.value}`},[e("div",ss,[e("div",as,[e("img",{src:p.value,alt:y.value},null,8,ns)]),e("div",null,[e("h3",null,f(y.value),1),e("p",null,f(C.value),1)])]),e("div",is,[e("div",os,[e("div",ls,[e("span",null,f(n.value?.description||n.value?.title||"持续积累,逐步点亮成就"),1),e("strong",null,f(q.value?`${i.value}/${q.value}`:"—"),1)]),e("div",rs,[e("i",{style:ye({width:`${M.value}%`})},null,4)]),e("div",us,[(a(!0),o(S,null,H(Q.value,(h,R)=>(a(),o("span",{key:R,class:N({"is-first":R===0,"is-last":R===Q.value.length-1}),style:ye({left:`${Q.value.length>1?R/(Q.value.length-1)*100:0}%`})},f(h),7))),128))])]),x(ze,{class:"achievement-action",appearance:"figma",style:{"--quest-operation-button-width":"100%","--quest-operation-button-height":"30px","--quest-operation-button-radius":"999px","--quest-operation-button-font-size":"14px"},quest:t.quest,item:r.value,onSuccess:L[0]||(L[0]=h=>u("success",h,r.value))},null,8,["quest","item"])])],10,ts))}}),ms=Object.assign(D(ds,[["__scopeId","data-v-8d645773"]]),{__name:"MilestoneBadgeCard"}),vs={class:"milestone-showcase","aria-label":"已完成的长期成就"},gs={class:"showcase-header"},ps=["aria-label","onClick"],fs=["src","alt"],ys={class:"lightbox-dialog",role:"dialog","aria-modal":"true","aria-labelledby":"milestone-lightbox-title"},_s=["src","alt"],hs={id:"milestone-lightbox-title"},bs="https://watcha.tos-cn-beijing.volces.com/public/badge/quest/",ks=A({__name:"index",props:{quests:{}},setup(t){const l={"milestone.emoji_master":"emoji.png","milestone.like":"like.png","milestone.user_subscribe":"friends.png","milestone.review":"write.png","milestone.posting":"tea.png","milestone.product_star":"aiproducts.png","milestone.referral":"referral.png"},s=T();function b(d){d.key==="Escape"&&(s.value=void 0)}function v(d){return`${bs}${l[d.quest_code]??"emoji.png"}`}function u(d){return d.quest_code==="milestone.referral"?"呼朋引猹":d.name}return $e(()=>document.addEventListener("keydown",b)),we(()=>document.removeEventListener("keydown",b)),(d,p)=>(a(),o("section",vs,[e("header",gs,[p[2]||(p[2]=e("strong",null,"已经点亮的长期成就",-1)),e("small",null,f(t.quests.length)+" 枚徽章",1)]),x(Ue,{name:"showcase-item",tag:"div",class:"showcase-rail"},{default:U(()=>[(a(!0),o(S,null,H(t.quests,y=>(a(),o("button",{key:y.quest_id,type:"button",class:"showcase-item","aria-label":`查看${u(y)}徽章大图`,onClick:C=>s.value=y},[e("img",{src:v(y),alt:u(y)},null,8,fs),e("div",null,[e("strong",null,f(u(y)),1),p[3]||(p[3]=e("span",null,"已点亮",-1))])],8,ps))),128))]),_:1}),(a(),P(Fe,{to:"body"},[x(Ce,{name:"milestone-lightbox"},{default:U(()=>[s.value?(a(),o("div",{key:0,class:"milestone-lightbox",role:"presentation",onClick:p[1]||(p[1]=He(y=>s.value=null,["self"]))},[e("section",ys,[e("button",{type:"button",class:"lightbox-close","aria-label":"关闭徽章大图",onClick:p[
10]||(p[0]=y=>s.value=null)},[x(c(We),{size:18})]),e("img",{class:"lightbox-badge",src:v(s.value),alt:u(s.value)},null,8,_s),e("h3",hs,f(u(s.value)),1),p[4]||(p[4]=e("p",null,"长期成就已点亮",-1))])])):I("",!0)]),_:1})]))]))}}),ws=Object.assign(D(ks,[["__scopeId","data-v-a228bcbc"]]),{__name:"MilestoneShowcase"}),qs={key:0,class:"newbie-quest-section"},$s=["aria-expanded"],Cs={class:"section-heading"},xs={key:0,class:"progress-summary"},Ls={key:0,class:"text-gray-3 flex items-center justify-center gap-2 py-5 text-sm"},Rs={key:0,class:"task-list"},Is={class:"task-icon"},Ss={class:"task-copy"},Ms=["src"],zs={key:0,class:"task-action completed-pill"},Ts={key:3,class:"task-action locked-pill"},Ps=A({__name:"index",props:{quest:{},loading:{type:Boolean,default:!1}},emits:["rewardClaimed"],setup(t,{emit:l}){const s=t,b=l,v={profile:_e,exam:et,first_review:Re,first_posting:Le},u={profile:"/user",exam:"/exam",first_posting:"/square/discuss",first_review:"/products"},d=T(!0),p=_(()=>s.quest?.completion_items??[]),y=_(()=>p.value.length>0&&p.value.every(n=>n.status==="claimed")),C=_(()=>p.value.filter(n=>["claimable","__claiming","claimed"].includes(n.status)).length);function w(n){return u[n]??"/"}return(n,r)=>{const q=ie("RouterLink");return t.loading||t.quest&&!y.value?(a(),o("section",qs,[e("button",{type:"button",class:"section-toggle","aria-expanded":d.value,onClick:r[0]||(r[0]=i=>d.value=!d.value)},[e("div",Cs,[e("h2",null,[r[2]||(r[2]=$(" 新手任务 ",-1)),t.quest?(a(),o("span",xs,"("+f(C.value)+"/"+f(p.value.length)+")",1)):I("",!0)]),r[3]||(r[3]=e("p",null,"完成基础任务,快速熟悉观猹",-1))]),x(c(Ye),{size:22,class:N({"is-open":d.value})},null,8,["class"])],8,$s),t.loading?(a(),o("div",Ls,[x(c(V),{size:20,class:"animate-spin"}),r[4]||(r[4]=$("正在加载新手任务… ",-1))])):I("",!0),x(Ce,{name:"task-list"},{default:U(()=>[d.value&&!t.loading?(a(),o("div",Rs,[(a(!0),o(S,null,H(p.value,i=>(a(),o("article",{key:i.item_id,class:N(["task-item",{"is-completed":i.status==="claimed"}])},[e("span",Is,[(a(),P(xe(v[i.item_id]??c(_e)),{size:24}))]),e("div",Ss,[e("div",null,[e("strong",null,f(i.title),1),e("span",null,[e("img",{src:c(me),alt:""},null,8,Ms),$(f(c(Me)(i.reward)),1)])]),e("p",null,f(i.description),1)]),i.status==="claimed"?(a(),o("span",zs,"已完成")):i.status==="claimable"||i.status==="__claiming"?(a(),P(ze,{key:1,class:"task-action",appearance:"figma",style:{"--quest-operation-button-height":"30px","--quest-operation-button-font-size":"14px"},quest:t.quest,item:i,onSuccess:r[1]||(r[1]=M=>b("rewardClaimed"))},null,8,["quest","item"])):i.status==="in_progress"?(a(),P(q,{key:2,class:"task-action",to:w(i.item_id)},{default:U(()=>[...r[5]||(r[5]=[$("去完成",-1)])]),_:1},8,["to"])):(a(),o("span",Ts,"未解锁"))],2))),128))])):I("",!0)]),_:1})])):I("",!0)}}}),Qs=Object.assign(D(Ps,[["__scopeId","data-v-fa164544"]]),{__name:"NewbieQuestSection"}),Bs={class:"weekly-quest-section"},js={key:0,class:"flex items-center justify-center gap-2 py-8 text-sm text-[#839087]"},Ns={key:1,class:"creator-grid"},As={class:"task-icon"},Ds={class:"creator-copy"},Es={class:"task-title"},Os={class:"progress-label"},Gs={class:"reward-label"},Vs=["src"],Us=["disabled","onClick"],Fs={key:1,type:"button",class:"task-action is-completed",disabled:""},Hs={key:2,type:"button",class:"task-action is-disabled",disabled:""},Ws=A({__name:"index",props:{reviewQuest:{},postingQuest:{},loading:{type:Boolean,default:!1}},emits:["rewardClaimed"],setup(t,{emit:l}){const s=t,b=l,v=ve(),u=Ze({}),d=_(()=>[p({code:"weekly.review",quest:s.reviewQuest,icon:Re,fallbackTitle:"每周猹评",description:"本周累计发布 1/2/3 篇有效猹评,分别领取奖励",link:"/products",actionText:"去发布猹评",tone:"green"}),p({code:"weekly.posting",quest:s.postingQuest,icon:Le,fallbackTitle:"每周猹馆",description:"本周累计发布 1/2/3 篇有效帖子,分别领取奖励",link:"/square/discuss",actionText:"去发布猹馆帖子",tone:"blue"})]);function p(n){const r=n.quest?.completion_items??[],q=r.filter(z=>z.status==="claimable"),i=y(r),M=r.length>0&&r.every(z=>z.status==="claimed"),Q=!n.quest||["paused","expired","locked"].includes(n.quest.status);return{...n,title:n.quest?.name||n.fallbackTitle,claimableItems:q,progressText:n.quest?`${i.current}/${i.target}`:"--/3",rewardLabel:Me(r[0]?.reward),completed:M,disabled:Q,statusText:C(n.quest)}}function y(n){const r=Math.max(0,...n.map(i=>i.progress?.current??0)),q=Math.max(3,...n.map(i=>i.progress?.target??0));return{current:Math.min(r,q),target:q}}function C(n){return n?n.status==="paused"?"任务已暂停":n.status==="expired"?"本周任务已结束":n.status==="locked"?"任务未解锁":"暂不可用":"本周任务暂不可用"}async function w(n){if(!n.quest||u[n.code]||!n.claimableItems.length)return;const r=n.claimableItems.map(i=>i.item_id),q=n.quest.quest_instance_id?{instance_id:n.quest.quest_instance_id}:void 0;u[n.code]=!0;try{for(const i of r)await G.claimItemReward(n.quest.quest_id,i,q);await v.refreshGuazi(),b("rewardClaimed"),j.success(r.length>1?`已领取 ${r.length} 份周任务奖励`:"周任务奖励领取成功")}catch{await v.refreshGuazi()}finally{u[n.code]=!1}}return(n,r)=>{const q=ie("RouterLink");return a(),o("section",Bs,[r[1]||(r[1]=e("div",{class:"section-heading"},[e("div",null,[e("h2",null,"本周创作"),e("p",null,"认真分享真实体验,猹评和猹馆帖子每周各有 3 次奖励机会")]),e("span",{class:"refresh-pill"}
1,"每周一刷新")],-1)),t.loading?(a(),o("div",js,[x(c(V),{size:20,class:"animate-spin"}),r[0]||(r[0]=$("正在加载本周进度… ",-1))])):(a(),o("div",Ns,[(a(!0),o(S,null,H(d.value,i=>(a(),o("article",{key:i.code,class:N(["creator-task",`tone-${i.tone}`])},[e("div",As,[(a(),P(xe(i.icon),{size:24}))]),e("div",Ds,[e("div",Es,[e("strong",null,f(i.title),1),e("strong",Os,"("+f(i.progressText)+")",1),e("span",Gs,[e("img",{src:c(me),alt:""},null,8,Vs),$(f(i.rewardLabel)+"/档 ",1)])]),e("p",null,f(i.description),1)]),i.claimableItems.length||u[i.code]?(a(),o("button",{key:0,type:"button",class:"claim-button task-action",disabled:u[i.code],onClick:M=>w(i)},[u[i.code]?(a(),P(c(V),{key:0,size:14,class:"animate-spin"})):I("",!0),$(" "+f(u[i.code]?"领取中…":`可领取 ${i.claimableItems.length} 份奖励`),1)],8,Us)):i.completed?(a(),o("button",Fs," 本周奖励已全部领取 ")):i.disabled?(a(),o("button",Hs,f(i.statusText),1)):(a(),P(q,{key:3,class:"task-action",to:i.link},{default:U(()=>[$(f(i.actionText),1)]),_:2},1032,["to"]))],2))),128))]))])}}}),Ys=Object.assign(D(Ws,[["__scopeId","data-v-37d9c1b9"]]),{__name:"WeeklyQuestSection"}),Zs={class:"quest-center"},Js={class:"page-header"},Ks={class:"page-heading"},Xs={class:"rules-link mobile-rules",href:"https://docs.watcha.cn/post/quest/",target:"_blank",rel:"noreferrer"},ea=["src"],ta={class:"header-actions"},sa={class:"asset-stats"},aa={class:"balance-summary"},na={class:"asset-icon"},ia=["src"],oa=["src"],la={class:"rules-link desktop-rules",href:"https://docs.watcha.cn/post/quest/",target:"_blank",rel:"noreferrer"},ra=["src"],ua={class:"page-content"},ca={class:"daily-grid"},da={key:0,class:"login-callout"},ma={key:0,class:"error-callout"},va={id:"milestone-achievements",class:"milestone-section"},ga={key:0,class:"mt-5 flex items-center justify-center gap-2 py-10 text-sm text-[#839087]"},pa={key:1,class:"milestone-content"},fa={class:"milestone-grid"},ya={class:"coming-soon-card"},_a=["src"],ha={key:2,class:"mt-5 rounded-xl bg-[#f7f9f8] px-5 py-8 text-center text-sm text-[#7d8882]"},ba=A({__name:"index",setup(t){const l={dailyProductReview:"daily.product_review",dailyReferral:"referral.daily",newbie:"growth.newbie.v2",weeklyReview:"weekly.review",weeklyPosting:"weekly.posting",milestones:["milestone.emoji_master","milestone.review","milestone.posting","milestone.user_subscribe","milestone.product_star","milestone.like","milestone.referral"]},s=[l.dailyProductReview,l.dailyReferral,l.newbie,l.weeklyReview,l.weeklyPosting,...l.milestones],b=Je(new Map),v=T(),u=T([]),d=T(!1),p=T(!1),y=T(!1),C=T(!1),w=T(!1),n=T(!1),r=X(),q=ve();let i=0;const M=_(()=>b.value.get(l.dailyProductReview)),Q=_(()=>b.value.get(l.dailyReferral)),z=_(()=>b.value.get(l.newbie)),m=_(()=>b.value.get(l.weeklyReview)),L=_(()=>b.value.get(l.weeklyPosting)),h=_(()=>l.milestones.map(k=>b.value.get(k)).filter(k=>!!k)),R=_(()=>h.value.filter(W)),E=_(()=>h.value.filter(k=>!W(k))),ee=_(()=>R.value.length);function W(k){const g=k.completion_items??[];return k.status==="completed"&&g.every(B=>B.status==="claimed")}async function Te(k){y.value=!0;try{const g=await Ie.getToday();k===i&&(v.value=g)}catch{k===i&&(v.value=void 0)}finally{k===i&&(y.value=!1)}}async function ge(k,g){const B=g?.state?.product_ids??[];if(w.value=!1,u.value=[],!!B.length){C.value=!0;try{const Z=await Ke.getManyByIds(B),Ne=new Map(Z.map(F=>[F.id,F]));k===i&&(u.value=B.map(F=>Ne.get(F)).filter(F=>!!F))}catch{k===i&&(w.value=!0)}finally{k===i&&(C.value=!1)}}}async function pe(){return await r.userInfoReady(),r.isLogin&&!!r.userInfo.id}async function oe(){if(!await pe())return;const k=++i;d.value=!0,p.value=!1;try{const g=await G.batchByCodes(s),B=g[l.dailyProductReview];if(B?.status==="receivable"&&(g[l.dailyProductReview]=await G.receive(B.quest_id)),k!==i)return;b.value=new Map(Object.entries(g)),await ge(k,g[l.dailyProductReview])}catch{k===i&&(b.value=new Map,u.value=[],p.value=!0)}finally{k===i&&(d.value=!1)}}async function Pe(){if(!await pe())return;const k=r.userInfo.id,g=i+1,B=q.ensureGuazi().then(()=>{r.isLogin&&r.userInfo.id===k&&(n.value=!0)});await Promise.all([oe(),Te(g),B])}async function Qe(){if(p.value){await oe();return}await ge(i,M.value)}async function Be(k){v.value={checked_in:!0,streak_days:k.streak_days,create_at:k.create_at},await q.refreshGuazi()}async function Y(){await q.refreshGuazi()}function je(){document.getElementById("milestone-achievements")?.scrollIntoView({behavior:"smooth",block:"start"})}return J(()=>r.isLogin,k=>{if(i+=1,n.value=!1,k){Pe();return}b.value=new Map,v.value=void 0,u.value=[],d.value=!1,p.value=!1,y.value=!1,C.value=!1,w.value=!1},{immediate:!0}),(k,g)=>{const B=ie("RouterLink");return a(),o("div",Zs,[e("header",Js,[e("div",Ks,[g[2]||(g[2]=e("h1",
1null,"任务中心",-1)),g[3]||(g[3]=e("p",null,"完成任务获得瓜子,去瓜棚兑换好物",-1)),e("a",Xs,[e("img",{src:c(O).headerRules,alt:""},null,8,ea),g[1]||(g[1]=$("奖励规则 ",-1))])]),e("div",ta,[e("div",sa,[e("div",aa,[x(B,{to:"/shop","aria-label":"前往瓜棚"},{default:U(()=>[e("span",na,[e("img",{src:c(O).headerGuazi,alt:""},null,8,ia)]),e("strong",null,f(c(r).isLogin?n.value?c(q).guaziCountText:"加载中":"登录后查看"),1),e("small",null,f(c(r).isLogin?"瓜子":"个人资产"),1)]),_:1})]),c(r).isLogin?(a(),o(S,{key:0},[g[6]||(g[6]=e("i",{class:"asset-divider"},null,-1)),e("button",{type:"button",class:"achievement-button",onClick:je},[e("img",{src:c(O).headerAchievement,alt:""},null,8,oa),g[4]||(g[4]=e("small",null,"已达成",-1)),e("strong",null,f(ee.value),1),g[5]||(g[5]=e("small",null,"个成就",-1))])],64)):I("",!0)]),e("a",la,[e("img",{src:c(O).headerRules,alt:""},null,8,ra),g[7]||(g[7]=$("奖励规则 ",-1))])])]),e("main",ua,[e("section",ca,[x(vt,{status:v.value,loading:y.value,onCheckedIn:Be},null,8,["status","loading"]),x(Nt,{quest:M.value,products:u.value,loading:d.value||C.value,error:p.value||w.value,onRetry:Qe,onRewardClaimed:Y},null,8,["quest","products","loading","error"])]),x(Jt,{quest:Q.value,loading:d.value,onRewardClaimed:Y},null,8,["quest","loading"]),c(r).isLogin?(a(),o(S,{key:1},[p.value?(a(),o("div",ma,[g[11]||(g[11]=e("div",null,[e("strong",null,"任务进度暂时加载失败"),e("p",null,"请检查网络后重试,已经完成的进度不会丢失。")],-1)),e("button",{type:"button",onClick:oe},[x(c(qe),{size:15}),g[10]||(g[10]=$("重新加载",-1))])])):I("",!0),x(Qs,{quest:z.value,loading:d.value,onRewardClaimed:Y},null,8,["quest","loading"]),x(Ys,{"review-quest":m.value,"posting-quest":L.value,loading:d.value,onRewardClaimed:Y},null,8,["review-quest","posting-quest","loading"]),e("section",va,[g[15]||(g[15]=e("h2",{class:"text-lg leading-6 font-semibold text-black"},"长期成就",-1)),d.value?(a(),o("div",ga,[x(c(V),{size:20,class:"animate-spin"}),g[12]||(g[12]=$("正在加载长期成就… ",-1))])):h.value.length?(a(),o("div",pa,[R.value.length?(a(),P(ws,{key:0,quests:R.value},null,8,["quests"])):I("",!0),e("div",fa,[(a(!0),o(S,null,H(E.value,Z=>(a(),P(ms,{key:Z.quest_id,quest:Z,onSuccess:Y},null,8,["quest"]))),128)),e("article",ya,[e("img",{src:c(O).achievementComingSoon,alt:""},null,8,_a),g[13]||(g[13]=e("span",null,"更多长期成就",-1)),g[14]||(g[14]=e("h3",null,"敬请期待",-1))])])])):(a(),o("div",ha," 当前没有可展示的长期成就。 "))])],64)):(a(),o("section",da,[g[9]||(g[9]=e("div",null,[e("h2",null,"登录后继续成长"),e("p",null,"登录后即可查看新手任务、本周创作和长期成就。")],-1)),e("button",{type:"button",onClick:g[0]||(g[0]=Z=>c(r).ensureLogin())},[g[8]||(g[8]=$(" 登录查看任务 ",-1)),x(c(ce),{size:16})])]))])])}}}),xa=D(ba,[["__scopeId","data-v-23bd9dfa"]]);export{xa as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.