Commit aabd3df4cc6403d5624370cf254e7674e4e83a34

Authored by 刘淇
1 parent 8b40a4fc

购买会员卡

src/api/cards/cards.js
... ... @@ -20,6 +20,66 @@ export function queryVipAreaCardByOrgId(params) {
20 20 })
21 21 }
22 22  
  23 +//
  24 +// // 搜索有会员卡的停车场
  25 +// export function queryParkListForVipCard(params) {
  26 +// return request({
  27 +// url: 'applyVipCard/queryParkListForVipCard',
  28 +// method: 'post',
  29 +// data: params
  30 +// })
  31 +// }
  32 +
  33 +
  34 +// 搜索停车场
  35 +export function queryParkListForVipCard(params) {
  36 + return request({
  37 + url: 'applyVipCard/queryParkListForVipCard',
  38 + method: 'post',
  39 + data: params
  40 + })
  41 +}
  42 +
  43 +// 搜索卡类型
  44 +export function queryVipCardInfoByPlNo(params) {
  45 + return request({
  46 + url: 'applyVipCard/queryVipCardInfoByPlNo',
  47 + method: 'post',
  48 + data: params
  49 + })
  50 +}
  51 +
  52 +// 获取用户车牌
  53 +export function queryUserCars(params) {
  54 + return request({
  55 + url: 'user/queryUserCars',
  56 + method: 'post',
  57 + data: params
  58 + })
  59 +}
  60 +
  61 +// 创建订单
  62 +export function createVipCardOrder(params) {
  63 + return request({
  64 + url: 'vip/createVipCardOrder',
  65 + method: 'post',
  66 + data: params
  67 + })
  68 +}
  69 +
  70 +
  71 +// 会员卡-微信支付
  72 +export function weixinpay(params) {
  73 + return request({
  74 + url: 'weixinpay/publicUnifiedOrder',
  75 + method: 'post',
  76 + data: params
  77 + })
  78 +}
  79 +
  80 +
  81 +
  82 +
23 83  
24 84  
25 85  
... ...
src/main.js
... ... @@ -69,9 +69,10 @@ import {
69 69 Toast,
70 70 dateFormat,
71 71 Loading,
  72 + XDialog
72 73 }from 'vux'
73 74  
74   -
  75 +Vue.component('x-dialog', XDialog)
75 76 Vue.component('loading', Loading)
76 77 Vue.component('Toast', Toast)
77 78 Vue.component('Confirm', Confirm)
... ...
src/utils/request.js
... ... @@ -5,7 +5,7 @@ import axios from 'axios'
5 5 const service = axios.create({
6 6 // http://dev.renniting.cn/pay/ 赤峰测试
7 7 // http://pay.service.renniting.cn/ 赤峰
8   - baseURL: 'http://dev.renniting.cn/pay/', // url = base url + request url
  8 + baseURL: 'http://pay.service.renniting.cn/', // url = base url + request url
9 9 // withCredentials: true, // send cookies when cross-domain requests
10 10 timeout: 6000 // request timeout
11 11 })
... ... @@ -25,6 +25,7 @@ service.interceptors.request.use(
25 25 service.interceptors.response.use(
26 26 response => {
27 27 const res = response.data
  28 + // console.log(res)
28 29 // if the custom code is not 20000, it is judged as an error.
29 30 if (res.code != '8888') {
30 31 return res
... ...
src/utils/utils.js
... ... @@ -41,9 +41,14 @@ export default {
41 41 }
42 42 },
43 43 timestampToTime: function(timestamp) {
44   - var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
45   - var youWant = d.getFullYear() + "-" + this.completedString(d.getMonth() + 1) + "-" + this.completedString(d.getDate());
46   - return youWant;
  44 + if(timestamp){
  45 + var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
  46 + var youWant = d.getFullYear() + "-" + this.completedString(d.getMonth() + 1) + "-" + this.completedString(d.getDate());
  47 + return youWant;
  48 + }else{
  49 + return ''
  50 + }
  51 +
47 52 },
48 53 timestampTransformTime: function(timestamp) {
49 54 var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
... ... @@ -150,13 +155,14 @@ export default {
150 155 // ud8yq5tv0inxupc05xfeau39jywlqoj2 新的id
151 156 // ny1u72b6k374sg379z0kqjgfxe2ycnpw 新的签名
152 157 myVarAppid: "65grtq5tv0wewec05xfeau39jyghhjm",// 公共请求Appid
153   - myDeviceInfo: "BC0703A4-AFB0-4B51-9089-9B7487C0CC6E", // 公共请求设备信息
  158 + myDeviceInfo: "BC0703A4-AFB0-4B51-9089-9B7487C0CC6E", // 公共请求设备信息 80ac1a4218beb19a BC0703A4-AFB0-4B51-9089-9B7487C0CC6E
154 159 myVxAppId: "wxdfb0276f85514ea3",
155 160 // 测试环境 微信赤峰 appid wxff4cebaedbf4f886
156 161 // 微信赤峰 appid wx2af2bab90d433c86
157 162 // 黄石 appid wxa1a66cc7d263afe6
158 163 // 阳明 wxdfb0276f85514ea3
159   - myOrgId: "10193", // 归属地 赤峰id 10003 黄石 10079 无锡10005
  164 + // 无锡 wx1e9001e5940605b1
  165 + myOrgId: "10193", // 归属地 赤峰id 10003 黄石 10079 无锡10005 扬明10193
160 166 myGetSign: function(objb) { // 获取签名
161 167 var compare = function(obj1, obj2) {
162 168 var val1 = obj1.keyname;
... ... @@ -203,7 +209,7 @@ export default {
203 209 deviceInfo: this.myDeviceInfo,
204 210 salt: salt,
205 211 sign_type: "md5",
206   - token: '7f61e743f9e24f86b1673e32c16e181e', //7f61e743f9e24f86b1673e32c16e181e sessionStorage.getItem("wx_Token")
  212 + token: sessionStorage.getItem("wx_Token"), //de8eb9cce14b4c8f81d027fcda0b78f8 sessionStorage.getItem("wx_Token")
207 213 orgId: this.myOrgId
208 214 };
209 215 return reqData;
... ...
src/views/carManage/addCar.vue
... ... @@ -457,13 +457,23 @@ export default {
457 457 userCarsInfoEdit(jsondata).then(data => {
458 458 console.log(data)
459 459 if (data.code == 0) {
460   - this.$router.push({
461   - path: "myCars",
462   - // query: {
463   - // carNumber: plateLicense,
464   - // carNumberColor: this.currentColor
465   - // }
466   - });
  460 +
  461 + // source:1 // 1表示来源是购买车牌页面
  462 +
  463 + if(this.$route.query.source){
  464 + this.$router.push({
  465 + path: "buyCard",
  466 + });
  467 + }else{
  468 + this.$router.push({
  469 + path: "myCars",
  470 + // query: {
  471 + // carNumber: plateLicense,
  472 + // carNumberColor: this.currentColor
  473 + // }
  474 + });
  475 + }
  476 +
467 477 }else{
468 478 this.$vux.toast.text(data.message, 'top')
469 479 }
... ...
src/views/carManage/certification.vue
... ... @@ -66,7 +66,7 @@ export default {
66 66 let params = new FormData();
67 67 params.append("picFile", this.fil);
68 68 params.append("fileType", 7);
69   - params.append("token", "7f61e743f9e24f86b1673e32c16e181e");
  69 + params.append("token", sessionStorage.getItem("wx_Token")); // sessionStorage.getItem("wx_Token")
70 70 uploadPic(params).then(data => {
71 71 console.log(data);
72 72 if (data.code == 0) {
... ...
src/views/cards/CardList.vue
... ... @@ -46,12 +46,12 @@ export default {
46 46 }
47 47 },
48 48 mounted(){
49   - this.queryVipAreaCardByOrgId()
  49 + this.queryParkListForVipCard()
50 50 },
51 51 methods:{
52   - queryVipAreaCardByOrgId: function() {
  52 + queryParkListForVipCard: function() {
53 53 let jsondata = this.$utils.commonParams();
54   - jsondata.saleChannel = '3' // 售卖渠道:1-APP、2-公众号、3-平台
  54 + jsondata.saleChannel = '2' // 售卖渠道:1-APP、2-公众号、3-平台
55 55 jsondata.sign = this.$utils.signObject(jsondata);
56 56 queryVipAreaCardByOrgId(jsondata).then(data => {
57 57 console.log(data);
... ...
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 v-if="cardList.length == 0" class="noCardData">
  4 + <div class="noCardData" v-if="cardList.length == 0">
5 5 <p>您目前没有任何会员卡,</p>
6 6 <p>请绑定车牌通过认证后再购买会员卡!</p>
7 7 </div>
8   - <div class="cardBg">
9   - <ul class="cardList">
10   - <li>
11   - 会员卡- 月卡
12   - </li>
13   - <li>
14   - 绑定车牌号: 京A12312
15   - </li>
16   - <li>
17   - 有效时间段: 2021-11-11 至 2021-12-10
18   - </li>
19   - <li>
20   - 适用停车场: 万达停车场
21   - </li>
22   - </ul>
23   - </div>
24   - <div class="cardBg">
25   - <ul class="cardList">
26   - <li>
27   - 会员卡- 月卡
28   - </li>
29   - <li>
30   - 绑定车牌号: 京A12312
31   - </li>
32   - <li>
33   - 有效时间段: 2021-11-11 至 2021-12-10
34   - </li>
35   - <li>
36   - 适用停车场: 万达停车场
37   - </li>
38   - </ul>
  8 +
  9 + <div v-else>
  10 + <div class="cardBg" v-for="(i ,index) in cardList">
  11 + <ul class="cardList">
  12 + <li>
  13 + 会员卡- {{i.cardType=='1'?'年卡':(i.cardType=='2'?'半年卡':(i.cardType=='3'?'季卡':(i.cardType=='4'?'月卡':(i.cardType=='5'?'日卡':''))))}}
  14 + </li>
  15 + <li>
  16 + 绑定车牌号: {{ i.carNumber }}
  17 + </li>
  18 + <li>
  19 + 有效时间段: {{i.effDate}} 至 {{i.expDate}}
  20 + </li>
  21 + <li>
  22 + 卡名称: {{ i.cardName }}
  23 + </li>
  24 + </ul>
  25 + </div>
  26 + <!--cardType=='1'?'年卡':(cardType=='2'?'半年卡':(cardType=='3'?'季卡':(cardType=='4'?'月卡':(cardType=='5'?'日卡':''))))-->
  27 +
  28 +
39 29 </div>
  30 +
  31 +
  32 +
40 33 </div>
41   - <x-button type="primary" @click.native="$router.push({path:'CardList'})">购买会员卡</x-button>
  34 + <x-button type="primary" @click.native="$router.push({path:'buyCard'})">购买会员卡</x-button>
42 35 </div>
43 36 </template>
44 37  
... ... @@ -62,6 +55,7 @@ export default {
62 55 console.log(data);
63 56 if (data.code == 0) {
64 57 let res = data.data;
  58 + this.cardList = res
65 59 } else {
66 60 this.$vux.toast.text(data.message, "top");
67 61 }
... ...
src/views/cards/buyCard.vue
1 1 <template>
2 2 <div>
3 3 <ul class="choose-area">
  4 +
  5 +
4 6 <li>
5   - <div style="color: #666">卡名称</div>
6   - <div>微纳园卡</div>
  7 + <div style="color: #666">选择停车场</div>
  8 + <div @click="parkNameVisible = true">{{parkName}}</div>
  9 + <div class="arrow">></div>
  10 + <!--<div class="arrow">></div>-->
7 11 </li>
8 12  
  13 +
  14 + <!--<li>-->
  15 + <!--<div style="color: #666">卡名称</div>-->
  16 + <!--<div>微纳园卡</div>-->
  17 + <!--</li>-->
  18 +
9 19 <li>
10 20 <div style="color: #666">选择卡类型</div>
11   - <div>{{carType}}</div>
  21 + <div @click="cardTypeListVisible = true">{{carType}}</div>
  22 + <div class="arrow">></div>
12 23 <!--<div class="arrow">></div>-->
13 24 </li>
14 25  
... ... @@ -27,7 +38,7 @@
27 38  
28 39 <li>
29 40 <div style="color: #666">有效期至</div>
30   - <div>{{ $utils.timestampToTime(endDate)}}</div>
  41 + <div>{{ $utils.timestampToTime(endTimeFunc) }}</div>
31 42 </li>
32 43  
33 44  
... ... @@ -42,33 +53,41 @@
42 53  
43 54 <li>
44 55 <div style="color: #666">单价</div>
45   - <div>¥{{unitPrice}}</div>
  56 + <div>¥{{ (unitPrice/100).toFixed(2)}}</div>
46 57 </li>
47 58  
48 59  
49 60 <li>
50 61 <div style="color: #666">优惠金额</div>
51   - <div>¥0.00</div>
  62 + <div>¥{{(disPrice/100).toFixed(2)}}</div>
52 63 </li>
53 64  
54 65 <li>
55 66 <div style="color: #666">应付金额</div>
56   - <div style="color: #A31414">¥{{needPay}}</div>
  67 + <div style="color: #A31414">¥{{(needPay/100).toFixed(2)}}</div>
57 68 </li>
58 69  
59 70 </ul>
60 71  
61   - <div class="parkArea leftRightPadding">
62   - <p class="parkAreaTitle">
63   - <span>本卡同时适用于以下停车场:</span>
64   - <span class="parkMore" @click="parkMoreVisible = true">查看更多</span>
  72 + <!--<div class="parkArea leftRightPadding">-->
  73 + <!--<p class="parkAreaTitle">-->
  74 + <!--<span>本卡同时适用于以下停车场:</span>-->
  75 + <!--<span class="parkMore" @click="parkMoreVisible = true">查看更多</span>-->
  76 + <!--</p>-->
  77 +
  78 + <!--<p>停车场停车场停车停车场</p>-->
  79 + <!--</div>-->
  80 + <div style="padding:15px;text-align: center">
  81 + <check-icon :value.sync="agreement">
  82 + </check-icon>
  83 + <p style="display: inline-block;height: 23px;line-height: 23px;">我已阅读并同意 <span style="color: blue"
  84 + @click="showHideOnBlur=true">《购买须知》</span>
65 85 </p>
66   -
67   - <p>停车场停车场停车停车场</p>
68 86 </div>
69 87  
  88 +
70 89 <div style="margin-top: 34px" class="leftRightPadding">
71   - <mt-button type="danger" size="large">确定购买</mt-button>
  90 + <mt-button type="danger" size="large" @click="toPay">确定购买</mt-button>
72 91 </div>
73 92  
74 93 <!-- @touchmove.prevent 阻止默认事件,在选择时间时阻止页面也跟着滚动-->
... ... @@ -86,12 +105,19 @@
86 105 ></mt-datetime-picker>
87 106 </div>
88 107  
  108 + <!--停车场-->
  109 + <mt-actionsheet
  110 + :actions="parkNameList"
  111 + v-model="parkNameVisible">
  112 + </mt-actionsheet>
89 113  
  114 + <!--卡类型-->
90 115 <mt-actionsheet
91   - :actions="actions"
92   - v-model="popupVisible">
  116 + :actions="cardTypeList"
  117 + v-model="cardTypeListVisible">
93 118 </mt-actionsheet>
94 119  
  120 + <!--车牌号-->
95 121 <mt-actionsheet
96 122 :actions="carNumList"
97 123 v-model="carNumberVisible">
... ... @@ -105,76 +131,371 @@
105 131 </ul>
106 132 </mt-popup>
107 133  
  134 + <div v-transfer-dom>
  135 + <x-dialog v-model="showHideOnBlur" class="dialog-demo" hide-on-blur>
  136 + <div class="agreen-box">
  137 + <p>
  138 + 1. 本停车卡为指定停车场有效使用,为特定的场地停车权限,请按照停车场场地自主选择购买。
  139 + </p>
  140 + <p>
  141 + 2. 月卡(季卡)一经售出,概不退卡,允许车牌变更1次(有效期内)。
  142 + </p>
  143 + <p>
  144 + 3. 年卡可以支持车牌变更3次(有效期内),年卡退卡需要按照原价扣除已经使用月份(不满一个月按照一个月计算)并退回已开具发票。
  145 + </p>
  146 + <p>
  147 + 4. 停车场管理方对车辆及车内财务无看管保全义务,车主须遵守停车场管理规定将车辆停在车场的停车位内,乱停车辆引起的贴条和拖车等后果由车主自行承担。
  148 + </p>
  149 + <p>
  150 + 5. 友情提醒:妥善关闭和锁定已停车入位的车辆,不在车内放置现金和其它贵重物品,其它停车规定须遵守所辖停车场的管理规定(参见停车场公示)。
  151 + </p>
  152 + </div>
  153 + <div @click="showHideOnBlur=false">
  154 + <span class="vux-close">X</span>
  155 + </div>
  156 + </x-dialog>
  157 + </div>
  158 +
  159 +
108 160 </div>
109 161 </template>
110 162  
111 163 <script>
  164 +import { TransferDomDirective as TransferDom } from "vux";
  165 +import {
  166 + queryParkListForVipCard,
  167 + queryVipCardInfoByPlNo,
  168 + queryUserCars,
  169 + weixinpay,
  170 + createVipCardOrder
  171 +} from "@/api/cards/cards";
112 172 import { timestampToTime } from "../../utils/utils.js";
113 173 export default {
114 174 name: "buyCard",
  175 + directives: {
  176 + TransferDom
  177 + },
115 178 data() {
116 179 return {
117 180 startDate: new Date(),
118 181 dateVal: "",
119 182 selectedValue: "",
120   - startData: new Date(),
121   - endDate: new Date(),
122   - popupVisible: false,
123   - actions: [
124   - { name: "月卡", num: 1, method: this.clickAction },
125   - { name: "季卡", num: 3, method: this.clickAction },
126   - { name: "年卡", num: 12, method: this.clickAction }
127   - ],
128   - carType: "月卡",
  183 + startData: "",
  184 + endDate: "",
  185 + parkName: "请点击选择",
  186 + parkNameVisible: false,
  187 + parkNameList: [], // 停车场
  188 + parkNo: "",
  189 + cardTypeListVisible: false,
  190 + cardTypeList: [], // 卡类型
  191 + carType: "请点击选择",
129 192 carNumList: [
130   - { name: "停车场1", method: this.clickActionCarNum },
131   - { name: "停车场2", method: this.clickActionCarNum },
132   - { name: "停车场3", method: this.clickActionCarNum },
133   - { name: "停车场4", method: this.clickActionCarNum },
134   - { name: "停车场5", method: this.clickActionCarNum }
  193 + { name: "前往绑定车牌", method: this.addCar }
135 194 ],
136   - carNumber: "京A12334",
  195 + carNumber: "请选择车牌",
137 196 carNumberVisible: false,
138 197 parkMoreVisible: false,
139   - cardNum: 1,
140   - unitPrice: 10,
141   - needPay: 0
  198 + cardNum: 1, // 卡数量
  199 + unitPrice: 10, // 单价
  200 + disPrice: 9, // 优惠金额
  201 + needPay: 1, // 应付
  202 + agreement: false,
  203 + typeNum: 1, // 卡类型判断
  204 + showHideOnBlur: false, // 购买协议
  205 + createVipCardOrder: {}, // 创建订单对象
  206 + orderId: "" // 订单号
142 207 };
143 208 },
  209 + mounted() {
  210 + this.queryParkListForVipCard(); // 获取停车场
  211 + this.queryUserCars(); // 获取用户车牌
  212 + },
  213 + computed: {
  214 + // 卡类型 1-年卡;2-半年卡;3-季卡;4-月卡;5-日卡;
  215 + endTimeFunc() {
  216 + if (this.startData) {
  217 + switch (this.typeNum) {
  218 + case 1:
  219 + this.endDate = this.$moment(this.startData).add(12, "month").format("YYYY-MM-DD");
  220 + return this.$moment(this.startData).add(12, "month").format("YYYY-MM-DD");
  221 + break;
  222 + case 2:
  223 + this.endDate = this.$moment(this.startData).add(6, "month").format("YYYY-MM-DD");
  224 + return this.$moment(this.startData).add(6, "month").format("YYYY-MM-DD");
  225 + break;
  226 + case 3:
  227 + this.endDate = this.$moment(this.startData).add(3, "month").format("YYYY-MM-DD");
  228 + return this.$moment(this.startData).add(3, "month").format("YYYY-MM-DD");
  229 + break;
  230 + case 4:
  231 + this.endDate = this.$moment(this.startData).add(1, "month").format("YYYY-MM-DD");
  232 + return this.$moment(this.startData).add(1, "month").format("YYYY-MM-DD");
  233 + break;
  234 + case 5:
  235 + this.endDate = this.$moment(this.startData).add(1, "days").format("YYYY-MM-DD");
  236 + return this.$moment(this.startData).add(1, "days").format("YYYY-MM-DD");
  237 + break;
  238 + }
  239 + // return this.$moment(this.startData).add(1,"month").format("YYYY-MM-DD");
  240 + // return this.startData.getMonth()+1
  241 + }
  242 + // switch (val){
  243 + // case 2:
  244 + // return this.startData.setMonth(this.startData.getMonth()+1);
  245 + // break;
  246 + // }
  247 + }
  248 + },
144 249 methods: {
145   - //打开时间选择器
  250 + // 获取用户绑定车牌
  251 + queryUserCars() {
  252 + let jsondata = this.$utils.commonParams();
  253 + jsondata.sign = this.$utils.signObject(jsondata);
  254 + queryUserCars(jsondata).then(data => {
  255 + console.log(data);
  256 + let res = data.data;
  257 + if (data.code == 0) {
  258 + if (res.length > 0) {
  259 + if (res.length == 3) {
  260 + this.carNumList = [];
  261 + }
  262 + res.forEach((item, index) => {
  263 + this.carNumList.unshift({
  264 + name: item.carNumber,
  265 + method: this.bandingCar
  266 + });
  267 + });
  268 + }
  269 + console.log(this.carNumList);
  270 + } else {
  271 + this.$vux.toast.text(data.message, "top");
  272 + }
  273 + });
  274 + },
  275 + // 打开时间选择器
146 276 selectData() {
  277 + // this.dateVal = this.startData
147 278 this.$refs["datePicker"].open();
148 279 // console.log(this.startData)
149 280 // this.endDate = this.startData.setMonth(this.startData.getMonth()+1)
150 281 // console.log(this.endDate)
151 282 },
  283 + //
  284 + queryParkListForVipCard() {
  285 + let jsondata = this.$utils.commonParams();
  286 + jsondata.parkName = ""; //搜索的停车场名称
  287 + jsondata.sign = this.$utils.signObject(jsondata);
  288 + queryParkListForVipCard(jsondata).then(data => {
  289 + console.log(data);
  290 + if (data.code == 0) {
  291 + let res = data.data;
  292 + res.parkList.forEach((item, i) => {
  293 + this.parkNameList.push({
  294 + name: item.plName,
  295 + parkNo: item.plNo,
  296 + method: this.parkNameAction
  297 + });
  298 + });
  299 + } else {
  300 + this.$vux.toast.text(data.message, "top");
  301 + }
  302 + });
  303 + },
152 304 handleConfirm() {
153 305 console.log(this.dateVal);
154 306 this.startData = this.$utils.timestampToTime(this.dateVal);
155   - this.endDate = this.dateVal.setMonth(this.dateVal.getMonth() + 1);
  307 + // this.endDate = this.dateVal.setMonth(this.dateVal.getMonth() + 1);
  308 + },
  309 + // 停车场选择事件
  310 + parkNameAction(e) {
  311 + console.log(e);
  312 + this.parkName = e.name;
  313 + this.parkNo = e.parkNo;
  314 + // alert(this.parkNo)
  315 + this.queryVipCardInfoByPlNo();
156 316 },
157   - clickAction(e) {
158   - console.log(e.name);
  317 + // 根据停车场搜卡类型
  318 + queryVipCardInfoByPlNo() {
  319 + let me = this;
  320 + let jsondata = this.$utils.commonParams();
  321 + jsondata.plNo = this.parkNo;
  322 + jsondata.plNo = this.parkNo;
  323 + jsondata.sign = this.$utils.signObject(jsondata);
  324 + queryVipCardInfoByPlNo(jsondata).then(data => {
  325 + console.log(data);
  326 + if (data.code == 0) {
  327 + // res.vipCardList =
  328 + // this.cardTypeList = res.vipCardList
  329 + // { name: "月卡", num: 1, method: this.clickAction },
  330 + let vipCardList = data.data.vipCardList;
  331 + vipCardList.forEach((item, index) => {
  332 + me.$set(item, "name", item.cardName);
  333 + me.$set(item, "method", me.vipCardAction);
  334 + me.cardTypeList.push(item);
  335 + });
  336 + console.log(me.cardTypeList);
  337 + } else {
  338 + this.$vux.toast.text(data.message, "top");
  339 + }
  340 + });
  341 + },
  342 + bandingCar(e) {
  343 + this.carNumber = e.name;
  344 + },
  345 + addCar(e) {
  346 + this.$router.push({
  347 + path: "addCar",
  348 + query: {
  349 + source: 1 // 1表示来源是购买车牌页面
  350 + }
  351 + });
  352 + },
  353 + vipCardAction(e) {
  354 + console.log(e);
159 355 this.carType = e.name;
160   - this.endDate = this.startData;
  356 + // this.startData = e.expDate;
  357 + // this.endDate = e.effDate;
  358 + // this.cardNum = e.validNum;
  359 + this.unitPrice = e.price;
  360 + this.disPrice = e.price * ((10 - e.discValue) / 10);
  361 + this.needPay = this.unitPrice - this.disPrice;
  362 + this.startData = new Date();
  363 + this.typeNum = e.cardType;
  364 + this.createVipCardOrder = e;
  365 + // this.endDate = this.endTimeFunc(e.carType);
  366 + // this.endDate = this.startData;
  367 + // 卡类型 1-年卡;2-半年卡;3-季卡;4-月卡;5-日卡;
161 368 },
162 369 clickActionCarNum(e) {
163 370 this.carNumber = e.name;
164 371 },
165 372 addCardNum() { // 增加购买数量
166 373 this.cardNum++;
167   - this.calcMoney()
  374 + this.calcMoney();
168 375 },
169 376 reduceCarNum() { // 增加购买数量
170 377 if (this.cardNum == 1) {
171 378 return;
172 379 }
173 380 this.cardNum--;
174   - this.calcMoney()
  381 + this.calcMoney();
175 382 },
176 383 calcMoney() {
177   - this.needPay = this.cardNum*this.unitPrice
  384 + this.needPay = this.cardNum * (this.unitPrice - this.disPrice);
  385 + },
  386 + // 购买
  387 + toPay() {
  388 + if (this.parkName == "请点击选择") {
  389 + this.$vux.toast.text("请选择停车场", "top");
  390 + return;
  391 + }
  392 + if (this.carType == "请点击选择") {
  393 + this.$vux.toast.text("请选择卡类型", "top");
  394 + return;
  395 + }
  396 + if (this.carNumber == "请选择车牌") {
  397 + this.$vux.toast.text("请选择车牌", "top");
  398 + return;
  399 + }
  400 + if (!this.agreement) {
  401 + this.$vux.toast.text("请同意购买须知", "top");
  402 + return;
  403 + }
  404 + this.createOrder();
  405 + },
  406 + createOrder() {
  407 + console.log(this.createVipCardOrder);
  408 + let me = this;
  409 + let jsondata = this.$utils.commonParams();
  410 + jsondata.plNo = this.parkNo; // 停车场id
  411 + jsondata.cardNo = this.createVipCardOrder.cardNo; // 卡券编码
  412 + jsondata.cardType = (this.createVipCardOrder.cardType).toString(); // 卡类型
  413 + jsondata.carType = (this.createVipCardOrder.carType).toString(); // 1-大型车;2-小型车
  414 + // jsondata.plNo = this.createVipCardOrder.id; // 1-大型车;2-小型车
  415 + jsondata.price = (this.createVipCardOrder.price).toString(); // 卡单价
  416 + jsondata.totalAmount = (this.needPay).toString(); // 购买的总金额
  417 + jsondata.num = this.cardNum; // 购买数量
  418 + jsondata.effDate = this.$utils.timestampToTime(this.startData); // 生效时间
  419 + jsondata.expDate = this.$utils.timestampToTime(this.endDate); // 失效时间
  420 + jsondata.carNumber = this.carNumber; // 卡适用车牌
  421 + jsondata.optType = "1"; // 操作类型 1 购买 2 续费
  422 + jsondata.forceBuy = "1";
  423 + jsondata.sign = this.$utils.signObject(jsondata);
  424 + createVipCardOrder(jsondata).then(data => {
  425 + console.log(data);
  426 + // orderId
  427 + if (data.code == 0) {
  428 + this.orderId = data.data.orderId;
  429 + this.vxPay();
  430 + } else {
  431 + this.$vux.toast.text(data.message, "top");
  432 + }
  433 + });
  434 + },
  435 + vxPay() {
  436 + let vm = this;
  437 + let jsondata = this.$utils.commonParams();
  438 + jsondata.orderId = this.orderId; // 订单号
  439 + jsondata.payType = "4"; // 支付方式-- 1:支付宝 2:微信 3:银联.
  440 + jsondata.paySrcType = "301"; // 支付单来源 101:停车付款单 102:停车预付单 103:停车补缴单 104 共享车位 201 余额充值单 202 押金充值单 301 会员卡购买单 302 会员卡续费
  441 + jsondata.appId = this.$utils.myVxAppId; // 微信标识符
  442 + jsondata.terminalSource = "3"; // 请求端来源 1: 任你停 2:pda 3:微信公共号
  443 + jsondata.paySource = "3";
  444 + jsondata.couponPersonId = "";
  445 + jsondata.openId = sessionStorage.getItem("wx_openId");
  446 + jsondata.sign = this.$utils.signObject(jsondata);
  447 + weixinpay(jsondata).then(res => {
  448 + console.log(data);
  449 + if (res.code == 0) { //
  450 + if (res.data) {
  451 + var data = res.data;
  452 + console.log(JSON.stringify(data));
  453 + if (typeof WeixinJSBridge === "undefined") { // 微信浏览器内置对象。参考微信官方文档
  454 + if (document.addEventListener) {
  455 + document.addEventListener("WeixinJSBridgeReady", vm.onBridgeReady(data), false);
  456 + } else if (document.attachEvent) {
  457 + document.attachEvent("WeixinJSBridgeReady", vm.onBridgeReady(data));
  458 + document.attachEvent("onWeixinJSBridgeReady", vm.onBridgeReady(data));
  459 + }
  460 + } else {
  461 + console.log("准备调用微信支付");
  462 + vm.onBridgeReady(data);
  463 + }
  464 + } else {
  465 + alert("没有找到返回值");
  466 + }
  467 + } else {
  468 + alert(res.message);
  469 + }
  470 + });
  471 + },
  472 + onBridgeReady(params) {
  473 + let me = this;
  474 + console.log("调用微信支付WeixinJSBridge");
  475 + WeixinJSBridge.invoke(
  476 + "getBrandWCPayRequest", params,
  477 + //
  478 + // 'getBrandWCPayRequest', { // 下面参数内容都是后台返回的
  479 + // 'appId': data.appId, // 公众号名称,由商户传入
  480 + // 'timeStamp': data.timeStamp, // 时间戳
  481 + // 'nonceStr': data.nonceStr, // 随机串
  482 + // 'package': data.package, // 预支付id
  483 + // 'signType': data.signType, // 微信签名方式
  484 + // 'paySign': data.paySign // 微信签名
  485 + // },
  486 + function(res) {
  487 + // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
  488 + if (res.err_msg === "get_brand_wcpay_request:ok") {
  489 + console.log("成功");
  490 + this.$vux.toast.text("支付成功", "top");
  491 + me.$router.go(-2);
  492 + } else {
  493 + console.log("失败");
  494 + alert("支付失败");
  495 + me.$router.go(-2);
  496 + }
  497 + }
  498 + );
178 499 }
179 500 },
180 501 filters: {
... ... @@ -266,7 +587,6 @@ export default {
266 587 }
267 588  
268 589 .park-list {
269   -
270 590 /*width: 80%;*/
271 591 li {
272 592 padding-left: 20px;
... ... @@ -274,4 +594,23 @@ export default {
274 594 }
275 595 }
276 596  
  597 + .agreen-box {
  598 + padding: 15px;
  599 + text-align: left;
  600 + p {
  601 + margin-bottom: 15px;
  602 + }
  603 + }
  604 +
  605 + .vux-close {
  606 + margin-top: 8px;
  607 + margin-bottom: 8px;
  608 + font-size: 18px;
  609 + }
  610 +
  611 + /deep/ .picker-items {
  612 + width: 100%
  613 + }
  614 +
  615 +
277 616 </style>
... ...
src/views/mySelf/selfNav.vue
... ... @@ -40,13 +40,13 @@ export default {
40 40 data() {
41 41 return {
42 42 menuList: [
43   - { name: "会员卡", path: "" },
44   - { name: "车辆管理", path: "" },
  43 + { name: "会员卡", path: "Cards" },
  44 + { name: "车辆管理", path: "myCars" },
45 45 { name: "发票管理", path: "eInvoiceWrap" },
46 46 { name: "停车记录", path: "parkNotes" },
47 47 { name: "建议反馈", path: "suggestionBack" }
48 48 ],
49   - webAppCode: "",
  49 + webAppCode: "", // 071hQo0w34xoYX21CP2w3RRw7U1hQo02
50 50 couponNum: 0, // 卡券数量
51 51 acctBalance: 0, // 账户余额
52 52 userPhone: "--",// 账户手机号
... ... @@ -57,9 +57,9 @@ export default {
57 57 };
58 58 },
59 59 created() {
60   - this.$vux.loading.show({
61   - text: "数据加载中..."
62   - });
  60 + // this.$vux.loading.show({
  61 + // text: "数据加载中..."
  62 + // });
63 63 if (this.$utils.clientBrowser() == "微信") {
64 64 this.webAppCode = this.getCode();
65 65 }
... ... @@ -68,7 +68,7 @@ export default {
68 68 let that = this;
69 69 if(sessionStorage.getItem("wx_openId")){
70 70 this.getTokenByOpenId(sessionStorage.getItem("wx_openId"));
71   - // this.getinfoself()
  71 + this.getinfoself()
72 72 }else{
73 73 if (this.webAppCode) {
74 74 this.getopenid();
... ... @@ -126,6 +126,7 @@ export default {
126 126 let _token = data.data.token;
127 127 console.log('getTokenByOpenId获取到的'+_token)
128 128 sessionStorage.setItem("wx_Token", data.data.token);
  129 + // alert(data.data.token)
129 130 sessionStorage.setItem("WXPhone", data.data.phoneNum);
130 131 that.getinfoself(); //获取用户信息
131 132 } else {
... ... @@ -231,6 +232,9 @@ export default {
231 232 });
232 233 } else {
233 234 this.$vux.toast.text("请先绑定手机号", "top");
  235 + this.$router.push({
  236 + path: "binDing"
  237 + });
234 238 }
235 239 }
236 240 }
... ...