config-util.d.ts 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. declare module '@cip/utils/config-util'{
  2. interface IAnyObject{
  3. [propname: string]: any
  4. }
  5. type TChangeConfig = (config: IRenderConfig, values: IAnyObject, outValues: IAnyObject)=> IRenderConfig
  6. type TChangeValue = (values: IAnyObject, outValues: IAnyObject) => { value: any, otherValue: any } | void
  7. type TChangeValueByOld = ({key,oldValue}:{key:string,oldValue: any},values: IAnyObject, outValues: IAnyObject) => { value: any, otherValue: any } | void
  8. type TInsert = {before: string, after?: string} | { before?: string, after: string }
  9. interface IRenderConfigDependOnEffect {
  10. changeValue: boolean | TChangeValue
  11. changeConfig: boolean | TChangeConfig
  12. }
  13. interface IRenderConfigDependOn {
  14. key: string
  15. effect?: IRenderConfigDependOnEffect
  16. }
  17. // base
  18. interface IRenderConfig{
  19. sourceKey?: string,
  20. realKey?: string,
  21. /**
  22. * 组件类型
  23. */
  24. type?: string
  25. /**
  26. * 表单项label文案展示
  27. */
  28. label?: string
  29. /**
  30. * 表单项宽度
  31. */
  32. width?: number | string
  33. /**
  34. * 当前表单项的依赖项(依赖项为当前表单的其他表单key),配置后,可在依赖项发生改变时,修改当前表单项的值或配置。
  35. * 修改配置 - {@link changeConfig};
  36. * 修改值 - {@link changeValue};
  37. */
  38. dependOn?: Array<string|IRenderConfigDependOn>
  39. /**
  40. * 当前表单项的另一个key,在部分表单组件会抛出另一个值,抛出的值会被当前配置的otherKey接收
  41. */
  42. otherKey?: string | Array<string>
  43. /**
  44. * 当前表单项是否可编辑
  45. */
  46. writable?: boolean
  47. /**
  48. * 当前表单项是否可读
  49. */
  50. readable?: boolean
  51. /**
  52. * 是否可禁用当前表单项
  53. */
  54. disabled?: boolean
  55. importDisabled?: boolean
  56. /**
  57. * 修改当前表单项的配置,受{@link dependOn} 配置影响,会在dependOn的值发生修改时触发
  58. * @param {IRenderConfig} config - 当前表单项的配置
  59. * @param {IAnyObject} values - dependOn配置的依赖项的值组成的对象
  60. * @param {IAnyObject} outValues
  61. * @description 需要返回修改后的config,才能触发修改对当前表单项的配置
  62. * @renturn config
  63. */
  64. changeConfig?: TChangeConfig
  65. /**
  66. * 修改当前表单项的配置,受{@link dependOn} 配置影响,会在dependOn的值发生修改时触发
  67. * @param {IAnyObject} values - dependOn配置的依赖项的值组成的对象
  68. * @param {IAnyObject} outValues
  69. * @description 返回undefined将忽略本次对当前表单项更新值的操作,返回{value: any, otherValue: any}会对当前表单项的值进行修改
  70. * @return undefined | {value: any, otherValue: any}
  71. */
  72. changeValue?: TChangeValue
  73. immediateChangeValue?: boolean
  74. changeValueByOld?: TChangeValueByOld
  75. changeEffect?: (value: any, key: string, model: IAnyObject) => Promise<any>
  76. insert?: TInsert
  77. }
  78. // table特有
  79. interface ITableRenderConfig {
  80. /**
  81. * 超出宽度后是否展示tooltip
  82. */
  83. showOverflowTooltip?: boolean
  84. dynamic?: boolean // dependOn是否生效
  85. fixed?: boolean | 'left' | 'right'
  86. /**
  87. * 当前表单项最小宽度
  88. */
  89. minWidth?: string
  90. }
  91. interface IBaseFormRenderConfig{
  92. /**
  93. * 当前表单项占用的栅格数
  94. */
  95. span?: number // form search-form特供
  96. labelWidth?: string /// / form search-form特供
  97. labelStyle?: IAnyObject,
  98. itemStyle?: IAnyObject
  99. }
  100. interface IFormRenderConfig{
  101. /**
  102. * 当前表单项是否必填
  103. */
  104. required?: boolean // form 特供
  105. requiredErrorMessage?: string
  106. triggerType?: 'input' // 文字提示 请输入 | 请选择
  107. requiredType?: 'blur'|'change'
  108. validateValue?: 'email' | 'identityCard' | 'mobilePhone'
  109. regexpValidate?: string
  110. validateExistRemote?: (value:any, dependOnValues: IAnyObject) => Promise<{data: boolean}>
  111. validateExistRemoteErrorMessage?: string
  112. }
  113. interface ISearchRenderConfig {
  114. immediateSearch?: boolean // 变更时立即触发搜索
  115. autoSelect?: boolean // options组件
  116. }
  117. interface IEntityConfig {
  118. type?: any
  119. field?: string
  120. _renderConfig?: IRenderConfig
  121. }
  122. interface IFormConfig {
  123. key: string
  124. config: IRenderConfig
  125. }
  126. type IFieldConfig = Record<string, IRenderConfig>
  127. type IFormFieldConfig = Record<string, IRenderConfig & IBaseFormRenderConfig & IFormRenderConfig>
  128. type ISearchFieldConfig = Record<string, IRenderConfig & IBaseFormRenderConfig & ISearchRenderConfig>
  129. type ITableFieldConfig = Record<string, IRenderConfig & ITableRenderConfig>
  130. function defineFieldConfig (fieldConfig: IFormFieldConfig):IFormFieldConfig
  131. function defineFormFieldConfig (formFieldConfig: IFormFieldConfig): IFormFieldConfig
  132. function defineTableFieldConfig (tableFieldConfig: ITableFieldConfig): ITableFieldConfig
  133. function defineSearchFieldConfig (searchFieldConfig: ISearchFieldConfig): ISearchFieldConfig
  134. function configMapToList (configMap: IFieldConfig): IFormConfig[]
  135. function mergeFieldConfig (configMap: IFieldConfig, ...source: Array<Record<string,IEntityConfig>|IFieldConfig>): IFieldConfig
  136. function generateFieldList (configMap: IFieldConfig, ...source: Array<Record<string,IEntityConfig>|IFieldConfig>): IFormConfig[]
  137. function insertFieldConfigToList (target: IFormConfig[], source: IFormConfig[]): IFormConfig[]
  138. export {
  139. defineFieldConfig,
  140. defineFormFieldConfig,
  141. defineTableFieldConfig,
  142. defineSearchFieldConfig,
  143. insertFieldConfigToList,
  144. configMapToList,
  145. mergeFieldConfig,
  146. generateFieldList
  147. }
  148. }