Commit a1ce33ca authored by youjie's avatar youjie

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

parents 6e99980d 985bbd80
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
"lodash-es": "^4.17.21", "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",
"swiper": "3.0.4", "swiper": "3.0.4",
"v-viewer": "^1.6.4", "v-viewer": "^1.6.4",
"vue-awesome-swiper": "^3.0.4", "vue-awesome-swiper": "^3.0.4",
......
...@@ -25,8 +25,8 @@ Vue.prototype.domainManager = function() { ...@@ -25,8 +25,8 @@ Vue.prototype.domainManager = function() {
if (domainNameUrl.indexOf('testerp.oytour') !== -1) { if (domainNameUrl.indexOf('testerp.oytour') !== -1) {
domainUrl = "http://testapi.oytour.com"; domainUrl = "http://testapi.oytour.com";
} else if (domainNameUrl.indexOf('oytour') !== -1) { } else if (domainNameUrl.indexOf('oytour') !== -1) {
// domainUrl = "http://reborn.oytour.com"; domainUrl = "http://reborn.oytour.com";
domainUrl = 'http://192.168.10.206:8015' //'http://192.168.10.206:8015' ''http://192.168.10.11:8083' ' // domainUrl = 'http://192.168.10.206:8015' //'http://192.168.10.206:8015' ''http://192.168.10.11:8083' '
} }
var obj = { var obj = {
//主地址 //主地址
...@@ -41,7 +41,7 @@ Vue.prototype.domainManager = function() { ...@@ -41,7 +41,7 @@ Vue.prototype.domainManager = function() {
//获取当前域名 //获取当前域名
Vue.prototype.GetDomain = function() { Vue.prototype.GetDomain = function() {
var domainNameUrl = window.location.hostname; var domainNameUrl = window.location.hostname;
domainNameUrl = "t.oytour.com"; domainNameUrl = "www.oytour.com";
return domainNameUrl; return domainNameUrl;
} }
Vue.prototype.groupBy = function(array, f) { Vue.prototype.groupBy = function(array, f) {
......
<<<<<<< HEAD <<<<<<< HEAD
<style>
</style>
======= =======
>>>>>>> f1c336638dd7e228f10cc6497760343026d24a12
>>>>>>> c020ad40be0c4ddc009c7e515bf5c6c1ac25638c
<style scoped> <style scoped>
.header-box { .header-box {
max-width: 1200px; max-width: 1200px;
......
...@@ -594,9 +594,10 @@ export default { ...@@ -594,9 +594,10 @@ export default {
console.log(val) console.log(val)
if(val!='' && typeof val == 'string'){ if(val!='' && typeof val == 'string'){
this.searchKey=val this.searchKey=val
this.historys=Array.from(new Set([this.searchKey].concat(this.historys)))
localStorage['recent_search'] = JSON.stringify(this.historys)
} }
this.historys=Array.from(new Set([this.searchKey].concat(this.historys)))
localStorage['recent_search'] = JSON.stringify(this.historys)
this.CommonJump("/search", { this.CommonJump("/search", {
qsearchKey: this.searchKey, qsearchKey: this.searchKey,
qsearchDate: this.searchDate, qsearchDate: this.searchDate,
......
<template> <template>
<div class="items-start q-mt-lg" :class="$q.platform.is.desktop ? 'row' : 'colmuns'"> <div class="items-start q-mt-lg travel-list" :class="$q.platform.is.desktop ? 'row' : 'colmuns'">
<div class="col-3" :class="$q.platform.is.desktop ? 'q-mr-lg' : 'q-ma-md'"> <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>
...@@ -21,6 +21,8 @@ ...@@ -21,6 +21,8 @@
@update:ticked="handleAreaTicked" @update:ticked="handleAreaTicked"
:ticked="areaTicked" :ticked="areaTicked"
text-color="#666" text-color="#666"
no-nodes-label=" "
no-results-label=" "
/> />
</q-card> </q-card>
<q-card flat class="rounded-borders q-py-md q-mt-lg"> <q-card flat class="rounded-borders q-py-md q-mt-lg">
...@@ -744,6 +746,7 @@ this.dayArray = this.dayArray.filter(item => arr.includes(item.id)) ...@@ -744,6 +746,7 @@ this.dayArray = this.dayArray.filter(item => arr.includes(item.id))
.addr-list:hover { .addr-list:hover {
background: #f1416c1a; background: #f1416c1a;
} }
</style> </style>
<style scoped> <style scoped>
.price-stuff { .price-stuff {
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
class="rounded-borders text-center text-weight-bold" class="rounded-borders text-center text-weight-bold"
:class="{ :class="{
'cursor-pointer hover-date': x.value != '' && x.price, 'cursor-pointer hover-date': x.value != '' && x.price,
'cursor-not-allowed': !x.price && x.value != '', 'cursor-not-allowed': (!x.price || x.price.remainNum==0) && x.value != '',
'bg-primary': x.value != '' && x.value == currentDate, 'bg-primary': x.value != '' && x.value == currentDate,
}" }"
style="padding: 8px 4px; width: 14.285%" style="padding: 8px 4px; width: 14.285%"
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
}" }"
> >
{{ {{
x.price ? moneyFormat(x.price.originalB2CPrice, 0) : "&nbsp;" x.price && x.price.remainNum>0 ? moneyFormat(x.price.originalB2CPrice, 0) :(x.price && x.price.remainNum==0?'售罄':'&nbsp;')
}} }}
</div> </div>
</div> </div>
...@@ -164,7 +164,7 @@ export default { ...@@ -164,7 +164,7 @@ export default {
} }
while (newBeginDate <= newEndDate) { while (newBeginDate <= newEndDate) {
let value = date.formatDate(newBeginDate, "YYYY-MM-DD"); let value = date.formatDate(newBeginDate, "YYYY-MM-DD");
let price = this.prices.find((x) => x.startDate == value && x.remainNum>0); let price = this.prices.find((x) => x.startDate == value);
this.col.push({ this.col.push({
value, value,
display: date.formatDate(newBeginDate, "DD"), display: date.formatDate(newBeginDate, "DD"),
...@@ -180,7 +180,7 @@ export default { ...@@ -180,7 +180,7 @@ export default {
} }
}, },
chosenDateHandler(item) { chosenDateHandler(item) {
if (item.price) { if (item.price && item.price.remainNum>0) {
this.currentDate = item.value; this.currentDate = item.value;
this.$emit("change", item); this.$emit("change", item);
} }
......
...@@ -42,11 +42,11 @@ ...@@ -42,11 +42,11 @@
<div class="q-mr-md col-3">餐食:</div> <div class="q-mr-md col-3">餐食:</div>
<div class="col text-grey-6">{{ dinner }}</div> <div class="col text-grey-6">{{ dinner }}</div>
</div> </div>
<div class="row items-center q-pt-mb" <!-- <div class="row items-center q-pt-mb"
:class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" > :class="{'col-6':$q.platform.is.desktop,'col-12':$q.platform.is.mobile}" >
<div class="q-mr-md col-3">服務用語</div> <div class="q-mr-md col-3">服務用語</div>
<div class="col text-grey-6">普通話/日本語</div> <div class="col text-grey-6">普通話/日本語</div>
</div> </div> -->
</div> </div>
</div> </div>
</template> </template>
......
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
} }
@keyframes icon-bounce { @keyframes icon-bounce {
0% { 0% {
transform: translateY(0) scale(1.15,.5); transform: translateY(0) scale(1.15, 0.5);
} }
20% { 20% {
transform: translateY(-20px) scaleY(1.1); transform: translateY(-20px) scaleY(1.1);
...@@ -94,11 +94,11 @@ ...@@ -94,11 +94,11 @@
transform: translateY(-10px) scale(1); transform: translateY(-10px) scale(1);
} }
100% { 100% {
transform: translateY(0) scale(1.15,.8); transform: translateY(0) scale(1.15, 0.8);
} }
} }
.desktop-navs{ .desktop-navs {
width:100px; width: 100px;
} }
.desktop-navs:hover img { .desktop-navs:hover img {
animation-name: icon-bounce; animation-name: icon-bounce;
...@@ -108,13 +108,10 @@ ...@@ -108,13 +108,10 @@
} }
</style> </style>
<template> <template>
<div class="content-page" > <div class="content-page" style="min-height: 80vh">
<div v-if="detail" :class="{'q-mx-md':$q.platform.is.mobile}"> <div v-if="detail" :class="{ 'q-mx-md': $q.platform.is.mobile }">
<div class="row items-center q-pt-md q-mb-lg"> <div class="row items-center q-pt-md q-mb-lg">
<q-breadcrumbs <q-breadcrumbs class="col f12 no-wrap q-mr-md" style="font-size: 13px">
class="col f12 no-wrap q-mr-md"
style="font-size: 13px"
>
<q-breadcrumbs-el <q-breadcrumbs-el
icon="home" icon="home"
label="首頁" label="首頁"
...@@ -126,15 +123,37 @@ ...@@ -126,15 +123,37 @@
<!-- <div class="text-grey-6 f12">Product No. # {{ dataList.id }}</div> --> <!-- <div class="text-grey-6 f12">Product No. # {{ dataList.id }}</div> -->
</div> </div>
<div class="relative row" :style="{'height':$q.platform.is.mobile?'200px':'370px'}"> <div
<div class="absolute name" style="z-index: 1;">{{detail.AreaName}}</div> class="relative row"
<q-img :src="detail.ImageList[0]" spinner-color="dark" class="col rounded-borders full-height" /> :style="{ height: $q.platform.is.mobile ? '200px' : '370px' }"
<q-img :src="detail.ImageList[1]" v-if="detail.ImageList.length>1" spinner-color="dark" style="width:260px" class="full-height desktop-only rounded-borders q-ml-md" /> >
<div class="absolute q-py-sm q-px-md row items-center bg-dark text-white rounded-borders cursor-pointer" style="bottom:20px;left: 20px;"> <div class="absolute name" style="z-index: 1">
{{ detail.AreaName }}
</div>
<q-img
:src="detail.ImageList[0]"
spinner-color="dark"
class="col rounded-borders full-height"
/>
<q-img
:src="detail.ImageList[1]"
v-if="detail.ImageList.length > 1"
spinner-color="dark"
style="width: 260px"
class="full-height desktop-only rounded-borders q-ml-md"
/>
<div
class="absolute q-py-sm q-px-md row items-center bg-dark text-white rounded-borders cursor-pointer"
style="bottom: 20px; left: 20px"
>
<q-icon name="iconfont iconzhinanzhen" size="16px"></q-icon> <q-icon name="iconfont iconzhinanzhen" size="16px"></q-icon>
<span class="q-ml-sm">訪前須知</span> <span class="q-ml-sm">訪前須知</span>
</div> </div>
<div class="absolute q-py-sm q-px-md row items-center bg-dark text-white rounded-borders cursor-pointer" style="bottom:20px;right: 20px;" @click="showPreview(detail.ImageList,0)"> <div
class="absolute q-py-sm q-px-md row items-center bg-dark text-white rounded-borders cursor-pointer"
style="bottom: 20px; right: 20px"
@click="showPreview(detail.ImageList, 0)"
>
<q-icon name="iconfont iconimage" size="16px"></q-icon> <q-icon name="iconfont iconimage" size="16px"></q-icon>
<span class="q-ml-sm">查看照片</span> <span class="q-ml-sm">查看照片</span>
</div> </div>
...@@ -148,10 +167,38 @@ ...@@ -148,10 +167,38 @@
</div> </div>
<div class="q-mt-md row justify-center"> <div class="q-mt-md row justify-center">
<div class="bg-white row rounded-borders light-shadow" :class="{'q-pa-lg':$q.platform.is.desktop,'col-12 q-px-md q-pa-md':$q.platform.is.mobile}" style="max-width:100%"> <div
<div class="text-center cursor-pointer" :class="{'desktop-navs ':$q.platform.is.desktop,'col-3 q-mb-md':$q.platform.is.mobile}" v-for="item in navList" :key="item.img" @click="navClick(item)"> class="bg-white row rounded-borders light-shadow"
<img width="30" height="30" :src="require(`../../assets/img/${item.img}.png`)" /> :class="{
<div class="f12" :class="{'q-mt-md ':$q.platform.is.desktop,'q-mt-sm':$q.platform.is.mobile}">{{ item.title }}</div> 'q-pa-lg': $q.platform.is.desktop,
'col-12 q-px-md q-pa-md': $q.platform.is.mobile,
}"
style="max-width: 100%"
>
<div
class="text-center cursor-pointer"
:class="{
'desktop-navs ': $q.platform.is.desktop,
'col-3 q-mb-md': $q.platform.is.mobile,
}"
v-for="item in navList"
:key="item.img"
@click="navClick(item)"
>
<img
width="30"
height="30"
:src="require(`../../assets/img/${item.img}.png`)"
/>
<div
class="f12"
:class="{
'q-mt-md ': $q.platform.is.desktop,
'q-mt-sm': $q.platform.is.mobile,
}"
>
{{ item.title }}
</div>
</div> </div>
</div> </div>
<!-- <div v-for="item in navList" :key="item.img" class="nav-item" @click="navClick(item)"> <!-- <div v-for="item in navList" :key="item.img" class="nav-item" @click="navClick(item)">
...@@ -163,10 +210,10 @@ ...@@ -163,10 +210,10 @@
<div class="f16 bold text-center">{{ item.title }}</div> <div class="f16 bold text-center">{{ item.title }}</div>
</div> --> </div> -->
</div> </div>
<div v-if="detail.TopList.length>0"> <div v-if="detail.TopList.length > 0">
<div class="top-title">TOP榜单</div> <div class="top-title">TOP榜单</div>
<div>本地销量最好的商品</div> <div>本地销量最好的商品</div>
<q-carousel <q-carousel
v-model="hotSilder" v-model="hotSilder"
transition-prev="slide-right" transition-prev="slide-right"
...@@ -180,22 +227,37 @@ ...@@ -180,22 +227,37 @@
height="300px" height="300px"
flat flat
class="bg-transparent rounded-borders q-mt-md" class="bg-transparent rounded-borders q-mt-md"
> >
<q-carousel-slide :name="index" v-for="(item, index) in Math.ceil(detail.TopList.length/topPageCount)" :key="index" class="column no-wrap"> <q-carousel-slide
<div class="row fit justify-start items-center q-gutter-md q-col-gutter no-wrap"> :name="index"
<template v-for="(x,i) in topPageCount"> v-for="(item, index) in Math.ceil(
<goods-style1 v-if="(i+(index*topPageCount))<detail.TopList.length" :product="detail.TopList[i+(index*topPageCount)]" :key="detail.TopList[i+(index*topPageCount)].ConfigId" :class="{'col-3':topPageCount==4,'col-12':topPageCount==1}" ></goods-style1> detail.TopList.length / topPageCount
</template> )"
</div> :key="index"
</q-carousel-slide> 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">
<goods-style1
v-if="i + index * topPageCount < detail.TopList.length"
:product="detail.TopList[i + index * topPageCount]"
:key="detail.TopList[i + index * topPageCount].ConfigId"
:class="{
'col-3': topPageCount == 4,
'col-12': topPageCount == 1,
}"
></goods-style1>
</template>
</div>
</q-carousel-slide>
</q-carousel> </q-carousel>
</div> </div>
<div class="top-title">最新推荐</div> <div v-if="detail.NewList && detail.NewList.length>0">
<div>已售出商品的最新榜單</div> <div class="top-title">最新推荐</div>
<!-- <div class="flex justify-between flex-wrap mt"> <div>已售出商品的最新榜單</div>
<likeCard @click.native="navToDetail(item)" v-for="item in detail.NewList" :data="item" :key="item.ID" /> <q-carousel
</div> -->
<q-carousel
v-model="newSilder" v-model="newSilder"
transition-prev="slide-right" transition-prev="slide-right"
transition-next="slide-left" transition-next="slide-left"
...@@ -208,17 +270,33 @@ ...@@ -208,17 +270,33 @@
height="400px" height="400px"
flat flat
class="bg-transparent rounded-borders q-mt-md desktop-only" class="bg-transparent rounded-borders q-mt-md desktop-only"
> >
<q-carousel-slide :name="index" v-for="(item, index) in Math.ceil(detail.NewList.length/4)" :key="index" class="column no-wrap"> <q-carousel-slide
<div class="row"> :name="index"
<template v-for="(x,i) in 4"> v-for="(item, index) in Math.ceil(detail.NewList.length / 4)"
<goods-style2 v-if="(i+(index*4))<detail.NewList.length" :product="detail.NewList[i+(index*4)]" :key="detail.NewList[i+(index*4)].ConfigId" class="q-pr-md col-6 q-mb-md"></goods-style2> :key="index"
</template> class="column no-wrap"
</div> >
</q-carousel-slide> <div class="row">
<template v-for="(x, i) in 4">
<goods-style2
v-if="i + index * 4 < detail.NewList.length"
:product="detail.NewList[i + index * 4]"
:key="detail.NewList[i + index * 4].ConfigId"
class="q-pr-md col-6 q-mb-md"
></goods-style2>
</template>
</div>
</q-carousel-slide>
</q-carousel> </q-carousel>
<div class="mobile-only q-mt-md"> <div class="mobile-only q-mt-md">
<goods-style2 :product="x" :key="i" class="q-pr-md col-6 q-mb-md" v-for="(x,i) in detail.NewList"></goods-style2> <goods-style2
:product="x"
:key="i"
class="q-pr-md col-6 q-mb-md"
v-for="(x, i) in detail.NewList"
></goods-style2>
</div>
</div> </div>
<city-info :city="detail"></city-info> <city-info :city="detail"></city-info>
<!-- <div class="top-title">關於{{detail.AreaName}}</div> <!-- <div class="top-title">關於{{detail.AreaName}}</div>
...@@ -274,9 +352,9 @@ ...@@ -274,9 +352,9 @@
</div> </div>
</div> --> </div> -->
<nearCity :name="detail.AreaName" :cityList="detail.AdjacentCityList" /> <nearCity :name="detail.AreaName" :cityList="detail.AdjacentCityList" />
<q-dialog v-model="show"> <q-dialog v-model="show">
<div style="width: 900px;"> <div style="width: 900px">
<div id="dialog-map"></div> <div id="dialog-map"></div>
</div> </div>
</q-dialog> </q-dialog>
</div> </div>
...@@ -286,19 +364,26 @@ ...@@ -286,19 +364,26 @@
import topCard from "./components/top-card.vue"; import topCard from "./components/top-card.vue";
import likeCard from "./components/like-card.vue"; import likeCard from "./components/like-card.vue";
import nearCity from "./components/near-city.vue"; import nearCity from "./components/near-city.vue";
import goodsStyle1 from '../../components/goods/style1.vue'; import goodsStyle1 from "../../components/goods/style1.vue";
import goodsStyle2 from '../../components/goods/style2.vue'; import goodsStyle2 from "../../components/goods/style2.vue";
import cityInfo from "./components/city-info.vue"; import cityInfo from "./components/city-info.vue";
export default { export default {
components: { topCard, likeCard, nearCity,goodsStyle1,goodsStyle2,cityInfo }, components: {
topCard,
likeCard,
nearCity,
goodsStyle1,
goodsStyle2,
cityInfo,
},
data() { data() {
return { return {
show: false, show: false,
detail: null, detail: null,
hotSilder:0, hotSilder: 0,
newSilder:0, newSilder: 0,
topPageCount:4, topPageCount: 4,
newPageCount:2, newPageCount: 2,
navList: [ navList: [
{ {
title: "观光行程", title: "观光行程",
...@@ -320,9 +405,9 @@ export default { ...@@ -320,9 +405,9 @@ export default {
}; };
}, },
mounted() { mounted() {
if(this.$q.platform.is.mobile){ if (this.$q.platform.is.mobile) {
this.topPageCount=1 this.topPageCount = 1;
this.newPageCount=2 this.newPageCount = 2;
} }
this.getData(); this.getData();
var newStartDate = new Date(); var newStartDate = new Date();
...@@ -342,17 +427,15 @@ export default { ...@@ -342,17 +427,15 @@ export default {
}, },
methods: { methods: {
navClick(item) { navClick(item) {
this.CommonJump( this.CommonJump("/search", {
"/search",
{
areaId: this.detail.Id, areaId: this.detail.Id,
qsearchDate: this.searchDate, qsearchDate: this.searchDate,
qsearchEndDate: this.searchEndDate, qsearchEndDate: this.searchEndDate,
CategoryName: item.title} CategoryName: item.title,
); });
}, },
navToDetail(item) { navToDetail(item) {
console.log('navToDetail', item) console.log("navToDetail", item);
}, },
getData() { getData() {
this.$q.loading.show(); this.$q.loading.show();
...@@ -360,12 +443,12 @@ export default { ...@@ -360,12 +443,12 @@ export default {
"b2c_get_GetB2CIndexCityList", "b2c_get_GetB2CIndexCityList",
{ AreaId: decodeURIComponent(this.$route.params.id) }, { AreaId: decodeURIComponent(this.$route.params.id) },
(r) => { (r) => {
this.detail = r.data.data this.detail = r.data.data;
this.$q.loading.hide(); this.$q.loading.hide();
this.$nextTick(() => { this.$nextTick(() => {
this.createMap(); this.createMap();
this.createTopMap() this.createTopMap();
}) });
}, },
null null
); );
...@@ -405,16 +488,16 @@ export default { ...@@ -405,16 +488,16 @@ export default {
offset: new BMapGL.Size(10, -80), // 设置标注的偏移量 offset: new BMapGL.Size(10, -80), // 设置标注的偏移量
}); });
this.map.addOverlay(label); // 将标注添加到地图中 this.map.addOverlay(label); // 将标注添加到地图中
const that = this const that = this;
label.addEventListener("click", function () { label.addEventListener("click", function () {
that.openDialog() that.openDialog();
}); });
label.setStyle({ label.setStyle({
// 设置label的样式 // 设置label的样式
color: "#000", color: "#000",
backgrond: "#fff", backgrond: "#fff",
padding: '4px', padding: "4px",
border: 'none' border: "none",
}); });
}, },
createTopMap() { createTopMap() {
...@@ -452,27 +535,27 @@ export default { ...@@ -452,27 +535,27 @@ export default {
offset: new BMapGL.Size(10, -80), // 设置标注的偏移量 offset: new BMapGL.Size(10, -80), // 设置标注的偏移量
}); });
this.topMap.addOverlay(label); // 将标注添加到地图中 this.topMap.addOverlay(label); // 将标注添加到地图中
const that = this const that = this;
label.addEventListener("click", function () { label.addEventListener("click", function () {
that.openDialog() that.openDialog();
}); });
label.setStyle({ label.setStyle({
// 设置label的样式 // 设置label的样式
color: "#000", color: "#000",
backgrond: "#fff", backgrond: "#fff",
padding: '4px', padding: "4px",
border: 'none' border: "none",
}); });
}, },
openDialog() { openDialog() {
this.show = true this.show = true;
this.$nextTick(() => { this.$nextTick(() => {
let map = new BMapGL.Map("dialog-map"); // 创建地图实例 let map = new BMapGL.Map("dialog-map"); // 创建地图实例
this.map = map; this.map = map;
let pointA = new BMapGL.Point(this.detail.Lng, this.detail.Lat); // 创建点坐标 let pointA = new BMapGL.Point(this.detail.Lng, this.detail.Lat); // 创建点坐标
map.centerAndZoom(pointA, 11); // 初始化地图,设置中心点坐标和地图级别 map.centerAndZoom(pointA, 11); // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom() map.enableScrollWheelZoom();
}) });
}, },
showPreview(images, index = 0) { showPreview(images, index = 0) {
this.$viewerApi({ this.$viewerApi({
...@@ -484,4 +567,4 @@ export default { ...@@ -484,4 +567,4 @@ export default {
}, },
}, },
}; };
</script> </script>
\ No newline at end of file
...@@ -579,7 +579,7 @@ ...@@ -579,7 +579,7 @@
size="sm" size="sm"
text-color="grey-2" text-color="grey-2"
class="text-light" class="text-light"
label="15天前可免費取消" label="取消需二次確認"
/> --> /> -->
</div> </div>
<!-- <div class="text-grey f12"> <!-- <div class="text-grey f12">
......
...@@ -60,13 +60,13 @@ ...@@ -60,13 +60,13 @@
class="cursor-pointer" class="cursor-pointer"
@click="CommonJump('/index', {})" @click="CommonJump('/index', {})"
/> />
<q-breadcrumbs-el label="日本" class="cursor-pointer" /> <q-breadcrumbs-el :label="dataList.aimPlaceName" class="cursor-pointer" />
<q-breadcrumbs-el> <!-- <q-breadcrumbs-el>
<span v-for="(x, i) in citys" :key="i"> <span v-for="(x, i) in citys" :key="i">
<span class="cursor-pointer">{{ x }} </span> <span class="cursor-pointer">{{ x }} </span>
<span v-if="i + 1 != citys.length" class="q-mr-sm"></span> <span v-if="i + 1 != citys.length" class="q-mr-sm"></span>
</span> </span>
</q-breadcrumbs-el> </q-breadcrumbs-el> -->
<q-breadcrumbs-el <q-breadcrumbs-el
v-if="$q.platform.is.desktop" v-if="$q.platform.is.desktop"
:label="dataList.title" :label="dataList.title"
...@@ -133,7 +133,9 @@ ...@@ -133,7 +133,9 @@
class="q-mr-sm" class="q-mr-sm"
/> />
<span <span
>日本 - >{{ dataList.aimPlaceName }}
<span class="q-mx-sm">途徑:</span>
<span v-for="(x, i) in citys" :key="i"> <span v-for="(x, i) in citys" :key="i">
<span class="cursor-pointer">{{ x }} </span> <span class="cursor-pointer">{{ x }} </span>
...@@ -164,7 +166,7 @@ ...@@ -164,7 +166,7 @@
class="transparent q-mr-xl no-padding" class="transparent q-mr-xl no-padding"
square square
icon="iconfont iconcancel" icon="iconfont iconcancel"
label="15天前可免費取消" label="取消需二次確認"
/> />
</div> </div>
</div> </div>
...@@ -303,7 +305,7 @@ ...@@ -303,7 +305,7 @@
size="sm" size="sm"
text-color="grey-2" text-color="grey-2"
class="text-light" class="text-light"
label="15天前可免費取消" label="取消需二次確認"
/> />
</div> </div>
<div class="text-grey f12"> <div class="text-grey f12">
...@@ -348,7 +350,7 @@ ...@@ -348,7 +350,7 @@
class="transparent q-mr-xl no-padding" class="transparent q-mr-xl no-padding"
square square
icon="iconfont iconcancel" icon="iconfont iconcancel"
label="15天前可免費取消" label="取消需二次確認"
/> />
<q-chip <q-chip
class="transparent q-mr-xl no-padding" class="transparent q-mr-xl no-padding"
...@@ -424,12 +426,12 @@ ...@@ -424,12 +426,12 @@
行程特色 行程特色
</div> </div>
<div <div
class="q-mt-md trip-text q-pb-xl" class="q-mt-md trip-text q-pb-xl line-feature"
v-html="dataList.feature.featureContent" v-html="dataList.feature.featureContent"
v-if="dataList.feature.featureContent != ''" v-if="dataList.feature.featureContent != ''"
></div> ></div>
<div <div
class="q-mt-md q-pb-xl" class="q-mt-md q-pb-xl line-feature"
ref="diyContext" ref="diyContext"
:style="{ zoom: zoomDiyContext }" :style="{ zoom: zoomDiyContext }"
v-html="dataList.feature.featureHtml" v-html="dataList.feature.featureHtml"
...@@ -934,6 +936,9 @@ export default { ...@@ -934,6 +936,9 @@ export default {
this.citys.push(x.cityName); this.citys.push(x.cityName);
} }
}); });
if(this.citys.length>0){
this.citys = Array.from(new Set(this.citys))
}
} }
} }
this.dataList.imgCover = JSON.parse(this.dataList.imgCover); this.dataList.imgCover = JSON.parse(this.dataList.imgCover);
...@@ -1160,6 +1165,9 @@ export default { ...@@ -1160,6 +1165,9 @@ export default {
</script> </script>
<style> <style>
.line-feature *{
line-height: normal !important;
}
.slider-item { .slider-item {
transform: scale(1); transform: scale(1);
transition-timing-function: ease; transition-timing-function: ease;
......
...@@ -713,7 +713,7 @@ export default { ...@@ -713,7 +713,7 @@ export default {
BrandId: 0, BrandId: 0,
TradeWay: 0, TradeWay: 0,
PlatformOrder: "", PlatformOrder: "",
GuestNum: this.chosenObj.crCount + this.chosenObj.etCount +this.chosenObj+yeCount, GuestNum: this.chosenObj.crCount + this.chosenObj.etCount +this.chosenObj.yeCount,
IsChildrenTour: this.price.isSupportChildren, IsChildrenTour: this.price.isSupportChildren,
IsBirdDiscount: 2, IsBirdDiscount: 2,
PredictRoomNum: PredictRoomNum:
......
<style> <style>
.login { .login {
background: url("../assets/img/login-bg.png"); background: url("../assets/img/login-bg.jpg");
background-size: cover; background-size: cover;
width: 100%; width: 100%;
height: 100%; height: 100%;
......
<style> <style>
.login { .login {
background: url("../assets/img/login-bg.png"); background: url("../assets/img/login-bg.jpg");
background-size: cover; background-size: cover;
width: 100%; width: 100%;
height: 100%; height: 100%;
......
<style lang="scss" scoped>
</style>
<template>
<div>
<div
class="text-h5 text-weight-bold text-left q-mt-xl"
ref="assemblypoint"
:class="{
'q-px-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
>
接送點範圍
</div>
<div
class="q-mt-lg trip-text rounded-borders q-mb-xl"
style="border: 1px dashed var(--q-color-warning)"
:class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
v-for="(x,index) in dataList.PlaceList">
<div class="q-pa-md" style="border-bottom: 1px dashed var(--q-color-warning)">
<div class="text-weight-bold text-h6">地點名稱:{{x.Name}}</div>
<div class="text-grey-9">地址:{{x.Address}}</div>
</div>
<div class="q-pa-md" :class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}">
<componentsMap :AddressObj="x"/>
</div>
</div>
<div
class="text-h5 text-weight-bold text-left q-mt-xl"
ref="experiencelocation"
:class="{
'q-px-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
>
機場地點
</div>
<div
class="q-mt-lg trip-text rounded-borders q-mb-xl"
style="border: 1px dashed var(--q-color-warning)"
:class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
v-for="(x,index) in dataList.AirportList">
<div class="q-pa-md" style="border-bottom: 1px dashed var(--q-color-warning)">
<div class="text-weight-bold text-h6">地点名称:{{x.Name}}</div>
<div class="text-grey-9">地址:{{x.Address}}</div>
</div>
<div class="q-pa-md" :class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}">
<componentsMap :AddressObj="x"/>
</div>
</div>
</div>
</template>
<script>
import componentsMap from "../../../components/car/Map.vue";
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
components: {componentsMap},
data() {
return {
dataList: [],
details: null,
sumPrice: 0,//总金额
DiscountsMoney: 0,//优惠金额
Money: 0, // 支付金額
}
},
mounted() {
this.getCarData()
// this.getCarOrder()
},
methods: {
// 获取车的详情
getCarData() {
// this.$q.loading.show();
this.apipost(
"b2c_get_GetCarSingleProductDetail",
{ ProductId: this.orderInfo.GoodsId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
this.details = r.data.data;
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
// this.$q.loading.hide();
},
null
);
},
getCarOrder() {
this.$q.loading.show();
this.apipost(
"CarSingle_post_GetTYMyCarOrderInfo",
{ OrderId: this.orderInfo.ErpOrderId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
this.Money = r.data.data.Money;
const {DiscountsMoney,Money} = r.data.data;
this.Money = Money;
this.DiscountsMoney = DiscountsMoney
this.sumPrice = Money + DiscountsMoney
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
this.$q.loading.hide();
},
null
);
},
}
}
</script>
\ No newline at end of file
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
</style> </style>
<template> <template>
<div>价格详情 <div>
<div <div
class="rounded-borders bg-white q-pa-md" class="rounded-borders bg-white q-py-md"
style="width: 300px" style="width: 300px"
:style="{ :style="{
width: width:
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
top:$q.platform.is.mobile?'unset':'50px', top:$q.platform.is.mobile?'unset':'50px',
}" }"
> >
<div class="text-subtitle1 text-weight-bolder">付款明細</div> <!-- <div class="text-subtitle1 text-weight-bolder">付款明細</div> -->
<!-- <div class="q-mt-md text-grey-6"> <!-- <div class="q-mt-md text-grey-6">
<div class="row q-pb-xs no-wrap" v-if="AirportObj&&AirportObj.Name"> <div class="row q-pb-xs no-wrap" v-if="AirportObj&&AirportObj.Name">
<div style="width: 80px">{{details.CarType==1?'接':'送'}}機機場:</div> <div style="width: 80px">{{details.CarType==1?'接':'送'}}機機場:</div>
...@@ -48,31 +48,31 @@ ...@@ -48,31 +48,31 @@
<div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</div> <div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</div>
</div> --> </div> -->
<hr <hr
style="border: none; border-top: 1px dashed #eee !important" style="border: none;"
class="bg-transparent q-mb-sm" 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="q-mr-lg">總金額</div>
<div class="text-subtitle2 text-weight-bolder text-primary"> <div class="text-subtitle2 text-weight-bolder">
CNY {{ moneyFormat(sumPrice, 2) }} CNY {{ moneyFormat(sumPrice, 2) }}
</div> </div>
</div> </div>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <hr style="border:none;" 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="q-mr-lg">優惠金額</div>
<div <div
class="text-subtitle2 text-weight-bolder text-teal" class="text-subtitle2 text-weight-bolder"
v-if="DiscountsMoney > 0" v-if="DiscountsMoney > 0"
> >
CNY - {{ moneyFormat(DiscountsMoney, 2) }} CNY - {{ moneyFormat(DiscountsMoney, 2) }}
</div> </div>
<div class="text-grey-5" v-else>暫無優惠</div> <div class="text-grey-5" v-else>暫無優惠</div>
</div> </div>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <!-- <hr style="border:none;" 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>
<div class="text-h6 text-weight-bolder text-primary product-price">{{details.CurrencyCode}} {{ moneyFormat(Money,2) }}</div> <div class="text-h6 text-weight-bolder text-primary product-price">{{details.CurrencyCode}} {{ moneyFormat(Money,2) }}</div>
</div> </div> -->
</div> </div>
</div> </div>
...@@ -99,29 +99,6 @@ export default { ...@@ -99,29 +99,6 @@ export default {
this.getCarOrder() this.getCarOrder()
}, },
methods: { methods: {
// 获取团的详情
getGroupData() {
// this.$q.loading.show();
this.apipost(
"b2c_get_GetCarSingleProductDetail",
{ ProductId: this.orderInfo.GoodsId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
this.emitAddress()
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
// this.$q.loading.hide();
},
null
);
},
// 获取车的详情 // 获取车的详情
getCarData() { getCarData() {
// this.$q.loading.show(); // this.$q.loading.show();
...@@ -155,6 +132,10 @@ export default { ...@@ -155,6 +132,10 @@ export default {
if (r.data.resultCode == 1) { if (r.data.resultCode == 1) {
this.dataList = r.data.data; this.dataList = r.data.data;
this.Money = r.data.data.Money; this.Money = r.data.data.Money;
const {DiscountsMoney,Money} = r.data.data;
this.Money = Money;
this.DiscountsMoney = DiscountsMoney
this.sumPrice = Money + DiscountsMoney
} else { } else {
this.$q.notify({ this.$q.notify({
type: "negative", type: "negative",
...@@ -169,11 +150,6 @@ export default { ...@@ -169,11 +150,6 @@ export default {
); );
}, },
emitAddress() {
const {PlaceList} = this.dataList
PlaceList.findItem(item => item.id === this.id)
this.$emit('address', this.dataList)
}
} }
} }
</script> </script>
\ No newline at end of file
<style lang="scss" scoped>
</style>
<template>
<div></div>
</template>
<script>
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
data() {
return {
dataList: null,
details: null,
sumPrice: 0,//总金额
DiscountsMoney: 0,//优惠金额
Money: 0, // 支付金額
}
},
mounted() {
this.getGroupData()
},
methods: {
getGroupData() {
this.$q.loading.show();
this.apipost(
"b2b_get_GetB2BTravelInfoV1",{ProductId: this.orderInfo.GoodsId},
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
if (this.dataList.dayList && this.dataList.dayList.length > 0) {
this.dataList.dayList.forEach((item) => {
item.slide = 0;
});
if (r.data.data.scenicList) {
r.data.data.scenicList.forEach((x) => {
if (x.cityName) {
this.citys.push(x.cityName);
}
});
}
}
this.dataList.imgCover = JSON.parse(this.dataList.imgCover);
this.dayList = this.dataList.dayList;
this.isShow = true;
this.isDirect = this.dataList.isDirect;
if (this.dataList.videoStr && this.dataList.videoStr != "") {
this.options.loop = false;
this.options.currentPage = 1;
this.$nextTick(() => {
setTimeout(() => {
let t = document.querySelectorAll(".slider-wrapper");
if (t.length > 0) {
let d = t[0].getBoundingClientRect();
this.videoPosition = d.top + d.height;
}
}, 1000);
});
}
this.$nextTick(() => {
if (this.dataList.feature.featureHtml != "") {
let tw =
parseFloat(
this.$refs.diyContext.getBoundingClientRect().width
) / 1123.0;
let divArr = document.querySelectorAll("#setZoom>div");
for (let i = 0; i < divArr.length; i++) {
let div = divArr[i];
if (this.$q.platform.is.mobile) {
div.style.zoom =
div.offsetWidth > 1000
? 0.999
: document.documentElement.clientWidth / 1123.0;
} else {
div.style.zoom = 1;
}
}
this.zoomDiyContext = tw > 1 ? 1 : tw.toFixed(2);
}
setTimeout(() => {
this.navs.forEach((x) => {
x.top =
this.$refs[x.val].getBoundingClientRect().top +
this.currentHeight -
60;
});
this.priceListHeight =
this.$refs.pricelist.getBoundingClientRect().top +
this.currentHeight -
60;
this.days = [];
this.dayList.forEach((x) => {
let dayListObj = {
val: "day" + x.dayNum,
top: 0,
isActive: false,
display: x.dayNum > 9 ? x.dayNum : "0" + x.dayNum,
};
this.days.push(dayListObj);
});
}, 1000);
try {
document
.querySelector("#scrollId .q-page-container")
.addEventListener("scroll", this.handleScrollDay);
} catch (error) {
// console.log(document.querySelector('#scrollId .q-page-container'))
// console.log('异常信息', error)
}
});
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
this.$q.loading.hide();
},
null
);
},
}
}
</script>
\ No newline at end of file
<style lang="scss" scoped>
</style>
<template>
<div>
<div
class="rounded-borders bg-white q-py-md"
style="width: 300px"
:style="{
width:
$q.screen.width < 1200 || $q.platform.is.mobile
? 'unset'
: '300px',
position:$q.platform.is.mobile?'unset':'sticky',
top:$q.platform.is.mobile?'unset':'50px',
}"
>
<!-- <div class="text-subtitle1 text-weight-bolder">付款明細</div> -->
<!-- <div class="q-mt-md text-grey-6">
<div class="row q-pb-xs no-wrap" v-if="AirportObj&&AirportObj.Name">
<div style="width: 80px">{{details.CarType==1?'接':'送'}}機機場:</div>
<div class="q-ml-md ellipsis-2-lines">{{AirportObj.Name}}</div>
</div>
<div class="row q-pb-xs no-wrap" v-if="AirportObj&&AirportObj.Name">
<div style="width: 80px">{{details.CarType==1?'抵達':'起飛'}}時間:</div>
<div class="q-ml-md ellipsis-2-lines">{{parameters.FlightTime}}</div>
</div>
<div class="row q-pb-xs no-wrap" v-if="parameters.GetonAddress">
<div style="width: 80px">上車點:</div>
<div class="q-ml-md ellipsis-2-lines">{{parameters.GetonAddress}}</div>
</div>
<div class="row q-pb-xs no-wrap" v-if="parameters.GetoffAddress">
<div style="width: 80px">下車點:</div>
<div class="q-ml-md ellipsis-2-lines">{{parameters.GetoffAddress}}</div>
</div>
<div class="row">
<div style="width: 80px">
接駁日期:</div>
<div class="q-ml-md">
{{parameters.OrderDate}}
</div>
</div>
</div>
<q-separator color="grey-2" class="q-my-md"/> -->
<div class="text-grey-9">
<!-- <div class="row q-mb-sm" v-if="chosenObj.Count>0&&CarObj">
<div class="col">{{CarObj.CarName}} x {{ chosenObj.Count }}</div>
<div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</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="q-mr-lg">總金額</div>
<div class="text-subtitle2 text-weight-bolder">
CNY {{ moneyFormat(sumPrice, 2) }}
</div>
</div>
<hr style="border:none;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center">
<div class="q-mr-lg">優惠金額</div>
<div
class="text-subtitle2 text-weight-bolder text-teal"
v-if="DiscountsMoney > 0"
>
CNY - {{ moneyFormat(DiscountsMoney, 2) }}
</div>
<div class="text-grey-5" v-else>暫無優惠</div>
</div>
<!-- <hr style="border:none;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center">
<div class="q-mr-lg">支付金額</div>
<div class="text-h6 text-weight-bolder text-primary product-price">{{details.CurrencyCode}} {{ moneyFormat(Money,2) }}</div>
</div> -->
</div>
</div>
</div>
</template>
<script>
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
data() {
return {
details: null,
sumPrice: 0,//总金额
DiscountsMoney: 0,//优惠金额
Money: 0, // 支付金額
}
},
mounted() {
this.getGroupData()
this.getCarOrder()
},
methods: {
// 获取团的详情
getGroupData() {
// this.$q.loading.show();
this.apipost(
"b2c_get_GetCarSingleProductDetail",
{ ProductId: this.orderInfo.GoodsId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
this.emitAddress()
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
// this.$q.loading.hide();
},
null
);
},
getCarOrder() {
this.$q.loading.show();
this.apipost(
"CarSingle_post_GetTYMyCarOrderInfo",
{ OrderId: this.orderInfo.ErpOrderId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
this.Money = r.data.data.Money;
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
this.$q.loading.hide();
},
null
);
},
emitAddress() {
const {PlaceList} = this.dataList
PlaceList.findItem(item => item.id === this.id)
this.$emit('address', this.dataList)
}
}
}
</script>
\ No newline at end of file
<style lang="scss" scoped>
</style>
<template>
<div>
<div
class="text-h5 text-weight-bold text-left q-mt-xl"
ref="assemblypoint"
:class="{
'q-px-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
>
酒店地址
</div>
<div
class="q-mt-lg trip-text rounded-borders q-mb-xl"
style="border: 1px dashed var(--q-color-warning)"
:class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}">
<div class="q-pa-md" style="border-bottom: 1px dashed var(--q-color-warning)">
<div class="text-weight-bold text-h6">酒店名稱:{{hotelSummary.hotelName}}</div>
<div class="text-grey-9">地址:{{`${hotelSummary.address}`}}</div>
</div>
<div class="q-pa-md" :class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}" v-for="(x,index) in travelLngLat" :key="index">
<componentsMap v-if="x.Lng&&x.Lat" :AddressObj="x"/>
<div v-else class="card text-center">经纬度未知</div>
</div>
</div></div>
</template>
<script>
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
data() {
return {hotelSummary: {},
travelLngLat: []
}
},
mounted() {
this.getData()
},
methods: {
// 获取详情
getData() {
this.$q.loading.show();
this.apipost(
"dmc_post_Get_GetJAPAN_HotelDetail",
{ ProductId: this.orderInfo.GoodsId },
(res) => {
this.$q.loading.hide();
if (res.data.resultCode == 1) {
this.hotelDetails = res.data.data.hotelDetails;
this.hotelSummary = res.data.data.hotelSummary;
this.roomReviewRating = Number(this.hotelDetails.roomReviewRating);
this.travelLngLat.push({
Lat: this.hotelSummary.latitudeW,
Lng: this.hotelSummary.longitudeW,
Address: this.hotelSummary.hotelName
});
} else {
this.$message.error(res.data.message);
}
},
null
);
},
}
}
</script>
\ No newline at end of file
<style lang="scss" scoped>
</style>
<template>
<div>
<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" />
<div class="row q-mb-sm items-center" v-if="DiscountsMoney > 0">
<div class="col">優惠金額</div>
<div
class="text-subtitle2 text-weight-bolder text-teal"
v-if="DiscountsMoney > 0"
>
CNY - {{ moneyFormat(DiscountsMoney, 2) }}
</div>
<div class="text-grey-5" v-else>暫無優惠</div>
</div>
<div class="row q-mb-sm items-center">
<div class="col">支付金額</div>
<div class="text-h6 text-weight-bolder text-primary product-price">
CNY {{ moneyFormat(Money, 2) }}
</div>
</div>
</div>
</template>
<script>
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
data() {
return {
details: null,
sumPrice: 0,//总金额
DiscountsMoney: 0,//优惠金额
Money: 0, // 支付金額
}
},
mounted() {
this.getGroupData()
this.getCarOrder()
},
methods: {
// 获取团的详情
getGroupData() {
// this.$q.loading.show();
this.apipost(
"dmc_post_GetThirdHotelOrder",
{ ProductId: this.orderInfo.GoodsId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
const {DiscountsMoney,MailingState,Money} = r.data.data;
console.log('getTicket Data', r.data.data,DiscountsMoney,MailingState,Money)
// sumPrice: 0,//总金额
// DiscountsMoney: 0,//优惠金额
// Money: 0, // 支付金額
// MailingState: '',//邮寄状态 1自取 2邮寄
this.Money = Money;
this.DiscountsMoney = DiscountsMoney
this.MailingState = MailingState;
this.sumPrice = Money + DiscountsMoney
// this.sumPrice = this.moneyFormat(this.sumPrice, 2)
// this.Money = this.moneyFormat(this.Money, 2)
// this.DiscountsMoney = this.moneyFormat(this.DiscountsMoney, 2)
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
// this.$q.loading.hide();
},
null
);
},
}
}
</script>
\ No newline at end of file
...@@ -16,19 +16,33 @@ ...@@ -16,19 +16,33 @@
</div> </div>
</div> </div>
<q-separator color="grey-2" class="q-my-md" /> <q-separator color="grey-2" class="q-my-md" />
<div v-if="detail.OrderNo">
<carPriceDetail v-if="[12,13,14].includes(detail.GoodsType)" :orderInfo="detail"></carPriceDetail>
<groupPriceDetail v-if="[1,2,3].includes(detail.GoodsType)" :orderInfo="detail"></groupPriceDetail>
<hotelPriceDetail v-if="[8,9,10,11].includes(detail.GoodsType)" :orderInfo="detail"></hotelPriceDetail>
<ticketPriceDetail v-if="[4,5,6,7].includes(detail.GoodsType)" :orderInfo="detail"></ticketPriceDetail>
</div>
<div class="row"> <div class="row">
<div class="text-subtitle1 col"> <div class="text-subtitle1 col">
<span>應付金額:</span> <span>應付金額:</span>
<span class="text-subtitle2">CNY</span> <span class="text-subtitle2">CNY</span>
<span class="q-ml-sm text-weight-bolder">{{ moneyFormat(detail.TotalPrice,2) }}</span> <span class="q-ml-sm text-weight-bolder">{{ moneyFormat(detail.TotalPrice,2) }}</span>
</div> </div>
<div class=""> <div class="row items-center">
<q-btn color="primary" outline dense class="q-mr-md q-px-md"> <q-btn color="primary" flat dense class="q-mr-md q-px-md">
<i class="iconfont iconmessage1"></i>联系客服</q-btn> <i class="iconfont iconmessage1"></i>联系客服</q-btn>
<q-btn color="primary" outline dense class="q-mr-md q-px-md"> <q-btn color="primary" dense flat class="q-mr-md q-px-md" @click="showCode = true">
<i class="iconfont iconiconfontscan"></i>扫码咨询</q-btn> <i class="iconfont iconiconfontscan"></i>扫码咨询</q-btn>
<q-btn color="primary" outline dense label="取消訂單" class="q-mr-md q-px-md"/> <!-- <q-btn color="primary" outline dense label="取消訂單" @click="cancalOrder" class="q-mr-md q-px-md"/>
<q-btn color="primary" unelevated dense label="前往付款" class="q-px-md"/> <q-btn color="primary" unelevated dense label="前往付款" @click="goPayOrder" class="q-px-md"/> -->
<div class="text-right" v-if="detail.OrderStatus==1">
<q-btn color="primary" dense outline class="q-px-sm" label="取消訂單" @click="cancalOrder(item.orderNo)" />
<q-btn color="primary" dense unelevated class="q-px-sm q-ml-sm" label="立即支付" @click="CommonJump('/pay/'+item.orderNo,{},'blank')" />
</div>
<div class="text-right" v-else>
<q-btn color="dark" dense flat class="q-px-sm" @click="CommonJump('/orderinfo/'+orderNo,{},'blank')" label="查看訂單" />
</div>
</div> </div>
</div> </div>
</q-card> </q-card>
...@@ -44,12 +58,12 @@ ...@@ -44,12 +58,12 @@
/> />
<div class="col"> <div class="col">
<div class="text-body1 ellipsis">{{detail.GoodsName}}</div> <div class="text-body1 ellipsis">{{detail.GoodsName}}</div>
<div class="q-mt-sm text-grey-6">2023-03-15從成都出發 成人x2; </div> <div class="q-mt-sm text-grey-6">{{detail.OrderMake}}</div>
<div class="q-mt-sm text-dark"> <!-- <div class="q-mt-sm text-dark">
出行日期:{{detail.SelectStartTime}}(本地时间) 出行日期:{{detail.SelectStartTime}}(本地时间)
</div> </div> -->
<div class="q-mt-sm text-grey-6"> <div class="q-mt-sm text-grey-6">
商品類型:{{detail.GoodsType}} 商品類型:{{goodTypeList[detail.GoodsType]}}
</div> </div>
</div> </div>
</div> </div>
...@@ -84,17 +98,13 @@ ...@@ -84,17 +98,13 @@
</div> </div>
</div> </div>
</q-card> </q-card>
<q-card class="rounded-borders q-pa-md q-mt-md" flat v-if="![1,2,3].includes(detail.GoodsType)">
<div v-if="detail.OrderNo">
<q-card class="rounded-borders q-pa-md q-mt-md" flat> <car-map v-if="[12,13,14].includes(detail.GoodsType)" :orderInfo="detail"></car-map>
<div class="text-subtitle1 text-weight-bolder">使用地点</div> <!-- <groupMap v-if="[1,2,3].includes(detail.GoodsType)" :orderInfo="detail"></groupMap> -->
<hotelMap v-if="[8,9,10,11].includes(detail.GoodsType)" :orderInfo="detail"></hotelMap>
<div class="q-pa-md" :class="{ <ticketMap v-if="[4,5,6,7].includes(detail.GoodsType)" :orderInfo="detail"></ticketMap>
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}">
<componentsMap :AddressObj="detail"/>
</div> </div>
<carPriceDetail v-if="detail.OrderNo" :orderInfo="detail"></carPriceDetail>
</q-card> </q-card>
<div v-if="(!orderNo || orderNo == '') && !loading" class="text-center q-my-xl"> <div v-if="(!orderNo || orderNo == '') && !loading" class="text-center q-my-xl">
<none-data <none-data
...@@ -103,16 +113,29 @@ ...@@ -103,16 +113,29 @@
subtitle="趕緊去挑選心儀的旅遊產品吧,三秒後自動跳轉到首頁" subtitle="趕緊去挑選心儀的旅遊產品吧,三秒後自動跳轉到首頁"
></none-data> ></none-data>
</div> </div>
<q-dialog v-model="showCode">
<img src="../../../assets/img/kefu.png"/>
</q-dialog>
</div> </div>
</template> </template>
<script> <script>
import componentsMap from "../../../components/car/Map.vue"; import componentsMap from "../../../components/car/Map.vue";
import carPriceDetail from './carPriceDetail.vue' import carPriceDetail from './carPriceDetail.vue'
import groupPriceDetail from './groupPriceDetail.vue'
import hotelPriceDetail from './hotelPriceDetail.vue'
import ticketPriceDetail from './ticketPriceDetail.vue'
import carMap from './carMap.vue'
import groupMap from './groupMap.vue'
import hotelMap from './hotelMap.vue'
import ticketMap from './ticketMap.vue'
export default { export default {
components: {componentsMap, carPriceDetail}, components: {componentsMap, carPriceDetail,groupPriceDetail,hotelPriceDetail,ticketPriceDetail,carMap,groupMap,hotelMap,ticketMap},
// GoodsType: this.productType,//商品类型(见枚举) 12包车 13 接机 14送机
data() { data() {
return { return {
goodTypeList: ['','一日游','多日游','小包团','景点门票','主题乐园','博物馆','历史景点','温泉饭店','星级饭店','度假村','民宿','包车','接机','送机'],
showCode: false,
detail: {}, detail: {},
orderIcon: '', orderIcon: '',
iconColor: '', iconColor: '',
...@@ -130,6 +153,29 @@ mounted() { ...@@ -130,6 +153,29 @@ mounted() {
} }
}, },
methods: { methods: {
goPayOrder() {
this.CommonJump('/pay/' + this.orderNo)
},
cancalOrder() {
console.log(this.$q.dialog)
this.$q.dialog({
title: '取消確認',
message: '訂單取消後,系統將立即釋放位置,請問是否執行?',
cancel: true,
persistent: true
}).onOk(() => {
this.apipost('GetCancelOrder_post',{OrderNo: this.orderNo},r=>{
if(r.data.resultCode==1){
this.$message.success('訂單取消成功')
this.getOrderList()
}else{
this.$message.error('訂單取消失敗,請重新嘗試')
}
})
}).onCancel(() => {
// console.log('>>>> Cancel')
})
},
goHomeHandler(){ goHomeHandler(){
this.loading=false this.loading=false
setTimeout(() => { setTimeout(() => {
...@@ -147,7 +193,7 @@ methods: { ...@@ -147,7 +193,7 @@ methods: {
this.orderIcon = ["","icontime1","iconsuccess", "iconsuccess", "icontishi"][this.detail.OrderStatus] this.orderIcon = ["","icontime1","iconsuccess", "iconsuccess", "icontishi"][this.detail.OrderStatus]
this.iconColor = ["","blue","blue", "green", "grey"][this.detail.OrderStatus] this.iconColor = ["","blue","blue", "green", "grey"][this.detail.OrderStatus]
console.log('get detail', this.orderIcon, this.iconColor) console.log('get detail', this.orderIcon, this.iconColor)
this.orderNo=OrderNo this.orderNo=orderNo
this.orderInfo=r.data.data this.orderInfo=r.data.data
this.loading=false this.loading=false
} else { } else {
......
<style lang="scss" scoped>
</style>
<template>
<div>
<div
class="text-h5 text-weight-bold text-left q-mt-xl"
ref="assemblypoint"
:class="{
'q-px-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}"
>
景區地址
</div>
<div
class="q-mt-lg trip-text rounded-borders q-mb-xl"
style="border: 1px dashed var(--q-color-warning)"
:class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}">
<div class="q-pa-md" style="border-bottom: 1px dashed var(--q-color-warning)">
<div class="text-weight-bold text-h6">地點名稱:{{dataList.Name}}</div>
<div class="text-grey-9">地址:{{`${dataList.Address}`}}</div>
</div>
<div class="q-pa-md" :class="{
'q-mx-md': $q.screen.width < 1220 && $q.platform.is.mobile,
}">
<componentsMap v-if="AddressObj.Lng&&AddressObj.Lat" :AddressObj="AddressObj"/>
<div v-else class="card text-center">经纬度未知</div>
</div>
</div></div>
</template>
<script>
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
data() {
return {
dataList: {},
AddressObj: {},
details: null,
sumPrice: 0,//总金额
DiscountsMoney: 0,//优惠金额
Money: 0, // 支付金額
MailingMoney: 0, // 邮寄费
MailingState: '',//邮寄状态 1自取 2邮寄
}
},
mounted() {
this.getData()
// this.getOrder()
},
methods: {
// 获取商品详情
getData() {
this.$q.loading.show();
this.apipost(
"b2c_get_GetTicketCouponsDetail",
{ CouponsId: this.msg.configId },
(r) => {
if (r.data.resultCode == 1) {
let addList = function (arr) {
arr.forEach(item => {
item.checked = false
item.Count = 1
});
};
addList(r.data.data.TicketList);
this.dataList = r.data.data;
this.selectedId = this.dataList.TicketList.find(x=>x.Id)
this.dataList.imgCover = this.dataList.PicPathList;
this.AddressObj = this.dataList
this.AddressObj.Address = `${this.dataList.CountryName}-${this.dataList.CityName}-${this.dataList.ProvinceName}-${this.dataList.Address}`
this.isShow = true;
if (this.dataList.videoStr && this.dataList.videoStr != "") {
this.options.loop = false;
this.options.currentPage = 1;
this.$nextTick(() => {
setTimeout(() => {
let t = document.querySelectorAll(".slider-wrapper");
if (t.length > 0) {
let d = t[0].getBoundingClientRect();
this.videoPosition = d.top + d.height;
}
}, 1000);
});
}
this.$nextTick(() => {
this.getCarPriceData()
setTimeout(() => {
this.navs.forEach((x) => {
x.top =
this.$refs[x.val].getBoundingClientRect().top + this.currentHeight - 60;
});
this.priceListHeight =
this.$refs.pricelist.getBoundingClientRect().top +
this.currentHeight -
60;
}, 1000);
try {
document
.querySelector("#scrollId .q-page-container")
.addEventListener("scroll", this.handleScrollDay);
} catch (error) {
// console.log(document.querySelector('#scrollId .q-page-container'))
// console.log('异常信息', error)
}
});
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
});
}
this.$q.loading.hide();
},
null
);
},
}
}
</script>
\ No newline at end of file
<style lang="scss" scoped>
</style>
<template>
<div>
<div
class="rounded-borders bg-white q-py-md"
style="width: 300px"
:style="{
width:$q.platform.is.mobile
? 'unset'
: '300px',
position:$q.platform.is.mobile?'unset':'sticky',
top:$q.platform.is.mobile?'unset':'50px',
}"
>
<!-- <div class="text-subtitle1 text-weight-bolder">付款明細</div> -->
<!-- <q-separator color="grey-2" class="q-my-md"/> -->
<!-- <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="q-mr-lg">總金額</div>
<div class="text-subtitle2 text-weight-bolder">
CNY {{sumPrice }}
</div>
</div>
<hr style="border:none;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center" v-if="MailingState==2&&MailingMoney>0">
<div class="q-mr-lg">邮寄费</div>
<div
class="text-subtitle2 text-weight-bolder text-grey-6"
>
CNY {{ MailingMoney }}
</div>
</div>
<div class="row q-mb-sm items-center">
<div class="q-mr-lg">優惠金額</div>
<div
class="text-subtitle2 text-weight-bolder text-teal"
v-if="DiscountsMoney > 0"
>
CNY - {{ DiscountsMoney }}
</div>
<div class="text-grey-5" v-else>暫無優惠</div>
</div>
<!-- <div class="row q-mb-sm items-center">
<div class="col">支付金額</div>
<div class="text-h6 text-weight-bolder text-primary product-price">
CNY {{ Money }}
</div>
</div> -->
</div>
</div>
</div>
</template>
<script>
export default {
props: {
orderInfo: {
type: Object,
default: () => ({})
}
},
data() {
return {
details: null,
sumPrice: 0,//总金额
DiscountsMoney: 0,//优惠金额
Money: 0, // 支付金額
MailingMoney: 0, // 邮寄费
MailingState: '',//邮寄状态 1自取 2邮寄
}
},
mounted() {
this.getData()
this.getOrder()
},
methods: {
// 获取商品详情
getData() {
this.$q.loading.show();
this.apipost("b2c_get_GetTicketCouponsDetail",
{ CouponsId: this.orderInfo.GoodsId },
(r) => {
if (r.data.resultCode == 1) {
this.details = r.data.data;
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
this.$q.loading.hide();
},
null
);
},
getOrder() {
// http://dev.api.oytour.com/#/home/project/inside/api/detail?groupID=703&childGroupID=710&apiID=4256&projectName=REBORN&projectID=2
this.$q.loading.show();
this.apipost(
"ticket_post_GetSaleTicketOrderInfo",
{ OrderId: this.orderInfo.ErpOrderId },
(r) => {
if (r.data.resultCode == 1) {
this.dataList = r.data.data;
const {DiscountsMoney,MailingMoney,MailingState,Money} = r.data.data;
console.log('getTicket Data', r.data.data,DiscountsMoney,MailingMoney,MailingState,Money)
// sumPrice: 0,//总金额
// DiscountsMoney: 0,//优惠金额
// Money: 0, // 支付金額
// MailingMoney: 0, // 邮寄费
// MailingState: '',//邮寄状态 1自取 2邮寄
this.Money = Money;
this.DiscountsMoney = DiscountsMoney
this.MailingMoney = MailingMoney;
this.MailingState = MailingState;
this.sumPrice = Money + MailingMoney + DiscountsMoney
this.sumPrice = this.moneyFormat(this.sumPrice, 2)
this.Money = this.moneyFormat(this.Money, 2)
this.DiscountsMoney = this.moneyFormat(this.DiscountsMoney, 2)
this.MailingMoney = this.moneyFormat(this.MailingMoney, 2)
} else {
this.$q.notify({
type: "negative",
message: r.data.message,
position: "top",
timeout: 2000, // 以毫秒为单位; 0意味着没有超时
});
}
this.$q.loading.hide();
},
null
);
},
emitAddress() {
const {PlaceList} = this.dataList
PlaceList.findItem(item => item.id === this.id)
this.$emit('address', this.dataList)
}
}
}
</script>
\ No newline at end of file
...@@ -7644,7 +7644,7 @@ qs@~6.5.2: ...@@ -7644,7 +7644,7 @@ qs@~6.5.2:
resolved "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz" resolved "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz"
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
quasar@^1.22.5: quasar@1.22.5:
version "1.22.5" version "1.22.5"
resolved "https://registry.yarnpkg.com/quasar/-/quasar-1.22.5.tgz#7c33a02a5541b62b057f1d805b64cbcb59243152" resolved "https://registry.yarnpkg.com/quasar/-/quasar-1.22.5.tgz#7c33a02a5541b62b057f1d805b64cbcb59243152"
integrity sha512-cb/Q1Nvx1Lo3i2Gq+7j6kN/DJzZrTPG6JJKus3WJ0YpqsiovoWchnbDrGkTyL8nCnj2Im4SAX50DF0Vbd6pK3w== integrity sha512-cb/Q1Nvx1Lo3i2Gq+7j6kN/DJzZrTPG6JJKus3WJ0YpqsiovoWchnbDrGkTyL8nCnj2Im4SAX50DF0Vbd6pK3w==
......
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