Basic.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <script lang="ts" setup>
  2. import type { BasicForm } from '@/types/form'
  3. const formConfig = reactive<BasicForm>({
  4. span: 24,
  5. props: {
  6. labelPosition: 'right'
  7. },
  8. formItems: [
  9. {
  10. label: '用户名',
  11. value: '',
  12. name: 'name',
  13. type: 'input',
  14. rules: [{ required: true, message: '请输入用户名', trigger: 'blur' }]
  15. },
  16. {
  17. label: '登录名',
  18. value: '',
  19. name: 'loginName',
  20. type: 'input',
  21. rules: [{ required: true, message: '请输入登录名', trigger: 'blur' }]
  22. },
  23. {
  24. label: '密码',
  25. value: '',
  26. name: 'password',
  27. type: 'input',
  28. rules: [{ required: true, message: '请输入密码', trigger: 'blur' }]
  29. },
  30. {
  31. label: '手机号',
  32. value: '',
  33. name: 'phone',
  34. type: 'input',
  35. props: {
  36. maxlength: 11
  37. }
  38. },
  39. {
  40. label: '字段名',
  41. value: '',
  42. name: 'name',
  43. type: 'input'
  44. },
  45. {
  46. label: '字段名',
  47. value: '',
  48. name: 'name',
  49. type: 'input',
  50. slots: [
  51. {
  52. name: 'prepend',
  53. alias: 'prepend1'
  54. },
  55. {
  56. name: 'append',
  57. alias: 'append1'
  58. }
  59. ]
  60. },
  61. {
  62. label: '字段名',
  63. value: '',
  64. name: 'field',
  65. type: 'cascader',
  66. props: {
  67. options: [
  68. {
  69. value: 'guide',
  70. label: 'Guide',
  71. children: [
  72. {
  73. value: 'disciplines',
  74. label: 'Disciplines',
  75. children: [
  76. {
  77. value: 'consistency',
  78. label: 'Consistency'
  79. },
  80. {
  81. value: 'feedback',
  82. label: 'Feedback'
  83. },
  84. {
  85. value: 'efficiency',
  86. label: 'Efficiency'
  87. },
  88. {
  89. value: 'controllability',
  90. label: 'Controllability'
  91. }
  92. ]
  93. },
  94. {
  95. value: 'navigation',
  96. label: 'Navigation',
  97. children: [
  98. {
  99. value: 'side nav',
  100. label: 'Side Navigation'
  101. },
  102. {
  103. value: 'top nav',
  104. label: 'Top Navigation'
  105. }
  106. ]
  107. }
  108. ]
  109. },
  110. {
  111. value: 'resource',
  112. label: 'Resource',
  113. children: [
  114. {
  115. value: 'axure',
  116. label: 'Axure Components'
  117. },
  118. {
  119. value: 'sketch',
  120. label: 'Sketch Templates'
  121. },
  122. {
  123. value: 'docs',
  124. label: 'Design Documentation'
  125. }
  126. ]
  127. }
  128. ]
  129. },
  130. slots: [
  131. {
  132. name: 'default',
  133. alias: 'cDefault'
  134. }
  135. ]
  136. }
  137. ]
  138. })
  139. const formData = reactive({})
  140. const create = () => {
  141. console.log('保存的方法')
  142. }
  143. const update = () => {
  144. console.log('保存的方法')
  145. }
  146. const proFormRef = ref<any>()
  147. const handleSave = () => {
  148. proFormRef.value.submit()
  149. }
  150. </script>
  151. <template>
  152. <div class="h-full bg-white p-16px pt-50px flex justify-center">
  153. <div class="w-500px">
  154. <pro-form :formConfig="formConfig" :formData="formData" :create="create" :update="update" ref="proFormRef">
  155. <template #prepend> testt </template>
  156. <template #prepend1> test1 </template>
  157. <template #append> testt </template>
  158. <template #append1> test1 </template>
  159. <template #cDefault="{ node, data }">
  160. <span>{{ data.label }}</span>
  161. <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
  162. </template>
  163. </pro-form>
  164. <div class="text-center">
  165. <el-button type="primary" @click="handleSave">保存</el-button>
  166. </div>
  167. </div>
  168. </div>
  169. </template>
  170. <style lang="scss" scoped></style>