From 4c33cc1afb5922ed87484eebbf3bc6c1b5ff1515 Mon Sep 17 00:00:00 2001 From: lxb <1580622474@qq.com> Date: Tue, 16 Dec 2025 23:27:50 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E6=94=B9=E4=BF=9D=E6=8C=81?= =?UTF-8?q?=E8=B7=9F=E8=BF=9B=E3=80=81=E6=90=81=E7=BD=AE=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=B8=8B=E6=88=AA=E6=AD=A2=E6=97=A5=E6=9C=9F=E7=9A=84=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=95=88=E6=9E=9C=20-=20=E4=BF=AE=E6=94=B9=E7=BB=BC?= =?UTF-8?q?=E5=90=88=E4=BC=98=E5=85=88=E7=BA=A7=E7=9A=84=E8=A7=84=E5=88=99?= =?UTF-8?q?=EF=BC=88=E6=9D=83=E9=87=8D=E8=B0=83=E6=95=B4=E3=80=81=E2=80=9C?= =?UTF-8?q?=E4=BF=9D=E6=8C=81=E8=B7=9F=E8=BF=9B=E2=80=9D=E5=92=8C=E2=80=9C?= =?UTF-8?q?=E6=90=81=E7=BD=AE=E2=80=9D=E4=B8=8D=E5=8F=97=E6=88=AA=E6=AD=A2?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E5=BD=B1=E5=93=8D=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/app.py b/app.py index 76aad61..6de0ff8 100644 --- a/app.py +++ b/app.py @@ -13,7 +13,7 @@ from tkcalendar import Calendar # ----------------------- CONFIG ----------------------- # region 配置 -VERSION = "v1.0.1" +VERSION = "v1.0.2" DB_PATH = "tasks.db" # 数据库文件路径 TEMPLATES_PATH = "templates.json" # 检索模板文件路径 @@ -80,7 +80,7 @@ SORT_ORDER = { COMPOSITE_WEIGHTS = { "priority": {"SSS": 4.0, "SS": 3.0, "S": 2.0, "A": 1.0, "B": 0.8, "C": 0.6, "D": 0.4, "E": 0.2}, "type": {"Bug": 1.5, "需求": 1.0, "其他": 1.0}, - "status": {"待处理": 0.9, "进行中": 1.0, "保持跟进": 0.1, "搁置": 0.1, "取消": 0.0, "已完成": 0.0}, + "status": {"待处理": 0.9, "进行中": 1.0, "保持跟进": 0.15, "搁置": 0.1, "取消": 0.0, "已完成": 0.0}, # age factor multiplier (per day) "age_factor": 0.1 } @@ -128,8 +128,11 @@ DEADLINE_COLOR = [ (4, "#73bc75"), (10, "#83d6ff"), (15, "#bdd8e9"), - (30, "#ffffff"), ] +# 保持跟进、搁置超出日期时的颜色 +PAUSE_DEADLINE_COLOR = "#fbffa9" +# 默认颜色 +DEFAULT_DEADLINE_COLOR = "#ffffff" # endregion @@ -407,11 +410,17 @@ def compute_composite_score(task_row: dict) -> float: except Exception: have_deadline = False # 各种因素分数 - ddl_score = 1 + math.exp(-(0.3 + days_to_deadline / 3.0)) if have_deadline else 0.8 + ddl_score = 1 + math.exp(-(0.3 + days_to_deadline / 3.0)) if have_deadline else 0.9 d_score = COMPOSITE_WEIGHTS.get("age_factor", 0.1) * days_from_start + 1 p_score = COMPOSITE_WEIGHTS["priority"].get(task_row.get("priority"), 1.0) t_score = COMPOSITE_WEIGHTS["type"].get(task_row.get("type"), 1.0) s_score = COMPOSITE_WEIGHTS["status"].get(task_row.get("status"), 1.0) + + # 跟进和搁置状态不考虑截止日期 + state = task_row.get("status") + if state in ["保持跟进", "搁置"]: + ddl_score = 1.0 + # 计算综合优先级分数 score = p_score * t_score * s_score * d_score * ddl_score return round(float(score), 6) @@ -940,19 +949,19 @@ class TaskManagerApp(ctk.CTk): try: dt_deadline = datetime.fromisoformat(ddl) days_to_deadline = (dt_deadline.date() - datetime.now(dt_deadline.tzinfo or timezone.utc).date()).days + bg = DEFAULT_DEADLINE_COLOR for (d, c) in DEADLINE_COLOR: if days_to_deadline <= d: - bg = c - try: self.sheet.highlight_cells(row=r_idx, column=COL_DEADLINE, bg=bg) - except Exception: - try: self.sheet.set_cell_bg(r_idx,COL_DEADLINE,bg) - except Exception: pass + bg = c if st not in ["保持跟进", "搁置"] else PAUSE_DEADLINE_COLOR break + try: self.sheet.highlight_cells(row=r_idx, column=COL_DEADLINE, bg=bg) + except Exception: + try: self.sheet.set_cell_bg(r_idx,COL_DEADLINE,bg) + except Exception: pass except Exception: pass else: - # 取最后一个颜色 - bg = DEADLINE_COLOR[-1][1] + bg = DEFAULT_DEADLINE_COLOR try: self.sheet.highlight_cells(row=r_idx, column=COL_DEADLINE, bg=bg) except Exception: try: self.sheet.set_cell_bg(r_idx,COL_DEADLINE,bg)