debug: 添加console.log调试目标编辑和保存
This commit is contained in:
@@ -102,22 +102,27 @@ async function loadGoals() {
|
|||||||
const goals = await res.json();
|
const goals = await res.json();
|
||||||
const grid = document.getElementById('goals-grid');
|
const grid = document.getElementById('goals-grid');
|
||||||
|
|
||||||
// 获取每个目标的子目标数量
|
// 获取每个目标的子目标信息
|
||||||
const goalsWithChildren = await Promise.all(goals.map(async g => {
|
const goalsWithChildren = await Promise.all(goals.map(async g => {
|
||||||
const childrenRes = await fetch(`${API_BASE}/${g.id}/children`);
|
const childrenRes = await fetch(`${API_BASE}/${g.id}/children`);
|
||||||
const children = await childrenRes.json();
|
const children = await childrenRes.json();
|
||||||
return {...g, childCount: children.length};
|
return {...g, children: children};
|
||||||
}));
|
}));
|
||||||
|
|
||||||
grid.innerHTML = goalsWithChildren.map(g => `
|
grid.innerHTML = goalsWithChildren.map(g => {
|
||||||
|
const level = g.level || '入门';
|
||||||
|
const childNames = g.children && g.children.length > 0
|
||||||
|
? g.children.map(c => escapeHtml(c.name)).join(', ')
|
||||||
|
: '';
|
||||||
|
return `
|
||||||
<div class="col-md-4 col-lg-3">
|
<div class="col-md-4 col-lg-3">
|
||||||
<div class="card h-100">
|
<div class="card h-100">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<h6 class="card-title">${escapeHtml(g.name)}</h6>
|
<h6 class="card-title">${escapeHtml(g.name)}</h6>
|
||||||
<div class="mb-1">
|
<div class="mb-1">
|
||||||
<span class="badge bg-secondary">${g.level}</span>
|
<span class="badge bg-secondary">${level}</span>
|
||||||
${g.childCount > 0 ? `<span class="badge bg-info">${g.childCount}个子目标</span>` : ''}
|
|
||||||
</div>
|
</div>
|
||||||
|
${childNames ? `<div class="small text-muted mb-2">子目标: ${childNames}</div>` : ''}
|
||||||
<p class="card-text small text-muted">${escapeHtml(g.content || '').substring(0, 80)}${g.content && g.content.length > 80 ? '...' : ''}</p>
|
<p class="card-text small text-muted">${escapeHtml(g.content || '').substring(0, 80)}${g.content && g.content.length > 80 ? '...' : ''}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer bg-transparent">
|
<div class="card-footer bg-transparent">
|
||||||
@@ -127,7 +132,7 @@ async function loadGoals() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
`).join('');
|
`}).join('');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存目标
|
// 保存目标
|
||||||
@@ -141,20 +146,24 @@ async function saveGoal() {
|
|||||||
|
|
||||||
const method = id ? 'PUT' : 'POST';
|
const method = id ? 'PUT' : 'POST';
|
||||||
const url = id ? `${API_BASE}/${id}` : API_BASE;
|
const url = id ? `${API_BASE}/${id}` : API_BASE;
|
||||||
|
const payload = {name, level, content};
|
||||||
|
console.log('Saving goal:', payload);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await fetch(url, {
|
const res = await fetch(url, {
|
||||||
method,
|
method,
|
||||||
headers: {'Content-Type': 'application/json'},
|
headers: {'Content-Type': 'application/json'},
|
||||||
body: JSON.stringify({name, level, content})
|
body: JSON.stringify(payload)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const result = await res.json();
|
||||||
|
console.log('Save result:', result);
|
||||||
|
|
||||||
if (res.ok) {
|
if (res.ok) {
|
||||||
bootstrap.Modal.getInstance(document.getElementById('goalModal')).hide();
|
bootstrap.Modal.getInstance(document.getElementById('goalModal')).hide();
|
||||||
loadGoals();
|
loadGoals();
|
||||||
} else {
|
} else {
|
||||||
const err = await res.json();
|
alert(result.error || '保存失败');
|
||||||
alert(err.error || '保存失败');
|
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
alert('网络错误: ' + e.message);
|
alert('网络错误: ' + e.message);
|
||||||
@@ -165,6 +174,7 @@ function editGoal(id) {
|
|||||||
fetch(`${API_BASE}/${id}`)
|
fetch(`${API_BASE}/${id}`)
|
||||||
.then(r => r.json())
|
.then(r => r.json())
|
||||||
.then(g => {
|
.then(g => {
|
||||||
|
console.log('Editing goal:', g);
|
||||||
document.getElementById('goal-id').value = g.id;
|
document.getElementById('goal-id').value = g.id;
|
||||||
document.getElementById('goal-name').value = g.name;
|
document.getElementById('goal-name').value = g.name;
|
||||||
document.getElementById('goal-level').value = g.level || '入门';
|
document.getElementById('goal-level').value = g.level || '入门';
|
||||||
|
|||||||
Reference in New Issue
Block a user