Commit af08ccc9 authored by 罗超's avatar 罗超

解決衝突

parent 1aa7a293
......@@ -199,3 +199,21 @@ export type EditCloudRoleItemType = {
toolId: number
cloudRoleId: number
}
export type StandardStatus = {
StatusId:number,
StatusName:string,
Icon?:string,
Color?:string,
BgColor?:string
}
export type RoomType = {
TypeId:number,
TypeName:string
}
export type OrderType={
TypeId:number,
TypeName:string
}
\ No newline at end of file
......@@ -18,7 +18,7 @@ export default defineComponent({
top: 0
bottom: 0
.light-shadow
box-shadow: 0px 0px 20px 0px rgba(76, 87, 125, 0.02)
box-shadow: 0px 0px 20px 0px rgba(76, 87, 125, 0.02) !important
@font-face
// 苹方字体
font-family: 'pf'
......
......@@ -27,6 +27,15 @@ class HotelService {
return request('dict_post_HotelOffer_GetClientHotelStatics',param)
}
/**
* 查詢當前登入用戶的酒店訂單信息
* @param param
* @returns
*/
static async GetHotelOrders(param:any):Promise<HttpResponse>{
return request('dict_post_GetMyCustomerOrderPageList',param)
}
/**
* 查詢酒店信息
* @param name 酒店名稱,支持空格分割
......
......@@ -60,7 +60,10 @@ svg g [fill]{
transition: fill 0.3s ease;
fill: #3699FF !important;
}
.svg-red g [fill]{
transition: fill 0.3s ease;
fill: red !important;
}
.svg-icon-success g [fill] {
transition: fill 0.3s ease;
fill: #50cd89 !important;
......
<template>
<div >
<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="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>
</div>
<div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div>
<div class="q-ml-md">
<q-btn color="dark" flat size="sm" :label="$t('hotelorder.copy')" v-if="copyId != x.OrderId" @click="setCopyHandler(x)" />
<q-btn color="cyan" icon="check" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn>
</div>
<div class="col"></div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]">
<q-icon :name="x.typeInfo.Icon" />
<span class="q-ml-sm">{{ x.typeInfo.StatusName }}</span>
</div>
</div>
<div class="mobile-only">
<div class="row justify-between">
<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>
</div>
<div class="q-ml-md f12" :class="[x.typeInfo.Color]">
<q-icon :name="x.typeInfo.Icon" />
<span class="q-ml-sm">{{ x.typeInfo.StatusName }}</span>
</div>
</div>
<div class="bg-grey-2 rounded-borders q-pa-sm q-mt-md">
<div class="row items-center justify-between">
<div class="f12 text-grey-6">{{ $t('hotelorder.search.orderNum') }}{{ x.OrderNo }}</div>
<div class="q-ml-md">
<q-btn color="dark" flat size="sm" :label="$t('hotelorder.copy')" v-if="copyId != x.OrderId" @click="setCopyHandler(x)" />
<q-btn color="cyan" outline size="sm" :label="$t('hotelorder.copyed')" v-else></q-btn>
</div>
</div>
<div class="f12 text-grey-6">{{ $t('hotelorder.createTime') }}{{ x.CreateTime }}</div>
</div>
</div>
<div class="q-mt-md row">
<q-table separator="vertical" :hide-bottom="true" dense :rows="x.DetailList" bordered :columns="cols" class="light-border col borders no-shadow text-left">
<template v-slot:header-cell-Room="props">
<q-th :props="props">
<div class="row items-center">
<span class="q-mr-mds">{{ props.col.label }}</span>
<q-tooltip>{{ $t('hotelorder.priceTips') }}</q-tooltip>
<svg-icon icon="Code/Question-circle.svg" :size="14"></svg-icon>
</div>
</q-th>
</template>
<template v-slot:body-cell-Room="props">
<q-td :props="props">
<div class="room-item f12 text-grey-6" v-for="x in props.row.RoomList">
<span class="q-mr-md"> {{ x.RoomInfo.TypeName }}: {{ x.Number }} {{ $t('unit.jian') }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.people') }}: {{ x.PeopleNum ?? 1 }} {{ $t('unit.ren') }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.unitPrice') }}: {{ x.Unit_Price ?? 1 }} </span>
<span class="q-mr-md"> {{ $t('hotelorder.xj') }}: {{ x.Money ?? 1 }} </span>
</div>
</q-td>
</template>
<template v-slot:body-cell-RoomNo="props">
<q-td :props="props">
<n-tag :bordered="false" size="small" type="error" v-if="props.row.HotelStatus == 2">
{{ $t('hotelorder.check.un') }}
</n-tag>
<n-tag :bordered="false" size="small" type="success" v-else>
{{ props.row.RoomNo ?? 'JVS2022141325K' }}
</n-tag>
</q-td>
</template>
<template v-slot:body-cell-HotelName="props">
<q-td :props="props">
<div class="max-hotelname ellipsis">{{ props.value }}</div>
<q-tooltip>{{ props.value }}</q-tooltip>
</q-td>
</template>
</q-table>
<!-- <div class="q-ml-md q-pl-md" style="border-left:1px dashed var(--q-accent);">
<div class="f12 text-grey-6">{{$t('hotelorder.orderMoney')}}</div>
<div class="text-subtitle1 text-negative">
<span class="f12">{{$t('unit.jpc')}}</span>
<span>{{x.Money.toFixed(2)}}</span>
<span class="f12">{{$t('unit.jp')}}</span>
</div>
</div> -->
</div>
<div class="q-mt-md" :class="{ row: $q.platform.is.desktop, 'column reverse': $q.platform.is.mobile }">
<div class="pay row text-grey rounded-borders q-pa-md" v-if="$q.platform.is.desktop || ($q.platform.is.mobile && expendsOrderId == x.OrderId)" :class="{ 'bg-grey-2': $q.platform.is.mobile }">
<svg-icon color=" svg-red" icon="Code/Warning-1-circle.svg" :size="16" v-if="$q.platform.is.desktop"></svg-icon>
<div class="q-ml-sm">
<div class="q-mb-sm" v-if="x.CustomerPayType==2 || x.CustomerPayType==3">
<div class="f12" v-html="$t('hotelorder.pay.t1', { d: x.PaymentDate, e: x.FinalPaymentDate })"></div>
<q-btn dense outline color="accent" size="sm" class="q-mt-sm" :label="$t('hotelorder.payinfo')"></q-btn>
<q-btn dense unelevated color="accent" size="sm" class="q-mt-sm q-ml-sm" :label="$t('hotelorder.sendpay')"></q-btn>
</div>
<div v-if="x.CustomerPayType==1 || x.CustomerPayType==3">
<div class="f12" v-html="$t('hotelorder.pay.t2', { e: x.UploadGuestDate })"></div>
<q-btn dense outline color="primary" size="sm" class="q-mt-sm" :label="$t('hotelorder.uploadGuest')"></q-btn>
</div>
</div>
</div>
<div class="mobile-only row items-center justify-between" v-if="$q.platform.is.mobile">
<div class="text-negative">
<svg-icon color=" svg-red" icon="Code/Warning-1-circle.svg" :size="16"></svg-icon>
<span class="q-ml-sm">{{ $t('hotelorder.warn') }}</span>
</div>
<q-btn color="grey" @click="setShowWarnHander(x.OrderId)" dense size="sm" flat :label="expendsOrderId == x.OrderId ? $t('expends.off') : $t('expends.on')" />
</div>
<div class="col desktop-only"></div>
<div class="rounded-borders bg-grey-2 q-pa-md" :class="{ 'q-mx-md': $q.platform.is.desktop, 'q-my-md row items-center justify-between': $q.platform.is.mobile }">
<div>
<div class="f12 text-grey">{{ $t('hotelorder.orderMoney') }}</div>
<div class="dark">
<span class="f12">{{ $t('unit.jpc') }}</span>
<span class="din text-h6">{{ x.Money.toFixed(2) }}</span>
<span class="f12">{{ $t('unit.jp') }}</span>
</div>
</div>
<div class="row q-mt-sm">
<div class="q-mr-lg">
<div class="f12 text-grey">{{ $t('hotelorder.payType.t1') }}</div>
<div class="dark">
<span class="din text-subtitle1">{{ (x.Money ?? 1999).toFixed(2) }}</span>
<span class="f12">{{ $t('unit.jp') }}</span>
</div>
</div>
<div>
<div class="f12 text-grey">{{ $t('hotelorder.payType.t2') }}</div>
<div class="dark">
<span class="din text-subtitle1">{{ (x.Money ?? 1999).toFixed(2) }}</span>
<span class="f12">{{ $t('unit.jp') }}</span>
</div>
</div>
</div>
</div>
<div class="bg-green-1 rounded-borders q-pa-md justify-between" :class="{ column: $q.platform.is.desktop, 'row items-center': $q.platform.is.mobile }">
<div>
<div class="f12 text-green-4">{{ $t('hotelorder.payed') }}</div>
<div class="text-subtitle1 din text-green-14">
50000.00
<span class="text-green-4 f12">{{ $t('unit.jp') }}</span>
</div>
</div>
<q-btn-dropdown unelevated color="green" :label="$t('hotelorder.opera.normal')">
<q-list>
<q-item class="text-negative" clickable v-close-popup>
<q-item-section>
<q-item-label>{{ $t('hotelorder.opera.cancel') }}</q-item-label>
</q-item-section>
</q-item>
<q-item class="text-primary" clickable v-close-popup>
<q-item-section>
<q-item-label>{{ $t('hotelorder.opera.edit') }}</q-item-label>
</q-item-section>
</q-item>
<!-- <q-item class="text-dark" clickable v-close-popup>
<q-item-section>
<q-item-label>{{ $t('hotelorder.opera.view') }}</q-item-label>
</q-item-section>
</q-item> -->
</q-list>
</q-btn-dropdown>
</div>
</div>
</q-card>
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" v-if="pages.pageCount>0" flat>
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" />
</q-card>
<q-inner-loading
:showing="loading"
:label="$t('loading')"
label-class="text-grey-6 f12"
/>
</div>
<div class="text-center q-mt-xl" v-if="(!orders || orders.length==0) && !loading">
<svg-icon :size="50" color="nav" icon="General/Clipboard.svg"></svg-icon>
<div class="q-mt-md f12 text-grey-6">{{$t('noneData')}}</div>
</div>
</template>
<script lang="ts">
import { DirtionmaryHelper } from '../../../../config/dictionary'
import { defineComponent, inject, reactive, toRefs, watch } from 'vue'
import HotelService from '../../../../api/hotel'
import { ApiResult } from '../../../../@types/enumHelper'
import message from '../../../../utils/message'
import { RoomType, StandardStatus } from '../../../../@types'
import { getHotelOrderStatus, getHotelRoomType } from '../../../../utils/tools'
import { useI18n } from 'vue-i18n'
import svgIcon from '../../../global/svg-icon.vue'
export default defineComponent({
components: { svgIcon },
setup(props) {
const search = inject(DirtionmaryHelper.HOTEL_ORDER_SEARCH) as any
const { t } = useI18n()
watch(search, (n, o) => {
if (data.loading) return
data.loading=true
data.pages.pageIndex = 1
data.orders = []
methods.initOrders()
})
const data = reactive({
orders: [] as Array<any>,
status: [] as Array<StandardStatus>,
rooms: [] as Array<RoomType>,
pages: {
pageIndex: 1,
pageSize: 10,
pageCount: 0
},
loading: true,
copyId: 0,
expendsOrderId: 0,
cols: [
{ name: 'Date', label: t('hotelorder.col.d'), field: (row: any) => row.Date, align: 'left' },
{ name: 'HotelName', label: t('hotelorder.col.hn'), field: (row: any) => row.HotelName, align: 'left' },
{ name: 'Room', label: t('hotelorder.col.r'), align: 'left' },
{ name: 'RoomNo', label: t('hotelorder.col.n'), align: 'left' },
{ name: 'Tax', label: t('hotelorder.col.t'), field: (row: any) => (row.TaxesPrice ? row.TaxesPrice : t('hotelorder.col.noneTax')), align: 'left' },
{ name: 'Money', label: t('hotelorder.col.m'), field: (row: any) => (row.HotelMoeny + row.TaxesPrice).toFixed(2), align: 'left' },
{ name: 'PayType', label: t('hotelorder.col.m'), field: (row: any) => (row.PayType == 1 ? t('hotelorder.payType.t1') : t('hotelorder.payType.t2')), align: 'left' }
] as any
})
const methods = {
initOrders() {
let param = Object.assign(data.pages, search)
//data.orders = []
HotelService.GetHotelOrders(param)
.then(r => {
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.DetailList.forEach((y: any) => {
y.RoomList.forEach((z: any) => {
z.RoomInfo = data.rooms.find(r => r.TypeId == z.RoomType) ?? data.rooms[0]
})
})
})
data.orders = r.data.data.pageData
data.pages.pageCount = r.data.data.pageCount
} else {
message.errorMsg(r.data.message)
}
data.loading=false
})
.catch(e => {
message.errorMsg(e.message)
data.loading=false
})
},
setCopyHandler(order: any) {
data.copyId = order.OrderId
setTimeout(() => {
data.copyId = 0
}, 2000)
},
setShowWarnHander(id: number) {
data.expendsOrderId = id == data.expendsOrderId ? 0 : id
},
changePageHandler(n: any) {
data.pages.pageIndex = n
methods.initOrders()
},
init() {
data.status = getHotelOrderStatus()
data.rooms = getHotelRoomType()
methods.initOrders()
}
}
methods.init()
return {
...toRefs(data),
...methods
}
}
})
</script>
<style>
.light-border table,
.light-border table td,
.light-border .q-table__middle,
.light-border.borders,
.light-border table th {
border-color: #eee !important;
}
.light-border .room-item {
height: 28px;
line-height: 28px;
border-bottom: 1px solid #eee;
}
.light-border .room-item:last-child {
border-bottom: none;
}
.light-border .max-hotelname {
width: 140px;
height: 28px;
line-height: 28px;
}
</style>
<template>
<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" 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>
<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>
<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>
<q-select class="q-mt-md" v-model="search.RoomType" dense :options="rooms" emit-value option-label="TypeName" option-value="TypeId" map-options :label="$t('hotelorder.search.roomType')" standout />
<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('hotelorder.search.orderType')" standout />
<q-input v-model="search.TCNum" dense standout :label="$t('hotelorder.search.tcNum')" class="q-mt-md" v-if="search.OrderType==2"/>
<q-input v-model="search.ContactName" :placeholder="$t('hotelorder.search.contactInfoHolder')" dense standout :label="$t('hotelorder.search.contactInfo')" class="q-mt-md" v-if="search.OrderType==1"/>
</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 $q = useQuasar()
const data = reactive({
status: [] as Array<StandardStatus>,
cancelStatus: {} as StandardStatus | undefined,
dateRangeFormat: '',
dateRange: {} as any,
rooms: [] as Array<RoomType>,
orderTypes: [] as Array<OrderType>,
canHide: false
})
const realSearch = inject(DirtionmaryHelper.HOTEL_ORDER_SEARCH) as any
const search = reactive(JSON.parse(JSON.stringify(realSearch)))
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
})
data.rooms = getHotelRoomType(true)
data.orderTypes = getHotelOrderType(true)
},
optionsFn(cd: any) {
return cd < date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD')
},
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.RoomType=search.RoomType
realSearch.StartTime=search.StartTime
realSearch.EndTime=search.EndTime
realSearch.OrderStatus=search.OrderStatus
realSearch.OrderNo=search.OrderNo
realSearch.OrderType=search.OrderType
realSearch.TCNum=search.TCNum
realSearch.ContactName=search.ContactName
realSearch.ContactNumber=search.ContactName
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.RoomType > 0) setCnt++
if (search.OrderType > 0) setCnt++
if (search.OrderType == 1 && search.ContactName.length>0) setCnt++
if (search.OrderType == 2 && search.TCNum.length>0) setCnt++
return setCnt
})
methods.initStatus()
return {
...toRefs(data),
...methods,
search,
searchCnt
}
}
})
</script>
<style></style>
......@@ -22,5 +22,10 @@ class DirtionmaryHelper {
* 购物车参数
*/
static readonly HOTEL_CAR_LIST = 'hotelcarlist'
/**
* 酒店订单查询条件
*/
static readonly HOTEL_ORDER_SEARCH = 'hotelordersearch'
}
export { userDictionmary,DirtionmaryHelper }
......@@ -16,6 +16,85 @@ export default {
query: '檢索',
noneData: '沒有找到相關的數據',
loading: '正在加載數據',
unit: {
jian: '間',
ren: '人',
jp: '円',
jpc: '¥'
},
expends:{
on:'展開',
off:'收起'
},
hotelorder: {
pay: {
t1: '出發前收款酒店,請您於 <span class="text-orange">{d}</span> 前支付訂金,並且於 <span class="text-negative">{e}</span> 日前支付尾款',
t2: '到店自付酒店,需要您於 <span class="text-negative">{e}</span> 前上傳旅客名單'
},
payinfo: '查看支付方式',
sendpay: '提繳付款憑證',
uploadGuest: '上傳旅客名單',
pageTitle: '酒店訂單',
recovery: '訂單回收站',
copy: '複製',
copyed: '已複製',
createTime: '下訂時間',
priceTips: '按照入住人數*房型單價=房型總價小計(不含稅)',
people: '人數',
unitPrice: '單價',
xj: '小計',
orderMoney: '訂單總金額',
payed: '已支付',
warn:'查看預定的注意事項',
check: {
un: '未確認',
ok: '確認'
},
opera: {
normal: '訂單操作',
cancel: '取消訂單',
edit: '訂單變更',
view: '查看詳情'
},
payType: {
t1: '到店自付',
t2: '出發前付款'
},
col: {
hn: '酒店名稱',
d: '入住日期',
r: '入住信息',
n: '訂房號',
t: '稅金',
m: '小計',
noRoomNo: '訂房號',
noneTax: '税入'
},
search: {
status: '訂單狀態',
orderNum: '訂單編號',
daterange: '下單時間',
roomType: '酒店房型',
orderId: '訂單流水號',
orderType: '訂單類型',
tcNum: '組團號',
contactInfo: '聯繫人信息',
contactInfoHolder: '請輸入聯繫人/聯繫電話'
},
orderType: {
default: '所有類型',
tour: '團隊訂房',
guest: '散拼訂房'
},
orderStatus: {
normal: '全部訂單',
apply: '待確認',
check: '已確認',
cancel: '已取消',
sun: '收損訂單'
}
},
dayOfWeek: {
mon: '一',
tues: '二',
......@@ -38,12 +117,12 @@ export default {
hotelRate: '酒店星級',
minPrice: '最低價格',
maxPrice: '最高價格',
car:{
car: {
shoppingTitle: '購物車',
addShopping: '加入購物車',
orderTitle: '訂單',
people: '人',
between: '间',
between: '间'
},
shopping:{
labelNum: '房數',
......@@ -57,32 +136,34 @@ export default {
driverRoom: '司機間',
only: '僅剩',
between: '間',
TheSelected: '已选',
TheSelected: '已选'
},
pricetips: '酒店報價表',
buy:'預定',
buy: '預定',
table: {
price: '價格',
ins: '總/用/剩',
limit: '超定'
},
rooms:{
big:'大床房',
sing:'自然單間',
three:'三人間',
driver:'司導間'
rooms: {
default: '全部房型',
normal: '標準間',
big: '大床房',
sing: '自然單間',
three: '三人間',
driver: '司導間'
},
col: {
first: '酒店名稱',
second: '價格&庫存',
three: '總庫存',
four:'價格',
five:'標準間價格',
low:'起',
ins:'庫存',
sins:'剩餘庫存',
uins:'已預訂',
more:'更多房型報價'
four: '價格',
five: '標準間價格',
low: '起',
ins: '庫存',
sins: '剩餘庫存',
uins: '已預訂',
more: '更多房型報價'
},
datetype: {
red: '紅日',
......
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<order-list-header></order-list-header>
<div class="col q-mt-md">
<order-list></order-list>
</div>
</div>
</template>
<script lang="ts">
import { inject, provide, reactive, toRefs } from 'vue';
import useMetaModule from '../../module/meta/metaModule'
import { useI18n } from 'vue-i18n'
import { DirtionmaryHelper } from '../../config/dictionary';
import OrderListHeader from '../../components/hotel/order/list/OrderListHeader.vue';
import OrderList from '../../components/hotel/order/list/OrderList.vue';
export default {
components: { OrderListHeader, OrderList },
setup(props) {
console.log(' in ')
let { setTitle } = useMetaModule()
const { t } = useI18n()
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t('hotelorder.pageTitle')
setTitle(pageTitle.value)
const search=reactive({
OrderId:'',
OrderNo:'',
OrderStatus: 0,
StartTime:'',
EndTime:'',
RoomType:0,
HotelId:0,
OrderType:0,
TCNum:'',
ContactName:'',
ContactNumber:''
})
provide(DirtionmaryHelper.HOTEL_ORDER_SEARCH,search)
const data = reactive({})
const methods = {}
return {...toRefs(data),...methods,search}
}
}
</script>
<style>
</style>
\ No newline at end of file
......@@ -6,22 +6,24 @@ const routes: RouteRecordRaw[] = [
component: () => import('../layouts/MainLayout.vue'),
children: [
{ path: '', component: () => import('../pages/Index.vue') },
{ path: '/hotel', component: () => import('../pages/hotel/HotelList.vue') }]
{ path: '/hotel', component: () => import('../pages/hotel/HotelList.vue') },
{ path: '/hotel/order', component: () => import('../pages/hotel/HotelOrder.vue') }
]
},
{
path:'/auth/login',
path: '/auth/login',
component: () => import('../pages/auth/login.vue')
},
{
path:'/auth/regist',
path: '/auth/regist',
component: () => import('../pages/auth/regist.vue')
},
{
path:'/auth/forget',
path: '/auth/forget',
component: () => import('../pages/auth/forget.vue')
},
{
path:'/auth/newpassword/:code',
path: '/auth/newpassword/:code',
component: () => import('../pages/auth/newpassword.vue')
},
// Always leave this as last one,
......
......@@ -26,7 +26,7 @@ const useMenus={
},
{
name:t('menu.hotel.three'),
url:'',
url:'/hotel/order',
id:3,
parentId:1,
}
......
import { SitLang } from './../@types/index';
import { SitLang, StandardStatus, RoomType, OrderType } from './../@types/index';
import { i18n } from '../boot/i18n'
const {t} =i18n.global
/**
......@@ -45,6 +45,24 @@ export function getDayOfWeek(day:number){
return weekLang[day-1]
}
export function getHotelOrderStatus():Array<StandardStatus>{
let status=[] as Array<StandardStatus>
let text = [t('hotelorder.orderStatus.normal'),t('hotelorder.orderStatus.apply'),t('hotelorder.orderStatus.check'),t('hotelorder.orderStatus.cancel'),t('hotelorder.orderStatus.sun')]
let color = ['','positive','dark','orange','negative']
let icons = ['','update','done','offline_bolt','cached']
text.forEach((x,i:number)=>{
status.push({
StatusId:i,
StatusName:x,
Icon:icons[i],
Color:`text-${color[i]}`
})
})
return status
}
export function getDateType(){
let types=[] as Array<DateType>
types.push({
......@@ -87,6 +105,42 @@ export function getDateType(){
return types
}
export function getHotelRoomType(getNormal:boolean = false):Array<RoomType>{
let rooms = [] as Array<RoomType>
if(getNormal){
rooms.push({
TypeId:0,
TypeName:t('hotel.rooms.default')
})
}
let roomLangs=[t('hotel.rooms.normal'),t('hotel.rooms.big'),t('hotel.rooms.sing'),t('hotel.rooms.three'),t('hotel.rooms.driver')]
roomLangs.forEach((x:string,i:number)=>{
rooms.push({
TypeId:(i+1),
TypeName:x
})
})
return rooms
}
export function getHotelOrderType(getNormal:boolean = false):Array<OrderType>{
let types = [] as Array<OrderType>
if(getNormal){
types.push({
TypeId:0,
TypeName:t('hotelorder.orderType.default')
})
}
let typeLangs=[t('hotelorder.orderType.guest'),t('hotelorder.orderType.tour')]
typeLangs.forEach((x:string,i:number)=>{
types.push({
TypeId:(i+1),
TypeName:x
})
})
return types
}
export function getLangs() {
const zhTw:SitLang={
langLocale:"zh-TW",
......
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