Commit 555e2a0e4ecda935b3c093710c5e69fdec7774e1

Authored by 刘淇
1 parent aabd3df4

续费会员卡

src/api/parkNotes/parkNotes.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 通过车牌查询历史欠费单
  4 +export function queryParkingRecordCarNumbers(params) {
  5 + return request({
  6 + url: 'queryParkOrder/queryParkingRecordCarNumbers',
  7 + method: 'post',
  8 + data: params
  9 + })
  10 +}
  11 +
  12 +
  13 +
  14 +
  15 +
  16 +
  17 +
  18 +
  19 +
... ...
src/api/suggest/suggest.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 获取反馈建议问题类型
  4 +export function getFeedbackType(params) {
  5 + return request({
  6 + url: 'suggest/getFeedbackType',
  7 + method: 'post',
  8 + data: params
  9 + })
  10 +}
  11 +
  12 +// 保存用户的反馈建议
  13 +export function saveFeedbackAndSuggest(params) {
  14 + return request({
  15 + url: 'suggest/saveFeedbackAndSuggest',
  16 + method: 'post',
  17 + data: params
  18 + })
  19 +}
  20 +
  21 +
  22 +
  23 +
  24 +
  25 +
  26 +
  27 +
  28 +
... ...
src/router/index.js
... ... @@ -30,7 +30,10 @@ export default new Router({
30 30 {
31 31 path: '/plateNumber',
32 32 name: 'plateNumber',
33   - component: plateNumber
  33 + component: plateNumber,
  34 + meta:{
  35 + title:'停车缴费'
  36 + }
34 37 },
35 38  
36 39 {
... ... @@ -109,7 +112,10 @@ export default new Router({
109 112 {
110 113 path: '/selfNav',
111 114 name: 'selfNav',
112   - component: () => import("@/views/mySelf/selfNav.vue")
  115 + component: () => import("@/views/mySelf/selfNav.vue"),
  116 + meta:{
  117 + title:'个人中心'
  118 + }
113 119 },
114 120 //
115 121 // ------------------------建议反馈
... ... @@ -126,7 +132,10 @@ export default new Router({
126 132 {
127 133 path: '/parkNotes',
128 134 name: 'parkNotes',
129   - component: () => import("@/views/mySelf/parkNotes/parkNotes.vue")
  135 + component: () => import("@/views/mySelf/parkNotes/parkNotes.vue"),
  136 + meta:{
  137 + title:'停车记录'
  138 + }
130 139 },
131 140 //
132 141 //
... ... @@ -184,6 +193,18 @@ export default new Router({
184 193 }
185 194 },
186 195  
  196 + {
  197 + path: '/renew',
  198 + name: 'renew',
  199 + component: () => import("@/views/cards/renew.vue"),
  200 + meta:{
  201 + title:'续费会员卡'
  202 + }
  203 + },
  204 +
  205 +
  206 +
  207 +
187 208  
188 209  
189 210  
... ...
src/utils/utils.js
... ... @@ -209,7 +209,7 @@ export default {
209 209 deviceInfo: this.myDeviceInfo,
210 210 salt: salt,
211 211 sign_type: "md5",
212   - token: sessionStorage.getItem("wx_Token"), //de8eb9cce14b4c8f81d027fcda0b78f8 sessionStorage.getItem("wx_Token")
  212 + token: sessionStorage.getItem("wx_Token"), //c23849735f3442f3b95f7bec816317ae sessionStorage.getItem("wx_Token")
213 213 orgId: this.myOrgId
214 214 };
215 215 return reqData;
... ...
src/views/cards/Cards.vue
1 1 <template>
2 2 <div style="height: 100%;display: flex;flex-direction: column;">
3 3 <div style="flex: 1;overflow-y: auto;padding: 15px">
4   - <div class="noCardData" v-if="cardList.length == 0">
  4 + <div class="noCardData" v-if="cardList.length == 0">
5 5 <p>您目前没有任何会员卡,</p>
6 6 <p>请绑定车牌通过认证后再购买会员卡!</p>
7 7 </div>
8 8  
9 9 <div v-else>
10   - <div class="cardBg" v-for="(i ,index) in cardList">
  10 + <div v-for="(i ,index) in cardList" class="cardBg"
  11 + :class="{'nianka':i.cardType==1,'bannianka':i.cardType==2,'jika':i.cardType==3,'yueka':i.cardType==4,'rika':i.cardType==5,shixiao:i.cardStatus==0}"
  12 + >
11 13 <ul class="cardList">
12   - <li>
13   - 会员卡- {{i.cardType=='1'?'年卡':(i.cardType=='2'?'半年卡':(i.cardType=='3'?'季卡':(i.cardType=='4'?'月卡':(i.cardType=='5'?'日卡':''))))}}
  14 + <li style="padding-left: 25px;">
  15 + 会员卡-
  16 + {{i.cardType=="1"?"年卡":(i.cardType=="2"?"半年卡":(i.cardType=="3"?"季卡":(i.cardType=="4"?"月卡":(i.cardType=="5"?"日卡":""))))}}
14 17 </li>
15 18 <li>
16 19 绑定车牌号: {{ i.carNumber }}
... ... @@ -22,6 +25,17 @@
22 25 卡名称: {{ i.cardName }}
23 26 </li>
24 27 </ul>
  28 + <div class="cardStatus"
  29 + v-if="i.cardStatus==1"
  30 + :class="{'niankaStatus':i.cardType==1,'banniankaStatus':i.cardType==2,'jikaStatus':i.cardType==3,'yuekaStatus':i.cardType==4,'rikaStatus':i.cardType==5}"
  31 + >
  32 + 月卡生效中
  33 + </div>
  34 + <div class="cardStatus shixiaocardStatus" v-else>月卡已失效</div>
  35 + <div class="renewBtn" @click="toReNew(i)"
  36 + v-if="i.cardStatus==1"
  37 + :class="{'niankaStatus':i.cardType==1,'banniankaStatus':i.cardType==2,'jikaStatus':i.cardType==3,'yuekaStatus':i.cardType==4,'rikaStatus':i.cardType==5}"
  38 + >续费</div>
25 39 </div>
26 40 <!--cardType=='1'?'年卡':(cardType=='2'?'半年卡':(cardType=='3'?'季卡':(cardType=='4'?'月卡':(cardType=='5'?'日卡':''))))-->
27 41  
... ... @@ -29,7 +43,6 @@
29 43 </div>
30 44  
31 45  
32   -
33 46 </div>
34 47 <x-button type="primary" @click.native="$router.push({path:'buyCard'})">购买会员卡</x-button>
35 48 </div>
... ... @@ -48,6 +61,7 @@ export default {
48 61 this.queryVipCardsByCustId();
49 62 },
50 63 methods: {
  64 + // 获取会员卡列表
51 65 queryVipCardsByCustId: function() {
52 66 let jsondata = this.$utils.commonParams();
53 67 jsondata.sign = this.$utils.signObject(jsondata);
... ... @@ -55,11 +69,17 @@ export default {
55 69 console.log(data);
56 70 if (data.code == 0) {
57 71 let res = data.data;
58   - this.cardList = res
  72 + this.cardList = res;
59 73 } else {
60 74 this.$vux.toast.text(data.message, "top");
61 75 }
62 76 });
  77 + },
  78 + // 续费
  79 + toReNew: function(i) {
  80 + console.log(i);
  81 + sessionStorage.setItem("renewData", JSON.stringify(i));
  82 + this.$router.push("renew");
63 83 }
64 84 }
65 85 };
... ... @@ -76,17 +96,82 @@ export default {
76 96 .cardBg {
77 97 width: 100%;
78 98 height: 150px;
79   - background: #26a2ff url("../../assets/images/cards/cards.png") no-repeat 20px 20px;
  99 + position: relative;
  100 + background-image: url("../../assets/images/cards/cards.png");
  101 + background-repeat: no-repeat;
  102 + background-position: 20px 20px;
80 103 background-size: 90% 90%;
81 104 border-radius: 8px;
82 105 margin-bottom: 15px;
  106 + overflow: hidden;
  107 + }
  108 + .nianka{
  109 + background-color: #dd6c1e;
83 110 }
84   - .cardList{
  111 + .bannianka{
  112 + background-color: #2A1DD2;
  113 + }
  114 + .jika{
  115 + background-color: #DF6B1B;
  116 + }
  117 +
  118 + .yueka{
  119 + background-color: #33CCFF;
  120 + }
  121 + .rika{
  122 + background-color: #498816;
  123 + }
  124 + .shixiao{
  125 + background-color: #ccc;
  126 + }
  127 +
  128 + .cardList {
85 129 padding: 20px 0 0 20px;
86 130 color: #fff;
87   - li{
  131 + li {
88 132 line-height: 30px;
89 133 }
90 134 }
  135 + .cardStatus{
  136 + position: absolute;
  137 + left: -22px;
  138 + top: 21px;
  139 + font-size: 12px;
  140 + -webkit-transform: rotate(30deg);
  141 + transform: rotate(-43deg);
  142 + width: 100px;
  143 + text-align: center;
  144 + color: #fff;
  145 + }
  146 + .niankaStatus{
  147 + background-color: #c17b12;
  148 + }
  149 + .yuekaStatus{
  150 + background-color: #3989a3;
  151 + }
  152 + .banniankaStatus{
  153 + background-color: #7972cb;
  154 + }
  155 + .jikaStatus{
  156 + background-color: #f19f67;
  157 + }
  158 + .rikaStatus{
  159 + background-color: #7edb33;
  160 + }
  161 + .shixiaocardStatus{
  162 + background-color: #a59d9d;
  163 + }
  164 +
  165 + .renewBtn {
  166 + position: absolute;
  167 + top: 20px;
  168 + right: 20px;
  169 + /*border: 1px solid #ffbe00;*/
  170 + /*background: #ffbe00;*/
  171 + color: #fff;
  172 + padding: 2px 10px;
  173 + border-radius: 4px;
  174 + cursor: pointer;
  175 + }
91 176  
92 177 </style>
... ...
src/views/cards/renew.vue 0 → 100644
  1 +<template>
  2 + <div>
  3 + <ul class="choose-area">
  4 +
  5 +
  6 + <li>
  7 + <div style="color: #666">选择停车场</div>
  8 + <div >{{renewData.parkName}}</div>
  9 + <!--<div class="arrow">></div>-->
  10 + <!--<div class="arrow">></div>-->
  11 + </li>
  12 +
  13 +
  14 + <!--<li>-->
  15 + <!--<div style="color: #666">卡名称</div>-->
  16 + <!--<div>微纳园卡</div>-->
  17 + <!--</li>-->
  18 +
  19 + <li>
  20 + <div style="color: #666">选择卡类型</div>
  21 + <div >{{renewData.cardName}}</div>
  22 +
  23 + <!--<div class="arrow">></div>-->
  24 + </li>
  25 +
  26 +
  27 + <li>
  28 + <div style="color: #666">绑定车牌</div>
  29 + <div>{{renewData.carNumber}}</div>
  30 + <!--<div class="arrow">></div>-->
  31 + </li>
  32 +
  33 + <li>
  34 + <div style="color: #A31414">生效时间</div>
  35 + <div style="color: #A31414" >{{renewData.expDate }}</div>
  36 + <!--<div class="arrow">></div>-->
  37 + </li>
  38 +
  39 + <li>
  40 + <div style="color: #666">有效期至</div>
  41 + <div>{{ $utils.timestampToTime(endTimeFunc) }}</div>
  42 + </li>
  43 +
  44 +
  45 + <li>
  46 + <div style="color: #666">购买数量</div>
  47 + <div class="choose-num">
  48 + <span @click="addCardNum">+</span>
  49 + <span>{{cardNum}}</span>
  50 + <span @click="reduceCarNum">-</span>
  51 + </div>
  52 + </li>
  53 +
  54 + <li>
  55 + <div style="color: #666">单价</div>
  56 + <div>¥{{ (unitPrice/100).toFixed(2)}}</div>
  57 + </li>
  58 +
  59 +
  60 + <li>
  61 + <div style="color: #666">优惠金额</div>
  62 + <div>¥{{(disPrice/100).toFixed(2)}}</div>
  63 + </li>
  64 +
  65 + <li>
  66 + <div style="color: #666">应付金额</div>
  67 + <div style="color: #A31414">¥{{(needPay/100).toFixed(2)}}</div>
  68 + </li>
  69 +
  70 + </ul>
  71 +
  72 + <div style="padding:15px;text-align: center">
  73 + <check-icon :value.sync="agreement">
  74 + </check-icon>
  75 + <p style="display: inline-block;height: 23px;line-height: 23px;">我已阅读并同意 <span style="color: blue"
  76 + @click="showHideOnBlur=true">《购买须知》</span>
  77 + </p>
  78 + </div>
  79 +
  80 +
  81 + <div style="margin-top: 34px" class="leftRightPadding">
  82 + <mt-button type="danger" size="large" @click="toPay">确定购买</mt-button>
  83 + </div>
  84 +
  85 +
  86 +
  87 + <div v-transfer-dom>
  88 + <x-dialog v-model="showHideOnBlur" class="dialog-demo" hide-on-blur>
  89 + <div class="agreen-box">
  90 + <p>
  91 + 1. 本停车卡为指定停车场有效使用,为特定的场地停车权限,请按照停车场场地自主选择购买。
  92 + </p>
  93 + <p>
  94 + 2. 月卡(季卡)一经售出,概不退卡,允许车牌变更1次(有效期内)。
  95 + </p>
  96 + <p>
  97 + 3. 年卡可以支持车牌变更3次(有效期内),年卡退卡需要按照原价扣除已经使用月份(不满一个月按照一个月计算)并退回已开具发票。
  98 + </p>
  99 + <p>
  100 + 4. 停车场管理方对车辆及车内财务无看管保全义务,车主须遵守停车场管理规定将车辆停在车场的停车位内,乱停车辆引起的贴条和拖车等后果由车主自行承担。
  101 + </p>
  102 + <p>
  103 + 5. 友情提醒:妥善关闭和锁定已停车入位的车辆,不在车内放置现金和其它贵重物品,其它停车规定须遵守所辖停车场的管理规定(参见停车场公示)。
  104 + </p>
  105 + </div>
  106 + <div @click="showHideOnBlur=false">
  107 + <span class="vux-close">X</span>
  108 + </div>
  109 + </x-dialog>
  110 + </div>
  111 +
  112 +
  113 + </div>
  114 +</template>
  115 +
  116 +<script>
  117 +import { TransferDomDirective as TransferDom } from "vux";
  118 +import {
  119 + queryParkListForVipCard,
  120 + queryVipCardInfoByPlNo,
  121 + queryUserCars,
  122 + weixinpay,
  123 + createVipCardOrder
  124 +} from "@/api/cards/cards";
  125 +import { timestampToTime } from "../../utils/utils.js";
  126 +export default {
  127 + name: "renew",
  128 + directives: {
  129 + TransferDom
  130 + },
  131 + data() {
  132 + return {
  133 + startDate:new Date(),
  134 + dateVal: "",
  135 + startData: "",
  136 + endDate: "",
  137 + parkName: "",
  138 + parkNo: "",
  139 + cardNum: 1, // 卡数量
  140 + unitPrice: 0, // 单价
  141 + disPrice: 0, // 优惠金额
  142 + needPay: 0, // 应付
  143 + agreement: false,
  144 + typeNum: 1, // 卡类型判断
  145 + showHideOnBlur: false, // 购买协议
  146 + createVipCardOrder: {}, // 创建订单对象
  147 + orderId: "", // 订单号
  148 + renewData: {} // 续费数据
  149 + };
  150 + },
  151 + mounted() {
  152 + this.renewData = JSON.parse(sessionStorage.getItem("renewData"));
  153 + console.log(this.renewData);
  154 + this.unitPrice = this.renewData.price;
  155 + this.disPrice = this.renewData.price * ((10 - this.renewData.discount) / 10);
  156 + this.needPay = this.unitPrice - this.disPrice;
  157 + this.typeNum = this.renewData.cardType
  158 + this.startData = this.renewData.expDate
  159 + // this.queryParkListForVipCard(); // 获取停车场
  160 + // this.queryUserCars(); // 获取用户车牌
  161 + },
  162 + computed: {
  163 + // 卡类型 1-年卡;2-半年卡;3-季卡;4-月卡;5-日卡;
  164 + endTimeFunc() {
  165 +
  166 + if (this.startData) {
  167 +
  168 + switch (this.typeNum) {
  169 + case '1':
  170 + this.endDate = this.$moment(this.startData).add(12, "month").format("YYYY-MM-DD");
  171 + return this.$moment(this.startData).add(12, "month").format("YYYY-MM-DD");
  172 + break;
  173 + case '2':
  174 + this.endDate = this.$moment(this.startData).add(6, "month").format("YYYY-MM-DD");
  175 + return this.$moment(this.startData).add(6, "month").format("YYYY-MM-DD");
  176 + break;
  177 + case '3':
  178 + this.endDate = this.$moment(this.startData).add(3, "month").format("YYYY-MM-DD");
  179 + return this.$moment(this.startData).add(3, "month").format("YYYY-MM-DD");
  180 + break;
  181 + case '4':
  182 + this.endDate = this.$moment(this.startData).add(1, "month").format("YYYY-MM-DD");
  183 + return this.$moment(this.startData).add(1, "month").format("YYYY-MM-DD");
  184 + break;
  185 + case '5':
  186 + this.endDate = this.$moment(this.startData).add(1, "days").format("YYYY-MM-DD");
  187 + return this.$moment(this.startData).add(1, "days").format("YYYY-MM-DD");
  188 + break;
  189 + }
  190 + // return this.$moment(this.startData).add(1,"month").format("YYYY-MM-DD");
  191 + // return this.startData.getMonth()+1
  192 + }
  193 + // switch (val){
  194 + // case 2:
  195 + // return this.startData.setMonth(this.startData.getMonth()+1);
  196 + // break;
  197 + // }
  198 + }
  199 + },
  200 + methods: {
  201 +
  202 +
  203 +
  204 +
  205 + clickActionCarNum(e) {
  206 + this.carNumber = e.name;
  207 + },
  208 + addCardNum() { // 增加购买数量
  209 + this.cardNum++;
  210 + this.calcMoney();
  211 + },
  212 + reduceCarNum() { // 增加购买数量
  213 + if (this.cardNum == 1) {
  214 + return;
  215 + }
  216 + this.cardNum--;
  217 + this.calcMoney();
  218 + },
  219 + calcMoney() {
  220 + this.needPay = this.cardNum * (this.unitPrice - this.disPrice);
  221 + },
  222 + // 购买
  223 + toPay() {
  224 +
  225 + if (!this.agreement) {
  226 + this.$vux.toast.text("请同意购买须知", "top");
  227 + return;
  228 + }
  229 + this.createOrder();
  230 + },
  231 + createOrder() {
  232 + console.log(this.createVipCardOrder);
  233 + let me = this;
  234 + let jsondata = this.$utils.commonParams();
  235 + jsondata.plNo = this.renewData.parkNo; // 停车场id
  236 + jsondata.cardNo = this.renewData.cardNo; // 卡券编码
  237 + jsondata.cardType = this.renewData.cardType; // 卡类型
  238 + jsondata.carType = this.renewData.carType; // 1-大型车;2-小型车
  239 + // jsondata.plNo = this.createVipCardOrder.id; // 1-大型车;2-小型车
  240 + jsondata.price = this.renewData.price; // 卡单价
  241 + jsondata.totalAmount = (this.needPay).toString(); // 购买的总金额
  242 + jsondata.num = (this.cardNum).toString(); // 购买数量
  243 + jsondata.effDate = this.renewData.expDate; // 生效时间
  244 + jsondata.expDate = this.$utils.timestampToTime(this.endTimeFunc); // 失效时间
  245 + jsondata.carNumber = this.renewData.carNumber; // 卡适用车牌
  246 + jsondata.optType = "2"; // 操作类型 1 购买 2 续费
  247 + jsondata.forceBuy = "1";
  248 + jsondata.cardCouponsId = this.renewData.custCardNo
  249 + jsondata.sign = this.$utils.signObject(jsondata);
  250 + createVipCardOrder(jsondata).then(data => {
  251 + console.log(data);
  252 + // orderId
  253 + if (data.code == 0) {
  254 + this.orderId = data.data.orderId;
  255 + this.vxPay();
  256 + } else {
  257 + this.$vux.toast.text(data.message, "top");
  258 + }
  259 + });
  260 + },
  261 + vxPay() {
  262 + let vm = this;
  263 + let jsondata = this.$utils.commonParams();
  264 + jsondata.orderId = this.orderId; // 订单号
  265 + jsondata.payType = "4"; // 支付方式-- 1:支付宝 2:微信 3:银联.
  266 + jsondata.paySrcType = "302"; // 支付单来源 101:停车付款单 102:停车预付单 103:停车补缴单 104 共享车位 201 余额充值单 202 押金充值单 301 会员卡购买单 302 会员卡续费
  267 + jsondata.appId = this.$utils.myVxAppId; // 微信标识符
  268 + jsondata.terminalSource = "3"; // 请求端来源 1: 任你停 2:pda 3:微信公共号
  269 + jsondata.paySource = "3";
  270 + jsondata.couponPersonId = "";
  271 + jsondata.openId = 'o0Moh6eQhTm5bZVqT6wjdSUsZonM'; // o0Moh6eQhTm5bZVqT6wjdSUsZonM sessionStorage.getItem("wx_openId")
  272 + jsondata.sign = this.$utils.signObject(jsondata);
  273 + weixinpay(jsondata).then(res => {
  274 + console.log(data);
  275 + if (res.code == 0) { //
  276 + if (res.data) {
  277 + var data = res.data;
  278 + console.log(JSON.stringify(data));
  279 + if (typeof WeixinJSBridge === "undefined") { // 微信浏览器内置对象。参考微信官方文档
  280 + if (document.addEventListener) {
  281 + document.addEventListener("WeixinJSBridgeReady", vm.onBridgeReady(data), false);
  282 + } else if (document.attachEvent) {
  283 + document.attachEvent("WeixinJSBridgeReady", vm.onBridgeReady(data));
  284 + document.attachEvent("onWeixinJSBridgeReady", vm.onBridgeReady(data));
  285 + }
  286 + } else {
  287 + console.log("准备调用微信支付");
  288 + vm.onBridgeReady(data);
  289 + }
  290 + } else {
  291 + alert("没有找到返回值");
  292 + }
  293 + } else {
  294 + alert(res.message);
  295 + }
  296 + });
  297 + },
  298 + onBridgeReady(params) {
  299 + let me = this;
  300 + console.log("调用微信支付WeixinJSBridge");
  301 + WeixinJSBridge.invoke(
  302 + "getBrandWCPayRequest", params,
  303 + //
  304 + // 'getBrandWCPayRequest', { // 下面参数内容都是后台返回的
  305 + // 'appId': data.appId, // 公众号名称,由商户传入
  306 + // 'timeStamp': data.timeStamp, // 时间戳
  307 + // 'nonceStr': data.nonceStr, // 随机串
  308 + // 'package': data.package, // 预支付id
  309 + // 'signType': data.signType, // 微信签名方式
  310 + // 'paySign': data.paySign // 微信签名
  311 + // },
  312 + function(res) {
  313 + // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
  314 + if (res.err_msg === "get_brand_wcpay_request:ok") {
  315 + console.log("成功");
  316 + this.$vux.toast.text("支付成功", "top");
  317 + me.$router.go(-2);
  318 + } else {
  319 + console.log("失败");
  320 + alert("支付失败");
  321 + me.$router.go(-2);
  322 + }
  323 + }
  324 + );
  325 + }
  326 + }
  327 +};
  328 +</script>
  329 +
  330 +<style scoped lang="scss">
  331 + .choose-area {
  332 + background: #fff;
  333 + padding: 0 10px;
  334 + }
  335 +
  336 + .choose-area > li {
  337 + padding-right: 20px;
  338 + position: relative;
  339 + height: 38px;
  340 + line-height: 38px;
  341 + border-bottom: 1px solid #EFEFEF;
  342 + display: flex;
  343 + justify-content: space-between;
  344 + .arrow {
  345 + position: absolute;
  346 + right: 0;
  347 + top: 0;
  348 + font-size: 16px;
  349 + }
  350 + &:last-child {
  351 + border-bottom: 0;
  352 + }
  353 + }
  354 +
  355 + .choose-num {
  356 + height: 28px;
  357 + margin-top: 5px;
  358 + line-height: 28px;
  359 + display: flex;
  360 + border: 1px solid #D8D8D8;
  361 + span {
  362 + display: inline-block;
  363 + &:nth-of-type(1) {
  364 + width: 28px;
  365 + height: 28px;
  366 + text-align: center;
  367 + cursor: pointer;
  368 + }
  369 + &:nth-of-type(2) {
  370 + width: 50px;
  371 + text-align: center;
  372 + border-left: 1px solid #D8D8D8;
  373 + border-right: 1px solid #D8D8D8;
  374 + }
  375 + &:nth-of-type(3) {
  376 + width: 28px;
  377 + height: 28px;
  378 + text-align: center;
  379 + cursor: pointer;
  380 + }
  381 + }
  382 + }
  383 +
  384 + .parkArea {
  385 + padding-top: 10px;
  386 + padding-bottom: 10px;
  387 + margin-top: 10px;
  388 + background: #fff;
  389 + color: #999;
  390 + }
  391 +
  392 + .parkAreaTitle {
  393 + display: flex;
  394 + justify-content: space-between;
  395 + color: #666;
  396 + }
  397 +
  398 + .parkMore {
  399 + cursor: pointer;
  400 + }
  401 +
  402 + .park-list-wrap {
  403 + width: 80%;
  404 + max-height: 70%;
  405 + overflow-y: scroll;
  406 + border-radius: 5px;
  407 + }
  408 +
  409 + .park-list {
  410 + /*width: 80%;*/
  411 + li {
  412 + padding-left: 20px;
  413 + line-height: 25px;
  414 + }
  415 + }
  416 +
  417 + .agreen-box {
  418 + padding: 15px;
  419 + text-align: left;
  420 + p {
  421 + margin-bottom: 15px;
  422 + }
  423 + }
  424 +
  425 + .vux-close {
  426 + margin-top: 8px;
  427 + margin-bottom: 8px;
  428 + font-size: 18px;
  429 + }
  430 +
  431 + /deep/ .picker-items {
  432 + width: 100%
  433 + }
  434 +
  435 +
  436 +</style>
... ...
src/views/mySelf/feedback/suggestionBack.vue
... ... @@ -3,46 +3,80 @@
3 3 <p class="suggestion-tip">请选择您反馈的问题类型</p>
4 4 <ul class="suggestionList">
5 5 <li
6   - @click="chooseHandle(index)"
7 6 v-for="(i, index) in suggestionList"
8   - :key="i.id"
  7 + @click="chooseHandle(index,i.code)"
  8 + :key="i.name"
9 9 :class="{choosedActive: currentIndex==index}"
10 10 >
11   - {{i.text}}
  11 + {{i.name}}
12 12 </li>
13 13 </ul>
14 14  
15 15 <div class="clear"></div>
16 16  
17   - <mt-field label="" placeholder="请详细描述反馈问题,或提出改进建议。(300字以内)" type="textarea" rows="4" v-model="introduction" :attr="{ maxlength: 2 }"></mt-field>
  17 + <mt-field label="" placeholder="请详细描述反馈问题,或提出改进建议。(300字以内)" type="textarea" rows="4" v-model.trim="introduction" :attr="{ maxlength: 300 }"></mt-field>
18 18  
19 19 <div style="margin-top: 34px">
20   - <mt-button type="danger" size="large">提交</mt-button>
  20 + <mt-button type="danger" size="large" @click="saveHandle">提交</mt-button>
21 21 </div>
22 22 </div>
23 23 </template>
24 24  
25 25 <script>
  26 +import {
  27 + getFeedbackType,
  28 + saveFeedbackAndSuggest
  29 +} from "@/api/suggest/suggest";
  30 +
26 31 export default {
27 32 name: 'suggestionBack',
28 33 data() {
29 34 return {
30   - suggestionList: [
31   - { id: 1, text: 'APP问题' },
32   - { id: 2, text: '支付问题' },
33   - { id: 3, text: '停车场问题' },
34   - { id: 4, text: '服务投诉' },
35   - { id: 5, text: '改进建议' },
36   - { id: 6, text: '其他问题' },
37   - ],
  35 + suggestionList: [],
38 36 currentIndex: 0,
  37 + feedbackCode:1,
39 38 introduction: '',
40 39 }
41 40 },
  41 + mounted(){
  42 + this.getFeedbackType1()
  43 + },
42 44 methods: {
43   - chooseHandle: function (i) {
44   - console.log(i)
  45 + // 获取反馈建议问题类型
  46 + getFeedbackType1: function(){
  47 + let jsondata = this.$utils.commonParams();
  48 + console.log(jsondata)
  49 + jsondata.sign = this.$utils.signObject(jsondata);
  50 + getFeedbackType(jsondata).then(data => {
  51 + console.log(data)
  52 + this.suggestionList = data.data
  53 + })
  54 + },
  55 + // 反馈建议问题类型切换事件
  56 + chooseHandle: function (i,code) {
  57 + console.log(code)
45 58 this.currentIndex = i
  59 + this.feedbackCode = code
  60 + },
  61 + // 提交建议反馈事件
  62 + saveHandle: function() {
  63 + if(this.introduction){
  64 + let jsondata = this.$utils.commonParams();
  65 + jsondata.feedbackCode = this.feedbackCode
  66 + jsondata.suggestDesc = this.introduction
  67 + jsondata.sign = this.$utils.signObject(jsondata);
  68 + saveFeedbackAndSuggest(jsondata).then(data => {
  69 + console.log(data)
  70 + if (data.code == 0) {
  71 + this.introduction = ''
  72 + this.$vux.toast.text('提交反馈成功', "top");
  73 + }else{
  74 + this.$vux.toast.text(data.message, "top");
  75 + }
  76 + })
  77 + }else{
  78 + this.$vux.toast.text('请输入反馈内容后再提交', "top");
  79 + }
46 80 }
47 81 }
48 82 }
... ...
src/views/mySelf/parkNotes/parkNotes.vue
1 1 <template>
2 2 <div>
3   - <ul class="notesList">
4   - <li>车牌号: <span>蒙DMW169</span></li>
5   - <li>车牌颜色: <span>蓝色</span></li>
6   - <li>进场时间: <span>2020-12-19 12:59:18</span></li>
7   - <li>出场时间: <span>2020-12-19 12:59:18</span></li>
8   - <li>停车时长: <span>18分33秒</span></li>
9   - </ul>
10   - <ul class="notesList">
11   - <li>车牌号: <span>蒙DMW169</span></li>
12   - <li>车牌颜色: <span>蓝色</span></li>
13   - <li>进场时间: <span>2020-12-19 12:59:18</span></li>
14   - <li>出场时间: <span>2020-12-19 12:59:18</span></li>
15   - <li>停车时长: <span>18分33秒</span></li>
16   - </ul>
  3 + <div v-if="notesList.length>0">
  4 + <ul class="notesList" v-for="(i, index) in notesList">
  5 + <li>车牌号: <span>{{i.carNumber}}</span></li>
  6 + <li>车牌颜色: <span>蓝色</span></li>
  7 + <li>进场时间: <span>{{i.parkInTime}}</span></li>
  8 + <li>出场时间: <span>{{i.parkOutTime}}</span></li>
  9 + <li>停车时长: <span>{{i.parkDuration}}</span></li>
  10 + </ul>
  11 + <ul class="notesList">
  12 + <li>车牌号: <span>蒙DMW169</span></li>
  13 + <li>车牌颜色: <span>蓝色</span></li>
  14 + <li>进场时间: <span>2020-12-19 12:59:18</span></li>
  15 + <li>出场时间: <span>2020-12-19 12:59:18</span></li>
  16 + <li>停车时长: <span>18分33秒</span></li>
  17 + </ul>
  18 + </div>
17 19  
18   - <div class="noRecord" >暂无记录</div>
  20 +
  21 + <div class="noRecord" v-else>暂无记录</div>
19 22  
20 23 </div>
21 24 </template>
22 25  
23 26 <script>
  27 +import {
  28 + queryParkingRecordCarNumbers
  29 +} from "@/api/parkNotes/parkNotes";
24 30 export default {
25   - name: 'parkRecord'
26   -}
  31 + name: "parkRecord",
  32 + data() {
  33 + return {
  34 + notesList: []
  35 + };
  36 + },
  37 + mounted() {
  38 + this.getRecord();
  39 + },
  40 + methods: {
  41 + getRecord: function() {
  42 + let jsondata = this.$utils.commonParams();
  43 + console.log(jsondata);
  44 + jsondata.parkState = "20";
  45 + /**停车状态 10:在场 ,20:离场.*/
  46 + jsondata.orderState = "40";
  47 + /**订单状态[字典表:ORDER_STATE]:10:待核算,20:待支付,30:支付中,40:支付完成,52:欠费逃逸, 53:已补缴 60:退款中 70:退款成功*/
  48 + jsondata.sign = this.$utils.signObject(jsondata);
  49 + queryParkingRecordCarNumbers(jsondata).then(data => {
  50 + console.log(data);
  51 + this.notesList = data.data;
  52 + console.log(this.notesList)
  53 + });
  54 + }
  55 + }
  56 +};
27 57 </script>
28 58  
29 59 <style scoped lang="scss">
... ...
src/views/mySelf/selfNav.vue
... ... @@ -40,6 +40,7 @@ export default {
40 40 data() {
41 41 return {
42 42 menuList: [
  43 + { name: "停车缴费", path: "plateNumber" },
43 44 { name: "会员卡", path: "Cards" },
44 45 { name: "车辆管理", path: "myCars" },
45 46 { name: "发票管理", path: "eInvoiceWrap" },
... ... @@ -68,7 +69,7 @@ export default {
68 69 let that = this;
69 70 if(sessionStorage.getItem("wx_openId")){
70 71 this.getTokenByOpenId(sessionStorage.getItem("wx_openId"));
71   - this.getinfoself()
  72 + // this.getinfoself()
72 73 }else{
73 74 if (this.webAppCode) {
74 75 this.getopenid();
... ...
src/views/parkPay/plateNumber.vue
... ... @@ -18,20 +18,20 @@
18 18 <div class="wrap">
19 19 <!--<p style="margin-bottom: 18px;margin-top: 18px;">请选择车牌颜色</p>-->
20 20  
21   - <!--<ul class="color-choose">-->
22   - <!--<li v-for="(i,index) in colorList" :key="i.name" @click="chooseColor(index)"-->
23   - <!--:style="{color:currentColor==index?'#FFF':'',background: currentColor==index?activeBG:'' }"-->
24   - <!--&gt;-->
25   - <!--{{i.name}}-->
26   - <!--</li>-->
  21 + <ul class="color-choose">
  22 + <li v-for="(i,index) in colorList" :key="i.name" @click="chooseColor(index)"
  23 + :style="{color:currentColor==index?'#FFF':'',background: currentColor==index?activeBG:'' }"
  24 + >
  25 + {{i.name}}
  26 + </li>
27 27  
28   - <!--</ul>-->
  28 + </ul>
29 29  
30 30  
31 31  
32 32  
33   -
34   - <p style="margin-bottom: 18px;margin-top: 18px;">请输入车牌号码</p>
  33 + <p style="margin-bottom: 18px;margin-top: 18px;"></p>
  34 + <!--<p style="margin-bottom: 18px;margin-top: 18px;">请输入车牌号码</p>-->
35 35 <div class="num-box">
36 36 <div class="num0" @click="clickFirstWrap()">
37 37 <span>{{formData.num0}}</span>
... ... @@ -47,30 +47,30 @@
47 47 </div>
48 48  
49 49  
50   - <div class="radio-box">
51   - <label class="flex-items-center">
52   - <img v-if="formData.commonCard == 1"
53   - src="../../assets/images/parkPay/icon_chose_s@2x.png"
54   - alt="">
55   - <img v-else
56   - src="../../assets/images/parkPay/icon_chose_n@2x.png"
57   - alt="">
58   - <input type="radio"
59   - v-model="formData.commonCard"
60   - value="1" />普通车牌
61   - </label>
62   - <label class="flex-items-center">
63   - <img v-if="formData.commonCard == 2"
64   - src="../../assets/images/parkPay/icon_chose_s@2x.png"
65   - alt="">
66   - <img v-else
67   - src="../../assets/images/parkPay/icon_chose_n@2x.png"
68   - alt="">
69   - <input type="radio"
70   - v-model="formData.commonCard"
71   - value="2" />新能源车牌
72   - </label>
73   - </div>
  50 + <!--<div class="radio-box">-->
  51 + <!--<label class="flex-items-center">-->
  52 + <!--<img v-if="formData.commonCard == 1"-->
  53 + <!--src="../../assets/images/parkPay/icon_chose_s@2x.png"-->
  54 + <!--alt="">-->
  55 + <!--<img v-else-->
  56 + <!--src="../../assets/images/parkPay/icon_chose_n@2x.png"-->
  57 + <!--alt="">-->
  58 + <!--<input type="radio"-->
  59 + <!--v-model="formData.commonCard"-->
  60 + <!--value="1" />普通车牌-->
  61 + <!--</label>-->
  62 + <!--<label class="flex-items-center">-->
  63 + <!--<img v-if="formData.commonCard == 2"-->
  64 + <!--src="../../assets/images/parkPay/icon_chose_s@2x.png"-->
  65 + <!--alt="">-->
  66 + <!--<img v-else-->
  67 + <!--src="../../assets/images/parkPay/icon_chose_n@2x.png"-->
  68 + <!--alt="">-->
  69 + <!--<input type="radio"-->
  70 + <!--v-model="formData.commonCard"-->
  71 + <!--value="2" />新能源车牌-->
  72 + <!--</label>-->
  73 + <!--</div>-->
74 74  
75 75  
76 76 <div class="submit-box" @click="submitFn()">
... ... @@ -97,7 +97,7 @@
97 97 <div class="first-word"
98 98 @click="selectFirstWord($event)">
99 99 <div class="word">
100   - <span></span>
  100 + <span></span>
101 101 </div>
102 102 <div class="word">
103 103 <span>湘</span>
... ... @@ -157,7 +157,7 @@
157 157 <span>甘</span>
158 158 </div>
159 159 <div class="word">
160   - <span></span>
  160 + <span></span>
161 161 </div>
162 162 <div class="word">
163 163 <span>青</span>
... ... @@ -199,38 +199,38 @@
199 199 <span>新</span>
200 200 </div>
201 201 <!--<div class="word">-->
202   - <!--<span>学</span>-->
  202 + <!--<span>学</span>-->
203 203 <!--</div>-->
204 204 <div class="word bordernone">
205   - <!-- <img src="../assets/images/icon-switch.png" alt=""> -->
  205 + <!-- <img src="../assets/images/icon-switch.png" alt=""> -->
206 206 </div>
207 207 </div>
208 208  
209 209 <!--<div class="first-word"-->
210   - <!--@click="selectFirstWord($event)">-->
211   - <!--<div class="word">-->
212   - <!--<span>港</span>-->
213   - <!--</div>-->
214   - <!--<div class="word">-->
215   - <!--<span>澳</span>-->
216   - <!--</div>-->
217   - <!--<div class="word">-->
218   - <!--<span>领</span>-->
219   - <!--</div>-->
  210 + <!--@click="selectFirstWord($event)">-->
  211 + <!--<div class="word">-->
  212 + <!--<span>港</span>-->
  213 + <!--</div>-->
  214 + <!--<div class="word">-->
  215 + <!--<span>澳</span>-->
  216 + <!--</div>-->
  217 + <!--<div class="word">-->
  218 + <!--<span>领</span>-->
  219 + <!--</div>-->
220 220  
221   - <!--<div class="word">-->
222   - <!--<span>警</span>-->
223   - <!--</div>-->
  221 + <!--<div class="word">-->
  222 + <!--<span>警</span>-->
  223 + <!--</div>-->
224 224  
225 225  
226   - <!--<div class="word bordernone">-->
227   - <!--</div>-->
228   - <!--<div class="word bordernone">-->
229   - <!--</div>-->
230   - <!--<div class="word bordernone">-->
231   - <!--</div>-->
232   - <!--<div class="word bordernone">-->
233   - <!--</div>-->
  226 + <!--<div class="word bordernone">-->
  227 + <!--</div>-->
  228 + <!--<div class="word bordernone">-->
  229 + <!--</div>-->
  230 + <!--<div class="word bordernone">-->
  231 + <!--</div>-->
  232 + <!--<div class="word bordernone">-->
  233 + <!--</div>-->
234 234 <!--</div>-->
235 235 </div>
236 236 <div class="keyboard-wrap" v-if="keyBoardStatus === true">
... ... @@ -301,6 +301,8 @@ import {swiperQuery} from &#39;../../api/plateNumber/plateNumber&#39;
301 301 export default {
302 302 data () {
303 303 return {
  304 +
  305 + // 0:蓝牌;1:黄牌;2:白牌;3:黑牌;4:绿色
304 306 colorList:[
305 307 {
306 308 name:'蓝牌',
... ... @@ -310,16 +312,17 @@ export default {
310 312 name:'黄牌',
311 313 id:'2'
312 314 },
  315 +
313 316 {
314   - name:'绿牌',
  317 + name:'牌',
315 318 id:'3'
316 319 },
317 320 {
318   - name:'牌',
  321 + name:'牌',
319 322 id:'4'
320 323 },
321 324 {
322   - name:'牌',
  325 + name:'绿牌',
323 326 id:'5'
324 327 },
325 328 ],
... ... @@ -420,23 +423,28 @@ export default {
420 423 }
421 424 })
422 425 },
423   - chooseColor (index){ // 颜色选择
  426 + chooseColor (index){ // 颜色选择 0:蓝牌;1:黄牌;2:白牌;3:黑牌;4:绿色
424 427 this.currentColor = index
425 428 switch (this.currentColor) {
426 429 case 0 :
  430 + this.formData.commonCard = '1'
427 431 return this.activeBG = '#0054C0'
428 432 break;
429 433 case 1 :
  434 + this.formData.commonCard = '1'
430 435 return this.activeBG = '#FEBE00'
431 436 break;
432 437 case 2 :
433   - return this.activeBG = '#97DEA1'
  438 + this.formData.commonCard = '1'
  439 + return this.activeBG = '#E4E5E7'
434 440 break;
435 441 case 3 :
436   - return this.activeBG = '#E4E5E7'
  442 + this.formData.commonCard = '1'
  443 + return this.activeBG = '#333333'
437 444 break;
438 445 case 4 :
439   - return this.activeBG = '#333333'
  446 + this.formData.commonCard = '2'
  447 + return this.activeBG = '#97DEA1'
440 448 break;
441 449 }
442 450 },
... ... @@ -504,7 +512,7 @@ export default {
504 512 plateLicense = this.plate_license_2
505 513 plateLicense = this.palindrome(plateLicense)
506 514 if (plateLicense.length < 8) {
507   - this.$msgbox('提示', '请输入正确的车牌号')
  515 + this.$msgbox('提示', '请输入正确的车牌号')
508 516 return
509 517 }
510 518 }
... ...