list.vue.ftl 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. <template>
  2. <div class="mod-${moduleName}__${classname}">
  3. <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
  4. <#list columnList as column>
  5. <#if column.query>
  6. <el-form-item>
  7. <#if column.formType == 'text' || column.formType == 'textarea' || column.formType == 'editor'>
  8. <el-input v-model="state.dataForm.${column.attrName}" placeholder="${column.comment!}" clearable></el-input>
  9. <#elseif column.formType == 'select'>
  10. <#if column.dictName??>
  11. <ren-select v-model="state.dataForm.${column.attrName}" dict-type="${column.dictName}" placeholder="${column.comment!}"></ren-select>
  12. <#else>
  13. <el-select v-model="state.dataForm.${column.attrName}" placeholder="${column.comment!}">
  14. <el-option label="选择" value="0"></el-option>
  15. </el-select>
  16. </#if>
  17. <#elseif column.formType == 'radio'>
  18. <#if column.dictName??>
  19. <ren-radio-group v-model="state.dataForm.${column.attrName}" dict-type="${column.dictName}"></ren-radio-group>
  20. <#else>
  21. <el-radio-group v-model="state.dataForm.${column.attrName}">
  22. <el-radio :label="0">单选</el-radio>
  23. </el-radio-group>
  24. </#if>
  25. <#elseif column.formType == 'date'>
  26. <el-date-picker v-model="state.daterange" type="daterange" value-format="YYYY-MM-DD" :range-separator="$t('datePicker.range')" :start-placeholder="$t('datePicker.start')" :end-placeholder="$t('datePicker.end')"></el-date-picker>
  27. <#elseif column.formType == 'datetime'>
  28. <el-date-picker v-model="state.datetimerange" type="datetimerange" value-format="YYYY-MM-DD HH:mm:ss" :range-separator="$t('datePicker.range')" :start-placeholder="$t('datePicker.start')" :end-placeholder="$t('datePicker.end')"></el-date-picker>
  29. <#else>
  30. <el-input v-model="state.dataForm.${column.attrName}" placeholder="${column.comment!}" clearable></el-input>
  31. </#if>
  32. </el-form-item>
  33. </#if>
  34. </#list>
  35. <el-form-item>
  36. <el-button @click="state.getDataList()">{{ $t("query") }}</el-button>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button type="info" @click="state.exportHandle()">{{ $t("export") }}</el-button>
  40. </el-form-item>
  41. <el-form-item>
  42. <el-button v-if="state.hasPermission('${moduleName}:${classname}:save')" type="primary" @click="addOrUpdateHandle()">{{ $t("add") }}</el-button>
  43. </el-form-item>
  44. <el-form-item>
  45. <el-button v-if="state.hasPermission('${moduleName}:${classname}:delete')" type="danger" @click="state.deleteHandle()">{{ $t("deleteBatch") }}</el-button>
  46. </el-form-item>
  47. </el-form>
  48. <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
  49. <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
  50. <#list columnList as column>
  51. <#if column.list>
  52. <#if column.dictName??>
  53. <el-table-column prop="${column.attrName}" label="${column.comment!}" header-align="center" align="center">
  54. <template v-slot="scope">
  55. {{ state.getDictLabel("${column.dictName}", scope.row.${column.attrName}) }}
  56. </template>
  57. </el-table-column>
  58. <#else>
  59. <el-table-column prop="${column.attrName}" label="${column.comment!}" header-align="center" align="center"></el-table-column>
  60. </#if>
  61. </#if>
  62. </#list>
  63. <el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
  64. <template v-slot="scope">
  65. <el-button v-if="state.hasPermission('${moduleName}:${classname}:update')" type="primary" link @click="addOrUpdateHandle(scope.row.id)">{{ $t("update") }}</el-button>
  66. <el-button v-if="state.hasPermission('${moduleName}:${classname}:delete')" type="primary" link @click="state.deleteHandle(scope.row.id)">{{ $t("delete") }}</el-button>
  67. </template>
  68. </el-table-column>
  69. </el-table>
  70. <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
  71. <!-- 弹窗, 新增 / 修改 -->
  72. <add-or-update :key="addKey" ref="addOrUpdateRef" @refreshDataList="state.getDataList"></add-or-update>
  73. </div>
  74. </template>
  75. <script lang="ts" setup>
  76. import useView from "@/hooks/useView";
  77. import { nextTick, reactive, ref, toRefs, watch } from "vue";
  78. import AddOrUpdate from "./${classname}-add-or-update.vue";
  79. const view = reactive({
  80. getDataListURL: "/${moduleName}/${classname}/page",
  81. getDataListIsPage: true,
  82. exportURL: "/${moduleName}/${classname}/export",
  83. deleteURL: "/${moduleName}/${classname}",
  84. deleteIsBatch: true,
  85. <#list columnList as column>
  86. <#if column.query>
  87. <#if column.formType == 'date'>
  88. daterange: null,
  89. <#elseif column.formType == 'datetime'>
  90. datetimerange: null,
  91. </#if>
  92. </#if>
  93. </#list>
  94. dataForm: {
  95. <#list columnList as column>
  96. <#if column.query>
  97. <#if column.formType == 'date'>
  98. startDate: null as number | null,
  99. endDate: null as number | null,
  100. <#elseif column.formType == 'datetime'>
  101. startDateTime: null as number | null,
  102. endDateTime: null as number | null,
  103. <#else>
  104. ${column.attrName}: "",
  105. </#if>
  106. </#if>
  107. </#list>
  108. }
  109. });
  110. const state = reactive({ ...useView(view), ...toRefs(view) });
  111. <#list columnList as column>
  112. <#if column.query>
  113. <#if column.formType == 'date'>
  114. watch(
  115. () => state.daterange,
  116. (val: number[] | null) => {
  117. if (val === null) {
  118. state.dataForm.startDate = null;
  119. state.dataForm.endDate = null;
  120. } else {
  121. state.dataForm.startDate = val[0];
  122. state.dataForm.endDate = val[1];
  123. }
  124. }
  125. );
  126. <#elseif column.formType == 'datetime'>
  127. watch(
  128. () => state.datetimerange,
  129. (val: number[] | null) => {
  130. if (val === null) {
  131. state.dataForm.startDateTime = null;
  132. state.dataForm.endDateTime = null;
  133. } else {
  134. state.dataForm.startDateTime = val[0];
  135. state.dataForm.endDateTime = val[1];
  136. }
  137. }
  138. );
  139. </#if>
  140. </#if>
  141. </#list>
  142. const addKey = ref(0);
  143. const addOrUpdateRef = ref();
  144. const addOrUpdateHandle = (${pk.attrName}?: number) => {
  145. addKey.value++;
  146. nextTick(() => {
  147. addOrUpdateRef.value.init(${pk.attrName});
  148. });
  149. };
  150. </script>