Commit 3d00fcbb authored by 吴春's avatar 吴春

提交代码

parent 1c6043d4
src/assets/img/login-bg.png

7.65 MB | W: | H:

src/assets/img/login-bg.png

1.79 MB | W: | H:

src/assets/img/login-bg.png
src/assets/img/login-bg.png
src/assets/img/login-bg.png
src/assets/img/login-bg.png
  • 2-up
  • Swipe
  • Onion skin
<template>
<form
autocorrect="off"
autocapitalize="off"
autocomplete="off"
spellcheck="false"
>
<div class="row justify-between q-my-md">
<div
v-for="(x, i) in cols"
:key="i"
class="override-verfity-ipt col"
:class="{ 'q-ml-sm': i > 0 }"
>
<q-input
standout
v-model="cols[i]"
@focus="codeFocus($event)"
ref="codes"
@keyup="changFocus($event, i)"
maxlength="1"
mask="#"
dense
/>
</div>
</div>
<div class="q-mt-sm text-negative f12" v-if="hasError">{{ errorMsg }}</div>
</form>
</template>
<script>
export default {
props: {
/**
* @description 请传入能够被12整除的整数
*/
digit: Number,
/**
* @description 提示语
*/
hint: String,
/**
* @description 绑定值
*/
value: [String, Number],
},
data() {
return {
cols: [],
hasError: false,
errorMsg: "",
colStyle: "",
};
},
created() {
this.initColHandler();
},
methods: {
initColHandler() {
for (let i = 0; i < this.digit; i++) {
this.cols.push("");
}
this.colStyle = `col-${12 / this.digit}`;
},
changFocus(event, index) {
if (event.key == "Backspace") {
if (index != 0) {
this.$refs.codes[index - 1].focus();
}
} else if (index < this.digit-1) {
if (this.cols[index] != "") {
this.$refs.codes[index + 1].focus();
}
}
this.updateValue();
},
updateValue() {
let tempValue = "";
this.cols.forEach((x) => {
tempValue += x;
});
this.$emit("input", tempValue);
},
codeFocus(e) {
e.target.select();
},
validate() {
if (this.value.length != this.cols.length) {
this.errorMsg = "请输入正确的验证码";
this.hasError = true;
} else {
this.errorMsg = "";
this.hasError = false;
}
return !this.hasError
},
},
};
</script>
<style>
.override-verfity-ipt .q-field--dense .q-field__control,
.override-verfity-ipt .q-field--dense .q-field__marginal {
height: 60px !important;
text-align: center;
font-family: din;
font-size: 32px;
}
.override-verfity-ipt .q-field--dense .q-field__control input,
.override-verfity-ipt .q-field--dense .q-field__marginal input {
text-align: center;
}
</style>
<template> <template>
<!--背景圖 - 文中--> <!--背景圖 - 文中-->
<div class="q-mt-lg"> <div>
<section class="about3" :style="{backgroundImage:`url('${plugData.ImageUrl}')`}"> <section class="about3" :style="{backgroundImage:`url('${plugData.ImageUrl}')`}">
<div class="section-block"> <div class="section-block">
<div class="about-main"> <div class="about-main">
......
...@@ -185,6 +185,7 @@ ...@@ -185,6 +185,7 @@
<q-menu <q-menu
ref="address" ref="address"
@mouseenter="addressMenuEnter" @mouseenter="addressMenuEnter"
@mouseleave="addressMenuLeave"
class="light-shadow" class="light-shadow"
> >
<div class="address-box flex"> <div class="address-box flex">
...@@ -493,6 +494,7 @@ export default { ...@@ -493,6 +494,7 @@ export default {
this.$refs.address.show(); this.$refs.address.show();
}, },
mouseeleaveAddress() { mouseeleaveAddress() {
this.addressFocus = 0;
setTimeout(() => { setTimeout(() => {
if (!this.addressFocus) { if (!this.addressFocus) {
this.$refs.address.hide(); this.$refs.address.hide();
......
...@@ -373,15 +373,15 @@ cursor: pointer; ...@@ -373,15 +373,15 @@ cursor: pointer;
</div> </div>
<div :class="$q.platform.is.desktop ? 'row': 'q-mt-lg'"> <div :class="$q.platform.is.desktop ? 'row': 'q-mt-lg'">
<div v-for="(item,i) in dataList.FooterList" :key="item.Id" :class="{'q-ml-xl':i>0 && $q.platform.is.desktop}"> <div v-for="(item,i) in dataList.FooterList" :key="item.Id" :class="{'q-ml-xl':i>0 && $q.platform.is.desktop}">
<div class=" text-weight-bold text-white" :class="$q.platform.is.desktop ? 'text-subtitle1': 'f14'">{{ item.NavTitle }}</div> <div class=" text-weight-bold text-white" :class="$q.platform.is.desktop ? 'text-subtitle1': 'f16'">{{ item.NavTitle }}</div>
<div :class="$q.platform.is.desktop ? 'q-mt-xl': 'q-mt-md'" v-if="item.SubList"> <div :class="$q.platform.is.desktop ? 'q-mt-xl': 'q-mt-md row'" v-if="item.SubList">
<div :class="$q.platform.is.desktop ? 'text-subtitle2 text-regular': 'f12'" class="q-mb-lg text-grey-8 cursor-pointer" v-for="item2 in item.SubList" :key="item2.Id" @click="navigateTo(item2)">{{item2.NavTitle}}</div> <div :class="$q.platform.is.desktop ? 'text-subtitle2 text-regular': 'f14'" class="q-mb-lg q-mr-md text-grey-8 cursor-pointer" v-for="item2 in item.SubList" :key="item2.Id" @click="navigateTo(item2)">{{item2.NavTitle}}</div>
</div> </div>
</div> </div>
</div> </div>
<div v-for="item in dataList.BottomList" :key="item.Id"> <div v-for="item in dataList.BottomList" :key="item.Id">
<div class="text-subtitle1 text-weight-bold text-white">{{ item.NavTitle }}</div> <div class="text-weight-bold text-white" :class="$q.platform.is.desktop ? 'text-subtitle1': 'f16'">{{ item.NavTitle }}</div>
<div class="q-mt-xl row" style="width:210px"> <div class="row" :class="$q.platform.is.desktop ? 'q-mt-xl' : 'q-mt-md'" :style="$q.platform.is.desktop ? 'width:210px': 'width:100%'" >
<div class="bg-white rounded-borders q-pa-xs overflow-hidden q-mb-md q-mr-md" @click="navigateTo(item2)" v-for="item2 in item.SubList" :key="item2.Id" style="width:40px;height:34px;"> <div class="bg-white rounded-borders q-pa-xs overflow-hidden q-mb-md q-mr-md" @click="navigateTo(item2)" v-for="item2 in item.SubList" :key="item2.Id" style="width:40px;height:34px;">
<img style="width:100%" :src="item2.Icon" :title="item2.NavTitle" /> <img style="width:100%" :src="item2.Icon" :title="item2.NavTitle" />
</div> </div>
......
...@@ -117,9 +117,18 @@ ...@@ -117,9 +117,18 @@
.f36 { .f36 {
font-size: 36px; font-size: 36px;
} }
.f40 {
font-size: 40px;
}
.f42 { .f42 {
font-size: 42px; font-size: 42px;
} }
.lh200 {
line-height: 200%;
}
.lh150 {
line-height: 150%;
}
.text-center { .text-center {
text-align: center; text-align: center;
} }
......
<style lang="scss" scoped>
.banner {
width: 100%;
}
.wrapper {
max-width: 1200px;
margin: 0 auto;
}
.about-content {
width: 55%;
margin-right: 5%;
}
.about-img {
width: 40%;
height: 30%;
object-fit: cover;
}
.tips {
width: 42px;
height: 3px;
background: #000000;
}
.team {
padding-top: 90px;
background: url("../assets/img/about/team-bg.png") no-repeat;
}
.card {
padding: 25px 30px;
width: 405px;
height: 537px;
background: linear-gradient(-7deg, #fefeff, #f4f6f9);
border: 2px solid rgba(255, 255, 255, 0.81);
box-shadow: 0px 13px 29px 0px rgba(39, 77, 192, 0.08);
border-radius: 8px;
}
.avotar {
width: 168px;
height: 168px;
border-radius: 50%;
}
.team-ml {
margin-left: 80px;
}
.mt-150 {
margin-top: 150px;
}
.mt-100 {
margin-top: 100px;
}
.line-1 {
width: 54px;
height: 4px;
background: #000000;
margin: 0 auto;
}
.line-2 {
width: 154px;
height: 2px;
background: #434343;
margin: -3px auto;
}
.product-card {
width: 241px;
height: 97px;
background: linear-gradient(-7deg, #fefeff, #f4f6f9);
border: 2px solid rgba(255, 255, 255, 0.81);
box-shadow: 0px 13px 29px 0px rgba(39, 77, 192, 0.08);
border-radius: 8px;
padding: 16px 35px;
.circle {
width: 32px;
height: 32px;
background: $primary;
border-radius: 50%;
text-align: center;
color: #fff;
line-height: 32px;
margin-right: 14px;
margin-top: 4px;
}
.tips {
width: 52px;
height: 2px;
background: #000000;
margin: 2px 0;
}
.name-circle {
width: 6px;
height: 6px;
background: #000000;
display: inline-block;
border-radius: 50%;
}
}
.map {
width: 100%;
max-width: 1200px;
display: inline-block;
}
.prize {
margin-top: 20px;
width: 192px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
.prize-cover {
width: 155px;
height: 201px;
}
.line {
width: 100%;
height: 3px;
background: #efefef;
margin: 44px 0 0 0;
}
.tips {
margin: -6px auto 15px auto;
width: 8px;
height: 8px;
border-radius: 50%;
}
}
.partners-card {
width: 756px;
height: 234px;
background: linear-gradient(-7deg, #fefeff, #f4f6f9);
border: 2px solid rgba(255, 255, 255, 0.81);
box-shadow: 0px 13px 29px 0px rgba(39, 77, 192, 0.08);
border-radius: 6px 16px 16px 16px;
margin: 0 auto;
padding: 56px;
.partner-img {
width: 197px;
height: 51px;
margin-right: 70px;
}
}
.partners-list {
overflow-x: auto;
}
.partner {
width: 150px;
height: 80px;
}
</style>
<template> <template>
<q-page> <div>
<template v-for="(item,index) in AboutData"> <img class="banner" src="../assets/img/about/banner.png" />
<div :key="index"> <div class="flex justify-between wrapper mt-150">
<!--自訂版型(影片)--> <div class="about-content">
<videoOne v-if="item.Id=='white_label_video'&&item.plugData.Type==1" :plugData="item.plugData"></videoOne> <div class="f40 bold wrapper">
<videoTwo v-if="item.Id=='white_label_video'&&item.plugData.Type==2" :plugData="item.plugData"></videoTwo> 關於我們
<!--自訂版型(圖片)和挑選自有行程(圖片)--> <span>ABOUTUS</span>
<diyImgOne v-if="item.Id=='white_label_picture'&&item.plugData.Type==1" :plugData="item.plugData"></diyImgOne> </div>
<diyImgTwo v-if="item.Id=='white_label_picture'&&item.plugData.Type==2" :plugData="item.plugData"></diyImgTwo> <div class="f20 bold q-my-md">〝印象之旅”旅遊品牌成立於2009年3月</div>
<diyImgThree v-if="item.Id=='white_label_picture'&&item.plugData.Type==3" :plugData="item.plugData"> <div class="tips"></div>
</diyImgThree> <div class="f16 lh200 q-my-md">
<diyImgFour v-if="item.Id=='white_label_picture'&&item.plugData.Type==4" :plugData="item.plugData"></diyImgFour> 公司原本为一单纯的日本专线供货商公司营运初期为日本出境游,经过几年来的转变<br />
<diyImgFive v-if="item.Id=='white_label_picture'&&item.plugData.Type==5" :plugData="item.plugData"></diyImgFive> 目前已转型为全产品出境旅游专线供货商,主要经营项目为同业出境旅游批发商<br />
<diyImgSix v-if="item.Id=='white_label_picture'&&item.plugData.Type==6" :plugData="item.plugData"></diyImgSix> 2013年以全资并购四川和平国际旅行社( 国际旅游许可证号:
<!--自訂版型(QRcode)white_label_qrcode--> L-SC-CJ00015)<br />
<qrLeft v-if="item.Id=='white_label_qrcode'&&item.plugData.Type==1" :plugData="item.plugData"></qrLeft> 四川和平国际旅行社为四川省出境资质旅行社,是经国家旅游局批准、四川省工商局注册<br />
<qrRight v-if="item.Id=='white_label_qrcode'&&item.plugData.Type==2" :plugData="item.plugData"></qrRight> 具独立法人资格并向旅游主管部门缴纳足额质量保证金的旅游企业,也因此公司正式由一个旅游品牌转型为一个有独立资质的旅游公司
<!--自訂版型(其他)white_label_other -Start--> </div>
<empty v-if="item.Id=='white_label_other'&&item.plugData.Type==1" :plugData="item.plugData"></empty> <div class="f20 bold q-mt-xl q-mb-md">經營理念——以同業市場為出發</div>
<downloadTable v-if="item.Id=='white_label_other'&&item.plugData.Type==2" :plugData="item.plugData"> <div class="f16 lh200">
</downloadTable> 公司是由一群年轻且对旅游有所执着的【旅游人】所组成的旅行社<br />
<diyTitle v-if="item.Id=='white_label_other'&&item.plugData.Type==3" :plugData="item.plugData"></diyTitle> 我们理念是以客户为出发点,反向操作以尽乎苛求的高质量来满足客户的需求为宗旨<br />
<paragraph v-if="item.Id=='white_label_other'&&item.plugData.Type==4" :plugData="item.plugData"></paragraph> 坚持不合理低价来吸引消费者<br />
<photo v-if="item.Id=='white_label_other'&&item.plugData.Type==5" :plugData="item.plugData"></photo> 我们深信【我们虽然不是最大,但却是最好的旅行社】、【我们虽然不是历史最悠久,但却是最用心的旅行社】<br />
<!--待完善--> 秉持这样的理念,所以在出境旅游版块中经过我们的用心经营<br />
<diyForm v-if="item.Id=='white_label_other'&&item.plugData.Type==6" :plugData="item.plugData" :TCID="0"> </diyForm> 目前已经是成都旅游界有口碑的一家出境供货商
</div>
<!--自訂版型(背景圖)white_label_background_article--> </div>
<bgArticleLeft v-if="item.Id=='white_label_background_article'&&item.plugData.Type==1" <img class="about-img" src="../assets/img/about/about.png" />
:plugData="item.plugData"></bgArticleLeft> </div>
<bgArticleCenter v-if="item.Id=='white_label_background_article'&&item.plugData.Type==2"
:plugData="item.plugData"></bgArticleCenter>
<bgArticleRight v-if="item.Id=='white_label_background_article'&&item.plugData.Type==3"
:plugData="item.plugData"></bgArticleRight>
<!--自訂版型(段落標題)-->
<paragraph1 v-if="item.Id=='white_label_paragraph_title'&&item.plugData.Type==1" :plugData="item.plugData">
</paragraph1>
<paragraph2 v-if="item.Id=='white_label_paragraph_title'&&item.plugData.Type==2" :plugData="item.plugData">
</paragraph2>
<paragraph3 v-if="item.Id=='white_label_paragraph_title'&&item.plugData.Type==3" :plugData="item.plugData">
</paragraph3>
<paragraphleft v-if="item.Id=='white_label_paragraph_title'&&item.plugData.Type==4" :plugData="item.plugData">
</paragraphleft>
<paragraphright v-if="item.Id=='white_label_paragraph_title'&&item.plugData.Type==5" :plugData="item.plugData">
</paragraphright>
<paragraphafter v-if="item.Id=='white_label_paragraph_title'&&item.plugData.Type==6" :plugData="item.plugData">
</paragraphafter>
<!--自訂版型(段落連結)和挑選自有行程(段落連結) white_label_link_paragraph和b2b_LinkP -->
<plinkLeft v-if="(item.Id=='white_label_link_paragraph'||item.Id=='b2b_LinkP')&&item.plugData.Type==1"
:plugData="item.plugData"></plinkLeft>
<plinkRight v-if="(item.Id=='white_label_link_paragraph'||item.Id=='b2b_LinkP')&&item.plugData.Type==2"
:plugData="item.plugData"></plinkRight>
<!--自訂版型(圖片連結)和挑選自有行程(圖片連結)white_label_link_picture和b2b_LinkPicture-->
<ilinkLeft v-if="(item.Id=='white_label_link_picture'||item.Id=='b2b_LinkPicture')&&item.plugData.Type==1"
:plugData="item.plugData"></ilinkLeft>
<ilinkRight v-if="(item.Id=='white_label_link_picture'||item.Id=='b2b_LinkPicture')&&item.plugData.Type==2"
:plugData="item.plugData"></ilinkRight>
<!--自訂版型(輪播圖)white_label_slider-->
<sliderBig v-if="item.Id=='white_label_slider'&&item.plugData.Type==1" :plugData="item.plugData"></sliderBig>
<sliderSmall v-if="item.Id=='white_label_slider'&&item.plugData.Type==2" :plugData="item.plugData">
</sliderSmall>
<!--出团表-->
<!--挑选自有行程(图片)b2b -->
<diyImgOne v-if="item.Id=='b2b'&&item.plugData.Type==1" :plugData="item.plugData"></diyImgOne>
<diyImgTwo v-if="item.Id=='b2b'&&item.plugData.Type==2" :plugData="item.plugData"></diyImgTwo>
<diyImgFour v-if="item.Id=='b2b'&&item.plugData.Type==3" :plugData="item.plugData"></diyImgFour>
<diyImgSix v-if="item.Id=='b2b'&&item.plugData.Type==4" :plugData="item.plugData"></diyImgSix>
<!--搜尋區塊(Banner)search_b --> <div class="team flex justify-center mt-150">
<searchb1 v-if="item.Id=='search_b'&&item.plugData.Type==1" :plugData="item.plugData"></searchb1> <div>
<searchb2 v-if="item.Id=='search_b'&&item.plugData.Type==2" :plugData="item.plugData"></searchb2> <img style="width: 71px" src="../assets/img/about/team.png" />
<searchb3 v-if="item.Id=='search_b'&&item.plugData.Type==3" :plugData="item.plugData"></searchb3> <div class="f40 bold white team-ml q-mt-md">经营团队及职责范围</div>
<searchb4 v-if="item.Id=='search_b'&&item.plugData.Type==4" :plugData="item.plugData"></searchb4> <div class="f20 white team-ml q-mt-lg">公司核心團隊人員</div>
</div>
<div class="card q-mx-xl">
<div class="flex justify-between">
<div class="q-mt-md q-ml-md">
<div class="f26 bold">谢军女士</div>
<div class="f18 text-grey-6">财务总监</div>
<div class="tips q-mt-sm"></div>
</div>
<img class="avotar" src="../assets/img/about/cfo.png" />
</div>
<div class="f16 lh200 q-mt-lg">
四川成都人,旅游资历20年,成都旅游界知名人物,在四川旅游领域当中的传奇人士之一,为四川地区旅游转型最成功的人物,在短暂的5年内成功从4人公司到目前四川和平国旅集团公司,在四川旅游业界传为佳话,目前和平国旅集团也是西南地区日本与巴里岛旅游最大的组团社(数据可查),其他线路亦有不错的表现,并且是各大旅游平台的产品供货商,专注旅游丰富的业界资源与强势的旅游业操作实力可提供本团队强大的市场后盾
</div>
</div>
<div class="card q-mt-xl">
<div class="flex justify-between">
<div class="q-mt-md q-ml-md">
<div class="f26 bold">徐稚升先生</div>
<div class="f18 text-grey-6">销售总经理</div>
<div class="tips q-mt-sm"></div>
</div>
<img class="avotar" src="../assets/img/about/ceo.png" />
</div>
<div class="f16 lh200 q-mt-lg">
台湾台北人,旅游资历15年,极力邀请到本团队的台湾人,在台湾受过完整的专业旅游业训练,有着旅游界最缺乏的营销企画优势,对于旅游互联网通路亦有独到见解,并拥有的成功经营经验与优势的组织管理能力,在四川地区成功引进台湾先进的旅游理念,首创旅行社成立科技公司,大力推动互联网结合旅游概念(ERP系统),从早期B2B概念的推展模式,到现在的B2B2C+O2O的概念,到现在的N+1模式,完全是以不同业界的传统模式推展,
</div>
</div>
</div>
<!--搜尋區塊(輪播淡出)search_sf --> <div class="mt-150 wrapper">
<searchsf1 v-if="item.Id=='search_sf'&&item.plugData.Type==1" :plugData="item.plugData"></searchsf1> <div class="text-center f40 bold">經營項目</div>
<searchsf2 v-if="item.Id=='search_sf'&&item.plugData.Type==2" :plugData="item.plugData"></searchsf2> <div class="line-1"></div>
<searchsf3 v-if="item.Id=='search_sf'&&item.plugData.Type==3" :plugData="item.plugData"></searchsf3> <div class="line-2"></div>
<div class="text-center f20 lh150 q-mt-lg">
印象之旅专注出境旅游产品的供货商<br />目前主要业务范畴定位同业销售为主(B2B),目前为西南地区最大日本专线供应商
</div>
<q-carousel
v-model="hotSilder"
transition-prev="slide-right"
transition-next="slide-left"
swipeable
animated
control-color="dark"
control-type="regular"
padding
arrows
height="100px"
flat
class="bg-transparent rounded-borders q-mt-md"
>
<q-carousel-slide :name="index" v-for="(item, index) in Math.ceil(partnersList.length/topPageCount)" :key="index" class="column no-wrap">
<div class="row fit justify-start items-center q-gutter-md q-col-gutter no-wrap">
<template v-for="(x,i) in topPageCount">
<!--搜尋區塊(輪播橫)search_s --> <div :key="i" v-if="(i+(index*topPageCount))<partnersList.length" :product="partnersList[i+(index*topPageCount)]">
<searchsf1 v-if="item.Id=='search_s'&&item.plugData.Type==1" :plugData="item.plugData"></searchsf1> <div class="product-card flex">
<searchsf2 v-if="item.Id=='search_s'&&item.plugData.Type==2" :plugData="item.plugData"></searchsf2> <div class="circle">A</div>
<searchsf3 v-if="item.Id=='search_s'&&item.plugData.Type==3" :plugData="item.plugData"></searchsf3> <div>
<div class="f20 bold">東北亞線</div>
<div class="tips"></div>
<div class="f16 flex items-center">
<span class="name-circle"></span>日本
</div>
</div>
</div>
</div>
</template>
</div>
</q-carousel-slide>
</q-carousel>
<img class="map q-mt-lg" src="../assets/img/about/map.png" />
</div>
<!--搜尋區塊(其他)search_el --> <div class="mt-150 relative" style="z-index: 1">
<searchel1 v-if="item.Id=='search_el'&&item.plugData.Type==1" :plugData="item.plugData"></searchel1> <div class="text-center f40 bold">公司組織架構</div>
<!--出團表group --> <div class="line-1"></div>
<travelList v-if="item.Id=='group'" :plugData="item.plugData"></travelList> <div class="line-2"></div>
</div>
<img
class="full-width"
style="margin-top: -10%"
src="../assets/img/about/partners.png"
/>
<div class="mt-150 wrapper">
<div class="text-center f40 bold">歷年榮譽</div>
<div class="line-1"></div>
<div class="line-2"></div>
<div class="flex mt-100">
<div class="prize" v-for="item in prizesList" :key="item.key">
<img
class="prize-cover"
:src="require(`../assets/img/about/${item.img}.png`)"
/>
<div class="line"></div>
<div class="tips bg-primary"></div>
<div class="primary f20 bold text-center">{{ item.time }}</div>
<div class="f16 text-center q-mt-sm">{{ item.prize }}</div>
<div class="f16 text-center">{{ item.desc }}</div>
</div>
</div>
</div> </div>
<div class="mt-150">
<div class="text-center f40 bold">合作的夥伴</div>
<div class="line-1"></div>
<div class="line-2"></div>
<div style="margin-top: 50px; margin-bottom: 100px" class="partners-card flex no-wrap justify-between items-center">
<img class="partner-img" src="../assets/img/about/partners.png"/>
<div>
<div class="f20 bold">全日空航空</div>
<div class="f16 lh200">全日本空输(ANA)是一家日本的航空公司。 也是亚洲最大的航空公司之一,被评之为五星航空 为我社日本系列团主要配搭航空之一。</div>
</div>
</div>
<q-carousel
v-model="hotSilder"
transition-prev="slide-right"
transition-next="slide-left"
swipeable
animated
control-color="dark"
control-type="regular"
padding
arrows
height="100px"
flat
class="bg-transparent rounded-borders q-mt-md"
>
<q-carousel-slide :name="index" v-for="(item, index) in Math.ceil(partnersList.length/topPageCount)" :key="index" class="column no-wrap">
<div class="row fit justify-start items-center q-gutter-md q-col-gutter no-wrap">
<template v-for="(x,i) in topPageCount">
<img :key="i" v-if="(i+(index*topPageCount))<partnersList.length" :product="partnersList[i+(index*topPageCount)]" class="partner" src="../assets/img/about/banner.png" />
</template> </template>
</q-page> </div>
</q-carousel-slide>
</q-carousel>
</div>
</div>
</template> </template>
<script> <script>
//出團表 group -Start export default {
import travelList from "../components/group/travel-list";
//出團表 group -End
//搜尋區塊(輪播橫)search_s -Start
import searchs1 from "../components/search_s/search_s1";
import searchs2 from "../components/search_s/search_s2";
import searchs3 from "../components/search_s/search_s3";
//搜尋區塊(輪播橫)search_s -End
//搜尋區塊(Banner)search_b -Start
import searchb1 from "../components/search_b/search_b1";
import searchb2 from "../components/search_b/search_b2";
import searchb3 from "../components/search_b/search_b3";
import searchb4 from "../components/search_b/search_b4";
//搜尋區塊(Banner)search_b -End
//搜尋區塊(輪播淡出)search_sf -Start
import searchsf1 from "../components/search_sf/search_sf1";
import searchsf2 from "../components/search_sf/search_sf2";
import searchsf3 from "../components/search_sf/search_sf3";
//搜尋區塊(輪播淡出)search_sf -End
//搜尋區塊(其他)search_el -Start
import searchel1 from "../components/search_el/search_el1";
//搜尋區塊(其他)search_el -End
//自訂版型(影片)white_label_video -Start
import videoOne from "../components/label_video/video-one";
import videoTwo from "../components/label_video/video-two";
//自訂版型(影片)white_label_video -End
//自訂版型(圖片)和挑選自有行程(圖片) white_label_picture和b2b -Start
import diyImgOne from "../components/label_picture/diy-img-one";
import diyImgTwo from "../components/label_picture/diy-img-two";
import diyImgThree from "../components/label_picture/diy-img-three";
import diyImgFour from "../components/label_picture/diy-img-four";
import diyImgFive from "../components/label_picture/diy-img-five";
import diyImgSix from "../components/label_picture/diy-img-six";
//自訂版型(圖片)和挑選自有行程(圖片) white_label_picture和b2b -End
//自訂版型(QRcode)white_label_qrcode -Start
import qrLeft from "../components/label_qrcode/left";
import qrRight from "../components/label_qrcode/right";
//自訂版型(QRcode)white_label_qrcode -End
//自訂版型(背景圖)white_label_background_article -Start
import bgArticleLeft from "../components/label_background_article/left";
import bgArticleRight from "../components/label_background_article/right";
import bgArticleCenter from "../components/label_background_article/center";
//自訂版型(背景圖)white_label_background_article -ENd
//自訂版型(段落標題)white_label_paragraph_title -Start
import paragraph1 from "../components/label_paragraph_title/paragraph1";
import paragraph2 from "../components/label_paragraph_title/paragraph2";
import paragraph3 from "../components/label_paragraph_title/paragraph3";
import paragraphleft from "../components/label_paragraph_title/paragraph-left";
import paragraphright from "../components/label_paragraph_title/paragraph-right";
import paragraphafter from "../components/label_paragraph_title/paragraph-after";
//自訂版型(段落標題)white_label_paragraph_title -End
//自訂版型(段落連結)和挑選自有行程(段落連結)white_label_link_paragraph和b2b_LinkP -Start
import plinkLeft from "../components/label_link_paragraph/left";
import plinkRight from "../components/label_link_paragraph/right";
//自訂版型(段落連結)和挑選自有行程(段落連結)white_label_link_paragraph和b2b_LinkP -End
//自訂版型(圖片連結)和挑選自有行程(圖片連結)white_label_link_picture和b2b_LinkPicture -Start
import ilinkLeft from "../components/label_link_picture/left";
import ilinkRight from "../components/label_link_picture/right";
//自訂版型(圖片連結)和挑選自有行程(圖片連結)white_label_link_picture和b2b_LinkPicture -End
//自訂版型(輪播圖)white_label_slider -Start
import sliderBig from "../components/label_slider/big";
import sliderSmall from "../components/label_slider/small";
//自訂版型(輪播圖)white_label_slider -End
//自訂版型(其他)white_label_other-Start
import empty from "../components/label_other/empty";
import downloadTable from "../components/label_other/downloadTable";
import diyTitle from "../components/label_other/diy-title";
import paragraph from "../components/label_other/paragraph";
import photo from "../components/label_other/photo";
import diyForm from "../components/label_other/diy-form";
//自訂版型(其他)white_label_other-End
export default {
name: "PageAbout",
components: {
searchs1,
searchs2,
searchs3,
searchb1,
searchb2,
searchb3,
searchb4,
searchsf1,
searchsf2,
searchsf3,
searchel1,
videoOne,
videoTwo,
diyImgOne,
diyImgTwo,
diyImgThree,
diyImgFour,
diyImgFive,
diyImgSix,
qrLeft,
qrRight,
bgArticleLeft,
bgArticleRight,
bgArticleCenter,
paragraph1,
paragraph2,
paragraph3,
paragraphleft,
paragraphright,
paragraphafter,
plinkLeft,
plinkRight,
ilinkLeft,
ilinkRight,
sliderBig,
sliderSmall,
empty,
downloadTable,
diyTitle,
paragraph,
photo,
diyForm,
travelList
},
data() { data() {
return { return {
RB_Group_Id: 0, hotSilder:0,
AboutData: {}, topPageCount: 10,
}; partnersList: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,],
prizesList: [
{
img: "prize-2009",
time: "2009",
prize: "国航",
desc: '"市场开发一等奖"',
}, },
created() { {
this.getAbout(); img: "prize-2010",
time: "2010",
prize: "国航",
desc: '"国际最佳合作奖"',
}, },
mounted() { {
var jObj = JSON.parse(localStorage.getItem('groupinfo')); img: "prize-2010-1",
this.RB_Group_Id = jObj.GroupId; time: "2010",
this.getAbout(); prize: "国內",
desc: '"国际最佳合作奖"',
}, },
methods: { {
getAbout() { img: "prize-2011",
this.apipost( time: "2011",
"ws_get_GetAboutPage", { prize: "国航",
RB_Group_Id: this.RB_Group_Id desc: '"最佳开拓奖"',
}, },
res => { {
if (res.data.resultCode == 1) { img: "prize-2014",
if (res.data.data) { time: "2014",
this.AboutData = res.data.data; prize: "港航",
} desc: '"年度杰出销售奖"',
}
}, },
err => {} {
); img: "prize-2014-1",
} time: "2014",
prize: "全日空",
desc: '"成渝地区优秀合作伙伴奖"',
},
{
img: "prize-2015",
time: "2015",
prize: "成都旅行社协会",
desc: '"金牌专线"',
}, },
],
}; };
},
};
</script> </script>
\ No newline at end of file
...@@ -516,6 +516,16 @@ ...@@ -516,6 +516,16 @@
<div class="col">{{CarObj.CarName}} x {{ chosenObj.Count }}</div> <div class="col">{{CarObj.CarName}} x {{ chosenObj.Count }}</div>
<div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</div> <div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</div>
</div> </div>
<hr
style="border: none; border-top: 1px dashed #eee !important"
class="bg-transparent q-mb-sm"
/>
<div class="row q-mb-sm items-center">
<div class="col">總金額</div>
<div class="text-subtitle2 text-weight-bolder text-primary">
CNY {{ moneyFormat(sumPrice, 2) }}
</div>
</div>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center"> <div class="row q-mb-sm items-center">
<div class="col">優惠金額</div> <div class="col">優惠金額</div>
......
...@@ -282,6 +282,16 @@ ...@@ -282,6 +282,16 @@
</template> </template>
</div> </div>
</template> </template>
<hr
style="border: none; border-top: 1px dashed #eee !important"
class="bg-transparent q-mb-sm"
/>
<div class="row q-mb-sm items-center">
<div class="col">總金額</div>
<div class="text-subtitle2 text-weight-bolder text-primary">
CNY {{ moneyFormat(sumPrice, 2) }}
</div>
</div>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center" v-if="parameters.MailingState==2&&parameters.MailingMoney>0"> <div class="row q-mb-sm items-center" v-if="parameters.MailingState==2&&parameters.MailingMoney>0">
<div class="col">邮寄费</div> <div class="col">邮寄费</div>
......
...@@ -180,7 +180,7 @@ ...@@ -180,7 +180,7 @@
unelevated unelevated
class="q-px-xl" class="q-px-xl"
label="搜索" label="搜索"
@click="getData" @click="getRoom"
/> />
</div> </div>
</div> </div>
...@@ -347,7 +347,6 @@ ...@@ -347,7 +347,6 @@
<hotel-map></hotel-map> <hotel-map></hotel-map>
</div> --> </div> -->
<div <div
v-if="dataList"
class="q-pa-lg bg-grey-3 q-mt-lg text-grey-9" class="q-pa-lg bg-grey-3 q-mt-lg text-grey-9"
ref="pricelist" ref="pricelist"
> >
...@@ -369,7 +368,6 @@ ...@@ -369,7 +368,6 @@
</div> </div>
<div <div
class="bg-white rounded-borders q-mt-md" class="bg-white rounded-borders q-mt-md"
v-if="dataList.priceList && dataList.priceList.length > 0"
> >
<div class="q-pa-md row"> <div class="q-pa-md row">
<div class="col"> <div class="col">
...@@ -378,29 +376,29 @@ ...@@ -378,29 +376,29 @@
v-if="$q.platform.is.desktop" v-if="$q.platform.is.desktop"
> >
<span class="q-mr-md">行程標準出行方案</span> <span class="q-mr-md">行程標準出行方案</span>
<q-chip <!-- <q-chip
square square
color="orange" color="orange"
size="sm" size="sm"
text-color="grey-2" text-color="grey-2"
class="text-light" class="text-light"
label="15天前可免費取消" label="15天前可免費取消"
/> /> -->
</div> </div>
<div class="text-grey f12"> <!-- <div class="text-grey f12">
<ul class="q-pl-md no-margin"> <ul class="q-pl-md no-margin">
<li v-for="(x, i) in warnBuy" class="q-mt-md" :key="i"> <li v-for="(x, i) in warnBuy" class="q-mt-md" :key="i">
{{ x }} {{ x }}
</li> </li>
</ul> </ul>
</div> </div> -->
</div> </div>
<div class="" v-if="$q.platform.is.desktop"> <div class="" v-if="$q.platform.is.desktop">
<div class="row items-center"> <div class="row items-center">
<span class="product-price text-h6 q-mr-md" <span class="product-price text-h6 q-mr-md"
>CNY >CNY
{{ {{
moneyFormat(dataList.priceList[0].originalB2CPrice, 0) moneyFormat(MinPrice, 0)
}}</span }}</span
> >
<q-btn <q-btn
...@@ -412,7 +410,7 @@ ...@@ -412,7 +410,7 @@
/> />
</div> </div>
<div class="text-info q-mt-md text-right"> <div class="text-info q-mt-md text-right">
最早可預訂日期:{{ dataList.priceList[0].startDate }} 最早可預訂日期:{{ StartDate }}
</div> </div>
</div> </div>
</div> </div>
...@@ -423,15 +421,19 @@ ...@@ -423,15 +421,19 @@
> >
<div class="q-mt-lg row" v-if="$q.platform.is.desktop"> <div class="q-mt-lg row" v-if="$q.platform.is.desktop">
<div class="col"> <div class="col">
<calendar <RoomCard
:priceList="dataList.priceList" :priceList="SimilarList"
@change="changeChosenDateHandler" @change="changeChosenDateHandler"
ref="calendar" ref="RoomCard"
></calendar> ></RoomCard>
</div> </div>
<div class="col q-ml-xl"> <div class="col q-ml-xl">
<order-preview <order-preview
:JapanIncrease="JapanIncrease"
:price="currentPrice" :price="currentPrice"
:SimilarList="SimilarList"
:msg="msg"
:liveNvm="liveNvm"
@reset="resetHandler" @reset="resetHandler"
></order-preview> ></order-preview>
</div> </div>
...@@ -441,19 +443,6 @@ ...@@ -441,19 +443,6 @@
</div> </div>
</div> </div>
</div> </div>
<!-- <div style="max-width: 1200px; margin-left: auto; margin-right: auto">
<div
id="comment"
class="text-h5 text-weight-bold text-left q-mt-xl mb"
ref="comment"
:class="{
'q-px-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
>
评价
</div>
<comments></comments>
</div> -->
<div <div
style="max-width: 1200px; margin-left: auto; margin-right: auto" style="max-width: 1200px; margin-left: auto; margin-right: auto"
...@@ -656,11 +645,7 @@ ...@@ -656,11 +645,7 @@
<script> <script>
import { date } from 'quasar' import { date } from 'quasar'
import { slider, slideritem } from "vue-concise-slider";
import calendar from "../components/trip/calendar.vue";
import OrderPreview from "src/components/trip/orderPreview.vue";
import smaple from "src/components/trip/smaple.vue"; import smaple from "src/components/trip/smaple.vue";
import Trip from "src/components/trip/trip.vue";
import block from "src/components/trip/block/index"; import block from "src/components/trip/block/index";
import hotelStar from "./hotel/hotelStar.vue"; import hotelStar from "./hotel/hotelStar.vue";
import hotelMap from "./hotel/hotelMap.vue"; import hotelMap from "./hotel/hotelMap.vue";
...@@ -669,15 +654,12 @@ import comments from "./hotel/comments.vue"; ...@@ -669,15 +654,12 @@ import comments from "./hotel/comments.vue";
import selectRoom from './hotel/selectRoom.vue'; import selectRoom from './hotel/selectRoom.vue';
import componentsMap from 'src/components/car/Map.vue'; import componentsMap from 'src/components/car/Map.vue';
import ImagePreview from 'src/components/common/ImagePreview.vue' import ImagePreview from 'src/components/common/ImagePreview.vue'
import RoomCard from 'src/components/hotal/RoomCard.vue'
import OrderPreview from "src/components/hotal/orderPreview.vue";
export default { export default {
props: [], props: [],
components: { components: {
slider,
slideritem,
calendar,
OrderPreview,
smaple, smaple,
Trip,
block, block,
hotelStar, hotelStar,
hotelMap, hotelMap,
...@@ -685,7 +667,9 @@ export default { ...@@ -685,7 +667,9 @@ export default {
comments, comments,
selectRoom, selectRoom,
componentsMap, componentsMap,
ImagePreview ImagePreview,
RoomCard,
OrderPreview,
}, },
data() { data() {
return { return {
...@@ -696,6 +680,7 @@ export default { ...@@ -696,6 +680,7 @@ export default {
clickDate: "", clickDate: "",
slide: 1, slide: 1,
StartDate: '',
roomReviewRating: 0, roomReviewRating: 0,
currentImage: '', currentImage: '',
showImagePriview: false, showImagePriview: false,
...@@ -713,47 +698,35 @@ export default { ...@@ -713,47 +698,35 @@ export default {
liveNvm: 1, liveNvm: 1,
dateRange:{}, dateRange:{},
dateRangeFormat: '',//入住、离店时间 dateRangeFormat: '',//入住、离店时间
roomGroupObj:{roomNum:null,numberOfAdults:1,numberOfChildren:0}, roomGroupObj:{
childAges:null,
roomNum:null,numberOfAdults:1,numberOfChildren:0
},
msg: { msg: {
// configId: "", hotelId:'',
// cityId: 0, sort:1,
// preview: 0, displayFrom:1,
// tcid: 0, arrivalDate:'',//开始时间
// teamType: 0, departureDate:'',//结束时间
// isGetPriceFlight: true, roomOptionCd:'',
searchroomGroup:[{
childAges:null,
arrivalDate: '',//开始日期 roomNum:1,numberOfAdults:1,numberOfChildren:0
departureDate: '',//结束日期 }],
searchroomGroup: [
{roomNum:1,numberOfAdults:1,numberOfChildren:0}
],//客房数
searchHotelIdList: [],
freeword: '',//地区名字 酒店名字
freewordType: 1, //类型 1,地区,2-酒店名称
reviewRatingUpperLimits: '',//最大评分数
reviewRatingLowerLimits: '',//最小评分数
searchHotelCategory: [], //酒店分类
searchHotelFeatures: [], //酒店特征
searchRoomType: [], //类型的房间
searchMealType: [], //饮食条件搜索
searchMinRate: '', //最小金额
searchMaxRate: '', //最大金额
displayFrom: 1,//页数
numberOfResults: 12,
rowsPerPage: 15,
sort: 1
}, },
detaMsg:{ detaMsg:{
groupBookingFlg: "0", groupBookingFlg: "0",
hotelId: 0, hotelId: 0,
hotelImageSize: 5, hotelImageSize: 5,//图片大小
photoGalleryGetFlg: 1 photoGalleryGetFlg: 1 //画廊取得标志
}, },
currentPrice: {}, currentPrice: [],
isShow: false, isShow: false,
dataList: null, dataList: {
roomGroup: null,
},
JapanIncrease: '',
SimilarList: [],
isDirect: 1, isDirect: 1,
TripConfig: {}, TripConfig: {},
isShowNav: false, isShowNav: false,
...@@ -774,10 +747,8 @@ export default { ...@@ -774,10 +747,8 @@ export default {
loop: true, loop: true,
}, },
warnBuy: [ warnBuy: [
"未满 2 岁幼儿不占位可免费参加(不含座位,餐点,门票,床位),请先于下订时在「备注栏」告知。", "超过13岁视为成人处理",
"如需要單人房,請購買單房", "预定成功后房间将为您整晚保留"
"不占床2-11(包含)岁幼童可购买儿童价,如需占床請購買成人價",
"12歲以上皆視同成人售價",
], ],
showOrderPreview: false, showOrderPreview: false,
videoPosition: 0, videoPosition: 0,
...@@ -846,6 +817,7 @@ export default { ...@@ -846,6 +817,7 @@ export default {
created() { created() {
if (this.$route.params.id) { if (this.$route.params.id) {
this.detaMsg.hotelId = decodeURIComponent(this.$route.params.id) this.detaMsg.hotelId = decodeURIComponent(this.$route.params.id)
this.msg.hotelId = decodeURIComponent(this.$route.params.id)
} }
if(this.$route.params.b2CPrice){ if(this.$route.params.b2CPrice){
this.MinPrice = this.$route.params.b2CPrice this.MinPrice = this.$route.params.b2CPrice
...@@ -854,16 +826,18 @@ export default { ...@@ -854,16 +826,18 @@ export default {
}, },
mounted() { mounted() {
window.addEventListener("scroll", this.handleScroll); window.addEventListener("scroll", this.handleScroll);
this.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY-MM-DD') this.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY-MM-DD')
this.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY-MM-DD') this.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY-MM-DD')
this.msg.StartDate = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY-MM-DD') this.msg.arrivalDate = date.formatDate(date.addToDate(new Date(), { days: 8 }), 'YYYY-MM-DD')
this.msg.EndDate = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY-MM-DD') this.msg.departureDate = date.formatDate(date.addToDate(new Date(), { days: 9 }), 'YYYY-MM-DD')
this.dateRangeFormat = `${this.msg.StartDate} - ${this.msg.EndDate} ` this.dateRangeFormat = `${this.msg.arrivalDate} - ${this.msg.departureDate} `
this.StartDate = this.msg.arrivalDate
window.addEventListener("scroll", this.menu); window.addEventListener("scroll", this.menu);
this.getData(); this.getData();
this.getRoom()
}, },
beforeDestroy() { beforeDestroy() {
document.getElementsByTagName("body")[0].style = ""; document.getElementsByTagName("body")[0].style = "";
...@@ -908,11 +882,11 @@ export default { ...@@ -908,11 +882,11 @@ export default {
}, },
// 日期筛选 // 日期筛选
dateRangeHandler(e) { dateRangeHandler(e) {
this.msg.StartDate = `${e.from.year}/${e.from.month}/${e.from.day}` this.msg.arrivalDate = `${e.from.year}-${e.from.month}-${e.from.day}`
this.msg.EndDate = `${e.to.year}/${e.to.month}/${e.to.day} ` this.msg.departureDate = `${e.to.year}-${e.to.month}-${e.to.day} `
this.dateRangeFormat = `${this.msg.StartDate} - ${this.msg.EndDate} ` this.dateRangeFormat = `${this.msg.arrivalDate} - ${this.msg.departureDate} `
if (this.$refs.qDateProxy) this.$refs.qDateProxy.hide() if (this.$refs.qDateProxy) this.$refs.qDateProxy.hide()
this.liveNvm = this.dateDiffer(this.msg.StartDate,this.msg.EndDate) this.liveNvm = this.dateDiffer(this.msg.arrivalDate,this.msg.departureDate)
}, },
dateDiffer(DateStart,DateEnd) { dateDiffer(DateStart,DateEnd) {
//date1结束时间 //date1结束时间
...@@ -1004,12 +978,20 @@ export default { ...@@ -1004,12 +978,20 @@ export default {
//console.log(e) //console.log(e)
}, },
resetHandler() { resetHandler() {
this.currentPrice.startDate = ""; this.currentPrice = [];
this.$refs.calendar.reset(); this.$refs.RoomCard.reset();
}, },
changeChosenDateHandler(val) { changeChosenDateHandler(val) {
val.price.version = new Date().getTime(); let arrList = function(arr){
this.currentPrice = JSON.parse(JSON.stringify(val.price)); arr.forEach(x=>{
x.id=null
})
}
arrList(val.roomOptions)
val.roomOptions.forEach((x,index)=>{
x.id=(index+1)
})
this.currentPrice = JSON.parse(JSON.stringify(val));
this.$refs.qDateProxy.hide(); this.$refs.qDateProxy.hide();
}, },
showDialog() { showDialog() {
...@@ -1028,7 +1010,6 @@ export default { ...@@ -1028,7 +1010,6 @@ export default {
(res) => { (res) => {
this.$q.loading.hide(); this.$q.loading.hide();
if (res.data.resultCode == 1) { if (res.data.resultCode == 1) {
this.dataList = res.data.data;
this.hotelDetails = res.data.data.hotelDetails; this.hotelDetails = res.data.data.hotelDetails;
this.hotelSummary = res.data.data.hotelSummary; this.hotelSummary = res.data.data.hotelSummary;
this.roomReviewRating = Number(this.hotelDetails.roomReviewRating); this.roomReviewRating = Number(this.hotelDetails.roomReviewRating);
...@@ -1316,6 +1297,7 @@ export default { ...@@ -1316,6 +1297,7 @@ export default {
} }
} }
this.images=dataImgArray; this.images=dataImgArray;
this.$nextTick(() => { this.$nextTick(() => {
setTimeout(() => { setTimeout(() => {
this.navs.forEach((x) => { this.navs.forEach((x) => {
...@@ -1341,6 +1323,64 @@ export default { ...@@ -1341,6 +1323,64 @@ export default {
null null
); );
}, },
// 获取酒店房间
getRoom() {
this.$q.loading.show();
this.apipost(
"dmc_post_Get_GetJAPAN_RoomsList",
this.msg,
(res) => {
this.$q.loading.hide();
if (res.data.resultCode == 1) {
if (
Object.prototype.toString.call(res.data.data.roomRateDetails) ==
"[object Object]"
) {
this.SimilarList.push(res.data.data.roomRateDetails);
} else {
this.SimilarList = res.data.data.roomRateDetails;
}
let arrList = function(arr){
arr.forEach(item=>{
item.images=[]
item.id=null
})
}
arrList(this.SimilarList)
this.SimilarList.forEach((x,index) => {
x.id = (index+1)
x.images = []
x.images.push(x.roomImageURL)
for (let i = 0; i < 4; i++) {
if(x.roomOptions[`planPictureURL${(i+1)}`] && x.roomOptions[`planPictureURL${(i+1)}`].length>0){
x.images.push(x.roomOptions[`planPictureURL${(i+1)}`])
}
}
if (
Object.prototype.toString.call(x.roomOptions) ==
"[object Object]"
) {
let arr = [];
arr.push(x.roomOptions);
x.roomOptions = arr;
}
});
this.JapanIncrease = res.data.data.JapanIncrease;
} else {
this.$q.notify({
type: "negative",
message: res.data.message,
position: "top",
});
}
},
null
);
},
menu() { menu() {
this.scroll = this.scroll =
document.documentElement.scrollTop || document.body.scrollTop; document.documentElement.scrollTop || document.body.scrollTop;
......
...@@ -594,16 +594,16 @@ export default { ...@@ -594,16 +594,16 @@ export default {
TCID: 0, TCID: 0,
OrderId: 0, OrderId: 0,
VisaPlanId: 0, VisaPlanId: 0,
SurName: "", SurName: "",
Name: "", Name: "",
PassportNo: "D56465465", PassportNo: "",
ESurName: "LUO", ESurName: "",
EName: "CHAO", EName: "",
GuestType: 0, GuestType: 0,
EnableSignRoom: false, EnableSignRoom: false,
PassportExpiry: "2035-12-31", PassportExpiry: "",
FormatTypeName: "", FormatTypeName: "",
MobilePhone: "17308037817", MobilePhone: "",
RoomType: 0, RoomType: 0,
IsSignRoom: false, IsSignRoom: false,
Sex: 1, Sex: 1,
...@@ -619,7 +619,7 @@ export default { ...@@ -619,7 +619,7 @@ export default {
IsDepartureRecord: 2, IsDepartureRecord: 2,
IsHightSchool: 2, IsHightSchool: 2,
IsB2B: 1, IsB2B: 1,
Birthday: "1990-12-26", Birthday: "",
}, },
guests: [], guests: [],
disableSign: false, disableSign: false,
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
right: 0; right: 0;
} }
.login-box-pc { .login-box-pc {
max-width: 436px; width: 436px;
padding: 30px 40px; padding: 30px 40px;
margin: 100px auto; margin: 100px auto;
position: absolute; position: absolute;
...@@ -89,17 +89,24 @@ ...@@ -89,17 +89,24 @@
} }
</style> </style>
<template> <template>
<div :class="$q.platform.is.desktop ? 'login': 'full-width'"> <div :class="$q.platform.is.desktop ? 'login' : 'full-width'">
<div class="login-box" :class="$q.platform.is.desktop ? 'login-box-pc': ''"> <div
class="login-box"
:class="$q.platform.is.desktop ? 'login-box-pc' : ''"
>
<!-- <img :src="logo" class="tw_logo" /> --> <!-- <img :src="logo" class="tw_logo" /> -->
<!-- <p class="tip-text"> <!-- <p class="tip-text">
還沒有帳號嗎?立即<a style="cursor:pointer;" @click="CommonJump('/register',{})">免費加入</a> 還沒有帳號嗎?立即<a style="cursor:pointer;" @click="CommonJump('/register',{})">免費加入</a>
</p> --> </p> -->
<div v-if="loginType !== 'wechat'"> <q-form ref="loginForm" v-if="loginType !== 'wechat'">
<div class="flex items-end justify-between"> <div class="row items-center justify-between">
<div class="f34 bold">{{loginType === 'bindEmail' ? '立即绑定' : (isLogin ? "登錄" : "註冊") }}</div> <div class="f34 bold">
{{
loginType === "bindEmail" ? "立即绑定" : isLogin ? "登錄" : "註冊"
}}
</div>
<div <div
class="f16 bold cursor-pointer" class="text-subtitle2 cursor-pointer"
v-if="loginType !== 'bindEmail'" v-if="loginType !== 'bindEmail'"
@click="loginToRegister" @click="loginToRegister"
> >
...@@ -107,80 +114,85 @@ ...@@ -107,80 +114,85 @@
</div> </div>
</div> </div>
<div class="login_row"> <div class="login_row">
<div class="form-group"> <q-input
<div class="login_labelName">輸入郵箱</div> filled
<q-input outlined v-model="loginMsg.Mailbox" /> v-model="loginMsg.Mailbox"
<div class="primary q-mt-sm" v-show="tips">邮箱格式有误,请核实</div> class="q-mt-xl"
</div> label="輸入郵箱"
<div v-if="loginType === 'MailCode' || loginType === 'bindEmail'"> style="ime-mode: disabled"
aria-autocomplete="off"
:rules="[
(val) =>
/^[a-zA-Z0-9]+([-_.][A-Za-zd]+)*@([a-zA-Z0-9]+[-.])+[A-Za-zd]{2,5}$/.test(
val
) || '請輸入正確的郵箱地址',
]"
>
<template
v-if="loginType === 'MailCode' || loginType === 'bindEmail'"
v-slot:after
>
<q-btn <q-btn
v-if="!isSend"
class="q-mb-lg"
unelevated unelevated
color="grey-3" color="text-white bg-secondary"
style=" :disable="
width: 100%; !/^[a-zA-Z0-9]+([-_.][A-Za-zd]+)*@([a-zA-Z0-9]+[-.])+[A-Za-zd]{2,5}$/.test(
color: #8b8b8b !important; loginMsg.Mailbox
height: 50px; ) || cutDown > 0
margin-top: 20px;
" "
style="height: 46px; margin-top: -10px"
filled filled
label="发送验证码" :loading="inSending"
:label="
!isSend
? '发送验证码'
: cutDown > 0
? cutDown + '秒'
: '重新發送'
"
@click="sendVerify" @click="sendVerify"
/> />
<div v-else class="mt q-mb-sm"> </template>
<q-input outlined v-model="loginMsg.MailCode" type="text" /> </q-input>
<div <div
class="q-mt-sm" class="q-mt-md"
:class="cutDown ? 'text-grey-6' : ''" v-if="loginType === 'MailCode' || loginType === 'bindEmail'"
@click="reSend"
> >
{{ cutDown ? cutDown + "秒后可重新发送" : "重新發送驗證碼" }} <verify-code
</div> :digit="6"
hint="請輸入正確的驗證碼"
ref="verify"
v-model="loginMsg.MailCode"
></verify-code>
</div> </div>
</div> <div
<div v-if="loginType === 'PassWord' || (!isLogin && loginType !== 'bindEmail')" class="form-group"> v-if="
<div class="login_labelName flex justify-between items-center"> loginType === 'PassWord' ||
密碼<span (!isLogin && loginType !== 'bindEmail')
class="text-grey-6 cursor-pointer" "
class="q-mt-md"
>
<div class="text-right">
<span
class="text-grey-6 f12 cursor-pointer"
v-if="loginType === 'PassWord'" v-if="loginType === 'PassWord'"
@click="resetPassword" @click="resetPassword"
>忘記密碼</span >忘記密碼</span
> >
</div> </div>
<q-input <q-input
v-if="flag == 1" standout
outlined
v-model="loginMsg.PassWord"
type="text"
ref="pwd"
/>
<q-input
v-if="flag == 2"
outlined
v-model="loginMsg.PassWord" v-model="loginMsg.PassWord"
type="PassWord" type="PassWord"
autocomplete="off"
:rules="[(val) => !!val || '請輸入密碼']"
ref="pwd" ref="pwd"
/> />
<i
class="iconfont iconyanjing_xianshi"
v-if="flag == 1"
@click="flag = 2"
></i>
<i
class="iconfont iconbiyan"
v-if="flag == 2"
@click="flag = 1"
></i>
</div> </div>
<div <div class="text-right f12 text-dark" v-if="isLogin">
class="text-right f16 text-grey-6 cursor-pointer" <span class="cursor-pointer" @click="changeLoginType">{{
v-if="isLogin"
@click="changeLoginType"
>
{{
loginType === "PassWord" ? "使用郵箱驗證登陸" : "使用賬號密碼登陸" loginType === "PassWord" ? "使用郵箱驗證登陸" : "使用賬號密碼登陸"
}} }}</span>
</div> </div>
<div class="q-mb-xl"> <div class="q-mb-xl">
<q-btn <q-btn
...@@ -189,6 +201,7 @@ ...@@ -189,6 +201,7 @@
style="width: 100%; height: 50px; margin-top: 20px" style="width: 100%; height: 50px; margin-top: 20px"
filled filled
:label="mylabel" :label="mylabel"
:loading="loading"
@click="login" @click="login"
/> />
</div> </div>
...@@ -214,12 +227,21 @@ ...@@ -214,12 +227,21 @@
<div class="flex items-start no-wrap"> <div class="flex items-start no-wrap">
<div><q-checkbox v-model="isAgree"></q-checkbox></div> <div><q-checkbox v-model="isAgree"></q-checkbox></div>
<span <span
>在使用印象的产品和服务前,我已阅读 >在使用印象的产品和服务前,我已阅读 理解并同意印象的<a
理解并同意印象的<a>《隐私政策》</a><a>《使用条款》</a></span href="http://www.oytour.com/#/customer/15"
target="_blank"
class="text-primary"
>《隐私政策》</a
><a
href="http://www.oytour.com/#/customer/13"
target="_blank"
class="text-primary"
>《使用条款》</a
></span
> >
</div> </div>
</div> </div>
</div> </q-form>
<!-- 微信扫码页面 --> <!-- 微信扫码页面 -->
<div v-show="loginType === 'wechat'"> <div v-show="loginType === 'wechat'">
<div class="bold f34">微信登錄</div> <div class="bold f34">微信登錄</div>
...@@ -232,10 +254,12 @@ ...@@ -232,10 +254,12 @@
<script> <script>
import QrcodeVue from "qrcode.vue"; import QrcodeVue from "qrcode.vue";
import verifyCode from "src/components/auth/verifyCode.vue";
export default { export default {
name: "Login", name: "Login",
components: { components: {
QrcodeVue, QrcodeVue,
verifyCode,
}, },
data() { data() {
return { return {
...@@ -256,13 +280,15 @@ export default { ...@@ -256,13 +280,15 @@ export default {
logo: "", logo: "",
flag: 2, flag: 2,
mylabel: "登入", mylabel: "登入",
loading: false,
inSending:false
}; };
}, },
created() {}, created() {},
mounted() { mounted() {
console.log("login", this.$route.query); console.log("login", this.$route.query);
const { code, state, path } = this.$route.query; const { code, state, path } = this.$route.query;
this.path = path this.path = path;
if (code) { if (code) {
this.fetchLoginInfo(code, state); this.fetchLoginInfo(code, state);
this.isLogin = false; this.isLogin = false;
...@@ -277,7 +303,7 @@ export default { ...@@ -277,7 +303,7 @@ export default {
var jObj = JSON.parse(window.localStorage.getItem("baseifo")); var jObj = JSON.parse(window.localStorage.getItem("baseifo"));
this.logo = jObj.Config.Logo; this.logo = jObj.Config.Logo;
} }
this.isLogin=!this.$route.query.t || this.$route.query.t!=1 this.isLogin = !this.$route.query.t || this.$route.query.t != 1;
}, },
watch: { watch: {
loginType: function () { loginType: function () {
...@@ -285,6 +311,11 @@ export default { ...@@ -285,6 +311,11 @@ export default {
}, },
}, },
methods: { methods: {
async formValidateHandler(formName) {
let temp = this.$refs[formName];
let formObj = temp instanceof Array ? temp[0] : temp;
return formObj.validate();
},
fetchLoginInfo(code, state) { fetchLoginInfo(code, state) {
this.apipost( this.apipost(
"getWXToken_post", "getWXToken_post",
...@@ -304,12 +335,7 @@ export default { ...@@ -304,12 +335,7 @@ export default {
this.userId = unoinid; this.userId = unoinid;
} }
} else { } else {
this.$q.notify({ this.$message.error(res.data.message);
type: "negative",
message: res.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
}, },
(err) => {} (err) => {}
...@@ -323,12 +349,7 @@ export default { ...@@ -323,12 +349,7 @@ export default {
if (r.data.resultCode == 1) { if (r.data.resultCode == 1) {
this.openInfo = r.data.data; this.openInfo = r.data.data;
} else { } else {
this.$q.notify({ this.$message.error(res.data.message);
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
}, },
null null
...@@ -366,16 +387,10 @@ export default { ...@@ -366,16 +387,10 @@ export default {
sendVerify() { sendVerify() {
if (this.inSending) return; if (this.inSending) return;
this.inSending = true; this.inSending = true;
if (this.verifyEmail()) {
if(!this.userId && this.loginType === 'bindEmail') { if (!this.userId && this.loginType === "bindEmail") {
this.$q.notify({ this.$message.error("微信登录出错,请重新登录");
type: "negative", return;
message: '微信登录出错,请重新登录',
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
// this.useWechatLogin()
return
} }
let SendType = this.userId ? 3 : this.isLogin ? 1 : 0; let SendType = this.userId ? 3 : this.isLogin ? 1 : 0;
this.apipost( this.apipost(
...@@ -392,25 +407,20 @@ export default { ...@@ -392,25 +407,20 @@ export default {
this.cutDown = 60; this.cutDown = 60;
this.startCutDown(); this.startCutDown();
} else { } else {
this.$q.notify({ this.$message.error(res.data.message);
type: "negative",
message: res.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
}, },
null null
); );
} else {
this.inSending = false;
}
}, },
startCutDown() { startCutDown() {
this.timer = setTimeout(() => { this.timer = setTimeout(() => {
this.cutDown--; this.cutDown--;
if (this.cutDown) { if (this.cutDown > 0) {
this.startCutDown(); this.startCutDown();
} else {
clearTimeout(this.timer);
this.timer = null;
} }
}, 1000); }, 1000);
}, },
...@@ -428,16 +438,6 @@ export default { ...@@ -428,16 +438,6 @@ export default {
} }
this.cutDown = 0; this.cutDown = 0;
}, },
verifyEmail() {
if (/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(this.loginMsg.Mailbox)) {
this.tips = false;
return true;
} else {
// 提示用户邮箱格式有误
this.tips = true;
return false;
}
},
changeLoginType() { changeLoginType() {
if (this.loginType === "PassWord") { if (this.loginType === "PassWord") {
this.loginType = "MailCode"; this.loginType = "MailCode";
...@@ -450,92 +450,64 @@ export default { ...@@ -450,92 +450,64 @@ export default {
// this.setWechatCode() // this.setWechatCode()
const { AppID, State, OpenRedirectUri } = this.openInfo; const { AppID, State, OpenRedirectUri } = this.openInfo;
let redirect_uri = OpenRedirectUri; let redirect_uri = OpenRedirectUri;
const url = `https://open.weixin.qq.com/connect/qrconnect?appid=${AppID}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_login&state=${State}&wechat_redirect=${redirect_uri}`; const url = `https://open.weixin.qq.com/connect/qrconnect?appid=${AppID}&redirect_uri=${encodeURIComponent('http://www.oytour.com/#/login')}&response_type=code&scope=snsapi_login&state=${State}&wechat_redirect=${redirect_uri}`;
// this.windowObjectReference = window.open(url, 'wechat', 'left: 20,top: 20,width:200,height:200,') // this.windowObjectReference = window.open(url, 'wechat', 'left: 20,top: 20,width:200,height:200,')
// console.log('windowObjectReference', this.windowObjectReference) // console.log('windowObjectReference', this.windowObjectReference)
// setTimeout(() => {console.log(this.windowObjectReference.close())}, 1000) // setTimeout(() => {console.log(this.windowObjectReference.close())}, 1000)
window.location.href = url; window.location.href = url;
}, },
login() { async login() {
if (this.mylabel === "提交中...") { if (this.loading) {
return;
}
if (!this.isAgree) {
this.$q.notify({
type: "negative",
message: "请先同意平台使用协议",
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
return; return;
} }
if (this.loginMsg.Mailbox == "") { if (await this.formValidateHandler("loginForm")) {
this.$q.notify({ if (this.loginType === "MailCode" || this.loginType === "bindEmail") {
type: "negative", if (!this.isSend) {
message: "请输入账号", this.$message.error("請發送驗證碼");
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
return; return;
} }
if (this.loginMsg.PassWord == "" && this.loginType === "PassWord") { if (!this.$refs.verify.validate()) return;
this.$q.notify({
type: "negative",
message: "请输入密码",
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
return;
} }
if ( if (!this.isAgree) {
this.loginMsg.MailCode == "" && this.$message.warn("请先同意平台使用协议");
(this.loginType === "MailCode" || this.loginType === "bindEmail")
) {
this.$q.notify({
type: "negative",
message: "请输入邮箱验证码",
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
return; return;
} }
let params = { ...this.loginMsg }; let params = { ...this.loginMsg };
let url = "MailboxPwdLogin_post"; // 密码登录 let url = "MailboxPwdLogin_post"; // 密码登录
if (!this.isLogin) { if (!this.isLogin) {
url = "directCustomer_post_MailRegister"; url = "directCustomer_post_MailRegister";
} else if (this.loginType === "MailBox") { } else if (this.loginType === "MailCode") {
ulr = "MailboxLogin_post"; url = "MailboxLogin_post";
} }
if (this.loginType === "bindEmail") { if (this.loginType === "bindEmail") {
url = "BindMailByOpenId_post"; url = "BindMailByOpenId_post";
params.Unoinid = this.userId; params.Unoinid = this.userId;
} }
this.mylabel = "提交中..."; this.loading = true;
this.apipost( this.apipost(
url, url,
params, params,
(res) => { (res) => {
this.mylabel = "登入";
if (res.data.resultCode == 1) { if (res.data.resultCode == 1) {
var jsonData = JSON.stringify(res.data.data); window.localStorage.setItem(
window.localStorage.setItem("b2bUser", jsonData); "b2bUser",
console.log("userInfo", jsonData, res.data.data); JSON.stringify(res.data.data)
if(this.path) { );
if (this.path) {
this.CommonJump(this.path, {}); this.CommonJump(this.path, {});
} else { } else {
this.CommonJump("/index", {}); this.CommonJump("/index", {});
} }
} else { } else {
this.$q.notify({ this.$message.error(res.data.message);
type: "negative",
message: res.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
} }
this.loading = false;
}, },
(err) => {} (err) => {
this.loading = false;
}
); );
}
}, },
resetPassword() { resetPassword() {
this.CommonJump("/resetPassword", {}); this.CommonJump("/resetPassword", {});
......
<style> <style>
.login { .login {
background: url('../assets/img/login-bg.png');background-size: cover; background: url("../assets/img/login-bg.png");
background-size: cover;
width: 100%; width: 100%;
height: 100%; height: 100%;
position: fixed; position: fixed;
...@@ -9,7 +10,7 @@ ...@@ -9,7 +10,7 @@
left: 0; left: 0;
right: 0; right: 0;
} }
.login-box { .login-box-pc {
width: 436px; width: 436px;
padding: 30px 40px; padding: 30px 40px;
margin: 100px auto; margin: 100px auto;
...@@ -19,6 +20,12 @@ ...@@ -19,6 +20,12 @@
background: #ffffff; background: #ffffff;
border-radius: 18px; border-radius: 18px;
} }
.login-box {
max-width: 436px;
padding: 30px 40px;
background-clip: padding-box;
background: #ffffff;
}
.login-box .tw_logo { .login-box .tw_logo {
margin: 0 auto 20px; margin: 0 auto 20px;
...@@ -82,8 +89,8 @@ ...@@ -82,8 +89,8 @@
} }
</style> </style>
<template> <template>
<div class="login"> <div :class="$q.platform.is.desktop ? 'login': 'full-width'">
<div class="login-box"> <div class="login-box" :class="$q.platform.is.desktop ? 'login-box-pc': ''">
<div class="f34 bold">重置密码</div> <div class="f34 bold">重置密码</div>
<div class="login_row"> <div class="login_row">
<div class="form-group"> <div class="form-group">
......
<template>
<div class="content-page order-preview">
<q-card class="rounded-borders q-pa-md q-mt-md" flat>
<div class="text-subtitle1 text-weight-bolder">訂單狀態</div>
<div class="q-mt-lg row">
<div class="col">
<div class="row items-center">
<q-icon name="iconfont icontishi" size="32px" color="warning" />
<div class="q-ml-md text-h6 text-orange text-weight-bold">待支付</div>
</div>
<div class="q-mt-md f12 text-grey-6">請在您下單成功後30分鐘內完成支付,否則訂單會被系統自動取消</div>
</div>
<div class="">
<div class="f12 text-grey-6">訂單編號:#D2022325159852</div>
<div class="f12 text-grey-6 q-mt-md">下單日期:2023年3月14日 19:02</div>
</div>
</div>
<q-separator color="grey-2" class="q-my-md" />
<div class="row">
<div class="text-subtitle1 col">
<span>應付金額:</span>
<span class="text-subtitle2">CNY</span>
<span class="q-ml-sm text-weight-bolder">{{ moneyFormat('3580.00',2) }}</span>
</div>
<div class="">
<q-btn color="primary" outline dense label="取消訂單" class="q-mr-md q-px-md"/>
<q-btn color="primary" unelevated dense label="前往付款" class="q-px-md"/>
</div>
</div>
</q-card>
<q-card class="rounded-borders q-pa-md q-mt-md" flat>
<div class="text-subtitle1 text-weight-bolder">商品訊息</div>
<div class="row q-mt-md">
<q-img
src="http://imgfile.oytour.com/Upload/DMC/202302280651141800000000003.jpg"
class="rounded-borders q-mr-md"
spinner-color="grey-2"
style="width: 150px"
/>
<div class="col">
<div class="text-body1 ellipsis">忠清北道私人包車一日遊|玉笋峰悬索桥 & 单轨列车登飞凤山(滑翔伞) & 朴达岭 & 国弓体验</div>
<div class="q-mt-sm text-grey-6">2023-03-15從成都出發 成人x2; </div>
<div class="q-mt-sm text-dark">
出行日期:2023年3月30日(本地时间)
</div>
<div class="q-mt-sm text-grey-6">
商品類型:包車
</div>
</div>
</div>
</q-card>
<q-card class="rounded-borders q-pa-md q-mt-md" flat>
<div class="text-subtitle1 text-weight-bolder">訂購人訊息</div>
<div class="f12 q-mt-sm text-grey-6">如你的预订有任何变动,我们将及时通知你</div>
<div class="row q-col-gutter-md q-mt-md">
<div class="col-6">
<div class="f12 text-grey-6">姓氏</div>
<div class="q-mt-sm text-body1"></div>
</div>
<div class="col-6">
<div class="f12 text-grey-6">名字</div>
<div class="q-mt-sm text-body1"></div>
</div>
<div class="col-6">
<div class="f12 text-grey-6">手機號碼</div>
<div class="q-mt-sm text-body1">86-17308037817</div>
</div>
<div class="col-6">
<div class="f12 text-grey-6">邮箱 (用于接收订单确认邮件)</div>
<div class="q-mt-sm text-body1">alex9012@vip.qq.com</div>
</div>
</div>
<div>
<q-separator color="grey-2" class="q-my-md" />
<div class="text-subtitle1 text-weight-bolder">用戶備註</div>
<div class="rounded-borders bg-orange-1 col q-mt-md q-pa-md text-orange">
凍死了防控就是大陸飛科技阿斯蒂芬盧卡斯經費達拉斯
</div>
</div>
</q-card>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
\ No newline at end of file
const routes = [{
path: '/',
component: () =>
import ('layouts/HomeLayout.vue'),
children: [{
path: '',
meta: { title: '首页' },
component: () =>
import ('pages/index.vue')
},
{
path: '/index',
meta: { title: '首页' },
component: () =>
import ('pages/index.vue')
},
{
path: '/about', //关于我们
meta: { title: '关于我们' },
component: () =>
import ('pages/about.vue')
}, {
path: '/contract', //契约管理
meta: { title: '契约管理' },
component: () =>
import ('pages/contract.vue')
}, {
path: '/tour_visa', //签证护照管理
meta: { title: '签证护照管理' },
component: () =>
import ('pages/tour_visa.vue')
}, { //行程
path: '/details/:id/:tcid',
meta: { title: '行程' },
component: () =>
import ('pages/details.vue')
}, { // 包车,接机
meta: { title: '包车,接机' },
path: '/detailCar/:id',
component: () =>
import ('pages/detailsCar.vue')
}, { // 包车,接机下单
path: '/PickuporderForm/:id',
meta: { title: '包车,接机下单' },
component: () =>
import ('pages/Pickuporder/orderForm.vue')
}, { // 景区门票详情
path: '/detailsScenicSpotTicket/:id',
meta: { title: '景区门票详情' },
component: () =>
import ('pages/ScenicSpotTicket/details.vue')
}, { // 景区门票下单
path: '/ScenicSpotTicketOrderForm/:id',
meta: { title: '景区门票下单' },
component: () =>
import ('pages/ScenicSpotTicket/orderForm.vue')
}, { // 酒店
path: '/detailHotal/:id/:b2CPrice',
meta: { title: '酒店' },
component: () =>
import ('pages/detailsHotal.vue')
}, { // 旅程
path: '/detail/:id/:tcid/:newConfigId',
meta: { title: '旅程' },
component: () =>
import ('pages/detailsNew.vue')
}, {
path: '/search', //出行检索
meta: { title: '出行检索' },
component: () =>
import ('pages/Search.vue')
},
{
path: '/account', //用户信息
meta: { isUserCenter: true, needLogin: true, title: '用户信息' },
component: () =>
import ('pages/usercenter/account.vue')
},
{
path: '/demandlist', //需求单列表
meta: { isUserCenter: true, needLogin: true, title: '需求单列表' },
component: () =>
import ('pages/usercenter/demandlist.vue')
},
{
path: '/demandinfo/:id', //需求单详情
meta: { isUserCenter: true, needLogin: true, title: '需求单详情' },
component: () =>
import ('pages/usercenter/demandinfo.vue')
},
{
path: '/orderlist', //订单列表
meta: { isUserCenter: true, needLogin: true, title: '订单列表' },
component: () =>
import ('pages/usercenter/orderlist.vue')
},
{
path: '/orderinfo/:id', //订单详情
meta: { isUserCenter: true, needLogin: true, title: '订单详情' },
component: () =>
import ('pages/usercenter/orderinfo.vue')
},
{
path: '/passengerList/:id', //旅客名单
meta: { isUserCenter: true, needLogin: true, title: '旅客名单' },
component: () =>
import ('pages/usercenter/passengerList.vue')
},
{
path: '/register', //用户注册
meta: { isUserCenter: true, needLogin: true, title: '用户注册' },
component: () =>
import ('pages/usercenter/register.vue')
},
{
path: '/loginInfo', //账户设置
meta: { isUserCenter: true, needLogin: true, title: '账户设置' },
component: () =>
import ('pages/usercenter/loginInfo.vue')
},
{
path: '/setAddress', //地址管理
meta: { isUserCenter: true, needLogin: true, title: '地址管理' },
component: () =>
import ('pages/usercenter/setAddress.vue')
},
{
path: '/setInfo', //账户设置
meta: { isUserCenter: true, needLogin: true, title: '账户设置' },
component: () =>
import ('pages/usercenter/setInfo.vue')
},
{
path: '/setUserInfo', //用户信息
meta: { isUserCenter: true, needLogin: true, title: '用户信息' },
component: () =>
import ('pages/usercenter/setUserInfo.vue')
},
{
path: '/coupon', //优惠券
meta: { isUserCenter: true, needLogin: true, title: '优惠券' },
component: () =>
import ('pages/usercenter/coupon.vue')
},
{
path: '/order', //用户订单
meta: { isUserCenter: true, needLogin: true, title: '用户订单' },
component: () =>
import ('pages/usercenter/order.vue')
},
{
path: '/setUsersList', //出行人管理
meta: { isUserCenter: true, needLogin: true, title: '出行人管理' },
component: () =>
import ('pages/usercenter/setUsersList.vue')
},
{
path: '/payInfo', //支付管理
meta: { isUserCenter: true, needLogin: true, title: '支付管理' },
component: () =>
import ('pages/usercenter/payInfo.vue')
},
{
path: '/customer/:id', //顾客管理
meta: { title: '顾客管理' },
component: () =>
import ('pages/customer.vue')
},
{
path: '/city/:id', //城市详情
meta: { title: '城市详情' },
component: () =>
import ('pages/city/cityDetail.vue')
},
{
path: '/lineOrderPriview/:id?', //订单确认
meta: { title: '订单确认' },
component: () =>
import ('pages/line/orderPreview.vue')
},
{
path: '/pay/:id?', //自定义页面
meta: { title: '订单支付' },
component: () =>
import ('pages/pay/pay.vue')
},
{
path: '/paysuccess/:id?', //支付结果
meta: { title: '支付结果' },
component: () =>
import ('pages/pay/paysuccess.vue')
},
]
},
{
path: '/userCenter', //移动端个人中心
meta: { isUserCenter: true, needLogin: true,title: '个人中心' },
component: () =>
import ('pages/usercenter/mobileUserCenter.vue')
},
{
path: '/login',
meta: { title: '登录' },
component: () =>
import ('pages/login.vue'),
children: [{
path: '/login',
meta: { title: '登录' },
component: () =>
import ('pages/login.vue')
}]
},
{
path: '/resetPassword',
meta: { title: '重置密码' },
component: () =>
import ('pages/resetPassword.vue'),
children: [{
path: '/resetPassword',
meta: { title: '重置密码' },
component: () =>
import ('pages/resetPassword.vue')
}]
},
{
path: '/newTrip',
meta: { title: '旅程' },
component: () =>
import ('pages/newTrip.vue')
},
{
path: '/tripMobile',
meta: { title: '旅程' },
component: () =>
import ('pages/tripMobile.vue')
}
]
// Always leave this as last one
if (process.env.MODE !== 'ssr') {
routes.push({
path: '*',
component: () =>
import ('pages/Error404.vue')
})
}
export default routes
\ No newline at end of file
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