演示

DeveloperConfigService

按 pluginName + key 管理的系统级开发者/管理配置。公开与私有 API 分开;没有通用的 get(pluginName, key)。

注入

TSXinject
1import { 2 ContainerRegistryManager, 3 DeveloperConfigService, 4 Inject, 5 Service, 6} from "@quan-erp/shared-backend-core"; 7 8@Service() 9export class MyPluginService { 10 @Inject(DeveloperConfigService, ContainerRegistryManager.BUILTIN_PLUGIN) 11 private developerConfigService: DeveloperConfigService; 12}

写入 / 删除

set 按 (key, pluginName) upsert。密钥用 private: true;需要加密存储时设 encrypt: true。

  • set(props) — 写入一项或多项配置
  • remove(key, pluginName) — 删除并失效缓存
  • authorizeDeveloper(password) — 校验开发者配置密码(未设置时返回 true)
TSXset
1import { 2 ContainerRegistryManager, 3 DeveloperConfigService, 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 PluginDevConfigService { 11 @Inject(DeveloperConfigService, ContainerRegistryManager.BUILTIN_PLUGIN) 12 private developerConfigService: DeveloperConfigService; 13 14 async enableFeatureFlag() { 15 await this.developerConfigService.set({ 16 data: { 17 key: "feature.newCheckout", 18 value: true, 19 pluginName: metadata.name, 20 datatype: "boolean", 21 displayName: "New checkout", 22 private: false, 23 }, 24 }); 25 } 26}

读取方法

  • getPublicConfigByKeyAndPlugin(pluginName, key, option?) — 公开配置
  • getPrivateConfig(pluginName, key, option?) — 私有配置;option.decrypt?
  • getAllPublicConfigs(skip, limit) — 公开配置分页列表
TSXread
1import { 2 ContainerRegistryManager, 3 DeveloperConfigService, 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 PluginDevConfigService { 11 @Inject(DeveloperConfigService, ContainerRegistryManager.BUILTIN_PLUGIN) 12 private developerConfigService: DeveloperConfigService; 13 14 async isNewCheckoutEnabled() { 15 const row = await this.developerConfigService.getPublicConfigByKeyAndPlugin( 16 metadata.name, 17 "feature.newCheckout" 18 ); 19 return Boolean(row?.value); 20 } 21 22 async apiSecret() { 23 return this.developerConfigService.getPrivateConfig( 24 metadata.name, 25 "integrations.apiSecret", 26 { decrypt: true } 27 ); 28 } 29}