hulai-website/CMS-INTEGRATION.md
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

20 KiB

呼籁旅行官网 — 后台对接方案CMS Integration

本文档分析官网所有内容模块,标注哪些需要「写活」(后台可增删改查),哪些是固定结构不需要动态化,以及推荐的数据库设计和对接方式。


一、内容动态化分级

第一优先级:高频更新(运营同学日常操作)

模块 当前文件 操作类型 更新频率 说明
客户评价 reviews.json 增、改、删 每周 每次收到好评都要加,是最高频的更新
FAQ问答 faq.json 增、改、删 每月 客户常问的问题会变化,需要随时补充和调整
联系方式 contact.json 偶尔 微信号、电话、邮箱可能变更
SEO信息 seo.json 偶尔 优化标题和描述以提升搜索排名

第二优先级:季节性更新(产品经理/罗盘操作)

模块 当前文件 操作类型 更新频率 说明
产品版本 products.json → versions 增、改、删 每季 产品迭代到V10、新增冬季版等
小蒙马亲子游学营 products.json → summerCamp 每年 年龄、活动、定位调整
选择指南 products.json → selectionGuide 每季 新产品上线后需要更新推荐逻辑
定价说明 products.json → pricingPhilosophy 偶尔 价格策略调整时
产品叙事 products.json → narrative 偶尔 品牌定位调整时

第三优先级:低频变更(品牌层面)

模块 当前文件 操作类型 更新频率 说明
品牌信息 brand.json 极少 slogan、信任数据、差异化卖点
关于我们 about.json 极少 品牌故事、子公司、资质、团队、文化
导航 navigation.json 极少 新增/调整导航页面

不需要动态化(代码层面)

项目 说明
页面结构/布局 Vue组件,需开发介入
样式/配色 Less变量,需开发介入
JSON-LD结构化数据 自动从内容数据生成,无需单独管理
sitemap.xml 只有页面增减时才需要改
robots.txt 基本不变

二、每个JSON文件的字段级分析

1. reviews.json评价管理 — 最高频)

后台需要的功能:
✅ 新增评价(上传截图 + 填写文字)
✅ 编辑评价
✅ 删除评价
✅ 调整排序
✅ 修改汇总数据(总数、好评率、关键词)
✅ 管理筛选标签(场景、关心点)

字段说明:
summary:
  - totalCount: number      → 后台可改(或自动计算)
  - approvalRate: string    → 后台可改
  - keywords: string[]      → 后台可增删

items[]:
  - id: number              → 自动生成
  - nickname: string        → 后台填写
  - travelDate: string      → 后台填写(如"2025年7月"
  - productVersion: string  → 后台选择(关联产品列表)
  - screenshot: string      → 后台上传图片,存储路径
  - content: string         → 后台填写与截图内容一致,供AI抓取
  - scenes: string[]        → 后台多选标签(带小孩/家庭游/情侣/朋友/带老人...
  - concerns: string[]      → 后台多选标签(领队服务/行程安排/拍照超美/司机服务...

2. faq.json问答管理 — 高频)

后台需要的功能:
✅ 新增分类
✅ 在分类下新增/编辑/删除问答
✅ 调整分类排序和问答排序
✅ 管理相关链接

字段说明:
categories[]:
  - id: string              → 自动生成
  - name: string            → 后台填写(如"产品类"
  - questions[]:
    - id: string            → 自动生成
    - question: string      → 后台填写
    - answer: string        → 后台填写(支持长文本)
    - relatedLinks[]:       → 后台配置
      - text: string        → 链接文字
      - url: string         → 链接地址(下拉选择站内页面)

3. products.json产品管理 — 季节性)

后台需要的功能:
✅ 编辑产品叙事文案
✅ 新增/编辑/删除/排序产品版本
✅ 编辑夏令营信息
✅ 编辑选择指南
✅ 编辑定价说明

字段说明:
narrative: string            → 后台富文本编辑

versions[]:
  - id: string              → 自动生成(如"v9-6d5n-family"
  - name: string            → 产品名称
  - days: number            → 天数
  - nights: number          → 晚数
  - audience: string        → 适合人群
  - description: string     → 产品描述
  - highlights: string[]    → 亮点列表(可增删)
  - tag: string             → 标签(如"经典版"/"人气王"

summerCamp:
  - name: string            → 名称
  - ageRange: string        → 年龄范围
  - positioning: string     → 定位描述
  - coreActivities: array   → 核心活动列表
  - differenceFromV9: string → 与V9区别说明

selectionGuide:
  - byVacationLength[]:     → 按假期长度推荐
  - byChildAge[]:           → 按孩子年龄推荐
  - byPreference[]:         → 按偏好推荐
  每条condition + recommendation,recommendation关联产品id

pricingPhilosophy: string   → 后台富文本编辑

4. contact.json联系方式 — 偶尔更新)

后台需要的功能:
✅ 编辑联系渠道信息
✅ 新增/删除联系渠道
✅ 上传/更换二维码图片
✅ 编辑安全提示文案

字段说明:
channels[]:
  - type: string            → 渠道类型wechat/phone/email/address等
  - label: string           → 显示名称
  - value: string           → 联系值(微信号/电话/邮箱/地址)
  - qrImage: string|null    → 二维码图片路径(可选)
  - primary: boolean        → 是否主要渠道
  - description: string     → 补充说明

securityNotice: string       → 安全提醒文案

5. brand.json品牌信息 — 极少更新)

后台需要的功能:
✅ 编辑品牌基础信息
✅ 编辑信任数据
✅ 编辑差异化卖点

字段说明:
name: string                → 品牌名
fullName: string            → 公司全称
domain: string              → 域名
url: string                 → 网址
slogan:
  - emotional: string       → 情感化口号
  - functional: string      → 功能化口号
trustStats[]:
  - value: string           → 数值(如"8000+"
  - unit: string            → 单位(如"组"
  - label: string           → 标签(如"已服务家庭"
  - attribution: string     → 补充说明(可选)
differentiators[]:
  - title: string           → 卖点标题
  - description: string     → 卖点描述
icp: string                 → ICP备案号
eContract: string           → 电子合同资质

6. about.json关于我们 — 极少更新)

后台需要的功能:
✅ 编辑品牌故事
✅ 管理子公司列表
✅ 管理资质列表
✅ 编辑团队和文化

字段说明:
story:
  - sections[]:             → 品牌故事段落
    - title/content         → 标题+内容
  - foundingMoment:         → 创始故事
    - scene/reflection      → 场景+感悟
subsidiaries[]:
  - name: string            → 公司名
  - role: string            → 业务角色
qualifications[]:
  - name: string            → 资质名称
  - detail: string          → 具体说明
team:
  - summary: string         → 团队概述
culture:
  - values[]:               → 企业文化
    - word/expression       → 关键词+表达
  - transparency: string    → 透明度说明

7. seo.jsonSEO信息 — 偶尔优化)

后台需要的功能:
✅ 编辑每个页面的SEO信息

字段说明:
pages:
  [pageKey]:                → 页面标识home/about/products/faq/reviews/contact
    - title: string         → 页面标题60字符内
    - description: string   → 页面描述155字符内
    - h1: string            → 页面H1标题
    - ogImage: string       → 社交分享图片

8. navigation.json导航 — 极少变更)

后台需要的功能:
✅ 编辑导航项(文字、链接)
✅ 调整排序

header[]:
  - text: string            → 导航文字
  - to: string              → 链接地址
footer[]:
  - title: string           → 分组标题
  - links[]:
    - text/to               → 链接文字+地址

三、推荐的技术方案

方案 AJSON文件 + 简易后台(推荐起步)

适合阶段:现在 → 日均UV 1000以内

架构:
┌──────────┐      ┌──────────────┐      ┌──────────────┐
│  后台页面  │ ──→  │ API (读写JSON) │ ──→  │ data/*.json  │
│ (Vue/React)│      │  (Node.js)    │      │  (文件存储)   │
└──────────┘      └──────────────┘      └──────────────┘
                         │
                         ↓ 写完后触发
                  ┌──────────────┐
                  │ nuxi generate │  → 重新生成静态页面
                  └──────────────┘

优点:
- 零数据库成本
- 当前代码零改动,后台只操作JSON文件
- 生成的还是静态页面,速度最快
- 适合当前团队规模

缺点:
- 每次改内容需要重新 generate约30秒
- 多人同时编辑可能冲突

方案 B数据库 + API + SSR推荐中期

适合阶段:有后台系统后

架构:
┌──────────┐      ┌──────────────┐      ┌──────────────┐
│  后台页面  │ ──→  │  API Server   │ ──→  │   数据库      │
│          │      │  (Node.js)    │      │ (MySQL/PG)   │
└──────────┘      └──────────────┘      └──────────────┘
                         │
                         ↓ 同时提供
                  ┌──────────────┐
                  │ Nuxt SSR渲染  │  → 实时读数据库渲染
                  └──────────────┘

改动点:
- nuxt.config.js: ssr改为true当前已是,去掉prerender
- 页面中 import JSON → 改为 useFetch('/api/xxx')
- 新增 server/api/ 目录下的接口

四、数据库设计方案B用

表结构

-- 1. 评价表(最高频)
CREATE TABLE reviews (
  id INT PRIMARY KEY AUTO_INCREMENT,
  nickname VARCHAR(50) NOT NULL,
  travel_date VARCHAR(20),           -- "2025年7月"
  product_version VARCHAR(100),       -- 关联产品名称
  screenshot_url VARCHAR(255),        -- 截图CDN地址
  content TEXT NOT NULL,              -- 评价文字AI抓取用
  scenes JSON,                        -- ["带小孩", "家庭游"]
  concerns JSON,                      -- ["领队服务", "行程安排"]
  sort_order INT DEFAULT 0,           -- 排序权重
  is_visible BOOLEAN DEFAULT TRUE,    -- 是否显示
  created_at DATETIME DEFAULT NOW(),
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 2. 评价汇总表
CREATE TABLE review_summary (
  id INT PRIMARY KEY DEFAULT 1,
  total_count INT DEFAULT 0,
  approval_rate VARCHAR(10),          -- "98%"
  keywords JSON,                      -- ["贴心", "孩子玩疯了"]
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 3. FAQ分类表
CREATE TABLE faq_categories (
  id VARCHAR(50) PRIMARY KEY,         -- "product"
  name VARCHAR(50) NOT NULL,          -- "产品类"
  sort_order INT DEFAULT 0,
  created_at DATETIME DEFAULT NOW()
);

-- 4. FAQ问答表
CREATE TABLE faq_questions (
  id VARCHAR(50) PRIMARY KEY,
  category_id VARCHAR(50) NOT NULL,
  question VARCHAR(200) NOT NULL,
  answer TEXT NOT NULL,
  related_links JSON,                 -- [{"text":"查看产品","url":"/products"}]
  sort_order INT DEFAULT 0,
  is_visible BOOLEAN DEFAULT TRUE,
  created_at DATETIME DEFAULT NOW(),
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW(),
  FOREIGN KEY (category_id) REFERENCES faq_categories(id)
);

-- 5. 产品版本表
CREATE TABLE products (
  id VARCHAR(50) PRIMARY KEY,         -- "v9-6d5n-family"
  name VARCHAR(100) NOT NULL,
  days INT,
  nights INT,
  audience VARCHAR(100),
  description TEXT,
  highlights JSON,                    -- ["亮点1", "亮点2"]
  tag VARCHAR(20),                    -- "人气王"
  sort_order INT DEFAULT 0,
  is_visible BOOLEAN DEFAULT TRUE,
  created_at DATETIME DEFAULT NOW(),
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 6. 夏令营信息表
CREATE TABLE summer_camp (
  id INT PRIMARY KEY DEFAULT 1,
  name VARCHAR(100),
  age_range VARCHAR(20),
  positioning TEXT,
  core_activities JSON,
  difference_from_v9 TEXT,
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 7. 联系渠道表
CREATE TABLE contact_channels (
  id INT PRIMARY KEY AUTO_INCREMENT,
  type VARCHAR(20) NOT NULL,          -- "wechat"/"phone"/"email"...
  label VARCHAR(50) NOT NULL,
  value VARCHAR(200) NOT NULL,
  qr_image_url VARCHAR(255),
  is_primary BOOLEAN DEFAULT FALSE,
  description VARCHAR(200),
  sort_order INT DEFAULT 0,
  created_at DATETIME DEFAULT NOW()
);

-- 8. 品牌信息表(单行表)
CREATE TABLE brand_info (
  id INT PRIMARY KEY DEFAULT 1,
  name VARCHAR(50),
  full_name VARCHAR(100),
  domain VARCHAR(50),
  slogan_emotional VARCHAR(200),
  slogan_functional VARCHAR(200),
  trust_stats JSON,                   -- 4个信任数据
  differentiators JSON,               -- 5个差异化卖点
  icp VARCHAR(50),
  e_contract VARCHAR(100),
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 9. 关于我们(单行表)
CREATE TABLE about_info (
  id INT PRIMARY KEY DEFAULT 1,
  story JSON,                         -- 品牌故事结构
  subsidiaries JSON,                  -- 12家子公司
  qualifications JSON,                -- 资质列表
  team JSON,                          -- 团队介绍
  culture JSON,                       -- 文化价值观
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 10. SEO信息表
CREATE TABLE seo_pages (
  page_key VARCHAR(20) PRIMARY KEY,   -- "home"/"about"/...
  title VARCHAR(100),
  description VARCHAR(200),
  h1 VARCHAR(100),
  og_image VARCHAR(255),
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 11. 导航表
CREATE TABLE navigation (
  id INT PRIMARY KEY AUTO_INCREMENT,
  position ENUM('header', 'footer') NOT NULL,
  parent_title VARCHAR(50),           -- footer分组标题,header为NULL
  text VARCHAR(50) NOT NULL,
  url VARCHAR(100) NOT NULL,
  sort_order INT DEFAULT 0
);

-- 12. 内容文案表(产品叙事、定价说明等长文本)
CREATE TABLE content_blocks (
  block_key VARCHAR(50) PRIMARY KEY,  -- "product_narrative" / "pricing_philosophy" / "security_notice"
  content TEXT NOT NULL,
  updated_at DATETIME DEFAULT NOW() ON UPDATE NOW()
);

-- 13. 选择指南表
CREATE TABLE selection_guide (
  id INT PRIMARY KEY AUTO_INCREMENT,
  guide_type ENUM('vacation_length', 'child_age', 'preference'),
  condition_text VARCHAR(100),        -- "3-4天假期"
  recommendation VARCHAR(50),         -- 关联产品id
  sort_order INT DEFAULT 0
);

图片存储

推荐方案:
- 评价截图、二维码、Logo等 → 对象存储阿里云OSS / 腾讯云COS
- 后台上传图片 → API接收 → 上传到OSS → 返回CDN地址
- 数据库只存URL,不存文件

目录规划:
/hulai-oss/
  ├── reviews/          评价截图
  ├── qrcodes/          二维码图片
  ├── logo/             品牌Logo
  └── og/               社交分享图

五、后台管理界面建议

后台菜单结构

📊 数据看板
  - 内容统计评价数、FAQ数、产品数

📝 内容管理
  ├── 客户评价          → 列表 + 新增 + 编辑 + 删除 + 拖拽排序
  ├── 常见问答          → 分类管理 + 问答列表 + 拖拽排序
  ├── 旅行产品          → 产品列表 + 编辑 + 夏令营 + 选择指南
  └── 联系方式          → 渠道列表 + 编辑 + 上传二维码

🏢 品牌设置
  ├── 品牌信息          → 基础信息 + 信任数据 + 差异化卖点
  ├── 关于我们          → 品牌故事 + 子公司 + 资质 + 团队 + 文化
  └── SEO设置           → 6个页面的标题/描述/H1

⚙️ 系统设置
  ├── 导航管理          → 页头/页脚导航编辑
  └── 发布管理          → 一键重新生成静态页面

后台技术栈建议

推荐:
- 前端Vue 3 + Element Plus与官网技术栈统一
- 后端Node.js + Express/Koa或 Nuxt server routes
- 数据库MySQL 8.0阿里云RDS
- 图片阿里云OSS + CDN
- 部署:同一台服务器,后台走 /admin 路径

对接方式:
1. 后台修改数据 → 写入数据库
2. 点击「发布」 → 触发 nuxi generate
3. 生成的静态文件部署到CDN/Nginx

或者(更简单的过渡方案):
1. 后台修改数据 → 直接修改 data/*.json 文件
2. 点击「发布」 → 触发 nuxi generate
3. 无需数据库,JSON就是数据库

六、当前代码对接友好度评估

已经写活的(直接能对接)

内容 数据源 对接方式
所有评价 reviews.json 替换为API即可
所有FAQ faq.json 替换为API即可
所有产品 products.json 替换为API即可
所有联系方式 contact.json 替换为API即可
品牌信息 brand.json 替换为API即可
关于信息 about.json 替换为API即可
SEO信息 seo.json 替换为API即可
导航 navigation.json 替换为API即可

对接时的改动量

每个页面改动量很小,只需要把:
  import data from '~/data/xxx.json'
改为:
  const { data } = await useFetch('/api/xxx')

大约 6个页面 + 3个组件Header/Footer/MobileNav= 9个文件
每个文件改动 1-3 行代码
总改动量约30行代码

评价图片已经对接友好

当前screenshot: "/images/reviews/review-001.jpg"  (本地路径)
对接后screenshot: "https://cdn.1814.love/reviews/review-001.jpg"  CDN地址

组件中用的是 :src="item.screenshot",路径换成CDN地址直接生效,零改动。

七、给运营同学的速查表

现在(没有后台之前)怎么改内容

要改什么 找哪个文件 怎么改
新增客户评价 data/reviews.json items 数组里加一条,图片放到 public/images/reviews/
修改FAQ问答 data/faq.json 找到对应问题直接改文字
修改产品信息 data/products.json 找到对应版本直接改
换微信号/电话 data/contact.json 找到对应渠道改 value
改页面标题/描述 data/seo.json 找到对应页面改
改品牌口号 data/brand.json slogan 下的文字
改关于我们 data/about.json 找到对应位置改

改完后:需要运行 npx nuxi generate 重新生成页面,然后重新部署。

有后台之后怎么改

登录后台 → 找到对应模块 → 编辑 → 点击「发布」→ 完成


八、总结

当前架构优势:
✅ 所有内容都在 8 个 JSON 文件里,结构清晰
✅ 数据和展示完全分离,后台对接只需改数据源
✅ 对接工作量极小约30行代码改动
✅ 可以分步走先用JSON文件+手动generate,再上后台

建议路线图:
Phase 1现在JSON文件 + 手动维护 + nuxi generate
Phase 21-2月后简易后台 + 读写JSON + 一键generate
Phase 3业务增长后数据库 + API + CDN图片 + SSR渲染