index.vue.vm 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386
  1. <template>
  2. <div class="app-container">
  3. <!-- 搜索工作栏 -->
  4. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
  5. #foreach($column in $columns)
  6. #if ($column.listOperation)
  7. #set ($dictType=$column.dictType)
  8. #set ($javaField = $column.javaField)
  9. #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  10. #set ($comment=$column.columnComment)
  11. #if ($column.htmlType == "input")
  12. <el-form-item label="${comment}" prop="${javaField}">
  13. <el-input v-model="queryParams.${javaField}" placeholder="请输入${comment}" clearable @keyup.enter.native="handleQuery"/>
  14. </el-form-item>
  15. #elseif ($column.htmlType == "select" || $column.htmlType == "radio")
  16. <el-form-item label="${comment}" prop="${javaField}">
  17. <el-select v-model="queryParams.${javaField}" placeholder="请选择${comment}" clearable size="small">
  18. #if ("" != $dictType)## 设置了 dictType 数据字典的情况
  19. <el-option v-for="dict in this.getDictDatas(DICT_TYPE.$dictType.toUpperCase())"
  20. :key="dict.value" :label="dict.label" :value="dict.value"/>
  21. #else## 未设置 dictType 数据字典的情况
  22. <el-option label="请选择字典生成" value="" />
  23. #end
  24. </el-select>
  25. </el-form-item>
  26. #elseif($column.htmlType == "datetime")
  27. #if ($column.listOperationCondition != "BETWEEN")## 非范围
  28. <el-form-item label="${comment}" prop="${javaField}">
  29. <el-date-picker clearable v-model="queryParams.${javaField}" type="date" value-format="yyyy-MM-dd" placeholder="选择${comment}" />
  30. </el-form-item>
  31. #else## 范围
  32. <el-form-item label="${comment}" prop="${javaField}">
  33. <el-date-picker v-model="queryParams.${javaField}" style="width: 240px" value-format="yyyy-MM-dd HH:mm:ss" type="daterange"
  34. range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" :default-time="['00:00:00', '23:59:59']" />
  35. </el-form-item>
  36. #end
  37. #end
  38. #end
  39. #end
  40. <el-form-item>
  41. <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
  42. <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
  43. </el-form-item>
  44. </el-form>
  45. <!-- 操作工具栏 -->
  46. <el-row :gutter="10" class="mb8">
  47. <el-col :span="1.5">
  48. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="openForm(undefined)"
  49. v-hasPermi="['${permissionPrefix}:create']">新增</el-button>
  50. </el-col>
  51. <el-col :span="1.5">
  52. <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" :loading="exportLoading"
  53. v-hasPermi="['${permissionPrefix}:export']">导出</el-button>
  54. </el-col>
  55. ## 特殊:树表专属逻辑
  56. #if ( $table.templateType == 2 )
  57. <el-col :span="1.5">
  58. <el-button type="danger" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">
  59. 展开/折叠
  60. </el-button>
  61. </el-col>
  62. #end
  63. #if ($table.templateType != 2 && $deleteBatchEnable)
  64. <el-col :span="1.5">
  65. <el-button
  66. type="danger"
  67. plain
  68. icon="el-icon-delete"
  69. size="mini"
  70. :disabled="isEmpty(checkedIds)"
  71. @click="handleDeleteBatch"
  72. v-hasPermi="['${permissionPrefix}:delete']"
  73. >
  74. 批量删除
  75. </el-button>
  76. </el-col>
  77. #end
  78. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  79. </el-row>
  80. ## 特殊:主子表专属逻辑
  81. #if ( $table.templateType == 11 && $subTables && $subTables.size() > 0 )
  82. <el-table
  83. row-key="id"
  84. v-loading="loading"
  85. :data="list"
  86. :stripe="true"
  87. :highlight-current-row="true"
  88. :show-overflow-tooltip="true"
  89. @current-change="handleCurrentChange"
  90. #if ($deleteBatchEnable)
  91. @selection-change="handleRowCheckboxChange"
  92. #end
  93. >
  94. ## 特殊:树表专属逻辑
  95. #elseif ( $table.templateType == 2 )
  96. <el-table
  97. v-loading="loading"
  98. :data="list"
  99. :stripe="true"
  100. :show-overflow-tooltip="true"
  101. v-if="refreshTable"
  102. row-key="id"
  103. :default-expand-all="isExpandAll"
  104. :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
  105. >
  106. #else
  107. <el-table
  108. v-loading="loading"
  109. :data="list"
  110. :stripe="true"
  111. :show-overflow-tooltip="true"
  112. #if ($deleteBatchEnable)
  113. @selection-change="handleRowCheckboxChange"
  114. #end
  115. >
  116. #end
  117. #if ($table.templateType != 2 && $deleteBatchEnable)
  118. <el-table-column type="selection" width="55" />
  119. #end
  120. ## 特殊:主子表专属逻辑
  121. #if ( $table.templateType == 12 && $subTables && $subTables.size() > 0 )
  122. <!-- 子表的列表 -->
  123. <el-table-column type="expand">
  124. <template #default="scope">
  125. <el-tabs value="$subClassNameVars.get(0)">
  126. #foreach ($subTable in $subTables)
  127. #set ($index = $foreach.count - 1)
  128. #set ($subClassNameVar = $subClassNameVars.get($index))
  129. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  130. #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
  131. <el-tab-pane label="${subTable.classComment}" name="$subClassNameVar">
  132. <${subSimpleClassName}List :${subJoinColumn_strikeCase}="scope.row.id" />
  133. </el-tab-pane>
  134. #end
  135. </el-tabs>
  136. </template>
  137. </el-table-column>
  138. #end
  139. #foreach($column in $columns)
  140. #if ($column.listOperationResult)
  141. #set ($dictType=$column.dictType)
  142. #set ($javaField = $column.javaField)
  143. #set ($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})
  144. #set ($comment=$column.columnComment)
  145. #if ($column.javaType == "LocalDateTime")## 时间类型
  146. <el-table-column label="${comment}" align="center" prop="${javaField}" width="180">
  147. <template v-slot="scope">
  148. <span>{{ parseTime(scope.row.${javaField}) }}</span>
  149. </template>
  150. </el-table-column>
  151. #elseif("" != $column.dictType)## 数据字典
  152. <el-table-column label="${comment}" align="center" prop="${javaField}">
  153. <template v-slot="scope">
  154. <dict-tag :type="DICT_TYPE.$dictType.toUpperCase()" :value="scope.row.${column.javaField}" />
  155. </template>
  156. </el-table-column>
  157. #else
  158. <el-table-column label="${comment}" align="center" prop="${javaField}" />
  159. #end
  160. #end
  161. #end
  162. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  163. <template v-slot="scope">
  164. <el-button size="mini" type="text" icon="el-icon-edit" @click="openForm(scope.row.${primaryColumn.javaField})"
  165. v-hasPermi="['${permissionPrefix}:update']">修改</el-button>
  166. <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  167. v-hasPermi="['${permissionPrefix}:delete']">删除</el-button>
  168. </template>
  169. </el-table-column>
  170. </el-table>
  171. ## 特殊:树表专属逻辑(树不需要分页)
  172. #if ( $table.templateType != 2 )
  173. <!-- 分页组件 -->
  174. <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  175. @pagination="getList"/>
  176. #end
  177. <!-- 对话框(添加 / 修改) -->
  178. <${simpleClassName}Form ref="formRef" @success="getList" />
  179. ## 特殊:主子表专属逻辑
  180. #if ( $table.templateType == 11 && $subTables && $subTables.size() > 0 )
  181. <!-- 子表的列表 -->
  182. <el-tabs v-model="subTabsName">
  183. #foreach ($subTable in $subTables)
  184. #set ($index = $foreach.count - 1)
  185. #set ($subClassNameVar = $subClassNameVars.get($index))
  186. #set ($subSimpleClassName = $subSimpleClassNames.get($index))
  187. #set ($subJoinColumn_strikeCase = $subJoinColumn_strikeCases.get($index))
  188. <el-tab-pane label="${subTable.classComment}" name="$subClassNameVar">
  189. <${subSimpleClassName}List v-if="currentRow.id" :${subJoinColumn_strikeCase}="currentRow.id" />
  190. </el-tab-pane>
  191. #end
  192. </el-tabs>
  193. #end
  194. </div>
  195. </template>
  196. <script>
  197. import * as ${simpleClassName}Api from '@/api/${table.moduleName}/${table.businessName}';
  198. import ${simpleClassName}Form from './${simpleClassName}Form.vue';
  199. #if ($hasImageUploadColumn)
  200. import ImageUpload from '@/components/ImageUpload';
  201. #end
  202. #if ($hasFileUploadColumn)
  203. import FileUpload from '@/components/FileUpload';
  204. #end
  205. #if ($hasEditorColumn)
  206. import Editor from '@/components/Editor';
  207. #end
  208. ## 特殊:主子表专属逻辑
  209. #if ( $table.templateType != 10 )
  210. #if ( $subTables && $subTables.size() > 0 )
  211. #foreach ($subSimpleClassName in $subSimpleClassNames)
  212. import ${subSimpleClassName}List from './components/${subSimpleClassName}List.vue';
  213. #end
  214. #end
  215. #end
  216. export default {
  217. name: "${simpleClassName}",
  218. components: {
  219. ${simpleClassName}Form,
  220. ## 特殊:主子表专属逻辑
  221. #if ( $table.templateType != 10 )
  222. #if ( $subTables && $subTables.size() > 0 )
  223. #foreach ($subSimpleClassName in $subSimpleClassNames)
  224. ${subSimpleClassName}List,
  225. #end
  226. #end
  227. #end
  228. #if ($hasImageUploadColumn)
  229. ImageUpload,
  230. #end
  231. #if ($hasFileUploadColumn)
  232. FileUpload,
  233. #end
  234. #if ($hasEditorColumn)
  235. Editor,
  236. #end
  237. },
  238. data() {
  239. return {
  240. // 遮罩层
  241. loading: true,
  242. // 导出遮罩层
  243. exportLoading: false,
  244. // 显示搜索条件
  245. showSearch: true,
  246. ## 特殊:树表专属逻辑(树不需要分页接口)
  247. #if ( $table.templateType != 2 )
  248. // 总条数
  249. total: 0,
  250. #end
  251. // ${table.classComment}列表
  252. list: [],
  253. // 是否展开,默认全部展开
  254. isExpandAll: true,
  255. // 重新渲染表格状态
  256. refreshTable: true,
  257. // 选中行
  258. currentRow: {},
  259. checkedIds: [],
  260. // 查询参数
  261. queryParams: {
  262. ## 特殊:树表专属逻辑(树不需要分页接口)
  263. #if ( $table.templateType != 2 )
  264. pageNo: 1,
  265. pageSize: 10,
  266. #end
  267. #foreach ($column in $columns)
  268. #if ($column.listOperation)
  269. #if ($column.listOperationCondition != 'BETWEEN')
  270. $column.javaField: null,
  271. #end
  272. #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN")
  273. $column.javaField: [],
  274. #end
  275. #end
  276. #end
  277. },
  278. ## 特殊:主子表专属逻辑-erp
  279. #if ( $table.templateType == 11)
  280. #if ( $subTables && $subTables.size() > 0 )
  281. /** 子表的列表 */
  282. subTabsName: '$subClassNameVars.get(0)'
  283. #end
  284. #end
  285. };
  286. },
  287. created() {
  288. this.getList();
  289. },
  290. methods: {
  291. /** 查询列表 */
  292. async getList() {
  293. try {
  294. this.loading = true;
  295. ## 特殊:树表专属逻辑(树不需要分页接口)
  296. #if ( $table.templateType == 2 )
  297. const res = await ${simpleClassName}Api.get${simpleClassName}List(this.queryParams);
  298. this.list = this.handleTree(res.data, 'id', '${treeParentColumn.javaField}');
  299. #else
  300. const res = await ${simpleClassName}Api.get${simpleClassName}Page(this.queryParams);
  301. this.list = res.data.list;
  302. this.total = res.data.total;
  303. #end
  304. } finally {
  305. this.loading = false;
  306. }
  307. },
  308. /** 搜索按钮操作 */
  309. handleQuery() {
  310. this.queryParams.pageNo = 1;
  311. this.getList();
  312. },
  313. /** 重置按钮操作 */
  314. resetQuery() {
  315. this.resetForm("queryForm");
  316. this.handleQuery();
  317. },
  318. /** 添加/修改操作 */
  319. openForm(id) {
  320. this.#[[$]]#refs["formRef"].open(id);
  321. },
  322. /** 删除按钮操作 */
  323. async handleDelete(row) {
  324. const ${primaryColumn.javaField} = row.${primaryColumn.javaField};
  325. await this.#[[$modal]]#.confirm('是否确认删除${table.classComment}编号为"' + ${primaryColumn.javaField} + '"的数据项?')
  326. try {
  327. await ${simpleClassName}Api.delete${simpleClassName}(${primaryColumn.javaField});
  328. await this.getList();
  329. this.#[[$modal]]#.msgSuccess("删除成功");
  330. } catch {}
  331. },
  332. #if ($table.templateType != 2 && $deleteBatchEnable)
  333. /** 批量删除${table.classComment} */
  334. async handleDeleteBatch() {
  335. await this.#[[$modal]]#.confirm('是否确认删除?')
  336. try {
  337. await ${simpleClassName}Api.delete${simpleClassName}List(this.checkedIds);
  338. await this.getList();
  339. this.#[[$modal]]#.msgSuccess("删除成功");
  340. } catch {}
  341. },
  342. handleRowCheckboxChange(records) {
  343. this.checkedIds = records.map((item) => item.id);
  344. },
  345. #end
  346. /** 导出按钮操作 */
  347. async handleExport() {
  348. await this.#[[$modal]]#.confirm('是否确认导出所有${table.classComment}数据项?');
  349. try {
  350. this.exportLoading = true;
  351. const data = await ${simpleClassName}Api.export${simpleClassName}Excel(this.queryParams);
  352. this.#[[$]]#download.excel(data, '${table.classComment}.xls');
  353. } catch {
  354. } finally {
  355. this.exportLoading = false;
  356. }
  357. },
  358. ## 特殊:主子表专属逻辑
  359. #if ( $table.templateType == 11 )
  360. /** 选中行操作 */
  361. handleCurrentChange(row) {
  362. this.currentRow = row;
  363. #if ( $subTables && $subTables.size() > 0 )
  364. /** 子表的列表 */
  365. this.subTabsName = '$subClassNameVars.get(0)';
  366. #end
  367. },
  368. #end
  369. ## 特殊:树表专属逻辑
  370. #if ( $table.templateType == 2 )
  371. /** 展开/折叠操作 */
  372. toggleExpandAll() {
  373. this.refreshTable = false
  374. this.isExpandAll = !this.isExpandAll
  375. this.$nextTick(function () {
  376. this.refreshTable = true
  377. })
  378. }
  379. #end
  380. }
  381. };
  382. </script>