A project management app derived from Mind-Vision-Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
3.3KB

  1. <section class="stack">
  2. <div class="layout-top">
  3. <div class="section-title">
  4. <span class="eyebrow">Portfolio view</span>
  5. <h1>Projects</h1>
  6. <p>Filter every project by status, workstream, and delivery risk.</p>
  7. </div>
  8. <div class="board-actions">
  9. <a class="button button-primary" href="/projects/create">Create project</a>
  10. <a class="button button-secondary" href="/activity">View activity</a>
  11. </div>
  12. </div>
  13. <div class="stats-grid">
  14. <div class="stat-card"><span class="meta-label">Projects</span><strong><?= e((string) $summary['project_count']) ?></strong></div>
  15. <div class="stat-card"><span class="meta-label">Open tasks</span><strong><?= e((string) $summary['open_tasks']) ?></strong></div>
  16. <div class="stat-card"><span class="meta-label">Overdue</span><strong><?= e((string) $summary['overdue_tasks']) ?></strong></div>
  17. </div>
  18. <form class="filter-bar" method="get" action="/projects">
  19. <label class="field">
  20. <span>Search</span>
  21. <input class="input" type="search" name="search" placeholder="Search name, client, or code" value="<?= e($search) ?>">
  22. </label>
  23. <label class="field">
  24. <span>Status</span>
  25. <select class="select" name="status">
  26. <option value="">All statuses</option>
  27. <?php foreach ($statusOptions as $option): ?>
  28. <option value="<?= e($option) ?>" <?= $status === $option ? 'selected' : '' ?>><?= e(project_status_label($option)) ?></option>
  29. <?php endforeach; ?>
  30. </select>
  31. </label>
  32. <div class="board-actions">
  33. <button class="button button-primary" type="submit">Apply filters</button>
  34. <a class="button button-ghost" href="/projects">Reset</a>
  35. </div>
  36. </form>
  37. <div class="card-grid">
  38. <?php foreach ($projects as $project): ?>
  39. <article class="project-card card" data-filter-item>
  40. <div class="project-top">
  41. <div>
  42. <span class="kicker"><?= e($project['code']) ?></span>
  43. <h3><a href="/projects/<?= e((string) $project['id']) ?>"><?= e($project['name']) ?></a></h3>
  44. </div>
  45. <span class="status-pill <?= e($project['health_class']) ?>"><?= e($project['status_label']) ?></span>
  46. </div>
  47. <p><?= e($project['description']) ?></p>
  48. <div class="progress"><span style="width: <?= e((string) $project['progress_percent']) ?>%"></span></div>
  49. <div class="project-bottom">
  50. <span class="mini-pill is-neutral"><?= e((string) $project['task_count']) ?> tasks</span>
  51. <span class="mini-pill is-blue"><?= e($project['task_traffic']) ?></span>
  52. <span class="mini-pill is-amber">Due <?= e($project['due_label']) ?></span>
  53. </div>
  54. <div class="project-bottom">
  55. <span class="mini-pill is-slate">Owner: <?= e($project['owner_name']) ?></span>
  56. <span class="mini-pill is-green"><?= e($project['budget_label']) ?></span>
  57. </div>
  58. </article>
  59. <?php endforeach; ?>
  60. </div>
  61. </section>

Powered by TurnKey Linux.