fix: fix same name error
This commit is contained in:
parent
9872a9a5b0
commit
9f3b3bc63f
@ -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],
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user