Jelajahi Sumber

Implement grid view for issues with toggle functionality and corresponding styles

steve07s 2 minggu lalu
induk
melakukan
2304cda4f9
3 mengubah file dengan 71 tambahan dan 6 penghapusan
  1. 2 2
      public/index.html
  2. 17 4
      public/script.js
  3. 52 0
      public/styles.css

+ 2 - 2
public/index.html

@@ -100,10 +100,10 @@
             <div class="issues-header">
                 <h2>問題列表</h2>
                 <div class="view-toggle">
-                    <button class="btn btn-sm active" onclick="toggleView('list')">
+                    <button class="btn btn-sm active" onclick="toggleView('list', this)">
                         <i class="fas fa-list"></i> 列表
                     </button>
-                    <button class="btn btn-sm" onclick="toggleView('grid')">
+                    <button class="btn btn-sm" onclick="toggleView('grid', this)">
                         <i class="fas fa-th"></i> 網格
                     </button>
                 </div>

+ 17 - 4
public/script.js

@@ -370,16 +370,29 @@ async function createProject() {
 }
 
 // 切換檢視模式
-function toggleView(view) {
+function toggleView(view, el) {
     currentView = view;
+
+    // 更新按鈕 active 樣式
     const buttons = document.querySelectorAll('.view-toggle .btn');
     buttons.forEach(btn => btn.classList.remove('active'));
-    event.target.classList.add('active');
-    
-    // 這裡可以添加切換到網格檢視的邏輯
+    el.classList.add('active');
+
+    // 切換容器樣式
+    const issuesList = document.getElementById('issuesList');
+    if (view === 'grid') {
+        issuesList.classList.remove('issues-list');
+        issuesList.classList.add('issues-grid');
+    } else {
+        issuesList.classList.remove('issues-grid');
+        issuesList.classList.add('issues-list');
+    }
+
     renderIssues();
 }
 
+
+
 // 顯示模態框
 function showModal(modalId) {
     const modal = document.getElementById(modalId);

+ 52 - 0
public/styles.css

@@ -237,6 +237,58 @@ body {
     font-size: 1.5rem;
 }
 
+/* ============================= */
+/* 網格檢視樣式 (issues-grid) */
+/* ============================= */
+
+.issues-grid {
+    display: grid;
+    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
+    gap: 20px;
+    padding: 20px;
+    background-color: #fafbfc;
+}
+
+.issues-grid .issue-item {
+    border: 1px solid #e1e5e9;
+    border-radius: 10px;
+    background: white;
+    padding: 20px;
+    box-shadow: 0 2px 6px rgba(0,0,0,0.05);
+    transition: all 0.3s ease;
+}
+
+.issues-grid .issue-item:hover {
+    transform: translateY(-4px);
+    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
+    background-color: #f9faff;
+}
+
+.issues-grid .issue-header {
+    flex-direction: column;
+    align-items: flex-start;
+    gap: 8px;
+}
+
+.issues-grid .issue-title {
+    font-size: 1rem;
+    font-weight: 600;
+    margin-bottom: 4px;
+}
+
+.issues-grid .issue-meta {
+    font-size: 13px;
+    color: #777;
+    gap: 8px;
+}
+
+.issues-grid .issue-description {
+    font-size: 13px;
+    color: #555;
+    margin-top: 10px;
+    line-height: 1.4;
+}
+
 .view-toggle {
     display: flex;
     gap: 5px;