index.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="filter.pageVo"
  5. class="filter-container"
  6. label-position="right">
  7. <div class="filter-view">
  8. <el-form-item>
  9. <el-input
  10. clearable
  11. v-model="filter.pageVo.criteria"
  12. placeholder="Search by Number/Email"
  13. @keyup.enter.native="getTableData" />
  14. </el-form-item>
  15. <el-form-item>
  16. <el-date-picker
  17. v-model="filter.pageVo.date"
  18. type="month"
  19. format="yyyy-MM"
  20. value-format="yyyy-MM"
  21. placeholder="Filter Date"/>
  22. </el-form-item>
  23. <el-form-item>
  24. <el-select
  25. filterable
  26. remote
  27. clearable
  28. v-model="filter.pageVo.sitePk"
  29. :remote-method="(s) => getSiteOptions(s)"
  30. placeholder="Filter by site"
  31. @change="getStationOptions">
  32. <el-option
  33. v-for="(item, index) in siteOptions"
  34. :key="index"
  35. :label="item.siteName"
  36. :value="item.sitePk"/>
  37. </el-select>
  38. </el-form-item>
  39. <el-form-item>
  40. <el-select
  41. clearable
  42. v-model="filter.pageVo.chargeBoxId"
  43. placeholder="Filter by Station ID"
  44. v-loading="listLoading">
  45. <el-option
  46. v-for="(item, index) in stationOptions"
  47. :key="index"
  48. :label="item.stationId"
  49. :value="item.stationId"/>
  50. </el-select>
  51. </el-form-item>
  52. <el-button
  53. type="primary"
  54. icon="el-icon-search"
  55. @click="getTableData">
  56. Search
  57. </el-button>
  58. </div>
  59. </el-form>
  60. <el-table
  61. :data="table.list"
  62. v-loading="loading">
  63. <el-table-column
  64. label="Transaction ID"
  65. align="center"
  66. prop="transactionPk"/>
  67. <el-table-column
  68. label="Site Name"
  69. align="center"
  70. prop="siteName"/>
  71. <el-table-column
  72. label="Station ID"
  73. align="center"
  74. prop="chargingPk"/>
  75. <el-table-column
  76. label="Start Date/Time"
  77. align="center"
  78. prop="startDateTime"/>
  79. <el-table-column
  80. label="End Date/Time"
  81. align="center"
  82. prop="endDateTime"/>
  83. <el-table-column
  84. label="Power (kwh)"
  85. align="center"
  86. prop="power"/>
  87. <el-table-column
  88. label="Rate"
  89. align="center"
  90. prop="rate"/>
  91. <el-table-column
  92. label="Charges"
  93. align="center"
  94. prop="charges"/>
  95. </el-table>
  96. <div class="right">
  97. <Pagination
  98. v-show="table.total > 0"
  99. :total="table.total"
  100. :page.sync="filter.pageNo"
  101. :limit.sync="filter.pageSize"
  102. @pagination="getTableData" />
  103. </div>
  104. </div>
  105. </template>
  106. <script>
  107. import site from '@/http/api/site'
  108. import ocpp from '@/http/api/ocpp'
  109. import financial from '@/http/api/financial'
  110. import Pagination from '@/components/Pagination'
  111. export default {
  112. data() {
  113. return {
  114. loading: false,
  115. listLoading: false,
  116. siteOptions: [],
  117. stationOptions: [],
  118. table: {
  119. list: [],
  120. total: 0
  121. },
  122. filter: {
  123. pageNo: 1,
  124. pageSize: 10,
  125. pageVo: {
  126. date: "",
  127. sitePk: "",
  128. criteria: "",
  129. chargeBoxId: ""
  130. }
  131. },
  132. }
  133. },
  134. components: { Pagination },
  135. created() {
  136. this.getSiteOptions()
  137. this.getTableData()
  138. },
  139. methods: {
  140. getSiteOptions(search) {
  141. site.getAllSiteList({siteName: search ?? ""}).then(res => {
  142. if (res.data && res.data.length > 0) {
  143. this.siteOptions = res.data
  144. }
  145. });
  146. },
  147. getStationOptions() {
  148. this.listLoading = true;
  149. ocpp.getStationPages({
  150. pageNo: 1,
  151. pageSize: 20,
  152. pageVo: {
  153. date: "",
  154. sitePk: this.filter.pageVo.sitePk
  155. }
  156. }).then(res => {
  157. if (res.data) {
  158. this.stationOptions = res.data;
  159. }
  160. }).finally(() => {
  161. this.listLoading = false;
  162. })
  163. },
  164. getTableData() {
  165. this.loading = true;
  166. financial.getTransactionsPages(this.filter).then(res => {
  167. this.loading = false;
  168. if (res.data) {
  169. this.table.total = res.total
  170. this.table.list = res.data
  171. }
  172. }).catch(err => {
  173. this.loading = false;
  174. this.$message({
  175. message: err,
  176. type: 'error'
  177. })
  178. })
  179. }
  180. }
  181. }
  182. </script>
  183. <style>
  184. </style>