22 次代码提交

作者 SHA1 备注 提交日期
wx
9a0afb7cce feat(blog): tags 空时从 SEO 关键词自动 fallback 前 3 个
admin 编辑页暂无 tags 输入框,保存的文章 tags 为空,前端卡片无小标签显示
(对比老文章都有"草原穿搭/旅拍穿搭"等 tag)。

在 server/utils/article-helpers.js 加 resolveTagsWithFallback:
- 前端传 tags 数组(非空)→ 按前端
- 否则从 seoKeywords 用 [,,、] 拆分取前 3 个
- 都没有 → []

POST/PUT 均接入。PUT 时用户改 seoKeywords 也会同步刷新 tags。
2026-04-20 13:54:33 +08:00
wx
61c94b741e fix(blog): tags 双重编码导致详情页 500 + 上传文件名去中文
问题:
- 管理后台编辑博客保存后,访问 /blog/{slug} 返回 500
- 用户上传封面图后前端不识别/裂图

根因:
1. admin [id].get.js 原样返回 DB 里的 tags 字符串 "[]",编辑页 loadItem
   透传到 form.tags,保存时 JSON.stringify 再编码一次 → DB 写入 '"[]"'。
   公开接口 JSON.parse 后得到字符串 "[]" 而非数组,前端 tags.join(',')
   对字符串调用 → TypeError → SSR 500。
2. 上传接口保留中文文件名(\u4e00-\u9fa5 正则放行),Nginx/Nuxt 静态服务
   对含中文 URL 处理不一致,静态请求 404。

修复:
- admin GET:tags 统一解析为数组返回
- admin POST/PUT:只接受数组,非数组写入空数组
- 公开 /api/content/blog|news:safeParseTags 兼容历史脏数据,
  即使 DB 里是 '"[]"' / 非法 JSON 也保证输出数组
- upload.post.js:safeName 只保留 ASCII 字母数字,去除中文
- scripts/fix-articles-tags.mjs:一次性清理历史双重编码数据
2026-04-20 13:21:04 +08:00
wx
f91ecbb093 feat: 官网代码全量更新 (2026-04-18) 2026-04-18 15:13:28 +08:00
wx
fcac8f88db fix(summer-camp): 核心体验卡片兼容对象格式({name,desc,icon}) 2026-04-17 13:28:30 +08:00
wx
6b9c0a6c41 fix(summer-camp): 四大原则卡片兼容对象格式({title,desc}) 2026-04-17 13:22:48 +08:00
wx
de8e3f9471 fix: 客户评价页补全截图/标签/关键词数据
- reviews表新增screenshot/scenes/concerns字段
- API映射从数据库读取这些字段,不再硬编码为空
- 修复客户高频关键词不显示的问题

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 16:33:05 +08:00
wx
ac90205395 feat: 官网代码全量更新
覆盖最新版本代码,包含:
- 新增品牌百科、公司百科页面及CMS管理
- 新增微信引导组件(WechatCTA)
- 新增品牌/公司图片资源
- 全站组件/页面/数据/样式更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 13:21:11 +08:00
wx
bd0518eda6 fix: 资质页从qualifications key读取数据(与CMS后台一致)
根因:CMS后台编辑保存到site_content key='qualifications',
但前端页面从key='about'读取,导致改了后台前端不生效。
现在前端改为从qualifications读取,CMS编辑即时生效。

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:21:36 +08:00
wx
5a16f96be3 fix: 研学服务商描述与后台CMS同步
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:08:40 +08:00
wx
f899d46b94 fix: 修正多处数据不一致(夏令营天数、奖项年份、探索版定位)
- index.vue: 小蒙马夏令营 7天6晚→6天5晚(冬令营才是7天6晚)
- about.json: 研学服务商年份 2026→2025,呼伦贝尔学院 2024→2018
- llms.txt: 探索版描述修正为越野进阶体验(非"适合老人")

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:37:32 +08:00
wx
1477f354cf fix: 修正荣誉奖项年份(研学2026→2025,学院2024→2018)
卡片和表格显示年份不一致,统一为正确年份

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:15:25 +08:00
wx
f6ec85d506 fix: content API news/blog字段映射createdAt改为date
与前端模板article.date保持一致,修复日期显示NaN的根本原因

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:48:29 +08:00
wx
6c79aad1dd fix: 修复日期显示NaN年NaN月NaN日的问题
- formatDate兼容date和createdAt两种字段名
- 增加空值和无效日期防御
- 同步news.json分类数据(之前category全为null)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:30:08 +08:00
Deploy
ab49633b81 fix: 移除 getCachedData 避免预渲染页面 hydration 失败导致 500 2026-03-25 18:04:23 +08:00
刘涛
8832762e51 fix: 修复首页空白、小红书/游记封面图、定制页二维码
1. 首页大面积空白:useScrollReveal 添加 MutationObserver,
   确保异步子组件的 .reveal 元素也能触发入场动画

2. 小红书/游记封面图不显示:
   - 小红书 CDN 签名链接过期+防盗链,全部下载到本地
   - 新增 download-covers.mjs 脚本批量下载封面
   - 新增 useImageProxy composable 转换外部 URL
   - 页面 img 标签添加 referrerpolicy="no-referrer"
   - 管理端保存时自动下载外部封面图到本地
   - 种子数据更新为本地路径

3. 定制页微信号文字替换为二维码图片

4. prerender 路由添加 /xiaohongshu 和 /youji

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:37:58 +08:00
Mimingguang
b82712deed feat: 添加百度主动推送脚本,加速 SEO 收录
- 新建 scripts/baidu-push.mjs,推送 32 个页面 URL 到百度
- package.json 添加 pnpm baidu-push 命令

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 11:14:50 +08:00
Mimingguang
e894f0fb76 chore: 添加百度站长平台验证文件 + build 脚本复制 .env
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 10:52:48 +08:00
Mimingguang
32cd352132 feat: 定制需求提交时发送邮件通知
- 新增 nodemailer 依赖,通过腾讯企业邮 SMTP 发送邮件
- 新建 server/utils/email.js 邮件发送工具
- 定制表单提交后企业微信和邮件通知并行发送
- 不配置 SMTP 环境变量时静默跳过,不影响原有流程

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:50:59 +08:00
Mimingguang
0f591eaf5b Fix product URLs, prerender routes and links
Update routes and URL handling for product pages and improve prerender behavior. Changes include:

- data/pricing.json: change summer camp URL to the canonical "/summer-camp" path.
- nuxt.config.js: set prerender.failOnError = false and clean up the prerender routes list (replace old product slugs with new ones, remove duplicated entries, and consolidate gallery/news/calendar/stories routes).
- pages/destinations/[id].vue: switch product links to use a productUrl helper and add mapping rules so autumn-*/winter-* IDs route to /products/autumn and /products/winter, and the summer-camp ID routes to /summer-camp.

These changes align link generation with updated product routes and make prerendering more robust.
2026-03-25 09:27:46 +08:00
Mimingguang
a35eb22c58 Add 2026-03-25 tester quality metrics
Add a comprehensive tester quality report for 2026-03-25 to .claude/agents/memory/tester/quality-metrics.md. The update records Vite compile stats, frontend page and API checks (all OK), agent output checks, editor field coverage details across modules, and a final conclusion showing 0 failures and 0 missing items.
2026-03-25 09:16:25 +08:00
Mimingguang
810ae2724d fix: 后台编辑器字段全覆盖 + 新建 about/versions/pricing 专用编辑器
- tour 编辑器补全:selectionGuide 3维度、isMainProduct、timeline 正确结构
- camp 编辑器补全:name、campEssentials
- calendar 补全:quickRecommendations、travelAdvice、recommendedProducts
- guides 补全:穿搭章节 months[] 每月数据
- brand 补全:ctaButtons、conversionPath、icpUrl、eContract
- qualifications 补全:enterpriseMatrix
- youji 补全:notes[].tags
- gallery 补全:页面配置(intro/stats/categories)
- 新建 about.vue 专用编辑器(14个分区)
- 新建 versions.vue 专用编辑器(8个分区)
- 新建 pricing.vue 专用编辑器(5个分区)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 09:06:50 +08:00
Mimingguang
ee078b61bc feat: 后台管理系统完整重构 + 前后台数据联通
- 后台全面引入 Naive UI 组件库,统一 UI 规范
- 前台 usePublicApi 切换到 API 调用(GET /api/content/[key])
- 前后台数据源统一(site_content 表)
- 产品线统一管理(tour/camp/course 三套编辑器)
- 产品数据归一化(itinerary/faq/pricing 格式统一)
- 表单提交 API 改写入 submissions 表
- 新增 submissions 标记已读 API
- site-content PUT 支持 upsert
- 修复前台 bug(stories 路由冲突、占位符警告、selector breadcrumb)
- 消除 PageHero 类型警告(useSEO reactive 修复)
- 25 个前台页面全部 HTTP 200,展示效果不变

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 17:48:02 +08:00