<template>
  <div class="app-container">
    <el-card class="box-card">
      <p class="card-header-tip">
        提现状态：<span class="pay-status">{{ payStatusFormatter(withdrawInfo.pay_status) }}</span>
        <span>如果您是电子发票，则不用填写快递公司和单号信息，需上传电子发票图片，同时将电子发票发送至电子邮箱，查看</span>
        <span class="checked-email-rule" @click="isViewSendRuleDialog = true">【电子邮箱及发票发送格式】</span>
      </p>

      <div class="main">
        <div class="card-header-title">
          <span class="blue-block blue-block-goods-title"></span>提现信息
        </div>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">提现流水单号</el-col>
          <el-col :span="9" class="text-l">{{ withdrawInfo.sn }}</el-col>
        </el-row>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">提现时间</el-col>
          <el-col :span="9" class="text-l">{{ formatter(withdrawInfo.created_time) }}</el-col>
        </el-row>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">提现金额</el-col>
          <el-col :span="9" class="text-l">{{ withdrawInfo.amount ? withdrawInfo.amount / 100 : 0 }} 元</el-col>
        </el-row>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">手续费</el-col>
          <el-col :span="9" class="text-l">{{ withdrawInfo.service_fee ? withdrawInfo.service_fee / 100 : 0 }} 元</el-col>
        </el-row>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">实际到账金额</el-col>
          <el-col :span="9" class="text-l">{{ withdrawInfo.real_amount ? withdrawInfo.real_amount / 100 : 0  }} 元</el-col>
        </el-row>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">提现至账户</el-col>
          <el-col :span="9" class="text-l">{{ withdrawInfo.bank_name_all }}</el-col>
        </el-row>

        <el-row class="row-title">
          <el-col :span="4" class="text-r">发票信息</el-col>
          <el-col :span="9" class="text-l">
            <el-link v-if="withdrawInfo.invoice_status == 1" :underline="false" type="primary" @click="viewInvoiceDetails">点击查看发票</el-link>
            <el-link v-else disabled>发票未提交</el-link>
          </el-col>
        </el-row>

        <div class="card-header-title">
          <span class="blue-block blue-block-goods-title"></span>打款备注
        </div>
        <div class="remark-con">
          <p v-if="payRemark">{{ payRemark }}</p>
          <p v-else style="color: #555;">暂无备注</p>
        </div>
      </div>

      <div class="footer-btn">
        <el-button type="primary" @click="exportGoodsDetails" style="margin-right:20px;">导出商品明细</el-button>
        <el-button @click="submitInvoiceAgain" :disabled="isSubmitInvoice">补充发票信息</el-button>
      </div>

    </el-card>

    <!-- 电子发票 规则 -->
    <el-dialog
      title="电子发票发送格式"
      :visible.sync="isViewSendRuleDialog"
      width="40%"
      center
    >
      <div class="view-sendemail-rule">
        <p>您好，如果您是电子发票，请通过邮箱按照以下格式发送：</p>
        <p><span class="span-title">标题：</span>【XXX公司】电子发票</p>
        <p><span class="span-title spe-1">收件人：</span>finanical@stbz.net</p>
        <p><span class="span-title">正文内容：</span>【XXX公司】电子发票</p>
        <p><span class="span-title spe-1">附件：</span>电子发票</p>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="isViewSendRuleDialog = false" >取 消</el-button>
      </span>
    </el-dialog>

    <!-- 补充发票 信息 -->
    <el-dialog
      title="补充发票信息"
      :destroy-on-close="true"
      :visible.sync="isAddInvoiceAgainDialog"
      :before-close="cancelUpInvoiceImg"
      width="40%"
      center>
      <el-form ref="addInvoiceForm" :model="addInvoiceForm" :rules="addInvoiceRule" label-width="150px" class="add-invoice-form" size="small">
        <el-form-item label="快递公司：" prop="express_name">
          <el-select v-model="addInvoiceForm.express_name" filterable placeholder="请选择快递公司" style="width: 80%;">
            <el-option
              v-for="item in expressLists"
              :key="item.value"
              :label="item.label"
              :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>

        <el-form-item label="快递单号：" prop="express_sn">
          <el-input v-model="addInvoiceForm.express_sn" placeholder="请输入快递单号" style="width: 80%;"></el-input>
        </el-form-item>

        <el-form-item label="发票图片：" prop="invoice_img">
          <el-upload
            class="avatar-uploader"
            action=""
            list-type="picture-card"
            :http-request="uploadInvoiceImg"
            :before-upload="beforeUpInvoiceImg"
            :file-list="invoiceImgList"
            :limit="1"
            :on-exceed="limitCount1"
            :before-remove ="beforeRemoveInvoiceImg"
            :on-remove="removeInvoiceImg"
            :on-preview="handleInvoiceImg"
          >
            <i class="el-icon-plus"></i>

          </el-upload>
          <el-dialog :visible.sync="dialogVisibleInvoiceImg" class="dialog-img-spe">
            <img width="100%" :src="dialogInvoiceImg" alt=""/>
          </el-dialog>
          <div class="textTip">最多上传一张图片，仅限jpg/png格式，大小限制在500kb以内</div>
        </el-form-item>

      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitInvoice" size="small">确 定</el-button>
        <el-button type="primary" @click="cancelUpInvoiceImg" size="small">取 消</el-button>
      </span>
    </el-dialog>

    <!-- 查看发票 信息 -->
    <el-dialog
      title="发票信息"
      :destroy-on-close="true"
      :visible.sync="isViewInvoiceAgainDialog"
      width="40%"
      center>
      <el-form :model="viewInvoiceForm" label-width="150px" class="add-invoice-form" size="small">
        <el-form-item label="快递公司：" >
          <el-input v-model="viewInvoiceForm.express_name" placeholder="请输入快递单号" disabled style="width: 80%;"></el-input>
        </el-form-item>

        <el-form-item label="快递单号：">
          <el-input v-model="viewInvoiceForm.express_sn" placeholder="请输入快递单号" disabled style="width: 80%;"></el-input>
        </el-form-item>

        <el-form-item label="发票图片：">
          <div v-if="viewInvoiceForm.invoice_img">
            <el-image
              style="width: 100px; height: 100px;border:1px solid #eee;"
              :src="viewInvoiceForm.invoice_img"
              :preview-src-list="viewInvoiceForm.invoiceImgList">
            </el-image>
          </div>
          <div class="textTip">最多上传一张图片，仅限jpg/png格式，大小限制在500kb以内</div>
        </el-form-item>

      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="isViewInvoiceAgainDialog = false" size="small">确 定</el-button>
      </span>
    </el-dialog>

  </div>
</template>

<script>
  import { getWithdrawlogDetailsData,exportGoodsDetailsData,getExpressListData ,upLoadImg, addInvoiceData } from '@/api/module/bankcard'
  import {dateFormat} from '@/utils'
  export default {
    name: "Wddetails",
    data() {
      let checkPic = (rule, value, callback) => {
        if(this.invoiceImgList.length > 0) {
          callback();
        }else if(this.invoiceImgList.length === 0) {
          callback(new Error("发票图片不能为空"));
        }
      };
      return {
        withdrawId: 0,
        withdrawInfo: {
          pay_status: 0,
          sn: '',
          created_time: 0,
          amount: 0,
          service_fee: 0,
          real_amount: 0,
          bank_name: '',
          bank_branch_name: '',
          bank_card_id: '',
          bank_name_all: '',
          invoice_status: 0,
        },
        payRemark: '', // 打款备注
        // 查看 电子发票发送格式
        isViewSendRuleDialog: false,
        isSubmitInvoice: false, // 是否 补充提交发票

        // 补充发票
        isAddInvoiceAgainDialog: false, // 补充发票信息 对话框
        expressLists: [],
        invoiceImgList: [],// 发票图片 file
        invoiceImgBase64List: [],// 发票图片 base64格式
        addInvoiceForm: {
          express_name: '',
          express_sn: '',
          invoice_img: ''
        },
        addInvoiceRule: {
          express_name: [{required: true,message: '物流公司名称不能为空',trigger: 'change'}],
          express_sn: [{required: true,message: '快递单号不能为空',trigger: 'blur'}],
          invoice_img: [{ required: true, validator: checkPic}]
        },

        dialogVisibleInvoiceImg: false,
        dialogInvoiceImg: '',

        // 查看 发票信息
        isViewInvoiceAgainDialog: false,
        viewInvoiceForm: {
          express_name: '',
          express_sn: '',
          invoice_img: '',
          invoiceImgList: [],
        }
      }
    }, // data end
    created() {
      // 提现记录 id
      this.withdrawId = Number(this.$route.query.withdrawId);
      // 获取 物流公司 列表
      this.getExpressList();
      //  查询 提现记录 详情
      this.getWithdrawlogDetails();
    },
    methods: {
      /** 查询 提现记录 详情 */
      getWithdrawlogDetails() {
        const id = this.withdrawId
        getWithdrawlogDetailsData({id: id}).then(res=> {
          if (res.code == 1 && res.data) {
            if (res.data.withdraw_info) {
              this.withdrawInfo = res.data.withdraw_info;
              // 提现至账户 处理
              if( this.withdrawInfo.bank_card_id ) {
                let strBankcardId = this.withdrawInfo.bank_card_id + '';
                let Forward4 = strBankcardId.substring(0,4)
                let backward4 = strBankcardId.substring(strBankcardId.length-4,strBankcardId.length)
                this.withdrawInfo.bank_name_all = this.withdrawInfo.bank_name + '\u00a0\u00a0' + Forward4 + '****' + backward4;
              }
            }
            // 打款备注
            if(res.data.action_logs && res.data.action_logs.content) {
              this.payRemark = res.data.action_logs.content;
            }
          }
        });
      },

      /** 导出商品明细 */
      exportGoodsDetails() {
        exportGoodsDetailsData( {id: this.withdrawId} ).then(res=> {
          if (res.code == 1 &&  res.data) {
            const aLink = document.createElement('a');
            aLink.href = res.data;
            //aLink.download = '订单.xls'; //下载的文件名
            aLink.style.display = 'none';
            document.body.appendChild(aLink);
            aLink.click();
            document.body.removeChild(aLink);
          }else {
            this.$message({type:'error',message: res.message ? res.message: '导出失败'});
          }
        });
      },

      /** 补充发票信息 */
      submitInvoiceAgain() {
        this.isAddInvoiceAgainDialog = true;
      },

      /** 上传 发票图片 数量限制 1  */
      limitCount1(files, fileList) {
        this.$message({message: '最多上传1张图片', type: 'warning'});
      },

      /** 发票图片 各种校验*/
      beforeUpInvoiceImg(file) {
        if (file.type !== "image/png" && file.type !== "image/jpg" && file.type != "image/jpeg") {
          this.$message({
            message: '上传图片格式只支持png/png格式',
            type: "warning"
          });
          return false;
        }
        let isImgSize = (file.size / 1024 / 1024 / 1024) > 500;
        if (isImgSize) {
          this.$message({
            message: '上传图片大小不能超过500kb',
            type: "warning"
          });
          return false;
        }
      },

      /** 上传 发票 图片 */
      uploadInvoiceImg(param) {
        this.getBase64(param.file).then( res => {
          let result = res.split(",");
          this.Base64img = result[1];
          let data = {"img_data":this.Base64img};
          this.invoiceImgBase64List = [] // 初始化
          upLoadImg(data).then( res=> {
            let urlObj = {'url': ''};
            if(res.data) {
              urlObj.url = res.data.image_url;
              this.invoiceImgList.push(urlObj); // 展示用
              this.addInvoiceForm.invoice_img = res.data.image_url // 字段无用，清除校验有用
              this.invoiceImgBase64List.push( data.img_data );
              this.$message({type:'success',message:'图片上传成功'});
              this.$refs.addInvoiceForm.clearValidate('invoice_img');
            }
          });
        });
      },

      /** 发票 删除前 */
      beforeRemoveInvoiceImg(file) {
        if (file.status === "success") {
          return new Promise((res, rej) => {
            this.$confirm(`是否删除此图片`, '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              return res();
            }).catch(() => {
              this.$message({
                type: 'success',
                message: '取消删除!'
              });
              return rej();
            });
          });
        }
      },

      /** 发票图片 删除 */
      removeInvoiceImg(file) {
        if (file.status === "success") {
          for (let i = 0; i < this.invoiceImgList.length; i++) {
            if (file.uid === this.invoiceImgList[i].uid) {
              this.invoiceImgList.splice(i, 1);
              this.invoiceImgBase64List.splice(i, 1);
            }
          }
          this.$message( {type: 'success', message: '删除成功!'} );

          if(this.invoiceImgList.length === 0) {
            this.$refs.addInvoiceForm.validateField('invoice_img')
          }else {
            this.$refs.addInvoiceForm.clearValidate('invoice_img');
          }
        }
      },

      /** 发票图片 预览 */
      handleInvoiceImg(file) {
        this.dialogInvoiceImg = file.url;
        this.dialogVisibleInvoiceImg = true;
      },

      /** 提交 补充的发票信息 */
      submitInvoice() {
        let params = {
          id: '',
          express_company: '',
          express_no: '',
          invoice_img: [],
        }
        this.$refs.addInvoiceForm.validate((valid)=> {
          if (valid) {
            params.id = this.withdrawId;
            params.express_company = this.addInvoiceForm.express_name;
            params.express_no = this.addInvoiceForm.express_sn;
            params.invoice_img = this.invoiceImgBase64List

            addInvoiceData(params).then(res=> {
              if(res.code == 1) {
                this.$message({type:'success',message: '补充发票信息成功'});
                this.isAddInvoiceAgainDialog = false;
                this.resetAddInvoiceForm();
                this.getWithdrawlogDetails();
              }else {
                this.$message({type:'success',message:  res.message ? res.message : '补充发票信息失败' });
              }
            });
          }
        });
      },

      /** 取消 提交 补充的发票信息 */
      cancelUpInvoiceImg() {
        this.resetAddInvoiceForm();
        this.isAddInvoiceAgainDialog = false;
      },

      /** 初始化 补充发票的 表单数据 */
      resetAddInvoiceForm() {
        this.addInvoiceForm.express_name = ''
        this.addInvoiceForm.express_sn = ''
        this.addInvoiceForm.invoice_img = ''
        this.invoiceImgList = []
        this.invoiceImgBase64List = []
      },

      /** 查看 发票详情 */
      viewInvoiceDetails() {
        this.isViewInvoiceAgainDialog = true;
        if( this.withdrawInfo.express_company ) {
          this.viewInvoiceForm.express_name = this.withdrawInfo.express_company
        }
        if( this.withdrawInfo.express_no ) {
          this.viewInvoiceForm.express_sn = this.withdrawInfo.express_no
        }
        if( this.withdrawInfo.invoice_img_arr[0] ) {
          this.viewInvoiceForm.invoice_img = this.withdrawInfo.invoice_img_arr[0]
          this.viewInvoiceForm.invoiceImgList = this.withdrawInfo.invoice_img_arr
        }
      },

      /** 获取 物流公司 列表 */
      getExpressList() {
        getExpressListData().then(res=> {
          if (res.code == 1) {
            this.expressLists = res.data.expressLists
          }
        });
      },

      /** 提现状态 格式 */
      payStatusFormatter(type) {
        let typeMsg = '';
        if(type == 0) {
          typeMsg = '打款中'
        }else if (type == 1) {
          typeMsg = '提现成功'
        }
        return typeMsg
      },
      /** 时间格式化 */
      formatter(time) {
        return dateFormat(time * 1000, 'Y-m-d H:i:s')
      },
      /** 图片 base64 */
      getBase64(file) {
        return new Promise(function (resolve, reject) {
          let reader = new FileReader();
          let imgResult = "";
          reader.readAsDataURL(file);
          reader.onload = function () {
            imgResult = reader.result;
          };
          reader.onerror = function (error) {
            reject(error);
          };
          reader.onloadend = function () {
            resolve(imgResult);
          };
        });
      },
    }// methods end
  }
</script>

<style scoped>
  /deep/ .el-card__body{
    height: 100%;
    overflow: hidden;
  }

  .card-header-tip {
    height: 48px;
    line-height: 48px;
    background: #FFF5ED;
    border: 1px solid #F1914E;
    font-size: 14px;
    font-weight: 400;
    color: #333333;
    padding: 0 15px;
    margin-bottom: 0;
  }
  .pay-status {
    margin: 0 10px;
    font-size: 16px;
    font-weight: 600;
  }
  .checked-email-rule {
    color: #F1914E;
    cursor: pointer;
  }

  .main {
    height: calc(100% - 130px);
    overflow-y: auto;
  }

  .card-header-title {
    line-height: 24px;
    font-size: 18px;
    color: #000;
    font-weight: bold;
    margin: 20px 0;
  }

  .blue-block {
    display: inline-block;
    width: 5px;
    height: 24px;
    background: #3A84FF;
    margin: 0 9px 0 0;
    border-radius: 2px;
    vertical-align: bottom;
  }

  /* 提现信息 */
  .row-title {
    font-size: 14px;
    color: #333;
  }

  /deep/.el-col {
    border: 1px solid #eee;
    padding: 0 10px;
    height: 45px;
    display: flex;
    align-items: center;
  }

  .text-r {
    justify-content: center;
    background: #F7F8FA;
    align-items: center;
  }
  .text-l {
    justify-content: center;
    align-items: center;
  }

  .view-sendemail-rule {
    margin: 20px 20%;
  }
  .view-sendemail-rule > p{
    line-height: 30px;
  }
  .span-title {
    display: inline-block;
    width: 100px;
    text-align: left;
    font-weight: 500;
  }

  .spe-1 {
    margin-right: 7px;
  }

  .remark-con {
    min-height: 140px;
    width: 70%;
    background: #F7F8FA;
    border: 1px solid #E7E7EB;
    margin: 0 0 20px;
    font-size: 14px;
    padding: 0 20px;
    color: #333333;
  }

  .remark-con > p {
    line-height: 24px;
  }

  .footer-btn {
    width: calc(100% + 40px);
    margin-left: -20px;
    padding-top: 20px;
    height:65px;
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: center;
    box-shadow: 0 -8px 9px 1px rgba(51, 51, 51, 0.06);
  }

  /* 补充发票 */
  .add-invoice-form {
    margin: 0 40px;
  }
</style>
