Commit aabd3df4cc6403d5624370cf254e7674e4e83a34
1 parent
8b40a4fc
购买会员卡
Showing
10 changed files
with
517 additions
and
102 deletions
src/api/cards/cards.js
@@ -20,6 +20,66 @@ export function queryVipAreaCardByOrgId(params) { | @@ -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,9 +69,10 @@ import { | ||
69 | Toast, | 69 | Toast, |
70 | dateFormat, | 70 | dateFormat, |
71 | Loading, | 71 | Loading, |
72 | + XDialog | ||
72 | }from 'vux' | 73 | }from 'vux' |
73 | 74 | ||
74 | - | 75 | +Vue.component('x-dialog', XDialog) |
75 | Vue.component('loading', Loading) | 76 | Vue.component('loading', Loading) |
76 | Vue.component('Toast', Toast) | 77 | Vue.component('Toast', Toast) |
77 | Vue.component('Confirm', Confirm) | 78 | Vue.component('Confirm', Confirm) |
src/utils/request.js
@@ -5,7 +5,7 @@ import axios from 'axios' | @@ -5,7 +5,7 @@ import axios from 'axios' | ||
5 | const service = axios.create({ | 5 | const service = axios.create({ |
6 | // http://dev.renniting.cn/pay/ 赤峰测试 | 6 | // http://dev.renniting.cn/pay/ 赤峰测试 |
7 | // http://pay.service.renniting.cn/ 赤峰 | 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 | // withCredentials: true, // send cookies when cross-domain requests | 9 | // withCredentials: true, // send cookies when cross-domain requests |
10 | timeout: 6000 // request timeout | 10 | timeout: 6000 // request timeout |
11 | }) | 11 | }) |
@@ -25,6 +25,7 @@ service.interceptors.request.use( | @@ -25,6 +25,7 @@ service.interceptors.request.use( | ||
25 | service.interceptors.response.use( | 25 | service.interceptors.response.use( |
26 | response => { | 26 | response => { |
27 | const res = response.data | 27 | const res = response.data |
28 | + // console.log(res) | ||
28 | // if the custom code is not 20000, it is judged as an error. | 29 | // if the custom code is not 20000, it is judged as an error. |
29 | if (res.code != '8888') { | 30 | if (res.code != '8888') { |
30 | return res | 31 | return res |
src/utils/utils.js
@@ -41,9 +41,14 @@ export default { | @@ -41,9 +41,14 @@ export default { | ||
41 | } | 41 | } |
42 | }, | 42 | }, |
43 | timestampToTime: function(timestamp) { | 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 | timestampTransformTime: function(timestamp) { | 53 | timestampTransformTime: function(timestamp) { |
49 | var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 | 54 | var d = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 |
@@ -150,13 +155,14 @@ export default { | @@ -150,13 +155,14 @@ export default { | ||
150 | // ud8yq5tv0inxupc05xfeau39jywlqoj2 新的id | 155 | // ud8yq5tv0inxupc05xfeau39jywlqoj2 新的id |
151 | // ny1u72b6k374sg379z0kqjgfxe2ycnpw 新的签名 | 156 | // ny1u72b6k374sg379z0kqjgfxe2ycnpw 新的签名 |
152 | myVarAppid: "65grtq5tv0wewec05xfeau39jyghhjm",// 公共请求Appid | 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 | myVxAppId: "wxdfb0276f85514ea3", | 159 | myVxAppId: "wxdfb0276f85514ea3", |
155 | // 测试环境 微信赤峰 appid wxff4cebaedbf4f886 | 160 | // 测试环境 微信赤峰 appid wxff4cebaedbf4f886 |
156 | // 微信赤峰 appid wx2af2bab90d433c86 | 161 | // 微信赤峰 appid wx2af2bab90d433c86 |
157 | // 黄石 appid wxa1a66cc7d263afe6 | 162 | // 黄石 appid wxa1a66cc7d263afe6 |
158 | // 阳明 wxdfb0276f85514ea3 | 163 | // 阳明 wxdfb0276f85514ea3 |
159 | - myOrgId: "10193", // 归属地 赤峰id 10003 黄石 10079 无锡10005 | 164 | + // 无锡 wx1e9001e5940605b1 |
165 | + myOrgId: "10193", // 归属地 赤峰id 10003 黄石 10079 无锡10005 扬明10193 | ||
160 | myGetSign: function(objb) { // 获取签名 | 166 | myGetSign: function(objb) { // 获取签名 |
161 | var compare = function(obj1, obj2) { | 167 | var compare = function(obj1, obj2) { |
162 | var val1 = obj1.keyname; | 168 | var val1 = obj1.keyname; |
@@ -203,7 +209,7 @@ export default { | @@ -203,7 +209,7 @@ export default { | ||
203 | deviceInfo: this.myDeviceInfo, | 209 | deviceInfo: this.myDeviceInfo, |
204 | salt: salt, | 210 | salt: salt, |
205 | sign_type: "md5", | 211 | sign_type: "md5", |
206 | - token: '7f61e743f9e24f86b1673e32c16e181e', //7f61e743f9e24f86b1673e32c16e181e sessionStorage.getItem("wx_Token") | 212 | + token: sessionStorage.getItem("wx_Token"), //de8eb9cce14b4c8f81d027fcda0b78f8 sessionStorage.getItem("wx_Token") |
207 | orgId: this.myOrgId | 213 | orgId: this.myOrgId |
208 | }; | 214 | }; |
209 | return reqData; | 215 | return reqData; |
src/views/carManage/addCar.vue
@@ -457,13 +457,23 @@ export default { | @@ -457,13 +457,23 @@ export default { | ||
457 | userCarsInfoEdit(jsondata).then(data => { | 457 | userCarsInfoEdit(jsondata).then(data => { |
458 | console.log(data) | 458 | console.log(data) |
459 | if (data.code == 0) { | 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 | }else{ | 477 | }else{ |
468 | this.$vux.toast.text(data.message, 'top') | 478 | this.$vux.toast.text(data.message, 'top') |
469 | } | 479 | } |
src/views/carManage/certification.vue
@@ -66,7 +66,7 @@ export default { | @@ -66,7 +66,7 @@ export default { | ||
66 | let params = new FormData(); | 66 | let params = new FormData(); |
67 | params.append("picFile", this.fil); | 67 | params.append("picFile", this.fil); |
68 | params.append("fileType", 7); | 68 | params.append("fileType", 7); |
69 | - params.append("token", "7f61e743f9e24f86b1673e32c16e181e"); | 69 | + params.append("token", sessionStorage.getItem("wx_Token")); // sessionStorage.getItem("wx_Token") |
70 | uploadPic(params).then(data => { | 70 | uploadPic(params).then(data => { |
71 | console.log(data); | 71 | console.log(data); |
72 | if (data.code == 0) { | 72 | if (data.code == 0) { |
src/views/cards/CardList.vue
@@ -46,12 +46,12 @@ export default { | @@ -46,12 +46,12 @@ export default { | ||
46 | } | 46 | } |
47 | }, | 47 | }, |
48 | mounted(){ | 48 | mounted(){ |
49 | - this.queryVipAreaCardByOrgId() | 49 | + this.queryParkListForVipCard() |
50 | }, | 50 | }, |
51 | methods:{ | 51 | methods:{ |
52 | - queryVipAreaCardByOrgId: function() { | 52 | + queryParkListForVipCard: function() { |
53 | let jsondata = this.$utils.commonParams(); | 53 | let jsondata = this.$utils.commonParams(); |
54 | - jsondata.saleChannel = '3' // 售卖渠道:1-APP、2-公众号、3-平台 | 54 | + jsondata.saleChannel = '2' // 售卖渠道:1-APP、2-公众号、3-平台 |
55 | jsondata.sign = this.$utils.signObject(jsondata); | 55 | jsondata.sign = this.$utils.signObject(jsondata); |
56 | queryVipAreaCardByOrgId(jsondata).then(data => { | 56 | queryVipAreaCardByOrgId(jsondata).then(data => { |
57 | console.log(data); | 57 | console.log(data); |
src/views/cards/Cards.vue
1 | <template> | 1 | <template> |
2 | <div style="height: 100%;display: flex;flex-direction: column;"> | 2 | <div style="height: 100%;display: flex;flex-direction: column;"> |
3 | <div style="flex: 1;overflow-y: auto;padding: 15px"> | 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 | <p>您目前没有任何会员卡,</p> | 5 | <p>您目前没有任何会员卡,</p> |
6 | <p>请绑定车牌通过认证后再购买会员卡!</p> | 6 | <p>请绑定车牌通过认证后再购买会员卡!</p> |
7 | </div> | 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 | </div> | 29 | </div> |
30 | + | ||
31 | + | ||
32 | + | ||
40 | </div> | 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 | </div> | 35 | </div> |
43 | </template> | 36 | </template> |
44 | 37 | ||
@@ -62,6 +55,7 @@ export default { | @@ -62,6 +55,7 @@ export default { | ||
62 | console.log(data); | 55 | console.log(data); |
63 | if (data.code == 0) { | 56 | if (data.code == 0) { |
64 | let res = data.data; | 57 | let res = data.data; |
58 | + this.cardList = res | ||
65 | } else { | 59 | } else { |
66 | this.$vux.toast.text(data.message, "top"); | 60 | this.$vux.toast.text(data.message, "top"); |
67 | } | 61 | } |
src/views/cards/buyCard.vue
1 | <template> | 1 | <template> |
2 | <div> | 2 | <div> |
3 | <ul class="choose-area"> | 3 | <ul class="choose-area"> |
4 | + | ||
5 | + | ||
4 | <li> | 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 | </li> | 11 | </li> |
8 | 12 | ||
13 | + | ||
14 | + <!--<li>--> | ||
15 | + <!--<div style="color: #666">卡名称</div>--> | ||
16 | + <!--<div>微纳园卡</div>--> | ||
17 | + <!--</li>--> | ||
18 | + | ||
9 | <li> | 19 | <li> |
10 | <div style="color: #666">选择卡类型</div> | 20 | <div style="color: #666">选择卡类型</div> |
11 | - <div>{{carType}}</div> | 21 | + <div @click="cardTypeListVisible = true">{{carType}}</div> |
22 | + <div class="arrow">></div> | ||
12 | <!--<div class="arrow">></div>--> | 23 | <!--<div class="arrow">></div>--> |
13 | </li> | 24 | </li> |
14 | 25 | ||
@@ -27,7 +38,7 @@ | @@ -27,7 +38,7 @@ | ||
27 | 38 | ||
28 | <li> | 39 | <li> |
29 | <div style="color: #666">有效期至</div> | 40 | <div style="color: #666">有效期至</div> |
30 | - <div>{{ $utils.timestampToTime(endDate)}}</div> | 41 | + <div>{{ $utils.timestampToTime(endTimeFunc) }}</div> |
31 | </li> | 42 | </li> |
32 | 43 | ||
33 | 44 | ||
@@ -42,33 +53,41 @@ | @@ -42,33 +53,41 @@ | ||
42 | 53 | ||
43 | <li> | 54 | <li> |
44 | <div style="color: #666">单价</div> | 55 | <div style="color: #666">单价</div> |
45 | - <div>¥{{unitPrice}}</div> | 56 | + <div>¥{{ (unitPrice/100).toFixed(2)}}</div> |
46 | </li> | 57 | </li> |
47 | 58 | ||
48 | 59 | ||
49 | <li> | 60 | <li> |
50 | <div style="color: #666">优惠金额</div> | 61 | <div style="color: #666">优惠金额</div> |
51 | - <div>¥0.00</div> | 62 | + <div>¥{{(disPrice/100).toFixed(2)}}</div> |
52 | </li> | 63 | </li> |
53 | 64 | ||
54 | <li> | 65 | <li> |
55 | <div style="color: #666">应付金额</div> | 66 | <div style="color: #666">应付金额</div> |
56 | - <div style="color: #A31414">¥{{needPay}}</div> | 67 | + <div style="color: #A31414">¥{{(needPay/100).toFixed(2)}}</div> |
57 | </li> | 68 | </li> |
58 | 69 | ||
59 | </ul> | 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 | </p> | 85 | </p> |
66 | - | ||
67 | - <p>停车场停车场停车停车场</p> | ||
68 | </div> | 86 | </div> |
69 | 87 | ||
88 | + | ||
70 | <div style="margin-top: 34px" class="leftRightPadding"> | 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 | </div> | 91 | </div> |
73 | 92 | ||
74 | <!-- @touchmove.prevent 阻止默认事件,在选择时间时阻止页面也跟着滚动--> | 93 | <!-- @touchmove.prevent 阻止默认事件,在选择时间时阻止页面也跟着滚动--> |
@@ -86,12 +105,19 @@ | @@ -86,12 +105,19 @@ | ||
86 | ></mt-datetime-picker> | 105 | ></mt-datetime-picker> |
87 | </div> | 106 | </div> |
88 | 107 | ||
108 | + <!--停车场--> | ||
109 | + <mt-actionsheet | ||
110 | + :actions="parkNameList" | ||
111 | + v-model="parkNameVisible"> | ||
112 | + </mt-actionsheet> | ||
89 | 113 | ||
114 | + <!--卡类型--> | ||
90 | <mt-actionsheet | 115 | <mt-actionsheet |
91 | - :actions="actions" | ||
92 | - v-model="popupVisible"> | 116 | + :actions="cardTypeList" |
117 | + v-model="cardTypeListVisible"> | ||
93 | </mt-actionsheet> | 118 | </mt-actionsheet> |
94 | 119 | ||
120 | + <!--车牌号--> | ||
95 | <mt-actionsheet | 121 | <mt-actionsheet |
96 | :actions="carNumList" | 122 | :actions="carNumList" |
97 | v-model="carNumberVisible"> | 123 | v-model="carNumberVisible"> |
@@ -105,76 +131,371 @@ | @@ -105,76 +131,371 @@ | ||
105 | </ul> | 131 | </ul> |
106 | </mt-popup> | 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 | </div> | 160 | </div> |
109 | </template> | 161 | </template> |
110 | 162 | ||
111 | <script> | 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 | import { timestampToTime } from "../../utils/utils.js"; | 172 | import { timestampToTime } from "../../utils/utils.js"; |
113 | export default { | 173 | export default { |
114 | name: "buyCard", | 174 | name: "buyCard", |
175 | + directives: { | ||
176 | + TransferDom | ||
177 | + }, | ||
115 | data() { | 178 | data() { |
116 | return { | 179 | return { |
117 | startDate: new Date(), | 180 | startDate: new Date(), |
118 | dateVal: "", | 181 | dateVal: "", |
119 | selectedValue: "", | 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 | carNumList: [ | 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 | carNumberVisible: false, | 196 | carNumberVisible: false, |
138 | parkMoreVisible: false, | 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 | methods: { | 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 | selectData() { | 276 | selectData() { |
277 | + // this.dateVal = this.startData | ||
147 | this.$refs["datePicker"].open(); | 278 | this.$refs["datePicker"].open(); |
148 | // console.log(this.startData) | 279 | // console.log(this.startData) |
149 | // this.endDate = this.startData.setMonth(this.startData.getMonth()+1) | 280 | // this.endDate = this.startData.setMonth(this.startData.getMonth()+1) |
150 | // console.log(this.endDate) | 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 | handleConfirm() { | 304 | handleConfirm() { |
153 | console.log(this.dateVal); | 305 | console.log(this.dateVal); |
154 | this.startData = this.$utils.timestampToTime(this.dateVal); | 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 | this.carType = e.name; | 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 | clickActionCarNum(e) { | 369 | clickActionCarNum(e) { |
163 | this.carNumber = e.name; | 370 | this.carNumber = e.name; |
164 | }, | 371 | }, |
165 | addCardNum() { // 增加购买数量 | 372 | addCardNum() { // 增加购买数量 |
166 | this.cardNum++; | 373 | this.cardNum++; |
167 | - this.calcMoney() | 374 | + this.calcMoney(); |
168 | }, | 375 | }, |
169 | reduceCarNum() { // 增加购买数量 | 376 | reduceCarNum() { // 增加购买数量 |
170 | if (this.cardNum == 1) { | 377 | if (this.cardNum == 1) { |
171 | return; | 378 | return; |
172 | } | 379 | } |
173 | this.cardNum--; | 380 | this.cardNum--; |
174 | - this.calcMoney() | 381 | + this.calcMoney(); |
175 | }, | 382 | }, |
176 | calcMoney() { | 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 | filters: { | 501 | filters: { |
@@ -266,7 +587,6 @@ export default { | @@ -266,7 +587,6 @@ export default { | ||
266 | } | 587 | } |
267 | 588 | ||
268 | .park-list { | 589 | .park-list { |
269 | - | ||
270 | /*width: 80%;*/ | 590 | /*width: 80%;*/ |
271 | li { | 591 | li { |
272 | padding-left: 20px; | 592 | padding-left: 20px; |
@@ -274,4 +594,23 @@ export default { | @@ -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 | </style> | 616 | </style> |
src/views/mySelf/selfNav.vue
@@ -40,13 +40,13 @@ export default { | @@ -40,13 +40,13 @@ export default { | ||
40 | data() { | 40 | data() { |
41 | return { | 41 | return { |
42 | menuList: [ | 42 | menuList: [ |
43 | - { name: "会员卡", path: "" }, | ||
44 | - { name: "车辆管理", path: "" }, | 43 | + { name: "会员卡", path: "Cards" }, |
44 | + { name: "车辆管理", path: "myCars" }, | ||
45 | { name: "发票管理", path: "eInvoiceWrap" }, | 45 | { name: "发票管理", path: "eInvoiceWrap" }, |
46 | { name: "停车记录", path: "parkNotes" }, | 46 | { name: "停车记录", path: "parkNotes" }, |
47 | { name: "建议反馈", path: "suggestionBack" } | 47 | { name: "建议反馈", path: "suggestionBack" } |
48 | ], | 48 | ], |
49 | - webAppCode: "", | 49 | + webAppCode: "", // 071hQo0w34xoYX21CP2w3RRw7U1hQo02 |
50 | couponNum: 0, // 卡券数量 | 50 | couponNum: 0, // 卡券数量 |
51 | acctBalance: 0, // 账户余额 | 51 | acctBalance: 0, // 账户余额 |
52 | userPhone: "--",// 账户手机号 | 52 | userPhone: "--",// 账户手机号 |
@@ -57,9 +57,9 @@ export default { | @@ -57,9 +57,9 @@ export default { | ||
57 | }; | 57 | }; |
58 | }, | 58 | }, |
59 | created() { | 59 | created() { |
60 | - this.$vux.loading.show({ | ||
61 | - text: "数据加载中..." | ||
62 | - }); | 60 | + // this.$vux.loading.show({ |
61 | + // text: "数据加载中..." | ||
62 | + // }); | ||
63 | if (this.$utils.clientBrowser() == "微信") { | 63 | if (this.$utils.clientBrowser() == "微信") { |
64 | this.webAppCode = this.getCode(); | 64 | this.webAppCode = this.getCode(); |
65 | } | 65 | } |
@@ -68,7 +68,7 @@ export default { | @@ -68,7 +68,7 @@ export default { | ||
68 | let that = this; | 68 | let that = this; |
69 | if(sessionStorage.getItem("wx_openId")){ | 69 | if(sessionStorage.getItem("wx_openId")){ |
70 | this.getTokenByOpenId(sessionStorage.getItem("wx_openId")); | 70 | this.getTokenByOpenId(sessionStorage.getItem("wx_openId")); |
71 | - // this.getinfoself() | 71 | + this.getinfoself() |
72 | }else{ | 72 | }else{ |
73 | if (this.webAppCode) { | 73 | if (this.webAppCode) { |
74 | this.getopenid(); | 74 | this.getopenid(); |
@@ -126,6 +126,7 @@ export default { | @@ -126,6 +126,7 @@ export default { | ||
126 | let _token = data.data.token; | 126 | let _token = data.data.token; |
127 | console.log('getTokenByOpenId获取到的'+_token) | 127 | console.log('getTokenByOpenId获取到的'+_token) |
128 | sessionStorage.setItem("wx_Token", data.data.token); | 128 | sessionStorage.setItem("wx_Token", data.data.token); |
129 | + // alert(data.data.token) | ||
129 | sessionStorage.setItem("WXPhone", data.data.phoneNum); | 130 | sessionStorage.setItem("WXPhone", data.data.phoneNum); |
130 | that.getinfoself(); //获取用户信息 | 131 | that.getinfoself(); //获取用户信息 |
131 | } else { | 132 | } else { |
@@ -231,6 +232,9 @@ export default { | @@ -231,6 +232,9 @@ export default { | ||
231 | }); | 232 | }); |
232 | } else { | 233 | } else { |
233 | this.$vux.toast.text("请先绑定手机号", "top"); | 234 | this.$vux.toast.text("请先绑定手机号", "top"); |
235 | + this.$router.push({ | ||
236 | + path: "binDing" | ||
237 | + }); | ||
234 | } | 238 | } |
235 | } | 239 | } |
236 | } | 240 | } |