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

1115 lines
29 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-section2" v-if="orderInfo.state == '2' || orderInfo.state == '3'">
<view class="service-code">
<text class="service-code-value">{{ orderInfo.server_code }}</text>
<image class="service-code-label" mode="widthFix"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/e306ce60-c10c-4eec-a8bf-1b064fc21a32.png" />
</view>
<view class="status-row">
<image class="status-section-image" mode="widthFix"
src="https://mrrplus.oss-cn-beijing.aliyuncs.com/photo/system/27783709-3bda-472a-ab6a-824ed4b11d2a.png" />
<text class="status-text-red">
{{ stateItem.text }}
<text class="status-text-normal">,请上门/到店后出示服务码</text>
</text>
</view>
</view>
<view v-else class="status-section">
<image class="status-section-image" mode="widthFix" :src="stateItem.icon" />
<text class="status-text">{{ stateItem.text }}</text>
</view>
<view class="syr-card" v-if="identity==0">
<view class="syr-card-header">
预约手艺人信息
</view>
<view class="syr-card-footer flex-row-center-between">
<view class="syr-card-footer-left flex-row-center">
<image class="syr-card-footer-left-img" :src="orderInfo.head_photo"></image>
<view class="syr-card-footer-left-text">{{ `${orderInfo.name} ${orderInfo.account}` }}</view>
</view>
<image class="syr-card-footer-right" @click="contactService(orderInfo.account)"
src="/static/images/icons/phone.png"></image>
</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="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"
v-if="orderInfo.second_class_title">{{identity==0?'服务范围':'使用场景'}}{{
orderInfo.first_class_title +
" " +
orderInfo.second_class_title.join("、")
}}</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 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" v-if="orderInfo.server_code && orderInfo.state !=7">
<text class="label">服务码</text>
<text class="value">{{ orderInfo.server_code }}</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 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" />
<view class="shop_title">{{ orderInfo.name }}</view>
</view>
<view class="service_content " 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>
<!-- 底部按钮 -->
<view class="bottom-buttons" v-show="orderInfo.state != 5">
<view class="handel-button btn-border" v-if="orderInfo.state == 2 || orderInfo.state == 3"
@click.stop="refund($event, orderInfo)">
<text class="button-text">申请退款</text>
</view>
<view class="handel-button btn-border" v-if="orderInfo.state == 1"
@click.stop="cancelOrder($event, orderInfo)">
<text class="button-text">取消订单</text>
</view>
<view class="handel-button btn-bg" v-if="orderInfo.state == 1" @click.stop="goPay($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">开始服务</text>
</view>
<view
class="handel-button btn-bg"
v-if="orderInfo.state == 4"
@click.stop="endOrder($event, orderInfo)"
>
<text class="button-text">服务完成</text>
</view> -->
</view>
<!-- 获取权限提示匡内容 -->
<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 {
identity: 0, //身份0为商家1为手艺人
interfaceList: [{
weChatRefund: "/sj/workHourOrder/weChatRefund",
aliRefund: "/sj/workHourOrder/aliRefund",
cancel: "/sj/workHourOrder/cancel",
details: "/sj/workHourOrder/details",
},
{
weChatRefund: "/syr/workSeatOrder/weChatRefund",
aliRefund: "/syr/workSeatOrder/aliRefund",
cancel: "/syr/workSeatOrder/cancel",
details: "/syr/workSeatOrder/details",
},
],
isShowPer: false,
id: "",
staffInfo: {
avatar: "/static/images/staff.jpg",
name: "中医理疗谢飞",
rating: 5,
},
showInput: false,
userInfo: {},
orderInfo: {},
reservation_address_arr: {},
user_syr: {},
scrollTop: 0,
options: {}
};
},
async onLoad(options) {
console.log(options, '查看参数------------------------');
this.options = options
this.id = options.order_id;
if (options.identity) {
this.identity = options.identity;
}
if (options.order_id) {
// 请求订单详情
const {
data
} = await request.post("/user/getuser", {
type: 2
});
this.userInfo = data;
this.getOrderDetail();
}
console.log(this.userInfo, 'this.userInfothis.userInfo');
//信息读取
if (options.push_id) {
this.messageRead(options.push_id)
}
},
async onShow() {
this.getOrderDetail();
},
onPageScroll(e) {
this.scrollTop = e.scrollTop;
},
computed: {
backgroundColor() {
if (this.scrollTop > 10) {
return `rgba(255, 255, 255, ${0.02 * this.scrollTop});`;
}
return "transparent";
},
stateItem() {
const list = [{
text: "待支付",
icon: "/static/images/icons/pay.png",
state: "1"
},
{
text: "待接单",
icon: "/static/images/icons/pending.png",
state: "2",
},
{
text: "待服务",
icon: "/static/images/icons/pendingService.png",
state: "3",
},
{
text: "服务中",
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: {
// 用于标准格式的方法
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}`;
}
const formattedOriginal = format(originalDate);
const newDate = new Date(originalDate);
newDate.setMinutes(newDate.getMinutes() + addMinutes);
const formattedNew = format(newDate);
return {
original: formattedOriginal,
afterAddingMinutes: formattedNew,
};
},
async getOrderDetail() {
console.log(this.identity, 'this.identitythis.identity');
console.log(this.id, 'this.id.ididididididid');
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_hour,
...userSyr, // 有手艺人就展开,没有就是空对象
work_hour_id: res.data.work_hour.id,
order_id: res.data.order.id,
syr_id: userSyr.id, // 手艺人ID无手艺人时为 undefined
} : {};
console.log(this.orderInfo, '----------------------------------')
} else if (this.identity == 1) {
this.orderInfo = res.data ? {
...res.data.order,
...res.data.work_seat,
...res.data.user_sj,
work_hour_id: res.data.work_seat.id,
order_id: res.data.order.id,
user_sj_id: res.data.user_sj.id,
} : {};
}
// 计算服务时长
this.orderInfo.service_duration = this.calculateServiceDuration();
console.log('----------------------------------', this.orderInfo)
});
},
// 计算服务时长返回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 '--';
}
},
refund(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;
}
request
.post(url, data)
.then((res) => {
if (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));
}
},
});
},
cancelOrder(e, order) {
// #ifdef APP-PLUS
e.preventDefault();
e.stopPropagation();
// #endif
uni.showModal({
title: "取消订单",
content: "确定要取消该订单吗?",
success: (res) => {
if (res.confirm) {
let data = {
order_no: order.number,
};
let url = this.interfaceList[this.identity].cancel;
request
.post(url, data)
.then((res) => {
if (res.code == 200 || res.code == 1) {
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));
}
},
});
},
goPay(e, order) {
uni.redirectTo({
url: `/pages/shop/pay?id=${order.id}&money=${order.order_money}&title=${order.title}&number=${order.number}&identity=${this.identity}`,
});
},
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.orderInfo.latitude),
longitude: parseFloat(this.orderInfo.longitude),
name: this.orderInfo.name,
address: this.orderInfo.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;
}
/* 服务码状态区域 */
.status-section2 {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding-top: 55rpx;
padding-bottom: 20rpx;
gap: 20rpx;
.status-row {
display: flex;
align-items: center;
justify-content: center;
width: auto;
}
.status-section-image {
width: 27rpx;
margin-right: 6rpx;
margin-top: -4rpx;
}
.service-code {
display: flex;
align-items: baseline;
justify-content: center;
width: auto;
padding-bottom: 20rpx;
.service-code-label {
width: 96rpx;
height: 41rpx;
margin-left: 6rpx;
position: relative;
top: -45rpx;
}
.service-code-value {
font-family: DINPro, DINPro;
font-weight: bold;
font-size: 80rpx;
color: #333333;
line-height: 103rpx;
text-align: left;
font-style: normal;
}
}
.status-text-red {
font-weight: 400;
font-size: 26rpx;
color: #DC232F;
line-height: 37rpx;
text-align: left;
font-style: normal;
}
.status-text-normal {
color: #333333;
}
}
/* 预约手艺人信息卡片 */
.syr-card {
margin: 30rpx;
background-color: #ffffff;
padding: 30rpx 20rpx;
border-radius: 16rpx;
.syr-card-header {
font-weight: 500;
font-size: 32rpx;
color: #333333;
line-height: 45rpx;
text-align: left;
font-style: normal;
margin-bottom: 40rpx;
}
.syr-card-footer {
.syr-card-footer-left {
.syr-card-footer-left-img {
width: 70rpx;
height: 70rpx;
border-radius: 50%;
margin-right: 20rpx;
}
.syr-card-footer-left-text {
font-weight: 400;
font-size: 28rpx;
color: #333333;
line-height: 40rpx;
text-align: left;
font-style: normal;
}
}
.syr-card-footer-right {
width: 40rpx;
height: 40rpx;
}
}
}
/* 预约信息卡片 */
.booking-card {
margin: 0rpx 30rpx 20rpx;
background-color: #ffffff;
border-radius: 20rpx;
padding: 34rpx 30rpx 40rpx 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;
}
.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;
color: #666666;
width: 400rpx;
}
}
}
.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: 24rpx;
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: 20rpx;
}
.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: 36rpx 20rpx 40rpx;
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: 36rpx 20rpx 40rpx;
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;
gap: 14rpx;
padding-top: 40rpx;
padding-bottom: 24rpx;
border-bottom: 2rpx solid #f6f5f5;
.shop_photo {
width: 94rpx;
height: 94rpx;
border-radius: 10rpx;
}
.shop_title {
font-size: 32rpx;
color: #333333;
}
}
.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: 10rpx;
}
.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: 60rpx;
}
.btn-border {
border: 2rpx solid #FF4767;
background-color: #fff;
box-sizing: border-box;
margin-left: 60rpx;
}
.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: #FF4767;
}
/* 权限提示 */
/* #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>