<template>
  <div>

    <ul class="tabWrap">
      <li v-for="(i,index) in tabList"
          :key="i.id"
          :class="{tabActive:currentTabActive == index}"
          @click="tabHandle(index)"
      >{{i.text}}
      </li>
    </ul>

    <div v-show="currentTabActive==0">

      <div v-if="currentNeed">
        <div class="car-wrap">
          <div class="carBG carBlue">
            <p class="carNumber">{{carNumber}}</p>
            <p class="payFee">{{(orderFee/100).toFixed(2)}}元</p>
          </div>
        </div>


        <ul class="fee-wrap">
          <li>
            <span>停车场</span>
            <span>{{ parkName }}</span>
          </li>
          <li>
            <span>入场时间</span>
            <span>{{ inparktime }}</span>
          </li>
          <li>
            <span>出场时间</span>
            <span>{{ outtime }}</span>
          </li>

          <li>
            <span>停车时长</span>
            <span>{{ $utils.dateFormat(staytime) }}</span>
          </li>

          <li>
            <span>总金额</span>
            <span>{{(due/100).toFixed(2)}} 元</span>
          </li>

          <li>
            <span>优惠金额</span>
            <span>{{(discountFee/100).toFixed(2)}} 元</span>
          </li>


          <li>
            <span>待缴金额</span>
            <span>{{(orderFee/100).toFixed(2)}} 元</span>
          </li>

        </ul>
        <div style="padding: 20px 18px">
          <div class="toPay" @click="toPay(101)">{{clientBrowser}}支付</div>
        </div>
      </div>

      <p v-else  style="padding-top: 30px;text-align: center">
        无需缴费
      </p>


    </div>

    <div v-show="currentTabActive==1" class="history-con">
      <div v-if="historyList.length>0">

        <p style="padding: 10px;color: #ac2525;">温馨提示：只展示车牌号    {{carNumber}}   所有历史欠费信息中的最多30条，核实车牌号是否正确，无误后确认缴费，此缴费不支持退款。</p>

        <ul class="his-wrap">
          <li v-for="(i, index) in historyList" :key="i.id" class="history-main">

            <p>
              <span>车场名称：{{i.parkName}}</span>
              <span><b style="color: #0564CC">￥{{(i.unPayFee/100).toFixed(2)}}元</b></span>

            </p>

            <p>
              <span>进场:{{i.parkInTime}}</span>
              <span>出场:{{i.parkOutTime}}</span>
            </p>

          </li>
        </ul>

        <div class="toPay payAll" @click="toPayHisrory">近期欠费{{(sumHis/100).toFixed(2)}}元。确认补缴</div>

      </div>

      <p v-else style="padding-top: 30px;text-align: center">
        暂无欠费记录
      </p>
    </div>


    <!--<div v-if="appOrderTimeout.length>0">-->
    <!--<p class="tip">-->
    <!--温馨提示：-->
    <!--</p>-->
    <!--<p style="color: #666;padding: 0 18px;">-->
    <!--{{appOrderTimeout}}-->
    <!--</p>-->
    <!--</div>-->

    <div class="parentBox" v-if="loadingFlag">
      <svg class="scalableBox" viewBox="0 0 128 256" width="128px" height="256px" xmlns="http://www.w3.org/2000/svg">
        <defs>
          <linearGradient id="ap-grad1" x1="0" y1="0" x2="0" y2="1">
            <stop offset="0%" stop-color="hsl(223,90%,55%)"/>
            <stop offset="100%" stop-color="hsl(253,90%,55%)"/>
          </linearGradient>
          <linearGradient id="ap-grad2" x1="0" y1="0" x2="0" y2="1">
            <stop offset="0%" stop-color="hsl(193,90%,55%)"/>
            <stop offset="50%" stop-color="hsl(223,90%,55%)"/>
            <stop offset="100%" stop-color="hsl(253,90%,55%)"/>
          </linearGradient>
        </defs>
        <circle class="apringBox" r="56" cx="64" cy="192" fill="none" stroke="#ddd" stroke-width="16"
                stroke-linecap="round"/>
        <circle class="apwormOneBox" r="56" cx="64" cy="192" fill="none" stroke="url(#ap-grad1)" stroke-width="16"
                stroke-linecap="round"
                stroke-dasharray="87.96 263.89"/>
        <path class="apwormTwoBox" d="M120,192A56,56,0,0,1,8,192C8,161.07,16,8,64,8S120,161.07,120,192Z" fill="none"
              stroke="url(#ap-grad2)"
              stroke-width="16" stroke-linecap="round" stroke-dasharray="87.96 494"/>
      </svg>
    </div>

  </div>
</template>

<script>

let Base64 = require("js-base64").Base64;
import { parkRecordList, historyQuery, aliPay, getOpenId, vxPayQuery, bankH5Pay } from "@/api/orderPay/orderPay";
export default {
  name: "dynCodePay",
  data() {
    return {
      tabList: [  // 切换数据
        { text: "本次缴费", id: 1 },
        { text: "历史欠费", id: 2 }
      ],
      currentTabActive: 0, // 显示当前哪个
      carWrapBG: 0,
      carNumber: "",  // 车牌
      parkName: "", // 停车场名称
      inparktime: "", // 入场时间
      outtime: "", // 出场时间
      staytime: "", // 停车时长
      orderFee: "", // 需要支付的费用
      due: "", //  总金额
      discountFee: "", // 优惠金额
      arrearageActFee: 0,
      arrearageDiscFee: 0,
      arrearageActFee: 0,
      clientBrowser: "", // 客户端
      paySrcType: 101, //支付的类型   101 是本次   103是历史欠费
      orderId: "",  //支付的订单
      webAppCode: "", // 微信code
      appOrderTimeout: "", // 超时描述
      loadingFlag: true,
      historyList: [],
      currentNeed: true,
      orderIds: [],
      sumHis: 0,
      tmpObjCookie:{},
    };
  },
  created() {
    //
    // this.$toast({
    //   message: '加载中...',
    //   position: 'top',
    //   duration: -1 // 设置为-1表示永久显示，直到手动关闭
    // });
    // this.carWrapBG = this.$route.query.carColor //车牌颜色
    this.tmpObjCookie = JSON.parse(sessionStorage.getItem('tmpObjCookie'))
    console.log(this.tmpObjCookie)
    console.log(this.tmpObjCookie.needPay)
    if (this.tmpObjCookie.needPay) {

    }else{
      this.currentNeed = false;
    }
    this.carNumber = this.tmpObjCookie.plateno;
    // this.carNumber = "蒙D3711K";
    this.getRecordList();
    this.parkName = this.tmpObjCookie.parkName;
    this.inparktime = this.tmpObjCookie.inparktime;
    this.outtime = this.tmpObjCookie.outtime;
    this.staytime = this.tmpObjCookie.staytime;
    this.orderFee = this.tmpObjCookie.orderFee;
    this.due = this.tmpObjCookie.due;
    this.discountFee = this.tmpObjCookie.discountFee;
    // this.arrearageTotalFee = this.$route.query.arrearageTotalFee // 应收
    // this.arrearageDiscFee = this.$route.query.arrearageDiscFee // 优惠
    // this.arrearageActFee = this.$route.query.arrearageActFee // 实收
    this.clientBrowser = this.$utils.clientBrowser(); //支付方式
    // this.paySrcType = this.$route.query.codeType // 实收
    this.orderId = this.tmpObjCookie.orderId;
    console.log(this.orderId)
    // this.appOrderTimeout = this.$route.query.appOrderTimeout
    if (this.clientBrowser == "微信") {
      this.webAppCode = this.getCode();
    }
  },
  methods: {
    toPayHisrory() {
      let me = this;
      let salt = this.$utils.myCommonSalt(32);
      this.historyList.forEach(function(item) {
        item.checked = true;
        me.orderIds.push(item.orderId);
      });
      let list = "[" + this.orderIds + "]";
      let jsondata = {
        app_id: this.$utils.myVarAppid,
        deviceInfo: this.$utils.myDeviceInfo,
        salt: salt,
        // sign: md5sign,
        sign_type: "md5",
        appId: this.$utils.myVxAppId,
        orderIds: list,
        terminalSource: "7",
        payType: this.$utils.clientBrowserPayType(),
        orgId: this.historyList[0].orgId
      };
      jsondata.sign = this.$utils.signObject(jsondata);
      console.log(jsondata);
      historyQuery(jsondata).then(response => {
        console.log(response);
        if (response.code == 0) {
          let res = response.data.carArrearages[0];
          console.log(res);
          // this.orderIds = JSON.stringify(this.orderIds)
          console.log(this.orderIds);
          me.toPay(103);
          // this.$router.push(
          //   {
          //     path: 'orderPay',
          //     query: {
          //       carColor: this.carColor,// 车牌颜色
          //       arrearageTotalFee: res.arrearageTotalFee,// 应收
          //       arrearageDiscFee: res.arrearageDiscFee,// 优惠
          //       arrearageActFee: res.arrearageActFee,// 实收
          //       carNumber: this.carNumber, // 车牌
          //       paySrcType: 103, //支付的类型   101 是本次   103是历史欠费
          //       ordeID: this.orderIds, //支付的订单号
          //       appOrderTimeout: '',
          //       myOrgId:this.historyList[0].orgId,
          //       backDeveloperCode: response.data.inChargerCode
          //     }
          //   }
          // )
        } else {
          this.$msgbox("提示", response.message);
        }
      });
    },
    tabHandle(index) { // tab 切换
      this.currentTabActive = index;
    },
    getRecordList() {
      var salt = this.$utils.myCommonSalt(32);
      var jsondata = {
        app_id: this.$utils.myVarAppid,
        deviceInfo: this.$utils.myDeviceInfo,
        salt: salt,
        sign_type: "md5",
        pageNum: 1,
        pageSize: 1000,
        parkState: 10,
        terminalSource: 7,
        carNumber: this.carNumber,
        carNumberColor: this.carColor,
        orgId: this.$utils.myOrgId
      };
      jsondata.sign = this.$utils.signObject(jsondata);
      parkRecordList(jsondata).then(response => {
        console.log(response.data.dataList);
        this.historyList = response.data.dataList.filter(item => {
          return item.parkState == "20";
        });
        this.historyList = this.historyList.slice(0, 30);
        this.sumHis = this.historyList.reduce((pre, cur) => {
          return Number(pre) + Number(cur.unPayFee);
        }, 0);
        console.log(this.sumHis)
        console.log(this.historyList.length);

        if(this.historyList.length>0){
          this.currentTabActive = 1
        }
        this.loadingFlag = false

      });
    },
    getCode() {
      var appID = this.$utils.myVxAppId;
      // alert(appID)
      var code = this.getUrlParam("code");
      var local = window.location.href;
      if (code == null || code === "") {
        window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appID + "&redirect_uri=" + encodeURIComponent(local) + "&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
      } else {
        return code;
      }
    },
    getUrlParam(name) {
      var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
      var r = window.location.search.substr(1).match(reg);
      if (r != null) return unescape(r[2]);
      return null;
    },
    toPay(paySrcType) {
      let me = this;
      let _order = []

      console.log(this.orderIds)
      if (paySrcType == 103) {
        console.log('1')
        // this.orderId = JSON.parse(this.orderId)
        this.orderIds.forEach(item => {
          _order.push({
            orderId: item
          })
        })
        // this.orderIds = []
        // this.orderIds = _order
        this.orderId = this.orderIds;
      }
      if (this.clientBrowser == "支付宝") { // 支付宝支付
        var aliParams = {};
        aliParams.orderId = this.orderId;
        aliParams.carNumber = this.carNumber;
        aliParams.payType = 1;// 1:支付宝 2：微信 3：银联 10:H5   4微信公众号
        aliParams.terminalSource = 7;//请求端来源 1： 任你停 2：pda 3：微信公共号 7:H5扫码 10页面支付
        aliParams.paySrcType = paySrcType;//101停车支付
        aliParams.orgId = this.$utils.myOrgId;
        aliParams.backType = 2;
        aliParams.recordArreaInfos = JSON.stringify( _order);
        console.log(aliParams);
        aliPay(aliParams).then(response => {
          console.log(response);
          if (response.code == 0) {//进场
            document.write(response.data);//打开支付表单
          } else {//其他情况如【该卡号场内已存在】
            console.log(response.message);
          }
        });
      }
      if (this.clientBrowser == "立即") { // 农行支付
        var bankabcParams = {};
        bankabcParams.orderId = this.orderId;
        bankabcParams.carNumber = this.carNumber;
        bankabcParams.payType = 34;// 1:支付宝 2：微信 3：银联 10:H5   4微信公众号
        bankabcParams.terminalSource = 7;//请求端来源 1： 任你停 2：pda 3：微信公共号 7:H5扫码 10页面支付
        bankabcParams.paySrcType = paySrcType;//101停车支付
        bankabcParams.orgId = this.$utils.myOrgId;
        bankabcParams.backType = 2;
        bankabcParams.PaymentLinkType = 1;
        bankabcParams.recordArreaInfos = JSON.stringify(this.orderId);
        console.log(bankabcParams);
        bankH5Pay(bankabcParams).then(response => {
          console.log(response);
          if (response.code == "0") {
            let res = response.data.PaymentURL;
            let _token = res.split("TOKEN=")[1];
            let OrderNo = response.data.OrderNo;
            localStorage.setItem("OrderNum", OrderNo);
            if (window.navigator.userAgent.indexOf("Bankabc/Portal") > -1) {
              // alert('当前页面在新容器');
              AlipayJSBridge.call("startApp", {
                appId: "30603024", // 固定值
                param: {
                  type: "3", // 3： 掌银内H5页面，
                  tokenId: _token, //商户传过来的tokenId
                  paySystem: "", //商户传过来的paySystem, 没有则传空字符串
                  payType: "1111", //商户传过来的payType，没有则传'1111'
                  webviewURL: "https://wxgzh.renniting.cn/wechatwuxi/Chifeng/TEST/sweeping_payment/codepay/index.html#/payResult", //商户传过来的回跳地址
                  remark: "其他参数", //扩展备用
                  showProgress: "NO",
                  backBehavior: "back"
                }
              }, function(result) {
              });
            } else {
              // alert('当前页面在旧容器');
              // 旧支付方式
              window.location.href = "https://www.abchina.com/luascript/mobilePayLua/" + encodeURI("{\"return\":{\"tokenID\":\"" + _token + "\",\"backURL\":\"https://wxgzh.renniting.cn/wechatwuxi/Chifeng/TEST/sweeping_payment/codepay/index.html#/payResult\",\"payType\":\"\"}}");
            }
          } else {
            me.$msgbox("提示", "支付失败");
          }
          // console.log(_token)
          // let _data = 'method=invokePayFromBrowser&tokenID='+_token
          // let cryData = CryptoJS.encrypt(_data, 'G9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvM3', 'EkpTEA3FbZFGGq8Y')
          //
          // let baseCRY = Base64.encode(cryData)
          // console.log(baseCRY)
          // window.location.href='bankabc:' + encodeURIComponent('{"method":"invokePayFromBrowser","param":'+baseCRY+'}')
          // // 即为加密后的数据。其中paramsEncode是需要加密的数据、
          // // keyStr是加密时使用的key，与服务端一致、hash是偏移量，是一个随机生成的16位字符串。
        });
      }
      if (this.clientBrowser == "微信") { // 微信支付
        //第一步获取openid
        var codeParams = {
          code: this.webAppCode,
          appId: this.$utils.myVxAppId
        };
        getOpenId(codeParams).then(res => {
          if (res.code == 0) {
            me.vxPay(res.data, _order,paySrcType);
          } else if (res.code == 40163) { //code been used, hints[重复code问题]
            me.$msgbox("提示", "请重新扫码");
            console.log(res.message);
          } else {
            me.$msgbox("提示", "请重新扫码");
          }
        });
      }
    },
    vxPay(openIdData, orderIdData,paySrcType) {
      let vm = this;
      var wxParams = {};
      wxParams.orderId = this.orderId;
      wxParams.backType = 2,
      wxParams.orgId = this.$utils.myOrgId,
      wxParams.payType = 4;// 1:支付宝 2：微信 3：银联 10:H5   4微信公众号
      wxParams.terminalSource = 7;//请求端来源 1： 任你停 2：pda 3：微信公共号 7:H5扫码 10页面支付
      wxParams.carNumber = this.carNumber;
      wxParams.paySrcType = paySrcType;//101停车支付
      wxParams.recordArreaInfos = JSON.stringify(orderIdData);
      wxParams.openId = openIdData;
      wxParams.appId = this.$utils.myVxAppId;
      vxPayQuery(wxParams).then(res => {
        if (res.code == 0) { //
          if (res.data) {
            var data = res.data;
            console.log(JSON.stringify(data));
            if (typeof WeixinJSBridge === "undefined") { // 微信浏览器内置对象。参考微信官方文档
              if (document.addEventListener) {
                document.addEventListener("WeixinJSBridgeReady", vm.onBridgeReady(data), false);
              } else if (document.attachEvent) {
                document.attachEvent("WeixinJSBridgeReady", vm.onBridgeReady(data));
                document.attachEvent("onWeixinJSBridgeReady", vm.onBridgeReady(data));
              }
            } else {
              console.log("准备调用微信支付");
              vm.onBridgeReady(data);
            }
          } else {
            vm.$msgbox("提示", "没有找到返回值");
          }
        } else {
          console.log(res.message);
          vm.$msgbox("提示", res.message);
        }
      });
    },
    onBridgeReady(params) {
      let me = this;
      console.log("调用微信支付WeixinJSBridge");
      WeixinJSBridge.invoke(
        "getBrandWCPayRequest", params,
        //
        // 'getBrandWCPayRequest', { // 下面参数内容都是后台返回的
        //   'appId': data.appId, // 公众号名称，由商户传入
        //   'timeStamp': data.timeStamp, // 时间戳
        //   'nonceStr': data.nonceStr, // 随机串
        //   'package': data.package, // 预支付id
        //   'signType': data.signType, // 微信签名方式
        //   'paySign': data.paySign // 微信签名
        // },
        function(res) {
          // 使用以上方式判断前端返回,微信团队郑重提示：res.err_msg将在用户支付成功后返回ok，但并不保证它绝对可靠。
          if (res.err_msg === "get_brand_wcpay_request:ok") {
            console.log("成功");
            me.$msgbox("提示", "支付成功");
          } else {
            console.log("失败");
            me.$msgbox("提示", "支付失败");
            me.$router.go(-2);
          }
        }
      );
    }
  },
  filters: {}
};
</script>

<style scoped lang="scss">
  .tabWrap {
    height: 50px;
    background: #FFF;
    display: flex;
    color: #666;
    font-size: 20px;
    li {
      flex: 1;
      line-height: 50px;
      text-align: center;
      border-bottom: 2px solid #DFDFDF;
    }
    .tabActive {
      color: #0564CC;
      border-bottom: 2px solid #0564CC;
      font-weight: bold;
    }
  }

  .history-con {
    padding-bottom: 50px;
  }

  .history-main {
    padding: 10px;
    border-top: 1px solid #e8e2e2;
    > p {
      display: flex;
      justify-content: space-between
    }
  }

  .car-wrap {
    padding: 7px 7px;
    background: #FFF;
  }

  .carBG {
    width: 100%;
    height: 130px;
  }

  .carBlue {
    background: url("../assets/images/blueBG.png") no-repeat;
    background-size: 100% 100%;
  }

  .carYellow {
    background: url("../assets/images/yellowBG.png") no-repeat;
    background-size: 100% 100%;
  }

  .carGreen {
    background: url("../assets/images/greenBG.png") no-repeat;
    background-size: 100% 100%;
  }

  .carWhite {
    background: url("../assets/images/whiteBG.png") no-repeat;
    background-size: 100% 100%;
  }

  .carBlack {
    background: url("../assets/images/blackBG.png") no-repeat;
    background-size: 100% 100%;
  }

  .carNumber {
    padding: 20px 0 10px;
    font-size: 30px;
    text-align: center;
    color: #fff;
  }

  .payFee {
    font-size: 24px;
    color: #FF7B7B;
    text-align: center;
  }

  .fee-wrap {
    background: #FFF;
    padding: 0 18px;
    > li {
      display: flex;
      justify-content: space-between;
      height: 30px;
      line-height: 30px;
      border-bottom: 1px solid #EAEAEA;
      &:last-child {
        border-bottom: 0;
      }
    }

  }

  .toPay {
    width: 100%;
    height: 44px;
    margin: 0 auto;
    line-height: 44px;
    text-align: center;
    background: linear-gradient(180deg, #3885D9 0%, #4194EF 100%);
    border-radius: 4px;
    border: 1px solid #0D72E2;
    font-size: 20px;
    color: #FFF;
    cursor: pointer;
  }

  .payAll {
    position: fixed;
    bottom: 0;
    left: 0;
  }

  .tip {
    padding-left: 40px;
    background: url("../assets/images/tip.png") no-repeat 18px center;
    background-size: 16px 16px;
    color: #666;
  }

  .parentBox {
    height: 100%;
    width: 100%;
    position: fixed;
    top: 0;
    left: 0;
    background: rgb(31, 31, 31);
    padding: 100px;
    text-align: center;
    .scalableBox {
      width: 40px;
      height: 70px;
    }
    .apringBox {
      transition: stroke 0.3s;
    }

    .apwormOneBox,
    .apwormTwoBox {
      animation-duration: 3s;
      animation-iteration-count: infinite;
    }
    .apwormTwoBox {
      animation-name: worm2;
      visibility: hidden;
    }
    .apwormOneBox {
      animation-name: worm1;
    }
  }

  @media (prefers-color-scheme: dark) {
    :root {
      --bg: hsl(var(--hue), 10%, 10%);
      --fg: hsl(var(--hue), 10%, 90%);
    }

    .apringBox {
      stroke: hsla(var(--hue), 10%, 90%, 0.9);
    }
  }

  @keyframes worm1 {
    from {
      animation-timing-function: ease-in-out;
      stroke-dashoffset: -87.96;
    }

    20% {
      animation-timing-function: ease-in;
      stroke-dashoffset: 0;
    }

    60% {
      stroke-dashoffset: -791.68;
      visibility: visible;
    }

    60.1%,
    to {
      stroke-dashoffset: -791.68;
      visibility: hidden;
    }
  }

  @keyframes worm2 {
    from,
    60% {
      stroke-dashoffset: -87.96;
      visibility: hidden;
    }

    60.1% {
      animation-timing-function: cubic-bezier(0, 0, 0.5, 0.75);
      stroke-dashoffset: -87.96;
      visibility: visible;
    }

    77% {
      animation-timing-function: cubic-bezier(0.5, 0.25, 0.5, 0.88);
      stroke-dashoffset: -340;
      visibility: visible;
    }

    to {
      stroke-dashoffset: -669.92;
      visibility: visible;
    }
  }
</style>
