177 lines
4.9 KiB
JavaScript
177 lines
4.9 KiB
JavaScript
const { getDBConnection } = require('./file-utils');
|
||
|
||
// 获取所有待办事项
|
||
function getTodos() {
|
||
try {
|
||
const db = getDBConnection(true);
|
||
|
||
// 创建todos表(如果不存在)
|
||
db.prepare(`
|
||
CREATE TABLE IF NOT EXISTS todos (
|
||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
project TEXT NOT NULL DEFAULT '其它',
|
||
subproject TEXT NOT NULL DEFAULT '其它',
|
||
title TEXT NOT NULL,
|
||
text TEXT,
|
||
adduser TEXT NOT NULL,
|
||
exeuser TEXT,
|
||
completed BOOLEAN DEFAULT 0,
|
||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
sche_time DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||
complete_time DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
)
|
||
`).run();
|
||
|
||
const todos = db.prepare('SELECT * FROM todos ORDER BY created_at DESC').all();
|
||
|
||
return todos;
|
||
} catch (error) {
|
||
console.error('获取待办事项失败:', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
// 添加待办事项
|
||
function addTodo(todoData) {
|
||
try {
|
||
if (!todoData.title) {
|
||
throw new Error('待办事项标题不能为空');
|
||
}
|
||
|
||
const db = getDBConnection();
|
||
|
||
// 获取当前本地时间
|
||
const now = new Date();
|
||
const year = now.getFullYear();
|
||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||
const day = String(now.getDate()).padStart(2, '0');
|
||
const hours = String(now.getHours()).padStart(2, '0');
|
||
const minutes = String(now.getMinutes()).padStart(2, '0');
|
||
const seconds = String(now.getSeconds()).padStart(2, '0');
|
||
const localDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||
|
||
// 处理计划时间
|
||
let scheTime = todoData.sche_time;
|
||
if (scheTime) {
|
||
// 如果sche_time是datetime-local格式(YYYY-MM-DDTHH:mm),转换为数据库格式
|
||
if (scheTime.includes('T')) {
|
||
const [datePart, timePart] = scheTime.split('T');
|
||
scheTime = `${datePart} ${timePart}:00`;
|
||
}
|
||
} else {
|
||
scheTime = localDateTime;
|
||
}
|
||
|
||
const result = db.prepare(`
|
||
INSERT INTO todos (
|
||
project, subproject, title, text, adduser,
|
||
exeuser, completed, created_at, sche_time
|
||
) VALUES (?, ?, ?, ?, ?, ?, 0, ?, ?)
|
||
`).run(
|
||
todoData.project || '其它',
|
||
todoData.subproject || '其它',
|
||
todoData.title,
|
||
todoData.text || '',
|
||
todoData.adduser || '系统',
|
||
todoData.exeuser || null,
|
||
localDateTime,
|
||
scheTime
|
||
);
|
||
|
||
if (result.changes > 0) {
|
||
return {
|
||
success: true,
|
||
id: result.lastInsertRowid,
|
||
message: '待办事项添加成功'
|
||
};
|
||
} else {
|
||
throw new Error('待办事项添加失败');
|
||
}
|
||
} catch (error) {
|
||
console.error('添加待办事项失败:', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
// 更新待办事项状态
|
||
function updateTodoStatus(id, completed, exeuser, title, text, sche_time) {
|
||
try {
|
||
const db = getDBConnection();
|
||
|
||
// 获取当前本地时间
|
||
const now = new Date();
|
||
const year = now.getFullYear();
|
||
const month = String(now.getMonth() + 1).padStart(2, '0');
|
||
const day = String(now.getDate()).padStart(2, '0');
|
||
const hours = String(now.getHours()).padStart(2, '0');
|
||
const minutes = String(now.getMinutes()).padStart(2, '0');
|
||
const seconds = String(now.getSeconds()).padStart(2, '0');
|
||
const localDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
||
|
||
// 处理计划时间
|
||
let scheTime = sche_time;
|
||
if (scheTime) {
|
||
// 如果sche_time是datetime-local格式(YYYY-MM-DDTHH:mm),转换为数据库格式
|
||
if (scheTime.includes('T')) {
|
||
const [datePart, timePart] = scheTime.split('T');
|
||
scheTime = `${datePart} ${timePart}`;
|
||
}
|
||
}
|
||
|
||
const result = db.prepare(`
|
||
UPDATE todos
|
||
SET completed = ?,
|
||
exeuser = ?,
|
||
title = ?,
|
||
text = ?,
|
||
sche_time = ?,
|
||
complete_time = CASE WHEN ? = 1 THEN ? ELSE complete_time END
|
||
WHERE id = ?
|
||
`).run(
|
||
completed ? 1 : 0,
|
||
exeuser || null,
|
||
title,
|
||
text || '',
|
||
scheTime || null,
|
||
completed ? 1 : 0,
|
||
completed ? localDateTime : null,
|
||
id
|
||
);
|
||
|
||
if (result.changes > 0) {
|
||
return {
|
||
success: true,
|
||
message: '待办事项更新成功'
|
||
};
|
||
} else {
|
||
throw new Error('待办事项不存在');
|
||
}
|
||
} catch (error) {
|
||
console.error('更新待办事项失败:', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
// 删除待办事项
|
||
function deleteTodo(id) {
|
||
try {
|
||
const db = getDBConnection();
|
||
|
||
const result = db.prepare('DELETE FROM todos WHERE id = ?').run(id);
|
||
|
||
return {
|
||
success: true,
|
||
message: result.changes > 0 ? '待办事项删除成功' : '待办事项不存在或已被删除'
|
||
};
|
||
} catch (error) {
|
||
console.error('删除待办事项失败:', error);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
module.exports = {
|
||
getTodos,
|
||
addTodo,
|
||
updateTodoStatus,
|
||
deleteTodo
|
||
};
|