diff --git a/app.py b/app.py new file mode 100644 index 0000000..aba1ced --- /dev/null +++ b/app.py @@ -0,0 +1,136 @@ +from flask import Flask, render_template, request, redirect, url_for, flash +from datetime import datetime +import json +import os + +app = Flask(__name__) +app.secret_key = 'your_secret_key_here' + +# 备忘录数据文件路径 +DATA_FILE = 'memos.json' + +# 初始化数据文件 +if not os.path.exists(DATA_FILE): + with open(DATA_FILE, 'w') as f: + json.dump([], f) + +# 加载备忘录数据 +def load_memos(): + with open(DATA_FILE, 'r') as f: + return json.load(f) + +# 保存备忘录数据 +def save_memos(memos): + with open(DATA_FILE, 'w') as f: + json.dump(memos, f, indent=4, default=str) + +# 首页:显示备忘录列表 +@app.route('/') +def index(): + memos = load_memos() + # 按优先级排序,P0 > P1 > P2 + priority_order = {'P0': 0, 'P1': 1, 'P2': 2} + memos.sort(key=lambda x: priority_order[x['priority']]) + + # 分组:未完成和已完成 + unfinished_memos = [memo for memo in memos if not memo['completed']] + finished_memos = [memo for memo in memos if memo['completed']] + + return render_template('index.html', unfinished_memos=unfinished_memos, finished_memos=finished_memos) + +# 添加备忘录 +@app.route('/add', methods=['GET', 'POST']) +def add_memo(): + if request.method == 'POST': + title = request.form['title'].strip() + details = request.form['details'].strip() + due_date = request.form['due_date'].strip() + priority = request.form['priority'].strip() + + if not title or not due_date: + flash('标题和预计完成时间不能为空') + return redirect(url_for('add_memo')) + + # 创建新备忘录 + new_memo = { + 'id': len(load_memos()) + 1, + 'title': title, + 'details': details, + 'created_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), + 'due_date': due_date, + 'priority': priority, + 'completed': False + } + + # 保存到文件 + memos = load_memos() + memos.append(new_memo) + save_memos(memos) + + flash('备忘录添加成功') + return redirect(url_for('index')) + + return render_template('add.html') + +# 查看备忘录详情 +@app.route('/memo/') +def view_memo(memo_id): + memos = load_memos() + memo = next((m for m in memos if m['id'] == memo_id), None) + if not memo: + flash('备忘录不存在') + return redirect(url_for('index')) + return render_template('view.html', memo=memo) + +# 编辑备忘录 +@app.route('/edit/', methods=['GET', 'POST']) +def edit_memo(memo_id): + memos = load_memos() + memo = next((m for m in memos if m['id'] == memo_id), None) + if not memo: + flash('备忘录不存在') + return redirect(url_for('index')) + + if request.method == 'POST': + title = request.form['title'].strip() + details = request.form['details'].strip() + due_date = request.form['due_date'].strip() + priority = request.form['priority'].strip() + + if not title or not due_date: + flash('标题和预计完成时间不能为空') + return redirect(url_for('edit_memo', memo_id=memo_id)) + + # 更新备忘录 + memo['title'] = title + memo['details'] = details + memo['due_date'] = due_date + memo['priority'] = priority + + save_memos(memos) + flash('备忘录更新成功') + return redirect(url_for('view_memo', memo_id=memo_id)) + + return render_template('edit.html', memo=memo) + +# 删除备忘录 +@app.route('/delete/') +def delete_memo(memo_id): + memos = load_memos() + memos = [m for m in memos if m['id'] != memo_id] + save_memos(memos) + flash('备忘录删除成功') + return redirect(url_for('index')) + +# 标记备忘录完成/未完成 +@app.route('/toggle/') +def toggle_completed(memo_id): + memos = load_memos() + memo = next((m for m in memos if m['id'] == memo_id), None) + if memo: + memo['completed'] = not memo['completed'] + save_memos(memos) + return redirect(url_for('index')) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/memos.json b/memos.json new file mode 100644 index 0000000..36d69a8 --- /dev/null +++ b/memos.json @@ -0,0 +1,29 @@ +[ + { + "id": 3, + "title": "see", + "details": "dsds", + "created_time": "2025-11-29 10:15:11", + "due_date": "2025-11-29T10:15", + "priority": "P1", + "completed": false + }, + { + "id": 4, + "title": "dsdsd", + "details": "dsds", + "created_time": "2025-11-29 10:15:26", + "due_date": "2025-11-29T10:15", + "priority": "P1", + "completed": false + }, + { + "id": 5, + "title": "dsdsds", + "details": "111121212", + "created_time": "2025-11-29 10:18:44", + "due_date": "2025-11-08T10:18", + "priority": "P0", + "completed": false + } +] \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..597ce19 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Flask==2.3.3 diff --git a/templates/add.html b/templates/add.html new file mode 100644 index 0000000..461a049 --- /dev/null +++ b/templates/add.html @@ -0,0 +1,33 @@ +{% extends 'base.html' %} + +{% block content %} +
+

添加新备忘录

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + 取消 +
+
+
+{% endblock %} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..142d277 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,210 @@ + + + + + + 备忘录 + + + +
+
+

📝 备忘录

+ + 添加备忘录 +
+ + {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} +
+ {% for category, message in messages %} +
{{ message }}
+ {% endfor %} +
+ {% endif %} + {% endwith %} + + {% block content %}{% endblock %} +
+ + diff --git a/templates/edit.html b/templates/edit.html new file mode 100644 index 0000000..d7b3b31 --- /dev/null +++ b/templates/edit.html @@ -0,0 +1,35 @@ +{% extends 'base.html' %} + +{% block content %} +
+

编辑备忘录

+
+
+ + +
+
+ + +
+
+ + + +
+
+ + +
+
+ + 取消 +
+
+
+{% endblock %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..aab8f3c --- /dev/null +++ b/templates/index.html @@ -0,0 +1,81 @@ +{% extends 'base.html' %} + +{% block content %} +
+ +
+

⏳ 未完成备忘录

+ {% if unfinished_memos %} + {% for memo in unfinished_memos %} +
+
+ + {{ memo.title }} + + + {{ memo.priority }} + +
+
+ 预计完成时间: {{ memo.due_date }} +
+
+ 创建时间: {{ memo.created_time }} +
+ +
+ {% endfor %} + {% else %} +

暂无未完成备忘录

+ {% endif %} +
+ + +
+

✅ 已完成备忘录

+ {% if finished_memos %} + {% for memo in finished_memos %} +
+
+ + {{ memo.title }} + + + {{ memo.priority }} + +
+
+ 预计完成时间: {{ memo.due_date }} +
+
+ 创建时间: {{ memo.created_time }} +
+ +
+ {% endfor %} + {% else %} +

暂无已完成备忘录

+ {% endif %} +
+
+{% endblock %} diff --git a/templates/view.html b/templates/view.html new file mode 100644 index 0000000..d9328c8 --- /dev/null +++ b/templates/view.html @@ -0,0 +1,34 @@ +{% extends 'base.html' %} + +{% block content %} +
+

{{ memo.title }}

+
+ {{ memo.priority }} + {% if memo.completed %} + ✅ 已完成 + {% else %} + ⏳ 未完成 + {% endif %} +
+
+ 创建时间: {{ memo.created_time }} +
+
+ 预计完成时间: {{ memo.due_date }} +
+
+

{{ memo.details if memo.details else '暂无详情' }}

+
+
+ {% if not memo.completed %} + ✅ 标记完成 + {% else %} + ⏳ 标记未完成 + {% endif %} + ✏️ 编辑 + 🗑️ 删除 + 返回列表 +
+
+{% endblock %}