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:7022,currentPage:1,targetPage:1,total:50,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:54,url:'/t/6f71681f6a045c7264772e132501',name:'Cursor',color:'#66BB6A',icon:'mdi-tag-heart',},],posts:[{id:87837,num:0,uid:15825,content:'\u003Cp\u003E用 cursor 生成页面的时候挺爽,但是大多时候不能保证 100% 还原的,还是需要修修改改,最近做了一个项目,发现越到后面越把握不住了,不是自己写的代码,很多东西不在脑子里,改起来很费劲,\u003C/p\u003E',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:04:41',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87838,num:1,uid:777,content:'的确代码不是自己写的很难把控, 要在提示词里明确要求代码风格. 重构一下, 拆分大文件, 拆分大函数,这样就可以通过 outline 看函数列表进行把控了. 优秀代码风格是怎样的, 要求 AI 也那样写.\u003Cbr\u003Ecline 的提示词指南里有个技巧, 在要求代码生成式, 提示词加入\u0026#34;简单\u0026#34;\u0026#34;优雅\u0026#34;\u0026#34;simple\u0026#34;\u0026#34;elegant\u0026#34;这样的词, 就可以生成更容易维护的代码.\u003Cbr\u003E用 agent 工具非常考验表达能力,现在大家都是在摸索,只有零碎的经验讨论分享.',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:15:47',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87839,num:2,uid:15825,content:'还可以这样,受教了',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:18:01',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87840,num:3,uid:88,content:'你提个模棱两可的需求,大模型就马马虎虎给你写,我觉得没什么问题。也别说 Cursor 的问题,你做任何事都是这样的,包括用人也是,你想偷懒,连 Cursor 写完后给你的解释都不看,回过头来埋怨工具,他只是个工具,没法给你背锅的',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:20:04',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87841,num:4,uid:15826,content:'一定要 review cursor 写出来的代码,否则很容易出现这种把握不住情况',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:29:53',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87842,num:5,uid:160,content:'你要把控项目,一开始就应该把地基做好,指定让 AI 做装修的工作。你就是监工。\u003Cbr\u003E\u003Cbr\u003E项目地基你让 AI 去写,AI 是不理解人类的情感的,他只会用他所理解的方式去搭建项目。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:33:51',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87843,num:6,uid:15825,content:'确实是为了偷懒用的,没有埋怨工具,是自己把控不了这个 AI 工具',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:33:52',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87844,num:7,uid:15827,content:'相反,我用 Cursor 开心的很哈哈,可能是最近几年自己写代码的时候少了,写架构书和设计文档的时间更多了,语言表达被锻炼出来了的缘故',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:37:18',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87845,num:8,uid:13110,content:'Claude 还是强大',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:44:27',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87846,num:9,uid:4876,content:'让它写没啥问题,但是一定要自己过一遍,不然肯定有问题的',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:45:53',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87847,num:10,uid:11652,content:'已经用 Cursor/Trae 做过好几个复杂度还行的项目了,之前写过一些分享,感兴趣的同学可以看看 → https://github.com/easychen/ai-self-coding-book',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 10:47:00',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87848,num:11,uid:5672,content:'对我来说就是反复发散 -\u0026gt; 收敛的过程,新开项目还是能节省不少时间的',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 11:28:09',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87849,num:12,uid:15828,content:'记得常备份吧。像我本身对 C++是几乎完全不懂的。叫他写东西。基本都是碰运气。遇到能跑的我就赶紧备份保存。南否则下一份马上出问题。而且有时候他就傻的不行。跟他打交道心态要好。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 11:51:42',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87850,num:13,uid:4809,content:'拆分成小任务 最好给参考例子 提示词要详细 写完一定要 review 更多时间会花在 review 上 但还是比自己写要轻松 一个任务直接完成的感觉还是很爽的',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 11:56:58',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87851,num:14,uid:15829,content:'操控,熟练掌握操作模型是一个循序渐进,漫长的过程中要积累经验,对于心中对大模型有成见,对新技术没完全掌握和了解的情况下,就妄下结论,有这种心态的人,最终都会被取代淘汰掉。🤔',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 12:15:23',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87852,num:15,uid:940,content:'你这种反而很适合用 ai ,毕竟你可能都是个人项目,但是你后续肯定会和别人合作,也就是不是你的代码,与其那时候磨合,那不如先和 ai 磨合?',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 12:24:04',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87853,num:16,uid:15830,content:'cursor 只是一个平台,并内置了 AI 而已。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 12:42:35',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87854,num:17,uid:7020,content:'假设现在有一个考试,你可以选择本人去或让 AI 帮你**。\u003Cbr\u003E- 学渣肯定选择 AI ,毕竟自己考肯定不行,AI 说不定还可以碰运气\u003Cbr\u003E- 学霸才会在选和不选之间纠结,如果 AI 行当然选 AI ,但 AI 也可能考的不如自己\u003Cbr\u003E\u003Cbr\u003E如果 AI 无法到达自己的水平,放弃 AI 并不是一个错误的选择',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 13:39:47',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87855,num:18,uid:465,content:'主要是你跟 CURSOR 沟通的方式有问题\u003Cbr\u003E我都会用脑子提炼好细化的设计 甚至怎么拆分都给他明确好\u003Cbr\u003E只是让它给我完成重复的代码',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 13:46:55',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},{id:87856,num:19,uid:9269,content:'其实我感觉,指示 AI 干活和让小弟干活一样。\u003Cbr\u003E\u003Cbr\u003E如果不说清楚某个功能模块的详细设计(接口是什么样的、代码风格应该怎么写,可以用什么现有的其他模块),那小弟写出来就一坨…… AI 同理。\u003Cbr\u003E\u003Cbr\u003E我也是花了好久才搞定了让小弟写出来我觉得 ok 的代码。',ipRegion:'',updatedByUid:0,createdAt:'2025-03-29 13:50:32',updatedAt:'2025-04-01 12:01:46',mentionNum:0,mentionedBy:[],mentionUsers:[],likeUsers:[],},],usersMap:new Map([[88,{uid:88,url:'/u/0e10641f6a045c7760625e6f023f040e',avatar:'/a/0e10641f6a045c7760625e6f023f040e',username:'wyntalgeer🤖',}],[160,{uid:160,url:'/u/222b051e6a045c77616c566f392d630a',avatar:'/a/222b051e6a045c77616c566f392d630a',username:'Felldeadbird🤖',}],[15828,{uid:15828,url:'/u/3831662c6a045d7268685e6f1c2d1a04',avatar:'/a/3831662c6a045d7268685e6f1c2d1a04',username:'pnczk2019🤖',}],[15827,{uid:15827,url:'/u/36194b286a045d726868516f26210910',avatar:'/a/36194b286a045d726868516f26210910',username:'nevin47🤖',}],[13110,{uid:13110,url:'/u/142c4a596a045d74616b566f1e3b1e30',avatar:'/a/142c4a596a045d74616b566f1e3b1e30',username:'tingyunsay🤖',}],[15825,{uid:15825,url:'/u/6d0d703b6a045d726868536f4e210609',avatar:'/a/6d0d703b6a045d726868536f4e210609',username:'guin🤖',}],[15826,{uid:15826,url:'/u/220259216a045d726868506f183f6606',avatar:'/a/220259216a045d726868506f183f6606',username:'awkamo🤖',}],[465,{uid:465,url:'/u/172f00356a045c77646c536f4f081e7e',avatar:'/a/172f00356a045c77646c536f4f081e7e',username:'realpg🤖',}],[15829,{uid:15829,url:'/u/37087c0f6a045d7268685f6f020b3b2e',avatar:'/a/37087c0f6a045d7268685f6f020b3b2e',username:'0xsui🤖',}],[940,{uid:940,url:'/u/2230045e6a045c77696e566f21250b3f',avatar:'/a/2230045e6a045c77696e566f21250b3f',username:'kekxv🤖',}],[777,{uid:777,url:'/u/1700703a6a045c77676d516f05301506',avatar:'/a/1700703a6a045c77676d516f05301506',username:'jqknono🤖',}],[15830,{uid:15830,url:'/u/1e0e533b6a045d726869566f2f20120c',avatar:'/a/1e0e533b6a045d726869566f2f20120c',username:'jalirlee999🤖',}],[7020,{uid:7020,url:'/u/131176596a045c706068566f422b1e34',avatar:'/a/131176596a045c706068566f422b1e34',username:'xuld🤖',}],[4809,{uid:4809,url:'/u/127a42226a045c73686a5f6f050c3d2a',avatar:'/a/127a42226a045c73686a5f6f050c3d2a',username:'slert🤖',}],[11652,{uid:11652,url:'/u/0e0d44206a045d76666f546f22051422',avatar:'/a/0e0d44206a045d76666f546f22051422',username:'easychen🤖',}],[4876,{uid:4876,url:'/u/3900750c6a045c73686d506f26226b24',avatar:'/a/3900750c6a045c73686d506f26226b24',username:'seeu2ex🤖',}],[9269,{uid:9269,url:'/u/6a707f356a045c7e626c5f6f0d300405',avatar:'/a/6a707f356a045c7e626c5f6f0d300405',username:'ipwx🤖',}],[5672,{uid:5672,url:'/u/341971556a045c72666d546f1f0b1076',avatar:'/a/341971556a045c72666d546f1f0b1076',username:'nanajj🤖',}],]),related:[{title:'cursor 付费支持支付宝了',url:'/d/200a5e0b6a045c77606a567a455c626a0114063e',},{title:'大家平时用 Cursor 的时候,遇到最多的问题是什么?',url:'/d/232f56086a045c77606a567a455d656a55001426',},{title:'cursor 试用过期后,可以直接用本地的模型吗?',url:'/d/6a10581c6a045c77606a567a475d6a6a2f2f3018',},{title:'cursor 刚用上,真好用啊',url:'/d/2a2446396a045c77606a567a47596a6a5d28623a',},{title:'求教: 如何禁止 Cursor 修改一些跟要求无关的代码格式化问题',url:'/d/6f00742f6a045c77606a56754f5d6a6a0f713766',},{title:'Cursor Go 开发,有哪些必装的插件?',url:'/d/337a733f6a045c77606a56754f5b6b6a39061e13',},{title:'一句话使用 cursor 实现一个移除图片的工具站',url:'/d/353e71556a045c77606a5675435e676a291b1b3e',},{title:'ai 编程怎么选工具',url:'/d/1c0f56016a045c77606a5675435f646a2916603d',},{title:'请教 Cursor 降智问题',url:'/d/1f1b65206a045c77606a5675445d656a3e0d6a6b',},{title:'Cursor 的 500 次用完是重新搞个号注册 Pro 还是用 Api 的?',url:'/d/3c38432e6a045c77606a56754550616a36313821',},{title:'大量出cursor pro',url:'/d/3e3a7b1a6a045c77606a567546586a6a051a3821',},{title:'cursor 奇怪的额度问题,早期用户福利?',url:'/d/2c060a266a045c77606a5675475e6b6a2a192266',},{title:'第一个完全用 AI 工具生成的工具站',url:'/d/6a18771a6a045c77606a5675475e616a01126104',},{title:'体验了一把 Vibe Coding, 用 Cursor + Claude3.7 sonnet 10 小时 0 代码搞定一个 MCP Servers\u0026amp;Clients 信息导航站',url:'/d/0f3d46216a045c77606a56754758606a2e766b35',},{title:'大家使用 cursor 时使用中文或英文提示词, 感觉有区别吗',url:'/d/163c5b076a045c77606a56744e5b656a20721910',},{title:'我的 cursor 突然不可用了, pro 的订阅莫名变成了普通用户',url:'/d/152a631f6a045c77606a56744e58646a0a332462',},{title:'有没有好用的 cursor 多端同步方案',url:'/d/111e7e586a045c77606a56744e58636a3e213722',},{title:'Cursor/vscode 远程调试好用吗?',url:'/d/0f04462b6a045c77606a5674425a6a6a032d3802',},{title:'windsurf 和 cursor 用来写 kotlin 后端还是不太行',url:'/d/2b780b5e6a045c77606a5674425a656a2d103a64',},{title:'Cursor 开发的一款可以将实况照片转为 GIF 动图的 ios app,欢迎 V 友们来帮忙使用测试',url:'/d/171c79216a045c77606a56744350646a1f091c19',},],} 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")