Commit 4846e72d authored by youjie's avatar youjie

no message

parent 1a00973d
...@@ -10,11 +10,13 @@ let converterSW = OpenCC.Converter({ from: 'tw', to: 'cn' }) //转简 ...@@ -10,11 +10,13 @@ let converterSW = OpenCC.Converter({ from: 'tw', to: 'cn' }) //转简
let datas: any // 接收需要转简数据 let datas: any // 接收需要转简数据
let language = '' as any //语言 let language = '' as any //语言
let currencyCode = 'JPY' //币种 let currencyCode = 'JPY' //币种
const request = (cmd:string,msg:any): Promise<HttpResponse>=>{ const request = (cmd:string,msg:any,isTrans:boolean=true): Promise<HttpResponse>=>{
datas = msg datas = msg
if(locale.value=='zhTW'){ if(locale.value=='zhTW'){
// let stringifyData = converterSW(JSON.stringify(msg)) if(isTrans){
// datas = JSON.parse(stringifyData) let stringifyData = converterSW(JSON.stringify(msg))
datas = JSON.parse(stringifyData)
}
language = 'zh_TW' language = 'zh_TW'
// currencyCode = 'TWD' // currencyCode = 'TWD'
}else if(locale.value=='zhSW'){ }else if(locale.value=='zhSW'){
......
...@@ -45,7 +45,7 @@ class HotelService { ...@@ -45,7 +45,7 @@ class HotelService {
param.reviewRatingLowerLimits=param.reviewRatingLowerLimits&&param.reviewRatingLowerLimits!=''?param.reviewRatingLowerLimits:0 param.reviewRatingLowerLimits=param.reviewRatingLowerLimits&&param.reviewRatingLowerLimits!=''?param.reviewRatingLowerLimits:0
param.searchMaxRate=param.searchMaxRate&&param.searchMaxRate!=''?param.searchMaxRate:0 param.searchMaxRate=param.searchMaxRate&&param.searchMaxRate!=''?param.searchMaxRate:0
param.searchMinRate=param.searchMinRate&&param.searchMinRate!=''?param.searchMinRate:0 param.searchMinRate=param.searchMinRate&&param.searchMinRate!=''?param.searchMinRate:0
return request('dmc_post_Get_GetJAPAN_HotelList',param) return request('dmc_post_Get_GetJAPAN_HotelList',param,false)
} }
} }
......
...@@ -2,9 +2,17 @@ import { HttpResponse } from '../@types' ...@@ -2,9 +2,17 @@ import { HttpResponse } from '../@types'
import request from './request' import request from './request'
class TicketService { class TicketService {
// 取消门票訂單
static async setTicketOrderCancel(OrderId:number):Promise<HttpResponse>{
return request('ticket_post_CancelTicketOrder',{OrderId})
}
// 门票訂單
static async getTicketOrderList(param:any):Promise<HttpResponse>{
return request('ticket_post_GetMyTicketOrderPageList',param)
}
// 提交訂單 // 提交訂單
static async setTicketOrder(param:any):Promise<HttpResponse>{ static async setTicketOrder(param:any):Promise<HttpResponse>{
return request('ticket_post_SetSaleTicketOrder',param) return request('ticket_post_SetTicketOrder',param)
} }
// 门票详情 // 门票详情
static async getTicketInfo(param:any):Promise<HttpResponse>{ static async getTicketInfo(param:any):Promise<HttpResponse>{
......
...@@ -79,7 +79,7 @@ ...@@ -79,7 +79,7 @@
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-HandFittingFee="props"> <template v-slot:body-cell-HandFittingFee="props">
<q-td :props="props" :rowspan="x.DetailList.length" v-if="props.rowIndex == 0"> <q-td :props="props" :colspan="x.DetailList.length" v-if="props.rowIndex == 0">
{{ moneyFormat(x.HandFittingFee) }} {{ moneyFormat(x.HandFittingFee) }}
<div class="q-mt-sm" v-if="x.OrderStatus==2"> <div class="q-mt-sm" v-if="x.OrderStatus==2">
<q-btn size="sm" dense outline color="primary" v-if="x.ContractUrl"> <q-btn size="sm" dense outline color="primary" v-if="x.ContractUrl">
...@@ -145,7 +145,7 @@ ...@@ -145,7 +145,7 @@
<div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd"> <div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd">
<div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div> <div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div>
<div class="dark q-ml-xl"> <div class="dark q-ml-xl">
<span class="f12">{{ $t('unit.jpc') }}</span> <!-- <span class="f12">{{ $t('unit.jpc') }}</span> -->
<span class="din text-subtitle1">{{ moneyFormat(x.Money) }}</span> <span class="din text-subtitle1">{{ moneyFormat(x.Money) }}</span>
<span class="f12">{{ $t('unit.jp') }}</span> <span class="f12">{{ $t('unit.jp') }}</span>
</div> </div>
......
...@@ -6,59 +6,135 @@ ...@@ -6,59 +6,135 @@
<div class="row items-center"> <div class="row items-center">
<span class="f12 text-grey-900 text-subtitle2 text-weight-bold" :class="{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }">{{ $t('v102.ticket.gi') }}</span> <span class="f12 text-grey-900 text-subtitle2 text-weight-bold" :class="{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }">{{ $t('v102.ticket.gi') }}</span>
<span class="col f12"> <span class="col f12">
<q-radio v-model="m.OrderType" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="0" :label="$t('v102.ticket.zq')" /> <q-radio v-model="m.MailingState" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="1" :label="$t('v102.ticket.zq')" />
<q-radio v-model="m.OrderType" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="1" :label="$t('v102.ticket.yj')" /> <q-radio v-model="m.MailingState" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="2" :label="$t('v102.ticket.yj')" />
</span> </span>
</div> </div>
<div v-if="m.OrderType == 0" class="bg-light-blue-1 q-pa-md fz14 rounded-borders q-mt-md"> <div v-if="m.MailingState == 1" class="bg-light-blue-1 q-pa-md fz14 rounded-borders q-mt-md">
<div class="text-weight-bold">{{ $t('v102.ticket.zqs') }}</div> <div class="text-weight-bold">{{ $t('v102.ticket.zqs') }}</div>
<div class="text-grey-900 q-mt-sm f12">{{ $t('v102.ticket.zqd') }}</div> <div class="text-grey-900 q-mt-sm f12">{{ $t('v102.ticket.zqd') }}</div>
</div> </div>
<div v-else> <div>
<div class="q-mt-md"> <div class="q-mt-md">
<span class="f12 text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.sj') }}</span> <span class="f12 text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.sj') }}</span>
</div> </div>
<div class="row items-center q-mt-md text-grey-600 q-mb-md" v-if="$q.platform.is.desktop"> <div class="row items-center q-mt-md text-grey-600 q-mb-md" v-if="$q.platform.is.desktop">
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c1') }}</div> <div class="col q-mr-md">{{ $t('v102.ticket.sjc.c1') }}</div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c2') }}</div> <div class="col q-mr-md">{{ $t('v102.ticket.sjc.c2') }}</div>
<!-- <div class="col-2 q-mr-md">{{ $t('v102.ticket.sjc.c3') }}</div> --> <div class="col-2 q-mr-md">{{ $t('v102.ticket.sjc.c3') }}</div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c4') }}</div> <div class="col q-mr-md">{{ $t('v102.ticket.sjc.c4') }}</div>
<div class="col-4">{{ $t('v102.ticket.sjc.c5') }}</div> <div class="col-4" v-if="m.MailingState == 2">{{ $t('v102.ticket.sjc.c5') }}</div>
</div> </div>
<div style="border-top: 1px dashed #eee" :class="{ 'row items-center': $q.platform.is.desktop, column: $q.platform.is.mobile }"> <div style="border-top: 1px dashed #eee" :class="{ 'row items-center': $q.platform.is.desktop, column: $q.platform.is.mobile }">
<q-input dense standout v-model="m.ContactName" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c1')" /> <q-input dense standout v-model="m.Name" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c1')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestName"/>
<q-input dense standout v-model="m.ContactEnName" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c2')" /> <q-input dense standout v-model="m.EName" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c2')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestEName"/>
<q-input dense standout v-model="m.ContactPhone" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c4')" /> <div class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }">
<q-input dense standout v-model="m.Address" class="col-4 q-mt-md" :placeholder="$t('v102.ticket.sjcp.c5')" /> <q-radio v-model="m.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="Number(1)" :label="$t('v102.ticket.sex.man')" />
<q-radio v-model="m.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="Number(2)" :label="$t('v102.ticket.sex.women')" />
</div>
<q-input dense standout v-model="m.Mobile" class="col q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }" :placeholder="$t('v102.ticket.sjcp.c4')" :rules="[ val => val && val.length == 11 || ' ']" ref="guestMobile"/>
<q-input v-if="m.MailingState == 2" dense standout v-model="m.MailingAddress" class="col-4 q-mt-md" :placeholder="$t('v102.ticket.sjcp.c5')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestAddress"/>
</div> </div>
</div> </div>
<div class="q-mt-md"> <div class="q-mt-md">
<q-input v-model="m.Remark" standout autogrow :label="$t('v102.ticket.or')" /> <q-input v-model="m.Remark" standout autogrow :label="$t('v102.ticket.or')" />
</div> </div>
<div class="q-mt-lg text-right"> <div class="q-mt-lg text-right">
<q-btn color="negative" class="q-px-lg" :label="$t('v102.to.m.c')" v-close-popup flat dense /> <!-- v-close-popup flat dense -->
<q-btn color="primary" class="q-ml-md q-px-lg" :label="$t('v102.to.m.c')" v-close-popup unelevated dense /> <q-btn color="negative" class="q-px-lg" :label="$t('v102.to.m.c')" @click="close" />
<q-btn color="primary" class="q-ml-md q-px-lg" :label="$t('v102.to.m.s')" @click="submit"/>
</div> </div>
</q-card> </q-card>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, reactive, toRefs, watch } from 'vue' import { ref, defineComponent, reactive, toRefs, watch} from 'vue'
import { ApiResult } from 'src/@types/enumHelper'
import TicketService from '../../../api/ticket'
import message from '../../../utils/message'
import { useI18n } from 'vue-i18n'
export default defineComponent({ export default defineComponent({
props: ['order'], props: ['order'],
setup(props) { setup(props, context) {
watch( watch(
() => props.order, () => props.order,
(n, o) => { (n, o) => {
data.m = JSON.parse(JSON.stringify(n)) // data.m = JSON.parse(JSON.stringify(n))
} }
) )
const { t } = useI18n()
const guestName = ref(null) as any
const guestEName = ref(null) as any
const guestMobile = ref(null) as any
const guestAddress = ref(null) as any
const data = reactive({ const data = reactive({
m: {} as any m: {} as any,
loading: false
}) })
const methods = {}
data.m=JSON.parse(JSON.stringify(props.order)) data.m=JSON.parse(JSON.stringify(props.order))
return { ...toRefs(data), ...methods }
const methods = {
close(){
context.emit('close')
},
submit(){
if(data.loading) return
data.loading = true
let flag = false
guestName.value.validate()
guestEName.value.validate()
guestMobile.value.validate()
if(data.m.MailingState=='2'){
guestAddress.value.validate()
flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError && !guestAddress.value.hasError
}else{
flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError
data.m.MailingAddress = ''
}
if(!flag) return
let m = {
IsUpdateMailing: 1,
OrderId: data.m.OrderId,
CouponsId: data.m.CouponsId,
Money: data.m.Money,
UseDate: data.m.UseDate,
Birthday: data.m.Birthday,
DetailList: data.m.DetailList,
MailingState: data.m.MailingState,//邮寄状态 1自取 2邮寄
MailingAddress: data.m.MailingAddress,//MailingState =2 填写邮寄
Name: data.m.Name,
EName: data.m.EName,
Sex: data.m.Sex,//1男2女
Mobile: data.m.Mobile,
Remark: data.m.Remark,
}
let param = Object.assign(m)
TicketService.setTicketOrder(param)
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
context.emit('success')
message.successMsg(`${t('success')}`)
} else {
message.errorMsg(r.data.message)
}
data.loading = false
}).catch(e => {
data.loading = false
message.errorMsg(e.message)
})
}
}
return {
...toRefs(data),
...methods,
guestName,
guestEName,
guestMobile,
guestAddress
}
} }
}) })
</script> </script>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="rounded-borders bg-white row items-center q-pa-md"> <div class="rounded-borders bg-white row items-center q-pa-md">
<q-select v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderStatus" @update:model-value="setOrderStatus" dense :options="status" emit-value option-label="StatusName" option-value="StatusId" map-options :label="$t('hotelorder.search.status')" standout /> <q-select v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderStatus" @update:model-value="setOrderStatus" dense :options="status" emit-value option-label="StatusName" option-value="StatusId" map-options :label="$t('hotelorder.search.status')" standout />
<q-input v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderNo" dense standout :label="$t('hotelorder.search.orderNum')" /> <q-input v-if="$q.platform.is.desktop" class="q-mr-md" v-model="search.OrderNo" dense standout :label="$t('hotelorder.search.orderNum')" />
<q-field v-if="$q.platform.is.desktop" clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout class="col-2" style="min-width: 190px" dense> <q-field v-if="$q.platform.is.desktop" clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout class="col-2" style="min-width: 190px" dense @clear="getDateRange">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> <div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy"> <q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape @range-end="dateRangeHandler"></q-date> <q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape @range-end="dateRangeHandler"></q-date>
...@@ -21,20 +21,33 @@ ...@@ -21,20 +21,33 @@
<q-input v-model="search.OrderId" dense standout :label="$t('hotelorder.search.orderId')" class="col" /> <q-input v-model="search.OrderId" dense standout :label="$t('hotelorder.search.orderId')" class="col" />
</div> </div>
<div class="mobile-only q-mt-md"> <div class="mobile-only q-mt-md">
<q-field clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout style="min-width: 190px" dense> <q-field clearable v-model="dateRangeFormat" :label="$t('hotelorder.search.daterange')" standout style="min-width: 190px" dense @clear="getDateRange">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> <div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy"> <q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" @range-end="dateRangeHandler"></q-date> <q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" @range-end="dateRangeHandler" ></q-date>
</q-popup-proxy> </q-popup-proxy>
</q-field> </q-field>
</div> </div>
<div class="mobile-only q-mt-md">
<q-field clearable v-model="dateRangeFormatUse" :label="$t('hotelorder.search.daterange')" standout style="min-width: 190px" dense @clear="getDateRangeUse">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormatUse }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxyUse">
<q-date v-model="dateRangeUse" :options="optionsFnUse" range mask="YYYY/MM/DD" @range-end="dateRangeHandlerUse" ></q-date>
</q-popup-proxy>
</q-field>
</div>
<!-- <div class="q-mt-md">
<q-field clearable v-model="dateRangeFormatUse" :label="$t('v102.ticket.starttime')" standout class="col" style="min-width: 190px" dense @clear="getDateRangeUse">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormatUse }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxyUse">
<q-date v-model="dateRangeUse" :options="optionsFnUse" range mask="YYYY/MM/DD" @range-end="dateRangeHandlerUse" ></q-date>
</q-popup-proxy>
</q-field>
</div> -->
<div class="q-mt-md"> <div class="q-mt-md">
<q-input v-model="search.TicketName" dense standout :label="$t('v102.to.ticketName')" /> <q-input v-model="search.Name" dense standout :label="$t('v102.to.Name')" />
</div> </div>
<q-select class="q-mt-md" v-model="search.OrderType" dense :options="orderTypes" emit-value option-label="TypeName" option-value="TypeId" map-options :label="$t('v102.to.qj')" standout /> <q-select class="q-mt-md" v-model="search.MailingState" dense :options="orderTypes" emit-value option-label="TypeName" option-value="TypeId" map-options :label="$t('v102.to.qj')" standout />
<q-input v-model="search.ContactName" dense standout :label="$t('v102.to.qjc')" class="q-mt-md" v-if="search.OrderType == 1" />
<q-input v-model="search.ContactNumber" dense standout :label="$t('v102.to.qjp')" class="q-mt-md" v-if="search.OrderType == 1" />
</q-card> </q-card>
</q-popup-proxy> </q-popup-proxy>
...@@ -61,13 +74,16 @@ export default defineComponent({ ...@@ -61,13 +74,16 @@ export default defineComponent({
components: { svgIcon }, components: { svgIcon },
setup(props) { setup(props) {
const qDateProxy = ref(null) as any const qDateProxy = ref(null) as any
const qDateProxyUse = ref(null) as any
const $q = useQuasar() const $q = useQuasar()
const data = reactive({ const data = reactive({
status: [] as Array<StandardStatus>, status: [] as Array<StandardStatus>,
cancelStatus: {} as StandardStatus | undefined, cancelStatus: {} as StandardStatus | undefined,
dateRangeFormat: '', dateRangeFormat: '',
dateRangeFormatUse: '',
dateRange: {} as any, dateRange: {} as any,
dateRangeUse: {} as any,
orderTypes: [] as Array<OrderType>, orderTypes: [] as Array<OrderType>,
canHide: false canHide: false
}) })
...@@ -85,9 +101,28 @@ export default defineComponent({ ...@@ -85,9 +101,28 @@ export default defineComponent({
}) })
data.orderTypes = getTicketOrderType(true) data.orderTypes = getTicketOrderType(true)
}, },
optionsFnUse(cd: any) {
return true
},
optionsFn(cd: any) { optionsFn(cd: any) {
return cd < date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD') return cd < date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD')
}, },
getDateRangeUse(value){
search.UseSTime = ''
search.UseETime = ''
data.dateRangeFormatUse = ''
},
getDateRange(value){
search.StartTime = ''
search.EndTime = ''
data.dateRangeFormat = ''
},
dateRangeHandlerUse(e: any) {
search.UseSTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.UseETime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormatUse = `${search.UseSTime} - ${search.UseETime} `
if (qDateProxyUse.value) qDateProxyUse.value.hide()
},
dateRangeHandler(e: any) { dateRangeHandler(e: any) {
search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}` search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} ` search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} `
...@@ -99,12 +134,12 @@ export default defineComponent({ ...@@ -99,12 +134,12 @@ export default defineComponent({
realSearch.RoomType = search.RoomType realSearch.RoomType = search.RoomType
realSearch.StartTime = search.StartTime realSearch.StartTime = search.StartTime
realSearch.EndTime = search.EndTime realSearch.EndTime = search.EndTime
realSearch.UseSTime = search.UseSTime
realSearch.UseETime = search.UseETime
realSearch.OrderStatus = search.OrderStatus realSearch.OrderStatus = search.OrderStatus
realSearch.OrderNo = search.OrderNo realSearch.OrderNo = search.OrderNo
realSearch.OrderType = search.OrderType realSearch.MailingState = search.MailingState
realSearch.TCNum = search.TCNum realSearch.Name = search.Name
realSearch.ContactName = search.ContactName
realSearch.ContactNumber = search.ContactNumber
console.log(realSearch) console.log(realSearch)
}, },
setOrderStatus(statusId: number) { setOrderStatus(statusId: number) {
...@@ -120,10 +155,9 @@ export default defineComponent({ ...@@ -120,10 +155,9 @@ export default defineComponent({
if (search.OrderNo > 0) setCnt++ if (search.OrderNo > 0) setCnt++
} }
if (search.OrderId.length > 0) setCnt++ if (search.OrderId.length > 0) setCnt++
if (search.RoomType > 0) setCnt++ if (search.UseSTime.length > 0) setCnt++
if (search.OrderType > 0) setCnt++ if (search.MailingState > 0) setCnt++
if (search.OrderType == 1 && search.ContactName.length > 0) setCnt++ if (search.Name) setCnt++
if (search.OrderType == 2 && search.ContactNumber.length > 0) setCnt++
return setCnt return setCnt
}) })
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat v-for="x in orders"> <q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat v-for="x in orders">
<div class="row items-center desktop-only"> <div class="row items-center desktop-only">
<div class="q-mr-md"> <div class="q-mr-md">
<q-btn :color="x.OrderType == 0 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.OrderType == 0 ? $t('v102.ticket.zq') : $t('v102.ticket.yj')}`"></q-btn> <q-btn :color="x.MailingState == 1 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.MailingState == 1 ? $t('v102.ticket.zq') : $t('v102.ticket.yj')}`"></q-btn>
</div> </div>
<div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div> <div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div>
<div class="q-ml-md"> <div class="q-ml-md">
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<q-btn color="cyan" icon="check" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn> <q-btn color="cyan" icon="check" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn>
</div> </div>
<div class="col text-center f12 text-grey-6"> <div class="col text-center f12 text-grey-6">
<span v-if="x.OrderType == 1">{{ $t('v102.ticket.sj') }}{{ x.ContactName }}({{ x.ContactEnName }})/{{ x.ContactPhone }}</span> <span v-if="x.MailingState">{{ $t('v102.ticket.sj') }}{{ x.Name }}({{ x.EName }})/{{ x.Mobile }}</span>
</div> </div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div> <div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]"> <div class="q-ml-md f12" :class="[x.typeInfo.Color]">
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<div class="mobile-only"> <div class="mobile-only">
<div class="row justify-between"> <div class="row justify-between">
<div class="q-mr-md"> <div class="q-mr-md">
<q-btn :color="x.OrderType == 1 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.OrderType == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn> <q-btn :color="x.MailingState == 1 ? 'cyan' : 'negative'" unelevated disable size="sm" :label="`${x.MailingState == 1 ? $t('hotelorder.orderType.guest') : $t('hotelorder.orderType.tour')}`"></q-btn>
</div> </div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]"> <div class="q-ml-md f12" :class="[x.typeInfo.Color]">
<q-icon :name="x.typeInfo.Icon" /> <q-icon :name="x.typeInfo.Icon" />
...@@ -38,21 +38,17 @@ ...@@ -38,21 +38,17 @@
</div> </div>
</div> </div>
<div class="f12 text-grey-6"> <div class="f12 text-grey-6">
<span v-if="x.OrderType == 1">{{ $t('hotelorder.search.contactInfo') }}{{ x.ContactName }}({{ x.ContactEnName }})/{{ x.ContactPhone }}</span> <span v-if="x.MailingState">{{ $t('hotelorder.search.contactInfo') }}{{ x.Name }}({{ x.EName }})/{{ x.ContactPhone }}</span>
</div> </div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div> <div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
</div> </div>
</div> </div>
<div class="q-mt-md row"> <div class="q-mt-md row">
<q-table separator="cell" :hide-bottom="!x.Remark" :pagination="{ rowsPerPage: 100 }" dense :rows="x.DetailList" bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow"> <q-table separator="cell" :hide-bottom="!x.Remark" :pagination="{ rowsPerPage: 100 }" :rows="x.DetailList" bordered :columns="cols" class="sticky-rightrowspan-column-table light-border col no-shadow">
<template v-slot:body-cell-TicketInfo="props"> <template v-slot:body-cell-Date="props">
<q-td :props="props"> <q-td :props="props" :rowspan="x.DetailList.length" v-if="props.rowIndex == 0">
<div class="room-item f12 text-grey-6" v-for="x in props.row.TicketList"> {{x.UseDate}}
<span class="q-mr-md"> {{ x.TypeName }}: {{ x.Num }} {{ $t('v102.ticket.unit') }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.unitPrice') }}: {{ x.Price ?? 1 }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.xj') }}: {{ x.Money ?? 1 }} </span>
</div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-TicketName="props"> <template v-slot:body-cell-TicketName="props">
...@@ -61,6 +57,11 @@ ...@@ -61,6 +57,11 @@
<q-tooltip>{{ props.value }}</q-tooltip> <q-tooltip>{{ props.value }}</q-tooltip>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-Money="props">
<q-td :props="props" >
{{props.row.Money}}
</q-td>
</template>
<template v-slot:bottom> <template v-slot:bottom>
<div class="msl text-negative">{{ $t('v101.hotelRemark') }}{{ x.Remark }}</div> <div class="msl text-negative">{{ $t('v101.hotelRemark') }}{{ x.Remark }}</div>
</template> </template>
...@@ -70,16 +71,18 @@ ...@@ -70,16 +71,18 @@
<div class="q-mt-md" v-if="x.OrderStatus != 3" :class="{ row: $q.platform.is.desktop, 'column reverse': $q.platform.is.mobile }"> <div class="q-mt-md" v-if="x.OrderStatus != 3" :class="{ row: $q.platform.is.desktop, 'column reverse': $q.platform.is.mobile }">
<div class="pay row text-grey rounded-borders" :class="{ 'bg-grey-2 q-mt-md': $q.platform.is.mobile, col: $q.platform.is.desktop }"> <div class="pay row text-grey rounded-borders" :class="{ 'bg-grey-2 q-mt-md': $q.platform.is.mobile, col: $q.platform.is.desktop }">
<div class="bg-orange-1 col-12 rounded-borders q-pa-md"> <div class="bg-orange-1 col-12 rounded-borders q-pa-md">
<div v-if="x.OrderType == 1"> <div v-if="x.MailingState==1||x.MailingState==2">
<div class="text-subtitle2 text-dark text-weight-bolder row items-center"> <div class="text-subtitle2 text-dark text-weight-bolder row items-center">
<span class="col">{{ $t('v102.ticket.sjc.c5') }}:</span> <span class="col">{{ $t('v102.ticket.sjc.c5') }}:</span>
<span class="f12" :class="[x.SendType.Color]">{{ x.SendType.Name }}</span> <span class="f12" :class="[x.SendType.Color]">{{ x.SendType.Name }}</span>
</div> </div>
<div class="f12 text-dark q-mt-sm">{{ x.Address }}</div> <div class="f12 text-dark q-mt-sm">{{ x.MailingAddress }}</div>
</div> </div>
<div v-else> <div v-else>
<div class="text-subtitle2 text-dark text-weight-bolder">{{ $t('v102.ticket.zqa') }}:</div> <div class="text-subtitle2 text-dark text-weight-bolder">{{ $t('v102.ticket.zqa') }}:</div>
<div class="f12 text-dark q-mt-sm">{{ x.ReviceAddress?x.ReviceAddress:$t('v102.ticket.nzqa') }}</div> <div class="f12 text-dark q-mt-sm">
{{ x.SelffetchAddress?x.SelffetchAddress:$t('v102.ticket.nzqa') }}
</div>
</div> </div>
</div> </div>
</div> </div>
...@@ -88,7 +91,7 @@ ...@@ -88,7 +91,7 @@
<div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd"> <div class="row items-center justify-between q-mb-sm q-pb-sm" style="border-bottom: 1px dashed #ddd">
<div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div> <div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div>
<div class="dark q-ml-xl"> <div class="dark q-ml-xl">
<span class="f12">{{ $t('unit.jpc') }}</span> <!-- <span class="f12">{{ $t('unit.jpc') }}</span> -->
<span class="din text-subtitle1">{{ moneyFormat(x.Money) }}</span> <span class="din text-subtitle1">{{ moneyFormat(x.Money) }}</span>
<span class="f12">{{ $t('unit.jp') }}</span> <span class="f12">{{ $t('unit.jp') }}</span>
</div> </div>
...@@ -123,7 +126,7 @@ ...@@ -123,7 +126,7 @@
<div v-else> <div v-else>
<div class="f12 text-green-4">{{ $t('hotelorder.payed') }}</div> <div class="f12 text-green-4">{{ $t('hotelorder.payed') }}</div>
<div class="text-subtitle1 din text-green-14"> <div class="text-subtitle1 din text-green-14">
{{ x.OrderIncome.toFixed(2) }} {{ x.Money.toFixed(2) }}
<span class="text-green-4 f12">{{ $t('unit.jp') }}</span> <span class="text-green-4 f12">{{ $t('unit.jp') }}</span>
</div> </div>
</div> </div>
...@@ -173,11 +176,12 @@ ...@@ -173,11 +176,12 @@
</q-card> </q-card>
</q-dialog> </q-dialog>
<q-dialog v-model="showModify" persistent> <q-dialog v-model="showModify" persistent>
<modify-order-address :order="modifyOrder"></modify-order-address> <modify-order-address :order="modifyOrder" @close="showModify=false" @success="showModify=false,initOrders()"></modify-order-address>
</q-dialog> </q-dialog>
</template> </template>
<script lang="ts"> <script lang="ts">
import TicketService from '../../../api/ticket'
import { DirtionmaryHelper } from '../../../config/dictionary' import { DirtionmaryHelper } from '../../../config/dictionary'
import { defineComponent, inject, reactive, toRefs, watch } from 'vue' import { defineComponent, inject, reactive, toRefs, watch } from 'vue'
import { ApiResult } from '../../../@types/enumHelper' import { ApiResult } from '../../../@types/enumHelper'
...@@ -218,22 +222,47 @@ export default defineComponent({ ...@@ -218,22 +222,47 @@ export default defineComponent({
copyId: 0, copyId: 0,
expendsOrderId: 0, expendsOrderId: 0,
cols: [ cols: [
{ name: 'Date', label: t('hotelorder.col.d'), field: (row: any) => row.Date, align: 'left' }, { name: 'Date', label: t('v102.ticket.d'), field: (row: any) => row.Date, align: 'left' },
{ name: 'TicketName', label: t('hotelorder.col.hn'), field: (row: any) => row.TicketName, align: 'left' }, { name: 'TicketName', label: t('v102.ticket.hn'), field: (row: any) => row.TicketName, align: 'left' },
{ name: 'TicketInfo', label: t('hotelorder.col.r'), align: 'left' }, { name: 'Num', label: t('v102.ticket.sl'), field: (row: any) => row.Num, align: 'left' },
{ name: 'Money', label: t('hotelorder.col.m'), field: (row: any) => row.TicketMoney.toFixed(2), align: 'left' } { name: 'Money', label: t('hotelorder.col.m'), field: (row: any) => row.Money, align: 'left' }
] as any[], ] as any[],
modifyOrder:{} as any, modifyOrder:{} as any,
showModify:false showModify:false
}) })
const methods = { const methods = {
setSuccess(){
console.log('---===')
methods.init()
},
ViewPayment() { ViewPayment() {
data.showBankAccount = true data.showBankAccount = true
}, },
initOrders() { initOrders() {
data.loading = true
let param = Object.assign(data.pages, search) let param = Object.assign(data.pages, search)
//@TODO: TicketService.getTicketOrderList(param)
.then(r => {
data.loading = false
if (r.data.resultCode == ApiResult.SUCCESS) {
r.data.data.pageData.forEach((x: any) => {
x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1]
x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0]
x.Money = 0
x.DetailList.forEach((y:any)=>{
x.Money+=y.Money
})
})
data.orders = r.data.data.pageData
data.pages.pageCount = r.data.data.pageCount
} else {
message.errorMsg(r.data.message)
}
}).catch(e => {
message.errorMsg(e.message)
data.loading = false
})
}, },
cancelConfirmHandler(orderId: number) { cancelConfirmHandler(orderId: number) {
$q.dialog({ $q.dialog({
...@@ -248,7 +277,20 @@ export default defineComponent({ ...@@ -248,7 +277,20 @@ export default defineComponent({
cancelOrderHandler(orderId: number) { cancelOrderHandler(orderId: number) {
if (data.loading) return if (data.loading) return
data.loading = true data.loading = true
//@TODO: TicketService.setTicketOrderCancel(orderId)
.then(r => {
data.loading = false
if (r.data.resultCode == ApiResult.SUCCESS) {
methods.init()
message.successMsg(`${t('success')}`)
} else {
message.errorMsg(r.data.message)
}
}).catch(e => {
message.errorMsg(e.message)
data.loading = false
})
}, },
setShowWarnHander(id: number) { setShowWarnHander(id: number) {
data.expendsOrderId = id == data.expendsOrderId ? 0 : id data.expendsOrderId = id == data.expendsOrderId ? 0 : id
...@@ -263,6 +305,7 @@ export default defineComponent({ ...@@ -263,6 +305,7 @@ export default defineComponent({
methods.initOrders() methods.initOrders()
}, },
modify(order:any) { modify(order:any) {
// order.Sex = JSON.stringify(order.Sex)
data.modifyOrder=order data.modifyOrder=order
data.showModify =true data.showModify =true
}, },
...@@ -282,89 +325,89 @@ export default defineComponent({ ...@@ -282,89 +325,89 @@ export default defineComponent({
} }
methods.init() methods.init()
data.orders.push( // data.orders.push(
{ // {
OrderType: 0, // OrderType: 0,
typeInfo: data.status[1], // typeInfo: data.status[1],
OrderIncome: 0.0, // OrderIncome: 0.0,
OrderNo: '20230106214591', // OrderNo: '20230106214591',
OrderId: 89123, // OrderId: 89123,
CreateTime: '2023/01/06 14:34:56', // CreateTime: '2023/01/06 14:34:56',
DetailList: [ // DetailList: [
{ // {
TicketName: '大阪環球影城', // TicketName: '大阪環球影城',
TicketMoney: 4200.0, // TicketMoney: 4200.0,
Date: '2023/09/10', // Date: '2023/09/10',
TicketList: [ // TicketList: [
{ // {
TypeName: '兒童票', // TypeName: '兒童票',
Num: 5, // Num: 5,
Price: 400.0, // Price: 400.0,
Money: 2000.0 // Money: 2000.0
}, // },
{ // {
TypeName: '成人票', // TypeName: '成人票',
Num: 2, // Num: 2,
Price: 800.0, // Price: 800.0,
Money: 1600.0 // Money: 1600.0
}, // },
{ // {
TypeName: '學生票', // TypeName: '學生票',
Num: 1, // Num: 1,
Price: 600.0, // Price: 600.0,
Money: 600.0 // Money: 600.0
} // }
] // ]
} // }
], // ],
Remark: '迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!', // Remark: '迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!',
Money:4200.0, // Money:4200.0,
OrderStatus:1 // OrderStatus:1
}, // },
{ // {
OrderType: 1, // OrderType: 1,
typeInfo: data.status[2], // typeInfo: data.status[2],
OrderIncome: 0.0, // OrderIncome: 0.0,
OrderNo: '2023010621459800', // OrderNo: '2023010621459800',
OrderId: 891452, // OrderId: 891452,
ContactName: '罗超', // ContactName: '罗超',
ContactEnName: 'LUOCHAO', // ContactEnName: 'LUOCHAO',
ContactPhone: '892788812', // ContactPhone: '892788812',
Address: '318国道2913公桩左边的祝桑乡境内', // Address: '318国道2913公桩左边的祝桑乡境内',
CreateTime: '2023/01/06 14:34:56', // CreateTime: '2023/01/06 14:34:56',
DetailList: [ // DetailList: [
{ // {
TicketName: '大阪環球影城', // TicketName: '大阪環球影城',
TicketMoney: 4200.0, // TicketMoney: 4200.0,
Date: '2023/09/10', // Date: '2023/09/10',
TicketList: [ // TicketList: [
{ // {
TypeName: '兒童票', // TypeName: '兒童票',
Num: 5, // Num: 5,
Price: 400.0, // Price: 400.0,
Money: 2000.0 // Money: 2000.0
}, // },
{ // {
TypeName: '成人票', // TypeName: '成人票',
Num: 2, // Num: 2,
Price: 800.0, // Price: 800.0,
Money: 1600.0 // Money: 1600.0
}, // },
{ // {
TypeName: '學生票', // TypeName: '學生票',
Num: 1, // Num: 1,
Price: 600.0, // Price: 600.0,
Money: 600.0 // Money: 600.0
} // }
] // ]
} // }
], // ],
Remark: '迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!', // Remark: '迪士尼陆地乐园 客人姓名:Liu Chang+Hu Yuwei~~~~注意!!! 人数:2大 日期:1月3号 价格:大人490元/张 共收980元,全款已收!',
Money:4200.0, // Money:4200.0,
OrderStatus:2, // OrderStatus:2,
SendType: data.sends[0] // SendType: data.sends[0]
} // }
) // )
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
...@@ -374,7 +417,10 @@ export default defineComponent({ ...@@ -374,7 +417,10 @@ export default defineComponent({
}) })
</script> </script>
<style> <style scoped>
.light-border table td:first-child{
border-left: 1px solid #eee
}
.light-border table, .light-border table,
.light-border table td, .light-border table td,
.light-border .q-table__middle, .light-border .q-table__middle,
......
...@@ -96,7 +96,7 @@ export default { ...@@ -96,7 +96,7 @@ export default {
jian: '간', jian: '간',
ren: '사람이', ren: '사람이',
jp: '엔화', jp: '엔화',
jpc: '¥', jpc: '',
night: '밤', night: '밤',
jf: '칸', jf: '칸',
day: '일' day: '일'
......
...@@ -96,7 +96,7 @@ export default { ...@@ -96,7 +96,7 @@ export default {
jian: '間', jian: '間',
ren: '人', ren: '人',
jp: '日圓', jp: '日圓',
jpc: '¥', jpc: '',
night: '晚', night: '晚',
jf: '間房', jf: '間房',
day: '天' day: '天'
...@@ -788,6 +788,10 @@ export default { ...@@ -788,6 +788,10 @@ export default {
//#region v1.0.2 //#region v1.0.2
v102:{ v102:{
ticket:{ ticket:{
d: '门票日期',
hn: '门票名称',
sl: '数量',
starttime:'门票時間',
pageTitle:"票券檢索", pageTitle:"票券檢索",
name:'請輸入景點名稱', name:'請輸入景點名稱',
toggleListType1:"列表模式", toggleListType1:"列表模式",
...@@ -797,10 +801,6 @@ export default { ...@@ -797,10 +801,6 @@ export default {
recommendTime: '推薦遊玩', recommendTime: '推薦遊玩',
hour: '小時', hour: '小時',
minutes: '分鐘', minutes: '分鐘',
ticketet: '兒童票',
ticketcr: '成人票',
ticketxs: '學生票',
ticketjt: '家庭套票(2大1小)',
load:'圖片加載失敗', load:'圖片加載失敗',
showtt:{ showtt:{
t1:'共', t1:'共',
...@@ -830,7 +830,7 @@ export default { ...@@ -830,7 +830,7 @@ export default {
yj:'郵寄票券', yj:'郵寄票券',
zqs:'自行取票說明', zqs:'自行取票說明',
zqd:'自行前往指定位置取票,當您完成付款後我們將通過郵件通知您取票的門票訊息', zqd:'自行前往指定位置取票,當您完成付款後我們將通過郵件通知您取票的門票訊息',
sj:'收件人訊息', sj:'人訊息',
unit:'張', unit:'張',
sex:{ sex:{
man:'男', man:'男',
...@@ -863,6 +863,7 @@ export default { ...@@ -863,6 +863,7 @@ export default {
to:{ to:{
pageTitle:'票券訂單列表', pageTitle:'票券訂單列表',
ticketName:'票券名稱', ticketName:'票券名稱',
Name: '客人名稱',
qj:'取券方式', qj:'取券方式',
qjc:'取件人姓名(中/英)', qjc:'取件人姓名(中/英)',
qjp:'取件人電話', qjp:'取件人電話',
......
...@@ -29,9 +29,15 @@ export default defineComponent({ ...@@ -29,9 +29,15 @@ export default defineComponent({
OrderStatus: 0, OrderStatus: 0,
StartTime: '', StartTime: '',
EndTime: '', EndTime: '',
TicketName:'',
ContactName: '', // TicketName:'',//景区名称
ContactNumber: '' // ContactName: '',//收件名称
// ContactNumber: '',//电话
Name: '',//顾客名称
UseSTime: '',//门票开始时间
UseETime: '',//门票结束时间
MailingState: -1
}) })
//search.OrderId = currentRouter.currentRoute.value.params.orderId //search.OrderId = currentRouter.currentRoute.value.params.orderId
......
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
<div class="q-mr-md"> <div class="q-mr-md">
<q-img v-if="detailsObj.PicPathList&&detailsObj.PicPathList.length>0" :src="detailsObj.PicPathList[0]" :ratio="16 / 9" spinner-color="grey" spinner-size="50px" width="100px" fit="cover" class="rounded-borders"> <q-img v-if="detailsObj.PicPathList&&detailsObj.PicPathList.length>0" :src="detailsObj.PicPathList[0]" :ratio="16 / 9" spinner-color="grey" spinner-size="50px" width="100px" fit="cover" class="rounded-borders">
<template v-slot:error> <template v-slot:error>
<div class="absolute-full flex flex-center bg-negative text-white"> <div class="absolute-full flex flex-center bg-blue-1 text-dark">
Cannot load image {{$t('v102.ticket.load')}}
</div> </div>
</template> </template>
</q-img> </q-img>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<div class="self-center full-width no-outline" tabindex="0">{{ msg.UseDate }}</div> <div class="self-center full-width no-outline" tabindex="0">{{ msg.UseDate }}</div>
</template> </template>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy"> <q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="msg.UseDate" :options="optionsFn" mask="YYYY/MM/DD"></q-date> <q-date v-model="msg.UseDate" :options="optionsFn" mask="YYYY/MM/DD" @update:model-value="getInfo"></q-date>
</q-popup-proxy> </q-popup-proxy>
</q-field> </q-field>
</div> </div>
...@@ -42,8 +42,10 @@ ...@@ -42,8 +42,10 @@
<div class="f12 text-dark" :class="{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }">{{ $t('v102.ticket.tt') }}:</div> <div class="f12 text-dark" :class="{ 'col-2': $q.platform.is.desktop, 'col-3': $q.platform.is.mobile }">{{ $t('v102.ticket.tt') }}:</div>
<div class="row items-center col wrap q-mt-md"> <div class="row items-center col wrap q-mt-md">
<div class="q-pa-sm rounded-borders q-mr-md q-mb-md cursor-pointer row items-center" :class="{ 'bg-grey-2': !x.checked, 'bg-primary text-white': x.checked }" @click="changeDetailListHandler(x)" v-for="x in types"> <div class="q-pa-sm rounded-borders q-mr-md q-mb-md cursor-pointer row items-center" :class="{ 'bg-grey-2': !x.checked, 'bg-primary text-white': x.checked }" @click="changeDetailListHandler(x)" v-for="x in types">
<span style="border-right: 1px solid #eee" class="q-mr-sm q-pr-sm">{{ x.name }}</span> <template v-if="x.RemainingInventory>0">
<span>{{ x.price.toFixed(2) }}</span> <span style="border-right: 1px solid #eee" class="q-mr-sm q-pr-sm">{{ x.TicketName }}</span>
<span>{{ x.B2BPrice.toFixed(2) }}</span>
</template>
</div> </div>
</div> </div>
</div> </div>
...@@ -83,26 +85,26 @@ ...@@ -83,26 +85,26 @@
<div class="text-weight-bold">{{ $t('v102.ticket.zqs') }}</div> <div class="text-weight-bold">{{ $t('v102.ticket.zqs') }}</div>
<div class="text-grey-900 q-mt-sm f12">{{ $t('v102.ticket.zqd') }}</div> <div class="text-grey-900 q-mt-sm f12">{{ $t('v102.ticket.zqd') }}</div>
</div> </div>
<div v-else> <div>
<div class="q-mt-md"> <div class="q-mt-md">
<span class="f12 text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.sj') }}</span> <span class="f12 text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.sj') }}</span>
</div> </div>
<div class="row items-center q-mt-md text-grey-600 q-mb-md" v-if="$q.platform.is.desktop"> <div class="row items-center q-mt-md text-grey-600 q-mb-md" v-if="$q.platform.is.desktop">
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c1') }}</div> <div class="col q-mr-md">{{ $t('v102.ticket.sjc.c1') }}</div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c2') }}</div> <div class="col q-mr-md">{{ $t('v102.ticket.sjc.c2') }}</div>
<!-- <div class="col-2 q-mr-md">{{ $t('v102.ticket.sjc.c3') }}</div> --> <div class="col-2 q-mr-md">{{ $t('v102.ticket.sjc.c3') }}</div>
<div class="col q-mr-md">{{ $t('v102.ticket.sjc.c4') }}</div> <div class="col q-mr-md">{{ $t('v102.ticket.sjc.c4') }}</div>
<div class="col-4">{{ $t('v102.ticket.sjc.c5') }}</div> <div class="col-4" v-if="msg.MailingState == '2'">{{ $t('v102.ticket.sjc.c5') }}</div>
</div> </div>
<div style="border-top: 1px dashed #eee" :class="{'row items-center':$q.platform.is.desktop,'column':$q.platform.is.mobile}"> <div style="border-top: 1px dashed #eee" :class="{'row items-center':$q.platform.is.desktop,'column':$q.platform.is.mobile}">
<q-input dense standout v-model="msg.Name" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c1')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestEName"/> <q-input dense standout v-model="msg.Name" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c1')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestName"/>
<q-input dense standout v-model="msg.EName" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c2')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestName"/> <q-input dense standout v-model="msg.EName" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c2')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestEName"/>
<!-- <div class="col-2 q-mr-md q-mt-md"> <div class="col-2 q-mr-md q-mt-md">
<q-radio v-model="msg.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="1" :label="$t('v102.ticket.sex.man')" /> <q-radio v-model="msg.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="1" :label="$t('v102.ticket.sex.man')" />
<q-radio v-model="msg.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="0" :label="$t('v102.ticket.sex.women')" /> <q-radio v-model="msg.Sex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="2" :label="$t('v102.ticket.sex.women')" />
</div> --> </div>
<q-input dense standout v-model="msg.Mobile" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c4')" :rules="[ val => val && val.length == 11 || ' ']" ref="guestMobile"/> <q-input dense standout v-model="msg.Mobile" class="col q-mt-md" :class="{'q-mr-md':$q.platform.is.desktop}" :placeholder="$t('v102.ticket.sjcp.c4')" :rules="[ val => val && val.length == 11 || ' ']" ref="guestMobile"/>
<q-input dense standout v-model="msg.MailingAddress" class="col-4 q-mt-md" :placeholder="$t('v102.ticket.sjcp.c5')" :rules="[(val:any, rules:any) => rules.email(val) || ' ']" ref="guestEmail"/> <q-input v-if="msg.MailingState == '2'" dense standout v-model="msg.MailingAddress" class="col-4 q-mt-md" :placeholder="$t('v102.ticket.sjcp.c5')" :rules="[ val => val && val.length > 0 || ' ']" ref="guestAddress"/>
</div> </div>
</div> </div>
<div class="q-mt-md"> <div class="q-mt-md">
...@@ -115,8 +117,7 @@ ...@@ -115,8 +117,7 @@
<div class="bg-orange-1 q-pa-md rounded-borders fz14" style="border: 1px dashed orange"> <div class="bg-orange-1 q-pa-md rounded-borders fz14" style="border: 1px dashed orange">
<div class="text-weight-bold">{{ $t('v102.ticket.d5') }}</div> <div class="text-weight-bold">{{ $t('v102.ticket.d5') }}</div>
<div class="text-grey-700 q-mt-sm"> <div class="text-grey-700 q-mt-sm">
景区营业时间:7:00-15:30 可提前 7天 网上预订, 亦可于当日15:30 前预订景区门票。 (景区严禁携带宠物 景区单日 游客限量18000/日) 1、本景区限网上及手机客户端预订,不接受电话预订,且实行实名制预定,所有游客订票须录入身份证信息方可预定。 2、每个身份证,每日限购一张门票。每个用户每单限购八张门票,超过八张须分别下单。 3、儿童免票也需购票,方可入园。儿童免票对象(实行门票免票优惠的范围和群体):6周岁(含6周岁)以下的儿童享受门票和观光车票全免。 4、优惠对象:在校学生(全日制教育含本科以下)、青少年(7周岁-18周岁)、省级宗教部门颁发证书的宗教界人士、60周岁-64周岁老年人(国家法定节假日)。 5、免票对象:对符合政策条件的现役军人、伤残军人、在职、退休、残疾消防员人员和消防救援院校学员、残疾人、离休干部、抗美援朝军人、6周岁(含6周岁)以下儿童、65周岁以上老年人(自2018年10月1日起执行)、60周岁以上老年人(非国家法定节假日)(自2018年10月1日起执行)。 联票预订规则: ①、景区联票限连续三天进入同一景区游览的游客预订; {{detailsObj.BookingInfo}}
②、联票分次预订分次使用,即在使用一次入园联票进入景区后,再预订二次入园联票;使用二次入园联票进入景区后,再预订三次入园联票。 ③、景区接待量到达单日限量时,联票停止预订。 ④、其余预订规则按照预订须知执行,退改签、取票规则按照退订须知、取票须知执行。 以上信息仅供参考,具体信息请以景区当天披露为准。
</div> </div>
</div> </div>
</div> </div>
...@@ -136,8 +137,8 @@ ...@@ -136,8 +137,8 @@
<div v-if="isCheck"> <div v-if="isCheck">
<template v-for="x in types"> <template v-for="x in types">
<div class="row items-center q-mt-md" v-if="x.checked"> <div class="row items-center q-mt-md" v-if="x.checked">
<q-badge color="grey-3" style="padding: 5px 8px" text-color="info" :label="x.name" /> <q-badge color="grey-3" style="padding: 5px 8px" text-color="info" :label="x.TicketName" />
<div class="col f12 text-right">{{x.price.toFixed(2)}} x {{x.num}}{{ $t('v102.ticket.unit') }}</div> <div class="col f12 text-right">{{x.B2BPrice.toFixed(2)}} x {{x.num}}{{ $t('v102.ticket.unit') }}</div>
</div> </div>
</template> </template>
</div> </div>
...@@ -161,8 +162,7 @@ ...@@ -161,8 +162,7 @@
<div class="bg-orange-1 q-pa-md rounded-borders fz14" style="border: 1px dashed orange"> <div class="bg-orange-1 q-pa-md rounded-borders fz14" style="border: 1px dashed orange">
<div class="text-weight-bold">{{ $t('v102.ticket.d5') }}</div> <div class="text-weight-bold">{{ $t('v102.ticket.d5') }}</div>
<div class="text-grey-700 q-mt-sm"> <div class="text-grey-700 q-mt-sm">
景区营业时间:7:00-15:30 可提前 7天 网上预订, 亦可于当日15:30 前预订景区门票。 (景区严禁携带宠物 景区单日 游客限量18000/日) 1、本景区限网上及手机客户端预订,不接受电话预订,且实行实名制预定,所有游客订票须录入身份证信息方可预定。 2、每个身份证,每日限购一张门票。每个用户每单限购八张门票,超过八张须分别下单。 3、儿童免票也需购票,方可入园。儿童免票对象(实行门票免票优惠的范围和群体):6周岁(含6周岁)以下的儿童享受门票和观光车票全免。 4、优惠对象:在校学生(全日制教育含本科以下)、青少年(7周岁-18周岁)、省级宗教部门颁发证书的宗教界人士、60周岁-64周岁老年人(国家法定节假日)。 5、免票对象:对符合政策条件的现役军人、伤残军人、在职、退休、残疾消防员人员和消防救援院校学员、残疾人、离休干部、抗美援朝军人、6周岁(含6周岁)以下儿童、65周岁以上老年人(自2018年10月1日起执行)、60周岁以上老年人(非国家法定节假日)(自2018年10月1日起执行)。 联票预订规则: ①、景区联票限连续三天进入同一景区游览的游客预订; {{detailsObj.BookingInfo}}
②、联票分次预订分次使用,即在使用一次入园联票进入景区后,再预订二次入园联票;使用二次入园联票进入景区后,再预订三次入园联票。 ③、景区接待量到达单日限量时,联票停止预订。 ④、其余预订规则按照预订须知执行,退改签、取票规则按照退订须知、取票须知执行。 以上信息仅供参考,具体信息请以景区当天披露为准。
</div> </div>
</div> </div>
</div> </div>
...@@ -210,14 +210,8 @@ export default defineComponent({ ...@@ -210,14 +210,8 @@ export default defineComponent({
Mobile:'', Mobile:'',
CouponsId:'',//景点id CouponsId:'',//景点id
DetailList:[] as any, DetailList:[] as any,
Address: '',
}, },
types: [ types: [],
{ id: 1, name: `${t('v102.ticket.ticketet')}`, price: 900.0, checked: false, num: 1 },
{ id: 2, name: `${t('v102.ticket.ticketcr')}`, price: 1800.0, checked: false, num: 1 },
{ id: 13, name: `${t('v102.ticket.ticketxs')}`, price: 1200.0, checked: false, num: 1 },
{ id: 23, name: `${t('v102.ticket.ticketjt')}`, price: 4000.0, checked: false, num: 1 }
],
isCheck: false, isCheck: false,
OpenTime: '', OpenTime: '',
detailsObj: {} as any, detailsObj: {} as any,
...@@ -225,26 +219,35 @@ export default defineComponent({ ...@@ -225,26 +219,35 @@ export default defineComponent({
const guestName = ref(null) as any const guestName = ref(null) as any
const guestEName = ref(null) as any const guestEName = ref(null) as any
const guestMobile = ref(null) as any const guestMobile = ref(null) as any
const guestEmail = ref(null) as any const guestAddress = ref(null) as any
let time = currentRouter.currentRoute.value.params.Time let time = currentRouter.currentRoute.value.params.Time
data.OpenTime = time.substring(0,4)+'-'+time.substring(4,6)+'-'+time.substring(6,8) data.OpenTime = time.substring(0,4)+'-'+time.substring(4,6)+'-'+time.substring(6,8)
data.msg.CouponsId = currentRouter.currentRoute.value.params.ticketId data.msg.CouponsId = currentRouter.currentRoute.value.params.ticketId
data.msg.UseDate = date.formatDate(date.addToDate(new Date(), { days: 1 }), 'MM月DD日 ddd') // date.formatDate(date.addToDate(new Date(), { days: 1 }), 'MM月DD日 ddd')
data.msg.UseDate = date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD')
const menu = inject(DirtionmaryHelper.MENU_KEYS) as any const menu = inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value = 8 menu.value = 8
const methods = { const methods = {
getInfo(){ getInfo(value:String, reason:any, details:any){
if(data.OpenTime){ if(data.OpenTime||value){
let param = { let param = {
CouponsId:data.msg.CouponsId, CouponsId:data.msg.CouponsId,
OpenTime:data.OpenTime OpenTime: value?value:data.OpenTime
} }
TicketService.getTicketInfo(param) TicketService.getTicketInfo(param)
.then(r => { .then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) { if (r.data.resultCode == ApiResult.SUCCESS) {
data.detailsObj = r.data.data data.detailsObj = r.data.data
console.log(data.detailsObj,'----') let addList = function (arr) {
arr.forEach(item => {
item.checked = false
item.num = 1
});
};
addList(r.data.data.TicketPriceList);
data.types = r.data.data.TicketPriceList
} else { } else {
message.errorMsg(r.data.message) message.errorMsg(r.data.message)
} }
...@@ -255,36 +258,49 @@ export default defineComponent({ ...@@ -255,36 +258,49 @@ export default defineComponent({
} }
}, },
submit(){ submit(){
console.log(data.isCheck,'0099') methods.getNum()
if(!data.isCheck) return if(!data.isCheck) return
if(data.loading) return
data.loading = true
let flag = false
guestName.value.validate()
guestEName.value.validate()
guestMobile.value.validate()
if(data.msg.MailingState=='2'){ if(data.msg.MailingState=='2'){
let flag = false guestAddress.value.validate()
guestName.value.validate() flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError && !guestAddress.value.hasError
guestEName.value.validate()
guestMobile.value.validate()
guestEmail.value.validate()
flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError && !guestEmail.value.hasError
if(!flag) return
}else{ }else{
data.msg.Name = '' flag = !guestName.value.hasError && !guestEName.value.hasError && !guestMobile.value.hasError
data.msg.EName = ''
data.msg.Mobile = ''
data.msg.MailingAddress = '' data.msg.MailingAddress = ''
} }
if(!flag) return
data.msg.DetailList = [] as any
data.types.forEach(x=>{
if(x.checked){
let y = {
TicketType: x.TicketCouponsType,
TicketName: x.TicketName,
Unit_Price: x.B2BPrice,
Num: x.num,
Money: x.B2BPrice*x.num,
TicketId: x.TicketID
}
data.msg.DetailList.push(y)
}
})
let param = Object.assign(data.msg) let param = Object.assign(data.msg)
return
TicketService.setTicketOrder(param) TicketService.setTicketOrder(param)
.then(r => { .then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) { if (r.data.resultCode == ApiResult.SUCCESS) {
data.isCheck = false message.successMsg(`${t('success')}`)
data.pages.PageCount = r.data.data.pageCount
} else { } else {
message.errorMsg(r.data.message) message.errorMsg(r.data.message)
} }
methods.getInfo()
data.loading = false
}).catch(e => { }).catch(e => {
data.loading = false
message.errorMsg(e.message) message.errorMsg(e.message)
data.isCheck = false
}) })
}, },
showCardHandler() { showCardHandler() {
...@@ -315,15 +331,23 @@ export default defineComponent({ ...@@ -315,15 +331,23 @@ export default defineComponent({
methods.calcMoneyHandler() methods.calcMoneyHandler()
}, },
changePeople(val: string) { changePeople(val: string) {
// setTimeout(()=>{ methods.getNum()
// methods.calculateNum() },
// },50) getNum(){
data.types.forEach(x=>{
if(x.num>x.RemainingInventory){
x.num = x.RemainingInventory
}
})
setTimeout(()=>{
methods.calcMoneyHandler()
},50)
}, },
calcMoneyHandler(){ calcMoneyHandler(){
data.msg.Money=0.0 data.msg.Money=0.0
data.types.forEach(x=>{ data.types.forEach(x=>{
if(x.checked){ if(x.checked){
data.msg.Money+=x.price*x.num data.msg.Money+=x.B2BPrice*x.num
} }
}) })
} }
...@@ -336,7 +360,7 @@ export default defineComponent({ ...@@ -336,7 +360,7 @@ export default defineComponent({
guestName, guestName,
guestEName, guestEName,
guestMobile, guestMobile,
guestEmail guestAddress
} }
} }
}) })
......
...@@ -227,7 +227,7 @@ export function getTicketOrderType(getNormal:boolean = false):Array<OrderType>{ ...@@ -227,7 +227,7 @@ export function getTicketOrderType(getNormal:boolean = false):Array<OrderType>{
let typeLangs=[t('v102.ticket.zq'),t('v102.ticket.yj')] let typeLangs=[t('v102.ticket.zq'),t('v102.ticket.yj')]
typeLangs.forEach((x:string,i:number)=>{ typeLangs.forEach((x:string,i:number)=>{
types.push({ types.push({
TypeId:i, TypeId:i+1,
TypeName:x TypeName:x
}) })
}) })
......
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