fix: fix same name error

This commit is contained in:
sangge 2025-06-08 18:37:03 +08:00
parent 9872a9a5b0
commit 9f3b3bc63f
3 changed files with 65 additions and 11 deletions

View File

@ -37,6 +37,7 @@ struct Anniversary {
title: String,
start_date: String,
days: i64,
days_display: String,
}
#[tauri::command]
async fn get_anniversaries(app_handle: tauri::AppHandle) -> Result<Vec<Anniversary>, String> {
@ -60,16 +61,28 @@ async fn get_anniversaries(app_handle: tauri::AppHandle) -> Result<Vec<Anniversa
let title: String = row.get(1)?;
let start_date: String = row.get(2)?;
// 计算天数
let start = NaiveDate::parse_from_str(&start_date, "%Y-%m-%d")
.map_err(|e| rusqlite::Error::InvalidParameterName(e.to_string()))?;
let days = (today - start).num_days();
// 计算天数,跳过无效日期
let (days, days_display) = match NaiveDate::parse_from_str(&start_date, "%Y-%m-%d") {
Ok(start) => {
let diff = (today - start).num_days();
let display = if diff < 0 {
format!("还有{}", -diff)
} else if diff == 0 {
"今天".to_string()
} else {
format!("{}天前", diff)
};
(diff, display)
},
Err(_) => (0, "无效日期".to_string()), // 如果日期格式无效
};
Ok(Anniversary {
id,
title,
start_date,
days,
days_display,
})
})
.map_err(|e| e.to_string())?;
@ -101,16 +114,28 @@ async fn get_anniversary_by_id(
let title: String = row.get(0)?;
let start_date: String = row.get(1)?;
// 计算天数
let start = NaiveDate::parse_from_str(&start_date, "%Y-%m-%d")
.map_err(|e| rusqlite::Error::InvalidParameterName(e.to_string()))?;
let days = (today - start).num_days();
// 计算天数,跳过无效日期
let (days, days_display) = match NaiveDate::parse_from_str(&start_date, "%Y-%m-%d") {
Ok(start) => {
let diff = (today - start).num_days();
let display = if diff < 0 {
format!("还有{}", -diff)
} else if diff == 0 {
"今天".to_string()
} else {
format!("{}天前", diff)
};
(diff, display)
},
Err(_) => (0, "无效日期".to_string()), // 如果日期格式无效
};
Ok(Anniversary {
id,
title,
start_date,
days,
days_display,
})
})
.map_err(|e| e.to_string())?;
@ -139,13 +164,39 @@ async fn add_anniversary(
title: String,
start_date: String,
) -> Result<(), String> {
// 主页添加
// 输入验证
if title.trim().is_empty() {
return Err("标题不能为空".to_string());
}
if start_date.trim().is_empty() {
return Err("日期不能为空".to_string());
}
// 验证日期格式
NaiveDate::parse_from_str(&start_date, "%Y-%m-%d")
.map_err(|_| "日期格式无效,请使用 YYYY-MM-DD 格式".to_string())?;
let app_dir = app_handle
.path()
.app_data_dir()
.map_err(|e| e.to_string())?;
let db_path = app_dir.join("anniversaries.db");
let conn = Connection::open(db_path).map_err(|e| e.to_string())?;
// 检查重复
let mut stmt = conn
.prepare("SELECT COUNT(*) FROM anniversaries WHERE title = ? AND start_date = ?")
.map_err(|e| e.to_string())?;
let count: i64 = stmt
.query_row([&title, &start_date], |row| row.get(0))
.map_err(|e| e.to_string())?;
if count > 0 {
return Err("相同的纪念日已存在".to_string());
}
conn.execute(
"INSERT INTO anniversaries (title, start_date) VALUES (?1, ?2)",
[&title, &start_date],

View File

@ -8,6 +8,7 @@ interface Anniversary {
title: string;
start_date: string;
days: number;
days_display: string;
}
function DetailPage() {
@ -18,6 +19,7 @@ function DetailPage() {
title: "",
start_date: "",
days: 0,
days_display: "",
});
useEffect(() => {
@ -56,7 +58,7 @@ function DetailPage() {
</div>
<div className="card">
<h1 className="title">{anniversary.title}</h1>
<div className="days">{anniversary.days}</div>
<div className="days">{anniversary.days_display}</div>
<div className="start-date">Start Date: {anniversary.start_date}</div>
</div>
</div>

View File

@ -8,6 +8,7 @@ interface Anniversary {
title: string;
start_date: string;
days: number;
days_display: string;
}
function HomePage() {
@ -48,7 +49,7 @@ function HomePage() {
>
<div className="anniversary-title">{item.title}</div>
<div className="anniversary-info">
<span className="days-count">{item.days}</span>
<span className="days-count">{item.days_display}</span>
<span className="start-date">{item.start_date}</span>
</div>
</div>