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:8523,currentPage:1,targetPage:1,total:101,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:[],posts:[{id:113239,num:0,uid:18471,content:'\u003Cp\u003E来日本已经两周了。\u003C/p\u003E\u003Cp\u003E我们第一次出国,靠翻译搞定交通,从机场坐电车到 sharehouse 。区役所登记、新家安顿、办 SIM 卡……一项项慢慢处理下来,现在已经顺利开学一周。\u003C/p\u003E\u003Cp\u003E在这一周的上学中,我们从旅行的兴奋感中慢慢过渡到日常生活节奏了,让我惊讶的是——我开始很想表达。我想说话,想写东西,想向世界打开自己。\u003C/p\u003E\u003Cp\u003E在电车的摆动中,慢慢浮上来的,是希望。\u003C/p\u003E\u003Cp\u003E一种宛如回到孩童时期对自己人生充满幻想的希望。\u003C/p\u003E\u003Cp\u003E上班时,我想方设法摸鱼,要从公司那里偷回已经卖出去的时间,下班后到家已经八点,把放在门口的菜带进去,开始准备明天的午饭,洗漱后玩会手机没多久就要睡了,这样重复的五年,就是我毕业后的五年,我有什么成长吗,简历上多做了几个新技术的项目,银行卡里的余额缓慢增长。\u003C/p\u003E\u003Cp\u003E19 年毕业,我第一份工作,一个人给两家公司干活。这家初创公司老板是二代,他找了一个自己在开公司的老外包人做技术主管,我被老外包人招进来,同时给老外包和初创公司干活,拿一份工资,实习期 4k ,转正后 6k 。\u003C/p\u003E\u003Cp\u003E我高兴坏了,有公司要我,那时我刚来到杭州,住在群租房的次卧,每天加班到十点,但是早起蹬共享单车去上班时,满心欢喜。\u003C/p\u003E\u003Cp\u003E我现在理解那时让我兴奋的是什么,是我的未来会越来越好的希望。\u003C/p\u003E\u003Cp\u003E后来因为跟老外包人吵架,项目上线后他还让我们加班,我一气之下直接投简历跑路了,那时候不到一周我就找好了下家,涨薪 30%,双休不加班。托老外包人的压榨,我独立负责了很多项目,成长迅速。那时候等待入职期间,新冠疫情了,我慌的一批,害怕公司谈好的 offer 又收回,我当时的积蓄就够再支付三个月房租。\u003C/p\u003E\u003Cp\u003E万幸顺利入职,在这家公司遇到了对象和我的小猫。\u003C/p\u003E\u003Cp\u003E之后一切都步入正轨,工资随着一次次跳槽上涨,租房越换越大,最终我们换到了一个 loft 公寓,第一次去这个地方看房时,走廊干净明亮,四周安静的我们都不敢大声说话。\u003C/p\u003E\u003Cp\u003E在搬入那个公寓时,我真切感受到了幸福,每天走路上班,到点下班,到家开始做饭,玩猫,玩塞尔达。安稳到我甚至考虑要不就买一套公寓,从此在杭州安家,我们丁克不要小孩,公寓买在市中心也能保值,等等这些念头出现时,我所在的新零售互联网公司因为线下门店的倒闭,收益也在下滑,本来不加班的公司开始加班,各种绩效评估,按照 bug 数量扣钱等操作,我无法忍受就提了离职,那是 2022 年 9 月。\u003C/p\u003E\u003Cp\u003E那时候已经在传行业寒冬了,我被上司打压的无心立刻找工作,想休息一段时间,在那三个月里我打通了神界原罪 3 ,开启了跑团游戏的爱好,也是那段时间接触到远程工作的概念,在电鸭和 v2 上投了很多简历。那时候还加入了某程序员社区,跟着群主学 ts 全栈,希望能找到一份海外的远程工作,最好这份工作还能让我成为去英语国家的工签,做了这样的一些白日梦。\u003C/p\u003E\u003Cp\u003E在远程工作的简历都石沉大海后,我清醒过来,还是老实找线下工作吧,想着反正都 12 月了,那就年后再找工作吧,结果这一找就是三个月,还是在我扩大范围到上海后,才入职一家上海公司。\u003C/p\u003E\u003Cp\u003E我在 23 年 3 月进入这家公司,从此开始跟对象的分居,我们每周末都会见面,杭州到上海高铁一小时,每周五晚上下班我都去虹桥站,不是去接人就是出发。这个习惯坚持了一年,也慢慢压碎我们一起的未来。\u003C/p\u003E\u003Cp\u003E24 年初我很希望回到杭州,结束周末奔波,但是我发现我连一个面试都没有,这比 23 年还要可怕。我们都被焦虑包围着,35 岁危机,裁员即失业,经济下行,错过的时代红利等等。我们对未来的不安全感,在长时间的异地,终于酝酿成分手。现在很差,但已经是未来十年最好的一年。\u003C/p\u003E\u003Cp\u003E最后我们都想去国外的长远目标,让我们继续在一起,开始着手找日本语言学校,选择日本的原因无他,门槛低。\u003C/p\u003E\u003Cp\u003E我开始尝试从上班之外的地方赚钱,之前加的某程序员群就开始发挥作用,在闲鱼赚到第一桶金后,我开始学习 wp ,希望可以稳扎稳打,等到副业超过主业收入后就辞职。\u003C/p\u003E\u003Cp\u003E还没等我副业超过主页,我先等来了被裁的消息,好消息,不用异地了,坏消息,我没收入了。\u003C/p\u003E\u003Cp\u003E即使拿了裁员大礼包,我的存款也刚突破十万,远远不够我们当初设想的 20w 存款去日本。\u003C/p\u003E\u003Cp\u003E在钻研面试题换一个可能的工作机会和全身心搞接单这两个选项中摇摆的我,对象推了我一把,我搬到杭州,开始着手个人工作室的创立等一系列事情,详情可以参考我另外一篇帖子被裁员后靠副业撑到日本留学。\u003C/p\u003E\u003Cp\u003E现在,我坐在东京 sharehouse 这个小小的卧室里。\u003C/p\u003E\u003Cp\u003E我发现我真的喜欢现在的生活。\u003C/p\u003E\u003Cp\u003E它让我想起我们当初搬进 loft 的时候,那种安稳和安心。但是又有点不同——我不再是为了“安稳”才来这里,而是已经拥有了面对变化的底气。\u003C/p\u003E\u003Cp\u003E这给我带来崭新的希望,我终于又想象起自己的未来了。\u003C/p\u003E',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:02:33',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113240,num:1,uid:17961,content:'恭喜楼主走出困境。\u003Cbr\u003E十几年前,国内互联网刚刚发展的时候,我周围很多朋友通过对日外包的形式去过日本,但是无一例外都回来了。\u003Cbr\u003E一个是因为国内行业发展好了,机会多,日本工作性价比低。\u003Cbr\u003E第二个就是日本没有想象中的那么好,做事循规蹈矩,无效加班也非常多,圈子融入不进去等等,现在环境是有所改观了吗?\u003Cbr\u003E看了楼主的经历,如果第一份工作不是外包,而是正儿八经的公司自研,估计能好很多。\u003Cbr\u003E加油吧。',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:18:22',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113241,num:2,uid:3848,content:'日本能找到正社员的工作吗,不是现在华人外包也把日本 IT 市场搞的一塌糊涂',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:31:22',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113242,num:3,uid:871,content:'言之过早,才去 2 周就说找到了生活的希望,甲亢哥来中国一周也是满眼冒光。',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:37:37',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113243,num:4,uid:13097,content:'每次读这种文章的时候,都怕图穷匕见,变成移民中介的推广贴。。。\u003Cbr\u003E\u003Cbr\u003E总之还是很羡慕 op 这种人的行动力的,祝福吧。\u003Cbr\u003E\u003Cbr\u003E日本我去旅游过多次,其实很喜欢那边的食物和环境。要是能找到合适的工作我也会考虑留下来。\u003Cbr\u003E\u003Cbr\u003E只不过,我很难做到舍身一跃,总想前脚踩稳了再挪后脚。。。害',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:39:24',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[13,],mentionUsers:[],likeUsers:[],},{id:113244,num:5,uid:521,content:'你不是外界环境变好了\u003Cbr\u003E而是内部的郁结没有了\u003Cbr\u003E至少之前的没有了',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:39:26',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113245,num:6,uid:4759,content:'前几天才有一个被裁赴日的帖子,所以你懂的',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:40:28',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113246,num:7,uid:9844,content:'跑去日本两周,工作都没找到,就充满希望,连发两条帖子。。。\u003Cbr\u003E不得不说,润人总是对润出去后的生活充满幻想,但是,还是祝你成功',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:41:01',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[49,],mentionUsers:[],likeUsers:[],},{id:113247,num:8,uid:2678,content:'有一种润人的美,啥都没有但是又希望',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:42:48',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113248,num:9,uid:17736,content:'你开心就好',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:44:27',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113249,num:10,uid:2328,content:'可能是因为不用上班能量多了人比较乐观',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:48:22',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113250,num:11,uid:153,content:'我也觉得 全篇没看到怎么到了日本就有希望了。。也不知道是不是空气里透出来的希望',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:48:59',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113251,num:12,uid:18310,content:'日本这种落末国家 没啥值得去的 工资比中国还低',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:56:14',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113252,num:13,uid:13097,content:'#4 春节刚去了一趟日本。虽然也受到世界经济下行的影响,但是整体来说小商小贩和街铺的的人气还是比国内好不少,能切实感受到私营经济仍然充满着活力。\u003Cbr\u003E\u003Cbr\u003E如果说到不同和希望的话,我觉得这是比较重要的一点。',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:56:30',updatedAt:'2025-04-19 23:46:30',mentionNum:4,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113253,num:14,uid:874,content:'我老婆日本留学生,毕业在日本上班四年都被我喊回来了。除非特别穷或者非常非常富的,否则去了没有在国内舒服。',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 08:58:19',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113254,num:15,uid:18882,content:'帖子发的太早了,工作落实了再感概空气的香甜不迟',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 09:05:03',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113255,num:16,uid:13170,content:'这标题太小红书了',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 09:11:00',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113256,num:17,uid:6005,content:'\u003Cimg src\u003D\"https://i.imgur.com/l1pUcmP.png\"\u003E\u003Cbr\u003E \u003Cimg src\u003D\"https://i.imgur.com/l95ALBl.png\"\u003E\u003Cbr\u003E怎么有股杨舒平那味了',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 09:16:29',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113257,num:18,uid:8274,content:'确实一股小红书风',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 09:16:34',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:113258,num:19,uid:150,content:'一大早又来骗铜币啦?',ipRegion:'',updatedByUid:0,createdAt:'2025-04-16 09:16:55',updatedAt:'2025-04-19 23:46:30',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},],usersMap:new Map([[9844,{uid:9844,url:'/u/140f7f3f6a045c7e686e526f04133529',avatar:'/a/140f7f3f6a045c7e686e526f04133529',username:'pkxutao🤖',}],[3848,{uid:3848,url:'/u/293066256a045c74686e5e6f340c3470',avatar:'/a/293066256a045c74686e5e6f340c3470',username:'murmur🤖',}],[18310,{uid:18310,url:'/u/3f0e580a6a045d7f636b566f4f000b2d',avatar:'/a/3f0e580a6a045d7f636b566f4f000b2d',username:'carlojie🤖',}],[18471,{uid:18471,url:'/u/3e2360216a045d7f646d576f425f6675',avatar:'/a/3e2360216a045d7f646d576f425f6675',username:'lb415926🤖',}],[2678,{uid:2678,url:'/u/100d053d6a045c75666d5e6f2d231932',avatar:'/a/100d053d6a045c75666d5e6f2d231932',username:'Justin13🤖',}],[150,{uid:150,url:'/u/6b7058266a045c77616f566f33333526',avatar:'/a/6b7058266a045c77616f566f33333526',username:'jellyX🤖',}],[4069,{uid:4069,url:'/u/6e1c530f6a045c73606c5f6f1d58352e',avatar:'/a/6e1c530f6a045c73606c5f6f1d58352e',username:'horizon🤖',}],[521,{uid:521,url:'/u/1b38450f6a045c776568576f330e1a73',avatar:'/a/1b38450f6a045c776568576f330e1a73',username:'DigitaIOcean🤖',}],[13170,{uid:13170,url:'/u/3d2e7a216a045d74616d566f15306629',avatar:'/a/3d2e7a216a045d74616d566f15306629',username:'newbie111🤖',}],[153,{uid:153,url:'/u/13187b2f6a045c77616f556f1d3c0b10',avatar:'/a/13187b2f6a045c77616f556f1d3c0b10',username:'Promtheus🤖',}],[2328,{uid:2328,url:'/u/312c79046a045c7563685e6f362f3834',avatar:'/a/312c79046a045c7563685e6f362f3834',username:'irisdev🤖',}],[17736,{uid:17736,url:'/u/3308790c6a045d706769506f232f1c37',avatar:'/a/3308790c6a045d706769506f232f1c37',username:'tedaz🤖',}],[17961,{uid:17961,url:'/u/190f5a5e6a045d70696c576f12393a10',avatar:'/a/190f5a5e6a045d70696c576f12393a10',username:'li24361🤖',}],[18882,{uid:18882,url:'/u/31137f206a045d7f6862546f25110626',avatar:'/a/31137f206a045d7f6862546f25110626',username:'print🤖',}],[4759,{uid:4759,url:'/u/332b40266a045c73676f5f6f4f1b1e15',avatar:'/a/332b40266a045c73676f5f6f4f1b1e15',username:'FreddyLiu🤖',}],[6005,{uid:6005,url:'/u/6e2051596a045c71606a536f4f392125',avatar:'/a/6e2051596a045c71606a536f4f392125',username:'morutong🤖',}],[8274,{uid:8274,url:'/u/293c7d066a045c7f626d526f1f592a37',avatar:'/a/293c7d066a045c7f626d526f1f592a37',username:'jellybool🤖',}],[13097,{uid:13097,url:'/u/340b020c6a045d746063516f4302210a',avatar:'/a/340b020c6a045d746063516f4302210a',username:'shyr0ck🤖',}],[871,{uid:871,url:'/u/31107a146a045c77686d576f2d131635',avatar:'/a/31107a146a045c77686d576f2d131635',username:'ldlywt🤖',}],[874,{uid:874,url:'/u/6e0864216a045c77686d526f2e030611',avatar:'/a/6e0864216a045c77686d526f2e030611',username:'wxw752🤖',}],]),related:[],} 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")