|
|
- <template>
- <uv-popup ref="popup" :round="30"
- @change="$refs.couponPopup.close()"
- bgColor="#f7f7f7">
- <view class="content">
-
- <!-- 地址 -->
- <view class="address" @click="openAddress">
- <image src="/static/image/address/selectIcon.png" mode=""></image>
- <view class="">
- {{ address.name }}
- </view>
- <view class="">
- {{ address.addressDetail }}
- </view>
- <view class="icon">
- <uv-icon size="30rpx" name="arrow-right"></uv-icon>
- </view>
- </view>
-
- <!-- 商品信息和数量 -->
- <view class="submit-info">
- <view class="title">
- 桌布租赁
- </view>
- <view class="box">
- <image class="image" :src="unit.pic" mode=""></image>
-
- <view class="info">
- <view class="price">
- ¥<text>{{ detail.depositPrice }}</text>元
- </view>
- <view class="unit">
- 请选择规格
- </view>
- <view class="">
- <uv-number-box
- @change="valChange"
- v-model="num"></uv-number-box>
- </view>
- </view>
- </view>
- </view>
-
- <!-- 规格 -->
- <view class="submit-unit">
- <view class="title">
- 规格选择
- </view>
- <view class="list">
- <view :class="{act : unitIndex == index}" v-for="(item, index) in detail.hotelGoodsSkuList"
- @click="selectUnit(item, index)" :key="index">
- {{ item.title }}
- </view>
- </view>
- </view>
-
- <!-- 优惠劵 -->
- <!-- <view style="padding: 0 20rpx;">
- <uv-cell
- icon="coupon"
- title="优惠劵"
- iconStyle="font-size: 34rpx;"
- rightIconStyle="font-size: 34rpx;"
- :value="couponText"
- @click="$refs.couponPopup.open('bottom')"
- isLink>
- </uv-cell>
- </view> -->
-
-
-
- <!-- 费用明细 -->
- <view class="expense-detail">
- <view class="title">
- 费用明细
- </view>
- <view class="detail" v-if="detail.depositPrice">
- <view>
- 应付款:¥{{ price }}
- </view>
- <view>
- 押金:¥{{ price }}
- </view>
- <view v-if="coupon.couponCondition <= price">
- 优惠:-¥{{ coupon.couponPrice }}
- </view>
- <view v-if="coupon.couponCondition <= price">
- 实付款:¥{{ (price - coupon.couponPrice).toFixed(2) }}
- </view>
- </view>
- <uv-cell
- icon="coupon"
- title="优惠"
- iconStyle="font-size: 34rpx;"
- rightIconStyle="font-size: 34rpx;">
- <template #value>
- <view class="coupon">
- 满{{ coupon.couponCondition }}立减{{ coupon.couponPrice }}
- </view>
- </template>
- </uv-cell>
- </view>
-
- <!-- 提交按钮 -->
- <view class="submit-btn">
- <view class="l" @click="addCart">
- 加入租赁车
- </view>
- <view class="r" @click="orderPay">
- {{ submiitTitle }}
- </view>
- </view>
-
- </view>
-
- <uv-popup ref="couponPopup" :round="30">
- <couponList
- ref="couponList"
- height="60vh"
- :depositPrice="price"
- @select="selectCoupon" />
- </uv-popup>
-
- <uv-popup ref="addressPopup" :round="30">
- <addressList ref="addressList" height="60vh" @select="selectAddress" />
- </uv-popup>
- </uv-popup>
- </template>
-
- <script>
- import addressList from '@/components/address/addressList.vue'
- import couponList from '@/components/user/couponList.vue'
- export default {
- components: {
- addressList,
- couponList,
- },
- props: {
- submiitTitle: {
- default: '立即租赁',
- type: String,
- },
- detail: {
- default: {}
- },
- },
- computed : {
- price(){
- return (this.detail.depositPrice * this.num).toFixed(2)
- }
- },
- data() {
- return {
- unitIndex: 0,
- address: {
- name: '请选择联系人',
- addressDetail: '',
- },
- num: 1,
- unit: {},
- addressTotal: 0,
- coupon : {
- price : 0,
- },
- couponText : '请选择',
- }
- },
- methods: {
- // 打开
- open() {
- this.$refs.popup.open('bottom')
- // this.$refs.couponList.getData()
- this.confCoupon()
- if (!this.unit.id) {
- this.selectUnit(this.detail.hotelGoodsSkuList[0], 0)
- }
-
- // 获取地址列表
- this.$refs.addressList.getAddressList().then(res => {
- this.addressTotal = res.total
- if (this.addressTotal != 0) {
- this.address = res.records[0]
- }
- })
- },
- confCoupon(){
- this.$api('confCoupon', res => {
- if(res.code == 200){
- this.coupon = res.result
- }
- })
- },
- valChange(){
- // this.coupon = {
- // price : 0,
- // }
- // this.couponText = '请选择'
- },
- // 选择优惠劵
- selectCoupon(e){
- this.couponText = e.couponName
- this.coupon = e
- this.$refs.couponPopup.close()
- },
- // 关闭
- close() {
- this.$refs.popup.close()
- },
- // 打开选择地址
- openAddress() {
- if (this.addressTotal == 0) {
- this.$refs.popup.close()
- return uni.navigateTo({
- url: '/pages_order/mine/address?type=back'
- })
- }
- this.$refs.addressPopup.open('bottom')
- },
- // 选择地址
- selectAddress(e) {
- this.address = e
- this.$refs.addressPopup.close()
- },
- // 选择规格
- selectUnit(item, index) {
- this.unit = item
- this.unitIndex = index
- },
- addCart() {
- this.$api('cartAdd', {
- id: this.detail.id,
- skuId: this.unit.id,
- num : this.num,
- }, res => {
- if (res.code == 200) {
- uni.showToast({
- title: '添加成功',
- });
- this.$refs.popup.close()
- }
- })
- },
- orderPay() {
-
- let data = [
- {
- id: this.detail.id, //商品id
- skuId: this.unit.id, //规格id
- addressId: this.address.id, //地址id
- sku: this.unit.title, //规格
- num: this.num,
- }
- ]
-
-
- if (this.$utils.verificationAll(data[0], {
- skuId: '请选择规格',
- addressId: '请选择地址',
- })) {
- return
- }
-
- this.$api('orderCreate', {req:JSON.stringify(data)}, res => {
- if (res.code == 200) {
- let form = {
- id: res.result.id,
- }
- if(this.coupon.id){
- form.couponId = this.coupon.id
- }
- this.$api('orderPay', form, res => {
- if (res.code == 200) {
- uni.requestPayment({
- provider: 'wxpay', // 服务提提供商
- timeStamp: res.result.timeStamp, // 时间戳
- nonceStr: res.result.nonceStr, // 随机字符串
- package: res.result.packageValue,
- signType: res.result.signType, // 签名算法
- paySign: res.result.paySign, // 签名
- success: function(res) {
- // console.log('支付成功', res);
- uni.redirectTo({
- url: '/pages/index/order'
- })
-
- },
- fail: function(err) {
- console.log('支付失败', err);
- uni.redirectTo({
- url:'/pages/index/order'
- })
- // self.$refs.confirmationPopup.close()
- uni.showToast({
- icon: 'none',
- title: "支付失败"
- })
- }
- });
- }
- })
- }
- })
- },
- }
- }
- </script>
-
- <style scoped lang="scss">
- .content {
- max-height: 80vh;
- overflow: hidden;
- overflow-y: auto;
-
- .address {
- display: flex;
- padding: 20rpx;
- background-color: #fff;
-
- image {
- width: 30rpx;
- height: 30rpx;
- margin: 20rpx;
- }
-
- view {
- margin: 20rpx;
- overflow: hidden; //超出的文本隐藏
- text-overflow: ellipsis; //溢出用省略号显示
- white-space: nowrap; //溢出不换行
- }
-
- .icon {
- margin-left: auto;
- }
- }
-
- .submit-info {
- background-color: #fff;
- padding: 30rpx;
- margin-top: 20rpx;
-
- .title {
- font-size: 30rpx;
- padding: 10rpx;
- font-weight: 600;
- }
-
- .box {
- display: flex;
- margin-top: 10rpx;
-
- .image {
- width: 200rpx;
- height: 200rpx;
- border-radius: 20rpx;
- margin-right: 20rpx;
- }
-
- .info {
- flex: 1;
-
- .unit {
- font-size: 24rpx;
- padding: 10rpx 20rpx;
- color: #717171;
- display: flex;
- align-items: center;
- }
-
- .price {
- color: $uni-color;
- font-size: 28rpx;
- padding: 10rpx 20rpx;
-
- text {
- font-size: 36rpx;
- font-weight: 900;
- }
- }
- }
- }
- }
-
- .submit-unit {
- padding: 30rpx;
- background-color: #fff;
-
- .title {
- font-size: 28rpx;
- font-weight: 600;
- }
-
- .list {
- display: flex;
- flex-wrap: wrap;
- font-size: 22rpx;
-
- .act {
- color: $uni-color;
- border: 1px solid $uni-color;
- background-color: #F9E7DE;
- }
-
- view {
- border-radius: 15rpx;
- width: 320rpx;
- background-color: #F3F3F3;
- border: 1px solid #F3F3F3;
- margin: 10rpx;
- display: flex;
- justify-content: center;
- padding: 15rpx 0;
- }
- }
- }
-
- .expense-detail {
- padding: 30rpx;
- background-color: #fff;
- font-size: 28rpx;
-
- .title {
- font-weight: 600;
- }
-
- .detail {
- background-color: #F6F6F6;
- color: #717171;
- margin: 10rpx 0;
- padding: 10rpx 20rpx;
- line-height: 50rpx;
- }
- .coupon{
- text-align: center;
- color: #5c5;
- }
- }
-
- .submit-btn {
- width: 600rpx;
- height: 80rpx;
- color: #fff;
- border-radius: 40rpx;
- font-size: 28rpx;
- margin: 20rpx auto;
- display: flex;
- justify-content: center;
- align-items: center;
- border: 1rpx solid $uni-color;
- overflow: hidden;
-
- .l {
- flex: 1;
- display: flex;
- justify-content: center;
- align-items: center;
- color: $uni-color;
- }
-
- .r {
- background: $uni-color;
- flex: 1;
- height: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- }
- }
- }
- </style>
|