Microsoft To Do桌面应用复刻方案
  1. 微软To Do复刻方案(解决精简模式强制置顶问题)

  2. 一、方案核心目标

精准复刻微软To Do桌面端的详细面板模式精简模式,核心差异化功能为:将精简模式的强制窗口置顶改为可配置开关,支持用户自主控制是否置顶;同时实现任务分类/标签、截止日期/提醒、数据导入导出等核心功能,基于Next.js静态模式+Tauri+SQLite技术栈,适配Windows/macOS双平台。

  1. 二、核心概念厘清:两种模式的特征复刻

先明确两种模式的核心差异与复刻标准,确保界面与交互体验一致,再针对性解决置顶问题:

维度详细面板模式(复刻标准)精简模式(复刻标准+置顶优化)
界面布局三纵列布局:左侧清单导航栏(我的一天、重要、自定义清单等)+ 中间任务列表 + 右侧任务详情面板(支持调整宽度)双纵列/单栏精简布局:隐藏右侧详情面板,保留清单导航与核心任务列表,窗口尺寸更小、布局更紧凑
核心交互点击任务展开详情、支持任务拖拽排序、清单分组管理快速查看/编辑任务、简化操作流程,窗口可自由拖动但默认无强制置顶(优化点)
置顶特性无强制置顶,窗口层级遵循系统默认规则原版强制置顶(痛点);复刻版支持开关控制,默认关闭置顶
适用场景复杂任务管理(需查看/编辑详情、添加子任务等)快速浏览任务、临时记录,适合多窗口切换场景
  1. 三、技术架构选型

延续前端+本地存储的MVP核心架构,确保轻量、跨平台且性能优异:

技术模块选型核心优势
前端框架Next.js(静态模式,output: ‘export’)支持React组件化开发,静态导出后可直接集成到Tauri,兼顾开发效率与加载性能
桌面包装器Tauri包体积小(3-10MB)、内存占用低(30-40MB空闲),支持窗口置顶API(setAlwaysOnTop),完美适配双平台
本地存储SQLite(基于sql.js,WebAssembly实现)前端直接操作本地数据库,支持任务数据、模式偏好、置顶状态的持久化存储,离线可用

项目结构设计(适配Tauri+Next.js整合):


todo-replica/
├── next-app/              # Next.js前端核心
│   ├── app/               # 页面组件(模式切换、任务管理、设置页等)
│   ├── components/        # 公共组件(置顶开关、模式切换按钮等)
│   ├── lib/               # 工具库(SQLite操作、Tauri API封装)
│   ├── public/            # 静态资源
│   └── next.config.js     # 静态导出配置
├── src-tauri/             # Tauri桌面端核心
│   ├── src/main.rs        # Rust主程序(窗口管理核心)
│   └── tauri.conf.json    # 窗口配置(默认关闭置顶)
└── package.json           # 项目依赖与脚本
  1. 四、核心功能实现:模式复刻+置顶开关

4.1 两种模式的复刻与切换

4.1.1 界面布局复刻

  • 详细面板模式:采用三栏布局,左侧清单导航支持分组管理,中间任务列表显示任务标题、截止日期、标签等核心信息,右侧详情面板可查看/编辑任务描述、子任务、附件等,支持拖拽调整面板宽度。

  • 精简模式:隐藏右侧详情面板,窗口宽度压缩至300-400px,仅保留清单导航(可折叠)和任务列表,任务核心信息(标题、截止日期、完成状态)紧凑展示,点击任务可弹出简易编辑弹窗(替代详情面板)。

4.1.2 模式切换逻辑

  • 切换入口:窗口右上角设置按钮旁添加「模式切换」按钮(图标区分:详细模式=三栏图标,精简模式=两栏图标)。

  • 切换效果:点击后即时切换布局,窗口尺寸自适应调整(精简模式缩小、详细模式恢复),当前任务列表状态、选中清单保持不变。

  • 偏好记忆:SQLite存储用户最近一次的模式选择,下次启动应用自动恢复对应模式。

4.2 核心优化:精简模式置顶开关

基于Tauri的窗口置顶API实现,核心解决强制置顶痛点,兼顾易用性与灵活性:

4.2.1 置顶开关设计

  • 触发入口:双入口保障易用性

    • 精简模式窗口右上角:直接添加「置顶」开关按钮(图标:未置顶=pin-off,置顶=pin),点击即时切换状态。

    • 应用设置页:新增「模式偏好」模块,包含「精简模式默认置顶」选项(开关),控制启动精简模式时的初始置顶状态。

  • 状态反馈:置顶开启时,窗口标题栏添加「[置顶中]」标识,开关按钮高亮显示;切换状态时给出短暂Toast提示(如「已开启置顶」「已关闭置顶」)。

  • 优先级规则:即时点击开关的优先级高于设置页默认偏好,确保用户临时调整需求优先满足。

4.2.2 技术实现核心代码

核心依赖Tauri的window模块API(setAlwaysOnTop),前端封装调用逻辑,配合SQLite存储状态:


// next-app/components/TopToggle.tsx(置顶开关组件)
'use client';
import { useState, useEffect } from 'react';
import { Pin, PinOff } from 'lucide-react';
import { getCurrentWindow } from '@tauri-apps/api/window';
import { getDb, saveConfig } from '@/lib/db'; // SQLite操作封装

export default function TopToggle() {
  const [isTop, setIsTop] = useState(false);
  const window = getCurrentWindow();

  // 初始化:从SQLite加载置顶状态
  useEffect(() => {
    const initTopState = async () => {
      const db = await getDb();
      const res = db.exec(`SELECT value FROM config WHERE key = 'compact_mode_top'`);
      const isTopSaved = res[0]?.values[0]?.[0] === 'true';
      setIsTop(isTopSaved);
      // 同步到窗口状态
      await window.setAlwaysOnTop(isTopSaved);
    };
    initTopState();
  }, []);

  // 切换置顶状态
  const toggleTop = async () => {
    const newIsTop = !isTop;
    setIsTop(newIsTop);
    // 1. 同步窗口置顶状态
    await window.setAlwaysOnTop(newIsTop);
    // 2. 持久化到SQLite
    const db = await getDb();
    await saveConfig('compact_mode_top', newIsTop.toString());
  };

  return (
    <button onClick={100 rounded-full">
      {isTop ? <Pin size={18} /> : <PinOff size={18} />}

  );
}

// src-tauri/src/main.rs(Tauri窗口初始化配置)
fn main() {
  tauri::Builder::default()
    .invoke_handler(tauri::generate_handler![])
    .run(tauri::generate_context!())
    .expect("error while running tauri application");
}

// src-tauri/tauri.conf.json(窗口默认配置,关闭置顶)
{
  "tauri": {
    "window": {
      "title": "Todo Replica",
      "width": 1024,
      "height": 768,
      "resizable": true,
      "alwaysOnTop": false, // 默认关闭置顶
      "decorations": true
    }
  }
}

4.3 基础任务功能实现(含你要求的扩展功能)

4.3.1 数据模型设计(SQLite表结构)

包含任务核心数据、模式偏好、置顶状态,支持所有扩展功能:


-- 任务清单表(区分不同任务组)
CREATE TABLE task_lists (
  id TEXT PRIMARY KEY,
  name TEXT NOT NULL,
  is_collapsed INTEGER DEFAULT 0, -- 清单是否折叠(精简模式常用)
  created_at TEXT NOT NULL,
  updated_at TEXT NOT NULL
);

-- 任务表(核心数据,含标签、截止日期)
CREATE TABLE tasks (
  id TEXT PRIMARY KEY,
  list_id TEXT NOT NULL,
  title TEXT NOT NULL,
  description TEXT,
  categories TEXT, -- 标签,JSON数组存储
  due_date TEXT, -- 截止日期(ISO格式)
  reminder TEXT, -- 提醒时间(ISO格式)
  is_completed INTEGER DEFAULT 0,
  created_at TEXT NOT NULL,
  updated_at TEXT NOT NULL,
  FOREIGN KEY (list_id) REFERENCES task_lists(id)
);

-- 应用配置表(模式偏好、置顶状态)
CREATE TABLE app_config (
  key TEXT PRIMARY KEY,
  value TEXT NOT NULL
);

-- 初始化默认配置(精简模式默认关闭置顶)
INSERT OR IGNORE INTO app_config (key, value) 
VALUES 
('default_mode', 'detailed'), -- 默认启动详细模式
('compact_mode_top', 'false'); -- 精简模式默认不置顶

4.3.2 扩展功能实现要点

  • 任务分类/标签:支持为任务添加多个标签,标签支持新增、编辑、删除,任务列表可按标签筛选;标签数据以JSON数组格式存储在tasks表的categories字段。

  • 截止日期/提醒:选择截止日期时同步支持设置提醒时间,提醒状态存储在reminder字段;应用启动时检查到期提醒,通过Tauri的通知API(后续可扩展)或弹窗提示。

  • 数据导入导出:支持导出为JSON/CSV格式(前端读取SQLite数据生成文件),支持导入微软To Do导出的JSON文件(解析格式后写入本地SQLite)。

  1. 五、Figma原型设计要点(两种模式+置顶开关)

原型核心要求:还原微软To Do的视觉风格(简洁、轻量化),明确两种模式的布局差异与置顶开关的交互逻辑,可直接用于前端开发:

5.1 页面结构原型

  1. 主界面(两种模式切换)

    • 顶部导航栏:左侧应用名称,右侧依次为「搜索框」「模式切换按钮」「置顶开关按钮」「设置按钮」「用户头像」。

    • 详细模式:三栏布局,右侧详情面板默认展开,支持拖拽调整宽度。

    • 精简模式:两栏布局,右侧详情面板隐藏,清单导航栏可点击折叠为图标,进一步压缩窗口尺寸。

  2. 设置页(模式偏好)

    • 新增「模式与窗口设置」模块,包含:默认启动模式(下拉选择:详细/精简)、精简模式默认置顶(开关)。

    • 保留「数据管理」模块:导入按钮、导出按钮(选择导出格式)。

  3. 任务编辑弹窗(精简模式):点击精简模式的任务弹出弹窗,包含任务标题、截止日期、标签、描述的编辑入口,简洁高效。

5.2 交互逻辑原型

  • 模式切换:点击模式切换按钮,窗口尺寸平滑过渡(精简→详细:宽度从350px扩展到1024px;反之收缩),布局即时重排。

  • 置顶开关:仅精简模式显示置顶开关(详细模式隐藏),点击开关时图标切换,标题栏添加「[置顶中]」标识,给出Toast反馈。

  • 数据导入导出:点击导出按钮弹出格式选择弹窗,选择后下载文件;点击导入按钮弹出文件选择器,选择后解析并提示导入结果。

  1. 六、跨平台打包与MVP上线

6.1 打包配置(Windows/macOS)

基于Tauri的打包命令,配置双平台适配:


// 安装依赖
npm install

// 开发环境启动(同时启动Next.js和Tauri)
npm run tauri dev

// 打包Windows版本(生成exe/msi)
npm run tauri build -- --target x86_64-pc-windows-msvc

// 打包macOS版本(生成dmg)
npm run tauri build -- --target x86_64-apple-darwin  # Intel芯片
npm run tauri build -- --target aarch64-apple-darwin # M系列芯片

6.2 MVP阶段验收标准

  • 两种模式正常切换,界面布局符合复刻要求。

  • 精简模式置顶开关功能正常,状态可持久化,窗口层级控制符合预期。

  • 任务管理核心功能(增删改查、分类/标签、截止日期)正常。

  • 数据导入导出功能正常,支持指定格式。

  • 双平台(Windows 10+/macOS 12+)运行稳定,无明显性能问题。

  1. 七、后续扩展建议
  • 添加桌面通知:集成Tauri的通知API,实现任务提醒的原生通知弹窗。

  • 快捷键支持:添加模式切换、置顶开关的全局快捷键,提升操作效率。

  • 云同步功能:集成云存储API(如Nextcloud、自建服务),实现跨设备数据同步。

  • 主题定制:支持浅色/深色模式自动切换,新增自定义主题颜色功能。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇