Browse Source

合伙人-新增合伙人查看顾客申请进度页

panyong 4 năm trước cách đây
mục cha
commit
69c6468f4b

+ 6 - 0
htmldev/loan/src/router/index.js

@@ -169,6 +169,12 @@ const routes = [
       partnerImgUrl: route.query.partnerImgUrl
     })
   },
+  {
+    path: '/partner/track/:id', // 客户申请贷款详情
+    name: 'partnerTrack',
+    component: () => import(/* webpackChunkName: "partner_track" */ '../views/partner/track'),
+    props: true
+  },
   {
     path: '/partner/sale', // 放款总额
     name: 'partnerSale',

+ 0 - 477
htmldev/loan/src/views/loan/detail/backup-index.vue

@@ -1,477 +0,0 @@
-<template>
-  <div class="wrapper">
-    <div class="header">
-      <h2>申请进度</h2>
-      <a :href="'tel:' + commanyPhone">
-        <img src="./image/btn_dianhua@2x.png" alt="">
-        <span>专属客服</span>
-      </a>
-    </div>
-    <ul class="content">
-      <!--申请已提交-->
-      <li class="flow flow-0 has-border active" v-if="checks[0]">
-        <div class="left-wrap">
-          <img src="./image/active_flow_0@2x.png" alt="">
-        </div>
-        <div class="right-wrap">
-          <p class="title">
-            <span>{{ checks[0].ruleName }}</span>
-          </p>
-          <p class="description">
-            <span>需求金额:</span>
-            <span>{{ orderPrice / 10000 }}万元</span>
-            <span>|</span>
-            <span>{{ orderUserName }}</span>
-          </p>
-          <p class="time">{{ checks[0].updatedAt }}</p>
-          <p class="tip">1个工作日内会有专席客服与您取得联系</p>
-        </div>
-      </li>
-      <template v-if="orderFinalStatus !== 2">
-        <!--提交资料:初始化、待提交、已提交待审核、已提交审核通过 checkStatus: 0-初始化 1-进行中 2-成功 3-失败-->
-        <li class="flow flow-1 has-border" :class="checks[1].checkStatus === 0 ? 'init' : 'active'" v-if="checks[1]">
-          <div class="left-wrap">
-            <img src="./image/init_flow_1@2x.png" alt="" v-if="checks[1].checkStatus === 0">
-            <img src="./image/active_flow_1@2x.png" alt="" v-else>
-          </div>
-          <div class="right-wrap">
-            <p class="title">
-              <span>{{ checks[1].ruleName }}</span>
-              <template v-if="checks[1].checkStatus === 2">
-                <!--提交资料状态码2 && 预约办理状态吗 0 等待审核-->
-                <span style="font-weight: 600; color: #D73634;" v-if="checks[2].checkStatus === 0">(等待资料核对)</span>
-                <!--提交资料状态码2 && 预约办理状态吗 1 已审核-->
-                <span style="color: #4BD863;" v-if="checks[2].checkStatus === 1">(通过审核)</span>
-              </template>
-            </p>
-            <router-link class="jump-attest" :to="{path: '/loan/attest/' + id}" v-if="checks[1].checkStatus === 1">
-              上传资料
-            </router-link>
-            <template>
-              <p class="description" v-if="checks[1].checkStatus === 2">
-                <span>{{ checks[1].checkRemark }}</span>
-              </p>
-              <div class="attest-wrap">
-                <div v-for="(item, index) in [...checks[1].checkContent1, ...checks[1].checkContent2]" :key="index">
-                  <img :src="item" alt="">
-                </div>
-              </div>
-              <p class="time">{{ checks[1].updatedAt }}</p>
-            </template>
-          </div>
-        </li>
-        <!--预约办理时间:初始化、待预约、已预约-->
-        <li class="flow flow-2 has-border" :class="checks[2].checkStatus === 0 ? 'init' : 'active'" v-if="checks[2]">
-          <div class="left-wrap">
-            <img src="./image/init_flow_2@2x.png" alt="" v-if="checks[2].checkStatus === 0">
-            <img src="./image/active_flow_2@2x.png" alt="" v-else>
-          </div>
-          <div class="right-wrap">
-            <p class="title">
-              <span>{{ checks[2].ruleName }}</span>
-            </p>
-            <router-link class="jump-bespeak" :to="{path: '/loan/bespeak/' + id}" v-if="checks[2].checkStatus === 1">
-              预约时间
-            </router-link>
-            <template v-if="checks[2].checkStatus === 1">
-              <p class="description">
-                <span>您已预约:</span>
-                <span style="font-weight: 600;">2021-02-23 上午9:30</span>
-              </p>
-              <p class="store" style="font-weight: 600;color: #D73634;">到“文三路支行”网点办理</p>
-              <p class="time">{{ checks[2].updatedAt }}</p>
-            </template>
-            <template v-if="checks[2].checkStatus === 2">
-              <p class="description">
-                <span>您已预约:2021-02-23 上午9:30</span>
-              </p>
-              <p class="store">到“文三路支行”网点办理</p>
-              <p class="time">{{ checks[2].updatedAt }}</p>
-            </template>
-          </div>
-        </li>
-        <!--现场办理:初始化、现场办理完成-->
-        <li class="flow flow-3 has-border" :class="checks[3].checkStatus === 0 ? 'init' : 'active'" v-if="checks[3]">
-          <div class="left-wrap">
-            <img src="./image/init_flow_3@2x.png" alt="" v-if="checks[3].checkStatus === 0">
-            <img src="./image/active_flow_3@2x.png" alt="" v-else>
-          </div>
-          <div class="right-wrap">
-            <p class="title">
-              <span>{{ checks[3].ruleName }}</span>
-            </p>
-            <p class="description">
-              <i class="label">现场办理完成 银行经理预计可放款</i>
-              <i class="value" v-for="(str, index) in '30万元'" :key="index">{{ str }}</i>
-              <i class="label"> ,最终以实际放款额度为准</i>
-            </p>
-            <p class="time">{{ checks[3].updatedAt }}</p>
-          </div>
-        </li>
-        <!--放款成功:初始化、已放款-->
-        <li class="flow flow-4" :class="checks[4].checkStatus === 0 ? 'init' : 'active'" v-if="checks[4]">
-          <div class="left-wrap">
-            <img src="./image/init_flow_4@2x.png" alt="" v-if="checks[4].checkStatus === 0">
-            <img src="./image/active_flow_4@2x.png" alt="" v-else>
-          </div>
-          <div class="right-wrap">
-            <p class="title">
-              <span>{{ checks[4].ruleName }}</span>
-            </p>
-            <p class="success">成功放款金额:30万元人民币</p>
-          </div>
-        </li>
-      </template>
-      <li class="fail" v-if="orderFinalStatus === 2">因xxxxxxx原因,未成功放款</li>
-      <li class="order-info border-top-1px">
-        <p>创建时间:{{ createdAt }}</p>
-        <p>申请单号:{{ orderNumber }}</p>
-      </li>
-    </ul>
-  </div>
-</template>
-
-<script>
-  import { getOrderDetail } from './api'
-
-  export default {
-    name: 'backup-detail',
-    props: {
-      id: {
-        type: String,
-        default: ''
-      }
-    },
-    data () {
-      return {
-        orderProduceName: '',
-        orderPrice: 0,
-        orderUserName: '',
-        createdAt: '',
-        orderNumber: '',
-        orderFinalStatus: 0, // 订单最终状态: 0-进行中 1-成功 2-失败
-        commanyPhone: '',
-        checks: []
-      }
-    },
-    created () {
-      this.funInit()
-    },
-    async mounted () {
-      await this.$nextTick()
-      this.$refreshTitle('进度查询')
-    },
-    methods: {
-      funInit () {
-        getOrderDetail(this.id).then(res => {
-          if (res.status) {
-            const { orderProduceName, orderPrice, orderUserName, createdAt, orderNumber, orderFinalStatus, commanyPhone, checks } = res.data
-            this.orderProduceName = orderProduceName
-            this.orderPrice = orderPrice
-            this.orderUserName = orderUserName
-            this.createdAt = createdAt
-            this.orderNumber = orderNumber
-            this.orderFinalStatus = orderFinalStatus
-            this.commanyPhone = commanyPhone
-            this.checks = checks
-          }
-        })
-      }
-    }
-  }
-</script>
-
-<style lang="scss" scoped>
-  .wrapper {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    width: 100%;
-    padding: 15px 0 91px;
-  }
-
-  .header {
-    display: flex;
-    justify-content: space-between;
-    align-items: center;
-    width: 343px;
-
-    h2 {
-      padding-left: 8px;
-      line-height: 33px;
-      font-size: 24px;
-      font-weight: 500;
-      color: #333;
-    }
-
-    a {
-      display: flex;
-      align-items: center;
-      padding: 11px 12px;
-      background: #FFFFFF;
-      border-radius: 100px 0 0 100px;
-
-      img {
-        width: 29px;
-        height: 29px;
-      }
-
-      span {
-        margin-left: 3px;
-        line-height: 22px;
-        font-size: 16px;
-        font-weight: 500;
-        color: #C7AC8B;
-      }
-    }
-  }
-
-  .content {
-    display: flex;
-    flex-direction: column;
-    align-items: center;
-    width: 343px;
-    padding-top: 23px;
-    margin-top: 16px;
-    border-radius: 4px;
-    background: #FFFFFF;
-  }
-
-  .flow {
-    position: relative;
-    left: 0;
-    top: 0;
-    display: flex;
-    width: 311px;
-    min-height: 68px;
-    margin-top: 18px;
-
-    &:nth-of-type(1) {
-      margin-top: 0;
-    }
-  }
-
-  .init {
-    &.has-border:before {
-      position: absolute;
-      left: 15px;
-      top: 0;
-      content: '';
-      width: 1px;
-      height: 100%;
-      border-left: 1px dashed #D8D8D8;
-    }
-
-    .title {
-      color: #999;
-    }
-  }
-
-  .active {
-    &.has-border:before {
-      position: absolute;
-      left: 15px;
-      top: 0;
-      content: '';
-      width: 1px;
-      height: 100%;
-      border-left: 1px dashed #CBB091;
-    }
-
-    .title {
-      color: #333;
-    }
-  }
-
-  .flow-0 {
-    .time {
-      margin-top: 18px;
-    }
-  }
-
-  .flow-1 {
-    .title {
-      span:nth-of-type(2) {
-        padding-top: 3px;
-        line-height: 20px;
-        font-size: 14px;
-      }
-    }
-
-    .attest-wrap {
-      display: flex;
-      margin-top: 6px;
-
-      div {
-        width: 41px;
-        height: 41px;
-        margin-left: 10px;
-        overflow: hidden;
-        background: pink;
-
-        &:nth-of-type(1) {
-          margin-left: 0;
-        }
-
-        img {
-          display: block;
-          width: 100%;
-        }
-      }
-    }
-
-    .time {
-      margin-top: 6px;
-    }
-  }
-
-  .flow-2 {
-    .store {
-      line-height: 20px;
-      font-size: 14px;
-      word-break: break-all;
-      color: #333;
-    }
-
-    .time {
-      margin-top: 14px;
-    }
-  }
-
-  .flow-3 {
-    .description {
-      flex-flow: row wrap;
-    }
-
-    i {
-      line-height: 20px;
-      font-size: 14px;
-    }
-
-    .label {
-      color: #333;
-    }
-
-    .value {
-      font-weight: 600;
-      color: #D73634;
-    }
-
-    .time {
-      margin-top: 11px;
-    }
-  }
-
-  .flow-4 {
-    margin-bottom: 14px;
-  }
-
-  .left-wrap {
-    position: relative;
-    left: 0;
-    top: 0;
-    z-index: 1;
-
-    img {
-      display: block;
-      width: 32px;
-      height: 31px;
-    }
-  }
-
-  .right-wrap {
-    margin-left: 16px;
-  }
-
-  .title {
-    display: flex;
-    padding-top: 6px;
-
-    span {
-      line-height: 22px;
-      font-size: 16px;
-      font-weight: 500;
-      color: inherit;
-    }
-  }
-
-  .description {
-    display: flex;
-    margin-top: 6px;
-
-    span {
-      line-height: 20px;
-      font-size: 14px;
-      color: #333;
-
-      &:nth-of-type(2) {
-        color: #D73634;
-      }
-    }
-  }
-
-  .jump-attest,
-  .jump-bespeak {
-    display: block;
-    width: 106px;
-    height: 44px;
-    margin: 20px 0 23px;
-    border-radius: 4px;
-    line-height: 44px;
-    font-size: 14px;
-    text-align: center;
-    color: #fff;
-    background: linear-gradient(90deg, #DBC3A9 0%, #C7AB8A 100%);
-    box-shadow: 0 14px 9px -10px rgba(219, 208, 194, 1);
-  }
-
-  .time {
-    line-height: 17px;
-    font-size: 12px;
-    color: #666;
-  }
-
-  .tip {
-    margin-top: 14px;
-    line-height: 20px;
-    font-size: 14px;
-    font-weight: 600;
-    color: #D73634;
-  }
-
-  .success,
-  .fail {
-    line-height: 25px;
-    font-size: 18px;
-    font-weight: 600;
-    word-break: break-all;
-    color: #D73634;
-  }
-
-  .success {
-    margin-top: 2px;
-  }
-
-  .fail {
-    width: 311px;
-    padding-left: 8px;
-    margin: 12px 0 23px;
-  }
-
-  .order-info {
-    width: 329px;
-    padding: 20px 0 24px;
-    @include border-top-1px(#E8E8E8);
-
-    p {
-      padding-left: 17px;
-      line-height: 20px;
-      font-size: 14px;
-      color: #666;
-
-      &:nth-of-type(2) {
-        margin-top: 2px;
-      }
-    }
-  }
-</style>

+ 1 - 1
htmldev/loan/src/views/partner/all/components/main.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="better-scroll wrapper" ref="wrapper">
     <ul>
-      <li class="list" v-for="(item, index) in listData" :key="index" @click="$emit('funSelect', item.orderId)">
+      <li class="list" v-for="(item, index) in listData" :key="index">
         <div class="top-wrap">
           <div class="info-wrap">
             <div class="avatar">

+ 4 - 1
htmldev/loan/src/views/partner/customer/index.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="better-scroll wrapper" ref="wrapper">
     <ul>
-      <li class="list" v-for="(item, index) in listData" :key="index">
+      <li class="list" v-for="(item, index) in listData" :key="index" @click="funGetGoodsDetail(item)">
         <div class="name-wrap">
           <div class="avatar">
             <img :src="item.userHeadImgUrl" alt="">
@@ -153,6 +153,9 @@ export default {
         Toast('出错啦')
         vm.numFetchStatus = 3
       })
+    },
+    funGetGoodsDetail (item) {
+      this.$router.push({ path: `/partner/track/${item.id}` })
     }
   },
   beforeRouteLeave (to, from, next) {

BIN
htmldev/loan/src/views/partner/login/image/back_up_logo@2x.png


+ 0 - 341
htmldev/loan/src/views/partner/marketing/backUpIndex.vue

@@ -1,341 +0,0 @@
-<template>
-  <div class="conatainer">
-    <div class="header">
-      <h2 class="title">您好,{{ userInfo.partnerName }}</h2>
-      <router-link
-        :to="{path: '/partner/goods' + '?partnerId=' + userInfo.id + '&partnerName=' + userInfo.partnerName + '&partnerImgUrl=' + userInfo.partnerImgUrl}">
-        <img src="./image/xiaoshou_bg_tuiguang@2x.png" alt="">
-      </router-link>
-    </div>
-    <p class="my-customer">我的客户</p>
-    <div class="better-scroll wrapper" ref="wrapper">
-      <ul>
-        <li class="list" v-for="(item, index) in listData" :key="index">
-          <div class="name-wrap">
-            <div class="avatar">
-              <img :src="item.userHeadImgUrl" alt="">
-            </div>
-            <p class="name">{{ item.orderUserName }}</p>
-          </div>
-          <p class="phone">手机号:{{ item.orderUserPhone }}</p>
-          <div class="loan-info">
-            <p class="label">申请产品:{{ item.orderProduceName }}</p>
-            <p>
-              <span class="label">需求金额:</span>
-              <span class="value">{{ item.orderPrice / 10000}}万元</span>
-            </p>
-          </div>
-          <p class="create-time">申请时间:{{ item.createdAt }}</p>
-          <!--orderFinalStatus:0-进行中 1-成功 2-失败-->
-          <p class="status bg-0" v-if="item.orderFinalStatus === 0">进度:{{ item.orderStatus }}</p>
-          <p class="status bg-1" v-if="item.orderFinalStatus === 1">{{ item.orderStatus }}</p>
-          <p class="status bg-2" v-if="item.orderFinalStatus === 2">{{ item.orderStatus }}</p>
-        </li>
-        <li class="load-status" v-if="listData.length && booFetchData">
-          <p>{{ arrFetchStatus[numFetchStatus] }}</p>
-        </li>
-        <li class="bitmap" v-if="!listData.length && booFetchData">
-          <p>暂无记录</p>
-        </li>
-      </ul>
-    </div>
-  </div>
-</template>
-
-<script>
-import BScroll from 'better-scroll'
-import { Toast } from 'vant'
-import { saleList } from './api'
-import { mapGetters } from 'vuex'
-
-const PAGESIZE = 20
-export default {
-  name: 'marketing',
-  data () {
-    return {
-      pager: {
-        pagenum: 1,
-        pagesize: PAGESIZE,
-        pagecount: 1
-      },
-      listData: [],
-      scroll: null,
-      numFetchStatus: 0,
-      arrFetchStatus: ['正在加载,请稍后~', '上拉加载更多', '没有更多了', '出错啦'],
-      booFetchData: false,
-      numPositionY: 0
-    }
-  },
-  activated () {
-    if (!this.$route.meta.isUseCache) {
-      this.pager = {
-        pagenum: 1,
-        pagesize: PAGESIZE,
-        pagecount: 1
-      }
-      this.listData = []
-      this.numFetchStatus = 0
-      this.booFetchData = false
-      this.numPositionY = 0
-      this.funFetch()
-    } else {
-      this.$nextTick(() => {
-        if (this.scroll) {
-          this.scroll.refresh()
-          this.scroll.scrollTo(0, this.numPositionY)
-        }
-      })
-    }
-    this.$nextTick(() => {
-      this.$refreshTitle('销售')
-    })
-  },
-  computed: {
-    ...mapGetters({
-      userInfo: 'partnerMine/userInfo'
-    })
-  },
-  methods: {
-    funFetch () {
-      const vm = this
-      vm.numFetchStatus = 0
-      saleList(vm.pager.pagenum, vm.pager.pagesize).then(response => {
-        if (response.status) {
-          const data = response.data
-          const temp = data.data
-          vm.pager.pagecount = Math.ceil(data.count / PAGESIZE)
-          vm.pager.pagenum++
-          vm.booFetchData = true
-          if (vm.pager.pagecount <= 1) {
-            vm.numFetchStatus = 2
-          } else {
-            vm.numFetchStatus = 1
-          }
-          if (temp.length) {
-            vm.listData = vm.listData.concat(temp)
-            vm.$nextTick(() => {
-              if (!vm.scroll) {
-                vm.scroll = new BScroll(vm.$refs.wrapper, {
-                  click: true,
-                  pullUpLoad: {
-                    threshold: -20
-                  },
-                  scrollbar: true
-                })
-                vm.scroll.on('pullingUp', () => {
-                  if (vm.pager.pagenum > vm.pager.pagecount) {
-                    vm.numFetchStatus = 2
-                    return
-                  }
-                  vm.funFetch()
-                })
-              } else {
-                vm.scroll.refresh()
-                vm.scroll.finishPullUp()
-              }
-            })
-          }
-        } else {
-          Toast(response.msg)
-          vm.numFetchStatus = 3
-        }
-      }).catch(() => {
-        Toast('出错啦')
-        vm.numFetchStatus = 3
-      })
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-.conatainer {
-  position: relative;
-  left: 0;
-  top: 0;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  width: 100%;
-}
-
-.header {
-  display: flex;
-  flex-direction: column;
-  width: 100%;
-  padding: 24px 0 20px;
-  background: #fff;
-
-  .title {
-    width: 100%;
-    padding-left: 24px;
-    line-height: 33px;
-    font-size: 24px;
-    font-weight: 500;
-    color: #333;
-  }
-
-  img {
-    display: block;
-    width: 343px;
-    height: 88px;
-    margin: 12px 0 0 17px;
-  }
-}
-
-.my-customer {
-  width: 100%;
-  padding-left: 24px;
-  margin: 24px 0 16px;
-  line-height: 25px;
-  font-size: 18px;
-  font-weight: 500;
-  color: #333;
-}
-
-.wrapper {
-  position: relative;
-  width: 100%;
-  height: calc(100vh - 242px);
-  overflow: hidden;
-
-  ul {
-    width: 100%;
-    padding-bottom: 100px;
-  }
-}
-
-.list {
-  position: relative;
-  left: 0;
-  top: 0;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  width: 100%;
-  padding: 19px 0 16px;
-  margin-top: 12px;
-  border-radius: 4px;
-  background: #FFF;
-  box-shadow: 0 2px 0px -1px rgba(224, 224, 224, 0.5);
-
-  &:nth-of-type(1) {
-    margin-top: 0;
-  }
-}
-
-.name-wrap {
-  display: flex;
-  align-items: center;
-  width: 331px;
-}
-
-.avatar {
-  width: 25px;
-  height: 25px;
-  margin-right: 13px;
-  border-radius: 50%;
-  overflow: hidden;
-
-  img {
-    display: block;
-    width: 100%;
-  }
-}
-
-.name,
-.phone {
-  line-height: 20px;
-  font-size: 15px;
-  font-weight: 500;
-  color: #333;
-}
-
-.phone {
-  width: 331px;
-  margin-top: 14px;
-}
-
-.loan-info {
-  display: flex;
-  align-items: center;
-  width: 331px;
-  margin-top: 7px;
-
-  p {
-    display: flex;
-    align-items: center;
-
-    &:nth-of-type(2) {
-      margin-left: 17px;
-    }
-  }
-
-  .label {
-    line-height: 20px;
-    font-size: 15px;
-    color: #333;
-  }
-
-  .value {
-    line-height: 20px;
-    font-size: 15px;
-    font-weight: 500;
-    color: #EE0A23;
-  }
-}
-
-.create-time {
-  width: 331px;
-  margin-top: 7px;
-  line-height: 17px;
-  font-size: 12px;
-  color: #999;
-}
-
-.status {
-  position: absolute;
-  right: 16px;
-  top: 16px;
-  z-index: 1;
-  padding: 0 8px;
-  border-radius: 4px;
-  line-height: 22px;
-  font-size: 15px;
-  font-weight: 500;
-  color: #fff;
-
-  &.bg-0 {
-    background: #F39D41;
-  }
-
-  &.bg-1 {
-    background: #53DA6A;
-  }
-
-  &.bg-2 {
-    background: #EE0A23;
-  }
-}
-
-.load-status {
-  margin-top: 12px;
-
-  p {
-    line-height: 20px;
-    font-size: 14px;
-    color: #666;
-    text-align: center;
-  }
-}
-
-.bitmap {
-  p {
-    line-height: 22px;
-    font-size: 16px;
-    font-weight: 500;
-    text-align: center;
-    color: #333;
-  }
-}
-</style>

+ 9 - 0
htmldev/loan/src/views/partner/track/api/index.js

@@ -0,0 +1,9 @@
+import request from '@/api/request'
+
+export const getOrderDetail = (id) => request({
+  method: 'GET',
+  url: '/home/applyOrder/orderDetail',
+  params: {
+    id
+  }
+})

BIN
htmldev/loan/src/views/partner/track/image/active_flow_0@2x.png


BIN
htmldev/loan/src/views/partner/track/image/active_flow_1@2x.png


BIN
htmldev/loan/src/views/partner/track/image/active_flow_2@2x.png


BIN
htmldev/loan/src/views/partner/track/image/active_flow_3@2x.png


BIN
htmldev/loan/src/views/partner/track/image/active_flow_4@2x.png


BIN
htmldev/loan/src/views/partner/track/image/btn_dianhua@2x.png


BIN
htmldev/loan/src/views/partner/track/image/init_flow_1@2x.png


BIN
htmldev/loan/src/views/partner/track/image/init_flow_2@2x.png


BIN
htmldev/loan/src/views/partner/track/image/init_flow_3@2x.png


BIN
htmldev/loan/src/views/partner/track/image/init_flow_4@2x.png


+ 484 - 0
htmldev/loan/src/views/partner/track/index.vue

@@ -0,0 +1,484 @@
+<template>
+  <div class="wrapper">
+    <div class="header">
+      <h2>申请进度</h2>
+      <a :href="'tel:' + commanyPhone">
+        <img src="./image/btn_dianhua@2x.png" alt="">
+        <span>专属客服</span>
+      </a>
+    </div>
+    <ul class="content">
+      <!--申请已提交-->
+      <li class="flow flow-0 has-border active" v-if="checks[0]">
+        <div class="left-wrap">
+          <img src="./image/active_flow_0@2x.png" alt="">
+        </div>
+        <div class="right-wrap">
+          <p class="title">
+            <span>{{ checks[0].ruleName }}</span>
+          </p>
+          <p class="description">
+            <span>需求金额:</span>
+            <span>{{ orderPrice / 10000 }}万元</span>
+            <span>|</span>
+            <span>{{ orderUserName }}</span>
+          </p>
+          <p class="time">{{ checks[0].updatedAt }}</p>
+          <p class="tip">1个工作日内会有专席客服与您取得联系</p>
+        </div>
+      </li>
+      <template v-if="orderFinalStatus !== 2">
+        <!--提交资料:初始化、待提交、已提交待审核、已提交审核通过 checkStatus: 0-初始化 1-进行中 2-成功 3-失败-->
+        <li class="flow flow-1 has-border" :class="checks[1].checkStatus === 0 ? 'init' : 'active'" v-if="checks[1]">
+          <div class="left-wrap">
+            <img src="./image/init_flow_1@2x.png" alt="" v-if="checks[1].checkStatus === 0">
+            <img src="./image/active_flow_1@2x.png" alt="" v-else>
+          </div>
+          <div class="right-wrap">
+            <p class="title">
+              <span>{{ checks[1].ruleName }}</span>
+              <template v-if="checks[1].checkStatus === 2">
+                <!--提交资料状态码2 && 预约办理状态码 0 等待审核-->
+                <span style="font-weight: 600; color: #D73634;" v-if="checks[2].checkStatus === 0">(等待资料核对)</span>
+                <!--提交资料状态码2 && 预约办理状态码 1 已审核-->
+                <span style="color: #4BD863;" v-if="checks[2].checkStatus === 1">(通过审核)</span>
+              </template>
+            </p>
+            <template v-if="checks[1].checkStatus === 2">
+              <p class="description">
+                <span>{{ checks[1].checkRemark }}</span>
+              </p>
+              <div class="attest-wrap">
+                <div v-for="(item, index) in [...checks[1].checkContent1, ...checks[1].checkContent2]" :key="index">
+                  <img :src="item + '?x-oss-process=image/resize,m_fill,h_82'" alt=""
+                       @click="funImagePreview(index, [...checks[1].checkContent1, ...checks[1].checkContent2])">
+                </div>
+              </div>
+              <p class="time">{{ checks[1].updatedAt }}</p>
+            </template>
+          </div>
+        </li>
+        <!--预约办理时间:初始化、待预约、已预约-->
+        <li class="flow flow-2 has-border" :class="checks[2].checkStatus === 0 ? 'init' : 'active'" v-if="checks[2]">
+          <div class="left-wrap">
+            <img src="./image/init_flow_2@2x.png" alt="" v-if="checks[2].checkStatus === 0">
+            <img src="./image/active_flow_2@2x.png" alt="" v-else>
+          </div>
+          <div class="right-wrap">
+            <p class="title">
+              <span>{{ checks[2].ruleName }}</span>
+            </p>
+            <template v-if="checks[2].checkStatus === 2 && checks[3].checkStatus === 0">
+              <p class="description">
+                <span>{{ checks[2].checkRemark }}</span>
+              </p>
+              <p class="time">{{ checks[2].updatedAt }}</p>
+            </template>
+            <template v-if="checks[2].checkStatus === 2 && checks[3].checkStatus !== 0">
+              <p class="description">
+                <span>{{ checks[2].checkRemark }}</span>
+              </p>
+              <p class="time">{{ checks[2].updatedAt }}</p>
+            </template>
+          </div>
+        </li>
+        <!--现场办理:初始化、现场办理完成-->
+        <li class="flow flow-3 has-border" :class="checks[3].checkStatus === 0 ? 'init' : 'active'" v-if="checks[3]">
+          <div class="left-wrap">
+            <img src="./image/init_flow_3@2x.png" alt="" v-if="checks[3].checkStatus === 0">
+            <img src="./image/active_flow_3@2x.png" alt="" v-else>
+          </div>
+          <div class="right-wrap">
+            <p class="title">
+              <span>{{ checks[3].ruleName }}</span>
+            </p>
+            <template v-if="checks[3].checkStatus === 2">
+              <p class="description">
+                <i class="label">{{ checks[3].checkRemark }}</i>
+              </p>
+              <p class="time">{{ checks[3].updatedAt }}</p>
+            </template>
+          </div>
+        </li>
+        <!--放款成功:初始化、已放款-->
+        <li class="flow flow-4" :class="checks[4].checkStatus === 0 ? 'init' : 'active'" v-if="checks[4]">
+          <div class="left-wrap">
+            <img src="./image/init_flow_4@2x.png" alt="" v-if="checks[4].checkStatus === 0">
+            <img src="./image/active_flow_4@2x.png" alt="" v-else>
+          </div>
+          <div class="right-wrap">
+            <p class="title">
+              <span>{{ checks[4].ruleName }}</span>
+            </p>
+            <p class="success" v-if="checks[4].checkStatus === 2">{{ checks[4].checkRemark }}</p>
+          </div>
+        </li>
+      </template>
+      <li class="fail" v-if="orderFinalStatus === 2">{{ orderFinalRemark }}</li>
+      <li class="order-info border-top-1px">
+        <p>创建时间:{{ createdAt }}</p>
+        <p>申请单号:{{ orderNumber }}</p>
+      </li>
+    </ul>
+  </div>
+</template>
+
+<script>
+import { ImagePreview, Toast } from 'vant'
+import { getOrderDetail } from './api'
+
+export default {
+  name: 'detail',
+  props: {
+    id: {
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      orderProduceName: '',
+      orderPrice: 0,
+      orderUserName: '',
+      createdAt: '',
+      orderNumber: '',
+      orderFinalStatus: 0, // 订单最终状态: 0-进行中 1-成功 2-失败
+      commanyPhone: '',
+      orderFinalRemark: '',
+      checks: []
+    }
+  },
+  created () {
+    this.funInit()
+  },
+  async mounted () {
+    await this.$nextTick()
+    this.$refreshTitle('进度查询')
+  },
+  methods: {
+    funInit () {
+      getOrderDetail(this.id).then(res => {
+        if (res.status) {
+          const { orderProduceName, orderPrice, orderUserName, createdAt, orderNumber, orderFinalStatus, commanyPhone, orderFinalRemark, checks } = res.data
+          this.orderProduceName = orderProduceName
+          this.orderPrice = orderPrice
+          this.orderUserName = orderUserName
+          this.createdAt = createdAt
+          this.orderNumber = orderNumber
+          this.orderFinalStatus = orderFinalStatus
+          this.commanyPhone = commanyPhone
+          this.orderFinalRemark = orderFinalRemark
+          this.checks = checks
+        } else {
+          Toast(res.msg)
+        }
+      }).catch(() => {
+        Toast('出错啦')
+      })
+    },
+    funImagePreview (index, images) {
+      ImagePreview({
+        images: images,
+        startPosition: index,
+        closeable: true
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.wrapper {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  width: 100%;
+  padding: 15px 0 91px;
+}
+
+.header {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  width: 343px;
+
+  h2 {
+    padding-left: 8px;
+    line-height: 33px;
+    font-size: 24px;
+    font-weight: 500;
+    color: #333;
+  }
+
+  a {
+    display: flex;
+    align-items: center;
+    padding: 11px 12px;
+    background: #FFFFFF;
+    border-radius: 100px 0 0 100px;
+
+    img {
+      width: 29px;
+      height: 29px;
+    }
+
+    span {
+      margin-left: 3px;
+      line-height: 22px;
+      font-size: 16px;
+      font-weight: 500;
+      color: #C7AC8B;
+    }
+  }
+}
+
+.content {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  width: 343px;
+  padding-top: 23px;
+  margin-top: 16px;
+  border-radius: 4px;
+  background: #FFFFFF;
+}
+
+.flow {
+  position: relative;
+  left: 0;
+  top: 0;
+  display: flex;
+  width: 311px;
+  min-height: 68px;
+  margin-top: 18px;
+
+  &:nth-of-type(1) {
+    margin-top: 0;
+  }
+}
+
+.init {
+  &.has-border:before {
+    position: absolute;
+    left: 15px;
+    top: 0;
+    content: '';
+    width: 1px;
+    height: 100%;
+    border-left: 1px dashed #D8D8D8;
+  }
+
+  .title {
+    color: #999;
+  }
+}
+
+.active {
+  &.has-border:before {
+    position: absolute;
+    left: 15px;
+    top: 0;
+    content: '';
+    width: 1px;
+    height: 100%;
+    border-left: 1px dashed #CBB091;
+  }
+
+  .title {
+    color: #333;
+  }
+}
+
+.flow-0 {
+  .description {
+    span:nth-of-type(2) {
+      font-weight: bold;
+    }
+
+    span:nth-of-type(3) {
+      margin: 0 5px;
+    }
+  }
+
+  .time {
+    margin-top: 18px;
+  }
+}
+
+.flow-1 {
+  .title {
+    span:nth-of-type(2) {
+      padding-top: 3px;
+      line-height: 20px;
+      font-size: 14px;
+    }
+  }
+
+  .attest-wrap {
+    display: flex;
+    margin-top: 6px;
+
+    div {
+      width: 41px;
+      height: 41px;
+      margin-left: 10px;
+      overflow: hidden;
+
+      &:nth-of-type(1) {
+        margin-left: 0;
+      }
+
+      img {
+        display: block;
+        width: 100%;
+      }
+    }
+  }
+
+  .time {
+    margin-top: 6px;
+  }
+}
+
+.flow-2 {
+  .store {
+    line-height: 20px;
+    font-size: 14px;
+    word-break: break-all;
+    color: #333;
+  }
+
+  .time {
+    margin-top: 14px;
+  }
+}
+
+.flow-3 {
+  .description {
+    flex-flow: row wrap;
+  }
+
+  i {
+    line-height: 20px;
+    font-size: 14px;
+  }
+
+  .label {
+    color: #333;
+  }
+
+  .value {
+    font-weight: 600;
+    color: #D73634;
+  }
+
+  .time {
+    margin-top: 11px;
+  }
+}
+
+.flow-4 {
+  margin-bottom: 14px;
+}
+
+.left-wrap {
+  position: relative;
+  left: 0;
+  top: 0;
+  z-index: 1;
+
+  img {
+    display: block;
+    width: 32px;
+    height: 31px;
+  }
+}
+
+.right-wrap {
+  margin-left: 16px;
+}
+
+.title {
+  display: flex;
+  padding-top: 6px;
+
+  span {
+    line-height: 22px;
+    font-size: 16px;
+    font-weight: 500;
+    color: inherit;
+  }
+}
+
+.description {
+  display: flex;
+  margin-top: 6px;
+
+  span {
+    line-height: 20px;
+    font-size: 14px;
+    color: #333;
+
+    &:nth-of-type(2) {
+      color: #D73634;
+    }
+  }
+}
+
+.jump-attest,
+.jump-bespeak {
+  line-height: 44px;
+  font-size: 14px;
+  color: #999;
+}
+
+.time {
+  line-height: 17px;
+  font-size: 12px;
+  color: #666;
+}
+
+.tip {
+  margin-top: 14px;
+  line-height: 20px;
+  font-size: 14px;
+  font-weight: 600;
+  color: #D73634;
+}
+
+.success,
+.fail {
+  line-height: 25px;
+  font-size: 18px;
+  font-weight: 600;
+  word-break: break-all;
+  color: #D73634;
+}
+
+.success {
+  margin-top: 2px;
+}
+
+.fail {
+  width: 311px;
+  padding-left: 8px;
+  margin: 12px 0 23px;
+}
+
+.order-info {
+  width: 329px;
+  padding: 20px 0 24px;
+  @include border-top-1px(#E8E8E8);
+
+  p {
+    padding-left: 17px;
+    line-height: 20px;
+    font-size: 14px;
+    color: #666;
+
+    &:nth-of-type(2) {
+      margin-top: 2px;
+    }
+  }
+}
+</style>