Commit 35ac083d authored by youjie's avatar youjie

no message

parent 4f000595
......@@ -2,15 +2,19 @@ import { HttpResponse } from '../@types'
import request from './request'
class CharteredBusService {
// 取消门票訂單
static async setTicketOrderCancel(OrderId:number):Promise<HttpResponse>{
return request('ticket_post_CancelTicketOrder',{OrderId})
// 包车訂單详情
static async GetTYMyCarOrderInfo(OrderId:number):Promise<HttpResponse>{
return request('CarSingle_post_GetTYMyCarOrderInfo',{OrderId})
}
// 门票訂單列表
static async getTicketOrderList(param:any):Promise<HttpResponse>{
return request('ticket_post_GetMyTicketOrderPageList',param)
// 取消包车訂單
static async CancelTYCarOrder(OrderId:number):Promise<HttpResponse>{
return request('CarSingle_post_CancelTYCarOrder',{OrderId})
}
// 提交包车訂單
// 包车訂單列表
static async GetTYMyCarOrderPageList(param:any):Promise<HttpResponse>{
return request('CarSingle_post_GetTYMyCarOrderPageList',param)
}
// 新增编辑 提交包车訂單
static async SetTYCarOrder(param:any):Promise<HttpResponse>{
return request('CarSingle_post_SetTYCarOrder',param)
}
......@@ -18,7 +22,7 @@ class CharteredBusService {
static async GetTYCarSingleProductMonthPrice(param:any):Promise<HttpResponse>{
return request('CarSingle_post_GetTYCarSingleProductMonthPrice',param)
}
// 包车详情
// 包车产品详情
static async GetTYCarSingleProductInfo(param:any):Promise<HttpResponse>{
return request('CarSingle_post_GetTYCarSingleProductInfo',param)
}
......
......@@ -84,7 +84,7 @@ export default {
data.searchClone = JSON.parse(JSON.stringify(search.msg))
const methods = {
goUrl(){
$router.push({ path:`/vehicle/addEditVehicle/2`})
$router.push({ path:`/vehicle/addEditVehicle/4`})
},
getCarType(e:any){
if(e){
......
......@@ -24,7 +24,7 @@
</div> -->
<div v-if="search.msg.ViewType == 2" class="row wrap justify-center">
<div class="q-py-md" style="width: 70%;min-width: 1000px;">
<div class="q-py-md" style="width: 100%;overflow: auto;">
<div class="row q-pa-md q-mb-md bg-white rounded-borders">
<div class="col"></div>
<q-btn dense unelevated class="hover q-px-sm q-mr-md" v-for="(item,index) in 2"
......
<template>
<div class="rounded-borders bg-white row items-center q-pa-md q-mb-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-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 @clear="getDateRange">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<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-popup-proxy>
</q-field>
<div class="col"></div>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" :title="$t('morequery')">
<q-badge rounded class="din bg-red-2 text-red-14 text-weight-bold" floating :label="searchCnt" v-if="searchCnt > 0" />
<svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon>
<q-tooltip>{{ $t('morequery') }}</q-tooltip>
<q-popup-proxy class="no-shadow" style="box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]" :model-value="canHide">
<q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t('morequery') }}</div>
<div class="q-mt-md row">
<q-input v-model="search.OrderNo" dense standout :label="$t('hotelorder.search.orderNum')" class="mobile-only col q-mr-md" />
<q-input v-model="search.OrderId" dense standout :label="$t('hotelorder.search.orderId')" class="col" />
</div>
<div class="mobile-only q-mt-md">
<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>
<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-popup-proxy>
</q-field>
</div>
<div class="q-mt-md">
<q-field clearable v-model="dateRangeFormatUse" :label="$t('v102.CharteredBus.sjc.c8')" 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 row">
<q-input class="col" v-model="search.SurName" dense standout :label="$t('v102.CharteredBus.sjc.c1x')" />
<q-input class="col q-ml-sm" v-model="search.Name" dense standout :label="$t('v102.CharteredBus.sjc.c1m')" />
</div>
<q-input v-model="search.ProductName" dense standout :label="$t('v102.CharteredBus.sjc.c19')" class="q-mt-md" />
<q-input v-model="search.Mobile" dense standout :label="$t('v102.CharteredBus.sjc.c2')" class="q-mt-md"/>
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn unelevated class="bg-blue-1 text-primary hover q-mr-md" :label="$t('hotelorder.recovery')" />
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler" />
</div>
<div class="rounded-borders bg-white q-pa-sm q-mt-md mobile-only">
<q-tabs v-model="search.OrderStatus" class="text-cyan" dense>
<q-tab :name="x.StatusId" :label="x.StatusName" v-for="x in status" @click="setOrderStatus(x.StatusId)" />
</q-tabs>
</div>
</template>
<script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary'
import { computed, defineComponent, inject, reactive, ref, toRefs } from 'vue'
import { OrderType, RoomType, StandardStatus } from '../../../@types'
import { getHotelOrderStatus, getHotelOrderType, getHotelRoomType } from '../../../utils/tools'
import { date, useQuasar } from 'quasar'
import svgIcon from '../../global/svg-icon.vue'
export default defineComponent({
components: { svgIcon },
setup(props) {
const qDateProxy = ref(null) as any
const qDateProxyUse = ref(null) as any
const $q = useQuasar()
const data = reactive({
status: [] as Array<StandardStatus>,
cancelStatus: {} as StandardStatus | undefined,
dateRangeFormat: '',
dateRangeFormatUse: '',
dateRange: {} as any,
dateRangeUse: {} as any,
canHide: false
})
const realSearch = inject(DirtionmaryHelper.TICKET_ORDER_SEARCH) as any
const search = reactive(JSON.parse(JSON.stringify(realSearch))) as any
const methods = {
initStatus() {
//通用的訂單類型
let allStatus = getHotelOrderStatus()
data.status = allStatus.filter((x: StandardStatus) => {
return x.StatusId != 3
})
data.cancelStatus = allStatus.find((x: StandardStatus) => {
return x.StatusId == 3
})
},
optionsFnUse(cd: any) {
return true
},
optionsFn(cd: any) {
return cd < date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD')
},
getDateRangeUse(value){
search.OrderSTime = ''
search.OrderETime = ''
data.dateRangeFormatUse = ''
},
getDateRange(value){
search.StartTime = ''
search.EndTime = ''
data.dateRangeFormat = ''
},
dateRangeHandlerUse(e: any) {
search.OrderSTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.OrderETime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormatUse = `${search.OrderSTime} - ${search.OrderETime} `
if (qDateProxyUse.value) qDateProxyUse.value.hide()
},
dateRangeHandler(e: any) {
search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormat = `${search.StartTime} - ${search.EndTime} `
if (qDateProxy.value) qDateProxy.value.hide()
},
setQueryHandler() {
realSearch.OrderId = search.OrderId
realSearch.OrderType = search.OrderType
realSearch.StartTime = search.StartTime
realSearch.EndTime = search.EndTime
realSearch.OrderSTime = search.OrderSTime
realSearch.OrderETime = search.OrderETime
realSearch.OrderStatus = search.OrderStatus
realSearch.OrderNo = search.OrderNo
realSearch.SurName = search.SurName
realSearch.Name = search.Name
realSearch.ProductName = search.ProductName
realSearch.Mobile = search.Mobile
console.log(realSearch)
},
setOrderStatus(statusId: number) {
realSearch.OrderStatus = statusId
}
}
const searchCnt = computed(() => {
let setCnt = 0
if ($q.platform.is.mobile) {
if (search.OrderStatus > 0) setCnt++
if (search.StartTime.length > 0) setCnt++
if (search.OrderNo > 0) setCnt++
}
if (search.OrderId.length > 0) setCnt++
if (search.OrderSTime.length > 0) setCnt++
if (search.MailingState > 0) setCnt++
if (search.Name) setCnt++
if (search.ProductName) setCnt++
if (search.Mobile) setCnt++
return setCnt
})
methods.initStatus()
return {
...toRefs(data),
...methods,
search,
searchCnt
}
}
})
</script>
<style></style>
This diff is collapsed.
<template>
<q-card class="bg-white q-pa-md" style="max-width: 500px; min-width: 375px; ">
<div class="text-h6 q-mb-lg">
{{ $t('v102.to.m.t') }}
</div>
<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="col f12">
<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.MailingState" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" :val="2" :label="$t('v102.ticket.yj')" />
</span>
</div>
<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-grey-900 q-mt-sm f12">{{ $t('v102.ticket.zqd') }}</div>
</div>
<div>
<div class="q-mt-md">
<span class="f12 text-grey-900 text-subtitle2 text-weight-bold">{{ $t('v102.ticket.sj') }}</span>
</div>
<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.c2') }}</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-4" v-if="m.MailingState == 2">{{ $t('v102.ticket.sjc.c5') }}</div>
</div>
<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.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.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 q-mt-md" :class="{ 'q-mr-md': $q.platform.is.desktop }">
<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 class="q-mt-md">
<q-input v-model="m.Remark" standout autogrow :label="$t('v102.ticket.or')" />
</div>
<div class="q-mt-lg text-right">
<!-- v-close-popup flat dense -->
<q-btn color="negative" class="q-px-lg" :label="$t('v102.to.m.c')" v-close-popup flat dense @click="close" />
<q-btn color="primary" class="q-ml-md q-px-lg" :label="$t('v102.to.m.s')" flat dense @click="submit"/>
</div>
</q-card>
</template>
<script lang="ts">
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({
props: ['order'],
setup(props, context) {
watch(
() => props.order,
(n, o) => {
// 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({
m: {} as any,
loading: false
})
data.m=JSON.parse(JSON.stringify(props.order))
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>
<style></style>
......@@ -962,10 +962,15 @@ export default {
s29: '手配費:',
s30: '司機:',
s31: '車牌號:',
}
},
tabtitle0: '團隊訂單',
tabtitle1: '接機訂單',
tabtitle2: '送機訂單',
tabtitle3: '包車訂單',
},
CharteredBus:{
pageTitle: '車輛檢索',
pageTitle2: '包車訂單',
baochetype: '包車類型',
baochetype0: '不限',
baochetype1: '接機',
......@@ -1006,8 +1011,11 @@ export default {
nt: '沒有選擇車型',
rtt: '取消限製',
td: '团订',
bianji: '確定編輯訂單',
sjc:{
c1: '姓名',
c1x: '姓',
c1m: '名',
c2: '電話',
c3: '性別',
c4: '聯絡方式',
......@@ -1025,6 +1033,19 @@ export default {
c16: '婴儿数',
c17: '手提行李数',
c18: '托运行李数',
c19: '產品名稱',
c20: '機場',
c21: '成人',
c22: '儿童',
c23: '婴儿',
c24: '上下车地点',
c25: '上车',
c26: '下车',
c27: '手提行李',
c28: '托运行李',
c29: '人员',
c30: '人',
c31: '行李',
},
sjcp:{
c1: '請輸入姓',
......
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<ticket-order-header></ticket-order-header>
<ticket-order-list></ticket-order-list>
<div class="q-py-md">
<CharteredBusOrderHeader></CharteredBusOrderHeader>
<CharteredBusOrderList :OrderType="OrderType"></CharteredBusOrderList>
</div>
</template>
<script lang="ts">
import { defineComponent, inject, provide, reactive, toRefs, onMounted } from 'vue'
import { defineComponent, inject, provide, reactive, toRefs, onMounted, watch } from 'vue'
import { currentRouter } from 'src/router'
import useMetaModule from '../../module/meta/metaModule'
import { useI18n } from 'vue-i18n'
import TicketOrderHeader from 'src/components/CharteredBus/order/TicketOrderHeader.vue'
import CharteredBusOrderHeader from '../../components/CharteredBus/order/CharteredBusOrderHeader.vue'
import { DirtionmaryHelper } from 'src/config/dictionary'
import TicketOrderList from 'src/components/CharteredBus/order/TicketOrderList.vue'
import CharteredBusOrderList from '../../components/CharteredBus/order/CharteredBusOrderList.vue'
export default defineComponent({
components: {TicketOrderHeader, TicketOrderList},
props:['type'],
components: {CharteredBusOrderHeader, CharteredBusOrderList},
setup(props) {
let { setTitle } = useMetaModule()
const { t } = useI18n()
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t('v102.to.pageTitle')
setTitle(pageTitle.value)
// const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
// pageTitle.value = t('v102.CharteredBus.pageTitle2')
// setTitle(pageTitle.value)
const search = reactive({
OrderType: props.type,
OrderId: '',
OrderNo: '',
SurName: '',
Name: '',
Mobile: '',
OrderStatus: 0,
StartTime: '',
EndTime: '',
OrderSTime: '',
OrderETime: '',
ProductName: '',
// TicketName:'',//景区名称
CouponsName: '',//景区名称
ContactNumber: '',//电话
Name: '',//顾客名称
UseSTime: '',//门票开始时间
UseETime: '',//门票结束时间
MailingState: -1
Mobile: '',//电话
})
search.OrderId = currentRouter.currentRoute.value.params.orderId
// search.OrderId = currentRouter.currentRoute.value.params.orderId
provide(DirtionmaryHelper.TICKET_ORDER_SEARCH, search)
const menu = inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value = 9
const data = reactive({})
const data = reactive({
OrderType: ''
})
watch(props, (n, o) => {
data.OrderType = props.type
})
const methods = {}
onMounted(() => {})
return { ...toRefs(data), ...methods, search }
......
......@@ -168,7 +168,7 @@ export default defineComponent({
scrollStyle: {} as any,
pages: ''
})
if(currentRouter.currentRoute.value.params.Id){
if(currentRouter.currentRoute&&currentRouter.currentRoute.value.params.Id){
data.search.Id = currentRouter.currentRoute.value.params.Id
}
......@@ -211,7 +211,6 @@ export default defineComponent({
HotelService.TypeVehicle({})
.then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) {
data.vehicletop = r.data.data
} else {
message.errorMsg(r.data.message)
......@@ -315,7 +314,7 @@ export default defineComponent({
},
// 关闭
down() {
$router.push({ path: data.pages==1?`/vehicle/order`:`/vehicle/index`})
$router.push({ path: `/vehicle/order/0`})
},
// 确定
join() {
......
This diff is collapsed.
This diff is collapsed.
......@@ -21,8 +21,8 @@ const routes: RouteRecordRaw[] = [
{ path: '/ticket/preview/:ticketId/:Time', component: () => import('pages/ticket/TicketOrderPreview.vue') },
{ path: '/ticket/order', component: () => import('pages/ticket/TicketOrder.vue') },
{ path: '/vehicle/index', component: () => import('pages/CharteredBus/CharteredBusList.vue') },//车辆
{ path: '/vehicle/Preview/:ProductId/:Time', component: () => import('pages/CharteredBus/CharteredBusPreview.vue') },
{ path: '/vehicle/order', component: () => import('pages/vehicle/vehicleOrder.vue') },
{ path: '/vehicle/Preview/:ProductId/:Time/:orderId?', component: () => import('pages/CharteredBus/CharteredBusPreview.vue') },
{ path: '/vehicle/order/:pages?', component: () => import('pages/vehicle/vehicleOrder.vue') },
{ path: '/vehicle/addEditVehicle/:pages/:Id?', component: () => import('pages/vehicle/addEditVehicle.vue') },
{ path: '/ticket/preview/:ticketId/:Time', component: () => import('pages/ticket/TicketOrderPreview.vue') },
{ path: '/ticket/order/:orderId?', component: () => import('pages/ticket/TicketOrder.vue') }
......
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