import Database from 'better-sqlite3' const db = new Database('./server/database/hulai.db') const stories = [ // ========== 故事 1:上海四口之家·两娃首游 ========== { id: 1, slug: 'shanghai-family-four-summer-2025', title: '上海四口之家:两个孩子、一辆车,那趟让全家都放松的旅行', subtitle: '大女儿 8 岁,二宝 5 岁,从上海出发。去之前最担心的是孩子太小、行程太满;回来才明白原来可以让全家都放松', summary: '两个孩子、一辆车,从上海出发的一次家庭旅行。去之前在三个目的地里犹豫了三个月,回来之后在朋友圈被问爆了推荐方案。', author: '张女士', sourceUrl: '', tags: ['亲子', '四口之家', '上海出发', '夏季', '首次呼伦贝尔', '6天5晚'], familyType: '四口之家', childrenAge: '8岁 + 5岁', fromCity: '上海', tripProduct: '额吉的故乡V9 · 6天5晚亲子版', travelDate: '2025年7月', coverImage: '/images/gallery/gallery-001.jpg', published: true, sortOrder: 1, sections: [ { heading: '出发前的三个月', content: '真到要订的时候,反而不敢下手了。呼伦贝尔、新疆、青海三个目的地,我在小红书和各种群里来回比较了三个月。最担心的就两件事:带两个孩子会不会很累,还有就是——定制游贵那么多,到底值不值。\n\n最后选呼籁,其实是因为定制师没急着让我下单。我把孩子的作息、我老公的腰不好、我妈问能不能带个老人一起,这些零零碎碎都告诉她,她一条一条回复,不催我。她说"您先看看方案,有什么顾虑都提出来"。这种不急着成交的感觉,反而让我觉得靠谱。' }, { heading: '一辆车开出去就松了', content: '从海拉尔机场接到我们那一刻,行李还没放进车,领队就把两瓶常温矿泉水递给孩子,又给我老公递了一个颈枕。他说"路上车程有长有短,您随时说停就停"。这句话后来应验了好多次——二宝看到羊群喊停,我们停了;大女儿要上厕所,我们找了最近的牧户家;我老公腰不舒服想趴会儿,领队直接把后排放平。\n\n独立成团的意思,是真的只有你们一家在这辆车上。不用等别人、不用迁就别人、不用不好意思。我第一次真切体会到"一团一车"不是营销词。' }, { heading: '领队记住了我们家每个人', content: '第三天晚上在营地吃烧烤,领队拿出来一盒冰淇淋,问二宝"还要不要吃草莓味的?"我愣了一下——这话孩子是第二天随口跟他说的,过了两天他居然还记得。\n\n还有大女儿,她不爱吃羊肉,但看到别人都在吃又不好意思说。领队看了一眼,转身让厨房单独给她做了一份小菜。他没跟我们说,是我后来看到菜单才发现。\n\n这些事一件一件不大,但叠加起来就是:我们家每个人都被看到了。这对带两个孩子的妈妈来说,真的是一种非常珍贵的"被照顾感"。' }, { heading: '朋友圈发出去之后', content: '回来那晚发了一条朋友圈,配了几张孩子在草原上疯跑的照片,没配太多文字。结果那一晚私信被问爆了。\n\n我跟朋友说,这次旅行最大的收获不是看了多美的景——景当然美,但我们家两个孩子跑到哪都能跑疯,其实景色对他们来说没那么重要。真正的收获是:"这一周我没吼过孩子,我老公的腰没犯,我妈没抱怨走不动。"\n\n对带娃家庭来说,这就是最高评价。下一次,我想带着我爸妈一起再来一次,让他们也看看这片草原。' }, ], keyMoments: [ '第一天到酒店,房间里已经准备好了儿童牙刷、儿童拖鞋和矮凳,领队说这是"默认配置"', '二宝第一次骑马,全程有马师牵着缰绳,孩子抖着腿坚持骑完一小时,下马后的第一句话是"妈妈我还要骑"', '大女儿在白桦林捡了一块卷曲的树皮回来,说这是她最喜欢的"草原礼物",现在还压在她的书桌玻璃下', '最后一天离开前,领队发给我一份住宿地点清单——包括退房时间、如何联系前台退押金,"万一您回家路上有疑问可以直接联系"' ], seoTitle: '上海一家四口呼伦贝尔6天5晚亲子游真实故事 - 呼籁旅行', seoDesc: '上海张女士一家四口(两个孩子8岁+5岁)2025年7月呼伦贝尔6天5晚定制亲子游的真实记录,从出发前犹豫到回家推荐朋友的全过程。' }, // ========== 故事 2:3 岁幼童真能上草原 ========== { id: 2, slug: 'toddler-first-grassland-2025', title: '带 3 岁宝宝上草原:很多人说太小了不适合,但我们去了', subtitle: '别人都说"等孩子大一点再去",我们没听。回来之后宝宝爱上了羊,也爱上了那个陪他一整天的叔叔', summary: '3 岁的孩子能上草原吗?出发前所有人都劝我们再等几年。我们最终还是去了,回来才知道:3 岁的孩子什么都记得。', author: '琪琪妈', sourceUrl: '', tags: ['亲子', '幼童', '3岁宝宝', '首次出远门', '定制幼童友好方案'], familyType: '三口之家', childrenAge: '3岁', fromCity: '杭州', tripProduct: '额吉的故乡V9 · 5天4晚版(定制幼童友好方案)', travelDate: '2025年6月', coverImage: '/images/stories/placeholder-toddler.jpg', published: true, sortOrder: 2, sections: [ { heading: '所有人都说"再等等"', content: '我婆婆不同意,我妈也不同意,连我发小都说"3 岁太小了,他什么都不记得,浪费钱"。我自己也确实犹豫——3 岁这个年纪,机场闹不闹、车程撑不撑得住、水土服不服,全都是未知数。\n\n最终还是决定去,因为我老公说了一句:"孩子小是真的小,但是他记不记得不是最重要的,我们记得就行。"\n\n我把这些顾虑一条一条发给呼籁的定制师。她没说"没问题都能搞定"这种套话,而是非常具体地回复我:每天车程控制在 2 小时以内、酒店选有婴儿床的、中午必须安排午睡、带孩子的所有高强度项目都预留"可以随时退出"的机制。她说:"3 岁的孩子我们接待过很多,但每个孩子状态都不一样,行程可以随时调。"' }, { heading: '领队是一个奶爸', content: '接机的领队自己有一个 4 岁的女儿。他第一次见到宝宝就蹲下来和他平视说话,没有那种"逗小孩"的夸张劲儿,就是很平常地问:"你带了你的小汽车吗?"\n\n整个行程里,他不是把宝宝当"客户的孩子"小心翼翼地伺候着,而是真的像一个熟悉的叔叔。宝宝走累了他就蹲下来让宝宝爬上背;宝宝要撒尿他比我还快找到最近的草丛;宝宝在车上睡着,他就把车开得特别平稳,空调温度也调到我要的 24 度。\n\n这些都不是"服务",是只有带过孩子的人才会下意识做的动作。' }, { heading: '宝宝爱上了羊', content: '第三天去牧户家,宝宝第一次近距离看到羊。他没有哭也没有害怕,就是蹲在羊旁边看,看了有二十多分钟。领队悄悄跟我说:"我们不催他,他看够了自己会起来。"\n\n当天下午他一路上都在说"羊""羊""羊"。晚上睡觉前他抱着我问:"妈妈,那只白色的羊明天还在吗?"\n\n回来之后他画画全都是羊。幼儿园老师问他"你最喜欢什么?"他说"草原的羊"。到现在过了半年,他还记得那只羊——所有人说"3 岁记不得"的事情,他全都记得。' }, { heading: '给还在犹豫的妈妈', content: '如果你也在纠结孩子是否太小,我想分享两点:\n\n第一,3 岁的孩子不需要"看懂"什么,他需要的是"身体的记忆"——风的感觉、动物的气味、和妈妈手牵手走在一片无边无际的绿色里。这些他不会说出来,但他会用一辈子保存。\n\n第二,重点不是孩子有没有准备好,而是你找到的团队有没有准备好。呼籁为我们做的最重要的一件事,就是把行程强度降到 3 岁孩子能承受的程度——每天不赶、随时可停、所有项目都有"不玩也没关系"的出口。\n\n这不是我一个人写的评价,这是我想对所有像我一样犹豫的妈妈说的话。' }, ], keyMoments: [ '第一天入住酒店,前台已经准备好婴儿床、婴儿浴盆和儿童洗漱用品,全程我都没开口问过', '中午吃饭的餐厅,领队提前打电话让厨房准备了清淡的蔬菜粥和蒸蛋,不加盐、不加酱油', '宝宝在牧户家看羊看了二十多分钟,领队和整个团队没有一个人催,一直笑眯眯地等着', '离开那天宝宝哭了,不是因为累,是因为舍不得那个奶爸领队,一路上抱着他的脖子不松手' ], seoTitle: '3 岁幼童呼伦贝尔草原之旅真实记录 - 呼籁旅行', seoDesc: '3 岁宝宝能不能上草原?杭州琪琪妈一家的真实记录。从所有人反对到最终决定出发,从担心水土不服到孩子爱上羊,分享定制幼童友好方案的全过程。' }, // ========== 故事 3:三代同堂 10 人大团 ========== { id: 3, slug: 'three-gen-ten-people-2025', title: '十人大团三代同堂:外婆第一次坐飞机,孙女第一次骑马', subtitle: '一家十口,老老少少,从北京和深圳两地出发汇合海拉尔。老人最担心走不动,孩子最担心没得玩;走完一圈,没一个人掉队', summary: '一家十口:爷爷奶奶、外公外婆、爸爸妈妈加三个孩子,第一次三代同行。老人能走吗?孩子能玩吗?十个人的节奏怎么统一?这是我们的答案。', author: '罗女士', sourceUrl: '', tags: ['三代同游', '十人大团', '老人', '多家庭', '6天5晚', '慢节奏'], familyType: '三代同堂 10 人', childrenAge: '9岁+7岁+4岁', fromCity: '北京 / 深圳', tripProduct: '额吉的故乡V9 · 6天5晚(针对老人定制慢节奏方案)', travelDate: '2025年8月', coverImage: '/images/summer-camp/grassland-group.jpg', published: true, sortOrder: 3, sections: [ { heading: '十个人的出行,看起来像不可能完成的任务', content: '家里今年要给外婆办 70 大寿,弟弟提议不办酒席改成一起出去旅行。这个主意一提出来,所有人都觉得好——但所有人也都觉得难。\n\n难在哪?外公外婆膝盖都不好,爷爷奶奶高血压,三个孩子年龄跨度从 4 岁到 9 岁,大人两家作息完全不一样,早起派和夜猫派混在一起。最核心的问题是:一个行程怎么可能同时满足老人、中年和孩子?\n\n我把这些情况一股脑儿发给呼籁的定制师。她没有一上来推方案,而是先问了我一个问题:"您希望这次旅行结束的时候,外婆最记得的是哪件事?"\n\n我想了想说:"希望她觉得自己没给大家添麻烦。"' }, { heading: '方案是按老人的节奏搭的', content: '最后的行程里,每天早上 8:30 才出发,中午必定回酒店午休,下午只安排一个主项目,晚饭后就是自由时间。这比一般家庭慢了整整 2-3 小时。\n\n看起来"少了",但其实每个人都玩得很尽兴。三个孩子在营地有专门的体验活动不闲着,外公外婆可以不跟团里的长途项目、在酒店附近慢慢走,我和先生、弟弟弟妹则可以在保证老人舒适的前提下多体验一些。\n\n司机也是特意安排的。领队姐姐看了老人的情况,特意换了车底更低、上下车更方便的 SUV。外婆第一天上车就说"这车我不用费劲就能坐进去"——这一句话我到现在都记得。' }, { heading: '外婆第一次骑马,在别人帮忙下坚持了 10 分钟', content: '第三天到牧场的时候,外婆本来说她就在边上看。领队过来跟她说:"要不试一下?就走一小段,马师牵着,您不用自己控制。"外婆犹豫了半天答应了。\n\n马师把马控制得特别稳,只让马在草地上慢慢走了一段回来。下马之后外婆笑着说"这辈子第一次骑马"。晚上她发了朋友圈,配了张照片,写了一句"活到 70 岁第一次骑马",点赞的全是她的姐妹们。\n\n后来她跟我说,这次旅行最开心的不是风景,是她发现自己"还能做以前没做过的事"。这句话我听了眼眶有点湿。' }, { heading: '十个人没有一个掉队', content: '六天五晚下来,外公外婆没喊过累,爷爷奶奶血压稳定,三个孩子每晚都能自然入睡。弟弟说"这是我们家这些年最难得的一次全员在场"。\n\n回去之后,我让每个人都写一句话发到家庭群里,作为这次旅行的"毕业感言"。\n\n外婆写:这辈子第一次骑马。\n爷爷写:草原真大。\n大女儿写:妹妹哭的时候我会哄她了。\n弟弟写:全家人都笑着的画面,太久没见过了。\n\n十个人,十句话,我存下来了。这就是我们这次旅行真正的收获。' }, ], keyMoments: [ '酒店房间全部安排在同一层且互相靠近,方便老人随时串门、孩子晚上跑来跑去', '每天的项目都有"老人可选版本"——外公外婆不想参加的长途项目,酒店前台会替他们预约周边散步路线', '外婆 70 岁生日那天,营地的厨师做了一个简单的长寿面,没有仪式感也没有收费,只是作为晚餐的一部分默默端上来', '最后一天送机,三辆车分两个航班分别送,领队提前把行李分好贴上标签,两拨人走的时候都没手忙脚乱' ], seoTitle: '三代同堂十人大团呼伦贝尔旅行故事 - 呼籁旅行', seoDesc: '一家十口三代同堂的呼伦贝尔 6 天 5 晚之旅。70 岁外婆第一次骑马、三个孩子跨年龄段照顾、多家庭口味协调——带老人、带孩子、多家庭的完整真实记录。' }, ] const updateStmt = db.prepare(` UPDATE stories SET slug=?, title=?, subtitle=?, summary=?, author=?, source_url=?, tags=?, family_type=?, children_age=?, from_city=?, trip_product=?, travel_date=?, cover_image=?, sections=?, key_moments=?, seo_title=?, seo_description=?, published=?, sort_order=? WHERE id=? `) const tx = db.transaction(() => { for (const s of stories) { updateStmt.run( s.slug, s.title, s.subtitle, s.summary, s.author, s.sourceUrl, JSON.stringify(s.tags), s.familyType, s.childrenAge, s.fromCity, s.tripProduct, s.travelDate, s.coverImage, JSON.stringify(s.sections), JSON.stringify(s.keyMoments), s.seoTitle, s.seoDesc, s.published ? 1 : 0, s.sortOrder, s.id, ) } }) tx() console.log('✓ 已写入 3 篇样板故事(#1 #2 #3)') const rs=db.prepare('SELECT id,title,cover_image FROM stories WHERE id<=3 ORDER BY id').all() rs.forEach(r=>console.log(' ',r.id,'|',r.title,'|',r.cover_image))