Commit 815ae8e4 authored by 吴春's avatar 吴春

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

parents 04d43921 8671832b
...@@ -10,7 +10,7 @@ export default { ...@@ -10,7 +10,7 @@ export default {
}; };
</script> </script>
<style> <style>
@import url("//at.alicdn.com/t/c/font_1890699_yrr2mh5n7ln.css"); @import url("//at.alicdn.com/t/c/font_1890699_gbysegbhucu.css");
@font-face { @font-face {
font-family: "oswald"; font-family: "oswald";
src: url("https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/smallapp/Oswald-Regular.ttf"); src: url("https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/smallapp/Oswald-Regular.ttf");
...@@ -19,7 +19,9 @@ export default { ...@@ -19,7 +19,9 @@ export default {
font-family: 'FZDBSJW'; font-family: 'FZDBSJW';
src: local('FZDaBiaoSong-B06S') src: local('FZDaBiaoSong-B06S')
} }
.text-shadow{
text-shadow: rgb(0 0 0 / 50%) 2px 2px 5px;
}
.text-subtitle1 { .text-subtitle1 {
font-size: 1.25rem !important; font-size: 1.25rem !important;
} }
......
const product = {
/**
* 生成產品詳情地址
* @param {*} productInfo 產品信息(必須包含Id和ProductType)
*/
genernalUrl(productInfo) {
let t = productInfo.productType ? productInfo.productType : productInfo.ProductType;
let configId = productInfo.configId ? productInfo.configId : productInfo.ConfigId;
let url = ''
if (t && configId) {
if (t === 4) {
// 接送机,包车
url = "/detailCar/" + configId
} else if (t === 3) {
url = "/detailHotal/" + configId
} else if (t === 2) {
url = "/detailsScenicSpotTicket/" + configId
} else if (t === 1) {
url = "/detail/" + encodeURIComponent(item.id) + "/" + 0 + "/" + configId
} else if (t === 5) {
url = "/hotel/" + configId
}
} else {
throw new Error("參數不合法");
}
return url
},
};
export default product
\ No newline at end of file
...@@ -6,6 +6,7 @@ import VueCoreVideoPlayer from 'vue-core-video-players' ...@@ -6,6 +6,7 @@ import VueCoreVideoPlayer from 'vue-core-video-players'
import 'viewerjs/dist/viewer.css' import 'viewerjs/dist/viewer.css'
import user from './user' import user from './user'
import message from './message' import message from './message'
import product from './product'
import VueViewer from 'v-viewer' import VueViewer from 'v-viewer'
// import VueCoreVideoPlayer from 'vue-core-video-player' // import VueCoreVideoPlayer from 'vue-core-video-player'
Vue.prototype.$EventBus = new Vue() Vue.prototype.$EventBus = new Vue()
...@@ -13,6 +14,7 @@ Vue.use(VueCoreVideoPlayer) ...@@ -13,6 +14,7 @@ Vue.use(VueCoreVideoPlayer)
Vue.use(VueViewer) Vue.use(VueViewer)
Vue.prototype.$md5 = md5; Vue.prototype.$md5 = md5;
Vue.prototype.$message = message Vue.prototype.$message = message
Vue.prototype.$product = product
//域名管理对象 //域名管理对象
Vue.prototype.domainManager = function() { Vue.prototype.domainManager = function() {
let domainUrl = ''; let domainUrl = '';
...@@ -195,8 +197,9 @@ Vue.prototype.OpenNewUrl = function(URL) { ...@@ -195,8 +197,9 @@ Vue.prototype.OpenNewUrl = function(URL) {
//公用跳转 //公用跳转
Vue.prototype.CommonJump = function(path, obj) { Vue.prototype.CommonJump = function(path, obj) {
let p = typeof(path) == 'string' ? path : this.$product.genernalUrl(path)
this.$router.push({ this.$router.push({
path: path, path: p,
query: obj query: obj
}); });
} }
......
...@@ -137,7 +137,6 @@ export default { ...@@ -137,7 +137,6 @@ export default {
x.originalB2CPrice=y.Price x.originalB2CPrice=y.Price
} }
}) })
x.Count = 60
}) })
this.calcMoney() this.calcMoney()
......
...@@ -43,15 +43,16 @@ ...@@ -43,15 +43,16 @@
</div> </div>
</div> </div>
<template v-if="TicketIds&&TicketIds.length>0">
<div class="text-grey-6 f12 q-my-md">選擇車類型</div> <div class="text-grey-6 f12 q-my-md">選擇車類型</div>
<div class="row wrap"> <div class="row wrap">
<div v-for="(x,i) in dataList.CarTypeList" :key="i"> <div v-for="(x,i) in dataList.CarTypeList" :key="i">
<q-chip size="14px" clickable @click="handleSelect(x,2)" <q-chip v-if="TicketIds.indexOf(x.Id)!=-1" size="14px" clickable @click="handleSelect(x,2)"
:text-color="selectedCarObj&&selectedCarObj.Id==x.Id?'white':'dark'" :text-color="selectedCarObj&&selectedCarObj.Id==x.Id?'white':'dark'"
:color="selectedCarObj&&selectedCarObj.Id==x.Id?'primary':'grey-3'" square>{{ x.CarName }}({{ x.PeopleNum }}人)</q-chip> :color="selectedCarObj&&selectedCarObj.Id==x.Id?'primary':'grey-3'" square>{{ x.CarName }}({{ x.PeopleNum }}人)</q-chip>
</div>
</div> </div>
</div> </template>
<div class="text-grey-6 f12 q-my-md">選擇數量</div> <div class="text-grey-6 f12 q-my-md">選擇數量</div>
<div class="row items-end"> <div class="row items-end">
<div class="col" :class="{'column':$q.platform.is.mobile}"> <div class="col" :class="{'column':$q.platform.is.mobile}">
...@@ -150,6 +151,8 @@ export default { ...@@ -150,6 +151,8 @@ export default {
this.p = n; this.p = n;
if(n&&n.startDate){ if(n&&n.startDate){
this.chosenObj.startDate = n.startDate; this.chosenObj.startDate = n.startDate;
let arr = this.dataAll.filter(x=> x.Date==this.chosenObj.startDate)
this.TicketIds = arr[0].Price.map(x=> {return x.TicketId})
// this.selectedCar = this.dataList.CarTypeList[0].Id // this.selectedCar = this.dataList.CarTypeList[0].Id
// this.selectedCarObj = this.dataList.CarTypeList[0] // this.selectedCarObj = this.dataList.CarTypeList[0]
} }
...@@ -178,17 +181,17 @@ export default { ...@@ -178,17 +181,17 @@ export default {
selectedAirportObj: null, selectedAirportObj: null,
onCarObj: null, onCarObj: null,
unCarObj: null, unCarObj: null,
TicketIds: null
}; };
}, },
created() { created() {
this.initModel(); this.initModel();
console.log(this.p,'=======')
if(this.p.startDate){ if(this.p.startDate){
this.chosenObj.startDate = this.p.startDate; this.chosenObj.startDate = this.p.startDate;
this.calcMoney() this.calcMoney()
this.getCarPriceData2() this.getCarPriceData2()
} }
this.getCarPriceData()
}, },
methods: { methods: {
goOrderHandler(){ goOrderHandler(){
...@@ -267,6 +270,24 @@ export default { ...@@ -267,6 +270,24 @@ export default {
},null) },null)
}, },
getCarPriceData() {
this.priceList = []
this.apipost(
"b2c_get_GetCarSingleProductMonthPriceAll",
{
ProductId: this.configId,
Month: this.Month,
// AirportId: '',
// CarTypeId: this.selectedCarObj.Id
},
(r) => {
if (r.data.resultCode == 1) {
this.dataAll = r.data.data
}
},null)
},
handleSelectAirport(item){ handleSelectAirport(item){
this.selectedAirportObj = item this.selectedAirportObj = item
}, },
......
<template>
<div class="rounded-borders overflow-hidden q-pb-md" :style="{'width':width,'background-color':bgColor}" v-if="product">
<q-img :src="product.ImgCover" spinner-color="white" :ratio="16/9" fit="cover">
<div class="absolute-top text-shadow" style="background: linear-gradient(rgba(0, 0, 0, 0.5),rgba(0, 0, 0, 0));">
{{ formatEnum(product.ProductType) }}
</div>
</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="text-subtitle2 text-weight-bolder text-dark q-mx-md">
<span>CNY {{moneyFormat(product.B2CPrice,2)}}</span>
<span class="f12 q-ml-sm"></span>
</div>
</div>
</template>
<script>
import ListProductTypeEnum from 'src/utils/listProductType';
import EnumHelper from '../../utils/enumhelper'
export default {
props:{
product:{
type:Object,
required:true
},
width:{
type:String,
default:"250px"
},
bgColor:{
type:String,
default:'#fff'
}
},
data() {
return {
}
},
methods: {
formatEnum(t){
let temp = EnumHelper.ParseToEnum(ListProductTypeEnum,t,'value')
return temp.desc
}
},
}
</script>
<style>
</style>
\ No newline at end of file
<template>
<!-- <div class="rounded-borders overflow-hidden q-pb-md" :style="{'width':width,'background-color':bgColor}" v-if="product">
<q-img :src="product.ImgCover" spinner-color="white" :ratio="16/9" fit="cover" />
<div class="ellipsis-2-lines text-body1 q-ma-md cursor-pointer">{{ product.Title }}{{ product.Title }}{{ product.Title }}{{ product.Title }}{{ product.Title }}</div>
<div class="text-subtitle2 text-weight-bolder text-dark q-mx-md">
<span>CNY {{moneyFormat(product.B2CPrice,2)}}</span>
<span class="f12 q-ml-sm"></span>
</div>
</div> -->
<div class="rounded-borders overflow-hidden" v-if="product">
<div class="row" :style="{'background-color':bgColor}" >
<q-img :src="product.ImgCover" spinner-color="dark" :ratio="4/3" fit="cover" class=" col-5" >
<div class="absolute-top text-shadow" style="background: linear-gradient(rgba(0, 0, 0, 0.5),rgba(0, 0, 0, 0));">
{{ formatEnum(product.ProductType) }}
</div>
</q-img>
<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="text-subtitle2 text-weight-bolder text-dark q-mx-md">
<span>CNY {{moneyFormat(product.B2CPrice,2)}}</span>
<span class="f12 q-ml-sm"></span>
</div>
</div>
</div>
</div>
</template>
<script>
import ListProductTypeEnum from 'src/utils/listProductType';
import EnumHelper from '../../utils/enumhelper'
export default {
props:{
product:{
type:Object,
required:true
},
width:{
type:String,
default:"250px"
},
bgColor:{
type:String,
default:'#fff'
}
},
methods: {
formatEnum(t){
let temp = EnumHelper.ParseToEnum(ListProductTypeEnum,t,'value')
return temp.desc
}
},
}
</script>
<style>
</style>
\ No newline at end of file
...@@ -733,29 +733,7 @@ this.dayArray = this.dayArray.filter(item => arr.includes(item.id)) ...@@ -733,29 +733,7 @@ this.dayArray = this.dayArray.filter(item => arr.includes(item.id))
// this.msg.dayNumList = arr; // this.msg.dayNumList = arr;
}, },
GotoDetails(item) { GotoDetails(item) {
if(item.productType === 4) { // 接送机,包车 this.CommonJump(item,{});
this.CommonJump(
"/detailCar/"+item.configId,
{}
);
return
}else if(item.productType === 3) { // 住宿
this.CommonJump(
"/detailHotal/"+item.configId,
{}
);
return
}else if(item.productType === 2) { // 景区门票
this.CommonJump(
"/detailsScenicSpotTicket/"+item.configId,
{}
);
return
}
this.CommonJump(
"/detail/" + encodeURIComponent(item.id) + "/" + item.tcid + "/" + item.configId,
{}
);
}, },
}, },
}; };
......
...@@ -24,6 +24,9 @@ ...@@ -24,6 +24,9 @@
.flex-wrap { .flex-wrap {
flex-wrap: wrap; flex-wrap: wrap;
} }
.flex-noShark {
flex-shrink: 0;
}
.margin { .margin {
margin: 10px; margin: 10px;
...@@ -114,6 +117,9 @@ ...@@ -114,6 +117,9 @@
.f36 { .f36 {
font-size: 36px; font-size: 36px;
} }
.f42 {
font-size: 42px;
}
.text-center { .text-center {
text-align: center; text-align: center;
} }
......
...@@ -423,6 +423,12 @@ ...@@ -423,6 +423,12 @@
<q-input standout v-model="parameters.Remark" input-style="height:170px;" type="textarea" placeholder="此欄位僅限資料備註。不在商品規範內的個人需求,不保證提供" maxlength="200" counter /> <q-input standout v-model="parameters.Remark" input-style="height:170px;" type="textarea" placeholder="此欄位僅限資料備註。不在商品規範內的個人需求,不保證提供" maxlength="200" counter />
</q-card> </q-card>
</q-form> </q-form>
<coupon
v-if="sumPrice>0&&productType"
:product-type="productType"
:current-price="sumPrice"
@change="changeDiscountHandler"
></coupon>
</div> </div>
<div class="relative-position" v-if="details" <div class="relative-position" v-if="details"
...@@ -510,15 +516,21 @@ ...@@ -510,15 +516,21 @@
<div class="col">{{CarObj.CarName}} x {{ chosenObj.Count }}</div> <div class="col">{{CarObj.CarName}} x {{ chosenObj.Count }}</div>
<div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</div> <div>{{details.CurrencyCode}} {{ moneyFormat(OrderDate.originalB2CPrice,2) }}</div>
</div> </div>
<!-- <hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <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="(chosenObj.Count)>0"> <div class="row q-mb-sm items-center">
<div class="col">總金額</div> <div class="col">優惠金額</div>
<div class="text-subtitle2 text-weight-bolder text-primary">{{details.CurrencyCode}} {{ moneyFormat(OrderDate.sumPrice,2) }}</div> <div
</div> --> class="text-subtitle2 text-weight-bolder text-teal"
v-if="parameters.DiscountsMoney > 0"
>
CNY - {{ moneyFormat(parameters.DiscountsMoney, 2) }}
</div>
<div class="text-grey-5" v-else>暫無優惠</div>
</div>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center" v-if="chosenObj.Count>0"> <div class="row q-mb-sm items-center" v-if="chosenObj.Count>0">
<div class="col">支付金額</div> <div class="col">支付金額</div>
<div class="text-h6 text-weight-bolder text-primary product-price">{{details.CurrencyCode}} {{ moneyFormat(OrderDate.sumPrice,2) }}</div> <div class="text-h6 text-weight-bolder text-primary product-price">{{details.CurrencyCode}} {{ moneyFormat(parameters.Money,2) }}</div>
</div> </div>
</div> </div>
<div class="text-right q-mt-md" v-if="step!=3"> <div class="text-right q-mt-md" v-if="step!=3">
...@@ -570,6 +582,9 @@ export default { ...@@ -570,6 +582,9 @@ export default {
}, },
data() { data() {
return { return {
CouponIds: [],
productType: null,
sumPrice: 0,//总金额
order: null,//订单信息 order: null,//订单信息
orderKey: "", orderKey: "",
isShowDialog: false, isShowDialog: false,
...@@ -608,6 +623,8 @@ export default { ...@@ -608,6 +623,8 @@ export default {
Unit_Price: '',//单价 Unit_Price: '',//单价
Num: '',//数量 Num: '',//数量
Money: 0.0, Money: 0.0,
DiscountsMoney: 0,//优惠金额
DiscountsIds: '',//优惠券id
Sex: 1,//1男2女 Sex: 1,//1男2女
SurName: '',//姓 SurName: '',//姓
Name: '',//名 Name: '',//名
...@@ -661,6 +678,19 @@ export default { ...@@ -661,6 +678,19 @@ export default {
this.getUserInfoHandler() this.getUserInfoHandler()
}, },
methods: { methods: {
changeDiscountHandler(coupon) {
if (coupon) {
this.parameters.DiscountsMoney = coupon.discountMoney;
this.CouponIds = [coupon.couponId];
this.parameters.DiscountsIds = this.CouponIds.join(",")
} else {
this.parameters.DiscountsMoney = 0;
this.CouponIds = [];
this.parameters.DiscountsIds = ''
}
this.parameters.Money = this.sumPrice - this.parameters.DiscountsMoney
this.$forceUpdate();
},
// 获取商品详情 // 获取商品详情
getCarData() { getCarData() {
this.$q.loading.show(); this.$q.loading.show();
...@@ -680,6 +710,14 @@ export default { ...@@ -680,6 +710,14 @@ export default {
} }
this.parameters.CarId = this.OrderDate.CarId this.parameters.CarId = this.OrderDate.CarId
this.parameters.OrderType = this.details.CarType this.parameters.OrderType = this.details.CarType
//13接机 14送机 12包车
if(this.parameters.OrderType==1){
this.productType = 13
}else if(this.parameters.OrderType==2){
this.productType = 14
}else if(this.parameters.OrderType==3){
this.productType = 12
}
} else { } else {
this.$q.notify({ this.$q.notify({
type: "negative", type: "negative",
...@@ -711,6 +749,7 @@ export default { ...@@ -711,6 +749,7 @@ export default {
this.parameters.Unit_Price = this.OrderDate.originalB2CPrice this.parameters.Unit_Price = this.OrderDate.originalB2CPrice
this.parameters.Num = this.chosenObj.Count this.parameters.Num = this.chosenObj.Count
this.parameters.Money = this.OrderDate.sumPrice this.parameters.Money = this.OrderDate.sumPrice
this.sumPrice = this.OrderDate.sumPrice
} }
} }
} }
...@@ -780,15 +819,7 @@ export default { ...@@ -780,15 +819,7 @@ export default {
}) })
}, },
AddOrderInfo(ErpOrderId){ AddOrderInfo(ErpOrderId){
let GoodsType = null
//13接机 14送机 12包车
if(this.parameters.OrderType==1){
GoodsType = 13
}else if(this.parameters.OrderType==2){
GoodsType = 14
}else if(this.parameters.OrderType==3){
GoodsType = 12
}
this.apipost( this.apipost(
"AddOrderInfo_post", "AddOrderInfo_post",
{ {
...@@ -799,10 +830,10 @@ export default { ...@@ -799,10 +830,10 @@ export default {
GoodsId: this.parameters.ProductId,//商品id GoodsId: this.parameters.ProductId,//商品id
GoodsName: this.details.Name,//商品名称 GoodsName: this.details.Name,//商品名称
GoodsPic: this.details.ImageList[0],//商品图片 GoodsPic: this.details.ImageList[0],//商品图片
GoodsType: GoodsType,//商品类型(见枚举) 12包车 13 接机 14送机 GoodsType: this.productType,//商品类型(见枚举) 12包车 13 接机 14送机
OrderMake: this.parameters.OrderDate,//订单摘要(例如出行时间) OrderMake: this.parameters.OrderDate,//订单摘要(例如出行时间)
TotalPrice: this.parameters.Money,//总价格 TotalPrice: this.parameters.Money,//总价格
PreferentialPrice: 0,// 优惠总金额 PreferentialPrice: this.parameters.DiscountsMoney,// 优惠总金额
ErpOrderId: ErpOrderId,//erp订单id ErpOrderId: ErpOrderId,//erp订单id
Country: this.userInfo.Country,//国家id Country: this.userInfo.Country,//国家id
PlatformTax: 0,//平台税金默认0 PlatformTax: 0,//平台税金默认0
...@@ -821,22 +852,14 @@ export default { ...@@ -821,22 +852,14 @@ export default {
}) })
}, },
goPayHandler(pay){ goPayHandler(pay){
let key = this.$md5(JSON.stringify(pay)) let pickuporderCars = localStorage.getItem("pickuporderCars");
let pays = localStorage.getItem('pays') pickuporderCars = pickuporderCars ? JSON.parse(pickuporderCars) : [];
pays = pays?JSON.parse(pays):[] let i = pickuporderCars.findIndex((x) => x.key == this.orderKey);
pays.push({ if (i >= 0) {
key, pickuporderCars.splice(i, 1);
pay localStorage.setItem("pickuporderCars", JSON.stringify(pickuporderCars));
})
localStorage.setItem("pays",JSON.stringify(pays))
let pickuporderCars = localStorage.getItem('pickuporderCars')
pickuporderCars = pickuporderCars?JSON.parse(pickuporderCars):[]
let i = pickuporderCars.findIndex(x=>x.key==this.orderKey)
if(i>=0){
pickuporderCars.splice(i,1)
localStorage.setItem("pickuporderCars",JSON.stringify(pickuporderCars))
} }
this.CommonJump('/pay/'+key, {}); this.CommonJump("/pay/" + pay.OrderNo, {});
}, },
// 航班起飞抵达时间 // 航班起飞抵达时间
getTime(type){ getTime(type){
......
...@@ -920,13 +920,14 @@ export default { ...@@ -920,13 +920,14 @@ export default {
let arr = [] let arr = []
r.data.data.forEach(x=>{ r.data.data.forEach(x=>{
x.PriceList = x.PriceList.sort((a,b)=>{return a.Price-b.Price}) x.PriceList = x.PriceList.sort((a,b)=>{return a.Price-b.Price})
let MailingMoneyList = x.PriceList.sort((a,b)=>{return b.MailingMoney-a.MailingMoney})
let dataObj = { let dataObj = {
startDate: x.Date, startDate: x.Date,
originalB2CPrice: x.PriceList[0].Price, originalB2CPrice: x.PriceList[0].Price,
remainNum: 1, remainNum: 1,
Count: 1, Count: 1,
safeMoney: 0, safeMoney: 0,
MailingMoney: x.PriceList[0].MailingMoney, MailingMoney: MailingMoneyList[0].MailingMoney,
PriceList: x.PriceList, PriceList: x.PriceList,
} }
if(date.formatDate(Date.now(), 'YYYY-MM-DD')!=x.Date&&x.Date>date.formatDate(Date.now(), 'YYYY-MM-DD')){ if(date.formatDate(Date.now(), 'YYYY-MM-DD')!=x.Date&&x.Date>date.formatDate(Date.now(), 'YYYY-MM-DD')){
......
...@@ -171,6 +171,15 @@ ...@@ -171,6 +171,15 @@
</template> </template>
</q-input> </q-input>
</div> </div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.MailingAddress"
label="郵寄地址"
:rules="[(val) => !!val || '請輸郵寄地址']"
ref="MailingAddress"
></q-input>
</div>
<div :class="filedGuestWidth"> <div :class="filedGuestWidth">
<div class="row items-center q-mt-md"> <div class="row items-center q-mt-md">
<span>選擇性別:</span> <span>選擇性別:</span>
...@@ -270,11 +279,15 @@ ...@@ -270,11 +279,15 @@
</template> </template>
</div> </div>
</template> </template>
<div class="row q-mb-sm" v-if="parameters.MailingState==2&&parameters.MailingMoney>0">
<div class="col text-grey-6">邮寄费</div>
<div class="text-red">{{ moneyFormat(parameters.MailingMoney,2) }}</div>
</div>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" /> <hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center" v-if="parameters.MailingState==2&&parameters.MailingMoney>0">
<div class="col">邮寄费</div>
<div
class="text-subtitle2 text-weight-bolder text-grey-6"
>
CNY {{ moneyFormat(parameters.MailingMoney,2) }}
</div>
</div>
<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 <div
...@@ -362,7 +375,7 @@ ...@@ -362,7 +375,7 @@
OrderId: 0, OrderId: 0,
Money: 0.0, Money: 0.0,
DiscountsMoney: 0,//优惠金额 DiscountsMoney: 0,//优惠金额
CouponAllotIds: '', DiscountsIds: '',//优惠券id
Remark: '', Remark: '',
MailingState: '',//邮寄状态 1自取 2邮寄 MailingState: '',//邮寄状态 1自取 2邮寄
MailingAddress: '',//MailingState =2 填写邮寄 MailingAddress: '',//MailingState =2 填写邮寄
...@@ -409,11 +422,11 @@ ...@@ -409,11 +422,11 @@
if (coupon) { if (coupon) {
this.parameters.DiscountsMoney = coupon.discountMoney; this.parameters.DiscountsMoney = coupon.discountMoney;
this.CouponIds = [coupon.couponId]; this.CouponIds = [coupon.couponId];
this.parameters.CouponAllotIds = this.CouponIds.join(",") this.parameters.DiscountsIds = this.CouponIds.join(",")
} else { } else {
this.parameters.DiscountsMoney = 0; this.parameters.DiscountsMoney = 0;
this.CouponIds = []; this.CouponIds = [];
this.parameters.CouponAllotIds = '' this.parameters.DiscountsIds = ''
} }
this.parameters.Money = this.sumPrice - this.parameters.DiscountsMoney this.parameters.Money = this.sumPrice - this.parameters.DiscountsMoney
this.$forceUpdate(); this.$forceUpdate();
...@@ -497,6 +510,12 @@ ...@@ -497,6 +510,12 @@
this.$refs.SurName.validate() this.$refs.SurName.validate()
this.$refs.Name.validate() this.$refs.Name.validate()
this.$refs.Mobile.validate() this.$refs.Mobile.validate()
if(this.parameters.MailingState==2){
this.$refs.MailingAddress.validate()
}else{
this.parameters.MailingAddress = ''
}
console.log(this.parameters,'----') console.log(this.parameters,'----')
let flag = true let flag = true
flag = await this.formValidateHandler('baseUserInfo') flag = await this.formValidateHandler('baseUserInfo')
......
...@@ -76,13 +76,40 @@ ...@@ -76,13 +76,40 @@
top: 20px; top: 20px;
left: 20px; left: 20px;
font-weight: bold; font-weight: bold;
font-size: 30px; font-size: 44px;
color: #fff; color: #fff;
text-shadow: rgb(0 0 0 / 50%) 2px 2px 5px;
}
@keyframes icon-bounce {
0% {
transform: translateY(0) scale(1.15,.5);
}
20% {
transform: translateY(-20px) scaleY(1.1);
}
50% {
transform: translateY(-5px) scale(1);
}
80% {
transform: translateY(-10px) scale(1);
}
100% {
transform: translateY(0) scale(1.15,.8);
}
}
.desktop-navs{
width:100px;
}
.desktop-navs:hover img {
animation-name: icon-bounce;
animation-duration: 1s;
animation-timing-function: ease-in;
animation-iteration-count: infinite;
} }
</style> </style>
<template> <template>
<div class="back"> <div class="content-page" >
<div v-if="detail" class="wapper"> <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" class="col f12 no-wrap q-mr-md"
...@@ -99,42 +126,102 @@ ...@@ -99,42 +126,102 @@
<!-- <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="flex relative"> <div class="relative row" :style="{'height':$q.platform.is.mobile?'200px':'370px'}">
<div class="absolute name">{{detail.AreaName}}</div> <div class="absolute name" style="z-index: 1;">{{detail.AreaName}}</div>
<img <q-img :src="detail.ImageList[0]" spinner-color="dark" class="col rounded-borders full-height" />
class="main" <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" />
:src="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;left: 20px;">
/> <q-icon name="iconfont iconzhinanzhen" size="16px"></q-icon>
<div class="card-img-box"> <span class="q-ml-sm">訪前須知</span>
</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)">
<q-icon name="iconfont iconimage" size="16px"></q-icon>
<span class="q-ml-sm">查看照片</span>
</div>
<!-- <div class="card-img-box">
<img <img
class="card-img q-mb-xs" class="card-img q-mb-xs"
:src="detail.ImageList[1] || detail.ImageList[0]" :src="detail.ImageList[1] || detail.ImageList[0]"
/> />
<div class="card-img" id="map"></div> <div class="card-img" id="map"></div>
</div> </div> -->
</div> </div>
<div class="flex justify-between q-mt-sm"> <div class="q-mt-md row justify-center">
<div v-for="item in navList" :key="item.img" class="nav-item" @click="navClick(item)"> <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 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 v-for="item in navList" :key="item.img" class="nav-item" @click="navClick(item)">
<img <img
class="nav-img" class="nav-img"
:src="require(`../../assets/img/${item.img}.png`)" :src="require(`../../assets/img/${item.img}.png`)"
/> />
<div class="f16 bold text-center">{{ item.title }}</div> <div class="f16 bold text-center">{{ item.title }}</div>
</div> </div> -->
</div> </div>
<div class="top-title">TOP榜单</div> <div v-if="detail.TopList.length>0">
<div>本地销量最好的商品</div> <div class="top-title">TOP榜单</div>
<div class="mt" style="width: 1200px; overflow-x: auto;"> <div>本地销量最好的商品</div>
<div style="width: 2920px">
<topCard @click.native="navToDetail(item)" v-for="item in detail.TopList" :data="item" :key="item.ID" /></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="300px"
flat
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">
<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>
</div> </div>
<div class="top-title">最新推荐</div> <div class="top-title">最新推荐</div>
<div>已售出商品的最新榜單</div> <div>已售出商品的最新榜單</div>
<div class="flex justify-between flex-wrap mt"> <!-- <div class="flex justify-between flex-wrap mt">
<likeCard @click.native="navToDetail(item)" v-for="item in detail.NewList" :data="item" :key="item.ID" /> <likeCard @click.native="navToDetail(item)" v-for="item in detail.NewList" :data="item" :key="item.ID" />
</div> -->
<q-carousel
v-model="newSilder"
transition-prev="slide-right"
transition-next="slide-left"
swipeable
animated
control-color="dark"
control-type="regular"
padding
arrows
height="400px"
flat
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">
<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>
<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>
</div> </div>
<div class="top-title">關於{{detail.AreaName}}</div> <city-info :city="detail"></city-info>
<!-- <div class="top-title">關於{{detail.AreaName}}</div>
<div class="flex justify-between"> <div class="flex justify-between">
<div style="width: 720px"> <div style="width: 720px">
{{detail.Introduction}} {{detail.Introduction}}
...@@ -143,14 +230,7 @@ ...@@ -143,14 +230,7 @@
<div id="baidu-map"></div> <div id="baidu-map"></div>
</div> </div>
</div> </div>
<!-- <div class="top-title">當地天氣</div> -->
<div class="mt pt"> <div class="mt pt">
<!-- <div class="flex">
<div class="time-item" v-for="item in 4" :key="item">
<div class="f16">12月-2月</div>
<div class="f26 bold">-12° -17°</div>
</div>
</div> -->
<div class="flex mt"> <div class="flex mt">
<div class="flex items-center time-item"> <div class="flex items-center time-item">
<img <img
...@@ -159,7 +239,6 @@ ...@@ -159,7 +239,6 @@
/> />
<div> <div>
<div class="f16 bold">時區 {{detail.TimeZones}}</div> <div class="f16 bold">時區 {{detail.TimeZones}}</div>
<!-- <div>-12° -17°</div> -->
</div> </div>
</div> </div>
<div class="flex items-center time-item"> <div class="flex items-center time-item">
...@@ -169,7 +248,6 @@ ...@@ -169,7 +248,6 @@
/> />
<div> <div>
<div class="f16 bold">貨幣 {{detail.CurrencyName}}</div> <div class="f16 bold">貨幣 {{detail.CurrencyName}}</div>
<!-- <div>-12° -17°</div> -->
</div> </div>
</div> </div>
<div class="flex items-center time-item"> <div class="flex items-center time-item">
...@@ -179,7 +257,6 @@ ...@@ -179,7 +257,6 @@
/> />
<div> <div>
<div class="f16 bold">電壓 {{detail.Voltage}}</div> <div class="f16 bold">電壓 {{detail.Voltage}}</div>
<!-- <div>-12° -17°</div> -->
</div> </div>
</div> </div>
<div class="flex time-item"> <div class="flex time-item">
...@@ -195,7 +272,7 @@ ...@@ -195,7 +272,7 @@
</div> </div>
</div> </div>
</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;">
...@@ -209,12 +286,19 @@ ...@@ -209,12 +286,19 @@
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 goodsStyle2 from '../../components/goods/style2.vue';
import cityInfo from "./components/city-info.vue";
export default { export default {
components: { topCard, likeCard, nearCity }, components: { topCard, likeCard, nearCity,goodsStyle1,goodsStyle2,cityInfo },
data() { data() {
return { return {
show: false, show: false,
detail: null, detail: null,
hotSilder:0,
newSilder:0,
topPageCount:4,
newPageCount:2,
navList: [ navList: [
{ {
title: "观光行程", title: "观光行程",
...@@ -236,6 +320,10 @@ export default { ...@@ -236,6 +320,10 @@ export default {
}; };
}, },
mounted() { mounted() {
if(this.$q.platform.is.mobile){
this.topPageCount=1
this.newPageCount=2
}
this.getData(); this.getData();
var newStartDate = new Date(); var newStartDate = new Date();
var newStartDateStr = this.formatDate( var newStartDateStr = this.formatDate(
...@@ -283,12 +371,12 @@ export default { ...@@ -283,12 +371,12 @@ export default {
); );
}, },
createMap() { createMap() {
let map = new BMapGL.Map("baidu-map"); // 创建地图实例 // let map = new BMapGL.Map("baidu-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, 8); // 初始化地图,设置中心点坐标和地图级别 // map.centerAndZoom(pointA, 8); // 初始化地图,设置中心点坐标和地图级别
this.addMarker(); // this.addMarker();
this.addLabel() // this.addLabel()
}, },
addMarker() { addMarker() {
let icon = require(`../../assets/img/marker.png`); let icon = require(`../../assets/img/marker.png`);
...@@ -330,12 +418,12 @@ export default { ...@@ -330,12 +418,12 @@ export default {
}); });
}, },
createTopMap() { createTopMap() {
let map = new BMapGL.Map("map"); // 创建地图实例 // let map = new BMapGL.Map("map"); // 创建地图实例
this.topMap = map; // this.topMap = 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, 8); // 初始化地图,设置中心点坐标和地图级别 // map.centerAndZoom(pointA, 8); // 初始化地图,设置中心点坐标和地图级别
this.addTopMarker() // this.addTopMarker()
this.addTopLabel() // this.addTopLabel()
}, },
addTopMarker() { addTopMarker() {
let icon = require(`../../assets/img/marker.png`); let icon = require(`../../assets/img/marker.png`);
...@@ -385,7 +473,15 @@ export default { ...@@ -385,7 +473,15 @@ export default {
map.centerAndZoom(pointA, 11); // 初始化地图,设置中心点坐标和地图级别 map.centerAndZoom(pointA, 11); // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom() map.enableScrollWheelZoom()
}) })
} },
showPreview(images, index = 0) {
this.$viewerApi({
options: {
initialViewIndex: index,
},
images,
});
},
}, },
}; };
</script> </script>
\ No newline at end of file
<template>
<div class="q-mt-lg">
<div class="top-title">{{ cityInfo.AreaName }}旅遊指南</div>
<div class="q-mt-md rounded-borders q-pa-lg bg-white light-shadow">
<div class="text-h6 text-weight-bold">關於{{ cityInfo.AreaName }}</div>
<div class="q-my-md f12 text-grey-9" v-html="cityInfo.Introduction"></div>
<q-separator class="q-my-xl" color="grey-2" />
<div class="text-h6 q-my-md text-weight-bold">實用訊息</div>
<div class="q-mt-md" :class="{'row justify-between q-mr-lg':$q.platform.is.desktop,'column q-gutter-md':$q.platform.is.mobile}">
<div>
<div class="f12 text-grey-9">時區:</div>
<div class="q-my-md text-subtitle1">{{ cityInfo.TimeZones }}</div>
<div class="text-body2 text-grey-6">出行注意時差,安排好休息時間哦</div>
</div>
<div>
<div class="f12 text-grey-9">貨幣:</div>
<div class="q-my-md text-subtitle1">{{ cityInfo.CurrencyName }}</div>
<div class="text-body2 text-grey-6">建議您出行錢準備充足的當地貨幣</div>
</div>
<div>
<div class="f12 text-grey-9">电压:</div>
<div class="q-my-md text-subtitle1">{{ cityInfo.Voltage }}</div>
</div>
<div>
<div class="f12 text-grey-9">最佳出行月份</div>
<div class="q-mt-md" v-for="(x,i) in cityInfo.BestTravelTimeList" :key="i">
<div class="q-mb-sm text-subtitle1">{{ x.Month }}</div>
<div class="text-body2 text-grey-6">{{ x.Description }}</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
props:['city'],
data() {
return {
cityInfo:{}
}
},
created() {
this.cityInfo = this.city
this.cityInfo.Introduction=this.cityInfo.Introduction.replace(/\n/g,"<br>")
},
}
</script>
<style>
.top-title {
font-size: 26px;
font-weight: bold;
color: #000000;
line-height: 44px;
}
</style>
\ No newline at end of file
...@@ -37,20 +37,26 @@ ...@@ -37,20 +37,26 @@
<template> <template>
<div> <div>
<div class="title">附近的城市</div> <div class="title">附近的城市</div>
<div class="flex"> <q-scroll-area
<div :thumb-style="thumbStyle"
@click="navToSearch(item)" style="height: 290px;width100%;"
class="relative card" >
v-for="item in cityList" <div class="row no-wrap">
:key="item.Id" <div
> @click="navToSearch(item)"
<img class="card-img" :src="item.ImageList[0]" /> class="relative card"
<div class="info"> v-for="item in cityList"
<div>{{ item.AreaName }}</div> :key="item.Id"
<!-- <div>10Km</div> --> >
<img class="card-img" :src="item.ImageList[0]" />
<div class="info">
<div class="text-subtitle1 text-weight-bold text-shadow">{{ item.AreaName }}</div>
<!-- <div>10Km</div> -->
</div>
</div> </div>
</div> </div>
</div>
</q-scroll-area>
<div class="flex flex-center"> <div class="flex flex-center">
<q-btn <q-btn
@click="navToSearch()" @click="navToSearch()"
...@@ -72,7 +78,15 @@ export default { ...@@ -72,7 +78,15 @@ export default {
}, },
}, },
data() { data() {
return {}; return {
thumbStyle: {
right: '2px',
borderRadius: '2px',
backgroundColor: '#027be3',
width: '2px',
opacity: '0'
}
};
}, },
methods: { methods: {
navToSearch(item) { navToSearch(item) {
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
} }
.card-img { .card-img {
width: 272px; width: 272px;
height: 162px; height: 162px;
border-radius: 10px; border-radius: 10px;
} }
.title { .title {
margin-top: 17px; margin-top: 17px;
...@@ -40,7 +40,7 @@ color: #36A1FA; ...@@ -40,7 +40,7 @@ color: #36A1FA;
</style> </style>
<template> <template>
<div class="card"> <div class="card">
<div class="relative"> <!-- <div class="relative">
<div class="address"> <div class="address">
<i <i
class="iconfont icondingweixiao q-icon notranslate" class="iconfont icondingweixiao q-icon notranslate"
...@@ -58,7 +58,8 @@ color: #36A1FA; ...@@ -58,7 +58,8 @@ color: #36A1FA;
class="card-img" class="card-img"
:src="data.ImgCover" :src="data.ImgCover"
/> />
</div> </div> -->
<div class="title ellipsis-2">{{data.Title}}</div> <div class="title ellipsis-2">{{data.Title}}</div>
<!-- <div> <!-- <div>
<i <i
......
...@@ -155,9 +155,9 @@ export default { ...@@ -155,9 +155,9 @@ export default {
}, },
goHomeHandler(){ goHomeHandler(){
this.loading=false this.loading=false
// setTimeout(() => { setTimeout(() => {
// location.href = location.origin; location.href = location.origin;
// }, 3000); }, 3000);
}, },
cancelPayHandler(){ cancelPayHandler(){
this.showPay='' this.showPay=''
......
...@@ -131,9 +131,9 @@ export default { ...@@ -131,9 +131,9 @@ export default {
}, },
goHomeHandler() { goHomeHandler() {
this.loading = false this.loading = false
// setTimeout(() => { setTimeout(() => {
// location.href = location.origin; location.href = location.origin;
// }, 3000); }, 3000);
} }
}, },
} }
......
<style lang="scss" scoped> <style lang="scss" scoped>
.avatar { .avatar {
width: 94px; width: 60px;
height: 94px; height: 60px;
background: #ffffff; background: #ffffff;
border: 2px solid #f0efef; border: 2px solid #f0efef;
border-radius: 50%; border-radius: 50%;
...@@ -9,52 +9,129 @@ ...@@ -9,52 +9,129 @@
display: block; display: block;
} }
.nav-item { .nav-item {
margin: 10px 28px; margin:0 10px;
padding: 10px; padding: 10px;
border-bottom: 1px solid #eee;
}
.nav-item:last-child {
border-bottom: none;
} }
.select { .select {
height: 41px; height: 41px;
border-radius: 8px; border-radius: 8px;
color: #ffffff; color: #ffffff;
}
.action-item {
width: 18px;
height: 18px;
display: inline-block;
margin-left: 10px;
}
.edit-info {
width: 12px;
height: 12px;
}
.padding-20 {
padding: 20px;
}
.card {
margin: 25px 15px;
border-radius: 15px;
padding: 10px;
}
.order-item {
width: 25%;
display: inline-block;
}
.order-img {
width: 26px;
height: 26px;
}
.go-play {
width: 36px;
height: 36px;
}
.play-box {
padding: 8px;
background: #FAF9F9;
border-radius: 9px;
margin: 10px 13px 0 13px;
} }
</style> </style>
<template> <template>
<div class="user-nav-box"> <div class="user-nav-box">
<div class="flex justify-between"> <div class="padding-20">
<span class="f42">个人中心</span> <div class="flex justify-between items-center">
<div> <span class="f20">个人中心</span>
<img /> <div>
<img /></div> <img class="action-item" src="../../assets/img/userCenter/help.png" />
<img @click="CommonJump('/setInfo')" class="action-item" src="../../assets/img/userCenter/set.png" />
</div>
</div>
<div class="flex items-center q-mt-md">
<div>
<img class="avatar" v-if="LoginUser.photo" :src="LoginUser.photo" />
<img class="avatar" v-else src="../../assets/img/avatar.png" />
</div>
<div class="q-ml-md">
<div class="f18">hello,开起你的旅程吧~</div>
<div @click="CommonJump('/setUserInfo')">
<img class="edit-info" src="../../assets/img/userCenter/edit.png" />
個人信息管理
</div>
</div>
</div>
</div> </div>
<div class="q-mt-lg"> <div class="bg-white card">
<div class="bg-white q-mt-xl q-pb-lg"> <div
class="order-item cursor-pointer"
@click="navigateTo(item.key)"
v-for="item in orderList"
:key="item.key"
:class="{ 'select bg-primary': selectKey === item.key }"
>
<div class="column flex-center">
<img class="order-img" :src="require(`../../assets/img/userCenter/${item.icon}.png`)" />
<div>{{ item.label }}</div>
</div>
<!-- <span class="text-primary">{{ item.label }}</span> -->
</div>
<div class="flex play-box q-mt-md">
<img class="go-play q-mr-md" src="../../assets/img/userCenter/set.png" />
<div class="f12">
<div>即將出行</div>
<div class="text-grey-6">[2023年3月6日]日本富士山尊享一日遊</div>
</div>
</div>
</div>
<div class="bg-white card">
<div <div
class="nav-item flex justify-between items-center cursor-pointer" class="nav-item flex justify-between items-center cursor-pointer"
@click="navigateTo(item.key)" @click="navigateTo(item.key)"
v-for="item in menuList" v-for="item in menuList"
:key="item.key" :key="item.key"
:class="{'select bg-primary': selectKey === item.key}"
> >
<div class="flex items-center"> <div class="flex items-center">
<i class="iconfont" :class="item.icon"></i> <i class="iconfont" :class="item.icon"></i>
<span class="q-ml-lg">{{ item.label }}</span> <span class="q-ml-lg">{{ item.label }}</span>
</div> </div>
<i class="iconfont iconpreviewright"></i>
<!-- <span class="text-primary">{{ item.label }}</span> --> <!-- <span class="text-primary">{{ item.label }}</span> -->
</div> </div>
</div> </div>
</div> <div class="bg-white card">
<div class="bg-white q-mt-lg q-py-lg">
<div <div
class="nav-item flex justify-between items-center cursor-pointer" class="nav-item flex justify-between items-center cursor-pointer"
@click="navigateTo(item.key)" @click="navigateTo(item.key)"
v-for="item in menuList2" v-for="item in menuList2"
:key="item.key" :key="item.key"
:class="{'select bg-primary': selectKey === item.key}"
> >
<div class="flex items-center"> <div class="flex items-center">
<i class="iconfont" :class="item.icon"></i> <i class="iconfont" :class="item.icon"></i>
<span class="q-ml-lg">{{ item.label }}</span> <span class="q-ml-lg">{{ item.label }}</span>
</div> </div>
<i class="iconfont iconpreviewright"></i>
<!-- <span class="text-primary">{{item.label}}</span> --> <!-- <span class="text-primary">{{item.label}}</span> -->
</div> </div>
</div> </div>
...@@ -64,8 +141,34 @@ color: #ffffff; ...@@ -64,8 +141,34 @@ color: #ffffff;
export default { export default {
data() { data() {
return { return {
selectKey: '', selectKey: "",
LoginUser: {}, LoginUser: {},
orderList: [
{
icon: "order-pay",
key: "/order?type=1",
label: "待付款",
number: "",
},
{
icon: "order-use",
key: "/order?type=2",
label: "待出行",
number: "",
},
{
icon: "order-finish",
key: "/order?type=3",
label: "已完成",
number: "",
},
{
icon: "order-all",
key: "/order?type=0",
label: "全部订单",
number: "",
},
],
menuList: [ menuList: [
{ {
icon: "iconqianbao", icon: "iconqianbao",
...@@ -73,12 +176,6 @@ export default { ...@@ -73,12 +176,6 @@ export default {
label: "可用優惠券", label: "可用優惠券",
number: "", number: "",
}, },
{
icon: "iconorder",
key: "/order",
label: "訂單",
number: "",
},
// { // {
// icon: "iconmessage", // icon: "iconmessage",
// key: "", // key: "",
...@@ -111,24 +208,24 @@ export default { ...@@ -111,24 +208,24 @@ export default {
label: "登录方式管理", label: "登录方式管理",
number: "", number: "",
}, },
{ // {
icon: "iconset", // icon: "iconset",
key: "/setInfo", // key: "/setInfo",
label: "账户设置", // label: "账户设置",
number: "", // number: "",
}, // },
], ],
}; };
}, },
mounted() { mounted() {
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"));
} }
}, },
methods: { methods: {
navigateTo(route) { navigateTo(route) {
this.selectKey= route this.selectKey = route;
this.CommonJump(route, {}); this.CommonJump(route, {});
}, },
}, },
......
<style lang="scss" scoped> <style lang="scss" scoped>
.form-item { .form-item {
max-width: 320px; max-width: 320px;
margin: 10px;
} }
.content { .content {
width: 900px; width: 900px;
...@@ -72,8 +71,8 @@ ...@@ -72,8 +71,8 @@
width: 120px; width: 120px;
} }
.nav-item { .nav-item {
width: 100px; width: 25%;
margin: 0 10px; max-width: 100px;
text-align: center; text-align: center;
} }
.border-bottom { .border-bottom {
...@@ -89,11 +88,10 @@ ...@@ -89,11 +88,10 @@
} }
</style> </style>
<template> <template>
<div class="content q-ma-lg bg-white"> <div class="bg-white" :class="$q.platform.is.desktop ? 'q-ma-lg content': 'full-width'">
<div class="flex justify-between"> <div class="flex justify-between margin">
<div> <div :class="$q.platform.is.desktop ? 'form-item': 'full-width'">
<q-input <q-input
class="form-item"
placeholder="輸入商品名稱/訂單號" placeholder="輸入商品名稱/訂單號"
v-model="GoodsName" v-model="GoodsName"
clearable clearable
...@@ -112,7 +110,8 @@ ...@@ -112,7 +110,8 @@
<div :class="orderStatus === item.ID ? 'border-bottom' : ''"></div> <div :class="orderStatus === item.ID ? 'border-bottom' : ''"></div>
</div> </div>
</div> </div>
<div> <!-- pc -->
<div v-if="$q.platform.is.desktop">
<div class="card" v-for="item in orderList" :key="item.id"> <div class="card" v-for="item in orderList" :key="item.id">
<div class="flex card-title justify-between"> <div class="flex card-title justify-between">
<div class="flex"> <div class="flex">
...@@ -159,8 +158,52 @@ ...@@ -159,8 +158,52 @@
</div> </div>
</div> </div>
</div> </div>
<noneData v-show="!orderList.length"></noneData>
</div> </div>
<!-- mobile -->
<div v-else>
<div class="card" v-for="item in orderList" :key="item.id">
<div class="flex card-title justify-between">
<div class="flex">
<span><span class="text-grey-6">订单号:</span>{{ item.orderNo }}</span>
</div>
<span class="text-grey-6">{{ item.orderStatusStr }}</span>
</div>
<div class="q-pa-md">
<div class="flex no-wrap full-width">
<img class="product-img mr flex-noShark" :src="item.goodsPic" />
<div>
<div class="ellipsis-2">{{ item.goodsName }}</div>
<div>x1</div>
</div>
</div>
<div>
<!-- <div>
<i class="iconfont iconpeople1"></i>{{ item.surName
}} {{ item.name }}
</div> -->
<div>
<div class="f18 text-right">CNY{{ item.totalPrice }}</div>
<!-- <div>{{ item.payTypeStr }}</div> -->
</div>
<!-- <div>
<div class="primary">{{item.orderStatusStr}}</div>
<div class="q-mt-sm cursor-pointer">订单详情</div>
</div> -->
<div class="flex justify-end q-mt-sm">
<q-btn
color="primary"
@click="cancalOrder(item)"
unelevated
outline
size="sm"
label="取消订单">
</q-btn>
</div>
</div>
</div>
</div>
</div>
<noneData v-show="!orderList.length"></noneData>
</div> </div>
</template> </template>
...@@ -181,6 +224,10 @@ export default { ...@@ -181,6 +224,10 @@ export default {
}; };
}, },
mounted() { mounted() {
this.type = this.$route.query.type
if(this.type) {
this.orderStatus = Number(this.type)
}
this.getOrderEnums(); this.getOrderEnums();
this.getOrderList(); this.getOrderList();
}, },
......
...@@ -125,9 +125,27 @@ ...@@ -125,9 +125,27 @@
:rules="[(val) => !!val || '请输入全名']" :rules="[(val) => !!val || '请输入全名']"
></q-input> ></q-input>
</div> </div>
<div class="col">
<div class="title">國家/地區</div>
<q-select
@input="changeCountry"
emit-value
map-options
ref="CountryId"
square
outlined
option-value="ID"
option-label="Name"
class="form-item"
v-model="form.CountryId"
:options="countList"
placeholder="Filled"
:rules="[(val) => Boolean(val) || '请选择國家/地區']"
/>
</div>
</div> </div>
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'"> <div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col"> <!-- <div class="col">
<div class="title">選擇手機區號</div> <div class="title">選擇手機區號</div>
<q-select <q-select
ref="AreaCode" ref="AreaCode"
...@@ -143,7 +161,7 @@ ...@@ -143,7 +161,7 @@
placeholder="選擇手機區號" placeholder="選擇手機區號"
:rules="[(val) => Boolean(val) || '请選擇手機區號']" :rules="[(val) => Boolean(val) || '请選擇手機區號']"
/> />
</div> </div> -->
<div class="col"> <div class="col">
<div class="title">手機號碼</div> <div class="title">手機號碼</div>
<q-input <q-input
...@@ -153,27 +171,12 @@ ...@@ -153,27 +171,12 @@
v-model="form.Mobile" v-model="form.Mobile"
outlined outlined
:rules="[(val) => !!val || '请输入手機號碼']" :rules="[(val) => !!val || '请输入手機號碼']"
></q-input> >
</div> <template v-slot:prepend>
</div> <div class="text-subtitle2">
{{ form.PhoneCountryStr }}
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'"> </div>
<div class="col"> </template></q-input>
<div class="title">國家/地區</div>
<q-select
emit-value
map-options
ref="CountryId"
square
outlined
option-value="ID"
option-label="Name"
class="form-item"
v-model="form.CountryId"
:options="countList"
placeholder="Filled"
:rules="[(val) => Boolean(val) || '请选择國家/地區']"
/>
</div> </div>
<div class="col"> <div class="col">
<div class="title">城市</div> <div class="title">城市</div>
...@@ -253,12 +256,6 @@ export default { ...@@ -253,12 +256,6 @@ export default {
this.getCountryInfo(); this.getCountryInfo();
}, },
methods: { methods: {
addAddress() {
this.isShowDialog = true
this.form = {
Name: "",
Mobile: "",}
},
getCountryInfo() { getCountryInfo() {
this.apipost( this.apipost(
"GetCountryInfo_post", "GetCountryInfo_post",
...@@ -268,6 +265,17 @@ export default { ...@@ -268,6 +265,17 @@ export default {
const { phoneCountList, countList } = res.data.data; const { phoneCountList, countList } = res.data.data;
this.countList = countList; this.countList = countList;
this.phoneCountList = phoneCountList; this.phoneCountList = phoneCountList;
this.form.CountryId = this.countList[0].ID;
this.changeCountry(this.form.CountryId);
this.phoneCountList.forEach((x) => {
let temp = this.countList.find((y) => y.ID == x.ID);
x.EnName = `${temp.EnName}(${x.PhoneCode})`;
});
this.form.CountryId =
this.form.CountryId == 0
? this.countList[0].ID
: this.form.CountryId;
this.changeCountry(this.form.CountryId);
} else { } else {
// this.$notify(res.data.message); // this.$notify(res.data.message);
this.$q.notify({ this.$q.notify({
...@@ -281,6 +289,18 @@ export default { ...@@ -281,6 +289,18 @@ export default {
null null
); );
}, },
changeCountry(id) {
this.form.AreaCode = this.phoneCountList.find(
(x) => x.ID == id
).PhoneCode;
this.form.PhoneCountryStr = "+" + this.form.AreaCode;
},
addAddress() {
this.isShowDialog = true
this.form = {
Name: "",
Mobile: "",}
},
changeCouponType(item) { changeCouponType(item) {
this.selectedKey = item; this.selectedKey = item;
}, },
...@@ -288,7 +308,6 @@ export default { ...@@ -288,7 +308,6 @@ export default {
this.formHasError = false; this.formHasError = false;
const verifyArr = [ const verifyArr = [
"Name", "Name",
"AreaCode",
"Mobile", "Mobile",
"CountryId", "CountryId",
"CityName", "CityName",
...@@ -296,17 +315,13 @@ export default { ...@@ -296,17 +315,13 @@ export default {
"PostalCode", "PostalCode",
]; ];
verifyArr.forEach((item) => { verifyArr.forEach((item) => {
console.log("this.$refs[item]", this, item, this.$refs[item]);
this.$refs[item].validate(); this.$refs[item].validate();
}); });
verifyArr.forEach((item) => { verifyArr.forEach((item) => {
console.log("item", item);
if (this.$refs[item].hasError) { if (this.$refs[item].hasError) {
console.log("item", item);
this.formHasError = true; this.formHasError = true;
} }
}); });
console.log("this.formHasError", this.formHasError, this.form);
if (this.formHasError) { if (this.formHasError) {
return; return;
} }
...@@ -335,7 +350,6 @@ export default { ...@@ -335,7 +350,6 @@ export default {
); );
}, },
editUser(item) { editUser(item) {
console.log("editUser", item);
this.form = {...item}; this.form = {...item};
this.form.AreaCode = Number(this.form.AreaCode) this.form.AreaCode = Number(this.form.AreaCode)
this.form.IsDefault = this.form.IsDefault === 1 this.form.IsDefault = this.form.IsDefault === 1
......
...@@ -7,11 +7,10 @@ ...@@ -7,11 +7,10 @@
max-width: 940px; max-width: 940px;
} }
.tips { .tips {
height: 42px;
background: #f5f5f5; background: #f5f5f5;
border-radius: 8px; border-radius: 8px;
padding: 0 35px; padding: 10px 35px;
line-height: 42px; line-height: 22px;
} }
::v-deep .q-field__control { ::v-deep .q-field__control {
height: 40px; height: 40px;
...@@ -28,99 +27,105 @@ ...@@ -28,99 +27,105 @@
.title { .title {
margin-top: 20px; margin-top: 20px;
margin-bottom: 10px; margin-bottom: 10px;
margin-left: 10px;
} }
</style> </style>
<template> <template>
<div class="content q-ma-lg bg-white q-pa-lg"> <div
<div class="tips"> class="bg-white"
個人信息<span class="text-grey-6" :class="$q.platform.is.desktop ? 'content q-ma-lg' : 'full-width'"
>(以下信息仅用于帮助你在支付时自动填写你的个人资料,你的信息将会安全地被印象保存且不会公开)</span >
> <div class="q-ma-lg">
</div> <div class="tips q-mb-lg">
<div> 個人信息<span class="text-grey-6"
<form @submit.prevent.stop="submit" class="q-gutter-md"> >(以下信息仅用于帮助你在支付时自动填写你的个人资料,你的信息将会安全地被印象保存且不会公开)</span
>
</div>
<div> <div>
<div class="row"> <form @submit.prevent.stop="submit" class="q-gutter-md">
<div class="col"> <div>
<div class="title"></div> <div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<q-input <div class="col">
class="form-item" <div class="title"></div>
v-model="form.Surname" <q-input
outlined class="form-item"
ref="Surname" v-model="form.Surname"
:rules="[(val) => !!val || '请输入姓氏']" outlined
></q-input> ref="Surname"
</div> :rules="[(val) => !!val || '请输入姓氏']"
<div class="col"> ></q-input>
<div class="title"></div> </div>
<q-input <div class="col">
ref="Name" <div class="title"></div>
class="form-item" <q-input
v-model="form.Name" ref="Name"
outlined class="form-item"
:rules="[(val) => !!val || '请输入名字']" v-model="form.Name"
></q-input> outlined
</div> :rules="[(val) => !!val || '请输入名字']"
</div> ></q-input>
<div class="row"> </div>
<div class="col"> </div>
<div class="title">姓氏(需與旅遊證件一致)</div> <div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<q-input <div class="col">
class="form-item" <div class="title">姓氏(需與旅遊證件一致)</div>
v-model="form.EnName" <q-input
outlined class="form-item"
ref="EnName" v-model="form.EnName"
:rules="[(val) => !!val || '请输入姓氏(需與旅遊證件一致)']" outlined
></q-input> ref="EnName"
</div> :rules="[(val) => !!val || '请输入姓氏(需與旅遊證件一致)']"
<div class="col"> ></q-input>
<div class="title">名字(需與旅遊證件一致)</div> </div>
<q-input <div class="col">
ref="EnSurname" <div class="title">名字(需與旅遊證件一致)</div>
class="form-item" <q-input
v-model="form.EnSurname" ref="EnSurname"
outlined class="form-item"
:rules="[(val) => !!val || '请输入名字(需與旅遊證件一致)']" v-model="form.EnSurname"
></q-input> outlined
</div> :rules="[(val) => !!val || '请输入名字(需與旅遊證件一致)']"
</div> ></q-input>
<div class="row"> </div>
<div class="col"> </div>
<div class="title">居住國家/地區</div> <div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<q-select <div class="col">
emit-value <div class="title">居住國家/地區</div>
map-options <q-select
ref="Country" @input="changeCountry"
square emit-value
outlined map-options
option-value="ID" ref="Country"
option-label="Name" square
class="form-item" outlined
v-model="form.Country" option-value="ID"
:options="countList" option-label="Name"
:rules="[(val) => Boolean(val) || '请选择居住國家/地區']" class="form-item"
/> v-model="form.Country"
</div> :options="countList"
<div class="col"> :rules="[(val) => Boolean(val) || '请选择居住國家/地區']"
<div class="title">稱謂</div> />
<q-select </div>
emit-value <div class="col">
map-options <div class="title">稱謂</div>
ref="Appellation" <q-select
square emit-value
outlined map-options
class="form-item" ref="Appellation"
option-value="ID" square
option-label="Name" outlined
v-model="form.Appellation" class="form-item"
:options="AppellationList" option-value="ID"
:rules="[(val) => Boolean(val) || '请选择稱謂']" option-label="Name"
/> v-model="form.Appellation"
</div> :options="AppellationList"
</div> :rules="[(val) => Boolean(val) || '请选择稱謂']"
/>
</div>
</div>
<div class="row"> <div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<div class="col"> <!-- <div class="col">
<div class="title">國家/地區代碼</div> <div class="title">國家/地區代碼</div>
<q-select <q-select
emit-value emit-value
...@@ -135,60 +140,69 @@ ...@@ -135,60 +140,69 @@
:options="phoneCountList" :options="phoneCountList"
:rules="[(val) => Boolean(val) || '请选择國家/地區代碼']" :rules="[(val) => Boolean(val) || '请选择國家/地區代碼']"
/> />
</div> -->
<div class="col">
<div class="title">電話(首次需驗證)</div>
<q-input
ref="Moblie"
class="form-item"
v-model="form.Moblie"
outlined
:rules="[(val) => !!val || '请输入電話(首次需驗證)']"
>
<template v-slot:prepend>
<div class="text-subtitle2">
{{ form.PhoneCountryStr }}
</div>
</template></q-input
>
</div>
<div class="col">
<div class="title">出生日期</div>
<q-input
ref="BirthDate"
class="form-item"
v-model="form.BirthDate"
outlined
mask="date"
:rules="[(val) => !!val || '请选择出生日期']"
>
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qS1DateProxy">
<q-date
mask="YYYY-MM-DD"
:title="$t('search_date_begin')"
subtitle="選擇"
v-model="form.BirthDate"
@input="() => $refs.qS1DateProxy.hide()"
/>
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</div>
</div>
<div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<div class="col">
<div class="title">電子郵件(接收订单确认邮件)</div>
<q-input
ref="Mailbox"
class="form-item"
v-model="form.Mailbox"
outlined
:rules="[
(val) => !!val || '请输入電子郵件(接收订单确认邮件)',
]"
></q-input>
</div>
</div>
<div>
<q-btn color="primary" type="submit" unelevated label="保存" />
</div>
</div> </div>
<div class="col"> </form>
<div class="title">電話(首次需驗證)</div>
<q-input
ref="Moblie"
class="form-item"
v-model="form.Moblie"
outlined
:rules="[(val) => !!val || '请输入電話(首次需驗證)']"
></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">出生日期</div>
<q-input
ref="BirthDate"
class="form-item"
v-model="form.BirthDate"
outlined
mask="date"
:rules="[(val) => !!val || '请选择出生日期']"
>
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qS1DateProxy">
<q-date
mask="YYYY-MM-DD"
:title="$t('search_date_begin')"
subtitle="選擇"
v-model="form.BirthDate"
@input="() => $refs.qS1DateProxy.hide()"
/>
</q-popup-proxy>
</q-icon>
</template>
</q-input>
</div>
<div class="col">
<div class="title">電子郵件(接收订单确认邮件)</div>
<q-input
ref="Mailbox"
class="form-item"
v-model="form.Mailbox"
outlined
:rules="[(val) => !!val || '请输入電子郵件(接收订单确认邮件)']"
></q-input>
</div>
</div>
<div>
<q-btn color="primary" type="submit" unelevated label="保存" />
</div>
</div> </div>
</form>
</div> </div>
</div> </div>
</template> </template>
...@@ -215,7 +229,6 @@ export default { ...@@ -215,7 +229,6 @@ export default {
}, },
mounted() { mounted() {
this.userInfo = JSON.parse(window.localStorage.getItem("b2bUser")); this.userInfo = JSON.parse(window.localStorage.getItem("b2bUser"));
console.log("getUserInfo", this.userInfo);
this.getUserInfo(); this.getUserInfo();
this.getCountryInfo(); this.getCountryInfo();
this.GetAppellationEnum(); this.GetAppellationEnum();
...@@ -230,8 +243,14 @@ export default { ...@@ -230,8 +243,14 @@ export default {
const { phoneCountList, countList } = res.data.data; const { phoneCountList, countList } = res.data.data;
this.countList = countList; this.countList = countList;
this.phoneCountList = phoneCountList; this.phoneCountList = phoneCountList;
this.phoneCountList.forEach((x) => {
let temp = this.countList.find((y) => y.ID == x.ID);
x.EnName = `${temp.EnName}(${x.PhoneCode})`;
});
if (this.form.Country) {
this.changeCountry(this.form.Country);
}
} else { } else {
// this.$notify(res.data.message);
this.$q.notify({ this.$q.notify({
type: "negative", type: "negative",
message: res.data.message, message: res.data.message,
...@@ -243,6 +262,12 @@ export default { ...@@ -243,6 +262,12 @@ export default {
null null
); );
}, },
changeCountry(id) {
this.form.PhoneCountry = this.phoneCountList.find(
(x) => x.ID == id
).PhoneCode;
this.form.PhoneCountryStr = "+" + this.form.PhoneCountry;
},
GetAppellationEnum() { GetAppellationEnum() {
this.apipost( this.apipost(
"GetAppellationEnum_post", "GetAppellationEnum_post",
...@@ -272,6 +297,9 @@ export default { ...@@ -272,6 +297,9 @@ export default {
(res) => { (res) => {
if (res.data.resultCode == 1) { if (res.data.resultCode == 1) {
this.form = res.data.data; this.form = res.data.data;
if (this.phoneCountList.length) {
this.changeCountry(this.form.Country);
}
} else { } else {
// this.$notify(res.data.message); // this.$notify(res.data.message);
this.$q.notify({ this.$q.notify({
...@@ -286,7 +314,7 @@ export default { ...@@ -286,7 +314,7 @@ export default {
); );
}, },
submitUserInfo() { submitUserInfo() {
let params = {...this.form} let params = { ...this.form };
// params.Appellation = params.Appellation.ID // params.Appellation = params.Appellation.ID
// params.Country = params.Country.ID // params.Country = params.Country.ID
// params.PhoneCountry = params.PhoneCountry.ID // params.PhoneCountry = params.PhoneCountry.ID
...@@ -312,23 +340,28 @@ export default { ...@@ -312,23 +340,28 @@ export default {
} }
}, },
null null
) ; );
}, },
submit() { submit() {
this.formHasError = false; this.formHasError = false;
const verifyArr = ["Surname", "Name", "BirthDate", "Appellation", "EnName", "EnSurname", "Country", "Moblie"]; const verifyArr = [
"Surname",
"Name",
"BirthDate",
"Appellation",
"EnName",
"EnSurname",
"Country",
"Moblie",
];
verifyArr.forEach((item) => { verifyArr.forEach((item) => {
console.log('this.$refs[item]', this, item, this.$refs[item])
this.$refs[item].validate(); this.$refs[item].validate();
}); });
verifyArr.forEach((item) => { verifyArr.forEach((item) => {
console.log('item', item)
if (this.$refs[item].hasError) { if (this.$refs[item].hasError) {
console.log('item', item)
this.formHasError = true; this.formHasError = true;
} }
}); });
console.log('this.formHasError', this.formHasError, this.form)
if (this.formHasError) { if (this.formHasError) {
return; return;
} }
......
const ListProductTypeEnum = Object.freeze({
TRIP: {
value: 1,
desc: '線路旅遊'
},
SCENIC: {
value: 2,
desc: '景點門票'
},
HOTEL: {
value: 3,
desc: '酒店住宿'
},
CAR: {
value: 4,
desc: '目的地用車'
},
JALAN: {
value: 5,
desc: '酒店住宿'
},
})
export default ListProductTypeEnum
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment