form.vue.tpl 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. {{- if .IsAdd }}
  2. // 新增表单中增加如下代码
  3. {{- range .Fields}}
  4. {{- if .Form}}
  5. {{ GenerateFormItem . }}
  6. {{- end }}
  7. {{- end }}
  8. // 字典增加如下代码
  9. {{- range $index, $element := .DictTypes}}
  10. const {{ $element }}Options = ref([])
  11. {{- end }}
  12. // init方法中增加如下调用
  13. {{- range $index, $element := .DictTypes }}
  14. {{ $element }}Options.value = await getDictFunc('{{$element}}')
  15. {{- end }}
  16. // 基础formData结构增加如下字段
  17. {{- range .Fields}}
  18. {{- if .Form}}
  19. {{ GenerateDefaultFormValue . }}
  20. {{- end }}
  21. {{- end }}
  22. // 验证规则中增加如下字段
  23. {{- range .Fields }}
  24. {{- if .Form }}
  25. {{- if eq .Require true }}
  26. {{.FieldJson }} : [{
  27. required: true,
  28. message: '{{ .ErrorText }}',
  29. trigger: ['input','blur'],
  30. },
  31. {{- if eq .FieldType "string" }}
  32. {
  33. whitespace: true,
  34. message: '不能只输入空格',
  35. trigger: ['input', 'blur'],
  36. }
  37. {{- end }}
  38. ],
  39. {{- end }}
  40. {{- end }}
  41. {{- end }}
  42. {{- if .HasDataSource }}
  43. // 请引用
  44. get{{.StructName}}DataSource,
  45. // 获取数据源
  46. const dataSource = ref([])
  47. const getDataSourceFunc = async()=>{
  48. const res = await get{{.StructName}}DataSource()
  49. if (res.code === 0) {
  50. dataSource.value = res.data
  51. }
  52. }
  53. getDataSourceFunc()
  54. {{- end }}
  55. {{- else }}
  56. {{- if not .OnlyTemplate }}
  57. <template>
  58. <div>
  59. <div class="gva-form-box">
  60. <el-form :model="formData" ref="elFormRef" label-position="right" :rules="rule" label-width="80px">
  61. {{- if .IsTree }}
  62. <el-form-item label="父节点:" prop="parentID" >
  63. <el-tree-select
  64. v-model="formData.parentID"
  65. :data="[rootNode,...tableData]"
  66. check-strictly
  67. :render-after-expand="false"
  68. :props="defaultProps"
  69. clearable
  70. style="width: 240px"
  71. placeholder="根节点"
  72. />
  73. </el-form-item>
  74. {{- end }}
  75. {{- range .Fields}}
  76. {{- if .Form }}
  77. {{ GenerateFormItem . }}
  78. {{- end }}
  79. {{- end }}
  80. <el-form-item>
  81. <el-button :loading="btnLoading" type="primary" @click="save">保存</el-button>
  82. <el-button type="primary" @click="back">返回</el-button>
  83. </el-form-item>
  84. </el-form>
  85. </div>
  86. </div>
  87. </template>
  88. <script setup>
  89. import {
  90. {{- if .HasDataSource }}
  91. get{{.StructName}}DataSource,
  92. {{- end }}
  93. {{- if .IsTree }}
  94. get{{.StructName}}List,
  95. {{- end }}
  96. create{{.StructName}},
  97. update{{.StructName}},
  98. find{{.StructName}}
  99. } from '@/api/{{.Package}}/{{.PackageName}}'
  100. defineOptions({
  101. name: '{{.StructName}}Form'
  102. })
  103. // 自动获取字典
  104. import { getDictFunc } from '@/utils/format'
  105. import { useRoute, useRouter } from "vue-router"
  106. import { ElMessage } from 'element-plus'
  107. import { ref, reactive } from 'vue'
  108. {{- if .HasPic }}
  109. // 图片选择组件
  110. import SelectImage from '@/components/selectImage/selectImage.vue'
  111. {{- end }}
  112. {{- if .HasFile }}
  113. // 文件选择组件
  114. import SelectFile from '@/components/selectFile/selectFile.vue'
  115. {{- end }}
  116. {{- if .HasRichText }}
  117. // 富文本组件
  118. import RichEdit from '@/components/richtext/rich-edit.vue'
  119. {{- end }}
  120. {{- if .HasArray}}
  121. // 数组控制组件
  122. import ArrayCtrl from '@/components/arrayCtrl/arrayCtrl.vue'
  123. {{- end }}
  124. const route = useRoute()
  125. const router = useRouter()
  126. {{- if .IsTree }}
  127. const tableData = ref([])
  128. const defaultProps = {
  129. children: "children",
  130. label: "{{ .TreeJson }}",
  131. value: "{{ .PrimaryField.FieldJson }}"
  132. }
  133. const rootNode = {
  134. {{ .PrimaryField.FieldJson }}: 0,
  135. {{ .TreeJson }}: '根节点',
  136. children: []
  137. }
  138. const getTableData = async() => {
  139. const table = await get{{.StructName}}List()
  140. if (table.code === 0) {
  141. tableData.value = table.data || []
  142. }
  143. }
  144. getTableData()
  145. {{- end }}
  146. // 提交按钮loading
  147. const btnLoading = ref(false)
  148. const type = ref('')
  149. {{- range $index, $element := .DictTypes}}
  150. const {{ $element }}Options = ref([])
  151. {{- end }}
  152. const formData = ref({
  153. {{- if .IsTree }}
  154. parentID: undefined,
  155. {{- end }}
  156. {{- range .Fields}}
  157. {{- if .Form }}
  158. {{ GenerateDefaultFormValue . }}
  159. {{- end }}
  160. {{- end }}
  161. })
  162. // 验证规则
  163. const rule = reactive({
  164. {{- range .Fields }}
  165. {{- if eq .Require true }}
  166. {{.FieldJson }} : [{
  167. required: true,
  168. message: '{{ .ErrorText }}',
  169. trigger: ['input','blur'],
  170. }],
  171. {{- end }}
  172. {{- end }}
  173. })
  174. const elFormRef = ref()
  175. {{- if .HasDataSource }}
  176. const dataSource = ref([])
  177. const getDataSourceFunc = async()=>{
  178. const res = await get{{.StructName}}DataSource()
  179. if (res.code === 0) {
  180. dataSource.value = res.data
  181. }
  182. }
  183. getDataSourceFunc()
  184. {{- end }}
  185. // 初始化方法
  186. const init = async () => {
  187. // 建议通过url传参获取目标数据ID 调用 find方法进行查询数据操作 从而决定本页面是create还是update 以下为id作为url参数示例
  188. if (route.query.id) {
  189. const res = await find{{.StructName}}({ ID: route.query.id })
  190. if (res.code === 0) {
  191. formData.value = res.data
  192. type.value = 'update'
  193. }
  194. } else {
  195. type.value = 'create'
  196. }
  197. {{- range $index, $element := .DictTypes }}
  198. {{ $element }}Options.value = await getDictFunc('{{$element}}')
  199. {{- end }}
  200. }
  201. init()
  202. // 保存按钮
  203. const save = async() => {
  204. btnLoading.value = true
  205. elFormRef.value?.validate( async (valid) => {
  206. if (!valid) return btnLoading.value = false
  207. let res
  208. switch (type.value) {
  209. case 'create':
  210. res = await create{{.StructName}}(formData.value)
  211. break
  212. case 'update':
  213. res = await update{{.StructName}}(formData.value)
  214. break
  215. default:
  216. res = await create{{.StructName}}(formData.value)
  217. break
  218. }
  219. btnLoading.value = false
  220. if (res.code === 0) {
  221. ElMessage({
  222. type: 'success',
  223. message: '创建/更改成功'
  224. })
  225. }
  226. })
  227. }
  228. // 返回按钮
  229. const back = () => {
  230. router.go(-1)
  231. }
  232. </script>
  233. <style>
  234. </style>
  235. {{- else }}
  236. <template>
  237. <div>form</div>
  238. </template>
  239. <script setup>
  240. </script>
  241. <style>
  242. </style>
  243. {{- end }}
  244. {{- end }}