Update ashboard, dashboard, memory +1 more (+2 ~3)

This commit is contained in:
Echo
2026-02-02 22:27:24 +00:00
parent 4f00131184
commit b0c9b254f1
65 changed files with 42112 additions and 53 deletions

View File

@@ -687,6 +687,11 @@
border-color: var(--accent);
}
.issue-checkbox.in-progress {
background: rgba(59, 130, 246, 0.3);
border-color: #3b82f6;
}
.issue-checkbox svg {
width: 12px;
height: 12px;
@@ -698,6 +703,14 @@
display: block;
}
.issue-checkbox.in-progress::after {
content: '';
width: 8px;
height: 8px;
border-radius: 50%;
background: #3b82f6;
}
.issue-content {
flex: 1;
min-width: 0;
@@ -738,6 +751,27 @@
.issue-owner.marius { color: #22c55e; }
.issue-owner.robert { color: #f59e0b; }
.issue-status {
padding: 2px 8px;
border-radius: var(--radius-sm);
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.3px;
}
.issue-status.todo {
background: rgba(156, 163, 175, 0.2);
color: #9ca3af;
}
.issue-status.in-progress {
background: rgba(59, 130, 246, 0.2);
color: #3b82f6;
}
.issue-status.done {
background: rgba(34, 197, 94, 0.2);
color: #22c55e;
}
/* Todo's Panel */
.todos-panel { border-left: 3px solid #8b5cf6; }
.todo-section { margin-bottom: 16px; }
@@ -1266,10 +1300,21 @@
<option value="backlog">⚪ Backlog</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Status</label>
<select class="input" id="issueStatus">
<option value="todo">Todo</option>
<option value="in-progress">In Progress</option>
<option value="done">Done</option>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label class="form-label">Deadline</label>
<input type="date" class="input" id="issueDeadline">
</div>
<div class="form-group"></div>
</div>
<div class="modal-actions">
<button class="btn btn-danger" id="issueDeleteBtn" onclick="deleteIssue()" style="margin-right: auto; display: none;">Șterge</button>
@@ -2129,7 +2174,6 @@
<div class="priority-group">
<div class="priority-header ${isCollapsed ? 'collapsed' : ''}" onclick="togglePriority('${priority}')">
<i data-lucide="chevron-down"></i>
<span class="priority-dot ${priority}"></span>
<span>${priorityLabels[priority]}</span>
<span style="margin-left: auto; opacity: 0.7">${todoCount}/${issues.length}</span>
</div>
@@ -2146,18 +2190,23 @@
function renderIssueItem(issue) {
const isDone = issue.status === 'done';
const isInProgress = issue.status === 'in-progress';
const ownerIcons = { 'clawdbot': '🤖', 'robert': '👷', 'marius': '👤' };
const ownerIcon = ownerIcons[issue.owner] || '👤';
const dateStr = new Date(issue.created).toLocaleDateString('ro-RO', { day: 'numeric', month: 'short' });
const statusLabels = { 'todo': 'Todo', 'in-progress': 'In Progress', 'done': 'Done' };
const statusLabel = statusLabels[issue.status] || 'Todo';
const checkboxClass = isDone ? 'checked' : (isInProgress ? 'in-progress' : '');
return `
<div class="issue-item ${isDone ? 'done' : ''}" data-id="${issue.id}">
<div class="issue-checkbox ${isDone ? 'checked' : ''}" onclick="toggleIssue('${issue.id}')">
<div class="issue-checkbox ${checkboxClass}" onclick="toggleIssue('${issue.id}')" title="Click pentru a schimba statusul">
<i data-lucide="check"></i>
</div>
<div class="issue-content" onclick="editIssue('${issue.id}')">
<div class="issue-title">${issue.title}</div>
<div class="issue-meta">
<span class="issue-status ${issue.status || 'todo'}">${statusLabel}</span>
${issue.program ? `<span class="issue-tag program">${issue.program}</span>` : ''}
<span class="issue-owner ${issue.owner}">${ownerIcon} ${issue.owner === 'clawdbot' ? 'Clawdbot' : (issue.owner === 'robert' ? 'Robert' : 'Marius')}</span>
<span class="issue-date">${dateStr}</span>
@@ -2180,17 +2229,27 @@
const issue = issuesData.issues.find(i => i.id === id);
if (!issue) return;
issue.status = issue.status === 'done' ? 'todo' : 'done';
// Cycle: todo → in-progress → done → todo
const statusCycle = { 'todo': 'in-progress', 'in-progress': 'done', 'done': 'todo' };
const currentStatus = issue.status || 'todo';
issue.status = statusCycle[currentStatus] || 'in-progress';
if (issue.status === 'done') {
issue.completed = new Date().toISOString();
} else {
delete issue.completed;
}
const statusMessages = {
'in-progress': '🔄 In Progress',
'done': '✅ Done!',
'todo': '📋 Todo'
};
renderIssues();
updateIssuesCount();
await saveIssues();
showToast(issue.status === 'done' ? 'Issue finalizat! ✓' : 'Issue redeschis');
showToast(statusMessages[issue.status]);
}
// Filters
@@ -2212,6 +2271,7 @@
document.getElementById('issueProgram').value = '';
document.getElementById('issueOwner').value = 'marius';
document.getElementById('issuePriority').value = 'urgent-important';
document.getElementById('issueStatus').value = 'todo';
document.getElementById('issueDeadline').value = '';
document.getElementById('issueDeleteBtn').style.display = 'none';
document.getElementById('issueSaveBtn').textContent = 'Adaugă';
@@ -2230,6 +2290,7 @@
document.getElementById('issueProgram').value = issue.program || '';
document.getElementById('issueOwner').value = issue.owner || 'marius';
document.getElementById('issuePriority').value = issue.priority || 'backlog';
document.getElementById('issueStatus').value = issue.status || 'todo';
document.getElementById('issueDeadline').value = issue.deadline || '';
document.getElementById('issueDeleteBtn').style.display = 'block';
document.getElementById('issueSaveBtn').textContent = 'Salvează';
@@ -2272,6 +2333,13 @@
issue.program = document.getElementById('issueProgram').value;
issue.owner = document.getElementById('issueOwner').value;
issue.priority = document.getElementById('issuePriority').value;
const newStatus = document.getElementById('issueStatus').value;
if (newStatus === 'done' && issue.status !== 'done') {
issue.completed = new Date().toISOString();
} else if (newStatus !== 'done') {
delete issue.completed;
}
issue.status = newStatus;
issue.deadline = document.getElementById('issueDeadline').value || null;
issue.updated = new Date().toISOString();
}
@@ -2285,7 +2353,7 @@
program: document.getElementById('issueProgram').value,
owner: document.getElementById('issueOwner').value,
priority: document.getElementById('issuePriority').value,
status: 'todo',
status: document.getElementById('issueStatus').value || 'todo',
created: new Date().toISOString(),
deadline: document.getElementById('issueDeadline').value || null
};

View File

@@ -1,5 +1,5 @@
{
"lastUpdated": "2026-02-02T11:25:18.119Z",
"lastUpdated": "2026-02-02T22:27:06.452Z",
"programs": [
"ROACONT",
"ROAGEST",
@@ -23,7 +23,8 @@
"priority": "urgent-important",
"status": "todo",
"created": "2026-02-02T11:25:18.115Z",
"deadline": "2026-02-02"
"deadline": "2026-02-02",
"updated": "2026-02-02T22:27:06.428Z"
},
{
"id": "ROA-001",
@@ -31,10 +32,11 @@
"description": "RD 49 = în urma inspecției fiscale\nRD 50 = impozit precedent\nFormularul nu recalculează impozitul de 16%\nRD 40 se modifică și la 4.1",
"program": "ROACONT",
"owner": "marius",
"priority": "urgent-important",
"priority": "important",
"status": "todo",
"created": "2026-01-30T15:10:00Z",
"deadline": null
"deadline": "2026-02-06",
"updated": "2026-02-02T22:26:59.690Z"
}
]
}