feat: 账单关系(父子/同级)与关系图,AI 生成关系名称备注
- 新增 t_transaction_group、t_transaction_group_item 两张表(MySQL 与 SQLite 双脚本) - 后端新增关系组实体/枚举/Mapper/DTO/VO/Service/Controller:按账单查询、创建、更新、删除;校验同类型唯一、父子角色与成员归属;删除账单时级联清理(组不足或父子组失去父账单则整组移除);分页填充 relationGroupCount - 前端收支记录新增「关系」列与详情弹窗(基本信息、标签、账单关系、来源图片、原始数据) - 新增关系图(自定义 SVG 渲染):圆形节点、按收支红/绿着色、父子/同级连线带箭头与「关联」标签、当前账单高亮,成员较多时自动换行 - 关系编辑弹窗支持新建/编辑/删除、分页选择关联账单、AI 生成名称与备注、关系名称历史下拉(按类型过滤、聚焦即显示)、关系类型偏好记忆(localStorage) - 支持勾选账单批量建立关系,并新增批量选择模式(默认不显示多选列) - 新增 AI 关系能力:AiCallType.RELATION、AiRelationService 与提示词模板 ai-relation-system(含借贷场景),接口 POST /api/ai/relation - 新增 /api/transaction/group/* 接口与关系名称历史接口 - 补充中英日三语文案
This commit is contained in:
@@ -369,6 +369,8 @@ export default {
|
||||
amountAsc: { zh: '金额(低→高)', en: 'Amount (Low to High)', ja: '金額(低い順)' },
|
||||
},
|
||||
batchSet: { zh: '一键设置', en: 'Batch Set', ja: '一括設定' },
|
||||
batchMode: { zh: '批量操作', en: 'Batch', ja: '一括操作' },
|
||||
exitBatchMode: { zh: '退出批量', en: 'Exit Batch', ja: '一括終了' },
|
||||
importBill: { zh: '导入账单', en: 'Import Bill', ja: '明細をインポート' },
|
||||
exportExcel: { zh: '导出 Excel', en: 'Export Excel', ja: 'Excel をエクスポート' },
|
||||
addRecord: { zh: '新增记录', en: 'Add Record', ja: '記録を追加' },
|
||||
@@ -462,6 +464,49 @@ export default {
|
||||
yes: { zh: '计入', en: 'Included', ja: '含める' },
|
||||
no: { zh: '不计入', en: 'Excluded', ja: '含めない' },
|
||||
},
|
||||
relation: {
|
||||
column: { zh: '关系', en: 'Relation', ja: '関連' },
|
||||
viewCount: { zh: '{count} 个关系', en: '{count} relation(s)', ja: '{count} 件の関連' },
|
||||
none: { zh: '-', en: '-', ja: '-' },
|
||||
createFromSelection: { zh: '建立关系', en: 'Create Relation', ja: '関連を作成' },
|
||||
selectAtLeastTwo: { zh: '请至少勾选两条账单', en: 'Please select at least two bills', ja: '明細を2件以上選択してください' },
|
||||
title: { zh: '账单关系', en: 'Bill Relations', ja: '明細の関連' },
|
||||
create: { zh: '新建关系', en: 'New Relation', ja: '関連を作成' },
|
||||
createTitle: { zh: '新建账单关系', en: 'New Bill Relation', ja: '明細の関連を作成' },
|
||||
editTitle: { zh: '编辑账单关系', en: 'Edit Bill Relation', ja: '明細の関連を編集' },
|
||||
empty: { zh: '暂无关联账单', en: 'No related bills', ja: '関連する明細はありません' },
|
||||
type: { zh: '关系类型', en: 'Relation Type', ja: '関連タイプ' },
|
||||
typeParentChild: { zh: '父子关系', en: 'Parent-Child', ja: '親子関係' },
|
||||
typeSibling: { zh: '同级关系', en: 'Sibling', ja: '同級関係' },
|
||||
name: { zh: '关系名称', en: 'Relation Name', ja: '関連名' },
|
||||
namePlaceholder: { zh: '可选,如「交通卡充值」', en: 'Optional, e.g. "Transit card top-up"', ja: '任意(例:交通カードのチャージ)' },
|
||||
remark: { zh: '备注', en: 'Remark', ja: '備考' },
|
||||
members: { zh: '关联账单', en: 'Related Bills', ja: '関連する明細' },
|
||||
addMember: { zh: '添加账单', en: 'Add Bill', ja: '明細を追加' },
|
||||
pickTitle: { zh: '选择关联账单', en: 'Select Bills', ja: '明細を選択' },
|
||||
roleParent: { zh: '父账单', en: 'Parent', ja: '親' },
|
||||
roleChild: { zh: '子账单', en: 'Child', ja: '子' },
|
||||
roleMember: { zh: '成员', en: 'Member', ja: 'メンバー' },
|
||||
edgeLabel: { zh: '关联', en: 'Linked', ja: '関連' },
|
||||
minTwo: { zh: '关系组至少包含两条账单', en: 'A relation group needs at least two bills', ja: '関連グループには最低2件の明細が必要です' },
|
||||
needParent: { zh: '请指定一条父账单', en: 'Please select one parent bill', ja: '親の明細を1件指定してください' },
|
||||
deleteConfirm: { zh: '确定删除该关系组?仅解除关联,不会删除账单', en: 'Delete this relation group? Only the relation is removed, not the bills', ja: 'この関連グループを削除しますか?明細は削除されません' },
|
||||
saveFailed: { zh: '保存账单关系失败', en: 'Failed to save the relation', ja: '関連の保存に失敗しました' },
|
||||
loadFailed: { zh: '加载账单关系失败', en: 'Failed to load relations', ja: '関連の読み込みに失敗しました' },
|
||||
deleteFailed: { zh: '删除账单关系失败', en: 'Failed to delete the relation', ja: '関連の削除に失敗しました' },
|
||||
},
|
||||
detail: {
|
||||
button: { zh: '详情', en: 'Details', ja: '詳細' },
|
||||
title: { zh: '账单详情', en: 'Bill Details', ja: '明細の詳細' },
|
||||
basicInfo: { zh: '基本信息', en: 'Basic Info', ja: '基本情報' },
|
||||
relations: { zh: '账单关系', en: 'Bill Relations', ja: '明細の関連' },
|
||||
images: { zh: '来源图片', en: 'Source Images', ja: '元の画像' },
|
||||
rawData: { zh: '原始数据', en: 'Raw Data', ja: '元データ' },
|
||||
createdAt: { zh: '创建时间', en: 'Created', ja: '作成日時' },
|
||||
noTags: { zh: '无标签', en: 'No tags', ja: 'タグなし' },
|
||||
noImages: { zh: '无来源图片', en: 'No source images', ja: '元の画像はありません' },
|
||||
noRawData: { zh: '无原始数据', en: 'No raw data', ja: '元データはありません' },
|
||||
},
|
||||
},
|
||||
|
||||
// 分类管理
|
||||
@@ -735,6 +780,11 @@ export default {
|
||||
needInfo: { zh: '请先填写备注或金额,便于生成标签', en: 'Please fill in a remark or amount first', ja: 'タグ生成のため、先に備考または金額を入力してください' },
|
||||
failed: { zh: 'AI 生成标签失败', en: 'Failed to generate tag', ja: 'AI によるタグ生成に失敗しました' },
|
||||
},
|
||||
relation: {
|
||||
button: { zh: 'AI 生成', en: 'AI Generate', ja: 'AI 生成' },
|
||||
needMembers: { zh: '请先选择至少两条关联账单', en: 'Please select at least two related bills first', ja: '関連する明細を2件以上選択してください' },
|
||||
failed: { zh: 'AI 未能生成关系名称,请重试', en: 'AI failed to generate a relation name', ja: 'AI が関連名を生成できませんでした' },
|
||||
},
|
||||
query: {
|
||||
placeholder: { zh: '用自然语言查询,如:上个月餐饮花了多少', en: 'Ask in natural language, e.g. dining expenses last month', ja: '自然言語で検索(例:先月の食費はいくら)' },
|
||||
examples: { zh: '上个月餐饮|超过500的支出|待报销的支出|微信支付', en: 'Dining last month|Expenses over 500|Pending reimbursement|Paid by WeChat', ja: '先月の食費|500を超える支出|精算待ちの支出|WeChat 払い' },
|
||||
@@ -830,7 +880,15 @@ export default {
|
||||
suggest: { zh: '生成建议', en: 'Suggest', ja: '提案生成' },
|
||||
decorate: { zh: '图标配色', en: 'Icon & Color', ja: 'アイコンと配色' },
|
||||
category: { zh: '生成分类', en: 'Category', ja: 'カテゴリ生成' },
|
||||
tag: { zh: '生成标签', en: 'Tag', ja: 'タグ生成' },
|
||||
channel: { zh: '生成渠道', en: 'Channel', ja: 'チャネル生成' },
|
||||
test: { zh: '测试连接', en: 'Test', ja: '接続テスト' },
|
||||
query: { zh: '智能查询', en: 'Query', ja: 'スマート検索' },
|
||||
record: { zh: '智能记账', en: 'Record', ja: 'スマート記帳' },
|
||||
record_image: { zh: '图片记账', en: 'Image Record', ja: '画像記帳' },
|
||||
rule: { zh: '生成规则', en: 'Rule', ja: 'ルール生成' },
|
||||
statistics: { zh: '统计搜索', en: 'Statistics', ja: '統計検索' },
|
||||
relation: { zh: '生成关系', en: 'Relation', ja: '関連生成' },
|
||||
},
|
||||
column: {
|
||||
time: { zh: '时间', en: 'Time', ja: '日時' },
|
||||
|
||||
Reference in New Issue
Block a user