wx
14935dfbf4
fix(news): 新闻动态详情页 + 列表卡片可点击跳转
...
- 移除 pages/news.vue,改为 pages/news/index.vue (列表) + [slug].vue (详情)
- 列表卡片包 NuxtLink 跳 /news/{slug},正文编辑器内容现在能渲染
- 详情页含面包屑/侧栏/上下篇导航/JSON-LD NewsArticle schema
2026-05-08 14:01:23 +08:00
wx
df6b3f2371
feat(blog): 正文编辑器工具栏 sticky 跟随滚动
...
position: sticky; top: 0; z-index: 10
工具栏吸附 viewport 顶部, 编辑长文滚动时格式按钮始终可见
sticky 范围限制在 .rich-editor 父容器内, 滚出编辑器自然消失
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 15:31:39 +08:00
wx
b5c13d5f24
fix(blog): 后台博客图片支持本地上传 + 封面图上传错误信息暴露
...
正文编辑器:
- 新增"图片"按钮: 点击弹文件选择 -> 调 /api/admin/upload -> 自动插入 <img src=/uploads/...>
- 保留"图片URL"按钮兼容外链/已有路径(原来唯一的 prompt 路径)
- 上传中按钮 disabled, 失败用 naive-ui message 提示
封面图 ImageUpload:
- 改用 useAdmin().adminFetch 替代裸 \$fetch + useState 取 token 的双轨写法
- 错误信息从单一字符串"上传失败"改为 e.data?.message || e.message || HTTP statusCode, 让线上"上传失败"自暴露真实根因
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-04 14:19:07 +08:00
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
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