注入
TSXinject
1import {
2 ChangeLogService,
3 ContainerRegistryManager,
4 Inject,
5 Service,
6} from "@quan-erp/shared-backend-core";
7
8@Service()
9export class MyPluginService {
10 @Inject(ChangeLogService, ContainerRegistryManager.BUILTIN_PLUGIN)
11 private changeLogService: ChangeLogService;
12}引用键
每条记录由三个字段限定范围。
- pluginName — 通常为 metadata.name
- referencePrefix — 实体类型(如 "SO"、"currency")
- referenceNumber — 记录 id / 编号(字符串)
写入方法
- addChangeLog(params) — 写入一条;replyToId 用于回复;passive: true 可通知父条目作者
- addChangeLogs(params) — 批量写入
- ChangeLogDto — message、pluginName、referencePrefix、referenceNumber 必填
TSXaddChangeLog
1import {
2 ChangeLogService,
3 ContainerRegistryManager,
4 Inject,
5 Service,
6} from "@quan-erp/shared-backend-core";
7import metadata from "../../module.metadata.json" with { type: "json" };
8
9@Service()
10export class OrderChangeLogService {
11 @Inject(ChangeLogService, ContainerRegistryManager.BUILTIN_PLUGIN)
12 private changeLogService: ChangeLogService;
13
14 async onCreated(orderId: number, userId?: number) {
15 await this.changeLogService.addChangeLog({
16 data: {
17 pluginName: metadata.name,
18 referencePrefix: "SO",
19 referenceNumber: String(orderId),
20 message: `Sales order #${orderId} created.`,
21 isCreatedBySystem: !userId,
22 createdBy: userId,
23 metadata: { action: "create" },
24 },
25 });
26 }
27}读取方法
- getChangeLogs({ pluginName, referencePrefix, referenceNumber, parentId?, skip, limit }) — 分页动态
- 不传 parentId → 根条目;传 parentId → 该条目下的回复
- 含 reactions 与 replyCount
TSXgetChangeLogs
1import {
2 ChangeLogService,
3 ContainerRegistryManager,
4 Inject,
5 Service,
6} from "@quan-erp/shared-backend-core";
7import metadata from "../../module.metadata.json" with { type: "json" };
8
9@Service()
10export class OrderChangeLogService {
11 @Inject(ChangeLogService, ContainerRegistryManager.BUILTIN_PLUGIN)
12 private changeLogService: ChangeLogService;
13
14 async list(orderId: number) {
15 return this.changeLogService.getChangeLogs({
16 pluginName: metadata.name,
17 referencePrefix: "SO",
18 referenceNumber: String(orderId),
19 skip: 0,
20 limit: 20,
21 });
22 }
23}反应方法
- addReaction(params) — 添加反应
- removeReaction({ id, removeByUserId }) — 移除当前用户的反应
前端
详情页优先使用 base-frontend 的 ChangeLog 组件与 hooks。