演示

ChangeLogService

按业务引用(plugin + prefix + number)记录活动——创建、更新、回复与反应。优先使用本服务,不要自建插件内审计流。

注入

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。