WithdrawList.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. <template>
  2. <div class="list-view">
  3. <div class="filters-container">
  4. <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input>
  5. <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">搜索 </el-button>
  6. <el-button @click="addRow" type="primary" icon="el-icon-plus" class="filter-item">添加 </el-button>
  7. <el-button
  8. @click="download"
  9. type="primary"
  10. icon="el-icon-download"
  11. :loading="downloading"
  12. class="filter-item"
  13. >导出EXCEL
  14. </el-button>
  15. <el-select v-model="status" multiple clearable @change="getData" placeholder="请选择提现状态">
  16. <el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value">
  17. </el-option>
  18. </el-select>
  19. </div>
  20. <el-table
  21. :data="tableData"
  22. row-key="id"
  23. ref="table"
  24. header-row-class-name="table-header-row"
  25. header-cell-class-name="table-header-cell"
  26. row-class-name="table-row"
  27. cell-class-name="table-cell"
  28. :height="tableHeight"
  29. >
  30. <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
  31. <el-table-column prop="id" label="ID" width="80"> </el-table-column>
  32. <el-table-column prop="user.nickname" label="昵称"> </el-table-column>
  33. <el-table-column prop="amount" label="提现金额"> </el-table-column>
  34. <el-table-column prop="payMethod" label="提现方式" :formatter="payMethodFormatter"> </el-table-column>
  35. <el-table-column prop="status" label="提现状态" :formatter="statusFormatter"> </el-table-column>
  36. <el-table-column prop="account" label="账号"> </el-table-column>
  37. <el-table-column prop="realName" label="真实姓名"> </el-table-column>
  38. <el-table-column prop="createdAt" label="申请时间" show-overflow-tooltip> </el-table-column>
  39. <el-table-column prop="auditTime" label="审核时间" show-overflow-tooltip> </el-table-column>
  40. <el-table-column label="操作" align="left" fixed="right" min-width="150">
  41. <template slot-scope="{ row }">
  42. <!-- <el-button @click="editRow(row)" type="primary" size="mini" plain>详情</el-button> -->
  43. <el-button
  44. v-if="row.status === 'PENDING'"
  45. :loading="row.loading"
  46. @click="audit(row, true)"
  47. type="success"
  48. size="mini"
  49. plain
  50. >
  51. 通过
  52. </el-button>
  53. <el-button
  54. v-if="row.status === 'PENDING'"
  55. :loading="row.loading"
  56. @click="audit(row, false)"
  57. type="warning"
  58. size="mini"
  59. plain
  60. >
  61. 拒绝
  62. </el-button>
  63. <el-button @click="deleteRow(row)" type="danger" size="mini" plain v-else>删除</el-button>
  64. </template>
  65. </el-table-column>
  66. </el-table>
  67. <div class="pagination-wrapper">
  68. <!-- <div class="multiple-mode-wrapper">
  69. <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
  70. <el-button-group v-else>
  71. <el-button @click="operation1">批量操作1</el-button>
  72. <el-button @click="operation2">批量操作2</el-button>
  73. <el-button @click="toggleMultipleMode(false)">取消</el-button>
  74. </el-button-group>
  75. </div> -->
  76. <el-pagination
  77. background
  78. @size-change="onSizeChange"
  79. @current-change="onCurrentChange"
  80. :current-page="page"
  81. :page-sizes="[10, 20, 30, 40, 50]"
  82. :page-size="pageSize"
  83. layout="total, sizes, prev, pager, next, jumper"
  84. :total="totalElements"
  85. >
  86. </el-pagination>
  87. </div>
  88. </div>
  89. </template>
  90. <script>
  91. import { mapState } from 'vuex';
  92. import pageableTable from '@/mixins/pageableTable';
  93. export default {
  94. name: 'WithdrawList',
  95. mixins: [pageableTable],
  96. data() {
  97. return {
  98. multipleMode: false,
  99. search: '',
  100. url: '/withdraw/backAll',
  101. downloading: false,
  102. payMethodOptions: [
  103. { label: '微信', value: 'WEIXIN' },
  104. { label: '余额', value: 'YUE' },
  105. { label: '支付宝', value: 'ALI' }
  106. ],
  107. statusOptions: [
  108. { label: '提现成功', value: 'SUCCESS' },
  109. { label: '提现失败', value: 'FAIL' },
  110. { label: '待处理', value: 'PENDING' }
  111. ],
  112. status: []
  113. };
  114. },
  115. computed: {
  116. selection() {
  117. return this.$refs.table.selection.map(i => i.id);
  118. }
  119. },
  120. methods: {
  121. payMethodFormatter(row, column, cellValue, index) {
  122. let selectedOption = this.payMethodOptions.find(i => i.value === cellValue);
  123. if (selectedOption) {
  124. return selectedOption.label;
  125. }
  126. return '';
  127. },
  128. statusFormatter(row, column, cellValue, index) {
  129. let selectedOption = this.statusOptions.find(i => i.value === cellValue);
  130. if (selectedOption) {
  131. return selectedOption.label;
  132. }
  133. return '';
  134. },
  135. beforeGetData() {
  136. return {
  137. sort: 'createdAt,desc',
  138. search: this.search,
  139. query: {
  140. status: this.status
  141. }
  142. };
  143. },
  144. toggleMultipleMode(multipleMode) {
  145. this.multipleMode = multipleMode;
  146. if (!multipleMode) {
  147. this.$refs.table.clearSelection();
  148. }
  149. },
  150. addRow() {
  151. this.$router.push({
  152. path: '/withdrawEdit',
  153. query: {
  154. ...this.$route.query
  155. }
  156. });
  157. },
  158. editRow(row) {
  159. this.$router.push({
  160. path: '/withdrawEdit',
  161. query: {
  162. id: row.id
  163. }
  164. });
  165. },
  166. download() {
  167. this.downloading = true;
  168. this.$axios
  169. .get('/withdraw/excel', {
  170. responseType: 'blob',
  171. params: { size: 10000 }
  172. })
  173. .then(res => {
  174. console.log(res);
  175. this.downloading = false;
  176. const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
  177. const link = document.createElement('a');
  178. link.href = downloadUrl;
  179. link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
  180. document.body.appendChild(link);
  181. link.click();
  182. link.remove();
  183. })
  184. .catch(e => {
  185. console.log(e);
  186. this.downloading = false;
  187. this.$message.error(e.error);
  188. });
  189. },
  190. operation1() {
  191. this.$notify({
  192. title: '提示',
  193. message: this.selection
  194. });
  195. },
  196. operation2() {
  197. this.$message('操作2');
  198. },
  199. deleteRow(row) {
  200. this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
  201. .then(() => {
  202. return this.$http.post(`/withdraw/del/${row.id}`);
  203. })
  204. .then(() => {
  205. this.$message.success('删除成功');
  206. this.getData();
  207. })
  208. .catch(e => {
  209. if (e !== 'cancel') {
  210. this.$message.error(e.error);
  211. }
  212. });
  213. },
  214. audit(row, pass) {
  215. this.$set(row, 'loading', true);
  216. this.$http
  217. .post('/withdraw/audit', {
  218. id: row.id,
  219. pass: pass
  220. })
  221. .then(res => {
  222. this.$set(row, 'loading', false);
  223. this.$message.success('OK');
  224. this.getData();
  225. })
  226. .catch(e => {
  227. console.log(e);
  228. this.$set(row, 'loading', false);
  229. this.$message.error(e.error);
  230. });
  231. }
  232. }
  233. };
  234. </script>
  235. <style lang="less" scoped></style>