1、待办分类实现

pull/254/head
xjs 3 years ago
parent b3db580bc8
commit 6fcebea344

@ -0,0 +1,37 @@
import request from '@/utils/request'
//添加待办分类
export function addTodoCategory(data) {
return request({
url: '/warning/todo/category/add',
method: 'post',
data: data
})
}
//查询所有待办分类
export function list() {
return request({
url: '/warning/todo/category/list',
method: 'get',
})
}
//删除待办分类
export function removeTodoCategory(id) {
return request({
url: `/warning/todo/category/remove/${id}`,
method: 'delete',
})
}
//修改待办分类
export function editTodoCategory(data) {
return request({
url: `/warning/todo/category/edit`,
method: 'put',
data: data
})
}

@ -0,0 +1,182 @@
<template>
<div class="app-container">
<at-card style="width: 100%;">
<h2 slot="title">待办分类</h2>
<div slot="extra">
<at-button icon="icon-user-plus" @click="openDialog"></at-button>
</div>
<div v-for="(data,index) in dataList"
style="width: 100%;height: 50px;border:1px solid #ffba00;margin-bottom: 10px;padding: 10px;border-radius: 6px">
<div style="float: left;font-size: 16px;font-weight: 800;margin-left: 20px;" :style="data.color">
{{ data.name }}
</div>
<div style="float: right">
<at-button-group>
<at-button @click="queryDialog(data)"></at-button>
<at-button type="error" hollow @click="removeTodoCategory(data.id)"></at-button>
</at-button-group>
</div>
</div>
</at-card>
<el-dialog
title="添加分类"
:visible.sync="dialogVisible"
@close="closeDialog"
width="20%"
>
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="80px">
<el-form-item label="分类名称" prop="name">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item label="分类排序" prop="sort">
<el-slider
v-model.number="form.sort"
show-input>
</el-slider>
</el-form-item>
<el-form-item label="分类颜色" prop="color">
<el-color-picker v-model="form.color"></el-color-picker>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" :loading=buttonLoading @click="submitForm('ruleForm')"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {addTodoCategory, editTodoCategory, list, removeTodoCategory} from "@/api/business/todo/todoCategory";
export default {
name: "TodoCategory",
data() {
return {
dialogVisible: false,
dataList: [],
form: {
name: '',
sort: 0,
color: ''
},
buttonLoading: false,
rules: {
name: [
{required: true, message: '请输入分类名称', trigger: 'blur'},
{min: 1, max: 5, message: '长度在 1 到 5 个字符', trigger: 'blur'}
],
sort: [
{required: true, message: '请输入分类排序', trigger: 'blur'},
],
color: [
{required: true, message: '请输入分类颜色', trigger: 'blur'},
],
}
}
},
created() {
this.list()
},
methods: {
//
openDialog() {
this.dialogVisible = true
this.form = {color: '#789456', sort: 0}
},
//
queryDialog(data) {
this.dialogVisible = true
this.form = data
//
if (this.form.color) {
let split = this.form.color.split(':');
let colorSplit = split[1].split("\"");
this.form.color = colorSplit[0]
}
},
list() {
list().then(res => {
this.dataList = res.data
//
this.dataList.forEach(data => {
data.color = "color:" + data.color + ""
})
})
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.buttonLoading = true
if (this.form) {
//
editTodoCategory(this.form).then(res => {
this.$Message.success('修改成功')
this.list()
this.buttonLoading = false
this.dialogVisible = false
}).catch(err => {
this.buttonLoading = false
this.$Message.error('修改失败')
});
} else {
//
addTodoCategory(this.form).then(res => {
this.$Message.success('添加成功')
this.list()
this.buttonLoading = false
this.dialogVisible = false
}).catch(err => {
this.buttonLoading = false
this.$Message.error('添加失败')
});
}
} else {
return false;
}
});
},
//
removeTodoCategory(id) {
removeTodoCategory(id).then(res => {
this.$Message.success('删除成功')
this.list()
})
},
//
closeDialog() {
this.list()
},
}
}
</script>
<style scoped>
</style>

@ -0,0 +1,13 @@
<template>
</template>
<script>
export default {
name: "TodoList"
}
</script>
<style scoped>
</style>

@ -0,0 +1,65 @@
package com.xjs.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.web.domain.AjaxResult;
import com.ruoyi.common.log.annotation.Log;
import com.ruoyi.common.log.enums.BusinessType;
import com.ruoyi.common.security.annotation.RequiresPermissions;
import com.xjs.domain.todo.TodoCategory;
import com.xjs.service.TodoCateGoryService;
import com.xjs.validation.group.AddGroup;
import com.xjs.validation.group.UpdateGroup;
import com.xjs.web.MyBaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
*
*
* @author xiejs
* @since 2022-04-28
*/
@RestController
@RequestMapping("todo")
@Api(tags = "业务模块-待办事项")
public class TodoController extends MyBaseController<TodoCategory> {
@Autowired
private TodoCateGoryService todoCateGoryService;
@PostMapping("category/add")
@ApiOperation("添加待办分类")
@RequiresPermissions("todo:category:add")
@Log(title = "添加待办分类", businessType = BusinessType.INSERT)
public AjaxResult addTodoCategory(@RequestBody @Validated(AddGroup.class) TodoCategory todoCategory) {
return toAjax(todoCateGoryService.save(todoCategory));
}
@GetMapping("category/list")
@ApiOperation("查询所有待办分类")
@RequiresPermissions("todo:category:list")
public AjaxResult listTodoCategory() {
LambdaQueryWrapper<TodoCategory> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByDesc(TodoCategory::getSort);
return AjaxResult.success(todoCateGoryService.list(wrapper));
}
@DeleteMapping("category/remove/{id}")
@ApiOperation("删除待办分类")
@RequiresPermissions("todo:category:remove")
@Log(title = "删除待办分类", businessType = BusinessType.DELETE)
public AjaxResult removeTodoCategory(@PathVariable String id) {
return toAjax(todoCateGoryService.removeById(id));
}
@PutMapping("category/edit")
@ApiOperation("修改待办分类")
@RequiresPermissions("todo:category:edit")
@Log(title = "修改待办分类", businessType = BusinessType.UPDATE)
public AjaxResult editTodoCategory(@RequestBody @Validated(UpdateGroup.class) TodoCategory todoCategory) {
return toAjax(todoCateGoryService.updateById(todoCategory));
}
}

@ -0,0 +1,58 @@
package com.xjs.domain.todo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.xjs.entity.BaseEntity;
import com.xjs.validation.group.AddGroup;
import com.xjs.validation.group.UpdateGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.Max;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.Date;
/**
*
*
* @author xiejs
* @since 2022-04-28
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class TodoCategory extends BaseEntity implements Serializable {
/**
* id
*/
private Long id;
/**
*
*/
@NotBlank(message = "分类名称不能为空", groups = {UpdateGroup.class, AddGroup.class})
@Size(max = 5, message = "请控制分类名称长度在 5 字符", groups = {UpdateGroup.class, AddGroup.class})
private String name;
/**
*
*/
@NotBlank(message = "颜色不能为空", groups = {UpdateGroup.class, AddGroup.class})
@Size(max = 10, message = "请控制分类名称长度在 10 字符", groups = {UpdateGroup.class, AddGroup.class})
private String color;
/**
*
*/
@NotNull(message = "排序不能为空", groups = {UpdateGroup.class, AddGroup.class})
@Max(value = 100, message = "排序范围在 0 - 100 ", groups = {UpdateGroup.class, AddGroup.class})
private Long sort;
/**
*
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
}

@ -0,0 +1,12 @@
package com.xjs.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.xjs.domain.todo.TodoCategory;
/**
* mapper
* @author xiejs
* @since 2022-04-28
*/
public interface TodoCategoryMapper extends BaseMapper<TodoCategory> {
}

@ -0,0 +1,14 @@
package com.xjs.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xjs.domain.todo.TodoCategory;
/**
* service
* @author xiejs
* @since 2022-04-28
*/
public interface TodoCateGoryService extends IService<TodoCategory> {
}

@ -0,0 +1,63 @@
package com.xjs.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjs.domain.todo.TodoCategory;
import com.xjs.exception.BusinessException;
import com.xjs.mapper.TodoCategoryMapper;
import com.xjs.service.TodoCateGoryService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* service
*
* @author xiejs
* @since 2022-04-28
*/
@Service
public class TodoCateGoryServiceImpl extends ServiceImpl<TodoCategoryMapper, TodoCategory> implements TodoCateGoryService {
@Override
@Transactional
public boolean save(TodoCategory entity) {
this.hasExist(entity);
return super.save(entity);
}
@Override
@Transactional
public boolean updateById(TodoCategory entity) {
//顺序不能乱
boolean b = super.updateById(entity);
this.hasExist(entity);
return b;
}
/**
*
*
* @param entity
*/
private void hasExist(TodoCategory entity) {
LambdaQueryWrapper<TodoCategory> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(TodoCategory::getName, entity.getName());
List<TodoCategory> categoryList = super.list(wrapper);
//根据id判断是添加还是修改
if (entity.getId() != null) {
if (CollUtil.isNotEmpty(categoryList) && categoryList.size() > 1) {
throw new BusinessException("已存在" + entity.getName());
}
} else {
if (CollUtil.isNotEmpty(categoryList)) {
throw new BusinessException("已存在" + entity.getName());
}
}
}
}
Loading…
Cancel
Save