<template>
  <div class="putForward">
    <el-form :model="search" class="demo-form-inline" inline label-width="80px">
      <el-form-item label="提现单号">
        <el-input v-model="search.withdraw_no" placeholder="提现单号"></el-input>
      </el-form-item>
      <el-form-item label="订单号">
        <el-input v-model="search.out_trade_no" placeholder="订单号"></el-input>
      </el-form-item>
      <el-form-item label="用户ID">
        <el-input v-model="search.user_id" placeholder="用户ID"></el-input>
      </el-form-item>
      <el-form-item label="提现金额">
        <el-input v-model="search.money" placeholder="提现金额"></el-input>
      </el-form-item>
      <el-form-item label="提现时间">
        <el-date-picker
          type="datetimerange"
          v-model="search.payTime"
          range-separator="至"
          value-format="yyyy-MM-dd HH:mm:ss"
          start-placeholder="开始日期"
          end-placeholder="结束日期"
          :default-time="['00:00:00','23:59:59']"
          :picker-options="{shortcuts:[today,yesterday,last7Day,last30Day]}">
        </el-date-picker>
      </el-form-item>
      <el-form-item label="" v-if="$store.state.import">
        <el-upload
          :show-file-list="false"
          :onSuccess="fileSuccess"
          :headers="uploadHeader"
          :data="{param_token:param_token}"
          action="/api/admin/pay/users/import ">
          <el-button type="primary" plain>批量提现</el-button>
        </el-upload>
      </el-form-item>
      <el-form-item label="">
        <el-button type="primary" @click="onSearch">查询</el-button>
        <el-button type="primary" @click="exportTable" v-if="$store.state.export">导出</el-button>
        <el-button type="primary" v-if="$store.state.import" @click="manualPutForward">手动提现</el-button>
      </el-form-item>
    </el-form>
    <el-tabs v-model="search.status" type="card" style="background: white;padding-top: 10px" @tab-click="onSearch">
      <el-tab-pane label="提现成功" name="1"/>
      <el-tab-pane label="申请中" name="0"/>
      <el-tab-pane label="申请失败" name="2"/>
      <el-tab-pane label="全部" name="-1"/>
    </el-tabs>
    <el-table
      :data="tableData"
      border fixed
      style="width: 100%">
      <el-table-column
        prop="withdraw_no"
        label="提现单号"
      >
      </el-table-column>
      <el-table-column
        prop="out_trade_no"
        label="订单号"
      >
      </el-table-column>
      <el-table-column
        label="用户"
        width="200"
        className="f-c"
      >
        <template slot-scope="scope">
          <img class="avatar" :src="scope.row.user_avatar"/> {{scope.row.user_nickname}}(ID:{{scope.row.user_id}})
        </template>
      </el-table-column>
      <el-table-column
        prop="user_mobile"
        label="手机号"
      >
      </el-table-column>
      <el-table-column
        label="提现金额"
      >
        <template slot-scope="scope">
          {{ scope.row.money | moneyYuan}}
        </template>
      </el-table-column>
      <el-table-column
        label="提现状态">
        <template slot-scope="scope">
                    <span :class="{status:true,red:scope.row.status === 2,green:scope.row.status === 1}">
                    {{ scope.row | filterStatus}}
                    </span>
        </template>
      </el-table-column>
      <el-table-column
        label="提现成功时间"
      >
        <template slot-scope="scope">
          {{ scope.row.success_at }}
        </template>
      </el-table-column>
      <el-table-column
        label="提现时间">
        <template slot-scope="scope">
          {{ scope.row.created_at }}
        </template>
      </el-table-column>
      <!-- <el-table-column
        prop="reason"
        label="失败原因"
      >
      </el-table-column> -->
      <el-table-column
        prop="desc"
        label="备注"
      >
      </el-table-column>
      <el-table-column
        label="操作" fixed="right"
        v-if="!$store.state.readonly">
        <template slot-scope="scope">
          <el-button
            v-if="scope.row.status === 0"
            @click="checkMoney(scope.row.id, scope.row.desc)"
            type="text"
            size="small">
            审核
          </el-button>
          <el-button
            @click="addDesc(scope.row.id, scope.row.desc)"
            type="text"
            size="small">
            添加备注
          </el-button>
        </template>
      </el-table-column>
    </el-table>
    <page :nowPage="nowPage" :total="total" :limit="limit" @pageChange="onPageChange" @sizeChange="onSizeChange"/>
    <el-dialog :title="dialogTitle" v-if="showDialog" :visible.sync="showDialog">
      <el-form ref="saveuser" :model="nowObj" label-width="70px">
        <el-form-item label="订单状态" v-if="!showDesc">
          <template>
            <el-radio-group v-model="nowObj.status">
              <el-radio :label="1">提现成功</el-radio>
              <el-radio :label="2">提现失败</el-radio>
            </el-radio-group>
          </template>
        </el-form-item>
        <el-form-item label="失败理由" v-if="nowObj.status === 2 &&  !showDesc">
          <el-input type="textarea" rows="3" v-model="nowObj.reason" auto-complete="off"></el-input>
        </el-form-item>
        <el-form-item label="备注信息" v-if="showDesc">
          <el-input type="textarea" rows="3" v-model="nowObj.desc" auto-complete="off"></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="onSave(showDesc)">保 存</el-button>
        <el-button @click="showDialog = false">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog title="手动提现" v-if="putForwardDialog.show" :visible.sync="putForwardDialog.show">
      <el-form :model="putForwardDialog" :rules="rules" ref="refPutForward" label-width="80px">
        <el-row>
          <el-col :span="20">
            <el-form-item label="用户" prop="userLabel">
              <el-input readonly v-model="putForwardDialog.userLabel" placeholder="请选择用户"></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-button style="float: right" type="primary" @click="userDialog.show = true">选择用户</el-button>
          </el-col>
        </el-row>

        <el-form-item label="提现金额" prop="money">
          <el-input-number :min="0" v-model="putForwardDialog.money" placeholder="提现金额"></el-input-number>
        </el-form-item>
        <el-form-item label="提现说明" prop="desc">
          <el-input
            type="textarea"
            :rows="2"
            placeholder="请输入内容"
            v-model="putForwardDialog.desc">
          </el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="putForwardDialog.show = false">取 消</el-button>
        <el-button type="primary" @click="confirmPutForward">确 定</el-button>
      </span>
      <el-dialog :modal="false" :visible.sync="userDialog.show">
        <el-form label-width="90px">
          <el-row>
            <el-col :span="8">
              <el-form-item label="ID">
                <el-input v-model="searchFrom.userId"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="昵称">
                <el-input v-model="searchFrom.nickName"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="8">
              <el-form-item label="电话">
                <el-input v-model="searchFrom.mobile"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="8" :offset="16">
              <el-form-item>
                <el-button style="float: right" type="primary" plain @click="getUserList">搜索</el-button>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
        <el-table
          :data="userList"
          ref="multipleTable"
          @selection-change="handleSelectionChange"
          style="width: 100%">
          <el-table-column
            type="selection"
            width="55">
          </el-table-column>
          <el-table-column
            className="f-c"
            label="用户">
            <template slot-scope="scope">
              <img style="margin-right:5px;width: 50px;height: 50px;border-radius: 50px" :src="scope.row.avatar">{{scope.row.nickname}}(ID:{{scope.row.user_id}})
            </template>
          </el-table-column>
          <el-table-column
            prop="mobile"
            label="手机号">
          </el-table-column>
        </el-table>
        <page :total="userDialog.total" :limit="userDialog.limit" @pageChange="onUserPageChange" @sizeChange="onUserSizeChange"/>
        <span slot="footer" class="dialog-footer">
        <el-button @click="userDialog.show = false">取 消</el-button>
        <el-button type="primary" @click="onAdd">确 定</el-button>
      </span>
      </el-dialog>
    </el-dialog>
  </div>
</template>

<script>
  import {
    getWithdrawListApi,
    editOrderDescApi,
    withdrawApi,
    exportExcelApi,
    getUserListApi,
    payToUserApi
  } from "../../service/api";
  import Cookie from '../../util/cookie'
  import page from '../framework/page'
  import CommonJs from '../../util/common';
  import md5 from 'js-md5';

  let singjson = {
    sing: "singsingenglish21000"
  };
  export default {
    name: "putForward",
    data() {
      return {
        today: {
          text: '今天',
          onClick: (vm) => {
            vm.$emit('pick', [this.formatTime(new Date()) + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59'])
          }
        },
        yesterday: {
          text: '昨天',
          onClick: (vm) => {
            let preDate = this.formatTime(new Date(new Date().getTime() - 24 * 60 * 60 * 1000));
            vm.$emit('pick', [preDate + ' 00:00:00', preDate + ' 23:59:59'])
          }
        },
        last30Day: {
          text: '过去30天',
          onClick: (vm) => {
            let preDate = this.formatTime(new Date(new Date().getTime() - 30 * 24 * 60 * 60 * 1000));
            vm.$emit('pick', [preDate + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59']);
          }
        },
        last7Day: {
          text: '过去7天',
          onClick: (vm) => {
            let preDate = this.formatTime(new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000));
            vm.$emit('pick', [preDate + ' 00:00:00', this.formatTime(new Date()) + ' 23:59:59']);
          }
        },
        uploadHeader: {token: Cookie.get('cc_token')},
        param_token: CommonJs.md5Code(),
        nowPage: 1,
        total: 0,
        limit: 10,
        search: {
          key: '',
          status: '1',
          payTime: []
        },
        liStatus: [
          {
            label: '全部',
            status: ''
          },
          {
            label: '申请中',
            status: 0
          }, {
            label: '提现成功',
            status: 1
          }, {
            label: '提现失败',
            status: 2
          }
        ],
        tableData: [],
        showDialog: false,
        showDesc: false,
        dialogTitle: '审核',
        nowObj: {
          id: '',
          status: 1,
          reason: '',
          desc: ""
        },
        page: {
          current: 1,
          pageSize: 100,
          total: 0
        },
        putForwardDialog: {
          show: false,
          user_id: '',
          userLabel: '',
          money: 0,
          desc: ''
        },
        userList: [],
        rules: {
          userLabel: [
            {required: true, message: '请选择用户', trigger: 'change'}
          ],
          money: [
            {required: true, message: '请输入提现金额', trigger: 'change'}
          ],
          desc: [
            {required: true, message: '请输入提现说明', trigger: 'change'}
          ]
        },
        searchFrom: {},
        selectUserList: [],
        userDialog: {
          show: false,
          nowPage: 1,
          total: 0,
          limit: 5
        }
      }
    },
    components: {
      page
    },
    filters: {
      moneyYuan: function (value) {
        if (!value) {
          return 0 + '元';
        }
        return value = (value / 100).toFixed(2) + '元';
      },
      filterStatus: function (value) {
        let msg = '';
        if (value.status === 0) {
          msg = '审核中'
        } else if (value.status === 1) {
          msg = '提现成功'
        } else if (value.status === 2) {
          msg = '提现失败' + '(' + value.reason + ")"
        }
        return msg;
      },
      userLabel: function (val) {
        return `${val.nickname}[${val.user_id}]`
      }
    },
    mounted: function () {
      this.getList()
    },
    methods: {
      fileSuccess() {
        this.$message({
          message: '提交成功，请稍后刷新',
          type: 'success'
        });
      },
      formatTime(date) {
        let year = date.getFullYear();
        let Month = date.getMonth() + 1;
        if (Month < 10) {
          Month = `0${Month}`
        }
        let Day = date.getDate();
        if (Day < 10) Day = `0${Day}`;
        return `${year}-${Month}-${Day}`;
      },
      onSizeChange(val) {
        this.nowPage = 1;
        this.limit = val;
        this.getList()
      },
      exportTable() {
        let json = {};
        if (this.search.withdraw_no) {
          json.withdraw_no = this.search.withdraw_no
        }
        if (this.search.out_trade_no) {
          json.out_trade_no = this.search.out_trade_no
        }
        if (this.search.status || this.search.status === 0) {
          json.status = this.search.status
        }
        if (this.search.user_id) {
          json.user_id = this.search.user_id
        }
        if (this.search.money) {
          json.money = parseFloat(this.search.money) * 100
        }
        exportExcelApi('/api/admin/withdraw/export', json, '提现列表')
      },
      //获取列表
      getList: function () {
        let json = {
          limit: this.limit,
          page: this.nowPage
        };
        if (this.search.withdraw_no) {
          json.withdraw_no = this.search.withdraw_no
        }
        if (this.search.out_trade_no) {
          json.out_trade_no = this.search.out_trade_no
        }
        if (this.search.status && this.search.status !== '-1') {
          json.status = this.search.status
        }
        if (this.search.user_id) {
          json.user_id = this.search.user_id
        }
        if (this.search.payTime && this.search.payTime.length > 0) {
          json.success_start_at = this.search.payTime[0]
          json.success_end_at = this.search.payTime[1]
        }
        // if(this.search.success_start_at){
        //   json.success_start_at = this.search.success_start_at
        // }
        // if(this.search.success_end_at){
        //   json.success_end_at = this.search.success_end_at
        // }
        if (this.search.money) {
          json.money = parseFloat(this.search.money) * 100
        }
        getWithdrawListApi(json).then(res => {
          this.tableData = res.list;
          this.total = res.total;
        })
      },
      // 查询按钮
      onSearch() {
        this.nowPage = 1;
        //调用查询接口
        this.getList();
      },
      //点击审核
      checkMoney(id) {
        this.nowObj.id = id;
        this.showDesc = false;
        this.showDialog = true;

      },
      //点击备注
      addDesc(id, desc) {
        this.nowObj.id = id;
        this.nowObj.desc = desc;
        this.showDesc = true;
        this.showDialog = true;
      },
      //分页切换
      onPageChange(current) {
        this.nowPage = current;
        this.page.current = current;
        this.getList();
      },
      // 弹框请求回调
      doCallback: function () {
        this.nowObj.id = '';
        this.nowObj.status = 1;
        this.nowObj.reason = '';
        this.nowObj.desc = '';
        this.page.current = 1;
        this.showDialog = false;
        this.getList();
        this.$message({
          message: '提交成功',
          type: 'success'
        });
      },
      // 弹框保存按钮
      onSave: function (desc) {
        // 添加备注
        if (desc) {
          let data = {
            desc: this.nowObj.desc,
          };
          if (data.desc === '' || data.desc == null) {
            this.$message.error('请填写备注');
            return false
          }
          editOrderDescApi(this.nowObj.id, 'withdraw', data).then(res => {
            this.doCallback()
          });
          // 审核
        } else {
          let data = {
            reason: this.nowObj.reason,
            status: this.nowObj.status,
          };
          if ((data.reason === '' || data.reason == null) && data.status === 2) {
            this.$message.error('请填写失败理由');
            return false
          } else {
            data.reason = '';
          }
          withdrawApi(this.nowObj.id, data).then(res => {
            this.doCallback()
          })
        }
      },
      manualPutForward() {
        this.putForwardDialog.show = true;
        this.putForwardDialog.user_id = '';
        this.putForwardDialog.userLabel = '';
        this.putForwardDialog.money = 0;
        this.putForwardDialog.desc = '';
        this.getUserList();
      },
      getUserList() {
        let json = {
          limit: this.userDialog.limit,
          page: this.userDialog.nowPage
        }
        if (this.searchFrom.userId) {
          json.user_id = this.searchFrom.userId
        }
        if (this.searchFrom.nickName) {
          json.nickname = this.searchFrom.nickName
        }
        if (this.searchFrom.mobile) {
          json.mobile = this.searchFrom.mobile
        }
        getUserListApi(json).then(res => {
          this.userList = res.list;
          this.userDialog.total = res.total;
        })
      },
      confirmPutForward() {
        let json = {
          user_id: this.putForwardDialog.user_id,
          money: this.putForwardDialog.money,
          desc: this.putForwardDialog.desc
        }
        this.$refs["refPutForward"].validate((valid) => {
          if (valid) {
            this.$confirm('确定保存?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              payToUserApi(json).then(res => {
                this.$message({
                  type: 'success',
                  message: '保存成功'
                });
                this.getList();
                this.putForwardDialog.show = false;
              });
            });
          } else {
            return false;
          }
        });
      },
      handleSelectionChange(a) {
        this.selectUserList = a
      },
      onUserPageChange(val) {
        this.userDialog.nowPage = val
        this.getUserList()
      },
      onUserSizeChange(val) {
        this.userDialog.limit = val
        this.userDialog.nowPage = 1;
        this.getUserList()
      },
      onAdd() {
        if (this.selectUserList.length === 0) {
          this.$message({
            type: 'error',
            message: '请选择用户!'
          });
          return
        } else if (this.selectUserList.length !== 1) {
          this.$message({
            type: 'error',
            message: '只能选择一个用户!'
          });
          return
        }
        this.putForwardDialog.userLabel = `${this.selectUserList[0].nickname}[${this.selectUserList[0].user_id}]`
        this.putForwardDialog.user_id = this.selectUserList[0].user_id
        this.userDialog.show = false
      },
    }
  }
</script>

<style scoped>
  .putForward {
    padding: 20px 0;
  }

  .status {
    color: #e9a038;
  }

  .status.red {
    color: #c30005;
  }

  .status.green {
    color: #00ac00;
  }

  .avatar {
    width: 50px;
    margin-right: 5px;
    border-radius: 50%;
    height: 50px;
  }
</style>
<style>
  .f-c > .cell {
    display: flex !important;
    flex-flow: row;
    justify-content: flex-start;
    align-items: center;
  }
</style>
