Commit ca2b5ce4 authored by youjie's avatar youjie

Merge branch 'master' of http://gitlab.oytour.com/viitto/million

parents 2c85932c a9c8d4da
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
"babel-plugin-transform-remove-console": "^6.9.4", "babel-plugin-transform-remove-console": "^6.9.4",
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"js-md5": "^0.7.3", "js-md5": "^0.7.3",
"lodash-es": "^4.17.21",
"qrcode.vue": "^1.7.0", "qrcode.vue": "^1.7.0",
"qrcodejs2": "^0.0.2", "qrcodejs2": "^0.0.2",
"quasar": "^1.22.5", "quasar": "^1.22.5",
......
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
...@@ -196,12 +196,25 @@ Vue.prototype.OpenNewUrl = function(URL) { ...@@ -196,12 +196,25 @@ Vue.prototype.OpenNewUrl = function(URL) {
} }
//公用跳转 //公用跳转
Vue.prototype.CommonJump = function(path, obj) { Vue.prototype.CommonJump = function(path, obj, type = 'push') {
let p = typeof(path) == 'string' ? path : this.$product.genernalUrl(path) let p = typeof(path) == 'string' ? path : this.$product.genernalUrl(path)
this.$router.push({ if(type === 'blank') { // 新窗口打开
path: p, let routeUrl = this.$router.resolve({
query: obj path: p,
}); query: obj
});
window.open(routeUrl.href, '_blank');
} else if (type === 'replace') { // replace
this.$router.replace({
path: p,
query: obj
});
} else if (type === 'push') { // push
this.$router.push({
path: p,
query: obj
});
}
} }
Vue.prototype.$user = user Vue.prototype.$user = user
Vue.prototype.createCalendar = function(dateStr) { Vue.prototype.createCalendar = function(dateStr) {
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
{{ formatEnum(product.ProductType) }} {{ formatEnum(product.ProductType) }}
</div> </div>
</q-img> </q-img>
<div class="ellipsis-2-lines text-body1 q-ma-md cursor-pointer" style="height: 74px;" @click="CommonJump(product,{})">{{ product.Title }}</div> <div class="ellipsis-2-lines text-body1 q-ma-md cursor-pointer" style="height: 74px;" @click="CommonJump(product,{},'blank')">{{ product.Title }}</div>
<div class="text-subtitle2 text-weight-bolder text-dark q-mx-md"> <div class="text-subtitle2 text-weight-bolder text-dark q-mx-md">
<span>CNY {{moneyFormat(product.B2CPrice,2)}}</span> <span>CNY {{moneyFormat(product.B2CPrice,2)}}</span>
<span class="f12 q-ml-sm"></span> <span class="f12 q-ml-sm"></span>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
</div> </div>
</q-img> </q-img>
<div class="q-px-md col"> <div class="q-px-md col">
<div class="ellipsis-2-lines text-body1 q-ma-md cursor-pointer" style="height:50px;" @click="CommonJump(product,{})">{{ product.Title }}</div> <div class="ellipsis-2-lines text-body1 q-ma-md cursor-pointer" style="height:50px;" @click="CommonJump(product,{},'blank')">{{ product.Title }}</div>
<div class="text-subtitle2 text-weight-bolder text-dark q-mx-md"> <div class="text-subtitle2 text-weight-bolder text-dark q-mx-md">
<span>CNY {{moneyFormat(product.B2CPrice,2)}}</span> <span>CNY {{moneyFormat(product.B2CPrice,2)}}</span>
<span class="f12 q-ml-sm"></span> <span class="f12 q-ml-sm"></span>
......
<template> <template>
<div class="q-mt-lg"> <div class="q-mt-lg">
<div class="section-block paragraph1"> <div class="section-block paragraph1" v-html="plugData.ParagraphContent">
{{plugData.ParagraphContent}}
</div> </div>
</div> </div>
</template> </template>
...@@ -19,4 +18,9 @@ ...@@ -19,4 +18,9 @@
padding: 20px 0; padding: 20px 0;
color: #666; color: #666;
} }
.paragraph1 li{
list-style: none;
padding:0;
margin:0;
}
</style> </style>
\ No newline at end of file
<template> <template>
<!--輪播圖-小--> <!--輪播圖-小-->
<q-carousel v-model="slide" transition-prev="slide-right" transition-next="slide-left" :autoplay="5000" swipeable <q-carousel v-model="slide" transition-prev="slide-right" transition-next="slide-left" :autoplay="5000" swipeable
animated control-color="white" padding arrows infinite height="235px" animated control-color="white" padding :arrows="imgLength>1" infinite height="235px"
class="bg-primary text-white shadow-1 q-mt-lg q-mb-xl"> class="bg-primary text-white q-mb-xl">
<q-carousel-slide v-for="(x, i) in plugData.Details" :key="i" @click="clickSlideHandler(x.LinkUrl)" :name="i" <template v-for="(x, i) in plugData.Details">
:img-src="x.LinkImg" /> <q-carousel-slide :key="i" v-if="x.LinkImg" @click="clickSlideHandler(x.LinkUrl)" :name="i"
:img-src="x.LinkImg">
<div class="full-height column justify-center text-h4">
<div class="text-center text-shadow">{{ plugData.Title }}</div>
</div>
</q-carousel-slide>
</template>
</q-carousel> </q-carousel>
</template> </template>
<script> <script>
export default { export default {
props: ["plugData"], props: ["plugData"],
data() { data() {
return { return {
slide: 0, slide: 0,
imgLength:0
}; };
}, },
created() {
this.imgLength = this.plugData.Details.filter(x=>x.LinkImg!='').length
},
methods: { methods: {
clickSlideHandler(url) { clickSlideHandler(url) {
if (url && url.length > 1) { if (url && url.length > 1) {
......
<style> <style>
.q-ml-lg .block {
margin-right: 12px;
}
</style> </style>
<style scoped> <style scoped>
.header-box { .area-item {
max-width: 1200px;
margin: 0 auto;
}
.address-box {
width: 815px;
height: 426px;
}
.menu-box {
width: 174px;
height: 426px;
overflow: auto;
}
.menu-item {
width: 139px;
margin: 15px auto;
height: 49px;
border-radius: 4px; border-radius: 4px;
padding: 8px 16px; border: 1px solid #eee;
cursor: pointer; padding: 4px 6px;
} margin: 8px 8px 8px 0;
.menu-item:hover { display: inline-block;
color: #333;
background-color: #eeeeee;
}
.hot {
line-height: 33px;
}
.select {
color: #fff;
background-color: #ee4454;
}
.menu-title {
font-weight: bold;
}
.menu-tag-box span {
margin-right: 20px;
}
.menu-tag-box:last-child {
margin-right: 0;
}
.city-box {
padding: 14px 18px;
width: 641px;
background: #f5f5f5;
}
.city {
width: 129px;
height: 69px;
background-size: cover;
background-repeat: no-repeat;
background-position: 0% 0%;
cursor: pointer;
}
.city2 {
width: 76px;
height: 32px;
background: #dbdbdb;
border-radius: 8px;
font-weight: bold;
line-height: 32px;
overflow: hidden;
padding: 0 8px;
margin-right: 20px;
cursor: pointer;
}
.city3 {
height: 32px;
line-height: 32px;
/* display: inline-block; */
margin: 0 20px 4px 0;
cursor: pointer;
font-weight: bold;
} }
.city:hover { .navigate {
background-color: #eeeeee; line-height: 12px;
border-bottom: 1px solid #666;
} }
.city-img { .box {
width: 127px; max-height: 500px;
height: 67px; overflow: auto;
position: absolute;
top: 1;
left: 1;
border-radius: 10px;
}
.city-name-box {
z-index: 10;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
.city-name {
text-align: center;
height: 22px;
background: rgba(0, 0, 0, 0.2);
color: #fff;
padding: 0 5px;
border-radius: 10px;
}
.address-btn {
margin: 0 10px 0 44px;
}
.all-type {
margin-left: 10px;
} }
.all-menu { .hot-item {
width: 660px; width: 50%;
padding: 10px; display: inline-block;
height: 100px;
padding: 5px;
} }
.category-item { .category-item {
width: 160px; height: 40px;
padding: 10px; line-height: 40px;
border-radius: 8px; border-top: 1px solid #eee;
font-weight: bold;
font-size: 18px !important;
}
.font-16 {
font-size: 16px;
}
.category-l2 {
height: 34px;
border-radius: 8px;
line-height: 34px;
padding: 0 8px;
cursor: pointer;
font-size: 14px;
font-weight: 400;
}
.category-l2:hover {
background-color: #eee;
}
.category-l2-select {
background: #ee4454;
color: #fff;
}
.category-l3 {
padding: 8px;
font-size: 12px;
font-weight: 400;
color: #a0a0a0;
border-radius: 8px;
cursor: pointer;
} }
.category-l3:hover { .top-navs {
background-color: #eee; position: sticky;
} top: 0px;
.category-l3-select { z-index: 10;
color: #ee4454; background: #fff;
}
.category-box {
width: 140px;
padding: 10px;
font-weight: bold;
} }
.category-btn { .area-navs {
width: 100px; position: sticky;
top: 48px;
z-index: 10;
background: #fff;
} }
</style> </style>
<template> <template>
<div v-if="isHome"> <div class="box relative" id="privilage-list">
<q-btn <q-tabs v-model="tabType" class="text-primary top-navs">
flat <q-tab name="area" label="目的地" />
class="address-btn" <q-tab name="category" label="所有分类" />
@mouseenter="mouseenterAddress" </q-tabs>
@mouseleave="mouseeleaveAddress" <!-- 目的地 -->
> <div v-if="tabType === 'area'">
<span slot="default" class="flex item-center"> <div class="padding">
<i <div class="flex justify-between items-end">
class="iconfont icondingweixiao q-icon notranslate" <span class="f18 bold">热门目的地</span>
style="font-size: 14px; margin-right: 8px" <span class="navigate" @click="showHotMore = !showHotMore">{{
></i showHotMore ? "收起" : "查看更多"
>選擇目的地 }}</span>
</span> </div>
<q-menu ref="address" @mouseenter="addressMenuEnter" class="light-shadow"> <div>
<div class="address-box flex"> <template v-for="(item, index) in hotAreas">
<div class="menu-box">
<div <div
v-for="item in areas" v-if="showHotMore || index < 4"
:key="item.Id" :key="item.Id"
class="menu-item" @click="handleSelectArea(item)"
@click="changeAreas(item)" class="hot-item"
:class="{ select: selectedAreaId === item.Id }"
> >
<div v-if="!item.tag" class="hot">{{ item.Name }}</div> <q-img
<div v-else> :src="item.ImageList[0]"
<div class="menu-title">{{ item.Name }}</div> spinner-color="grey-2"
<div class="menu-tag-box"> class="rounded-borders full-width full-height"
<span>加德滿都</span>
<span>加德滿都</span>
</div>
</div>
</div>
</div>
<!-- 热门城市 -->
<div class="col bg-grey-2">
<div v-if="!selectedAreaId" class="row q-pr-md">
<div
@click="handleSelectArea(item)"
v-for="item in selectedArea"
class="q-mt-md q-ml-md"
:key="item.Id"
style="width: 130px; height: 70px"
> >
<q-img <div
:src="item.ImageList[0]" class="full-width full-height row items-center justify-center"
spinner-color="grey-2" style="background: none"
class="rounded-borders full-width full-height"
> >
<div <div
class="full-width full-height row items-center justify-center" style="
style="background: none" background: rgba(0, 0, 0, 0.2);
> text-shadow: 2px 2px 5px rgb(0 0 0 / 50%);
<div "
style=" class="rounded-borders q-px-md q-py-xs text-white cursor-pointer"
background: rgba(0, 0, 0, 0.2);
text-shadow: 2px 2px 5px rgb(0 0 0 / 50%);
"
class="rounded-borders q-px-md q-py-xs text-white cursor-pointer"
>
{{ item.Name }}
</div>
</div>
</q-img>
</div>
</div>
<div v-else class="city-box">
<div class="row" v-for="item in selectedArea" :key="item.Id">
<div style="width: 138px">
<div
@click="handleSelectArea(item)"
class="q-py-xs q-px-md bg-grey-4 cursor-pointer text-black text-subtitle2 inline-block rounded-borders text-weight-bolder"
> >
{{ item.Name }} {{ item.Name }}
</div> </div>
</div> </div>
<div class="col q-mt-sm"> </q-img>
<div class="row q-col-gutter-lg"> </div></template
<div >
@click="handleSelectArea(item2)" <q-tabs v-model="areaType" class="text-primary area-navs" :dense="true">
class="text-subtitle2 text-grey-9 cursor-pointer" <q-tab @click="goScrollHandler(item.Id)"
v-for="item2 in item.SubList" v-for="item in areas"
:key="item2.Id" :key="item.Id"
> :name="item.Id"
{{ item2.Name }} :label="item.Name"
</div> />
</div> </q-tabs>
</div> <div :style="showPadding ?'padding-top: 100px' : ''">
<div :id="`el${item.Id}`" v-for="item in areas" :key="item.Id">
<div class="q-mt-md" ref="content" v-for="el in item.SubList" :key="el.Id">
<div class="flex justify-between items-end">
<span class="f18 bold">{{ el.Name }}</span>
<span class="navigate" @click="handleSelectArea(el)">探索</span>
</div>
<div
class="area-item"
v-for="area in el.SubList"
:key="area.Id"
@click="handleSelectArea(area)"
>
{{ area.Name }}
</div> </div>
</div> </div>
</div> </div></div>
</div> </div>
</q-menu> </div>
</q-btn> </div>
<q-separator style="height: 16px; margin: auto 0" vertical /> <!-- 分类 -->
<q-btn <div v-else>
class="all-type category-btn" <div class="padding">
flat <div>
label="全部分類" <!-- <q-tabs v-model="areaType" class="text-primary" :dense="true">
@mouseenter="typeHoverAll(true)" <q-tab
@mouseleave="typeHoverAll(false)" v-for="(item, i) in dataList.CategoryList"
>
<q-menu
ref="menu0"
@mouseenter="menuFocusAll = 2"
@mouseleave="menuLeaveAll"
>
<div class="all-menu">
<div class="flex">
<div
class="category-item font-16"
:key="i" :key="i"
v-for="(x, i) in dataList.CategoryList" :name="i"
> :label="item.CategoryName"
{{ x.CategoryName }} />
</div> </q-tabs> -->
</div> <div v-for="(item, i) in dataList.CategoryList" :key="i">
<q-separator /> <!-- <div class="category-item" @click="handleCategoryChage(item)">
<div class="flex"> <span>{{ item.CategoryName }}</span>
<div <i class="iconfont iconpreviewright"></i></div> -->
class="category-item" <div v-for="el in item.SubList" :key="el.Id">
:key="i" <div class="category-item"
v-for="(x, i) in dataList.CategoryList" @click="handleCategoryChage(el)">
> <span>{{ el.CategoryName }}</span>
<div :key="item.Id" v-for="item in x.SubList"> <i class="iconfont iconpreviewright"></i>
<div
@click="handleCategoryChage(item)"
class="category-l2"
:class="{
'category-l2-select': selectCategory === item.Id,
}"
>
{{ item.CategoryName }}
</div>
<div v-if="item.SubList.length">
<div
@click="handleCategoryChage(item2)"
class="category-l3"
:class="{
'category-l3-select': selectCategory === item2.Id,
}"
:key="item2.Id"
v-for="item2 in item.SubList"
>
<div>{{ item2.CategoryName }}</div>
</div>
</div>
</div> </div>
</div> <div class="category-item"
</div> v-for="area in el.SubList"
</div> :key="area.Id"
</q-menu> @click="handleCategoryChage(area)"
</q-btn>
<template v-for="(x, i) in dataList.CategoryList">
<q-btn
class="category-btn"
:key="i"
:label="x.CategoryName"
flat
:content-style="{ hover: '#ff0000' }"
@mouseenter="typeHover(i, true)"
@mouseleave="typeHover(i, false)"
>
<q-menu
ref="menu"
:key="i"
@mouseenter="menuFocus = 2"
@mouseleave="menuLeave(i)"
>
<div class="category-box">
<div :key="item.Id" v-for="item in x.SubList">
<div
@click="handleCategoryChage(item)"
class="category-l2"
:class="{
'category-l2-select': selectCategory === item.Id,
}"
> >
{{ item.CategoryName }} <span>{{ area.CategoryName }}</span>
</div> <i class="iconfont iconpreviewright"></i>
<div v-if="item.SubList.length">
<div
@click="handleCategoryChage(item2)"
class="category-l3"
:class="{
'category-l3-select': selectCategory === item2.Id,
}"
:key="item2.Id"
v-for="item2 in item.SubList"
>
<div>{{ item2.CategoryName }}</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</q-menu> </div>
</q-btn> </div>
</template> </div>
</div> </div>
</template> </template>
<script> <script>
import tripListVue from "../trip/tripList.vue"; import {throttle} from 'lodash';
export default { export default {
props: { props: {
baseData: { baseData: {
...@@ -378,17 +163,13 @@ export default { ...@@ -378,17 +163,13 @@ export default {
type: Object, type: Object,
default: () => ({}), default: () => ({}),
}, },
title: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: true,
},
}, },
data() { data() {
return { return {
showPadding: false,
showHotMore: false,
tabType: "area",
areaType: "",
searchDate: "", searchDate: "",
searchEndDate: "", searchEndDate: "",
menuFocusAll: 0, menuFocusAll: 0,
...@@ -396,53 +177,22 @@ export default { ...@@ -396,53 +177,22 @@ export default {
selectCategory: undefined, selectCategory: undefined,
categoryList: [], categoryList: [],
subTitle: "", subTitle: "",
LoginUser: {},
navs: [], navs: [],
navsStyle: 1, navsStyle: 1,
areas: [], areas: [],
selectedArea: [], hotAreas: [],
selectedAreaId: "",
isHome: false,
}; };
}, },
watch: { watch: {
title: function (val, oldval) {
this.subTitle = val;
},
baseData: { baseData: {
handler(n, o) { handler(n, o) {
// this.initNavs();
this.initAreas(); this.initAreas();
}, },
deep: true, deep: true,
}, },
$route: {
handler: function (val, oldVal) {
this.isHome = val.path === "/" || val.path === "/index";
},
// 深度观察监听
deep: true,
},
},
meta() {
return {
title:
this.subTitle != ""
? `${this.subTitle} - ${this.baseData.name}`
: this.baseData.name,
};
}, },
mounted() { mounted() {
this.isHome = this.initAreas();
this.$router.history.current.path === "/" ||
this.$router.history.current.path === "/index";
console.log(
'JSON.parse(window.localStorage.getItem("b2bUser"))',
JSON.parse(window.localStorage.getItem("b2bUser"))
);
if (localStorage.b2bUser) {
this.LoginUser = JSON.parse(window.localStorage.getItem("b2bUser"));
}
var newStartDate = new Date(); var newStartDate = new Date();
var newStartDateStr = this.formatDate( var newStartDateStr = this.formatDate(
newStartDate.getFullYear(), newStartDate.getFullYear(),
...@@ -457,25 +207,64 @@ export default { ...@@ -457,25 +207,64 @@ export default {
); );
this.searchDate = newStartDateStr; this.searchDate = newStartDateStr;
this.searchEndDate = newEndDateStr; this.searchEndDate = newEndDateStr;
// this.initAreas() },
// this.initNavs(); beforeDestroy() {
// this.getCategoryList(); window.removeEventListener('scroll', this.throttleGetScrollTop, true)
}, },
methods: { methods: {
avatarClick() { initScroll() {
if (this.LoginUser.token && 1 === 2) { this.isSlide = true // 平滑滚动前
this.CommonJump("/userCenter"); setTimeout(() => { // 点击时平滑滚动完成前不监听滚动
this.isSlide = false
}, 600)
// 收集收集滚动元素的高度
this.slotsTopList = this.$refs.content?.map((item, index) => {
return item.offsetTop
})
this.slotsTopList = this.slotsTopList || []
console.log('this.slotsTopList', this.slotsTopList)
// 初始化滚动监听
this.scrollInit()
},
// 监听滚动高度
scrollInit () {
this.throttleGetScrollTop = throttle(this.getScrollTop, 100)
this.throttleGetScrollTop()
window.addEventListener('scroll', this.throttleGetScrollTop, true)
},
// 监听滚动距离
async getScrollTop () {
if (this.isSlide) return
const scrollTop = document.getElementById('privilage-list').scrollTop
// 获取当前滚动内容对应的tabIndex
let currentIndex = this.slotsTopList.findIndex((top, index) => {
return scrollTop >= this.slotsTopList[index + 1] && scrollTop < this.slotsTopList[index + 2]
})
// this.clickedIndex = currentIndex + 1
if(currentIndex + 1 > -1) {
// this.showPadding = true
this.areaType = this.areas[currentIndex + 1].Id
} else { } else {
// 展示登录弹窗 this.showPadding = false
this.CommonJump("/login");
} }
}, },
goScrollHandler(id) {
this.isSlide = true // 平滑滚动前
setTimeout(() => { // 点击时平滑滚动完成前不监听滚动
this.isSlide = false
}, 600)
console.log("scrollIntoView",`el${id}`, id);
const ele = `#el${id}`
document.querySelector(ele).scrollIntoView({ behavior: "smooth", block: 'end' });
},
handleSelectArea(item) { handleSelectArea(item) {
this.$emit('close', false)
this.CommonJump("/city/" + item.Id, { this.CommonJump("/city/" + item.Id, {
id: item.Id, id: item.Id,
}); });
}, },
handleCategoryChage(item) { handleCategoryChage(item) {
this.$emit('close', false)
this.CommonJump("/search", { this.CommonJump("/search", {
qsearchKey: this.searchKey, qsearchKey: this.searchKey,
qsearchDate: this.searchDate, qsearchDate: this.searchDate,
...@@ -483,123 +272,17 @@ export default { ...@@ -483,123 +272,17 @@ export default {
categoryId: item.Id, categoryId: item.Id,
}); });
}, },
mouseenterAddress() {
this.menuFocusAll = 0;
this.menuFocus = 0;
this.addressFocus = 1;
this.$refs.address.show();
},
mouseeleaveAddress() {
setTimeout(() => {
if (!this.addressFocus) {
this.$refs.address.hide();
}
}, 50);
},
addressMenuEnter() {
this.addressFocus = 2;
},
addressMenuLeave() {
this.addressFocus = 0;
setTimeout(() => {
if (!this.addressFocus) {
this.$refs.address.hide();
}
}, 50);
},
typeHoverAll(bool) {
if (bool) {
this.addressFocus = 0;
this.menuFocus = 0;
this.menuFocusAll = 1;
if (this.currentMenu !== undefined) {
this.$refs.menu[this.currentMenu].hide();
}
this.$refs.menu0.show();
} else {
this.menuFocusAll = 0;
setTimeout(() => {
if (!this.menuFocusAll) {
this.$refs.menu0.hide();
}
}, 50);
}
this.currentMenu = undefined;
},
typeHover(index, bool) {
if (bool) {
this.addressFocus = 0;
this.menuFocusAll = 0;
this.menuFocus = 1;
if (this.currentMenu !== undefined && index !== this.currentMenu) {
this.$refs.menu[this.currentMenu].hide();
}
this.$refs.menu[index].show();
} else {
this.menuFocus = 0;
setTimeout(() => {
if (!this.menuFocus) {
this.$refs.menu[index].hide();
}
}, 50);
}
this.currentMenu = index;
},
menuLeaveAll() {
this.menuFocus = 0;
setTimeout(() => {
if (!this.menuFocusAll) {
this.$refs.menu0.hide();
}
}, 50);
},
menuLeave(i) {
this.menuFocus = 0;
setTimeout(() => {
if (!this.menuFocus) {
this.$refs.menu[i].hide();
}
}, 50);
},
changeAreas(item) {
this.selectedArea = item.SubList;
this.selectedAreaId = item.Id;
},
initNavs() {
this.navs = [];
if (this.baseData.nav.navs) {
this.baseData.nav.navs.forEach((x) => {
if (x.title.indexOf("^") != -1) {
console.log("in....");
let t = x.title.split("^");
let c = t[1].split(",");
x.childs = [];
c.forEach((y) => {
let yt = y.split("&");
x.childs.push({
title: yt[0],
url: x.url + "&" + yt[1],
});
});
x.title = t[0];
}
this.navs.push(x);
});
}
this.navsStyle = this.navs.findIndex((x) => x.childs) != -1 ? 2 : 1;
},
initAreas() { initAreas() {
this.areas = []; this.areas = [];
let hotArr = this.getHotList(this.baseData.AreaList); let hotArr = this.getHotList(this.baseData.AreaList);
this.areas.push({
Name: "热门目的地",
SubList: hotArr,
Id: "",
});
this.$EventBus.$emit("hotList", hotArr);
this.selectedArea = hotArr; this.selectedArea = hotArr;
this.areas = this.areas.concat(this.baseData.AreaList); this.areas = this.baseData.AreaList;
this.hotAreas = hotArr;
console.log("hotArea", this.hotAreas, this.areas);
this.$nextTick(() => {
this.initScroll();
})
}, },
getHotList(arr) { getHotList(arr) {
let hotArr = []; let hotArr = [];
...@@ -614,11 +297,6 @@ export default { ...@@ -614,11 +297,6 @@ export default {
}); });
return hotArr; return hotArr;
}, },
loginOut() {
localStorage.removeItem("b2bUser");
this.LoginUser = {};
this.CommonJump("/index", {});
},
getCategoryList() { getCategoryList() {
let locationName = this.GetDomain(); let locationName = this.GetDomain();
var msg = { var msg = {
......
...@@ -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();
......
...@@ -178,7 +178,9 @@ ...@@ -178,7 +178,9 @@
class="zk_toolbar flex justify-between" class="zk_toolbar flex justify-between"
:class="{ 'q-px-none': $q.platform.is.desktop }" :class="{ 'q-px-none': $q.platform.is.desktop }"
> >
<div v-if="$q.platform.is.mobile" @click="showDialog = true">菜单</div> <div class="flex"><div class="f24" v-if="$q.platform.is.mobile && isHome" @click="handleShowDialog">
<i class="iconfont iconmore1" style="font-size: 24px;"></i>
</div>
<img <img
:src="baseData.logo" :src="baseData.logo"
style=" style="
...@@ -189,7 +191,7 @@ ...@@ -189,7 +191,7 @@
" "
class="q-mr-lg q-ml-sm" class="q-mr-lg q-ml-sm"
@click="CommonJump('/index', {})" @click="CommonJump('/index', {})"
/> /></div>
<!-- pc --> <!-- pc -->
<div v-if="$q.platform.is.desktop"> <div v-if="$q.platform.is.desktop">
<q-btn label="繁體中文" flat> <q-btn label="繁體中文" flat>
...@@ -297,17 +299,26 @@ ...@@ -297,17 +299,26 @@
/> />
</div> </div>
</q-toolbar> </q-toolbar>
<city-category v-if="$q.platform.is.desktop" :baseData="baseData" :dataList="dataList"></city-category> <city-category
<q-dialog v-model="showDialog"> v-if="$q.platform.is.desktop"
<city-category-mobile></city-category-mobile></q-dialog> :baseData="baseData"
:dataList="dataList"
></city-category>
<popup @mousemove.prevent id="city-category" v-model="showDialog" mode="bottom" @close="handleDialogClose">
<city-category-mobile @close="showDialog = false"
:baseData="baseData"
:dataList="dataList"
></city-category-mobile
></popup>
</q-header> </q-header>
</template> </template>
<script> <script>
import CityCategoryMobile from './city-category-mobile.vue'; import popup from "../props/index";
import CityCategoryMobile from "./city-category-mobile.vue";
import cityCategory from "./city-category.vue"; import cityCategory from "./city-category.vue";
export default { export default {
components: { cityCategory, CityCategoryMobile }, components: { cityCategory, CityCategoryMobile, popup },
props: { props: {
baseData: { baseData: {
type: Object, type: Object,
...@@ -398,6 +409,19 @@ export default { ...@@ -398,6 +409,19 @@ export default {
// this.getCategoryList(); // this.getCategoryList();
}, },
methods: { methods: {
handler(event) {event.preventDefault();},
handleShowDialog() {
this.showDialog = true;
this.scrollTop = document.querySelector('body').scrollTop;
document.querySelector(
"body"
).style = `position: fixed; top: -${this.scrollTop}px`;
},
handleDialogClose() {
document.querySelector(
"body"
).style = '';},
avatarClick() { avatarClick() {
if (this.LoginUser.token) { if (this.LoginUser.token) {
this.CommonJump("/userCenter"); this.CommonJump("/userCenter");
......
...@@ -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>
......
<template> <template>
<div class="row items-start q-mt-lg"> <div class="items-start q-mt-lg" :class="$q.platform.is.desktop ? 'row' : 'colmuns'">
<div class="col-3 q-mr-lg"> <div class="col-3" :class="$q.platform.is.desktop ? 'q-mr-lg' : 'q-ma-md'">
<q-card flat class="rounded-borders q-py-md"> <q-card flat class="rounded-borders q-py-md">
<div class="text-subtitle1 text-weight-bold q-mx-md">篩選目的地</div> <div class="text-subtitle1 text-weight-bold q-mx-md">篩選目的地</div>
<q-input <q-input
...@@ -154,10 +154,10 @@ ...@@ -154,10 +154,10 @@
rounded-borders rounded-borders
cursor-pointer cursor-pointer
overflow-hidden overflow-hidden
q-mb-md
row
bg-white bg-white
" "
:class="$q.platform.is.desktop ? 'row q-mb-md' : 'colmuns q-ma-md'"
@click="GotoDetails(x)" @click="GotoDetails(x)"
v-for="(x, i) in DataList" v-for="(x, i) in DataList"
:key="i" :key="i"
...@@ -167,7 +167,8 @@ ...@@ -167,7 +167,8 @@
:ratio="1" :ratio="1"
spinner-color="grey" spinner-color="grey"
spinner-size="20px" spinner-size="20px"
width="272px" :width="$q.platform.is.desktop ? '272px' : ''"
:height="$q.platform.is.desktop ? '' : '200px'"
class="bg-grey-3" class="bg-grey-3"
/> />
<div class="q-pa-md col column"> <div class="q-pa-md col column">
...@@ -733,7 +734,7 @@ this.dayArray = this.dayArray.filter(item => arr.includes(item.id)) ...@@ -733,7 +734,7 @@ this.dayArray = this.dayArray.filter(item => arr.includes(item.id))
// this.msg.dayNumList = arr; // this.msg.dayNumList = arr;
}, },
GotoDetails(item) { GotoDetails(item) {
this.CommonJump(item,{}); this.CommonJump(item,{}, 'blank');
}, },
}, },
}; };
......
...@@ -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 -->
<searchb1 v-if="item.Id=='search_b'&&item.plugData.Type==1" :plugData="item.plugData"></searchb1>
<searchb2 v-if="item.Id=='search_b'&&item.plugData.Type==2" :plugData="item.plugData"></searchb2>
<searchb3 v-if="item.Id=='search_b'&&item.plugData.Type==3" :plugData="item.plugData"></searchb3>
<searchb4 v-if="item.Id=='search_b'&&item.plugData.Type==4" :plugData="item.plugData"></searchb4>
<!--搜尋區塊(輪播淡出)search_sf -->
<searchsf1 v-if="item.Id=='search_sf'&&item.plugData.Type==1" :plugData="item.plugData"></searchsf1>
<searchsf2 v-if="item.Id=='search_sf'&&item.plugData.Type==2" :plugData="item.plugData"></searchsf2>
<searchsf3 v-if="item.Id=='search_sf'&&item.plugData.Type==3" :plugData="item.plugData"></searchsf3>
<!--搜尋區塊(輪播橫)search_s --> <div class="team flex justify-center mt-150">
<searchsf1 v-if="item.Id=='search_s'&&item.plugData.Type==1" :plugData="item.plugData"></searchsf1> <div>
<searchsf2 v-if="item.Id=='search_s'&&item.plugData.Type==2" :plugData="item.plugData"></searchsf2> <img style="width: 71px" src="../assets/img/about/team.png" />
<searchsf3 v-if="item.Id=='search_s'&&item.plugData.Type==3" :plugData="item.plugData"></searchsf3> <div class="f40 bold white team-ml q-mt-md">经营团队及职责范围</div>
<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_el --> <div class="mt-150 wrapper">
<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 class="text-center f20 lh150 q-mt-lg">
印象之旅专注出境旅游产品的供货商<br />目前主要业务范畴定位同业销售为主(B2B),目前为西南地区最大日本专线供应商
</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">
<div :key="i" v-if="(i+(index*topPageCount))<partnersList.length" :product="partnersList[i+(index*topPageCount)]">
<div class="product-card flex">
<div class="circle">A</div>
<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>
</template> <div class="mt-150 relative" style="z-index: 1">
</q-page> <div class="text-center f40 bold">公司組織架構</div>
<div class="line-1"></div>
<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 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>
</div>
</q-carousel-slide>
</q-carousel>
</div>
</div>
</template> </template>
<script> <script>
//出團表 group -Start export default {
import travelList from "../components/group/travel-list"; data() {
//出團表 group -End return {
hotSilder:0,
//搜尋區塊(輪播橫)search_s -Start topPageCount: 10,
import searchs1 from "../components/search_s/search_s1"; 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,],
import searchs2 from "../components/search_s/search_s2"; prizesList: [
import searchs3 from "../components/search_s/search_s3"; {
//搜尋區塊(輪播橫)search_s -End img: "prize-2009",
time: "2009",
//搜尋區塊(Banner)search_b -Start prize: "国航",
import searchb1 from "../components/search_b/search_b1"; desc: '"市场开发一等奖"',
import searchb2 from "../components/search_b/search_b2"; },
import searchb3 from "../components/search_b/search_b3"; {
import searchb4 from "../components/search_b/search_b4"; img: "prize-2010",
//搜尋區塊(Banner)search_b -End time: "2010",
prize: "国航",
//搜尋區塊(輪播淡出)search_sf -Start desc: '"国际最佳合作奖"',
import searchsf1 from "../components/search_sf/search_sf1"; },
import searchsf2 from "../components/search_sf/search_sf2"; {
import searchsf3 from "../components/search_sf/search_sf3"; img: "prize-2010-1",
//搜尋區塊(輪播淡出)search_sf -End time: "2010",
prize: "国內",
//搜尋區塊(其他)search_el -Start desc: '"国际最佳合作奖"',
import searchel1 from "../components/search_el/search_el1"; },
//搜尋區塊(其他)search_el -End {
img: "prize-2011",
//自訂版型(影片)white_label_video -Start time: "2011",
import videoOne from "../components/label_video/video-one"; prize: "国航",
import videoTwo from "../components/label_video/video-two"; desc: '"最佳开拓奖"',
//自訂版型(影片)white_label_video -End },
{
//自訂版型(圖片)和挑選自有行程(圖片) white_label_picture和b2b -Start img: "prize-2014",
import diyImgOne from "../components/label_picture/diy-img-one"; time: "2014",
import diyImgTwo from "../components/label_picture/diy-img-two"; prize: "港航",
import diyImgThree from "../components/label_picture/diy-img-three"; desc: '"年度杰出销售奖"',
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"; img: "prize-2014-1",
//自訂版型(圖片)和挑選自有行程(圖片) white_label_picture和b2b -End time: "2014",
prize: "全日空",
//自訂版型(QRcode)white_label_qrcode -Start desc: '"成渝地区优秀合作伙伴奖"',
import qrLeft from "../components/label_qrcode/left"; },
import qrRight from "../components/label_qrcode/right"; {
//自訂版型(QRcode)white_label_qrcode -End img: "prize-2015",
time: "2015",
//自訂版型(背景圖)white_label_background_article -Start prize: "成都旅行社协会",
import bgArticleLeft from "../components/label_background_article/left"; desc: '"金牌专线"',
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"; </script>
import paragraph2 from "../components/label_paragraph_title/paragraph2"; \ No newline at end of file
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() {
return {
RB_Group_Id: 0,
AboutData: {},
};
},
created() {
this.getAbout();
},
mounted() {
var jObj = JSON.parse(localStorage.getItem('groupinfo'));
this.RB_Group_Id = jObj.GroupId;
this.getAbout();
},
methods: {
getAbout() {
this.apipost(
"ws_get_GetAboutPage", {
RB_Group_Id: this.RB_Group_Id
},
res => {
if (res.data.resultCode == 1) {
if (res.data.data) {
this.AboutData = res.data.data;
}
}
},
err => {}
);
}
},
};
</script>
...@@ -416,13 +416,22 @@ export default { ...@@ -416,13 +416,22 @@ export default {
// this.getHomeData(); // this.getHomeData();
}, },
mounted() { mounted() {
this.init()
this.timer = setInterval(() => {
this.init()
}, 100)
},
methods: {
init() {
var jObj = JSON.parse(localStorage.getItem("groupinfo")); var jObj = JSON.parse(localStorage.getItem("groupinfo"));
if(jObj) {
this.RB_Group_Id = jObj.GroupId; this.RB_Group_Id = jObj.GroupId;
this.getHomeData(); this.getHomeData();
if(this.timer) {
}, clearInterval(this.timer)
methods: { }
}
},
getHomeData() { getHomeData() {
let locationName = this.GetDomain(); let locationName = this.GetDomain();
var msg = { var msg = {
......
...@@ -791,7 +791,7 @@ ...@@ -791,7 +791,7 @@
</div> </div>
<!-- 手机端 --> <!-- 手机端 -->
<div class="mobileSearch q-mt-md"> <!-- <div class="mobileSearch q-mt-md">
<div class="search-bar-m"> <div class="search-bar-m">
<i class="iconfont iconchazhao"></i> <i class="iconfont iconchazhao"></i>
<input <input
...@@ -815,7 +815,7 @@ ...@@ -815,7 +815,7 @@
/> />
<div class="sortShaixuan" @click="fullHeight = true">更多篩選條件</div> <div class="sortShaixuan" @click="fullHeight = true">更多篩選條件</div>
</div> </div>
</div> </div> -->
<template v-if="ShowType==0"> <template v-if="ShowType==0">
<!--豆腐格--> <!--豆腐格-->
......
...@@ -44,7 +44,7 @@ export default { ...@@ -44,7 +44,7 @@ export default {
}, },
created() { created() {
this.cityInfo = this.city this.cityInfo = this.city
this.cityInfo.Introduction=this.cityInfo.Introduction.replace(/\n/g,"<br>") this.cityInfo.Introduction=this.cityInfo.Introduction?.replace(/\n/g,"<br>")
}, },
} }
</script> </script>
......
<template> <template>
<q-page> <q-page >
<template v-for="(item,index) in CustomerData"> <template v-for="(item,index) in CustomerData">
<div :key="index"> <div :key="index">
<!--自訂版型(影片)--> <!--自訂版型(影片)-->
...@@ -62,6 +62,7 @@ ...@@ -62,6 +62,7 @@
<!--自訂版型(輪播圖)white_label_slider--> <!--自訂版型(輪播圖)white_label_slider-->
<sliderBig v-if="item.Id=='white_label_slider'&&item.plugData.Type==1" :plugData="item.plugData"></sliderBig> <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 v-if="item.Id=='white_label_slider'&&item.plugData.Type==2" :plugData="item.plugData">
</sliderSmall> </sliderSmall>
...@@ -235,6 +236,12 @@ ...@@ -235,6 +236,12 @@
return { return {
Id: 0, Id: 0,
CustomerData: {}, CustomerData: {},
pageTitle:''
};
},
meta() {
return {
title: this.pageTitle
}; };
}, },
created() { created() {
...@@ -255,6 +262,7 @@ ...@@ -255,6 +262,7 @@
res => { res => {
if (res.data.resultCode == 1) { if (res.data.resultCode == 1) {
if (res.data.data) { if (res.data.data) {
this.pageTitle = res.data.data.PageName
this.CustomerData = res.data.data.PageDataList; this.CustomerData = res.data.data.PageDataList;
} }
} }
......
...@@ -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;
...@@ -261,7 +261,8 @@ export default { ...@@ -261,7 +261,8 @@ export default {
created() {}, created() {},
mounted() { mounted() {
console.log("login", this.$route.query); console.log("login", this.$route.query);
const { code, state } = this.$route.query; const { code, state, path } = this.$route.query;
this.path = path
if (code) { if (code) {
this.fetchLoginInfo(code, state); this.fetchLoginInfo(code, state);
this.isLogin = false; this.isLogin = false;
...@@ -519,7 +520,11 @@ export default { ...@@ -519,7 +520,11 @@ export default {
var jsonData = JSON.stringify(res.data.data); var jsonData = JSON.stringify(res.data.data);
window.localStorage.setItem("b2bUser", jsonData); window.localStorage.setItem("b2bUser", jsonData);
console.log("userInfo", jsonData, res.data.data); console.log("userInfo", jsonData, res.data.data);
if(this.path) {
this.CommonJump(this.path, {});
} else {
this.CommonJump("/index", {}); this.CommonJump("/index", {});
}
} else { } else {
this.$q.notify({ this.$q.notify({
type: "negative", type: "negative",
......
<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">
......
...@@ -57,6 +57,19 @@ background: #FAF9F9; ...@@ -57,6 +57,19 @@ background: #FAF9F9;
border-radius: 9px; border-radius: 9px;
margin: 10px 13px 0 13px; margin: 10px 13px 0 13px;
} }
.order-number {
text-align: center;
position: absolute;
right: 10px;
top: 0;
height: 14px;
width: 14px;
font-size: 9px;
line-height: 14px;
border-radius: 50%;
color: #fff;
background-color: $primary;
}
</style> </style>
<template> <template>
<div class="user-nav-box"> <div class="user-nav-box">
...@@ -84,7 +97,7 @@ margin: 10px 13px 0 13px; ...@@ -84,7 +97,7 @@ margin: 10px 13px 0 13px;
</div> </div>
<div class="bg-white card"> <div class="bg-white card">
<div <div
class="order-item cursor-pointer" class="order-item cursor-pointer relative"
@click="navigateTo(item.key)" @click="navigateTo(item.key)"
v-for="item in orderList" v-for="item in orderList"
:key="item.key" :key="item.key"
...@@ -93,15 +106,15 @@ margin: 10px 13px 0 13px; ...@@ -93,15 +106,15 @@ margin: 10px 13px 0 13px;
<div class="column flex-center"> <div class="column flex-center">
<img class="order-img" :src="require(`../../assets/img/userCenter/${item.icon}.png`)" /> <img class="order-img" :src="require(`../../assets/img/userCenter/${item.icon}.png`)" />
<div>{{ item.label }}</div> <div>{{ item.label }}</div>
<div class="absoulte order-number" v-if="item.number">{{item.number}}</div>
</div> </div>
<!-- <span class="text-primary">{{ item.label }}</span> --> <!-- <span class="text-primary">{{ item.label }}</span> -->
</div> </div>
<div class="flex play-box q-mt-md" v-if="useOrder">
<div class="flex play-box q-mt-md"> <img class="go-play q-mr-md" :src="useOrder.GoodsPic" />
<img class="go-play q-mr-md" src="../../assets/img/userCenter/set.png" />
<div class="f12"> <div class="f12">
<div>即將出行</div> <div>即將出行</div>
<div class="text-grey-6">[2023年3月6日]日本富士山尊享一日遊</div> <div class="text-grey-6">[{{useOrder.UseDate}}]{{useOrder.GoodsName}}</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -143,6 +156,7 @@ export default { ...@@ -143,6 +156,7 @@ export default {
return { return {
selectKey: "", selectKey: "",
LoginUser: {}, LoginUser: {},
useOrder: null,
orderList: [ orderList: [
{ {
icon: "order-pay", icon: "order-pay",
...@@ -221,6 +235,7 @@ export default { ...@@ -221,6 +235,7 @@ export default {
this.selectKey = this.$route.path; this.selectKey = this.$route.path;
if (localStorage.b2bUser) { if (localStorage.b2bUser) {
this.LoginUser = JSON.parse(window.localStorage.getItem("b2bUser")); this.LoginUser = JSON.parse(window.localStorage.getItem("b2bUser"));
this.getUserOrderInfo()
} }
}, },
methods: { methods: {
...@@ -228,6 +243,34 @@ export default { ...@@ -228,6 +243,34 @@ export default {
this.selectKey = route; this.selectKey = route;
this.CommonJump(route, {}); this.CommonJump(route, {});
}, },
getUserOrderInfo() {
this.apipost(
"GetMyOrderNum_post",
{},
(res) => {
if (res.data.resultCode == 1) {
const { NoPayCount, PayCount, RetultList } = res.data.data;
this.useOrder = RetultList[0] ? RetultList[0] : null
this.orderList.forEach(item => {
if(item.label === '待付款') {
item.number = NoPayCount
} else if(item.label === '待出行') {
item.number = PayCount
}
})
} else {
// // this.$notify(res.data.message);
// this.$q.notify({
// type: "negative",
// message: res.data.message,
// position: "top",
// timeout: 2000, // 以毫秒为单位; 0意味着没有超时
// });
}
},
null
);
},
}, },
}; };
</script> </script>
\ No newline at end of file
...@@ -32,9 +32,12 @@ export default function (/* { store, ssrContext } */) { ...@@ -32,9 +32,12 @@ export default function (/* { store, ssrContext } */) {
Router.beforeEach((to, from, next) => { Router.beforeEach((to, from, next) => {
let user = undefined let user = undefined
if(typeof window === 'object') { if(typeof window === 'object') {
if(to.meta.title) {
document.title = to.meta.title
}
user = JSON.parse(window.localStorage.getItem('b2bUser')) user = JSON.parse(window.localStorage.getItem('b2bUser'))
if(to.meta.needLogin && !user) { if(to.meta.needLogin && !user) {
next({path: '/login'}) next({path: '/login?path=' + encodeURIComponent(to.fullPath)})
} else { } else {
next() next()
} }
......
...@@ -4,48 +4,59 @@ const routes = [{ ...@@ -4,48 +4,59 @@ const routes = [{
import ('layouts/HomeLayout.vue'), import ('layouts/HomeLayout.vue'),
children: [{ children: [{
path: '', path: '',
meta: { title: '首页' },
component: () => component: () =>
import ('pages/index.vue') import ('pages/index.vue')
}, },
{ {
path: '/index', path: '/index',
meta: { title: '首页' },
component: () => component: () =>
import ('pages/index.vue') import ('pages/index.vue')
}, },
{ {
path: '/about', //关于我们 path: '/about', //关于我们
meta: { title: '关于我们' },
component: () => component: () =>
import ('pages/about.vue') import ('pages/about.vue')
}, { }, {
path: '/contract', //契约管理 path: '/contract', //契约管理
meta: { title: '契约管理' },
component: () => component: () =>
import ('pages/contract.vue') import ('pages/contract.vue')
}, { }, {
path: '/tour_visa', //签证护照管理 path: '/tour_visa', //签证护照管理
meta: { title: '签证护照管理' },
component: () => component: () =>
import ('pages/tour_visa.vue') import ('pages/tour_visa.vue')
}, { //行程 }, { //行程
path: '/details/:id/:tcid', path: '/details/:id/:tcid',
meta: { title: '行程' },
component: () => component: () =>
import ('pages/details.vue') import ('pages/details.vue')
}, { // 包车,接机 }, { // 包车,接机
meta: { title: '包车,接机' },
path: '/detailCar/:id', path: '/detailCar/:id',
component: () => component: () =>
import ('pages/detailsCar.vue') import ('pages/detailsCar.vue')
}, { // 包车,接机下单 }, { // 包车,接机下单
path: '/PickuporderForm/:id', path: '/PickuporderForm/:id',
meta: { title: '包车,接机下单' },
component: () => component: () =>
import ('pages/Pickuporder/orderForm.vue') import ('pages/Pickuporder/orderForm.vue')
}, { // 景区门票详情 }, { // 景区门票详情
path: '/detailsScenicSpotTicket/:id', path: '/detailsScenicSpotTicket/:id',
meta: { title: '景区门票详情' },
component: () => component: () =>
import ('pages/ScenicSpotTicket/details.vue') import ('pages/ScenicSpotTicket/details.vue')
}, { // 景区门票下单 }, { // 景区门票下单
path: '/ScenicSpotTicketOrderForm/:id', path: '/ScenicSpotTicketOrderForm/:id',
meta: { title: '景区门票下单' },
component: () => component: () =>
import ('pages/ScenicSpotTicket/orderForm.vue') import ('pages/ScenicSpotTicket/orderForm.vue')
}, { // 酒店 }, { // 酒店
path: '/detailHotal/:id/:b2CPrice', path: '/detailHotal/:id/:b2CPrice',
meta: { title: '酒店' },
component: () => component: () =>
import ('pages/detailsHotal.vue') import ('pages/detailsHotal.vue')
}, { // 酒店下单 }, { // 酒店下单
...@@ -54,125 +65,132 @@ const routes = [{ ...@@ -54,125 +65,132 @@ const routes = [{
import ('pages/hotel/orderForm.vue') import ('pages/hotel/orderForm.vue')
}, { // 旅程 }, { // 旅程
path: '/detail/:id/:tcid/:newConfigId', path: '/detail/:id/:tcid/:newConfigId',
meta: { title: '旅程' },
component: () => component: () =>
import ('pages/detailsNew.vue') import ('pages/detailsNew.vue')
}, { }, {
path: '/search', //签证护照管理 path: '/search', //出行检索
meta: { title: '出行检索' },
component: () => component: () =>
import ('pages/Search.vue') import ('pages/Search.vue')
}, },
{ {
path: '/account', //用户信息 path: '/account', //用户信息
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '用户信息' },
component: () => component: () =>
import ('pages/usercenter/account.vue') import ('pages/usercenter/account.vue')
}, },
{ {
path: '/demandlist', //需求单列表 path: '/demandlist', //需求单列表
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '需求单列表' },
component: () => component: () =>
import ('pages/usercenter/demandlist.vue') import ('pages/usercenter/demandlist.vue')
}, },
{ {
path: '/demandinfo/:id', //需求单详情 path: '/demandinfo/:id', //需求单详情
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '需求单详情' },
component: () => component: () =>
import ('pages/usercenter/demandinfo.vue') import ('pages/usercenter/demandinfo.vue')
}, },
{ {
path: '/orderlist', //订单列表 path: '/orderlist', //订单列表
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '订单列表' },
component: () => component: () =>
import ('pages/usercenter/orderlist.vue') import ('pages/usercenter/orderlist.vue')
}, },
{ {
path: '/orderinfo/:id', //订单详情 path: '/orderinfo/:id', //订单详情
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '订单详情' },
component: () => component: () =>
import ('pages/usercenter/orderinfo.vue') import ('pages/usercenter/orderinfo.vue')
}, },
{ {
path: '/passengerList/:id', //旅客名单 path: '/passengerList/:id', //旅客名单
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '旅客名单' },
component: () => component: () =>
import ('pages/usercenter/passengerList.vue') import ('pages/usercenter/passengerList.vue')
}, },
{ {
path: '/register', //用户注册 path: '/register', //用户注册
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '用户注册' },
component: () => component: () =>
import ('pages/usercenter/register.vue') import ('pages/usercenter/register.vue')
}, },
{ {
path: '/loginInfo', //账户设置 path: '/loginInfo', //账户设置
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '账户设置' },
component: () => component: () =>
import ('pages/usercenter/loginInfo.vue') import ('pages/usercenter/loginInfo.vue')
}, },
{ {
path: '/setAddress', //地址管理 path: '/setAddress', //地址管理
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '地址管理' },
component: () => component: () =>
import ('pages/usercenter/setAddress.vue') import ('pages/usercenter/setAddress.vue')
}, },
{ {
path: '/setInfo', //账户设置 path: '/setInfo', //账户设置
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '账户设置' },
component: () => component: () =>
import ('pages/usercenter/setInfo.vue') import ('pages/usercenter/setInfo.vue')
}, },
{ {
path: '/setUserInfo', //用户信息 path: '/setUserInfo', //用户信息
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '用户信息' },
component: () => component: () =>
import ('pages/usercenter/setUserInfo.vue') import ('pages/usercenter/setUserInfo.vue')
}, },
{ {
path: '/coupon', //优惠券 path: '/coupon', //优惠券
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '优惠券' },
component: () => component: () =>
import ('pages/usercenter/coupon.vue') import ('pages/usercenter/coupon.vue')
}, },
{ {
path: '/order', //用户订单 path: '/order', //用户订单
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '用户订单' },
component: () => component: () =>
import ('pages/usercenter/order.vue') import ('pages/usercenter/order.vue')
}, },
{ {
path: '/setUsersList', //用户订单 path: '/setUsersList', //出行人管理
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '出行人管理' },
component: () => component: () =>
import ('pages/usercenter/setUsersList.vue') import ('pages/usercenter/setUsersList.vue')
}, },
{ {
path: '/payInfo', //支付管理 path: '/payInfo', //支付管理
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true, title: '支付管理' },
component: () => component: () =>
import ('pages/usercenter/payInfo.vue') import ('pages/usercenter/payInfo.vue')
}, },
{ {
path: '/customer/:id', //自定义页面 path: '/customer/:id', //顾客管理
meta: { title: '顾客管理' },
component: () => component: () =>
import ('pages/customer.vue') import ('pages/customer.vue')
}, },
{ {
path: '/city/:id', //自定义页面 path: '/city/:id', //城市详情
meta: { title: '城市详情' },
component: () => component: () =>
import ('pages/city/cityDetail.vue') import ('pages/city/cityDetail.vue')
}, },
{ {
path: '/lineOrderPriview/:id?', //自定义页面 path: '/lineOrderPriview/:id?', //订单确认
meta: { title: '订单确认' },
component: () => component: () =>
import ('pages/line/orderPreview.vue') import ('pages/line/orderPreview.vue')
}, },
{ {
path: '/pay/:id?', //自定义页面 path: '/pay/:id?', //自定义页面
meta: { title: '订单支付' },
component: () => component: () =>
import ('pages/pay/pay.vue') import ('pages/pay/pay.vue')
}, },
{ {
path: '/paysuccess/:id?', //自定义页面 path: '/paysuccess/:id?', //支付结果
meta: { title: '支付结果' },
component: () => component: () =>
import ('pages/pay/paysuccess.vue') import ('pages/pay/paysuccess.vue')
}, },
...@@ -181,37 +199,43 @@ const routes = [{ ...@@ -181,37 +199,43 @@ const routes = [{
}, },
{ {
path: '/userCenter', //移动端个人中心 path: '/userCenter', //移动端个人中心
meta: { isUserCenter: true, needLogin: true }, meta: { isUserCenter: true, needLogin: true,title: '个人中心' },
component: () => component: () =>
import ('pages/usercenter/mobileUserCenter.vue') import ('pages/usercenter/mobileUserCenter.vue')
}, },
{ {
path: '/login', path: '/login',
meta: { title: '登录' },
component: () => component: () =>
import ('pages/login.vue'), import ('pages/login.vue'),
children: [{ children: [{
path: '/login', path: '/login',
meta: { title: '登录' },
component: () => component: () =>
import ('pages/login.vue') import ('pages/login.vue')
}] }]
}, },
{ {
path: '/resetPassword', path: '/resetPassword',
meta: { title: '重置密码' },
component: () => component: () =>
import ('pages/resetPassword.vue'), import ('pages/resetPassword.vue'),
children: [{ children: [{
path: '/resetPassword', path: '/resetPassword',
meta: { title: '重置密码' },
component: () => component: () =>
import ('pages/resetPassword.vue') import ('pages/resetPassword.vue')
}] }]
}, },
{ {
path: '/newTrip', path: '/newTrip',
meta: { title: '旅程' },
component: () => component: () =>
import ('pages/newTrip.vue') import ('pages/newTrip.vue')
}, },
{ {
path: '/tripMobile', path: '/tripMobile',
meta: { title: '旅程' },
component: () => component: () =>
import ('pages/tripMobile.vue') import ('pages/tripMobile.vue')
} }
......
...@@ -5915,6 +5915,11 @@ locate-path@^5.0.0: ...@@ -5915,6 +5915,11 @@ locate-path@^5.0.0:
dependencies: dependencies:
p-locate "^4.1.0" p-locate "^4.1.0"
lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
lodash._reinterpolate@^3.0.0: lodash._reinterpolate@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.npmmirror.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz" resolved "https://registry.npmmirror.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz"
......
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