docs: 补充管理页批量操作说明并同步规则/AI 规则文档
为规则、分类、标签管理页新增的「批量操作模式」与多选删除补充使用与开发文档,同时补上此前已完成但未同步的 AI 规则建议可编辑、编辑后实时重算去重等文档,并登记批量模式截图脚本。 变更内容: - guide/categories-tags.md:补充分类与标签的批量删除说明,并回填 tags-batch.png、categories-batch.png 配图。 - guide/rules.md:批量删除与应用匹配账单改为需先进入「批量操作」模式(默认不显示勾选框)。 - dev/api.md:新增 DELETE /api/tag/batch、/api/category/batch,并补齐规则命中账单预览/一键应用、AI 规则去重校验等接口。 - dev/data-model.md:说明标签删除清理交易标签与规则标签关联、分类删除保留逻辑引用(账单显示未分类)。 - dev/rule-engine.md、dev/ai.md、dev/preferences.md、guide/ai.md、guide/transactions.md:同步 AI 规则建议可编辑、编辑后实时重算去重、应用开关默认开启并持久化等说明。 - scripts/ts/capture-elements.ts:新增 captureBatchModes()(标签/分类批量模式截图)并纳入 main()。 说明: - 截图经测试环境(前端 5174 / 后端 8081,虚构数据)生成,已上传 OSS,正文以 OSS 长期地址引用;public/screenshots 目录不入库。
This commit is contained in:
@@ -94,7 +94,8 @@
|
||||
- 仅加载属于当前用户且被勾选的记录(单次 ≤ 500 条),附带其标签名称与分类名;提示词字段为 `type / remark / channel / category / tags`(不含金额与 `rawData`),并对相同「类型 + 备注 + 渠道 + 标签」组合去重。
|
||||
- 解析并校验模型输出(分类 ID 归属与类型、标签归属、名称长度、颜色格式等)。
|
||||
- **去重**:按「类型 + 归一化关键词 + 分类 + 排序标签集合」计算签名;与已有规则或本次建议内部重复的条目标记 `duplicate=true`(前端默认不勾选且禁止导入),`apply` 时后端再次校验并跳过。
|
||||
- **应用到交易**:`POST /api/ai/rule/apply-transactions`(`applyToTransactions`)按传入规则对指定交易做**本地匹配**(不调用大模型、不外发数据),命中时覆盖分类、追加标签,必要时新建分类/标签;用于收支记录页勾选「同时应用到账单」的场景。
|
||||
- **编辑后重算去重**:规则弹窗(两处入口共用的 `AiRuleEditorTable.vue`)支持逐字段编辑;任一参与签名的字段(类型/关键词/金额区间/分类/标签)变化后防抖调用 `POST /api/ai/rule/check-duplicates`(`AiRuleServiceImpl.checkDuplicates`,纯本地复用签名逻辑)刷新 `duplicate`,并自动增删勾选。
|
||||
- **应用到交易**:`POST /api/ai/rule/apply-transactions`(`applyToTransactions`)按传入规则对指定交易做**本地匹配**(不调用大模型、不外发数据),命中时覆盖分类、追加标签,必要时新建分类/标签;用于收支记录页勾选「同时应用到账单」的场景,该开关默认开启并经 `ledgerly.transaction.aiRuleApplyToSelection` 持久化。
|
||||
|
||||
## 统计搜索
|
||||
|
||||
|
||||
+6
-1
@@ -46,7 +46,7 @@
|
||||
| `ChannelController` | `/api/channel` | 用户自定义交易渠道的增删改查 |
|
||||
| `CategoryController` | `/api/category` | 分类管理 |
|
||||
| `TagController` | `/api/tag` | 标签管理 |
|
||||
| `RuleController` | `/api/rule` | 自定义规则(列表、分页查询、增删改、启停、批量删除) |
|
||||
| `RuleController` | `/api/rule` | 自定义规则(列表、分页查询、增删改、启停、批量删除、命中账单预览与一键应用) |
|
||||
| `StatisticsController` | `/api/statistics` | 统计汇总、分类、趋势、分组 |
|
||||
| `AiController` | `/api/ai` | AI 建议、查询、智能查数、文字/图片记账、渠道/关系/规则生成、统计搜索、用量 |
|
||||
| `NotificationController` | `/api/notification` | 通知配置、渠道、发送日志 |
|
||||
@@ -77,9 +77,14 @@
|
||||
| GET / DELETE | `/api/ai/sql/history` | 查询 / 清空智能查数提问历史(`limit` 上限 200) |
|
||||
| GET | `/api/rule/page` | 分页查询规则(`keyword` / `enabled` / `type`) |
|
||||
| DELETE | `/api/rule/batch` | 批量删除规则(body `{ ids }`,返回实际删除数) |
|
||||
| DELETE | `/api/tag/batch` | 批量删除标签(body `{ ids }`,先清理交易-标签与规则-标签关联再删除,返回实际删除数) |
|
||||
| DELETE | `/api/category/batch` | 批量删除分类(body `{ ids }`,返回实际删除数) |
|
||||
| POST | `/api/rule/apply-preview` | 预览所选规则命中的历史账单及将应用的目标分类/标签(body `{ ruleIds }`,返回 `RuleApplyPreviewVO`,明细上限 500 条,纯本地匹配) |
|
||||
| POST | `/api/rule/apply` | 一键将所选规则的分类与标签应用到其命中的历史账单(分类覆盖、标签追加,返回 `RuleApplyResultVO`;纯本地匹配,不外发数据) |
|
||||
| POST | `/api/ai/rule/suggest` | 依据所选已打标签记录生成规则建议(含 `duplicate` 标记) |
|
||||
| POST | `/api/ai/rule/apply` | 批量创建规则(自动去重、按需新建分类/标签) |
|
||||
| POST | `/api/ai/rule/apply-transactions` | 按传入规则对指定交易做本地匹配并应用(命中则覆盖分类、追加标签,必要时新建;纯本地匹配,不外发数据) |
|
||||
| POST | `/api/ai/rule/check-duplicates` | 校验编辑后的规则是否与已有规则或批内其它规则重复(body `{ rules }`,返回逐条布尔标记;纯本地,不调用大模型) |
|
||||
| POST | `/api/ai/statistics` | 自然语言解析为统计面板参数 |
|
||||
| GET / PUT | `/api/setting/excluded-display-style` | 查询 / 更新「不计入统计」记录展示样式 |
|
||||
| GET / PUT | `/api/setting/show-hidden-data` | 查询 / 更新是否显示已隐藏备注的记录 |
|
||||
|
||||
@@ -107,6 +107,7 @@
|
||||
|
||||
- 分类:`name`、`type`、`icon`(Emoji)、`sort_order`。
|
||||
- 标签:`name`、`color`、`sort_order`,唯一索引 `uk_user_name (user_id, name)` 保证用户内标签名唯一。
|
||||
- 删除标签时会一并清理 `t_transaction_tag` 与 `t_rule_tag` 中的关联记录(单条与批量删除行为一致);删除分类仅移除分类本身,账单与规则上的 `category_id` 作为逻辑外键保留(账单会显示为「未分类」)。
|
||||
|
||||
### t_rule
|
||||
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
| `ledgerly.transaction.filterPrefs` | 收支列表筛选、分页、排序 | `views/TransactionList.vue` | 变量 `watch` 自动 | `onMounted` |
|
||||
| `ledgerly.transaction.aiScope` | 批量 AI 建议范围 | `views/TransactionList.vue` | 变量 `watch` 自动 | ref 初始化 |
|
||||
| `ledgerly.transaction.aiRecordTab` | AI 记账方式(文字/图片) | `views/TransactionList.vue` | 变量 `watch` 自动 | ref 初始化 |
|
||||
| `ledgerly.transaction.aiRuleApplyToSelection` | AI 生成规则时是否同时应用到勾选账单(`true`/`false`,默认 `true`) | `components/AiRuleSuggestModal.vue` | `useStringPreference` 自动 | 弹窗初始化 |
|
||||
| `ledgerly.transaction.aiQueryHistory` | AI 自然语言查询历史 | `views/TransactionList.vue` / `components/AiQueryWindow.vue` | 提交查询时 | 浮窗聚焦时 |
|
||||
| `ledgerly.dashboard.aiSearchHistory` | 统计面板 AI 查询历史 | `views/Dashboard.vue` | 提交 AI 搜索时 | 浮窗聚焦时 |
|
||||
| `ledgerly.transaction.aiQueryWindow` | 收支记录 AI 查询浮窗位置与尺寸 | `components/FloatingPanel.vue` | 拖拽/缩放结束时 | 浮窗初始化 |
|
||||
|
||||
+11
-1
@@ -29,6 +29,7 @@
|
||||
| 账单解析预览 | 展示命中的规则名与建议分类/标签 |
|
||||
| 账单确认导入 | 规则建议分类优先于面板默认分类;标签与默认标签合并去重 |
|
||||
| 新建/编辑记录 | 不自动应用,但可借助 AI 推荐 |
|
||||
| 规则管理页「应用」 | 手动把规则应用到命中的历史账单(先预览确认;分类覆盖、标签追加) |
|
||||
|
||||
## 列表查询与分页
|
||||
|
||||
@@ -36,6 +37,14 @@
|
||||
- `GET /api/rule/page`:分页查询,支持 `keyword`(匹配规则名称或关键词)、`enabled`、`type` 筛选,返回 `PageResult<RuleVO>`。
|
||||
- `DELETE /api/rule/batch`:批量删除(body `{ ids }`);先按 `userId` 过滤归属,清理规则-标签关联后删除,返回实际删除数。
|
||||
|
||||
## 一键应用到匹配账单
|
||||
|
||||
规则默认只在导入时生效,不会改写历史账单;`RuleService.previewApply` / `applyToMatchedTransactions` 支持把规则手动应用到**历史账单**(前端规则管理页的行内「应用」/ 勾选后的「应用匹配账单」):
|
||||
|
||||
- `POST /api/rule/apply-preview`(`previewApply`):校验规则归属后加载当前用户**全部交易**,按规则条件(类型 + 关键词 + 金额区间;关键词匹配备注、忽略大小写)逐条匹配;**分类**取所选规则中优先级最高(`sort_order` 最小)且类型一致者,**标签**取所有命中规则标签的并集。返回命中明细 `RuleMatchedTransactionVO`(含当前分类/标签与目标分类/标签)与统计 `RuleApplyPreviewVO`(命中数、将改分类数、将加标签数、是否截断)。明细最多 500 条(`PREVIEW_MAX_ROWS`),超出置 `truncated`,统计仍按全部命中计算。
|
||||
- `POST /api/rule/apply`(`applyToMatchedTransactions`):复用同一匹配逻辑,**分类覆盖写入**(仅类型一致时)、**标签仅追加缺失项**(不删除已有标签),返回 `RuleApplyResultVO`(命中/变更/新增标签数),幂等。
|
||||
- 入参 DTO `RuleApplyRequest`(`ruleIds`,非空);均为**纯本地匹配**,不调用大模型;**不限规则是否启用**(停用规则也可手动应用)。
|
||||
|
||||
## AI 生成规则
|
||||
|
||||
`AiRuleServiceImpl` 提供两个入口:规则管理页(生成 + 创建)与收支记录页批量操作(生成 + 可选应用到账单)。
|
||||
@@ -43,7 +52,8 @@
|
||||
- 生成建议(`suggest`,`POST /api/ai/rule/suggest`):依据用户勾选的记录生成规则建议;规则管理页限定**已打标签记录**,收支记录页为**任意勾选账单**。输入字段为记录的类型、备注、交易渠道、已有分类与标签(不含金额与原始账单数据),并按「类型 + 备注 + 渠道 + 标签」组合去重。
|
||||
- 创建规则(`apply`,`POST /api/ai/rule/apply`):输出规则经 `RuleService.create` 落库,必要时新建分类/标签,规则默认启用。
|
||||
- 应用到交易(`applyToTransactions`,`POST /api/ai/rule/apply-transactions`):**纯本地匹配、不调用大模型**,按规则的类型/关键词/金额条件匹配指定交易,命中则聚合分类与标签,委托 `AiSuggestionService.apply` 落库(覆盖分类、追加标签,必要时新建)。
|
||||
- **去重**:以「类型 + 归一化关键词 + 分类 + 排序标签集合」为签名;与已有规则或同批已创建规则重复时跳过(`apply` 返回实际创建数),建议阶段则标记 `duplicate` 供前端禁止勾选。
|
||||
- 去重校验(`checkDuplicates`,`POST /api/ai/rule/check-duplicates`):**纯本地、不调用大模型**,复用同一签名逻辑,对**编辑后的规则**逐条返回是否重复(与已有规则签名一致或批内先前规则重复),入参 DTO `AiRuleDuplicateCheckRequest`(复用 `AiRuleApplyRequest.Item`)。前端规则弹窗编辑任一字段后防抖(约 300ms)调用它刷新 `duplicate` 标记。
|
||||
- **去重签名**:以「类型 + 归一化关键词 + 分类 + 排序标签集合」为签名;与已有规则或同批已创建规则重复时跳过(`apply` 返回实际创建数),建议阶段与编辑重算阶段则标记 `duplicate`;前端重复项默认不勾选且禁止勾选,编辑后重算时「重复→不重复」自动勾选、「不重复→重复」自动取消并禁用。
|
||||
|
||||
## 校验
|
||||
|
||||
|
||||
Reference in New Issue
Block a user