index.html 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <!DOCTYPE html>
  2. <html lang="zh-TW">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>MAA測試問題追蹤系統</title>
  7. <link rel="stylesheet" href="styles.css">
  8. <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
  9. </head>
  10. <body>
  11. <div class="container">
  12. <!-- 標題列 -->
  13. <header class="header">
  14. <h1><i class="fas fa-bug"></i> MAA測試問題追蹤系統</h1>
  15. <div class="header-actions">
  16. <button class="btn btn-primary" onclick="showCreateIssueModal()">
  17. <i class="fas fa-plus"></i> 新增問題
  18. </button>
  19. <button class="btn btn-secondary" onclick="showCreateProjectModal()">
  20. <i class="fas fa-folder-plus"></i> 新增專案
  21. </button>
  22. </div>
  23. </header>
  24. <!-- 統計卡片 -->
  25. <div class="stats-grid">
  26. <div class="stat-card">
  27. <div class="stat-icon open">
  28. <i class="fas fa-exclamation-circle"></i>
  29. </div>
  30. <div class="stat-content">
  31. <h3 id="openCount">0</h3>
  32. <p>待處理問題</p>
  33. </div>
  34. </div>
  35. <div class="stat-card">
  36. <div class="stat-icon progress">
  37. <i class="fas fa-clock"></i>
  38. </div>
  39. <div class="stat-content">
  40. <h3 id="progressCount">0</h3>
  41. <p>處理中問題</p>
  42. </div>
  43. </div>
  44. <div class="stat-card">
  45. <div class="stat-icon closed">
  46. <i class="fas fa-check-circle"></i>
  47. </div>
  48. <div class="stat-content">
  49. <h3 id="closedCount">0</h3>
  50. <p>已完成問題</p>
  51. </div>
  52. </div>
  53. <div class="stat-card">
  54. <div class="stat-icon total">
  55. <i class="fas fa-list"></i>
  56. </div>
  57. <div class="stat-content">
  58. <h3 id="totalCount">0</h3>
  59. <p>總問題數</p>
  60. </div>
  61. </div>
  62. </div>
  63. <!-- 篩選器 -->
  64. <div class="filters">
  65. <div class="filter-group">
  66. <label for="projectFilter">專案:</label>
  67. <select id="projectFilter" onchange="loadIssues()">
  68. <option value="">全部專案</option>
  69. </select>
  70. </div>
  71. <div class="filter-group">
  72. <label for="statusFilter">狀態:</label>
  73. <select id="statusFilter" onchange="loadIssues()">
  74. <option value="">全部狀態</option>
  75. <option value="open">待處理</option>
  76. <option value="in_progress">處理中</option>
  77. <option value="closed">已完成</option>
  78. </select>
  79. </div>
  80. <div class="filter-group">
  81. <label for="priorityFilter">優先級:</label>
  82. <select id="priorityFilter" onchange="loadIssues()">
  83. <option value="">全部優先級</option>
  84. <option value="high">高</option>
  85. <option value="medium">中</option>
  86. <option value="low">低</option>
  87. </select>
  88. </div>
  89. <div class="filter-group">
  90. <button class="btn btn-outline" onclick="loadIssues()">
  91. <i class="fas fa-refresh"></i> 重新整理
  92. </button>
  93. </div>
  94. </div>
  95. <!-- 問題列表 -->
  96. <div class="issues-container">
  97. <div class="issues-header">
  98. <h2>問題列表</h2>
  99. <div class="view-toggle">
  100. <button class="btn btn-sm active" onclick="toggleView('list', this)">
  101. <i class="fas fa-list"></i> 列表
  102. </button>
  103. <button class="btn btn-sm" onclick="toggleView('grid', this)">
  104. <i class="fas fa-th"></i> 網格
  105. </button>
  106. </div>
  107. </div>
  108. <div id="issuesList" class="issues-list">
  109. <!-- 問題項目將在這裡動態載入 -->
  110. </div>
  111. <div id="loadingIndicator" class="loading" style="display: none;">
  112. <i class="fas fa-spinner fa-spin"></i> 載入中...
  113. </div>
  114. </div>
  115. <!-- 分頁 -->
  116. <div id="pagination" class="pagination">
  117. <!-- 分頁按鈕將在這裡動態生成 -->
  118. </div>
  119. </div>
  120. <!-- 新增問題模態框 -->
  121. <div id="createIssueModal" class="modal">
  122. <div class="modal-content">
  123. <div class="modal-header">
  124. <h3>新增問題</h3>
  125. <span class="close" onclick="closeModal('createIssueModal')">&times;</span>
  126. </div>
  127. <div class="modal-body">
  128. <form id="createIssueForm">
  129. <div class="form-group">
  130. <label for="issueTitle">標題 *</label>
  131. <input type="text" id="issueTitle" name="title" required>
  132. </div>
  133. <div class="form-group">
  134. <label for="issueProject">專案</label>
  135. <select id="issueProject" name="project_id">
  136. <option value="">選擇專案</option>
  137. </select>
  138. </div>
  139. <div class="form-group">
  140. <label for="issueDescription">描述</label>
  141. <textarea id="issueDescription" name="description" rows="4"></textarea>
  142. </div>
  143. <div class="form-row">
  144. <div class="form-group">
  145. <label for="issuePriority">優先級</label>
  146. <select id="issuePriority" name="priority">
  147. <option value="low">低</option>
  148. <option value="medium" selected>中</option>
  149. <option value="high">高</option>
  150. </select>
  151. </div>
  152. <div class="form-group">
  153. <label for="issueAssignee">指派給</label>
  154. <input type="text" id="issueAssignee" name="assignee" placeholder="指派給誰">
  155. </div>
  156. </div>
  157. <div class="form-group">
  158. <label for="issueReporter">回報者</label>
  159. <input type="text" id="issueReporter" name="reporter" placeholder="回報者姓名">
  160. </div>
  161. </form>
  162. </div>
  163. <div class="modal-footer">
  164. <button class="btn btn-secondary" onclick="closeModal('createIssueModal')">取消</button>
  165. <button class="btn btn-primary" onclick="createIssue()">建立問題</button>
  166. </div>
  167. </div>
  168. </div>
  169. <!-- 新增專案模態框 -->
  170. <div id="createProjectModal" class="modal">
  171. <div class="modal-content">
  172. <div class="modal-header">
  173. <h3>新增專案</h3>
  174. <span class="close" onclick="closeModal('createProjectModal')">&times;</span>
  175. </div>
  176. <div class="modal-body">
  177. <form id="createProjectForm">
  178. <div class="form-group">
  179. <label for="projectName">專案名稱 *</label>
  180. <input type="text" id="projectName" name="name" required>
  181. </div>
  182. <div class="form-group">
  183. <label for="projectDescription">描述</label>
  184. <textarea id="projectDescription" name="description" rows="3"></textarea>
  185. </div>
  186. <div class="form-group">
  187. <label for="projectStatus">狀態</label>
  188. <select id="projectStatus" name="status">
  189. <option value="active">啟用</option>
  190. <option value="inactive">停用</option>
  191. <option value="planning">規劃中</option>
  192. </select>
  193. </div>
  194. </form>
  195. </div>
  196. <div class="modal-footer">
  197. <button class="btn btn-secondary" onclick="closeModal('createProjectModal')">取消</button>
  198. <button class="btn btn-primary" onclick="createProject()">建立專案</button>
  199. </div>
  200. </div>
  201. </div>
  202. <!-- 問題詳情模態框 -->
  203. <div id="issueDetailModal" class="modal">
  204. <div class="modal-content large">
  205. <div class="modal-header">
  206. <h3 id="issueDetailTitle">問題詳情</h3>
  207. <span class="close" onclick="closeModal('issueDetailModal')">&times;</span>
  208. </div>
  209. <div class="modal-body">
  210. <div id="issueDetailContent">
  211. <!-- 問題詳情將在這裡動態載入 -->
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. <script src="script.js"></script>
  217. </body>
  218. </html>