AdvancedForm.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <PageWrapper title="可折叠表单示例">
  3. <CollapseContainer title="基础收缩示例">
  4. <BasicForm @register="register" />
  5. </CollapseContainer>
  6. <CollapseContainer title="超过3行自动收起,折叠时保留2行" class="mt-4">
  7. <BasicForm @register="register1" @advanced-change="onAdvancedChange" />
  8. </CollapseContainer>
  9. </PageWrapper>
  10. </template>
  11. <script lang="ts" setup>
  12. import { BasicForm, FormSchema, useForm } from '@/components/Form';
  13. import { CollapseContainer } from '@/components/Container';
  14. import { PageWrapper } from '@/components/Page';
  15. const getSchamas = (): FormSchema[] => {
  16. return [
  17. {
  18. field: 'field1',
  19. component: 'Input',
  20. label: '字段1',
  21. colProps: {
  22. span: 8,
  23. },
  24. componentProps: {
  25. placeholder: '自定义placeholder',
  26. onChange: (e: any) => {
  27. console.log(e);
  28. },
  29. },
  30. },
  31. {
  32. field: 'field2',
  33. component: 'Input',
  34. label: '字段2',
  35. colProps: {
  36. span: 8,
  37. },
  38. },
  39. {
  40. field: 'field3',
  41. component: 'DatePicker',
  42. label: '字段3',
  43. colProps: {
  44. span: 8,
  45. },
  46. },
  47. {
  48. field: 'field4',
  49. component: 'Select',
  50. label: '字段4',
  51. colProps: {
  52. span: 8,
  53. },
  54. componentProps: {
  55. options: [
  56. {
  57. label: '选项1',
  58. value: '1',
  59. key: '1',
  60. },
  61. {
  62. label: '选项2',
  63. value: '2',
  64. key: '2',
  65. },
  66. ],
  67. },
  68. },
  69. {
  70. field: 'field5',
  71. component: 'CheckboxGroup',
  72. label: '字段5',
  73. colProps: {
  74. span: 8,
  75. },
  76. componentProps: {
  77. options: [
  78. {
  79. label: '选项1',
  80. value: '1',
  81. },
  82. {
  83. label: '选项2',
  84. value: '2',
  85. },
  86. ],
  87. },
  88. },
  89. // {
  90. // field: 'field7',
  91. // component: 'RadioGroup',
  92. // label: '字段7',
  93. // colProps: {
  94. // span: 8,
  95. // },
  96. // componentProps: {
  97. // options: [
  98. // {
  99. // label: '选项1',
  100. // value: '1',
  101. // },
  102. // {
  103. // label: '选项2',
  104. // value: '2',
  105. // },
  106. // ],
  107. // },
  108. // },
  109. ];
  110. };
  111. function getAppendSchemas(): FormSchema[] {
  112. return [
  113. {
  114. field: 'field10',
  115. component: 'Input',
  116. label: '字段10',
  117. colProps: {
  118. span: 8,
  119. },
  120. },
  121. {
  122. field: 'field11',
  123. component: 'Input',
  124. label: '字段11',
  125. colProps: {
  126. span: 8,
  127. },
  128. },
  129. {
  130. field: 'field12',
  131. component: 'Input',
  132. label: '字段12',
  133. colProps: {
  134. span: 8,
  135. },
  136. },
  137. {
  138. field: 'field13',
  139. component: 'Input',
  140. label: '字段13',
  141. colProps: {
  142. span: 8,
  143. },
  144. },
  145. ];
  146. }
  147. const [register] = useForm({
  148. labelWidth: 120,
  149. schemas: getSchamas(),
  150. actionColOptions: {
  151. span: 24,
  152. },
  153. compact: true,
  154. showAdvancedButton: true,
  155. });
  156. const extraSchemas: FormSchema[] = [];
  157. for (let i = 14; i < 30; i++) {
  158. extraSchemas.push({
  159. field: 'field' + i,
  160. component: 'Input',
  161. label: '字段' + i,
  162. colProps: {
  163. span: 8,
  164. },
  165. });
  166. }
  167. const [register1] = useForm({
  168. labelWidth: 120,
  169. schemas: [
  170. ...getSchamas(),
  171. ...getAppendSchemas(),
  172. { field: '', component: 'Divider', label: '更多字段' },
  173. ...extraSchemas,
  174. ],
  175. actionColOptions: {
  176. span: 24,
  177. },
  178. compact: true,
  179. showAdvancedButton: true,
  180. alwaysShowLines: 2,
  181. });
  182. function onAdvancedChange(isAdvanced: boolean) {
  183. console.log('isAdvanced: ' + isAdvanced);
  184. if (isAdvanced) {
  185. // do something
  186. } else {
  187. // do something
  188. }
  189. }
  190. </script>