菜品展示
需求分析:
用户登录成功后跳转到系统首页,在首页需要根据分类来展示菜品和套餐。如果菜品设置了口味信息,需要展示【选择规格按钮】,否则显示【+按钮】。
梳理交互过程:
页面发送ajax请求,请求分类数据(菜品分类和套餐分类)
页面发送ajax请求,获取第一个分类下的菜品或者套餐
注:首页加载完成后,还发送了一次ajax请求用于加载购物车数据。此处可以将这次请求的地址暂时修改一下,从静态json文件获取数据,等后续开发购物车功能时再修改回来。
/** * 根据type(菜品1或套餐2)查询对应的菜品分类 * @param category * @return */ @GetMapping("/list") public R<List<Category>> list(Category category){ //此方法也应用于移动端页面查询你显示所有菜品和套餐,category中都为null,因此查出来所有菜品分类返回 //条件构造器 LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<Category>(); //添加条件 queryWrapper.eq(category.getType()!=null, Category::getType, category.getType()); //添加排序条件 queryWrapper.orderByAsc(Category::getSort).orderByDesc(Category::getUpdateTime); //查询 List<Category> list = categoryService.list(queryWrapper); return R.success(list); }
/** * 根据categoryId条件查询对应的菜品数据 * @param dish * @return */ @GetMapping("/list") public R<List<Dish>> list(Dish dish){ Long categoryId = dish.getCategoryId(); //构造条件查询 LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(categoryId!=null, Dish::getCategoryId, categoryId); //添加排序条件 queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime); //查询status=1启售的菜品 queryWrapper.eq(Dish::getStatus, 1); List<Dish> dishes = dishService.list(queryWrapper); return R.success(dishes); }
但是这些数据都没有返回口味信息。
@GetMapping("/list") public R<List<DishDto>> list(Dish dish){ Long categoryId = dish.getCategoryId(); //构造条件查询 LambdaQueryWrapper<Dish> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(categoryId!=null, Dish::getCategoryId, categoryId); //添加排序条件 queryWrapper.orderByAsc(Dish::getSort).orderByDesc(Dish::getUpdateTime); //查询status=1启售的菜品 queryWrapper.eq(Dish::getStatus, 1); List<Dish> dishes = dishService.list(queryWrapper); //将菜品和对应口味信息封装到dishDto List<DishDto> dishDtos = null; dishDtos = dishes.stream().map((item) -> { DishDto dishDto = new DishDto(); BeanUtils.copyProperties(item, dishDto); //根据菜品id查询对应的口味 LambdaQueryWrapper<DishFlavor> lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(DishFlavor::getDishId, item.getId()); List<DishFlavor> flavors = dishFlavorService.list(lambdaQueryWrapper); dishDto.setFlavors(flavors); return dishDto; }).collect(Collectors.toList()); return R.success(dishDtos); }
/** *根据条件查询套餐数据 * @param setmeal * @return */ @GetMapping("/list") public R<List<Setmeal>> list(Setmeal setmeal){ Long categoryId = setmeal.getCategoryId(); LambdaQueryWrapper<Setmeal> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(categoryId!=null, Setmeal::getCategoryId, categoryId); queryWrapper.eq(setmeal.getStatus()!=null, Setmeal::getStatus, setmeal.getStatus()); queryWrapper.orderByDesc(Setmeal::getUpdateTime); List<Setmeal> setmeals = setmealService.list(queryWrapper); return R.success(setmeals); }
分类:
瑞吉外卖实战项目 / 移动端
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构