Commit 494f6f50 authored by 罗超's avatar 罗超

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

# Conflicts:
#	src/pages/usercenter/setUserInfo.vue
parents ba5b6011 af342763
......@@ -10,35 +10,47 @@
flat
/>
</div>
<template v-if="p&&p.startDate">
<div class="text-grey-6 f12 q-my-md">選擇門票類型</div>
<div class="row wrap">
<div v-for="(x,i) in dataList.TicketList" :key="i">
<q-chip size="14px" clickable @click="handleSelect(x)"
:text-color="selectedObj&&selectedObj.Id==x.Id?'white':'dark'"
:color="selectedObj&&selectedObj.Id==x.Id?'primary':'grey-3'" square>{{ x.TicketName }}</q-chip>
<q-chip v-if="x.originalB2CPrice>0" size="14px" clickable @click="handleSelect(x,1)"
:text-color="x.checked?'white':'dark'"
:color="x.checked?'primary':'grey-3'" square>{{ x.TicketName }}</q-chip>
</div>
</div>
<div class="text-grey-6 f12 q-my-md">選擇數量</div>
<div class="row items-end">
<div class="col" :class="{'column':$q.platform.is.mobile}">
<div v-if="selectedObj">
<span class="text-subtitle2 text-weight-bold">{{selectedObj.TicketName}}</span>
<span class="text-grey-6 f12 q-ml-sm"></span>(1人/票)</span>
</template>
<div class="text-grey-6 f12 q-my-md">選擇取票方式</div>
<div class="row no-wrap">
<div v-for="(x,i) in takeList" :key="i">
<q-chip size="14px" clickable @click="handleSelect(x,2)"
:text-color="MailingStateObj&&MailingStateObj.Id==x.Id?'white':'dark'"
:color="MailingStateObj&&MailingStateObj.Id==x.Id?'primary':'grey-3'" square>{{ x.Name }}</q-chip>
</div>
</div>
<div v-if="dataList.TicketList.map(x=>x.checked).indexOf(true)!=-1" class="text-grey-6 f12 q-my-md">選擇數量</div>
<template v-for="(x,i) in dataList.TicketList">
<div class="row items-end q-mb-md">
<div v-if="x.checked" :key="i" class="col" :class="{'column':$q.platform.is.mobile}"
>
<div>
<span class="text-subtitle2 text-weight-bold">{{x.TicketName}}</span>
<span class="text-grey-6 f12 q-ml-sm"></span></span>
</div>
<div v-if="$q.platform.is.mobile">
<span class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.originalB2CPrice, 0) }} /每票
CNY {{ moneyFormat(x.originalB2CPrice, 0) }} /每张
</span>
</div>
</div>
<div class="row items-end">
<div class="row items-end" v-if="x.checked">
<span v-if="$q.platform.is.desktop" class="text-grey-7 product-price" style="font-size: 13px">
CNY {{ moneyFormat(p.originalB2CPrice, 0) }} /每票
CNY {{ moneyFormat(x.originalB2CPrice, 0) }} /每张
</span>
<q-input
style="width: 150px"
@input="changePeople"
v-model="chosenObj.Count"
v-model="x.Count"
class="col"
:class="{
'q-ml-sm q-px-none q-pl-none': $q.platform.is.desktop,
......@@ -56,7 +68,7 @@
class="q-px-none"
flat
icon="remove"
@click="addPeople('Count', -1)"
@click="addPeople(x,'Count', -1)"
/>
</template>
<template v-slot:append>
......@@ -66,14 +78,24 @@
class="q-px-none"
flat
icon="add"
@click="addPeople('Count', 1)"
@click="addPeople(x,'Count', 1)"
/>
</template>
</q-input>
</div>
</div>
</template>
<div v-if="MailingStateObj&&MailingStateObj.Id==1"
class="row items-end fz14 text-grey-6 f12 q-my-md q-pt-lg">
<span>取票地址</span>
<span class="text-primary q-ml-lg">{{dataList.SelffetchAddress}}</span>
</div>
</div>
<div class="q-mt-md q-pt-md" style="border-top: 1px dashed #eee">
<div class="row items-center fz12" v-if="MailingStateObj&&MailingStateObj.Id==2&&p&&p.MailingMoney>0">
<span class="text-subtitle2 text-grey-8 col">邮寄费</span>
<span class="text-primary q-ml-lg">{{p.MailingMoney}}</span>
</div>
<div class="row items-center">
<span class="text-subtitle2 text-grey-6 col">總金額</span>
<span class="text-h6 text-primary product-price">CNY {{ moneyFormat(sumPrice,0) }}</span>
......@@ -87,12 +109,12 @@
</span>
<span class="f12 text-negative"
:class="{'q-mr-lg':$q.platform.is.desktop}"
v-if="p.startDate&&!selectedObj">
{{`請選擇上面的門票類型`}}
v-if="p.startDate&&(!selectedObj||!MailingStateObj)">
{{`請選擇上面的門票類型、取票方式`}}
</span>
</span>
<q-btn color="primary" label="立即訂購" unelevated class="q-px-lg"
:disable="sumPrice==0||!selectedObj"
:disable="!p.startDate||sumPrice==0||!selectedObj||!MailingStateObj"
@click="goOrderHandler"/>
</div>
......@@ -108,9 +130,14 @@ export default {
price: {
handler(n, o) {
this.p = n;
if(n&&n.startDate){
this.chosenObj.startDate = n.startDate;
this.dataList.TicketList.forEach(x=>{
x.originalB2CPrice = 0
this.p.PriceList.forEach(y=>{
if(x.Id==y.TicketId){
x.originalB2CPrice=y.Price
}
})
})
this.calcMoney()
},
......@@ -120,7 +147,6 @@ export default {
dataList: {
handler(n, o) {
this.dataList = n;
},
deep: true,
immediate: true
......@@ -133,26 +159,30 @@ export default {
sumPrice:0,
selectedObj: null,
priceList: [],
takeList:[
{Name:'自行取票',Id:1},
{Name:'邮寄票券',Id:2},
],
MailingStateObj: null,
};
},
created() {
this.initModel();
if(this.p.startDate){
this.chosenObj.startDate = this.p.startDate;
this.calcMoney()
this.getCarPriceData2()
}
},
methods: {
goOrderHandler(){
let order = {
CouponsId: this.configId,
TicketId: this.selectedObj.Id,
MailingState: this.MailingStateObj.Id,
Month: this.Month,
startDate: this.p.startDate,
MailingMoney: this.p.MailingMoney,
originalB2CPrice: this.p.originalB2CPrice,
orderInfo: this.chosenObj,
sumPrice: this.sumPrice,
TicketList: this.dataList.TicketList.filter(x=>x.checked)
}
let key = this.$md5(JSON.stringify(order))
let pickuporderScenTickets = localStorage.getItem('pickuporderScenTickets')
......@@ -162,81 +192,28 @@ export default {
order
})
localStorage.setItem("pickuporderScenTickets",JSON.stringify(pickuporderScenTickets))
this.CommonJump('/PickuporderForm/'+key, {});
},
// 获取报价的详情
getCarPriceData2() {
this.priceList = []
this.apipost(
"b2c_get_GetTicketCouponsMonthPrice",
{
CouponsId: this.configId,
TicketId: this.selectedObj.Id,
Month: this.Month,
this.CommonJump('/ScenicSpotTicketOrderForm/'+key, {});
},
(r) => {
if (r.data.resultCode == 1) {
let arr = []
r.data.data.forEach(x=>{
if(x.Price){
if(this.chosenObj.startDate==x.Date){
this.p.originalB2CPrice = x.Price
}
let dataObj = {
startDate: x.Date,
originalB2CPrice: x.Price,
remainNum: 1,
Count: 1,
isSupportChildren: 1,
safeMoney: 0,
}
if(date.formatDate(Date.now(), 'YYYY-MM-DD')!=x.Date&&x.Date>date.formatDate(Date.now(), 'YYYY-MM-DD')){
arr.push(dataObj)
}
}
})
const temp= JSON.parse(JSON.stringify(r.data.data))
let PriceArr = temp.filter(x=>{ return x.Price>0 })
if(PriceArr.length>0){
this.$emit('getPriceList',JSON.stringify(arr),this.selectedObj.Id)
handleSelect(item,type){
if(type==2){
this.MailingStateObj = item
}else{
let dataObj = {
startDate: '',
originalB2CPrice: '',
remainNum: 0,
Count: 0,
safeMoney: 0,
PeopleNum: 1
}
this.priceList.push(dataObj)
this.$emit('getPriceList',JSON.stringify(this.priceList),this.selectedObj.Id)
this.p.originalB2CPrice = 0
this.resetHandler()
}
}
},null)
},
handleSelect(item){
item.checked = !item.checked
this.selectedObj = item
}
setTimeout(()=>{
this.getCarPriceData2()
this.calcMoney()
},100)
},
initModel() {
this.sumPrice=0
this.chosenObj = {
startDate: "",
Count: 1,
remark: "",
};
},
resetHandler(type) {
if(type){
resetHandler() {
this.selectedObj = null
}
this.MailingStateObj = null
this.dataList.TicketList.forEach(x=>{
x.checked = false
})
setTimeout(()=>{
this.p = {};
this.initModel()
......@@ -244,18 +221,28 @@ export default {
this.$emit("reset");
},
changePeople(val) {},
addPeople(m, i, isDf = false) {
this.chosenObj[m] = parseInt(this.chosenObj[m]) + i;
addPeople(item, m, i, isDf = false) {
let chosenObj = item
chosenObj[m] = parseInt(chosenObj[m]) + i;
if(m!='Count'){
this.chosenObj[m] = this.chosenObj[m] < 0 ? 0 : this.chosenObj[m]++;
chosenObj[m] = chosenObj[m] < 0 ? 0 : chosenObj[m]++;
}else{
this.chosenObj[m] = this.chosenObj[m] < 1 ? 1 : this.chosenObj[m]++;
chosenObj[m] = chosenObj[m] < 1 ? 1 :chosenObj[m]++;
}
this.calcMoney()
},
calcMoney() {
if (!this.p) return;
let money = this.p.originalB2CPrice * this.chosenObj.Count;
let money = 0
this.dataList.TicketList.forEach(x=>{
if(x.checked){
money+=x.originalB2CPrice*x.Count
}
})
if(this.MailingStateObj&&this.MailingStateObj.Id==2){
this.sumPrice = Number(money)+Number(this.p.MailingMoney)
return
}
this.sumPrice = money;
},
},
......
......@@ -43,15 +43,16 @@
</div>
</div>
<template v-if="TicketIds&&TicketIds.length>0">
<div class="text-grey-6 f12 q-my-md">選擇車類型</div>
<div class="row wrap">
<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'"
:color="selectedCarObj&&selectedCarObj.Id==x.Id?'primary':'grey-3'" square>{{ x.CarName }}({{ x.PeopleNum }}人)</q-chip>
</div>
</div>
</template>
<div class="text-grey-6 f12 q-my-md">選擇數量</div>
<div class="row items-end">
<div class="col" :class="{'column':$q.platform.is.mobile}">
......@@ -150,6 +151,8 @@ export default {
this.p = n;
if(n&&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.selectedCarObj = this.dataList.CarTypeList[0]
}
......@@ -178,17 +181,17 @@ export default {
selectedAirportObj: null,
onCarObj: null,
unCarObj: null,
TicketIds: null
};
},
created() {
this.initModel();
console.log(this.p,'=======')
if(this.p.startDate){
this.chosenObj.startDate = this.p.startDate;
this.calcMoney()
this.getCarPriceData2()
}
this.getCarPriceData()
},
methods: {
goOrderHandler(){
......@@ -267,6 +270,24 @@ export default {
},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){
this.selectedAirportObj = item
},
......
......@@ -46,7 +46,6 @@ border-radius: 28px;
top: 5px;
width: 102px;
height: 46px;
background: #EE4454;
border-radius: 23px;
}
</style>>
......@@ -60,7 +59,7 @@ border-radius: 23px;
最高可省60%,只有订阅用户才能享受到隐藏优惠,点击“订阅”,即表示你同意我们的《訂閱條款》
</div>
<div class="email-box" :class="{'mobile':$q.platform.is.mobile}">
<q-input class="input" :class="{'mobile':$q.platform.is.mobile}" rounded outlined placeholder="請輸入您在使用的電子郵件"></q-input><q-btn class="btn" label="提交"></q-btn>
<q-input class="input" :class="{'mobile':$q.platform.is.mobile}" rounded outlined placeholder="請輸入您在使用的電子郵件"></q-input><q-btn color="primary" class="btn" label="提交"></q-btn>
</div>
</div>
</div>
......
......@@ -24,6 +24,9 @@
.flex-wrap {
flex-wrap: wrap;
}
.flex-noShark {
flex-shrink: 0;
}
.margin {
margin: 10px;
......@@ -114,6 +117,9 @@
.f36 {
font-size: 36px;
}
.f42 {
font-size: 42px;
}
.text-center {
text-align: center;
}
......
......@@ -30,8 +30,8 @@
<hor-big-one :base-data="baseinfo" :dataList="dataList" ref="webhead"></hor-big-one>
<!-- <hor-big-two v-if="headType==2" :base-data="baseinfo" ref="webhead"></hor-big-two> -->
<q-page-container>
<div class="flex justify-between" v-if="showUserInfo" style="width: 1200px; margin: 0 auto">
<navs></navs>
<div class="flex justify-between" v-if="showUserInfo" :style="$q.platform.is.desktop ? 'width: 1200px; margin: 0 auto' : ''">
<navs v-if="$q.platform.is.desktop"></navs>
<router-view />
</div>
<router-view v-else />
......
......@@ -170,7 +170,7 @@
standout
v-model="parameters.Mobile"
label="電話"
:rules="[(val) => !!val && val.length == 11 || '請輸正確電話']"
:rules="[(val) => !!val || '請輸正確電話']"
ref="Mobile"
mask="#"
reverse-fill-mask
......@@ -423,6 +423,12 @@
<q-input standout v-model="parameters.Remark" input-style="height:170px;" type="textarea" placeholder="此欄位僅限資料備註。不在商品規範內的個人需求,不保證提供" maxlength="200" counter />
</q-card>
</q-form>
<coupon
v-if="sumPrice>0&&productType"
:product-type="productType"
:current-price="sumPrice"
@change="changeDiscountHandler"
></coupon>
</div>
<div class="relative-position" v-if="details"
......@@ -510,15 +516,21 @@
<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" v-if="(chosenObj.Count)>0">
<div class="col">總金額</div>
<div class="text-subtitle2 text-weight-bolder text-primary">{{details.CurrencyCode}} {{ moneyFormat(OrderDate.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">
<div class="col">優惠金額</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" />
<div class="row q-mb-sm items-center" v-if="chosenObj.Count>0">
<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 class="text-right q-mt-md" v-if="step!=3">
......@@ -570,6 +582,9 @@ export default {
},
data() {
return {
CouponIds: [],
productType: null,
sumPrice: 0,//总金额
order: null,//订单信息
orderKey: "",
isShowDialog: false,
......@@ -608,6 +623,8 @@ export default {
Unit_Price: '',//单价
Num: '',//数量
Money: 0.0,
DiscountsMoney: 0,//优惠金额
DiscountsIds: '',//优惠券id
Sex: 1,//1男2女
SurName: '',//姓
Name: '',//名
......@@ -661,6 +678,19 @@ export default {
this.getUserInfoHandler()
},
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() {
this.$q.loading.show();
......@@ -680,6 +710,14 @@ export default {
}
this.parameters.CarId = this.OrderDate.CarId
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 {
this.$q.notify({
type: "negative",
......@@ -711,6 +749,7 @@ export default {
this.parameters.Unit_Price = this.OrderDate.originalB2CPrice
this.parameters.Num = this.chosenObj.Count
this.parameters.Money = this.OrderDate.sumPrice
this.sumPrice = this.OrderDate.sumPrice
}
}
}
......@@ -780,15 +819,7 @@ export default {
})
},
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(
"AddOrderInfo_post",
{
......@@ -799,10 +830,10 @@ export default {
GoodsId: this.parameters.ProductId,//商品id
GoodsName: this.details.Name,//商品名称
GoodsPic: this.details.ImageList[0],//商品图片
GoodsType: GoodsType,//商品类型(见枚举) 12包车 13 接机 14送机
GoodsType: this.productType,//商品类型(见枚举) 12包车 13 接机 14送机
OrderMake: this.parameters.OrderDate,//订单摘要(例如出行时间)
TotalPrice: this.parameters.Money,//总价格
PreferentialPrice: 0,// 优惠总金额
PreferentialPrice: this.parameters.DiscountsMoney,// 优惠总金额
ErpOrderId: ErpOrderId,//erp订单id
Country: this.userInfo.Country,//国家id
PlatformTax: 0,//平台税金默认0
......@@ -821,22 +852,14 @@ export default {
})
},
goPayHandler(pay){
let key = this.$md5(JSON.stringify(pay))
let pays = localStorage.getItem('pays')
pays = pays?JSON.parse(pays):[]
pays.push({
key,
pay
})
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))
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){
......
......@@ -29,7 +29,7 @@
class="col product-price text-subtitle1 text-weight-bold"
style="text-align: left"
>
<span v-if="priceList2&&priceList2.length">{{dataList.CurrencyCode}} {{ moneyFormat(priceList2[0].originalB2CPrice, 0) }}</span>
<span v-if="priceList&&priceList.length">{{dataList.CurrencyCode}} {{ moneyFormat(priceList[0].originalB2CPrice, 0) }}</span>
<span class="q-ml-sm f12 text-grey-7"></span>
</span>
<q-btn
......@@ -174,9 +174,9 @@
$q.platform.is.mobile,
}"
>
<div class="product-price text-h6" v-if="priceList2&&priceList2.length>0">
<div class="product-price text-h6" v-if="priceList&&priceList.length>0">
<!-- CNY:{{ dataList. }} -->
{{dataList.CurrencyCode?dataList.CurrencyCode:'CNY'}}{{ moneyFormat(priceList2[0].originalB2CPrice, 0) }}
{{dataList.CurrencyCode?dataList.CurrencyCode:'CNY'}}{{ moneyFormat(priceList[0].originalB2CPrice, 0) }}
<span class="f12 text-grey-6"></span>
</div>
<div v-else class="text-subtitle1 text-grey-6">暫無報價</div>
......@@ -318,7 +318,7 @@
<span class="product-price text-h6 q-mr-md"
>{{dataList.CurrencyCode?dataList.CurrencyCode:'CNY'}}
{{
moneyFormat(priceList2[0].originalB2CPrice, 0)
moneyFormat(priceList[0].originalB2CPrice, 0)
}}</span
>
<q-btn
......@@ -330,7 +330,7 @@
/>
</div>
<div class="text-info q-mt-md text-right">
最早可預訂日期:{{ priceList2[0].startDate }}
最早可預訂日期:{{ priceList[0].startDate }}
</div>
</div>
</div>
......@@ -562,7 +562,6 @@ export default {
data() {
return {
AddressObj: null,
priceList2: [],
priceList: [],
selectedId: '',
currentYM: { year: 2023, month: 2, str: "2023-02" }, // 当前年月
......@@ -713,7 +712,6 @@ export default {
this.TripConfig = JSON.parse(window.localStorage.getItem("baseifo"));
}
window.addEventListener("scroll", this.menu);
window.addEventListener("scroll", this.menu);
this.getData();
},
methods: {
......@@ -722,6 +720,9 @@ export default {
if(!this.showOrderPreview){
this.changeTripShowHandler()
}
this.dataList.TicketList.forEach(x=>{
x.checked = false
})
},
changeTripShowHandler() {
this.$nextTick(() => {
......@@ -815,6 +816,7 @@ export default {
},
resetHandler() {
this.currentPrice.startDate = "";
if(!this.$q.platform.is.mobile){
this.$refs.calendar.reset();
}
......@@ -841,14 +843,18 @@ export default {
{ 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}`
// {
// Address:`${this.dataList.CountryName}-${this.dataList.CityName}-${this.dataList.Address}`
// }
this.isShow = true;
if (this.dataList.videoStr && this.dataList.videoStr != "") {
this.options.loop = false;
......@@ -864,7 +870,7 @@ export default {
});
}
this.$nextTick(() => {
this.getCarPriceData2()
this.getCarPriceData()
setTimeout(() => {
this.navs.forEach((x) => {
x.top =
......@@ -900,36 +906,35 @@ export default {
);
},
// 获取报价的详情
getCarPriceData2() {
getCarPriceData() {
this.priceList = []
this.apipost(
"b2c_get_GetTicketCouponsMonthPrice",
"b2c_get_GetTicketCouponsMonthPriceAll",
{
CouponsId: this.msg.configId,
TicketId: this.dataList.TicketList[1].Id,
// TicketId: this.dataList.TicketList[0].Id,
Month: this.currentYM.str,
},
(r) => {
if (r.data.resultCode == 1) {
let arr = []
r.data.data.forEach(x=>{
if(x.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 = {
startDate: x.Date,
originalB2CPrice: x.Price,
originalB2CPrice: x.PriceList[0].Price,
remainNum: 1,
Count: 1,
safeMoney: 0,
PeopleNum: 1
MailingMoney: MailingMoneyList[0].MailingMoney,
PriceList: x.PriceList,
}
if(date.formatDate(Date.now(), 'YYYY-MM-DD')!=x.Date&&x.Date>date.formatDate(Date.now(), 'YYYY-MM-DD')){
arr.push(dataObj)
}
}
})
this.priceList = JSON.parse(JSON.stringify(arr))
this.priceList2 = JSON.parse(JSON.stringify(arr))
}
},null)
......
......@@ -91,7 +91,7 @@
/>
<q-img
v-else
:src="details?details.ImageList[0]:'https://image.kkday.com/v2/image/get/s1.kkday.com/product_138437/20230217083232_t5rcO/jpg'"
:src="details?details.PicPathList[0]:'https://image.kkday.com/v2/image/get/s1.kkday.com/product_138437/20230217083232_t5rcO/jpg'"
class="rounded-borders"
spinner-color="grey-3"
style="width: 80px"
......@@ -101,7 +101,7 @@
{{details.Name}}
</div>
<div class="text-caption text-grey-6 ellipsis q-mt-sm">
{{details.Description}}
{{details.Feature}}
</div>
</div>
</div>
......@@ -110,23 +110,25 @@
<q-icon name="iconfont iconrili" size="20px" class="q-mr-sm" />
<span>{{OrderDate.startDate}}</span>
</div>
<div class="text-grey-9 q-ml-md" v-if="chosenObj.Count > 0&&CarObj">
<q-icon name="iconfont iconjiaotong" size="20px" class="q-mr-sm" />
<span class="q-mr-sm"
>{{CarObj.CarName}} x {{ chosenObj.Count }} </span
<div class="text-grey-9 q-ml-md" v-if="optionObj">
<q-icon name="iconfont iconpeople" size="20px" class="q-mr-sm" />
<span class="q-mr-sm" v-for="(x,i) in optionObj" :key="i"
>{{x.TicketName}} x {{ x.Count }} </span
>
<span class="q-mr-sm"
>({{CarObj.PeopleNum}}人/辆)</span
></span
>
<template v-if="details.TravelHours>0">
<q-icon name="iconfont icontime" size="20px" class="q-mr-xs q-ml-sm" />
<span class="q-mr-sm">
{{`包車時長:${details.TravelHours} h`}}
行程時間 1 天
</span>
</template>
</div>
</div>
<div v-if="parameters.MailingState==1" class="rounded-borders bg-blue-1 q-px-lg q-py-sm q-mt-sm">
自取地址:{{parameters.SelffetchAddress}}
</div>
<q-separator color="grey-2" class="q-mt-md" />
<div
class="bg-grey-1 rounded-borders q-pa-md q-mt-md guest-item"
>
......@@ -135,42 +137,31 @@
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.SurName"
label="本國姓"
placeholder="例:張"
:rules="[(val) => !!val || '請輸本國姓']"
v-model="parameters.Name"
label="本國姓"
placeholder="例:張"
:rules="[(val) => !!val || '請輸本國姓']"
ref="SurName"
/>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.Name"
label="本國"
placeholder="例:"
:rules="[(val) => !!val || '請輸本國']"
v-model="parameters.EName"
label="本國姓名(英文)"
placeholder="例:zhangsan"
:rules="[(val) => !!val || '請輸本國姓名(英文)']"
ref="Name"
/>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.ContactWay"
label="联络方式"
placeholder="例:WeChat"
:rules="[(val) => !!val || '請輸联络方式']"
ref="ContactWay"
mask="X"
reverse-fill-mask
>
</q-input>
/>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.Mobile"
label="電話"
:rules="[(val) => !!val && val.length == 11 || '請輸正確電話']"
:rules="[(val) => !!val || '請輸正確電話']"
ref="Mobile"
mask="#"
reverse-fill-mask
......@@ -179,6 +170,15 @@
<div class="text-subtitle2">+{{ userInfo.areaCode }}</div>
</template>
</q-input>
</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="row items-center q-mt-md">
......@@ -195,234 +195,16 @@
</div>
</div>
</div>
<template v-if="details.CarType!=3">
<div class="text-subtitle1 text-weight-bolder q-my-md">{{details.CarType==1?'抵達':'起飛'}} 班机資料</div>
<q-separator color="grey-2" class="q-mt-md" />
<div
class="bg-grey-1 rounded-borders q-pa-md q-mt-md guest-item"
>
<div class="text-subtitle1 q-pb-md text-weight-bold"></div>
<div class="row q-col-gutter-md">
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.AirportTerminal"
label="航廈"
placeholder="例:航廈"
:rules="[(val) => !!val || '請輸航廈']"
ref="AirportTerminal"
readonly>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy7">
<q-input type="textarea" dense standout autofocus
v-model="parameters.AirportTerminal" placeholder="請輸航廈" />
</q-popup-proxy>
</q-input>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.AirLine"
label="航空公司"
placeholder=""
:rules="[(val) => !!val || '請輸航空公司名稱']"
ref="AirLine"
readonly>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy8">
<q-input type="textarea" dense standout autofocus
v-model="parameters.AirLine" placeholder="請輸航空公司名稱" />
</q-popup-proxy>
</q-input>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.FlightNumber"
label="航班編號"
placeholder="例:CA123"
:rules="[(val) => !!val || '請輸航班編號']"
ref="FlightNumber"
mask="X"
reverse-fill-mask
/>
</div>
<div :class="filedGuestWidth">
<q-input
class="q-pb-md"
standout
:value="!flightTime?'':parameters.FlightTime"
:label="`航班${details.CarType==1?'抵達':'起飛'}時間`"
:rules="[(val) => !!val || `請选航班${details.CarType==1?'抵達':'起飛'}時間`]"
ref="FlightTime"
>
<template v-slot:append>
<q-icon name="event" class="cursor-pointer"></q-icon>
</template>
<q-popup-proxy :offset="[0, 0]" ref="qDateProxy1">
<div class="row">
<!-- <q-date
mask="YYYY-MM-DD HH:mm"
:title="$t('search_date_begin')"
subtitle="選擇"
v-model="parameters.FlightTime"
:options="optionsFn"
/>
<div class="q-px-sm"></div> -->
<q-time format24h v-model="flightTime" mask="HH:mm"
@input="getTime(1)"/>
</div>
</q-popup-proxy>
</q-input>
</div>
</div>
</div>
</template>
<div class="text-subtitle1 text-weight-bolder q-my-md">
{{details.CarType==1?'接机':details.CarType==2?'送机':'包车'}}資料
</div>
<q-separator color="grey-2" class="q-mt-md" />
<div
class="bg-grey-1 rounded-borders q-pa-md q-mt-md guest-item"
>
<div class="text-subtitle1 q-pb-md text-weight-bold"></div>
<div class="row q-col-gutter-md">
<div :class="filedGuestWidth">
<q-input
standout
v-model="!getBusTime?'':parameters.OrderDate"
label="接駁日期"
:rules="[(val) => !!val || '請选接駁日期']"
ref="OrderDate"
>
<template v-slot:append>
<q-icon name="event" class="cursor-pointer"></q-icon>
</template>
<q-popup-proxy :offset="[0, 0]" ref="qDateProxy2">
<div class="row">
<!-- <q-date
mask="YYYY-MM-DD"
:title="$t('search_date_begin')"
subtitle="選擇"
v-model="getBusTimeDate"
:options="optionsFn"
@input="getTime(3)"
/>
<div class="q-px-sm"></div> -->
<q-time format24h v-model="getBusTime" mask="HH:mm"
@input="getTime(2)"/>
</div>
</q-popup-proxy>
</q-input>
</div>
<div :class="filedGuestWidth" v-if="details.CarType!=1">
<q-input
standout
v-model="parameters.GetonAddress"
label="上車地點"
placeholder=""
:rules="[(val) => !!val || '請輸上車地點供司機參考']"
ref="GetonAddress"
readonly>
<template v-slot:append>
<!-- <q-icon name="iconfont iconaddress" size="20px" class="q-mr-sm" @click="getAddress(1)"/> -->
</template>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy5">
<q-input type="textarea" dense standout autofocus
v-model="parameters.GetonAddress" placeholder="請輸上車地點供司機參考" />
</q-popup-proxy>
</q-input>
</div>
<div :class="filedGuestWidth" v-if="details.CarType!=2">
<q-input
standout
v-model="parameters.GetoffAddress"
label="下車地點"
placeholder=""
:rules="[(val) => !!val || '請輸下車地點供司機參考']"
ref="GetoffAddress"
readonly>
<template v-slot:append>
<!-- <q-icon name="iconfont iconaddress" size="20px" class="q-mr-sm" @click="getAddress(2)"/> -->
</template>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy6">
<q-input type="textarea" dense standout autofocus
v-model="parameters.GetoffAddress" placeholder="請輸下車地點供司機參考" />
</q-popup-proxy>
</q-input>
</div>
</div>
</div>
<div class="text-subtitle1 text-weight-bolder q-my-md">乘客資料</div>
<q-separator color="grey-2" class="q-mt-md" />
<div
class="bg-grey-1 rounded-borders q-pa-md q-mt-md guest-item"
>
<div class="text-subtitle1 q-pb-md text-weight-bold">乘客数量</div>
<div class="row q-col-gutter-md">
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.ManNum"
label="成人數(18-99岁)"
@input="getNum"
:rules="[(val) => !!val || '請輸成人數']"
ref="ManNum"
mask="#"
reverse-fill-mask
/>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.ChildNum"
label="兒童數(3-17岁)"
@input="getNum"
mask="#"
reverse-fill-mask
/>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.BabyNum"
label="嬰幼兒數(0-2岁)"
@input="getNum"
mask="#"
reverse-fill-mask
/>
</div>
</div>
<template v-if="details.CarType!=3">
<div class="text-subtitle1 q-py-md text-weight-bold">行李数量</div>
<div class="row q-col-gutter-md">
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.HandLuggageNum"
label="手提行李"
mask="#"
reverse-fill-mask
/>
</div>
<div :class="filedGuestWidth">
<q-input
standout
v-model="parameters.RegisteredLuggageNum"
label="托运行李"
mask="#"
reverse-fill-mask
/>
</div>
</div>
</template>
</div>
<div class="text-subtitle1 q-my-md text-weight-bold">特殊需求備註:</div>
<q-input standout v-model="parameters.Remark" input-style="height:170px;" type="textarea" placeholder="此欄位僅限資料備註。不在商品規範內的個人需求,不保證提供" maxlength="200" counter />
</q-card>
</q-form>
<coupon
v-if="sumPrice>0"
:product-type="productType"
:current-price="sumPrice"
@change="changeDiscountHandler"
></coupon>
</div>
<div class="relative-position" v-if="details"
......@@ -464,7 +246,7 @@
/>
<q-img
v-else
:src="details?details.ImageList[0]:'https://image.kkday.com/v2/image/get/s1.kkday.com/product_138437/20230217083232_t5rcO/jpg'"
:src="details?details.PicPathList[0]:'https://image.kkday.com/v2/image/get/s1.kkday.com/product_138437/20230217083232_t5rcO/jpg'"
class="rounded-borders"
spinner-color="grey-3"
style="width: 80px"
......@@ -474,51 +256,53 @@
{{details.Name}}
</div>
<div class="text-caption text-grey-6 ellipsis q-mt-sm">
{{details.Description}}
{{details.Feature}}
</div>
</div>
</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>
<div class="q-ml-md">
{{parameters.OrderDate}}
{{parameters.UseDate}}
</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" v-if="(chosenObj.Count)>0">
<div class="col">總金額</div>
<div class="text-subtitle2 text-weight-bolder text-primary">{{details.CurrencyCode}} {{ moneyFormat(OrderDate.sumPrice,2) }}</div>
</div> -->
<template v-if="optionObj">
<div class="row q-mb-sm" v-for="(x,i) in optionObj" :key="i">
<template v-if="x.checked">
<div class="col">{{x.TicketName}} x {{ x.Count }}</div>
<div>{{ moneyFormat(x.originalB2CPrice,2) }}</div>
</template>
</div>
</template>
<hr style="border:none;border-top:1px dashed #EEE !important;" class="bg-transparent q-mb-sm" />
<div class="row q-mb-sm items-center" v-if="chosenObj.Count>0">
<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="col">優惠金額</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>
<div class="row q-mb-sm items-center">
<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">
CNY {{ moneyFormat(parameters.Money, 2) }}
</div>
</div>
</div>
<div class="text-right q-mt-md" v-if="step!=3">
......@@ -531,18 +315,6 @@
</div>
</div>
</div>
<q-dialog v-model="isShowDialog">
<q-card class="q-pa-lg" :style="{'width':$q.platform.is.desktop?'100%':'500px'}">
<div class="text-h6Detail">
<span>乘客{{onoffbus==1?'上':'下'}}車範圍</span>
<i class="iconfont iconbaseline-close-px" @click="isShowDialog=false"></i>
</div>
<q-separator />
<div style="max-height: 600px;padding:20px 0" class="scroll">
<componentsMap :AddressObj="onCarObj"/>
</div>
</q-card>
</q-dialog>
<div v-if="!orderKey || orderKey == ''" class="text-center q-my-xl">
<none-data
iconType="order"
......@@ -560,6 +332,7 @@
import { date } from 'quasar'
import { json } from "body-parser";
import coupon from 'src/components/common/coupon.vue'
import ProductTypeEnum from "src/utils/producttypeenum";
import componentsMap from "src/components/car/Map.vue";
export default {
components:{
......@@ -570,14 +343,12 @@
},
data() {
return {
CouponIds: [],
productType: 4,
sumPrice: 0,//总金额
order: null,//订单信息
orderKey: "",
isShowDialog: false,
AddressObj: null,
onCarObj: null,//上车范围
unCarObj: null,//下车范围
CarObj: null,//车型
AirportObj: null,//机场
optionObj: null,//类型
details: null,//产品详情
options: {//音频控件
currentPage: 0,
......@@ -597,44 +368,30 @@
areaCode: "",
Mailbox: "",
},
chosenObj: {},
countrys: [],
areaCodes: [],
loading: false,
parameters: {
OrderId: 0,
OrderType: 0,
OrderDate:'',//预定日期
Unit_Price: '',//单价
Num: '',//数量
Money: 0.0,
Sex: 1,//1男2女
SurName: '',//姓
Name: '',//名
DiscountsMoney: 0,//优惠金额
DiscountsIds: '',//优惠券id
Remark: '',
AirportId: '',
AirportTerminal: '',//航厦
AirLine: '',//航空公司名称
FlightNumber: '',//航班号
FlightTime: '',//航班时间
GetonAddress: '',//上车点
GetoffAddress: '',//下车点
ManNum: null,//成人数
ChildNum: null,//儿童数
BabyNum: null,//婴儿数
HandLuggageNum: null,//手提行李数量
RegisteredLuggageNum: null,//托运行李数量
ContactWay: '',//联络方式 WeChat
Mobile:'',//电话
ProductId: '',
CarId: '',//产品类型ID
MailingState: '',//邮寄状态 1自取 2邮寄
MailingAddress: '',//MailingState =2 填写邮寄
MailingMoney: null,
SelffetchAddress: '',//自取地址
UseDate:'',//门票日期
Name:'',
EName:'',
Sex: 1,//1男2女
Birthday: '',
Mobile:'',
CouponsId:'',//景点id
DetailList:[],
OrderSource: 1,//类型 0 来源B2B 1 来源B2C
},
flightTime: null,//航班起飞抵达时间
getBusTime: null,//预约车时间
getBusTimeDate: null,//预约日期
TotalPeople: 0,//总人数
onoffbus: 1,//1 上车 2下车
};
},
computed: {
......@@ -654,32 +411,42 @@
created() {},
mounted() {
if(this.checkParamsHandler()){
this.getCarData()
this.getData()
}
this.initGuestHandler();
this.getUserInfoHandler()
},
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() {
getData() {
this.$q.loading.show();
this.apipost(
"b2c_get_GetCarSingleProductDetail",
{ ProductId: this.parameters.ProductId },
"b2c_get_GetTicketCouponsDetail",
{ CouponsId: this.parameters.CouponsId },
(r) => {
if (r.data.resultCode == 1) {
this.details = r.data.data;
this.CarObj = this.details.CarTypeList.find((x) => this.OrderDate.CarId == x.Id);
this.onCarObj = this.details.PlaceList.find((x) => this.OrderDate.onCarId == x.Id)//上车范围
this.unCarObj = this.details.PlaceList.find((x) => this.OrderDate.unCarId == x.Id)//下车范围
if(this.details.CarType!=3){
this.AirportObj = this.details.AirportList.find((x) => this.OrderDate.AirportId == x.Id);
this.parameters.AirportId = this.OrderDate.AirportId
this.parameters.FlightTime = this.OrderDate.startDate
if(this.parameters.MailingState==1){
this.parameters.SelffetchAddress = this.details.SelffetchAddress
this.parameters.MailingMoney = null
}else{
this.parameters.MailingMoney = this.OrderDate.MailingMoney
this.parameters.SelffetchAddress = ''
}
this.parameters.CarId = this.OrderDate.CarId
this.parameters.OrderType = this.details.CarType
} else {
this.$q.notify({
type: "negative",
......@@ -704,13 +471,26 @@
if (this.order) {
this.orderKey = key;
this.OrderDate = this.order.order
this.chosenObj = this.OrderDate.orderInfo;
this.parameters.ProductId = this.order.order.Id
this.parameters.OrderDate = this.OrderDate.startDate
this.parameters.CouponsId = this.order.order.CouponsId
this.parameters.MailingState = this.OrderDate.MailingState
this.parameters.UseDate = this.OrderDate.startDate
this.getBusTimeDate = this.OrderDate.startDate
this.parameters.Unit_Price = this.OrderDate.originalB2CPrice
this.parameters.Num = this.chosenObj.Count
this.parameters.Money = this.OrderDate.sumPrice
this.optionObj = this.OrderDate.TicketList
this.parameters.DetailList = []
this.optionObj.forEach(x=>{
if(x.checked){
let y = {
TicketName: x.TicketName,
Unit_Price: x.originalB2CPrice,
Num: x.Count,
Money: x.originalB2CPrice*x.Count,
TicketId: x.Id
}
this.parameters.DetailList.push(y)
}
})
this.sumPrice = this.OrderDate.sumPrice
}
}
}
......@@ -729,25 +509,14 @@
this.$refs.SurName.validate()
this.$refs.Name.validate()
this.$refs.ContactWay.validate()
this.$refs.Mobile.validate()
this.$refs.OrderDate.validate()
this.$refs.ManNum.validate()
if(this.details.CarType!=3){
this.$refs.AirportTerminal.validate()
this.$refs.AirLine.validate()
this.$refs.FlightNumber.validate()
this.$refs.FlightTime.validate()
if(this.details.CarType!=1){
this.$refs.GetonAddress.validate()
}else{
this.$refs.GetoffAddress.validate()
}
if(this.parameters.MailingState==2){
this.$refs.MailingAddress.validate()
}else{
this.$refs.GetonAddress.validate()
this.$refs.GetoffAddress.validate()
this.parameters.MailingAddress = ''
}
console.log(this.parameters,'----')
let flag = true
flag = await this.formValidateHandler('baseUserInfo')
if(!flag){
......@@ -765,10 +534,9 @@
SetCarOrder(){
this.loading = true
this.apipost(
"CarSingle_post_SetTYCarOrder",
"ticket_post_SetTicketOrder",
this.parameters,
(r) => {
// this.$refs.myform.resetValidation()
if (r.data.resultCode == 1) {
this.step = 2
let ErpOrderId = r.data.data.Id
......@@ -780,29 +548,20 @@
})
},
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(
"AddOrderInfo_post",
{
SurName: this.parameters.SurName,
Name: this.parameters.Name,
SurName: this.parameters.Name,
Name: '',
ContactNumber: this.parameters.Mobile,// 联系电话
Mailbox: this.userInfo.Mailbox,//邮箱
GoodsId: this.parameters.ProductId,//商品id
GoodsId: this.parameters.CouponsId,//商品id
GoodsName: this.details.Name,//商品名称
GoodsPic: this.details.ImageList[0],//商品图片
GoodsType: GoodsType,//商品类型(见枚举) 12包车 13 接机 14送机
OrderMake: this.parameters.OrderDate,//订单摘要(例如出行时间)
GoodsPic: this.details.PicPathList[0],//商品图片
GoodsType: this.productType,
OrderMake: this.parameters.UseDate,//订单摘要(例如出行时间)
TotalPrice: this.parameters.Money,//总价格
PreferentialPrice: 0,// 优惠总金额
PreferentialPrice: this.parameters.DiscountsMoney,// 优惠总金额
ErpOrderId: ErpOrderId,//erp订单id
Country: this.userInfo.Country,//国家id
PlatformTax: 0,//平台税金默认0
......@@ -821,37 +580,14 @@
})
},
goPayHandler(pay){
let key = this.$md5(JSON.stringify(pay))
let pays = localStorage.getItem('pays')
pays = pays?JSON.parse(pays):[]
pays.push({
key,
pay
})
localStorage.setItem("pays",JSON.stringify(pays))
let pickuporderScenTickets = localStorage.getItem('pickuporderScenTickets')
pickuporderScenTickets = pickuporderScenTickets?JSON.parse(pickuporderScenTickets):[]
let i = pickuporderScenTickets.findIndex(x=>x.key==this.orderKey)
if(i>=0){
pickuporderScenTickets.splice(i,1)
localStorage.setItem("pickuporderScenTickets",JSON.stringify(pickuporderScenTickets))
}
this.CommonJump('/pay/'+key, {});
},
// 航班起飞抵达时间
getTime(type){
// 1航班时间 2预约时间
this.onoffbus = type
if(type==1){
this.parameters.FlightTime = this.OrderDate.startDate+' '+this.flightTime
this.$refs.qDateProxy1.hide()
}else if(type==2){
this.parameters.OrderDate = this.OrderDate.startDate+' '+this.getBusTime
this.$refs.qDateProxy2.hide()
}else if(type==3){
this.parameters.OrderDate = this.OrderDate.startDate+' '+this.getBusTime
let pickuporderScenTickets = localStorage.getItem("pickuporderScenTickets");
pickuporderScenTickets = pickuporderScenTickets ? JSON.parse(pickuporderScenTickets) : [];
let i = pickuporderScenTickets.findIndex((x) => x.key == this.orderKey);
if (i >= 0) {
pickuporderScenTickets.splice(i, 1);
localStorage.setItem("pickuporderScenTickets", JSON.stringify(pickuporderScenTickets));
}
this.CommonJump("/pay/" + pay.OrderNo, {});
},
optionsFn(cd) {
return (
......@@ -859,19 +595,6 @@
date.formatDate(date.addToDate(new Date(), { days: 0 }), "YYYY/MM/DD")
);
},
// 地图上选址
getAddress(type){
if(type==1){
this.AddressObj = this.onCarObj
}else{
this.AddressObj = this.unCarObj
}
this.isShowDialog = true
},
// 计算人数
getNum(){
this.TotalPeople = this.parameters.ManNum+this.parameters.ChildNum+this.parameters.BabyNum
},
// 音频
slideHandler(e) {
this.options.currentPage = e.currentPage;
......
......@@ -773,10 +773,7 @@ export default {
this.TripConfig = JSON.parse(window.localStorage.getItem("baseifo"));
}
window.addEventListener("scroll", this.menu);
// this.getData();
window.addEventListener("scroll", this.menu);
this.getCarData();
// this.getCarPriceData();
},
methods: {
changeShowOrderPreviewHandler(){
......
......@@ -17,7 +17,6 @@
}
.select {
height: 41px;
background: #F43849;
border-radius: 8px;
color: #ffffff;
}
......@@ -36,7 +35,7 @@ color: #ffffff;
@click="navigateTo(item.key)"
v-for="item in menuList"
:key="item.key"
:class="{'select': selectKey === item.key}"
:class="{'select bg-primary': selectKey === item.key}"
>
<div class="flex items-center">
<i class="iconfont" :class="item.icon"></i>
......@@ -52,7 +51,7 @@ color: #ffffff;
@click="navigateTo(item.key)"
v-for="item in menuList2"
:key="item.key"
:class="{'select': selectKey === item.key}"
:class="{'select bg-primary': selectKey === item.key}"
>
<div class="flex items-center">
<i class="iconfont" :class="item.icon"></i>
......@@ -82,18 +81,18 @@ export default {
label: "訂單",
number: "",
},
{
icon: "iconmessage",
key: "",
label: "我的评价",
number: "",
},
{
icon: "iconmoney-credit-card",
key: "/payInfo",
label: "支付管理",
number: "",
},
// {
// icon: "iconmessage",
// key: "",
// label: "我的评价",
// number: "",
// },
// {
// icon: "iconmoney-credit-card",
// key: "/payInfo",
// label: "支付管理",
// number: "",
// },
],
menuList2: [
{
......
<style>
.login-box {
.login-box-pc {
width: 436px;
}
.login-box {
padding: 30px 40px;
background-clip: padding-box;
background: #ffffff;
......@@ -70,7 +72,7 @@
</style>
<template>
<div class="login">
<div class="login-box">
<div class="login-box" :class="$q.platform.is.desktop ? 'login-box-pc' : ''">
<div class="f34 bold">注销账户</div>
<div class="login_row">
<div class="form-group">
......
<style>
.login-box {
.login-box-pc {
width: 436px;
}
.login-box {
padding: 30px 40px;
background-clip: padding-box;
background: #ffffff;
......@@ -70,7 +72,7 @@
</style>
<template>
<div class="login">
<div class="login-box">
<div class="login-box" :class="$q.platform.is.desktop ? 'login-box-pc' : ''">
<div class="f34 bold">修改邮箱</div>
<div class="login_row">
<div class="form-group">
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
......@@ -50,16 +49,19 @@
color: #195954;
}
}
.card-pc {
width: 201px;
}
.card {
margin: 10px;
width: 201px;
height: 310px;
background: #f9f9f9;
border-radius: 8px;
}
.nav-item {
width: 100px;
margin: 0 10px;
width: 33%;
max-width: 100px;
// margin: 0 10px;
text-align: center;
}
.border-bottom {
......@@ -86,10 +88,15 @@
.circle {
width: 24px;
height: 10px;
left: 88px;
border-radius: 0 0 14px 14px;
background: #f9f9f9;
}
.circle-pc {
left: 88px;
}
.circle-mobile {
left: calc(50% - 12px)
}
// .circle:after {
// content: '.';
// display: block;
......@@ -99,7 +106,7 @@
// }
</style>
<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="q-ma-lg">
<div class="tips flex">
<div
......@@ -113,12 +120,12 @@
</div>
</div>
<div class="flex flex-wrap">
<div class="card" v-for="item in couponList" :key="item.id">
<div class="card" v-for="item in couponList" :key="item.id" :class="$q.platform.is.desktop ? 'card-pc': 'full-width'">
<div class="bg-blue relative" :class="[colorMap[item.couponsUseScope], {'bg-grey': CouponTimeStatus !== 1}]">
<div v-if="item.IsEnd" class="absolute deadline">
<div class="text f12">即將過期</div>
</div>
<div class="absolute circle"></div>
<div class="absolute circle" :class="$q.platform.is.desktop ? 'circle-pc': 'circle-mobile'"></div>
<div class="white text-center f16 q-pt-lg">CYN</div>
<div class="white text-center f26">{{ item.denomination }}</div>
<div class="white text-center">
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
......@@ -22,8 +21,10 @@
margin-top: 20px;
margin-bottom: 10px;
}
.card {
.card-pc {
width: 434px;
}
.card {
height: 75px;
background: #ffffff;
border: 1px solid #eeeeee;
......@@ -45,10 +46,10 @@
}
</style>
<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="q-ma-lg">
<div class="tips">登陸方式管理</div>
<div class="card">
<div class="card" :class="{'card-pc': $q.platform.is.desktop}">
<div class="flex justify-between">
<div>
<span class="f18 bold">郵箱</span
......@@ -61,7 +62,7 @@
</div>
</div>
</div>
<div class="card flex justify-between">
<div class="card flex justify-between" :class="{'card-pc': $q.platform.is.desktop}">
<div class="flex justify-between">
<div class="img-box">
<img class="img" src="../../assets/img/wechat.png" />
......
<style lang="scss" scoped>
.avatar {
width: 60px;
height: 60px;
background: #ffffff;
border: 2px solid #f0efef;
border-radius: 50%;
margin: 0 auto;
display: block;
}
.nav-item {
margin:0 10px;
padding: 10px;
border-bottom: 1px solid #eee;
}
.nav-item:last-child {
border-bottom: none;
}
.select {
height: 41px;
border-radius: 8px;
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>
<template>
<div class="user-nav-box">
<div class="padding-20">
<div class="flex justify-between items-center">
<span class="f20">个人中心</span>
<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 class="bg-white card">
<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
class="nav-item flex justify-between items-center cursor-pointer"
@click="navigateTo(item.key)"
v-for="item in menuList"
:key="item.key"
>
<div class="flex items-center">
<i class="iconfont" :class="item.icon"></i>
<span class="q-ml-lg">{{ item.label }}</span>
</div>
<i class="iconfont iconpreviewright"></i>
<!-- <span class="text-primary">{{ item.label }}</span> -->
</div>
</div>
<div class="bg-white card">
<div
class="nav-item flex justify-between items-center cursor-pointer"
@click="navigateTo(item.key)"
v-for="item in menuList2"
:key="item.key"
>
<div class="flex items-center">
<i class="iconfont" :class="item.icon"></i>
<span class="q-ml-lg">{{ item.label }}</span>
</div>
<i class="iconfont iconpreviewright"></i>
<!-- <span class="text-primary">{{item.label}}</span> -->
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
selectKey: "",
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: [
{
icon: "iconqianbao",
key: "/coupon",
label: "可用優惠券",
number: "",
},
// {
// icon: "iconmessage",
// key: "",
// label: "我的评价",
// number: "",
// },
// {
// icon: "iconmoney-credit-card",
// key: "/payInfo",
// label: "支付管理",
// number: "",
// },
],
menuList2: [
{
icon: "iconpeople1",
key: "/setUsersList",
label: "出行人信息管理",
number: "",
},
{
icon: "iconemail",
key: "/setAddress",
label: "管理邮寄地址",
number: "",
},
{
icon: "iconcomputer",
key: "/loginInfo",
label: "登录方式管理",
number: "",
},
// {
// icon: "iconset",
// key: "/setInfo",
// label: "账户设置",
// number: "",
// },
],
};
},
mounted() {
this.selectKey = this.$route.path;
if (localStorage.b2bUser) {
this.LoginUser = JSON.parse(window.localStorage.getItem("b2bUser"));
}
},
methods: {
navigateTo(route) {
this.selectKey = route;
this.CommonJump(route, {});
},
},
};
</script>
\ No newline at end of file
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
width: 900px;
......@@ -73,8 +71,8 @@
width: 120px;
}
.nav-item {
width: 100px;
margin: 0 10px;
width: 25%;
max-width: 100px;
text-align: center;
}
.border-bottom {
......@@ -90,11 +88,10 @@
}
</style>
<template>
<div class="content q-ma-lg bg-white">
<div class="flex justify-between">
<div>
<div class="bg-white" :class="$q.platform.is.desktop ? 'q-ma-lg content': 'full-width'">
<div class="flex justify-between margin">
<div :class="$q.platform.is.desktop ? 'form-item': 'full-width'">
<q-input
class="form-item"
placeholder="輸入商品名稱/訂單號"
v-model="GoodsName"
clearable
......@@ -113,7 +110,8 @@
<div :class="orderStatus === item.ID ? 'border-bottom' : ''"></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="flex card-title justify-between">
<div class="flex">
......@@ -160,9 +158,53 @@
</div>
</div>
</div>
<noneData v-show="!orderList.length"></noneData>
</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>
</template>
<script>
......@@ -178,10 +220,14 @@ export default {
orderList: [],
current: 1,
pageCount: 0,
orderStatus: "",
orderStatus: 0,
};
},
mounted() {
this.type = this.$route.query.type
if(this.type) {
this.orderStatus = Number(this.type)
}
this.getOrderEnums();
this.getOrderList();
},
......@@ -193,7 +239,7 @@ export default {
},
changeOrderType(item) {
if (this.orderStatus === item.ID) {
this.orderStatus = "";
this.orderStatus = 0;
} else {
this.orderStatus = item.ID;
}
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
......@@ -9,11 +8,10 @@
}
.tips {
width: 100%;
height: 42px;
background: #f5f5f5;
border-radius: 8px;
padding: 0 35px;
line-height: 42px;
padding: 19px 35px;
line-height: 22px;
}
::v-deep .q-field__control {
height: 40px;
......@@ -24,18 +22,25 @@
::v-deep .q-field__marginal {
height: 40px;
}
::v-deep .q-field--auto-height .q-field__native {
min-height: 40px;
}
.title {
margin-top: 20px;
margin-bottom: 10px;
margin-left: 10px;
}
.card {
margin-top: 20px;
width: 413px;
height: 170px;
background: #ffffff;
border: 1px solid #eeeeee;
border-radius: 8px;
}
.card-pc {
width: 413px;
}
.img-box {
width: 50px;
height: 50px;
......@@ -65,13 +70,13 @@
}
</style>
<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="q-ma-lg">
<div class="tips">
收貨地址 <span>您已创建 {{count}}个收货地址,最多可创建 10个</span>
</div>
<div class="flex flex-wrap justify-between">
<div class="card" v-for="item in pageData" :key="item.Id">
<div class="card" :class="$q.platform.is.desktop ? 'card-pc': 'full-width'" v-for="item in pageData" :key="item.Id">
<div class="flex justify-between label">
<div>
{{ item.Name
......@@ -94,6 +99,7 @@
</div>
<!-- <div class="card flex flex-center" @click="showDialog"><span></span>添加郵寄地址</div> -->
<q-btn v-if="count < 10"
:class="$q.platform.is.desktop ? 'card-pc': 'full-width'"
class="card flex flex-center"
color="blue"
unelevated
......@@ -107,7 +113,7 @@
<div class="f22 bold">{{form.Id ? '编辑': '添加'}}邮寄地址</div>
<form @submit.prevent.stop="submit" class="q-gutter-md">
<div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col">
<div class="title">全名</div>
<q-input
......@@ -119,9 +125,27 @@
:rules="[(val) => !!val || '请输入全名']"
></q-input>
</div>
</div>
<div class="row">
<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 :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<!-- <div class="col">
<div class="title">選擇手機區號</div>
<q-select
ref="AreaCode"
......@@ -137,7 +161,7 @@
placeholder="選擇手機區號"
:rules="[(val) => Boolean(val) || '请選擇手機區號']"
/>
</div>
</div> -->
<div class="col">
<div class="title">手機號碼</div>
<q-input
......@@ -147,27 +171,12 @@
v-model="form.Mobile"
outlined
:rules="[(val) => !!val || '请输入手機號碼']"
></q-input>
</div>
>
<template v-slot:prepend>
<div class="text-subtitle2">
{{ form.PhoneCountryStr }}
</div>
<div class="row">
<div class="col">
<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) || '请选择國家/地區']"
/>
</template></q-input>
</div>
<div class="col">
<div class="title">城市</div>
......@@ -181,7 +190,7 @@
></q-input>
</div>
</div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col">
<div class="title">詳細地址</div>
<q-input
......@@ -247,12 +256,6 @@ export default {
this.getCountryInfo();
},
methods: {
addAddress() {
this.isShowDialog = true
this.form = {
Name: "",
Mobile: "",}
},
getCountryInfo() {
this.apipost(
"GetCountryInfo_post",
......@@ -262,6 +265,17 @@ export default {
const { phoneCountList, countList } = res.data.data;
this.countList = countList;
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 {
// this.$notify(res.data.message);
this.$q.notify({
......@@ -275,6 +289,18 @@ export default {
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) {
this.selectedKey = item;
},
......@@ -282,7 +308,6 @@ export default {
this.formHasError = false;
const verifyArr = [
"Name",
"AreaCode",
"Mobile",
"CountryId",
"CityName",
......@@ -290,17 +315,13 @@ export default {
"PostalCode",
];
verifyArr.forEach((item) => {
console.log("this.$refs[item]", this, item, this.$refs[item]);
this.$refs[item].validate();
});
verifyArr.forEach((item) => {
console.log("item", item);
if (this.$refs[item].hasError) {
console.log("item", item);
this.formHasError = true;
}
});
console.log("this.formHasError", this.formHasError, this.form);
if (this.formHasError) {
return;
}
......@@ -329,7 +350,6 @@ export default {
);
},
editUser(item) {
console.log("editUser", item);
this.form = {...item};
this.form.AreaCode = Number(this.form.AreaCode)
this.form.IsDefault = this.form.IsDefault === 1
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.form-group {
......@@ -14,7 +13,7 @@
.form-group i {
position: absolute;
right: 12px;
bottom: 0;
top: 0;
z-index: 2;
width: 40px;
height: 40px;
......@@ -44,7 +43,7 @@
}
</style>
<template>
<div class="content q-ma-lg bg-white">
<div class="content bg-white" :class="{'q-ma-lg': $q.platform.is.desktop}">
<div class="q-ma-lg">
<div class="tips">密碼管理</div>
<div>
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
max-width: 940px;
}
.tips {
height: 42px;
background: #f5f5f5;
border-radius: 8px;
padding: 0 35px;
line-height: 42px;
padding: 10px 35px;
line-height: 22px;
}
::v-deep .q-field__control {
height: 40px;
......@@ -29,11 +27,16 @@
.title {
margin-top: 20px;
margin-bottom: 10px;
margin-left: 10px;
}
</style>
<template>
<div class="content q-ma-lg bg-white q-pa-lg">
<div class="tips">
<div
class="bg-white"
:class="$q.platform.is.desktop ? 'content q-ma-lg' : 'full-width'"
>
<div class="q-ma-lg">
<div class="tips q-mb-lg">
個人信息<span class="text-grey-6"
>(以下信息仅用于帮助你在支付时自动填写你的个人资料,你的信息将会安全地被印象保存且不会公开)</span
>
......@@ -41,14 +44,13 @@
<div>
<form @submit.prevent.stop="submit" class="q-gutter-md">
<div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<div class="col">
<div class="title"></div>
<q-input
class="form-item"
v-model="form.Surname"
outlined
placeholder="姓"
ref="Surname"
:rules="[(val) => !!val || '请输入姓氏']"
></q-input>
......@@ -58,21 +60,19 @@
<q-input
ref="Name"
class="form-item"
placeholder="名"
v-model="form.Name"
outlined
:rules="[(val) => !!val || '请输入名字']"
></q-input>
</div>
</div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<div class="col">
<div class="title">姓氏(需與旅遊證件一致)</div>
<q-input
class="form-item"
v-model="form.EnName"
outlined
placeholder="姓氏(需與旅遊證件一致)"
ref="EnName"
:rules="[(val) => !!val || '请输入姓氏(需與旅遊證件一致)']"
></q-input>
......@@ -82,17 +82,17 @@
<q-input
ref="EnSurname"
class="form-item"
placeholder="名字(需與旅遊證件一致)"
v-model="form.EnSurname"
standout
outlined
:rules="[(val) => !!val || '请输入名字(需與旅遊證件一致)']"
></q-input>
</div>
</div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<div class="col">
<div class="title">居住國家/地區</div>
<q-select
@input="changeCountry"
emit-value
map-options
ref="Country"
......@@ -103,7 +103,6 @@
class="form-item"
v-model="form.Country"
:options="countList"
placeholder="请选择居住國家/地區"
:rules="[(val) => Boolean(val) || '请选择居住國家/地區']"
/>
</div>
......@@ -120,14 +119,13 @@
option-label="Name"
v-model="form.Appellation"
:options="AppellationList"
placeholder="请选择稱謂"
:rules="[(val) => Boolean(val) || '请选择稱謂']"
/>
</div>
</div>
<div class="row">
<div class="col">
<div :class="$q.platform.is.desktop ? 'row' : 'culmuns'">
<!-- <div class="col">
<div class="title">國家/地區代碼</div>
<q-select
emit-value
......@@ -140,29 +138,30 @@
class="form-item"
v-model="form.PhoneCountry"
:options="phoneCountList"
placeholder="请选择國家/地區代碼"
:rules="[(val) => Boolean(val) || '请选择國家/地區代碼']"
/>
</div>
</div> -->
<div class="col">
<div class="title">電話(首次需驗證)</div>
<q-input
ref="Moblie"
class="form-item"
placeholder="電話(首次需驗證)"
v-model="form.Moblie"
outlined
:rules="[(val) => !!val || '请输入電話(首次需驗證)']"
></q-input>
>
<template v-slot:prepend>
<div class="text-subtitle2">
{{ form.PhoneCountryStr }}
</div>
</template></q-input
>
</div>
<div class="row">
<div class="col">
<div class="title">出生日期</div>
<q-input
ref="BirthDate"
class="form-item"
placeholder="出生日期"
v-model="form.BirthDate"
outlined
mask="date"
......@@ -183,15 +182,18 @@
</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"
placeholder="電子郵件(接收订单确认邮件)"
v-model="form.Mailbox"
outlined
:rules="[(val) => !!val || '请输入電子郵件(接收订单确认邮件)']"
:rules="[
(val) => !!val || '请输入電子郵件(接收订单确认邮件)',
]"
></q-input>
</div>
</div>
......@@ -202,6 +204,7 @@
</form>
</div>
</div>
</div>
</template>
<script>
export default {
......@@ -226,7 +229,6 @@ export default {
},
mounted() {
this.userInfo = JSON.parse(window.localStorage.getItem("b2bUser"));
console.log("getUserInfo", this.userInfo);
this.getUserInfo();
this.getCountryInfo();
this.GetAppellationEnum();
......@@ -241,8 +243,14 @@ export default {
const { phoneCountList, countList } = res.data.data;
this.countList = countList;
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 {
// this.$notify(res.data.message);
this.$q.notify({
type: "negative",
message: res.data.message,
......@@ -254,6 +262,12 @@ export default {
null
);
},
changeCountry(id) {
this.form.PhoneCountry = this.phoneCountList.find(
(x) => x.ID == id
).PhoneCode;
this.form.PhoneCountryStr = "+" + this.form.PhoneCountry;
},
GetAppellationEnum() {
this.apipost(
"GetAppellationEnum_post",
......@@ -283,6 +297,9 @@ export default {
(res) => {
if (res.data.resultCode == 1) {
this.form = res.data.data;
if (this.phoneCountList.length) {
this.changeCountry(this.form.Country);
}
} else {
// this.$notify(res.data.message);
this.$q.notify({
......@@ -297,7 +314,7 @@ export default {
);
},
submitUserInfo() {
let params = {...this.form}
let params = { ...this.form };
// params.Appellation = params.Appellation.ID
// params.Country = params.Country.ID
// params.PhoneCountry = params.PhoneCountry.ID
......@@ -323,23 +340,28 @@ export default {
}
},
null
) ;
);
},
submit() {
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) => {
console.log('this.$refs[item]', this, item, this.$refs[item])
this.$refs[item].validate();
});
verifyArr.forEach((item) => {
console.log('item', item)
if (this.$refs[item].hasError) {
console.log('item', item)
this.formHasError = true;
}
});
console.log('this.formHasError', this.formHasError, this.form)
if (this.formHasError) {
return;
}
......
<style lang="scss" scoped>
.form-item {
max-width: 320px;
height: 40px;
margin: 10px;
}
.content {
......@@ -43,6 +42,7 @@
.title {
margin-top: 20px;
margin-bottom: 10px;
margin-left: 10px;
}
.phone {
margin-left: 100px;
......@@ -82,13 +82,13 @@
}
</style>
<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>
<div class="card" v-for="item in pageData" :key="item.id">
<div class="flex card-title justify-between">
<div class="flex">
<span>{{ item.Name }}</span>
<span class="phone">手機號:{{ item.Mobile }}</span>
<span v-if="$q.platform.is.desktop" class="phone">手機號:{{ item.Mobile }}</span>
</div>
<span>
<span class="user-edit" @click="editUser(item)">编辑</span>
......@@ -98,14 +98,15 @@
</span>
</div>
<div class="q-pa-sm">
<span class="q-ml-sm" v-if="$q.platform.is.mobile">手機號:{{ item.Mobile }}</span>
<div class="q-pa-sm full-width"
:class="{ 'border-b': index < item.CardList.length - 1 }"
v-for="(el, index) in item.CardList"
:key="index"
>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col-6">{{ el.TypeName }}</div>
<div class="col-6">{{ el.CardNo }}</div>
<div class="col-6" :class="$q.platform.is.mobile ? 'q-mt-xs': ''">{{ el.CardNo }}</div>
</div>
</div>
</div>
......@@ -142,14 +143,13 @@
<div class="f22 bold">{{ form.Id ? "编辑" : "新增" }}出行人信息</div>
<form @submit.prevent.stop="submit" class="q-gutter-md">
<div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col">
<div class="title"></div>
<q-input
class="form-item"
v-model="form.SurName"
outlined
placeholder="姓"
ref="SurName"
:rules="[(val) => !!val || '请输入姓氏']"
></q-input>
......@@ -159,21 +159,19 @@
<q-input
ref="Name"
class="form-item"
placeholder="名"
v-model="form.Name"
outlined
:rules="[(val) => !!val || '请输入名字']"
></q-input>
</div>
</div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col">
<div class="title">姓氏(需與旅遊證件一致)</div>
<q-input
class="form-item"
v-model="form.EnName"
outlined
placeholder="姓氏(需與旅遊證件一致)"
ref="EnName"
:rules="[(val) => !!val || '请输入姓氏(需與旅遊證件一致)']"
></q-input>
......@@ -183,7 +181,6 @@
<q-input
ref="EnSurName"
class="form-item"
placeholder="名字(需與旅遊證件一致)"
v-model="form.EnSurName"
outlined
:rules="[(val) => !!val || '请输入名字(需與旅遊證件一致)']"
......@@ -191,7 +188,7 @@
</div>
</div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col">
<div class="title">國家/地區代碼</div>
<q-select
......@@ -205,7 +202,6 @@
class="form-item"
v-model="form.AreaCode"
:options="phoneCountList"
placeholder="请选择國家/地區代碼"
:rules="[(val) => Boolean(val) || '请选择國家/地區代碼']"
/>
</div>
......@@ -214,7 +210,6 @@
<q-input
ref="Mobile"
class="form-item"
placeholder="手機號"
v-model="form.Mobile"
outlined
:rules="[(val) => !!val || '请输入手機號']"
......@@ -233,7 +228,7 @@
<img style="width: 15px" src="../../assets/img/delete.png" />
</div>
</div>
<div class="row">
<div :class="$q.platform.is.desktop ? 'row': 'culmuns'">
<div class="col">
<div class="title">证件类型</div>
<q-select
......
......@@ -175,6 +175,12 @@ const routes = [{
]
},
{
path: '/userCenter', //移动端个人中心
meta: { isUserCenter: true, needLogin: true },
component: () =>
import ('pages/usercenter/mobileUserCenter.vue')
},
{
path: '/login',
component: () =>
......
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