d2bdf28e by 华明祺

no message

1 parent 231f1f81
...@@ -8,6 +8,14 @@ export function getHotelList(params) { ...@@ -8,6 +8,14 @@ export function getHotelList(params) {
8 }) 8 })
9 } 9 }
10 10
11 export function getScenicList(params) {
12 return request({
13 url: `/ota/activityScenic/getScenicList`,
14 method: 'get',
15 params: params
16 })
17 }
18
11 export function getStudioList(params) { 19 export function getStudioList(params) {
12 return request({ 20 return request({
13 url: `/ota/studio/list`, 21 url: `/ota/studio/list`,
...@@ -23,6 +31,16 @@ export function getHotelById(id) { ...@@ -23,6 +31,16 @@ export function getHotelById(id) {
23 }) 31 })
24 } 32 }
25 33
34 export function getScenicById(id) {
35 return request({
36 url: `/ota/scenic/getScenicInfo`,
37 method: 'get',
38 params: {
39 id
40 }
41 })
42 }
43
26 export function getStudioById(id) { 44 export function getStudioById(id) {
27 return request({ 45 return request({
28 url: `/ota/studio/${id}`, 46 url: `/ota/studio/${id}`,
...@@ -221,6 +239,18 @@ export function checkRoomPayByUserId(id) { ...@@ -221,6 +239,18 @@ export function checkRoomPayByUserId(id) {
221 }) 239 })
222 } 240 }
223 241
242
243 export function checkOrderPay(orderType) {
244 return request({
245 url: `/ota/norder/checkNonPayment`,
246 method: 'get',
247 params: {
248 orderType
249 }
250 })
251 }
252
253
224 export function submitInvoice(form) { 254 export function submitInvoice(form) {
225 return request({ 255 return request({
226 url: `/ota/invoice`, 256 url: `/ota/invoice`,
...@@ -471,7 +501,7 @@ export function checkNonPayment() { ...@@ -471,7 +501,7 @@ export function checkNonPayment() {
471 return request({ 501 return request({
472 url: `/ota/norder/checkNonPayment`, 502 url: `/ota/norder/checkNonPayment`,
473 method: 'get', 503 method: 'get',
474 params: {orderType: 5} 504 params: { orderType: 5 }
475 }) 505 })
476 } 506 }
477 507
...@@ -507,7 +537,7 @@ export function aadCustomer(data) { ...@@ -507,7 +537,7 @@ export function aadCustomer(data) {
507 export function delCustomer(id) { 537 export function delCustomer(id) {
508 return request({ 538 return request({
509 url: `/ota/customer/${id}`, 539 url: `/ota/customer/${id}`,
510 method: 'delete', 540 method: 'delete'
511 }) 541 })
512 } 542 }
513 543
...@@ -537,3 +567,11 @@ export function getTicketOrderInfo(params) { ...@@ -537,3 +567,11 @@ export function getTicketOrderInfo(params) {
537 params 567 params
538 }) 568 })
539 } 569 }
570
571 export function getGateListByLasId(params) {
572 return request({
573 url: `/ota/scenicConfig/getGateListByLasId`,
574 method: 'get',
575 params
576 })
577 }
......
...@@ -6,12 +6,12 @@ import { ...@@ -6,12 +6,12 @@ import {
6 /* Layout */ 6 /* Layout */
7 import Layout from '@/layoutPc' 7 import Layout from '@/layoutPc'
8 import Empty from '@/layoutPc/empty' 8 import Empty from '@/layoutPc/empty'
9 import NProgress from "nprogress"; 9 import NProgress from 'nprogress'
10 import {getToken} from "@/utils/auth"; 10 import { getToken } from '@/utils/auth'
11 import useUserStore from "@/store/modules/user"; 11 import useUserStore from '@/store/modules/user'
12 import {isRelogin} from "@/utils/request"; 12 import { isRelogin } from '@/utils/request'
13 import {ElMessage} from "element-plus"; 13 import { ElMessage } from 'element-plus'
14 import Layout2 from "@/layoutPc/index2"; 14 import Layout2 from '@/layoutPc/index2'
15 // import useUserStore from '@/store/modules/user' 15 // import useUserStore from '@/store/modules/user'
16 16
17 /** 17 /**
...@@ -64,7 +64,7 @@ export const constantRoutes = [ ...@@ -64,7 +64,7 @@ export const constantRoutes = [
64 path: '/ticketSearch', 64 path: '/ticketSearch',
65 component: () => import('@/viewsPc/booking/ticketSearch'), 65 component: () => import('@/viewsPc/booking/ticketSearch'),
66 name: 'ticketSearch', 66 name: 'ticketSearch',
67 meta: {title: '票务订单查询'} 67 meta: { title: '票务订单查询' }
68 }, 68 },
69 { 69 {
70 path: '/index', 70 path: '/index',
...@@ -98,37 +98,37 @@ export const constantRoutes = [ ...@@ -98,37 +98,37 @@ export const constantRoutes = [
98 path: 'wudao', 98 path: 'wudao',
99 component: () => import('@/viewsPc/about/wudao'), 99 component: () => import('@/viewsPc/about/wudao'),
100 name: 'dangNews', 100 name: 'dangNews',
101 meta: {title: '舞蹈节'} 101 meta: { title: '舞蹈节' }
102 }, 102 },
103 { 103 {
104 path: 'culture', 104 path: 'culture',
105 component: () => import('@/viewsPc/about/culture'), 105 component: () => import('@/viewsPc/about/culture'),
106 name: 'culture', 106 name: 'culture',
107 meta: {title: '地方文化'} 107 meta: { title: '地方文化' }
108 }, 108 },
109 { 109 {
110 path: 'leaderInfo/:id', 110 path: 'leaderInfo/:id',
111 component: () => import('@/viewsPc/about/leaderInfo'), 111 component: () => import('@/viewsPc/about/leaderInfo'),
112 name: 'leaderInfo', 112 name: 'leaderInfo',
113 meta: {title: '评委详情'} 113 meta: { title: '评委详情' }
114 }, 114 },
115 { 115 {
116 path: 'wudaoEn', 116 path: 'wudaoEn',
117 component: () => import('@/viewsPc/about/wudao'), 117 component: () => import('@/viewsPc/about/wudao'),
118 name: 'dangNewsEn', 118 name: 'dangNewsEn',
119 meta: {title: 'about us'} 119 meta: { title: 'about us' }
120 }, 120 },
121 { 121 {
122 path: 'cultureEn', 122 path: 'cultureEn',
123 component: () => import('@/viewsPc/about/culture_en'), 123 component: () => import('@/viewsPc/about/culture_en'),
124 name: 'cultureEn', 124 name: 'cultureEn',
125 meta: {title: 'culture'} 125 meta: { title: 'culture' }
126 }, 126 },
127 { 127 {
128 path: 'regulations', 128 path: 'regulations',
129 component: () => import('@/viewsPc/about/fileList'), 129 component: () => import('@/viewsPc/about/fileList'),
130 name: 'regulations', 130 name: 'regulations',
131 meta: {title: 'rules and regulations'} 131 meta: { title: 'rules and regulations' }
132 } 132 }
133 ] 133 ]
134 }, 134 },
...@@ -141,31 +141,31 @@ export const constantRoutes = [ ...@@ -141,31 +141,31 @@ export const constantRoutes = [
141 path: 'index', 141 path: 'index',
142 component: () => import('@/viewsPc/notice/index'), 142 component: () => import('@/viewsPc/notice/index'),
143 name: 'notice', 143 name: 'notice',
144 meta: {title: 'NOTICEBOARD'} 144 meta: { title: 'NOTICEBOARD' }
145 }, 145 },
146 { 146 {
147 path: 'index/list', 147 path: 'index/list',
148 component: () => import('@/viewsPc/notice/list'), 148 component: () => import('@/viewsPc/notice/list'),
149 name: 'noticeList', 149 name: 'noticeList',
150 meta: {title: '资讯列表'} 150 meta: { title: '资讯列表' }
151 }, 151 },
152 { 152 {
153 path: 'index/coverlist', 153 path: 'index/coverlist',
154 component: () => import('@/viewsPc/notice/coverlist'), 154 component: () => import('@/viewsPc/notice/coverlist'),
155 name: 'coverList', 155 name: 'coverList',
156 meta: {title: '图文列表'} 156 meta: { title: '图文列表' }
157 }, 157 },
158 { 158 {
159 path: 'index/fileList', 159 path: 'index/fileList',
160 component: () => import('@/viewsPc/notice/fileList'), 160 component: () => import('@/viewsPc/notice/fileList'),
161 name: 'fileList', 161 name: 'fileList',
162 meta: {title: '文件列表'} 162 meta: { title: '文件列表' }
163 }, 163 },
164 { 164 {
165 path: 'index/personList', 165 path: 'index/personList',
166 component: () => import('@/viewsPc/notice/personList'), 166 component: () => import('@/viewsPc/notice/personList'),
167 name: 'personList', 167 name: 'personList',
168 meta: {title: '人员列表'} 168 meta: { title: '人员列表' }
169 } 169 }
170 ] 170 ]
171 }, 171 },
...@@ -178,19 +178,19 @@ export const constantRoutes = [ ...@@ -178,19 +178,19 @@ export const constantRoutes = [
178 path: 'index', 178 path: 'index',
179 component: () => import('@/viewsPc/news/index'), 179 component: () => import('@/viewsPc/news/index'),
180 name: 'news', 180 name: 'news',
181 meta: {title: 'NEWS'} 181 meta: { title: 'NEWS' }
182 }, 182 },
183 { 183 {
184 path: 'list/:id', 184 path: 'list/:id',
185 component: () => import('@/viewsPc/news/list'), 185 component: () => import('@/viewsPc/news/list'),
186 name: 'newsList', 186 name: 'newsList',
187 meta: {title: '新闻列表'} 187 meta: { title: '新闻列表' }
188 }, 188 },
189 { 189 {
190 path: 'detail/:id', 190 path: 'detail/:id',
191 component: () => import('@/viewsPc/news/detail'), 191 component: () => import('@/viewsPc/news/detail'),
192 name: 'newsDetail', 192 name: 'newsDetail',
193 meta: {title: '新闻详情'} 193 meta: { title: '新闻详情' }
194 } 194 }
195 ] 195 ]
196 }, 196 },
...@@ -203,13 +203,13 @@ export const constantRoutes = [ ...@@ -203,13 +203,13 @@ export const constantRoutes = [
203 path: 'index', 203 path: 'index',
204 component: () => import('@/viewsPc/nationalTeam/index'), 204 component: () => import('@/viewsPc/nationalTeam/index'),
205 name: 'nationalTeam', 205 name: 'nationalTeam',
206 meta: {title: '新闻'} 206 meta: { title: '新闻' }
207 }, 207 },
208 { 208 {
209 path: 'index/personList', 209 path: 'index/personList',
210 component: () => import('@/viewsPc/nationalTeam/components/member'), 210 component: () => import('@/viewsPc/nationalTeam/components/member'),
211 name: 'personListHasKind', 211 name: 'personListHasKind',
212 meta: {title: '人员列表'} 212 meta: { title: '人员列表' }
213 } 213 }
214 214
215 ] 215 ]
...@@ -223,7 +223,7 @@ export const constantRoutes = [ ...@@ -223,7 +223,7 @@ export const constantRoutes = [
223 path: 'index', 223 path: 'index',
224 component: () => import('@/viewsPc/meta/index'), 224 component: () => import('@/viewsPc/meta/index'),
225 name: 'meta', 225 name: 'meta',
226 meta: {title: 'MEDIA'} 226 meta: { title: 'MEDIA' }
227 } 227 }
228 ] 228 ]
229 }, 229 },
...@@ -236,7 +236,7 @@ export const constantRoutes = [ ...@@ -236,7 +236,7 @@ export const constantRoutes = [
236 path: 'index', 236 path: 'index',
237 component: () => import('@/viewsPc/saiC/index'), 237 component: () => import('@/viewsPc/saiC/index'),
238 name: 'saiC', 238 name: 'saiC',
239 meta: {title: 'COMPETITIONS'} 239 meta: { title: 'COMPETITIONS' }
240 } 240 }
241 ] 241 ]
242 }, 242 },
...@@ -249,7 +249,7 @@ export const constantRoutes = [ ...@@ -249,7 +249,7 @@ export const constantRoutes = [
249 path: 'index', 249 path: 'index',
250 component: () => import('@/viewsPc/guide/index'), 250 component: () => import('@/viewsPc/guide/index'),
251 name: 'guide', 251 name: 'guide',
252 meta: {title: 'GUIDELINE'} 252 meta: { title: 'GUIDELINE' }
253 } 253 }
254 ] 254 ]
255 }, 255 },
...@@ -262,7 +262,7 @@ export const constantRoutes = [ ...@@ -262,7 +262,7 @@ export const constantRoutes = [
262 path: '', 262 path: '',
263 component: () => import('@/viewsPc/searchList'), 263 component: () => import('@/viewsPc/searchList'),
264 name: 'searchList', 264 name: 'searchList',
265 meta: {title: '搜索结果'} 265 meta: { title: '搜索结果' }
266 } 266 }
267 ] 267 ]
268 }, 268 },
...@@ -275,25 +275,25 @@ export const constantRoutes = [ ...@@ -275,25 +275,25 @@ export const constantRoutes = [
275 path: 'index', 275 path: 'index',
276 component: () => import('@/viewsPc/competition/index'), 276 component: () => import('@/viewsPc/competition/index'),
277 name: 'competition', 277 name: 'competition',
278 meta: {title: '竞赛服务'} 278 meta: { title: '竞赛服务' }
279 }, 279 },
280 { 280 {
281 path: 'coach/:kind', 281 path: 'coach/:kind',
282 component: () => import('@/viewsPc/competition/coach'), 282 component: () => import('@/viewsPc/competition/coach'),
283 name: 'competitionCoach', 283 name: 'competitionCoach',
284 meta: {title: '竞赛服务'} 284 meta: { title: '竞赛服务' }
285 }, 285 },
286 { 286 {
287 path: 'calendar', 287 path: 'calendar',
288 component: () => import('@/viewsPc/competition/calendar'), 288 component: () => import('@/viewsPc/competition/calendar'),
289 name: 'calendar', 289 name: 'calendar',
290 meta: {title: '竞赛日程'} 290 meta: { title: '竞赛日程' }
291 }, 291 },
292 { 292 {
293 path: 'domesticRanking', 293 path: 'domesticRanking',
294 component: () => import('@/viewsPc/competition/domesticRanking'), 294 component: () => import('@/viewsPc/competition/domesticRanking'),
295 name: 'domesticRanking', 295 name: 'domesticRanking',
296 meta: {title: '国内排名'} 296 meta: { title: '国内排名' }
297 } 297 }
298 ] 298 ]
299 }, 299 },
...@@ -306,19 +306,19 @@ export const constantRoutes = [ ...@@ -306,19 +306,19 @@ export const constantRoutes = [
306 path: 'list', 306 path: 'list',
307 component: () => import('@/viewsPc/match/index'), 307 component: () => import('@/viewsPc/match/index'),
308 name: 'matchList', 308 name: 'matchList',
309 meta: {title: '赛事'} 309 meta: { title: '赛事' }
310 }, 310 },
311 { 311 {
312 path: 'list/:id', 312 path: 'list/:id',
313 component: () => import('@/viewsPc/match/detail_en'), 313 component: () => import('@/viewsPc/match/detail_en'),
314 name: 'matchDetail', 314 name: 'matchDetail',
315 meta: {title: '赛事详情'} 315 meta: { title: '赛事详情' }
316 }, 316 },
317 { 317 {
318 path: 'list/reservationSearch', 318 path: 'list/reservationSearch',
319 component: () => import('@/viewsPc/match/reservationSearch.vue'), 319 component: () => import('@/viewsPc/match/reservationSearch.vue'),
320 name: 'reservationSearch', 320 name: 'reservationSearch',
321 meta: {title: '预订查询'} 321 meta: { title: '预订查询' }
322 } 322 }
323 ] 323 ]
324 }, 324 },
...@@ -331,22 +331,22 @@ export const constantRoutes = [ ...@@ -331,22 +331,22 @@ export const constantRoutes = [
331 path: '0', 331 path: '0',
332 component: () => import('@/viewsPc/register/personal'), 332 component: () => import('@/viewsPc/register/personal'),
333 name: 'personalRegister', 333 name: 'personalRegister',
334 meta: {title: 'Register'} 334 meta: { title: 'Register' }
335 }, { 335 }, {
336 path: '1', 336 path: '1',
337 component: () => import('@/viewsPc/register/team/team'), 337 component: () => import('@/viewsPc/register/team/team'),
338 name: 'teamRegister', 338 name: 'teamRegister',
339 meta: {title: 'Register'} 339 meta: { title: 'Register' }
340 }, { 340 }, {
341 path: 'userAgreement', 341 path: 'userAgreement',
342 component: () => import('@/viewsPc/register/userAgreement'), 342 component: () => import('@/viewsPc/register/userAgreement'),
343 name: 'userAgreement', 343 name: 'userAgreement',
344 meta: {title: 'Register'} 344 meta: { title: 'Register' }
345 }, { 345 }, {
346 path: 'policy', 346 path: 'policy',
347 component: () => import('@/viewsPc/register/policy'), 347 component: () => import('@/viewsPc/register/policy'),
348 name: 'policy', 348 name: 'policy',
349 meta: {title: 'Register'} 349 meta: { title: 'Register' }
350 } 350 }
351 ] 351 ]
352 }, 352 },
...@@ -359,175 +359,175 @@ export const constantRoutes = [ ...@@ -359,175 +359,175 @@ export const constantRoutes = [
359 path: 'ticket/:activeId', 359 path: 'ticket/:activeId',
360 component: () => import('@/viewsPc/booking/ticket/index.vue'), 360 component: () => import('@/viewsPc/booking/ticket/index.vue'),
361 name: 'ticket', 361 name: 'ticket',
362 meta: {title: 'Ticket Booking'} 362 meta: { title: 'Ticket Booking' }
363 }, 363 },
364 { 364 {
365 path: 'ticket/:activeId/:latId/:attId', 365 path: 'ticket/:activeId/:latId/:attId',
366 component: () => import('@/viewsPc/booking/ticket/confirmOrder.vue'), 366 component: () => import('@/viewsPc/booking/ticket/confirmOrder.vue'),
367 name: 'confirmOrder', 367 name: 'confirmOrder',
368 meta: {title: 'confirmOrder'} 368 meta: { title: 'confirmOrder' }
369 }, 369 },
370 { 370 {
371 path: 'ticket/peopleManage', 371 path: 'ticket/peopleManage',
372 component: () => import('@/viewsPc/booking/ticket/peopleManage.vue'), 372 component: () => import('@/viewsPc/booking/ticket/peopleManage.vue'),
373 name: 'peopleManage', 373 name: 'peopleManage',
374 meta: {title: 'peopleManage'} 374 meta: { title: 'peopleManage' }
375 }, 375 },
376 { 376 {
377 path: 'ticket/addInvoice', 377 path: 'ticket/addInvoice',
378 component: () => import('@/viewsPc/booking/ticket/addInvoice.vue'), 378 component: () => import('@/viewsPc/booking/ticket/addInvoice.vue'),
379 name: 'ticketAddInvoice', 379 name: 'ticketAddInvoice',
380 meta: {title: 'ticketAddInvoice'} 380 meta: { title: 'ticketAddInvoice' }
381 }, 381 },
382 { 382 {
383 path: 'ticket/invoiceDetail', 383 path: 'ticket/invoiceDetail',
384 component: () => import('@/viewsPc/booking/ticket/invoiceDetail.vue'), 384 component: () => import('@/viewsPc/booking/ticket/invoiceDetail.vue'),
385 name: 'ticketInvoiceDetail', 385 name: 'ticketInvoiceDetail',
386 meta: {title: 'ticketInvoiceDetail'} 386 meta: { title: 'ticketInvoiceDetail' }
387 }, 387 },
388 { 388 {
389 path: 'hotel/:cptId', 389 path: 'hotel/:cptId',
390 component: () => import('@/viewsPc/booking/hotel'), 390 component: () => import('@/viewsPc/booking/hotel'),
391 name: 'hotel', 391 name: 'hotel',
392 meta: {title: 'Hotel Reservation'} 392 meta: { title: 'Hotel Reservation' }
393 }, 393 },
394 { 394 {
395 path: 'hotel/:cptId/:hotelId', 395 path: 'hotel/:cptId/:hotelId',
396 component: () => import('@/viewsPc/booking/hotelDetail'), 396 component: () => import('@/viewsPc/booking/hotelDetail'),
397 name: 'hotelDetail', 397 name: 'hotelDetail',
398 meta: {title: 'Hotel Reservation'} 398 meta: { title: 'Hotel Reservation' }
399 },
400 {
401 path: 'travel/:cptId',
402 component: () => import('@/viewsPc/booking/travel'),
403 name: 'travel',
404 meta: {title: 'Hotel Reservation'}
405 },
406 {
407 path: 'travel/:cptId/:hotelId',
408 component: () => import('@/viewsPc/booking/travelDetail'),
409 name: 'travelDetail',
410 meta: {title: 'Hotel Reservation'}
411 }, 399 },
412 { 400 {
413 path: 'car/:cptId/:id', 401 path: 'car/:cptId/:id',
414 component: () => import('@/viewsPc/booking/carOrder'), 402 component: () => import('@/viewsPc/booking/carOrder'),
415 name: 'carOrder', 403 name: 'carOrder',
416 meta: {title: 'Car Reservation'} 404 meta: { title: 'Car Reservation' }
417 }, 405 },
418 { 406 {
419 path: 'hotel/:cptId/:hotelId/:roomId', 407 path: 'hotel/:cptId/:hotelId/:roomId',
420 component: () => import('@/viewsPc/booking/hotelOrder'), 408 component: () => import('@/viewsPc/booking/hotelOrder'),
421 name: 'hotelOrder', 409 name: 'hotelOrder',
422 meta: {title: 'Hotel Reservation'} 410 meta: { title: 'Hotel Reservation' }
423 },
424 {
425 path: 'travel/:cptId/:hotelId/:roomId',
426 component: () => import('@/viewsPc/booking/travelOrder'),
427 name: 'travelOrder',
428 meta: {title: 'Travel Reservation'}
429 }, 411 },
430 { 412 {
431 path: 'car/:cptId', 413 path: 'car/:cptId',
432 component: () => import('@/viewsPc/booking/car'), 414 component: () => import('@/viewsPc/booking/car'),
433 name: 'car', 415 name: 'car',
434 meta: {title: 'Vehicle Reservation'} 416 meta: { title: 'Vehicle Reservation' }
435 }, 417 },
436 { 418 {
437 path: 'dinner/:cptId', 419 path: 'dinner/:cptId',
438 component: () => import('@/viewsPc/booking/dinner'), 420 component: () => import('@/viewsPc/booking/dinner'),
439 name: 'dinner', 421 name: 'dinner',
440 meta: {title: 'Dining Reservation'} 422 meta: { title: 'Dining Reservation' }
441 }, 423 },
442 { 424 {
443 path: 'dinner/:cptId/:id', 425 path: 'dinner/:cptId/:id',
444 component: () => import('@/viewsPc/booking/dinnerDetail'), 426 component: () => import('@/viewsPc/booking/dinnerDetail'),
445 name: 'dinnerDetail', 427 name: 'dinnerDetail',
446 meta: {title: 'Dining Reservation'} 428 meta: { title: 'Dining Reservation' }
447 }, 429 },
448 { 430 {
449 path: 'dinner/:cptId/:id/:foodId', 431 path: 'dinner/:cptId/:id/:foodId',
450 component: () => import('@/viewsPc/booking/foodOrder'), 432 component: () => import('@/viewsPc/booking/foodOrder'),
451 name: 'dinnerOrder', 433 name: 'dinnerOrder',
452 meta: {title: 'Dinner Reservation'} 434 meta: { title: 'Dinner Reservation' }
453 }, 435 },
454 { 436 {
455 path: 'makeUp/:cptId', 437 path: 'makeUp/:cptId',
456 component: () => import('@/viewsPc/booking/makeUp'), 438 component: () => import('@/viewsPc/booking/makeUp'),
457 name: 'makeUp', 439 name: 'makeUp',
458 meta: {title: 'Makeup Appointment'} 440 meta: { title: 'Makeup Appointment' }
459 }, 441 },
460 { 442 {
461 path: 'makeUp/:cptId/:id', 443 path: 'makeUp/:cptId/:id',
462 component: () => import('@/viewsPc/booking/makeUpDetail'), 444 component: () => import('@/viewsPc/booking/makeUpDetail'),
463 name: 'makeUpDetail', 445 name: 'makeUpDetail',
464 meta: {title: 'Makeup Appointment'} 446 meta: { title: 'Makeup Appointment' }
465 }, 447 },
466 { 448 {
467 path: 'makeUp/:cptId/:id/:lasId', 449 path: 'makeUp/:cptId/:id/:lasId',
468 component: () => import('@/viewsPc/booking/makeUpOrder.vue'), 450 component: () => import('@/viewsPc/booking/makeUpOrder.vue'),
469 name: 'makeUpOrder', 451 name: 'makeUpOrder',
470 meta: {title: 'Makeup Reservation'} 452 meta: { title: 'Makeup Reservation' }
471 }, 453 },
472 { 454 {
473 path: 'photography/:cptId', 455 path: 'photography/:cptId',
474 component: () => import('@/viewsPc/booking/photography'), 456 component: () => import('@/viewsPc/booking/photography'),
475 name: 'photography', 457 name: 'photography',
476 meta: {title: 'Photography Appointment'} 458 meta: { title: 'Photography Appointment' }
477 }, 459 },
478 { 460 {
479 path: 'photography/:cptId/:id', 461 path: 'photography/:cptId/:id',
480 component: () => import('@/viewsPc/booking/photographyDetail'), 462 component: () => import('@/viewsPc/booking/photographyDetail'),
481 name: 'photographyDetail', 463 name: 'photographyDetail',
482 meta: {title: 'Photography Reservation'} 464 meta: { title: 'Photography Reservation' }
483 }, 465 },
484 { 466 {
485 path: 'photography/:cptId/:id/:lasId', 467 path: 'photography/:cptId/:id/:lasId',
486 component: () => import('@/viewsPc/booking/photographyOrder.vue'), 468 component: () => import('@/viewsPc/booking/photographyOrder.vue'),
487 name: 'photographyOrder', 469 name: 'photographyOrder',
488 meta: {title: 'Photography Appointment'} 470 meta: { title: 'Photography Appointment' }
489 }, 471 },
490 { 472 {
491 path: 'pay', 473 path: 'pay',
492 component: () => import('@/viewsPc/booking/pay'), 474 component: () => import('@/viewsPc/booking/pay'),
493 name: 'bookingPay', 475 name: 'bookingPay',
494 meta: {title: 'pay'} 476 meta: { title: 'pay' }
495 }, 477 },
496 { 478 {
497 path: 'payticket', 479 path: 'payticket',
498 component: () => import('@/viewsPc/booking/payticket'), 480 component: () => import('@/viewsPc/booking/payticket'),
499 name: 'payticket', 481 name: 'payticket',
500 meta: {title: '票务'} 482 meta: { title: '票务' }
501 }, 483 },
502 { 484 {
503 path: 'payOk', 485 path: 'payOk',
504 component: () => import('@/viewsPc/booking/payOk'), 486 component: () => import('@/viewsPc/booking/payOk'),
505 name: 'bookingPayOk', 487 name: 'bookingPayOk',
506 meta: {title: 'payOk'} 488 meta: { title: 'payOk' }
507 }, 489 },
508 { 490 {
509 path: 'payticketOk', 491 path: 'payticketOk',
510 component: () => import('@/viewsPc/booking/payticketOk'), 492 component: () => import('@/viewsPc/booking/payticketOk'),
511 name: 'payticketOk', 493 name: 'payticketOk',
512 meta: {title: '票务-paypal'} 494 meta: { title: '票务-paypal' }
513 }, 495 },
514 { 496 {
515 path: 'invoice', 497 path: 'invoice',
516 component: () => import('@/viewsPc/booking/invoicing'), 498 component: () => import('@/viewsPc/booking/invoicing'),
517 name: 'invoice', 499 name: 'invoice',
518 meta: {title: '我的发票'} 500 meta: { title: '我的发票' }
519 }, 501 },
520 { 502 {
521 path: 'invoiceDetail', 503 path: 'invoiceDetail',
522 component: () => import('@/viewsPc/booking/invoiceDetail'), 504 component: () => import('@/viewsPc/booking/invoiceDetail'),
523 name: 'invoiceDetail', 505 name: 'invoiceDetail',
524 meta: {title: '发票详情'} 506 meta: { title: '发票详情' }
525 }, 507 },
526 { 508 {
527 path: 'addInvoice', 509 path: 'addInvoice',
528 component: () => import('@/viewsPc/booking/addInvoice'), 510 component: () => import('@/viewsPc/booking/addInvoice'),
529 name: 'addInvoice', 511 name: 'addInvoice',
530 meta: {title: '开发票'} 512 meta: { title: '开发票' }
513 },
514 {
515 path: 'travel/:cptId',
516 component: () => import('@/viewsPc/booking/travel'),
517 name: 'travel',
518 meta: { title: 'Hotel Reservation' }
519 },
520 {
521 path: 'travel/:cptId/:scenicId',
522 component: () => import('@/viewsPc/booking/travelDetail'),
523 name: 'travelDetail',
524 meta: { title: 'Hotel Reservation' }
525 },
526 {
527 path: 'travel/:cptId/:scenicId/:start',
528 component: () => import('@/viewsPc/booking/travelOrder'),
529 name: 'travelOrder',
530 meta: { title: 'Travel Reservation' }
531 } 531 }
532 ] 532 ]
533 }, 533 },
...@@ -539,49 +539,49 @@ export const constantRoutes = [ ...@@ -539,49 +539,49 @@ export const constantRoutes = [
539 path: 'myInfo', 539 path: 'myInfo',
540 component: () => import('@/viewsPc/center/myInfo'), 540 component: () => import('@/viewsPc/center/myInfo'),
541 name: 'myInfo', 541 name: 'myInfo',
542 meta: {title: '个人中心'} 542 meta: { title: '个人中心' }
543 }, 543 },
544 { 544 {
545 path: 'myPassword', 545 path: 'myPassword',
546 component: () => import('@/viewsPc/center/myPassword'), 546 component: () => import('@/viewsPc/center/myPassword'),
547 name: 'myPassword', 547 name: 'myPassword',
548 meta: {title: '修改密码'} 548 meta: { title: '修改密码' }
549 }, 549 },
550 { 550 {
551 path: 'myCertification', 551 path: 'myCertification',
552 component: () => import('@/viewsPc/center/myCertification'), 552 component: () => import('@/viewsPc/center/myCertification'),
553 name: 'myCertification', 553 name: 'myCertification',
554 meta: {title: 'institutional accreditation'} 554 meta: { title: 'institutional accreditation' }
555 }, 555 },
556 { 556 {
557 path: 'myMember', 557 path: 'myMember',
558 component: () => import('@/viewsPc/center/myMember'), 558 component: () => import('@/viewsPc/center/myMember'),
559 name: 'myMember', 559 name: 'myMember',
560 meta: {title: 'Player Management'} 560 meta: { title: 'Player Management' }
561 }, 561 },
562 { 562 {
563 path: 'myMatch', 563 path: 'myMatch',
564 component: () => import('@/viewsPc/center/myMatch'), 564 component: () => import('@/viewsPc/center/myMatch'),
565 name: 'myMatch', 565 name: 'myMatch',
566 meta: {title: 'My registration'} 566 meta: { title: 'My registration' }
567 }, 567 },
568 { 568 {
569 path: 'myReservation', 569 path: 'myReservation',
570 component: () => import('@/viewsPc/center/myReservation'), 570 component: () => import('@/viewsPc/center/myReservation'),
571 name: 'myReservation', 571 name: 'myReservation',
572 meta: {title: 'My reservation'} 572 meta: { title: 'My reservation' }
573 }, 573 },
574 { 574 {
575 path: 'mySms', 575 path: 'mySms',
576 component: () => import('@/viewsPc/center/mySms'), 576 component: () => import('@/viewsPc/center/mySms'),
577 name: 'mySms', 577 name: 'mySms',
578 meta: {title: 'System messages'} 578 meta: { title: 'System messages' }
579 }, 579 },
580 { 580 {
581 path: 'myKP', 581 path: 'myKP',
582 component: () => import('@/viewsPc/center/myCanKP'), 582 component: () => import('@/viewsPc/center/myCanKP'),
583 name: 'myKP', 583 name: 'myKP',
584 meta: {title: '发票管理'} 584 meta: { title: '发票管理' }
585 } 585 }
586 ] 586 ]
587 }, 587 },
...@@ -595,71 +595,71 @@ export const constantRoutes = [ ...@@ -595,71 +595,71 @@ export const constantRoutes = [
595 path: 'detail', 595 path: 'detail',
596 name: 'seat_detail', 596 name: 'seat_detail',
597 component: () => import('@/viewsPc/seat/ticket-detail'), 597 component: () => import('@/viewsPc/seat/ticket-detail'),
598 meta: {title: '购票详情'}, 598 meta: { title: '购票详情' },
599 props: route => ({ 599 props: route => ({
600 activityId: route.query.id, 600 activityId: route.query.id
601 }) 601 })
602 }, 602 },
603 { 603 {
604 path: 'seat_picker', 604 path: 'seat_picker',
605 name: 'seat_picker', 605 name: 'seat_picker',
606 component: () => import('@/viewsPc/seat/seat-picker'), 606 component: () => import('@/viewsPc/seat/seat-picker'),
607 meta: {title: '选座'}, 607 meta: { title: '选座' },
608 props: route => ({ 608 props: route => ({
609 activityId: route.query.id, 609 activityId: route.query.id
610 }) 610 })
611 }, 611 },
612 { 612 {
613 path: 'order', 613 path: 'order',
614 name: 'seat_order', 614 name: 'seat_order',
615 component: () => import('@/viewsPc/seat/order-list'), 615 component: () => import('@/viewsPc/seat/order-list'),
616 meta: {title: '我的订单'}, 616 meta: { title: '我的订单' },
617 props: route => ({ 617 props: route => ({
618 activityId: route.query.id, 618 activityId: route.query.id
619 }) 619 })
620 }, 620 },
621 { 621 {
622 path: 'order_detail', 622 path: 'order_detail',
623 name: 'order_detail', 623 name: 'order_detail',
624 component: () => import('@/viewsPc/seat/order-detail'), 624 component: () => import('@/viewsPc/seat/order-detail'),
625 meta: {title: '订单详情'}, 625 meta: { title: '订单详情' },
626 props: route => ({ 626 props: route => ({
627 activityId: route.query.id, 627 activityId: route.query.id
628 }) 628 })
629 }, 629 },
630 { 630 {
631 path: 'confirm_order', 631 path: 'confirm_order',
632 name: 'confirm_order', 632 name: 'confirm_order',
633 component: () => import('@/viewsPc/seat/confirm-order'), 633 component: () => import('@/viewsPc/seat/confirm-order'),
634 meta: {title: '确认订单'}, 634 meta: { title: '确认订单' },
635 props: route => ({ 635 props: route => ({
636 activityId: route.query.id, 636 activityId: route.query.id
637 }) 637 })
638 }, 638 },
639 { 639 {
640 path: 'add_watch_people', 640 path: 'add_watch_people',
641 name: 'add_watch_people', 641 name: 'add_watch_people',
642 component: () => import('@/viewsPc/seat/add-watch-people'), 642 component: () => import('@/viewsPc/seat/add-watch-people'),
643 meta: {title: '新增观影人'} 643 meta: { title: '新增观影人' }
644 }, 644 },
645 { 645 {
646 path: 'people_manage', 646 path: 'people_manage',
647 name: 'people_manage', 647 name: 'people_manage',
648 component: () => import('@/viewsPc/seat/people-manage'), 648 component: () => import('@/viewsPc/seat/people-manage'),
649 meta: {title: '观影人管理'} 649 meta: { title: '观影人管理' }
650 }, 650 },
651 { 651 {
652 path: 'payTicketOk', 652 path: 'payTicketOk',
653 component: () => import('@/viewsPc/seat/payticketOk.vue'), 653 component: () => import('@/viewsPc/seat/payticketOk.vue'),
654 name: 'payTicketOk', 654 name: 'payTicketOk',
655 meta: {title: '支付成功'} 655 meta: { title: '支付成功' }
656 }, 656 },
657 { 657 {
658 path: 'payTicketLoser', 658 path: 'payTicketLoser',
659 component: () => import('@/viewsPc/seat/payticketLoser.vue'), 659 component: () => import('@/viewsPc/seat/payticketLoser.vue'),
660 name: 'payTicketLoser', 660 name: 'payTicketLoser',
661 meta: {title: '支付失败'} 661 meta: { title: '支付失败' }
662 }, 662 }
663 ] 663 ]
664 } 664 }
665 ] 665 ]
...@@ -677,59 +677,59 @@ export const constantRoutes = [ ...@@ -677,59 +677,59 @@ export const constantRoutes = [
677 path: 'payOk', 677 path: 'payOk',
678 component: () => import('@/viewsPc/match/payOk'), 678 component: () => import('@/viewsPc/match/payOk'),
679 name: 'payOk', 679 name: 'payOk',
680 meta: {title: '支付成功'} 680 meta: { title: '支付成功' }
681 }, 681 },
682 682
683 { 683 {
684 path: 'commitDone/:orderId', 684 path: 'commitDone/:orderId',
685 component: () => import('@/viewsPc/match/commitDone'), 685 component: () => import('@/viewsPc/match/commitDone'),
686 name: 'commitDone', 686 name: 'commitDone',
687 meta: {title: '提交审核'} 687 meta: { title: '提交审核' }
688 }, 688 },
689 { 689 {
690 path: 'pay', 690 path: 'pay',
691 component: () => import('@/viewsPc/match/pay'), 691 component: () => import('@/viewsPc/match/pay'),
692 name: 'signPay', 692 name: 'signPay',
693 meta: {title: '缴费清单'} 693 meta: { title: '缴费清单' }
694 }, 694 },
695 { 695 {
696 path: 'list/:id/teamSign', 696 path: 'list/:id/teamSign',
697 component: () => import('@/viewsPc/match/teamSign'), 697 component: () => import('@/viewsPc/match/teamSign'),
698 name: 'teamSign', 698 name: 'teamSign',
699 meta: {title: '团队报名'} 699 meta: { title: '团队报名' }
700 }, 700 },
701 { 701 {
702 path: 'list/:id/teamSignCn', 702 path: 'list/:id/teamSignCn',
703 component: () => import('@/viewsPc/match/teamSign_Cn'), 703 component: () => import('@/viewsPc/match/teamSign_Cn'),
704 name: 'teamSignCn', 704 name: 'teamSignCn',
705 meta: {title: '团队报名-国内赛'} 705 meta: { title: '团队报名-国内赛' }
706 }, 706 },
707 { 707 {
708 path: 'list/:id/chooseCoach', 708 path: 'list/:id/chooseCoach',
709 component: () => import('@/viewsPc/match/chooseCoach'), 709 component: () => import('@/viewsPc/match/chooseCoach'),
710 name: 'chooseCoach', 710 name: 'chooseCoach',
711 meta: {title: '选择教练/领队/其他'} 711 meta: { title: '选择教练/领队/其他' }
712 }, 712 },
713 { 713 {
714 path: 'list/:id/chooseSportsman', 714 path: 'list/:id/chooseSportsman',
715 component: () => import('@/viewsPc/match/chooseSportsman'), 715 component: () => import('@/viewsPc/match/chooseSportsman'),
716 name: 'chooseSportsman', 716 name: 'chooseSportsman',
717 meta: {title: '选择运动员'} 717 meta: { title: '选择运动员' }
718 }, 718 },
719 { 719 {
720 path: 'list/:id/chooseProject', 720 path: 'list/:id/chooseProject',
721 component: () => import('@/viewsPc/match/chooseProject'), 721 component: () => import('@/viewsPc/match/chooseProject'),
722 name: 'chooseProject', 722 name: 'chooseProject',
723 meta: {title: '选择参赛项目'} 723 meta: { title: '选择参赛项目' }
724 }, 724 },
725 { 725 {
726 path: 'list/:id/signPreview', 726 path: 'list/:id/signPreview',
727 component: () => import('@/viewsPc/match/signPreview'), 727 component: () => import('@/viewsPc/match/signPreview'),
728 name: 'signPreview', 728 name: 'signPreview',
729 meta: {title: '提交审核'} 729 meta: { title: '提交审核' }
730 } 730 }
731 ] 731 ]
732 }, 732 }
733 ] 733 ]
734 } 734 }
735 ] 735 ]
...@@ -742,11 +742,11 @@ const router = createRouter({ ...@@ -742,11 +742,11 @@ const router = createRouter({
742 if (savedPosition) { 742 if (savedPosition) {
743 return savedPosition 743 return savedPosition
744 } else { 744 } else {
745 return {top: 0} 745 return { top: 0 }
746 } 746 }
747 } 747 }
748 }) 748 })
749 NProgress.configure({showSpinner: false}) 749 NProgress.configure({ showSpinner: false })
750 750
751 router.beforeEach((to, from, next) => { 751 router.beforeEach((to, from, next) => {
752 NProgress.start() 752 NProgress.start()
...@@ -760,7 +760,7 @@ router.beforeEach((to, from, next) => { ...@@ -760,7 +760,7 @@ router.beforeEach((to, from, next) => {
760 }).catch(err => { 760 }).catch(err => {
761 useUserStore().logOut().then(() => { 761 useUserStore().logOut().then(() => {
762 ElMessage.error(err) 762 ElMessage.error(err)
763 next({path: '/'}) 763 next({ path: '/' })
764 }) 764 })
765 }) 765 })
766 } else { 766 } else {
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <h2>{{ language==0?'旅游服务':'Travel Service' }}</h2> 4 <h2>{{ language==0?'旅游服务':'Travel Service' }}</h2>
5 </div> 5 </div>
6 <div class="box"> 6 <div class="box">
7 <div class="searchBar"> 7 <div class="searchBar">
8 <el-input :placeholder="language==0?'请输入关键字搜索':'Search'" v-model="query.name" class="no-border"> 8 <el-input v-model="query.name" :placeholder="language==0?'请输入关键字搜索':'Search'" class="no-border" />
9 </el-input> 9 <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList">
10 <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList"> 10 {{ language==0?'搜索':'Search' }}</el-button>
11 {{ language==0?'搜索':'Search' }}</el-button> 11 </div>
12 </div> 12 </div>
13 </div>
14 13
15 <div class="box" v-loading="loading"> 14 <div v-loading="loading" class="box">
16 <el-row :gutter="20"> 15 <el-row :gutter="20">
17 <el-col :lg="24" :md="24" :sm="24" :xs="24" :xl="24" v-for="(h,index) in list" class="mb20"> 16 <el-col
18 <el-card @click="goDetail(h)"> 17 v-for="(h,index) in list" :lg="24" :md="24" :sm="24" :xs="24"
19 <!-- 酒店列表--> 18 :xl="24" class="mb20"
20 <el-row class="hotel" align="middle" :gutter="20"> 19 >
21 <el-col :span="6"> 20 <el-card>
22 <div class="imgbox"> 21 <!-- 酒店列表-->
23 <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/> 22 <el-row class="hotel" align="middle" :gutter="20">
24 </div> 23 <el-col :span="6">
25 </el-col> 24 <div class="imgbox">
26 <el-col :span="12"> 25 <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])">
27 <h3 class="esp">{{h.name}}</h3> 26 </div>
28 <div class="starBox"> 27 </el-col>
29 <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png"> 28 <el-col :span="12">
30 </div> 29 <h3 class="esp">{{ h.name }}</h3>
31 <div class="tagbox esp"> 30 <div class="starBox">
32 <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> 31 <img v-for="i in Number(h.rank||0)" src="@/assets/booking/star.png">
33 <a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a> 32 </div>
34 </div> 33
35 <p class="esp addr mt20"> 34 <p class="esp addr mt20">
36 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> 35 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0">
37 {{h.address}} 36 <Clock />
38 </p> 37 </el-icon>
39 </el-col> 38 <span class="ml5">{{ language == 0 ? '开园时间' : 'Opening Time' }}{{ h.startTime }}{{ h.workTime }}</span>
40 <el-col :span="4" class="text-right"> 39 </p>
41 <div class="price">{{ language==0?'¥':'€' }}<span>{{ h.price }}</span> 40 <p class="esp addr mt20">
42 <i v-if="language==0"></i> 41 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>
43 </div> 42 {{ h.address }}
44 <el-button class="btn-lineG w200px" round type="primary" >{{ language==0?'立即预订':'Select' }}</el-button> 43 </p>
45 </el-col> 44 </el-col>
46 </el-row> 45 <el-col :span="4" class="text-right">
47 </el-card> 46 <div class="price">{{ language==0?'¥':'€' }}<span>{{ h.price }}</span>
48 </el-col> 47 <i v-if="language==0"></i>
49 </el-row> 48 </div>
50 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> 49 <el-button class="btn-lineG w200px" round type="primary" @click="goDetail(h)">{{ language==0?'立即预订':'Select' }}</el-button>
51 <div style="height: 50px"></div> 50 </el-col>
51 </el-row>
52 </el-card>
53 </el-col>
54 </el-row>
55 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" />
56 <div style="height: 50px" />
57 </div>
52 </div> 58 </div>
53 </div>
54 </template> 59 </template>
55 60
56 <script setup> 61 <script setup>
57 import {onMounted} from "@vue/runtime-core" 62 import { onMounted } from '@vue/runtime-core'
58 import * as booking from "@/apiPc/booking" 63 import * as booking from '@/apiPc/booking'
59 import {useRouter,useRoute} from "vue-router"; 64 import { useRouter, useRoute } from 'vue-router'
60 import {useStorage} from "@vueuse/core/index"; 65 import { useStorage } from '@vueuse/core/index'
61 import useUserStore from "@/store/modules/user"; 66 import useUserStore from '@/store/modules/user'
62 const router = useRouter()
63 const route = useRoute()
64 const user = useUserStore().user
65 const useStore = useUserStore
66 const language= useStorage('language',0)
67 const query = ref({
68 name:''
69 })
70 const cptId = ref('')
71 const list = ref([])
72 const loading = ref(false)
73 onMounted(()=>{
74 query.value.activityId = route.params.cptId
75 getList()
76 })
77 67
78 function getList() { 68 const router = useRouter()
79 loading.value = true 69 const route = useRoute()
80 booking.getHotelList(query.value).then(res=>{ 70 const user = useUserStore().user
81 list.value = res.rows 71 const useStore = useUserStore
82 loading.value = false 72 const language = useStorage('language', 0)
83 console.log(list.value) 73 const query = ref({
74 name: ''
75 })
76 const cptId = ref('')
77 const list = ref([])
78 const loading = ref(false)
79 onMounted(() => {
80 query.value.activityId = route.params.cptId
81 getList()
82 })
84 83
85 }).catch(e=>{ 84 function getList() {
86 loading.value = false 85 loading.value = true
87 }) 86 booking.getScenicList(query.value).then(res => {
87 list.value = res.rows
88 loading.value = false
89 console.log(list.value)
90 }).catch(e => {
91 loading.value = false
92 })
93 }
94 function goDetail(item) {
95 if (!user) {
96 useStore().setVisitor()
97 return
88 } 98 }
89 function goDetail(item) { 99 router.push({
90 if(!user){ 100 name: 'travelDetail',
91 useStore().setVisitor() 101 params: {
92 return 102 scenicId: item.scenicId
103 },
104 query: {
105 lasId: item.id
93 } 106 }
94 router.push({ 107 })
95 name:'travelDetail', 108 }
96 params:{
97 hotelId:item.hotelId,
98 },
99 query:{
100 id:item.id
101 }
102
103 })
104 }
105 </script> 109 </script>
106 110
107 <style scoped lang="scss"> 111 <style scoped lang="scss">
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="box"> 3 <div class="box">
4 <el-card class="mt30" v-loading="loading"> 4 <el-card v-loading="loading" class="mt30">
5 <el-row v-if="form" class="hotel" align="middle" :gutter="20"> 5 <el-row v-if="form" class="hotel" align="middle" :gutter="20">
6 <!-- <el-col :span="6">--> 6 <!-- <el-col :span="6">-->
7 <!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>--> 7 <!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>-->
...@@ -9,57 +9,56 @@ ...@@ -9,57 +9,56 @@
9 <el-col :span="language == 0?16:24"> 9 <el-col :span="language == 0?16:24">
10 <h3 class="esp flex">{{ form?.name }} 10 <h3 class="esp flex">{{ form?.name }}
11 11
12 <el-tag class="ml10">5A</el-tag> 12 <div class="starBox ml20">
13 <img v-for="i in Number(form?.rank||0)" src="@/assets/booking/star.png">
14 </div>
13 </h3> 15 </h3>
14 16
15 <div class="tagbox"> 17 <!-- <div class="tagbox">-->
16 <span v-for="(t,index) in form?.label?.split(',')" v-show="index<4">{{ t }}</span> 18 <!-- <span v-for="(t,index) in form?.label?.split(',')" v-show="index<4">{{ t }}</span>-->
17 <a v-show="form?.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a> 19 <!-- <a v-show="form?.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a>-->
18 </div> 20 <!-- </div>-->
19 <div class="info"> 21 <div class="info">
20 <el-icon> 22 <el-icon>
21 <Clock/> 23 <Clock />
22 </el-icon> 24 </el-icon>
23 <span class="mr10">{{ language == 0 ? '开园时间' : 'Opening Time' }}{{ form?.checkInTime }}{{ form?.checkOutTime }}</span> 25 <span class="mr10">{{ language == 0 ? '开园时间' : 'Opening Time' }}{{ form?.startTime }}{{ form?.workTime }}</span>
24 </div> 26 </div>
25 <div class="info"> 27 <div class="info">
26 <el-icon> 28 <el-icon>
27 <Phone/> 29 <Phone />
28 </el-icon> 30 </el-icon>
29 <span class="mr10">{{ language == 0 ? '联系方式' : 'Contact' }}0510-12345678</span> 31 <span class="mr10">{{ language == 0 ? '联系方式' : 'Contact' }}{{ form?.contact }}</span>
30 </div> 32 </div>
31 <div class="info esp"> 33 <div class="info esp">
32 <el-icon> 34 <el-icon>
33 <MapLocation/> 35 <MapLocation />
34 </el-icon> 36 </el-icon>
35 <span>{{ form?.addName }}</span> 37 <span>{{ form?.address }}</span>
36 </div> 38 </div>
37 <div v-if="form?.introduction" class="info pointer"> 39 <div v-if="form?.introduction" class="info pointer">
38 <div :class="showAll?'':'esp_2'" @click="showAll=!showAll" v-html="form.introduction.toString()"></div> 40 <div :class="showAll?'':'esp_2'" @click="showAll=!showAll" v-html="form.introduction.toString()" />
39 </div>
40 </el-col>
41 <el-col :span="8" class="text-right" v-if="language == 0">
42 <div class="mapBox" @click="goMap">
43 <div id="map"></div>
44 </div> 41 </div>
45 </el-col> 42 </el-col>
46 </el-row> 43 </el-row>
47 <el-empty v-else :image="`/img/order_no.png`" :image-size="228" description=""/> 44 <el-empty v-else :image="`/img/order_no.png`" :image-size="228" description="" />
48 </el-card> 45 </el-card>
49 46
50 <div class="mt30"> 47 <div class="mt30">
51 <el-row :gutter="20"> 48 <el-row :gutter="20">
52 <el-col :span="10"> 49 <el-col :span="10">
53 <div class="imgbox hotelImg"> 50 <div class="imgbox hotelImg">
54 <el-image :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover" 51 <el-image
55 :preview-src-list="form?.photos?.split(',')"/> 52 :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover"
53 :preview-src-list="form?.photos?.split(',')"
54 />
56 </div> 55 </div>
57 </el-col> 56 </el-col>
58 <el-col :span="14"> 57 <el-col :span="14">
59 <el-row class="h100" :gutter="20"> 58 <el-row class="h100" :gutter="20">
60 <el-col :span="8" class="oddmb" v-for="(p,index) in form?.photos?.split(',').slice(1,7)"> 59 <el-col v-for="(p,index) in form?.photos?.split(',').slice(1,7)" :key="index" :span="8" class="oddmb">
61 <div class="imgbox hotelImg"> 60 <div class="imgbox hotelImg">
62 <el-image :src="fillImgUrl(p)" fit="cover"/> 61 <el-image :src="fillImgUrl(p)" fit="cover" />
63 </div> 62 </div>
64 </el-col> 63 </el-col>
65 </el-row> 64 </el-row>
...@@ -76,14 +75,13 @@ ...@@ -76,14 +75,13 @@
76 </ul> 75 </ul>
77 </div> 76 </div>
78 <div> 77 <div>
79 <!-- 日期--> 78 <!-- 日期-->
80 <el-calendar class="mt20" v-model="currentDate" :range="calendarRange"> 79 <el-calendar v-model="currentDate" class="mt20" :range="calendarRange">
81 <template #header="{date}"> 80 <template #header="{date}">
82 <el-row style="width: 100%"> 81 <el-row style="width: 100%">
83 <el-col :lg="7" class="forPc"> 82 <el-col :lg="7" class="forPc" />
84 </el-col>
85 <el-col :lg="10" class="forPc"> 83 <el-col :lg="10" class="forPc">
86 <el-row justify="center" align='middle'> 84 <el-row justify="center" align="middle">
87 <!-- <div class="canBtn"><el-icon><ArrowLeftBold /></el-icon></div>--> 85 <!-- <div class="canBtn"><el-icon><ArrowLeftBold /></el-icon></div>-->
88 <div class="cTitle"> 86 <div class="cTitle">
89 <!-- <el-date-picker--> 87 <!-- <el-date-picker-->
...@@ -98,7 +96,7 @@ ...@@ -98,7 +96,7 @@
98 <!-- @change="changee"--> 96 <!-- @change="changee"-->
99 <!-- />--> 97 <!-- />-->
100 <!-- <el-input readonly :value="date" type="text" size="small" style="width: 280px"></el-input>--> 98 <!-- <el-input readonly :value="date" type="text" size="small" style="width: 280px"></el-input>-->
101 {{date}} 99 {{ date }}
102 </div> 100 </div>
103 <!-- <div class="canBtn"><el-icon><ArrowRightBold /></el-icon></div>--> 101 <!-- <div class="canBtn"><el-icon><ArrowRightBold /></el-icon></div>-->
104 </el-row> 102 </el-row>
...@@ -106,20 +104,20 @@ ...@@ -106,20 +104,20 @@
106 <el-col :lg="7" :xs="24"> 104 <el-col :lg="7" :xs="24">
107 <div style="text-align: right;padding-right: 10px"> 105 <div style="text-align: right;padding-right: 10px">
108 <el-date-picker 106 <el-date-picker
109 v-model="currentDate1" 107 v-model="currentDate1"
110 type="date" 108 type="date"
111 placeholder="YYYY-MM-DD" 109 placeholder="YYYY-MM-DD"
112 format="YYYY-MM-DD" 110 format="YYYY-MM-DD"
113 @change="dateChange" 111 :disabled-date="disabledDateRZ"
114 :disabled-date="disabledDateRZ" 112 :clearable="false"
115 :clearable='false' 113 @change="dateChange"
116 /> 114 />
117 </div> 115 </div>
118 </el-col> 116 </el-col>
119 </el-row> 117 </el-row>
120 </template> 118 </template>
121 <template #date-cell="data"> 119 <template #date-cell="data">
122 <div :class="data.data.day==query.currentDate?'primaryDate date':'date'" @click="selectDate(data.data.day)"> 120 <div :class="data.data.day==query.currentDate?'primaryDate date':'date'" @click="selectDate(data.data.day)">
123 {{ data.data.day.slice(8, 10) }} 121 {{ data.data.day.slice(8, 10) }}
124 </div> 122 </div>
125 </template> 123 </template>
...@@ -127,8 +125,10 @@ ...@@ -127,8 +125,10 @@
127 </div> 125 </div>
128 126
129 <div class="text-center mt30"> 127 <div class="text-center mt30">
130 <el-button style="color: #fff" :disabled="!hotTime" size="large" 128 <el-button
131 class="w200px btn-lineG" :class="{'forbid':!(!hotTime[0])}" round @click="goOrder"> 129 style="color: #fff" :disabled="btnDisable" size="large"
130 class="w200px btn-lineG" :class="{'forbid':!(!hotTime[0])}" round @click="goOrder"
131 >
132 {{ language==0?'立即预订':'BOOK NOW' }} 132 {{ language==0?'立即预订':'BOOK NOW' }}
133 </el-button> 133 </el-button>
134 </div> 134 </div>
...@@ -138,21 +138,21 @@ ...@@ -138,21 +138,21 @@
138 </template> 138 </template>
139 139
140 <script setup> 140 <script setup>
141 import {useRouter} from "vue-router"; 141 import { useRouter } from 'vue-router'
142 import {ref, reactive, onMounted, getCurrentInstance} from "vue"; 142 import { ref, reactive, onMounted, getCurrentInstance, computed } from 'vue'
143 import {useRoute} from "vue-router"; 143 import { useRoute } from 'vue-router'
144 import {dayjs} from 'element-plus' 144 import { dayjs } from 'element-plus'
145 import {getHotelById, getHotelRooms, checkRoomPayByUserId} from "@/apiPc/booking" 145 import { getHotelById, getHotelRooms, checkRoomPayByUserId, getScenicById, checkOrderPay } from '@/apiPc/booking'
146 import {getBaseInfoByActiveId} from "@/apiPc/booking"; 146 import { getBaseInfoByActiveId } from '@/apiPc/booking'
147 147
148 const {proxy} = getCurrentInstance() 148 const { proxy } = getCurrentInstance()
149 149
150 import {useStorage} from "@vueuse/core/index"; 150 import { useStorage } from '@vueuse/core/index'
151 import useUserStore from "@/store/modules/user"; 151 import useUserStore from '@/store/modules/user'
152 import {ElMessageBox} from "element-plus"; 152 import { ElMessageBox } from 'element-plus'
153 const currentDate = ref(new Date()) 153 const currentDate = ref(new Date())
154 const currentDate1 = ref(new Date()) 154 const currentDate1 = ref(new Date())
155 const calendarRange = ref([dayjs(currentDate.value).toDate(),(dayjs(currentDate.value).toDate())]) 155 const calendarRange = ref([dayjs(currentDate.value).toDate(), (dayjs(currentDate.value).toDate())])
156 156
157 const user = useUserStore().user 157 const user = useUserStore().user
158 const useStore = useUserStore 158 const useStore = useUserStore
...@@ -161,7 +161,7 @@ const router = useRouter() ...@@ -161,7 +161,7 @@ const router = useRouter()
161 const route = useRoute() 161 const route = useRoute()
162 const form = ref({}) 162 const form = ref({})
163 const query = ref({ 163 const query = ref({
164 hotelId: route.query.id 164 lasId: route.query.lasId
165 }) 165 })
166 const hotTime = ref([]) 166 const hotTime = ref([])
167 const showAll = ref(false) 167 const showAll = ref(false)
...@@ -170,7 +170,7 @@ const roomList = ref([]) ...@@ -170,7 +170,7 @@ const roomList = ref([])
170 const map = ref(null) 170 const map = ref(null)
171 const formTime = ref({}) 171 const formTime = ref({})
172 172
173 let baseHotTime; 173 let baseHotTime
174 174
175 onMounted(() => { 175 onMounted(() => {
176 console.log(route.params) 176 console.log(route.params)
...@@ -185,7 +185,6 @@ onMounted(() => { ...@@ -185,7 +185,6 @@ onMounted(() => {
185 185
186 getData() 186 getData()
187 }) 187 })
188
189 }) 188 })
190 189
191 function initTime() { 190 function initTime() {
...@@ -197,13 +196,9 @@ function initTime() { ...@@ -197,13 +196,9 @@ function initTime() {
197 196
198 function getDateTime() { 197 function getDateTime() {
199 if (formTime.value) { 198 if (formTime.value) {
200 if (dayjs().isBefore(dayjs(formTime.value.hqStart))) { 199 if (dayjs().isBefore(dayjs(formTime.value.scenicStart))) {
201 // hotTime.value[0]=dayjs(formTime.value.hqStart).format('YYYY-MM-DD') 200 baseHotTime = [dayjs(formTime.value.scenicStart).format('YYYY-MM-DD'), dayjs(formTime.value.scenicStart).add(1, 'day').format('YYYY-MM-DD')]
202 // hotTime.value[1]=dayjs(formTime.value.hqStart).add(1,'day').format('YYYY-MM-DD')
203 baseHotTime = [dayjs(formTime.value.hqStart).format('YYYY-MM-DD'), dayjs(formTime.value.hqStart).add(1, 'day').format('YYYY-MM-DD')]
204 } else { 201 } else {
205 // hotTime.value[0]=dayjs().format('YYYY-MM-DD')
206 // hotTime.value[1]=dayjs().add(1,'day').format('YYYY-MM-DD')
207 baseHotTime = [dayjs().format('YYYY-MM-DD'), dayjs().add(1, 'day').format('YYYY-MM-DD')] 202 baseHotTime = [dayjs().format('YYYY-MM-DD'), dayjs().add(1, 'day').format('YYYY-MM-DD')]
208 } 203 }
209 } 204 }
...@@ -211,92 +206,107 @@ function getDateTime() { ...@@ -211,92 +206,107 @@ function getDateTime() {
211 206
212 function getData() { 207 function getData() {
213 loading.value = true 208 loading.value = true
214 getHotelById(route.params.hotelId).then(res => { 209 getScenicById(route.params.scenicId).then(res => {
215 loading.value = false 210 loading.value = false
216 form.value = res.data 211 form.value = res.data
217 initMap() 212 // initMap()
218 }).catch(err => { 213 }).catch(err => {
219 console.log(err) 214 console.log(err)
220 }) 215 })
221 } 216 }
222 function dateChange(){ 217 function dateChange() {
223 currentDate.value=currentDate1.value 218 currentDate.value = currentDate1.value
224 calendarRange.value=[dayjs(currentDate.value).toDate(),(dayjs(currentDate.value).toDate())] 219 calendarRange.value = [dayjs(currentDate.value).toDate(), (dayjs(currentDate.value).toDate())]
225 } 220 }
226 221
227 function selectDate(date) { 222 function selectDate(date) {
228 currentDate1.value= currentDate.value=dayjs(date).toDate() 223 currentDate1.value = currentDate.value = dayjs(date).toDate()
229 console.log(date) 224 console.log(date)
230 } 225 }
226
227 const btnDisable = computed(() => {
228 if (formTime.value.scenicStart) {
229 const curr = currentDate.value.valueOf()
230 const today = dayjs(dayjs().format('YYYY-MM-DD')).valueOf()
231 const start = dayjs(formTime.value.scenicStart).valueOf()
232 const end = dayjs(formTime.value.scenicEnd).valueOf()
233 if (curr >= start && curr <= end && curr >= today) {
234 return false
235 }
236 }
237 return true
238 })
239
240
231 function initMap() { 241 function initMap() {
232 // const TMap = (window as any).TMap 242 // const TMap = (window as any).TMap
233 var center = new TMap.LatLng(form.value.latitude, form.value.longitude);//设置中心点坐标' 243 var center = new TMap.LatLng(form.value.latitude, form.value.longitude)// 设置中心点坐标'
234 var map = new TMap.Map("map", { 244 var map = new TMap.Map('map', {
235 center: center,//设置地图中心点坐标 245 center: center, // 设置地图中心点坐标
236 zoom: 17, //设置地图缩放级别 246 zoom: 17 // 设置地图缩放级别
237 }); 247 })
238 var infoWindowLocation = new TMap.LatLng(form.value.latitude, form.value.longitude);//创建一个坐标 248 var infoWindowLocation = new TMap.LatLng(form.value.latitude, form.value.longitude)// 创建一个坐标
239 //创建InfoWindow实例,并进行初始化 249 // 创建InfoWindow实例,并进行初始化
240 var infowindow = new TMap.InfoWindow({ 250 var infowindow = new TMap.InfoWindow({
241 content: form.value.address, //信息窗口内容 251 content: form.value.address, // 信息窗口内容
242 position: infoWindowLocation,//显示信息窗口的坐标 252 position: infoWindowLocation, // 显示信息窗口的坐标
243 map: map, 253 map: map,
244 offset: {x: 0, y: -32} 254 offset: { x: 0, y: -32 }
245 }); 255 })
246 infowindow.close(); 256 infowindow.close()
247 var marker = new TMap.MultiMarker({ 257 var marker = new TMap.MultiMarker({
248 map: map, 258 map: map,
249 //样式定义 259 // 样式定义
250 styles: { 260 styles: {
251 "myStyle": new TMap.MarkerStyle({ 261 'myStyle': new TMap.MarkerStyle({
252 "anchor": {x: 16, y: 32} 262 'anchor': { x: 16, y: 32 }
253 }) 263 })
254 }, 264 },
255 //点标记数据数组 265 // 点标记数据数组
256 geometries: [{ 266 geometries: [{
257 "id": "1", //点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id 267 'id': '1', // 点标记唯一标识,后续如果有删除、修改位置等操作,都需要此id
258 // "styleId": 'myStyle', //指定样式id 268 // "styleId": 'myStyle', //指定样式id
259 "position": new TMap.LatLng(form.value.latitude, form.value.longitude), //点标记坐标位置 269 'position': new TMap.LatLng(form.value.latitude, form.value.longitude), // 点标记坐标位置
260 "properties": {//自定义属性 270 'properties': { // 自定义属性
261 "title": form.value.name 271 'title': form.value.name
262 } 272 }
263 } 273 }
264 ] 274 ]
265 }) 275 })
266 marker.on("click", function (evt) { 276 marker.on('click', function(evt) {
267 //设置infoWindow 277 // 设置infoWindow
268 infowindow.open(); //打开信息窗 278 infowindow.open() // 打开信息窗
269 infowindow.setPosition(evt.geometry.position);//设置信息窗位置 279 infowindow.setPosition(evt.geometry.position)// 设置信息窗位置
270 }) 280 })
271 } 281 }
272 282
273 function goOrder(room) { 283 function goOrder(room) {
274 if(!hotTime.value){ 284 // if (!hotTime.value) {
275 proxy.$modal.msgError(language.value == 0 ?'请先选择出发日期':'Please choose the date of check-in first') 285 // proxy.$modal.msgError(language.value == 0 ? '请先选择出发日期' : 'Please choose the date of check-in first')
276 return 286 // return
277 } 287 // }
278 if(room.useCount<=0){ 288 // if (room.useCount <= 0) {
279 ElMessageBox.confirm(language.value == 0 ? `您当前选择的日期是${hotTime.value[0]}${hotTime.value[1]},该时间段暂无可预订房间,请选择其他日期` : 289 // ElMessageBox.confirm(language.value == 0 ? `您当前选择的日期是${hotTime.value[0]}至 ${hotTime.value[1]},该时间段暂无可预订房间,请选择其他日期`
280 `You currently select the check-in date of ${hotTime.value[0]} to ${hotTime.value[1]}, there is no room available for booking at this time period, please choose another date`, {type: 'warning'}).then({ 290 // : `You currently select the check-in date of ${hotTime.value[0]} to ${hotTime.value[1]}, there is no room available for booking at this time period, please choose another date`, { type: 'warning' }).then({
281 291 //
282 }) 292 // })
283 return 293 // return
284 } 294 // }
285 ElMessageBox.confirm(language.value == 0 ? `你当前选择的出行日期为${dayjs(currentDate.value).format('YYYY-MM-DD')}是否确定?` : `Your current check-in time is ${dayjs(currentDate.value).format('YYYY-MM-DD')} Are you sure?`, {type: 'warning'}).then({}).then(() => { 295 ElMessageBox.confirm(language.value == 0 ? `你当前选择的出行日期为${dayjs(currentDate.value).format('YYYY-MM-DD')}是否确定?` : `Your current check-in time is ${dayjs(currentDate.value).format('YYYY-MM-DD')} Are you sure?`, { type: 'warning' }).then({}).then(() => {
286 checkRoomPayByUserId(room.hotelId).then(res => { 296 checkOrderPay(6).then(res => {
287 if (res.data == -100) { 297 if (res.data == -100) {
288 ElMessageBox.confirm( 298 ElMessageBox.confirm(
289 language.value == 0 ? '你有未支付的旅游预订,是否前往个人中心查看' : 'You already have an unpaid travel order, do you want to go to the personal center to check it?', 299 language.value == 0 ? '你有未支付的旅游预订,是否前往个人中心查看' : 'You already have an unpaid travel order, do you want to go to the personal center to check it?',
290 language.value == 0 ? '提示' : 'Warning', 300 language.value == 0 ? '提示' : 'Warning',
291 { 301 {
292 confirmButtonText: language.value == 1 ? 'Go My Reservation ' : '前往我的预订', 302 confirmButtonText: language.value == 1 ? 'Go My Reservation ' : '前往我的预订',
293 // cancelButtonText: language.value==1?'Continue to book':'继续预订', 303 // cancelButtonText: language.value==1?'Continue to book':'继续预订',
294 type: 'warning', 304 type: 'warning'
295 } 305 }
296 ).then((res) => { 306 ).then((res) => {
297 console.log(res) 307 console.log(res)
298 router.push({ 308 router.push({
299 name: 'myReservation', 309 name: 'myReservation'
300 }) 310 })
301 }) 311 })
302 return 312 return
...@@ -304,19 +314,16 @@ function goOrder(room) { ...@@ -304,19 +314,16 @@ function goOrder(room) {
304 goNext() 314 goNext()
305 }) 315 })
306 }) 316 })
307
308
309 } 317 }
310 318
311 function goNext() { 319 function goNext() {
312 router.push({ 320 router.push({
313 name: 'travelOrder', 321 name: 'travelOrder',
314 params: { 322 params: {
315 roomId: 0 323 start: dayjs(currentDate.value).format('YYYY-MM-DD')
316 }, 324 },
317 query: { 325 query: {
318 hotelName: form.value.name, 326 lasId: query.value.id
319 start:currentDate.value
320 } 327 }
321 }) 328 })
322 } 329 }
...@@ -335,13 +342,13 @@ function getDaysBetween() { ...@@ -335,13 +342,13 @@ function getDaysBetween() {
335 } 342 }
336 343
337 function disabledDateRZ(date) { 344 function disabledDateRZ(date) {
338 //判读今天大与form.value.hqStart 345 // 判读今天大与form.value.hqStart
339 if (formTime.value.hqStart) { 346 if (formTime.value.scenicStart) {
340 const today = dayjs().format('YYYY-MM-DD') 347 const today = dayjs().format('YYYY-MM-DD')
341 if (formTime.value.hqStart < today) { 348 if (formTime.value.scenicStart < today) {
342 return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs(formTime.value.hqEnd).valueOf())) 349 return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs(formTime.value.scenicEnd).valueOf()))
343 } else { 350 } else {
344 return !((date.getTime() >= dayjs(formTime.value.hqStart).valueOf()) && (date.getTime() <= dayjs(formTime.value.hqEnd).valueOf())) 351 return !((date.getTime() >= dayjs(formTime.value.scenicStart).valueOf()) && (date.getTime() <= dayjs(formTime.value.scenicEnd).valueOf()))
345 } 352 }
346 } 353 }
347 // return true 354 // return true
...@@ -352,8 +359,8 @@ function goMap() { ...@@ -352,8 +359,8 @@ function goMap() {
352 // var tencentMapUrl = "https://map.qq.com/"; 359 // var tencentMapUrl = "https://map.qq.com/";
353 // window.location.href = tencentMapUrl; 360 // window.location.href = tencentMapUrl;
354 var url = `https://map.qq.com/?type=gcj02&lat=${form.value.latitude}&lng=${form.value.longitude}` 361 var url = `https://map.qq.com/?type=gcj02&lat=${form.value.latitude}&lng=${form.value.longitude}`
355 var mapUrl_tx = "http://apis.map.qq.com/uri/v1/marker?marker=coord:" + form.value.latitude + "," + form.value.longitude + "&referer=yellowpage"; 362 var mapUrl_tx = 'http://apis.map.qq.com/uri/v1/marker?marker=coord:' + form.value.latitude + ',' + form.value.longitude + '&referer=yellowpage'
356 window.open(url, "_blank") 363 window.open(url, '_blank')
357 } 364 }
358 365
359 </script> 366 </script>
......
...@@ -9,60 +9,91 @@ ...@@ -9,60 +9,91 @@
9 <el-row class="pd20" :gutter="20"> 9 <el-row class="pd20" :gutter="20">
10 <el-col :span="14"> 10 <el-col :span="14">
11 <div class="border-info"> 11 <div class="border-info">
12 <h3>{{ hotelName }}</h3> 12 <el-row class="hotel" align="middle" :gutter="20">
13 <div class="roomType">{{ room.roomType }}</div> 13 <!-- <el-col :span="6">-->
14 <div class="room"> 14 <!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>-->
15 <span>{{ room.bedType }}</span> 15 <!-- </el-col>-->
16 </div> 16 <el-col :span="language == 0?16:24">
17 <h3 class="esp flex">{{ scenicItem?.name }}
18
19 <div class="starBox ml20">
20 <img v-for="i in Number(scenicItem?.rank||0)" src="@/assets/booking/star.png">
21 </div>
22 </h3>
23 <div class="info">
24 <el-icon>
25 <Clock />
26 </el-icon>
27 <span class="mr10">{{ language == 0 ? '开园时间' : 'Opening Time' }}{{ scenicItem?.startTime }}{{ scenicItem?.workTime }}</span>
28 </div>
29 <div class="info">
30 <el-icon>
31 <Phone />
32 </el-icon>
33 <span class="mr10">{{ language == 0 ? '联系方式' : 'Contact' }}{{ scenicItem?.contact }}</span>
34 </div>
35 <div class="info esp">
36 <el-icon>
37 <MapLocation />
38 </el-icon>
39 <span>{{ scenicItem?.address }}</span>
40 </div>
41 </el-col>
42 </el-row>
17 </div> 43 </div>
18 44
19 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div> 45 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
20 <div class="border-rr mt20 pd20"> 46 <div class="border-rr mt20 pd20">
21 <el-form :model="form" :label-width="language == 0 ?'120':'160'" :rules="rules" ref="formRef"> 47 <el-form ref="formRef" v-loading="loading" :model="form" :label-width="language == 0 ?'120':'160'" :rules="rules">
22 <!-- :disabled-date="disabledDateRZ"--> 48 <!-- :disabled-date="disabledDateRZ"-->
23 <el-form-item :label="language==0?'选择日期':'Date'" required> 49 <el-form-item :label="language==0?'选择日期':'Date'" required>
24 <el-date-picker v-model="rzRange" 50 <el-date-picker
25 format="YYYY-MM-DD" :clearable="false" 51 v-model="rzRange"
26 value-format="YYYY-MM-DD"/> 52 format="YYYY-MM-DD"
53 value-format="YYYY-MM-DD"
54 :disabled-date="disabledDateRZ"
55 :clearable="false"
56 @change="dateChange"
57 />
27 58
28 <div class="tip" v-if="lform.travelStart">{{ language==0?'可订日期':'Available date' }}{{ lform.travelStart.slice(0, 10) }} ~ {{ lform.travelEnd.slice(0, 10) }}</div> 59 <div v-if="lform.scenicStart" class="tip">{{ language==0?'可订日期':'Available date' }}{{ lform.scenicStart.slice(0, 10) }} ~ {{ lform.scenicEnd.slice(0, 10) }}</div>
29 60
30 <!-- :picker-options="pickerOptions"--> 61 <!-- :picker-options="pickerOptions"-->
31 </el-form-item> 62 </el-form-item>
32 <el-form-item :label="language==0? n.name:'Rooms'" required prop="roomNum" v-for="n in typeList"> 63 <el-form-item v-for="(n,i) in gateList" :key="i" :label="language==0? n.name:'Rooms'" required prop="roomNum">
33 <el-input-number v-model="n.num" :min="0" :max="canOrderNum" @change="changeRoomNum(n)"/> 64 <el-input-number v-model="n.count" :min="0" :max="n.leftNum" @change="changeRoomNum(n)" />
34 <div class="red ml20"> 65 <div class="red ml20">
35 <span v-if="language == 0">剩余票数:{{ canOrderNum }}</span> 66 <span v-if="language == 0">剩余票数:{{ n.leftNum }}</span>
36 <span v-else>{{ canOrderNum }} Remaining rooms</span> 67 <span v-else>{{ n.leftNum }} Remaining rooms</span>
37 </div> 68 </div>
38 <div class="tip" v-if="language==1">If you need to make a hotel reservation, please fill in the full names of all required persons when booking the hotel. (For two or more people, please use ',')</div> 69 <div v-if="language==1" class="tip">If you need to make a hotel reservation, please fill in the full names of all required persons when booking the hotel. (For two or more people, please use ',')</div>
39 </el-form-item> 70 </el-form-item>
40 71
41 <div class="fakeFormItem"> 72 <div class="fakeFormItem">
42 <label>需填写{{ needPersonNum }}位游客</label> 73 <label>需填写{{ needPersonNum }}位游客</label>
43 <div> 74 <div>
44 <div v-show="needPersonNum > form.personArr.length">还需填写{{needPersonNum-form.personArr.length}}位游客</div> 75 <div v-show="needPersonNum > form.personArr.length">还需填写{{ needPersonNum-form.personArr.length }}位游客</div>
45 <div> 76 <div>
46 <el-button plain type="primary" @click="showAddPerson">新增出行人</el-button> 77 <el-button plain type="primary" @click="showAddPerson">新增出行人</el-button>
47 </div> 78 </div>
48 </div> 79 </div>
49 </div> 80 </div>
50 <div v-show="form.personArr.length>0"> 81 <div v-show="form.personArr.length>0">
51 <div class="fakeFormItem personIt" v-for="(n,index) in form.personArr"> 82 <div v-for="(n,index) in form.personArr" class="fakeFormItem personIt">
52 <label> 83 <label>
53 <el-icon @click="delPerson(n,index)"><Remove /></el-icon> 84 <el-icon @click="delPerson(n,index)"><Remove /></el-icon>
54 游客{{index+1}} 85 游客{{ index+1 }}
55 </label> 86 </label>
56 <div class="mation"> 87 <div class="mation">
57 <div>{{n.name}}</div> 88 <div>{{ n.name }}</div>
58 身份证:{{n.idcCode}} 89 身份证:{{ n.idcCode }}
59 </div> 90 </div>
60 <el-icon @click="showAddPerson(n)"><Edit /></el-icon> 91 <el-icon @click="showAddPerson(n)"><Edit /></el-icon>
61 </div> 92 </div>
62 </div> 93 </div>
63 94
64 <el-form-item :label="language==0?'联系手机':'Contact phone'" required prop="phone"> 95 <el-form-item :label="language==0?'联系手机':'Contact phone'" required prop="phone">
65 <el-input v-model="form.phone"/> 96 <el-input v-model="form.phone" />
66 </el-form-item> 97 </el-form-item>
67 98
68 </el-form> 99 </el-form>
...@@ -72,14 +103,14 @@ ...@@ -72,14 +103,14 @@
72 <div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div> 103 <div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div>
73 <div class="border-rr mt20 pd20 ccitemBox"> 104 <div class="border-rr mt20 pd20 ccitemBox">
74 <label> {{ language == 0 ? '基本费用' : 'Room fee' }} 105 <label> {{ language == 0 ? '基本费用' : 'Room fee' }}
75 <span class="fr" v-if="language==0">{{ 106 <span v-if="language==0" class="fr">{{
76 language == 0 ? '¥' : '€' 107 language == 0 ? '¥' : '€'
77 }}{{ ( form.roomNum * choseRooms.length).toFixed(2) }}</span> 108 }}{{ ( form.roomNum * choseRooms.length).toFixed(2) }}</span>
78 <span class="fr" v-else>{{ 109 <span v-else class="fr">{{
79 language == 0 ? '¥' : '€' 110 language == 0 ? '¥' : '€'
80 }}{{ ( form.roomNum * choseRooms.length).toFixed(2) }}</span> 111 }}{{ ( form.roomNum * choseRooms.length).toFixed(2) }}</span>
81 </label> 112 </label>
82 <div class="ccitem" v-for="(c, index) in choseRooms" :key="index" v-show="form.roomNum>0"> 113 <div v-for="(c, index) in choseRooms" v-show="form.roomNum>0" :key="index" class="ccitem">
83 {{ c }} 114 {{ c }}
84 <span v-if="language==0">{{ form.roomNum }}*{{ language == 0 ? '¥' : '€' }}{{ room.roomPrice }}</span> 115 <span v-if="language==0">{{ form.roomNum }}*{{ language == 0 ? '¥' : '€' }}{{ room.roomPrice }}</span>
85 <span v-else>{{ form.roomNum }}*{{ language == 0 ? '¥' : '€' }}{{ room.roomPriceEn }}</span> 116 <span v-else>{{ form.roomNum }}*{{ language == 0 ? '¥' : '€' }}{{ room.roomPriceEn }}</span>
...@@ -87,7 +118,8 @@ ...@@ -87,7 +118,8 @@
87 118
88 119
89 <label>{{ language == 0 ? '共计' : 'Total' }}<span 120 <label>{{ language == 0 ? '共计' : 'Total' }}<span
90 class="fr bigMoney">{{ language == 0 ? '¥' : '€' }}{{ money }}</span></label> 121 class="fr bigMoney"
122 >{{ language == 0 ? '¥' : '€' }}{{ money }}</span></label>
91 123
92 </div> 124 </div>
93 </el-col> 125 </el-col>
...@@ -106,20 +138,20 @@ ...@@ -106,20 +138,20 @@
106 </el-col> 138 </el-col>
107 </el-row> 139 </el-row>
108 </el-card> 140 </el-card>
109 <div style="height: 60px;"></div> 141 <div style="height: 60px;" />
110 142
111 </div> 143 </div>
112 144
113 <el-dialog v-model="show" title="出行人信息" width="500px" center> 145 <el-dialog v-model="show" title="出行人信息" width="500px" center>
114 <div> 146 <div>
115 <el-form label-width="100" ref="personRef"> 147 <el-form ref="personRef" label-width="100">
116 <el-form-item label="姓名"> 148 <el-form-item label="姓名">
117 <el-input v-model="person.name" placeholder="请与证件姓名一致"/> 149 <el-input v-model="person.name" placeholder="请与证件姓名一致" />
118 </el-form-item> 150 </el-form-item>
119 <el-form-item label="证件号"> 151 <el-form-item label="证件号">
120 <el-input v-model="person.idcCode" placeholder="请填写身份证号"/> 152 <el-input v-model="person.idcCode" placeholder="请填写身份证号" />
121 </el-form-item> 153 </el-form-item>
122 </el-form> 154 </el-form>
123 </div> 155 </div>
124 <template #footer> 156 <template #footer>
125 <div class="dialog-footer"> 157 <div class="dialog-footer">
...@@ -132,19 +164,21 @@ ...@@ -132,19 +164,21 @@
132 </template> 164 </template>
133 165
134 <script setup> 166 <script setup>
135 import {useRouter, useRoute} from "vue-router"; 167 import { useRouter, useRoute } from 'vue-router'
136 import {ref, reactive, onMounted} from "vue"; 168 import { ref, onMounted } from 'vue'
137 import {useStorage} from "@vueuse/core/index"; 169 import { useStorage } from '@vueuse/core/index'
138 import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel} from "@/apiPc/booking" 170 import { getBaseInfoByActiveId, getGateListByLasId, getScenicById, newsSubmitOrderHotel } from '@/apiPc/booking'
139 import dayjs from 'dayjs' 171 import dayjs from 'dayjs'
140 import {ElMessage,ElMessageBox} from "element-plus"; 172 import { ElMessage, ElMessageBox } from 'element-plus'
141 import useUserStore from "@/store/modules/user"; 173 import useUserStore from '@/store/modules/user'
174 import _ from 'lodash'
175
142 const user = useUserStore().user 176 const user = useUserStore().user
143 const language = useStorage('language', 0) 177 const language = useStorage('language', 0)
144 const router = useRouter() 178 const router = useRouter()
145 const route = useRoute() 179 const route = useRoute()
146 const room = ref({}) 180 const room = ref({})
147 const hotelName = ref('') 181 const loading = ref(false)
148 const canOrderNum = ref(0) 182 const canOrderNum = ref(0)
149 const needPersonNum = ref(0) 183 const needPersonNum = ref(0)
150 const person = ref({ 184 const person = ref({
...@@ -153,70 +187,80 @@ const person = ref({ ...@@ -153,70 +187,80 @@ const person = ref({
153 }) 187 })
154 const show = ref(false) 188 const show = ref(false)
155 const lform = ref({}) 189 const lform = ref({})
190 const scenicItem = ref({})
156 const form = ref({ 191 const form = ref({
157 roomNum: 0, 192 phone: user?.phonenumber || '',
158 phone: user?.phonenumber||'',
159 personArr: [] 193 personArr: []
160 }) 194 })
161 const rzRange = ref('') 195 const rzRange = ref('')
162 const typeList = ref([ 196 const gateList = ref([])
163 {
164 name: '成人票',
165 value: '1'
166 },
167 {
168 name: '儿童票',
169 value: '2'
170 },
171 {
172 name: '老年票',
173 value: '2'
174 }
175 ])
176 const money = ref(0) 197 const money = ref(0)
177 const choseRooms = ref([]) 198 const choseRooms = ref([])
178 const rules = ref({ 199 const rules = ref({
179 phone: { required: true, message: language.value==0? '请输入联系电话':"Please enter a contact number", trigger: 'blur' } 200 phone: { required: true, message: language.value == 0 ? '请输入联系电话' : 'Please enter a contact number', trigger: 'blur' }
180 }) 201 })
181 202
182 let usedays = 0 203 const usedays = 0
183 onMounted(() => { 204 onMounted(() => {
184 console.log(route.query)
185 hotelName.value = route.query.hotelName
186 money.value = 0 205 money.value = 0
187 rzRange.value = dayjs(route.query.start).format('YYYY-MM-DD') 206 rzRange.value = route.params.start
207
208 getScenic()
188 initDays() 209 initDays()
189 checkreRooms() 210 getGate()
190 }) 211 })
191 function initDays() { 212 function initDays() {
192 // 可定日期范围 213 // 可定日期范围
193 getBaseInfoByActiveId(route.params.cptId).then(res=>{ 214 getBaseInfoByActiveId(route.params.cptId).then(res => {
194 lform.value = res.data 215 lform.value = res.data
195 }).catch(err=>{ 216 })
196 console.log(err) 217 }
218 function getScenic() {
219 getScenicById(route.params.scenicId).then(res => {
220 scenicItem.value = res.data
197 }) 221 })
198 } 222 }
223 function getGate() {
224 gateList.value = []
225 loading.value = true
226 getGateListByLasId({
227 lasId: route.query.lasId,
228 scenicDate: rzRange.value
229 }).then(res => {
230 gateList.value = res.data
231 _.each(gateList.value, item => {
232 item.count = 0
233 item.leftNum = item.num - item.orderCount
234 })
235 }).finally(() => {
236 loading.value = false
237 })
238 }
239
199 function disabledDateRZ(date) { 240 function disabledDateRZ(date) {
200 //判读今天大与form.value.travelStart 241 // 判读今天大与form.value.travelStart
201 if (lform.value.travelStart) { 242 if (lform.value.scenicStart) {
202 const today = dayjs().format('YYYY-MM-DD') 243 const today = dayjs().format('YYYY-MM-DD')
203 if (lform.value.travelStart < today) { 244 if (lform.value.scenicStart < today) {
204 return !((date.getTime() >= dayjs(today).valueOf())&&(date.getTime() <= dayjs(lform.value.travelEnd).valueOf())) 245 return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs(lform.value.scenicEnd).valueOf()))
205 } else { 246 } else {
206 return !((date.getTime() >= dayjs(lform.value.travelStart).valueOf())&&(date.getTime() <= dayjs(lform.value.travelEnd).valueOf())) 247 return !((date.getTime() >= dayjs(lform.value.scenicStart).valueOf()) && (date.getTime() <= dayjs(lform.value.scenicEnd).valueOf()))
207 } 248 }
208 } 249 }
209 // return true 250 // return true
210 } 251 }
252
253 function dateChange() {
254 getGate()
255 }
256
211 function changeRoomNum(e) { 257 function changeRoomNum(e) {
212 console.log(e) 258 console.log(e)
213 countMoney() 259 countMoney()
214 } 260 }
215 function checkreRooms() { 261
216 //获取票类型 typeList
217 }
218 const showAddPerson = (item) => { 262 const showAddPerson = (item) => {
219 if(item){ 263 if (item) {
220 person.value = item 264 person.value = item
221 } else { 265 } else {
222 person.value = { 266 person.value = {
...@@ -227,42 +271,41 @@ const showAddPerson = (item) => { ...@@ -227,42 +271,41 @@ const showAddPerson = (item) => {
227 show.value = true 271 show.value = true
228 } 272 }
229 const addPerson = () => { 273 const addPerson = () => {
230 if(!person.value.name){ 274 if (!person.value.name) {
231 ElMessage.warning(language.value == 0 ? '请填写姓名' : 'Please fill in the name') 275 ElMessage.warning(language.value == 0 ? '请填写姓名' : 'Please fill in the name')
232 return 276 return
233 } 277 }
234 if(!person.value.idcCode){ 278 if (!person.value.idcCode) {
235 ElMessage.warning(language.value == 0 ? '请填写身份证号' : 'Please fill in the ID number') 279 ElMessage.warning(language.value == 0 ? '请填写身份证号' : 'Please fill in the ID number')
236 return 280 return
237 } 281 }
238 form.value.personArr.push(person.value) 282 form.value.personArr.push(person.value)
239 show.value = false 283 show.value = false
240 } 284 }
241 const delPerson = (item,index) => { 285 const delPerson = (item, index) => {
242 form.value.personArr.splice(index,1) 286 form.value.personArr.splice(index, 1)
243 } 287 }
244 288
245 function countMoney() { 289 function countMoney() {
246 if (language.value == 0) { 290 if (language.value == 0) {
247 money.value = ((form.value.roomNum * usedays) + ( form.value.addNum * usedays)).toFixed(2) 291 money.value = ((form.value.roomNum * usedays) + (form.value.addNum * usedays)).toFixed(2)
248 } else { 292 } else {
249 money.value = ((form.value.roomNum * usedays) + (form.value.addNum * usedays)).toFixed(2) 293 money.value = ((form.value.roomNum * usedays) + (form.value.addNum * usedays)).toFixed(2)
250
251 } 294 }
252 if (money.value == 'NaN') money.value = 0.00 295 if (money.value == 'NaN') money.value = 0.00
253 } 296 }
254 297
255 function submit() { 298 function submit() {
256 if(!user){ 299 if (!user) {
257 useUserStore().setReLogin() 300 useUserStore().setReLogin()
258 return 301 return
259 } 302 }
260 if(!rzRange.value)return ElMessage.warning(language.value == 0 ? '请选择预订日期' : 'Please select check-in time') 303 if (!rzRange.value) return ElMessage.warning(language.value == 0 ? '请选择预订日期' : 'Please select check-in time')
261 if(!form.value.phone){ 304 if (!form.value.phone) {
262 ElMessage.warning(language.value == 0 ? '请填写手机号' : 'Please fill in the phone number') 305 ElMessage.warning(language.value == 0 ? '请填写手机号' : 'Please fill in the phone number')
263 return 306 return
264 } 307 }
265 if(form.value.personArr.length!=needPersonNum.value){ 308 if (form.value.personArr.length != needPersonNum.value) {
266 ElMessage.warning(language.value == 0 ? '出行人数与票数不匹配' : 'The number of people travelling does not match the number of rooms') 309 ElMessage.warning(language.value == 0 ? '出行人数与票数不匹配' : 'The number of people travelling does not match the number of rooms')
267 return 310 return
268 } 311 }
...@@ -279,13 +322,13 @@ function submit() { ...@@ -279,13 +322,13 @@ function submit() {
279 ElMessage.warning(language.value == 0 ? '剩余票数不足' : 'The remaining number of rooms is insufficient') 322 ElMessage.warning(language.value == 0 ? '剩余票数不足' : 'The remaining number of rooms is insufficient')
280 checkreRooms() 323 checkreRooms()
281 } else { 324 } else {
282 //去付钱 325 // 去付钱
283 router.push({ 326 router.push({
284 name: 'bookingPay', 327 name: 'bookingPay',
285 query: { 328 query: {
286 orderId:res.data.orderId, 329 orderId: res.data.orderId,
287 money:res.data.total, 330 money: res.data.total,
288 type:'hotel' 331 type: 'hotel'
289 } 332 }
290 }) 333 })
291 } 334 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!