Step.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. <script lang="ts" setup>
  2. import type { BasicForm } from '@/types/form'
  3. import useValidator from '@/hooks/useValidator'
  4. const validator = useValidator()
  5. const proFormRef = ref<any>()
  6. const handleSave = () => {
  7. proFormRef.value.submit()
  8. }
  9. const formData = reactive<any>({})
  10. const formConfig = reactive<BasicForm>({
  11. formItems: [
  12. {
  13. label: '',
  14. value: '',
  15. name: 'formSteps',
  16. type: 'form-steps',
  17. span: 24,
  18. props: {
  19. steps: [
  20. {
  21. title: 'step 1'
  22. },
  23. {
  24. title: 'step 2'
  25. },
  26. {
  27. title: 'step 3'
  28. }
  29. ],
  30. active: 0,
  31. simple: true
  32. },
  33. events: {
  34. submit: handleSave
  35. },
  36. children: [
  37. {
  38. label: '',
  39. value: '',
  40. name: '',
  41. type: 'form-group',
  42. span: 24,
  43. children: [
  44. {
  45. label: '付款账户',
  46. value: '',
  47. name: 'pay',
  48. type: 'input'
  49. },
  50. {
  51. label: '收款账户',
  52. value: '',
  53. name: 'account',
  54. type: 'input'
  55. },
  56. {
  57. label: '收款人姓名',
  58. value: '',
  59. name: 'name',
  60. type: 'input'
  61. },
  62. {
  63. label: '收款金额',
  64. value: '',
  65. name: 'sum',
  66. type: 'input'
  67. },
  68. {
  69. label: '',
  70. value: '',
  71. name: '',
  72. type: 'button',
  73. span: 24,
  74. props: {
  75. type: 'primary',
  76. buttonName: '下一步',
  77. class: 'mt-4',
  78. style: {
  79. marginLeft: '50%',
  80. transform: 'translateX(-50%)'
  81. }
  82. },
  83. events: {
  84. click: () => {
  85. formConfig.formItems[0].props.active = 1
  86. }
  87. }
  88. }
  89. ]
  90. },
  91. {
  92. label: '',
  93. value: '',
  94. name: '',
  95. type: 'form-group',
  96. children: [
  97. {
  98. label: '区域1',
  99. value: '',
  100. name: 'area1',
  101. type: 'area'
  102. },
  103. {
  104. label: '手机号',
  105. value: '',
  106. name: 'phone1',
  107. type: 'input',
  108. rules: [
  109. {
  110. validator: validator.mobile
  111. }
  112. ]
  113. },
  114. {
  115. label: '',
  116. value: '',
  117. name: '',
  118. type: 'button',
  119. span: 24,
  120. props: {
  121. type: 'primary',
  122. buttonName: '下一步',
  123. class: 'mt-4',
  124. style: {
  125. marginLeft: '50%',
  126. transform: 'translateX(-50%)'
  127. }
  128. },
  129. events: {
  130. click: () => {
  131. formConfig.formItems[0].props.active = 2
  132. }
  133. }
  134. }
  135. ]
  136. },
  137. {
  138. label: '',
  139. value: '',
  140. name: '',
  141. type: 'form-group',
  142. children: [
  143. {
  144. label: '',
  145. value: '',
  146. name: '',
  147. notFormItem: true,
  148. type: 'result',
  149. span: 24,
  150. props: {
  151. icon: 'success',
  152. title: '操作成功',
  153. class: 'w-full text-center'
  154. }
  155. }
  156. ]
  157. }
  158. ]
  159. }
  160. ]
  161. })
  162. const create = (data: any) => {
  163. console.log(data)
  164. }
  165. const update = (data: any) => {
  166. console.log(data)
  167. }
  168. </script>
  169. <template>
  170. <div class="h-full bg-white p-16px pt-50px flex justify-center overflow-auto">
  171. <div class="w-800px">
  172. <pro-form :formConfig="formConfig" :formData="formData" :create="create" :update="update" ref="proFormRef">
  173. <template #prepend1> test1 </template>
  174. <template #append1> test1 </template>
  175. </pro-form>
  176. </div>
  177. </div>
  178. </template>
  179. <style lang="scss" scoped></style>