87fb7ca7 by 杨炀

no message

1 parent f48a867f
......@@ -34,3 +34,17 @@ export function newsSubmitOrderHotel(data) {
data: data
})
}
export function getRoomBilldetailbyId(params) {
return request({
url: `/ota/orderRoom/getRoomOrderInfoByOrderId`,
method: 'get',
params: params
})
}
export function getActivityCarList(params) {
return request({
url: `/ota/activityVehicle/wxList`,
method: 'get',
params: params
})
}
......
......@@ -362,6 +362,12 @@ export const constantRoutes = [
meta: { title: 'Hotel Reservation' }
},
{
path: 'car/:cptId/:id',
component: () => import('@/viewsPc/booking/carOrder'),
name: 'carOrder',
meta: { title: 'Car Reservation' }
},
{
path: 'hotel/:cptId/:hotelId/:roomId',
component: () => import('@/viewsPc/booking/hotelOrder'),
name: 'hotelOrder',
......
<template>
<div>
<div class="banner">
<img src="@/assets/booking/jd_text.png">
<img src="@/assets/booking/cl_text.png">
</div>
<div class="box">
<div class="searchBar">
......@@ -13,32 +13,64 @@
</div>
<div class="box" v-loading="loading">
<el-card v-for="(h,index) in list" class="mb20" @click="goDetail(h)">
<!-- che列表-->
<el-row class="hotel" align="middle" :gutter="20">
<el-col :span="6">
<img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/>
<el-collapse v-model="activeName" accordion style="--el-collapse-header-height:'auto'">
<el-collapse-item :name="index" v-for="(h,index) in list" class="hotel">
<template #title>
<el-row align="middle" :gutter="20" class="w100">
<el-col :span="4">
<div class="index">路线{{index+1}}
<img src="@/assets/booking/arrow.png"/>
</div>
</el-col>
<el-col :span="7">
<p class="esp">{{h.checkIn}}</p>
</el-col>
<el-col :span="4" class="text-center">
<img class="mauto w40px" src="@/assets/booking/wf.png"/>
</el-col>
<el-col :span="10">
<h3 class="esp">{{h.name}}</h3>
<div class="starBox">
<img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png">
<el-col :span="7">
<p class="esp ">{{h.checkOut}}</p>
</el-col>
</el-row>
</template>
<div class="plr20">
<div v-for="(r,index) in h.carVoList" :key="index" class="room">
<el-row :gutter="30" align="middle">
<el-col :span="4">
<div class="roomImg">
<img :src="fillImgUrl(r.photos?.split(',')[0])">
</div>
</el-col>
<el-col :span="14">
<h3 class="name">{{ r.carType }}
<div class="tagbox">
<span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span>
<a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a>
<span class="tag">{{r.carColor}}</span>
<span class="tag" v-show="r.checkOut==1">可送车</span>
<span class="tag" v-show="r.checkIn==1">可接车</span>
</div>
<p class="esp addr">
<el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>
{{h.address}}
</p>
</h3>
<el-row :gutter="10">
<el-col :span="8">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</el-col>
<el-col :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</el-col>
</el-row>
</el-col>
<el-col :span="3">
<div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.inPrice:r.inPriceEn}}</span></div>
</el-col>
<el-col :span="8" class="text-right">
<div class="price">¥<span>{{ h.price }}</span><i v-if="language==0"></i></div>
<el-button class="btn-lineG w200px" round type="primary" size="large">{{ language==0?'立即预约':'Select' }}</el-button>
<el-col :span="3">
<el-button class="btn-lineG w100" round type="primary" @click="goOrder(h,r)">{{ language==0?'我要预定':'Select' }}</el-button>
</el-col>
</el-row>
</el-card>
</div>
<el-empty v-if="list.length == 0" :image="`/img/order_no.png`" :image-size="228" description=""/>
</div>
</el-collapse-item>
</el-collapse>
<el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" />
<div style="height: 50px"></div>
</div>
......@@ -51,12 +83,14 @@ import {onMounted} from "@vue/runtime-core"
import * as booking from "@/apiPc/booking"
import {useRouter,useRoute} from "vue-router";
import {useStorage} from "@vueuse/core/index";
import {getActivityCarList} from "@/apiPc/booking";
const router = useRouter()
const route = useRoute()
const language= useStorage('language',0)
const query = ref({
name:''
})
const activeName = ref(0)
const cptId = ref('')
const list = ref([])
const loading = ref(false)
......@@ -67,40 +101,50 @@ onMounted(()=>{
function getList() {
loading.value = true
booking.getHotelList(query.value).then(res=>{
booking.getActivityCarList(query.value).then(res=>{
list.value = res.rows
loading.value = false
}).catch(e=>{
loading.value = false
})
}
function goDetail(item) {
function goOrder(item,car) {
router.push({
name:'hotelDetail',
name:'carOrder',
params:{
hotelId:item.hotelId,
id:item.id,
},
query:{
id:item.id
item:encodeURIComponent(JSON.stringify(item)),
car:encodeURIComponent(JSON.stringify(car)),
}
})
}
</script>
<style scoped lang="scss">
.hotel{
h3{margin: 0 0 20px;}
img.w100{object-fit: cover;aspect-ratio: 16/9}
.addr{font-size: 16px;color: #929AA0;font-weight: 400;}
.price{margin: 0 0 25px;
color: #FF8124;font-size: 18px;
span{font-size: 24px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;}
i{font-style: normal;color: #929AA0;}
.w40px{width: 40px}
.plr20{padding: 0 20px}
.hotel{margin-bottom: 20px;cursor: pointer;
.index{display: flex;font-weight: 500;padding-left: 20px;
font-size: 18px;align-items: center;
img{margin-left: 15px;}
}
p{font-weight: 500;
font-size: 24px;
color: #000000;}
&:hover .el-card{box-shadow: 0 0 10px #aaa;}
}
.hotel:nth-child(7n) .index{color: #009E96;}
.hotel:nth-child(7n+1) .index{color: #FF8124;}
.hotel:nth-child(7n+2) .index{color: #E4007F;}
.hotel:nth-child(7n+3) .index{color: #0068B7;}
.hotel:nth-child(7n+4) .index{color: #32B16C;}
.hotel:nth-child(7n+5) .index{color: #920783;}
.hotel:nth-child(7n+6) .index{color: #00B7EE;}
.banner{height: 140px;background-size: cover;text-align: center;
background: url("@/assets/booking/jd_bg.png") center;display: flex;align-items: center;
background: url("@/assets/booking/cl_bg.png") center;display: flex;align-items: center;
justify-content: center;
img{display: block;margin:-30px auto 0;width: auto;}
}
......@@ -121,4 +165,21 @@ function goDetail(item) {
span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);}
}
.room {
background: #FAFBFD;margin: 20px 0 0;padding: 20px;
border: 1px solid #E5E5E5;
.name{font-size: 20px;margin: 0 0 10px;}
.roomImg{aspect-ratio: 16/9;border-radius: 10px;overflow: hidden;
img{width: 100%;object-fit: cover;object-position: center;height: 100%;}
}
.price{color: #FF8124;font-size: 24px;
span{font-size: 36px;font-family: "DIN Alternate"}
}
.bg-lineg{margin: auto;border-radius: 10px;text-align: center;padding: 7px 2px 2px;
font-size: 24px;width:66px;cursor: pointer;
div{background: #fff;font-size: 13px;border-radius: 20px;padding: 0 10px;
color: #453DEA;font-weight: 500;}
}
}
</style>
......
<template>
<div>
<div class="box">
<el-card class="mt30">
<div class="flex">
<p class="esp">{{car.checkIn}}</p>
<img src="@/assets/booking/wf.png"/>
<p class="esp text-right">{{car.checkOut}}</p>
</div>
</el-card>
<el-card class="mt30 mb60">
<div class="lineHead">
<ul>
<li>{{ language == 0 ? '车型选择' : 'Available Cars' }}</li>
</ul>
</div>
<div>
<div v-for="(r,index) in list" :key="index" class="room">
<el-row :gutter="30" align="middle">
<el-col :span="4">
<div class="roomImg">
<img :src="fillImgUrl(r.photo?.split(',')[0])">
</div>
</el-col>
<el-col :span="14">
<h3 class="name">{{ r.roomType }}</h3>
<el-row :gutter="10">
<el-col :span="8">{{ r.area }}</el-col>
<el-col :span="8" v-show="r.windowFlag==1"> {{ language==0?'有窗':'With windows' }}</el-col>
<el-col :span="8" v-show="r.windowFlag==0"> {{ language==0?'无窗':'Windowless' }}</el-col>
<el-col :span="8" v-show="r.bathroomFlag==1"> {{ language==0?'热水洗浴':'Shower' }}</el-col>
<!-- <text v-show="r.bathroomFlag==0"> </text> -->
<el-col :span="8" v-show="r.addBedFlag==1"> {{ language==0?'允许加床':'Extra bed' }} </el-col>
<el-col :span="8" v-if="r.breakfastNum&&r.breakfastNum > '0'">
{{ r.breakfastNum }}{{ language==0?'份早餐':' breakfasts' }}
</el-col>
<el-col :span="8" v-else>{{ language==0?'无早餐':'No breakfast' }}</el-col>
</el-row>
</el-col>
<el-col :span="3">
<div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.roomPrice:r.roomPriceEn}}</span></div>
</el-col>
<el-col :span="3">
<div class="bg-lineg" v-if="language==0" @click="goOrder(r)">
<div>{{ language==0?'在线付':'Online' }}</div>
</div>
<el-button v-else class="btn-lineG w100" round type="primary" @click="goOrder(r)">Select</el-button>
<div class="text-center text-primary mt10 fontsize14 pointer" v-if="language == 0">
剩余 {{(r.roomCount - (r.useCount||0)).toFixed()}}
</div>
<div class="text-center text-primary mt10 fontsize14" v-else>
{{(r.roomCount - (r.useCount||0)).toFixed()}} Remaining rooms
</div>
</el-col>
</el-row>
</div>
<el-empty v-if="list.length == 0" :image="`/img/order_no.png`" :image-size="228" description=""/>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import {useRouter} from "vue-router";
import {ref, reactive, onMounted} from "vue";
import {useRoute} from "vue-router";
import {useStorage} from "@vueuse/core/index";
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const language = useStorage('language', 0)
const router = useRouter()
const route = useRoute()
const form = ref({})
const car = ref({})
const query = ref({
id: route.query.id
})
const loading = ref(false)
const list = ref([])
onMounted(()=>{
car.value = JSON.parse(decodeURIComponent(route.query.detail))
list.value = car.value.carVoList
})
</script>
<style scoped>
</style>
......@@ -112,7 +112,8 @@ import {useRoute} from "vue-router";
import {getHotelById, getHotelRooms} from "@/apiPc/booking"
import {useStorage} from "@vueuse/core/index";
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const language = useStorage('language', 0)
const router = useRouter()
const route = useRoute()
......@@ -185,6 +186,10 @@ function initMap() {
}
function goOrder(room) {
if(!user){
useUserStore().setReLogin()
return
}
router.push({
name:'hotelOrder',
params:{
......
......@@ -27,8 +27,8 @@
<div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
<div class="border-rr mt20 pd20">
<el-form :model="form" :label-width="language == 0 ?'100':'150'">
<el-form-item :label="language==0?'入住日期':'Check-in date'">
<el-form :model="form" :label-width="language == 0 ?'100':'150'" :rules="rules" ref="formRef">
<el-form-item :label="language==0?'入住日期':'Check-in date'" required>
<el-date-picker @change="getDaysBetween"
v-model="rzRange"
type="daterange"
......@@ -36,17 +36,17 @@
value-format="YYYY-MM-DD"/>
<!-- :picker-options="pickerOptions"-->
</el-form-item>
<el-form-item :label="language==0?'房间数':'Rooms'">
<el-form-item :label="language==0?'房间数':'Rooms'" required prop="roomNum">
<el-input-number v-model="form.roomNum" :min="0" :max="canOrderNum" @change="changeRoomNum"/>
<div class="red ml20" v-if="rzRange[1]">
<span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span>
<span v-else>{{ canOrderNum }} Remaining rooms</span>
</div>
</el-form-item>
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`">
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`" required>
<el-input v-model="rzUserArr[index]" :placeholder="language==0?'每间填一位住客姓名':'Each room fill in one name of the guest'"/>
</el-form-item>
<el-form-item :label="language==0?'预计到店':'Expected check-in'">
<el-form-item :label="language==0?'预计到店':'Expected check-in'" required>
<el-select v-model="form.ddDate"
:placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'">
<el-option
......@@ -57,24 +57,25 @@
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Contact phone'">
<el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone">
<el-input v-model="form.phone"/>
</el-form-item>
<div v-if="room.addBedFlag=='1'">
<el-form-item :label="language==0?'是否加床':'Extra bed'">
<el-form-item :label="language==0?'是否加床':'Extra bed'" required>
<el-radio-group v-model="form.isAddbed">
<el-radio label="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio>
<el-radio label="0">{{ language == 0 ? '否' : 'No' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'加床张数':'Extra bed num'">
<el-form-item :label="language==0?'加床张数':'Extra bed num'" required>
<el-input-number v-model="form.addNum" :min="0" :max="1" @change="changeBed"/>
</el-form-item>
<div class="tip" v-if="form.isAddbed=='1'">*
<span v-if="language == 0">一个房间最多加一张床</span>
<span v-else>A room can only add one bed</span>
</div>
</el-form-item>
</div>
</el-form>
</div>
......@@ -156,7 +157,9 @@ const canOrderNum = ref(0)
const form = ref({
isAddbed: '0',
roomNum: 0,
addNum: 0
addNum: 1,
ddDate:'14:00',
phone: user.phonenumber||'',
})
const rzRange = ref([])
const rzUserArr = ref([])
......@@ -232,6 +235,8 @@ const ddDateArr = ref([
label: '00:00'
}
])
const rules = ref({})
let usedays = 0
onMounted(() => {
console.log(route.query)
......@@ -327,6 +332,7 @@ function countMoney() {
function submit() {
if(!user){
useUserStore().setReLogin()
return
}
if (usedays == 0) {
......@@ -466,4 +472,5 @@ function submit() {
.red {
color: #FF8124;
}
.tip{font-size: 14px;color: #666;padding: 0 10px;}
</style>
......
<template>
<div style="min-height: 100vh">
<div class="box" v-if="!errorBox">
<el-card :body-style="{ padding: '0px' }" class="mt20">
<el-card :body-style="{ padding: '0px' }" class="mt20 mb60">
<div slot="header">
<div class="bg-lineg">{{ language == 0 ? '缴费清单' : 'Payment List' }}</div>
</div>
<div v-if="isLogin">
<div class="pd20">
<div class="leftboderTT">{{ language == 0 ? '酒店信息' : 'Hotel Infomation' }}</div>
<div class="border-info mt20">
<h3>{{ form.hotelName }}</h3>
<el-row>
<el-col>
地址:{{ form.provinceName }} {{ form.cityName }} {{ form.areaName }} {{ form.address }}
</el-col>
<el-col>
入住信息:{{ form.messageObj?.roomStayDate }}
</el-col>
<el-col>
房间信息:{{ form.messageObj?.roomName }}{{ form.roomNum }}
</el-col>
</el-row>
</div>
<el-row class="priceBar">
<el-col :lg="12" :xs="24" class="pl-15">
<div class="leftboderTT">{{ language == 0 ? '预订信息' : 'Hotel Infomation' }}</div>
<div class="border-info mt20">
<el-row>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div>入住人:{{ form.rzUsers }}</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">联系方式:{{ form.phone }}</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24"></el-col>
</el-row>
</div>
<el-row justify="end">
<el-col :lg="12" :xs="24">
<div class="flex" v-if="Number(form.totalFee)>0">
<div class="item" v-if="signInfoList?.length>0"><label>{{ language==0?'报名费':'REGISTRATION FEE' }}</label><span>{{ language==0?'¥':'€' }}{{serviceFeeTotal}}</span></div>
<div class="item" v-if="zuTableList?.length>0"><label>{{ language==0?'保险费':'INSURANCE' }}</label><span>{{ language==0?'¥':'€' }}{{insuranceFeeTotal}}</span></div>
<div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}</label><span class="size26">{{ language==0?'¥':'€' }}{{form.totalFee}}</span></div>
<div class="text-right">
<div class="item"><label>{{ language == 0 ? '费用总计' : 'Total Cost' }}</label>
<span class="size26 wePrice">{{ language == 0 ? '¥' : '€' }}{{ form.total }}</span>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
<div v-else class="pd20 skeletonBox">
<el-skeleton :rows="8"/>
<el-button type="primary" class="btn-lineG" size="large" :style="language == 0 ?'width:200px':'width:400px'" round @click="showLogin">
{{ language == 0 ?'登录后查看明细':'View detailed information after logging in' }}
<el-button type="primary" class="btn-lineG" size="large" :style="language == 0 ?'width:200px':'width:400px'"
round @click="showLogin">
{{ language == 0 ? '登录后查看明细' : 'View detailed information after logging in' }}
</el-button>
</div>
</el-card>
<el-card class="mt20 mb20">
<el-row class="result">
<el-col :lg="12">
</el-col>
<el-col :lg="12" v-if="Number(form.totalFee)>0">
<div class="priceb" v-if="form.payStatus=='0'">{{ language==0?'待支付金额':'Amount Due' }}<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.payStatus=='1'">{{ language==0?'已支付金额':'Amount Due' }}<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.payStatus=='5'">{{ language==0?'已退款':'Refunded' }}<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.viewStatus=='0'">{{ language == 0 ? '待支付金额' : 'Amount Due' }}<span
class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.viewStatus=='1'">{{ language == 0 ? '已支付金额' : 'Amount Due' }}<span
class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.viewStatus=='4'">{{ language == 0 ? '已退订' : 'Refunded' }}<span
class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.viewStatus=='2'">{{ language == 0 ? '已取消' : 'Canceled' }}<span
class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
<div class="priceb" v-if="form.viewStatus=='7'">{{ language == 0 ? '退款审核中' : '退款审核中' }}<span
class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
</el-col>
</el-row>
</el-card>
<el-card class="mb60" v-if="form.auditStatus=='2'&&form.payStatus=='0'&&Number(form.totalFee)>0">
<div class="leftboderTT">{{ language==0?'选择支付方式':'Choose payment method' }}</div>
<div class="pd20" v-if="form.status == '0'&&(form.surplus!='0,0'&&form.surplus!='0')">
<div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div>
<div class="mt20">
<el-radio-group v-model="payType" @change="changePaytype">
<!-- 0 线下 1 支付宝 2 微信 3 paypal-->
<!-- <el-radio label="1" border>-->
<!-- <svg t="1709003181386" class="icon" viewBox="0 0 3283 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="31015" width="100" height="40"><path d="M1163.122759 94.631724H593.92A133.826207 133.826207 0 0 0 459.034483 228.457931v567.084138a133.473103 133.473103 0 0 0 133.826207 133.826207h570.262069a133.826207 133.826207 0 0 0 134.17931-133.826207v-5.296552s-217.864828-90.394483-328.033103-143.36c-73.445517 90.747586-168.783448 145.478621-267.652414 145.478621-167.017931 0-223.514483-145.831724-144.419311-241.875862a169.136552 169.136552 0 0 1 92.16-51.906207c70.62069-17.302069 184.32 10.946207 290.604138 45.903448A587.211034 587.211034 0 0 0 988.689655 429.373793h-328.73931v-32.838621h168.783448V337.213793h-204.446896v-33.191724h204.446896V219.630345a14.124138 14.124138 0 0 1 14.477241-14.477242h82.273104v98.868966h202.328276v33.191724h-202.328276v59.321379h165.252414a677.605517 677.605517 0 0 1-70.62069 176.551725c50.14069 18.008276 94.984828 35.310345 128.529655 46.256551a930.427586 930.427586 0 0 0 147.950345 42.725518V228.457931a133.826207 133.826207 0 0 0-133.473103-133.826207z" fill="#089fe8" p-id="31016"></path><path d="M663.481379 548.016552a162.78069 162.78069 0 0 0-81.566896 30.366896c-64.617931 55.790345-26.129655 158.190345 104.165517 158.190345 75.917241 0 151.481379-48.375172 211.862069-125.704827-85.804138-40.96-156.424828-70.267586-234.46069-62.852414zM2488.673103 225.28h239.757242v47.668966h85.804138V216.805517a22.951724 22.951724 0 0 0-21.892414-23.304827h-139.122759V149.009655h-89.335172v44.137931h-160.662069v79.80138h85.451034zM1882.394483 360.518621h67.442758v247.172413h73.798621V280.011034h-26.835862l55.437241-126.764137H1970.317241l-87.922758 207.271724zM2824.827586 596.391724l-26.835862-90.747586a13.771034 13.771034 0 0 0-13.064827-10.24h-70.62069l20.48 70.62069H2648.275862v-135.944828h164.546207v-32.132414H2648.275862v-63.55862h164.546207v-32.132414h-409.6v32.132414h164.546207v63.55862h-164.546207v32.132414h164.546207V564.965517h-164.546207v32.132414H2824.827586zM2158.521379 323.442759a16.595862 16.595862 0 0 0-15.183448-9.886897h-63.558621l49.434483 156.424828h75.564138z" fill="#089fe8" p-id="31017"></path><path d="M2319.889655 156.777931h-76.623448v80.154483h-188.557241v32.132414h188.557241v287.426206a13.064828 13.064828 0 0 1-12.358621 12.005518h-38.841379v31.77931h99.222069a30.013793 30.013793 0 0 0 28.601379-29.66069V269.064828h31.073104v-32.132414h-31.073104zM1871.448276 577.677241a913.831724 913.831724 0 0 1-168.783448-80.507586 357.34069 357.34069 0 0 0 141.241379-194.56H1694.896552V249.997241h170.195862v-32.83862H1694.896552V150.422069h-75.211035a15.536552 15.536552 0 0 0-15.183448 15.536552v51.2h-169.136552v32.83862h169.136552v52.612414h-141.241379v32.838621h284.248276a278.951724 278.951724 0 0 1-93.572414 127.470345 360.871724 360.871724 0 0 1-93.572414-94.984828H1483.034483a423.724138 423.724138 0 0 0 122.173793 130.295173 662.775172 662.775172 0 0 1-172.667586 77.329655v39.194482A773.296552 773.296552 0 0 0 1653.230345 529.655172 781.771034 781.771034 0 0 0 1871.448276 614.753103zM1553.655172 674.78069l-70.620689 190.675862h35.310345l13.417931-38.488276h70.620689l12.711724 38.488276h35.310345l-70.620689-190.675862z m-12.711724 128.176551l27.188966-79.095172 26.482758 79.095172zM1796.237241 674.78069h-34.251034v190.675862h115.464827v-26.129655h-81.213793v-164.546207zM2003.155862 674.78069h34.251035v190.322758h-34.251035zM2250.328276 674.78069h-74.151724v190.675862h35.310345v-73.445518h39.900689a58.615172 58.615172 0 1 0 0-117.230344z m-2.118621 91.100689H2210.427586v-64.971034h37.782069a31.073103 31.073103 0 0 1 30.366897 32.485517 30.72 30.72 0 0 1-30.366897 32.485517zM2465.015172 674.78069l-70.620689 190.675862h35.310345l13.417931-38.488276h70.620689l12.711724 38.488276h35.310345l-70.620689-190.675862z m-12.711724 128.176551l27.542069-79.095172 27.188966 79.095172zM2716.071724 755.994483l-38.135172-81.213793H2641.213793l57.555862 112.286896v78.388966h33.897931v-78.388966l0.353104-0.353103 57.555862-111.933793h-37.075862l-37.428966 81.213793z" fill="#089fe8" p-id="31018"></path></svg>-->
<!-- </el-radio>-->
<el-radio-group v-model="payType">
<el-radio label="2" v-if="language==0" border>
<!-- 微信-->
<svg t="1709002960407" class="icon" viewBox="0 0 3152 1024" version="1.1"
......@@ -60,8 +90,7 @@
fill="#595757" p-id="24749"></path>
</svg>
</el-radio>
<el-radio label="4" v-if="language==1" border>
<el-radio label="3" v-if="language==1" border>
<!-- paypal-->
<svg t="1709002828937" class="icon" viewBox="0 0 4220 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="22654" width="94" height="40">
......@@ -105,7 +134,8 @@
</div>
<div class="tip text-center text-danger" v-if="language==0">
支付后不要关闭此窗口,等待确认支付成功.
若长时间未收到支付成功提醒,请刷新页面</div>
若长时间未收到支付成功提醒,请刷新页面
</div>
<div class="tip text-center text-danger" v-else>
After payment, do not close this window and wait for confirmation of successful payment.
<br/>
......@@ -114,19 +144,32 @@
</div>
</div>
<div class="text-center mt20">
<el-row class="mt20" align="middle" justify="center">
<el-col :span="24" class="text-center">
<el-button v-if="!hideconfirmbtn" type="primary" @click="goPay" round class="btn-lineG w200px">
{{ language==0?'确定':'Submit' }}</el-button>
{{ language == 0 ? '确定' : 'Submit' }}
</el-button>
<el-button round @click="unsubscribe" v-if="form.viewStatus == '5'"> 退订</el-button>
<el-button link class="underline" @click="cancel" v-if="form.viewStatus == '0'" disabled> 取消订单</el-button>
</el-col>
</el-row>
</div>
</div>
</el-card>
<el-card class="mb60" v-if="form.payStatus == '3'">
<div v-if="form.payStatus == '3'">
<div class="text-center">
<el-icon color="#32B16C" size="80"><SuccessFilled /></el-icon>
<p class="text-success">{{ language==0?'支付成功':'successful!' }}</p>
<h3 class="wePrice">{{ language==0?'¥':'€' }}{{form.totalFee || 0}}</h3>
<el-icon color="#32B16C" size="80">
<SuccessFilled/>
</el-icon>
<p class="text-success">{{ language == 0 ? '支付成功' : 'successful!' }}</p>
<h3 class="wePrice">{{ language == 0 ? '¥' : '€' }}{{ form.totalFee || 0 }}</h3>
</div>
</div>
</el-card>
</div>
......@@ -137,7 +180,9 @@
:sub-title="language==0?'请确认订单号是否正确':'Please confirm if the order number is correct'"
>
<template #extra>
<el-button type="primary" @click="goHome" class="btn-lineG w200px" round>{{ language==0?'返回首页':'Home' }}</el-button>
<el-button type="primary" @click="goHome" class="btn-lineG w200px" round>
{{ language == 0 ? '返回首页' : 'Home' }}
</el-button>
</template>
</el-result>
</div>
......@@ -148,9 +193,11 @@
import {Search} from "@element-plus/icons-vue"
import {getCurrentInstance, ref} from 'vue'
import {onMounted} from "@vue/runtime-core"
import {useRoute,useRouter} from "vue-router"
import {useRoute, useRouter} from "vue-router"
import * as booking from "@/apiPc/booking"
import * as match from "@/apiPc/match"
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
const {proxy} = getCurrentInstance()
const route = useRoute()
const router = useRouter()
......@@ -161,34 +208,19 @@ const payType = ref('2')
const orderId = ref(route.query.orderId)
const matchId = ref()
const groupId = ref()
import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row";
import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row";
import SignInfoTable from "@/viewsPc/match/components/signInfo-table"
import ZuTable from "@/viewsPc/match/components/zu-table";
import useUserStore from "@/store/modules/user";
import FileUpload from "@/components/FileUpload";
import {useStorage} from "@vueuse/core/index";
import {ElMessage} from "element-plus";
const isLogin = ref(false)
const language= useStorage('language',0)
const signInfoList = ref([])
const zuTableList = ref([])
const language = useStorage('language', 0)
const totalFee = ref('')
const wePayCodeUrl = ref('')
const form = ref({})
const voucherObj = ref([])
const myMemberTable = ref([])
const upForm = ref({
orderId:orderId.value
})
const errorBox = ref(false)
const hideconfirmbtn = ref(false)
const insuranceFeeTotal = ref(0)
const serviceFeeTotal = ref(0)
const zuQuery = ref({
cptId: matchId.value,
groupId: groupId.value
})
const user = useUserStore().user
console.log(route.query.orderId)
// 1763462073870237698
......@@ -196,169 +228,92 @@ getData()
if (useUserStore().user) {
isLogin.value = true
}
onMounted(() => {
if (language.value == 0) {
payType.value = '2'
} else {
payType.value = '3'
}
})
function getData() {
return match.getMyOrderDetail({orderId:orderId.value}).then(res => {
totalFee.value = res.data.totalFee
return booking.getRoomBilldetailbyId({orderId: orderId.value}).then(res => {
totalFee.value = res.data.total
form.value = res.data
form.value.payTypeArr = res.data.payType.split(',')
matchId.value = form.value.cptId
groupId.value = form.value.groupId || 0
zuQuery.value.groupId = groupId.value
zuQuery.value.cptId = matchId.value
if(isLogin.value){
getSignList()
if(user.utype=='1'){
getMyMemberTable()
}
}
}).catch(err=>{
form.value.messageObj = JSON.parse(form.value.message)
form.value.extJsonObj = JSON.parse(form.value.extJson)
matchId.value = form.value.extJsonObj?.activeId
}).catch(err => {
console.log(err)
errorBox.value = true
})
}
function getMyMemberTable() {
match.getPerPersonList({cptId: matchId.value, searchLabels: '1,2,3,4,5,6'}, user.userId).then(res => {
myMemberTable.value = res.rows
})
}
function upRR() {
if(voucherObj.value.length==0){
ElMessage.warning(language.value==0?'请上传凭证':'Please upload the voucher')
return
}
upForm.value.voucher = voucherObj.value[0].url
match.upReceipt(upForm.value).then(res=>{
getData()
})
}
function getSignList() {
match.getMySignInfoList(zuQuery.value).then(res => {
insuranceFeeTotal.value = 0
serviceFeeTotal.value = 0
signInfoList.value = res.data?.singleData || []
zuTableList.value = res.data?.zuData || []
for(var s of signInfoList.value){
insuranceFeeTotal.value = insuranceFeeTotal.value + Number(s.insuranceFee)
}
for(var z of zuTableList.value){
serviceFeeTotal.value = serviceFeeTotal.value + Number(z.project.serviceFee)
}
}).catch(err=>{
if(isLogin.value){
router.push({name:'myMatch'})
return
}
})
}
function goHome() {
router.push('/')
}
function changePaytype() {
hideconfirmbtn.value = false
wePayCodeUrl.value = ''
if(handle) {
clearTimeout(handle)
handle=null
}
}
function goPay(){
if(payType.value=='2' && form.value.payTypeArr.indexOf('2')>-1){
match.createWePay({orderId:orderId.value}).then(res=>{
function goPay() {
if (payType.value == '2') {
match.createWePay({orderId: orderId.value}).then(res => {
wePayCodeUrl.value = res.data
hideconfirmbtn.value = true
startforGetData()
})
} else if(payType.value=='2' && form.value.payTypeArr.indexOf('2')==-1){
ElMessage.warning(language.value == 0 ? '请选择支付方式' : 'Please select payment method')
return
}
if(payType.value=='4'){
match.createPalPay({orderId:orderId.value}).then(res=>{
if(res.data){
location.href=res.data
if (payType.value == '3') {
match.createPalPay({orderId: orderId.value}).then(res => {
if (res.data) {
location.href = res.data
}
})
}
}
let handle;
function startforGetData() {
handle= setTimeout(()=>{
getData().then(()=>{
if( form.value.payTime){
if(handle) {
handle = setTimeout(() => {
getData().then(() => {
if (form.value.payTime) {
if (handle) {
clearTimeout(handle)
handle=null
handle = null
}
}else{
} else {
startforGetData()
}
})
},2000)
}, 2000)
}
function showLogin(){
function showLogin() {
useUserStore().setReLogin()
}
function exportSignList(n) {
var obj = {
cptId: matchId.value,
groupId: groupId.value,
type:n
}
var fileName
if(language.value==0){
if(n==1){
fileName = '参赛人员清单'
}else {
fileName = '设项报名清单'
}
proxy.download('/league/sign/exportCn', {
...obj
}, `${fileName}_${new Date().getTime()}.xlsx`)
} else {
if(n==1){
fileName = 'Participant List'
}else {
fileName = 'LIST OF REGISTERED COMPETITIONS'
}
proxy.download('/league/sign/exportEn', {
...obj
}, `${fileName}_${new Date().getTime()}.xlsx`)
}
}
function exportPdf() {
var obj = {
cptId: matchId.value,
groupId: groupId.value
}
var fileName
if(language.value==0){
fileName = '设项报名清单'
proxy.download('/pdf/exportMySignInfoList', {
...obj
}, `${fileName}_${new Date().getTime()}.pdf`)
} else {
fileName = 'LIST OF REGISTERED COMPETITIONS'
proxy.download('/pdf/exportMySignInfoList', {
...obj
}, `${fileName}_${new Date().getTime()}.pdf`)
}
const cancel = () => {
}
function copy(str) {
navigator.clipboard.writeText(str).then(() => {
ElMessage.success(language.value==0?'复制成功':'Copy successfully')
})
const unsubscribe = () => {
}
</script>
<style scoped lang="scss">
.wePrice{font-size: 24px;font-weight: 400;}
.underline{text-decoration: underline;}
.wePrice {
font-size: 24px;font-family: "DIN Alternate";
font-weight: 400;
}
.el-radio.is-bordered {
height: 40px;
}
.border{border: 1px solid #e1e1e1;}
.border {
border: 1px solid #e1e1e1;
}
.leftboderTT {
font-weight: 600;
font-size: 16px;
......@@ -440,22 +395,60 @@ function copy(str) {
}
}
}
.skeletonBox{position: relative;overflow: hidden;
.btn-lineG{position: absolute;left: 0;right: 0;margin: auto;top: 0;bottom: 0;
width: 200px;box-shadow: 0 0 1000px 500px rgba(255,255,255,0.5);
.skeletonBox {
position: relative;
overflow: hidden;
.btn-lineG {
position: absolute;
left: 0;
right: 0;
margin: auto;
top: 0;
bottom: 0;
width: 200px;
box-shadow: 0 0 1000px 500px rgba(255, 255, 255, 0.5);
}
}
.payImgbox{text-align: center;border: 1px solid #fff;padding: 20px;}
.priceBar{padding: 0 0 20px;
.flex{display: flex;justify-content: right;align-items: baseline;
.item{font-size: 16px;margin-right: 15px;
label{color: #95A1A6;}
span{font-family: DIN Alternate;}
.payImgbox {
text-align: center;
border: 1px solid #fff;
padding: 20px;
}
.priceBar {
padding: 0 0 20px;
.flex {
display: flex;
justify-content: right;
align-items: baseline;
.item {
font-size: 16px;
margin-right: 15px;
label {
color: #95A1A6;
}
span {
font-family: DIN Alternate;
}
}
.size26{font-size: 26px;}
}
.size26 {
font-size: 26px;
}
}
.rre {
color: #333;
font-size: 16px;
margin-top: 10px
}
.rre{color: #333;font-size: 16px;margin-top: 10px}
</style>
......
<template>
<div>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}</h3></div>
<div class="indexTitle">
<h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}
</h3>
<el-button class="fr" type="primary" plain @click="toInvoice">发票开具</el-button>
</div>
<el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0"/>
<div class="pd20">
<div v-for="b in list" class="item">
......@@ -33,9 +38,9 @@
<el-col :lg="8">
<div class="text-right">
<el-button class="mb10" plain round type="primary" @click="goDetail(n)">
<el-button class="mb10" plain round type="primary" @click="goDetail(b)">
{{ language==0?'详情':'Detail' }}</el-button>
<el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" @click="goPay(b)"
<el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" @click="goDetail(b)"
class="mb10" plain round type="primary" >
{{ language==0?'支付':'Pay' }}</el-button>
</div>
......@@ -55,6 +60,7 @@
import {onMounted} from "@vue/runtime-core";
import {useStorage} from "@vueuse/core/index";
import {newbilllist} from "@/apiPc/common";
const router = useRouter()
const language= useStorage('language',0)
const list = ref([])
......@@ -69,6 +75,18 @@ function getList() {
}
})
}
function goDetail(b) {
router.push({
name: 'bookingPay',
query: {
orderId: b.id
}
})
}
function toInvoice(){
}
</script>
<style scoped lang="scss">
......@@ -84,11 +102,11 @@ function getList() {
.bg-blue{background: #00a0e9}
}
.indexTitle {
margin: 20px 0 12px;
margin: 20px 0 12px; overflow: visible;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
.fr{margin: -8px 0 0}
h3 {display: inline-block;
font-size: 16px;
color: var(--el-color-primary);
}
......
......@@ -225,7 +225,7 @@
</div>
</div>
<div>
<div hidden>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">评委介绍</h3>
......
......@@ -220,7 +220,7 @@
</div>
</div>
<div>
<div hidden>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">INTRODUCTION OF ADJUDICATORS</h3>
......@@ -710,7 +710,7 @@ const goGuide = () => {
p{margin: 13px 0 0;}
}
.logobox{background: #fff;height: 180px;border-radius: 10px;margin: 0 0 30px;
img{width: 100%}
img{width: 100%;height: 100%;object-fit: contain;}
}
.swiperPic{background: #F3F1FE;position: relative; height: 100%;
padding: 20px 45px;
......
......@@ -82,7 +82,7 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
target: 'http://192.168.1.27:8081/',
target: 'http://192.168.1.118:8081/',
// target: 'https://dance.itechtop.cn/stage-api',
// target: 'https://wdsfwuxicenter.com/stage-api',
changeOrigin: true,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!