Compare commits

...

4 Commits

Author SHA1 Message Date
31f2d8b428 fix: 搜索功能修复 - debounce函数定义顺序
- debounce函数在使用前必须先定义
- 之前定义在代码末尾,导致搜索事件绑定失败
- 现移到代码开头,确保正确执行
2026-04-16 13:40:44 +08:00
5d6dd10dfa docs: 更新版本历史 v2.3.1 2026-04-16 12:20:51 +08:00
d0f7b07260 fix: 日期放到标题后面,不增加卡片高度
- 日期紧跟标题后面,同一行显示
- 格式更紧凑:04-16 11:09 →04-16 12:00
- 字体10px,透明度0.5,不影响阅读
2026-04-16 12:20:32 +08:00
0be768ca8e docs: 更新版本历史 v2.3.0 2026-04-16 12:17:24 +08:00
2 changed files with 22 additions and 11 deletions

View File

@@ -141,6 +141,14 @@ xian-favor/
## 版本历史
- **v2.3.1** (2026-04-16): 日期放到标题后面,不增加卡片高度
- 日期紧跟标题,同一行显示
- 格式紧凑:`04-16 11:09→04-16 12:00`
- **v2.3.0** (2026-04-16): 卡片显示创建和更新日期
- 每个收藏卡片底部显示日期
- 格式04-16 11:09月-日 时:分)
- 有更新时显示:创建 → 更新
- 字体更小更淡,不影响卡片高度
- **v2.2.0** (2026-04-16): 快捷添加按钮,一键选择类型
- 顶部按钮栏分离为4个快捷添加按钮文本、链接、待办、专栏
- 点击直接进入对应类型的添加弹窗

View File

@@ -1090,6 +1090,17 @@ INDEX_TEMPLATE = '''
<script>
const API_BASE = '/api';
let currentFilter = { type: '', status: '' };
let currentPage = 1;
const pageSize = 20;
// 工具函数 - 必须先定义
function debounce(fn, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
// 初始化
document.addEventListener('DOMContentLoaded', async () => {
@@ -1179,14 +1190,14 @@ function renderItems(items) {
<h6 class="card-title text-truncate mb-1 ${item.type === 'todo' && item.status === 'completed' ? 'text-muted' : ''}">
${getTypeIcon(item.type)} ${item.title || truncate(item.content || item.url, 30)}
${item.type === 'todo' && item.status === 'completed' ? '' : ''}
<span style="font-size:10px; opacity:0.5; margin-left:8px;">
${formatShortDate(item.created_at)}${item.updated_at && item.updated_at !== item.created_at ? '' + formatShortDate(item.updated_at) : ''}
</span>
</h6>
<p class="card-text text-muted small mb-0 text-truncate" style="font-size:12px;">
${item.url ? truncate(item.url, 50) : item.content ? truncate(item.content, 50) : item.note ? truncate(item.note, 50) : ''}
${item.type === 'todo' ? `${getStatusLabelShort(item.status)} ${getPriorityLabelShort(item.priority)} ${item.due_date ? '📅' + formatDueDate(item.due_date) : ''}` : ''}
</p>
<p class="text-muted mb-0" style="font-size:10px; opacity:0.6;">
${formatShortDate(item.created_at)}${item.updated_at && item.updated_at !== item.created_at ? '' + formatShortDate(item.updated_at) : ''}
</p>
</div>
<div class="d-flex align-items-center gap-1 flex-wrap ms-2" onclick="event.stopPropagation();">
${item.tags.slice(0, 2).map(t => `<span class="badge bg-secondary" style="font-size:10px;">${t}</span>`).join('')}
@@ -2196,14 +2207,6 @@ async function sendItemEmail() {
}
}
function debounce(fn, delay) {
let timer;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => fn.apply(this, args), delay);
};
}
// ============ 提醒功能 ============
let reminderData = null;