提交图
18 次代码提交
作者 SHA1 备注 提交日期
wx 7ce9171a9b docs(deployment): 手册补充 sitemap.xml summary 列既有问题说明(与部署无关) 2026-08-18 11:20:57 +08:00
wx 6597b80f93 feat(deployment): 新增部署手册+一键部署脚本(deploy.sh,git pull+Nuxt SSR build+保数据库/.env,验收走www避开裸域双A漂移) 2026-08-18 11:11:16 +08:00
wx和Claude Opus 4.7 fbaf7e8f3e feat(covers): 入库小红书墙/客户游记封面图(31+8 张)避免部署即丢
背景:
- 3-25 commit 8832762 写了 download-covers.mjs 把外部 CDN 图下载到本地
- 但 .gitignore 排除整个 public/uploads/, 这批 webp 只在刘涛 mac 本地存在
- 测试服重新部署时 git reset --hard origin/master 后 public/uploads/covers/ 始终为空
- 现在小红书 sns-webpic-qc.xhscdn.com / ci.xiaohongshu.com 全部 403/404, noteId
  也全 error_code=300031 暂时无法浏览, 重跑 download-covers.mjs 已下载不到

恢复来源: Node3 (47.105.95.198) /opt/hl/website/public/uploads/covers/ 残留副本

修复:
- .gitignore 改为 public/uploads/* + !public/uploads/covers/, 让 covers 例外随仓库走
- 提交 31 张 xhs-*.webp + 8 张 youji-*.webp, 共 31MB

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 09:35:41 +08:00
wx和Claude Opus 4.7 3ca8af262e fix(editor): 富文本编辑器初始化 race 导致正文不显示
useEditor 异步创建 vs loadItem 异步加载的 race condition:
- mount 时 useEditor 用 props.modelValue='' 初始化
- watch modelValue 触发时 editor.value 还是 null 被跳过
- editor 实例化后 watch 不会再跑,最终内容为空

修复:增加 watch editor 实例的逻辑,编辑器创建后立即同步当前 modelValue。
影响范围:articles/[id]、blogs/[id] 编辑页(共用同一组件)。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 09:14:25 +08:00
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和Claude Opus 4.7 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和Claude Opus 4.7 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
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和Claude Opus 4.6 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和Claude Opus 4.6 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和Claude Opus 4.6 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和Claude Opus 4.6 5a16f96be3 fix: 研学服务商描述与后台CMS同步
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:08:40 +08:00
wx和Claude Opus 4.6 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和Claude Opus 4.6 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和Claude Opus 4.6 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