const{createApp}=Vue
const{createVuetify,useGoTo,useDisplay}=Vuetify
var data={alert:{show:false,color:'success',text:'',timeout:0,},theme:{dark:false,},nav:{showDrawer:false,showTOC:true,tocPanel:0,tab:'account',post:{discussionId:7455,currentPage:1,targetPage:1,total:8,anchor:0,goToOptions:{container:null,duration:0,easing:'easeInOutCubic',offset:-100,},worker:null,task:[],active:[],apiLock:[],originLike:new Map([]),},related:{block:1,}},search:{width:80,text:null,loading:false,},tags:[{id:17,url:'/t/327878556a045c76677716150f0d',name:'Apple',color:'#66BB6A',icon:'mdi-apple',},],posts:[{id:95166,num:0,uid:16773,content:'记得很早之å‰å¥½åƒæ˜¯èƒ½å»¶é•¿ä¿ä¿®çš„ï¼ŒçŽ°åœ¨åªæœ‰æ„外险了å—?\u003Cbr\u003E介ç»é¡µé¢é‡Œä¹Ÿæ²¡å†™æ¶µç›–时间是多久,https://www.apple.com.cn/support/products/mac/\u003Cbr\u003E\u003Cimg src\u003D\"https://i.imgur.com/lbzpeKp.png\"\u003E',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 09:51:27',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95167,num:1,uid:3820,content:'\u003Cimg src\u003D\"https://i.imgur.com/InDPzS2.png\"\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cbr\u003Ehttps://www.apple.com.cn/legal/statutory-warranty/',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 10:03:32',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95168,num:2,uid:724,content:'用美区账å·ä¹°ç¾Žç‰ˆçš„ AC+ Subscription 。å¯ä»¥è®¢é˜…åˆ°è®¾å¤‡æ— æ³•ç»´ä¿®ä¸ºæ¢ã€‚',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 12:23:29',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95169,num:3,uid:16773,content:'国行的设备也å¯ä»¥è´ä¹°å—?',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 12:30:29',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95170,num:4,uid:11428,content:'Applecare+到期åŽå¯ä»¥ç»§ç»æŒ‰å¹´è´ä¹° applecare+的,国内账å·å°±å¯ä»¥ã€‚\u003Cbr\u003E如果 op çš„æ„æ€æ˜¯åªè¦è´ä¹°å»¶é•¿ä¿ä¿®ä¸è¦å…¶ä»–æœåŠ¡ï¼Œè¿™ä¸ªä¸çŸ¥é“。',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 12:35:18',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95171,num:5,uid:4743,content:'è´ä¹°æ²¡å…³ç³»ï¼Œå¯æ˜¯ç»´ä¿®çš„è¯å›½å†…认么?',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 12:38:26',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95172,num:6,uid:724,content:'éžèœ‚çªæ•°æ®ç‰ˆæœ¬çš„äº§å“æ—©éƒ½æ˜¯å…¨çƒè”ä¿äº†ï¼ŒAC+ä¹Ÿæ˜¯å…¨çƒæœ‰æ•ˆçš„ã€‚çŽ°åœ¨èœ‚çªæ•°æ®ç‰ˆçš„产å“基础ä¿ä¿®æ˜¯åŽŸé”€å”®åœ°åŒºï¼ŒAC+æ˜¯å…¨çƒæœ‰æ•ˆï¼Œä½†æ˜¯å®žé™…效果å¯èƒ½æœ‰æ‰€å˜åŒ–。\u003Cbr\u003E\u003Cbr\u003E对,国内 iPhone å¯ä»¥ä¹°ç¾Žç‰ˆ AC+固定期é™çš„ã€‚åŠ æ‹¿å¤§ iPhone å¯ä»¥ä¹°ç¾Žç‰ˆ AC+订阅。国内的 MacBook 是åªèƒ½ä¹°å›ºå®šæœŸé™çš„è¿˜æ˜¯ä¹Ÿèƒ½è®¢é˜…ä¸æ˜¯å®Œå…¨ç¡®å®šã€‚ä½†ä½ å¯ä»¥å…ˆè¯•试。',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 15:06:35',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:95173,num:7,uid:11660,content:'国内的å¯ä»¥ä¹° 3 å¹´ï¼Œåˆ°æœŸåŽ 1 个月内å¯ä»¥æ‰‹åŠ¨ç»æœŸ',ipRegion:'',updatedByUid:0,createdAt:'2025-04-02 17:40:11',updatedAt:'2025-04-04 21:45:34',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},],usersMap:new Map([[16773,{uid:16773,url:'/u/091368216a045d71676d556f1a032415',avatar:'/a/091368216a045d71676d556f1a032415',username:'atan🤖',}],[3820,{uid:3820,url:'/u/292e71036a045c746868566f03073c28',avatar:'/a/292e71036a045c746868566f03073c28',username:'storyxc🤖',}],[11660,{uid:11660,url:'/u/392f4a5c6a045d76666c566f2e1f3e21',avatar:'/a/392f4a5c6a045d76666c566f2e1f3e21',username:'Allenqjy🤖',}],[11428,{uid:11428,url:'/u/6d2274356a045d7664685e6f275d1b08',avatar:'/a/6d2274356a045d7664685e6f275d1b08',username:'fredcc🤖',}],[4743,{uid:4743,url:'/u/38315e596a045c73676e556f3c1b1b32',avatar:'/a/38315e596a045c73676e556f3c1b1b32',username:'ggmood🤖',}],[724,{uid:724,url:'/u/0d0e00086a045c776768526f22582b71',avatar:'/a/0d0e00086a045c776768526f22582b71',username:'MrLonely🤖',}],]),related:[{title:'mac mini m4 32G 扩容到 2T,能当黑奴部署 sd 或 flux 么',url:'/d/203e71236a045c77606a567a445c616a03040937',},{title:'pdd macmini 2979 了,å¿ä¸ä½è¿˜æ˜¯ä¸‹å•了',url:'/d/293a610b6a045c77606a567a4458606a1b706767',},{title:'求 macOS 好用的录音软件,关键录微信通è¯å’Œç”µè¯ï¼Œ wiretap ä¸‹æž¶äº†ã€‚æ— è®ºè½¯ä»¶å¯åŠ¨é¡ºåºæ€»æ˜¯èƒ½å½•ä¸‹æ‰æ˜¯çŽ‹ã€‚ã€‚ã€‚',url:'/d/120c45386a045c77606a567a455e616a07341262',},{title:'Spotlight å›¾æ ‡ç«Ÿç„¶ç©¿æ¨¡äº†ï¼Œ macOS 15 è¶Šæ¥è¶Šä¸è‹¹æžœäº†',url:'/d/0c0a54216a045c77606a567a455c676a38082b3d',},{title:'MacOS 15.4 ä¼‘çœ Bug:ä¼‘çœ åŽä»¥å¤ªç½‘会æ–开连接, Wi-Fi ä¸ä¼š',url:'/d/360a785e6a045c77606a567a465a646a2b2f6b2b',},{title:'mac mini pro 64 å’Œ mac studio',url:'/d/000443266a045c77606a56754e58626a5e266611',},{title:'刚买的 mba m4,试用 crossover 玩玩暗黑 2,黑å±å•Š',url:'/d/3d7a45266a045c77606a56754f506a6a2f240660',},{title:'京东 19199 ä¹° MBP M4pro 14 æ ¸ 48G 1T 国家补贴+æ•™è‚²ä¼˜æƒ ',url:'/d/227a745e6a045c77606a56754f50666a5934253d',},{title:'Macmini M4 是å¦ç»§ç»ä½¿ç”¨ã€‚',url:'/d/3b1b540e6a045c77606a56754f5f656a08101d65',},{title:'诡异! Enter 键自动唤醒 apple music å¹¶è‡ªåŠ¨æ’æ”¾',url:'/d/2071601d6a045c77606a56754f5a626a04002663',},{title:'IOS 18.4 safari å‘çƒä¸¥é‡',url:'/d/121366206a045c77606a5675425c626a0d280366',},{title:'IOS 18.4 䏿–‡ intelligence å¤§å®¶æœ‰å•¥æƒ³åæ§½çš„么(éžå›½è¡Œæœºï¼‰',url:'/d/380854296a045c77606a5675425a626a34731a2a',},{title:'macos Sequoia 15.4 ä¸ chronod 一直å 用 100%+ CPU',url:'/d/3b7c73236a045c77606a56754350646a58202b1f',},{title:'intel çš„ mac 远程连接 m 芯片 mac 最佳姿势是什么?',url:'/d/2f08582f6a045c77606a5675435e656a29252322',},{title:'M1 iPad pro 耗电惊人',url:'/d/353b470e6a045c77606a5675435e606a25171411',},{title:'苹果这次 iOS 18.4 åªæœ‰ä¸å›½å›½å†…更新了 5G-A å—?',url:'/d/09277c096a045c77606a5675435f656a3d283d1d',},{title:'æ—¥ç»è´´ï¼šæŽ¨è个 mac 下适用的机械键盘',url:'/d/3f3978016a045c77606a5675435f666a030f042a',},{title:'iPhone çš„ Apple Intelligence 需è¦ä¸‹è½½å¤šä¹…?',url:'/d/1b2f48196a045c77606a5675435a636a02731d1e',},{title:'mac mini æ”¾åŠžå…¬å®¤æ‘¸é±¼æ€Žä¹ˆæ ·ï¼Ÿ',url:'/d/68395e0b6a045c77606a56754359646a182a241e',},{title:'macOS 15.4 稳定出现一个大 bug',url:'/d/3b0e5b1b6a045c77606a567544506b6a08112708',},],}
const App={setup(){const goTo=useGoTo()
const{mdAndUp}=useDisplay()
return{goTo,mdAndUp}},data(){return data;},mounted(){const themeDark=localStorage.getItem("themeDark")
if(themeDark!==null){this.theme.dark=JSON.parse(themeDark)}
if(this.nav.post.total>(this.nav.post.currentPage-1)*100+20){let moreLen=100
if(this.nav.post.total({id:null,num:(this.nav.post.currentPage-1)*100+v,uid:null,content:null,ipRegion:null,updatedByUid:null,createdAt:null,updatedAt:null,mentionNum:null,mentionedBy:null,mentionUsers:null,likeUsers:null,}))
this.posts.push(...morePosts.slice(20))}
this.workerStart()
const hash=window.location.hash
const match=hash.match(/#(\d+)/)
if(match){const n=parseInt(match[1],10)
if(n>=(this.nav.post.currentPage-1)*100&&n{this.jumpTo(n)})}}
this.$nextTick(()=>{this.addHeadingIds()
tocbot.init({tocSelector:'.toc',contentSelector:'#post-content-0',headingSelector:'h2, h3, h4',headingsOffset:100,scrollSmoothOffset:-100,scrollSmooth:true,collapseDepth:6,onClick:function(e){setTimeout(()=>{history.replaceState(null,'',window.location.pathname+window.location.search)},0)},})
tocbot.refresh()});},beforeUnmount(){this.workerStop()
if(this.quill){this.quill.destroy()
this.quill=null}},computed:{dposts(){return this.posts.slice(20);},},created(){},methods:{successAlert(msg){this.alert={show:true,color:'success',text:msg,timeout:1500,}},failureAlert(msg){this.alert={show:true,color:'error',text:msg,timeout:5000,}},flipThemeDark(){this.theme.dark=!this.theme.dark
localStorage.setItem("themeDark",JSON.stringify(this.theme.dark))},toSearch(){if(!this.search.text){this.failureAlert('æœç´¢è¯ä¸èƒ½ä¸ºç©º')
return}
let keywords=this.search.text.trim()
if(keywords.length<1){this.failureAlert('æœç´¢è¯ä¸èƒ½ä¸ºç©º')
return}
if(keywords.length>100){this.failureAlert('æœç´¢è¯è¿‡é•¿')
return}
this.doSearch(keywords)},toReg(){window.location.href="/reg"},toLogin(){window.location.href="/login"},toPage(){let url=window.location.href
url=url.replace(/(\/\d+)?(#[0-9]+)?$/,this.nav.post.targetPage>1?`/${this.nav.post.targetPage}`:'')
window.location.href=url},toLoadRelated({done}){if(this.my&&this.my.uid){this.apiLoadRelated({done})}else{done('ok')}},workerStart(){this.nav.post.worker=setInterval(()=>{this.workerLoad()},500);},workerStop(){if(this.nav.post.worker){clearInterval(this.nav.post.worker);this.nav.post.worker=null;}},async jumpTo(num){const page=Math.floor(num/100)+1
const i=num-(page-1)*100
if(page===this.nav.post.currentPage){this.goTo("#post-"+num,this.nav.post.goToOptions)
if(!this.posts[i].id){const block=Math.floor(num/20)+1
this.nav.post.apiLock[block]=true
await this.apiLoadPosts(block)
this.$nextTick(()=>{this.goTo("#post-"+num,this.nav.post.goToOptions)})}}else{let url=window.location.href
url=url.replace(/(\/\d+)?(#[0-9]+)?$/,page>1?`/${page}`:'')
url=url+"#"+num
window.location.href=url}},postIntersect(num){return(isIntersecting,entries,observer)=>{if(isIntersecting){this.nav.post.task.push(num)
this.nav.post.active.push(num)
this.nav.post.active=this.nav.post.active.filter(item=>Math.abs(item-num)<=5)
this.nav.post.active.sort((a,b)=>a-b)}else{this.nav.post.active=this.nav.post.active.filter(item=>item!==num)}
if(this.nav.post.active[0]){this.nav.post.anchor=this.nav.post.active[0]}else{this.nav.post.anchor=0}}},async apiLoadPosts(block){try{const response=await axios.post('/fapi/v1/post/block/'+block,{discussionId:this.nav.post.discussionId,})
if(response.data.code===0){response.data.data.posts.forEach(post=>{const i=post.num%100
Object.assign(this.posts[i],post)})
response.data.data.users.forEach(user=>{this.usersMap.set(user.uid,user)})}else{this.failureAlert('回帖数æ®åŠ è½½å¤±è´¥: '+response.data.msg)}}catch(error){this.failureAlert('回帖数æ®åŠ è½½å¤±è´¥: '+error)}
this.nav.post.apiLock[block]=false},workerLoad(){while(this.nav.post.task.length){const num=this.nav.post.task.pop()
const i=num-(this.nav.post.currentPage-1)*100
if(!this.posts[i].id){const block=Math.floor(num/20)+1
if(!this.nav.post.apiLock[block]){this.nav.post.apiLock[block]=true
this.apiLoadPosts(block)}}}},getTimeInfo(t){if(!t){return ""}
const now=new Date();const then=new Date(t);const diff=now-then;const minute=60*1000;const hour=minute*60;const day=hour*24;const month=day*30;const year=month*12;if(diffpost.num===num)
if(!post){return "#"+num}
const uid=post.uid
const username=this.usersMap.get(uid)?.username
if(!username){return "#"+num}
return username},getUsernameByPostId(id){const post=this.posts.find(post=>post.id===id)
if(!post){return "#"+this.getPostNumByPostId(id)}
const uid=post.uid
const username=this.usersMap.get(uid).username
if(!username){return "#"+this.getPostNumByPostId(id)}
return username},getPostNumByPostId(id){const post=this.posts.find(post=>post.id===id)
return post.num},getPostById(id){const post=this.posts.find(post=>post.id===id)
return post},getPostByNum(num){const post=this.posts.find(post=>post.num===num)
return post},getAvatarByUid(uid){const avatar=this.usersMap.get(uid)?.avatar
if(!avatar){return this.getRandomAvatar()}
return avatar},getAvatarByPostNum(num){const post=this.posts.find(post=>post.num===num)
if(!post){return this.getRandomAvatar()}
const uid=post.uid
return this.getAvatarByUid(uid)},getRandomAvatar(){const num=Math.floor(Math.random()*100)
return "https://randomuser.me/api/portraits/men/"+num+".jpg"},getUrlByUid(uid){const url=this.usersMap.get(uid)?.url
if(!url){return ""}
return url},getTextByPostNum(num){const post=this.posts.find(post=>post.num===num)
if(!post||!post.content){return '点击跳转到#'+num+'查看'}
const parser=new DOMParser()
const doc=parser.parseFromString(post.content,'text/html')
const text=doc.body.textContent||''
return text.slice(0,100)},addHeadingIds(){const content=document.getElementById('post-content-0')
if(!content){this.nav.showTOC=false
return}
const headings=content.querySelectorAll('h2, h3, h4')
headings.forEach((heading,index)=>{if(!heading.id){heading.id=`toc-nav-${index}`}})
if(headings.length==0){this.nav.showTOC=false}},async doSearch(keywords){this.search.loading=true
try{const response=await axios.post('/fapi/v1/search',{keywords:keywords,})
if(response.data.code===0){if(response.data.data.hash&&response.data.data.hash.length===32){window.location.href="/s/"+response.data.data.hash}else{this.failureAlert('æœç´¢å¤±è´¥: æœç´¢æœåС异叏')}}else{this.failureAlert('æœç´¢å¤±è´¥: '+response.data.msg)}}catch(error){this.failureAlert('æœç´¢å¤±è´¥: '+error)}
this.search.loading=false},debounce(fn,delay){let timer=null
return function(...args){if(timer)clearTimeout(timer)
timer=setTimeout(()=>{fn.apply(this,args)},delay);};},},watch:{'nav.post.targetPage':{handler:async function(newV,oldV){this.toPage()},immediate:false},},}
const vuetify=createVuetify({defaults:{global:{ripple:true,},},})
const app=createApp(App)
app.use(vuetify).mount("#app")