Fv0素材包-考勤助手.zip 0. 背景与总原则
这是一个已有的 Next.js 16 + React 19 + Tailwind 4 项目(数字员工平台)。现有结构:app/page.tsx 用状态切换页面;components/sidebar.tsx 是左侧导航;components/chat.tsx 是和数字员工的对话页,左侧有历史会话,中间是消息流和输入框,右侧可以打开 components/workbench.tsx(“生成结果预览”和“执行过程”两种工作台);components/confirm-cards.tsx 是确认卡片;components/knowledge.tsx 是知识库页;lib/employees.ts 定义数字员工和开场对话;components/toast.tsx 是提示。
我要在这个平台里新增一个数字员工「考勤助手」,用客户 2026 年 8 月的真实钉钉导出文件完整演示一遍考勤核算。要求:
必须真实上传文件:用户在对话框里点「+ → 上传文件」或把文件拖进对话区,用 <input type="file" multiple accept=".xlsx,.xls,.pdf,.doc,.docx"> 真实读取文件,不能用假数据、不能预置结果。
必须真实解析和计算:用 xlsx(SheetJS)在浏览器里读取文件,用项目里已有的 lib/attendance-engine.ts 计算。这个文件里的算法已经用真实数据验证过,不要改它的计算逻辑,只能调用它。
必须真实预览,且按需呈现:右侧工作台默认是关着的。助手先在对话里用文字回答(结论 + 关键数字,必要时附一张小的 Markdown 表);只有当用户用自然语言要求“导出 / 生成 / 出一份 / 给我表 / 打开看看”时,才真正生成一个文件,在对话里插入文件卡片,并打开右侧的文件预览工作台(样式和 Genspark 一样,见第 5 节)。预览里看到的就是这个真实文件的内容。
不接大模型:对话回复由“意图匹配 + 引擎计算 + 文本模板”生成(见第 4 节)。回复里的所有数字都必须从计算结果里取,不允许在代码里写死任何人名或数字。
数据不出浏览器:所有文件只在浏览器内存里解析,不上传到任何服务器,不写 localStorage。页面刷新后数据清空。
沿用现有设计系统:只用 globals.css 里已有的 CSS 变量和 Tailwind 类(bg-card、border-border、text-muted-foreground、bg-brand 等),不新增颜色(唯一例外:第 5 节的文件类型小图标可以用固定的类型色);组件风格和现有的 chat、workbench、confirm-cards 保持一致;所有界面文字用简体中文。
需要新增依赖:xlsx(安装方式用 "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz")。