mrr.sj.front/pages/shop/SellerDetail.vue

1079 lines
27 KiB
Vue
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="detail-page">
<!-- 顶部导航栏 -->
<custom-navbar title="订单详情" :show-back="true" title-color="#333333"
:backgroundColor="backgroundColor"></custom-navbar>
<view class="content-part">
<!-- 订单状态 -->
<view class="status-section">
<image class="status-section-image" mode="widthFix" :src="stateItem.icon" />
<text class="status-text">{{ stateItem.text }}</text>
</view>
<!-- 预约信息 -->
<view class="booking-card">
<view class="card_title">预约信息</view>
<view class="service-item">
<image :src="photo[0]" v-if="orderInfo.photo && orderInfo.photo.length != 0" mode="aspectFill"
class="service-image"></image>
<view class="service-info">
<view class="service-box">
<view class="service-name-row">
<text class="service-name white-space-nowrap">{{
orderInfo.title
}}</text>
<text class="service-name-num">×1</text>
</view>
<!-- <text class="service-subtitle white-space-nowrap">{{identity==0?'使用场景':'服务范围'}}{{
orderInfo.first_class_title +
" " +
orderInfo.second_class_title
}}</text> -->
</view>
<view class="service-price">
<text>单价:{{ orderInfo.price }}元/10分钟</text>
</view>
</view>
</view>
<view class="service-real-1">
<text class="real-lable">应付金额:</text>
<view class="real-price">
<text class="icon">¥</text>
<text class="price">{{ orderInfo.order_money }}</text>
</view>
</view>
<!-- <view class="service-real">
<view class="card_time">预约开始时间:{{
formatDateAndAddMinutes(orderInfo.reserve_start_time).original
}}
</view>
<view class="card_time">预约结束时间:{{
formatDateAndAddMinutes(orderInfo.reserve_end_time).original
}}
</view>
</view> -->
</view>
<view class="order-card time-card">
<view class="card_title">服务时段信息</view>
<view class="service-real">
<view class="card_time">预约开始时间:{{
formatDateTime(orderInfo.reserve_start_time)
}}
</view>
<view class="card_time">预约结束时间:{{
formatDateTime(orderInfo.reserve_end_time)
}}
</view>
</view>
</view>
<!-- 到家订单 客户以及手艺人信息 -->
<view class="shop_card">
<view class="card_title" v-if="identity==0">顾客信息</view>
<view class="card_title" v-if="identity==1">店铺信息</view>
<view class="shop_title_box">
<image class="shop_photo" :src="orderInfo.head_photo" mode="aspectFill" />
<view class="left-section">
<view class="shop_title">{{ orderInfo.name }}</view>
<text class="shop_phone" @click="contactService(orderInfo.phone)">
{{ orderInfo.phone || orderInfo.account }}
</text>
</view>
<image class="shop_icon"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/5e6bb10e-9f14-4349-8021-7e79078a8da7.png"
@click="contactService(orderInfo.phone)" />
</view>
<view class="service_content" :class="{service_content__last:identity==0}"
v-if="orderInfo.second_class_title">{{identity==0?'使用场景详情':'服务范围详情'}}{{
orderInfo.first_class_title +
" " +
orderInfo.second_class_title.join("、")
}}</view>
<!-- <view class="shop_address" @click="openMap()" v-if="identity==1">
<image class="shop_icon" src="@/static/images/icons/address_gray.png" />
<text>{{ orderInfo.dependency }}{{ orderInfo.address }}</text>
</view> -->
<!-- <view class="shop_address mt_10" @click="contactService(orderInfo.phone)">
<image class="shop_icon" src="@/static/images/icons/phone_gray.png" />
<text>{{ orderInfo.phone || orderInfo.account }}</text>
</view> -->
</view>
<!-- 订单信息 -->
<view class="order-card info-card">
<view class="card_title">订单信息</view>
<view class="info-item">
<text class="label">订单编号</text>
<text class="value">{{ orderInfo.number }}</text>
</view>
<view class="info-item">
<text class="label">下单时间</text>
<text class="value">{{ orderInfo.add_time }}</text>
</view>
<view class="info-item">
<text class="label">服务时长</text>
<text class="value">{{ orderInfo.service_duration }}</text>
</view>
<view class="info-item" v-if="orderInfo.state != 1 && orderInfo.pay_kind">
<text class="label">支付方式</text>
<text class="value">{{
orderInfo.pay_kind == 1
? "账户余额"
: orderInfo.pay_kind == 2
? "微信支付"
: orderInfo.pay_kind == 3
? "支付宝支付"
: ""
}}</text>
</view>
<!-- <view class="info-item" v-if="orderInfo.state != 1 && orderInfo.pay_money">
<text class="label">支付小计</text>
<text class="value" style="color: #FF4767">{{ orderInfo.order_money }}元</text>
</view> -->
<view class="info-item" v-if="orderInfo.state != 1 && orderInfo.pay_time">
<text class="label">支付时间</text>
<text class="value">{{ orderInfo.pay_time }}</text>
</view>
<view class="info-item" v-if="orderInfo.state >= 3 && orderInfo.get_time">
<text class="label">接单时间</text>
<text class="value">{{ orderInfo.get_time }}</text>
</view>
<view class="info-item" v-if="orderInfo.state >= 4 && orderInfo.start_time">
<text class="label">开始服务时间</text>
<text class="value">{{ orderInfo.start_time }}</text>
</view>
<view class="info-item" v-if="orderInfo.state >= 5 && orderInfo.end_time">
<text class="label">完成服务时间</text>
<text class="value">{{ orderInfo.end_time }}</text>
</view>
</view>
</view>
<!-- 底部按钮 -->
<view class="bottom-buttons">
<view class="handel-button btn-border" v-if="orderInfo.state == 2 || orderInfo.state == 3"
@click.stop="cancelOrder($event, orderInfo)">
<text class="button-text">取消订单</text>
</view>
<view class="handel-button btn-bg" v-if="orderInfo.state == 2"
@click.stop="confirmOrder($event, orderInfo)">
<text class="button-text">接单</text>
</view>
<view class="handel-button btn-bg" v-if="orderInfo.state == 3" @click.stop="startOrder($event, orderInfo)">
<text class="button-text">{{identity==0?'开始接单':'开始服务'}}</text>
</view>
<view class="handel-button btn-bg" v-if="orderInfo.state == 4" @click.stop="endOrder($event, orderInfo)">
<text class="button-text">{{identity==0?'完成订单':'服务完成'}}</text>
</view>
</view>
<serviceCodeInput :show="showInput" @close="showInput = false" @confirm="onConfirm" />
<!-- 获取权限提示匡内容 -->
<view class="permission" :class="{ transform: isShowPer }">
<view class="per-tit">美融融plus 对拨打电话权限申请说明</view>
<view class="per-cont">当您需要联系商家或平台客服的时候,需要获取拨打电话权限。</view>
</view>
</view>
</template>
<script>
import request from "../../utils/request";
import _public from "../../utils/public";
import serviceCodeInput from "../../components/service-code-input/service-code-input.vue";
import locationService from "../../utils/locationService";
import permissionUtils from "../../utils/per";
export default {
components: {
serviceCodeInput
},
data() {
return {
clickType: false, //点击状态,防止连续点击
identity: 0, //身份0为商家1为手艺人
isShowPer: false,
interfaceList: [{
weChatRefund: "/sj/workSeatOrder/weChatRefund",
aliRefund: "/sj/workSeatOrder/aliRefund",
details: "/sj/workSeatOrder/details",
sureOrder: "/sj/workSeatOrder/sure",
startOrder: "/sj/workSeatOrder/start",
endOrder: '/sj/workSeatOrder/end',
},
{
weChatRefund: "/syr/workHourOrder/weChatRefund",
aliRefund: "/syr/workHourOrder/aliRefund",
details: "/syr/workHourOrder/details",
sureOrder: "/syr/workHourOrder/sure",
startOrder: "/syr/workHourOrder/start",
endOrder: '/syr/workHourOrder/end',
},
],
id: "",
staffInfo: {
avatar: "/static/images/staff.jpg",
name: "中医理疗谢飞",
rating: 5,
},
showInput: false,
userInfo: {},
orderInfo: {},
reservation_address_arr: {},
user_syr: {},
scrollTop: 0,
};
},
async onLoad(options) {
this.id = options.order_id;
//信息读取
if (options.push_id) {
this.messageRead(options.push_id)
}
if (options.identity) {
this.identity = parseInt(options.identity);
}
if (options.order_id) {
// 请求订单详情
const {
data
} = await request.post("/user/getuser", {
type: 2
});
this.userInfo = data;
this.getOrderDetail();
}
//信息读取
if (options.push_id) {
this.messageRead(options.push_id)
}
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
computed: {
backgroundColor() {
if (this.scrollTop > 10) {
return `rgba(255, 255, 255, ${Math.min(0.02 * this.scrollTop, 1)})`;
}
return "transparent";
},
stateItem() {
const list = [{
text: "待支付",
icon: "/static/images/icons/pay.png",
state: "1"
},
{
text: "待接单",
icon: "/static/images/icons/pending.png",
state: "2",
},
{
text: this.identity == 0 ? "待开始" : "待服务",
icon: "/static/images/icons/pendingService.png",
state: "3",
},
{
text: this.identity == 0 ? "进行中" : "服务中",
icon: "/static/images/icons/pendingService.png",
state: "4",
},
{
text: "已完成",
icon: "/static/images/icons/payOk.png",
state: "5"
},
{
text: "待评价",
icon: "/static/images/icons/pending.png",
state: "6",
},
{
text: "已取消",
icon: "/static/images/evaluate/cancel.png",
state: "7"
},
];
const item = list.find((it) => it.state == this.orderInfo.state) || {};
return item;
},
photo() {
return JSON.parse(this.orderInfo.photo);
},
},
methods: {
//消息列表跳转阅读
messageRead(id) {
request.post("/sj/push/messageRead", {
id: id
}).then(res => {
console.log("messageRead:", res)
this.messageUpudateNum()
})
},
// 用于标准格式的方法
formatDateTime(dateStr, includeSeconds = true) {
if (!dateStr) {
return '';
}
// 处理日期字符串,兼容不同格式
const originalDate = new Date(dateStr.replace(/-/g, '/'));
// 格式化为 YYYY-MM-DD HH:mm:ss
const year = originalDate.getFullYear();
const month = String(originalDate.getMonth() + 1).padStart(2, "0");
const day = String(originalDate.getDate()).padStart(2, "0");
const hours = String(originalDate.getHours()).padStart(2, "0");
const minutes = String(originalDate.getMinutes()).padStart(2, "0");
const seconds = String(originalDate.getSeconds()).padStart(2, "0");
if (includeSeconds) {
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
} else {
return `${year}-${month}-${day} ${hours}:${minutes}`;
}
},
formatDateAndAddMinutes(dateStr, addMinutes = 0) {
if (!dateStr) {
return {
original: '',
afterAddingMinutes: '',
};
}
const originalDate = new Date(dateStr.replace(/-/g, '/'));
function format(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
const formattedOriginal = format(originalDate);
const newDate = new Date(originalDate);
newDate.setMinutes(newDate.getMinutes() + addMinutes);
const formattedNew = format(newDate);
return {
original: formattedOriginal,
afterAddingMinutes: formattedNew,
};
},
getOrderDetail() {
request
.post(this.interfaceList[this.identity].details, {
id: this.id
})
.then((res) => {
if (this.identity == 0) {
const userSyr = res.data.user_syr || {}; // 避免 null 展开报错
this.orderInfo = res.data ? {
...res.data.order,
...res.data.work_seat,
...userSyr,
work_hour_id: res.data.work_seat.id,
order_id: res.data.order.id,
syr_id: userSyr.id, // 用于判断是否有手艺人/顾客信息
} : {};
} else if (this.identity == 1) {
// 手艺人视角
this.orderInfo = res.data ? {
...res.data.order,
...res.data.work_hour,
...res.data.user_sj,
work_hour_id: res.data.work_hour.id,
order_id: res.data.order.id,
user_sj_id: res.data.user_sj.id,
} : {};
}
// 计算服务时长
this.orderInfo.service_duration = this.calculateServiceDuration();
this.orderInfo.second_class_title?.join("、");
});
},
// 计算服务时长返回XX分钟格式
calculateServiceDuration() {
if (!this.orderInfo.reserve_start_time || !this.orderInfo.reserve_end_time) {
return '--';
}
try {
// 处理日期字符串,兼容不同格式
const startTime = new Date(this.orderInfo.reserve_start_time.replace(/-/g, '/'));
const endTime = new Date(this.orderInfo.reserve_end_time.replace(/-/g, '/'));
// 计算时间差(毫秒)
const diffMs = endTime.getTime() - startTime.getTime();
if (diffMs <= 0) {
return '--';
}
// 转换为分钟
const diffMinutes = Math.floor(diffMs / (1000 * 60));
// 返回XX分钟格式
return `${diffMinutes}分钟`;
} catch (error) {
console.error('计算服务时长失败:', error);
return '--';
}
},
cancelOrder(e, order) {
// #ifdef APP-PLUS
e.preventDefault();
e.stopPropagation();
// #endif
uni.showModal({
title: "取消订单",
content: "确定要取消该订单吗?(订单取消后,支付金额将原路退回)",
success: (res) => {
if (res.confirm) {
let data
if (this.identity == 0) {
data = {
orderNo: order.number,
amount: order.pay_money,
sjid: this.userInfo.id,
};
} else if (this.identity == 1) {
data = {
orderNo: order.number,
amount: order.pay_money,
syrid: this.userInfo.id,
};
}
let url = "";
if (order.pay_kind == 1) {
url = "";
} else if (order.pay_kind == 2) {
url = this.interfaceList[this.identity].weChatRefund;
} else if (order.pay_kind == 3) {
url = this.interfaceList[this.identity].aliRefund;
}
if (this.clickType) {
return
}
this.clickType = true
request
.post(url, data)
.then((res) => {
if (res.state == 1 || res.code == 1 || res.code == 200) {
uni.showToast({
title: "取消成功!",
icon: "none"
});
this.getOrderDetail();
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2];
if (prevPage) {
prevPage.$vm.getOrderNumber();
prevPage.$vm.getOrderList();
}
} else {
uni.showToast({
title: res.msg,
icon: "none"
});
}
})
.catch((err) => console.log(err)).finally(() => {
this.clickType = false
});
}
},
});
},
confirmOrder(e, order) {
console.log(order);
// #ifdef APP-PLUS
e.preventDefault();
e.stopPropagation();
// #endif
if (this.clickType) {
return
}
this.clickType = true
request
.post(this.interfaceList[this.identity].sureOrder, {
id: order.order_id
})
.then((res) => {
uni.showToast({
title: "已接单",
icon: "none"
});
this.getOrderDetail();
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2];
if (prevPage) {
prevPage.$vm.getOrderNumber();
prevPage.$vm.getOrderList();
}
}).finally(() => {
this.clickType = false
});
},
startOrder(e, order) {
// #ifdef APP-PLUS
e.preventDefault();
e.stopPropagation();
// #endif
this.showInput = true;
},
onConfirm(code) {
this.showInput = false;
if (this.clickType) {
return
}
this.clickType = true
request
.post(this.interfaceList[this.identity].startOrder, {
id: this.orderInfo.order_id,
server_code: code,
})
.then((res) => {
console.log('API Response:', res);
if (res.code == 200) {
uni.showToast({
title: res.msg,
icon: "none"
});
this.getOrderDetail();
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2];
if (prevPage) {
prevPage.$vm.getOrderNumber();
prevPage.$vm.getOrderList();
}
} else if (res.state == 1) {
uni.showToast({
title: res.msg,
icon: "none"
});
this.getOrderDetail();
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2];
if (prevPage) {
prevPage.$vm.getOrderNumber();
prevPage.$vm.getOrderList();
}
}
this.handelOrder = {};
}).finally(() => {
this.clickType = false
});
},
endOrder(e, order) {
// #ifdef APP-PLUS
e.preventDefault();
e.stopPropagation();
// #endif
if (this.clickType) {
return
}
this.clickType = true
request.post(this.interfaceList[this.identity].endOrder, {
id: order.order_id
}).then((res) => {
if (res.code == 200) {
uni.showToast({
title: res.msg,
icon: "none"
});
this.getOrderDetail();
const pages = getCurrentPages();
const prevPage = pages[pages.length - 2];
if (prevPage) {
prevPage.$vm.getOrderNumber();
prevPage.$vm.getOrderList();
}
}
}).finally(() => {
this.clickType = false
});
},
showPermissionDialog(title, content) {
return new Promise((resolve) => {
uni.showModal({
title,
content,
confirmText: "去开启",
success(res) {
resolve(res.confirm);
},
});
});
},
async contactService(phone) {
const systemInfo = uni.getSystemInfoSync();
if (systemInfo.platform === "ios") {
uni.makePhoneCall({
phoneNumber: phone
});
} else {
let permission =
systemInfo.platform === "ios" ?
"phone" :
"android.permission.CALL_PHONE";
this.isShowPer = true;
const firstRequest = !plus.storage.getItem(`perm_${permission}`);
if (firstRequest) this.isShowPer = true;
const {
granted
} = await permissionUtils.checkPermission(
"phone",
"需要拨打电话权限,方便您联系商家或平台"
);
if (granted) {
this.isShowPer = false;
uni.makePhoneCall({
phoneNumber: phone
});
return;
}
this.isShowPer = false;
const confirm = await this.showPermissionDialog(
"拨打电话权限申请",
"我们需要拨打电话权限,方便您联系商家或平台"
);
if (!confirm) return;
const result = await permissionUtils.requestPermission(
"phone",
"需要拨打电话权限,方便您联系商家或平台"
);
if (result) {
uni.makePhoneCall({
phoneNumber: phone
});
} else {
locationService.openAppSettings();
}
}
},
openMap() {
// #ifdef MP-WEIXIN
uni.openLocation({
success: () => console.log("打开系统位置地图成功"),
fail: (error) => console.log(error),
});
// #endif
// #ifdef APP-PLUS
_public.goMap({
latitude: parseFloat(this.reservation_address_arr.latitude),
longitude: parseFloat(this.reservation_address_arr.longitude),
name: this.reservation_address_arr.house_number,
address: this.reservation_address_arr.server_address,
});
// #endif
},
},
};
</script>
<style lang="less">
page {
position: relative;
background-color: #fff;
}
.detail-page::before {
content: "";
position: fixed;
top: 0;
left: 0;
right: 0;
height: 1200rpx !important;
background-image: url("/static/images/bg.png");
background-size: cover;
background-position: center top;
background-repeat: no-repeat;
z-index: 1;
}
.content-part {
position: relative;
left: 0;
right: 0;
z-index: 9;
}
/* 状态区域 */
.status-section {
display: flex;
align-items: center;
justify-content: center;
gap: 20rpx;
padding-top: 55rpx;
padding-bottom: 50rpx;
.status-section-image {
width: 52rpx;
}
}
.status-text {
font-size: 44rpx;
color: #333333;
font-weight: 600;
}
/* 预约信息卡片 */
.booking-card {
margin: 0rpx 30rpx 20rpx;
background-color: #ffffff;
border-radius: 20rpx;
padding: 24rpx 30rpx 20rpx 20rpx;
box-shadow: 0 4rpx 16rpx 0 rgba(210, 213, 224, 0.5);
.card_title {
font-weight: 500;
font-size: 32rpx;
color: #333333;
margin-bottom: 40rpx;
}
}
.service-item {
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
align-items: center;
margin-bottom: 32rpx;
}
.service-image {
width: 160rpx;
height: 160rpx;
border-radius: 16rpx;
margin-right: 24rpx;
background-color: #e2e2e2;
flex-shrink: 0;
}
.service-info {
flex: 1;
height: 160rpx;
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
align-items: flex-start;
margin-right: 24rpx;
.service-box {
width: 100%;
gap: 18rpx;
display: flex;
flex-direction: column;
.service-subtitle {
font-size: 26rpx;
width: 400rpx;
color: #666666;
}
}
}
.service-name-row {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
gap: 20rpx;
}
.service-name {
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
font-weight: 500;
font-size: 30rpx;
color: #333333;
line-height: 34rpx;
flex: 1;
text-align: left;
font-style: normal;
}
.service-name-num {
font-weight: 500;
font-size: 26rpx;
color: #999999;
line-height: 34rpx;
flex-shrink: 0;
}
.service-price {
font-size: 26rpx;
color: #333333;
}
.service-real {
display: flex;
flex-direction: column;
padding-top: 8rpx;
// border-top: 1rpx solid rgba(0, 0, 0, 0.05);
}
.service-real-1 {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
padding-top: 14rpx;
border-top: 1rpx solid rgba(0, 0, 0, 0.05);
}
.real-lable {
font-size: 30rpx;
color: #333333;
}
.real-price {
font-size: 42rpx;
font-weight: 500;
color: #FF4767;
transform: translateY(-5rpx);
.icon {
font-size: 26rpx;
}
.price {
font-family: DINPro, DINPro;
}
}
.card_time {
font-size: 28rpx;
color: #666666;
margin-top: 8rpx;
}
/* 订单信息卡片 */
.order-card {
margin: 30rpx;
background-color: #ffffff;
border-radius: 16rpx;
padding: 24rpx 20rpx 24rpx;
box-shadow: 0 4rpx 16rpx 0 rgba(210, 213, 224, 0.5);
.card_title {
font-weight: 500;
font-size: 32rpx;
color: #333333;
padding-bottom: 10rpx;
}
}
.shop_card {
margin: 30rpx;
background-color: #ffffff;
border-radius: 16rpx;
padding: 24rpx 20rpx 24rpx;
box-shadow: 0 4rpx 16rpx 0 rgba(210, 213, 224, 0.5);
.card_title {
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.shop_title_box {
display: flex;
align-items: center;
padding-top: 40rpx;
padding-bottom: 24rpx;
border-bottom: 3rpx solid #f6f5f5;
.shop_photo {
width: 70rpx;
height: 70rpx;
min-width: 70rpx;
min-height: 70rpx;
border-radius: 50%;
flex-shrink: 0;
}
/* 左边部分头像+名字+电话号码 */
.left-section {
display: flex;
align-items: center;
flex: 1;
gap: 20rpx;
min-width: 0;
.shop_title {
margin-left: 12rpx;
font-size: 32rpx;
color: #333333;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
flex-shrink: 0;
margin-left: 20rpx;
}
.shop_phone {
font-weight: 400;
font-size: 30rpx;
color: #333333;
margin-bottom: -5rpx;
line-height: 40rpx;
white-space: nowrap;
flex-shrink: 0;
transform: translateY(-3rpx);
}
}
.shop_icon {
width: 40rpx;
height: 40rpx;
flex-shrink: 0;
margin-left: 20rpx;
margin-right: 20rpx;
transform: translateY(-3rpx);
}
}
.service_content {
padding-top: 30rpx;
padding-bottom: 30rpx;
font-size: 28rpx;
color: #666666;
border-bottom: 1rpx solid #f6f5f5;
}
.service_content__last {
border-bottom: 0rpx;
padding-bottom: 0rpx;
}
.shop_address {
padding-top: 30rpx;
display: flex;
gap: 10rpx;
color: #666666;
font-size: 26rpx;
.shop_icon {
width: 30rpx;
height: 30rpx;
flex-shrink: 0;
transform: translateY(4rpx);
}
}
}
.info-item {
display: flex;
justify-content: space-between;
margin-top: 30rpx;
}
.label {
font-size: 28rpx;
color: #999999;
}
.value {
font-size: 28rpx;
color: #333333;
}
/* 底部按钮 */
.bottom-buttons {
position: fixed;
left: 0;
right: 0;
bottom: 0;
height: 128rpx;
background-color: #ffffff;
display: flex;
flex-flow: row nowrap;
align-items: center;
justify-content: flex-end;
box-shadow: 0 -2rpx 8rpx rgba(0, 0, 0, 0.05);
padding: 0 24rpx 0 78rpx;
/* #ifdef H5 */
padding-bottom: env(safe-area-inset-bottom);
/* #endif */
z-index: 999;
}
.handel-button {
width: 186rpx;
height: 72rpx;
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-items: center;
border-radius: 36rpx;
margin-left: 30rpx;
}
.btn-border {
border: 2rpx solid #979797;
background-color: #fff;
box-sizing: border-box;
margin-left: 30rpx;
}
.btn-bg {
background-color: #FF4767;
}
.button-text {
font-size: 28rpx;
font-weight: 400;
color: #ffffff;
}
.btn-border .button-text {
font-size: 28rpx;
font-weight: 400;
color: #333;
}
/* 权限提示 */
/* #ifdef APP-PLUS */
.permission.transform {
top: calc(var(--status-bar-height) + 88rpx + 20rpx);
opacity: 1;
visibility: visible;
}
.detail-page {
padding-bottom: calc(120rpx + env(safe-area-inset-bottom));
}
/* #endif */
/* #ifdef H5 */
.detail-page {
padding-bottom: calc(120rpx + env(safe-area-inset-bottom));
}
/* #endif */
.mt_10 {
margin-top: 10rpx;
}
</style>