From 9f3b3bc63fb5acbca6a7b0fb3182eaa1e5973034 Mon Sep 17 00:00:00 2001 From: sangge <2251250136@qq.com> Date: Sun, 8 Jun 2025 18:37:03 +0800 Subject: [PATCH] fix: fix same name error --- src-tauri/src/lib.rs | 69 ++++++++++++++++++++++++++++++++++++++------ src/DetailPage.tsx | 4 ++- src/HomePage.tsx | 3 +- 3 files changed, 65 insertions(+), 11 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index b4d64e5..a6ab06e 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -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, String> { @@ -60,16 +61,28 @@ async fn get_anniversaries(app_handle: tauri::AppHandle) -> Result { + 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], diff --git a/src/DetailPage.tsx b/src/DetailPage.tsx index c579078..159b010 100644 --- a/src/DetailPage.tsx +++ b/src/DetailPage.tsx @@ -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() {

{anniversary.title}

-
{anniversary.days}
+
{anniversary.days_display}
Start Date: {anniversary.start_date}
diff --git a/src/HomePage.tsx b/src/HomePage.tsx index 0f484c6..c3db230 100644 --- a/src/HomePage.tsx +++ b/src/HomePage.tsx @@ -8,6 +8,7 @@ interface Anniversary { title: string; start_date: string; days: number; + days_display: string; } function HomePage() { @@ -48,7 +49,7 @@ function HomePage() { >
{item.title}
- {item.days} + {item.days_display} {item.start_date}