# 创高家具官网 - 后端API接口设计 ## 一、接口规范 ### 1.1 基础规范 | 项目 | 规范 | |------|------| | 接口前缀 | `/api` | | 版本 | v1(URL中体现) | | 认证方式 | Sa-Token(Header: `Authorization: Bearer {token}`) | | 响应格式 | JSON统一包装 | ### 1.2 响应结构 ```json { "code": 200, "message": "success", "data": {}, "timestamp": 1715164800000 } ``` ### 1.3 分页参数 | 参数 | 类型 | 说明 | |------|------|------| | page | int | 页码,默认1 | | size | int | 每页条数,默认10,最大50 | | sort | string | 排序字段 | | order | string | 排序方向:asc/desc | ### 1.4 多语言支持 | 参数 | 类型 | 说明 | |------|------|------| | lang | string | 语言:zh-CN / en-US,默认从Accept-Language或配置读取 | --- ## 二、前台接口(Portal) ### 2.1 公司信息 #### 获取公司配置 ``` GET /api/portal/company/info ``` **响应** ```json { "code": 200, "data": { "brandName": "创高家具", "brandNameEn": "ChuangGao Furniture", "slogan": "匠心定制,品质生活", "sloganEn": "Crafted for Quality Living", "contactPhone": "400-xxx-xxxx", "contactEmail": "contact@chuanggao.com", "address": "广东省佛山市...", "addressEn": "Foshan, Guangdong, China", "wechatQr": "https://minio.../uploads/wechat-qr.jpg", "socialLinks": { "weibo": "...", "douyin": "..." }, "icpRecord": "粤ICP备xxxxxxxx号", "copyright": "© 2024 创高家具 版权所有", "seo": { "title": "...", "keywords": "...", "description": "..." } } } ``` --- ### 2.2 首页数据 #### 获取首页完整数据 ``` GET /api/portal/home/data ``` **响应** ```json { "code": 200, "data": { "banners": [...], // 轮播图列表 "pageBlocks": {...}, // 页面区块配置 "hotProducts": [...], // 热门产品(8个) "recommendCases": [...], // 推荐案例(6个) "brandStrength": {...} // 品牌实力数据 } } ``` #### 获取轮播图 ``` GET /api/portal/carousel/list ``` **参数** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | position | string | 是 | 位置:home_banner, about_banner等 | --- ### 2.3 产品模块 #### 获取产品分类树 ``` GET /api/portal/product/category/tree ``` **响应** ```json { "code": 200, "data": [ { "id": 1, "name": "全屋定制", "nameEn": "Whole House Custom", "code": "custom", "icon": "...", "image": "...", "children": [...] } ] } ``` #### 获取产品列表 ``` GET /api/portal/product/list ``` **参数** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | categoryId | long | 否 | 分类ID | | isHot | boolean | 否 | 是否热门 | | isNew | boolean | 否 | 是否新品 | | isRecommend | boolean | 否 | 是否推荐 | | keyword | string | 否 | 关键词搜索 | | page | int | 否 | 默认1 | | size | int | 否 | 默认12 | **响应** ```json { "code": 200, "data": { "total": 100, "pages": 10, "current": 1, "records": [ { "id": 1, "name": "意式极简真皮沙发", "nameEn": "Italian Minimalist Leather Sofa", "mainImage": "...", "summary": "进口头层牛皮...", "summaryEn": "...", "priceMin": 15800, "priceMax": 25800, "isShowPrice": false, "params": [{"name": "材质", "value": "真皮"}], "sceneTags": ["客厅", "大户型"] } ] } } ``` #### 获取产品详情 ``` GET /api/portal/product/detail/{id} ``` --- ### 2.4 案例模块 #### 获取案例分类 ``` GET /api/portal/case/category/list ``` #### 获取案例列表 ``` GET /api/portal/case/list ``` **参数** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | categoryId | long | 否 | 分类ID | | isRecommend | boolean | 否 | 是否推荐 | | page | int | 否 | 默认1 | | size | int | 否 | 默认9 | #### 获取案例详情 ``` GET /api/portal/case/detail/{id} ``` **响应包含** - 案例基本信息 - 图片轮播数组 - 项目信息(面积、地点、时间) - 关联产品列表 - 上一篇/下一篇导航 --- ### 2.5 新闻模块 #### 获取新闻分类 ``` GET /api/portal/news/category/list ``` #### 获取新闻列表 ``` GET /api/portal/news/list ``` **参数** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | categoryId | long | 否 | 分类ID | | isTop | boolean | 否 | 是否置顶 | | page | int | 否 | 默认1 | | size | int | 否 | 默认10 | #### 获取新闻详情 ``` GET /api/portal/news/detail/{id} ``` --- ### 2.6 关于创高 #### 获取页面区块内容 ``` GET /api/portal/page/blocks ``` **参数** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | pageCode | string | 是 | 页面代码: about, join等 | #### 获取荣誉资质列表 ``` GET /api/portal/honor/list ``` **参数** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | type | string | 否 | 类型:certificate/award/patent/partner | --- ### 2.7 招商加盟/联系我们 #### 获取加盟政策 ``` GET /api/portal/franchise/policies ``` #### 提交留言表单 ``` POST /api/portal/contact/submit ``` **请求体** ```json { "type": "join", // join/cooperate/feedback/other "name": "张三", "phone": "13800138000", "email": "zhangsan@example.com", "company": "某某公司", "address": "广东省深圳市", "subject": "加盟咨询", "message": "想了解加盟政策..." } ``` --- ## 三、管理后台接口(Admin) ### 3.1 认证模块 #### 管理员登录 ``` POST /api/admin/auth/login ``` **请求体** ```json { "username": "admin", "password": "admin123", "captcha": "abc123" } ``` #### 登出 ``` POST /api/admin/auth/logout ``` #### 获取当前用户信息 ``` GET /api/admin/auth/info ``` --- ### 3.2 公司信息管理 #### 更新公司信息 ``` PUT /api/admin/company/update ``` **请求体**(对应 f_company 表字段) #### 获取公司信息 ``` GET /api/admin/company/info ``` --- ### 3.3 轮播图管理 #### 轮播图列表 ``` GET /api/admin/carousel/list ``` #### 创建轮播图 ``` POST /api/admin/carousel/create ``` #### 更新轮播图 ``` PUT /api/admin/carousel/update/{id} ``` #### 删除轮播图 ``` DELETE /api/admin/carousel/delete/{id} ``` #### 批量更新排序 ``` PUT /api/admin/carousel/sort ``` --- ### 3.4 产品管理 #### 产品分类管理 ``` GET /api/admin/product/category/list POST /api/admin/product/category/create PUT /api/admin/product/category/update/{id} DELETE /api/admin/product/category/delete/{id} ``` #### 产品管理 ``` GET /api/admin/product/list // 支持分页、分类筛选、关键词搜索 POST /api/admin/product/create PUT /api/admin/product/update/{id} DELETE /api/admin/product/delete/{id} PUT /api/admin/product/status/{id} // 上下架 PUT /api/admin/product/sort // 批量排序 ``` --- ### 3.5 案例管理 ``` GET /api/admin/case/category/list POST /api/admin/case/category/create PUT /api/admin/case/category/update/{id} DELETE /api/admin/case/category/delete/{id} GET /api/admin/case/list POST /api/admin/case/create PUT /api/admin/case/update/{id} DELETE /api/admin/case/delete/{id} ``` --- ### 3.6 新闻管理 ``` GET /api/admin/news/category/list POST /api/admin/news/category/create PUT /api/admin/news/category/update/{id} DELETE /api/admin/news/category/delete/{id} GET /api/admin/news/list POST /api/admin/news/create PUT /api/admin/news/update/{id} DELETE /api/admin/news/delete/{id} PUT /api/admin/news/publish/{id} // 发布/下线 PUT /api/admin/news/top/{id} // 置顶/取消置顶 ``` --- ### 3.7 页面区块管理(核心功能) #### 获取页面所有区块 ``` GET /api/admin/page/blocks ``` **参数**: pageCode (home/about/products/cases/contact) #### 更新区块内容 ``` PUT /api/admin/page/block/update/{id} ``` **请求体** ```json { "contentZh": "中文内容", "contentEn": "English Content", "image": "https://minio.../image.jpg", "imagesJson": ["url1", "url2"], "linkUrl": "/products", "linkTextZh": "查看产品", "linkTextEn": "View Products", "isShow": true } ``` #### 批量更新区块 ``` PUT /api/admin/page/blocks/batch-update ``` --- ### 3.8 文件上传/媒体库(MinIO) #### 单文件上传 ``` POST /api/admin/upload/single ``` **Content-Type**: multipart/form-data **参数** | 参数 | 类型 | 说明 | |------|------|------| | file | File | 上传的文件 | | usedIn | string | 使用位置:carousel/product/case/news/page | **响应** ```json { "code": 200, "data": { "id": 1, "fileName": "banner-01.jpg", "fileSize": 1024000, "filePath": "/uploads/carousel/banner-01.jpg", "fullUrl": "http://minio:9000/chuanggao-images/uploads/carousel/banner-01.jpg", "width": 1920, "height": 600, "thumbUrl": "..." } } ``` #### 多文件上传 ``` POST /api/admin/upload/multiple ``` #### 获取媒体库列表 ``` GET /api/admin/media/list ``` **参数** | 参数 | 类型 | 说明 | |------|------|------| | fileType | string | image/video/document | | usedIn | string | 使用位置筛选 | | page | int | 页码 | | size | int | 每页条数 | #### 删除媒体文件 ``` DELETE /api/admin/media/delete/{id} ``` #### 获取图片直链 ``` GET /api/admin/media/url/{id} ``` **响应**: 返回可直接访问的URL(已考虑MinIO公开读配置) --- ### 3.9 荣誉资质管理 ``` GET /api/admin/honor/list POST /api/admin/honor/create PUT /api/admin/honor/update/{id} DELETE /api/admin/honor/delete/{id} ``` --- ### 3.10 加盟政策管理 ``` GET /api/admin/franchise/policy/list POST /api/admin/franchise/policy/create PUT /api/admin/franchise/policy/update/{id} DELETE /api/admin/franchise/policy/delete/{id} ``` --- ### 3.11 留言管理 #### 留言列表 ``` GET /api/admin/message/list ``` **参数** | 参数 | 类型 | 说明 | |------|------|------| | type | string | 留言类型筛选 | | status | int | 处理状态筛选 | | startDate | date | 开始日期 | | endDate | date | 结束日期 | #### 留言详情 ``` GET /api/admin/message/detail/{id} ``` #### 回复留言 ``` PUT /api/admin/message/reply/{id} ``` **请求体** ```json { "replyContent": "感谢您的咨询,我们会尽快联系您...", "status": 2 // 已回复 } ``` --- ### 3.12 管理员账号管理 ``` GET /api/admin/user/list POST /api/admin/user/create PUT /api/admin/user/update/{id} DELETE /api/admin/user/delete/{id} PUT /api/admin/user/status/{id} // 启用/禁用 PUT /api/admin/user/reset-password/{id} ``` --- ## 四、接口安全 ### 4.1 前台接口 - 无需登录,公开访问 - 限流:单个IP 100次/分钟 ### 4.2 管理后台接口 - 需登录,Sa-Token 验证 - 权限检查:根据 role 字段判断 - 限流:单个用户 30次/分钟 ### 4.3 文件上传 - 文件类型白名单:jpg, jpeg, png, gif, webp, mp4, pdf - 单文件大小限制:图片10MB,视频100MB - 图片自动压缩:超过1920px自动压缩,生成缩略图 --- ## 五、MinIO 存储结构 ``` chuanggao-images (bucket) ├── uploads/ │ ├── carousel/ # 轮播图 │ │ ├── home-01.jpg │ │ └── about-01.jpg │ ├── products/ # 产品图片 │ │ ├── 2024/ │ │ └── thumbs/ # 缩略图 │ ├── cases/ # 案例图片 │ ├── news/ # 新闻封面 │ ├── pages/ # 页面区块图片 │ ├── company/ # 公司相关(logo、二维码) │ └── honor/ # 荣誉证书 └── temp/ # 临时文件(定期清理) ``` --- ## 六、Controller 层设计示例 ```java // PortalCompanyController.java - 前台公司信息 @RestController @RequestMapping("/api/portal/company") public class PortalCompanyController { @GetMapping("/info") public Result getCompanyInfo(@RequestParam(defaultValue = "zh-CN") String lang) { // 根据lang返回对应语言内容 } } // AdminCompanyController.java - 后台公司管理 @RestController @RequestMapping("/api/admin/company") @SaCheckLogin public class AdminCompanyController { @GetMapping("/info") public Result getInfo() { return Result.success(companyService.getInfo()); } @PutMapping("/update") @SaCheckRole("admin") public Result update(@RequestBody @Valid CompanyDTO dto) { companyService.update(dto); return Result.success(); } } // AdminUploadController.java - 文件上传 @RestController @RequestMapping("/api/admin/upload") @SaCheckLogin public class AdminUploadController { @PostMapping("/single") public Result uploadSingle( @RequestParam("file") MultipartFile file, @RequestParam(defaultValue = "other") String usedIn) { return Result.success(uploadService.upload(file, usedIn)); } } ```