diff --git a/app/Http/Controllers/Api/ProjectController.php b/app/Http/Controllers/Api/ProjectController.php
index e86f62010..da340f6b8 100755
--- a/app/Http/Controllers/Api/ProjectController.php
+++ b/app/Http/Controllers/Api/ProjectController.php
@@ -1014,7 +1014,7 @@ class ProjectController extends AbstractController
if (Carbon::parse($time[1])->timestamp - Carbon::parse($time[0])->timestamp > 90 * 86400) {
return Base::retError('时间范围限制最大90天');
}
-
+ $type = Request::input('type','taskTime');
$headings = [];
$headings[] = '任务ID';
$headings[] = '父级任务ID';
@@ -1037,7 +1037,7 @@ class ProjectController extends AbstractController
->join('project_task_users', 'project_tasks.id', '=', 'project_task_users.task_id')
->where('project_task_users.owner', 1)
->whereIn('project_task_users.userid', $userid)
- ->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay());
+ ->betweenTime(Carbon::parse($time[0])->startOfDay(), Carbon::parse($time[1])->endOfDay(),$type);
$builder->orderByDesc('project_tasks.id')->chunk(100, function($tasks) use (&$datas) {
/** @var ProjectTask $task */
foreach ($tasks as $task) {
@@ -1078,12 +1078,11 @@ class ProjectController extends AbstractController
$firstDevTime = Carbon::parse($firstChange->created_at)->timestamp - Carbon::parse($task->created_at)->timestamp;
$developTime += $firstDevTime;
}
- if (count($flowChanges) === 0) {
+ if (count($flowChanges) === 0 && $task->start_at) {
$lastTime = $task->complete_at ? Carbon::parse($task->complete_at)->timestamp : time();
- $developTime = $lastTime - Carbon::parse($task->created_at)->timestamp;
+ $developTime = $lastTime - Carbon::parse($task->start_at)->timestamp;
}
$totalTime = $developTime + $testTime; //任务总用时
-
if ($task->complete_at) {
$a = Carbon::parse($task->complete_at)->timestamp;
if ($task->start_at) {
@@ -1112,10 +1111,10 @@ class ProjectController extends AbstractController
$task->end_at ?: '-',
$task->complete_at ?: '-',
$task->archived_at ?: '-',
- $planTime,
- $totalTime > 0 ? Base::timeFormat($totalTime) : '-',
+ $planTime ?: '-',
+ $totalTime ? Base::timeFormat($totalTime) : '-',
$overTime,
- $developTime > 0 ? Base::timeFormat($developTime) : '-',
+ $developTime > 0? Base::timeFormat($developTime) : '-',
$testTime > 0 ? Base::timeFormat($testTime) : '-',
Base::filterEmoji(User::userid2nickname($task->ownerid)) . " (ID: {$task->ownerid})",
Base::filterEmoji(User::userid2nickname($task->userid)) . " (ID: {$task->userid})",
diff --git a/app/Models/ProjectTask.php b/app/Models/ProjectTask.php
index 2be90a51a..998d4fea8 100644
--- a/app/Models/ProjectTask.php
+++ b/app/Models/ProjectTask.php
@@ -314,18 +314,29 @@ class ProjectTask extends AbstractModel
* @param $query
* @param $start
* @param $end
+ * @param $type
* @return mixed
*/
- public function scopeBetweenTime($query, $start, $end)
+ public function scopeBetweenTime($query, $start, $end, $type)
{
- $query->where(function ($q1) use ($start, $end) {
- $q1->where(function ($q2) use ($start) {
- $q2->where('project_tasks.start_at', '<=', $start)->where('project_tasks.end_at', '>=', $start);
- })->orWhere(function ($q2) use ($end) {
- $q2->where('project_tasks.start_at', '<=', $end)->where('project_tasks.end_at', '>=', $end);
- })->orWhere(function ($q2) use ($start, $end) {
- $q2->where('project_tasks.start_at', '>', $start)->where('project_tasks.end_at', '<', $end);
- });
+ $query->where(function ($q1) use ($start, $end, $type) {
+ if ($type === 'taskTime') {
+ $q1->where(function ($q2) use ($start) {
+ $q2->where('project_tasks.start_at', '<=', $start)->where('project_tasks.end_at', '>=', $start);
+ })->orWhere(function ($q2) use ($end) {
+ $q2->where('project_tasks.start_at', '<=', $end)->where('project_tasks.end_at', '>=', $end);
+ })->orWhere(function ($q2) use ($start, $end) {
+ $q2->where('project_tasks.start_at', '>', $start)->where('project_tasks.end_at', '<', $end);
+ });
+ } else {
+ $q1->where(function ($q2) use ($start) {
+ $q2->where('project_tasks.created_at', '>=', $start);
+ })->orWhere(function ($q2) use ($end) {
+ $q2->where('project_tasks.created_at', '<=', $end);
+ })->orWhere(function ($q2) use ($start, $end) {
+ $q2->where('project_tasks.created_at', '>', $start)->where('project_tasks.created_at', '<', $end);
+ });
+ }
});
return $query;
}
diff --git a/app/Module/Base.php b/app/Module/Base.php
index d251a0bae..338b94fe5 100755
--- a/app/Module/Base.php
+++ b/app/Module/Base.php
@@ -1723,9 +1723,9 @@ class Base
$hours = (int)($time / 3600);
$time = $time % 3600; // 计算小时后剩余的毫秒数
}
- $minutes = (int)($time / 60); // 剩下的毫秒数都算作分
+ $minutes = ceil($time / 60); // 剩下的毫秒数都算作分
$daysStr = $days > 0 ? $days . '天' : '';
- $hoursStr = ($hours > 0 || $minutes > 0) ? $hours . '时' : '';
+ $hoursStr = ($hours > 0 || ($days > 0 && $minutes > 0)) ? $hours . '时' : '';
$minuteStr = ($minutes > 0) ? $minutes . '分' : '';
return $daysStr . $hoursStr . $minuteStr;
}
@@ -1747,9 +1747,9 @@ class Base
$hours = (int)($time / 3600);
$time = $time % 3600; // 计算小时后剩余的毫秒数
}
- $minutes = (int)($time / 60); // 剩下的毫秒数都算作分
+ $minutes = ceil($time / 60); // 剩下的毫秒数都算作分
$daysStr = $days > 0 ? $days . '天' : '';
- $hoursStr = ($hours > 0 || $minutes > 0) ? $hours . '时' : '';
+ $hoursStr = ($hours > 0 || ($days > 0 && $minutes > 0)) ? $hours . '时' : '';
$minuteStr = ($minutes > 0) ? $minutes . '分' : '';
return $daysStr . $hoursStr . $minuteStr;
}
diff --git a/resources/assets/js/pages/manage.vue b/resources/assets/js/pages/manage.vue
index ae51c158d..9aa804ccc 100644
--- a/resources/assets/js/pages/manage.vue
+++ b/resources/assets/js/pages/manage.vue
@@ -249,6 +249,12 @@
style="width:100%"
:placeholder="$L('请选择时间')"/>
+