From 0b2c1ca83f616851e0a069eae0b8293501d1701a Mon Sep 17 00:00:00 2001 From: tsl Date: Tue, 31 Mar 2026 17:08:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20:recycle:=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/CLAUDE.md | 124 + .claude/rules/js-ts.md | 8 + .claude/rules/uniapp.md | 9 + .claude/rules/vue3.md | 12 + .claude/settings.local.json | 40 +- .czrc | 3 + .editorconfig | 14 + .env | 1 + .env.development | 2 + .env.production | 2 + .husky/commit-msg | 1 + .husky/pre-commit | 1 + .serena/.gitignore | 2 + .serena/project.yml | 152 + CLAUDE.md | 74 - README.md | 144 +- README_APP.md | 127 - commitlint.config.cjs | 132 + eslint.config.js | 151 + package-lock.json | 5053 ++++++++++++++++++++++++++- package.json | 48 +- pnpm-lock.yaml | 3106 +++++++++++++++- prettier.config.js | 36 + src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/capabilities/default.json | 91 +- src-tauri/src/lib.rs | 1 + src-tauri/tauri.conf.json | 23 +- src/App.vue | 119 +- src/components/AppStatusBar.vue | 134 +- src/components/CloseDialog.vue | 77 +- src/components/LogViewer.vue | 34 +- src/components/LoginForm.vue | 59 +- src/components/MonitorControl.vue | 66 +- src/components/SettingsPanel.vue | 117 +- src/components/StatusHeader.vue | 71 +- src/components/UpdateDialog.vue | 200 +- src/composables/useMonitor.ts | 582 --- src/composables/useNotification.ts | 54 + src/composables/useTray.ts | 278 ++ src/composables/useUpdater.ts | 101 + src/constants/api.ts | 11 + src/constants/app.ts | 5 + src/main.ts | 14 +- src/stores/app.ts | 121 + src/stores/log.ts | 59 + src/stores/monitor.ts | 1417 +++----- src/stores/network.ts | 88 + src/utils/common.ts | 6 + src/utils/storage.ts | 55 + src/vite-env.d.ts | 23 +- tsconfig.json | 54 +- vite.config.ts | 117 +- 53 files changed, 10813 insertions(+), 2410 deletions(-) create mode 100644 .claude/CLAUDE.md create mode 100644 .claude/rules/js-ts.md create mode 100644 .claude/rules/uniapp.md create mode 100644 .claude/rules/vue3.md create mode 100644 .czrc create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .husky/commit-msg create mode 100644 .husky/pre-commit create mode 100644 .serena/.gitignore create mode 100644 .serena/project.yml delete mode 100644 CLAUDE.md delete mode 100644 README_APP.md create mode 100644 commitlint.config.cjs create mode 100644 eslint.config.js create mode 100644 prettier.config.js create mode 100644 src/composables/useNotification.ts create mode 100644 src/composables/useTray.ts create mode 100644 src/composables/useUpdater.ts create mode 100644 src/constants/api.ts create mode 100644 src/constants/app.ts create mode 100644 src/stores/app.ts create mode 100644 src/stores/log.ts create mode 100644 src/stores/network.ts create mode 100644 src/utils/common.ts create mode 100644 src/utils/storage.ts diff --git a/.claude/CLAUDE.md b/.claude/CLAUDE.md new file mode 100644 index 0000000..593e324 --- /dev/null +++ b/.claude/CLAUDE.md @@ -0,0 +1,124 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## 项目概述 + +这是一个基于 **Tauri 2.x + Vue 3** 的工单监测桌面应用,用于监测 CRM 系统(crm.yunvip123.com)的待处理工单并发送系统通知。 + +## 常用命令 + +项目使用 **pnpm** 作为包管理器。 + +```bash +# 启动开发模式(前端 + Tauri) +pnpm run tauri-dev + +# 仅启动前端开发服务器 +pnpm run dev + +# 前端类型检查 + 构建 +pnpm run build + +# 构建 Tauri 生产版本(含签名/安装包) +pnpm run tauri-build + +# 构建并发布 +pnpm run deploy + +# 版本号管理(默认 patch) +pnpm run version # patch +pnpm run version:minor +pnpm run version:major + +# 代码检查 +pnpm run lint +pnpm run lint:fix + +# 规范提交(commitizen + cz-git) +pnpm run commit + +# Rust 后端检查 +cd src-tauri && cargo check +cd src-tauri && cargo clippy +``` + +## 架构概述 + +**前端驱动架构**:所有业务逻辑(API 调用、定时任务、通知)都在 Vue 前端实现,Rust 后端仅负责系统级功能(窗口管理、插件注册)。 + +### 前端分层(src/) + +**Stores(Pinia)**: + +- `stores/monitor.ts` — 核心业务:登录、轮询检查工单、推迟/暂停逻辑、托盘联动 +- `stores/app.ts` — 全局配置(轮询间隔、自启动、静默启动等),配置持久化到 `localStorage`(key: `crm_config`) +- `stores/log.ts` — 运行日志管理 +- `stores/network.ts` — 网络状态检测 + +**Composables**: + +- `composables/useNotification.ts` — 系统通知封装(`tauri-plugin-notification`) +- `composables/useTray.ts` — 系统托盘创建、图标/菜单动态更新 +- `composables/useUpdater.ts` — 应用自动更新(`tauri-plugin-updater`) +- `composables/useMonitor.ts` — 监测相关辅助逻辑 + +**Constants**: + +- `constants/api.ts` — 所有 API URL 集中定义(`LOGIN_URL`、`CHECK_URL`、`WORK_ORDER_URL`) +- `constants/app.ts` — 应用级常量 + +**Utils**: + +- `utils/storage.ts` — localStorage 读写封装 +- `utils/common.ts` — 通用工具函数(`formatTime` 等) + +### Rust 后端(src-tauri/src/) + +- `lib.rs` — 应用初始化、插件注册、窗口关闭事件处理(关闭→隐藏到托盘,发出 `close-requested` 事件) + +### 关键数据流 + +1. `App.vue` 初始化:加载配置 → 加载凭据 → 初始化托盘 → 监听通知动作事件 + 关闭事件 +2. `monitorStore.startMonitoring()` 执行登录(密码或 Token 模式),成功后启动 `setInterval` 轮询 +3. 工单有待处理项时调用 `useNotification.notify()`,通知动作(推迟/去处理)通过 Tauri 事件回传 +4. 托盘图标/菜单通过 `watch([isMonitoring, isPostponed, ticketCounts])` 自动同步 + +### API 集成 + +- 登录:`POST https://crm.yunvip123.com/api/SystemUser/Login` +- 工单查询:`GET https://crm.yunvip123.com/api/DemandManage/QueryIndexCount` +- 认证方式:登录响应 `set-cookie` 中提取 `ASP.NET_SessionId`,后续请求携带 +- HTTP 白名单配置在 `src-tauri/capabilities/default.json` + +### 通知触发条件 + +当 `PendingCount`(待处理)、`StaycloseCount`(待关闭)、`ConfirmCount`(待确认)任意 > 0 时触发。 + +## 代码规范 + +- Vue 组件使用 `