admin/addon/mobileshop/source/os/pages/member/detail.vue

1124 lines
26 KiB
Vue

<template>
<view class="member">
<view class="tab-block">
<view class="tab-wrap">
<block v-for="(item, index) in list" :key="index">
<view class="tab-item" @click.stop="changeAct(item)"
:class="index == act ? 'active color-base-text color-base-bg-before' : ''">{{ item.name }}
</view>
</block>
</view>
</view>
<!-- 内容的改变 -->
<view class="content contentbox">
<block v-if="act == 0">
<view class="order-list">
<view class="list-left">头像</view>
<view class="list-right">
<image v-if="!memberData.member_info.headimg"
:src="memberData.member_info.headimg ? $util.img(memberData.member_info.headimg) : $util.img($util.getDefaultImage().default_headimg)"
mode="">
</image>
<image v-else :src="$util.img(memberData.member_info.headimg)" mode="aspectFit"
@error="imgError('headimg')" @click.stop="previewMedia('headimg')"></image>
<!-- <view class="del-wrap iconfont iconclose" @click.stop="delImg('headimg')"
v-if="memberData.member_info.headimg"></view> -->
</view>
</view>
<view class="order-list">
<view class="list-left">昵称</view>
<view class="list-right">
<input type="text" v-model="memberData.member_info.nickname" />
<!-- <text class="iconfont iconright"></text> -->
</view>
</view>
<view class="order-list">
<view class="list-left">手机号</view>
<view class="list-right">
<input type="number" maxlength="11" v-model="memberData.member_info.mobile" placeholder="暂无" />
</view>
</view>
<view class="order-list">
<view class="list-left">会员等级</view>
<view class="list-right">
<picker @change="bindLevelChange" :value="index1" :range="levelList">
<view class="uni-input">{{levelList[index1]}}</view>
</picker>
<text class="iconfont iconright"></text>
</view>
</view>
<!-- <view class="order-list">
<view class="list-left">会员标签</view>
<view class="list-right">
<picker style="min-width: 50rpx;" @change="bindLabelChange" :value="index2" :range="lableList">
<view class="uni-input">{{lableList[index2]}}</view>
</picker>
<text class="iconfont iconright content-ico"></text>
</view>
</view> -->
<view class="order-list">
<view class="list-left">会员性别</view>
<view class="list-right">
<picker @change="bindGenderChange" :value="index" :range="genderArray">
<view class="uni-input">{{genderArray[index]}}</view>
</picker>
<text class="iconfont iconright"></text>
</view>
</view>
<view class="order-list" style="border: none;">
<view class="list-left">会员生日</view>
<view class="list-right">
<picker mode="date" :value="date" :end="endDate" @change="bindDateChange" v-if="memberData.member_info.birthday">
<view class="uni-input">{{date}}</view>
</picker>
<picker mode="date" :end="endDate" @change="bindDateChange" v-else>
<view class="uni-input">{{date}}</view>
</picker>
<text class="iconfont iconright"></text>
</view>
</view>
<view class="footer-wrap" :class="{ 'safe-area': isIphoneX }"><button type="primary"
@click="save()">保存</button></view>
</block>
<view class="account information" v-if="act == 1" style="background: #FFFFFF;">
<view class="order-list" @click="onDetail(1)" :class="accountData == 1 ? 'active-flex' : ''">
<view class="list-left">积分</view>
<view class="list-right">
<!-- <input type="text" v-model="memberData.point" placeholder="0.00" /> -->
<text>{{parseInt(memberData.member_info.point) || '0'}}</text>
<text class="iconfont iconright"></text>
</view>
</view>
<view class="order-list" @click="onDetail(2)">
<view class="list-left">余额(不可提现)</view>
<view class="list-right">
<!-- <input type="text" v-model="memberData.balance" placeholder="0.00" /> -->
<text>{{parseInt(memberData.member_info.balance) || '0'}}</text>
<text class="iconfont iconright"></text>
</view>
</view>
<view class="order-list" @click="onDetail(3)">
<view class="list-left">余额(可提现)</view>
<view class="list-right">
<!-- <input type="text" v-model="memberData.balance_money" placeholder="0.00" /> -->
<text>{{parseInt(memberData.member_info.balance_money) || '0'}}</text>
<text class="iconfont iconright"></text>
</view>
</view>
<view class="order-list" style="border: none;" @click="onDetail(4)">
<view class="list-left">成长值</view>
<view class="list-right">
<!-- <input type="text" v-model="memberData.growth" placeholder="0.00" /> -->
<text>{{parseInt(memberData.member_info.growth) || '0'}}</text>
<text class="iconfont iconright"></text>
</view>
</view>
</view>
<view style="background-color: #fff;margin-top: 20rpx;" v-if="act == 1">
<view class="order-list" style="border: none;">
<view class="list-left">账户记录</view>
<view class="list-right">
<picker :value="index" :range="array" @change="bindPickerChange">
<view class="select color-tip account-search"
style="display: flex;justify-content: space-between;padding: 5rpx 19rpx;">
{{array[index]}}<text class="iconfont iconiconangledown"
style="transform: scale(1.8);"></text>
</view>
</picker>
</view>
</view>
<mescroll-uni @getData="getOrderData" refs="mescroll" top="600" :size="10">
<block slot="list">
<block v-if="accountData.length > 0">
<view class="member-list">
<view class="member-list-item" v-for="(item, index) in accountData" :key="index">
<view class="integral-top"
style="display: flex;justify-content: space-between; align-items: center;">
<view class="integral" style="display: flex;">{{item.type_name}}
</view>
<view class="integral-num">{{parseInt(item.account_data)}}</view>
</view>
<view class="member-list-sec">
<view class="integral-time">{{item.type_name}}</view>
<view class="integral-times">
{{$util.timeStampTurnTime(item.create_time)}}
</view>
</view>
<view class="member-list-bottom" style="margin-top: 19rpx;margin-right: 30rpx;"
v-if="item.remark">
<view class="integral-give">{{item.remark}}
</view>
</view>
</view>
</view>
</block>
<ns-empty v-else text="暂无数据"></ns-empty>
</block>
</mescroll-uni>
</view>
<view class="account information" v-if="act == 2">
<mescroll-uni @getData="getDetailData" refs="mescrolls" top="100" :size="10">
<block slot="list">
<view class="search-inner">
<view class="search-wrap">
<text class="search-input-icon iconfont iconsousuo" @click.stop="searchMember()"
style="color: #909399;"></text>
<input class="uni-input font-size-tag" maxlength="50" v-model="searchMemberName"
placeholder="请输入订单编号" @confirm="searchMember()" />
</view>
</view>
<view class="order-list order-items">
<view class="item-inner" v-for="(item, index) in DetailData" :key="index">
<view class="order-other-info">
<text class="color-tip">订单号:{{ item.order_no}}</text>
<text>{{ item.order_status_name }}</text>
</view>
<view class="item-wrap" @click="linkSkip(item)"
v-for="(goodsItem, goodsIndex) in item.order_goods" :key="goodsIndex">
<image class="item-img"
:src="goodsItem.sku_image == '' ? $util.img($util.getDefaultImage().default_headimg) : $util.img(goodsItem.sku_image, { size: 'mid' })"
@error="imgError(index)"></image>
<view class="item-desc">
<view class="item-name uni-line-hide">{{ goodsItem.sku_name }}</view>
<view class="item-price-inner">
<view>
<!-- <view class="goods-class uni-using-hide" v-if="goodsItem.sku_spec_format">
<block v-for="(x, i) in JSON.parse(goodsItem.sku_spec_format)" :key="i">
{{ x.spec_value_name }}
{{ i < goodsItem.sku_spec_format.length - 1 ? '; ' : '' }}
</block>
</view> -->
<!-- <view class="goods-class">{{ goodsItem.goods_class_name }}</view> -->
</view>
<view class="item-price-wrap">
<text class="item-price">{{ item.order_money }}</text>
</view>
</view>
</view>
</view>
<text class="place-time color-tip"
style="width: 249rpx;height: 18rpx;font-size: 24rpx;font-family: PingFang SC;font-weight: 500;color: #909399;line-height: 20px;">{{ $util.timeStampTurnTime(item.create_time) }}</text>
</view>
</view>
<ns-empty v-if="!DetailData.length" text="暂无订单数据"></ns-empty>
</block>
</mescroll-uni>
</view>
</view>
</view>
<!-- </view> -->
</template>
<script>
import uniTag from '@/components/uni-tag/uni-tag.vue';
import nsOrderRemark from '@/components/ns-order-remark/ns-order-remark';
export default {
data() {
const currentDate = this.getDate({
format: true
})
return {
isIphoneX: false,
title: 'picker',
date: '未知',
act: 0,
memberId: 0,
dataList: [],
index1: 0,
index2: 0,
memberData: {
member_info: {},
member_label_list: [],
member_level_list: []
},
levelList: [],
lableList: [],
searchMemberName: '',
genderArray: ['保密', '男', '女'],
list: [{
id: 0,
name: '基础信息'
},
{
id: 1,
name: '账户信息'
},
{
id: 2,
name: '订单信息'
}
],
content: '',
accountData: [],
DetailData: [],
array: ['全部', '积分', '余额(可提现)', '余额(不可提现)', '成长值'],
index: 0,
status: '',
endDate: currentDate
};
},
onLoad(option) {
option.member_id ? (this.memberId = option.member_id) : this.$util.redirectTo('/pages/member/list', {},
'redirectTo');
if (!this.$util.checkToken('/pages/member/detail?member_id=' + this.memberId)) return;
option.member_id ? (this.memberId = option.member_id) : this.$util.redirectTo('/pages/Member/list', {},
'redirectTo');
if (!this.$util.checkToken('/pages/Member/orderList')) return;
},
onShow() {
// 页面默认显示的是list列表中第一条数据
this.content = this.list[0]
this.isIphoneX = this.$util.uniappIsIPhoneX();
// this.getAccountData()
this.getMeberData();
},
methods: {
onDetail(e) {
this.$util.redirectTo('/pages/member/adjustaccount', {
type: e,
item: JSON.stringify(this.memberData.member_info)
})
},
save() {
let data = {
member_id: this.memberData.member_info.member_id,
heading: this.memberData.member_info.headimg,
nickname: this.memberData.member_info.nickname,
mobile: this.memberData.member_info.mobile,
level_id: this.memberData.member_level_list[this.index1].level_id,
sex: this.index,
birthday: this.date
}
this.$api.sendRequest({
url: '/shopapi/Member/editMember',
data: data,
success: res => {
let msg = res.message;
this.$util.showToast({
title: msg
});
if (res.code == 0) {
setTimeout(() => {
this.$util.redirectTo('/pages/member/list')
}, 500);
}
}
});
},
uplodImg(type) {
this.$util.upload({
number: 1,
path: 'image'
},
res => {
if (res) {
this.$util.showToast({
title: '上传成功'
});
if (type == 'headimg') this.memberData.member_info.headimg = res[0];
}
}
);
},
delImg(type) {
if (type == 'headimg') this.memberData.member_info.headimg = '';
},
previewMedia(type) {
var paths = [this.$util.img(this.memberData[type])];
uni.previewImage({
current: 0,
urls: paths
});
},
bindGenderChange: function(e) {
this.index = e.target.value
},
bindLevelChange: function(e) {
this.index1 = e.target.value
},
bindLabelChange: function(e) {
this.index2 = e.target.value
},
// 生日时间选择
bindDateChange: function(e) {
console.log(e.target.value)
this.date = e.target.value
},
bindTimeChange: function(e) {
this.time = e.target.value
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
bindPickerChange(e) {
this.index = e.detail.value
if (e.detail.value == 0) {
this.status = ''
}
if (e.detail.value == 1) {
this.status = 'point'
}
if (e.detail.value == 2) {
this.status = 'balance_money'
}
if (e.detail.value == 3) {
this.status = 'balance'
}
if (e.detail.value == 4) {
this.status = 'growth'
}
let mescroll = {
num: 1,
size: 10
}
this.mescroll.resetUpScroll();
},
changeAct(item) {
// 激活样式是当前点击的对应下标--list中对应id
this.act = item.id;
// 可以根据点击事件改变内容
this.content = item
},
imgError(index, type) {
if (!type) {
this.dataList[index].sku_image = this.$util.getDefaultImage().default_goods_img;
} else {
this.memberData.member_info.headimg = this.$util.getDefaultImage().default_headimg;
}
this.$forceUpdate();
},
getOrderData(mescroll) {
let data = {
page_size: mescroll.size,
page: mescroll.num,
member_id: this.memberId,
account_type: this.status
};
this.mescroll = mescroll;
this.$api.sendRequest({
url: '/shopapi/Member/memberAccountList',
data: data,
success: res => {
let newArr = [];
let msg = res.message;
if (res.code == 0 && res.data) {
newArr = res.data.list;
} else {
this.$util.showToast({
title: msg
});
}
mescroll.endSuccess(newArr.length);
//设置列表数据
if (mescroll.num == 1) this.accountData = []; //如果是第一页需手动制空列表
this.accountData = this.accountData.concat(newArr); //追加新数据
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
});
},
getMeberData() {
let data = {
member_id: this.memberId
};
this.$api.sendRequest({
url: '/shopapi/member/detail',
data: data,
success: res => {
if (res.code == 0 && res.data) {
this.memberData = res.data;
if (res.data.member_info.birthday) this.date = this.$util.timeStampTurnTime(res.data.member_info.birthday,'Y-M-D')
for (let i = 0; i < res.data.member_level_list.length; i++) {
if (res.data.member_info.member_level_name == res.data.member_level_list[i]
.level_name) {
this.index1 = i
}
this.levelList.push(res.data.member_level_list[i].level_name)
}
if (this.memberData.member_info.sex == '0') {
this.index = 0
} else if (this.memberData.member_info.sex == '1') {
this.index = 1
} else {
this.index = 2
}
} else {
this.$util.showToast({
title: res.message
});
}
}
});
},
searchMember() {
this.mescrolls.resetUpScroll();
},
getDetailData(mescroll) {
let data = {
member_id: this.memberId,
search_text: this.searchMemberName
};
this.mescrolls = mescroll;
this.$api.sendRequest({
url: '/shopapi/Member/orderList',
data: data,
success: res => {
let newArr = [];
let msg = res.message;
if (res.code == 0 && res.data) {
newArr = res.data.list;
} else {
this.$util.showToast({
title: msg
});
}
mescroll.endSuccess(newArr.length);
//设置列表数据
if (mescroll.num == 1) this.DetailData = []; //如果是第一页需手动制空列表
this.DetailData = this.DetailData.concat(newArr); //追加新数据
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
});
},
linkSkip(order){
var template = '';
if (order.order_type == 1) {
template = 'basis';
} else if (order.order_type == 2) {
template = 'store';
} else if (order.order_type == 3) {
template = 'local';
} else if (order.order_type == 4) {
template = 'virtual';
}
this.$util.redirectTo("/pages_rush/order/detail/" + template, {
order_id: order.order_id,
template: template
});
}
},
getList(mescroll) {
var data = {
page: mescroll.num,
page_size: mescroll.size,
status: this.status
};
this.$api.sendRequest({
url: '/shopapi/shopwithdraw/lists',
data: data,
success: res => {
let newArr = [];
let msg = res.message;
if (res.code == 0 && res.data) {
if (res.data.page_count == 0) {
this.emptyShow = true;
}
newArr = res.data.list;
} else {
this.$util.showToast({
title: msg
});
}
mescroll.endSuccess(newArr.length);
//设置列表数据
if (mescroll.num == 1) this.dashboard_list = []; //如果是第一页需手动制空列表
this.dashboard_list = this.dashboard_list.concat(newArr); //追加新数据
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
});
}
};
</script>
<style lang="scss">
page {
overflow: hidden;
}
.tab-block {
display: flex;
flex-direction: row;
justify-content: space-between;
background: #fff;
.tab-wrap {
width: 100%;
height: 90rpx;
background-color: #fff;
display: flex;
flex-direction: row;
justify-content: space-around;
}
.tab-item {
line-height: 90rpx;
}
.active {
position: relative;
&::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
height: 4rpx;
width: 100%;
}
}
}
.account-search {
width: 250rpx;
background: #FFFFFF;
border: 1px solid #CCCCCC;
border-radius: 50rpx;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.search-inner {
background-color: #F8F8F8;
padding-left: 30rpx;
padding-right: 30rpx;
.search-wrap {
display: flex;
align-items: center;
padding: 0 20rpx;
height: 70rpx;
margin-top: 20rpx;
background-color: #FFFFFF;
border-radius: 100rpx;
.search-input-icon {
margin-right: 20rpx;
color: #F8F8F8;
}
input {
flex: 1;
}
}
}
.tag {
font-size: $font-size-goods-tag;
margin-right: $margin-updown;
border: 1px solid #ff6a00;
border-radius: 2rpx;
padding: 0 13rpx;
line-height: 1.5;
font-weight: 400;
// width: 140rpx;
color: #ff6a00;
}
.member_info {
background-color: #fff;
margin: $margin-both;
border-radius: $border-radius;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
.account_base {
display: flex;
justify-content: space-between;
padding: $padding 0 10rpx 30rpx;
.head {
height: 106rpx;
width: 106rpx;
margin-right: $margin-both;
}
.nickname {
max-width: 360rpx;
font-weight: 500;
font-size: $font-size-toolbar;
}
}
.account-about {
// padding: 0 30rpx 30rpx;
display: flex;
justify-content: space-between;
align-items: center;
>view {
flex: 1;
}
.num,
.tip {
color: #fff;
text-align: center;
}
}
}
.order-title,
.member-title {
position: relative;
padding-left: 20rpx;
color: $color-title;
font-weight: bold;
font-size: $font-size-toolbar;
margin: 10rpx 30rpx 0;
&::after {
content: '';
position: absolute;
left: 0;
top: 50%;
height: 28rpx;
width: 6rpx;
transform: translateY(-50%);
}
}
.order-list {
.item-inner {
position: relative;
background-color: #fff;
padding: 30rpx 30rpx;
margin-bottom: 20rpx;
.order-other-info {
display: flex;
justify-content: space-between;
font-size: $font-size-tag;
}
.item-wrap {
display: flex;
padding: 30rpx 20rpx 30rpx 0;
.item-img {
margin-right: 20rpx;
width: 120rpx;
height: 120rpx;
border-radius: 10rpx;
}
.item-desc {
display: flex;
flex-direction: column;
flex: 1;
color: $color-title;
.item-name {
margin-bottom: 12rpx;
line-height: 1.4;
}
}
.item-price-inner {
display: flex;
// justify-content: space-between;
.goods-class {
width: 300rpx;
font-size: $font-size-activity-tag;
color: $color-tip;
}
.item-price-wrap {
display: flex;
flex-direction: column;
align-items: flex-end;
font-weight: initial;
}
.item-price {
width: 101rpx;
height: 24rpx;
font-size: 24rpx;
font-family: Roboto;
font-weight: 500;
color: #303133;
line-height: 38rpx;
}
.item-number {
font-size: $font-size-tag;
color: $color-tip;
}
}
}
.place-time {
font-size: $font-size-tag;
}
}
}
/* 内容 */
// 头像
// 基础信息模块
.content {
margin-top: 20rpx;
background: #fff;
padding: 0 30rpx;
}
.base-coentent {
// width: 750rpx;
height: 742rpx;
background: #FFFFFF;
}
.name {
color: #303133;
font-size: 28rpx;
}
.order-list {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #eee;
padding: 20rpx 0;
.list-right {
display: flex;
flex-direction: row;
align-items: center;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
input {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
text-align: right;
margin-right: 20rpx;
max-width: 280rpx;
}
image {
width: 82rpx;
height: 82rpx;
border-radius: 50%;
}
.order-content {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
text-align: right;
margin-right: 20rpx;
}
switch,
.uni-switch-wrapper,
.uni-switch-input {
width: 80rpx;
height: 42rpx;
}
.iconfont {
font-size: 30rpx;
color: #909399;
}
label {
font-size: 28rpx;
color: #909399;
}
}
.list-left {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
}
}
.order-items {
display: block;
}
.content-list {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #EEEEEE;
position: relative;
}
.content-list:last-child {
border: none;
}
.content-list input {
text-align: right;
margin-top: 25rpx;
font-size: 26rpx;
}
.content-list image {
width: 82rpx;
height: 82rpx;
border-radius: 50%;
margin-left: 70rpx;
}
.account-section {
width: 750rpx;
justify-content: space-between;
}
.account-top {
display: flex;
background-color: #FFFFFF;
justify-content: space-between;
padding: 20rpx 30rpx;
border-top: 40rpx solid #F8F8F8;
//margin-top:40rpx;
}
.account-title {
font-size: 32rpx;
font-family: PingFang SC;
font-weight: bold;
color: #303133;
line-height: 60rpx;
}
.account-section input {
width: 270rpx;
height: 60rpx;
background: #FFFFFF;
border: 1rpx solid #CCCCCC;
border-radius: 30rpx;
margin-top: 20rpx;
margin-right: 30rpx;
}
.balance,
.member-list {
background: #FFFFFF;
padding: 0 30rpx;
}
.member-list-item {
border-bottom: 1px solid #EEEEEE;
padding: 20rpx 0;
}
.member-list-item:last-child {
border: none;
}
.member-list-sec {
display: flex;
}
.integral {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
}
.integral-give {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
}
.member-list-top {
display: flex;
justify-content: space-between;
margin-top: 52rpx;
}
.integral-num {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
}
.reward {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
}
.integral-time {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
line-height: 20rpx;
margin-top: 10rpx;
}
.integral-times {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
line-height: 20rpx;
line-height: 36rpx;
margin-left: 30rpx;
}
.order {
height: 25rpx;
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
line-height: 36rpx;
margin-top: 22rpx;
}
.balance-no {
height: 27rpx;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
line-height: 36rpx;
margin-top: 19rpx;
}
.balance-no-num {
width: 107rpx;
height: 22rpx;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
line-height: 36rpx;
}
.adjust {}
.order-seach {
width: 690rpx;
height: 70rpx;
background: #FFFFFF;
border-radius: 35rpx;
margin: 20rpx auto;
}
.order-top {
display: flex;
justify-content: space-between;
margin-top: 37rpx;
}
.order-number {
height: 23rpx;
font-size: 24rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
line-height: 20rpx;
}
.order-status {
height: 23rpx;
font-size: 24rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
line-height: 20rpx;
}
.order-introduce {
width: 528rpx;
height: 62rpx;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 500;
color: #303133;
line-height: 36rpx;
}
.order-price {
width: 101rpx;
height: 24rpx;
font-size: 24rpx;
font-weight: 500;
color: #303133;
line-height: 38rpx;
}
.order-time {
width: 249rpx;
height: 18rpx;
font-size: 24rpx;
font-family: PingFang SC;
font-weight: 500;
color: #909399;
line-height: 20rpx;
margin-top: 30rpx;
}
.safe-area {
padding-bottom: calc(constant(safe-area-inset-bottom) + 100rpx);
padding-bottom: calc(env(safe-area-inset-bottom) + 100rpx);
}
.footer-wrap {
position: fixed;
width: 100%;
bottom: 0;
left: 0;
// padding: 40rpx 0;
z-index: 10;
padding-bottom: 40rpx;
}
</style>