Commit a3d2beaa8c5eb40e1af47250587d8ff41f577fcc
1 parent
5638d36da2
Exists in
master
立即支付功能
Showing
7 changed files
with
723 additions
and
373 deletions
Show diff stats
src/components/CommodityCard/CommodityCard.vue
| ... | ... | @@ -47,10 +47,10 @@ export default { |
| 47 | 47 | } |
| 48 | 48 | }, |
| 49 | 49 | methods: { |
| 50 | - toGoods (id, sk_id) { | |
| 51 | - console.log('---', '../frameDetail/frameDetail?pid=' + id + '&sk_id=' + sk_id) | |
| 50 | + toGoods (id, skId) { | |
| 51 | + console.log('---', '../frameDetail/frameDetail?pid=' + id + '&sk_id=' + skId) | |
| 52 | 52 | uni.navigateTo({ |
| 53 | - url: '../frameDetail/frameDetail?pid=' + id + '&sk_id=' + sk_id, | |
| 53 | + url: '../frameDetail/frameDetail?pid=' + id + '&sk_id=' + skId, | |
| 54 | 54 | success: res => {}, |
| 55 | 55 | fail: () => {}, |
| 56 | 56 | complete: () => {}, | ... | ... |
src/pages/cart/cart.vue
| 1 | 1 | <template> |
| 2 | - <view class="content"> | |
| 3 | - <block v-if="cartList.length==0"> | |
| 2 | + <view class="content"> | |
| 3 | + <block v-if="cartList.length==0"> | |
| 4 | 4 | |
| 5 | - </block> | |
| 6 | - <block v-else> | |
| 7 | - <view class="card"> | |
| 8 | - <view class="cardHeader"> | |
| 9 | - <view v-bind:class="pIsoPen? 'partentChecked' : 'partentCheck'" | |
| 10 | - @tap="pChange(pIsoPen)"> | |
| 11 | - <span class="correct"></span> | |
| 12 | - </view> | |
| 13 | - <image src="../../static/store.png" mode="aspectFill"></image> | |
| 14 | - <text>非常戴镜</text> | |
| 15 | - </view> | |
| 5 | + </block> | |
| 6 | + <block v-else> | |
| 7 | + <view class="card"> | |
| 8 | + <view class="cardHeader"> | |
| 9 | + <view | |
| 10 | + v-bind:class="pIsoPen? 'partentChecked' : 'partentCheck'" | |
| 11 | + @tap="pChange(pIsoPen)" | |
| 12 | + > | |
| 13 | + <span class="correct"></span> | |
| 14 | + </view> | |
| 15 | + <image | |
| 16 | + src="../../static/store.png" | |
| 17 | + mode="aspectFill" | |
| 18 | + ></image> | |
| 19 | + <text>非常戴镜</text> | |
| 20 | + </view> | |
| 16 | 21 | |
| 17 | - <view class="cardBody" v-for="(item,index) in cartList" :key="item.cart_id" | |
| 18 | - @longpress="delCart(item.cart_id,index)"> | |
| 19 | - <view v-bind:class="childIsOpen[index]? 'partentChecked':'partentCheck'" | |
| 20 | - @tap="Change(childIsOpen[index],index)"> | |
| 21 | - <span class="correct"></span> | |
| 22 | - </view> | |
| 23 | - <view class="imageWrap"> | |
| 24 | - <image :src="item.img_index_url" mode="aspectFit" style="width: 188rpx;height: 168rpx;"></image> | |
| 25 | - </view> | |
| 26 | - <view class="goodInfo"> | |
| 27 | -<!-- <view class="imageWrap"> | |
| 22 | + <view | |
| 23 | + class="cardBody" | |
| 24 | + v-for="(item,index) in cartList" | |
| 25 | + :key="item.cart_id" | |
| 26 | + @longpress="delCart(item.cart_id,index)" | |
| 27 | + > | |
| 28 | + <view | |
| 29 | + v-bind:class="childIsOpen[index]? 'partentChecked':'partentCheck'" | |
| 30 | + @tap="Change(childIsOpen[index],index)" | |
| 31 | + > | |
| 32 | + <span class="correct"></span> | |
| 33 | + </view> | |
| 34 | + <view class="imageWrap"> | |
| 35 | + <image | |
| 36 | + :src="item.img_index_url" | |
| 37 | + mode="aspectFit" | |
| 38 | + style="width: 188rpx;height: 168rpx;" | |
| 39 | + ></image> | |
| 40 | + </view> | |
| 41 | + <view class="goodInfo"> | |
| 42 | + <!-- <view class="imageWrap"> | |
| 28 | 43 | <image :src="item.img_index_url" mode="aspectFit" style="width: 188rpx;height: 168rpx;"></image> |
| 29 | 44 | </view> --> |
| 30 | - <view class="infoRight"> | |
| 31 | - <view class="goodName" @tap="toGoods(item.pid,item.sk_id)">{{item.p_name}}</view> | |
| 32 | - <!-- <view class="describ"> --> | |
| 33 | - <uni-collapse accordion="true" > | |
| 34 | - <uni-collapse-item showAnimation='true' | |
| 35 | - :title="item.tag.prod_tag_fun[0].label+'/'+item.tag.prod_tag_fun[1].label+'/'+item.tag.prod_tag_fun[2].label+'...' || '暂无'" > | |
| 36 | - <text class="describ"> | |
| 37 | - <block v-for="tag in item.tag.prod_tag_fun" :key="tag.value"> | |
| 38 | - {{tag.label+` `}} | |
| 39 | - </block> | |
| 40 | - </text> | |
| 41 | -<!-- <text> | |
| 45 | + <view class="infoRight"> | |
| 46 | + <view | |
| 47 | + class="goodName" | |
| 48 | + @tap="toGoods(item.pid,item.sk_id)" | |
| 49 | + >{{item.p_name}}</view> | |
| 50 | + <!-- <view class="describ"> --> | |
| 51 | + <uni-collapse accordion="true"> | |
| 52 | + <uni-collapse-item | |
| 53 | + showAnimation='true' | |
| 54 | + :title="item.tag.prod_tag_fun[0].label+'/'+item.tag.prod_tag_fun[1].label+'/'+item.tag.prod_tag_fun[2].label+'...' || '暂无'" | |
| 55 | + > | |
| 56 | + <text class="describ"> | |
| 57 | + <block | |
| 58 | + v-for="tag in item.tag.prod_tag_fun" | |
| 59 | + :key="tag.value" | |
| 60 | + > | |
| 61 | + {{tag.label+` `}} | |
| 62 | + </block> | |
| 63 | + </text> | |
| 64 | + <!-- <text> | |
| 42 | 65 | <block v-for="tag in item.tag.prod_tag_style" :key="tag.value"> |
| 43 | 66 | {{tag.label+` `}} |
| 44 | 67 | </block> |
| 45 | 68 | </text> --> |
| 46 | - </uni-collapse-item> | |
| 47 | - </uni-collapse> | |
| 48 | - <!-- <view v-bind:class="collapseList[index]? 'icon':'iconed'"></view> --> | |
| 49 | - <!-- </view> --> | |
| 50 | - <view class="priceBox"> | |
| 51 | - <view class="price">¥{{item.nowPrice*item.num}}</view> | |
| 52 | - <text class="maxCount">(限购{{maxCount}}副)</text> | |
| 53 | - <view class="counter"> | |
| 54 | - <view class="btn" disabled="this.addDisabled" type="default" | |
| 55 | - @tap="counter(index,false,item)">-</view> | |
| 56 | - <text>{{item.num}}</text> | |
| 57 | - <view class="btn" disabled="this.desDisabled" type="default" | |
| 58 | - @tap="counter(index,true,item)">+</view> | |
| 59 | - </view> | |
| 60 | - </view> | |
| 61 | - </view> | |
| 62 | - </view> | |
| 63 | - </view> | |
| 64 | - </view> | |
| 65 | - </block> | |
| 66 | - <view class="footer"> | |
| 67 | - <view class="footerLeft">实付金额:<text>¥{{totalPrice}}</text></view> | |
| 68 | - <view class="footerRight"> | |
| 69 | - <navigator url="/pages/confirmOrder/confirmOrder" hover-class="navigator-hover"> | |
| 70 | - <view class="paybtn" >立即结算</view> | |
| 71 | - </navigator> | |
| 72 | - </view> | |
| 73 | - </view> | |
| 69 | + </uni-collapse-item> | |
| 70 | + </uni-collapse> | |
| 71 | + <!-- <view v-bind:class="collapseList[index]? 'icon':'iconed'"></view> --> | |
| 72 | + <!-- </view> --> | |
| 73 | + <view class="priceBox"> | |
| 74 | + <view class="price">¥{{item.nowPrice*item.num}}</view> | |
| 75 | + <text class="maxCount">(限购{{maxCount}}副)</text> | |
| 76 | + <view class="counter"> | |
| 77 | + <view | |
| 78 | + class="btn" | |
| 79 | + disabled="this.addDisabled" | |
| 80 | + type="default" | |
| 81 | + @tap="counter(index,false,item)" | |
| 82 | + >-</view> | |
| 83 | + <text>{{item.num}}</text> | |
| 84 | + <view | |
| 85 | + class="btn" | |
| 86 | + disabled="this.desDisabled" | |
| 87 | + type="default" | |
| 88 | + @tap="counter(index,true,item)" | |
| 89 | + >+</view> | |
| 90 | + </view> | |
| 91 | + </view> | |
| 92 | + </view> | |
| 93 | + </view> | |
| 94 | + </view> | |
| 95 | + </view> | |
| 96 | + </block> | |
| 97 | + <view class="footer"> | |
| 98 | + <view class="footerLeft">实付金额:<text>¥{{totalPrice}}</text></view> | |
| 99 | + <view class="footerRight"> | |
| 100 | + <navigator | |
| 101 | + url="/pages/confirmOrder/confirmOrder" | |
| 102 | + hover-class="navigator-hover" | |
| 103 | + > | |
| 104 | + <view class="paybtn">立即结算</view> | |
| 105 | + </navigator> | |
| 106 | + </view> | |
| 107 | + </view> | |
| 74 | 108 | |
| 75 | - </view> | |
| 109 | + </view> | |
| 76 | 110 | </template> |
| 77 | 111 | |
| 78 | 112 | <script> |
| ... | ... | @@ -87,7 +121,7 @@ export default { |
| 87 | 121 | totalPrice: 0, |
| 88 | 122 | pIsoPen: false, |
| 89 | 123 | // childIsOpen:[], |
| 90 | - maxCount: 20 | |
| 124 | + maxCount: 20, | |
| 91 | 125 | } |
| 92 | 126 | }, |
| 93 | 127 | computed: { |
| ... | ... | @@ -104,34 +138,34 @@ export default { |
| 104 | 138 | } |
| 105 | 139 | console.log('this.childisOPne===>', temp) |
| 106 | 140 | return temp |
| 107 | - } | |
| 141 | + }, | |
| 108 | 142 | }, |
| 109 | 143 | onLoad: function() { |
| 110 | 144 | // store.dispatch('cart/addCart', { |
| 111 | 145 | // uid: this.$store.state.user.userInfo.uid, |
| 112 | - // openid: this.$store.state.user.userInfo.openid, | |
| 113 | - // mp_id: 7, | |
| 114 | - // sk_id: 7, | |
| 115 | - // num: 1, | |
| 116 | - // pid: 8, | |
| 117 | - // price: 128, | |
| 118 | - // checkedSKU:{}, | |
| 146 | + // openid: this.$store.state.user.userInfo.openid, | |
| 147 | + // mp_id: 7, | |
| 148 | + // sk_id: 7, | |
| 149 | + // num: 1, | |
| 150 | + // pid: 8, | |
| 151 | + // price: 128, | |
| 152 | + // checkedSKU:{}, | |
| 119 | 153 | // }) |
| 120 | 154 | store.dispatch('cart/getCartList', { |
| 121 | - uid: this.$store.state.user.userInfo.uid // 用户id | |
| 155 | + uid: this.$store.state.user.userInfo.uid, // 用户id | |
| 122 | 156 | }) |
| 123 | 157 | }, |
| 124 | 158 | |
| 125 | 159 | methods: { |
| 126 | 160 | |
| 127 | 161 | toGoods(id, sk_id) { |
| 128 | - console.log('cart-list', this.$store.state.cart.cartList); | |
| 129 | - console.log('---', '../frameDetail/frameDetail?pid=' + id +'&sk_id='+sk_id) | |
| 162 | + console.log('cart-list', this.$store.state.cart.cartList) | |
| 163 | + console.log('---', '../frameDetail/frameDetail?pid=' + id + '&sk_id=' + sk_id) | |
| 130 | 164 | uni.navigateTo({ |
| 131 | - url: '../frameDetail/frameDetail?pid=' + id+'&sk_id='+sk_id, | |
| 165 | + url: '../frameDetail/frameDetail?pid=' + id + '&sk_id=' + sk_id, | |
| 132 | 166 | success: res => {}, |
| 133 | 167 | fail: () => {}, |
| 134 | - complete: () => {} | |
| 168 | + complete: () => {}, | |
| 135 | 169 | }) |
| 136 | 170 | // uni.navigateTo({ |
| 137 | 171 | // url: '../frameDetail/frameDetail?oderId=' + id, |
| ... | ... | @@ -181,9 +215,9 @@ export default { |
| 181 | 215 | counter(index, isadd, item) { |
| 182 | 216 | // console.log('===>>counter ===>num',num) |
| 183 | 217 | // console.log('===>>counter ===>isadd',isadd) |
| 184 | - console.log('item=====>',item) | |
| 185 | - console.log('num=====>',item.num) | |
| 186 | - let nums = parseInt(item.num) | |
| 218 | + console.log('item=====>', item) | |
| 219 | + console.log('num=====>', item.num) | |
| 220 | + const nums = parseInt(item.num) | |
| 187 | 221 | if (isadd) { |
| 188 | 222 | if (nums >= this.maxCount) { |
| 189 | 223 | this.addDisabled = true |
| ... | ... | @@ -198,14 +232,14 @@ export default { |
| 198 | 232 | openid: this.$store.state.user.userInfo.openid, |
| 199 | 233 | mp_id: item.mp_id, |
| 200 | 234 | sk_id: item.sk_id, |
| 201 | - price: item.nowPrice, | |
| 202 | - pid: item.pid, | |
| 235 | + price: item.nowPrice, | |
| 236 | + pid: item.pid, | |
| 203 | 237 | num: nums + 1, |
| 204 | - cart_id: item.cart_id, | |
| 238 | + cart_id: item.cart_id, | |
| 205 | 239 | args: { |
| 206 | 240 | index: index, |
| 207 | - isadd: isadd | |
| 208 | - } | |
| 241 | + isadd: isadd, | |
| 242 | + }, | |
| 209 | 243 | }) |
| 210 | 244 | this.addDisabled = false |
| 211 | 245 | } |
| ... | ... | @@ -216,21 +250,21 @@ export default { |
| 216 | 250 | this.desDisabled = false |
| 217 | 251 | // post 请求修改相关参数 |
| 218 | 252 | if (this.childIsOpen[index]) { |
| 219 | - this.totalPrice = this.totalPrice - this.$store.state.cart.cartList[index].nowPrice | |
| 253 | + this.totalPrice = this.totalPrice - this.$store.state.cart.cartList[index].nowPrice | |
| 220 | 254 | } |
| 221 | 255 | store.dispatch('cart/modiCart', { |
| 222 | 256 | uid: this.$store.state.user.userInfo.uid, |
| 223 | 257 | openid: this.$store.state.user.userInfo.openid, |
| 224 | 258 | mp_id: item.mp_id, |
| 225 | 259 | sk_id: item.sk_id, |
| 226 | - price: item.nowPrice, | |
| 227 | - pid: item.pid, | |
| 260 | + price: item.nowPrice, | |
| 261 | + pid: item.pid, | |
| 228 | 262 | num: nums - 1, |
| 229 | - cart_id: item.cart_id, | |
| 263 | + cart_id: item.cart_id, | |
| 230 | 264 | args: { |
| 231 | 265 | index: index, |
| 232 | - isadd: isadd | |
| 233 | - } | |
| 266 | + isadd: isadd, | |
| 267 | + }, | |
| 234 | 268 | }) |
| 235 | 269 | this.desDisabled = true |
| 236 | 270 | } |
| ... | ... | @@ -282,8 +316,8 @@ export default { |
| 282 | 316 | // console.log('delcart------>cart_id',cart_id) |
| 283 | 317 | // console.log('cartlist====>delcart',this.$store.state.cart.cartList) |
| 284 | 318 | // console.log('delcart======>index',index) |
| 285 | - const uid=this.$store.state.user.userInfo.uid | |
| 286 | - const openid=this.$store.state.user.userInfo.openid | |
| 319 | + const uid = this.$store.state.user.userInfo.uid | |
| 320 | + const openid = this.$store.state.user.userInfo.openid | |
| 287 | 321 | uni.showModal({ |
| 288 | 322 | title: '是否删除该商品', |
| 289 | 323 | // content: '是否删除该商品', |
| ... | ... | @@ -294,261 +328,259 @@ export default { |
| 294 | 328 | uid: uid, |
| 295 | 329 | openid: openid, |
| 296 | 330 | cart_id: cart_id, // 要修改的购物车id |
| 297 | - arg: index // 由于action 传参是能接收两参数,因此将index放入对象 | |
| 331 | + arg: index, // 由于action 传参是能接收两参数,因此将index放入对象 | |
| 298 | 332 | }) |
| 299 | 333 | console.log('用户点击确定') |
| 300 | 334 | } |
| 301 | - } | |
| 335 | + }, | |
| 302 | 336 | }) |
| 303 | - } | |
| 304 | - } | |
| 337 | + }, | |
| 338 | + }, | |
| 305 | 339 | } |
| 306 | 340 | </script> |
| 307 | 341 | |
| 308 | 342 | <style lang="scss"> |
| 309 | 343 | .content { |
| 310 | - min-height: 100vh; | |
| 311 | - background-color: #f2f2f2; | |
| 312 | - display: flex; | |
| 313 | - flex-direction: column; | |
| 314 | - align-items: center; | |
| 315 | - justify-content: space-between; | |
| 316 | - padding: 20rpx 40rpx; | |
| 317 | - box-sizing: border-box; | |
| 318 | - | |
| 319 | - .partentCheck{ | |
| 320 | - width: 16px; | |
| 321 | - height: 16px; | |
| 322 | - border-radius: 22px; | |
| 323 | - border: 1px solid #CFCFCF; | |
| 324 | - background-color: #FFFFFF; | |
| 325 | - margin: 6px; | |
| 326 | - } | |
| 327 | - .partentChecked{ | |
| 328 | - width: 18px; | |
| 329 | - height: 18px; | |
| 330 | - border-radius: 22px; | |
| 331 | - background-color: #FF6B4A; | |
| 332 | - margin: 6px; | |
| 333 | - .correct { | |
| 334 | - display: inline-block; | |
| 335 | - position: relative; | |
| 336 | - width: 10rpx; | |
| 337 | - height: 2rpx; | |
| 338 | - background: #FFFFFF; | |
| 339 | - line-height: 0; | |
| 340 | - font-size: 0; | |
| 341 | - position: relative; | |
| 342 | - top: -7px; | |
| 343 | - left: 4px; | |
| 344 | - -webkit-transform: rotate(45deg); | |
| 345 | - } | |
| 346 | - .correct:after { | |
| 347 | - content: '/'; | |
| 348 | - display: block; | |
| 349 | - width: 16rpx; | |
| 350 | - height: 2rpx; | |
| 351 | - background: #FFFFFF; | |
| 352 | - -webkit-transform: rotate(-90deg) translateY(50%) translateX(50%); | |
| 353 | - } | |
| 354 | - } | |
| 355 | - | |
| 356 | - .card{ | |
| 357 | - background-color: #FFFFFF; | |
| 358 | - border-radius: 16rpx; | |
| 359 | - box-sizing: border-box; | |
| 360 | - padding: 36rpx 36rpx 36rpx 18rpx; | |
| 361 | - display: flex; | |
| 362 | - flex-direction: column; | |
| 363 | - align-items: center; | |
| 364 | - justify-content: space-between; | |
| 365 | - margin-bottom: 180rpx; | |
| 366 | - .cardHeader{ | |
| 367 | - width: 100%; | |
| 368 | - height: 36rpx; | |
| 369 | - display: flex; | |
| 370 | - align-items: center; | |
| 371 | - justify-content: flex-start; | |
| 372 | - margin-bottom: 20rpx; | |
| 373 | - image{ | |
| 374 | - height: 32rpx; | |
| 375 | - width: 32rpx; | |
| 376 | - padding-left: 6px; | |
| 377 | - padding-right: 10px; | |
| 378 | - } | |
| 379 | - text{ | |
| 380 | - // font-family: PingFangSC-Regular; | |
| 381 | - font-size: 14px; | |
| 382 | - color: #333333; | |
| 383 | - letter-spacing: -0.26px; | |
| 384 | - } | |
| 385 | - } | |
| 386 | - .cardBody{ | |
| 387 | - width: 100%; | |
| 388 | - min-height: 300rpx; | |
| 389 | - display: flex; | |
| 390 | - align-items: center; | |
| 391 | - justify-content: space-between; | |
| 392 | - .goodInfo{ | |
| 393 | - width: 390rpx; | |
| 394 | - display: flex; | |
| 395 | - flex-direction: row; | |
| 396 | - justify-content: flex-start; | |
| 397 | - padding-left: 6px; | |
| 344 | + min-height: 100vh; | |
| 345 | + background-color: #f2f2f2; | |
| 346 | + display: flex; | |
| 347 | + flex-direction: column; | |
| 348 | + align-items: center; | |
| 349 | + justify-content: space-between; | |
| 350 | + padding: 20rpx 40rpx; | |
| 351 | + box-sizing: border-box; | |
| 398 | 352 | |
| 399 | - .imageWrap{ | |
| 400 | - height: 188rpx; | |
| 401 | - width: 188rpx; | |
| 402 | - margin-right: 28rpx; | |
| 353 | + .partentCheck { | |
| 354 | + width: 16px; | |
| 355 | + height: 16px; | |
| 356 | + border-radius: 22px; | |
| 357 | + border: 1px solid #cfcfcf; | |
| 358 | + background-color: #ffffff; | |
| 359 | + margin: 6px; | |
| 360 | + } | |
| 361 | + .partentChecked { | |
| 362 | + width: 18px; | |
| 363 | + height: 18px; | |
| 364 | + border-radius: 22px; | |
| 365 | + background-color: #ff6b4a; | |
| 366 | + margin: 6px; | |
| 367 | + .correct { | |
| 368 | + display: inline-block; | |
| 369 | + position: relative; | |
| 370 | + width: 10rpx; | |
| 371 | + height: 2rpx; | |
| 372 | + background: #ffffff; | |
| 373 | + line-height: 0; | |
| 374 | + font-size: 0; | |
| 375 | + position: relative; | |
| 376 | + top: -7px; | |
| 377 | + left: 4px; | |
| 378 | + -webkit-transform: rotate(45deg); | |
| 379 | + } | |
| 380 | + .correct:after { | |
| 381 | + content: "/"; | |
| 382 | + display: block; | |
| 383 | + width: 16rpx; | |
| 384 | + height: 2rpx; | |
| 385 | + background: #ffffff; | |
| 386 | + -webkit-transform: rotate(-90deg) translateY(50%) translateX(50%); | |
| 387 | + } | |
| 388 | + } | |
| 403 | 389 | |
| 404 | - image{ | |
| 405 | - border-radius: 4px; | |
| 406 | - height: 188rpx; | |
| 407 | - width: 188rpx; | |
| 408 | - } | |
| 409 | - } | |
| 410 | - .infoRight{ | |
| 411 | - display: flex; | |
| 412 | - flex-direction: column; | |
| 413 | - align-items: flex-start; | |
| 414 | - justify-content: space-between; | |
| 415 | - min-height: 240rpx; | |
| 416 | - .goodName{ | |
| 417 | - display: -webkit-box; | |
| 418 | - -webkit-box-orient: vertical; | |
| 419 | - -webkit-line-clamp: 2; | |
| 420 | - text-align: justify; | |
| 421 | - overflow: hidden; | |
| 422 | - font-size: 28rpx; | |
| 423 | - color: #333333; | |
| 424 | - } | |
| 425 | - .describ{ | |
| 426 | - width: 100%; | |
| 427 | - // min-height: 80rpx; | |
| 428 | - // box-sizing: border-box; | |
| 429 | - // padding: 10rpx; | |
| 430 | - font-size: 20rpx; | |
| 431 | - letter-spacing: -0.23px; | |
| 432 | - text-align: justify; | |
| 433 | - color: #999999; | |
| 434 | - // background: #F9F9F9; | |
| 435 | - // display: flex; | |
| 436 | - // justify-content: center; | |
| 437 | - // align-items: center; | |
| 438 | - // text{ | |
| 439 | - // text-overflow: -o-ellipsis-lastline; | |
| 440 | - // overflow: hidden; | |
| 441 | - // text-overflow: ellipsis; | |
| 442 | - // display: -webkit-box; | |
| 443 | - // -webkit-line-clamp: 2; | |
| 444 | - // line-clamp: 2; | |
| 445 | - // -webkit-box-orient: vertical; | |
| 446 | - // } | |
| 447 | - // .icon { | |
| 448 | - // width: 0; | |
| 449 | - // height: 0; | |
| 450 | - // border-left: 5px transparent; | |
| 451 | - // border-right: 5px transparent; | |
| 452 | - // border-top: 5px #979797; | |
| 453 | - // border-bottom: 0 transparent; | |
| 454 | - // border-style: solid; | |
| 455 | - // position: relative; | |
| 456 | - // margin-left: 10px; | |
| 457 | - // // transform: scaleY(-1); | |
| 458 | - // } | |
| 459 | - // .icon::after{ | |
| 460 | - // content: ''; | |
| 461 | - // position: absolute; | |
| 462 | - // top: -6.5px; | |
| 463 | - // left: -5px; | |
| 464 | - // border-left: 5px transparent; | |
| 465 | - // border-right: 5px transparent; | |
| 466 | - // border-top: 5px #FFFFFF; | |
| 467 | - // border-bottom: 0 transparent; | |
| 468 | - // border-style: solid; | |
| 469 | - // } | |
| 470 | - } | |
| 471 | - .priceBox{ | |
| 472 | - display: flex; | |
| 473 | - justify-content: space-between; | |
| 474 | - align-items: center; | |
| 475 | - // margin-top: 26px; | |
| 476 | - width: 100%; | |
| 477 | - font-size: 14px; | |
| 478 | - color: #999999; | |
| 479 | - .maxCount{ | |
| 480 | - color: #999999; | |
| 481 | - font-size: 24rpx; | |
| 482 | - } | |
| 483 | - .price{ | |
| 484 | - color: #FF6B4A; | |
| 485 | - font-size: 28rpx; | |
| 486 | - } | |
| 487 | - .counter{ | |
| 488 | - display: flex; | |
| 489 | - flex-direction: row; | |
| 490 | - justify-content: space-between; | |
| 491 | - align-items: center; | |
| 492 | - font-size: 28rpx; | |
| 493 | - color: #333333; | |
| 494 | - width: 122rpx; | |
| 495 | - .btn{ | |
| 496 | - display: flex; | |
| 497 | - justify-content: center; | |
| 498 | - line-height: 32rpx; | |
| 499 | - height: 32rpx; | |
| 500 | - width: 32rpx; | |
| 501 | - background-color: #F2F2F2; | |
| 502 | - color: #CFCFCF; | |
| 503 | - } | |
| 504 | - } | |
| 505 | - } | |
| 506 | - } | |
| 507 | - } | |
| 508 | - } | |
| 509 | - } | |
| 390 | + .card { | |
| 391 | + background-color: #ffffff; | |
| 392 | + border-radius: 16rpx; | |
| 393 | + box-sizing: border-box; | |
| 394 | + padding: 36rpx 36rpx 36rpx 18rpx; | |
| 395 | + display: flex; | |
| 396 | + flex-direction: column; | |
| 397 | + align-items: center; | |
| 398 | + justify-content: space-between; | |
| 399 | + margin-bottom: 180rpx; | |
| 400 | + .cardHeader { | |
| 401 | + width: 100%; | |
| 402 | + height: 36rpx; | |
| 403 | + display: flex; | |
| 404 | + align-items: center; | |
| 405 | + justify-content: flex-start; | |
| 406 | + margin-bottom: 20rpx; | |
| 407 | + image { | |
| 408 | + height: 32rpx; | |
| 409 | + width: 32rpx; | |
| 410 | + padding-left: 6px; | |
| 411 | + padding-right: 10px; | |
| 412 | + } | |
| 413 | + text { | |
| 414 | + // font-family: PingFangSC-Regular; | |
| 415 | + font-size: 14px; | |
| 416 | + color: #333333; | |
| 417 | + letter-spacing: -0.26px; | |
| 418 | + } | |
| 419 | + } | |
| 420 | + .cardBody { | |
| 421 | + width: 100%; | |
| 422 | + min-height: 300rpx; | |
| 423 | + display: flex; | |
| 424 | + align-items: center; | |
| 425 | + justify-content: space-between; | |
| 426 | + .goodInfo { | |
| 427 | + width: 390rpx; | |
| 428 | + display: flex; | |
| 429 | + flex-direction: row; | |
| 430 | + justify-content: flex-start; | |
| 431 | + padding-left: 6px; | |
| 510 | 432 | |
| 511 | - .footer{ | |
| 512 | - position: fixed; | |
| 513 | - left: 0; | |
| 514 | - bottom: 0px; | |
| 515 | - height: 112rpx; | |
| 516 | - width: 100%; | |
| 517 | - background-color: #FFFFFF; | |
| 518 | - font-size: 16px; | |
| 519 | - display: flex; | |
| 520 | - justify-content: space-between; | |
| 521 | - align-items: center; | |
| 522 | - .footerLeft{ | |
| 523 | - display: flex; | |
| 524 | - justify-content: center; | |
| 525 | - align-items: center; | |
| 526 | - width: 50%; | |
| 527 | - color: #333333; | |
| 528 | - text{ | |
| 529 | - color: #FF6B4A; | |
| 530 | - } | |
| 531 | - } | |
| 532 | - .footerRight{ | |
| 533 | - display: flex; | |
| 534 | - justify-content: flex-end; | |
| 535 | - align-items: center; | |
| 536 | - width: 50%; | |
| 537 | - margin-right: 26rpx; | |
| 538 | - .paybtn{ | |
| 539 | - display: flex; | |
| 540 | - justify-content: center; | |
| 541 | - align-items: center; | |
| 542 | - background: #FF6B4A; | |
| 543 | - border-radius: 20px; | |
| 544 | - border-radius: 20px; | |
| 545 | - color: #FFFFFF; | |
| 546 | - width: 204rpx; | |
| 547 | - height: 80rpx; | |
| 548 | - } | |
| 549 | - } | |
| 433 | + .imageWrap { | |
| 434 | + height: 188rpx; | |
| 435 | + width: 188rpx; | |
| 436 | + margin-right: 28rpx; | |
| 550 | 437 | |
| 551 | - } | |
| 552 | - } | |
| 438 | + image { | |
| 439 | + border-radius: 4px; | |
| 440 | + height: 188rpx; | |
| 441 | + width: 188rpx; | |
| 442 | + } | |
| 443 | + } | |
| 444 | + .infoRight { | |
| 445 | + display: flex; | |
| 446 | + flex-direction: column; | |
| 447 | + align-items: flex-start; | |
| 448 | + justify-content: space-between; | |
| 449 | + min-height: 240rpx; | |
| 450 | + .goodName { | |
| 451 | + display: -webkit-box; | |
| 452 | + -webkit-box-orient: vertical; | |
| 453 | + -webkit-line-clamp: 2; | |
| 454 | + text-align: justify; | |
| 455 | + overflow: hidden; | |
| 456 | + font-size: 28rpx; | |
| 457 | + color: #333333; | |
| 458 | + } | |
| 459 | + .describ { | |
| 460 | + width: 100%; | |
| 461 | + // min-height: 80rpx; | |
| 462 | + // box-sizing: border-box; | |
| 463 | + // padding: 10rpx; | |
| 464 | + font-size: 20rpx; | |
| 465 | + letter-spacing: -0.23px; | |
| 466 | + text-align: justify; | |
| 467 | + color: #999999; | |
| 468 | + // background: #F9F9F9; | |
| 469 | + // display: flex; | |
| 470 | + // justify-content: center; | |
| 471 | + // align-items: center; | |
| 472 | + // text{ | |
| 473 | + // text-overflow: -o-ellipsis-lastline; | |
| 474 | + // overflow: hidden; | |
| 475 | + // text-overflow: ellipsis; | |
| 476 | + // display: -webkit-box; | |
| 477 | + // -webkit-line-clamp: 2; | |
| 478 | + // line-clamp: 2; | |
| 479 | + // -webkit-box-orient: vertical; | |
| 480 | + // } | |
| 481 | + // .icon { | |
| 482 | + // width: 0; | |
| 483 | + // height: 0; | |
| 484 | + // border-left: 5px transparent; | |
| 485 | + // border-right: 5px transparent; | |
| 486 | + // border-top: 5px #979797; | |
| 487 | + // border-bottom: 0 transparent; | |
| 488 | + // border-style: solid; | |
| 489 | + // position: relative; | |
| 490 | + // margin-left: 10px; | |
| 491 | + // // transform: scaleY(-1); | |
| 492 | + // } | |
| 493 | + // .icon::after{ | |
| 494 | + // content: ''; | |
| 495 | + // position: absolute; | |
| 496 | + // top: -6.5px; | |
| 497 | + // left: -5px; | |
| 498 | + // border-left: 5px transparent; | |
| 499 | + // border-right: 5px transparent; | |
| 500 | + // border-top: 5px #FFFFFF; | |
| 501 | + // border-bottom: 0 transparent; | |
| 502 | + // border-style: solid; | |
| 503 | + // } | |
| 504 | + } | |
| 505 | + .priceBox { | |
| 506 | + display: flex; | |
| 507 | + justify-content: space-between; | |
| 508 | + align-items: center; | |
| 509 | + // margin-top: 26px; | |
| 510 | + width: 100%; | |
| 511 | + font-size: 14px; | |
| 512 | + color: #999999; | |
| 513 | + .maxCount { | |
| 514 | + color: #999999; | |
| 515 | + font-size: 24rpx; | |
| 516 | + } | |
| 517 | + .price { | |
| 518 | + color: #ff6b4a; | |
| 519 | + font-size: 28rpx; | |
| 520 | + } | |
| 521 | + .counter { | |
| 522 | + display: flex; | |
| 523 | + flex-direction: row; | |
| 524 | + justify-content: space-between; | |
| 525 | + align-items: center; | |
| 526 | + font-size: 28rpx; | |
| 527 | + color: #333333; | |
| 528 | + width: 122rpx; | |
| 529 | + .btn { | |
| 530 | + display: flex; | |
| 531 | + justify-content: center; | |
| 532 | + line-height: 32rpx; | |
| 533 | + height: 32rpx; | |
| 534 | + width: 32rpx; | |
| 535 | + background-color: #f2f2f2; | |
| 536 | + color: #cfcfcf; | |
| 537 | + } | |
| 538 | + } | |
| 539 | + } | |
| 540 | + } | |
| 541 | + } | |
| 542 | + } | |
| 543 | + } | |
| 553 | 544 | |
| 545 | + .footer { | |
| 546 | + position: fixed; | |
| 547 | + left: 0; | |
| 548 | + bottom: 0px; | |
| 549 | + height: 112rpx; | |
| 550 | + width: 100%; | |
| 551 | + background-color: #ffffff; | |
| 552 | + font-size: 16px; | |
| 553 | + display: flex; | |
| 554 | + justify-content: space-between; | |
| 555 | + align-items: center; | |
| 556 | + .footerLeft { | |
| 557 | + display: flex; | |
| 558 | + justify-content: center; | |
| 559 | + align-items: center; | |
| 560 | + width: 50%; | |
| 561 | + color: #333333; | |
| 562 | + text { | |
| 563 | + color: #ff6b4a; | |
| 564 | + } | |
| 565 | + } | |
| 566 | + .footerRight { | |
| 567 | + display: flex; | |
| 568 | + justify-content: flex-end; | |
| 569 | + align-items: center; | |
| 570 | + width: 50%; | |
| 571 | + margin-right: 26rpx; | |
| 572 | + .paybtn { | |
| 573 | + display: flex; | |
| 574 | + justify-content: center; | |
| 575 | + align-items: center; | |
| 576 | + background: #ff6b4a; | |
| 577 | + border-radius: 20px; | |
| 578 | + border-radius: 20px; | |
| 579 | + color: #ffffff; | |
| 580 | + width: 204rpx; | |
| 581 | + height: 80rpx; | |
| 582 | + } | |
| 583 | + } | |
| 584 | + } | |
| 585 | +} | |
| 554 | 586 | </style> | ... | ... |
src/pages/confirmOrder/confirmOrder.vue
| ... | ... | @@ -62,8 +62,8 @@ |
| 62 | 62 | <text class="remarks">支持7天无理由退货 顺丰发货</text> |
| 63 | 63 | <view class="priceBox"> |
| 64 | 64 | <view class="price">¥{{Number(skuInfo.real_price) * count}}<text class="originCost"> |
| 65 | - ¥{{parseInt(skuInfo.real_price * (1 + Number(skuInfo.discount) / 100))}} | |
| 66 | - </text></view> | |
| 65 | + ¥{{parseInt(skuInfo.real_price * (1 + Number(skuInfo.discount) / 100))}} | |
| 66 | + </text></view> | |
| 67 | 67 | <view class="counter"> |
| 68 | 68 | <view |
| 69 | 69 | class="btn" |
| ... | ... | @@ -82,12 +82,13 @@ |
| 82 | 82 | </view> |
| 83 | 83 | </view> |
| 84 | 84 | <view class="infoBottom"> |
| 85 | - <view class="norm">规格 <text > | |
| 86 | - <!-- 长度超出变省略号未做 --> | |
| 87 | - <block | |
| 88 | - v-for="(item, index) in current" | |
| 89 | - :key="index" | |
| 90 | - >{{attrList[index].attr[item].name}}<block v-if="index !== current.length -1">/</block></block> | |
| 85 | + <view class="norm">规格 <text> | |
| 86 | + <!-- 长度超出变省略号未做 --> | |
| 87 | + <block | |
| 88 | + v-for="(item, index) in current" | |
| 89 | + :key="index" | |
| 90 | + >{{attrList[index].attr[item].name}}<block v-if="index !== current.length -1">/</block> | |
| 91 | + </block> | |
| 91 | 92 | </text></view> |
| 92 | 93 | <view class="shippingMethod">配送方式 <text>快递</text></view> |
| 93 | 94 | <view class="message">买家留言 |
| ... | ... | @@ -171,6 +172,7 @@ |
| 171 | 172 | |
| 172 | 173 | <script> |
| 173 | 174 | import store from '@/store' |
| 175 | +import MD5Util from '../../utils/md5' | |
| 174 | 176 | |
| 175 | 177 | export default { |
| 176 | 178 | data() { |
| ... | ... | @@ -248,6 +250,9 @@ export default { |
| 248 | 250 | }, |
| 249 | 251 | // 下单 |
| 250 | 252 | orderBuild() { |
| 253 | + uni.showLoading({ | |
| 254 | + title: '支付中', | |
| 255 | + }) | |
| 251 | 256 | console.log('this', this.$store.state) |
| 252 | 257 | const { sk_id_arr: skId, mp_id: mpId } = this.$store.state.order.param |
| 253 | 258 | store.dispatch('order/buyNow', { |
| ... | ... | @@ -268,6 +273,8 @@ export default { |
| 268 | 273 | console.log('pay', res) |
| 269 | 274 | const { data, exKeyName: keyName } = res |
| 270 | 275 | const uid = uni.getStorageSync('uid') |
| 276 | + const timeStamp = new Date().getTime().toString() | |
| 277 | + const nonceStr = 'asfafasfasfasfasf' | |
| 271 | 278 | const fieldSet = { |
| 272 | 279 | openid: this.$store.state.user.userInfo.openid, |
| 273 | 280 | uid: this.$store.state.user.userInfo.uid, |
| ... | ... | @@ -275,16 +282,55 @@ export default { |
| 275 | 282 | payCate: 2020, |
| 276 | 283 | payMoney: Number(this.skuInfo.real_price) * this.count * 100, |
| 277 | 284 | payWoodId: `fcdj-${uid}-${keyName}`, |
| 278 | - nonceStr: 'asfafasfasfasfasf', | |
| 285 | + payWoodDesc: '在【非常戴镜】的微信付款凭证', | |
| 286 | + nonceStr, | |
| 279 | 287 | signType: 'MD5', |
| 280 | 288 | app_uid: 2020, |
| 281 | - timeStamp: new Date().getTime().toString(), | |
| 282 | - billInfo: JSON.stringify(data), | |
| 289 | + timeStamp, | |
| 283 | 290 | keyname: keyName, |
| 291 | + billInfo: JSON.stringify(data), | |
| 284 | 292 | } |
| 285 | 293 | console.log('fieldSet', fieldSet) |
| 286 | - store.dispatch('order/pay', fieldSet).then((res) => { | |
| 287 | - console.log('res', res) | |
| 294 | + store.dispatch('order/pay', fieldSet).then(({ data, data2, pay_id: payId }) => { | |
| 295 | + if (data.return_code === 'SUCCESS' && data.result_code === 'SUCCESS') { | |
| 296 | + const stringA = `appId=wx115b25aa396d27ac&nonceStr=${nonceStr}&package=prepay_id=${data.prepay_id}&signType=MD5&timeStamp=${timeStamp}` | |
| 297 | + const stringSignTemp = stringA + '&key=NewMoney2017hatemydaddy123456789' | |
| 298 | + uni.requestPayment({ | |
| 299 | + appId: data.appid, | |
| 300 | + timeStamp, | |
| 301 | + nonceStr, | |
| 302 | + total_fee: Number(this.skuInfo.real_price) * this.count * 100, | |
| 303 | + package: `prepay_id=${data.prepay_id}`, | |
| 304 | + signType: 'MD5', | |
| 305 | + paySign: MD5Util.MD5(stringSignTemp).toUpperCase(), | |
| 306 | + success: (res) => { | |
| 307 | + uni.showModal({ | |
| 308 | + content: '支付成功', | |
| 309 | + showCancel: false, | |
| 310 | + }) | |
| 311 | + console.log('res-----支付成功', res) | |
| 312 | + uni.reLaunch({ | |
| 313 | + url: `../myOrderPaying/myOrderPaying?payId=${payId}&state=1&ispay=1`, | |
| 314 | + }) | |
| 315 | + }, | |
| 316 | + fail: (res) => { | |
| 317 | + uni.showModal({ | |
| 318 | + content: '支付失败', | |
| 319 | + showCancel: false, | |
| 320 | + }) | |
| 321 | + console.log('res------支付失败', res) | |
| 322 | + uni.reLaunch({ | |
| 323 | + url: `../myOrderPaying/myOrderPaying?payId=${payId}&state=0&ispay=1`, | |
| 324 | + }) | |
| 325 | + }, | |
| 326 | + complete: () => { | |
| 327 | + uni.hideLoading() | |
| 328 | + }, | |
| 329 | + }) | |
| 330 | + } else { | |
| 331 | + console.log('支付失败') | |
| 332 | + uni.hideLoading() | |
| 333 | + } | |
| 288 | 334 | }) |
| 289 | 335 | }, |
| 290 | 336 | }, | ... | ... |
src/pages/frameDetail/frameDetail.vue
| ... | ... | @@ -382,12 +382,12 @@ export default { |
| 382 | 382 | }, |
| 383 | 383 | } |
| 384 | 384 | }, |
| 385 | - onLoad: function ({ pid, sk_id }) { | |
| 385 | + onLoad: function ({ pid, sk_id: skId }) { | |
| 386 | 386 | this.pid = pid |
| 387 | 387 | // console.log('sk_id=====>',sk_id) |
| 388 | 388 | store.dispatch('read/fetch', { |
| 389 | 389 | pid, |
| 390 | - sk_id, | |
| 390 | + sk_id: skId, | |
| 391 | 391 | }).then(() => { |
| 392 | 392 | this.parameter[0].slength = `${this.goodInfo.frame_width}mm` |
| 393 | 393 | this.parameter[1].slength = `${this.goodInfo.glass_width}mm` |
| ... | ... | @@ -397,7 +397,7 @@ export default { |
| 397 | 397 | this.parameter[5].slength = `${this.goodInfo.weight}mm` |
| 398 | 398 | this.tag = this.goodInfo.tag |
| 399 | 399 | this.test = this.goodInfo.prodIntro1 |
| 400 | - this.test = this.test.replace(/\<img/gi, '<img style="max-width:100%;height:auto" ') | |
| 400 | + this.test = this.test.replace(/\<img/gi, '<img style="max-width:100%;height:auto"') | |
| 401 | 401 | // addCart |
| 402 | 402 | this.addCartList.price = this.goodInfo.p_sale_price |
| 403 | 403 | this.addCartList.sk_id = this.goodInfo.skuList[0].sk_id | ... | ... |
src/pages/myOrder/components/OrderCard.vue
| ... | ... | @@ -9,10 +9,10 @@ |
| 9 | 9 | <text class="orderType" v-if="status == '2'||status == '3'">已完成</text> |
| 10 | 10 | <!-- <text class="orderType" v-if="status == '3'">已评价</text> --> |
| 11 | 11 | </view> |
| 12 | - <view class="orderCardInfo" v-for="(orderInfo) in orderInfoList.list" :key="orderInfo"> | |
| 12 | + <view class="orderCardInfo" v-for="(orderInfo, index) in orderInfoList.list" :key="index"> | |
| 13 | 13 | <image :src="orderInfo.imgUrl" mode="aspectFill"></image> |
| 14 | 14 | <view class="infoText"> |
| 15 | - <view class="orderName">{{orderInfo.p_name}}</view> | |
| 15 | + <view class="orderName">{{orderInfo[0].p_name}}</view> | |
| 16 | 16 | <view class="orderDescrib">{{orderInfo.p_name}}</view> |
| 17 | 17 | <view class="infoText-bottom"> |
| 18 | 18 | <view class="markPrice">{{orderInfo.nowPrice}}</view> |
| ... | ... | @@ -164,6 +164,7 @@ |
| 164 | 164 | return this.order.status |
| 165 | 165 | }, |
| 166 | 166 | orderInfoList(){ |
| 167 | + console.log('this.order.order_info[0]', this.order) | |
| 167 | 168 | return this.order.order_info[0] |
| 168 | 169 | } |
| 169 | 170 | }, | ... | ... |
src/pages/myOrderPaying/myOrderPaying.vue
| ... | ... | @@ -72,7 +72,7 @@ |
| 72 | 72 | </view> --> |
| 73 | 73 | <text class="order-info-freight"> |
| 74 | 74 | <text class="p1">运费</text> |
| 75 | - <text class="p2">{{orderInfo.trans_price}}</text> | |
| 75 | + <text class="p2">免运费</text> | |
| 76 | 76 | </text> |
| 77 | 77 | <text class="order-info-discount"> |
| 78 | 78 | <text class="p1">优惠</text> |
| ... | ... | @@ -127,22 +127,24 @@ import store from '@/store' |
| 127 | 127 | import UniCountdown from '../../components/UniCountdown/UniCountdown.vue' |
| 128 | 128 | export default { |
| 129 | 129 | components: { |
| 130 | - UniCountdown | |
| 130 | + UniCountdown, | |
| 131 | 131 | }, |
| 132 | 132 | data () { |
| 133 | 133 | return { |
| 134 | 134 | payId: '', |
| 135 | 135 | payTime: '', |
| 136 | - status: '', | |
| 136 | + status: '', // status 0 待付款 1 已发货 | |
| 137 | 137 | uid: '', |
| 138 | 138 | openid: '', |
| 139 | - lefttime: 0 | |
| 139 | + lefttime: 0, | |
| 140 | + isPay: 0, | |
| 140 | 141 | } |
| 141 | 142 | }, |
| 142 | 143 | onLoad: function (option) { |
| 143 | 144 | console.log(option) |
| 144 | 145 | this.payId = option.payId |
| 145 | 146 | this.status = option.status |
| 147 | + this.isPay = option.isPay | |
| 146 | 148 | const openid = uni.getStorageSync('openid') |
| 147 | 149 | const uid = this.$store.state.user.uid |
| 148 | 150 | this.uid = uid |
| ... | ... | @@ -150,11 +152,19 @@ export default { |
| 150 | 152 | store.dispatch('orderRead/getOrderInfo', { |
| 151 | 153 | pay_id: this.payId, |
| 152 | 154 | uid: '1', |
| 153 | - openid: openid | |
| 155 | + openid: openid, | |
| 154 | 156 | }) |
| 155 | - | |
| 156 | 157 | // this.orderInfo = this.$store.state.orderRead.orderInfo |
| 157 | 158 | }, |
| 159 | + // 若从支付页面跳转过来,返回直接返回到首页 | |
| 160 | + onBackPress(option) { | |
| 161 | + if (option.from === 'backbutton' && this.isPay) { | |
| 162 | + uni.switchTab({ | |
| 163 | + url: '/pages/index/index', | |
| 164 | + }) | |
| 165 | + return true // 阻止默认返回行为 | |
| 166 | + } | |
| 167 | + }, | |
| 158 | 168 | computed: { |
| 159 | 169 | // 获取订单详细信息 |
| 160 | 170 | orderInfo () { |
| ... | ... | @@ -184,7 +194,7 @@ export default { |
| 184 | 194 | } |
| 185 | 195 | // console.log(totalDiscount) |
| 186 | 196 | return totalDiscount |
| 187 | - } | |
| 197 | + }, | |
| 188 | 198 | }, |
| 189 | 199 | methods: { |
| 190 | 200 | // 取消订单 |
| ... | ... | @@ -202,12 +212,12 @@ export default { |
| 202 | 212 | store.dispatch('cancelOrder/cancel', { |
| 203 | 213 | keyname: '1', |
| 204 | 214 | uid: uid, |
| 205 | - openid: openid | |
| 215 | + openid: openid, | |
| 206 | 216 | }) |
| 207 | 217 | } else if (res.cancel) { |
| 208 | 218 | console.log('用户点击取消') |
| 209 | 219 | } |
| 210 | - } | |
| 220 | + }, | |
| 211 | 221 | }) |
| 212 | 222 | }, |
| 213 | 223 | paylog () { |
| ... | ... | @@ -221,21 +231,21 @@ export default { |
| 221 | 231 | way: '2', |
| 222 | 232 | pay_id: this.payId, |
| 223 | 233 | judgeContent: '', |
| 224 | - orderInfo: this.orderInfo.order_info | |
| 234 | + orderInfo: this.orderInfo.order_info, | |
| 225 | 235 | }).then( |
| 226 | 236 | setTimeout(() => { |
| 227 | 237 | uni.navigateBack() |
| 228 | - }, 1500) | |
| 238 | + }, 1500), | |
| 229 | 239 | ) |
| 230 | - } | |
| 240 | + }, | |
| 231 | 241 | }, |
| 232 | 242 | filters: { |
| 233 | 243 | timerChange: function(value) { |
| 234 | 244 | var newDate = new Date() |
| 235 | 245 | newDate.setTime(value * 1000) |
| 236 | 246 | return newDate.toLocaleString() |
| 237 | - } | |
| 238 | - } | |
| 247 | + }, | |
| 248 | + }, | |
| 239 | 249 | } |
| 240 | 250 | </script> |
| 241 | 251 | ... | ... |
src/utils/md5.js
| ... | ... | @@ -0,0 +1,261 @@ |
| 1 | +/* | |
| 2 | + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message | |
| 3 | + * Digest Algorithm, as defined in RFC 1321. | |
| 4 | + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. | |
| 5 | + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | |
| 6 | + * Distributed under the BSD License | |
| 7 | + */ | |
| 8 | + | |
| 9 | +/* | |
| 10 | + * Configurable variables. You may need to tweak these to be compatible with | |
| 11 | + * the server-side, but the defaults work in most cases. | |
| 12 | + */ | |
| 13 | +var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ | |
| 14 | +var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ | |
| 15 | +var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ | |
| 16 | + | |
| 17 | +/* | |
| 18 | + * These are the functions you'll usually want to call | |
| 19 | + * They take string arguments and return either hex or base-64 encoded strings | |
| 20 | + */ | |
| 21 | +function hex_md5(s) { | |
| 22 | + return binl2hex(core_md5(str2binl(s), s.length * chrsz)); | |
| 23 | +} | |
| 24 | + | |
| 25 | +function b64_md5(s) { | |
| 26 | + return binl2b64(core_md5(str2binl(s), s.length * chrsz)); | |
| 27 | +} | |
| 28 | + | |
| 29 | +function str_md5(s) { | |
| 30 | + return binl2str(core_md5(str2binl(s), s.length * chrsz)); | |
| 31 | +} | |
| 32 | + | |
| 33 | +function hex_hmac_md5(key, data) { | |
| 34 | + return binl2hex(core_hmac_md5(key, data)); | |
| 35 | +} | |
| 36 | + | |
| 37 | +function b64_hmac_md5(key, data) { | |
| 38 | + return binl2b64(core_hmac_md5(key, data)); | |
| 39 | +} | |
| 40 | + | |
| 41 | +function str_hmac_md5(key, data) { | |
| 42 | + return binl2str(core_hmac_md5(key, data)); | |
| 43 | +} | |
| 44 | + | |
| 45 | +/* | |
| 46 | + * Perform a simple self-test to see if the VM is working | |
| 47 | + */ | |
| 48 | +function md5_vm_test() { | |
| 49 | + return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; | |
| 50 | +} | |
| 51 | + | |
| 52 | +/* | |
| 53 | + * Calculate the MD5 of an array of little-endian words, and a bit length | |
| 54 | + */ | |
| 55 | +function core_md5(x, len) { | |
| 56 | + /* append padding */ | |
| 57 | + x[len >> 5] |= 0x80 << ((len) % 32); | |
| 58 | + x[(((len + 64) >>> 9) << 4) + 14] = len; | |
| 59 | + | |
| 60 | + var a = 1732584193; | |
| 61 | + var b = -271733879; | |
| 62 | + var c = -1732584194; | |
| 63 | + var d = 271733878; | |
| 64 | + | |
| 65 | + for (var i = 0; i < x.length; i += 16) { | |
| 66 | + var olda = a; | |
| 67 | + var oldb = b; | |
| 68 | + var oldc = c; | |
| 69 | + var oldd = d; | |
| 70 | + | |
| 71 | + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); | |
| 72 | + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); | |
| 73 | + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); | |
| 74 | + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); | |
| 75 | + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); | |
| 76 | + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); | |
| 77 | + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); | |
| 78 | + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); | |
| 79 | + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); | |
| 80 | + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); | |
| 81 | + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); | |
| 82 | + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); | |
| 83 | + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); | |
| 84 | + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); | |
| 85 | + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); | |
| 86 | + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); | |
| 87 | + | |
| 88 | + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); | |
| 89 | + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); | |
| 90 | + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); | |
| 91 | + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); | |
| 92 | + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); | |
| 93 | + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); | |
| 94 | + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); | |
| 95 | + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); | |
| 96 | + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); | |
| 97 | + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); | |
| 98 | + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); | |
| 99 | + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); | |
| 100 | + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); | |
| 101 | + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); | |
| 102 | + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); | |
| 103 | + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); | |
| 104 | + | |
| 105 | + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); | |
| 106 | + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); | |
| 107 | + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); | |
| 108 | + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); | |
| 109 | + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); | |
| 110 | + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); | |
| 111 | + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); | |
| 112 | + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); | |
| 113 | + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); | |
| 114 | + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); | |
| 115 | + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); | |
| 116 | + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); | |
| 117 | + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); | |
| 118 | + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); | |
| 119 | + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); | |
| 120 | + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); | |
| 121 | + | |
| 122 | + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); | |
| 123 | + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); | |
| 124 | + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); | |
| 125 | + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); | |
| 126 | + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); | |
| 127 | + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); | |
| 128 | + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); | |
| 129 | + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); | |
| 130 | + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); | |
| 131 | + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); | |
| 132 | + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); | |
| 133 | + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); | |
| 134 | + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); | |
| 135 | + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); | |
| 136 | + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); | |
| 137 | + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); | |
| 138 | + | |
| 139 | + a = safe_add(a, olda); | |
| 140 | + b = safe_add(b, oldb); | |
| 141 | + c = safe_add(c, oldc); | |
| 142 | + d = safe_add(d, oldd); | |
| 143 | + } | |
| 144 | + return Array(a, b, c, d); | |
| 145 | + | |
| 146 | +} | |
| 147 | + | |
| 148 | +/* | |
| 149 | + * These functions implement the four basic operations the algorithm uses. | |
| 150 | + */ | |
| 151 | +function md5_cmn(q, a, b, x, s, t) { | |
| 152 | + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); | |
| 153 | +} | |
| 154 | + | |
| 155 | +function md5_ff(a, b, c, d, x, s, t) { | |
| 156 | + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); | |
| 157 | +} | |
| 158 | + | |
| 159 | +function md5_gg(a, b, c, d, x, s, t) { | |
| 160 | + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); | |
| 161 | +} | |
| 162 | + | |
| 163 | +function md5_hh(a, b, c, d, x, s, t) { | |
| 164 | + return md5_cmn(b ^ c ^ d, a, b, x, s, t); | |
| 165 | +} | |
| 166 | + | |
| 167 | +function md5_ii(a, b, c, d, x, s, t) { | |
| 168 | + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); | |
| 169 | +} | |
| 170 | + | |
| 171 | +/* | |
| 172 | + * Calculate the HMAC-MD5, of a key and some data | |
| 173 | + */ | |
| 174 | +function core_hmac_md5(key, data) { | |
| 175 | + var bkey = str2binl(key); | |
| 176 | + if (bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); | |
| 177 | + | |
| 178 | + var ipad = Array(16), | |
| 179 | + opad = Array(16); | |
| 180 | + for (var i = 0; i < 16; i++) { | |
| 181 | + ipad[i] = bkey[i] ^ 0x36363636; | |
| 182 | + opad[i] = bkey[i] ^ 0x5C5C5C5C; | |
| 183 | + } | |
| 184 | + | |
| 185 | + var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); | |
| 186 | + return core_md5(opad.concat(hash), 512 + 128); | |
| 187 | +} | |
| 188 | + | |
| 189 | +/* | |
| 190 | + * Add integers, wrapping at 2^32. This uses 16-bit operations internally | |
| 191 | + * to work around bugs in some JS interpreters. | |
| 192 | + */ | |
| 193 | +function safe_add(x, y) { | |
| 194 | + var lsw = (x & 0xFFFF) + (y & 0xFFFF); | |
| 195 | + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); | |
| 196 | + return (msw << 16) | (lsw & 0xFFFF); | |
| 197 | +} | |
| 198 | + | |
| 199 | +/* | |
| 200 | + * Bitwise rotate a 32-bit number to the left. | |
| 201 | + */ | |
| 202 | +function bit_rol(num, cnt) { | |
| 203 | + return (num << cnt) | (num >>> (32 - cnt)); | |
| 204 | +} | |
| 205 | + | |
| 206 | +/* | |
| 207 | + * Convert a string to an array of little-endian words | |
| 208 | + * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. | |
| 209 | + */ | |
| 210 | +function str2binl(str) { | |
| 211 | + var bin = Array(); | |
| 212 | + var mask = (1 << chrsz) - 1; | |
| 213 | + for (var i = 0; i < str.length * chrsz; i += chrsz) | |
| 214 | + bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32); | |
| 215 | + return bin; | |
| 216 | +} | |
| 217 | + | |
| 218 | +/* | |
| 219 | + * Convert an array of little-endian words to a string | |
| 220 | + */ | |
| 221 | +function binl2str(bin) { | |
| 222 | + var str = ""; | |
| 223 | + var mask = (1 << chrsz) - 1; | |
| 224 | + for (var i = 0; i < bin.length * 32; i += chrsz) | |
| 225 | + str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask); | |
| 226 | + return str; | |
| 227 | +} | |
| 228 | + | |
| 229 | +/* | |
| 230 | + * Convert an array of little-endian words to a hex string. | |
| 231 | + */ | |
| 232 | +function binl2hex(binarray) { | |
| 233 | + var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; | |
| 234 | + var str = ""; | |
| 235 | + for (var i = 0; i < binarray.length * 4; i++) { | |
| 236 | + str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + | |
| 237 | + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF); | |
| 238 | + } | |
| 239 | + return str; | |
| 240 | +} | |
| 241 | + | |
| 242 | +/* | |
| 243 | + * Convert an array of little-endian words to a base-64 string | |
| 244 | + */ | |
| 245 | +function binl2b64(binarray) { | |
| 246 | + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | |
| 247 | + var str = ""; | |
| 248 | + for (var i = 0; i < binarray.length * 4; i += 3) { | |
| 249 | + var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | | |
| 250 | + (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | | |
| 251 | + ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF); | |
| 252 | + for (var j = 0; j < 4; j++) { | |
| 253 | + if (i * 8 + j * 6 > binarray.length * 32) str += b64pad; | |
| 254 | + else str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F); | |
| 255 | + } | |
| 256 | + } | |
| 257 | + return str; | |
| 258 | +} | |
| 259 | +module.exports = { | |
| 260 | + MD5: hex_md5 | |
| 261 | +} | |
| 0 | 262 | \ No newline at end of file | ... | ... |