back-app-configuration.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. public interface IAppRuntimeFilter {
  2. // APP端专用策略属性, 可判定Vue-Store上所有支持的属性及子属性
  3. // AppConfigNode.content中任何数组属性或者数组子属性及后代属性,都支持implement该接口
  4. // 后台可以将此属性赋值到配置内容的相应属性,让前端自行筛选(这样可以减少API输出差异);
  5. // 也可以自行筛选将最终结果返回给不同用户(这样可以减少传输量),推荐前者。
  6. public string[] satisfyStoreGetters;
  7. public bool satisfyAny;
  8. }
  9. /// 可以定制具体的配置文件类
  10. public class AppConfigNode<out T> {
  11. // 对应APP配置模块中要替换的配置结点Key
  12. public string key;
  13. // 配置内容,任意内容
  14. public T content;
  15. }
  16. /// 也可以模糊处理
  17. public class AppConfigNode: AppConfigNode<object> {
  18. }
  19. /// 此接口用来生成最终配置文件
  20. public interface IAppConfigProvider {
  21. List<AppConfigNode> get(); // 获取正常开启的配置项
  22. Dictionary<string, object> output(); // 最终输出结果
  23. }
  24. /// Table - top entry
  25. public class AppConfigStrategy {
  26. public string key; // 要替换的app config key
  27. public string desc; // 配置说明,方便UI展示示意
  28. // 控制策略
  29. public bool disabled; // 禁用,总开关
  30. public string minVersion; // 最低启用版本,不填不限
  31. public string maxVersion; // 最高启用版本,不填不限
  32. public string[] osTypes; // 操作系统,不填不限
  33. public string[] roles; // 角色,不填不限
  34. public string[] periods; // 学阶,不填不限
  35. // 自定义策略
  36. public string[] customStrategies; // 可能需要更复杂的判定逻辑,比如要取某些业务表才能决定
  37. }
  38. [key:'indexElectiveBlocks','desc':'大数据选科模块']
  39. /// Table - config dynamic content
  40. public class AppConfigContent {
  41. public string scope; // parent key
  42. public EnumScopeType scopeType; // type builder
  43. public string desc; // 配置说明,方便UI展示示意
  44. public string itemKey; // map to AppConfigContentItem.key, 没有则直接作用于scope
  45. public string alias; // 别名,用于填充配置时使用,没有则使用itemKey,用于适配同名属性
  46. public string value; // single、multiple时可能要保存选择结果;或者直接填写值
  47. public string customValueFormatter; // 装配配置时的自定义格式转换器
  48. public long refPermissionId; // 菜单或者按钮权限ID
  49. }
  50. [scope:'indexElectiveBlocks.0.dataList.0',itemKey: 'satisfyStoreGetters',
  51. customValueFormatter: customFilterFormatter--ImplementByJava,
  52. refPermissionId: 直接填写菜单或者按钮权限ID]
  53. /// Table - content value shared item pool
  54. public class AppConfigContentItem {
  55. public string key;
  56. public string desc; // 配置说明,方便UI展示示意
  57. public string options; // 配置选项,供于前端选择
  58. public string customOptionsLoader; // 自定义选科加载类,解决固定配置无法完成的部分
  59. public EnumAppConfigOptionType enumOptionType; // 选项使用类型
  60. }
  61. [key:'satisfyStoreGetters', options:['isFrontStudent','isIOS','isMaster']]
  62. public enum EnumScopeType {
  63. none = 0,
  64. obj = 1,
  65. array = 2
  66. }
  67. public enum EnumAppConfigOptionType {
  68. copy = 0, // 直接复制选项值,不需要用户选择
  69. single = 1, // 需要用户选择,单选
  70. multiple = 2, // 需要用户选择,多选
  71. }
  72. public class AppConfigCustomStrategyContext {
  73. public List<ConfigCustomStrategy> strategies;
  74. public ConfigCustomStrategy current;
  75. }
  76. /// 此接口主要用来决策要不要启用某个key的配置替换
  77. public interface IAppConfigCustomStrategy {
  78. bool satisfy(AppConfigCustomStrategyContext context)
  79. }
  80. public class CustomOptionsLoaderContext: AppConfigCustomStrategyContext {
  81. public AppConfigContentItem Item;
  82. }
  83. /// 此接口用来加载配置值的动态选项
  84. public interface ICustomOptionsLoader {
  85. void load(CustomOptionsLoaderContext context)
  86. }
  87. public class CustomValueFormatterContext: AppConfigCustomStrategyContext {
  88. public AppConfigContent content;
  89. }
  90. /// 此接口用来做配置值的输出转换
  91. public interface ICustomValueFormatter {
  92. void format(CustomValueFormatterContext context)
  93. }