Commit Graph

56 Commits

Author SHA1 Message Date
v6ole cd47d1aed5 feat: 亮灯表30天滚动窗口 + 相关人员文案统一 + 周报数据补全
- light_board.classify: 自然月 → 30/60天滚动窗口 (≤30天🟢, 31-60天🟡, 61+天🔴)
- LightBoard.vue: 4处文案同步 (近30天已拜访 / 上次 / 个周期)
- dashboard.get_weekly_report: 补全 companion_names_resolved + visitor_name + visitor_phone + edit_log
- 导入/导出模板 + VisitForm + ManagerWorkspace: 同访人员 → 相关人员
2026-07-02 16:58:29 +08:00
v6ole 3285e22142 feat: 导入增强 + 客户合并 + 同伴自定义 + 性能优化
=== 导入系统全面增强 ===
- 5 Sheet 完整导入:拜访/计划/商机/要客/纪要
- 同访人智能解析:中英文逗号/顿号/分号 → 系统用户UUID + 外部人员TEXT
- 客户自动创建:Excel中不存在的客户自动入库
- 模糊名称匹配:去空格 + 包含关系纠错
- manager_id 修正:导入时用客户分配的经理(非Excel列/非导入人)
- 模板更新:Sheet5「客户经理」→「填报人」,同访人示例含逗号分隔

=== 客户合并功能 ===
- PUT 改名碰撞检测 → 409 + 合并预览
- GET merge-preview / POST merge 端点
- 事务级迁移:Visit/WorkPlan/MiniBusiness/KeyVisit/联系人/分配
- 去重逻辑:联系人(name+phone)、分配(manager+role)
- last_visit_date 取最大值

=== 拜访记录完善 ===
- visits 新增 companion_names TEXT[] 列
- 同访人支持自定义输入(外部人员),el-select allow-create
- 移动端 VisitForm + PC端 ManagerWorkspace 统一
- 周报「客户经理」→「相关人员」(创建人+同访人)
- 纪要「客户经理」→「填报人」
- 删除拜访后重新计算 customer.last_visit_date

=== 客户选择放开 ===
- 客户经理可看到全部客户(不再限自己分配的)
- 拜访时客户下拉返回全量

=== 前端性能优化 ===
- Element Plus 按需加载 (unplugin-vue-components + unplugin-element-plus)
- 周报照片URL并行请求 (Promise.all)
- onMounted 三路并行 (loadReport + dropdowns + AI)
- nginx Cache-Control: immutable for /assets/
- Google Fonts preconnect hints
- 图片上传前 Canvas 压缩 (max 1920px, quality 0.8)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-29 22:25:04 +08:00
v6ole b343970ecc feat: 三项联动 — 计划过期提醒 + 拜访自动关闭 + 批量制定
1. 计划过期自动提醒:
   - scheduler.py 新增 check_overdue_plans()
   - 每日 9:00 检查过期计划(plan_date < today, status=计划中)
   - 按经理汇总 → 企微推送提醒消息

2. 拜访后自动关闭计划:
   - create_visit 后自动将匹配的计划标记为「已完成」
   - 条件: customer_id 匹配 + status=计划中 + plan_date <= visit_date

3. 亮灯表批量制定:
   - 红灯/黄灯卡片右上角 ☐ 复选框
   - 勾选后出现「批量制定计划」按钮
   - 弹窗统一设置日期+内容 → 批量 POST

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 12:28:36 +08:00
v6ole 0e25201ede feat: 亮灯表重构 — 点击卡片弹窗替代跳转周报
后端 light_board.py:
- 每张客户卡片返回 plans[] (活跃工作计划) + recent_visits[] (最近2条)
- 计划过期检测 (plan_overdue)

前端 LightBoard.vue:
- 点击卡片 → el-dialog 弹窗 (不再跳转周报)
- 绿灯: 显示最近拜访记录
- 黄/红灯: 客户信息 + 快速制定拜访计划表单
- 卡片显示计划标签 (📅正常 / ⚠过期闪烁)
- 弹窗底部保留「查看周报记录」链接

计划过期逻辑: plan_date < 当月首日 且 status=计划中

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 12:23:58 +08:00
v6ole 2bb85bf45c fix: UserManage.vue 补充丢失的 useAuthStore 导入
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 12:09:04 +08:00
v6ole 015af18d3c fix: 用户编辑弹窗修复 — footer 简化 + 删除后关闭弹窗
- footer 用 span 替代 flex div (避免 element-plus 兼容问题)
- 删除成功后自动关闭弹窗

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 12:02:04 +08:00
v6ole 7e31606b45 refine: 删除按钮移到编辑弹窗 — 统一操作入口
- 表格行内只保留「编辑」按钮
- 编辑弹窗左下角红色「删除用户」按钮(仅支局长可见)
- 避免表格行内误删

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 11:56:03 +08:00
v6ole 04aaff8851 feat: 支局长可删除用户 + 清理重复蓝浩博
- 新增 DELETE /api/users/{id} (require_director, 不能删自己)
- 用户管理页新增「删除」按钮(仅支局长可见)
- 删除重复的分管领导蓝浩博

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 11:53:11 +08:00
v6ole 447932a8e6 fix: 新建表单客户选择器 — 提高 page_size 上限
- 前端三个页面: page_size 100 → 500(覆盖所有客户)
- 后端 customers API: page_size 上限 100 → 1000,默认 25 → 100

支局长/分管领导新建时下拉框可加载全量客户。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 11:47:00 +08:00
v6ole e99d0aec8a Revert "feat: 支局长/领导可指定客户经理创建记录"
This reverts commit a4904973bf.
2026-06-27 11:41:17 +08:00
v6ole a4904973bf feat: 支局长/领导可指定客户经理创建记录
后端 schema: WorkPlanCreate/MiniBusinessCreate/KeyVisitCreate 新增可选 manager_id
后端 API: create 端点支持 manager_id 参数(留空则默认本人)
前端: 三个页面新建弹窗新增「客户经理」下拉(仅支局长/领导可见)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-27 11:17:54 +08:00
v6ole 576715f990 feat: 网站 favicon — 公文包图标
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 17:21:18 +08:00
v6ole df5b661d5f fix: 填报统计不再限定 role=manager,只看 require_report=True
之前: role='manager' AND require_report=True → 只统计客户经理
现在: require_report=True → 统计所有需填报的用户

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 16:44:59 +08:00
v6ole a580eefd14 feat: 三项改进 — require_report + 拜访联动 + 解绑移到弹窗
1. 用户管理页 UX 优化:
   - 表格内「解绑」按钮移入编辑弹窗(clearable 输入框)
   - 新增「需要填写周报」el-switch 开关
   - 新增「填报」列显示是否计入统计

2. require_report 字段 (DB + API + 联动):
   - users 表新增 require_report BOOLEAN DEFAULT TRUE
   - 调度器/仪表盘进度/立即检查 均排除 require_report=false
   - UserOut schema + UpdateUserRoleRequest 同步更新

3. 拜访联动客户 last_visit:
   - customers 表新增 last_visit_date / last_visit_manager_id
   - 创建拜访记录时自动更新对应客户的最后拜访信息
   - 亮灯表可据此精确判断客户拜访状态

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 16:36:27 +08:00
v6ole 989c41da8c fix: 填报检查统计所有经理 (不限于已绑定企微)
之前只统计 wecom_userid IS NOT NULL 的经理导致始终 0/0,
现在统计全员,仅推送消息时跳过未绑定用户。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 16:10:17 +08:00
v6ole e69d962521 fix: 手动切换布局 — 仅首页首次加载自动适配
检测 _from.name 区分「首次加载」和「应用内导航」:
- 首次: 手机→/m, 桌面→/
- 手动点击切换按钮: 完全尊重用户选择, 不拦截

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 16:03:54 +08:00
v6ole b88b29b745 fix: 手动切换布局失效 — 仅首页自动适配
- 只对根路径 / 做手机→/m 跳转,不再拦截桌面访问 /m
- 支持 ?view=desktop 或 ?view=mobile 强制覆盖自动检测
- 手动输入的具体路径完全不受影响

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:56:44 +08:00
v6ole c71a2ac88e perf: Vite 分包优化 — Element Plus / Vue 独立 chunk
build.rollupOptions.manualChunks:
- element-plus → ~923 kB (独立缓存,首次加载后 HIT)
- vue-vendor → ~110 kB (Vue + Router + Pinia)
- index (app code) → ~59 kB (从 ~1 MB 缩减)

首屏加载显著减少,二次访问几乎零加载。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:40:07 +08:00
v6ole 861a4cecff feat: 客户查重前端集成
- 新建客户时输入名称失焦后自动调用 /customers/check-duplicate
- 若有同名客户显示黄色警告条(含客户名+经理)
- 编辑模式不触发查重

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:37:44 +08:00
v6ole c4e8a3b790 feat: 富消息升级 — 催办用模板卡片 + 公告用 Markdown
scheduler.py:
- 未填报经理 → 模板卡片消息(标题+描述+「去填报」按钮)
- 支局长/领导 → Markdown 每日填报汇总(markdown)
- 文本消息作为降级方案

wecom.py API:
- remind: 模板卡片优先 → 降级文本
- announcement: Markdown 优先 → 降级文本

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:34:21 +08:00
v6ole 327637f94c feat: 移动端/桌面端自动适配
- utils/index.ts: 新增 isMobile() 检测 user-agent
- router: beforeEach 守卫中根据设备自动跳转
  - 手机访问 / 桌面路由 → 自动跳 /m
  - 桌面访问 /m 移动路由 → 自动跳 /

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:33:09 +08:00
v6ole ab3384d6a5 chore: 企微绑定流程收尾 — 回调日志 + 调试完成
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:24:33 +08:00
v6ole 313b25c631 fix: WecomBind.vue — 修复 auth.user 不存在的问题
auth store 暴露的是独立字段 (name/userId/role) 而非 user 对象,
导致 auth.user?.name 始终为 undefined。

修复:
- auth.name 替代 auth.user?.name
- 调用 /users/me 获取 wecom_userid (store 不存储该字段)
- window.location.href 替代 router.push (企微浏览器兼容)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:18:36 +08:00
v6ole 9d3a8ae57e fix: 绑定页用 window.location 跳转登录 (企微浏览器兼容)
router.push 在企微内置浏览器可能不触发跳转,
改用 window.location.href 强制整页跳转

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 15:09:31 +08:00
v6ole 19ebb85209 fix: 绑定页面登录态检查 + 登录后返回原页面
Login.vue:
- goCasdoorLogin() 前将 redirect 参数存入 sessionStorage
- 登录成功后检查 sessionStorage 跳回原页面
- wecomLogin 流程同样支持 returnUrl

WecomBind.vue:
- onMounted 检测未登录 → 跳转 /login?redirect=/wecom-bind?token=xxx
- 登录后自动回到绑定页面,auth.user 不再为空

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 13:14:26 +08:00
v6ole 7264184315 feat: 企微绑定重构 — 回调事件 + 支局长手动绑定/解绑
绑定流程改为 rural-optical-rectify 方案:
- 企微菜单「绑定账号」发送 click 事件(而非 OAuth 跳转)
- 回调 POST 接收事件 → 生成绑定 token → 推送绑定链接
- 前端 WecomBind.vue (/wecom-bind) 确认绑定
- 新增 POST /api/wecom/bind-confirm (JWT 保护)

支局长手动管理:
- 新增 PUT /api/users/{id}/wecom 绑定/解绑端点
- UserManage.vue 编辑对话框新增企微 UserID 字段
- 表格操作列新增「解绑」按钮
- 重复绑定检测

wecom.py 新增:
- in-memory bind token store (TTL 600s)
- send_text_card() 卡片消息方法
- access_token 属性暴露

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 12:10:38 +08:00
v6ole 1d2dacc3ab feat: 企微 API 代理 + 菜单部署修复
config.py:
- 新增 WECOM_API_BASE 环境变量 (默认 https://qyapi.weixin.qq.com)

wecom.py:
- 所有 API 调用改用 settings.WECOM_API_BASE (支持代理)
- 修复 _post_with_retry URL 拼接 bug (? vs &)
- 菜单名去掉 emoji (企微限制 16 字符)

api/wecom.py:
- setup-menu 端点菜单名修正

.env.example:
- 新增 WECOM_API_BASE 说明

当前 .env 配置: WECOM_API_BASE=https://api.v6ole.top
已验证: 通过代理获取 token , 菜单创建 

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 11:58:12 +08:00
v6ole da1f24c710 feat: 企微菜单管理 — create_menu / get_menu / delete_menu
wecom.py 新增:
- create_menu(buttons) — 创建/替换应用自定义菜单
- get_menu() — 获取当前菜单配置
- delete_menu() — 删除菜单

API 新增:
- POST /api/wecom/setup-menu — 一键部署标准菜单(开始填报 + 绑定账号)
- GET /api/wecom/menu — 查看当前菜单

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 11:36:16 +08:00
v6ole 5006642354 feat: 企微绑定入口 — BindWechat.vue + 路由
新增 /bind-wechat 公开路由:
- 页面加载后自动重定向到企微 OAuth 授权页
- scope=snsapi_base (静默授权,无需用户确认)
- 回调到 /login?wecom_code=xxx → 自动绑定

用法: 企微工作台应用主页设为 https://qj.dhdx.fun/bind-wechat

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 11:30:06 +08:00
v6ole ad0c894f93 feat: 企微测试消息端点 + 调度器 msgfmt 优化
- 新增 POST /api/wecom/test-message 测试端点(需 director)
- 调度器仅推已绑定 wecom_userid 的经理
- wecom.py 已支持 markdown/模板卡片消息

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 09:49:33 +08:00
v6ole eae7fdafb8 fix: 企微回调验证 — 返回纯文本而非 JSON
企微后台保存时要求响应为原始解密明文(Content-Type: text/plain),
FastAPI 默认 JSON 序列化会加引号导致验证失败。
改用 PlainTextResponse 返回纯文本。

验证: 本地 + 生产域名均返回 text/plain, 解密内容正确

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 09:46:19 +08:00
v6ole 36ba9338f1 feat: 企业微信 Phase 1 — token 续期 + 回调验证 + 调度器注册
wecom.py:
- Token 自动续期 (7200s 过期 + 60s 提前量 + 42001 重试)
- POST 请求自动重试 (最多 3 次,含速率限制退避)
- 新增 send_markdown_message() / send_template_card() 富消息方法

wecom.py API:
- GET /api/wecom/callback: 企微回调 URL 验证 (SHA1 签名 + AES 解密)
- POST /api/wecom/callback: 事件接收占位

scheduler.py:
- 仅推送给已绑定 wecom_userid 的经理
- 消息内容优化 (已填报/未填报人数统计)

main.py:
- APScheduler 注册每日 17:30 自动检查填报

已验证: WECOM_TOKEN 获取成功

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 09:37:13 +08:00
v6ole 72fb7524f3 docs: CLAUDE.md — 更新部署架构 + 工作页客户经理列
- 新增完成项: 工作页客户经理列+汇总栏, 云端部署
- 新增部署架构章节 (FRP 隧道/前端容器/OpenResty/端口表)
- 新增设计决策 #22 (云端部署)
- 更新验证状态表 (生产 URL/FRP/容器)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 09:21:41 +08:00
v6ole e71fa6e3ed chore: 生产部署适配 — nginx.conf 精简 + .gitignore 更新
- nginx.conf: 移除 /api/ 代理(改由 OpenResty 边缘路由),仅保留 SPA fallback
- .gitignore: 排除所有 .env.* (保留 .env.example),防止 .env.production 误提交

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 09:02:46 +08:00
v6ole c2a62c29cd feat: 工作计划/商机/要客页面新增客户经理列与汇总栏
- 表格新增「客户经理」列,暖灰色哈希标签,每人唯一颜色
- 页面顶部新增汇总栏,按经理分组显示各有多少条记录
- 汇总栏仅在有数据时显示,与亮灯表配色体系一致

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 08:30:19 +08:00
v6ole b3d355179f chore: 部署文档不纳入版本管理
- 从 git 移除 qiji部署交接文档.md 和 通用部署文档.md
- 更新 .gitignore 忽略所有 *部署文档.md/*部署交接文档.md
- 部署文档含敏感信息(服务器IP/端口/密码),应本地保存

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 08:30:06 +08:00
v6ole 8867e2f5fe docs: 通用部署文档 — FRP + OpenResty + Docker 平台化部署模板
包含:
- 完整端口规划表 (基础设施/项目后端/项目前端 三区间)
- 当前端口占用清单 (所有已用端口一目了然)
- 本机端口分配方案 (8000/8002/8004...)
- 新项目 7 步部署流程 (端口分配→FRP→后端→前端→OpenResty→DNS→验证)
- 前端 Dockerfile + nginx.conf 模板
- 日常运维速查 (FRP/容器/OpenResty/后端)
- 故障排查表
- 已有项目索引

特点:所有项目特定值均用 {PLACEHOLDER} 标记,复制即用

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 08:29:05 +08:00
v6ole 4ae8c69193 docs: qiji 部署交接文档 — FRP + OpenResty + Docker 部署方案
基于 H3ConuMS2 部署模式,适配 qiji 项目:
- 新增 qiji-backend FRP 隧道 (8002→18061)
- 前端容器化部署 (qiji-frontend:18063)
- OpenResty 站点配置 (qj.dhdx.fun)
- 复用已有 Casdoor / PostgreSQL / MinIO
- 含部署检查清单和故障排查指南
- 所有敏感凭据已替换为占位符

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 08:27:31 +08:00
v6ole ce94c6b2ba refine: 缓存的 AI 摘要默认折叠,点击展开
- aiExpanded ref: 缓存加载=false, 新生成=true
- 标题栏可点击切换折叠/展开
- 折叠态显示 ▶ + '点击展开' 提示
- 展开态显示 ▼ + 复制按钮
- 卡片边框折叠时降为 warm-border
2026-06-25 12:05:33 +08:00
v6ole 5b38246801 feat: AI 摘要持久化 — DB 缓存 + 自动加载
后端:
- 新增 ai_summaries 表 (week_start/week_end/generated_by/summary)
- get_cached_summary(): 按周+用户查缓存
- delete_cached_summary(): 生成前清理旧缓存
- generate_summary(): 自动保存到 DB
- API: GET /ai/summary(加载) POST(生成) DELETE(清除)

前端:
- onMounted 自动 GET 缓存摘要, 有则直接展示
- 按钮: 无缓存→'AI 生成摘要', 有缓存→'重新生成'
- 标题栏显示生成时间戳
2026-06-25 11:45:04 +08:00
v6ole e681beba24 chore: 更新 CLAUDE.md — 亮灯表+AI摘要 v0.2
- 亮灯表: 几何圆形图标、权限控制、周报联动
- AI 摘要: DeepSeek V4 配置、亮灯表数据注入、复制兼容
- 新增关键设计决策 #20 #21
2026-06-24 19:45:04 +08:00
v6ole 5b50e7ec27 fix: AI 摘要复制失败 — HTTP 环境 Clipboard API 不可用
navigator.clipboard 需要安全上下文(HTTPS/localhost),
内网 HTTP 部署时自动降级为 textarea + execCommand('copy')
2026-06-24 19:39:28 +08:00
v6ole 24c7aff093 fix: 恢复 AI_MODEL 为 deepseek-v4-flash
DeepSeek API 当前模型:
- deepseek-v4-flash / deepseek-v4-pro (2026-04-24 发布)
- deepseek-chat / deepseek-reasoner 是旧别名, 2026-07-24 废弃

.env.example 同步添加 DeepSeek 配置注释
2026-06-24 19:33:06 +08:00
v6ole d07311d5a5 fix: AI 摘要 DeepSeek 配置修复
1. generate_summary 调用 get_light_board 补传 user_id/role
   (否则亮灯表数据为空, 摘要缺少覆盖分析)
2. AI_API_URL: /anthropic → /v1/chat/completions
   (原先 URL 不是 DeepSeek 标准 OpenAI 兼容端点)
3. AI_MODEL: deepseek-v4-flash → deepseek-chat
   (原模型名不是已知的 DeepSeek 模型)
2026-06-24 19:19:57 +08:00
v6ole dd69e902ec feat: 亮灯表点击客户 → 周报自动按客户筛选
- WeeklyReport onMounted 新增 customer_id 路由参数处理
- 筛选栏新增「按客户筛选」下拉框(filterable搜索)
- 加载客户列表供下拉选项
2026-06-24 19:07:28 +08:00
v6ole 1d0f412e4a fix: 亮灯表权限控制 — 客户经理只看自己
get_light_board 新增 user_id/role 参数:
- director/leader: 看全部经理 + 未分配客户
- manager: 只看自己, 不显示未分配客户
- API 层从 current_user 提取身份信息透传
2026-06-24 17:22:05 +08:00
v6ole a8ed71fbff refine: 亮灯表视觉优化
- 用几何圆形图标代替文字'亮/临/灭':
  ● 实心圆(已拜访) / ◐ 半圆(临期) / ○ 空心圆(未拜访) / ◌ 虚线圆(未分配)
- 客户名称全量显示, 允许换行, card 拓宽至 220px
- 仪表盘标签从 '🟢 亮灯' 改为 '已拜访/临期/未拜访/未分配'
2026-06-24 16:07:15 +08:00
v6ole 305ee5df09 feat: 客户亮灯表 + AI 周报摘要 — v0.2
亮灯表:
- 四色覆盖矩阵: 绿亮灯/黄临期/红灭灯/灰未分配
- 按客户经理折叠卡片流, 覆盖率进度条, 团队总览统计
- 红灯客户显示连续未拜访月份, 未分配客户专区
- 后端: light_board.py service + GET /api/dashboard/light-board
- 前端: LightBoard.vue + 路由 /light-board + 汇总侧边栏

AI 周报摘要:
- 接入 OpenAI 兼容大模型, 注入拜访数据+亮灯表覆盖数据
- 四段式结构化输出: 概况/需求/覆盖分析/建议
- 一键生成+Markdown渲染+复制纯文本
- 支局长/分管领导专用, 支持配置内部模型
- 后端: ai_summary.py service + POST /api/ai/summary
- 前端: WeeklyReport 集成按钮+结果面板
- 新增配置: AI_API_URL / AI_API_KEY / AI_MODEL

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-24 12:03:00 +08:00
v6ole b79a5296c4 chore: 添加 README.md,.gitignore 忽略 CLAUDE.md 和 .claude/
Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-24 08:56:17 +08:00
v6ole d52725990d chore: 完善 .gitignore,忽略 node_modules 等 2026-06-24 08:54:12 +08:00