Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
bigwood
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
罗超
bigwood
Commits
c6d12384
Commit
c6d12384
authored
Nov 24, 2022
by
youjie
Browse files
Options
Browse Files
Download
Plain Diff
no message
parents
4d5133ba
d3ed1754
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
324 additions
and
242 deletions
+324
-242
index.html
index.html
+1
-0
enumHelper.ts
src/@types/enumHelper.ts
+4
-2
axios.ts
src/api/axios.ts
+11
-3
hotel.ts
src/api/hotel.ts
+10
-0
ListCar.vue
src/components/hotel/list/ListCar.vue
+1
-1
ListTable.vue
src/components/hotel/list/ListTable.vue
+12
-7
hotelCard.vue
src/components/hotel/list/hotelCard.vue
+7
-25
hotelDetails.vue
src/components/hotel/list/hotelDetails.vue
+190
-140
OrderList.vue
src/components/hotel/order/list/OrderList.vue
+54
-46
Notifications.vue
src/components/layout/Notifications.vue
+13
-10
index.ts
src/i18n/zh-TW/index.ts
+13
-0
login.vue
src/pages/auth/login.vue
+4
-4
personal.vue
src/pages/personal/personal.vue
+4
-4
No files found.
index.html
View file @
c6d12384
...
...
@@ -14,6 +14,7 @@
<link
rel=
"icon"
type=
"image/png"
sizes=
"32x32"
href=
"icons/favicon-32x32.png"
>
<link
rel=
"icon"
type=
"image/png"
sizes=
"16x16"
href=
"icons/favicon-16x16.png"
>
<link
rel=
"icon"
type=
"image/ico"
href=
"favicon.ico"
>
<script
src=
"https://api.map.baidu.com/api?type=webgl&v=2.0&ak=OBd2bhrqKUSbQGpniCZ996suti9YG7Bc"
></script>
</head>
<body>
<!-- quasar:entry-point -->
...
...
src/@types/enumHelper.ts
View file @
c6d12384
...
...
@@ -11,7 +11,9 @@ export enum RoleType {
}
export
enum
ApiResult
{
'SUCCESS'
=
1
,
'FAILED'
=
0
'FAILED'
=
0
,
'TOKEN_INVALID'
=
10000
,
'TOKEN_ILLEGAL'
=
10001
,
}
/**
* @description 常用异常结果常量定义
...
...
@@ -34,4 +36,4 @@ export enum ScaleType {
'21-50人'
=
2
,
'51-100人'
=
3
,
'100人以上'
=
4
}
\ No newline at end of file
}
src/api/axios.ts
View file @
c6d12384
...
...
@@ -8,6 +8,9 @@ import router from '../router'
// import Store from '../store'
// import { Notify } from 'quasar'
import
*
as
OpenCC
from
'opencc-js'
import
{
ApiResult
}
from
'src/@types/enumHelper'
;
import
{
dispatchAction
}
from
'src/store/utils'
;
import
{
UserActionsType
}
from
'src/store/modules/user/actions'
;
let
{
locale
,
t
}
=
i18n
.
global
let
converterTW
=
OpenCC
.
Converter
({
from
:
'cn'
,
to
:
'tw'
})
//转繁
let
datas
:
AxiosResponse
// 接收需要转繁数据
...
...
@@ -70,7 +73,7 @@ const getErrorCode2text = (response: AxiosResponse): string => {
*/
const
service
=
Axios
.
create
({
baseURL
:
process
.
env
.
BASE_APP_API
,
timeout
:
1
0000
,
timeout
:
2
0000
,
headers
:
{
'User-Type'
:
'bus'
,
'Content-Type'
:
'application/json;charset=UTF-8'
...
...
@@ -85,7 +88,7 @@ const service = Axios.create({
*/
service
.
interceptors
.
request
.
use
(
async
(
config
:
AxiosRequestConfig
)
=>
{
// 如果是获取token接口:
// if (config.url === '/auth/oauth/token') {
// //TODO:用户登录的特殊处理,
...
...
@@ -118,10 +121,15 @@ service.interceptors.request.use(
* @returns {}
*/
service
.
interceptors
.
response
.
use
(
/** 请求有响应 */
async
(
response
:
AxiosResponse
)
=>
{
if
(
response
.
status
===
200
)
{
if
(
response
.
data
.
resultCode
==
ApiResult
.
TOKEN_ILLEGAL
||
response
.
data
.
resultCode
==
ApiResult
.
TOKEN_INVALID
){
//router.push('/auth/login')
dispatchAction
<
UserActionsType
>
(
'user'
,
'setUserSignout'
,
null
)
window
.
location
.
reload
()
}
if
(
locale
.
value
==
'zhTW'
){
let
stringifyData
=
converterTW
(
JSON
.
stringify
(
response
))
datas
=
JSON
.
parse
(
stringifyData
)
...
...
src/api/hotel.ts
View file @
c6d12384
...
...
@@ -48,6 +48,16 @@ class HotelService {
return
request
(
'dict_post_GetMyCustomerOrderInfo'
,
{
OrderId
})
}
/**
* 獲取酒店訂單詳情
* @param hotelID 酒店編號
* @returns
*/
static
async
GetHotelDetail
(
hotelID
:
number
):
Promise
<
HttpResponse
>
{
return
request
(
'hotel_post_GetAll'
,
{
hotelID
})
}
static
async
GetHasStockHotelList
():
Promise
<
HttpResponse
>
{
let
params
=
{
IsMoreThanZero
:
0
,
...
...
src/components/hotel/list/ListCar.vue
View file @
c6d12384
...
...
@@ -12,7 +12,7 @@
<span
class=
"din text-primary"
>
{{
HotelLength
}}
</span>
{{
$t
(
'hotel.car.title2'
)
}}
</span>
<div
v-if=
"$q.platform.is.desktop"
class=
"q-pa-sm"
:class=
"
{'draw-close':$q.platform.is.desktop,'draw-close-modile':$q.platform.is.mobile}">
<div
v-if=
"$q.platform.is.desktop"
v-close-popup
class=
"q-pa-sm"
:class=
"
{'draw-close':$q.platform.is.desktop,'draw-close-modile':$q.platform.is.mobile}">
<q-icon
name=
"close"
size=
"26px"
></q-icon>
</div>
</div>
...
...
src/components/hotel/list/ListTable.vue
View file @
c6d12384
...
...
@@ -22,11 +22,11 @@
</
template
>
<
template
v-slot:body=
"props"
>
<q-tr
:props=
"props"
>
<q-td
style=
"width:200px;"
class=
"cursor-pointer ListTable-title"
>
<div
class=
"ellipsis-3-lines"
style=
"padding: 7px 16px;width: 200px;white-space: break-spaces;"
@
click=
"showHotelDetails=true"
>
<q-td
style=
"width:200px;"
class=
"cursor-pointer ListTable-title"
@
click=
"showHotelDetailHandler(props.row.HotelId)"
>
<div
class=
"ellipsis-3-lines"
style=
"padding: 7px 16px;width: 200px;white-space: break-spaces;"
>
{{
props
.
row
.
HotelName
}}
</div>
<
hotelCard
class=
"ListTable-show"
v-if=
"props.rowIndex==0"
></hotelCard
>
<
!--
<hotelCard
class=
"ListTable-show"
v-if=
"props.rowIndex==0"
></hotelCard>
--
>
</q-td>
<q-td>
<div
class=
"td-item"
>
{{
$t
(
'hotel.table.price'
)
}}
</div>
...
...
@@ -80,10 +80,10 @@
<hotel-price-list
:hotel=
"queryHotelObj"
@
update:model-value=
"showOrderSubmitHandler"
></hotel-price-list>
</q-dialog>
<q-dialog
v-model=
"showOrderPreview"
persistent
>
<
TableOperation
:HotelRow=
"orderSubmitObj"
:hotelInfor=
"orderSubmitItemObj"
@
close=
"showOrderPreview = false"
></TableO
peration>
<
table-operation
:HotelRow=
"orderSubmitObj"
:hotelInfor=
"orderSubmitItemObj"
@
close=
"showOrderPreview = false"
></table-o
peration>
</q-dialog>
<q-dialog
v-model=
"showHotelDetails"
persistent
>
<hotel
Details
@
close=
"showHotelDetails=false"
></hotelD
etails>
<hotel
-details
:hotelId=
"showHotelDetailId"
></hotel-d
etails>
</q-dialog>
</div>
</template>
...
...
@@ -154,7 +154,8 @@ export default defineComponent({
orderSubmitObj
:{}
as
any
,
orderSubmitItemObj
:{}
as
any
,
showOrderPreview
:
false
,
showHotelDetails
:
true
showHotelDetails
:
false
,
showHotelDetailId
:
0
})
...
...
@@ -232,6 +233,10 @@ export default defineComponent({
data
.
orderSubmitObj
=
row
data
.
orderSubmitItemObj
=
col
data
.
showOrderPreview
=
true
},
showHotelDetailHandler
(
hotelId
:
number
){
data
.
showHotelDetailId
=
hotelId
data
.
showHotelDetails
=
true
}
}
methods
.
calcDateRangeCols
()
...
...
@@ -249,7 +254,7 @@ export default defineComponent({
display
:
block
;
}
.ListTable-show
{
/* position: absolute;
/* position: absolute;
left: 0;
top:80px;
z-index: 9999; */
...
...
src/components/hotel/list/hotelCard.vue
View file @
c6d12384
...
...
@@ -27,48 +27,31 @@
<span
class=
"fz15 q-pl-sm"
>
{{
$t
(
'hotel.col.low'
)
}}
</span>
</div>
</div>
</q-card>
</q-card>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
,
inject
,
watch
,
onBeforeUnmount
,
computed
}
from
'vue'
import
{
useI18n
}
from
'vue-i18n'
import
useScrollModule
from
'../../../module/scrollbar/scrollModule'
import
{
DirtionmaryHelper
}
from
'../../../config/dictionary'
import
message
from
'../../../utils/message'
import
{
ApiResult
}
from
'../../../@types/enumHelper'
import
HotelService
from
'../../../api/hotel'
import
{
moneyFormat
}
from
'../../../utils/tools'
import
{
useQuasar
}
from
'quasar'
export
default
defineComponent
({
props
:
{},
setup
(
props
,
context
)
{
const
orderstatus
=
inject
(
DirtionmaryHelper
.
HOTEL_CAR_ORDER_STATUS
)
as
any
const
cars
=
inject
(
DirtionmaryHelper
.
HOTEL_CAR_LIST
)
as
any
const
editor
=
inject
(
DirtionmaryHelper
.
HOTEL_UPDATEHOTEL_CAR
)
as
any
const
{
t
}
=
useI18n
()
const
TCNumRef
=
ref
(
null
)
as
any
const
ContactNameRef
=
ref
(
null
)
as
any
const
ContactNumberRef
=
ref
(
null
)
as
any
const
$q
=
useQuasar
()
const
data
=
reactive
({
scrollStyle
:{}
as
any
})
data
.
scrollStyle
=
useScrollModule
().
scrollStyle
const
info
=
ref
(
null
)
const
panning
=
ref
(
false
)
// 今天购买数量
watch
(
cars
.
value
,
(
n
,
o
)
=>
{
methods
.
getMoney
()
})
const
methods
=
{
}
return
{
...
toRefs
(
data
),
cars
,
TCNumRef
,
ContactNameRef
,
ContactNumberRef
,
...
methods
,
moneyFormat
,
info
,
panning
,
}
return
{
...
toRefs
(
data
),
...
methods
}
}
})
</
script
>
<
style
>
.hotelCard-img
{
width
:
228px
;
...
...
@@ -76,10 +59,9 @@
overflow
:
hidden
;
}
.hotelCard-title
{
width
:
100%
;
width
:
100%
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
}
</
style
>
\ No newline at end of file
src/components/hotel/list/hotelDetails.vue
View file @
c6d12384
<
template
>
<q-card
class=
"bg-white q-pa-lg"
style=
"width: 1366px;"
>
<div
class=
"q-pa-lg"
>
<div
class=
"row justify-between"
>
<div
class=
"row items-center"
>
<div
class=
"text-weight-bold fz20"
>
東京上野康福酒店H0TELCO東京上野康福酒店H0TELCO
</div>
<div
class=
"q-ml-md"
>
<img
v-for=
"item in 5"
class=
"q-mr-xs"
width=
"24"
height=
"17"
src=
"../../../assets/images/hotelCard0.png"
/>
</div>
</div>
<q-icon
class=
"text-grey-13 cursor-pointer"
name=
"close"
size=
"md"
@
click=
"close"
></q-icon>
<q-card
class=
"bg-white q-py-lg column"
style=
"max-width: 1366px; min-width: 375px; width: 70%; height: 80vh"
>
<div
class=
"row justify-between q-px-lg"
>
<div
class=
"row items-center"
>
<div
class=
"text-weight-bold fz20"
>
{{
h
.
Name
}}
</div>
<div
class=
"q-ml-md"
>
<q-rating
v-model=
"h.Star"
size=
"2em"
color=
"orange"
:max=
"h.Star"
readonly
/>
</div>
<div
class=
"q-py-md text-blue"
>
<span
class=
"fz14 text-weight-bold q-pr-sm"
>
{{
$t
(
'hotel.col.four'
)
}}
</span>
<span
class=
"text-h5 text-weight-bold"
>
500-700
</span>
<span
class=
"fz14 text-weight-bold"
>
{{
$t
(
'unit.jp'
)
}}
</span>
</div>
<q-icon
class=
"text-grey-13 cursor-pointer"
name=
"close"
size=
"md"
v-close-popup
></q-icon>
</div>
<q-scroll-area
:thumb-style=
"scrollStyle.thumbStyle"
:bar-style=
"scrollStyle.barStyle"
class=
"col q-px-lg"
>
<!--
<div
class=
"q-py-md text-blue"
>
<span
class=
"fz14 text-weight-bold q-pr-sm"
>
{{
$t
(
'hotel.col.four'
)
}}
</span>
<span
class=
"text-h5 text-weight-bold"
>
500-700
</span>
<span
class=
"fz14 text-weight-bold"
>
{{
$t
(
'unit.jp'
)
}}
</span>
</div>
-->
<div
class=
"row nowrap"
>
<q-icon
class=
"text-grey-13 q-mr-xs"
name=
"place"
size=
"xs"
></q-icon>
<span
class=
"fz14 text-weight-bold text-blick"
style=
"flex-grow: 1"
>
{{
h
.
Address
}}
</span>
</div>
<div
class=
"q-pt-sm row"
>
<div>
<q-icon
class=
"text-grey-13 q-mr-xs"
name=
"phone"
size=
"xs"
></q-icon>
<span
class=
"fz14 text-weight-bold text-blick"
>
{{
$t
(
'hotel.details.zuoji'
)
}}
:
</span>
<span
class=
"fz14 text-weight-bold text-blue q-ml-sm q-mr-md"
>
{{
h
.
Tel
}}
</span>
</div>
<div
class=
"
row nowrap
"
>
<
q-icon
class=
"text-grey-13 q-mr-xs"
name=
"place"
size=
"xs"
></q-ico
n>
<span
class=
"fz14 text-weight-bold text-bl
ick"
style=
"flex-grow: 1;"
>
日本,東京都,東京,東京上野臺東區下谷1丁目3-11
</span>
<div
class=
"
q-mr-lg
"
>
<
span
class=
"fz14 text-weight-bold text-blick"
>
{{
$t
(
'hotel.details.chuanzhen'
)
}}
:
</spa
n>
<span
class=
"fz14 text-weight-bold text-bl
ue q-ml-sm"
>
{{
h
.
Fax
==
''
?
$t
(
'noneFax'
):
h
.
Fax
}}
</span>
</div>
<div
class=
"q-pt-sm row"
>
<div>
<q-icon
class=
"text-grey-13 q-mr-xs"
name=
"phone"
size=
"xs"
></q-icon>
<span
class=
"fz14 text-weight-bold text-blick"
>
{{
$t
(
'hotel.details.zuoji'
)
}}
:
</span>
<span
class=
"fz14 text-weight-bold text-blue q-ml-sm q-mr-md"
>
03-68458878
</span>
</div>
<div
class=
"q-mr-lg"
>
<span
class=
"fz14 text-weight-bold text-blick"
>
{{
$t
(
'hotel.details.chuanzhen'
)
}}
:
</span>
<span
class=
"fz14 text-weight-bold text-blue q-ml-sm"
>
03-68458878
</span>
</div>
<div
class=
"q-ml-lg"
>
<span
class=
"fz14 text-weight-bold text-blick"
>
{{
$t
(
'hotel.details.guanwang'
)
}}
:
</span>
<span
class=
"fz14 text-weight-bold text-blue q-ml-sm"
>
www.takitei.ltd/hotelcomfact
</span>
</div>
<div
class=
"q-ml-lg"
>
<span
class=
"fz14 text-weight-bold text-blick"
>
{{
$t
(
'hotel.details.guanwang'
)
}}
:
</span>
<a
class=
"fz14 text-weight-bold text-blue q-ml-sm"
:href=
"h.URL"
target=
"_blank"
>
{{
h
.
URL
}}
</a>
</div>
<div
class=
"q-py-lg row nowrap col"
>
<div
class=
"col-6 row col"
>
<div
class=
"col-7"
>
<img
style=
"display: block;height: 100%;width: 100%;"
src=
"https://placeimg.com/500/300/nature"
/>
</div>
<div
class=
"col"
style=
"flex-shrink: 0;margin-left: 10px;"
>
<div
style=
"height: 50%;"
>
<img
style=
"display: block;height: 97%;width: 100%;"
src=
"https://placeimg.com/500/300/nature"
/>
</div>
<div
class=
"row items-end"
style=
"height: 50%;"
>
<q-img
style=
"height: 97%;width: 100%;"
src=
"https://placeimg.com/500/300/nature"
>
<div
class=
"absolute-full text-subtitle2 flex flex-center"
>
<span
class=
"fz20 text-weight-bold"
>
+
</span>
<span
class=
"text-h5 text-weight-bold"
>
14
</span>
</div>
</q-img>
</div>
</div>
</div>
<div
class=
"q-py-lg row nowrap col"
>
<div
class=
"col-6 row col rounded-borders"
style=
"overflow:hidden"
v-if=
"h.List"
>
<div
class=
"col-7"
:class=
"
{'col-7':h.List.length>=3,'col-6':h.List.length==2,'col-12':h.List.length==1}">
<q-img
:src=
"`http://imgfile.oytour.com$
{h.List[0].Path}`" spinner-color="drk" spinner-size="20px" height="100%" mode="cover" />
</div>
<div
class=
"col q-ml-md"
style=
"height: 299px; border: 1px solid #F3F3F3;overflow: hidden;"
>
<div
class=
"q-ma-sm"
>
<img
height=
"280"
style=
"width: 100%;"
src=
"https://placeimg.com/500/300/nature"
/>
<div
class=
"col q-pl-sm"
v-if=
"h.List.length>1"
>
<div
:style=
"
{'height':h.List.length>2?'50%':'100%'}">
<q-img
:src=
"`http://imgfile.oytour.com$
{h.List[1].Path}`" spinner-color="drk" spinner-size="20px" height="100%" mode="cover" />
</div>
<div
class=
"row items-end q-pt-sm"
style=
"height: 50%"
v-if=
"h.List.length>2"
>
<q-img
:src=
"`http://imgfile.oytour.com$
{h.List[2].Path}`" spinner-color="drk" spinner-size="20px" height="100%" mode="cover">
<div
class=
"absolute-full text-subtitle2 flex flex-center"
v-if=
"h.List.length>3"
>
<span
class=
"fz20 text-weight-bold"
>
+
</span>
<span
class=
"text-h5 text-weight-bold"
>
{{
(
h
.
List
.
length
-
3
)
}}
</span>
</div>
</q-img>
</div>
</div>
</div>
<div
class=
"bg-light-blue-1 q-pa-md fz14"
style=
"border-radius: 4px;"
>
<div
class=
"text-weight-bold "
>
{{
$t
(
'hotel.details.xiangqing'
)
}}
</div>
<div
class=
"text-grey-8 q-mt-sm"
style=
"line-height: 28px;"
>
上野康福酒店位於臺東區下谷,地理位置優越,此酒店是您出行東京的理想
出發點。 在這裏,住客們可輕松前往市區內各大旅遊、購物、餐飲地點
。上野康福酒店一直致力於為您提供一流的設施與尊貴的服務,確保您在入
住期間愉快、愜意。上野康福酒店是出行東京的優選住宿,為您提供一站式高品質服務。
</div>
<div
class=
"col q-ml-sm rounded-borders"
style=
"overflow: hidden"
id=
"baiduMap"
></div>
</div>
<div
class=
"bg-light-blue-1 q-pa-md fz14 rounded-borders"
>
<div
class=
"text-weight-bold"
>
{{
$t
(
'hotel.details.xiangqing'
)
}}
</div>
<div
class=
"text-grey-8 q-mt-sm"
>
{{
h
.
Descriptions
}}
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.a'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
moneyFormat
(
h
.
InTangTax
)
}}
</div>
</div>
<div
class=
"q-py-lg q-px-md"
>
<div
class=
"fz14 row col q-pb-md"
>
<span
class=
"col-2 text-weight-bold"
>
{{
$t
(
'hotel.details.col.t1'
)
}}
</span>
<div
class=
"col q-pl-lg"
>
<span
class=
"text-grey-8"
>
50
</span>
</div>
</div>
<div
class=
"fz14 row col q-pb-md"
>
<span
class=
"col-2 text-weight-bold"
>
{{
$t
(
'hotel.details.col.t2'
)
}}
</span>
<div
class=
"col q-pl-lg"
>
<span
class=
"text-grey-8"
>
50
</span>
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.b'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
moneyFormat
(
h
.
CityTax
)
}}
</div>
</div>
<div
class=
"bg-light-blue-1 q-pa-md fz14"
style=
"border-radius: 4px;"
>
<div
class=
"text-weight-bold "
>
{{
$t
(
'hotel.details.wenxintishi'
)
}}
</div>
<div
class=
"text-grey-8 q-mt-sm"
style=
"line-height: 28px;"
>
<div>
1、轻声慢步,文明上下楼
</div>
<div>
2、轻声漫步不打闹,上下楼梯要走好
</div>
<div>
3、上下楼梯靠右走,你谦我让脚步轻
</div>
<div>
4、不要跑,不要跳,不要打闹向右靠。
</div>
<div>
5、上下楼梯靠右行,你谦我让脚步轻
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.c'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
$t
(
'1603 0275'
)
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.d'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
$t
(
'1603 0275'
)
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.e'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
$t
(
'1603 0275'
)
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.f'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
$t
(
'1603 0275'
)
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-3 f12 text-grey-500"
>
{{
$t
(
'hd.item.g'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
$t
(
'1603 0275'
)
}}
</div>
</div>
</div>
<div
class=
"q-mt-lg"
>
<div
class=
"bg-orange-1 q-pa-md rounded-borders fz14"
style=
"border: 1px dashed orange"
>
<div
class=
"text-weight-bold"
>
{{
$t
(
'hotel.details.xiangqing'
)
}}
</div>
<div
class=
"text-grey-700 q-mt-sm"
>
上野康福酒店位於臺東區下谷,地理位置優越,此酒店是您出行東京的理想 出發點。 在這裏,住客們可輕松前往市區內各大旅遊、購物、餐飲地點 。上野康福酒店一直致力於為您提供一流的設施與尊貴的服務,確保您在入 住期間愉快、愜意。上野康福酒店是出行東京的優選住宿,為您提供一站式高品質服務。
</div>
</div>
</div>
</q-card>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
,
inject
,
watch
,
onBeforeUnmount
,
computed
}
from
'vue'
import
{
useI18n
}
from
'vue-i18n'
import
useScrollModule
from
'../../../module/scrollbar/scrollModule'
import
{
DirtionmaryHelper
}
from
'../../../config/dictionary'
import
message
from
'../../../utils/message'
import
{
ApiResult
}
from
'../../../@types/enumHelper'
import
HotelService
from
'../../../api/hotel'
import
{
moneyFormat
}
from
'../../../utils/tools'
import
{
useQuasar
}
from
'quasar'
export
default
defineComponent
({
props
:
{},
setup
(
props
,
context
)
{
const
orderstatus
=
inject
(
DirtionmaryHelper
.
HOTEL_CAR_ORDER_STATUS
)
as
any
const
cars
=
inject
(
DirtionmaryHelper
.
HOTEL_CAR_LIST
)
as
any
const
editor
=
inject
(
DirtionmaryHelper
.
HOTEL_UPDATEHOTEL_CAR
)
as
any
const
{
t
}
=
useI18n
()
const
TCNumRef
=
ref
(
null
)
as
any
const
ContactNameRef
=
ref
(
null
)
as
any
const
ContactNumberRef
=
ref
(
null
)
as
any
const
$q
=
useQuasar
()
const
data
=
reactive
({
})
data
.
scrollStyle
=
useScrollModule
().
scrollStyle
const
info
=
ref
(
null
)
const
panning
=
ref
(
false
)
// 今天购买数量
watch
(
cars
.
value
,
(
n
,
o
)
=>
{
methods
.
getMoney
()
})
const
methods
=
{
close
(){
context
.
emit
(
'close'
)
}
</q-scroll-area>
</q-card>
<q-inner-loading
:showing=
"loading"
:label=
"$t('loading')"
label-class=
"text-grey-6 f12"
/>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
,
inject
,
watch
,
onBeforeUnmount
,
computed
}
from
'vue'
import
{
useI18n
}
from
'vue-i18n'
import
{
useQuasar
}
from
'quasar'
import
useScrollModule
from
'src/module/scrollbar/scrollModule'
import
HotelService
from
'src/api/hotel'
import
message
from
'src/utils/message'
import
{
ApiResult
}
from
'src/@types/enumHelper'
import
{
moneyFormat
}
from
'src/utils/tools'
export
default
defineComponent
({
props
:
{
hotelId
:
{
type
:
Number
,
required
:
true
}
},
setup
(
props
,
context
)
{
const
{
t
}
=
useI18n
()
watch
(()
=>
props
.
hotelId
,(
n
,
o
)
=>
{
data
.
hotelId
=
n
methods
.
initHotel
()
})
const
$q
=
useQuasar
()
const
data
=
reactive
({
scrollStyle
:
{}
as
any
,
loading
:
true
,
h
:{}
as
any
,
hotelId
:
props
.
hotelId
})
data
.
scrollStyle
=
useScrollModule
().
scrollStyle
const
methods
=
{
initMap
(
lng
:
any
,
lat
:
any
)
{
let
Bmap
=
window
.
BMapGL
// 注意要带window,不然会报错(注意官方api,会有改动,之前是Bmap,后面3.0版本改为了BMap,最好查文档或者打印一下window)
var
b
=
new
Bmap
.
Map
(
'baiduMap'
)
b
.
centerAndZoom
(
new
Bmap
.
Point
(
lng
,
lat
),
15
)
b
.
enableScrollWheelZoom
(
true
)
b
.
addOverlay
(
new
Bmap
.
Marker
(
new
Bmap
.
Point
(
lng
,
lat
)))
//var a = ["114.066392,22.748699", "114.07991,22.640074"]
},
initHotel
(){
data
.
loading
=
true
console
.
log
(
data
.
hotelId
,
'in'
)
HotelService
.
GetHotelDetail
(
data
.
hotelId
).
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
data
.
h
=
r
.
data
.
data
methods
.
initMap
(
data
.
h
.
Lng
,
data
.
h
.
Lat
)
}
else
{
message
.
errorMsg
(
r
.
data
.
message
)
}
data
.
loading
=
false
})
.
catch
(
e
=>
{
data
.
loading
=
false
message
.
errorMsg
(
e
.
message
)
})
}
return
{
...
toRefs
(
data
),
cars
,
TCNumRef
,
ContactNameRef
,
ContactNumberRef
,
...
methods
,
moneyFormat
,
info
,
panning
,}
}
})
</
script
>
<
style
>
.hotelCard-img
{
width
:
228px
;
height
:
162px
;
overflow
:
hidden
;
}
.hotelCard-title
{
width
:
100%
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
onMounted
(()
=>
{
methods
.
initHotel
()
})
return
{
...
toRefs
(
data
),
...
methods
,
moneyFormat
}
}
</
style
>
\ No newline at end of file
})
</
script
>
<
style
>
.hotelCard-img
{
width
:
228px
;
height
:
162px
;
overflow
:
hidden
;
}
.hotelCard-title
{
width
:
100%
;
overflow
:
hidden
;
white-space
:
nowrap
;
text-overflow
:
ellipsis
;
}
</
style
>
src/components/hotel/order/list/OrderList.vue
View file @
c6d12384
...
...
@@ -34,7 +34,8 @@
<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=
"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>
...
...
@@ -193,30 +194,29 @@
<div
class=
"q-mt-md f12 text-grey-6"
>
{{ $t('noneData') }}
</div>
</div>
<q-dialog
v-model=
"PaymentDialog"
>
<div
class=
"rounded-borders bg-white q-p
x-lg q-pb-lg q-pt-lg"
:style=
"{'width': $q.platform.is.desktop?'450px':'450px'}
"
>
<div
class=
"orderListDialog-title row justify-center q-pb-xs
"
>
<span
class=
"text-weight-bold"
>
{{
$t('hotelorder.dialog.title')
}}
</span>
<q-icon
class=
"orderListDialog-close text-grey"
name=
"close"
@
click=
"PaymentDialog
=
false"
></q-icon>
<div
class=
"rounded-borders bg-white q-p
b-lg q-pt-lg"
style=
"width: 450px
"
>
<div
class=
"orderListDialog-title row justify-center q-pb-xs"
>
<span
class=
"text-weight-bold"
>
{{
$t('hotelorder.dialog.title')
}}
</span>
<q-icon
class=
"orderListDialog-close text-grey"
name=
"close"
@
click=
"PaymentDialog
=
false"
></q-icon>
</div>
<div
class=
"orderListDialog-bg column rounded-borders q-ma-lg q-py-lg q-px-lg"
>
<div
class=
"orderListDialog-img"
>
<div
class=
"row items-end q-pb-md"
>
<span
class=
"text-grey-3"
>
{{
$t('hotelorder.dialog.AccountName')
}}:
</span>
<span
class=
"text-weight-bold text-white"
style=
"font-size: 18px
;
"
>
張三
</span>
<span
class=
"text-grey-3"
>
{{
$t('hotelorder.dialog.AccountName')
}}:
</span>
<span
class=
"text-weight-bold text-white"
style=
"font-size: 18px"
>
張三
</span>
</div>
<div
class=
"
row items-center justify-between q-pb-sm
"
>
<div>
<span
class=
"text-grey-3"
>
{{
$t('hotelorder.dialog.account')
}}:
</span>
<span
class=
"text-cyan-12 text-weight-bold
"
style=
"font-size: 18px;"
>
7489327279423
</span>
</div>
<q-btn
size=
"xs"
color=
"cyan-12 q-ml-sm"
>
<span
class=
"text-dark"
>
{{$t('hotelorder.dialog.copy')}}
</span
></q-btn>
<div
class=
"
q-pb-sm"
:class=
"{'row items-center justify-between':$q.platform.is.desktop}
"
>
<div
:class=
"{'q-mb-sm':$q.platform.is.mobile,'col':$q.platform.is.desktop}"
>
<span
class=
"text-grey-3"
>
{{
$t('hotelorder.dialog.account')
}}:
</span>
<span
class=
"text-cyan-12 text-weight-bold
din"
style=
"font-size: 18px"
>
7489 3272 7942 311
</span>
</div
>
<q-btn
:class=
"{'q-ml-xl':$q.platform.is.mobile}"
unelevated
size=
"xs"
class=
"bg-blue-11 text-white"
v-if=
"copyId != -1"
:label=
"$t('hotelorder.dialog.copy')"
@
click=
"setCopyHandler(null,'開戶名:張三,帳戶:7489 3272 7942 311')"
></q-btn
>
<q-btn
:class=
"{'q-ml-xl':$q.platform.is.mobile}"
icon=
"check"
unelevated
size=
"xs"
class=
"bg-blue-11 text-white"
:label=
"$t('hotelorder.copyed')"
v-else
></q-btn>
</div>
</div>
</div>
<div
class=
"row justify-center q-pb-lg
q-px-lg q-mx-lg
"
>
<span
class=
"text-center
text-grey-8 q-px-lg"
>
{{$t('hotelorder.dialog.prompt')
}}
</span>
<div
class=
"row justify-center q-pb-lg"
>
<span
class=
"text-center
f12 text-grey-6 q-px-lg"
>
{{ $t('hotelorder.dialog.prompt')
}}
</span>
</div>
</div>
</q-dialog>
...
...
@@ -232,7 +232,7 @@ import { RoomType, StandardStatus } from '../../../../@types'
import
{
getHotelOrderStatus
,
getHotelRoomType
,
moneyFormat
}
from
'../../../../utils/tools'
import
{
useI18n
}
from
'vue-i18n'
import
svgIcon
from
'../../../global/svg-icon.vue'
import
{
useQuasar
}
from
'quasar'
import
{
copyToClipboard
,
useQuasar
}
from
'quasar'
import
{
currentRouter
}
from
'../../../../router'
import
{
UploadFileInfo
}
from
'naive-ui'
import
{
slice
}
from
'lodash'
...
...
@@ -341,12 +341,6 @@ export default defineComponent({
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
},
...
...
@@ -370,35 +364,49 @@ export default defineComponent({
handleFinish
(
options
:
{
file
:
UploadFileInfo
;
event
?:
ProgressEvent
})
{
data
.
loading
=
false
let
r
=
(
options
.
event
?.
target
as
XMLHttpRequest
).
response
if
(
r
)
{
let
res
=
JSON
.
parse
(
r
)
if
(
res
.
resultCode
==
ApiResult
.
SUCCESS
&&
res
.
data
)
{
if
(
r
)
{
let
res
=
JSON
.
parse
(
r
)
if
(
res
.
resultCode
==
ApiResult
.
SUCCESS
&&
res
.
data
)
{
methods
.
setGuestListHandler
(
res
.
data
)
}
else
{
}
else
{
message
.
errorMsg
(
t
(
'upload.failed'
))
data
.
loading
=
false
data
.
loading
=
false
}
}
else
{
}
else
{
message
.
errorMsg
(
t
(
'upload.failed'
))
data
.
loading
=
false
data
.
loading
=
false
}
},
setGuestListHandler
(
url
:
string
)
{
HotelService
.
SetGuestFile
(
data
.
uploadOrderId
,
url
)
.
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
)
{
message
.
successMsg
(
t
(
'upload.success'
))
let
order
=
data
.
orders
.
find
(
x
=>
x
.
OrderId
==
data
.
uploadOrderId
)
order
.
GuestFileList
=
[
url
]
}
else
{
message
.
errorMsg
(
t
(
'upload.failed'
))
}
data
.
loading
=
false
})
.
catch
(
r
=>
{
data
.
loading
=
false
message
.
errorMsg
(
r
.
message
)
})
},
setCopyHandler
(
order
:
any
,
ctx
?:
string
)
{
if
(
ctx
){
data
.
copyId
=
-
1
copyToClipboard
(
ctx
)
}
else
{
data
.
copyId
=
order
.
OrderId
copyToClipboard
(
order
.
OrderNo
)
}
setTimeout
(()
=>
{
data
.
copyId
=
0
},
2000
)
},
setGuestListHandler
(
url
:
string
){
HotelService
.
SetGuestFile
(
data
.
uploadOrderId
,
url
).
then
(
r
=>
{
if
(
r
.
data
.
resultCode
==
ApiResult
.
SUCCESS
){
message
.
successMsg
(
t
(
'upload.success'
))
let
order
=
data
.
orders
.
find
(
x
=>
x
.
OrderId
==
data
.
uploadOrderId
)
order
.
GuestFileList
=
[
url
]
}
else
{
message
.
errorMsg
(
t
(
'upload.failed'
))
}
data
.
loading
=
false
}).
catch
(
r
=>
{
data
.
loading
=
false
message
.
errorMsg
(
r
.
message
)
})
}
}
methods
.
init
()
...
...
src/components/layout/Notifications.vue
View file @
c6d12384
<
template
>
<q-card
flat
class=
"bg-white q-pa-none"
style=
"shadow: 0px 0px 50px 0px rgba(82, 63, 105, 0.15)"
<q-card
flat
class=
"bg-white q-pa-none light-shadow"
style=
"border:1px solid #EEE"
:style=
"
{'width':$q.platform.is.desktop?'375px':'350px'}">
<div
class=
"Notifications-bg"
>
<div
class=
"q-pa-lg row items-center"
>
<span
class=
"text-white text-weight-bold text-h6 q-mr-sm q-pl-sm"
>
{{
$t
(
'Notifications.title'
)
}}
</span>
<div
class=
"text-grey-1 f12 q-pl-sm"
>
24
{{
$t
(
'Notifications.subtitle'
)
}}
</div>
<div
class=
"text-grey-1 f12 q-pl-sm"
>
0
{{
$t
(
'Notifications.subtitle'
)
}}
</div>
</div>
</div>
<div
class=
"Notifications-height q-py-md"
>
<div
class=
"Notifications-height q-py-md"
style=
"display:none"
>
<q-scroll-area
:thumb-style=
"scrollStyle.thumbStyle"
:bar-style=
"scrollStyle.barStyle"
class=
"full-height"
>
<q-list>
<q-item
v-for=
"(item,index) in menus"
class=
"rounded-borders q-py-md"
>
...
...
@@ -27,12 +26,16 @@
</div>
</q-item-section>
</q-item>
</q-list>
</q-list>
</q-scroll-area>
</div>
<div
class=
"text-center q-my-xl"
>
{{
$t
(
'noneNotify'
)
}}
</div>
</q-card>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
ref
,
reactive
,
toRefs
,
provide
,
onMounted
}
from
'vue'
import
{
useMenus
,
Menu
}
from
'../../utils/menus'
...
...
@@ -66,7 +69,7 @@
if
(
data
.
langs
&&
data
.
langs
.
length
>
0
){
data
.
currentLang
=
data
.
langs
.
find
(
x
=>
x
.
langLocale
==
locale
.
value
)
??
{};
}
// 切换语言
const
methods
=
{
getLanguage
(
val
:
SitLang
)
{
...
...
@@ -81,13 +84,13 @@
}
}
onMounted
(()
=>
{
})
return
{...
toRefs
(
data
),...
methods
}
}
})
</
script
>
<
style
>
.Notifications-height
{
height
:
325px
;
...
...
@@ -142,4 +145,4 @@
line-height
:
18px
;
border-radius
:
6px
;
}
</
style
>
\ No newline at end of file
</
style
>
src/i18n/zh-TW/index.ts
View file @
c6d12384
...
...
@@ -14,6 +14,8 @@ export default {
noneData
:
"沒有找到相關的數據"
,
loading
:
"正在加載數據"
,
verified
:
'已認證'
,
noneFax
:
'無傳真信息'
,
noneNotify
:
'暫無通知消息'
,
personal
:{
pageTitle
:
"個人檔案"
,
trading
:
'累積交易額'
,
...
...
@@ -47,6 +49,17 @@ export default {
"down"
:
"下載"
,
"reload"
:
"重新上傳"
},
hd
:{
item
:{
a
:
'入湯稅'
,
b
:
'城市稅'
,
c
:
'停車場'
,
d
:
'預約截止天數'
,
e
:
'是否含餐'
,
f
:
'酒店類型'
,
g
:
'設施服務'
}
},
dialog
:{
titles
:{
hotel
:
"移除酒店警示"
,
...
...
src/pages/auth/login.vue
View file @
c6d12384
...
...
@@ -57,10 +57,10 @@
<div
class=
"col"
:class=
"
{'text-center q-mb-md':$q.platform.is.mobile}">
<img
src=
"../../assets/images/lg-logo.png"
style=
"width:80%;"
/>
</div>
<div
class=
"text-grey-6 text-weight-bold col"
:class=
"
{'text-right':$q.platform.is.desktop,'text-center':$q.platform.is.mobile}">
<
!--
<
div
class=
"text-grey-6 text-weight-bold col"
:class=
"
{'text-right':$q.platform.is.desktop,'text-center':$q.platform.is.mobile}">
<span>
{{
$t
(
"login.notaccess"
)
}}
</span>
<router-link
:to=
"
{ path: '/auth/regist' }" class="text-primary pfb text-subtitle">
{{
$t
(
"login.registlink"
)
}}
</router-link>
</div>
</div>
-->
</div>
<div
class=
"q-py-xxl full-width"
>
<div
class=
"text-h3 text-weight-bold"
>
{{
$t
(
"login.title"
)
}}
</div>
...
...
@@ -131,7 +131,7 @@ export default defineComponent({
//TODO: 缺陷,验证与提交应该使用Form表单来完成,不应该进行单个验证
let
{
userModel
,
usernameRef
,
passwordRef
,
userValidateRule
,
loginSubmit
,
stateManager
}
=
useLgoinModule
()
let
{
setTitle
}
=
useMetaModule
()
const
dtNow
=
new
Date
().
getFullYear
()
const
{
locale
,
t
}
=
useI18n
();
setTitle
(
t
(
"login.pageTitle"
))
...
...
@@ -143,7 +143,7 @@ export default defineComponent({
if
(
data
.
langs
&&
data
.
langs
.
length
>
0
){
data
.
currentLang
=
data
.
langs
.
find
(
x
=>
x
.
langLocale
==
locale
.
value
)
??
{};
}
// 切换语言
const
getLanguage
=
(
val
:
any
)
=>
{
locale
.
value
=
val
.
langLocale
;
...
...
src/pages/personal/personal.vue
View file @
c6d12384
...
...
@@ -73,13 +73,13 @@
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-5 f12 text-grey-500"
>
{{
$t
(
'personal.TravelAgency'
)
}}
</div>
<div
class=
"col text-subtitle2"
>
{{
customerInfo
.
customerName
??
$t
(
'台灣雄獅旅行社'
)
}}
</div>
<div
class=
"col text-subtitle2"
>
{{
customerInfo
.
customerName
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-5 f12 text-grey-500"
>
{{
$t
(
'personal.post'
)
}}
</div>
<div
class=
"col text-subtitle2"
>
{{
customerInfo
.
contact
??
userInfo
.
name
}}
</div>
<div
class=
"col text-subtitle2"
>
{{
customerInfo
.
contact
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
...
...
@@ -101,13 +101,13 @@
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-5 f12 text-grey-500"
>
{{
$t
(
'personal.LINEID'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
customerInfo
.
lineId
??
$t
(
'091 004 022 9'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
customerInfo
.
lineId
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
<div
class=
"q-mt-lg row items-center"
>
<div
class=
"col-5 f12 text-grey-500"
>
{{
$t
(
'personal.Phone'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
customerInfo
.
contactNumber
??
$t
(
'+886 910040229'
)
}}
</div>
<div
class=
"col text-subtitle2 text-weight-bolder"
>
{{
customerInfo
.
contactNumber
}}
</div>
</div>
</div>
<div
class=
"q-px-lg"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment