index.vue.vm 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <template>
  2. <div class="index-lists">
  3. <el-card class="!border-none" 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="resetPage">查询</el-button>
  43. <el-button @click="resetParams">重置</el-button>
  44. </el-form-item>
  45. </el-form>
  46. </el-card>
  47. <el-card class="!border-none mt-4" 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. </div>
  56. <el-table
  57. class="mt-4"
  58. size="large"
  59. v-loading="pager.loading"
  60. :data="pager.lists"
  61. >
  62. #foreach ($column in $columns)
  63. #if($column.isList)
  64. #if($column.dictType!="" && ($column.htmlType=="select" || $column.htmlType=="radio" || $column.htmlType=="checkbox"))
  65. <el-table-column label="${column.columnComment}" prop="${column.javaField}" min-width="100">
  66. <template #default="{ row }">
  67. <dict-value :options="dictData.${column.dictType}" :value="row.${column.javaField}" />
  68. </template>
  69. </el-table-column>
  70. #elseif($column.htmlType=="imageUpload")
  71. <el-table-column label="${column.columnComment}" prop="${column.javaField}" min-width="100">
  72. <template #default="{ row }">
  73. <image-contain
  74. :width="40"
  75. :height="40"
  76. :src="row.${column.javaField}"
  77. :preview-src-list="[row.${column.javaField}]"
  78. preview-teleported
  79. hide-on-click-modal
  80. />
  81. </template>
  82. </el-table-column>
  83. #else
  84. <el-table-column label="${column.columnComment}" prop="${column.javaField}" min-width="100" />
  85. #end
  86. #end
  87. #end
  88. <el-table-column label="操作" width="120" fixed="right">
  89. <template #default="{ row }">
  90. <el-button
  91. v-perms="['${moduleName}:edit']"
  92. type="primary"
  93. link
  94. @click="handleEdit(row)"
  95. >
  96. 编辑
  97. </el-button>
  98. <el-button
  99. v-perms="['${moduleName}:del']"
  100. type="danger"
  101. link
  102. @click="handleDelete(row.${primaryKey})"
  103. >
  104. 删除
  105. </el-button>
  106. </template>
  107. </el-table-column>
  108. </el-table>
  109. <div class="flex justify-end mt-4">
  110. <pagination v-model="pager" @change="getLists" />
  111. </div>
  112. </el-card>
  113. <edit-popup
  114. v-if="showEdit"
  115. ref="editRef"
  116. #if($dictFields.size()>=1)
  117. :dict-data="dictData"
  118. #end
  119. @success="getLists"
  120. @close="showEdit = false"
  121. />
  122. </div>
  123. </template>
  124. <script lang="ts" setup>
  125. import { ${moduleName}Delete, ${moduleName}Lists } from '@/api/${moduleName}'
  126. #if($dictFields.size()>=1)
  127. import { useDictData } from '@/hooks/useDictOptions'
  128. #end
  129. import { usePaging } from '@/hooks/usePaging'
  130. import feedback from '@/utils/feedback'
  131. import EditPopup from './edit.vue'
  132. const editRef = shallowRef<InstanceType<typeof EditPopup>>()
  133. const showEdit = ref(false)
  134. const queryParams = reactive({
  135. #foreach ($column in $columns)
  136. #if($column.isQuery)
  137. #if($column.htmlType=="datetime")
  138. ${column.javaField}Start: '',
  139. ${column.javaField}End: '',
  140. #else
  141. ${column.javaField}: '',
  142. #end
  143. #end
  144. #end
  145. })
  146. const { pager, getLists, resetPage, resetParams } = usePaging({
  147. fetchFun: ${moduleName}Lists,
  148. params: queryParams
  149. })
  150. #if($dictFields.size()>=1)
  151. #set($dictSize = $dictFields.size() - 1)
  152. const { dictData } = useDictData<{
  153. #foreach ($dict in $dictFields)
  154. ${dict}: any[]
  155. #end
  156. }>([#foreach ($dict in $dictFields)'${dict}'#if($dictFields[$dictSize] != ${dict}),#end#end])
  157. #end
  158. const handleAdd = async () => {
  159. showEdit.value = true
  160. await nextTick()
  161. editRef.value?.open('add')
  162. }
  163. const handleEdit = async (data: any) => {
  164. showEdit.value = true
  165. await nextTick()
  166. editRef.value?.open('edit')
  167. editRef.value?.getDetail(data)
  168. }
  169. const handleDelete = async (${primaryKey}: number) => {
  170. await feedback.confirm('确定要删除?')
  171. await ${moduleName}Delete({ ${primaryKey} })
  172. feedback.msgSuccess('删除成功')
  173. getLists()
  174. }
  175. getLists()
  176. </script>