mirror of
https://gitee.com/blossom-editor/blossom.git
synced 2025-12-06 16:58:26 +08:00
feat: 阶段性事项列表增加各阶段任务数量显示
This commit is contained in:
parent
fa0d86e1d3
commit
042ec82489
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -55,6 +55,10 @@ public class TodoGroupRes {
|
||||
* 任务数量
|
||||
*/
|
||||
private Integer taskCount;
|
||||
/**
|
||||
* 任务数量说明
|
||||
*/
|
||||
private String taskCountStat;
|
||||
/**
|
||||
* 事项状态 1:完成 | 2:未完成
|
||||
*/
|
||||
|
||||
@ -47,11 +47,11 @@
|
||||
</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
|
||||
group by todo_id,todo_name,todo_type,todo_status,task_status
|
||||
order by id desc
|
||||
</select>
|
||||
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -54,6 +54,10 @@ export interface TodoList {
|
||||
* 任务数量
|
||||
*/
|
||||
taskCount: number
|
||||
/**
|
||||
* 任务数量统计
|
||||
*/
|
||||
taskCountStat: string
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user