index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. <template>
  2. <div class="m-4">
  3. <CollapseContainer title="基础示例">
  4. <BasicForm
  5. :labelWidth="100"
  6. :schemas="schemas"
  7. :actionColOptions="{ span: 24 }"
  8. @submit="handleSubmit"
  9. />
  10. </CollapseContainer>
  11. </div>
  12. </template>
  13. <script lang="ts">
  14. import { defineComponent, ref } from 'vue';
  15. import { BasicForm, FormSchema } from '/@/components/Form/index';
  16. import { CollapseContainer } from '/@/components/Container/index';
  17. import { useMessage } from '/@/hooks/web/useMessage';
  18. const schemas: FormSchema[] = [
  19. {
  20. field: 'field1',
  21. component: 'Input',
  22. label: '字段1',
  23. colProps: {
  24. span: 8,
  25. },
  26. // componentProps:{},
  27. // can func
  28. componentProps: ({ schema, formModel }) => {
  29. console.log('form:', schema);
  30. console.log('formModel:', formModel);
  31. return {
  32. placeholder: '自定义placeholder',
  33. onChange: (e: any) => {
  34. console.log(e);
  35. },
  36. };
  37. },
  38. renderComponentContent: () => {
  39. return {
  40. prefix: () => 'pSlot',
  41. suffix: () => 'sSlot',
  42. };
  43. },
  44. },
  45. {
  46. field: 'field2',
  47. component: 'Input',
  48. label: '字段2',
  49. defaultValue: '111',
  50. colProps: {
  51. span: 8,
  52. },
  53. componentProps: {
  54. onChange: (e: any) => {
  55. console.log(e);
  56. },
  57. },
  58. },
  59. {
  60. field: 'field3',
  61. component: 'DatePicker',
  62. label: '字段3',
  63. colProps: {
  64. span: 8,
  65. },
  66. },
  67. {
  68. field: 'field4',
  69. component: 'Select',
  70. label: '字段4',
  71. colProps: {
  72. span: 8,
  73. },
  74. componentProps: {
  75. options: [
  76. {
  77. label: '选项1',
  78. value: '1',
  79. key: '1',
  80. },
  81. {
  82. label: '选项2',
  83. value: '2',
  84. key: '2',
  85. },
  86. ],
  87. },
  88. },
  89. {
  90. field: 'field5',
  91. component: 'CheckboxGroup',
  92. label: '字段5',
  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. field: 'field7',
  111. component: 'RadioGroup',
  112. label: '字段7',
  113. colProps: {
  114. span: 8,
  115. },
  116. componentProps: {
  117. options: [
  118. {
  119. label: '选项1',
  120. value: '1',
  121. },
  122. {
  123. label: '选项2',
  124. value: '2',
  125. },
  126. ],
  127. },
  128. },
  129. {
  130. field: 'field8',
  131. component: 'Checkbox',
  132. label: '字段8',
  133. colProps: {
  134. span: 8,
  135. },
  136. renderComponentContent: 'Check',
  137. },
  138. {
  139. field: 'field9',
  140. component: 'Switch',
  141. label: '字段9',
  142. colProps: {
  143. span: 8,
  144. },
  145. },
  146. {
  147. field: 'field10',
  148. component: 'RadioButtonGroup',
  149. label: '字段10',
  150. colProps: {
  151. span: 8,
  152. },
  153. componentProps: {
  154. options: [
  155. {
  156. label: '选项1',
  157. value: '1',
  158. },
  159. {
  160. label: '选项2',
  161. value: '2',
  162. },
  163. ],
  164. },
  165. },
  166. {
  167. field: 'field11',
  168. component: 'Cascader',
  169. label: '字段11',
  170. colProps: {
  171. span: 8,
  172. },
  173. componentProps: {
  174. options: [
  175. {
  176. value: 'zhejiang',
  177. label: 'Zhejiang',
  178. children: [
  179. {
  180. value: 'hangzhou',
  181. label: 'Hangzhou',
  182. children: [
  183. {
  184. value: 'xihu',
  185. label: 'West Lake',
  186. },
  187. ],
  188. },
  189. ],
  190. },
  191. {
  192. value: 'jiangsu',
  193. label: 'Jiangsu',
  194. children: [
  195. {
  196. value: 'nanjing',
  197. label: 'Nanjing',
  198. children: [
  199. {
  200. value: 'zhonghuamen',
  201. label: 'Zhong Hua Men',
  202. },
  203. ],
  204. },
  205. ],
  206. },
  207. ],
  208. },
  209. },
  210. ];
  211. export default defineComponent({
  212. components: { BasicForm, CollapseContainer },
  213. setup() {
  214. const check = ref(null);
  215. const { createMessage } = useMessage();
  216. return {
  217. schemas,
  218. handleSubmit: (values: any) => {
  219. createMessage.success('click search,values:' + JSON.stringify(values));
  220. },
  221. check,
  222. };
  223. },
  224. });
  225. </script>