@extends('layouts.app') @section('title', ($project->name) . ' - 概覽(舊版)') @push('styles') @endpush @section('content') @php $currentRoute = 'projects.show'; $openIssues = \App\Models\Issue::where('project_id', $project->id) ->whereNotIn('status', ['completed','rejected'])->count(); $docCount = $project->docs()->where('type','doc')->count(); $memCount = $project->members->count(); $versionCount = $project->versions()->count(); $issueStats = \App\Models\Issue::where('project_id', $project->id) ->selectRaw('status, COUNT(*) as cnt')->groupBy('status')->pluck('cnt','status'); $totalIssues = $issueStats->sum(); $openCnt = $issueStats->only(['pending','in_progress','hold','watching'])->sum(); $doneCnt = $issueStats['completed'] ?? 0; $pct = $totalIssues > 0 ? round($doneCnt / $totalIssues * 100) : 0; $recentIssues = \App\Models\Issue::with('assignee') ->where('project_id', $project->id) ->whereNotIn('status', ['completed','rejected']) ->orderBy('updated_at','desc')->limit(10)->get(); $trackerCls = ['bug'=>'rm-tracker-bug','feature'=>'rm-tracker-feature','task'=>'rm-tracker-task','support'=>'rm-tracker-support']; $allTrackerOpts = \App\Models\IssueTracker::asOptions(); $allStatusOpts = \App\Models\IssueStatus::asOptions(); $allPriorityOpts = \App\Models\IssuePriority::asOptions(); $recentDocs = $project->docs()->where('type','doc')->latest()->limit(8)->get(); $viewMode = \App\Models\UserUiPreference::viewMode(); @endphp
{{-- 頂部:專案名稱 + 客戶 --}}

{{ $project->name }}

@if($project->client)
{{ $project->client->name }}
@endif
首頁 » 專案管理 » {{ $project->name }}
{{-- Tab 導覽 --}}
概覽 議題 @if($openIssues > 0){{ $openIssues }}@endif @can('viewRoadmap', $project) 合約@if($versionCount>0){{ $versionCount }}@endif @endcan @can('viewGitlab', $project) @if($project->gitlab_project_id) GitLab @endif @endcan @can('viewGantt', $project) 甘特圖 @endcan @can('viewCalendar', $project) 行事曆 @endcan @can('view', $project) 工時紀錄 @endcan @can('viewDocs', $project) 文件{!! $docCount > 0 ? ' '.$docCount.'' : '' !!} @endcan @can('viewMembers', $project) 成員{{ $memCount }} @endcan @can('update', $project) 設定 @endcan
{{-- 主內容 --}}
{{-- ── 左主欄 ── --}}
{{-- 專案資訊 --}} @php $contracts = $project->contracts()->orderBy('name')->get(); @endphp
專案資訊 @can('update', $project) 編輯 @endcan
系統名稱 {{ $project->name }}
@if($project->client)
客戶 {{ $project->client->name }}
@endif
類型 {{ $project->project_type ?? '—' }}
開始日期 {{ $project->start_date ?? '—' }}
結束日期 @if($project->end_date) @php $end = \Carbon\Carbon::parse($project->end_date); $days = \Carbon\Carbon::now()->diffInDays($end, false); @endphp {{ $project->end_date }} @if($days < 30 && $days >= 0) (剩 {{ (int)$days }} 天) @elseif($days < 0) (已到期) @endif @else — @endif
@if($project->dev_tool)
開發工具 {{ $project->dev_tool }}
@endif @if($contracts->isNotEmpty())
合約 {{ $contracts->pluck('name')->filter()->implode(' / ') }}
@endif
{{-- 合約清單 --}}
合約 ({{ $contracts->count() }}) @can('update', $project) 新增 @endcan
@can('update', $project)
新增合約
@csrf
NT$
@endcan @if($contracts->isEmpty())

尚無合約記錄。

@else
@can('update', $project)@endcan @foreach($contracts as $c) @can('update', $project) @endcan @can('update', $project) @endcan @endforeach
合約名稱 開始 結束 人天 金額操作
{{ $c->name }} @if($c->notes)
{{ $c->notes }}@endif
{{ $c->start_date?->format('Y-m-d') ?? '—' }} {{ $c->end_date?->format('Y-m-d') ?? '—' }} @if($c->end_date && $c->end_date->isPast()) 已到期 @elseif($c->end_date && $c->end_date->diffInDays(now()) <= 30) 剩 {{ (int) now()->diffInDays($c->end_date) }} 天 @endif {{ $c->estimated_man_days ? $c->estimated_man_days.' 天' : '—' }} {{ $c->contract_amount ? 'NT$ '.number_format($c->contract_amount) : '—' }}
@csrf @method('DELETE')
@csrf @method('PATCH')
NT$
@endif
{{-- 議題統計 --}}
議題統計 @can('view', $project) + 新增議題 @endcan
{{ $openCnt }}
進行中
{{ $doneCnt }}
已完成
{{ $totalIssues }}
總計
@if($totalIssues > 0)
完成率 {{ $pct }}%
@else
尚無議題
@endif
{{-- 進行中議題列表 --}} @if($recentIssues->isNotEmpty())
進行中議題(最近 10 筆) 全部 »
@foreach($recentIssues as $issue) @php $sData = $allStatusOpts[$issue->status] ?? null; $tData = $allTrackerOpts[$issue->tracker] ?? null; $pData = $allPriorityOpts[$issue->priority] ?? null; @endphp @endforeach
# 類型 狀態 標題 優先度 負責人 截止日 完成度
#{{ $issue->redmine_id }} {{ $tData['label'] ?? $issue->tracker }} {{ $sData['label'] ?? $issue->status }} {{ $issue->title }} {{ $pData['label'] ?? $issue->priority }} {{ $issue->assignee?->name ?? '—' }} {{ $issue->due_date?->format('Y-m-d') ?? '—' }} @if(($issue->done_ratio ?? 0) > 0)
{{ $issue->done_ratio }}% @else @endif
@endif {{-- 文件 --}} @if($docCount > 0)
@foreach($recentDocs as $doc)
{{ $doc->title }} {{ $doc->updated_at?->format('Y-m-d') }}
@endforeach
@endif
{{-- /rm-main --}} {{-- ── 右側欄 ── --}}
{{-- 成員 --}} @can('viewMembers', $project)
成員 ({{ $memCount }}) @can('update', $project) 管理 @endcan
    @foreach($project->members->take(15) as $m)
  • {{ $m->name }}
  • @endforeach @if($project->members->count() > 15)
  • ⋯ 另 {{ $project->members->count() - 15 }} 位
  • @endif
@endcan {{-- 附件 --}} @if($project->attachments->isNotEmpty())
附件 ({{ $project->attachments->count() }})
@can('update', $project)
@csrf
@endcan
@endif
{{-- /rm-aside --}}
{{-- /rm-body --}}
{{-- /rm-wrap --}} @push('scripts') @endpush @endsection