index.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import type { RuleItem } from "async-validator";
  2. import type { FormInstance } from "../form/Form.vue";
  3. import type { FieldProps } from "../form/Field.vue";
  4. import type { Ref } from "vue";
  5. export interface FormDefine {
  6. /**
  7. * Todo: page
  8. */
  9. type?: 'flat'|'page'|'group',
  10. props?: any;
  11. /**
  12. * 表单属性嵌套类型
  13. * * flat: 扁平属性,直接在表单对象上定义属性
  14. * * nest: 嵌套属性,属性值为对象,对象下有子属性
  15. * * array: 数组属性,属性值为数组,数组下有子属性
  16. */
  17. propNestType?: 'flat'|'nest'|'array',
  18. /**
  19. * 子条目定义
  20. */
  21. items: FormDefineItem[];
  22. }
  23. /**
  24. * 表单动态属性定义
  25. */
  26. export declare type IFormItemCallback<T> = {
  27. /**
  28. * 预留,暂未使用
  29. */
  30. type?: string;
  31. /**
  32. * @param model 当前表单条目的值
  33. * @param rawModel 整个 form 的值 (最常用,当两个关联组件距离较远时,可以从顶层的 rawModel 里获取)
  34. * @param parentModel 父表单元素的值 (上一级的值,只在列表场景的使用,例如列表某个元素的父级就是整个 item)
  35. * @param item 当前表单条目信息
  36. */
  37. callback: (model: any, rawModel: any, parentModel: any, params: {
  38. formGlobalParams: any,
  39. item: FormDefineItem
  40. }) => T;
  41. };
  42. export type IFormItemCallbackAdditionalProps<T> = { [P in keyof T]?: T[P]|IFormItemCallback<T[P]> }
  43. /**
  44. * 表单动态组件属性定义
  45. */
  46. export interface FormItemComponentAdditionalDefine {
  47. /**
  48. * 组件名称
  49. */
  50. name: string,
  51. /**
  52. * 是否需要显示右侧箭头
  53. */
  54. needArrow?: boolean,
  55. /**
  56. * 传递给表单条目的参数
  57. */
  58. itemProps?: FieldProps,
  59. /**
  60. * 传递给组件的参数
  61. */
  62. props?: Record<string, unknown>|unknown,
  63. }
  64. export interface FormDefineItem {
  65. /**
  66. * 表单项显示标签
  67. */
  68. label?: string|IFormItemCallback<string>;
  69. /**
  70. * 属性名称
  71. */
  72. name: string;
  73. fullName?: string;
  74. /**
  75. * 表单项组件类型
  76. */
  77. type?: string;
  78. /**
  79. * 传递给条目组件的参数。(允许动态回调)
  80. */
  81. params?: Record<string, unknown|IFormItemCallback<unknown>>|unknown;
  82. /**
  83. * 传递给FormItem组件的参数
  84. */
  85. itemParams?: any;
  86. /**
  87. * 默认值,用于默认数据生成
  88. */
  89. defaultValue?: any;
  90. /**
  91. * 当前条目的校验规则
  92. */
  93. rules?: RuleItem[],
  94. /**
  95. * 子条目,在对象中为对象子属性,在数组中为数组条目(单条目按单项控制,多条目按对象看待控制)
  96. */
  97. children?: FormDefine,
  98. //todo:联动
  99. /**
  100. * 是否显示。当为undefined时,默认显示。
  101. */
  102. show?: boolean|IFormItemCallback<boolean>|undefined,
  103. /**
  104. * 当前条目组件加载时发生事件
  105. * @param topModel 顶层数据对象
  106. * @param ref 组件实例
  107. * @returns
  108. */
  109. onMounted?: (topModel: any, ref: any) => void;
  110. /**
  111. * 当前条目组件卸载时发生事件
  112. * @param topModel 顶层数据对象
  113. * @param ref 组件实例
  114. * @returns
  115. */
  116. onBeforeUnMount?: (topModel: any, ref: any) => void;
  117. /**
  118. * 当前条目数据更改时发生事件
  119. * @param oldValue 旧值
  120. * @param newValue 新值
  121. * @param topModel 顶层数据对象
  122. * @param ref 组件实例
  123. * @returns
  124. */
  125. onChange?: (oldValue: any, newValue: any, topModel: any, ref: any) => void;
  126. }
  127. export interface FormExport {
  128. /**
  129. * 初始化表单数据对象
  130. */
  131. initFormData(data: () => any): void;
  132. /**
  133. * 获取表单数据模型
  134. * @returns 表单数据模型
  135. */
  136. getFormModel(): Ref<Record<string, any>>;
  137. /**
  138. * 获取表单实例
  139. * @returns 表单实例
  140. */
  141. getFormRef(): FormInstance;
  142. /**
  143. * 获取表单数据
  144. * @returns 表单数据
  145. */
  146. getFormData(): Record<string, any>;
  147. /**
  148. * 加载表单数据
  149. * @param value 表单数据
  150. */
  151. loadFormData(value?: Record<string, any>): void;
  152. /**
  153. * 提交表单
  154. */
  155. submitForm<T = Record<string, any>>(): Promise<T|null>;
  156. /**
  157. * 重置整个表单数据
  158. */
  159. resetForm(): void;
  160. }