|
|
@@ -11,6 +11,7 @@ import ProductDetailOverlay from '@/components/client/product-detail-overlay.vue
|
|
|
import ClientTabBar from '@/components/client/client-tab-bar.vue'
|
|
|
import ClientSkeleton from '@/components/client/client-skeleton.vue'
|
|
|
import ClientImageLoader from '@/components/client/client-image-loader.vue'
|
|
|
+import SqCopyBtn from '@/components/sq-copy-btn.vue'
|
|
|
import { IMG_DEFAULT_PRODUCT, staticAssetUrl } from '@/utils/staticAsset'
|
|
|
|
|
|
const userStore = useUserStore()
|
|
|
@@ -21,6 +22,13 @@ const orderDetail = ref(null)
|
|
|
const isLoading = ref(false)
|
|
|
const showProductOverlay = ref(false)
|
|
|
const overlayProductId = ref('')
|
|
|
+const overlayFallbackProductName = ref('')
|
|
|
+const overlayFallbackMeasureText = ref('')
|
|
|
+const overlayFallbackPrice = ref(null)
|
|
|
+const overlayFallbackImageUrl = ref('')
|
|
|
+const overlayFallbackQuantity = ref(null)
|
|
|
+const overlayFallbackLineAmount = ref(null)
|
|
|
+const showConfirmReceiveDialog = ref(false)
|
|
|
|
|
|
const statusMap = {
|
|
|
pending_payment: { text: '待支付', color: '#0a9f6d' },
|
|
|
@@ -45,6 +53,20 @@ function unifiedStatus(detail) {
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+function getStatusClass(status) {
|
|
|
+ const classMap = {
|
|
|
+ pending_payment: 'warning',
|
|
|
+ pending_review_cancel: 'warning',
|
|
|
+ pending_delivery: 'primary',
|
|
|
+ delivering: 'primary',
|
|
|
+ partial_delivered: 'warning',
|
|
|
+ pending_confirm: 'primary',
|
|
|
+ completed: 'success',
|
|
|
+ cancelled: 'info',
|
|
|
+ }
|
|
|
+ return classMap[status] || 'info'
|
|
|
+}
|
|
|
+
|
|
|
function canPay(detail) {
|
|
|
if (!detail) return false
|
|
|
if (detail.orderStatus === 'pending_payment' && detail.payStatus === 'pending_payment') return true
|
|
|
@@ -108,39 +130,56 @@ function formatMeasureText(measureValue, unitName) {
|
|
|
return unitText ? `${measureText} ${unitText}` : measureText || '-'
|
|
|
}
|
|
|
|
|
|
-function openProductOverlay(productId) {
|
|
|
- if (!productId) return
|
|
|
- overlayProductId.value = productId
|
|
|
+function openProductOverlay(item) {
|
|
|
+ if (!item) return
|
|
|
+ overlayProductId.value = item.productId || ''
|
|
|
+ overlayFallbackProductName.value = item.productName || ''
|
|
|
+ overlayFallbackMeasureText.value = formatMeasureText(item.measureValue, item.unitName)
|
|
|
+ const fallbackPrice = item.unitPrice ?? item.price
|
|
|
+ overlayFallbackPrice.value = fallbackPrice == null ? null : Number(fallbackPrice)
|
|
|
+ overlayFallbackImageUrl.value = item.imageUrl || ''
|
|
|
+ overlayFallbackQuantity.value = item.quantity == null ? null : Number(item.quantity)
|
|
|
+ const amt = item.amount ?? item.lineAmount
|
|
|
+ overlayFallbackLineAmount.value = amt == null ? null : Number(amt)
|
|
|
showProductOverlay.value = true
|
|
|
}
|
|
|
|
|
|
function closeProductOverlay() {
|
|
|
showProductOverlay.value = false
|
|
|
+ overlayProductId.value = ''
|
|
|
+ overlayFallbackProductName.value = ''
|
|
|
+ overlayFallbackMeasureText.value = ''
|
|
|
+ overlayFallbackPrice.value = null
|
|
|
+ overlayFallbackImageUrl.value = ''
|
|
|
+ overlayFallbackQuantity.value = null
|
|
|
+ overlayFallbackLineAmount.value = null
|
|
|
}
|
|
|
|
|
|
function confirmReceive() {
|
|
|
- uni.showModal({
|
|
|
- title: '确认收货',
|
|
|
- content: '确定已收到商品吗?',
|
|
|
- success: async (res) => {
|
|
|
- if (!res.confirm) return
|
|
|
- try {
|
|
|
- const result = await request({
|
|
|
- url: `/mini/client/orders/${orderId.value}/confirm-receive`,
|
|
|
- method: 'POST'
|
|
|
- })
|
|
|
- const body = parseResponseJson(result)
|
|
|
- if (body.code === 200) {
|
|
|
- uni.showToast({ title: '确认成功', icon: 'success' })
|
|
|
- void fetchOrderDetail()
|
|
|
- } else {
|
|
|
- uni.showToast({ title: body.message || '操作失败', icon: 'none' })
|
|
|
- }
|
|
|
- } catch {
|
|
|
- uni.showToast({ title: '操作失败', icon: 'none' })
|
|
|
- }
|
|
|
+ showConfirmReceiveDialog.value = true
|
|
|
+}
|
|
|
+
|
|
|
+function closeConfirmReceiveDialog() {
|
|
|
+ showConfirmReceiveDialog.value = false
|
|
|
+}
|
|
|
+
|
|
|
+async function submitConfirmReceive() {
|
|
|
+ try {
|
|
|
+ const result = await request({
|
|
|
+ url: `/mini/client/orders/${orderId.value}/confirm-receive`,
|
|
|
+ method: 'POST'
|
|
|
+ })
|
|
|
+ const body = parseResponseJson(result)
|
|
|
+ if (body.code === 200) {
|
|
|
+ uni.showToast({ title: '确认成功', icon: 'success' })
|
|
|
+ closeConfirmReceiveDialog()
|
|
|
+ void fetchOrderDetail()
|
|
|
+ } else {
|
|
|
+ uni.showToast({ title: body.message || '操作失败', icon: 'none' })
|
|
|
}
|
|
|
- })
|
|
|
+ } catch {
|
|
|
+ uni.showToast({ title: '操作失败', icon: 'none' })
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
function goPay() {
|
|
|
@@ -164,6 +203,17 @@ const hasDelivererInfo = computed(() => {
|
|
|
|
|
|
const ICON_COORDINATE = staticAssetUrl('coordinate.svg')
|
|
|
const ICON_LOGISTICS_DISTRIBUTION = staticAssetUrl('logistics-distribution.svg')
|
|
|
+const ICON_SECTION_GOODS = staticAssetUrl('product-icon.svg')
|
|
|
+const ICON_SECTION_ORDER_INFO = staticAssetUrl('dingdanxinxi.svg')
|
|
|
+const ICON_SECTION_AMOUNT = staticAssetUrl('qian.svg')
|
|
|
+function goBack() {
|
|
|
+ uni.navigateBack({
|
|
|
+ delta: 1,
|
|
|
+ fail: () => {
|
|
|
+ uni.switchTab({ url: '/pages/client/order/order' })
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
onLoad((query) => {
|
|
|
userStore.checkLoginStatus()
|
|
|
@@ -191,9 +241,26 @@ onLoad((query) => {
|
|
|
|
|
|
<template v-else-if="orderDetail">
|
|
|
<view class="detail-fixed-top">
|
|
|
- <view class="client-subpage-hero order-detail-hero sq-hero-header sq-hero-header--compact">
|
|
|
- <text class="client-subpage-hero__sub">订单号 {{ orderDetail.orderNo }}</text>
|
|
|
- <text class="order-status-badge">{{ statusMap[unifiedStatus(orderDetail)]?.text }}</text>
|
|
|
+ <view class="client-subpage-hero order-detail-hero sq-hero-header sq-hero-header--compact sq-hero-header--client">
|
|
|
+ <view class="hero-top">
|
|
|
+ <view class="hero-header-row">
|
|
|
+ <view class="hero-back-btn" @click="goBack">
|
|
|
+ <text>‹</text>
|
|
|
+ </view>
|
|
|
+ <text class="hero-title hero-title--center">订单详情</text>
|
|
|
+ </view>
|
|
|
+ <view class="hero-order-no hero-order-no--empty">
|
|
|
+ <text class="hero-order-no__text"> </text>
|
|
|
+ </view>
|
|
|
+ <view class="hero-meta-row">
|
|
|
+ <text class="hero-order-no__text">订单号:{{ orderDetail.orderNo }}</text>
|
|
|
+ <view
|
|
|
+ :class="['status-tag', 'status-' + getStatusClass(unifiedStatus(orderDetail)), 'order-status-tag']"
|
|
|
+ >
|
|
|
+ <text>{{ statusMap[unifiedStatus(orderDetail)]?.text || unifiedStatus(orderDetail) }}</text>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
@@ -244,7 +311,6 @@ onLoad((query) => {
|
|
|
<PhoneDialInline
|
|
|
v-if="orderDetail.delivererPhone"
|
|
|
:phone="orderDetail.delivererPhone"
|
|
|
- color="#000000"
|
|
|
icon-size="20"
|
|
|
expand
|
|
|
end-align
|
|
|
@@ -266,14 +332,17 @@ onLoad((query) => {
|
|
|
<!-- 商品列表 -->
|
|
|
<view class="goods-section">
|
|
|
<view class="section-title-row">
|
|
|
- <text class="section-title">商品清单</text>
|
|
|
+ <view class="section-title-with-icon">
|
|
|
+ <image class="section-title-icon" :src="ICON_SECTION_GOODS" mode="aspectFit" />
|
|
|
+ <text class="section-title">商品清单</text>
|
|
|
+ </view>
|
|
|
<text class="section-subtitle">点击商品查看详情</text>
|
|
|
</view>
|
|
|
<view
|
|
|
v-for="item in orderDetail.items"
|
|
|
:key="item.id"
|
|
|
class="goods-item"
|
|
|
- @click="openProductOverlay(item.productId)"
|
|
|
+ @click="openProductOverlay(item)"
|
|
|
>
|
|
|
<view class="item-card">
|
|
|
<ClientImageLoader
|
|
|
@@ -302,11 +371,17 @@ onLoad((query) => {
|
|
|
<!-- 订单信息 -->
|
|
|
<view class="order-info-section">
|
|
|
<view class="section-title-row">
|
|
|
- <text class="section-title">订单信息</text>
|
|
|
+ <view class="section-title-with-icon">
|
|
|
+ <image class="section-title-icon" :src="ICON_SECTION_ORDER_INFO" mode="aspectFit" />
|
|
|
+ <text class="section-title">订单信息</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
<view class="info-row">
|
|
|
<text class="info-label">订单编号</text>
|
|
|
- <text class="info-value">{{ orderDetail.orderNo }}</text>
|
|
|
+ <view class="info-value-wrap">
|
|
|
+ <text class="info-value">{{ orderDetail.orderNo }}</text>
|
|
|
+ <SqCopyBtn class="info-copy" :text="orderDetail.orderNo" label="订单编号" icon-only />
|
|
|
+ </view>
|
|
|
</view>
|
|
|
<view class="info-row">
|
|
|
<text class="info-label">下单时间</text>
|
|
|
@@ -321,7 +396,10 @@ onLoad((query) => {
|
|
|
<!-- 金额信息 -->
|
|
|
<view class="amount-section">
|
|
|
<view class="section-title-row">
|
|
|
- <text class="section-title">金额汇总</text>
|
|
|
+ <view class="section-title-with-icon">
|
|
|
+ <image class="section-title-icon" :src="ICON_SECTION_AMOUNT" mode="aspectFit" />
|
|
|
+ <text class="section-title">金额汇总</text>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
<view class="amount-row total">
|
|
|
<text class="amount-label">合计(元)</text>
|
|
|
@@ -333,18 +411,10 @@ onLoad((query) => {
|
|
|
|
|
|
<!-- 底部操作(无按钮时不占位,避免出现白条) -->
|
|
|
<view v-if="hasBottomActions" class="bottom-actions">
|
|
|
- <view
|
|
|
- v-if="canPay(orderDetail)"
|
|
|
- class="action-btn confirm"
|
|
|
- @click="goPay"
|
|
|
- >
|
|
|
+ <view v-if="canPay(orderDetail)" class="action-btn confirm" @click="goPay">
|
|
|
<text>去支付</text>
|
|
|
</view>
|
|
|
- <view
|
|
|
- v-if="canConfirmReceive(orderDetail)"
|
|
|
- class="action-btn confirm"
|
|
|
- @click="confirmReceive"
|
|
|
- >
|
|
|
+ <view v-if="canConfirmReceive(orderDetail)" class="action-btn confirm" @click="confirmReceive">
|
|
|
<text>确认收货</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
@@ -358,10 +428,37 @@ onLoad((query) => {
|
|
|
:show="showProductOverlay"
|
|
|
:product-id="overlayProductId"
|
|
|
:readonly="true"
|
|
|
+ :fallback-product-name="overlayFallbackProductName"
|
|
|
+ :fallback-measure-text="overlayFallbackMeasureText"
|
|
|
+ :fallback-price="overlayFallbackPrice"
|
|
|
+ :fallback-image-url="overlayFallbackImageUrl"
|
|
|
+ :fallback-quantity="overlayFallbackQuantity"
|
|
|
+ :fallback-line-amount="overlayFallbackLineAmount"
|
|
|
+ fallback-hint-text="此商品目前已售罄"
|
|
|
tab-bar-active="order"
|
|
|
@close="closeProductOverlay"
|
|
|
/>
|
|
|
|
|
|
+ <view
|
|
|
+ v-if="showConfirmReceiveDialog"
|
|
|
+ class="confirm-receive-dialog-mask"
|
|
|
+ @click="closeConfirmReceiveDialog"
|
|
|
+ >
|
|
|
+ <view class="confirm-receive-dialog" @click.stop>
|
|
|
+ <view class="confirm-receive-dialog__icon">!</view>
|
|
|
+ <text class="confirm-receive-dialog__title">确认收货</text>
|
|
|
+ <text class="confirm-receive-dialog__desc">确认已收到本订单全部商品后,将完成本次订单流程。</text>
|
|
|
+ <view class="confirm-receive-dialog__actions">
|
|
|
+ <view class="confirm-receive-dialog__action confirm-receive-dialog__action--cancel" @click="closeConfirmReceiveDialog">
|
|
|
+ 取消
|
|
|
+ </view>
|
|
|
+ <button class="confirm-receive-dialog__action confirm-receive-dialog__action--confirm" @click="submitConfirmReceive">
|
|
|
+ 确认收货
|
|
|
+ </button>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+
|
|
|
<!-- 非 tabBar 子页补充底部导航,避免 H5 仅空白占位 -->
|
|
|
<ClientTabBar active="order" />
|
|
|
</view>
|
|
|
@@ -426,16 +523,112 @@ onLoad((query) => {
|
|
|
position: relative;
|
|
|
}
|
|
|
|
|
|
-.order-status-badge {
|
|
|
+.hero-top {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: flex-start;
|
|
|
+ gap: 10rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-header-row {
|
|
|
+ position: relative;
|
|
|
+ width: 100%;
|
|
|
+ min-height: 52rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-back-btn {
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 50%;
|
|
|
+ transform: translateY(-50%);
|
|
|
+ width: 44rpx;
|
|
|
+ height: 44rpx;
|
|
|
+ min-width: 44rpx;
|
|
|
+ min-height: 44rpx;
|
|
|
+ border-radius: 12rpx;
|
|
|
+ background: transparent;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-back-btn text {
|
|
|
+ font-size: 32rpx;
|
|
|
+ line-height: 1;
|
|
|
+ color: #ffffff;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-title {
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-weight: 700;
|
|
|
+ color: #ffffff;
|
|
|
+ line-height: 1.2;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-title--center {
|
|
|
+ width: 100%;
|
|
|
+ text-align: center;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-meta-row {
|
|
|
+ width: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ gap: 12rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-order-no {
|
|
|
display: inline-flex;
|
|
|
align-items: center;
|
|
|
- margin-top: 16rpx;
|
|
|
+ gap: 8rpx;
|
|
|
+ margin-top: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-order-no--empty {
|
|
|
+ width: 100%;
|
|
|
+ min-height: 12rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.hero-order-no__text {
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: rgba(255, 255, 255, 0.92);
|
|
|
+ line-height: 1.35;
|
|
|
+ white-space: nowrap;
|
|
|
+}
|
|
|
+
|
|
|
+.status-tag.order-status-tag {
|
|
|
+ align-self: center;
|
|
|
+ margin-top: 0;
|
|
|
padding: 8rpx 22rpx;
|
|
|
border-radius: 999rpx;
|
|
|
- background: rgba(255, 255, 255, 0.2);
|
|
|
- color: #ffffff;
|
|
|
font-size: 24rpx;
|
|
|
font-weight: 600;
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.status-tag.status-primary {
|
|
|
+ background: #fff7e2;
|
|
|
+ color: #b7791f;
|
|
|
+}
|
|
|
+
|
|
|
+.status-tag.status-warning {
|
|
|
+ background: #fffbeb;
|
|
|
+ color: #d97706;
|
|
|
+}
|
|
|
+
|
|
|
+.status-tag.status-success {
|
|
|
+ background: #ecfdf5;
|
|
|
+ color: #059669;
|
|
|
+}
|
|
|
+
|
|
|
+.status-tag.status-info {
|
|
|
+ background: #f1f5f9;
|
|
|
+ color: #64748b;
|
|
|
}
|
|
|
|
|
|
.section-title-row {
|
|
|
@@ -451,6 +644,19 @@ onLoad((query) => {
|
|
|
color: var(--c-text);
|
|
|
}
|
|
|
|
|
|
+.section-title-with-icon {
|
|
|
+ display: inline-flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 10rpx;
|
|
|
+ min-width: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.section-title-icon {
|
|
|
+ width: 36rpx;
|
|
|
+ height: 36rpx;
|
|
|
+ flex-shrink: 0;
|
|
|
+}
|
|
|
+
|
|
|
.section-subtitle {
|
|
|
font-size: 22rpx;
|
|
|
color: var(--c-muted);
|
|
|
@@ -468,8 +674,8 @@ onLoad((query) => {
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
.address-icon {
|
|
|
- width: 40rpx;
|
|
|
- height: 40rpx;
|
|
|
+ width: 36rpx;
|
|
|
+ height: 36rpx;
|
|
|
margin-top: 2rpx;
|
|
|
margin-right: 20rpx;
|
|
|
flex-shrink: 0;
|
|
|
@@ -529,8 +735,8 @@ onLoad((query) => {
|
|
|
}
|
|
|
|
|
|
.deliverer-header-icon {
|
|
|
- width: 40rpx;
|
|
|
- height: 40rpx;
|
|
|
+ width: 36rpx;
|
|
|
+ height: 36rpx;
|
|
|
flex-shrink: 0;
|
|
|
}
|
|
|
|
|
|
@@ -594,7 +800,6 @@ onLoad((query) => {
|
|
|
}
|
|
|
|
|
|
.deliverer-phone-cell :deep(.phone-dial-inline__text) {
|
|
|
- color: #000000;
|
|
|
font-weight: 500;
|
|
|
font-size: 30rpx;
|
|
|
text-align: right;
|
|
|
@@ -765,6 +970,26 @@ onLoad((query) => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ .info-value-wrap {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: flex-end;
|
|
|
+ gap: 10rpx;
|
|
|
+
|
|
|
+ .info-value {
|
|
|
+ flex: 1;
|
|
|
+ min-width: 0;
|
|
|
+ text-align: right;
|
|
|
+ word-break: break-all;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ .info-copy {
|
|
|
+ flex: 0 0 auto;
|
|
|
+ }
|
|
|
+
|
|
|
.remark-row {
|
|
|
align-items: flex-start;
|
|
|
|
|
|
@@ -811,29 +1036,34 @@ onLoad((query) => {
|
|
|
|
|
|
.bottom-actions {
|
|
|
position: fixed;
|
|
|
- bottom: calc(88rpx + env(safe-area-inset-bottom, 0px));
|
|
|
+ /* #ifdef H5 */
|
|
|
+ bottom: calc(88rpx + 10px + env(safe-area-inset-bottom, 0px));
|
|
|
+ padding-bottom: 0;
|
|
|
+ /* #endif */
|
|
|
+ /* #ifndef H5 */
|
|
|
+ bottom: calc(88rpx + env(safe-area-inset-bottom, 0px) + 10px);
|
|
|
+ padding-bottom: 0;
|
|
|
+ /* #endif */
|
|
|
left: 50%;
|
|
|
transform: translateX(-50%);
|
|
|
width: 100%;
|
|
|
max-width: 840rpx;
|
|
|
- min-height: 104rpx;
|
|
|
- background: #ffffff;
|
|
|
+ min-height: 88rpx;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
- justify-content: flex-end;
|
|
|
+ justify-content: center;
|
|
|
flex-wrap: wrap;
|
|
|
- gap: 12rpx;
|
|
|
- padding: 14rpx 24rpx;
|
|
|
- padding-bottom: calc(14rpx + env(safe-area-inset-bottom));
|
|
|
- border-top: 1rpx solid var(--c-border);
|
|
|
- box-shadow: 0 -6rpx 18rpx rgba(10, 159, 109, 0.06);
|
|
|
+ gap: 0;
|
|
|
+ padding: 0 24rpx;
|
|
|
+ border: none;
|
|
|
+ box-shadow: none;
|
|
|
z-index: 520;
|
|
|
|
|
|
.action-btn {
|
|
|
- min-width: 220rpx;
|
|
|
- padding: 0 32rpx;
|
|
|
- height: 76rpx;
|
|
|
- border-radius: 38rpx;
|
|
|
+ width: 100%;
|
|
|
+ max-width: 640rpx;
|
|
|
+ height: 88rpx;
|
|
|
+ border-radius: 44rpx;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
@@ -845,6 +1075,7 @@ onLoad((query) => {
|
|
|
|
|
|
&.confirm {
|
|
|
background: linear-gradient(145deg, var(--c-barley-yellow), #e4b458);
|
|
|
+ box-shadow: 0 10rpx 24rpx rgba(228, 180, 88, 0.26);
|
|
|
text {
|
|
|
color: #ffffff;
|
|
|
font-weight: 700;
|
|
|
@@ -852,4 +1083,95 @@ onLoad((query) => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+.confirm-receive-dialog-mask {
|
|
|
+ position: fixed;
|
|
|
+ inset: 0;
|
|
|
+ z-index: 800;
|
|
|
+ background: rgba(18, 28, 24, 0.45);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ padding: 40rpx;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog {
|
|
|
+ width: 100%;
|
|
|
+ max-width: 620rpx;
|
|
|
+ background: #ffffff;
|
|
|
+ border-radius: 26rpx;
|
|
|
+ padding: 40rpx 34rpx 32rpx;
|
|
|
+ box-sizing: border-box;
|
|
|
+ box-shadow: 0 12rpx 48rpx rgba(0, 0, 0, 0.15);
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__icon {
|
|
|
+ width: 76rpx;
|
|
|
+ height: 76rpx;
|
|
|
+ margin: 0 auto 20rpx;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: #fff9ec;
|
|
|
+ color: #d97706;
|
|
|
+ font-size: 42rpx;
|
|
|
+ font-weight: 700;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__title {
|
|
|
+ display: block;
|
|
|
+ text-align: center;
|
|
|
+ color: var(--c-text);
|
|
|
+ font-size: 34rpx;
|
|
|
+ font-weight: 700;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__desc {
|
|
|
+ display: block;
|
|
|
+ margin-top: 14rpx;
|
|
|
+ text-align: center;
|
|
|
+ color: var(--c-muted);
|
|
|
+ font-size: 26rpx;
|
|
|
+ line-height: 1.6;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__actions {
|
|
|
+ margin-top: 28rpx;
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(2, 1fr);
|
|
|
+ column-gap: 16rpx;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__action {
|
|
|
+ width: 100%;
|
|
|
+ min-height: 76rpx;
|
|
|
+ border-radius: 999rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ font-size: 28rpx;
|
|
|
+ font-weight: 600;
|
|
|
+ border: none;
|
|
|
+ box-sizing: border-box;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__action--cancel {
|
|
|
+ background: #f4f7f6;
|
|
|
+ color: #5b6b64;
|
|
|
+ border: 1rpx solid #ddebe5;
|
|
|
+}
|
|
|
+
|
|
|
+.confirm-receive-dialog__action--confirm {
|
|
|
+ background: linear-gradient(145deg, var(--c-barley-yellow), #e4b458);
|
|
|
+ color: #ffffff;
|
|
|
+}
|
|
|
+</style>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+page {
|
|
|
+ height: 100%;
|
|
|
+ background-color: #f5f8f7;
|
|
|
+}
|
|
|
</style>
|