diff --git a/app/Http/Controllers/Api/ReportController.php b/app/Http/Controllers/Api/ReportController.php index 4b3b623c3..02509a213 100755 --- a/app/Http/Controllers/Api/ReportController.php +++ b/app/Http/Controllers/Api/ReportController.php @@ -259,6 +259,7 @@ class ReportController extends AbstractController $offset = abs(intval(Request::input("offset", 0))); $id = intval(Request::input("offset", 0)); $now_dt = trim(Request::input("date")) ? Carbon::parse(Request::input("date")) : Carbon::now(); + // 获取开始时间 if ($type === Report::DAILY) { $start_time = Carbon::today(); @@ -280,9 +281,11 @@ class ReportController extends AbstractController $start_time->startOfWeek(); $end_time = Carbon::instance($start_time)->endOfWeek(); } + // 生成唯一标识 $sign = Report::generateSign($type, 0, Carbon::instance($start_time)); $one = Report::whereSign($sign)->whereType($type)->first(); + // 如果已经提交了相关汇报 if ($one && $id > 0) { return Base::retSuccess('success', [ @@ -293,8 +296,16 @@ class ReportController extends AbstractController ]); } + // 表格头部 + $labels = [ + Doo::translate('项目'), + Doo::translate('任务'), + Doo::translate('负责人'), + Doo::translate('备注'), + ]; + // 已完成的任务 - $completeContent = ""; + $completeDatas = []; $complete_task = ProjectTask::query() ->whereNotNull("complete_at") ->whereBetween("complete_at", [$start_time->toDateTimeString(), $end_time->toDateTimeString()]) @@ -306,15 +317,18 @@ class ReportController extends AbstractController if ($complete_task->isNotEmpty()) { foreach ($complete_task as $task) { $complete_at = Carbon::parse($task->complete_at); - $pre = $type == Report::WEEKLY ? ('[' . Doo::translate('周' . ['日', '一', '二', '三', '四', '五', '六'][$complete_at->dayOfWeek]) . '] ') : ''; - $completeContent .= "
  • {$pre}[{$task->project->name}] {$task->name}
  • "; + $remark = $type == Report::WEEKLY ? ('
    [' . Doo::translate('周' . ['日', '一', '二', '三', '四', '五', '六'][$complete_at->dayOfWeek]) . ']
    ') : ' '; + $completeDatas[] = [ + $task->project->name, + $task->name, + '-', // todo 负责人 + $remark, + ]; } - } else { - $completeContent = '
  •  
  • '; } // 未完成的任务 - $unfinishedContent = ""; + $unfinishedDatas = []; $unfinished_task = ProjectTask::query() ->join("projects", "projects.id", "=", "project_tasks.project_id") ->whereNull("projects.archived_at") @@ -330,12 +344,18 @@ class ReportController extends AbstractController if ($unfinished_task->isNotEmpty()) { foreach ($unfinished_task as $task) { empty($task->end_at) || $end_at = Carbon::parse($task->end_at); - $pre = (!empty($end_at) && $end_at->lt($now_dt)) ? '[' . Doo::translate('超期') . '] ' : ''; - $unfinishedContent .= "
  • {$pre}[{$task->project->name}] {$task->name}
  • "; + $remark = (!empty($end_at) && $end_at->lt($now_dt)) ? '
    [' . Doo::translate('超期') . ']
    ' : ' '; + $unfinishedDatas[] = [ + $task->project->name, + $task->name, + $task->taskUser->where("owner", 1)->map(function ($item) { + return User::userid2nickname($item->userid); + })->implode(", "), + $remark, + ]; } - } else { - $unfinishedContent = '
  •  
  • '; } + // 生成标题 if ($type === Report::WEEKLY) { $title = $user->nickname . "的周报[" . $start_time->format("m/d") . "-" . $end_time->format("m/d") . "]"; @@ -343,22 +363,44 @@ class ReportController extends AbstractController } else { $title = $user->nickname . "的日报[" . $start_time->format("Y/m/d") . "]"; } + // 生成内容 - $content = '

    ' . Doo::translate('已完成工作') . '

      ' . - $completeContent . '

    ' . - Doo::translate('未完成的工作') . '

      ' . - $unfinishedContent . '
    '; + $contents = []; + $contents[] = '

    ' . Doo::translate('已完成工作') . '

    '; + $contents[] = view('report', [ + 'labels' => $labels, + 'datas' => $completeDatas, + ])->render(); + + $contents[] = '

     

    '; + $contents[] = '

    ' . Doo::translate('未完成的工作') . '

    '; + $contents[] = view('report', [ + 'labels' => $labels, + 'datas' => $unfinishedDatas, + ])->render(); + if ($type === Report::WEEKLY) { - $content .= "

    " . Doo::translate("下周拟定计划") . "[" . $start_time->addWeek()->format("m/d") . "-" . $end_time->addWeek()->format("m/d") . "]

    1.  
    "; + $contents[] = '

     

    '; + $contents[] = "

    " . Doo::translate("下周拟定计划") . "[" . $start_time->addWeek()->format("m/d") . "-" . $end_time->addWeek()->format("m/d") . "]

    "; + $contents[] = view('report', [ + 'labels' => [ + Doo::translate('计划描述'), + Doo::translate('计划时间'), + Doo::translate('负责人'), + ], + 'datas' => [], + ])->render(); } + $data = [ "time" => $start_time->toDateTimeString(), "sign" => $sign, "title" => $title, - "content" => $content, + "content" => implode("", $contents), "complete_task" => $complete_task, "unfinished_task" => $unfinished_task, ]; + if ($one) { $data['id'] = $one->id; } diff --git a/resources/assets/sass/components/report.scss b/resources/assets/sass/components/report.scss index 1cab3f942..7626bbb79 100644 --- a/resources/assets/sass/components/report.scss +++ b/resources/assets/sass/components/report.scss @@ -118,9 +118,36 @@ width: 100%; h2 { + font-size: 20px; margin-bottom: 10px; } + table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + + th, td { + line-height: 20px; + padding: 10px; + border: 1px solid #e8e8e8; + } + + th { + background: #f8f8f8; + padding: 10px 16px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + text-align: center; + } + + td { + background: #fff; + text-align: left; + } + } + ol { margin-bottom: 20px; padding-left: 18px; diff --git a/resources/views/report.blade.php b/resources/views/report.blade.php new file mode 100755 index 000000000..c09206879 --- /dev/null +++ b/resources/views/report.blade.php @@ -0,0 +1,25 @@ + + + + @foreach($labels as $label) + + @endforeach + + + + @forelse($datas as $data) + + @foreach($data as $item) + + @endforeach + + @empty + + @foreach($labels as $label) + + @endforeach + + @endforelse + +
    {{ $label }}
    {!! $item !!}
     
    +