index.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  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. <div>
  53. <el-button
  54. type="primary"
  55. icon="el-icon-search"
  56. @click="getTableData">
  57. Search
  58. </el-button>
  59. </div>
  60. </div>
  61. </el-form>
  62. <el-table
  63. :data="table.list"
  64. v-loading="loading">
  65. <el-table-column
  66. label="Transaction ID"
  67. align="center"
  68. prop="transactionPk"/>
  69. <el-table-column
  70. label="Site Name"
  71. align="center"
  72. prop="siteName"/>
  73. <el-table-column
  74. label="Station ID"
  75. align="center"
  76. prop="chargingPk"/>
  77. <el-table-column
  78. label="Start Date/Time"
  79. align="center"
  80. prop="startDateTime"/>
  81. <el-table-column
  82. label="End Date/Time"
  83. align="center"
  84. prop="endDateTime"/>
  85. <el-table-column
  86. label="Power (kwh)"
  87. align="center"
  88. prop="power"/>
  89. <el-table-column
  90. label="Rate"
  91. align="center"
  92. prop="rate"/>
  93. <el-table-column
  94. label="Charges"
  95. align="center"
  96. prop="charges"/>
  97. </el-table>
  98. <div class="right">
  99. <Pagination
  100. v-show="table.total > 0"
  101. :total="table.total"
  102. :page.sync="filter.pageNo"
  103. :limit.sync="filter.pageSize"
  104. @pagination="getTableData" />
  105. </div>
  106. </div>
  107. </template>
  108. <script>
  109. import site from '@/http/api/site'
  110. import ocpp from '@/http/api/ocpp'
  111. import financial from '@/http/api/financial'
  112. import Pagination from '@/components/Pagination'
  113. export default {
  114. data() {
  115. return {
  116. loading: false,
  117. listLoading: false,
  118. siteOptions: [],
  119. stationOptions: [],
  120. table: {
  121. list: [],
  122. total: 0
  123. },
  124. filter: {
  125. pageNo: 1,
  126. pageSize: 10,
  127. pageVo: {
  128. date: "",
  129. sitePk: "",
  130. criteria: "",
  131. chargeBoxId: ""
  132. }
  133. },
  134. }
  135. },
  136. components: { Pagination },
  137. created() {
  138. this.getSiteOptions()
  139. this.getTableData()
  140. },
  141. methods: {
  142. getSiteOptions(search) {
  143. site.getAllSiteList({siteName: search ?? ""}).then(res => {
  144. if (res.data && res.data.length > 0) {
  145. this.siteOptions = res.data
  146. }
  147. });
  148. },
  149. getStationOptions() {
  150. this.listLoading = true;
  151. ocpp.getStationPages({
  152. pageNo: 1,
  153. pageSize: 20,
  154. pageVo: {
  155. date: "",
  156. sitePk: this.filter.pageVo.sitePk
  157. }
  158. }).then(res => {
  159. if (res.data) {
  160. this.stationOptions = res.data;
  161. }
  162. }).finally(() => {
  163. this.listLoading = false;
  164. })
  165. },
  166. getTableData() {
  167. this.loading = true;
  168. financial.getTransactionsPages(this.filter).then(res => {
  169. this.loading = false;
  170. if (res.data) {
  171. this.table.total = res.total
  172. this.table.list = res.data
  173. }
  174. }).catch(err => {
  175. this.loading = false;
  176. this.$message({
  177. message: err,
  178. type: 'error'
  179. })
  180. })
  181. }
  182. }
  183. }
  184. </script>
  185. <style>
  186. </style>