分类管理模块
后台系统中可以管理分类信息,分类包括两种类型,分别是菜品分类和套餐分类。我们在后台系统中添加菜品需要选择一个菜品分类,当我们在后台系统添加一个套餐时需要选择一个套餐分类,在客户端也会按照菜品分类和套餐分类来展示对应的菜品和套餐。
在开发业务功能前,先将需要用到的类和接口基本结构创建完成
1.实体类Category
/**
* 分类
*/
@Data
public class Category implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
//类型 1 菜品分类 2 套餐分类
private Integer type;
//分类名称
private String name;
//顺序
private Integer sort;
//创建时间
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
//更新时间
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
//创建人
@TableField(fill = FieldFill.INSERT)
private Long createUser;
//修改人
@TableField(fill = FieldFill.INSERT_UPDATE)
private Long updateUser;
//是否删除
private Integer isDeleted;
}
2.Mapper接口
@Mapper
public interface CategoryMapper extends BaseMapper<Category> {
}
3.业务层接口
public interface CategoryService extends IService<Category> {
}
4.业务层实现类
Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
}
5.控制层
@Slf4j
@RestController
@RequestMapping("/category")
public class CategoryController {
@Autowired
private CategoryService categoryService;
}
新增分类
需求分析:
可以在后台系统的分类管理页面分别添加菜品分类和套餐分类
代码实现:
addClass(st) {
if (st == 'class') {
this.classData.title = '新增菜品分类'
this.type = '1'
} else {
this.classData.title = '新增套餐分类'
this.type = '2'
}
this.action = 'add'
this.classData.name = ''
this.classData.sort = ''
this.classData.dialogVisible = true
}
if (reg.test(classData.sort)) {
addCategory({'name': classData.name,'type':this.type, sort: classData.sort}).then(res => {
console.log(res)
if (res.code === 1) {
this.$message.success('分类添加成功!')
if (!st) {
this.classData.dialogVisible = false
} else {
this.classData.name = ''
this.classData.sort = ''
}
this.handleQuery()
} else {
this.$message.error(res.msg || '操作失败')
}
}).catch(err => {
this.$message.error('请求出错了:' + err)
})
}
// 新增接口
const addCategory = (params) => {
return $axios({
url: '/category',
method: 'post',
data: { ...params }
})
}
Controller:
/**
* 增加菜品及套餐分类
* @param request
* @param category
* @return
*/
@PostMapping()
public R<String> save(@RequestBody Category category) {
categoryService.save(category);
return R.success("添加成功");
}
分页查询
需求分析:
分页展示列表数据
代码实现:
async init () {
await getCategoryPage({'page': this.page, 'pageSize': this.pageSize}).then(res => {
if (String(res.code) === '1') {
this.tableData = res.data.records
this.counts = Number(res.data.total)
} else {
this.$message.error(res.msg || '操作失败')
}
}).catch(err => {
this.$message.error('请求出错了:' + err)
})
}
// 查询列表接口
const getCategoryPage = (params) => {
return $axios({
url: '/category/page',
method: 'get',
params
})
}
Controller:
/**
* 分页查询
* @param page
* @param pageSize
* @return
*/
@GetMapping("/page")
public R<Page> page(int page, int pageSize) {
log.info("page = {} pagesize={}", page, pageSize);
//分页构造器
Page<Category> pageinfo = new Page(page, pageSize);
//条件构造器
LambdaQueryWrapper<Category> queryWrapper = new LambdaQueryWrapper<>();
//根据sort升序排序
queryWrapper.orderByAsc(Category::getSort);
categoryService.page(pageinfo,queryWrapper);
return R.success(pageinfo);
}
修改模块
if (reg.test(this.classData.sort)) {
editCategory({'id':this.classData.id,'name': this.classData.name, sort: this.classData.sort}).then(res => {
if (res.code === 1) {
this.$message.success('分类修改成功!')
this.classData.dialogVisible = false
this.handleQuery()
} else {
this.$message.error(res.msg || '操作失败')
}
}).catch(err => {
this.$message.error('请求出错了:' + err)
})
} else {
this.$message.error('排序只能输入数字类型')
}
// 修改接口
const editCategory = (params) => {
return $axios({
url: '/category',
method: 'put',
data: { ...params }
})
}
/**
* 修改分类信息
* @param request
* @param category
* @return
*/
@PutMapping()
public R<String> edit(HttpServletRequest request,@RequestBody Category category) {
boolean b = categoryService.updateById(category);
if(b){
return R.success("修改成功");
}
return R.error("修改失败");
}