index.vue.vm 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <div class="p-2 auto-overflow-y">
  3. <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
  4. <div v-show="showSearch" class="search">
  5. <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="68px" class="-mb-15px">
  6. #set($queryColumns=0)
  7. #foreach($column in $columns)
  8. #if($column.query)
  9. #set($queryColumns = $queryColumns + 1)
  10. #set($dictType=$column.dictType)
  11. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  12. #set($parentheseIndex=$column.columnComment.indexOf("("))
  13. #if($parentheseIndex != -1)
  14. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  15. #else
  16. #set($comment=$column.columnComment)
  17. #end
  18. #if($column.htmlType == "input" || $column.htmlType == "textarea")
  19. <el-form-item label="${comment}" prop="${column.javaField}">
  20. <el-input v-model="queryParams.${column.javaField}" placeholder="请输入${comment}" clearable style="width: 240px" @keyup.enter="handleQuery" />
  21. </el-form-item>
  22. #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && "" != $dictType)
  23. <el-form-item label="${comment}" prop="${column.javaField}">
  24. <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable>
  25. <el-option v-for="dict in ${dictType}" :key="dict.value" :label="dict.label" :value="dict.value" />
  26. </el-select>
  27. </el-form-item>
  28. #elseif(($column.htmlType == "select" || $column.htmlType == "radio") && $dictType)
  29. <el-form-item label="${comment}" prop="${column.javaField}">
  30. <el-select v-model="queryParams.${column.javaField}" placeholder="请选择${comment}" clearable>
  31. <el-option label="请选择字典生成" value="" />
  32. </el-select>
  33. </el-form-item>
  34. #elseif($column.htmlType == "datetime" && $column.queryType != "BETWEEN")
  35. <el-form-item label="${comment}" prop="${column.javaField}">
  36. <el-date-picker
  37. v-model="queryParams.${column.javaField}"
  38. clearable
  39. type="date"
  40. value-format="YYYY-MM-DD"
  41. placeholder="请选择${comment}"
  42. />
  43. </el-form-item>
  44. #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  45. <el-form-item label="${comment}" style="width: 308px">
  46. <el-date-picker
  47. v-model="dateRange${AttrName}"
  48. value-format="YYYY-MM-DD HH:mm:ss"
  49. type="daterange"
  50. range-separator="-"
  51. start-placeholder="开始日期"
  52. end-placeholder="结束日期"
  53. :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]"
  54. />
  55. </el-form-item>
  56. #end
  57. #end
  58. #end
  59. <el-form-item>
  60. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  61. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  62. </el-form-item>
  63. </el-form>
  64. </div>
  65. </transition>
  66. <el-card shadow="never">
  67. <template #header>
  68. <el-row :gutter="10" class="mb8">
  69. <el-col :span="1.5">
  70. <el-button v-hasPermi="['${moduleName}:${businessName}:add']" type="primary" plain icon="Plus" @click="openForm('create')">新增</el-button>
  71. </el-col>
  72. <el-col :span="1.5">
  73. <el-button v-hasPermi="['system:post:edit']" type="success" plain icon="Edit" :disabled="single" @click="openForm('update')">修改</el-button>
  74. </el-col>
  75. <el-col :span="1.5">
  76. <el-button v-hasPermi="['${moduleName}:${businessName}:remove']" type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete()">删除</el-button>
  77. </el-col>
  78. <el-col :span="1.5">
  79. <el-button v-hasPermi="['${moduleName}:${businessName}:export']" type="warning" plain icon="Download" @click="handleExport">导出</el-button>
  80. </el-col>
  81. <right-toolbar v-model:showSearch="showSearch" :columns="columns" @query-table="getList"></right-toolbar>
  82. </el-row>
  83. </template>
  84. <el-table v-loading="loading" :data="${businessName}List" max-height="#if($queryColumns > 3)calc(100vh - 27rem)#else calc(100vh - 23.75rem)#end" @selection-change="handleSelectionChange">
  85. <el-table-column type="selection" width="55" align="center" />
  86. #set($aIndex = 0)
  87. #foreach($column in $columns)
  88. #set($javaField=$column.javaField)
  89. #set($parentheseIndex=$column.columnComment.indexOf("("))
  90. #if($parentheseIndex != -1)
  91. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  92. #else
  93. #set($comment=$column.columnComment)
  94. #end
  95. #if($column.pk)
  96. <el-table-column v-if="${column.list}" label="${comment}" align="center" prop="${javaField}" />
  97. #set($aIndex = $aIndex + 1)
  98. #elseif($column.list && $column.htmlType == "datetime")
  99. <el-table-column v-if="columns[$aIndex].visible" label="${comment}" align="center" prop="${javaField}" width="180">
  100. <template #default="scope">
  101. <span>{{ parseTime(scope.row.${javaField}, '{y}-{m}-{d}') }}</span>
  102. </template>
  103. </el-table-column>
  104. #set($aIndex = $aIndex + 1)
  105. #elseif($column.list && $column.htmlType == "imageUpload")
  106. <el-table-column v-if="columns[$aIndex].visible" label="${comment}" align="center" prop="${javaField}" width="100">
  107. <template #default="scope">
  108. <image-preview :src="scope.row.${javaField}" :width="50" :height="50"/>
  109. </template>
  110. </el-table-column>
  111. #set($aIndex = $aIndex + 1)
  112. #elseif($column.list && $column.dictType && "" != $column.dictType)
  113. <el-table-column v-if="columns[$aIndex].visible" label="${comment}" align="center" prop="${javaField}">
  114. <template #default="scope">
  115. #if($column.htmlType == "checkbox")
  116. <dict-tag :options="${column.dictType}" :value="scope.row.${javaField} ? scope.row.${javaField}.split(',') : []"/>
  117. #else
  118. <dict-tag :options="${column.dictType}" :value="scope.row.${javaField}"/>
  119. #end
  120. </template>
  121. </el-table-column>
  122. #set($aIndex = $aIndex + 1)
  123. #elseif($column.list && "" != $javaField)
  124. <el-table-column v-if="columns[$aIndex].visible" label="${comment}" align="center" prop="${javaField}" />
  125. #set($aIndex = $aIndex + 1)
  126. #end
  127. #end
  128. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  129. <template #default="scope">
  130. <el-tooltip content="修改" placement="top">
  131. <el-button v-hasPermi="['${moduleName}:${businessName}:edit']" link type="primary" icon="Edit" @click="openForm('update',scope.row)"></el-button>
  132. </el-tooltip>
  133. <el-tooltip content="删除" placement="top">
  134. <el-button v-hasPermi="['${moduleName}:${businessName}:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
  135. </el-tooltip>
  136. </template>
  137. </el-table-column>
  138. </el-table>
  139. <!-- 翻页组件 -->
  140. <pagination v-show="total > 0" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" :total="total" @pagination="getList" />
  141. </el-card>
  142. <!-- 添加或修改${functionName}对话框 -->
  143. <detail-form ref="detailFormRef" apped-to-body @success="getList" />
  144. </div>
  145. </template>
  146. <script setup name="${BusinessName}" lang="ts">
  147. /** 模块导入 */
  148. #if(${webPrefix} != '')
  149. import { list${BusinessName}, del${BusinessName} } from '@/api/${webPrefix}/${moduleName}/${businessName}';
  150. import { ${BusinessName}VO } from '@/api/${webPrefix}/${moduleName}/${businessName}/types';
  151. #else
  152. import { list${BusinessName}, del${BusinessName} } from '@/api/${moduleName}/${businessName}';
  153. import { ${BusinessName}VO } from '@/api/${moduleName}/${businessName}/types';
  154. #end
  155. import DetailForm from './DetailForm.vue';
  156. defineOptions({ name: '${BusinessName}' });
  157. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  158. #if(${dicts} != '')
  159. /** 当前页面引用的数据字典 */
  160. #set($dictsNoSymbol=$dicts.replace("'", ""))
  161. const { ${dictsNoSymbol} } = toRefs<any>(proxy?.useDict(${dicts}));
  162. #end
  163. // 是否加载遮罩层
  164. const loading = ref(true);
  165. // 是否显示查询项
  166. const showSearch = ref(true);
  167. const ${businessName}List = ref<${BusinessName}VO[]>([]);
  168. // 列表选中的记录Id
  169. const ids = ref<Array<number | string>>([]);
  170. // 单选
  171. const single = ref(true);
  172. // 多选
  173. const multiple = ref(true);
  174. // 总记录数
  175. const total = ref(0);
  176. #foreach ($column in $columns)
  177. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  178. // 日期范围
  179. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  180. const dateRange${AttrName} = ref<[DateModelType, DateModelType]>(['', '']);
  181. #end
  182. #end
  183. // 查询窗体Ref
  184. const queryFormRef = ref<ElFormInstance>();
  185. const columns = ref<FieldOption[]>([
  186. #set($arrayIndex = 0)
  187. #foreach ($column in $columns)
  188. #if($column.isList == "1")
  189. #set($parentheseIndex=$column.columnComment.indexOf("("))
  190. #if($parentheseIndex != -1)
  191. #set($comment=$column.columnComment.substring(0, $parentheseIndex))
  192. #else
  193. #set($comment=$column.columnComment)
  194. #end
  195. ##数组下标$foreach.index
  196. { key: $arrayIndex, label: `$comment`, visible: true, children: [] },
  197. #set($arrayIndex = $arrayIndex + 1)
  198. #end
  199. #end
  200. ]);
  201. // 查询参数
  202. const queryParams = reactive({
  203. pageNum: 1,
  204. pageSize: 10,
  205. #foreach ($column in $columns)
  206. #if($column.query)
  207. #if($column.htmlType == "checkbox")
  208. $column.javaField: [],
  209. #elseif($column.javaType == "String")
  210. $column.javaField: '',
  211. #elseif($column.javaType == "Integer" || $column.javaType == "Long")
  212. $column.javaField: undefined,
  213. #else
  214. $column.javaField: undefined,
  215. #end
  216. #end
  217. #end
  218. params: {}
  219. });
  220. /** 查询${functionName}列表 */
  221. const getList = async () => {
  222. loading.value = true;
  223. #foreach ($column in $columns)
  224. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  225. queryParams.value.params = {};
  226. #break
  227. #end
  228. #end
  229. #foreach ($column in $columns)
  230. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  231. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  232. proxy?.addDateRange(queryParams.value, dateRange${AttrName}.value, '${AttrName}');
  233. #end
  234. #end
  235. const res = await list${BusinessName}(queryParams);
  236. ${businessName}List.value = res.rows;
  237. total.value = res.total;
  238. loading.value = false;
  239. };
  240. /** 搜索按钮操作 */
  241. const handleQuery = () => {
  242. queryParams.pageNum = 1;
  243. getList();
  244. };
  245. /** 重置按钮操作 */
  246. const resetQuery = () => {
  247. #foreach ($column in $columns)
  248. #if($column.htmlType == "datetime" && $column.queryType == "BETWEEN")
  249. #set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  250. dateRange${AttrName}.value = ['', ''];
  251. #end
  252. #end
  253. queryFormRef.value?.resetFields();
  254. handleQuery();
  255. };
  256. /** 多选框选中数据 */
  257. const handleSelectionChange = (selection: ${BusinessName}VO[]) => {
  258. ids.value = selection.map((item) => item.${pkColumn.javaField});
  259. single.value = selection.length != 1;
  260. multiple.value = !selection.length;
  261. };
  262. /** 删除按钮操作 */
  263. const handleDelete = async (row?: ${BusinessName}VO) => {
  264. const _${pkColumn.javaField}s = row?.${pkColumn.javaField} || ids.value;
  265. await proxy?.#[[$modal]]#.confirm('是否确认删除${functionName}编号为"' + _${pkColumn.javaField}s + '"的数据项?').finally(() => (loading.value = false));
  266. await del${BusinessName}(_${pkColumn.javaField}s);
  267. await getList();
  268. proxy?.#[[$modal]]#.msgSuccess('删除成功');
  269. };
  270. /** 导出按钮操作 */
  271. const handleExport = () => {
  272. proxy?.download(
  273. '${apiPrefix}/${moduleName}/${businessName}/export',
  274. {
  275. ...queryParams
  276. },
  277. `${businessName}_#[[${new Date().getTime()}]]#.xlsx`);
  278. };
  279. /** 弹出框(增加、修改) */
  280. const detailFormRef = ref();
  281. const openForm = (type: string, row?: ${BusinessName}VO) => {
  282. const id = row?.${pkColumn.javaField} || ids.value[0];
  283. detailFormRef?.value.open(type, id);
  284. };
  285. onMounted(() => {
  286. getList();
  287. });
  288. </script>