Commit e89bd127 authored by 沈良进's avatar 沈良进

save

parents d10d896d 78daa3c5
......@@ -5,11 +5,11 @@ import requestJava from './requestJava'
class scheduledTripService {
// 取消跟团订单列表
static async B2BRemoveOrder(param:any):Promise<HttpResponse>{
return requestJava('/api/b2b/user/sellorder_post_B2BRemoveOrder',param)
return request('sellorder_post_B2BRemoveMyOrder',param)
}
// 跟团订单列表
static async Getrecentorder(param:any):Promise<HttpResponse>{
return requestJava('/api/b2b/user/getrecentorder',param)
static async GetTravelOrderB2BList(param:any):Promise<HttpResponse>{
return request('sellorder_post_GetTravelOrderB2BList',param)
}
// 待处理跟团订单列表
static async GetWaitDealOrderPageList(param:any):Promise<HttpResponse>{
......
<template>
<div
class="u-mask"
:style="[maskStyle]"
:class="[show ? 'u-mask-show' : '']"
@click="click"
@touchmove.stop.prevent
>
<slot />
</div>
</template>
<script>
/**
* mask 遮罩
* @description 创建一个遮罩层,用于强调特定的页面元素,并阻止用户对遮罩下层的内容进行操作,一般用于弹窗场景
* @tutorial https://www.uviewui.com/components/mask.html
* @property {Boolean} show 是否显示遮罩(默认false)
* @property {String Number} z-index z-index 层级(默认1070)
* @property {Object} custom-style 自定义样式对象,见上方说明
* @property {String Number} duration 动画时长,单位毫秒(默认300)
* @property {Boolean} zoom 是否使用scale对这招进行缩放(默认true)
* @property {Boolean} mask-click-able 遮罩是否可点击,为false时点击不会发送click事件(默认true)
* @event {Function} click mask-click-able为true时,点击遮罩发送此事件
* @example <u-mask :show="show" @click="show = false"></u-mask>
*/
export default {
name: "u-mask",
props: {
// 是否显示遮罩
show: {
type: Boolean,
default: false
},
// 层级z-index
zIndex: {
type: [Number, String],
default: 98
},
// 用户自定义样式
customStyle: {
type: Object,
default() {
return {};
}
},
// 遮罩的动画样式, 是否使用使用zoom进行scale进行缩放
zoom: {
type: Boolean,
default: true
},
// 遮罩的过渡时间,单位为ms
duration: {
type: [Number, String],
default: 300
},
// 是否可以通过点击遮罩进行关闭
maskClickAble: {
type: Boolean,
default: true
}
},
computed: {
maskStyle() {
let style = {};
style.backgroundColor = "rgba(0, 0, 0, 0.6)";
style.zIndex = this.zIndex ? this.zIndex : this.$u.zIndex.mask;
style.transition = `all ${this.duration / 1000}s ease-in-out`;
// 缩放
if (this.zoom == true) style.transform = "scale(1.2, 1.2)";
// 判断用户传递的对象是否为空
if (Object.keys(this.customStyle).length)
style = { ...style, ...this.customStyle };
// 合并自定义的样式
//Object.assign(style, customStyle);
return style;
}
},
methods: {
click() {
if (!this.maskClickAble) return;
this.$emit("click");
}
}
};
</script>
<style lang="scss" scoped>
.u-mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
opacity: 0;
visibility: hidden;
}
.u-mask-show {
opacity: 1;
visibility: visible;
transform: scale(1);
}
</style>
This diff is collapsed.
......@@ -87,7 +87,7 @@
:key="i"
>
<q-img
:src="x.newCoverImg"
:src="x.newCoverImg?x.newCoverImg:'http://imgfile.oytour.com/Upload/DMC/yEiRE8pRWE5ZF8cPNRnAiQST8WbyaGQc.jpg'"
:ratio="16/9"
spinner-color="grey"
spinner-size="20px"
......
......@@ -53,7 +53,6 @@ export default defineComponent({
search.queryDays = statusId
}
}
const searchCnt = computed(() => {
let setCnt = 0
return setCnt
......
......@@ -24,7 +24,7 @@
<div class="q-pt-sm" :class="{'row justify-between':$q.platform.is.desktop,'col':$q.platform.is.mobile}">
<div :class="{'row col':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}">
<div :style="{'width':$q.platform.is.desktop?'150px':'100%'}">
<q-img class="rounded-borders" :style="{'width':$q.platform.is.desktop?'150px':'100%'}" style="height: 100%;" :ratio="16 / 9" src="http://imgfile.oytour.com/Upload/DMC/yEiRE8pRWE5ZF8cPNRnAiQST8WbyaGQc.jpg" spinner-color="grey" spinner-size="50px" fit="cover"/>
<q-img class="rounded-borders" :style="{'width':$q.platform.is.desktop?'150px':'100%'}" style="height: 100%;" :ratio="16 / 9" :src="x.imgCover[0].url?x.imgCover[0].url:'http://imgfile.oytour.com/Upload/DMC/yEiRE8pRWE5ZF8cPNRnAiQST8WbyaGQc.jpg'" spinner-color="grey" spinner-size="50px" fit="cover"/>
</div>
<div class="column col" :class="{'q-pl-lg':$q.platform.is.desktop,'q-pt-sm':$q.platform.is.mobile}">
<div class="ellipsis" style="overflow: hidden;width: 100%;">
......@@ -43,7 +43,7 @@
<span class="q-pt-xs">{{$t('v103.scheduledTripOrder.total')}}:<span class="fz15">CNY {{moneyFormat(x.preferPrice)}}</span> </span>
</div>
<span class="fz14 text-orange-7">{{$t('v103.scheduledTripOrder.paid')}}:<span class="fz17">CNY {{moneyFormat(x.customerPayMoney)}}</span> </span>
<div class="q-pt-sm" v-if="x.orderState==1||x.orderState==2">
<div class="q-pt-sm text-right" v-if="x.orderState==1||x.orderState==2">
<q-btn color="primary" unelevated size="sm"
@click="cancel(x)">{{$t('hotelm.cancel')}}</q-btn>
</div>
......@@ -132,12 +132,12 @@ export default defineComponent({
methods.cancellations(obj)
})
},
// 取消用车
// 取消跟团
cancellations(obj) {
scheduledTripService.B2BRemoveOrder({ID:obj.orderId})
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
methods.getList()
methods.initOrders()
methods.GetWaitDealOrderPageList()
message.successMsg(`${t('success')}`)
} else {
......@@ -154,19 +154,12 @@ export default defineComponent({
initOrders() {
data.loading = true
let param = Object.assign(data.pages, search)
scheduledTripService.Getrecentorder(param)
scheduledTripService.GetTravelOrderB2BList(param)
.then(r => {
data.loading = false
if (r.data.resultCode == ApiResult.SUCCESS) {
r.data.data.pageData&&r.data.data.pageData.forEach((x: any) => {
x.typeInfo = data.status.find(y => y.StatusId == x.orderState) ?? data.status[1]
// x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0]
// x.Money = 0
// let Money = 0
// x.DetailList.forEach((y:any)=>{
// Money+=y.Money
// })
// x.Money= Number(Money+x.MailingMoney)
})
data.orders = r.data.data.pageData
data.pages.pageCount = r.data.data.pageCount
......
<template>
<div class="q-mt-md">
<div class="text-subtitle2 text-weight-bold">產品概要</div>
<div class="text-subtitle2 text-weight-bold">{{$t('v103.scheduledTripDetails.itineraryDetails.gaiyao')}}</div>
<div class="row q-pt-md q-col-gutter-md">
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" v-if="traffic!=''">
<div class="q-mr-md col-3">往返交通</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.jiaotong')}}</div>
<div class="col text-grey-6">{{ traffic }}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" v-if="hotel!=''">
<div class="q-mr-md col-3">酒店住宿</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.zhusu')}}</div>
<div class="col text-grey-6">{{ hotel }}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}">
<div class="q-mr-md col-3">購物</div>
<div class="col text-grey-6">{{ trip.shopList.length>0?`${trip.shopList.length}個購物點`:'無購物行程' }}</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.gouwu')}}</div>
<div class="col text-grey-6">{{ trip.shopList.length>0?`${trip.shopList.length}`+$t('v103.scheduledTripDetails.itineraryDetails.gouwushu'):$t('v103.scheduledTripDetails.itineraryDetails.nogouwu') }}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" v-if="team!=''">
<div class="q-mr-md col-3">團隊人數</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.tuanduirenshu')}}</div>
<div class="col text-grey-6">{{ team }}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" >
<div class="q-mr-md col-3">景點</div>
<div class="col text-grey-6">{{ trip.scenicList.length }}個景點或場館</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.jindian')}}</div>
<div class="col text-grey-6">{{ trip.scenicList.length }}{{$t('v103.scheduledTripDetails.itineraryDetails.jindianshu')}}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" >
<div class="q-mr-md col-3">自費項目</div>
<div class="col text-grey-6">{{ trip.selfpayingList.length>0?`${trip.selfpayingList.length}個自費項目`:'無自費項目' }}</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.zifei')}}</div>
<div class="col text-grey-6">{{ trip.selfpayingList.length>0?`${trip.selfpayingList.length}`+$t('v103.scheduledTripDetails.itineraryDetails.zifeishu'):$t('v103.scheduledTripDetails.itineraryDetails.nozifei') }}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" v-if="trip.freedomList.length>0">
<div class="q-mr-md col-3">自由活動</div>
<div class="col text-grey-6">{{ trip.freedomList.length}} 次自由活動</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.huodong')}}</div>
<div class="col text-grey-6">{{ trip.freedomList.length}} {{$t('v103.scheduledTripDetails.itineraryDetails.huodongshu')}}</div>
</div>
<div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" >
<div class="q-mr-md col-3">餐食</div>
<div class="q-mr-md col-3">{{$t('v103.scheduledTripDetails.itineraryDetails.canshi')}}</div>
<div class="col text-grey-6">{{ dinner }}</div>
</div>
<div class="row items-center q-pt-mb"
<!-- <div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" >
<div class="q-mr-md col-3">服務用語</div>
<div class="col text-grey-6">普通話/日本語</div>
</div>
</div> -->
</div>
</div>
</template>
......@@ -73,7 +73,7 @@
const data= reactive({
traffic: "",
stars:['一星酒店','二星酒店','三星酒店','四星酒店','五星酒店','六星酒店','七星酒店','民宿','溫泉酒店'],
stars:[t('v103.scheduledTripDetails.starrating.d1'),t('v103.scheduledTripDetails.starrating.d2'),t('v103.scheduledTripDetails.starrating.d3'),t('v103.scheduledTripDetails.starrating.d4'),t('v103.scheduledTripDetails.starrating.d5'),t('v103.scheduledTripDetails.starrating.d6'),t('v103.scheduledTripDetails.starrating.d7'),t('v103.scheduledTripDetails.starrating.d8'),t('v103.scheduledTripDetails.starrating.d9')],
hotel:'',
team: '',
dinner: '',
......@@ -82,41 +82,41 @@
const methods = {
formatTeam(){
let p = data.trip.priceList[0]
let t = p.priceTeamType??1
t=t==0?1:t
if(t==1){
data.team = `${p.seat}人團隊散拼`
let type = p.priceTeamType??1
type=type==0?1:type
if(type==1){
data.team = `${p.seat+t('v103.scheduledTripDetails.smaple.d1')}`
}else{
data.team = '一单一团'
data.team = t('v103.scheduledTripDetails.smaple.d2')
}
},
formatDinner(){
let d = []
data.trip.dinnerList.forEach(x=>{
if(x.dinnerName.indexOf('自理')==-1 && x.dinnerName.indexOf('请选择')==-1){
if(x.dinnerName.indexOf(t('v103.scheduledTripDetails.smaple.d3'))==-1 && x.dinnerName.indexOf(t('v103.scheduledTripDetails.smaple.d4'))==-1){
d.push(x)
}
})
if(d && d.length>0){
let g=groupBy(d,x=>{ return x.useDinnerType})
let t = ['早餐','午餐','晚餐']
let type = [t('v103.scheduledTripDetails.calendarhtml.d2'),t('v103.scheduledTripDetails.calendarhtml.d3'),t('v103.scheduledTripDetails.calendarhtml.d4')]
g.forEach(x=>{
data.dinner+=`${x.data.length}次 ${t[parseInt(x.key)-1]};`
data.dinner+=`${x.data.length}${t('v103.scheduledTripDetails.smaple.d5')} ${type[parseInt(x.key)-1]};`
})
}else{
data.dinner = '無餐食供應'
data.dinner = t('v103.scheduledTripDetails.smaple.d6')
}
},
formatTraffic() {
let z = data.trip.trafficList[0].subTraffic[0]
if (z&&z.arrivalType == 1) {
data.traffic = '飛機往返';
data.traffic = t('v103.scheduledTripDetails.smaple.d7');
} else if (z&&z.arrivalType == 2) {
data.traffic = '巴士往返';
data.traffic = t('v103.scheduledTripDetails.smaple.d8');
} else if (z&&z.arrivalType == 3) {
data.traffic = '郵輪往返';
data.traffic = t('v103.scheduledTripDetails.smaple.d9');
} else {
data.traffic = '高鐵往返';
data.traffic = t('v103.scheduledTripDetails.smaple.d10');
}
},
formatHotel(){
......@@ -129,7 +129,7 @@
if(h && h.length>0){
let g = groupBy(h,(x)=>{return x.star})
g.forEach(x=>{
data.hotel+=`${x.data.length}晚${data.stars[parseInt(x.key)-1]};`
data.hotel+=`${x.data.length}${t('v103.scheduledTripDetails.smaple.d11')}${data.stars[parseInt(x.key)-1]?data.stars[parseInt(x.key)-1]:''};`
})
}
}
......
<style>
.Style_main_Top {
height: 460px;
overflow: hidden;
}
.Style_main_Top .detOne_top {
display: inline-block;
width: calc(100% + 20px);
height: 100%;
margin-left: -10px;
background-size: cover;
background-position: center center;
background-repeat: no-repeat;
z-index: 0;
filter: blur(5px);
}
.Style_main_Top .detOneModel {
position: absolute;
left: 0;
top: 0;
display: inline-block;
z-index: 2;
width: 50%;
height: 450px;
float: left;
text-align: center;
}
.detOneModel label {
position: relative;
display: inline-block;
width: 400px;
height: 100%;
background-color: rgba(255, 255, 255, .55);
padding: 60px 40px 40px;
text-align: left;
}
.detOneModel>* {
display: inline-block;
letter-spacing: 2px;
}
.Style_main_Top .main-title {
font-size: 55px;
font-weight: bold;
color: #000;
/* -webkit-writing-mode: vertical-lr;
writing-mode: vertical-lr; */
height: 100%;
width:82px;
display:inline-block;
word-wrap: break-word;
line-height: 55px;
}
.Style_main_Top .sub-title {
font-size: 24px;
font-weight: lighter;
/* padding-top: 74px; */
/* -webkit-writing-mode: vertical-lr;
writing-mode: vertical-lr; */
height: 100%;
display: inline-block;
width:36px;
word-wrap: break-word;
position: absolute;
top:85px;
}
@media only screen and (max-width: 768px) {
.Style_main_Top .detOneModel {
width: 100%;
height: 280px;
top:80px;
}
.Style_main_Top .main-title{
font-size:30px;
width:36px;
line-height: 30px;
position:absolute;
top:40px;
}
.Style_main_Top .sub-title{
font-size:15px;
width:22px;
position: absolute;
top: 65px;
left: 80px;
}
.detOneModel label {
width: 100%;
padding-top: 50px;
}
}
</style>
<template>
<div class="Style_main_Top">
<div class="detOne_top" v-if="imgCover.length>0"
:style="{backgroundImage:'url('+imgCover[0].Url+')'}">
</div>
<div class="detOneModel">
<label>
<span class="main-title">{{dataList.countryName}}</span>
<span class="sub-title">{{dataList.placeName}}</span>
</label>
</div>
</div>
</template>
<script>
import { reactive, toRefs, defineComponent } from 'vue';
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: { },
props: ['dataList'],
setup(props) {
const { t } = useI18n()
const data= reactive({
imgCover:[],
dataList: props.dataList
})
const methods = {
}
data.imgCover = JSON.parse(data.dataList.imgCover);
return {
...toRefs(data),
...methods,
}
}
})
</script>
<style>
.Style2_main {
position: relative;
margin-top: -10px;
padding: 40px 0;
background-color: #fff;
border-bottom: 1px solid #e5e5e5;
z-index: 3;
}
.Style2_main .wl-section-block {
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 0 20px;
display: flex;
}
.Style2_main .wl-section-block>* {
flex: 1;
}
.Style2_main .tour-intro {
padding:0 30px;
}
.Style2_main .tour_Nmae {
margin-bottom: 10px;
font-size: 24px;
font-weight: bold;
}
.Style2_main .drop-wrap {
position: relative;
margin-bottom: 10px;
display: inline-block;
vertical-align: middle;
}
.drop-wrap a,
.print_box {
margin-right: 10px;
margin-bottom: 10px;
display: inline-block;
font-size: 14px;
color: #006be2;
padding: 4px 8px;
transition: .15s ease-in;
}
.Style2_main .tour-detail-list {
padding: 0 0 20px;
font-size: 16px;
color: #999;
list-style: none;
}
.Style2_main .tour-detail-list li {
line-height: 2;
}
.Style2_main .tour-cover2 img {
width: 100%;
height: auto;
}
@media only screen and (max-width: 768px) {
.Style2_main .wl-section-block {
padding: 0;
display: block;
}
.Style2_main {
padding: 0;
}
}
</style>
<template>
<div class="Style2_main">
<div class="wl-section-block">
<div class="tour-cover2" v-if="imgCover.length>0">
<div class="q-pa-md">
<q-carousel
animated
v-model="slide"
navigation
height="400px"
infinite
autoplay
transition-prev="slide-right"
transition-next="slide-left"
>
<q-carousel-slide v-for="(x, i) in imgCover" :name="i" :key="i" :img-src="x.Url" />
</q-carousel>
</div>
</div>
<div class="tour-intro">
<div class="tour_Nmae">{{dataList.title}}</div>
<div class="drop-wrap">
<a>分享</a>
<a class="print_box" @click="window.print()">打印</a>
</div>
<ul class="tour-detail-list">
<li>行程編號:
<template v-if="dataList.currentPriceInfo&&dataList.currentPriceInfo.tcnum">
{{dataList.currentPriceInfo.tcnum.toUpperCase()}}
</template></li>
<li>旅遊地點:{{dataList.countryName}}</li>
<li>旅遊天數:{{dataList.dayNum}}天</li>
<li>出團日期:
<template v-if="dataList.currentPriceInfo&&dataList.currentPriceInfo.startDate">
{{dataList.currentPriceInfo.startDate}}
</template>
</li>
<li style="margin-top:30px;">
<q-btn v-if="dataList.currentPriceInfo&&dataList.currentPriceInfo.tcnum" style="width:115px;" type="a" label="立即预定" color="primary" @click="buyNow()" />
</li>
</ul>
</div>
</div>
</div>
</template>
<script>
import { reactive, toRefs, defineComponent } from 'vue';
import { useI18n } from 'vue-i18n'
export default defineComponent({
components: { },
props: ['dataList'],
setup(props, context) {
const { t } = useI18n()
const data= reactive({
slide: 1,
imgCover: [],
dataList: props.dataList
})
const methods = {
buyNow(){
context.emit('showDialog')
}
}
data.imgCover = JSON.parse(data.dataList.imgCover);
return {
...toRefs(data),
...methods,
}
}
})
</script>
This diff is collapsed.
<style>
.wl-section-block {
width: 100%;
max-width: 1200px;
margin: 0 auto;
}
.section-tour {
margin-bottom: 30px !important;
padding: 30px 30px 0;
border: 1px solid #e5e5e5;
background-color: #fff;
}
.section-tour .isHiden4 {
height: 450px;
overflow: hidden;
}
.toggle_down:before {
content: "";
width: 100%;
position: absolute;
top: -100px;
left: 0;
z-index: 2;
height: 100px;
background-image: -webkit-linear-gradient(-90deg, rgba(255, 255, 255, 0), #fff);
background-image: -moz-linear-gradient(-90deg, rgba(255, 255, 255, 0), #fff);
background-image: -o-linear-gradient(-90deg, rgba(255, 255, 255, 0), #fff);
background-image: linear-gradient(180deg, rgba(255, 255, 255, 0), #fff);
}
</style>
<template>
<div>
<section class="section-tour wl-section-block">
<div class="todayTitle">行程特色</div>
<div class="featureBox">
<template v-if="showType==3">
<div class="feature-inner" v-html="htmlData" :class="{'isHiden4':isShow}"></div>
</template>
<template v-if="showType>=4">
<div class="feature-inner" v-html="htmlData" :class="{'isHiden4':isShow}"></div>
</template>
<div class="collapse_toggle" v-if="!isShow">
<i class="iconfont iconarrow-top" @click="isShow=true"></i>
</div>
<div class="collapse_toggle toggle_down" v-else>
<i class="iconfont iconarrowdown" @click="isShow=false"></i>
</div>
</div>
</section>
</div>
</template>
<script>
import { reactive, toRefs, defineComponent } from 'vue';
import { useI18n } from 'vue-i18n'
import { GetHtml } from 'src/utils/tools'
export default defineComponent({
components: { },
props: ['dataList'],
setup(props) {
const { t } = useI18n()
const data= reactive({
TripConfig: {},
isShow: false,
showType:-1,
dataList: props.dataList,
htmlData: ''
})
const methods = {
}
if (localStorage.baseifo) {
data.TripConfig = JSON.parse(localStorage.getItem('baseifo'));
}
if (data.TripConfig.TripConfig.TripFeatureIsOpen == 1) {
data.isShow = false
} else {
data.isShow = true;
}
data.showType= data.dataList.feature.featureType;
if(data.dataList.feature.featureContent==3){
data.htmlData = GetHtml(data.dataList.feature.featureContent)
}
if(data.dataList.feature.featureContent>=4){
data.htmlData = GetHtml(data.dataList.feature.featureHtml)
}
return {
...toRefs(data),
...methods,
}
}
})
</script>
<style>
.wl-section-block {
width: 100%;
max-width: 1200px;
margin: 0 auto;
}
.section-tour {
margin-bottom: 30px !important;
padding: 30px 30px 0;
border: 1px solid #e5e5e5;
background-color: #fff;
}
.style5_item_title {
padding: 20px 0;
text-align: center;
width: 100%;
}
.fee_title {
color: #333;
font-size: 18px;
font-family: PingFangR;
}
.fee_line {
text-align: center;
color: #ccc;
font-size: 12px;
width: 100%;
}
.fee_line {
width: 32px;
height: 2px;
background: #ee4454;
display: inline-block;
}
.expense {
/* display: flex; */
margin: 30px auto;
width: 100%;
}
.detail-box .expense .left {
width: 100%;
text-align: center;
font-size: 17px;
margin-bottom:20px;
font-family: PingFangR;
}
.detail-box .expense .right {
/* -webkit-box-flex: 1;
flex: 1; */
overflow: hidden;
font-size: 16px;
line-height: 25px;
color: #666;
text-align: left;
}
.section-tour .isHiden5 {
height: 450px;
overflow: hidden;
}
.toggle_down:before {
content: "";
width: 100%;
position: absolute;
top: -100px;
left: 0;
z-index: 2;
height: 100px;
background-image: -webkit-linear-gradient(-90deg, rgba(255, 255, 255, 0), #fff);
background-image: -moz-linear-gradient(-90deg, rgba(255, 255, 255, 0), #fff);
background-image: -o-linear-gradient(-90deg, rgba(255, 255, 255, 0), #fff);
background-image: linear-gradient(180deg, rgba(255, 255, 255, 0), #fff);
}
</style>
<template>
<div>
<section class="section-tour wl-section-block">
<div class="style5_item_title detail-box">
<div :class="{'isHiden5':isShow}">
<div class="fee_title">费用</div>
<div class="fee_line">
<small class="s"></small>
</div>
<div style="color:#ccc">Expense</div>
<div class="expense">
<div class="left">费用包含</div>
<div class="right">
<div v-html="htmlData1"></div>
</div>
</div>
<div class="expense">
<div class="left">自理费用</div>
<div class="right">
<div v-html="htmlData2"></div>
</div>
</div>
<div class="fee_title">购物说明</div>
<div class="fee_line">
<small class="s"></small>
</div>
<div style="color:#ccc">Expense</div>
<div class="expense">
<div class="left"></div>
<div class="right">
<div v-html="htmlData3"></div>
</div>
</div>
<div class="fee_title">预订须知</div>
<div class="fee_line">
<small class="s"></small>
</div>
<div style="color:#ccc">Tips</div>
<div class="expense">
<div class="left">重要提示</div>
<div class="right">
<div v-html="htmlData4"></div>
</div>
</div>
<div class="expense">
<div class="left">{{$t('v103.scheduledTripDetails.style.d4')}}</div>
<div class="right">
<div v-html="htmlData5"></div>
</div>
</div>
<div class="fee_title">签证</div>
<div class="fee_line">
<small class="s"></small>
</div>
<div style="color:#ccc">Visa</div>
<div class="expense">
<div class="left">签证须知</div>
<div class="right">
<div v-html="dataList.feature.visaRemark"></div>
</div>
</div>
<div class="fee_title">同行备注</div>
<div class="fee_line">
<small class="s"></small>
</div>
<div style="color:#ccc">Remark</div>
<div class="expense">
<div class="left"></div>
<div class="right">
<div v-html="dataList.feature.b2BRemark"></div>
</div>
</div>
</div>
<div class="collapse_toggle" v-if="!isShow">
<i class="iconfont iconarrow-top" @click="isShow=true"></i>
</div>
<div class="collapse_toggle toggle_down" v-else>
<i class="iconfont iconarrowdown" @click="isShow=false"></i>
</div>
</div>
</section>
</div>
</template>
<script>
import { reactive, toRefs, defineComponent, } from 'vue';
import { useI18n } from 'vue-i18n'
import { GetHtml } from 'src/utils/tools'
export default defineComponent({
components: { },
props: ['dataList'],
setup(props) {
const { t } = useI18n()
const data= reactive({
TripConfig: {},
isShow: false,
dataList: props.dataList,
htmlData1: '',
htmlData2: '',
htmlData3: '',
htmlData4: '',
htmlData5: '',
})
const methods = {
}
if (localStorage.baseifo) {
data.TripConfig = JSON.parse(localStorage.getItem('baseifo'));
}
if (data.TripConfig.TripConfig.NoticeItemIsOpen == 1) {
data.isShow = false;
} else {
data.isShow = true;
}
data.htmlData1 = GetHtml(data.dataList.feature.feeInclude)
data.htmlData2 = GetHtml(data.dataList.feature.feeNonInclude)
data.htmlData3 = GetHtml(data.dataList.feature.shopRemark)
data.htmlData4 = GetHtml(data.dataList.feature.importantTip)
data.htmlData5 = GetHtml(data.dataList.feature.warmTip)
return {
...toRefs(data),
...methods,
}
}
})
</script>
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -356,11 +356,9 @@ export default {
three: '匯款說明'
},
travel: {
first: '包机',
second: '包机服务',
three: '包机订单',
man: '成人数量',
addTitle: '新增/修改订单',
first: '包機',
second: '包機服務',
three: '包機訂單'
}
},
travel: {
......@@ -1231,16 +1229,17 @@ export default {
day2: '30天內',
day3: '60天內',
},
setout: '集合出城市',
address: '集合详细地址',
time: '集合时间',
arrive: '返回抵城市',
setout: '集合出城市',
address: '集合詳細地址',
time: '集合時間',
arrive: '返回抵城市',
surplus: '剩余席位',
nosupport: '暂不支持候补',
nosupport: '暫不支持候補',
passenger: '旅客資料',
month: '月'
},
scheduledTripDetails:{
pageTitle: '行程詳情',
since: '起',
selectionscheme: '選擇方案',
headerlabel:{
......@@ -1329,8 +1328,6 @@ export default {
d9: '我們會儘量保證入住行程所示酒店,不排除突發的意外情況造成無法入住,我們將會為您安排同級別的酒店,請您放心選購',
d10: '溫馨提示',
d11: '感謝您的耐心閱讀,',
d12: '',
d13: '',
},
style:{
nodata: '图片加载失败',
......@@ -1386,6 +1383,47 @@ export default {
miscellaneous: '雜費',
surcharge: '兒童附加費',
pricedifference: '單房差價',
itineraryDetails:{
gaiyao: '產品概要',
jiaotong: '往返交通',
zhusu: '酒店住宿',
gouwu: '購物',
gowushu: '個購物點',
nogouwu: '無購物行程',
tuanduirenshu: '團隊人數',
jindian: '景點',
jindianshu: '個景點或場館',
zifei: '自費項目',
zifeishu: '個自費項目',
nozifei: '無自費項目',
huodong: '自由活動',
huodongshu: '次自由活動',
canshi: '餐食'
},
starrating:{
d1: '一星酒店',
d2: '二星酒店',
d3: '三星酒店',
d4: '四星酒店',
d5: '五星酒店',
d6: '六星酒店',
d7: '七星酒店',
d8: '民宿',
d9: '溫泉酒店',
},
smaple:{
d1: '人團隊散拼',
d2: '一单一团',
d3: '自理',
d4: '请选择',
d5: '次',
d6: '無餐食供應',
d7: '飛機往返',
d8: '巴士往返',
d9: '郵輪往返',
d10: '高鐵往返',
d11: '晚',
}
},
scheduledTripOrder:{
setorderday: '時間範圍',
......
......@@ -28,9 +28,9 @@ export default defineComponent({
CustomerId = Store.state.user?.userDetail?.customerId
}
const search = reactive({
orderType: 1,//1跟团订单
queryDays: 0,//10天内
orderState: -1,//订单状态
orderType: -1,//1跟团订单
queryDays: 10,//10天内
orderState: 2,//订单状态
CustomerId: CustomerId,//用户id
})
// search.OrderId = currentRouter.currentRoute.value.params.orderId
......
......@@ -38,7 +38,7 @@
<div class="text-h6 q-mb-md">{{$t('v103.scheduledTrip.passenger')}}</div>
<div class="row">
<q-img
:src="detailsObj&&detailsObj.imgCover&&detailsObj.imgCover[0].Url"
:src="detailsObj&&detailsObj.imgCover&&detailsObj.imgCover[0].Url?detailsObj.imgCover[0].Url:'http://imgfile.oytour.com/Upload/DMC/yEiRE8pRWE5ZF8cPNRnAiQST8WbyaGQc.jpg'"
class="rounded-borders"
spinner-color="grey-3"
style="width: 80px"
......@@ -98,7 +98,7 @@
<div class=" q-mb-lg" :class="{'q-mt-md':$q.platform.is.desktop}">
<div class="row q-mt-md" v-if="$q.platform.is.desktop">
<q-img
:src="detailsObj&&detailsObj.imgCover&&detailsObj.imgCover[0].Url"
:src="detailsObj&&detailsObj.imgCover&&detailsObj.imgCover[0].Url?detailsObj.imgCover[0].Url:'http://imgfile.oytour.com/Upload/DMC/yEiRE8pRWE5ZF8cPNRnAiQST8WbyaGQc.jpg'"
class="rounded-borders"
spinner-color="grey-3"
style="width: 80px"
......
This diff is collapsed.
This diff is collapsed.
......@@ -196,12 +196,12 @@ export function getHotelOrderStatus():Array<StandardStatus>{
// 行程订单状态
export function getTripOrderStatus():Array<StandardStatus>{
let status=[] as Array<StandardStatus>
let text = [t('v103.scheduledTrip.orderStatus.normal'),t('v103.scheduledTrip.orderStatus.apply1'),t('v103.scheduledTrip.orderStatus.apply2'),t('v103.scheduledTrip.orderStatus.apply3'),t('v103.scheduledTrip.orderStatus.check'),t('v103.scheduledTrip.orderStatus.cancel')]
let color = ['','positive','dark','orange','negative','orange','negative']
let icons = ['','update','done','offline_bolt','cached','offline_bolt','cached']
let text = [t('v103.scheduledTrip.orderStatus.normal'),t('v103.scheduledTrip.orderStatus.apply1'),t('v103.scheduledTrip.orderStatus.apply2'),t('v103.scheduledTrip.orderStatus.apply3'),t('v103.scheduledTrip.orderStatus.cancel'),t('v103.scheduledTrip.orderStatus.check')]
let color = ['','positive','dark','orange','negative','negative','orange']
let icons = ['','update','done','offline_bolt','cached','cached','offline_bolt']
text.forEach((x,i:number)=>{
status.push({
StatusId:i-1,
StatusId:i,
StatusName:x,
Icon:icons[i],
Color:`text-${color[i]}`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment