index.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  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="160px"
  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 v-if="row.level === 0">门店</div>
  93. <div v-else-if="row.level === 1">渠道</div>
  94. <div v-else-if="row.level === -1">推广员</div>
  95. </template>
  96. </el-table-column>
  97. <el-table-column label="提现金额(元)" align="center">
  98. <template slot-scope="{ row }">
  99. <div>{{ $numberFormat(row.money) }}</div>
  100. </template>
  101. </el-table-column>
  102. <el-table-column label="提现状态" prop="addr" min-width="80">
  103. <template slot-scope="{ row }">
  104. <div>
  105. <el-tag type="success" v-if="row.status.value === 1">待提现</el-tag>
  106. <el-tag type="info" v-else>{{ row.status.desc }}</el-tag>
  107. </div>
  108. </template>
  109. </el-table-column>
  110. <el-table-column label="操作" align="center" width="80">
  111. <template slot-scope="{ row }">
  112. <div>
  113. <el-button
  114. v-hasPermi="['finance:withdraw:query']"
  115. type="text"
  116. @click="getDetail(row)"
  117. >查看</el-button
  118. >
  119. </div>
  120. </template>
  121. </el-table-column>
  122. </el-table>
  123. <!-- 分页 -->
  124. <pagination
  125. v-show="total > 0"
  126. :total="total"
  127. :page.sync="pageParams.pageNum"
  128. :limit.sync="pageParams.pageSize"
  129. @pagination="getList"
  130. />
  131. <!-- 订单详情 -->
  132. <withdraw-detail v-if="detailShow" :dialog-show="detailShow" :info="detailInfo" @close="close" />
  133. </div>
  134. </template>
  135. <script>
  136. import { withdrawList, withdrawDetail, exchangeWithdrawExport } from "@/api/finance/withdraw";
  137. import WithdrawDetail from './components/Detail'
  138. export default {
  139. name: "Withdraw",
  140. components: {
  141. WithdrawDetail
  142. },
  143. data() {
  144. return {
  145. loading: false,
  146. showSearch: true,
  147. // 筛选
  148. queryParams: {
  149. name: "",
  150. startDay: "",
  151. endDay: "",
  152. channelId: "",
  153. status: null,
  154. },
  155. // 分页
  156. pageParams: {
  157. pageNum: 1,
  158. pageSize: 10,
  159. },
  160. // 总条数
  161. total: 0,
  162. list: [],
  163. // 列表状态
  164. state: "null",
  165. // 申请时间
  166. tradeTimeArr: [],
  167. // 弹框显示
  168. detailShow: false,
  169. // 提现id
  170. id: ''
  171. };
  172. },
  173. created() {
  174. this.getList();
  175. },
  176. methods: {
  177. // 提现列表
  178. getList() {
  179. this.loading = true;
  180. withdrawList(
  181. "pageNum=" +
  182. this.pageParams.pageNum +
  183. "&pageSize=" +
  184. this.pageParams.pageSize +
  185. "&",
  186. this.queryParams
  187. )
  188. .then((res) => {
  189. this.loading = false;
  190. if (res.code == 0) {
  191. res.rows.forEach((item) => {
  192. item.status = JSON.parse(item.status);
  193. });
  194. this.total = res.total;
  195. this.list = res.rows;
  196. }
  197. })
  198. .catch(() => {
  199. this.loading = false;
  200. });
  201. },
  202. // 搜索
  203. handleQuery() {
  204. this.getList()
  205. },
  206. // 重置
  207. resetQuery() {
  208. this.queryParams = {
  209. name: "",
  210. startDay: "",
  211. endDay: "",
  212. channelId: "",
  213. status: null,
  214. };
  215. this.state = "null";
  216. this.tradeTimeArr = [];
  217. this.getList();
  218. },
  219. // 列表状态切换
  220. handleClick(e) {
  221. this.queryParams.status = Number(e.name);
  222. this.getList();
  223. },
  224. // 选择申请时间
  225. tardeTime(e) {
  226. if (e) {
  227. this.queryParams.startDay = e[0];
  228. this.queryParams.endDay = e[1];
  229. this.pageParams.pageNum = 1
  230. this.handleQuery();
  231. } else {
  232. this.queryParams.startDay = "";
  233. this.queryParams.endDay = "";
  234. this.pageParams.pageNum = 1
  235. this.handleQuery();
  236. }
  237. },
  238. // 查看详情
  239. getDetail(row) {
  240. this.id = row.id
  241. this.getDetailInfo()
  242. },
  243. // 订单详情
  244. getDetailInfo() {
  245. withdrawDetail({ id: this.id }).then(res=>{
  246. console.log('res', res)
  247. if(res.code == 0){
  248. this.detailInfo = res.data
  249. this.detailShow = true;
  250. }
  251. })
  252. },
  253. // 弹框关闭
  254. close() {
  255. this.detailShow = false;
  256. this.getList();
  257. },
  258. // 导出订单
  259. handleExportDraw() {
  260. this.$confirm("是否确认导出记录?", "提示", {
  261. confirmButtonText: "确定",
  262. cancelButtonText: "取消",
  263. type: "warning",
  264. })
  265. .then(() => {
  266. this.vloading = this.$loading({
  267. lock: true,
  268. text: "正在导出记录.....",
  269. background: "rgba(0, 0, 0, 0.7)",
  270. });
  271. return exchangeWithdrawExport(this.queryParams);
  272. })
  273. .then((response) => {
  274. this.vloading.close();
  275. this.download(response.msg);
  276. })
  277. .catch(() => {
  278. this.vloading.close();
  279. });
  280. },
  281. },
  282. };
  283. </script>
  284. <style lang="scss" scoped>
  285. ::v-deep .el-tabs--border-card > .el-tabs__content {
  286. padding: 0;
  287. }
  288. </style>