index.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. <template>
  2. <div class="card content-box">
  3. <ProForm :items-options="items" :model="model">
  4. <template #username1="{ formModel }">
  5. <el-input v-model="formModel.username1" />
  6. </template>
  7. <template #transfer1="{ formModel }">
  8. <el-transfer v-model="formModel.transfer1" :data="dataT" />
  9. </template>
  10. </ProForm>
  11. </div>
  12. </template>
  13. <script setup lang="ts" name="Index">
  14. import ProForm from '@/components/ProForm/index.vue'
  15. let model = {
  16. username: 'ssss',
  17. username1: '自定义的插槽',
  18. sdsds: '1',
  19. sdssssds: ['1']
  20. }
  21. const initials = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
  22. const optionsData = Array.from({ length: 1000 }).map((_, idx) => ({
  23. value: `Option ${idx + 1}`,
  24. label: `${initials[idx % 10]}${idx}`
  25. }))
  26. const dataT = [
  27. {
  28. key: 1,
  29. label: '社么',
  30. disabled: false
  31. },
  32. {
  33. key: 2,
  34. label: 'wan',
  35. disabled: false
  36. },
  37. {
  38. key: 3,
  39. label: '伊尔',
  40. disabled: true
  41. }
  42. ]
  43. const treeData = [
  44. {
  45. label: '选项1',
  46. value: '1',
  47. children: [
  48. {
  49. label: '选项1-1',
  50. value: '1-1'
  51. },
  52. {
  53. label: '选项1-2',
  54. value: '1-2'
  55. }
  56. ]
  57. },
  58. {
  59. label: '选项2',
  60. value: '2'
  61. }
  62. ]
  63. const enumData = [
  64. {
  65. label: '选项1',
  66. value: '1'
  67. },
  68. {
  69. label: '选项2',
  70. value: '2'
  71. },
  72. {
  73. label: '选项3',
  74. value: '3'
  75. }
  76. ]
  77. let items: ProForm.ItemsOptions[] = [
  78. {
  79. label: '单行输入框',
  80. prop: 'username',
  81. rules: [{ required: true, message: '请选择步长', trigger: 'blur' }],
  82. compOptions: {
  83. elTagName: 'input',
  84. clearable: true,
  85. placeholder: '请输入用户名'
  86. }
  87. },
  88. {
  89. label: '多行输入框',
  90. prop: 'usernames',
  91. rules: [{ required: true, message: '请选择步长', trigger: 'blur' }],
  92. compOptions: {
  93. elTagName: 'input',
  94. type: 'textarea',
  95. clearable: true,
  96. placeholder: '请输入用户名'
  97. }
  98. },
  99. {
  100. label: '插槽',
  101. prop: 'username1',
  102. required: true,
  103. tooltip: '这是自定义插槽',
  104. compOptions: {
  105. elTagName: 'slot',
  106. clearable: true,
  107. placeholder: '请输入用户名'
  108. }
  109. },
  110. {
  111. label: '单选',
  112. prop: 'sdsds',
  113. required: true,
  114. compOptions: {
  115. elTagName: 'radio-group',
  116. enum: enumData
  117. }
  118. },
  119. {
  120. label: '复选',
  121. prop: 'sdssssds',
  122. required: true,
  123. compOptions: {
  124. elTagName: 'checkbox-group',
  125. enum: enumData
  126. }
  127. },
  128. {
  129. label: '下拉',
  130. prop: 'select',
  131. required: true,
  132. compOptions: {
  133. elTagName: 'select',
  134. enum: enumData
  135. }
  136. },
  137. {
  138. label: '下拉树',
  139. prop: 'treeSelect',
  140. required: true,
  141. compOptions: {
  142. elTagName: 'tree-select',
  143. enum: treeData
  144. }
  145. },
  146. {
  147. label: '虚拟下拉',
  148. prop: 'selectV2',
  149. required: true,
  150. compOptions: {
  151. elTagName: 'select-v2',
  152. enum: optionsData
  153. }
  154. },
  155. {
  156. label: '级联',
  157. prop: 'jilian',
  158. compOptions: {
  159. elTagName: 'cascader',
  160. enum: treeData,
  161. props: {
  162. expandTrigger: 'hover' as const
  163. }
  164. }
  165. },
  166. {
  167. label: '日期',
  168. prop: 'datePicker',
  169. compOptions: {
  170. elTagName: 'date-picker',
  171. type: 'date'
  172. }
  173. },
  174. {
  175. label: '日期范围',
  176. prop: 'datePicker',
  177. compOptions: {
  178. elTagName: 'date-picker',
  179. type: 'daterange',
  180. rangeSeparator: 'To',
  181. startPlaceholder: 'Start date',
  182. endPlaceholder: 'End date'
  183. }
  184. },
  185. {
  186. label: '数字框',
  187. prop: 'iNumber',
  188. compOptions: {
  189. elTagName: 'input-number',
  190. min: 1
  191. }
  192. },
  193. {
  194. label: '评分',
  195. prop: 'rate',
  196. compOptions: {
  197. elTagName: 'rate'
  198. }
  199. },
  200. {
  201. label: '滑块',
  202. prop: 'slider',
  203. compOptions: {
  204. elTagName: 'slider',
  205. step: 10
  206. }
  207. },
  208. {
  209. label: '开关',
  210. prop: 'switch',
  211. compOptions: {
  212. elTagName: 'switch'
  213. }
  214. },
  215. {
  216. label: '时间选择器',
  217. prop: 'timePicker',
  218. compOptions: {
  219. elTagName: 'time-picker'
  220. }
  221. },
  222. {
  223. label: '时间下拉',
  224. prop: 'timeSelect',
  225. compOptions: {
  226. elTagName: 'time-select'
  227. }
  228. },
  229. {
  230. label: '穿梭框',
  231. prop: 'transfer1',
  232. compOptions: {
  233. elTagName: 'slot'
  234. }
  235. }
  236. ]
  237. </script>
  238. <style scoped lang="scss"></style>