390 lines
8.2 KiB
Vue
390 lines
8.2 KiB
Vue
<script setup lang="ts">
|
||
import { computed, ref,onMounted,watch } from 'vue'
|
||
import {apiImageUrl} from '../../API/api'
|
||
const address=ref('哈尔滨华德学院二公寓')
|
||
|
||
const { safeAreaInsets } = uni.getSystemInfoSync()
|
||
|
||
const buyerMessage = ref('')
|
||
|
||
const totalAmount = ref();
|
||
|
||
const getMerchantIdFromUrl = () => {
|
||
const pages = getCurrentPages();
|
||
const currentPage = pages[pages.length - 1];
|
||
|
||
if (currentPage && currentPage.options && currentPage.options.totalAmount) {
|
||
let value = currentPage.options.totalAmount;
|
||
|
||
if (typeof value === 'string' && value.trim() !== '') {
|
||
|
||
totalAmount.value = Number(value);
|
||
if (isNaN(totalAmount.value)) { // 检查是否为NaN
|
||
console.error('Failed to parse totalAmount as a number:', value);
|
||
} else {
|
||
console.log(`totalAmount received: ${totalAmount.value}`);
|
||
}
|
||
} else {
|
||
console.error('totalAmount is not a valid string:', value);
|
||
}
|
||
} else {
|
||
console.error('Could not retrieve totalAmount from URL.');
|
||
}
|
||
};
|
||
|
||
onMounted(() => {
|
||
getMerchantIdFromUrl();
|
||
});
|
||
|
||
watch(totalAmount, (newValue) => {
|
||
uni.$emit('totalAmountChanged', newValue);
|
||
});
|
||
|
||
|
||
const Code = () => {
|
||
my.request({
|
||
url: apiImageUrl+'/api/Alipay/trade',
|
||
method: 'GET',
|
||
success: function(result) {
|
||
console.log(result);
|
||
console.log(result.data.data);
|
||
|
||
const orderNo=result.data.data;
|
||
my.tradePay({
|
||
tradeNO: result.data.data,
|
||
success: (res) => {
|
||
console.log('成功调用')
|
||
uni.navigateTo({
|
||
url: `/pages/foodCode/foodCode?orderNo=${encodeURIComponent(orderNo)}`
|
||
})
|
||
console.log(res);
|
||
},
|
||
fail: (res) => {
|
||
my.alert({
|
||
content: JSON.stringify(res),
|
||
})
|
||
console.log('失败');
|
||
console.log(res);
|
||
}
|
||
|
||
})
|
||
}
|
||
})
|
||
}
|
||
</script>
|
||
<template>
|
||
<!-- 订单支付页面 -->
|
||
<scroll-view scroll-y class="viewport">
|
||
<view class="viewportCenter">
|
||
<view class="message">
|
||
<view class="name1">
|
||
zhangxinran
|
||
</view>
|
||
<view class="phone1">
|
||
12353423242
|
||
</view>
|
||
</view>
|
||
<view class="address">
|
||
|
||
<text class="addressNow">
|
||
{{address}}
|
||
</text>
|
||
<view class="changeAddress">
|
||
切换
|
||
</view>
|
||
</view>
|
||
<view class="car">
|
||
<!-- 商品信息 -->
|
||
<view class="goods">
|
||
<navigator
|
||
v-for="item in 1"
|
||
:key="item"
|
||
:url="`/pages/goods/goods?id=1`"
|
||
class="item"
|
||
hover-class="none"
|
||
>
|
||
<image
|
||
class="picture"
|
||
src="https://ts1.cn.mm.bing.net/th/id/R-C.0777a57ea66515c61ed3c535abc33e9e?rik=xrMfSXlP9XCHOQ&riu=http%3a%2f%2fi2.chuimg.com%2f67029d88893611e6b87c0242ac110003_4288w_2848h.jpg%3fimageView2%2f2%2fw%2f660%2finterlace%2f1%2fq%2f90&ehk=he85sDgN2hvkqJHLtVUTVv%2f0Hr9SGP9PM8VsWa451iI%3d&risl=&pid=ImgRaw&r=0&sres=1&sresct=1"
|
||
/>
|
||
<view class="meta">
|
||
<view class="name"> 金汤小鸡蘑菇面 </view>
|
||
<view class="attrs">金汤、小鸡、蘑菇</view>
|
||
<view class="attrs">月售:32</view>
|
||
<view class="prices">
|
||
<view class="money">¥{{totalAmount}}</view>
|
||
</view>
|
||
</view>
|
||
</navigator>
|
||
</view>
|
||
|
||
<view class="related">
|
||
<view class="item">
|
||
<text class="text">订单备注</text>
|
||
<input
|
||
class="input"
|
||
:cursor-spacing="30"
|
||
placeholder="备注"
|
||
v-model="buyerMessage"
|
||
/>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 支付 -->
|
||
<uni-collapse-item title="费用明细">
|
||
<view class="content">
|
||
<view class="box">
|
||
<text class="left">基础运费(10.23公里)</text>
|
||
<text class="right">16元</text>
|
||
</view>
|
||
<view class="box">
|
||
<text class="left">优惠券</text>
|
||
<text class="right">-5元</text>
|
||
</view>
|
||
<view class="box">
|
||
<text class="left">平台打折</text>
|
||
<text class="right">-1.6元</text>
|
||
</view>
|
||
<view class="box">
|
||
<text class="left">总费用</text>
|
||
<text class="right">14.40元</text>
|
||
</view>
|
||
</view>
|
||
</uni-collapse-item>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
|
||
<view class="toolbar" :style="{ paddingBottom: safeAreaInsets?.bottom + 'px' }">
|
||
<view class="total-pay symbol">
|
||
<text class="number">¥{{totalAmount}}</text>
|
||
</view>
|
||
<view class="button" @click="Code" :class="{ disabled: true }"> 去下单 </view>
|
||
</view>
|
||
|
||
</template>
|
||
<style>
|
||
.viewport {
|
||
height: 100vh;
|
||
width: 100%;
|
||
background-image: linear-gradient(to bottom, #4095e5 25%, #ffffff 25%);
|
||
}
|
||
.viewportCenter {
|
||
height: 100vh;
|
||
width: 90%;
|
||
margin: 35% auto;
|
||
background-image: linear-gradient(to bottom, #f5f5f5 25%, #fff 25%);
|
||
border-radius: 15px;
|
||
}
|
||
.message {
|
||
width: 90%;
|
||
height: 10%;
|
||
margin: 0 auto;
|
||
padding-top: 15px;
|
||
padding-bottom: 15px;
|
||
}
|
||
.name1,.phone1 {
|
||
font-size: 35rpx;
|
||
display: block;
|
||
margin: 10px;
|
||
font-weight: 700;
|
||
}
|
||
.address {
|
||
width: 90%;
|
||
height: 150rpx;
|
||
background-color: #fff;
|
||
margin: 0 auto;
|
||
border-radius: 10px;
|
||
|
||
}
|
||
.addressNow {
|
||
font-size: 40rpx;
|
||
font-weight: 700;
|
||
line-height: 80px;
|
||
padding-left: 20px;
|
||
}
|
||
.changeAddress {
|
||
width: 40px;
|
||
height: 30px;
|
||
float: right;
|
||
margin-top: 25px;
|
||
margin-right: 20px;
|
||
line-height: 32px;
|
||
padding-left: 5px;
|
||
border-radius: 10px;
|
||
border: 1px solid #7a7a7a;
|
||
}
|
||
.car {
|
||
width: 100%;
|
||
height: 100vh;
|
||
margin-top: 20px;
|
||
}
|
||
.goods {
|
||
margin: 20rpx;
|
||
padding: 0 20rpx;
|
||
border-radius: 10rpx;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.item {
|
||
display: flex;
|
||
padding: 30rpx 0;
|
||
border-top: 1rpx solid #eee;
|
||
}
|
||
|
||
&:first-child {
|
||
border-top: none;
|
||
}
|
||
|
||
.picture {
|
||
width: 250rpx;
|
||
height: 170rpx;
|
||
border-radius: 15rpx;
|
||
margin-right: 20rpx;
|
||
}
|
||
|
||
.meta {
|
||
flex: 1;
|
||
display: flex;
|
||
flex-direction: column;
|
||
justify-content: center;
|
||
position: relative;
|
||
}
|
||
|
||
.name {
|
||
height: 20px;
|
||
font-size: 30rpx;
|
||
font-weight: 700;
|
||
color: #444;
|
||
}
|
||
|
||
.attrs {
|
||
line-height: 1.8;
|
||
padding: 0 15rpx;
|
||
margin-top: 6rpx;
|
||
font-size: 24rpx;
|
||
align-self: flex-start;
|
||
border-radius: 4rpx;
|
||
color: #888;
|
||
background-color: #f7f7f8;
|
||
}
|
||
|
||
.money {
|
||
font-size: 30rpx;
|
||
font-weight: 700;
|
||
margin-left: 20px;
|
||
}
|
||
|
||
.related {
|
||
margin: 20rpx;
|
||
padding: 0 20rpx;
|
||
border-radius: 10rpx;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.item {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
min-height: 80rpx;
|
||
font-size: 26rpx;
|
||
color: #333;
|
||
}
|
||
|
||
.input {
|
||
flex: 1;
|
||
text-align: right;
|
||
margin: 20rpx 0;
|
||
padding-right: 20rpx;
|
||
font-size: 26rpx;
|
||
color: #999;
|
||
}
|
||
|
||
.item .text {
|
||
width: 125rpx;
|
||
}
|
||
|
||
.picker {
|
||
color: #666;
|
||
}
|
||
|
||
.picker::after {
|
||
content: '\e6c2';
|
||
}
|
||
|
||
|
||
.settlement {
|
||
margin: 20rpx;
|
||
padding: 0 20rpx;
|
||
border-radius: 10rpx;
|
||
background-color: #fff;
|
||
}
|
||
|
||
.item {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
height: 80rpx;
|
||
font-size: 26rpx;
|
||
color: #333;
|
||
}
|
||
|
||
.danger {
|
||
color: #000;
|
||
}
|
||
|
||
.toolbar {
|
||
position: fixed;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: calc(var(--window-bottom));
|
||
z-index: 1;
|
||
background-image: linear-gradient(to right, #525252 70%, #4095e5 70%);
|
||
height: 20px;
|
||
padding: 0 20rpx;
|
||
border-top: 1rpx solid #eaeaea;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
box-sizing: content-box;
|
||
margin: 0 auto;
|
||
width: 90%;
|
||
border-radius: 50rpx;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.total-pay {
|
||
font-size: 40rpx;
|
||
color: #fff;
|
||
margin-top:30px;
|
||
}
|
||
|
||
.decimal {
|
||
font-size: 75%;
|
||
}
|
||
|
||
.button {
|
||
width: 200rpx;
|
||
text-align: center;
|
||
margin-top: 30px;
|
||
font-size: 30rpx;
|
||
color: #fff;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.box {
|
||
padding-top: 5px;
|
||
padding-bottom: 5px;
|
||
}
|
||
.left,.right {
|
||
font-size: 30rpx;
|
||
}
|
||
.right {
|
||
float: right;
|
||
padding-right: 5px;
|
||
font-weight: 700;
|
||
}
|
||
.left {
|
||
padding-left: 5px;
|
||
}
|
||
</style> |