Skip to content

Commit 6b84de5

Browse files
committed
修复bug测试
1 parent dde8701 commit 6b84de5

7 files changed

Lines changed: 258 additions & 29 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ CATEGORIES="cs.CV, cs.GR, cs.CL, cs.AI"
126126
- [ ] 功能:使用DeepSeek提取关键词。
127127
- [x] 更新Fork用户关于如何使用GitHub Pages的说明。
128128
- [x] 去除重复论文
129-
129+
- [ ] 修复日期范围无法选择无数据日期bug
130130
# 贡献者
131131

132132
感谢以下特别贡献者对此项目的贡献!!!

css/statistic.css

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,83 @@
319319
border-color: var(--accent-color);
320320
}
321321

322+
/* 无数据日期的样式 */
323+
.flatpickr-day.no-data {
324+
color: var(--text-tertiary);
325+
background-color: rgba(0, 0, 0, 0.05);
326+
position: relative;
327+
}
328+
329+
.flatpickr-day.no-data:hover {
330+
background-color: rgba(0, 0, 0, 0.1);
331+
border-color: var(--border-color);
332+
}
333+
334+
.flatpickr-day.no-data:before {
335+
content: '';
336+
position: absolute;
337+
top: 50%;
338+
left: 50%;
339+
transform: translate(-50%, -50%);
340+
width: 2px;
341+
height: 2px;
342+
background-color: var(--text-tertiary);
343+
border-radius: 50%;
344+
}
345+
346+
/* 日期选择器图例 */
347+
.date-picker-legend {
348+
display: flex;
349+
justify-content: center;
350+
gap: 20px;
351+
margin: 12px 0;
352+
padding: 8px 0;
353+
border-top: 1px solid var(--border-color);
354+
border-bottom: 1px solid var(--border-color);
355+
}
356+
357+
.legend-item {
358+
display: flex;
359+
align-items: center;
360+
gap: 6px;
361+
}
362+
363+
.legend-dot {
364+
width: 12px;
365+
height: 12px;
366+
border-radius: 50%;
367+
border: 1px solid var(--border-color);
368+
}
369+
370+
.legend-dot.has-data {
371+
background-color: var(--primary-color);
372+
border-color: var(--primary-color);
373+
}
374+
375+
.legend-dot.no-data {
376+
background-color: rgba(0, 0, 0, 0.05);
377+
border-color: var(--text-tertiary);
378+
position: relative;
379+
}
380+
381+
.legend-dot.no-data:before {
382+
content: '';
383+
position: absolute;
384+
top: 50%;
385+
left: 50%;
386+
transform: translate(-50%, -50%);
387+
width: 2px;
388+
height: 2px;
389+
background-color: var(--text-tertiary);
390+
border-radius: 50%;
391+
}
392+
393+
.legend-text {
394+
font-size: 12px;
395+
color: var(--text-secondary);
396+
font-weight: 500;
397+
}
398+
322399
.flatpickr-day.flatpickr-disabled {
323400
color: var(--text-tertiary);
324401
cursor: not-allowed;

css/styles.css

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,83 @@ main {
908908
border-color: var(--accent-color);
909909
}
910910

911+
/* 无数据日期的样式 */
912+
.flatpickr-day.no-data {
913+
color: var(--text-tertiary);
914+
background-color: rgba(0, 0, 0, 0.05);
915+
position: relative;
916+
}
917+
918+
.flatpickr-day.no-data:hover {
919+
background-color: rgba(0, 0, 0, 0.1);
920+
border-color: var(--border-color);
921+
}
922+
923+
.flatpickr-day.no-data:before {
924+
content: '';
925+
position: absolute;
926+
top: 50%;
927+
left: 50%;
928+
transform: translate(-50%, -50%);
929+
width: 2px;
930+
height: 2px;
931+
background-color: var(--text-tertiary);
932+
border-radius: 50%;
933+
}
934+
935+
/* 日期选择器图例 */
936+
.date-picker-legend {
937+
display: flex;
938+
justify-content: center;
939+
gap: 20px;
940+
margin: 12px 0;
941+
padding: 8px 0;
942+
border-top: 1px solid var(--border-color);
943+
border-bottom: 1px solid var(--border-color);
944+
}
945+
946+
.legend-item {
947+
display: flex;
948+
align-items: center;
949+
gap: 6px;
950+
}
951+
952+
.legend-dot {
953+
width: 12px;
954+
height: 12px;
955+
border-radius: 50%;
956+
border: 1px solid var(--border-color);
957+
}
958+
959+
.legend-dot.has-data {
960+
background-color: var(--primary-color);
961+
border-color: var(--primary-color);
962+
}
963+
964+
.legend-dot.no-data {
965+
background-color: rgba(0, 0, 0, 0.05);
966+
border-color: var(--text-tertiary);
967+
position: relative;
968+
}
969+
970+
.legend-dot.no-data:before {
971+
content: '';
972+
position: absolute;
973+
top: 50%;
974+
left: 50%;
975+
transform: translate(-50%, -50%);
976+
width: 2px;
977+
height: 2px;
978+
background-color: var(--text-tertiary);
979+
border-radius: 50%;
980+
}
981+
982+
.legend-text {
983+
font-size: 12px;
984+
color: var(--text-secondary);
985+
font-weight: 500;
986+
}
987+
911988
.date-range-selector {
912989
display: flex;
913990
align-items: center;

index.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ <h3 class="date-picker-title">选择日期</h3>
130130
<div class="flatpickr-container">
131131
<input type="text" id="datepicker" placeholder="选择日期" data-input>
132132
</div>
133+
<div class="date-picker-legend">
134+
<div class="legend-item">
135+
<span class="legend-dot has-data"></span>
136+
<span class="legend-text">有数据</span>
137+
</div>
138+
<div class="legend-item">
139+
<span class="legend-dot no-data"></span>
140+
<span class="legend-text">无数据</span>
141+
</div>
142+
</div>
133143
<div class="date-range-selector">
134144
<span class="toggle-label">日期范围</span>
135145
<label class="toggle-switch">

js/app.js

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,7 @@ function initDatePicker() {
393393
flatpickrInstance.destroy();
394394
}
395395

396-
// 创建可用日期的映射,用于禁用无效日期
396+
// 创建可用日期的映射,用于样式区分
397397
const enabledDatesMap = {};
398398
availableDates.forEach(date => {
399399
enabledDatesMap[date] = true;
@@ -419,15 +419,20 @@ function initDatePicker() {
419419
scrollTitle: '滚动切换',
420420
toggleTitle: '点击切换 12/24 小时时制'
421421
},
422-
enable: [
423-
function(date) {
424-
// 只启用有效日期
425-
const dateStr = date.getFullYear() + "-" +
426-
String(date.getMonth() + 1).padStart(2, '0') + "-" +
427-
String(date.getDate()).padStart(2, '0');
428-
return !!enabledDatesMap[dateStr];
422+
// 移除enable限制,允许选择任意日期
423+
onDayCreate: function(dObj, dStr, fp, dayElem) {
424+
const dateStr = dayElem.dateObj.getFullYear() + "-" +
425+
String(dayElem.dateObj.getMonth() + 1).padStart(2, '0') + "-" +
426+
String(dayElem.dateObj.getDate()).padStart(2, '0');
427+
428+
// 为没有数据的日期添加特殊样式
429+
if (!enabledDatesMap[dateStr]) {
430+
dayElem.classList.add('no-data');
431+
dayElem.title = '此日期无数据';
432+
} else {
433+
dayElem.title = '此日期有数据';
429434
}
430-
],
435+
},
431436
onChange: function(selectedDates, dateStr) {
432437
if (isRangeMode && selectedDates.length === 2) {
433438
// 处理日期范围选择
@@ -441,6 +446,9 @@ function initDatePicker() {
441446
if (availableDates.includes(selectedDate)) {
442447
loadPapersByDate(selectedDate);
443448
toggleDatePicker();
449+
} else {
450+
// 如果选择的日期没有数据,显示提示
451+
alert('所选日期没有数据,请选择其他日期。');
444452
}
445453
}
446454
}
@@ -976,22 +984,43 @@ async function loadPapersByDateRange(startDate, endDate) {
976984
return date >= startDate && date <= endDate;
977985
});
978986

987+
// 计算日期范围内的总天数
988+
const start = new Date(startDate);
989+
const end = new Date(endDate);
990+
const totalDays = Math.ceil((end - start) / (1000 * 60 * 60 * 24)) + 1;
991+
979992
if (validDatesInRange.length === 0) {
980-
alert('No available papers in the selected date range.');
993+
alert(`所选日期范围 (${formatDate(startDate)} - ${formatDate(endDate)}) 内没有可用数据。`);
981994
return;
982995
}
983996

984997
currentDate = `${startDate} to ${endDate}`;
985-
document.getElementById('currentDate').textContent = `${formatDate(startDate)} - ${formatDate(endDate)}`;
998+
const dateDisplayText = startDate === endDate ?
999+
formatDate(startDate) :
1000+
`${formatDate(startDate)} - ${formatDate(endDate)}`;
1001+
1002+
// 如果有缺失的日期,在显示中添加提示
1003+
let displayText = dateDisplayText;
1004+
if (validDatesInRange.length < totalDays && startDate !== endDate) {
1005+
displayText += ` (${validDatesInRange.length}/${totalDays} 天有数据)`;
1006+
}
1007+
1008+
document.getElementById('currentDate').textContent = displayText;
9861009

9871010
// 不再重置激活的关键词和作者
9881011
// 而是保持当前选择状态
9891012

9901013
const container = document.getElementById('paperContainer');
1014+
1015+
// 更详细的加载提示
1016+
const loadingMessage = validDatesInRange.length < totalDays ?
1017+
`Loading papers from ${formatDate(startDate)} to ${formatDate(endDate)}...<br><small>找到 ${validDatesInRange.length} 天的数据,共 ${totalDays} 天</small>` :
1018+
`Loading papers from ${formatDate(startDate)} to ${formatDate(endDate)}...`;
1019+
9911020
container.innerHTML = `
9921021
<div class="loading-container">
9931022
<div class="loading-spinner"></div>
994-
<p>Loading papers from ${formatDate(startDate)} to ${formatDate(endDate)}...</p>
1023+
<p>${loadingMessage}</p>
9951024
</div>
9961025
`;
9971026

@@ -1002,14 +1031,14 @@ async function loadPapersByDateRange(startDate, endDate) {
10021031
for (const date of validDatesInRange) {
10031032
const response = await fetch(`data/${date}_AI_enhanced_Chinese.jsonl`);
10041033
const text = await response.text();
1005-
const dataPapers = parseJsonlData(text, date);
1034+
const datePapers = parseJsonlData(text, date);
10061035

10071036
// 合并数据
1008-
Object.keys(dataPapers).forEach(category => {
1037+
Object.keys(datePapers).forEach(category => {
10091038
if (!allPaperData[category]) {
10101039
allPaperData[category] = [];
10111040
}
1012-
allPaperData[category] = allPaperData[category].concat(dataPapers[category]);
1041+
allPaperData[category] = allPaperData[category].concat(datePapers[category]);
10131042
});
10141043
}
10151044

js/statistic.js

Lines changed: 38 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ function initDatePicker() {
148148
flatpickrInstance.destroy();
149149
}
150150

151-
// 创建可用日期的映射,用于禁用无效日期
151+
// 创建可用日期的映射,用于样式区分
152152
const enabledDatesMap = {};
153153
availableDates.forEach(date => {
154154
enabledDatesMap[date] = true;
@@ -174,15 +174,20 @@ function initDatePicker() {
174174
scrollTitle: '滚动切换',
175175
toggleTitle: '点击切换 12/24 小时时制'
176176
},
177-
enable: [
178-
function(date) {
179-
// 只启用有效日期
180-
const dateStr = date.getFullYear() + "-" +
181-
String(date.getMonth() + 1).padStart(2, '0') + "-" +
182-
String(date.getDate()).padStart(2, '0');
183-
return !!enabledDatesMap[dateStr];
177+
// 移除enable限制,允许选择任意日期
178+
onDayCreate: function(dObj, dStr, fp, dayElem) {
179+
const dateStr = dayElem.dateObj.getFullYear() + "-" +
180+
String(dayElem.dateObj.getMonth() + 1).padStart(2, '0') + "-" +
181+
String(dayElem.dateObj.getDate()).padStart(2, '0');
182+
183+
// 为没有数据的日期添加特殊样式
184+
if (!enabledDatesMap[dateStr]) {
185+
dayElem.classList.add('no-data');
186+
dayElem.title = '此日期无数据';
187+
} else {
188+
dayElem.title = '此日期有数据';
184189
}
185-
],
190+
},
186191
onChange: function(selectedDates, dateStr) {
187192
if (isRangeMode && selectedDates.length === 2) {
188193
// 处理日期范围选择
@@ -196,6 +201,9 @@ function initDatePicker() {
196201
if (availableDates.includes(selectedDate)) {
197202
loadPapersByDateRange(selectedDate, selectedDate);
198203
toggleDatePicker();
204+
} else {
205+
// 如果选择的日期没有数据,显示提示
206+
alert('所选日期没有数据,请选择其他日期。');
199207
}
200208
}
201209
}
@@ -228,8 +236,13 @@ async function loadPapersByDateRange(startDate, endDate) {
228236
return date >= startDate && date <= endDate;
229237
});
230238

239+
// 计算日期范围内的总天数
240+
const start = new Date(startDate);
241+
const end = new Date(endDate);
242+
const totalDays = Math.ceil((end - start) / (1000 * 60 * 60 * 24)) + 1;
243+
231244
if (validDatesInRange.length === 0) {
232-
alert('No available papers in the selected date range.');
245+
alert(`所选日期范围 (${formatDate(startDate)} - ${formatDate(endDate)}) 内没有可用数据。`);
233246
return;
234247
}
235248

@@ -238,14 +251,27 @@ async function loadPapersByDateRange(startDate, endDate) {
238251
document.getElementById('currentDate').textContent = formatDate(startDate);
239252
} else {
240253
currentDate = `${startDate} - ${endDate}`;
241-
document.getElementById('currentDate').textContent = `${formatDate(startDate)} - ${formatDate(endDate)}`;
254+
let displayText = `${formatDate(startDate)} - ${formatDate(endDate)}`;
255+
256+
// 如果有缺失的日期,在显示中添加提示
257+
if (validDatesInRange.length < totalDays) {
258+
displayText += ` (${validDatesInRange.length}/${totalDays} 天有数据)`;
259+
}
260+
261+
document.getElementById('currentDate').textContent = displayText;
242262
}
243263

244264
const container = document.getElementById('papersList');
265+
266+
// 更详细的加载提示
267+
const loadingMessage = validDatesInRange.length < totalDays && startDate !== endDate ?
268+
`Loading papers from ${formatDate(startDate)} to ${formatDate(endDate)}...<br><small>找到 ${validDatesInRange.length} 天的数据,共 ${totalDays} 天</small>` :
269+
`Loading papers from ${formatDate(startDate)} to ${formatDate(endDate)}...`;
270+
245271
container.innerHTML = `
246272
<div class="loading-container">
247273
<div class="loading-spinner"></div>
248-
<p>Loading papers from ${formatDate(startDate)} to ${formatDate(endDate)}...</p>
274+
<p>${loadingMessage}</p>
249275
</div>
250276
`;
251277

0 commit comments

Comments
 (0)