feat: 阶段性事项列表增加各阶段任务数量显示

This commit is contained in:
xiaozzzi 2024-01-20 22:29:05 +08:00
parent fa0d86e1d3
commit 042ec82489
6 changed files with 53 additions and 20 deletions

View File

@ -41,19 +41,34 @@ public class TodoService extends ServiceImpl<TodoMapper, TodoEntity> {
public TodoGroupRes listTodo() {
List<TodoEntity> todos = baseMapper.listTodo(AuthContext.getUserId());
TodoGroupRes res = TodoGroupRes.build();
for (TodoEntity todo : todos) {
TodoGroupRes.TodoGroup group = todo.to(TodoGroupRes.TodoGroup.class);
if (TodoTypeEnum.DAY.getType().equals(todo.getTodoType())) {
Map<String, List<TodoEntity>> map = todos.stream().collect(Collectors.groupingBy(TodoEntity::getTodoId));
map.forEach((todoId, data) -> {
TodoGroupRes.TodoGroup group = data.get(0).to(TodoGroupRes.TodoGroup.class);
Map<String, List<TodoEntity>> taskStatusMap = data.stream().collect(Collectors.groupingBy(TodoEntity::getTaskStatus));
int w = 0, p = 0, c = 0;
if (CollUtil.isNotEmpty(taskStatusMap.get(TaskStatusEnum.WAITING.name()))) {
w = taskStatusMap.get(TaskStatusEnum.WAITING.name()).get(0).getTaskCount();
}
if (CollUtil.isNotEmpty(taskStatusMap.get(TaskStatusEnum.PROCESSING.name()))) {
p = taskStatusMap.get(TaskStatusEnum.PROCESSING.name()).get(0).getTaskCount();
}
if (CollUtil.isNotEmpty(taskStatusMap.get(TaskStatusEnum.COMPLETED.name()))) {
c = taskStatusMap.get(TaskStatusEnum.COMPLETED.name()).get(0).getTaskCount();
}
group.setTaskCountStat(String.format("%d|%d|%d", w, p, c));
if (TodoTypeEnum.DAY.getType().equals(data.get(0).getTodoType())) {
res.getTodoDays().put(group.getTodoId(), group);
} else {
// 未完成的阶段性事项
if (TodoStatusEnum.OPEN.getType().equals(todo.getTodoStatus())) {
if (TodoStatusEnum.OPEN.getType().equals(data.get(0).getTodoStatus())) {
res.getTaskPhased().add(group);
} else {
res.getTaskPhasedClose().add(group);
}
}
}
});
return res;
}

View File

@ -55,6 +55,10 @@ public class TodoGroupRes {
* 任务数量
*/
private Integer taskCount;
/**
* 任务数量说明
*/
private String taskCountStat;
/**
* 事项状态 1:完成 | 2:未完成
*/

View File

@ -47,12 +47,12 @@
</select>
<select id="listTodo" resultType="com.blossom.backend.server.todo.pojo.TodoEntity">
select min(id) as id,todo_id,todo_name,todo_type,todo_status,
select min(id) as id,todo_id,todo_name,todo_type,todo_status,task_status,
count(*) as taskCount
from blossom_todo
where user_id = #{userId}
group by todo_id,todo_name,todo_type,todo_status
order by id desc
from blossom_todo
where user_id = #{userId}
group by todo_id,todo_name,todo_type,todo_status,task_status
order by id desc
</select>
<select id="selectByTodoId" resultType="com.blossom.backend.server.todo.pojo.TodoEntity">

View File

@ -7,7 +7,7 @@
<div class="task-collapse">
<el-collapse v-model="activeName" accordion>
<el-collapse-item title="每日待办事项" name="1" class="collapse-item">
<el-calendar ref="CalendarRef" class="task-day-calendar" v-model="selectDay">
<el-calendar ref="CalendarRef" class="task-day-calendar">
<template #header="{ date }">
<bl-row just="space-between" class="header" style="margin: 8px 10px">
<div class="month">{{ date.split(' ')[2] }}{{ date.split(' ')[3] }}</div>
@ -21,7 +21,7 @@
<template #date-cell="{ data }">
<div class="cell-wrapper" @click="toTask(data.day, data.day, 10)">
<div class="day">{{ data.day.split('-')[2] }}</div>
<div v-if="getCount(data.day) > 0">
<div v-if="getCount(data.day) != 0">
<bl-tag>{{ getCount(data.day) }}</bl-tag>
</div>
</div>
@ -35,13 +35,13 @@
<!-- update name -->
<el-input
v-if="phased.updTodoName"
:id="'phased-name-input-' + phased.todoId"
v-model="phased.todoName"
type="textarea"
:id="'phased-name-input-' + phased.todoId"
:rows="3"
@blur="blurPhasedUpdHandle(phased.todoId!)"></el-input>
<div v-else @dblclick="showPhasedUpdHandle(phased.todoId!)">{{ phased.todoName }}</div>
<bl-tag v-if="phased.taskCount > 0">{{ phased.taskCount }}</bl-tag>
<bl-tag>{{ phased.taskCountStat }}</bl-tag>
</div>
<!-- add phased -->
@ -49,6 +49,7 @@
v-if="showPhasedAdd"
ref="phasedAddInputRef"
v-model="phasedAddName"
@keyup.enter="blurPhasedAddHandle"
@blur="blurPhasedAddHandle"
style="margin-top: 10px"></el-input>
<div v-else class="task-phased-add" @click="showPhasedAddHandle">新增计划</div>
@ -58,7 +59,7 @@
<el-collapse-item title="阶段性事项 已完成" name="3">
<div v-for="phased in todoPhasedClose" class="task-phased" @click="toTask(phased.todoId, phased.todoName, phased.todoType)">
{{ phased.todoName }}
<bl-tag v-if="phased.taskCount > 0">{{ phased.taskCount }}</bl-tag>
<bl-tag>{{ phased.taskCountStat }}</bl-tag>
</div>
</el-collapse-item>
</el-collapse>
@ -101,8 +102,6 @@ useLifecycle(
)
//#region ----------------------------------------< >--------------------------------------
const selectDay = ref()
const CalendarRef = ref<CalendarInstance>()
const selectDate = (val: CalendarDateType) => {
if (!CalendarRef.value) return
@ -128,6 +127,7 @@ const getTodos = () => {
todoType: 10,
today: false,
taskCount: todo.taskCount > 0 ? todo.taskCount : 0,
taskCountStat: '0|0|0',
updTodoName: false
})
}
@ -136,9 +136,17 @@ const getTodos = () => {
})
}
/**
* @todo 日历每一项点击时由于内部数据变更, 都会触发查询
* @param day
*/
const getCount = (day: string): number => {
if (!todoDayMaps.value) return 0
if (!todoDayMaps.value.get(day)) return 0
if (!todoDayMaps.value) {
return 0
}
if (!todoDayMaps.value.has(day)) {
return 0
}
return todoDayMaps.value.get(day)!.taskCount
}
@ -316,6 +324,7 @@ const blurPhasedUpdHandle = (todoId: string) => {
.task-phased {
@include flex(row, flex-start, center);
@include font(13px, 300);
flex-wrap: wrap;
padding: 1px 3px;
border-radius: 4px;
color: var(--bl-text-color);
@ -327,6 +336,7 @@ const blurPhasedUpdHandle = (todoId: string) => {
&:first-child {
margin-top: 5px;
word-break: break-all;
}
&:last-child {

View File

@ -54,6 +54,10 @@ export interface TodoList {
*
*/
taskCount: number
/**
*
*/
taskCountStat: string
}
/**

View File

@ -169,10 +169,10 @@
border: 3px solid var(--el-color-primary);
.iconbl {
@include themeColor(#e4e4e4, #2c2c2c);
display: inherit;
margin-top: 40px;
font-size: 90px;
color: #e4e4e4;
}
}
}