index-tree.vue.vm 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <template>
  2. <div class="index-tree">
  3. <el-card class="!border-none mb-4" shadow="never">
  4. <el-form ref="formRef" class="mb-[-16px]" :model="queryParams" :inline="true">
  5. #foreach ($column in $columns)
  6. #if($column.isQuery==1)
  7. #if($column.htmlType=="datetime")
  8. <el-form-item label="${column.columnComment}" prop="${column.javaField}">
  9. <daterange-picker
  10. v-model:startTime="queryParams.createTimeStart"
  11. v-model:endTime="queryParams.createTimeEnd"
  12. />
  13. </el-form-item>
  14. #elseif($column.htmlType=="select" || $column.htmlType == "radio")
  15. <el-form-item label="${column.columnComment}" prop="${column.javaField}">
  16. <el-select
  17. v-model="queryParams.${column.javaField}"
  18. class="w-56"
  19. clearable
  20. >
  21. #if($column.dictType=="")
  22. <el-option label="请选择字典生成" value="" />
  23. #else
  24. <el-option label="全部" value="" />
  25. <el-option
  26. v-for="(item, index) in dictData.${column.dictType}"
  27. :key="index"
  28. :label="item.name"
  29. :value="item.value"
  30. />
  31. #end
  32. </el-select>
  33. </el-form-item>
  34. #elseif($column.htmlType=="input")
  35. <el-form-item label="${column.columnComment}" prop="${column.javaField}">
  36. <el-input class="w-56" v-model="queryParams.${column.javaField}" />
  37. </el-form-item>
  38. #end
  39. #end
  40. #end
  41. <el-form-item>
  42. <el-button type="primary" @click="getLists">查询</el-button>
  43. <el-button @click="getLists">重置</el-button>
  44. </el-form-item>
  45. </el-form>
  46. </el-card>
  47. <el-card class="!border-none" shadow="never">
  48. <div>
  49. <el-button v-perms="['${moduleName}:add']" type="primary" @click="handleAdd()">
  50. <template #icon>
  51. <icon name="el-icon-Plus" />
  52. </template>
  53. 新增
  54. </el-button>
  55. <el-button @click="handleExpand"> 展开/折叠 </el-button>
  56. </div>
  57. <el-table
  58. v-loading="loading"
  59. ref="tableRef"
  60. class="mt-4"
  61. size="large"
  62. :data="lists"
  63. row-key="${table.treePrimary}"
  64. :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
  65. >
  66. #foreach ($column in $columns)
  67. #if($column.isList)
  68. #if($column.dictType!="" && ($column.htmlType=="select" || $column.htmlType=="radio" || $column.htmlType=="checkbox"))
  69. <el-table-column label="${column.columnComment}" prop="${column.javaField}" min-width="100">
  70. <template #default="{ row }">
  71. <dict-value :options="dictData.${column.dictType}" :value="row.${column.javaField}" />
  72. </template>
  73. </el-table-column>
  74. #elseif($column.htmlType=="imageUpload")
  75. <el-table-column label="${column.columnComment}" prop="${column.javaField}" min-width="100">
  76. <template #default="{ row }">
  77. <image-contain
  78. :width="40"
  79. :height="40"
  80. :src="row.${column.javaField}"
  81. :preview-src-list="[row.${column.javaField}]"
  82. preview-teleported
  83. hide-on-click-modal
  84. />
  85. </template>
  86. </el-table-column>
  87. #else
  88. <el-table-column label="${column.columnComment}" prop="${column.javaField}" min-width="100" />
  89. #end
  90. #end
  91. #end
  92. <el-table-column label="操作" width="160" fixed="right">
  93. <template #default="{ row }">
  94. <el-button
  95. v-perms="['${moduleName}:add']"
  96. type="primary"
  97. link
  98. @click="handleAdd(row.${table.treePrimary})"
  99. >
  100. 新增
  101. </el-button>
  102. <el-button
  103. v-perms="['${moduleName}:edit']"
  104. type="primary"
  105. link
  106. @click="handleEdit(row)"
  107. >
  108. 编辑
  109. </el-button>
  110. <el-button
  111. v-perms="['${moduleName}:del']"
  112. type="danger"
  113. link
  114. @click="handleDelete(row.${primaryKey})"
  115. >
  116. 删除
  117. </el-button>
  118. </template>
  119. </el-table-column>
  120. </el-table>
  121. </el-card>
  122. <edit-popup
  123. v-if="showEdit"
  124. ref="editRef"
  125. #if($dictFields.size()>=1)
  126. :dict-data="dictData"
  127. #end
  128. @success="getLists"
  129. @close="showEdit = false"
  130. />
  131. </div>
  132. </template>
  133. <script lang="ts" setup>
  134. import { ${moduleName}Delete, ${moduleName}Lists } from '@/api/${moduleName}'
  135. import EditPopup from './edit.vue'
  136. import feedback from '@/utils/feedback'
  137. #if($dictFields.size()>=1)
  138. import { useDictData } from '@/hooks/useDictOptions'
  139. #end
  140. import type { ElTable } from 'element-plus'
  141. const tableRef = shallowRef<InstanceType<typeof ElTable>>()
  142. const editRef = shallowRef<InstanceType<typeof EditPopup>>()
  143. let isExpand = false
  144. const showEdit = ref(false)
  145. const loading = ref(false)
  146. const lists = ref<any[]>([])
  147. const queryParams = reactive({
  148. #foreach ($column in $columns)
  149. #if($column.isQuery)
  150. #if($column.htmlType=="datetime")
  151. ${column.javaField}Start: '',
  152. ${column.javaField}End: '',
  153. #else
  154. ${column.javaField}: '',
  155. #end
  156. #end
  157. #end
  158. })
  159. const getLists = async () => {
  160. loading.value = true
  161. try {
  162. const data = await ${moduleName}Lists(queryParams)
  163. lists.value = data
  164. loading.value = false
  165. } catch (error) {
  166. loading.value = false
  167. }
  168. }
  169. #if($dictFields.size()>=1)
  170. #set($dictSize = $dictFields.size() - 1)
  171. const { dictData } = useDictData<{
  172. #foreach ($dict in $dictFields)
  173. ${dict}: any[]
  174. #end
  175. }>([#foreach ($dict in $dictFields)'${dict}'#if($dictFields[$dictSize] != ${dict}),#end#end])
  176. #end
  177. const handleAdd = async (${table.treePrimary}?: number) => {
  178. showEdit.value = true
  179. await nextTick()
  180. if (${table.treePrimary}) {
  181. editRef.value?.setFormData({
  182. ${table.treeParent}: ${table.treePrimary}
  183. })
  184. }
  185. editRef.value?.open('add')
  186. }
  187. const handleEdit = async (data: any) => {
  188. showEdit.value = true
  189. await nextTick()
  190. editRef.value?.open('edit')
  191. editRef.value?.getDetail(data)
  192. }
  193. const handleDelete = async (${primaryKey}: number) => {
  194. await feedback.confirm('确定要删除?')
  195. await ${moduleName}Delete({ ${primaryKey} })
  196. feedback.msgSuccess('删除成功')
  197. getLists()
  198. }
  199. const handleExpand = () => {
  200. isExpand = !isExpand
  201. toggleExpand(lists.value, isExpand)
  202. }
  203. const toggleExpand = (children: any[], unfold = true) => {
  204. for (const key in children) {
  205. tableRef.value?.toggleRowExpansion(children[key], unfold)
  206. if (children[key].children) {
  207. toggleExpand(children[key].children!, unfold)
  208. }
  209. }
  210. }
  211. getLists()
  212. </script>