index.vue 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. <template>
  2. <div class="app-container">
  3. <el-form
  4. :model="queryParams"
  5. ref="queryForm"
  6. :inline="true"
  7. v-show="showSearch"
  8. label-width="120px"
  9. >
  10. <el-form-item label="渠道/经销商名称">
  11. <el-input
  12. v-model="queryParams.name"
  13. placeholder="请输入渠道/经销商名称"
  14. clearable
  15. size="small"
  16. style="width: 240px"
  17. @change="pageParams.pageNum = 1;handleQuery()"
  18. />
  19. </el-form-item>
  20. <el-form-item label="申请时间">
  21. <el-date-picker
  22. v-model="tradeTimeArr"
  23. type="datetimerange"
  24. size="small"
  25. value-format="timestamp"
  26. range-separator="至"
  27. start-placeholder="时间选择"
  28. end-placeholder="时间选择"
  29. @change="tardeTime"
  30. >
  31. </el-date-picker>
  32. </el-form-item>
  33. <el-form-item>
  34. <el-button
  35. type="primary"
  36. icon="el-icon-search"
  37. size="mini"
  38. @click="handleQuery"
  39. >搜索</el-button
  40. >
  41. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
  42. >重置</el-button
  43. >
  44. </el-form-item>
  45. </el-form>
  46. <!-- 刷新 -->
  47. <el-row :gutter="10">
  48. <el-col :span="1.5">
  49. <el-button
  50. type="infor"
  51. plain
  52. icon="el-icon-download"
  53. size="small"
  54. @click="handleExportDraw"
  55. v-hasPermi="['finance:withdraw:export']"
  56. >导出记录</el-button
  57. >
  58. </el-col>
  59. <right-toolbar
  60. :showSearch.sync="showSearch"
  61. @queryTable="getList"
  62. ></right-toolbar>
  63. </el-row>
  64. <br>
  65. <!-- 列表状态 -->
  66. <el-tabs type="card" v-model="state" @tab-click="handleClick">
  67. <el-tab-pane label="全部" name="null"></el-tab-pane>
  68. <el-tab-pane label="待提现" name="1"></el-tab-pane>
  69. <el-tab-pane label="已提现" name="2"></el-tab-pane>
  70. <el-tab-pane label="提现失败" name="3"></el-tab-pane>
  71. </el-tabs>
  72. <!-- 列表 -->
  73. <el-table ref="table" v-loading="loading" :data="list">
  74. <!-- 不展开列表 -->
  75. <el-table-column label="申请时间" min-width="100">
  76. <template slot-scope="{ row }">
  77. <div>
  78. {{ parseTime(row.createTime) }}
  79. </div>
  80. </template>
  81. </el-table-column>
  82. <el-table-column label="处理时间" min-width="100">
  83. <template slot-scope="{ row }">
  84. <div v-if="row.status.value === 3">{{ parseTime(row.updateTime) || "--" }}</div>
  85. <div v-else>{{ parseTime(row.transferTime) || "--" }}</div>
  86. </template>
  87. </el-table-column>
  88. <el-table-column label="渠道名称" prop="name" min-width="85" />
  89. <el-table-column label="手机号码" prop="mobile" min-width="85" />
  90. <el-table-column label="渠道类型" prop="addr" min-width="80">
  91. <template slot-scope="{ row }">
  92. <div>{{ row.level == 0 ? "经销商" : "渠道" }}</div>
  93. </template>
  94. </el-table-column>
  95. <el-table-column label="提现金额(元)" align="center">
  96. <template slot-scope="{ row }">
  97. <div>{{ $numberFormat(row.money) }}</div>
  98. </template>
  99. </el-table-column>
  100. <el-table-column label="提现状态" prop="addr" min-width="80">
  101. <template slot-scope="{ row }">
  102. <div>
  103. <el-tag type="success" v-if="row.status.value === 1">待提现</el-tag>
  104. <el-tag type="info" v-else>{{ row.status.desc }}</el-tag>
  105. </div>
  106. </template>
  107. </el-table-column>
  108. <el-table-column label="操作" align="center" width="80">
  109. <template slot-scope="{ row }">
  110. <div>
  111. <el-button
  112. v-hasPermi="['finance:withdraw:query']"
  113. type="text"
  114. @click="getDetail(row)"
  115. >查看</el-button
  116. >
  117. </div>
  118. </template>
  119. </el-table-column>
  120. </el-table>
  121. <!-- 分页 -->
  122. <pagination
  123. v-show="total > 0"
  124. :total="total"
  125. :page.sync="pageParams.pageNum"
  126. :limit.sync="pageParams.pageSize"
  127. @pagination="getList"
  128. />
  129. <!-- 订单详情 -->
  130. <withdraw-detail v-if="detailShow" :dialog-show="detailShow" :info="detailInfo" @close="close" />
  131. </div>
  132. </template>
  133. <script>
  134. import { withdrawList, withdrawDetail, exchangeWithdrawExport } from "@/api/finance/withdraw";
  135. import WithdrawDetail from './components/Detail'
  136. export default {
  137. name: "Withdraw",
  138. components: {
  139. WithdrawDetail
  140. },
  141. data() {
  142. return {
  143. loading: false,
  144. showSearch: true,
  145. // 筛选
  146. queryParams: {
  147. name: "",
  148. startDay: "",
  149. endDay: "",
  150. channelId: "",
  151. status: null,
  152. },
  153. // 分页
  154. pageParams: {
  155. pageNum: 1,
  156. pageSize: 10,
  157. },
  158. // 总条数
  159. total: 0,
  160. list: [],
  161. // 列表状态
  162. state: "null",
  163. // 申请时间
  164. tradeTimeArr: [],
  165. // 弹框显示
  166. detailShow: false,
  167. // 提现id
  168. id: ''
  169. };
  170. },
  171. created() {
  172. this.getList();
  173. },
  174. methods: {
  175. // 提现列表
  176. getList() {
  177. this.loading = true;
  178. withdrawList(
  179. "pageNum=" +
  180. this.pageParams.pageNum +
  181. "&pageSize=" +
  182. this.pageParams.pageSize +
  183. "&",
  184. this.queryParams
  185. )
  186. .then((res) => {
  187. this.loading = false;
  188. if (res.code == 0) {
  189. res.rows.forEach((item) => {
  190. item.status = JSON.parse(item.status);
  191. });
  192. this.total = res.total;
  193. this.list = res.rows;
  194. }
  195. })
  196. .catch(() => {
  197. this.loading = false;
  198. });
  199. },
  200. // 搜索
  201. handleQuery() {
  202. this.getList()
  203. },
  204. // 重置
  205. resetQuery() {
  206. this.queryParams = {
  207. name: "",
  208. startDay: "",
  209. endDay: "",
  210. channelId: "",
  211. status: null,
  212. };
  213. this.state = "null";
  214. this.tradeTimeArr = [];
  215. this.getList();
  216. },
  217. // 列表状态切换
  218. handleClick(e) {
  219. this.queryParams.status = Number(e.name);
  220. this.getList();
  221. },
  222. // 选择申请时间
  223. tardeTime(e) {
  224. if (e) {
  225. this.queryParams.startDay = e[0];
  226. this.queryParams.endDay = e[1];
  227. this.pageParams.pageNum = 1
  228. this.handleQuery();
  229. } else {
  230. this.queryParams.startDay = "";
  231. this.queryParams.endDay = "";
  232. this.pageParams.pageNum = 1
  233. this.handleQuery();
  234. }
  235. },
  236. // 查看详情
  237. getDetail(row) {
  238. this.id = row.id
  239. this.getDetailInfo()
  240. },
  241. // 订单详情
  242. getDetailInfo() {
  243. withdrawDetail({ id: this.id }).then(res=>{
  244. console.log('res', res)
  245. if(res.code == 0){
  246. this.detailInfo = res.data
  247. this.detailShow = true;
  248. }
  249. })
  250. },
  251. // 弹框关闭
  252. close() {
  253. this.detailShow = false;
  254. this.getList();
  255. },
  256. // 导出订单
  257. handleExportDraw() {
  258. this.$confirm("是否确认导出记录?", "提示", {
  259. confirmButtonText: "确定",
  260. cancelButtonText: "取消",
  261. type: "warning",
  262. })
  263. .then(() => {
  264. this.vloading = this.$loading({
  265. lock: true,
  266. text: "正在导出记录.....",
  267. background: "rgba(0, 0, 0, 0.7)",
  268. });
  269. return exchangeWithdrawExport(this.queryParams);
  270. })
  271. .then((response) => {
  272. this.vloading.close();
  273. this.download(response.msg);
  274. })
  275. .catch(() => {
  276. this.vloading.close();
  277. });
  278. },
  279. },
  280. };
  281. </script>
  282. <style lang="scss" scoped>
  283. ::v-deep .el-tabs--border-card > .el-tabs__content {
  284. padding: 0;
  285. }
  286. </style>