931 lines
19 KiB
Vue
931 lines
19 KiB
Vue
<template>
|
||
<view class="container">
|
||
<!-- 顶部背景 -->
|
||
<view class="header-bg"></view>
|
||
|
||
<!-- 自定义导航栏 -->
|
||
<NavBar class="nav-bar" isBack bgColor="#3C99FB" textColor="#fff" isRightIcon tipLayerType="train-tickets-tip"
|
||
isTipLayer tipLayerText="修改车票信息" :buttonGroup="buttonGroup" @button-click="util.clickTitlePopupButton">
|
||
<template v-slot:center>
|
||
<text class="center-text">订单详情</text>
|
||
</template>
|
||
</NavBar>
|
||
|
||
<!-- 页面内容 -->
|
||
<scroll-view scroll-y class="content-scroll">
|
||
<!-- 订单信息 -->
|
||
<view class="order-info-box">
|
||
<view class="order-number-row">
|
||
<text class="order-label">订单号:{{ ticketsInfo.orderInfo.orderNo }}</text>
|
||
<image class="copy-btn" @click="copyOrderNo"
|
||
src="/static/image/other/train-tickets/12306-tickets/copy-button.png"></image>
|
||
</view>
|
||
<text class="order-time">下单时间:{{ ticketsInfo.orderInfo.orderTime }}</text>
|
||
</view>
|
||
<view class="main-card">
|
||
<!-- 车票卡片 -->
|
||
<view class="ticket-card">
|
||
<view class="ticket-main-info">
|
||
<view class="station-time-box">
|
||
<text class="time-text">{{ departureTimeDisplay }}</text>
|
||
<view class="station-text">{{ ticketsInfo.ticketInfo.departureStation }}
|
||
<uni-icons type="forward" size="10" color="#767676"></uni-icons>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="train-info-box">
|
||
<view class="train-no">
|
||
<text style="line-height: 26rpx;">{{ ticketsInfo.ticketInfo.trainNo }}</text>
|
||
<uni-icons type="arrowright" size="10" color="#979797"></uni-icons>
|
||
</view>
|
||
<view class="stopover-box">
|
||
<image style="width: 100%;height: 100%;"
|
||
src="/static/image/other/train-tickets/12306-tickets/stopover-bg.png"></image>
|
||
</view>
|
||
<text class="duration-text">历时{{ ticketsInfo.ticketInfo.duration }}</text>
|
||
</view>
|
||
|
||
<view class="station-time-box" style="align-items: flex-start;">
|
||
<view class="time-row">
|
||
<text class="time-text">{{ arrivalTimeDisplay }}</text>
|
||
<text v-if="dayDiff > 0" class="day-badge">+{{ dayDiff }}</text>
|
||
</view>
|
||
<view class="station-text">{{ ticketsInfo.ticketInfo.arrivalStation }}
|
||
<uni-icons type="forward" size="10" color="#767676"></uni-icons>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="date-row">
|
||
<text class="date-text">发车时间:{{ ticketsInfo.ticketInfo.date }} {{ ticketsInfo.ticketInfo.weekDay
|
||
}}</text>
|
||
<text class="valid-text">车票当日当次有效</text>
|
||
</view>
|
||
|
||
<view class="gate-info-box">
|
||
<text>检票口{{ ticketsInfo.ticketInfo.gate }}</text>
|
||
<text class="gate-text">(如有变更,请以现场公告为准)</text>
|
||
</view>
|
||
|
||
|
||
</view>
|
||
<!-- 操作栏 -->
|
||
<view class="action-bar">
|
||
<view class="action-item" @click="handleAction('变更到站')">
|
||
<text class="action-text">变更到站</text>
|
||
</view>
|
||
<view class="divider"></view>
|
||
<view class="action-item" @click="handleAction('改签')">
|
||
<text class="action-text">改签</text>
|
||
</view>
|
||
<view class="divider"></view>
|
||
<view class="action-item" @click="handleAction('退票')">
|
||
<text class="action-text">退票</text>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 乘客卡片 -->
|
||
<view class="passenger-card-box" v-for="(passenger, index) in ticketsInfo.passengerList" :key="index">
|
||
<view class="passenger-card">
|
||
<view class="passenger-header">
|
||
<view class="name-box">
|
||
<text class="passenger-name">{{ passenger.name }}</text>
|
||
<text class="tag-text">{{ passenger.type }}</text>
|
||
</view>
|
||
<view class="seat-info">
|
||
<text v-if="computeSeatNo(passenger.seatNo)" class="tag-text-grey">{{
|
||
computeSeatNo(passenger.seatNo) }}</text>
|
||
<text class="seat-text">{{ passenger.seatType }} {{ passenger.carriage }}车 {{
|
||
passenger.seatNo
|
||
}}号</text>
|
||
<uni-icons style="margin-left: 4rpx;margin-top: 4rpx;" type="forward" size="10"
|
||
color="#979797"></uni-icons>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="passenger-details">
|
||
<text class="id-card-text">{{ passenger.idType }}</text>
|
||
<text class="price-text">¥{{ passenger.price }}</text>
|
||
</view>
|
||
|
||
<view class="status-row">
|
||
<text class="status-text">已支付</text>
|
||
<text class="refund-rule-text">退改说明</text>
|
||
</view>
|
||
</view>
|
||
<view class="passenger-actions">
|
||
<view class="svc-btn outline">
|
||
<text class="svc-text">订餐</text>
|
||
</view>
|
||
<view class="svc-btn outline">
|
||
<text class="svc-text">购乘意险</text>
|
||
</view>
|
||
<view class="svc-btn primary" v-if="passenger.isMe">
|
||
<text class="svc-text-white">
|
||
<image style="width: 20rpx;height: 20rpx;"
|
||
src="/static/image/other/train-tickets/12306-tickets/qr-code.png"></image>
|
||
<text style="margin-left: 8rpx;">二维码验票</text>
|
||
</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
|
||
</view>
|
||
|
||
<view style="margin: 0 16rpx;">
|
||
<!-- 分享区 -->
|
||
<view class="share-section">
|
||
<text class="share-tips">美好旅途,快与朋友一起分享吧~</text>
|
||
<image style="width: 158rpx;height: 50rpx;"
|
||
src="/static/image/other/train-tickets/12306-tickets/share.png">
|
||
</image>
|
||
</view>
|
||
|
||
<!-- 提示 -->
|
||
<view class="notice-row">
|
||
<uni-icons type="notification" size="14" color="#AAAAAA"></uni-icons>
|
||
<text class="notice-text">订单信息查询有效期限为30日</text>
|
||
</view>
|
||
|
||
<!-- 广告Banner -->
|
||
<view class="ad-banner">
|
||
<image class="bg-image" src="/static/image/other/train-tickets/12306-tickets/hotel-bg.png"
|
||
mode="widthFix">
|
||
</image>
|
||
<image class="bg-image" style="opacity: 0;position: relative;"
|
||
src="/static/image/other/train-tickets/12306-tickets/hotel-bg.png" mode="widthFix">
|
||
</image>
|
||
<view class="hotel-ad">
|
||
<view class="hotel-search-row">
|
||
<view class="city-box">
|
||
<uni-icons class="search-icon" style="margin-right: 8rpx;height: 16px;" type="search"
|
||
size="16" color="#C8C8C8"></uni-icons>
|
||
<text class="city-text">{{ ticketsInfo.hotelInfo.city }}</text>
|
||
</view>
|
||
|
||
<view class="date-range">
|
||
<text class="date-val">{{ ticketsInfo.hotelInfo.startDay }}</text>
|
||
<text class="date-label">入住</text>
|
||
<view class="night-count">
|
||
<text class="night-num">{{ data.nightCount }}晚</text>
|
||
</view>
|
||
<text class="date-val">{{ ticketsInfo.hotelInfo.endDay }}</text>
|
||
<text class="date-label">离店</text>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
|
||
<!-- 更多服务 -->
|
||
<view class="bottom-image">
|
||
<image style="width: 100%;height: 100%;"
|
||
src="/static/image/other/train-tickets/12306-tickets/bottom-bg.png" mode="widthFix">
|
||
</image>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup>
|
||
import NavBar from '@/components/nav-bar/nav-bar.vue';
|
||
import {
|
||
ref,
|
||
reactive,
|
||
toRefs,
|
||
computed
|
||
} from 'vue';
|
||
import {
|
||
onLoad,
|
||
onShow
|
||
} from '@dcloudio/uni-app';
|
||
|
||
import { util } from '@/utils/common.js';
|
||
|
||
const buttonGroup = [{
|
||
name: "编辑车票信息",
|
||
click: () => {
|
||
util.goPage('/pages/other/train-tickets/edit/edit')
|
||
}
|
||
}]
|
||
|
||
const ticketType = [
|
||
{
|
||
label: '成人票',
|
||
value: '1'
|
||
},
|
||
{
|
||
label: '儿童票',
|
||
value: '2'
|
||
},
|
||
{
|
||
label: '学生票',
|
||
value: '3'
|
||
},
|
||
{
|
||
label: '残疾军人票',
|
||
value: '4'
|
||
}
|
||
]
|
||
|
||
const statusBarHeight = ref(20);
|
||
const data = reactive({
|
||
ticketsInfo: {
|
||
"orderInfo": {
|
||
"orderNo": "EJ66223536",
|
||
"orderTime": "2026.01.01"
|
||
},
|
||
"ticketInfo": {
|
||
"departureTime": "01-01 09:19",
|
||
"departureStation": "北京南",
|
||
"arrivalTime": "01-01 14:04",
|
||
"arrivalStation": "上海虹桥",
|
||
"trainNo": "G905",
|
||
"duration": "4时45分",
|
||
"date": "2026.01.01",
|
||
"weekDay": "星期四",
|
||
"gate": "6B"
|
||
},
|
||
"passengerList": [
|
||
{
|
||
"name": "张元英",
|
||
"type": "成人票",
|
||
"seatType": "商务座",
|
||
"carriage": "01",
|
||
"seatNo": "03C",
|
||
"idType": "外国护照(KR)",
|
||
"price": "2110",
|
||
"status": "已支付",
|
||
"isMe": true
|
||
}
|
||
],
|
||
"hotelInfo": {
|
||
"city": "上海",
|
||
"startDay": "01-01",
|
||
"endDay": "01-02"
|
||
}
|
||
},
|
||
nightCount: 1
|
||
})
|
||
|
||
let { ticketsInfo } = toRefs(data)
|
||
|
||
|
||
|
||
// Computed Helpers for Display
|
||
|
||
const getDisplayTime = (str) => {
|
||
if (!str) return '';
|
||
// If format is "MM-DD HH:mm", split and take time
|
||
if (str.length > 5) {
|
||
return str.split(' ')[1];
|
||
}
|
||
return str;
|
||
}
|
||
|
||
const departureTimeDisplay = computed(() => {
|
||
return getDisplayTime(data.ticketsInfo.ticketInfo.departureTime);
|
||
})
|
||
|
||
const arrivalTimeDisplay = computed(() => {
|
||
return getDisplayTime(data.ticketsInfo.ticketInfo.arrivalTime);
|
||
})
|
||
|
||
const dayDiff = computed(() => {
|
||
const dep = data.ticketsInfo.ticketInfo.departureTime;
|
||
const arr = data.ticketsInfo.ticketInfo.arrivalTime;
|
||
if (!dep || !arr) return 0;
|
||
|
||
// Format is "MM-DD HH:mm"
|
||
const depDate = dep.split(' ')[0];
|
||
const arrDate = arr.split(' ')[0];
|
||
|
||
if (depDate === arrDate) return 0;
|
||
|
||
const year = new Date().getFullYear();
|
||
// Use "/" for compatibility
|
||
const d1 = new Date(`${year}/${depDate.replace(/-/g, '/')} 00:00:00`).getTime();
|
||
const d2 = new Date(`${year}/${arrDate.replace(/-/g, '/')} 00:00:00`).getTime();
|
||
|
||
const diffTime = d2 - d1;
|
||
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));
|
||
return diffDays > 0 ? diffDays : 0;
|
||
})
|
||
|
||
const computeSeatNo = (seatNo) => {
|
||
if (seatNo.includes('C') || seatNo.includes('F')) {
|
||
return '靠窗';
|
||
} else if (seatNo.includes('A') || seatNo.includes('D')) {
|
||
return '靠过道';
|
||
}
|
||
return '';
|
||
}
|
||
|
||
/**
|
||
* 计算两个日期之间的天数差
|
||
*/
|
||
const calculateNightCount = () => {
|
||
const currentYear = new Date().getFullYear();
|
||
// 补全年份,格式:YYYY-MM-DD
|
||
const startStr = `${currentYear}-${data.ticketsInfo.hotelInfo.startDay}`;
|
||
const endStr = `${currentYear}-${data.ticketsInfo.hotelInfo.endDay}`;
|
||
|
||
// 解析时间戳 (兼容 iOS,用 / 替换 -)
|
||
const startTime = new Date(startStr.replace(/-/g, '/')).getTime();
|
||
const endTime = new Date(endStr.replace(/-/g, '/')).getTime();
|
||
|
||
if (!isNaN(startTime) && !isNaN(endTime)) {
|
||
const diff = endTime - startTime;
|
||
// 向上取整,不足一天按一天算
|
||
const days = Math.ceil(diff / (1000 * 60 * 60 * 24));
|
||
data.nightCount = days > 0 ? days : 1;
|
||
} else {
|
||
data.nightCount = 1;
|
||
}
|
||
}
|
||
|
||
onLoad(() => {
|
||
const sys = uni.getSystemInfoSync();
|
||
statusBarHeight.value = sys.statusBarHeight || 20;
|
||
});
|
||
|
||
onShow(() => {
|
||
if (uni.getStorageSync('ticketsInfo')) {
|
||
Object.assign(data.ticketsInfo, uni.getStorageSync('ticketsInfo'))
|
||
calculateNightCount()
|
||
}
|
||
// #ifdef APP-PLUS
|
||
util.setAndroidSystemBarColor('#ffffff')
|
||
setTimeout(() => {
|
||
plus.navigator.setStatusBarStyle("light");
|
||
}, 500)
|
||
// #endif
|
||
|
||
const stored = uni.getStorageSync('ticketsInfo')
|
||
if (stored) {
|
||
Object.assign(data.ticketsInfo, stored)
|
||
calculateNightCount()
|
||
}
|
||
});
|
||
|
||
const goBack = () => {
|
||
uni.navigateBack();
|
||
};
|
||
|
||
const copyOrderNo = () => {
|
||
uni.setClipboardData({
|
||
data: orderInfo.value.orderNo,
|
||
success: () => {
|
||
uni.showToast({
|
||
title: '复制成功',
|
||
icon: 'none'
|
||
});
|
||
}
|
||
});
|
||
};
|
||
|
||
const handleAction = (action) => {
|
||
uni.showToast({
|
||
title: `点击了${action}`,
|
||
icon: 'none'
|
||
})
|
||
}
|
||
</script>
|
||
|
||
<style lang="less" scoped>
|
||
.container {
|
||
width: 100%;
|
||
min-height: 100vh;
|
||
background-color: #ffffff;
|
||
position: relative;
|
||
}
|
||
|
||
/* 顶部渐变背景 */
|
||
.header-bg {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 540rpx;
|
||
background: linear-gradient(180deg, #3C99FB 0%, #3C99FB 45.73%, rgba(60, 153, 251, 0.6007) 60.23%, rgba(122, 122, 122, 0) 98.34%);
|
||
z-index: 0;
|
||
}
|
||
|
||
/* 导航栏 */
|
||
.nav-bar {
|
||
.center-text {
|
||
font-size: 40rpx;
|
||
font-weight: 400;
|
||
color: #fff;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
::v-deep.right-icon {
|
||
margin-right: 50rpx;
|
||
}
|
||
|
||
/* 内容区域 */
|
||
.content-scroll {
|
||
position: relative;
|
||
z-index: 1;
|
||
// padding: 0 16rpx;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
}
|
||
|
||
/* 订单源信息 */
|
||
.order-info-box {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: space-between;
|
||
margin: 0 16rpx;
|
||
margin-bottom: 12rpx;
|
||
margin-top: 14rpx;
|
||
}
|
||
|
||
.order-number-row {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
}
|
||
|
||
.order-label {
|
||
font-size: 26rpx;
|
||
color: #FFFFFF;
|
||
margin-right: 5px;
|
||
line-height: 52rpx;
|
||
}
|
||
|
||
.copy-btn {
|
||
height: 28rpx;
|
||
width: 50rpx;
|
||
|
||
}
|
||
|
||
.order-time {
|
||
font-size: 24rpx;
|
||
color: #FFFFFF;
|
||
}
|
||
|
||
.main-card {
|
||
margin: 0 16rpx;
|
||
position: relative;
|
||
/* 四周均匀扩散阴影 */
|
||
box-shadow: 0rpx 0rpx 32rpx 4rpx rgba(0, 0, 0, 0.1);
|
||
background-color: #fff;
|
||
border-radius: 16rpx;
|
||
}
|
||
|
||
/* 票卡片 */
|
||
.ticket-card {
|
||
position: relative;
|
||
background-color: #FFFFFF;
|
||
border-radius: 12rpx;
|
||
padding: 30rpx 28rpx;
|
||
box-shadow: 0rpx 8rpx 30rpx 0rpx rgba(0, 0, 0, 0.05);
|
||
z-index: 9;
|
||
}
|
||
|
||
.ticket-main-info {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
align-items: flex-start;
|
||
margin-bottom: 30rpx;
|
||
}
|
||
|
||
.station-time-box {
|
||
display: flex;
|
||
flex-direction: column;
|
||
}
|
||
|
||
.time-text {
|
||
font-size: 48rpx;
|
||
font-weight: 500;
|
||
color: #1a1a1a;
|
||
line-height: 52rpx;
|
||
margin: 0 10rpx;
|
||
}
|
||
|
||
.station-text {
|
||
font-size: 30rpx;
|
||
color: #1a1a1a;
|
||
margin: 12rpx 12rpx 0;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.train-info-box {
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
margin-top: 8rpx;
|
||
}
|
||
|
||
.train-no {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
font-size: 26rpx;
|
||
color: #1A1A1A;
|
||
}
|
||
|
||
.stopover-box {
|
||
width: 90rpx;
|
||
height: 24rpx;
|
||
position: relative;
|
||
margin-bottom: 8rpx;
|
||
margin-top: 14rpx;
|
||
}
|
||
|
||
.stopover-text {
|
||
position: absolute;
|
||
top: 50%;
|
||
left: 50%;
|
||
transform: translate(-50%, -50%);
|
||
font-size: 18rpx;
|
||
text-align: center;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.duration-line {
|
||
width: 60px;
|
||
height: 1px;
|
||
background-color: #E0E0E0;
|
||
margin: 2px 0;
|
||
}
|
||
|
||
.duration-text {
|
||
font-size: 24rpx;
|
||
color: #999999;
|
||
}
|
||
|
||
.date-row {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
font-size: 26rpx;
|
||
color: #767676;
|
||
padding: 0 12rpx;
|
||
line-height: 30rpx;
|
||
margin-bottom: 22rpx;
|
||
}
|
||
|
||
.gate-info-box {
|
||
background-color: #FFF9F0;
|
||
border-radius: 12rpx;
|
||
padding: 12rpx 16rpx 14rpx;
|
||
font-size: 26rpx;
|
||
color: #664A37;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: flex-end;
|
||
line-height: 30rpx;
|
||
}
|
||
|
||
.gate-text {
|
||
font-size: 20rpx;
|
||
color: #767676;
|
||
}
|
||
|
||
.action-bar {
|
||
position: relative;
|
||
margin-top: -24rpx;
|
||
background-color: #fff;
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-around;
|
||
align-items: center;
|
||
border-top: 1px solid #F0F0F0;
|
||
padding-top: 48rpx;
|
||
padding-bottom: 30rpx;
|
||
box-shadow: 0rpx 8rpx 30rpx 0rpx rgba(0, 0, 0, 0.05);
|
||
/* REMOVED box-shadow from child */
|
||
z-index: 2;
|
||
}
|
||
|
||
.action-item {
|
||
flex: 1;
|
||
text-align: center;
|
||
}
|
||
|
||
.action-text {
|
||
font-size: 30rpx;
|
||
color: #4C9BEC;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.divider {
|
||
width: 1px;
|
||
height: 16px;
|
||
background-color: #EFEFEF;
|
||
}
|
||
|
||
/* 乘客卡片 */
|
||
|
||
.passenger-card-box {
|
||
position: relative;
|
||
border-bottom: 1px solid #F0F0F0;
|
||
z-index: 1;
|
||
}
|
||
|
||
.passenger-card-box:last-child {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.passenger-card {
|
||
position: relative;
|
||
background-color: #FFFFFF;
|
||
padding: 32rpx 42rpx 38rpx;
|
||
box-shadow: 0rpx 8rpx 50rpx 0rpx rgba(0, 0, 0, 0.04);
|
||
}
|
||
|
||
.passenger-header {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: 22rpx;
|
||
}
|
||
|
||
.name-box {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
}
|
||
|
||
.passenger-name {
|
||
font-size: 36rpx;
|
||
font-weight: 500;
|
||
color: #3D3D3D;
|
||
line-height: 30rpx;
|
||
margin-right: 8px;
|
||
}
|
||
|
||
|
||
.tag-text {
|
||
border-radius: 4rpx;
|
||
padding: 4rpx 2rpx;
|
||
border: 1rpx solid #B2CDE8;
|
||
font-size: 20rpx;
|
||
line-height: 20rpx;
|
||
color: #4A94D2;
|
||
}
|
||
|
||
.seat-info {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
.tag-text-grey {
|
||
border-radius: 4rpx;
|
||
padding: 2rpx 4rpx;
|
||
border: 1rpx solid #EDEDED;
|
||
font-size: 18rpx;
|
||
line-height: 18rpx;
|
||
color: #979797;
|
||
margin-right: 8rpx;
|
||
}
|
||
|
||
.seat-text {
|
||
font-size: 13px;
|
||
color: #1A1A1A;
|
||
font-weight: 400;
|
||
}
|
||
}
|
||
|
||
.passenger-details {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: 28rpx;
|
||
|
||
.id-card-text {
|
||
font-size: 28rpx;
|
||
color: #979797;
|
||
line-height: 30rpx;
|
||
}
|
||
|
||
.price-text {
|
||
font-size: 28rpx;
|
||
color: #F28127;
|
||
line-height: 28rpx;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
.status-row {
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
|
||
.status-text {
|
||
font-size: 28rpx;
|
||
color: #767676;
|
||
line-height: 28rpx;
|
||
}
|
||
|
||
.refund-rule-text {
|
||
font-size: 28rpx;
|
||
color: #4A94D2;
|
||
text-decoration: underline;
|
||
line-height: 28rpx;
|
||
}
|
||
}
|
||
|
||
|
||
.passenger-actions {
|
||
padding: 14rpx 28rpx;
|
||
padding-right: 18rpx;
|
||
background-color: #FFFFFF;
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: flex-end;
|
||
// gap: 20rpx;
|
||
|
||
.svc-btn {
|
||
height: 54rpx;
|
||
padding: 0 16rpx;
|
||
border-radius: 4rpx;
|
||
font-size: 28rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
margin: 0 10rpx;
|
||
}
|
||
|
||
.svc-btn.outline {
|
||
border: 1px solid #EDEDED;
|
||
background-color: #FFFFFF;
|
||
}
|
||
|
||
.svc-btn.primary {
|
||
background-color: #3C99FB;
|
||
border: 1px solid #C3EFFF;
|
||
}
|
||
|
||
.svc-text {
|
||
color: #767676;
|
||
}
|
||
|
||
.svc-text-white {
|
||
color: #FFFFFF;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/* 分享区 */
|
||
.share-section {
|
||
position: relative;
|
||
margin-top: 20rpx;
|
||
background-color: #FFFFFF;
|
||
border-radius: 8rpx;
|
||
padding: 20rpx 30rpx;
|
||
display: flex;
|
||
flex-direction: row;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
margin-bottom: 28rpx;
|
||
box-shadow: 0rpx 0rpx 4rpx 0rpx rgba(0, 0, 0, 0.05);
|
||
|
||
.share-tips {
|
||
font-size: 24rpx;
|
||
color: #3D3D3D;
|
||
}
|
||
}
|
||
|
||
/* 提示 */
|
||
.notice-row {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
justify-content: center;
|
||
line-height: 24rpx;
|
||
margin-bottom: 28rpx;
|
||
}
|
||
|
||
.notice-text {
|
||
font-size: 24rpx;
|
||
color: #AAAAAA;
|
||
margin-left: 4rpx;
|
||
}
|
||
|
||
/* 广告Banner */
|
||
.ad-banner {
|
||
position: relative;
|
||
width: 100%;
|
||
|
||
.bg-image {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
width: 100%;
|
||
}
|
||
|
||
.hotel-ad {
|
||
position: absolute;
|
||
bottom: 0;
|
||
left: 0;
|
||
right: 0;
|
||
width: 100%;
|
||
padding: 0 20rpx 12rpx;
|
||
margin-bottom: 12rpx;
|
||
}
|
||
|
||
|
||
.hotel-search-row {
|
||
background-color: #FFFFFF;
|
||
border-radius: 20px;
|
||
padding: 14rpx 44rpx;
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
height: 60rpx;
|
||
|
||
.city-box {
|
||
display: flex;
|
||
align-items: center;
|
||
|
||
.search-icon {
|
||
margin-right: 18rpx;
|
||
height: 16px;
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
}
|
||
|
||
.city-text {
|
||
font-size: 30rpx;
|
||
color: #4495F0;
|
||
margin-right: 44rpx;
|
||
font-weight: 500;
|
||
}
|
||
|
||
.date-range {
|
||
display: flex;
|
||
flex: 1;
|
||
flex-direction: row;
|
||
align-items: center;
|
||
padding: 0 32rpx;
|
||
border-left: 1rpx solid #D8D8D8;
|
||
padding-right: 0;
|
||
}
|
||
|
||
.date-val {
|
||
font-size: 30rpx;
|
||
font-weight: 500;
|
||
color: #4495F0;
|
||
border-bottom: 1px solid #4495F0;
|
||
}
|
||
|
||
.date-label {
|
||
font-size: 24rpx;
|
||
color: #1A1A1A;
|
||
margin: 0 10rpx;
|
||
}
|
||
|
||
.night-count {
|
||
font-size: 24rpx;
|
||
border: 1px solid #E0E0E0;
|
||
border-radius: 16rpx;
|
||
height: 34rpx;
|
||
width: 80rpx;
|
||
line-height: 34rpx;
|
||
text-align: center;
|
||
margin: 0 10rpx;
|
||
margin-right: 18rpx;
|
||
}
|
||
|
||
.night-num {
|
||
font-size: 24rpx;
|
||
line-height: 24rpx;
|
||
color: #333333;
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
.time-row {
|
||
display: flex;
|
||
flex-direction: row;
|
||
align-items: flex-start;
|
||
}
|
||
|
||
.day-badge {
|
||
font-size: 22rpx;
|
||
color: rgb(60, 153, 251);
|
||
margin-left: 2rpx;
|
||
line-height: 30rpx;
|
||
position: relative;
|
||
top: 0rpx;
|
||
}
|
||
</style>
|