# versatile **Repository Path**: ye-luochen_admin/versatile ## Basic Information - **Project Name**: versatile - **Description**: 怒发冲冠,凭阑处、潇潇雨歇。抬望眼,仰天长啸,壮怀激烈。三十功名尘与土,八千里路云和月。莫等闲,白了少年头,空悲切。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-11 - **Last Updated**: 2025-05-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 多功能服务系统(Versatile Service System) 这是一个多功能服务系统,包含酒店、餐厅、景点等多种服务模块,用于提供综合的信息查询和管理功能。 ## 项目结构 项目采用Spring Boot框架,使用Maven进行构建,主要包含以下模块: - versatile-common:公共模块,包含通用工具类和配置 - versatile-admin:后台管理模块,包含各功能模块的控制器、服务和数据访问层 - versatile-ui:前端展示模块 ## 技术栈 - 后端:Spring Boot、MyBatis、MySQL - 前端:(待补充) ## 功能模块 ### 1. 餐厅模块 餐厅模块提供了餐厅信息管理和菜品管理功能。 #### 数据结构 **餐厅(Restaurant)** - id:餐厅ID - name:餐厅名称 - address:餐厅地址 - phoneNumber:联系电话 - category:餐厅分类(中餐、快餐等) - description:餐厅描述 - image:餐厅图片 - resLatitude:纬度 - resLongitude:经度 - point:评分 - priceRange:价格区间 - openingHours:营业时间 - favorite:收藏数量 - like:点赞数量 - created_by:创建者ID **菜品(Food)** - id:菜品ID - restaurantId:所属餐厅ID - foodName:菜品名称 - foodImage:菜品图片 - price:价格 #### API接口 **餐厅管理** - GET /restaurant/list:获取所有餐厅列表 - GET /restaurant/hot:获取热门餐厅列表 - GET /restaurant/{id}:根据ID获取餐厅详情 - GET /restaurant/search?name=xxx:根据名称搜索餐厅 - GET /restaurant/category/{category}:根据分类获取餐厅 - POST /restaurant:新增餐厅 - PUT /restaurant:修改餐厅 - DELETE /restaurant/{id}:删除餐厅 - PUT /restaurant/{id}/like:点赞餐厅 - PUT /restaurant/{id}/favorite:收藏餐厅 **菜品管理** - GET /restaurant/{id}/foods:获取餐厅的所有菜品 - POST /restaurant/{id}/food:为餐厅添加菜品 - PUT /restaurant/food:修改菜品 - DELETE /restaurant/food/{id}:删除菜品 ### 2. 酒店模块 酒店模块提供了酒店信息管理和房间管理功能。 - 酒店信息:名称、地址、联系方式、星级、价格、设施等 - 房间管理:类型、价格、状态、图片等 - created_by:创建者ID #### API接口 **酒店管理** - GET /hotel/list:获取所有酒店列表 - GET /hotel/hot:获取热门酒店列表 - GET /hotel/{hotelsId}:根据ID获取酒店详情 - POST /hotel:新增酒店 - PUT /hotel:修改酒店 - DELETE /hotel/{hotelsId}:删除酒店 - POST /hotel/{hotelId}/like:点赞/取消点赞酒店(新接口,与景点接口保持一致) - POST /hotel/like:点赞/取消点赞酒店(旧接口,已保留兼容) - POST /hotel/favorite:收藏酒店 ### 3. 景点模块 景点模块提供了景点信息管理和评论管理功能。 - 景点信息:名称、地址、开放时间、门票价格、介绍等 - 游记管理:标题、内容、图片、评分等 - created_by:创建者ID ## Security模块 系统使用Spring Security框架实现用户认证和授权,主要包括以下功能: ### 1. 用户认证 - 基于JWT(JSON Web Token)的认证机制 - 用户名密码登录 - 自动刷新令牌 ### 2. 角色和权限管理 系统包含以下角色: 1. **系统管理员(admin)**: - 拥有所有权限 - 负责管理其他管理员角色 - 可以查看和管理所有内容 2. **美食管理员(food_admin)**: - 管理餐厅和菜品信息 - 可以发布、修改和删除自己创建的餐厅和菜品信息 - 具有对应模块的所有查询权限 3. **酒店管理员(hotel_admin)**: - 管理酒店和房间信息 - 可以发布、修改和删除自己创建的酒店和房间信息 - 具有对应模块的所有查询权限 4. **景点管理员(attraction_admin)**: - 管理景点和游记信息 - 可以发布、修改和删除自己创建的景点和游记信息 - 具有对应模块的所有查询权限 5. **普通用户(common_user)**: - 基本的浏览和搜索权限 - 可以发布评论和点赞 - 可以收藏内容 权限标识规则: - 查询权限:`xxx:query` - 新增权限:`xxx:add` - 修改权限:`xxx:edit` - 删除权限:`xxx:remove` - 针对自己创建内容的权限:`xxx:own` ### 3. 页面访问控制 - 首页(/)和登录页面(/login)以及注册页面(/register)无需认证,所有用户均可访问 - 其他所有页面需要登录后才能访问 - 静态资源(CSS, JavaScript等)无需认证即可访问 ### 4. 用户注册 - 用户注册需要提供用户名、密码、确认密码、昵称、邮箱、手机号和验证码 - 系统对注册信息进行验证,包括用户名唯一性检查、密码强度验证、邮箱格式验证等 - 注册成功后,用户将被默认分配为普通用户角色 ### 5. 相关API **认证接口** - POST /login:用户登录 - POST /register:用户注册 - POST /logout:用户退出 **角色权限管理** - GET /system/role/list:获取角色列表 - GET /system/role/{roleId}:获取角色详情 - POST /system/role:添加角色 - PUT /system/role:修改角色 - DELETE /system/role/{roleId}:删除角色 - POST /system/role/auth:分配权限 - GET /system/user/{userId}/roles:获取用户角色 - POST /system/user/role:分配用户角色 ### 6. 使用方式 1. 登录获取token: ``` POST /login { "username": "admin", "password": "123456" } ``` 2. 在请求头中添加token: ``` Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` 3. 使用权限注解控制访问: ```java @PreAuthorize("hasAuthority('system:user:list')") @GetMapping("/list") public List list() { // 业务逻辑 } ``` ### 7. 前端认证和授权 前端使用Vue Router的导航守卫结合Axios拦截器实现了完整的认证和授权流程: 1. **路由守卫**: - 在路由跳转前检查是否为公开访问页面 - 非公开页面检查是否有token,无token则跳转到登录页 - 使用会话存储记录导航状态,防止出现重定向循环 2. **请求拦截**: - 请求发出前自动添加token到请求头 - 响应接收时检查返回状态 - 当收到401错误时清除本地token并跳转到登录页 3. **Token存储**: - 使用localStorage存储token - 使用getToken/setToken/removeToken统一管理token操作 - 在登录成功后更新Vuex状态管理中的用户状态 4. **用户状态管理**: - 使用Vuex管理全局用户状态 - 在应用启动时自动从localStorage恢复用户状态 - 使用事件总线机制通知组件登录状态变化 ## 开发环境搭建 1. 克隆项目代码 ``` git clone [项目地址] ``` 2. 导入数据库 ``` mysql -u username -p database_name < versatile.sql ``` 3. 导入测试数据(可选) ``` mysql -u username -p database_name < restaurant_data.sql ``` 4. 修改数据库配置(application.yml) ``` spring: datasource: url: jdbc:mysql://localhost:3306/versatile?useUnicode=true&characterEncoding=utf8 username: your_username password: your_password ``` 5. 启动项目 ``` mvn spring-boot:run ``` ## 接口文档 完整的API接口文档请参考:[API文档](api-docs.html)(待补充) ## 贡献指南 欢迎贡献代码,提交问题和建议。 ## 许可证 本项目采用 [MIT 许可证](LICENSE)。