Browse Source

feat(KIP-13638): 反向寻车

lock.qiu@kerryprops.com 1 năm trước cách đây
mục cha
commit
2dd6e44de0

+ 6 - 0
src/api/parking/index.js

@@ -323,4 +323,10 @@ export function checkEligibility(vehicleId) {
 export function getPortalsByLbs(brandId,lbsIds) {
   return window.requestms.get(`portals/lbs?brandId=${brandId}&lbsIds=${lbsIds}`, {} , { loading: false });
   // return window.requestms.delete(`https://dev-kip-service-internal.kerryonvip.com/temporary-parking-service/vehicles/${vehicleId}`, params, { loading: false });
+}
+
+// 通过LBSID查询 停车缴费首页功能管理后端接口
+export function getCarInformation(carNum) {
+  return window.requestms.get(`parking/find-car-location/${carNum}`, {} , { loading: false });
+  // return window.requestms.delete(`https://dev-kip-service-internal.kerryonvip.com/temporary-parking-service/vehicles/${vehicleId}`, params, { loading: false });
 }

+ 114 - 0
src/pages/parkingFee/mixins/parkingFindCar.js

@@ -0,0 +1,114 @@
+import uniPop from '@/components/uni-popup/uni-popup.vue';
+import { Dialog } from 'vant';
+import LoginDom from '@/components/Login/Login.vue';
+// const app = getApp()
+const app = {};
+import {
+  kipGetMemberVehicles,
+  kipDeleteMemberVehicles,
+} from '@/utils/api-kip.js';
+import { LICENSE_PLATE_TYPE_ARR } from '@/constants.js';
+import { mapState } from 'vuex';
+// import authorize from '@/components/authorize/authorize.vue';
+import { isCruMarketByKey } from '@/utils/location-util.js';
+import MemberCacheTool from '@/utils/member-cache-tool.js';
+import { REG_SOURCE } from '@/constants.js';
+import uni from '@/utils/uniHooks.js';
+// import { vehicles as vehiclesList } from './list';
+import { wxToLoginCallback, isHZ } from '@/utils/index';
+import { Toast } from 'vant';
+import { getVehicles, delVehicle, parkingLots } from '@/api/parking/index'
+
+export default {
+  components: {
+    uniPop,
+    // authorize,
+    LoginDom,
+  },
+  computed: {
+    ...mapState({
+      custTypeId: (state) => state.custTypeId,
+      member: (state) => state.member,
+      groupId: (state) => state.groupId,
+      openid: (state) => state.openid,
+      mallid: (state) => state.mallId,
+      mobile: (state) => state.mobile,
+      kipUserId: (state) => state.kipUserId,
+      isLogin: (state) => state.isLogin,
+    }),
+    isNoLogin() {
+      return JSON.stringify(this.member) === '{}'
+    },
+    isHZ() {
+      return isHZ(this.mallid)
+    }
+  },
+  data() {
+    return {
+      list: [],
+      activeId: '',
+      activeCarno: '',
+      licensePlateList: [],
+      isBeijing: false,
+      options: null,
+      preUrl: '',
+      deleteDialogSwitch: false,
+      deleteSuccessDialogSwitch: false,
+      show: false, // 删除车牌时提示内容
+      parkingLotsInfo: {},
+      enableDiscountVehicle: false
+    };
+  },
+
+  async created() {
+    this.options = this.$route.query;
+    // this.parkingLots()
+  },
+  async mounted() {
+      vm.$nextTick(()=>{
+        vm.getCarInformations(this.options.carnum)
+      })
+   
+    setTimeout(() => {
+      uni.setNavigationBarTitle({
+        title: '反向寻车',
+      });
+    }, 300);
+    setTimeout(() => {
+      window?.toWXSendMsg({
+        type: 'uni_func',
+        funcName: 'setNavigationBarColor',
+        options: {
+          frontColor: '#000000',
+          backgroundColor: '#FBFCFF',
+        },
+      });
+    }, 500)
+  },
+  onUnload() {
+    // #ifdef MP-WEIXIN
+    var pages = getCurrentPages();
+    var prevPage = pages[pages.length - 2];
+    console.log('==> 车牌管理-返回上一页');
+    prevPage.setData({
+      parkData: 'parkData',
+    });
+    // #endif
+    // #ifdef H5
+    uni.setStorage({
+      key: 'parkData',
+      data: 'parkData',
+      success: function () {
+        console.log('parkData-success');
+      },
+    });
+    // #endif
+  },
+  methods: {
+    // 获取反向寻车信息
+    async getCarInformations(carNum) {
+      const res = await getCarInformation(carNum)
+      
+    },
+  },
+};

+ 4 - 0
src/pages/parkingFee/parkingFee.vue

@@ -26,6 +26,10 @@
               <img :src="`${require(`@/pages/parkingFee/static/images/icon-car.png`)}`" />
               <span>车辆管理</span>
             </div>
+            <div class="menu_item" @click="menuToPage('FIND_CAR')" v-if="portalsByLbsList.indexOf('FIND_CAR') > -1">
+              <img :src="`${require(`@/pages/parkingFee/static/images/icon-order.png`)}`" />
+              <span>反向寻车</span>
+            </div>
           </div>
           <!-- 菜单 -->
           <div

+ 126 - 0
src/pages/parkingFee/parkingFindCar.vue

@@ -0,0 +1,126 @@
+<template>
+  <div :class="['scroll-Y', theme]">
+    <!--    <wx-points-commit ref='wxPointsCommit'></wx-points-commit>-->
+
+    <img :src="icon" />
+    <div class="pay-success-title">[支付成功]</div>
+    <div class="pay-success-info" >{{vehicleNo | formatCarno}}停车费支付成功</div>
+    <div class="pay-success-info" style="margin-bottom: 40px">请在<span style="color: var(--k-color-primary);">{{outParkCharging}}分钟</span>内离场</div>
+    <div>
+      <k-button title="查看缴费记录" style="margin-bottom: 24px;" @click="page_button" />
+      <k-button type="outline" title="返回首页" @click="page_button1" />
+    </div>
+
+    <!--    <div :class="{'page_button': true, 'blue_page_button': custTypeId === 1, 'green_page_button': custTypeId === 2}" @click="page_button">查看缴费记录</div>-->
+    <!--    <div :class="{'page_button1': true, 'blue_page_button1': custTypeId === 1, 'green_page_button1': custTypeId === 2}" @click="page_button1">返回首页</div>-->
+  </div>
+</template>
+
+<script>
+import parkingFindCar from './mixins/parkingFindCar'
+import baseMixins from './mixins/base'
+export default {
+  mixins:[baseMixins, parkingFindCar]
+}
+</script>
+
+<style lang="less" scoped>
+.scroll-Y {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  height: 100vh;
+  background: #fff;
+  text-align: center;
+  img {
+    width: 110px;
+    height: 110px;
+    //margin-top: 250px;
+    margin: 126px auto 52px;
+  }
+  .pay-success-title {
+    height: 48px;
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 34px;
+    line-height: 48px;
+    margin-bottom: 40px;
+    color: #333333;
+  }
+  .pay-success-info {
+    /* 辽A 11111停车费支付成功 */
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 34px;
+    line-height: 48px;
+    /* identical to box height */
+    text-align: center;
+    color: #999999;
+    margin-bottom: 10px;
+  }
+  .pay-success-dec {
+    /* 请在20分钟内离场 */
+
+
+    position: absolute;
+    width: 279px;
+    height: 48px;
+    left: 236px;
+    top: 594px;
+
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 34px;
+    line-height: 48px;
+    /* identical to box height */
+
+    text-align: center;
+
+    color: #999999;
+
+  }
+}
+.page_button {
+  width: 86%;
+  height: 80px;
+  line-height: 80px;
+  border-radius: 40px;
+  margin-top: 40px;
+  margin-left: 7%;
+  font-size: 30px;
+  color: #fff;
+  background-image: linear-gradient(to right, #7e4fa1 , #433c7f);
+}
+.blue_page_button {
+  .color-background-color('blue')
+}
+.green_page_button {
+  .color-background-color('green')
+}
+.page_button1 {
+  width: 86%;
+  height: 80px;
+  line-height: 80px;
+  border-radius: 40px;
+  margin-top: 40px;
+  margin-left: 7%;
+  font-size: 30px;
+  color: #7e4fa1;
+  border:1px solid  #7e4fa1;
+}
+.style-color(@value) {
+  @color: 'color-@{value}';
+  color: @@color;
+  border-color: @@color;
+}
+.blue_page_button1 {
+  .style-color('blue')
+}
+.green_page_button1 {
+  .style-color('green')
+}
+</style>
+

BIN
src/pages/parkingFee/static/images/lanya.png


+ 4 - 0
src/pages/parkingFeeV2/mixins/parkingFee.js

@@ -1057,6 +1057,10 @@ export default {
           console.log('停车权益', this.portalsByLbsInfo)
           this.$router.push({path: 'parkingRights', query: this.portalsByLbsInfo});
           break
+          case 'FIND_CAR': // 反向寻车
+          console.log('反向寻车', this.portalsByLbsInfo)
+          this.$router.push({path: 'parkingFindCarFirst', query: this.portalsByLbsInfo});
+          break
       }
     }
   },

+ 123 - 0
src/pages/parkingFeeV2/mixins/parkingFindCar.js

@@ -0,0 +1,123 @@
+import uniPop from '@/components/uni-popup/uni-popup.vue';
+import { Dialog } from 'vant';
+import LoginDom from '@/components/Login/Login.vue';
+// const app = getApp()
+const app = {};
+import {
+  kipGetMemberVehicles,
+  kipDeleteMemberVehicles,
+} from '@/utils/api-kip.js';
+import { LICENSE_PLATE_TYPE_ARR } from '@/constants.js';
+import { mapState } from 'vuex';
+// import authorize from '@/components/authorize/authorize.vue';
+import { isCruMarketByKey } from '@/utils/location-util.js';
+import MemberCacheTool from '@/utils/member-cache-tool.js';
+import { REG_SOURCE } from '@/constants.js';
+import uni from '@/utils/uniHooks.js';
+// import { vehicles as vehiclesList } from './list';
+import { wxToLoginCallback, isHZ } from '@/utils/index';
+import { Toast } from 'vant';
+import { getVehicles, delVehicle, parkingLots , getCarInformation} from '@/api/parking/index'
+
+export default {
+  components: {
+    uniPop,
+    // authorize,
+    LoginDom,
+  },
+  computed: {
+    ...mapState({
+      custTypeId: (state) => state.custTypeId,
+      member: (state) => state.member,
+      groupId: (state) => state.groupId,
+      openid: (state) => state.openid,
+      mallid: (state) => state.mallId,
+      mobile: (state) => state.mobile,
+      kipUserId: (state) => state.kipUserId,
+      isLogin: (state) => state.isLogin,
+    }),
+    isNoLogin() {
+      return JSON.stringify(this.member) === '{}'
+    },
+    isHZ() {
+      return isHZ(this.mallid)
+    }
+  },
+  data() {
+    return {
+      list: [],
+      activeId: '',
+      activeCarno: '',
+      licensePlateList: [],
+      isBeijing: false,
+      options: null,
+      preUrl: '',
+      deleteDialogSwitch: false,
+      deleteSuccessDialogSwitch: false,
+      show: false, // 删除车牌时提示内容
+      parkingLotsInfo: {},
+      enableDiscountVehicle: false,
+      dataObject: {
+        vehicleNo: '',
+        area: '',
+        spaceNo: '',
+        floorName: '',
+        carImage: ''
+      }
+    };
+  },
+
+  async created() {
+    this.options = this.$route.query;
+    // this.parkingLots()
+  },
+  async mounted() {
+      this.$nextTick(()=>{
+        this.getCarInformations(this.options.vehicleNo)
+      })
+   
+    setTimeout(() => {
+      uni.setNavigationBarTitle({
+        title: '反向寻车',
+      });
+    }, 300);
+    // setTimeout(() => {
+    //   window?.toWXSendMsg({
+    //     type: 'uni_func',
+    //     funcName: 'setNavigationBarColor',
+    //     options: {
+    //       frontColor: '#000000',
+    //       backgroundColor: '#FBFCFF',
+    //     },
+    //   });
+    // }, 500)
+  },
+  onUnload() {
+    // #ifdef MP-WEIXIN
+    var pages = getCurrentPages();
+    var prevPage = pages[pages.length - 2];
+    console.log('==> 车牌管理-返回上一页');
+    prevPage.setData({
+      parkData: 'parkData',
+    });
+    // #endif
+    // #ifdef H5
+    uni.setStorage({
+      key: 'parkData',
+      data: 'parkData',
+      success: function () {
+        console.log('parkData-success');
+      },
+    });
+    // #endif
+  },
+  methods: {
+    // 获取反向寻车信息
+    async getCarInformations(carNum) {
+      const res = await getCarInformation(carNum)
+      if (res.data) {
+
+      }
+    },
+  },
+};

+ 1034 - 0
src/pages/parkingFeeV2/mixins/parkingFindCarFirst.js

@@ -0,0 +1,1034 @@
+import plateNumber from '@/components/plate-number/plateNumber.vue';
+import {LICENSE_PLATE_TYPE_ARR, REG_SOURCE} from '@/constants';
+import LoginDom from '@/components/Login/Login.vue';
+import {mapState} from 'vuex';
+import {initWxJsSdkConfig} from '@/utils/login';
+import {getUrlParams, isHZ} from '@/utils';
+import wxPointsAuth from '@/components/wx-points-auth/wx-points-auth.vue'
+
+const app = {
+  globalData: {
+    regSource: '',
+  },
+};
+import uni from '@/utils/uniHooks';
+import {getCarInformation, parkingLots, qrCodes, unlicensedCarCheckIn, getConfValueOfKey, getVehicles, parkingRecord, checkEligibility, addVehicles, getPortalsByLbs} from '@/api/parking';
+
+export default {
+  components: {
+    plateNumber,
+    LoginDom,
+    'wx-points-auth': wxPointsAuth,
+    // blueCom,
+    // greenCom,
+    // officeBlueCom,
+    // purpleCom,
+  },
+  data() {
+    return {
+      showPointsAuth: true,
+      vehicleMgt_content_index: -1, //历史车辆选中
+      carType: 0, //车辆类型
+      init_ch: false, // 字体超出隐藏显示
+      search_price: false, //查询按钮隐藏显示
+      parkInfoEntity: {},
+      show_chinese: false, //是否显示汉字键盘
+      show_allBoard: false, //是否显示英文数字键盘
+      plate_number: '', //车牌号
+      description: '', // 车场描述
+      ind: null,
+      numArr: ['', '', '', '', '', '', ''],
+      active: null,
+      carList: [], // 车辆列表
+      classifyList: ['燃油车牌', '新能源', '特殊车牌'], // 车牌类型
+      vehicleNumber: '',
+      localimgPic: '',
+      hourMoney: '',
+      showSq: false,
+      blueHeadBg: 'parkingFee/fee-head-bg.png',
+      picUrl: this.$picUrl,
+      colorAry: ['', '-blue', '-green'],
+      openId: null,
+      options: null,
+      preUrl: '',
+      tabbarActive: 'manualPayment',
+      supportUnlicensed: false, // 控制当前site,是否使用无牌车
+      qrCodeHistory: '',
+      isAlipayClient: isAlipayClient,
+      // custTypeId: 0,
+      // 2.19新增内容
+      eligibility: {}, // 
+      eventId: '',
+      // 2.22新增内容:https://kerryprops.atlassian.net/browse/KIP-13059
+      portalsByLbsList: [],
+      portalsByLbsInfo: {}
+    };
+  },
+  computed: {
+    disabledBtn() {
+      return this.numArr.filter((val) => !val).length > 0;
+    },
+    ...mapState({
+      groupId: (state) => state.groupId,
+      openid: (state) => state.openid,
+      mallId: (state) => state.mallId,
+      kipUserId: (state) => state.kipUserId,
+      userInfo: (state) => state.userInfo,
+      member: (state) => state.member,
+      mobile: (state) => state.mobile,
+      custTypeId: (state) => state.custTypeId,
+      unlicensedCar: (state) => state.order.unlicensedCar,
+      // 如果是扫码进入的无牌车
+      unlicensedInfo: (state) => state.unlicensedInfo,
+      endlessLoop: (state) => state.endlessLoop,
+      source: (state) => state.source,
+    }),
+  },
+  created() {
+    // console.log('二次加载this.$route.query.fromPage', this.$route.query.fromPage, this.$store.state.pageHistory);
+    // console.log('二次加载', this.$route.query.fromPage && !this.$store.state.pageHistory[this.$route.query.fromPage]);
+    // const fromPage = localStorage.getItem(`${this.$route.query.fromPage}`)
+    // if (this.$route.query?.fromPage && this.$route.query?.fromPage !== 'undefined' && !this.$store.state.pageHistory[this.$route.query.fromPage] && !fromPage) {
+    //   // console.log(93939);
+    //   this.$store.commit('setPageHistory', {
+    //     [this.$route.query.fromPage]: 1
+    //   })
+    //   localStorage.setItem(`${this.$route.query.fromPage}`, this.$route.query.fromPage)
+    //   setTimeout(() => {
+    //     this.$router.push({
+    //       path: this.$route.query.fromPage, query: {
+    //         ...this.$route.query,
+    //         loginCount: 1
+    //       }
+    //     });
+    //   }, 200)
+    // }
+    // const {type = '', code = ''} = this.$route.query
+    // // 无牌车流程
+    // if (/unlicensedOut|unlicensedIn/.test(type) && code && !this.$store.state.pageHistory?.unlicensed && !this.endlessLoop) {
+    //   this.$store.commit('setPageHistory', {
+    //     unlicensed: 1
+    //   })
+    //   this.$store.commit('SET_UNLICENSED_INFO', {
+    //     type, code
+    //   });
+    //   this.$store.commit('SET_ENDLESS_LOOP', type);
+    //   this.$nextTick(() => {
+    //     this.qrCodesRule(code);
+    //   })
+    // }
+  },
+  beforeRouteLeave(to, from, next) {
+    this.$store.commit('cachedViews/DEL_CACHED_VIEW', to);
+    next();
+  },
+  watch: {
+    openid() {
+      if (this.openid) {
+        // this.getParkInfo();
+        this.showSq = false;
+      }
+    },
+    // unlicensedInfo:{
+    //   handler(){
+    //     // const member = uni.getStorageSync('member');
+    //     // if(!member) return // 如果用户走未登录流程的话
+    //     // 不论是否出入场,都使用此函数获取 gateId(闸口机器的ID)
+    //     if (this.unlicensedInfo?.type && /unlicensedOut|unlicensedIn/.test(this.unlicensedInfo.type) && this.endlessLoop.length === 0) {
+    //       // 此处记录扫码流程执行次数。如果超过一次则不再执行
+    //       this.$store.commit('SET_ENDLESS_LOOP', this.unlicensedInfo.type);
+    //       this.$nextTick(() => {
+    //         this.qrCodesRule(this.unlicensedInfo.code);
+    //       })
+    //     }
+    //   },
+    //   immediate:true //true就表示会立即执行
+    // }
+  },
+  methods: {
+    toggleType(carType) {
+      this.ind = 0;
+      this.active = 0;
+      this.carType = carType;
+      if (carType === 1) {
+        this.numArr = [
+          this.numArr[0],
+          this.numArr[1],
+          this.numArr[2],
+          this.numArr[3],
+          this.numArr[4],
+          this.numArr[5],
+          this.numArr[6],
+          this.numArr[7],
+        ];
+      } else {
+        this.numArr = [
+          this.numArr[0],
+          this.numArr[1],
+          this.numArr[2],
+          this.numArr[3],
+          this.numArr[4],
+          this.numArr[5],
+          this.numArr[6],
+        ];
+      }
+      this.vehicleNumber = this.numArr.join('');
+    },
+    // 获取停车场信息
+    getParkInfo: async function () {
+      uni.showLoading({
+        title: '加载中',
+      });
+      try {
+        // 加载车场信息
+        const res = await parkingLots(this.$store.state.lbsId);
+        // console.log(res);
+        let reg = /[;;]/g;
+        this.description = res?.description?.replace(reg, '\r\n').replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>');
+        this.supportUnlicensed = res.supportUnlicensed || false
+        const carList = uni.getStorageSync('carList');
+        if (carList) {
+          this.carList = JSON.parse(carList);
+        }
+      } catch (e) {
+        console.log(225225, e);
+      }
+    },
+    //缴费说明隐藏显示
+    top_display() {
+      this.init_ch = !this.init_ch;
+    },
+    // 唤起键盘
+    clickShowKeyboard(index) {
+      if ( index === 7) {
+        this.carType = 1
+        this.$refs['k-tab'].changeTab(this.carType)
+      }
+      this.ind = index;
+      this.active = index;
+      if (index === 0) {
+        this.$refs['plateKeyboard'].openKeyboardCN();
+      } else {
+        this.$refs['plateKeyboard'].closeKeyboardCN();
+        this.$refs['plateKeyboard'].openKeyboardEN();
+      }
+    },
+    // 接收子组件数据
+    updateCarno(val) {
+      this.numArr = [...val.numArr];
+      this.vehicleNumber = this.numArr.join('');
+      this.active = val.active;
+      this.ind = val.ind;
+    },
+    // 节流函数
+    throttle(fc, waitTime = 500, imme = true) {
+      if (imme) {
+        if (!this.flag) {
+          this.flag = true;
+          typeof fc === 'function' && fc();
+          this.timer = setTimeout(() => {
+            this.flag = false;
+          }, waitTime);
+        }
+      } else {
+        if (!this.flag) {
+          this.flag = true;
+          this.timer = setTimeout(() => {
+            this.flag = false;
+            typeof fc === 'function' && fc();
+          }, waitTime);
+        }
+      }
+    },
+    async checkEligibility(vehicleNumber = this.vehicleNumber) {
+      try {
+        /*
+        * 如果是杭州,并且是登陆情况
+        * {
+            "eligible": false, // 是否优惠车
+            "isBound": false, // 是否绑定
+            "maxBindingCount": 3, // 绑定数量上限
+            "maxChangeCount": 5, // 换绑数量上限
+            "userBindingCount": 3, // 用户当前绑定车牌数量 
+            "userRemainingChangeCount": 5, // 用户剩余换绑次数
+            "redirectTo": "CHANGE_BINDING" // 跳转页面
+          }
+          BIND_NEW //去绑定
+          CHANGE_BINDING //去换绑
+          PAY_WITHOUT_DISCOUNT //去无优惠支付或放弃支付
+          CHECK_OUT //直接去查费,带优惠
+        * 
+        * */
+        // 如果是杭州,并且是登陆情况
+        this.eligibility = await checkEligibility(vehicleNumber)
+        /*this.eligibility = {
+          "eligible": false, // 是否优惠车
+          "isBound": false, // 是否绑定
+          "maxBindingCount": 3, // 绑定数量上限
+          "maxChangeCount": 5, // 换绑数量上限
+          "userBindingCount": 3, // 用户当前绑定车牌数量 
+          "userRemainingChangeCount": 5, // 用户剩余换绑次数
+          "redirectTo": "CHANGE_BINDING" // 跳转页面
+        }*/
+        // 是否优惠车 是否绑定, 或者 直接去查费,带优惠
+        if(this.eligibility.eligible && this.eligibility.isBound || this.eligibility.redirectTo === 'CHECK_OUT') {
+          this.toParkingFeeDetail(vehicleNumber)
+          return
+        }
+        // 是否绑定
+        if(this.eligibility.redirectTo === 'BIND_NEW' && this.eligibility.maxBindingCount > this.eligibility.userBindingCount) {
+          this.$refs['checkCarPopup'].open({
+            redirectTo: this.eligibility.redirectTo,
+            vehicleNo: vehicleNumber,
+            topBtnFn: async () => {
+              const res = await  addVehicles(this.kipUserId,
+                {
+                  userId: this.kipUserId,
+                  licensePlateType: LICENSE_PLATE_TYPE_ARR[this.carType].value,
+                  vehicleNo: vehicleNumber,
+              })
+              if(res?.id) {
+                this.toParkingFeeDetail(vehicleNumber)  
+              }
+            },
+            bottomBtnFn: () => {
+              this.toParkingFeeDetail(vehicleNumber)
+            }
+          })
+          return
+        }
+        // 是否换绑
+        if(this.eligibility.redirectTo === 'CHANGE_BINDING' && this.eligibility.userRemainingChangeCount) {
+          this.$refs['checkCarPopup'].open({
+            redirectTo: this.eligibility.redirectTo,
+            vehicleNo: vehicleNumber,
+            topBtnName: '去换绑(可享停车优惠)',
+            topBtnFn: async () => {
+              this.doRouter2()
+            },
+            bottomBtnName: '放弃换绑(无停车优惠)',
+            bottomBtnFn: () => {
+              this.toParkingFeeDetail(vehicleNumber)
+            }
+          })
+          return
+        }
+        // 去无优惠支付或放弃支付,其余场景都是无优惠
+        /*if(this.eligibility.redirectTo === 'PAY_WITHOUT_DISCOUNT') {
+         
+        }*/
+        this.$refs['checkCarPopup'].open({
+          // redirectTo: this.eligibility.redirectTo,
+          redirectTo: 'PAY_WITHOUT_DISCOUNT',
+          vehicleNo: vehicleNumber,
+          topBtnName: '继续缴费(无停车优惠)',
+          topBtnFn: () => {
+            this.toParkingFeeDetail(vehicleNumber)
+          },
+          bottomBtnName: '放弃缴费 ',
+        })
+      }  catch (err) {
+
+      }
+    },
+    // 校验车牌号
+    async preHandleSearch() {
+      if (this.disabledBtn) return
+      // 不是杭州的车牌 或者 用户拒绝登陆的场景
+      if (!isHZ(this.mallId) || this.$route.query.isLogin === 'loginDenied')  {
+        this.toParkingFeeDetail()
+        return
+      }
+      // 查询车辆优惠资格并提示跳转页面
+      await this.checkEligibility()
+    },
+    // 去反向寻车详情
+    async toParkingFeeDetail(vehicleNumber = this.vehicleNumber) {
+      uni.setStorageSync('carList', [
+        ...new Set([vehicleNumber, ...this.carList]),
+      ].slice(0, 6));
+      const res = await getCarInformation(vehicleNumber)
+        console.log('resresres', res)
+        if (res.data) {
+            this.$nextTick(() => {
+                const query = {
+                    ...this.$route.query,
+                    vehicleNo: vehicleNumber,
+                  }
+                  // fromPage && format && unlicensed
+                  query.fromPage = ''
+                  query.format = ''
+                  query.unlicensed = ''
+                  this.$router.push({
+                    path: 'parkingFindCar',
+                    query,
+                  });
+                
+                
+              })
+        }
+      
+    },
+    // 历史车牌快速查询
+    async toHandleSearchBefore(vehicleNo) {
+      // 不是杭州的车牌 或者 用户拒绝登陆的场景
+      if (!isHZ(this.mallId) || this.$route.query.isLogin === 'loginDenied')  {
+        this.toHandleSearch(vehicleNo)
+        return
+      }
+      // 查询车辆优惠资格并提示跳转页面
+      await this.checkEligibility(vehicleNo)
+      
+    },
+    toHandleSearch(vehicleNo) {
+      uni.setStorageSync('carList', [...new Set([vehicleNo, ...this.carList])].slice(0, 6));
+      this.$store.commit('cachedViews/DEL_CACHED_VIEW', {
+        name: 'parkingFeeDetail',
+      });
+      this.$store.commit('SET_REGRESH_PAGE_KEY')
+      this.$nextTick(() => {
+        const query = {
+          ...this.$route.query,
+          vehicleNo: vehicleNo,
+        }
+        // fromPage && format && unlicensed
+        query.fromPage = ''
+        query.format = ''
+        query.unlicensed = ''
+
+        this.$router.push({
+          path: 'parkingFeeDetail',
+          query,
+        });
+      });
+    },
+    // 查询车费信息
+    async handleSearch(carno, clickEvent = '$ClickQueryAndPayment') {
+      this.vehicleNumber = carno;
+      const params = {
+        carno,
+        mallid: this.mallId,
+        openid: this.openid,
+        vipcode: this.member?.vipcode,
+        mobile: this.mobile,
+        groupId: this.groupId,
+        createuser: 'sys_miniprogram',
+      };
+      // 查询缴费按钮埋点
+      let [carTypeName, redirectUrl, parkTime] = ['ordinary', '', ''];
+      switch (this.carType) {
+        case 0:
+          carTypeName = 'ordinary';
+          break;
+        case 1:
+          carTypeName = 'newEnergy';
+          break;
+        case 2:
+          carTypeName = 'special';
+          break;
+      }
+      this.$md(params);
+      this.$request({
+        // url: this.$baseURL + 'api/1.0/park/checkCarIsInPark',
+        url: this.$baseURL + 'api/1.0/park/checkCarIsInParkAndCarFee',
+        // url: 'http://172.21.90.87:8083/xcrm-api/api/1.0/park/checkCarIsInParkAndCarFee',
+        data: params,
+        method: 'POST',
+        header: JSON.parse(uni.getStorageSync('handleUser')),
+        timeout: 60000 * 2, // 120S
+        showLoading: {
+          title: '加载中',
+          duration: 0,
+        },
+      })
+        .then((res) => {
+          // console.log(555555, res);
+          // ToastObj.clear();
+          // uni.hideLoading();
+          if (res.data.code === 0) {
+            // 清理旧数据
+            this.parkingFeeDetailInit();
+            uni.setStorageSync('isReload', '3');
+            // this.$destroy();
+            const query = {
+              ...this.$route.query,
+              vehicleNo: carno,
+            }
+            // fromPage && format && unlicensed
+            query.fromPage = ''
+            query.format = ''
+            query.unlicensed = ''
+            this.$router.push({
+              path: 'parkingFeeDetail',
+              query,
+            });
+            parkTime = res.data?.data?.serviceMin;
+            redirectUrl = '/pages/parkingFee/parkingFeeDetail.vue';
+          } else if (res.data.code === 1) {
+            // 当前车辆没有查到账单
+            this.$router.push({
+              path: 'parkingFeePayment',
+              query: {
+                ...this.$route.query,
+                msg: res.data.msg,
+                carno,
+              },
+            });
+            redirectUrl = '/pages/parkingFee/parkingFeePayment.vue';
+          } else if (res.data.code === 2) {
+            // 月租车
+            this.$router.push({
+              path: './parkingFeeHint/parkingFeeHint',
+              query: {
+                ...this.$route.query,
+                carno,
+              },
+            });
+
+            redirectUrl = '/pages/parkingFee/parkingFeeHint/parkingFeeHint.vue';
+          } else {
+            uni.showToast({
+              title: res.data.msg,
+              duration: 2000,
+              icon: 'none',
+            });
+          }
+        })
+        .catch((err) => {
+          // uni.hideLoading();
+          uni.showToast({
+            title: '网络超时请稍后再试',
+            duration: 2000,
+            icon: 'none',
+          });
+          console.log(err);
+        });
+    },
+    // 页面初始清空缓存
+    parkingFeeDetailInit() {
+      console.log('清理数据');
+      // 优惠减免(首停、会员、消费)
+      uni.removeStorageSync('checkedList'); // 选中list
+      uni.removeStorageSync('checkedTotal'); // 选中count数
+      uni.removeStorageSync('discountTotal'); // 减免信息(时长、费用)
+
+      // 停车减免(优惠、积分、停车券)
+      uni.removeStorageSync('parkFee');
+
+      // 电子券优惠信息
+      uni.removeStorageSync('checkedCouponList'); // 选中list
+      uni.removeStorageSync('couponInfo'); // 减免信息(时长、费用)
+      uni.removeStorageSync('list'); // 电子券list
+
+      // 总停车优惠信息(时长、费用)
+      uni.removeStorageSync('parkingTotal');
+
+      // 应缴金额
+      uni.removeStorageSync('servicefee');
+
+      // 订单号
+      uni.removeStorageSync('orderno');
+
+      // 纸质优惠券
+      uni.removeStorageSync('paperCouponInfo');
+    },
+    // 缴费记录
+    doRouter: function () {
+      const query = {
+        ...this.$route.query,
+        // vehicleNo: vehicleNo,
+      }
+      // fromPage && format && unlicensed
+      query.fromPage = ''
+      query.format = ''
+      query.loginCount = ''
+      // uni.setStorageSync('loadData', '');
+      // if (this.$store.state.isLogin === 'loginDenied') {
+      //   this.$router.push({ path: 'login' });
+      //   return;
+      // }
+      this.$store.commit('SET_REGRESH_PAGE_KEY')
+      this.$router.push({path: 'parkingFeeList', query});
+    },
+    // 车牌管理
+    doRouter2: function () {
+      this.$store.dispatch('clearUnlicensed');
+      // window?.toWXSendMsg({
+      //   type: 'uni_func',
+      //   funcName: 'setStorageSync',
+      //   options: {
+      //     key: 'noLoginParkingFeeWebViewPath',
+      //     value: ''
+      //   },
+      // });
+      this.$store.commit('SET_REGRESH_PAGE_KEY')
+      uni.setStorageSync('loadData', '');
+      // if (this.$store.state.isLogin === 'loginDenied') {
+      //   this.$router.push({ path: 'login' });
+      //   return;
+      // }
+      const query = {
+        ...this.$route.query,
+        // vehicleNo: vehicleNo,
+      }
+      // fromPage && format && unlicensed
+      query.fromPage = ''
+      query.format = ''
+      query.loginCount = ''
+      uni.removeStorageSync('passLogin');
+      this.$router.push({path: 'vehicleManagement', query});
+    },
+    async jumpToPreJudgmentOfParkingInvoice() {
+      return new Promise(async (resolve) => {
+        try {
+          // 判断是否启用停车发票
+          uni.showLoading()
+          // const res = await getAccessH5(`${this.mallId}-invoice`);
+          const res = await getConfValueOfKey('HEJIInvoiceSwitch')
+          const lbsId = uni.getStorageSync('lbsId')
+          if (res?.switch && res.lbsId.length && res.lbsId.indexOf(lbsId) > -1) {
+            uni.hideLoading();
+            // console.log(474, this.Dialog);
+            this.$dialog({
+              title: '温馨提示',
+              // message: '小程序“停车开票”功能将从2023年8月10日起提供服务,支持开具3个月内停车记录的发票,如需停车开票,请稍后尝试或咨询服务台',
+              message: res.message,
+              confirmButtonColor: this.$theme[this.theme].primaryColor
+            })
+            // 提示用户
+            // uni.showToast({
+            //   title:'尽请期待!'
+            // })
+            resolve(true)
+          }
+          resolve(false)
+        } catch (err) {
+          console.log(err);
+          resolve(false)
+        }
+      })
+      // return false
+    },
+    //停车发票
+    doRouter1: async function () {
+      const isJump = await this.jumpToPreJudgmentOfParkingInvoice();
+      if (isJump) return
+      uni.hideLoading()
+      uni.removeStorageSync('invoiceindex');
+      this.$store.dispatch('clearUnlicensed');
+      this.$store.commit('SET_REGRESH_PAGE_KEY')
+      // window?.toWXSendMsg({
+      //   type: 'uni_func',
+      //   funcName: 'setStorageSync',
+      //   options: {
+      //     key: 'noLoginParkingFeeWebViewPath',
+      //     value: ''
+      //   },
+      // });
+      const query = {
+        ...this.$route.query,
+        // vehicleNo: vehicleNo,
+      }
+      // fromPage && format && unlicensed
+      query.fromPage = ''
+      query.format = ''
+      query.loginCount = ''
+      uni.setStorageSync('loadData', '');
+      // if (this.$store.state.isLogin === 'loginDenied') {
+      //   this.$router.push({ path: 'login' });
+      //   return;
+      // }
+      // uni.removeStorageSync('passLogin');
+      // TODO: 北京停车场开票
+      /* if (this.parkInfoEntity.parkMallCode === 3) {
+        uni.navigateToMiniProgram({
+          appId: this.$etcpAppId,
+          path: this.$etcpAppInvoicePath,
+          envVersion: 'release',
+        })
+        return
+      }
+      */
+      this.$router.push({path: 'parkingReceipt', query});
+    },
+    //停车券兑换
+    doRouter3: function () {
+      this.$store.dispatch('clearUnlicensed');
+      // window?.toWXSendMsg({
+      //   type: 'uni_func',
+      //   funcName: 'setStorageSync',
+      //   options: {
+      //     key: 'noLoginParkingFeeWebViewPath',
+      //     value: ''
+      //   },
+      // });
+      uni.setStorageSync('loadData', '');
+      // window.toWXSendMsg({
+      //   type: 'toPage',
+      //   options: {
+      //     fnName: 'navigateTo',
+      //     url: '/pages/pointsMall/pointsMall?exchangeTypes=2',
+      //   },
+      // });
+
+      wx.miniProgram.navigateTo({
+        "url": "/pages/pointsMall/pointsMall?exchangeTypes=2" // 去 login 页面 1 去登录
+      })
+    },
+    blueComChange(value) {
+      console.log('blueComChange', value);
+    },
+    tabbarActiveEvent(name) {
+      this.tabbarActive = name
+      if (name === 'paymentForUnregisteredVehicle') {
+        this.$store.dispatch('order/unlicensedRule', (code) => {
+
+          // CAR_NOT_FOUND 车场扫描道闸入口,发现无车
+          if (code === 'CAR_NOT_FOUND') {
+
+          }
+          // CAR_HAS_PLATE 车场扫描道闸入口,发现有牌车
+          if (code === 'CAR_HAS_PLATE') {
+
+          }
+        })
+      }
+    },
+    // 无牌车闸机扫码
+    async scanCarCode() {
+      try {
+        const runScanFn = (res) => {
+          if (res.scanType && res.scanType == 'QR_CODE') {
+            console.log(res.result);
+            // 获取二维码参数之后,模拟提取参数
+            const url = res.result;
+            const {path} = getUrlParams(res.result)
+            let params = null
+            if (path) {
+              params = getUrlParams(decodeURIComponent(path))
+            }
+            /*
+            微信扫码之后,处理过的参数 {"code": "e41d4d9dd5534f4aa3de88326a2e6f85", "type": "unlicensedIn#wechat-redirect"}
+            */
+            if (params?.type.indexOf('wechat-redirect') > -1) {
+              params.type = params.type.replace('#wechat-redirect', '');
+            }
+            console.log('微信扫码之后,处理过的参数', params);
+            this.$store.commit('SET_UNLICENSED_INFO', params);
+            this.$nextTick(() => {
+              this.qrCodesRule(params.code, 'scan');
+            })
+            return
+          }
+          /*
+            针对微信的小程序码进行的兼容改造
+            微信扫码结束之后的返回参数 {"errMsg": "scanCode:ok", "scanType": "WX_CODE", "charSet": "ISO8859-1", "rawData": "bGsoP3gyT1Aud3QpbW1JeHRfVHJsUjg4JnR5cGU9dW5saWNlbnNlZElu", "path": "pages/automatic/automaticIndex?scene=code%3D9988%26type%3DunlicensedIn"}
+            */
+          if (res.scanType && res.scanType === 'WX_CODE' && res.path) {
+            const params = getUrlParams(`?${decodeURIComponent(res.path.replace(/.*scene=/g, ''))}`)
+            this.$store.commit('SET_UNLICENSED_INFO', params);
+            this.$nextTick(() => {
+              this.qrCodesRule(params.code, 'scan');
+            })
+          }
+          // 兜底逻辑,如果是其他小程序扫描,则提取rawData,进行解析提取入参
+          if (res.scanType && res.scanType === 'WX_CODE' && !res?.path) {
+            let path = atob(res.rawData)
+            path = path.replace(/.*([a-z0-9]{6}&type)/g, '8b$1')
+            const regex = /(\w+)&type=(\w+)/;
+            const match = path.match(regex);
+            const obj = {code: match[1], type: match[2]};
+            this.$store.commit('SET_UNLICENSED_INFO', obj);
+            this.$nextTick(() => {
+              this.qrCodesRule(obj.code, 'scan');
+            })
+          }
+        };
+        // 微信小程序
+        // const platform = getPlatform();
+        if (isAlipayClient) {
+          // 判断微信小程序与 h5 是否正常通信
+          // const isReload = await theCommunicationBetweenWechatAndH5IsNormal()
+          // if(!isReload) {
+          //   uni.setStorageSync('isReload', 1)
+          //   window.location.reload()
+          //   return
+          // }
+          window.toWXSendMsg({
+            type: 'scanQRCode',
+          });
+          // TODO 兼容支付宝无牌车扫码
+          window.subscribe('scanQRCodeOver', (options) => {
+            console.log('微信扫码结束之后的返回参数', options);
+            runScanFn(options.options);
+          });
+        } else {
+          this.$wx.scanQRCode({
+            onlyFromCamera: false,
+            // desc: 'scanQRCode desc',
+            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+            // scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
+            success: (res) => {
+              console.log('H5页面扫码获取到的参数——成功1', res);
+              // const res = {"resultStr": "lo$Qed.3YuVi*D7vXilrrV0571a1&type=unlicensedIn", "errMsg": "scanQRCode:ok"}
+              // const test = {"resultStr": "lp$Qed.3YuVi*D7vXilrrV0571a2&type=unlicensedOut", "errMsg": "scanQRCode:ok"}
+              let path = res.resultStr.replace(/.*([a-z0-9]{6}&type)/g, '8b$1')
+              console.log(614, path);
+              const regex = /(\w+)&type=(\w+)/;
+              const match = path.match(regex);
+              const obj = {code: match[1], type: match[2]};
+              console.log(618, obj);
+              console.log(696, this.qrCodesRule);
+              this.$store.commit('SET_UNLICENSED_INFO', obj);
+              this.$nextTick(() => {
+                this.qrCodesRule(obj.code, 'scan');
+              })
+              // runScanFn(res);
+              // this.formMsg.deviceCode = res.resultStr;
+            },
+            error: (res) => {
+              console.log('H5页面扫码获取到的参数——失败', res);
+              // console.log(242, res);
+            },
+          });
+        }
+      } catch (err) {
+        console.log(624, err);
+      }
+
+    },
+    // 处理扫码结果: 组装参数,剩余流程,在 缴费支付页面 实现
+    async qrCodesRule(code, source = '') {
+      console.log(717, code, source);
+      // source 是为了避免重复刷新
+      if (this.$store.state.pageHistory.parkingFeeMsg && !source) {
+        return
+      }
+      try {
+        if (this.qrCodeHistory && this.qrCodeHistory === code) {
+          return
+        }
+        this.qrCodeHistory = code
+        const qrCodesres = await qrCodes(code); // 无牌车扫码
+        // 记录buildingId,确保 buildingId 是最新的数据
+        window.localStorage.setItem('buildingId', qrCodesres.buildingId);
+        // 如果是无牌车扫码:出场
+        // console.log('模拟出场', this.unlicensedInfo.type);
+        this.$store.commit('cachedViews/DEL_CACHED_VIEW', {
+          name: 'parkingFeeDetail',
+        });
+        console.log(735);
+        // return
+        if (this.unlicensedInfo?.type === 'unlicensedOut') {
+          const query = {
+            ...this.$route.query,
+            gateId: qrCodesres.gateId,
+            vehicleNo: '',
+            type: this.unlicensedInfo.type
+          }
+          // fromPage && format && unlicensed
+          query.fromPage = ''
+          query.format = ''
+          query.unlicensed = ''
+          query.code = ''
+          this.$router.push({
+            path: 'parkingFeeDetail',
+            query
+          })
+          return
+        }
+        // 如果是无牌车扫码:入场
+        const unlicensedCarCheckInres = await unlicensedCarCheckIn({ // 获取无牌车牌
+          gateId: qrCodesres.gateId
+        });
+
+        const query = {
+          ...this.$route.query,
+          type: 'success',
+          vehicleNo: unlicensedCarCheckInres.vehicleNo
+        }
+        // fromPage && format && unlicensed
+        query.fromPage = ''
+        query.format = ''
+        query.unlicensed = ''
+        query.code = ''
+        this.$store.commit('setPageHistory', {
+          parkingFeeMsg: 1
+        })
+        // 前往 缴费支付页面
+        this.$router.push({
+          path: 'parkingFeeMsg',
+          query: query
+        })
+      } catch (err) {
+        // 车场扫描道闸入口,发现无车/车场扫描道闸入口,发现有牌车 >>> 停止往下执行,默认提示报错信息
+        if (/CAR_HAS_PLATE/.test(err.code)) {
+          return
+        }
+        if (/CAR_NOT_FOUND|INOUT_FAILED|UNLICENSED_PLATE_ACQUISITION_FAILED/.test(err.code)) {
+          const query = {
+            ...this.$route.query,
+            type: 'fail'
+          }
+          // fromPage && format && unlicensed
+          query.fromPage = ''
+          query.format = ''
+          query.unlicensed = ''
+          query.code = ''
+          this.$store.commit('setPageHistory', {
+            parkingFeeMsg: 1
+          })
+          // 如果是其他错误的话,则继续往下执行
+          this.$router.push({
+            path: 'parkingFeeMsg',
+            query
+          })
+        }
+      }
+    },
+    // 前往支付
+    unlicensedToPay() {
+      // 无牌车这边去支付的时候,属于场内缴费,需要调用场内缴费的接口 /parking/check-out
+      this.$store.commit('SET_ENDLESS_LOOP', '');
+      this.toHandleSearch(this.unlicensedCar);
+    },
+    // 获取会员绑定的车牌列表
+    async getVehiclesINTMP() {
+      /*杭州*/
+      if (!isHZ(this.mallId)) return
+      try {
+        if(this.$route.query.isLogin === 'loginDenied') {
+          throw new Error('设置默认参数')
+        }
+        let vehicles = []
+        // 获取用户车场在停车辆数据集
+        vehicles = await parkingRecord({
+          userId: this.kipUserId,
+          lbsId: this.mallId
+        })
+        // 获取用户的所有车牌
+        // const userVehicles = await getVehicles(this.kipUserId)
+        if (!vehicles.length) {
+          throw new Error('设置默认参数')
+          // vehicles = userVehicles.content
+        }
+        if (vehicles.length) {
+          // 判断是否存在无牌车
+          if(vehicles[0].vehicleNo.indexOf('临') > -1) {
+            this.isUnlicensed(vehicles)
+            throw new Error('设置默认参数')
+          }
+          const vehicleNo = vehicles[0].vehicleNo
+          // 设置车牌类型
+          this.setVehicleNoType(vehicleNo, vehicles)
+          // 赋值
+          this.numArr = vehicles[0].vehicleNo.split('');
+          this.vehicleNumber = vehicles[0].vehicleNo;
+        } else {
+          throw new Error('设置默认参数')
+        }
+      } catch (e) {
+        // 设置默认参数
+        this.numArr = '浙,A,,,,,'.split(',')
+      }
+    },
+    setVehicleNoType(vehicleNo, vehicles) {
+      // const item = vehicles.filter(e => e.vehicleNo === vehicleNo)
+      const item = vehicles
+      if(item.length) {
+        // let label = LICENSE_PLATE_TYPE_ARR.filter(e => e.value == item[0].licensePlateType)
+        // const index = ['燃油车牌', '新能源', '特殊车牌'].indexOf(label[0].name)
+        const index = item[0].vehicleNo.length === 8 ? 1 : 0
+        this.$refs['k-tab'].changeTab(index)
+        return true
+      }
+      return false
+    },
+    isUnlicensed(vehicles) {
+      // debugger
+      // const unlicensed = vehicles.filter(elm => elm.vehicleNo.indexOf('临') > -1)
+      if (vehicles.length && vehicles[0].vehicleNo.indexOf('临') > -1) {
+        this.tabbarActiveEvent('paymentForUnregisteredVehicle');
+        // this.tabbarActive = 'paymentForUnregisteredVehicle'
+      }
+    },
+    setLicensePlateList(arr) {
+      var array = []
+      arr.forEach(element => {
+        array.push(element.vehicleNo)
+      });
+      return array
+    },
+    async getPortalsByLbs() {
+      try {
+        const res = await getPortalsByLbs(this.groupId, this.mallId);
+        if(res.length) {
+          this.portalsByLbsList = res[0].displayFunctionList.filter(elm => elm.enabled).map(elm => elm.code)
+          this.portalsByLbsInfo = res[0]
+        }
+      } catch (e) {
+        console.log('getPortalsByLbs', e)
+      }
+    },
+    async menuToPage(type) {
+      let query = {}
+      switch (type){
+        case 'PAYMENT_RECORDS': // 缴费记录
+          query = {
+            ...this.$route.query,
+          }
+          query.fromPage = ''
+          query.format = ''
+          query.loginCount = ''
+          this.$store.commit('SET_REGRESH_PAGE_KEY')
+          this.$router.push({path: 'parkingFeeList', query});
+          break
+        case 'COUPON_EXCHANGE': // 停车券兑换
+          this.$store.dispatch('clearUnlicensed');
+          uni.setStorageSync('loadData', '');
+          wx.miniProgram.navigateTo({
+            "url": "/pages/pointsMall/pointsMall?exchangeTypes=2" // 去 login 页面 1 去登录
+          })
+          break
+        case 'PARKING_INVOICE': // 停车开票
+          const isJump = await this.jumpToPreJudgmentOfParkingInvoice();
+          if (isJump) return
+          uni.hideLoading()
+          uni.removeStorageSync('invoiceindex');
+          this.$store.dispatch('clearUnlicensed');
+          this.$store.commit('SET_REGRESH_PAGE_KEY')
+          query = {
+            ...this.$route.query,
+          }
+          query.fromPage = ''
+          query.format = ''
+          query.loginCount = ''
+          uni.setStorageSync('loadData', '');
+         
+          this.$router.push({path: 'parkingReceipt', query});
+          break
+        case 'VEHICLE_MANAGE': // 车辆管理
+          this.$store.dispatch('clearUnlicensed');
+          this.$store.commit('SET_REGRESH_PAGE_KEY')
+          uni.setStorageSync('loadData', '');
+          query = {
+            ...this.$route.query,
+          }
+          query.fromPage = ''
+          query.format = ''
+          query.loginCount = ''
+          uni.removeStorageSync('passLogin');
+          this.$router.push({path: 'vehicleManagement', query});
+          break
+        case 'PARKING_BENEFITS': // 停车权益
+          console.log('停车权益', this.portalsByLbsInfo)
+          this.$router.push({path: 'parkingRights', query: this.portalsByLbsInfo});
+          break
+          case 'FIND_CAR': // 反向寻车
+          console.log('反向寻车', this.portalsByLbsInfo)
+          this.$router.push({path: 'parkingFindCarFirst', query: this.portalsByLbsInfo});
+          break
+      }
+    }
+  },
+};

+ 146 - 1
src/pages/parkingFeeV2/parkingFee.vue

@@ -33,7 +33,7 @@
             blue_top_menu: custTypeId === 1,
             green_top_menu: custTypeId === 2,
           }"
-            v-if="custTypeId >= 0 && portalsByLbsList.length && source !== 'KIP'"
+            v-if="custTypeId >= 0 && (portalsByLbsList.length < 5 || portalsByLbsList.length === 5) && source !== 'KIP'"
           >
             <div class="menu_item" @click="menuToPage('PAYMENT_RECORDS')" v-if="portalsByLbsList.indexOf('PAYMENT_RECORDS') > -1">
               <img :src="`${require(`@/pages/parkingFee/static/images/icon-order.png`)}`" />
@@ -55,8 +55,60 @@
               <img :src="`${require(`@/pages/parkingFee/static/images/parkingRights.svg`)}`" />
               <span>停车权益</span>
             </div>
+             <!-- v-if="portalsByLbsList.indexOf('FIND_CAR') > -1" -->
+            <div class="menu_item" @click="menuToPage('FIND_CAR')">
+              <img :src="`${require(`@/pages/parkingFee/static/images/parkingRights.svg`)}`"/>
+              <span>反向寻车</span>
+            </div>
+          </div>
+
+          <!-- 菜单2 -->
+          <div v-else-if="custTypeId >= 0 && portalsByLbsList.length > 5 && source !== 'KIP'">
+            <div
+            :class="{
+            top_menu2: true,
+            blue_top_menu: custTypeId === 1,
+            green_top_menu: custTypeId === 2,
+          }"
+            
+          >
+            <div class="menu_item" @click="menuToPage('PAYMENT_RECORDS')" v-if="portalsByLbsList.indexOf('PAYMENT_RECORDS') > -1">
+              <img :src="`${require(`@/pages/parkingFee/static/images/icon-order.png`)}`" />
+              <span>缴费记录</span>
+            </div>
+            <div class="menu_item" @click="menuToPage('COUPON_EXCHANGE')" v-if="portalsByLbsList.indexOf('COUPON_EXCHANGE') > -1">
+              <img :src="`${require(`@/pages/parkingFee/static/images/icon-coupon.png`)}`" />
+              <span>停车券兑换</span>
+            </div>
+            <div class="menu_item" @click="menuToPage('PARKING_INVOICE')" v-if="portalsByLbsList.indexOf('PARKING_INVOICE') > -1">
+              <img :src="`${require(`@/pages/parkingFee/static/images/icon-ticket.png`)}`" />
+              <span>停车开票</span>
+            </div>
+          </div>
+          <!-- 菜单3 -->
+          <div
+            :class="{
+            top_menu: true,
+            blue_top_menu: custTypeId === 1,
+            green_top_menu: custTypeId === 2,
+          }"
+          >
+            <div class="menu_item" @click="menuToPage('FIND_CAR')">
+              <img :src="`${require(`@/pages/parkingFee/static/images/parkingRights.svg`)}`" v-if="portalsByLbsList.indexOf('FIND_CAR') > -1"/>
+              <span>反向寻车</span>
+            </div>
+            <div class="menu_item" @click="menuToPage('VEHICLE_MANAGE')">
+              <img :src="`${require(`@/pages/parkingFee/static/images/icon-car.png`)}`" v-if="portalsByLbsList.indexOf('VEHICLE_MANAGE') > -1" />
+              <span>车辆管理</span>
+            </div>
+            <div class="menu_item" @click="menuToPage('PARKING_BENEFITS')" v-if="portalsByLbsList.indexOf('PARKING_BENEFITS') > -1">
+              <img :src="`${require(`@/pages/parkingFee/static/images/parkingRights.svg`)}`" />
+              <span>停车权益</span>
+            </div>
+          </div>
           </div>
           
+          
           <!-- 中控 -->
           <div class="parkingFee-bottom">
             <div style="height: 40px; background-color: #FBFCFF;" v-if="source === 'KIP'"></div>
@@ -210,6 +262,70 @@ export default {
     display: flex;
     flex-direction: column;
 
+    .top_menu2 {
+      background: #FBFCFF;
+      box-sizing: border-box;
+      display: flex;
+      justify-content: space-between;
+      padding-top: 34px;
+
+      .menu_item {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_2 {
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_3 {
+        display: flex;
+        flex-direction: column;
+      }
+    }
     .top_menu {
       background: #FBFCFF;
       box-sizing: border-box;
@@ -246,6 +362,35 @@ export default {
           color: #333333;
         }
       }
+      .menu_item_2 {
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_3 {
+        display: flex;
+        flex-direction: column;
+      }
     }
 
     .parkingFee-bottom {

+ 201 - 0
src/pages/parkingFeeV2/parkingFindCar.vue

@@ -0,0 +1,201 @@
+<template>
+  <div :class="['scroll-Y', theme]">
+    <!--    <wx-points-commit ref='wxPointsCommit'></wx-points-commit>-->
+
+    <img :src="`${dataObject.carImage}`" style="width:100%;height:544px;" />
+    <div class="positionFixed">
+        <span class="carNum">{{dataObject.vehicleNo}}</span>
+        <div class="borderOnePx"></div>
+        <div class="textFloor">
+            <label>所在楼层:</label><span>{{dataObject.floorName}}</span>
+        </div>
+        <div class="textFloor">
+            <label>车位地点:</label><span>{{dataObject.area}}</span>
+        </div>
+        <div class="textFloor">
+            <label>车位地址:</label><span>{{dataObject.spaceNo}}</span>
+        </div>
+    </div>
+    <div class="positionFixedBottom">
+        <div  class="buttonBg" disabledColor="#D1D2D9"  >
+            <img  :src="`${require(`@/pages/parkingFee/static/images/lanya.png`)}`" class="imgButtonBg"  style="inline-block;" alt="">
+            <span>蓝牙找车</span>
+            
+        </div>
+    </div>
+    <!--    <div :class="{'page_button': true, 'blue_page_button': custTypeId === 1, 'green_page_button': custTypeId === 2}" @click="page_button">查看缴费记录</div>-->
+    <!--    <div :class="{'page_button1': true, 'blue_page_button1': custTypeId === 1, 'green_page_button1': custTypeId === 2}" @click="page_button1">返回首页</div>-->
+  </div>
+</template>
+
+<script>
+import parkingFindCar from './mixins/parkingFindCar'
+import baseMixins from './mixins/base'
+export default {
+  mixins:[baseMixins, parkingFindCar]
+}
+</script>
+
+<style lang="less" scoped>
+.scroll-Y {
+  width: 100%;
+  display: flex;
+  flex-direction: column;
+  height: 100vh;
+  background: #F4F7FF;
+  text-align: center;
+  img {
+    width: 110px;
+    height: 110px;
+    //margin-top: 250px;
+    margin: 126px auto 52px;
+  }
+  .carNum {
+      color:#333;
+      font-size: 40px;
+  }
+  .buttonBg {
+      width: calc(100% - 60px);
+      height: 90px;
+      color:#fff;
+      margin-top: 46px;
+      margin-bottom: 43px;
+      background-color: var(--k-color-primary-01, #064c8a);
+      border-radius: 90px;
+      line-height: 90px;
+      margin-left: 30px;
+      font-size: 34px;
+      .imgButtonBg {
+        width:32px;
+        height:32px; 
+        vertical-align: middle;
+        margin: 0;
+        margin-right: 28px;
+        line-height:90px;
+
+      }
+  }
+  
+  .positionFixed{
+      position: relative;
+      top: -93px;
+      width: calc(100% - 140px);
+      height: 370px;
+      background: #FBFCFF;
+      margin-left:30px;
+      border-radius: 5px;
+      padding: 26px 40px;
+      text-align: left;
+      .borderOnePx {
+          height:0;
+          border-top:1px solid #E1E2E8;
+          margin-bottom: 25px;
+          margin-top:11px;
+          
+      }
+  }
+  .textFloor {
+      width:100%;
+      padding:20px 0;
+      label {
+          color: #999;
+      }
+      span {
+          color: #333;
+          float: right;
+          text-align: right;
+      }
+  }
+  .positionFixedBottom {
+      position:fixed;
+      bottom:0;
+      width:100%;
+      height:218px;
+      background: yellow;
+  }
+  .pay-success-title {
+    height: 48px;
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 34px;
+    line-height: 48px;
+    margin-bottom: 40px;
+    color: #333333;
+  }
+  .pay-success-info {
+    /* 辽A 11111停车费支付成功 */
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 34px;
+    line-height: 48px;
+    /* identical to box height */
+    text-align: center;
+    color: #999999;
+    margin-bottom: 10px;
+  }
+  .pay-success-dec {
+    /* 请在20分钟内离场 */
+
+
+    position: absolute;
+    width: 279px;
+    height: 48px;
+    left: 236px;
+    top: 594px;
+
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 34px;
+    line-height: 48px;
+    /* identical to box height */
+
+    text-align: center;
+
+    color: #999999;
+
+  }
+}
+.page_button {
+  width: 86%;
+  height: 80px;
+  line-height: 80px;
+  border-radius: 40px;
+  margin-top: 40px;
+  margin-left: 7%;
+  font-size: 30px;
+  color: #fff;
+  background-image: linear-gradient(to right, #7e4fa1 , #433c7f);
+}
+.blue_page_button {
+  .color-background-color('blue')
+}
+.green_page_button {
+  .color-background-color('green')
+}
+.page_button1 {
+  width: 86%;
+  height: 80px;
+  line-height: 80px;
+  border-radius: 40px;
+  margin-top: 40px;
+  margin-left: 7%;
+  font-size: 30px;
+  color: #7e4fa1;
+  border:1px solid  #7e4fa1;
+}
+.style-color(@value) {
+  @color: 'color-@{value}';
+  color: @@color;
+  border-color: @@color;
+}
+.blue_page_button1 {
+  .style-color('blue')
+}
+.green_page_button1 {
+  .style-color('green')
+}
+</style>
+

+ 1042 - 0
src/pages/parkingFeeV2/parkingFindCarFirst.vue

@@ -0,0 +1,1042 @@
+<template>
+  <div :class="[theme, 'paekingFeeClass']">
+    <scroll-view :class="['scroll-Y' ,'color-scroll-Y']">
+      <div class="wrap">
+        <div class="parkingFee">
+          <!-- <wx-points-commit ref='wxPointsCommit'></wx-points-commit> -->
+          <!-- KIP菜单 -->
+          <!-- 中控 -->
+          <div class="parkingFee-bottom">
+            <div style="height: 40px; background-color: #FBFCFF;" v-if="source === 'KIP'"></div>
+            <div v-if="supportUnlicensed && source !== 'KIP'" :class="['parkingFee-tab', tabbarActive === 'paymentForUnregisteredVehicle' && 'unlicensed-box-bottom']">
+              <div :class="['bar', tabbarActive === 'manualPayment' && 'active']">车牌寻车</div>
+              <div :class="['bar', tabbarActive === 'paymentForUnregisteredVehicle' && 'active']">车位寻车</div>
+            </div>
+            
+            <!-- 手动缴费: v-show="tabbarActive === 'manualPayment'" -->
+            <div class="manual-box" v-else>
+              <div class="parkingFee-search">
+                <div class="search_tip_1" :style="{paddingTop: supportUnlicensed? '0': '32px'}">
+                  <div class="title">车辆类型</div>
+<!--                  <k-tab ref="k-tab" type="fill" @change="toggleType" :tabs="['燃油车牌', '新能源', '特殊车牌']" />-->
+                  <k-tab ref="k-tab" type="fill" @change="toggleType" :tabs="['燃油车牌', '新能源', '特殊车牌']" />
+                </div>
+                <!-- <div class="search_tip">
+                  <div class="title">车辆类型</div>
+                  <div class="search_tip_pt">
+                    <div :class="carType == 0 ? 'search_tip_pt_index' : ''" @click="toggleType(0)">燃油车牌</div>
+                    <div :class="carType == 1 ? 'search_tip_pt_index' : ''" @click="toggleType(1)">新能源</div>
+                    <div :class="carType == 2 ? 'search_tip_pt_index' : ''" @click="toggleType(2)">特殊车牌</div>
+                  </div>
+                </div> -->
+                <div class="input-box">
+                  <!-- <div v-for="i in carType === 1 ? 8 : 7" class="li" :key="`numArr${i}`" @click="clickShowKeyboard(i)" :class="[active === i ? 'active' : '']">
+                    {{ numArr[i] }}
+                  </div> -->
+                  <div class="van-hairline--surround li" @click="clickShowKeyboard(0)" :class="[active === 0 ? 'active' : '']">
+                    {{ numArr[0] }}
+                  </div>
+                  <div class="van-hairline--surround li" @click="clickShowKeyboard(1)" :class="[active === 1 ? 'active' : '']">
+                    {{ numArr[1] }}
+                  </div>
+                  <div class="input_box_dian">·</div>
+                  <div class="van-hairline--surround li" @click="clickShowKeyboard(2)" :class="[active === 2 ? 'active' : '']">
+                    {{ numArr[2] }}
+                  </div>
+                  <div class="van-hairline--surround li" @click="clickShowKeyboard(3)" :class="[active === 3 ? 'active' : '']">
+                    {{ numArr[3] }}
+                  </div>
+                  <div class="van-hairline--surround li" @click="clickShowKeyboard(4)" :class="[active === 4 ? 'active' : '']">
+                    {{ numArr[4] }}
+                  </div>
+                  <div class="van-hairline--surround li" @click="clickShowKeyboard(5)" :class="[active === 5 ? 'active' : '']">
+                    {{ numArr[5] }}
+                  </div>
+                  <div :class="['van-hairline--surround li', active === 6 ? 'active' : '']" @click="clickShowKeyboard(6)">
+                    {{ numArr[6] }}
+                  </div>
+                  <div class="li dashed green-active" @click="clickShowKeyboard(7)" :class="[active === 7 ? 'active' : '']" >
+                    <span v-if="carType === 1">{{ numArr[7] }}</span>
+                   <img v-else :src="require('@/pages/parkingFee/static/images/unlicensed/leaf.svg')">
+                  </div>
+                </div>
+                <k-button title="查询车辆" style="margin-top: 46px;margin-bottom: 43px;" :disabled="disabledBtn" disabledColor="#D1D2D9" @click="preHandleSearch" />
+                <!-- <div type="primary" class="search-btn" :class="disabledBtn ? 'disabled-btn' : ''" :disabled="disabledBtn" @click="preHandleSearch">查询缴费</div> -->
+              </div>
+            </div>
+          </div>
+        </div>
+        
+      </div>
+    </scroll-view>
+    <plate-number ref="plateKeyboard" :noDisBtn="[32, 33, 34,35, 36, 37]" :carType="carType" :active="active" :ind="ind" :numArr="numArr" @carnoArr="updateCarno"></plate-number>
+    <checkCarPopup ref="checkCarPopup"></checkCarPopup>
+  </div>
+</template>
+
+<script>
+import parkingFindCarFirst from './mixins/parkingFindCarFirst';
+import baseMixins from './mixins/base'
+export default {
+  mixins: [baseMixins, parkingFindCarFirst],
+  name: 'parkingFeeCom',
+};
+</script>
+
+<style lang="less" scoped>
+.scroll-Y {
+  width: 100%;
+  height: 100vh;
+}
+.paekingFeeClass {
+  position:relative;
+}
+.color-scroll-Y {
+  background: #f4f7ff;
+  // background: red;
+}
+
+.wrap {
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+
+  .parkingFee {
+    display: flex;
+    flex-direction: column;
+
+    .top_menu2 {
+      background: #FBFCFF;
+      box-sizing: border-box;
+      display: flex;
+      justify-content: space-between;
+      padding-top: 34px;
+
+      .menu_item {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_2 {
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_3 {
+        display: flex;
+        flex-direction: column;
+      }
+    }
+    .top_menu {
+      background: #FBFCFF;
+      box-sizing: border-box;
+      display: flex;
+      justify-content: space-between;
+      padding-top: 34px;
+      margin-bottom: 20px;
+      padding-bottom: 30px;
+
+      .menu_item {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_2 {
+        align-items: center;
+        width: 33.3%;
+
+        img {
+          width: 100px;
+          height: 100px;
+          margin-bottom: 3px;
+        }
+
+        span {
+          // font-size: 30px;
+          margin-top: 10px;
+          // color: #333333;
+          // font-size: 28px;
+
+
+          font-family: 'Inter';
+          font-style: normal;
+          font-weight: 400;
+          font-size: 28px;
+          line-height: 34px;
+          color: #333333;
+        }
+      }
+      .menu_item_3 {
+        display: flex;
+        flex-direction: column;
+      }
+    }
+
+    .parkingFee-bottom {
+      width: 100%;
+      display: flex;
+      flex-direction: column;
+      box-sizing: border-box;
+      // tabber 切换
+      .parkingFee-tab {
+        padding-top: 46px;
+        padding-left: 27px;
+        padding-bottom: 50px;
+        background-color: #FBFCFF;
+        display: flex;
+        align-items: flex-end;
+        &.unlicensed-box-bottom {
+          padding-bottom: 120px;
+        }
+
+        .bar {
+          color: #666666;
+          // font-size: 32px;
+          // font-weight: 500;
+
+
+          font-family: 'PingFang SC';
+          font-style: normal;
+          font-weight: 500;
+          font-size: 32px;
+          line-height: 30px;
+          /* identical to box height, or 94% */
+
+
+          color: #666666;
+
+
+          &:nth-child(1) {
+            margin-right: 24px;
+          }
+
+          &.active {
+            font-size: 38px;
+            color: #333333;
+
+            font-family: 'PingFang SC';
+            font-style: normal;
+            font-weight: 500;
+            font-size: 38px;
+            line-height: 38px;
+            color: #333333;
+          }
+        }
+      }
+
+      // 车牌号查询
+      .parkingFee-search {
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        background: #FBFCFF;
+        box-sizing: border-box;
+
+        .search_tip {
+          width: 100%;
+          margin-left: -1px;
+          display: flex;
+          justify-content: flex-start;
+          align-items: center;
+          padding-right: 30px;
+          margin-bottom: 40px;
+
+          .title {
+            font-size: 30px;
+            color: #333333;
+            padding-left: 27px;
+            margin-right: 33px;
+          }
+
+          .search_tip_pt {
+            font-size: 28px;
+            margin-right: 30px;
+            flex: 1;
+            display: flex;
+            justify-content: space-around;
+            align-items: center;
+            border: 1px solid #999999;
+            height: 60px;
+            color: #999999;
+            overflow: hidden;
+            border-radius: 90px;
+
+            div {
+              height: 100%;
+              width: 100%;
+              border-radius: 90px;
+              line-height: 62px;
+              text-align: center;
+            }
+
+            .search_tip_pt_index {
+              color: #fff;
+              //background-image: linear-gradient(to right, #7e4fa1, #433c7f);
+              background-color: #644a79;
+            }
+          }
+        }
+        .search_tip_1 {
+          padding: 0 27px 40px;
+          display: flex;
+          align-items: center;
+          .title {
+            // font-size: 30px;
+            margin-right: 33px;
+            font-family: 'PingFang SC';
+            font-style: normal;
+            font-weight: 500;
+            font-size: 30px;
+            line-height: 36px;
+            color: #333333;
+          }
+          .k-tab-group-fill {
+            flex: 1;
+          }
+        }
+        // 车牌号 & 虚拟键盘
+        .input-box {
+          width: 100%;
+          flex: 1;
+          display: flex;
+          padding-bottom: 46px;
+          padding: 0 17px;
+          justify-content: center;
+          box-sizing: border-box;
+
+          .li {
+            width: 100%;
+            //border: 1px solid #d9dbe0;
+            box-sizing: border-box;
+            height: 90px;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            color: #333333;
+            background-color: #f4f7ff;
+            border-radius: 4px;
+            font-size: 40px;
+            margin: 0 3px;
+            &.dashed {
+              background-color: #fafbff;
+              border: 1px dashed #fafbff;
+            }
+            &.van-hairline--surround {
+              &::after{
+                border-radius: 7px;
+                border-color: #D9DBE0;
+              }
+            }
+            &.active {
+              &::after{
+                border-color: var(--k-color-primary-01, #064c8a);
+              }
+            }
+            &.green-active {
+              background: #F8FFED;
+              border-color: #7DB124;
+              color: #7DB124;
+              img{
+
+                width: 41px;
+                height: 39px;
+              }
+            }
+          }
+
+          .input_box_dian {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            font-size: 120px;
+            height: 70px;
+            color: var(--k-color-primary);
+          }
+        }
+
+        .search-btn {
+          color: #fff;
+          margin: 0 auto;
+          height: 90px;
+          width: calc(100% - 60px);
+          line-height: 90px;
+          border-radius: 80px;
+          font-size: 36px;
+          text-align: center;
+          //background-image: linear-gradient(to right, #7e4fa1, #433c7f);
+          // background-color: #644a79;
+          background-color: var(--k-color-primary);
+
+          margin-bottom: 43px;
+        }
+
+        .disabled-btn {
+          background-color: #c1c1c1 !important;
+          //background-image: none !important;
+        }
+      }
+
+      /* 历史车牌 */
+      .vehicleMgt-list {
+        // margin-top: 43px;
+        // padding-top: 43px;
+        display: flex;
+        flex-direction: column;
+        // margin-bottom: 34px;
+        padding-bottom: 34px;
+        //margin-top: 20px;
+        //padding-top: 20px;
+        background-color: #FBFCFF;
+
+        .vehicleMgt-title {
+          //width: 91%;
+          padding-left: 27px;
+          display: flex;
+          text-align: left;
+          font-weight: 500;
+          justify-content: space-between;
+          //margin-left: 4%;
+          // padding-left: 30px;
+          //padding-top: 30px;
+          height: 40px;
+          line-height: 40px;
+          box-sizing: border-box;
+          margin-bottom: 24px;
+          // border-top: 1px solid #f2f2f2;
+          font-size: 30px;
+
+          .vehicleMgt-title-img {
+            width: 30px;
+            height: 30px;
+          }
+        }
+
+        .vehicleMgt-content {
+          width: 94%;
+          margin-left: 29px;
+          display: flex;
+          flex-wrap: wrap;
+          // justify-content: space-around;
+          border-radius: 15px;
+
+          .item {
+            width: 30%;
+            height: 60px;
+            box-sizing: content-box;
+            //padding: 0 2px;
+            // margin-top: 30px;
+            // margin-left: 16px;
+            margin-right: 15px;
+            margin-bottom: 16px;
+            text-align: center;
+            box-sizing: border-box;
+            border: 1px solid #d9dbe0;
+            background-color: #f4f7ff;
+            line-height: 60px;
+            font-size: 28px;
+            border-radius: 30px;
+            color: #666666;
+          }
+
+          .vehicleMgt-content_cls {
+            color: var(--k-color-primary-active);
+            border: 2px solid var(--k-color-primary-active);
+          }
+        }
+      }
+    }
+    /* 无牌车UI */
+    .unlicensed-box {
+      background-color: #FBFCFF;
+
+      .no-car-unlicensed-box {
+        box-sizing: border-box;
+        img {
+          width: 391px;
+          display: block;
+          margin: 0 auto;
+        }
+        .no-car-unlicensed-info {
+          color: #919baa;
+          font-size: 36px;
+          line-height: 36px;
+          text-align: center;
+          margin-bottom: 70px;
+          font-family: 'PingFang SC';
+          font-style: normal;
+          font-weight: 400;
+        }
+        .search-btn {
+          font-size: 32px;
+          height: 90px;
+          color: #ffffff;
+          line-height: 90px;
+          background: var(--k-color-primary);
+          text-align: center;
+          margin: 0 30px;
+          border-radius: 45px;
+          margin-bottom: 58px;
+          .unlicensed-scan {
+            display: inline-block;
+            width: 60px;
+            height: 60px;
+            position: relative;
+            top: 17px;
+            margin-right: 15px;
+          }
+          &.no-car-unlicensed-btn {
+            .text{
+              position: relative;
+              top: -2px;
+            }
+          }
+        }
+      }
+
+      .in-car {
+        box-sizing: border-box;
+        .car-number-box {
+          height: 230px;
+          //padding-top: 53px;
+          padding-left: 18px;
+          //padding-bottom: 34px;
+          background: #fbfcff;
+          border: 1px solid #d9dbe0;
+          border-radius: 4px;
+          margin: 0 24px;
+          display: flex;
+          margin-bottom: 40px;
+          display: flex;
+          align-items: center;
+
+          img {
+            width: 288px;
+            height: 142px;
+          }
+          .car-number {
+            .number {
+              font-size: 50px;
+              line-height: 56px;
+              font-weight: 600;
+              color: #333333;
+              margin-bottom: 23px;
+            }
+            .tips {
+              color: #999999;
+            }
+          }
+        }
+        .search-btn {
+          background: var(--k-color-primary);
+          border-radius: 45px;
+          color: #ffffff;
+          line-height: 90px;
+          height: 90px;
+          font-size: 36px;
+          text-align: center;
+          margin: 0 30px 40px;
+        }
+      }
+    }
+
+    /* 缴费说明 */
+    .parkingFee-top {
+      display: flex;
+      flex-direction: column;
+      background-size: 100% 30%;
+      padding-left: 27px;
+      padding-right: 27px;
+      background-color: #FBFCFF;
+      position: relative;
+      .top_content {
+        box-sizing: border-box;
+
+        span {
+          font-size: 24px;
+          color: #898989;
+          text-align: left;
+        }
+
+        .title_box {
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          margin-bottom: 20px;
+
+          .btn {
+            box-sizing: border-box;
+            border-radius: 20px;
+            font-size: 30px;
+            font-weight: 500;
+            color: #333;
+            text-align: left;
+          }
+        }
+        .sub_title_box {
+          margin-bottom: 5px;
+          .btn{
+            font-family: 'PingFang SC';
+            font-style: normal;
+            font-weight: 400;
+            font-size: 26px;
+            line-height: 40px;
+            
+            color: #333333;  
+          }
+        }
+
+        .info {
+          padding-left: 2px;
+          font-size: 27px;
+          width: 95%;
+          color: #666;
+          line-height: 45px;
+          p {
+            margin: 0;
+          }
+        }
+
+        .info_show {
+          word-break: break-all;
+          text-overflow: ellipsis;
+          overflow: hidden;
+          display: -webkit-box;
+          -webkit-line-clamp: 2;
+          -webkit-box-orient: vertical;
+        }
+      }
+
+      .top_down {
+        width: 100%;
+        text-align: center;
+        color: #999999;
+        margin-top: 25px;
+        margin-bottom: 20px;
+      }
+    }
+  }
+}
+
+// 缴费说明
+.payInstruct_wrap {
+  width: 300px;
+  margin: 0 auto;
+  display: flex;
+  flex-direction: column;
+  background: #fff;
+  border-radius: 20px;
+
+  .scroll {
+    height: 600px;
+    display: flex;
+    flex-direction: column;
+    padding: 20px;
+    box-sizing: border-box;
+
+    .payInstruct_title {
+      font-size: 30px;
+      text-align: center;
+      padding: 20px 0;
+      box-sizing: border-box;
+      border-bottom: 1px solid #f2f2f2;
+    }
+
+    .payInstruct_con {
+      display: flex;
+      width: 100%;
+      padding: 20px 10px;
+      box-sizing: border-box;
+
+      span {
+        font-size: 28px;
+        color: #999;
+      }
+    }
+  }
+}
+
+.class-plate-box {
+  width: 100%;
+  padding: 24px 0;
+  box-sizing: border-box;
+  position: relative;
+}
+
+.delBtn {
+  color: #fff;
+  height: 38px;
+  line-height: 38px;
+  font-size: 20px;
+  width: 124px;
+  border-radius: 7px;
+  text-align: center;
+  padding: 4px;
+  background-color: #c69c6d;
+}
+
+.payThe {
+  background-color: #fff;
+  width: 100%;
+
+  .pay_index {
+    text-align: center;
+    width: 200px;
+    padding-top: 10px;
+    margin: 0px auto;
+  }
+
+  .pay_title {
+    width: 500px;
+    display: flex;
+    align-items: center;
+    margin-top: 30px;
+  }
+
+  .pay_title1 {
+    width: 100%;
+    margin-top: 20px;
+    display: flex;
+    align-items: center;
+  }
+
+  .pay_title_yhj {
+    margin-left: 60px;
+    font-size: 20px;
+  }
+
+  .pay_title_yhj1 {
+    margin-left: 35px;
+    font-size: 20px;
+  }
+
+  .payjf {
+    font-size: 20px;
+    margin-left: 30px;
+  }
+
+  .paySelect {
+    color: rgba(16, 16, 16, 100);
+    font-size: 20px;
+    font-family: Arial;
+    border: 1px solid rgba(187, 187, 187, 100);
+    border-radius: 10px;
+    margin-left: 80px;
+    width: 260px;
+    height: 80px;
+  }
+
+  .paySelect1 {
+    color: rgba(16, 16, 16, 100);
+    font-size: 20px;
+    font-family: Arial;
+    border: 1px solid rgba(187, 187, 187, 100);
+    border-radius: 10px;
+    margin-left: 80px;
+    width: 260px;
+    height: 80px;
+    display: flex;
+    align-items: center;
+  }
+
+  .pay-se {
+    width: 120px;
+    height: 100%;
+    background-color: #d8dce6;
+
+    .pay-se-l {
+      height: 48%;
+      text-align: center;
+      font-size: 50px;
+      line-height: 68px;
+    }
+
+    .pay-se-l1 {
+      border-left: 1px solid rgba(187, 187, 187, 100);
+      border-bottom: 1px solid rgba(187, 187, 187, 100);
+    }
+
+    .pay-se-l2 {
+      border-left: 1px solid rgba(187, 187, 187, 100);
+    }
+  }
+
+  .payjfzk {
+    font-size: 20px;
+    color: #8b8c8b;
+    margin-top: 10px;
+    margin-left: 210px;
+  }
+
+  .pay_time {
+    font-size: 28px;
+    margin-left: 180px;
+    padding-bottom: 40px;
+  }
+
+  .pay_time1 {
+    margin-top: 26px;
+  }
+}
+
+.pay_jiaof {
+  width: 97%;
+  height: 60px;
+  line-height: 60px;
+  margin-left: 10px;
+  background-color: #c69c6d;
+  text-align: center;
+  color: rgba(255, 255, 255, 100);
+  font-size: 28px;
+  font-family: Microsoft Yahei;
+  border-radius: 10px;
+  margin-top: 20px;
+}
+
+.sq_content {
+  width: 700px;
+  background-color: #fff;
+  position: fixed;
+  bottom: 25px;
+  left: 25px;
+  height: 50px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border-radius: 15px;
+  font-size: 16px;
+  color: #c69c6d;
+  padding: 0px 30px;
+  box-sizing: border-box;
+}
+
+.sq_content .btn {
+  width: 180px;
+  height: 30px;
+  line-height: 30px;
+  text-align: center;
+  color: #fff;
+  background-color: #c69c6d;
+  margin-top: -3px;
+  border-radius: 25px;
+}
+
+// 停车券弹窗
+.ticketPopup {
+  display: flex;
+  flex-direction: column;
+  background: #fff;
+  border-radius: 20px 20px 0 0;
+  z-index: 999;
+
+  .popup-title {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 30px 42px;
+    box-sizing: border-box;
+    border-bottom: 1px solid #f2f2f2;
+    position: relative;
+
+    span {
+      color: #999;
+      font-size: 28px;
+    }
+
+    .useRule-text {
+      position: absolute;
+      right: 42px;
+      color: rgb(58, 130, 248);
+    }
+  }
+
+  .popup_scroll {
+    height: 70vh;
+    background: #f2f2f2;
+  }
+
+  .popup_content {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    padding: 10px 20px;
+    box-sizing: border-box;
+
+    .item {
+      display: flex;
+      background: #fff;
+      margin-bottom: 20px;
+      border-radius: 10px;
+
+      .item-left {
+        flex: 1;
+        display: flex;
+        align-items: center;
+        padding: 20px 0;
+        box-sizing: border-box;
+        position: relative;
+
+        .item-type {
+          position: absolute;
+          top: 0;
+          left: 0;
+          background: #fff5f1;
+          border-radius: 10px 0 10px 0;
+          width: 205px;
+          display: flex;
+          justify-content: center;
+
+          span {
+            color: #999;
+            font-size: 20px;
+            text-align: center;
+            line-height: 28px;
+          }
+        }
+
+        .item-value {
+          color: #c69c6d;
+          font-size: 40px;
+          padding: 10px 30px;
+          box-sizing: border-box;
+          width: 205px;
+          display: flex;
+          justify-content: center;
+
+          .b {
+            color: #c69c6d;
+            font-weight: 600;
+            font-size: 60px;
+          }
+        }
+
+        .color_disabled {
+          color: #999 !important;
+        }
+      }
+
+      .item-right {
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        border-radius: 0 8px 8px 0;
+        position: relative;
+
+        span {
+          color: #c69c6d;
+          font-size: 24px;
+          padding: 0 20px;
+          box-sizing: border-box;
+        }
+
+        .color_disabled {
+          color: #999;
+        }
+
+        // 对勾
+        .dot {
+          position: absolute;
+          top: 0;
+          right: 0;
+          width: 2.25rem;
+          height: 2.375rem;
+        }
+      }
+    }
+  }
+}
+
+// 弹窗按钮
+.popup_button {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 10px 20px;
+  box-sizing: border-box;
+
+  span {
+    height: 110px;
+    line-height: 110px;
+    text-align: center;
+  }
+
+  .cancel_btn {
+    background: #fff;
+    color: #ed1c24 !important;
+  }
+
+  .ok_btn {
+    background: #c69c6d;
+    color: #fff !important;
+    width: 120px;
+    height: 40px;
+    line-height: 40px;
+    border-radius: 40px;
+  }
+}
+</style>

+ 6 - 0
src/routes/index.js

@@ -154,6 +154,12 @@ const routes = [
     name: 'parkingRights',
     component: () => import('@/pages/parkingFee/parkingRights.vue'),
   },
+  // 反向寻车
+  {
+    path: '/parkingFindCar',
+    name: 'parkingFindCar',
+    component: () => import('@/pages/parkingFee/parkingFindCar.vue'),
+  },
   {
     path: '/dome',
     name: 'dome',

+ 13 - 0
src/routes/indexV2.js

@@ -87,6 +87,19 @@ export const routes = [
         name: 'parkingRights',
         component: () => import('@/pages/parkingFeeV2/parkingRights.vue'),
     },
+     // 反向寻车首页
+     {
+        path: '/parkingFindCarFirst',
+        name: 'parkingFindCarFirst',
+        component: () => import('@/pages/parkingFeeV2/parkingFindCarFirst.vue'),
+      },
+    // 反向寻车
+    {
+      path: '/parkingFindCar',
+      name: 'parkingFindCar',
+      component: () => import('@/pages/parkingFeeV2/parkingFindCar.vue'),
+    },
+    
       {
         path: '/about',
         name: 'about',