index.vue.vm 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <ContentWrap>
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="68px"
  10. >
  11. #foreach($column in $columns)
  12. #if ($column.listOperation)
  13. #set ($dictType = $column.dictType)
  14. #set ($javaField = $column.javaField)
  15. #set ($javaType = $column.javaType)
  16. #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  17. #set ($comment = $column.columnComment)
  18. #set ($dictMethod = "getDictOptions")## 计算使用哪个 dict 字典方法
  19. #if ($javaType == "Integer" || $javaType == "Long" || $javaType == "Byte" || $javaType == "Short")
  20. #set ($dictMethod = "getIntDictOptions")
  21. #elseif ($javaType == "String")
  22. #set ($dictMethod = "getStrDictOptions")
  23. #elseif ($javaType == "Boolean")
  24. #set ($dictMethod = "getBoolDictOptions")
  25. #end
  26. #if ($column.htmlType == "input")
  27. <el-form-item label="${comment}" prop="${javaField}">
  28. <el-input
  29. v-model="queryParams.${javaField}"
  30. placeholder="请输入${comment}"
  31. clearable
  32. @keyup.enter="handleQuery"
  33. class="!w-240px"
  34. />
  35. </el-form-item>
  36. #elseif ($column.htmlType == "select" || $column.htmlType == "radio")
  37. <el-form-item label="${comment}" prop="${javaField}">
  38. <el-select
  39. v-model="queryParams.${javaField}"
  40. placeholder="请选择${comment}"
  41. clearable
  42. class="!w-240px"
  43. >
  44. #if ("" != $dictType)## 设置了 dictType 数据字典的情况
  45. <el-option
  46. v-for="dict in $dictMethod(DICT_TYPE.$dictType.toUpperCase())"
  47. :key="dict.value"
  48. :label="dict.label"
  49. :value="dict.value"
  50. />
  51. #else## 未设置 dictType 数据字典的情况
  52. <el-option label="请选择字典生成" value="" />
  53. #end
  54. </el-select>
  55. </el-form-item>
  56. #elseif($column.htmlType == "datetime")
  57. #if ($column.listOperationCondition != "BETWEEN")## 非范围
  58. <el-form-item label="${comment}" prop="${javaField}">
  59. <el-date-picker
  60. v-model="queryParams.${javaField}"
  61. value-format="YYYY-MM-DD"
  62. type="date"
  63. placeholder="选择${comment}"
  64. clearable
  65. class="!w-240px"
  66. />
  67. </el-form-item>
  68. #else## 范围
  69. <el-form-item label="${comment}" prop="${javaField}">
  70. <el-date-picker
  71. v-model="queryParams.${javaField}"
  72. value-format="YYYY-MM-DD HH:mm:ss"
  73. type="daterange"
  74. start-placeholder="开始日期"
  75. end-placeholder="结束日期"
  76. :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
  77. class="!w-240px"
  78. />
  79. </el-form-item>
  80. #end
  81. #end
  82. #end
  83. #end
  84. <el-form-item>
  85. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  86. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  87. <el-button
  88. type="primary"
  89. plain
  90. @click="openForm('create')"
  91. v-hasPermi="['${permissionPrefix}:create']"
  92. >
  93. <Icon icon="ep:plus" class="mr-5px" /> 新增
  94. </el-button>
  95. <el-button
  96. type="success"
  97. plain
  98. @click="handleExport"
  99. :loading="exportLoading"
  100. v-hasPermi="['${permissionPrefix}:export']"
  101. >
  102. <Icon icon="ep:download" class="mr-5px" /> 导出
  103. </el-button>
  104. </el-form-item>
  105. </el-form>
  106. </ContentWrap>
  107. <!-- 列表 -->
  108. <ContentWrap>
  109. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  110. #foreach($column in $columns)
  111. #if ($column.listOperationResult)
  112. #set ($dictType=$column.dictType)
  113. #set ($javaField = $column.javaField)
  114. #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  115. #set ($comment=$column.columnComment)
  116. #if ($column.javaType == "LocalDateTime")## 时间类型
  117. <el-table-column
  118. label="${comment}"
  119. align="center"
  120. prop="${javaField}"
  121. :formatter="dateFormatter"
  122. width="180px"
  123. />
  124. #elseif("" != $column.dictType)## 数据字典
  125. <el-table-column label="${comment}" align="center" prop="${javaField}">
  126. <template #default="scope">
  127. <dict-tag :type="DICT_TYPE.$dictType.toUpperCase()" :value="scope.row.${column.javaField}" />
  128. </template>
  129. </el-table-column>
  130. #else
  131. <el-table-column label="${comment}" align="center" prop="${javaField}" />
  132. #end
  133. #end
  134. #end
  135. <el-table-column label="操作" align="center">
  136. <template #default="scope">
  137. <el-button
  138. link
  139. type="primary"
  140. @click="openForm('update', scope.row.id)"
  141. v-hasPermi="['${permissionPrefix}:update']"
  142. >
  143. 编辑
  144. </el-button>
  145. <el-button
  146. link
  147. type="danger"
  148. @click="handleDelete(scope.row.id)"
  149. v-hasPermi="['${permissionPrefix}:delete']"
  150. >
  151. 删除
  152. </el-button>
  153. </template>
  154. </el-table-column>
  155. </el-table>
  156. <!-- 分页 -->
  157. <Pagination
  158. :total="total"
  159. v-model:page="queryParams.pageNo"
  160. v-model:limit="queryParams.pageSize"
  161. @pagination="getList"
  162. />
  163. </ContentWrap>
  164. <!-- 表单弹窗:添加/修改 -->
  165. <${simpleClassName}Form ref="formRef" @success="getList" />
  166. </template>
  167. <script setup lang="ts">
  168. import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
  169. import { dateFormatter } from '@/utils/formatTime'
  170. import download from '@/utils/download'
  171. import * as ${simpleClassName}Api from '@/api/${table.moduleName}/${classNameVar}'
  172. import ${simpleClassName}Form from './${simpleClassName}Form.vue'
  173. defineOptions({ name: '${table.className}' })
  174. const message = useMessage() // 消息弹窗
  175. const { t } = useI18n() // 国际化
  176. const loading = ref(true) // 列表的加载中
  177. const total = ref(0) // 列表的总页数
  178. const list = ref([]) // 列表的数据
  179. const queryParams = reactive({
  180. pageNo: 1,
  181. pageSize: 10,
  182. #foreach ($column in $columns)
  183. #if ($column.listOperation)
  184. #if ($column.listOperationCondition != 'BETWEEN')
  185. $column.javaField: null,
  186. #end
  187. #if ($column.htmlType == "datetime" || $column.listOperationCondition == "BETWEEN")
  188. $column.javaField: [],
  189. #end
  190. #end
  191. #end
  192. })
  193. const queryFormRef = ref() // 搜索的表单
  194. const exportLoading = ref(false) // 导出的加载中
  195. /** 查询列表 */
  196. const getList = async () => {
  197. loading.value = true
  198. try {
  199. const data = await ${simpleClassName}Api.get${simpleClassName}Page(queryParams)
  200. list.value = data.list
  201. total.value = data.total
  202. } finally {
  203. loading.value = false
  204. }
  205. }
  206. /** 搜索按钮操作 */
  207. const handleQuery = () => {
  208. queryParams.pageNo = 1
  209. getList()
  210. }
  211. /** 重置按钮操作 */
  212. const resetQuery = () => {
  213. queryFormRef.value.resetFields()
  214. handleQuery()
  215. }
  216. /** 添加/修改操作 */
  217. const formRef = ref()
  218. const openForm = (type: string, id?: number) => {
  219. formRef.value.open(type, id)
  220. }
  221. /** 删除按钮操作 */
  222. const handleDelete = async (id: number) => {
  223. try {
  224. // 删除的二次确认
  225. await message.delConfirm()
  226. // 发起删除
  227. await ${simpleClassName}Api.delete${simpleClassName}(id)
  228. message.success(t('common.delSuccess'))
  229. // 刷新列表
  230. await getList()
  231. } catch {}
  232. }
  233. /** 导出按钮操作 */
  234. const handleExport = async () => {
  235. try {
  236. // 导出的二次确认
  237. await message.exportConfirm()
  238. // 发起导出
  239. exportLoading.value = true
  240. const data = await ${simpleClassName}Api.export${simpleClassName}(queryParams)
  241. download.excel(data, '${table.classComment}.xls')
  242. } catch {
  243. } finally {
  244. exportLoading.value = false
  245. }
  246. }
  247. /** 初始化 **/
  248. onMounted(() => {
  249. getList()
  250. })
  251. </script>