AI源码
AI源码AI 精选 · 优质源码 · 助力学习

旅游景点推荐系统

这是一个完整的旅游景点推荐管理系统,采用前后端分离架构,实现了景点管理、城市管理、景点分类、新闻资讯、公告通知、用户收藏等核心功能。系统支持管理员和普通用户两种角色,适合作为Vue3全栈开发学习项目或计算机设计参考。

评分:4.8/5.0
销量:22
发布:2025/12/2
难度:L2 进阶级
💬 联系咨询观看视频介绍
永久使用权限
免费更新维护
技术支持服务

项目封面

截图 1

项目说明

旅游景点推荐系统

项目简介

这是一个完整的旅游景点推荐管理系统,采用前后端分离架构,实现了景点管理、城市管理、景点分类、新闻资讯、公告通知、用户收藏等核心功能。系统支持管理员和普通用户两种角色,适合作为Vue3全栈开发学习项目或计算机设计参考。

技术栈

后端技术

技术版本/说明
运行环境Node.js
Web框架Express 4.16.1
数据库MySQL 5.7+
数据库驱动mysql / mysql2
身份认证jsonwebtoken (JWT)
密码加密bcryptjs
文件上传multer
跨域处理cors
环境变量dotenv
热重载nodemon

前端技术

技术版本/说明
前端框架Vue 3.5.10
构建工具Vite 5.4.19
UI组件库Element Plus 2.9.10
路由管理Vue Router 4.5.0
状态管理Pinia 2.3.1
HTTP请求Axios 1.9.0
图表库ECharts 5.6.0
日期处理Day.js 1.11.13
富文本编辑器Quill 2.0.3
CSS预处理器Sass
3D效果Three.js + Vanta
Markdown渲染marked + highlight.js

项目特点

  • 前后端分离:后端提供RESTful API,前端独立开发部署
  • 双角色系统:支持管理员和普通用户两种角色
  • 景点推荐:按城市、分类浏览景点,支持收藏功能
  • 地图定位:景点包含经纬度信息,支持地图展示
  • 数据可视化:管理后台集成ECharts图表展示
  • 富文本支持:支持富文本景点详情编辑
  • 登录日志:记录用户登录历史

功能模块

管理员端功能

1. 首页仪表盘 (admin/Dashboard.vue)

  • 数据统计概览
  • 图表展示

2. 轮播图管理 (admin/Banner.vue)

  • 轮播图列表
  • 新增/编辑/删除轮播图
  • 状态管理(启用/禁用)

3. 城市管理 (admin/City.vue)

  • 城市列表
  • 新增/编辑/删除城市
  • 省份关联

4. 景点分类管理 (admin/SpotCate.vue)

  • 分类列表
  • 新增/编辑/删除分类

5. 景点管理 (admin/Spot.vue)

  • 景点列表
  • 新增/编辑/删除景点
  • 景点图片上传
  • 富文本详情编辑
  • 关联城市和分类
  • 经纬度设置
  • 上下架管理

6. 新闻管理 (admin/News.vue)

  • 新闻列表
  • 新增/编辑/删除新闻
  • 新闻分类管理
  • 发布状态管理

7. 公告管理 (admin/Notice.vue)

  • 公告列表
  • 新增/编辑/删除公告
  • 公告类型管理
  • 发布状态管理

8. 收藏管理 (admin/Star.vue)

  • 用户收藏记录列表

9. 用户管理 (admin/User.vue)

  • 用户列表
  • 用户信息查看
  • 用户状态管理

10. 个人资料 (admin/Profile.vue)

  • 管理员信息编辑
  • 密码修改

用户端功能

1. 首页 (user/Home.vue)

  • 轮播图展示
  • 热门景点推荐
  • 景点分类导航

2. 景点浏览 (user/Spot.vue)

  • 景点列表
  • 按城市筛选
  • 按分类筛选
  • 搜索功能

3. 景点详情 (user/SpotDetail.vue)

  • 景点图片展示
  • 景点详细信息
  • 地址和地图
  • 收藏功能

4. 新闻资讯 (user/News.vue)

  • 新闻列表
  • 新闻详情 (user/newsDetail.vue)

5. 公告通知 (user/Notice.vue)

  • 公告列表
  • 公告详情

6. 我的收藏 (user/MyFavorites.vue)

  • 收藏景点列表
  • 取消收藏

7. 个人资料 (user/Profile.vue)

  • 用户信息编辑
  • 密码修改

项目结构

travel-spot-web-pc/
├── express/                        # 后端服务(Express + MySQL)
│   ├── bin/
│   │   └── www                     # 启动入口
│   ├── config/
│   │   ├── db.js                   # 数据库配置
│   │   └── index.js                # 全局配置
│   ├── controllers/                # 控制器
│   ├── public/
│   │   └── images/                 # 上传图片存储
│   ├── routes/
│   │   ├── admin/                  # 管理端API
│   │   │   ├── alldata.js          # 统计数据接口
│   │   │   ├── banner.js           # 轮播图接口
│   │   │   ├── city.js             # 城市接口
│   │   │   ├── news.js             # 新闻接口
│   │   │   ├── notice.js           # 公告接口
│   │   │   ├── spot.js             # 景点接口
│   │   │   ├── spotCate.js         # 景点分类接口
│   │   │   └── star.js             # 收藏接口
│   │   ├── user/                   # 用户端API
│   │   │   ├── banner.js           # 轮播图接口
│   │   │   ├── city.js             # 城市接口
│   │   │   ├── news.js             # 新闻接口
│   │   │   ├── notice.js           # 公告接口
│   │   │   ├── spot.js             # 景点接口
│   │   │   ├── spotCate.js         # 景点分类接口
│   │   │   └── star.js             # 收藏接口
│   │   ├── index.js                # 路由入口
│   │   ├── public-user.js          # 公共用户接口
│   │   └── upload.js               # 文件上传
│   ├── services/                   # 业务逻辑层
│   ├── test/                       # 测试文件
│   ├── util/                       # 工具函数
│   ├── app.js                      # Express应用配置
│   └── package.json
│
├── web/                            # 前端(Vue3 + Element Plus)
│   ├── public/                     # 静态资源
│   ├── src/
│   │   ├── api/                    # API接口封装
│   │   ├── assets/                 # 静态资源
│   │   ├── components/             # 公共组件
│   │   ├── router/                 # 路由配置
│   │   ├── stores/                 # Pinia状态管理
│   │   ├── styles/                 # 样式文件
│   │   ├── views/                  # 页面视图
│   │   │   ├── admin/              # 管理员页面
│   │   │   │   ├── Banner.vue      # 轮播图管理
│   │   │   │   ├── City.vue        # 城市管理
│   │   │   │   ├── Dashboard.vue   # 仪表盘
│   │   │   │   ├── Layout.vue      # 管理员布局
│   │   │   │   ├── News.vue        # 新闻管理
│   │   │   │   ├── Notice.vue      # 公告管理
│   │   │   │   ├── Profile.vue     # 个人资料
│   │   │   │   ├── Spot.vue        # 景点管理
│   │   │   │   ├── SpotCate.vue    # 景点分类
│   │   │   │   ├── Star.vue        # 收藏管理
│   │   │   │   └── User.vue        # 用户管理
│   │   │   ├── user/               # 用户页面
│   │   │   │   ├── Home.vue        # 首页
│   │   │   │   ├── Layout.vue      # 用户布局
│   │   │   │   ├── MyFavorites.vue # 我的收藏
│   │   │   │   ├── News.vue        # 新闻列表
│   │   │   │   ├── newsDetail.vue  # 新闻详情
│   │   │   │   ├── Notice.vue      # 公告列表
│   │   │   │   ├── Profile.vue     # 个人资料
│   │   │   │   ├── Spot.vue        # 景点列表
│   │   │   │   └── SpotDetail.vue  # 景点详情
│   │   │   ├── Login.vue           # 登录页
│   │   │   └── Register.vue        # 注册页
│   │   ├── App.vue                 # 根组件
│   │   └── main.js                 # 入口文件
│   ├── package.json
│   └── vite.config.js              # Vite配置
│
├── tourism_management.sql          # 数据库SQL文件
├── 数据库创建方法.md                # 数据库创建说明
├── mysql操作手册.md                 # MySQL操作说明
├── mysql.sh                        # MySQL脚本
├── 演示视频.mp4                     # 功能演示视频
└── 新 - 运行必读.docx              # 运行说明文档

数据模型

用户表 (user)

{
  id: bigint,                 // 用户ID
  username: varchar(50),      // 用户名(唯一)
  password: varchar(100),     // 密码(加密)
  name: varchar(50),          // 姓名
  phone: varchar(20),         // 手机号
  email: varchar(100),        // 邮箱
  role: varchar(20),          // 角色:admin-管理员,user-用户
  avatar: varchar(1000),      // 头像
  status: varchar(20),        // 状态:正常、禁用
  last_login: datetime,       // 最后登录时间
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

景点表 (spot)

{
  id: int,                    // 景点ID
  title: varchar(100),        // 景点名称
  spotCateTitle: varchar(50), // 景点类型名称
  spotCateId: int,            // 景点类型ID
  city: varchar(50),          // 所在城市
  cityId: int,                // 城市ID
  cover: varchar(255),        // 景点图片
  rating: decimal(2,1),       // 评分
  collectCount: int,          // 收藏数
  content: longtext,          // 景点描述(富文本)
  status: int,                // 状态(0下架 1上架)
  address: varchar(255),      // 景点地址
  lat: varchar(255),          // 纬度
  lng: varchar(255),          // 经度
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

景点分类表 (spotCate)

{
  id: int,                    // 分类ID
  title: varchar(50),         // 类型名称
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

城市表 (city)

{
  id: int,                    // 城市ID
  title: varchar(50),         // 城市名称
  province: varchar(50),      // 省份
  country: varchar(50),       // 国家
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

轮播图表 (banner)

{
  id: bigint,                 // 轮播图ID
  title: varchar(100),        // 标题
  image_url: varchar(200),    // 图片地址
  link: varchar(200),         // 链接地址
  sort: int,                  // 排序号
  status: varchar(20),        // 状态:启用、禁用
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

新闻表 (news)

{
  id: bigint,                 // 新闻ID
  title: varchar(100),        // 标题
  content: text,              // 内容
  cover: varchar(200),        // 封面图
  category: varchar(50),      // 分类
  status: varchar(20),        // 状态:草稿、发布
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

公告表 (notice)

{
  id: bigint,                 // 公告ID
  title: varchar(100),        // 标题
  content: text,              // 内容
  type: varchar(20),          // 类型:通知、公告
  status: varchar(20),        // 状态:草稿、发布
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

收藏表 (star)

{
  id: int,                    // 收藏ID
  user_id: int,               // 用户ID
  sp_id: int,                 // 景点ID
  create_time: datetime,      // 创建时间
  update_time: datetime       // 更新时间
}

登录日志表 (login_log)

{
  id: int,                    // 日志ID
  user_id: int,               // 用户ID
  login_time: datetime,       // 登录时间
  login_ip: varchar(45),      // 登录IP
  role: varchar(50)           // 用户角色
}

运行环境要求

后端环境

  • Node.js 16.0+
  • MySQL 5.7+
  • npm 或 pnpm

前端环境

  • Node.js 16.0+
  • npm 或 pnpm
  • 现代浏览器(Chrome、Firefox、Edge等)

快速开始

1. 数据库配置

  1. 创建MySQL数据库
CREATE DATABASE tourism_management CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  1. 导入数据库文件
mysql -u root -p tourism_management < tourism_management.sql
  1. 修改数据库配置 编辑 express/config/db.js
var db = mysql.createConnection({
  database: 'tourism_management', // 数据库名称
  port: '3306', // 端口号
  host: 'localhost', // 主机地址
  user: 'root', // 用户名
  password: 'root', // 密码(修改为你的密码)
});

2. 启动后端服务

# 进入后端目录
cd express

# 安装依赖
npm install
# 或使用 pnpm
pnpm install

# 启动服务(开发模式)
npm run dev

后端服务默认运行在 http://localhost:5002

3. 启动前端

# 进入前端目录
cd web

# 安装依赖
npm install
# 或使用 pnpm
pnpm install

# 启动开发服务器
npm run dev

前端默认运行在 http://localhost:5173

默认账号

角色用户名密码说明
管理员admin123456拥有所有管理权限
普通用户zhangsan123456普通用户权限

预置测试数据

景点分类

分类名称
自然风光
历史古迹
主题公园
城市观光

城市数据

城市省份
北京北京市
杭州市浙江省
阿坝藏族羌族自治州四川省
张家界市湖南省
黄山市安徽省

景点数据

景点名称分类城市评分
故宫博物院历史古迹北京4.9
西湖自然风光杭州市4.7
九寨沟自然风光阿坝藏族羌族自治州4.9
张家界国家森林公园自然风光张家界市4.6
黄山自然风光黄山市4.8

界面预览

项目包含演示视频文件:

  • 演示视频.mp4 - 系统完整功能演示

扩展建议

如需进一步完善项目,可考虑以下扩展:

  1. 地图集成:接入高德/百度地图API,展示景点位置
  2. 评论系统:添加景点评论和评分功能
  3. 行程规划:根据用户收藏生成旅行路线
  4. 天气查询:集成天气API,显示景点天气
  5. 门票预订:添加景点门票预订功能
  6. 攻略分享:用户发布旅游攻略
  7. 智能推荐:基于用户偏好推荐景点
  8. 移动端适配:开发小程序或H5版本

注意事项

  1. 本项目为学习演示项目,部分数据为模拟数据
  2. 生产环境部署需要配置HTTPS
  3. 建议定期备份数据库数据
  4. 密码使用bcrypt加密存储

常见问题

Q: 数据库连接失败?

A: 检查MySQL服务是否启动,数据库配置是否正确

Q: 图片无法显示?

A: 检查后端服务是否启动,图片路径配置是否正确

Q: 登录后页面空白?

A: 检查用户角色是否正确,确认路由配置

许可证

本项目仅供学习交流使用,请勿用于商业用途。

技术分类

包含内容

完整源码
项目说明文档
演示材料

适用人群

学习参考与二次开发

关于 AI源码

AI源码 专注优质项目源码分享,提供完整源码、详细文档与技术支持,助力源码设计与课程作业。

QQ: 861077046
邮箱: 861077046@qq.com
已服务 22+ 位用户
立即咨询

相关推荐

查看全部 →
本地生活小程序
小程序
进阶

本地生活小程序

本项目是一个基于微信小程序原生开发的本地生活服务平台,提供餐厅推荐、招聘信息、生活服务分类、近期活动展示等功能,是一个典型的O2O本地生活服务类小程序。

小程序
4.869
电影购票网站
HTML
NEW
进阶

电影购票网站

基于原生 HTML、CSS、JavaScript 实现的 PC 端电影在线购票演示网站。数据使用本地 Mock 模拟,订单与座位占用状态通过浏览器 持久化,无需后端服务,直接用浏览器打开 即可运行。

HTML大作业
4.869
家乡介绍小程序
小程序
进阶

家乡介绍小程序

这是一个家乡文化展示与旅游推荐的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目以广东省惠州市惠东县为示例,完整实现了景点浏览、美食推荐、乡镇介绍、历史回顾、收藏管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

小程序
4.824
乡村振兴三农小程序
小程序
进阶

乡村振兴三农小程序

这是一个乡村振兴与三农服务的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了政策解读、农业科技、数字乡村、乡村旅游、农产品展销、乡风文明、人才振兴、基层党建、经验分享等核心功能模块,适合作为微信小程序开发学习项目或计算机设计参考。

小程序
4.889
图书借阅小程序
Node
进阶

图书借阅小程序

这是一个图书借阅管理的微信小程序,采用纯前端实现,使用本地Mock数据模拟后端接口。项目完整实现了图书浏览、分类筛选、搜索查询、收藏管理、借阅下单、订单管理等核心功能,适合作为微信小程序开发学习项目或计算机设计参考。

Node小程序Vue2+1
4.865
垃圾上门回收小程序
Node
进阶

垃圾上门回收小程序

这是一个完整的垃圾上门回收服务平台,包含微信小程序端。系统实现了垃圾分类回收预约、订单管理、地址管理、系统配置等核心功能,采用Egg.js后端框架,适合作为微信小程序全栈开发学习项目或计算机设计参考。

Node小程序Vue2+1
4.877