BasicInfoForm.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <Form :rules="rules" @register="register" />
  3. </template>
  4. <script setup lang="ts">
  5. import { useForm } from '@/hooks/web/useForm'
  6. import { FormSchema } from '@/types/form'
  7. import { CodegenTableVO } from '@/api/infra/codegen/types'
  8. import { getIntDictOptions } from '@/utils/dict'
  9. import { getSimpleMenusList } from '@/api/system/menu'
  10. import { handleTree, defaultProps } from '@/utils/tree'
  11. import { PropType } from 'vue'
  12. const props = defineProps({
  13. basicInfo: {
  14. type: Object as PropType<Nullable<CodegenTableVO>>,
  15. default: () => null
  16. }
  17. })
  18. const templateTypeOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)
  19. const sceneOptions = getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)
  20. const menuOptions = ref<any>([]) // 树形结构
  21. const getTree = async () => {
  22. const res = await getSimpleMenusList()
  23. menuOptions.value = handleTree(res)
  24. }
  25. const rules = reactive({
  26. tableName: [required],
  27. tableComment: [required],
  28. className: [required],
  29. author: [required],
  30. templateType: [required],
  31. scene: [required],
  32. moduleName: [required],
  33. businessName: [required],
  34. businessPackage: [required],
  35. classComment: [required]
  36. })
  37. const schema = reactive<FormSchema[]>([
  38. {
  39. label: '上级菜单',
  40. field: 'parentMenuId',
  41. component: 'TreeSelect',
  42. componentProps: {
  43. data: menuOptions,
  44. props: defaultProps,
  45. checkStrictly: true,
  46. nodeKey: 'id'
  47. },
  48. labelMessage: '分配到指定菜单下,例如 系统管理',
  49. colProps: {
  50. span: 24
  51. }
  52. },
  53. {
  54. label: '表名称',
  55. field: 'tableName',
  56. component: 'Input',
  57. colProps: {
  58. span: 12
  59. }
  60. },
  61. {
  62. label: '表描述',
  63. field: 'tableComment',
  64. component: 'Input',
  65. colProps: {
  66. span: 12
  67. }
  68. },
  69. {
  70. label: '实体类名称',
  71. field: 'className',
  72. component: 'Input',
  73. colProps: {
  74. span: 12
  75. }
  76. },
  77. {
  78. label: '类名称',
  79. field: 'className',
  80. component: 'Input',
  81. labelMessage: '类名称(首字母大写),例如SysUser、SysMenu、SysDictData 等等',
  82. colProps: {
  83. span: 12
  84. }
  85. },
  86. {
  87. label: '生成模板',
  88. field: 'templateType',
  89. component: 'Select',
  90. componentProps: {
  91. options: templateTypeOptions
  92. },
  93. colProps: {
  94. span: 12
  95. }
  96. },
  97. {
  98. label: '生成场景',
  99. field: 'scene',
  100. component: 'Select',
  101. componentProps: {
  102. options: sceneOptions
  103. },
  104. colProps: {
  105. span: 12
  106. }
  107. },
  108. {
  109. label: '模块名',
  110. field: 'moduleName',
  111. component: 'Input',
  112. labelMessage: '模块名,即一级目录,例如 system、infra、tool 等等',
  113. colProps: {
  114. span: 12
  115. }
  116. },
  117. {
  118. label: '业务名',
  119. field: 'businessName',
  120. component: 'Input',
  121. labelMessage: '业务名,即二级目录,例如 user、permission、dict 等等',
  122. colProps: {
  123. span: 12
  124. }
  125. },
  126. {
  127. label: '类描述',
  128. field: 'classComment',
  129. component: 'Input',
  130. labelMessage: '用作类描述,例如 用户',
  131. colProps: {
  132. span: 12
  133. }
  134. },
  135. {
  136. label: '作者',
  137. field: 'author',
  138. component: 'Input',
  139. colProps: {
  140. span: 12
  141. }
  142. },
  143. {
  144. label: '备注',
  145. field: 'remark',
  146. component: 'Input',
  147. componentProps: {
  148. type: 'textarea',
  149. rows: 4
  150. },
  151. colProps: {
  152. span: 24
  153. }
  154. }
  155. ])
  156. const { register, methods, elFormRef } = useForm({
  157. schema
  158. })
  159. watch(
  160. () => props.basicInfo,
  161. (basicInfo) => {
  162. if (!basicInfo) return
  163. const { setValues } = methods
  164. setValues(basicInfo)
  165. },
  166. {
  167. deep: true,
  168. immediate: true
  169. }
  170. )
  171. // ========== 初始化 ==========
  172. onMounted(async () => {
  173. await getTree()
  174. })
  175. defineExpose({
  176. elFormRef,
  177. getFormData: methods.getFormData
  178. })
  179. </script>