소스 검색

feat: 微服务接入改造50%(无牌车api'接入))

John-Hong 2 년 전
부모
커밋
95de7c1bb1

+ 18 - 1
src/App.vue

@@ -19,6 +19,7 @@
       <br />
       <br />
     </div>
+    <wx-points-commit ref="wxPointsCommit"></wx-points-commit>
   </div>
 </template>
 <script>
@@ -91,6 +92,8 @@ export default {
             options,
             callback: () => {
               this.$store.commit('SET_IS_INIT', true);
+              // 无感积分逻辑
+              this.wxEasyPointsCommitStatusInit();
             },
           });
         } catch (err) {
@@ -206,6 +209,7 @@ export default {
       window.requestms = createAxiosByinterceptors({
         // baseURL: `https://dev-kip-service-internal.kerryonvip.com/`,
         // baseURL: `http://tp.hht.test/`,
+        // baseURL: window.profileApi, // TODO: 微服务发布到DEV环境之后取消注释
         baseURL: `/msApi`,
       });
     },
@@ -269,7 +273,9 @@ export default {
               // window.location.reload();
               this.$store.dispatch('getUserDetail');
               this.$store.commit('SET_MEMBER', uni.getStorageSync('member'));
-              uni.getStorageSync();
+              // 无感积分逻辑
+              this.wxEasyPointsCommitStatusInit();
+              // uni.getStorageSync();
             });
           }
         } else {
@@ -287,6 +293,17 @@ export default {
         }
       });
     },
+    // 无感积分相关
+    async wxEasyPointsCommitStatusInit() {
+      this.$refs.wxPointsCommit.open();
+      // 判断用户是否登陆
+      if (uni.getStorageSync('openid') && uni.getStorageSync('member') && uni.getStorageSync('member') !== {}) {
+				const easyPointsCommitStatus = await getWxEasyPointsCommitStatus()
+				if (easyPointsCommitStatus) {
+					this.$refs.wxPointsCommit.open();
+				}
+			}
+    }
   },
 };
 </script>

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

@@ -76,3 +76,24 @@ export function unlicensedCarCheckIn(params) {
   return window.requestms.post(`/parking/unlicensed-car-check-in`, params, { loading: true });
 }
 
+// 1.19 无牌车出场
+/**
+ * 
+ * @param params.gateId string 车厂出口道闸编号
+ * @param params.vehicleNo string 临牌
+ * @returns {*}
+ */
+export function unlicensedCarCheckout(vehicleNo, unlicensed, gateId) {
+  return window.requestms.post(`/parking/unlicensed-car-checkout`, { vehicleNo, gateId }, { loading: true });
+}
+// 1.25 车场二维码信息查询(通过CodeID)
+/**
+ * 
+ * @param params.gateId string 车厂入口道闸编号
+ * @param params.vehicleNo string 临牌
+ * @returns {*}
+ */
+export function qrCodes(codeId) {
+  return window.requestms.get(`qr-codes/code-ids/${codeId}`, { loading: true });
+}
+

+ 3 - 2
src/api/request.js

@@ -134,7 +134,7 @@ function XUser(config) {
    vipCode: 'KERRY100213853',
    lbsId: '8aaa82ea804d07cd0180516ff03b0008',
    };*/
-  if (/orders-and-prepay|calculate-discount/.test(config.url)) {
+  if (/orders-and-prepay|calculate-discount|unlicensed-car-check-in/.test(config.url)) {
     params.buildingId = window.localStorage.getItem('buildingId');
   }
   console.log(140140140140, params);
@@ -217,7 +217,8 @@ export const createAxiosByinterceptors = (config) => {
       }
       // 错误信息提示
       const { code, langMessage } = error.response.data;
-      if (code === 'INTERNAL_SERVER_ERROR') {
+      const codeList = ['INTERNAL_SERVER_ERROR', 'VALIDATION_FAILED']; // 默认处理的错误code
+      if (codeList.indexOf(code) > -1) {
         uni.showToast({ title: langMessage, duration: 3000, icon: 'fail' });
       }
       // Message.error(error?.response?.data?.message || '服务端异常');

+ 194 - 312
src/components/wx-points-commit/wx-points-commit.vue

@@ -1,365 +1,247 @@
 <template>
-  <div class="authorize-hz" v-if="show">
-    <div class="mid">
-      <div class="authorize-box">
-        <div class="bold">{{ title }}</div>
-        <div class="other">
-          感谢您{{ lbsName }}的信任!请您仔细阅读并充分理解我们最新更新的
-          <sapn
-            v-if="!privacyReminder"
-            style="color: #627ecf"
-            @click="gotoProtocol('privacyPolicy')"
-            >《{{ brandInfo.privacyPolicyName }}》</sapn
-          >&nbsp;
-          <sapn
-            v-if="!protocolReminder"
-            style="color: #627ecf"
-            @click="gotoProtocol('protocol')"
-            >《{{ brandInfo.protocolName }}》</sapn
-          >。
-          新的协议政策将不影响您现有的会员权益,您点击“同意”按钮后,将视为同意本次协议更新。
-        </div>
-      </div>
-      <div class="authorize-footer">
-        <uni-button class="disagree_btn" @click="handleDisagree"
-          >不同意</uni-button
-        >
-        <uni-button class="agree_btn" @click="handleConfirm">同意</uni-button>
-      </div>
-    </div>
-  </div>
+  <view class="box" v-if="show" @touchmove.stop.prevent>
+    <view class="boxIn">
+      <view class="content">
+        <image class="commit-star" src="https://cnsh-kerry-crm-prod.oss-cn-shanghai.aliyuncs.com/images/wx-points/points-commit.png"> </image>
+        <image v-if="custTypeId === 0" class="commit-logo-default" src="https://cnsh-kerry-crm-prod.oss-cn-shanghai.aliyuncs.com/images/wx-points/kerry.png"> </image>
+        <image v-else class="commit-logo-ko" src="https://cnsh-kerry-crm-prod.oss-cn-shanghai.aliyuncs.com/images/wx-points/ko.png"> </image>
+        <view class="logo"> </view>
+        <view class="title"> 您有消费积分未领取 </view>
+        <view class="text"> 如您的微信支付积分未到账,请于消费当日申请领取 </view>
+        <view @click="toWxPointsAuth" class="commit-btn" :class="{ 'commit-btn--blue': custTypeId === 1, 'commit-btn--green': custTypeId === 2 }"> 去领取 </view>
+        <image @click="close" class="commit-cancel" src="https://cnsh-kerry-crm-prod.oss-cn-shanghai.aliyuncs.com/images/wx-points/close.svg"> </image>
+      </view>
+    </view>
+  </view>
 </template>
 
 <script>
-// const app = getApp();
-import {
-  kipGetBrandInfo,
-  kipLogout,
-  kipAgreementCheck,
-  kipAgreementSave,
-} from '@/utils/api-kip.js';
-
-import CacheTool from '@/utils/cache-tool.js';
-import { isKOMiniApp } from '@/utils/utils.js';
-import uni from '@/utils/uniHooks'
-import { mapState } from "vuex";
-const YES = '1';
-const NO = '0';
+import { mapState } from 'vuex';
+import { kipGetPointsConfig } from '@/utils/api-kip.js';
+const app = getApp();
 export default {
-  name: 'my-protocol-modal',
-  props: {
-    title: {
-      type: String,
-      default: '亲爱的会员',
-    },
+  props: {},
+  created() {
+    // this.handleGetPointsConfig()
   },
+  watch: {},
   data() {
     return {
+      pointsConfig: null,
       show: false,
-      // curMarket: null,
-      // brandInfo: null,
-      cacheKey: '',
-      privacyReminder: true,
-      protocolReminder: true,
+      clickToWxPointsAuth: false,
     };
   },
-  mounted() {},
   computed: {
-    lbsName() {
-      if (!this.curMarket) {
-        return '';
-      }
-      const lbsName = this.curMarket?.name || '';
-      return lbsName ? `对${lbsName}` : '';
-    },
+    // custTypeId: 0 默认版本,1 上海静安 2 上海浦东
     ...mapState({
-      curMarket: (state) => state.curMarket,
-      brandInfo: (state) => state.brandInfo,
-      groupId: (state) => state.groupId,
-      mallid: (state) => state.mallId,
+      // custTypeId: 0
+      custTypeId: (state) => state.custTypeId,
     }),
   },
   methods: {
-    gotoProtocol(type) {
-      const brandId = this.groupId || uni.getStorageSync('groupId');
-      const lbsId = this.mallid || uni.getStorageSync('mallid');
-      // uni.navigateTo({
-      //   url: `/pages/protocol/protocol?type=${type}&brandId=${brandId}&lbsId=${lbsId}&noBtn=1`,
-      // });
-      window.toWXSendMsg({
-        type: 'toPage',
-        options: {
-          fnName: 'navigateTo',
-          url: `/pages/protocol/protocol?type=${type}&brandId=${brandId}&lbsId=${lbsId}&noBtn=1`
-        },
+    checkoutLogin() {
+      const pages = getCurrentPages();
+      let url = '/' + pages[pages.length - 1].route;
+      pages[pages.length - 1].$vm.$refs.child.login(url, () => {
+        this.toWxPointsAuth();
       });
     },
-    handleConfirm() {
-      this.saveAgreementAction(YES);
-    },
-    handleDisagree() {
-      this.saveAgreementAction(NO);
-    },
-    open() {
-      // 获取当前商场
-      const { brandInfo, curMarket } = this;
-      const mallid = this.mallid || uni.getStorageSync('mallid');
-      const groupId = this.groupId || uni.getStorageSync('groupId');
-      if (!groupId || !mallid) {
-        console.warn('===>groupId活mallid不存在');
-        this.show = false;
-        return;
-      }
-      // 判断是否已登录
-      const member = uni.getStorageSync('member');
-      if (!member) {
-        console.warn('===>没有登录');
-        this.show = false;
-        return;
-      }
-      // 找到商场信息
-      if (curMarket) {
-        this.curMarket = curMarket;
-      }
-      // 找到品牌信息
-      if (brandInfo && brandInfo.id === groupId) {
-        this.brandInfo = brandInfo;
-        this.checkVersion();
-      } else {
-        // 根据brandId和lbsId请求
-        const params = {
-          id: groupId,
-          lbsId: mallid,
-        };
-        kipGetBrandInfo(params)
-          .then((resp) => {
-            const result = resp.data;
-            if (result && result.code === '000000') {
-              const brandArray = result.data;
-              if (brandArray && brandArray.length > 0 && brandArray[0]) {
-                const brandInfo = brandArray[0].brand;
-                // 拿到商场信息,版本号
-                this.brandInfo = brandInfo;
-                // 请求接口判断是否需要弹出
-                this.checkVersion();
-                // this.show = true;
+    handleGetPointsConfig() {
+      kipGetPointsConfig()
+        .then((resp) => {
+          const result = resp.data;
+          // codes,wxAuth,aliAuth
+          this.pointsConfig = result;
+          if (result) {
+            if (result && result.codes) {
+              // codes,wxAuth,aliAuth
+              this.pointsConfig = result;
+              this.checkoutLogin();
+            } else {
+              if (result.code && result.code === '300000') {
+                this.checkoutLogin();
+              } else {
+                uni.showToast({
+                  icon: 'none',
+                  mask: true,
+                  duration: 2000,
+                  title: result.errorMessage || result.message || '出错了,请稍后再试',
+                });
               }
+            }
+          } else {
+            if (resp.code && resp.code === '300000') {
+              this.checkoutLogin();
             } else {
               uni.showToast({
-                title: result.message,
-                duration: 2000,
                 icon: 'none',
+                mask: true,
+                duration: 2000,
+                title: resp.message,
               });
             }
-          })
-          .catch((err) => {
-            this.show = false;
-            console.error(err);
-            uni.showToast({
-              title: '请求错误',
-              duration: 2000,
-              icon: 'none',
-            });
-          });
-      }
-    },
-    logout() {
-      const member = uni.getStorageSync('member');
-      const openid = member ? member.openid : '';
-      kipLogout()
-        .then((resp) => {
-          uni.hideLoading();
-          const result = resp.data;
-          if (result && (result.code == '000000' || result.code == '300000')) {
-            // 用户不同意协议直接静默退出
-            // 清除所有缓存,跳转到首页
-            // MemberCacheTool.cleanMemberCache(app);
-            // KipCacheTool.cleanKipCache();
-            // uni.redirectTo({
-            //   url: '/pages/automatic/automaticIndex',
-            // });
-            window.toWXSendMsg({
-              type: 'logout',
-              options: {},
-            });
-
-          } else {
-            uni.showToast({
-              title: result.message,
-              duration: 2000,
-              icon: 'none',
-            });
           }
         })
-        .catch((err) => {
-          uni.hideLoading();
-          console.error(err);
+        .catch((e) => {
           uni.showToast({
-            title: '请求错误',
-            duration: 2000,
             icon: 'none',
-          });
-        });
-    },
-    getKeyByMallid(mallid) {
-      if (CacheTool.isShenZhenMallid(mallid)) {
-        return 'agreeProtocolSZ';
-      } else if (CacheTool.isShenYangMallid(mallid)) {
-        return 'agreeProtocolSY';
-      }
-      return '';
-    },
-    checkVersion() {
-      kipAgreementCheck()
-        .then((resp) => {
-          const result = resp.data;
-          if (result && result.code === '000000') {
-            const { agreementStatus, privacyReminder, protocolReminder } =
-              result.data || {};
-            this.privacyReminder = privacyReminder;
-            this.protocolReminder = protocolReminder;
-            if (privacyReminder && protocolReminder) {
-              this.show = false;
-            } else {
-              this.show = true;
-            }
-          } else {
-            uni.showToast({
-              title: result.message,
-              duration: 2000,
-              icon: 'none',
-            });
-          }
-        })
-        .catch((err) => {
-          console.error(err);
-          uni.showToast({
+            mask: true,
             title: '请求错误',
-            duration: 2000,
-            icon: 'none',
           });
         });
     },
-    saveAgreementAction(status) {
-      const params = {};
-      if (!this.protocolReminder) {
-        params.protocolStatus = status;
-      }
-      if (!this.privacyReminder) {
-        params.privacyStatus = status;
+    async toWxPointsAuth() {
+      console.log('授权微信无感积分');
+      if (this.clickToWxPointsAuth) {
+        console.log('授权微信无感积分重复点击');
+        return;
       }
-      kipAgreementSave(params)
-        .then((resp) => {
-          const result = resp.data;
-          if (!result || result.code !== '000000') {
-            uni.showToast({
-              title: result.message,
-              duration: 2000,
-              icon: 'none',
-            });
-          } else {
-            // 如果不同意协议则调用退出接口
-            this.show = false;
-            if (NO === status) {
-              this.logout();
-            }
-          }
-        })
-        .catch((err) => {
-          console.error(err);
-          uni.showToast({
-            title: '请求错误',
-            duration: 2000,
-            icon: 'none',
+      await this.handleGetPointsConfig();
+      this.clickToWxPointsAuth = true;
+      var myPluginInterface = requirePlugin('myPlugin');
+      uni.showLoading();
+      const _this = this;
+      await myPluginInterface.getLocation(app.globalData.openId).then((res) => {
+        const that = _this;
+        if (res.return_code === 0) {
+          uni.navigateTo({
+            url: `plugin://myPlugin/index?openid=${app.globalData.openId}&mch_id=${that.pointsConfig.mchId}&member_status=${that.pointsConfig.wxAuth ? 1 : 0}`,
+            success: function () {
+              that.close();
+              uni.hideLoading();
+              that.clickToWxPointsAuth = false;
+            },
           });
-        });
+        } else if (res.return_code === '102') {
+          uni.showModal({
+            title: '提示',
+            content: '请您在”定位服务“中允许”微信”使用位置信息, 并允许该小程序使用定位功能',
+            showCancel: false,
+            confirmText: '确认',
+            success: function (res) {
+              that.close();
+              that.clickToWxPointsAuth = false;
+            },
+          });
+          uni.hideLoading();
+        } else {
+          that.clickToWxPointsAuth = false;
+        }
+      });
+    },
+    open() {
+      this.show = true;
+    },
+    close() {
+      this.show = false;
     },
   },
 };
 </script>
-
-<style lang="less">
-// new
-.authorize-hz {
-  background: rgba(0, 0, 0, 0.6);
+<style>
+.box {
   position: fixed;
-  z-index: 998;
+  z-index: 10000;
+  width: 100vw;
+  height: 100vh;
+  background: rgba(0, 0, 0, 0.7);
+}
+
+.boxIn {
+  position: relative;
   width: 100%;
   height: 100%;
-  left: 0;
-  top: 0;
+}
 
-  .mid {
-    position: absolute;
-    top: 50%;
-    left: 50%;
-    transform: translateX(-50%) translateY(-50%);
-    width: 588px;
-    background: #fff;
-    border-radius: 17px;
-    padding: 56px 44px;
+.content {
+  position: relative;
+  width: calc(100% - 110px);
+  height: 232px;
+  background: #ffffff;
+  border-radius: 8px;
+  margin: 0 auto;
+  margin-top: 280px;
+}
 
-    .authorize-box {
-      width: 100%;
+.commit-star {
+  position: absolute;
+  width: calc(100vw - 40px);
+  height: calc(48.1vw - 23.6px);
+  top: calc(11.8px - 24.05vw);
+  left: -33px;
+}
 
-      .bold {
-        text-align: center;
-        color: #333333;
-        padding-bottom: 44px;
-      }
+.commit-logo-default {
+  width: 84px;
+  height: 20px;
+  position: relative;
+  display: block;
+  top: 15px;
+  left: 30px;
+}
 
-      .other {
-        color: #666666;
-        line-height: 48px;
-        font-size: 28px;
-        color: #666666;
-        opacity: 1;
-      }
+.commit-logo-ko {
+  width: 80px;
+  height: 20px;
+  position: relative;
+  display: block;
+  top: 15px;
+  left: 35px;
+}
 
-      .checkBox {
-        display: flex;
-        justify-content: flex-start;
-        align-items: flex-start;
-        margin-top: 40px;
+.logo {
+  height: 35px;
+  border-bottom: 1rpx solid rgba(151, 151, 151, 0.1);
+}
 
-        .popup-a {
-          color: #4e99ff;
-          text-decoration: underline;
-        }
-      }
-    }
+.title {
+  font-size: 16px;
+  font-weight: 600;
+  color: #333;
+  text-align: center;
+  margin-top: 22px;
+}
 
-    .authorize-footer {
-      display: flex;
-      justify-content: space-between;
-      color: #ffffff;
-      margin-top: 56px;
+.text {
+  width: 180px;
+  margin: 0 auto;
+  margin-top: 8px;
+  color: #999;
+  font-size: 12px;
+  text-align: center;
+}
 
-      .disagree_btn {
-        width: 176px;
-        height: 68px;
-        line-height: 68px;
-        border: 2px solid #b3b3b3;
-        border-radius: 34px;
-        color: #999999;
-        font-size: 30px;
-      }
+.commit-btn {
+  width: calc(100vw - 180px);
+  height: 40px;
+  margin: 0 auto;
+  margin-top: 17px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 15px;
+  color: #fff;
+  background: #644a79;
+  border-radius: 25px;
+  box-shadow: 3px 3px 12px 0px #644a79;
+}
 
-      .agree_btn {
-        width: 286px;
-        height: 68px;
-        line-height: 68px;
-        background: linear-gradient(90deg, #662d91 0%, #1b1464 100%);
-        opacity: 0.83;
-        border-radius: 34px;
-        color: #ffffff;
-        font-size: 30px;
-      }
+.commit-btn--blue {
+  box-shadow: 3px 3px 12px 0px #13358e;
+  background: #13358e;
+}
 
-      .disabled {
-        background: #999999;
-      }
-    }
-  }
+.commit-btn--green {
+  box-shadow: 3px 3px 12px 0px #25673c;
+  background: #25673c;
+}
+
+.commit-cancel {
+  position: relative;
+  display: block;
+  margin: 0 auto;
+  margin-top: 56px;
+  width: 32px;
+  height: 32px;
 }
 </style>

+ 1 - 0
src/kui/components/k-button/k-button.vue

@@ -57,6 +57,7 @@
     @getuserinfo="onGetuserinfo"
     @getphonenumber="onGetphonenumber"
   >
+    <slot name="left"/>
     <k-icon
       v-if="type == 'icon'"
       :name="icon"

+ 29 - 5
src/pages/parkingFee/mixins/parkingFee.js

@@ -15,7 +15,7 @@ import uni from '@/utils/uniHooks';
 // import greenCom from '../components/green/home.vue';
 // import officeBlueCom from '../components/officeBlue/home.vue';
 // import purpleCom from '../components/purple/home.vue';
-import { parkingLots } from '@/api/parking';
+import { parkingLots, qrCodes, unlicensedCarCheckIn } from '@/api/parking';
 
 export default {
   components: {
@@ -540,19 +540,20 @@ export default {
       })
     },
     // 无牌车闸机扫码
-    scanCarCode() {
+    async scanCarCode() {
       // 模拟失败
-      this.$router.push({
+      /* this.$router.push({
         path: 'parkingFeeMsg',
         query:{
           type: 'success'
         }
-      })
+      }) */
+      this.qrCodesRule('e41d4d9dd5534f4aa3de88326a2e6f85')
       return
       const runScanFn = (res) => {
         if (res.scanType == 'QR_CODE' && res.scanType) {
           console.log(res.result);
-         // 获取二维码参数之后,模拟提取参数
+          // 获取二维码参数之后,模拟提取参数
           const url = res.result;
           if (url.indexOf('auth/') === -1) { // 单纯的code
             console.log('提取到的参数', res.result);
@@ -619,5 +620,28 @@ export default {
        },
        }); */
     },
+    // 处理扫码结果
+    async qrCodesRule(code) {
+      try {
+        const qrCodesres = await qrCodes(code); // 无牌车扫码
+        console.log(626, qrCodesres);
+        window.localStorage.setItem('buildingId', qrCodesres.buildingId);
+        const unlicensedCarCheckInres = await unlicensedCarCheckIn({ // 获取无牌车牌
+          gateId: qrCodesres.gateId
+        });
+        console.log(630, unlicensedCarCheckInres);
+      } catch (err) {
+        console.log(633, err);
+        // if(err?.code === "VALIDATION_FAILED") {
+
+        // }
+        this.$router.push({
+          path: 'parkingFeeMsg',
+          query: {
+            type: 'fail'
+          }
+        })
+      }
+    }
   },
 };

+ 14 - 4
src/pages/parkingFee/mixins/parkingFeeDetail.js

@@ -149,11 +149,11 @@ export default {
           }
         }
         const res = await ordersAndPrepay(params);
-        console.log('orderDetail', res);
+        // console.log('orderDetail', res);
         if (res?.paymentType === 'NO_FEE_PAY') {
           this.btnLoading = false;
           this.$router.replace({
-            path: 'parkingFeeSuccess?vehicleNo=' + this.$route.query.vehicleNo,
+            path: this.getPagePath(),
           });
           // 支付成功
           return
@@ -207,7 +207,8 @@ export default {
                   name: 'parkingFeeDetail'
                 });
                 this.$router.replace({
-                  path: 'parkingFeeSuccess?carno=' + this.parkInfo.carno,
+                  // path: 'parkingFeeSuccess?carno=' + this.parkInfo.carno,
+                  path: this.getPagePath(),
                 });
               } else {
                 this.reCreateParkOrder();
@@ -234,7 +235,8 @@ export default {
                 } else {
                   this.btnLoading = false;
                   this.$router.replace({
-                    path: 'parkingFeeSuccess?vehicleNo=' + this.$route.query.vehicleNo,
+                    // path: 'parkingFeeSuccess?vehicleNo=' + this.$route.query.vehicleNo,
+                    path: this.getPagePath(),
                   });
                 }
               });
@@ -405,6 +407,14 @@ export default {
       this.$store.dispatch('order/savePointsMath', () => {
         this.popup = false;
       });
+    },
+    // 获取成功缴费之后前往的页面
+    getPagePath() {
+      let pagePath = 'parkingFeeSuccess?vehicleNo=' + this.$route.query.vehicleNo
+      if (this.$route.query.vehicleNo.indexOf('临') > -1) {
+        pagePath = 'parkingFeeMsg?type=pay'
+      }
+      return pagePath
     }
   },
 };

+ 150 - 8
src/pages/parkingFee/parkingFeeMsg.vue

@@ -1,15 +1,39 @@
 <template>
-  <div :class="[theme]">
+  <div :class="[theme, 'bg']">
     <!-- 领取临牌:成功 -->
     <div class="success-box" v-if="type === 'success'">
-      <img class="success-icon" :src="require(`./static/images/unlicensed/success.png`)" />
+      <img class="icon" :src="require(`./static/images/unlicensed/success.png`)" />
       <div class="status-title">临牌领取成功</div>
-      <div class="status-info">若未正常抬杠,请关闭当前页面重新扫码 或联系车场管理人员处理</div>
-      <k-button title="进入首页" disabledColor="#D1D2D9" />
+      <div class="status-info">若未正常抬杠,请关闭当前页面重新扫码</div>
+      <div class="status-info">或联系车场管理人员处理</div>
+      <div class="card-box">
+        <img :src="`${require(`./static/images/unlicensed-0.png`)}`" />
+        <div class="car-number">
+          <div class="number">临K 9Q289H</div>
+          <div class="tips">车辆类型:无牌车辆</div>
+        </div>
+      </div>
+      <k-button title="进入首页" disabledColor="#D1D2D9" @click="goHome" />
     </div>
     <!-- 领取临牌:失败 -->
     <div class="fill-box" v-if="type === 'fill'">
-      <img class="fill" :src="require(`./static/images/unlicensed/fill.png`)" />
+      <img class="icon" :src="require(`./static/images/unlicensed/fill.png`)" />
+      <div class="status-title">临牌领取成功</div>
+      <div class="status-info">若未正常抬杠,请关闭当前页面重新扫码</div>
+      <div class="status-info">或联系车场管理人员处理</div>
+      <div class="card-box">
+        <img :src="`${require(`./static/images/unlicensed-0.png`)}`" />
+        <div class="car-number">
+          <div class="number">临K ???</div>
+          <div class="tips">车辆类型:无牌车辆</div>
+        </div>
+      </div>
+      <k-button disabledColor="#D1D2D9" @click="scanCarCode">
+        <template v-slot:left>
+          <img class="unlicensed-scan" :src="`${require(`./static/images/unlicensed-scan.png`)}`" />
+        </template>
+        重新扫码
+      </k-button>
     </div>
     <!-- 支付成功 -->
     <div class="pay-box" v-if="type === 'pay'">
@@ -20,6 +44,9 @@
 </template>
 
 <script>
+import uni from '@/utils/uniHooks';
+import { initWxJsSdkConfig } from '@/utils/login';
+import { getPlatform } from '@/utils/index';
 export default {
   name: 'parkingFeeMsg',
   data() {
@@ -28,12 +55,16 @@ export default {
       type: '',
     };
   },
-  created() {
+  async created() {
     setTimeout(() => {
       uni.setNavigationBarTitle({
         title: '停车缴费提示',
       });
     }, 300);
+    const platform = getPlatform();
+    if (platform === 'micromessenger') {
+      await initWxJsSdkConfig(['checkJsApi', 'scanQRCode']);
+    }
     console.log(this.$route.query);
     if (this.$route.query?.type) {
       this.type = this.$route.query?.type;
@@ -42,10 +73,71 @@ export default {
     }
   },
   mounted() {},
+  methods: {
+    // 无牌车闸机扫码
+    scanCarCode() {
+      const runScanFn = (res) => {
+        if (res.scanType == 'QR_CODE' && res.scanType) {
+          console.log(res.result);
+          // 获取二维码参数之后,模拟提取参数
+          const url = res.result;
+          if (url.indexOf('auth/') === -1) {
+            // 单纯的code
+            console.log('提取到的参数', res.result);
+            // this.getPaperCouponInfo(res.result);
+          } else {
+            // 从url中提取参数
+            const start = url.indexOf('auth/');
+            const end = url.indexOf('?');
+            const params = url.slice(start, end).split('/');
+            if (params && params.length) {
+              const couponCode = params[1];
+              console.log('提取到的参数', couponCode);
+              // this.getPaperCouponInfo(couponCode);
+            }
+          }
+        }
+      };
+      // 微信小程序
+      const platform = getPlatform();
+      if (platform === 'miniprogram') {
+        window.toWXSendMsg({
+          type: 'scanQRCode',
+        });
+        window.subscribe('scanQRCodeOver', (options) => {
+          console.log('微信扫码结束之后的返回参数', options);
+          runScanFn(options);
+        });
+      } else {
+        this.$wx.scanQRCode({
+          desc: 'scanQRCode desc',
+          needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
+          // scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有
+          success: (res) => {
+            console.log('H5页面扫码获取到的参数——成功', res);
+            runScanFn(res);
+            // this.formMsg.deviceCode = res.resultStr;
+          },
+          error: (res) => {
+            console.log('H5页面扫码获取到的参数——失败', res);
+            // console.log(242, res);
+          },
+        });
+      }
+    },
+    goHome() {
+      this.$router.replace({
+        path: 'home',
+      });
+    },
+  },
 };
 </script>
 
 <style lang="less" scoped>
+.bg {
+  background-color: #fbfcff;
+}
 .pay-box {
   text-align: center;
   margin-top: 84px;
@@ -65,10 +157,12 @@ export default {
   }
 }
 
-.success-box {
+.success-box,
+.fill-box {
   margin-top: 123px;
   text-align: center;
-  .success-icon {
+  padding: 0 24px;
+  .icon {
     width: 80px;
     height: 80px;
     display: block;
@@ -82,5 +176,53 @@ export default {
     line-height: 50px;
     color: #333333;
   }
+  .status-info {
+    font-family: 'PingFang SC';
+    font-style: normal;
+    font-weight: 400;
+    font-size: 26px;
+    line-height: 40px;
+    text-align: center;
+    color: #999999;
+  }
+  .card-box {
+    height: 230px;
+    margin-top: 39px;
+    margin-bottom: 52px;
+    background: #fbfcff;
+    border: 1px solid #d9dbe0;
+    border-radius: 4px;
+    display: flex;
+    // align-items: center;
+    // padding-top: 53px;
+    // padding-left: 18px;
+    // padding-bottom: 34px;
+
+    img {
+      width: 288px;
+      height: 142px;
+      margin-top: 62px;
+      display: block;
+    }
+    .car-number {
+      margin-top: 68px;
+      .number {
+        font-size: 50px;
+        line-height: 56px;
+        font-weight: 600;
+        color: #333333;
+        margin-bottom: 23px;
+        letter-spacing: 6.5px;
+      }
+      .tips {
+        color: #999999;
+      }
+    }
+  }
+  .unlicensed-scan {
+    width: 60px;
+    height: 60px;
+    margin-right: 16px;
+  }
 }
 </style>

+ 5 - 4
src/store/order.js

@@ -1,4 +1,4 @@
-import { checkOut, calculateDiscount, ordersAndPrepay, currentUnlicensedPlate, unlicensedCarCheckIn } from '@/api/parking';
+import { checkOut, calculateDiscount, ordersAndPrepay, currentUnlicensedPlate, unlicensedCarCheckIn, unlicensedCarCheckout } from '@/api/parking';
 
 // import checkOutQHResponse from '@/api/mockData/checkout.qh3.response.json'
 // import checkOutQHResponse from '@/api/mockData/checkout.hz.response.json';
@@ -133,21 +133,22 @@ const mutations = {
 };
 
 const actions = {
-  async orderInit({ commit, dispatch, state }, { vehicleNo = '浙A616A1', callback }) {
+  async orderInit({ commit, dispatch, state }, { gateId, vehicleNo = '浙A616A1', callback }) {
     try {
       const unlicensed = vehicleNo.indexOf('临') > -1; // true: 临时车牌;false:普通车牌
       // const res = await checkOut('浙A616A1');
       // const res = await checkOut('闽AAQ5519', unlicensed);
       // const res = await checkOut('粤A51113');
       // const res = await checkOut('沪DCJ986');
-      const res = await checkOut(vehicleNo, unlicensed);
+      const method = unlicensed ? unlicensedCarCheckout : checkOut
+      const res = await method(vehicleNo, unlicensed, gateId);
       console.log(vehicleNo, res);
       // 所有的优惠时间长转为金额
       // console.log(112, '所有的优惠时间长转为金额');
       // dispatch('orderInitRule', checkOutQHResponse);
       dispatch('orderInitRule', res);
     } catch (error) {
-      console.log('143143143143143', error);
+      console.log('151151151151151', error);
       /* if (/NOT_FOUND|PARKING_RECORD_NOT_FOUND/.test(error.code)) {
         callback && callback(error)
       } */

+ 9 - 0
src/utils/api-kip.js

@@ -208,3 +208,12 @@ export function kipAgreementCheck (params) {
   const url = `/profile/v1/customer/agreemen/checkUserAgreementVersion`;
   return request.post(url, params, {...DEFAULT_CONFIG});
 }
+
+/**
+ * 补录无感积分
+ * 商圈会员待积分状态: PENDING: 需要弹窗提示补录, FINISHED: 不需要提示补录
+ */
+export function wxEasyPointsCommitStatus(params) {
+	const url = `/points/v1/auto/points/commit-status`;
+	return request.get(url, params);
+}

+ 21 - 0
src/utils/wx-points-commit-status.js

@@ -0,0 +1,21 @@
+import { wxEasyPointsCommitStatus } from '@/utils/api-kip.js'
+
+export async function  getWxEasyPointsCommitStatus() {
+    try {
+        const res = await wxEasyPointsCommitStatus()
+        console.log('无感积分补录信息', res)
+        if (res.data.pointsCommitStatus === 'FINISHED') {
+            return false
+        }
+        if (res.data.pointsCommitStatus === 'PENDING') {
+            return true
+        }
+
+    } catch (err) {
+        uni.showToast({
+            title: err.message,
+            duration: 2000,
+            icon: 'none'
+        })
+    }
+}