ee263aea by zhangmeng

Merge branch 'order' into dev-order

2 parents d2718611 71087b02
......@@ -47,6 +47,7 @@ export function newbilllist(query) {
params: query
})
}
export function vistorRegister(data) {
return request({
url: `/pcSimpleRegister`,
......@@ -68,3 +69,41 @@ export function upgradeTeam(data) {
data: data
})
}
export function submitMasterApply(data) {
return request({
url: `/league/courseUser`,
method: 'post',
data: data
})
}
export function masterClassList(query) {
return request({
// url: `/league/courseItem/list`,
url: `/league/courseItem/getCoursrItemByCourseId`,
method: 'get',
params: query
})
}
export function getByCard(query) {
return request({
url: `/league/courseUser/getByCard`,
method: 'get',
params: query
})
}
export function getMasterApply(query) {
return request({
url: `/league/courseUser/getCourseByUser`,
method: 'get',
params: query
})
}
export function delByCard(card) {
return request({
url: `/league/courseUser/delByCard?card=${card}`,
method: 'delete'
})
}
......
......@@ -286,7 +286,7 @@ export const rankList = [
tong: '0'
},
{
index: '2',
index: '1',
code: 'md',
name: 'Alexey Glukhov - Anastasia Glazunova',
gj: '摩尔多瓦共和国',
......@@ -296,7 +296,7 @@ export const rankList = [
tong: '0'
},
{
index: '3',
index: '1',
code: 'de',
name: 'Marius-Andrei Balan - Khrystyna Moshenska',
gj: '德国',
......
......@@ -440,12 +440,24 @@ export const constantRoutes = [
meta: { title: 'pay' }
},
{
path: 'payticket',
component: () => import('@/viewsPc/booking/payticket'),
name: 'payticket',
meta: { title: '票务' }
},
{
path: 'payOk',
component: () => import('@/viewsPc/booking/payOk'),
name: 'bookingPayOk',
meta: { title: 'payOk' }
},
{
path: 'payticketOk',
component: () => import('@/viewsPc/booking/payticketOk'),
name: 'payticketOk',
meta: { title: '票务-paypal' }
},
{
path: 'invoice',
component: () => import('@/viewsPc/booking/invoicing'),
name: 'invoice',
......
......@@ -47,8 +47,8 @@
<h3 class="name flex">{{ r.carType }}
<div class="tagbox">
<span class="tag">{{r.carColor}}</span>
<span class="tag" v-show="r.checkOut==1">可送车</span>
<span class="tag" v-show="r.checkIn==1">可接车</span>
<span class="tag" v-show="r.checkOut==1">{{ language==0?'可送车':'drop-off' }}</span>
<span class="tag" v-show="r.checkIn==1">{{ language==0?'可接车':'pick-up' }}</span>
</div>
</h3>
<div class="text-gray mt20">
......
......@@ -3,10 +3,8 @@
<div class="box">
<el-card class="mt30" v-loading="loading">
<el-row v-if="form" class="hotel" align="middle" :gutter="20">
<!-- <el-col :span="6">-->
<!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>-->
<!-- </el-col>-->
<el-col :span="16">
<el-col :lg="16" :sm="24">
<h3 class="esp flex">{{ form?.name }}
</h3>
......@@ -18,25 +16,18 @@
{{ form?.addName }}
</p>
</el-col>
<el-col :lg="8" :sm="24">
<el-carousel height="120px">
<el-carousel-item v-for="item in form.photos?.split(',')" :key="item">
<el-image class="w100 h100" fit="contain" :src="fillImgUrl(item)"/>
</el-carousel-item>
</el-carousel>
</el-col>
</el-row>
<el-empty v-else :image="`/img/order_no.png`" :image-size="228" description=""/>
</el-card>
<div class="mt30">
<el-row :gutter="20">
<el-col :span="10">
<div class="imgbox hotelImg">
<el-image :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover" :preview-src-list="form?.photos?.split(',')"/>
</div>
</el-col>
<el-col :span="14">
<el-row class="h100" :gutter="20">
<el-col :span="8" v-for="(p,index) in form?.photos?.split(',').slice(1,7)" style="height: calc(50% - 10px)">
<div class="imgbox hotelImg"><el-image :src="fillImgUrl(p)" fit="cover" :preview-src-list="form?.photos?.split(',')"/></div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
<el-card class="mt30 mb60">
......@@ -57,8 +48,8 @@
<h3 class="name">{{ r.name }}<span class="text-primary">({{ r.categoryName }})</span></h3>
<el-row :gutter="10">
<el-col :span="24">
<p>{{ language==0?'配送时间':'Delivery time' }}{{ r.psStart }}~{{ r.psEnd }}</p>
<p>{{ language==0?'配送地址':'Delivery address' }}{{ r.address }}</p>
<p>{{ language == 0 ? '配送时间' : 'Delivery time' }}{{ r.psStart }}~{{ r.psEnd }}</p>
<p>{{ language == 0 ? '配送地址' : 'Delivery address' }}{{ r.address }}</p>
</el-col>
</el-row>
</el-col>
......@@ -83,9 +74,9 @@
</template>
<script setup>
import {useRouter,useRoute} from "vue-router";
import {useRouter, useRoute} from "vue-router";
import {ref, onMounted} from "vue";
import { getMenuById} from "@/apiPc/booking"
import {getMenuById} from "@/apiPc/booking"
import {useStorage} from "@vueuse/core/index";
import useUserStore from "@/store/modules/user";
import {fillImgUrl} from "@/utils/ruoyi";
......@@ -118,7 +109,7 @@ function getData() {
var arr = []
m.photosList = []
arr = m.photos?.split(',')
for (var a of arr){
for (var a of arr) {
m.photosList.push(fillImgUrl(a))
}
m.num = 0
......@@ -135,7 +126,7 @@ function getData() {
function goOrder(n) {
if (!user) {
useUserStore().setReLogin()
useUserStore().setVisitor()
return
}
router.push({
......
......@@ -113,6 +113,7 @@ const canOrderNum = ref(0)
const form = ref({
num: 1,
phone: user.phonenumber||'',
total:0
})
const rzRange = ref([])
const rzUserArr = ref([])
......@@ -126,11 +127,7 @@ onMounted(() => {
food.value = JSON.parse(decodeURIComponent(route.query.food))
form.value = food.value
restaurant.value = JSON.parse(decodeURIComponent(route.query.restaurant))
if(language.value == 0){
form.value.total = food.value.foodPrice
} else {
form.value.total = food.value.foodPriceEn
}
form.value.total = 0
console.log(food.value,restaurant.value)
initDays()
const today = dayjs()
......
<template>
<div style="min-height: 100vh">
<div class="box" v-if="!errorBox">
<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 v-if="type == 'hotel'">
<div class="leftboderTT">{{ language == 0 ? '酒店信息' : 'Hotel Information' }}</div>
<div class="border-info mt20">
<h3>{{ form.hotelName }}</h3>
<el-row>
<el-col>
{{ language == 0 ?'地址':'Address' }}
<span v-if="language == 0">{{ form.provinceName }} {{ form.cityName }} {{ form.areaName }} </span>
{{ form.address }}
</el-col>
<el-col>
{{ language == 0 ?'入住信息':'Check-in&Check-out' }}{{ form.messageObj?.roomStayDate }}
</el-col>
<el-col>
{{ language == 0 ?'房间信息':'Room Information' }}{{ form.messageObj?.roomName }}{{ form.roomNum }}
{{ language == 0 ? '间':'rooms' }}
</el-col>
</el-row>
</div>
</div>
<div v-if="type == 'car'">
<div class="leftboderTT">{{ language == 0 ? '路线信息' : 'Car Information' }}</div>
<div class="border-info mt20">
<div class="flex aic">
<h3 class="esp">{{ form.checkIn }}</h3>
<img class="w40px mlr20 " style="height: 40px;" src="@/assets/booking/wf.png"/>
<h3 class="esp">{{ form.checkOut }}</h3>
</div>
</div>
</div>
<div v-if="type == 'food'">
<div class="leftboderTT">{{ language == 0 ? '饭店信息' : 'Restaurant Information' }}</div>
<div class="border-info mt20">
<h3>{{ form.name }}</h3>
<!-- <p>{{ language == 0 ?'地址':'Address' }}{{form.address}}</p>-->
<el-row>
<el-col :lg="12" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'送餐地址':'Delivery Address' }}{{ form.address || '-' }}</div>
</el-col>
<el-col :lg="12" :md="12" :sm="12" :xs="24">
<div>{{ language==0?'送餐时间':'Delivery Time' }}{{form.psStart}} ~ {{ form.psEnd}}</div>
</el-col>
</el-row>
</div>
</div>
<div v-if="type == 'makeUp'">
<div class="leftboderTT">{{ language == 0 ? '化妆信息' : 'Hotel Information' }}</div>
<div class="border-info mt20">
<h3>{{ formInfo.studioName }}</h3>
<el-row>
<el-col>
{{ language == 0 ?'地址':'Address' }}
<span >{{ formInfo.remarks }} </span>
</el-col>
<el-col>
{{ language == 0 ?'套餐':'Package' }}{{ formInfo.mealName }} <span style="margin-left: 40px">{{ language==0?'价格':'Price' }}</span><span class="price">{{language==0? '¥'+formInfo.mealPrice:'€'+ formInfo.mealPriceEn}}</span>
</el-col>
<el-col>
{{ language == 0 ?'套餐说明':'Package Description' }}{{ formInfo.introduction}}
</el-col>
</el-row>
</div>
</div>
<div v-if="type == 'photography'">
<div class="leftboderTT">{{ language == 0 ? '拍摄信息' : 'Shooting Information' }}</div>
<div class="border-info mt20">
<h3>{{ formInfo.shootName }}</h3>
<el-row>
<el-col>
{{ language == 0 ?'地址':'Address' }}
<span >{{ formInfo.remarks }} </span>
</el-col>
<el-col>
{{ language == 0 ?'套餐':'Package' }}{{ formInfo.photoName }} <span style="margin-left: 40px">{{ language==0?'价格':'Price' }}</span><span class="price">{{language==0? '¥'+formInfo.photoPrice:'€'+ formInfo.photoPriceEn}}</span>
</el-col>
<el-col>
{{ language == 0 ?'套餐说明':'Package Description' }}{{ formInfo.introduction}}
</el-col>
</el-row>
</div>
</div>
<div class="leftboderTT">{{ language == 0 ? '预订信息' : 'Booking information' }}</div>
<div class="border-info mt20">
<el-row v-if="type == 'hotel'">
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div>{{ language == 0 ?'入住人':'Check-in Person' }}{{ form.rzUsers }}</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language == 0 ?'联系方式':'Contact Information' }}{{ form.phone }}</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24"></el-col>
</el-row>
<el-row v-if="type == 'car'">
<el-col :lg="12" :md="12" :sm="12" :xs="24" v-if="form.pickUpBo?.revTime">
<h4>{{ language == 0 ?'接站信息':'Pick-up Information' }}</h4>
<div class="st-info">
<div>{{ language == 0 ?'用车时间':'Delivery Time' }}{{ form.pickUpBo.revTime }}</div>
<div class="carLine" v-for="(car,index) in form.pickUpBo.carsList" :key="index">
<div v-if="car.num > 0">
<label>{{car.name}}</label>
<el-tag class="mr10">{{car.carSeat}} {{ language == 0 ?'座 ':'Sets'}}</el-tag>
<el-tag>{{car.carColor}}</el-tag>
</div>
<span v-if="car.num > 0"> {{car.num}}{{ language == 0 ?'辆':'Cars' }} * {{ language == 0 ?'¥':'€' }}{{car.price}}</span>
</div>
<div>{{ language == 0 ?'人数':'People' }}{{form.pickUpBo.count}}</div>
<div>{{ language == 0 ?'航班/火车班次':'Flight/Train' }}{{form.pickUpBo.no}}</div>
<div>{{ language == 0 ?'接机/接站地点':'Pick-up/Drop-off Place' }}{{form.pickUpBo.noAddress}}</div>
<div>{{ language == 0 ?'送达地点':'Delivery Place' }}{{form.pickUpBo.deliveryAddress}}</div>
<div>{{ language == 0 ?'联系人':'Contact Person' }}{{ form.dropOffBo.contacts }}</div>
<div>{{ language == 0 ?'联系电话':'Contact Phone' }}{{ form.dropOffBo.phone }}</div>
<div>{{ language == 0 ?'备注':'Remarks' }}{{ form.dropOffBo.remarks ||'-'}}</div>
</div>
</el-col>
<el-col :lg="12" :md="12" :sm="12" :xs="24" v-if="form.dropOffBo?.revTime">
<h4>{{ language == 0 ?'送站信息':'Drop-off Information' }}</h4>
<div class="st-info">
<div>{{ language == 0 ?'用车时间':'Delivery Time' }}{{ form.dropOffBo.revTime }}</div>
<div class="carLine" v-for="(car,index) in form.dropOffBo.carsList" :key="index">
<div v-if="car.num > 0">
<label>{{car.name}}</label>
<el-tag class="mr10">{{car.carSeat}} {{ language == 0 ?'座 ':'Sets'}}</el-tag>
<el-tag>{{car.carColor}}</el-tag>
</div>
<span v-if="car.num > 0"> {{car.num }}{{ language == 0 ?'辆':'Cars' }} * {{ language == 0 ? '¥' : '€' }}{{car.price}}</span>
</div>
<div>{{ language == 0 ?'人数':'Counts' }}{{ form.dropOffBo.count }}</div>
<div>{{ language == 0 ?'联系人':'Contact Person' }}{{ form.dropOffBo.contacts }}</div>
<div>{{ language == 0 ?'联系电话':'Contact Phone' }}{{ form.dropOffBo.phone }}</div>
<div>{{ language == 0 ?'备注':'Remarks' }}{{ form.dropOffBo.remarks ||'-'}}</div>
</div>
</el-col>
</el-row>
<el-row v-if="type == 'food'">
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div v-for="f in form.messageObj?.foodsList">
<span v-if="f.category==0">{{language==0?'早餐':'Breakfast'}}</span>
<span v-if="f.category==1">{{language==0?'午餐':'Lunch'}}</span>
<span v-if="f.category==2">{{language==0?'晚餐':'Dinner'}}</span>
{{f.name}} * {{f.num}} {{language==0?'份':'pcs'}}
</div>
</el-col>
<el-col :lg="12" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'订餐周期':'Check-in date' }}{{ form.extJsonObj?.dcStart || '-' }} ~ {{form.extJsonObj?.dcEnd|| '-'}}</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'联系人':'Contact Person' }}{{ form.contacts }}</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}{{ form.phone }}</el-col>
<el-col :span="24" >{{ language==0?'备注':'Remarks' }}{{ form.remarks || '-' }}</el-col>
</el-row>
<el-row v-if="type == 'makeUp'">
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'化妆时间':'Makeup time' }}
<!-- {{ dayjs(form.dcStart).format('YYYY-MM-DD') +'&nbsp;' }} ~ {{dayjs(form.dcStart).format('YYYY-MM-DD') +'&nbsp;'}}-->
{{ dayjs(form.dcStart).format('YYYY-MM-DD') +'&nbsp;'+ form.nameStart }} ~ {{dayjs(form.dcStart).format('YYYY-MM-DD') +'&nbsp;'+form.nameEnd}}
</div>
</el-col>
<el-col :lg="12" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'预约数':'Number of appointments' }}{{ form.num }} </div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'联系人':'Contact Person' }}{{ form.contacts }}</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}{{ form.phone }}</el-col>
<el-col :span="24" >{{ language==0?'备注':'Remarks' }}{{ form.remarks }}</el-col>
</el-row>
<el-row v-if="type == 'photography'">
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'拍摄时间':'Makeup time' }}
{{ dayjs(form.dcStart).format('YYYY-MM-DD') +'&nbsp;'+ form.nameStart }} ~ {{dayjs(form.dcStart).format('YYYY-MM-DD') +'&nbsp;'+form.nameEnd}}
</div>
</el-col>
<el-col :lg="12" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'预约数':'Number of appointments' }}{{ form.num }} </div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div class="mb10">{{ language==0?'联系人':'Contact Person' }}{{ form.contacts }}</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}{{ form.phone }}</el-col>
<el-col :span="24" >{{ language==0?'备注':'Remarks' }}{{ form.remarks }}</el-col>
</el-row>
</div>
<el-row justify="space-between" align="middle">
<el-col :lg="12">
<div v-if="form.payDate">{{ language == 0 ? '支付时间' : 'Payment Time' }}{{form.payDate}}</div>
<div class="mt10" v-if="form.payDate">{{ language == 0 ? '支付方式':'Payment Method'}}
<span v-if="form.paymentType=='1'">{{language==0?'微信支付':'WePay'}}</span>
<span v-if="form.paymentType=='3'">PayPal</span>
</div>
</el-col>
<el-col :lg="12" class="result">
<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'||form.viewStatus=='5'">{{ 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 ? '退款审核中' : 'Refund in review' }}
<span class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span>
</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>
</div>
<div class="pd20" v-if="form.viewStatus == '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" >
<el-radio value="2" v-if="language==0" border>
<!-- 微信-->
<svg t="1709002960407" class="icon" viewBox="0 0 3152 1024" version="1.1"
xmlns="http://www.w3.org/2000/svg" p-id="24747" width="94" height="40">
<path
d="M381.998922 630.960647c-4.416173 2.208086-8.832345 3.312129-14.352561 3.312129-12.144474 0-22.080863-7.17628-28.1531-17.66469l-2.208086-4.968194-87.771428-204.247978c-1.104043-2.208086-1.104043-4.416173-1.104043-6.624259 0-9.384367 6.624259-16.560647 15.456603-16.560647 3.312129 0 6.624259 1.104043 9.936388 3.312129l103.780054 78.387062c7.728302 4.968194 16.560647 8.280323 26.497035 8.280324 5.520216 0 11.040431-1.104043 16.560647-3.312129l486.330998-230.192992C819.752022 131.381132 676.226415 60.17035 513.380054 60.17035 248.409704 59.618329 32.017251 250.61779 32.017251 486.883019c0 128.069003 64.586523 244.545553 166.15849 322.932614 7.728302 6.072237 13.248518 16.560647 13.248518 27.601079 0 3.312129-1.104043 7.17628-2.208086 10.488409-7.728302 32.017251-20.976819 84.459299-20.97682 86.667386-1.104043 3.312129-2.208086 8.280323-2.208086 13.248517 0 9.384367 6.624259 16.560647 15.456604 16.560647 3.312129 0 6.624259-1.104043 8.832345-3.312129l104.884097-65.138545c7.728302-4.968194 16.560647-8.280323 25.392992-8.280323 4.416173 0 9.936388 1.104043 14.35256 2.208086 49.129919 15.456604 102.676011 23.736927 157.326146 23.736927 265.522372 0 481.362803-191.551482 481.362803-427.816711 0-71.210782-19.872776-139.109434-54.650135-198.175741L385.863073 628.752561l-3.864151 2.208086z"
fill="#09BB07" p-id="24748"></path>
<path
d="M1398.822642 381.998922c-9.384367 19.320755-20.424798 38.641509-32.017251 57.962264v263.866307h-31.465229V485.226954c-13.248518 18.216712-27.049057 34.225337-40.297574 48.025876-3.864151-7.17628-14.352561-23.736927-20.424798-30.361186 34.777358-33.673315 71.210782-82.803235 93.843666-131.933153l30.361186 11.040431z m-8.280324-91.63558c-22.632884 36.985445-59.066307 78.939084-91.635579 105.98814-4.416173-7.17628-13.248518-19.320755-19.320755-25.945013 29.809164-23.736927 62.378437-61.274394 78.939083-92.187601l32.017251 12.144474z m181.615094 289.811321c1.656065 7.728302 6.072237 19.320755 8.832345 24.84097-55.754178 37.537466-66.242588 46.369811-72.866846 54.650135-1.656065-7.728302-8.280323-22.080863-12.696496-28.705121 4.968194-3.312129 12.696496-10.48841 12.696496-28.705121v-54.098114h-60.17035v27.049057c0 38.641509-7.728302 91.083558-42.505661 128.069003-4.416173-7.17628-16.560647-19.320755-22.632884-23.184906 29.809164-31.465229 34.225337-72.866846 34.225337-105.436119v-54.098113h118.684636v82.251213l36.433423-22.632884z m123.100809-176.094879c-9.384367 73.970889-23.184906 136.349326-48.025876 187.687332 16.560647 36.433423 39.193531 66.242588 67.346631 83.355256-7.17628 6.072237-17.112668 18.216712-22.632884 27.049057-25.945013-18.216712-46.369811-45.265768-62.930459-78.939084-20.424798 32.017251-45.81779 59.066307-78.939083 81.699191-3.864151-6.624259-13.248518-19.872776-19.872776-25.392992 36.985445-22.632884 64.034501-52.99407 83.907277-89.979514-12.696496-34.777358-22.080863-73.418868-28.705121-115.372507-4.968194 11.040431-10.48841 22.632884-16.560647 31.465229-3.864151-4.416173-10.48841-13.248518-17.112668-20.424798v5.520216h-154.014017v-29.809165h154.014017v9.384367c24.84097-49.129919 37.537466-118.684636 44.713746-191.551483l31.465229 4.968195c-3.864151 31.465229-8.280323 61.274394-13.800539 90.531536h96.051752v29.809164h-14.904582z m-142.973585 22.632884h-145.181671v-110.404312h24.84097v82.251213h35.32938V278.770889h26.497035v119.78868h33.673316V316.308356h25.392992v110.404312z m55.202156-22.632884c-1.656065 6.624259-3.312129 12.696496-4.416172 18.768734 6.072237 46.369811 14.904582 91.083558 28.1531 130.277088 16.560647-43.057682 26.497035-91.63558 32.569272-149.045822h-56.3062zM1882.393531 289.259299c-10.48841 31.465229-24.288949 62.378437-39.193531 91.63558v324.036657h-32.017251V437.201078c-13.800539 22.632884-29.257143 42.50566-44.161725 60.170351-3.312129-7.728302-13.248518-24.288949-19.320754-32.017251 41.953639-45.265768 80.043127-114.820485 103.780053-184.927224l30.913208 8.832345z m288.707278 65.690566v29.257143h-294.779515v-29.257143h294.779515z m-267.730459 199.831806h235.713208v147.941779h-30.913208v-16.560647h-174.438814v18.216712h-30.361186v-149.597844z m231.297035-104.332075H1909.994609v-28.1531h224.672776v28.1531zM1909.994609 486.883019h224.672776v28.1531H1909.994609v-28.1531z m23.736927 96.603773V656.90566h174.438814v-73.418868h-174.438814z m81.699192-231.297035c-6.072237-16.560647-20.424798-43.057682-32.017251-61.826415l29.257143-12.144474c13.248518 19.320755 27.601078 44.161725 34.225337 60.722372l-31.465229 13.248517zM2586.221024 468.114286c-26.497035 63.48248-69.002695 111.508356-122.548787 147.941779 50.785984 25.945013 110.956334 43.609704 180.511051 52.442048-7.728302 8.280323-16.560647 23.184906-21.528841 33.673316-75.074933-11.592453-139.661456-32.569272-192.655525-64.034502-57.962264 32.017251-125.308895 52.99407-195.415634 66.794609-3.312129-9.384367-12.696496-25.392992-19.320754-33.121293 66.242588-10.48841 129.173046-28.1531 183.271159-55.202157-44.161725-32.017251-78.939084-72.866846-103.780054-123.65283l10.48841-3.864151h-49.12992v-34.225337h155.670081V383.654987h-176.6469v-34.225337h176.6469V278.770889h35.32938v70.658761h177.750944v34.225337h-177.750944v71.210781H2555.859838l7.176281-1.656064 23.184905 14.904582z m-255.033962 20.976819c23.184906 43.609704 56.858221 80.043127 100.467925 108.748248 44.161725-28.1531 80.043127-63.48248 104.332075-108.748248h-204.8zM2834.630728 292.571429c-13.800539 34.777358-30.361186 69.554717-49.129919 101.571967v308.580054h-34.225337V447.689488c-14.904582 20.976819-31.465229 40.297574-46.921833 56.306199-4.416173-7.728302-14.904582-25.945013-21.528841-34.225337 47.473854-45.265768 91.63558-115.924528 118.132614-188.239353l33.673316 11.040432z m270.490566 123.65283h-58.514286v240.12938c0 25.945013-7.728302 36.985445-24.84097 41.953639-18.216712 5.520216-49.129919 6.072237-99.915903 5.520215-1.656065-8.832345-8.280323-24.84097-13.248518-34.225337 39.193531 1.656065 77.283019 1.656065 88.32345 1.104043 10.48841-1.104043 14.352561-3.864151 14.352561-14.35256V416.224259h-187.687332v-34.225337h187.687332V283.739084h34.777359v97.707816h58.514285v34.777359z m-184.375202 178.854986c-13.800539-28.705121-43.609704-78.939084-67.346631-115.924528l29.809164-13.800539c24.288949 35.881402 55.202156 84.459299 70.106739 112.612399l-32.569272 17.112668z"
fill="#595757" p-id="24749"></path>
</svg>
</el-radio>
<el-radio value="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">
<path
d="M3249.722604 229.409369h-232.537679c-15.641548 0-29.197556 11.470468-32.325865 27.112016l-93.849287 595.421589c-2.08554 11.470468 7.299389 21.898167 18.769857 21.898167h118.875764c11.470468 0 20.855397-8.342159 21.898167-18.769858l27.112016-168.928717c2.08554-15.641548 15.641548-27.112016 32.325866-27.112016h72.99389c153.287169 0 240.879837-74.03666 263.820774-221.06721 10.427699-63.608961 0-114.704684-29.197556-150.158859-31.283096-38.582485-89.678208-58.395112-167.885947-58.395112z m27.112016 216.89613c-12.513238 83.421589-76.1222 83.421589-137.645621 83.421589h-35.454175l25.026476-155.372709c1.04277-9.384929 9.384929-16.684318 18.769858-16.684318h15.641547c41.710794 0 81.336049 0 102.191447 23.983707 12.513238 14.598778 15.641548 35.454175 11.470468 64.651731z"
fill="#009CDE" p-id="22655"></path>
<path
d="M1594.84684 229.409369h-232.537678c-15.641548 0-29.197556 11.470468-32.325866 27.112016l-93.849287 595.421589c-2.08554 11.470468 7.299389 21.898167 18.769857 21.898167h110.533605c15.641548 0 29.197556-11.470468 32.325866-27.112017l25.026476-160.586558c2.08554-15.641548 15.641548-27.112016 32.325866-27.112016h72.99389c153.287169 0 240.879837-74.03666 263.820774-221.06721 10.427699-63.608961 0-114.704684-29.197556-150.158859-31.283096-38.582485-89.678208-58.395112-167.885947-58.395112z m27.112016 216.89613c-12.513238 83.421589-76.1222 83.421589-137.645621 83.421589h-35.454175l25.026476-155.372709c1.04277-9.384929 9.384929-16.684318 18.769858-16.684318h15.641548c41.710794 0 81.336049 0 102.191446 23.983707 12.513238 14.598778 15.641548 35.454175 11.470468 64.651731zM2288.288795 443.177189h-111.576375c-9.384929 0-17.727088 7.299389-18.769857 16.684318l-5.213849 31.283096-7.299389-11.470469c-23.983707-34.411405-77.164969-46.924644-131.389002-46.924643-123.046843 0-227.323829 92.806517-248.179226 223.152749-10.427699 64.651731 4.171079 127.217923 41.710794 171.014257 34.411405 39.625255 82.378819 56.309572 139.731161 56.309572 99.063136 0 153.287169-63.608961 153.287169-63.608961l-5.21385 31.283096c-2.08554 11.470468 7.299389 21.898167 18.769858 21.898167h100.105906c15.641548 0 29.197556-11.470468 32.325866-27.112017l60.480652-380.610998c2.08554-10.427699-6.256619-21.898167-18.769858-21.898167z m-154.329939 216.896131c-10.427699 63.608961-61.523422 106.362525-125.132383 106.362525-32.325866 0-58.395112-10.427699-75.079429-30.240326-16.684318-19.812627-22.940937-46.924644-17.727088-78.207739 10.427699-62.566191 61.523422-107.405295 124.089613-107.405295 31.283096 0 57.352342 10.427699 74.03666 30.240326 17.727088 20.855397 25.026477 47.967413 19.812627 79.250509z"
fill="#003087" p-id="22656"></path>
<path
d="M3943.164559 443.177189h-111.576375c-9.384929 0-17.727088 7.299389-18.769857 16.684318l-5.21385 31.283096-7.299389-11.470469c-23.983707-34.411405-77.164969-46.924644-131.389002-46.924643-123.046843 0-227.323829 92.806517-248.179226 223.152749-10.427699 64.651731 4.171079 127.217923 41.710795 171.014257 34.411405 39.625255 82.378819 56.309572 139.73116 56.309572 99.063136 0 153.287169-63.608961 153.28717-63.608961l-5.21385 31.283096c-2.08554 11.470468 7.299389 21.898167 18.769858 21.898167h100.105906c15.641548 0 29.197556-11.470468 32.325866-27.112017l60.480651-380.610998c2.08554-10.427699-6.256619-21.898167-18.769857-21.898167z m-154.329939 216.896131c-10.427699 63.608961-61.523422 106.362525-125.132383 106.362525-32.325866 0-58.395112-10.427699-75.07943-30.240326-16.684318-19.812627-22.940937-46.924644-17.727087-78.207739 10.427699-62.566191 61.523422-107.405295 124.089613-107.405295 31.283096 0 57.352342 10.427699 74.03666 30.240326 17.727088 20.855397 25.026477 47.967413 19.812627 79.250509z"
fill="#009CDE" p-id="22657"></path>
<path
d="M2880.582074 443.177189h-111.576375c-10.427699 0-20.855397 5.213849-27.112016 14.598778l-154.329939 227.323829-65.694501-217.9389c-4.171079-13.556008-16.684318-22.940937-31.283096-22.940937h-109.490835c-13.556008 0-22.940937 13.556008-18.769857 26.069247l123.046843 360.79837-115.747454 162.672098c-9.384929 12.513238 0 30.240326 15.641548 30.240326h111.576375c10.427699 0 20.855397-5.213849 26.069246-13.556008l371.226069-535.983707c11.470468-13.556008 2.08554-31.283096-13.556008-31.283096z"
fill="#003087" p-id="22658"></path>
<path
d="M4074.553561 245.050916l-94.892057 605.849288c-2.08554 11.470468 7.299389 21.898167 18.769857 21.898167h95.934827c15.641548 0 29.197556-11.470468 32.325866-27.112017l93.849287-595.421588c2.08554-11.470468-7.299389-21.898167-18.769857-21.898167h-107.405296c-10.427699 1.04277-18.769857 7.299389-19.812627 16.684317z"
fill="#009CDE" p-id="22659"></path>
<path
d="M782.529121 259.649695c12.513238-79.250509 0-133.474542-42.753564-182.484726C691.808143 22.940937 606.301015 0 496.81018 0H178.765374c-21.898167 0-41.710794 16.684318-44.839104 38.582485L0.451728 879.05499c-3.12831 16.684318 10.427699 31.283096 27.112016 31.283096h196.040733l-13.556008 85.507128c-2.08554 14.598778 9.384929 27.112016 23.983707 27.112016h165.800407c19.812627 0 36.496945-14.598778 39.625255-33.368635l2.08554-8.342159 31.283095-198.126273 2.08554-10.427699c3.12831-19.812627 19.812627-33.368635 39.625255-33.368635h25.026476c160.586558 0 285.718941-64.651731 322.215886-253.393075 15.641548-79.250509 7.299389-144.94501-33.368635-190.826884-12.513238-13.556008-28.154786-26.069246-45.881874-35.454175"
fill="#009CDE" p-id="22660"></path>
<path
d="M782.529121 259.649695c12.513238-79.250509 0-133.474542-42.753564-182.484726C691.808143 22.940937 606.301015 0 496.81018 0H178.765374c-21.898167 0-41.710794 16.684318-44.839104 38.582485L0.451728 879.05499c-3.12831 16.684318 10.427699 31.283096 27.112016 31.283096h196.040733l49.010184-312.830958-1.04277 9.384929c3.12831-21.898167 21.898167-38.582485 44.839104-38.582485h93.849287c183.527495 0 327.429735-74.03666 369.140529-289.89002l3.12831-18.769857"
fill="#012169" p-id="22661"></path>
<path
d="M326.838693 260.692464c2.08554-13.556008 10.427699-23.983707 21.898167-30.240326 5.213849-2.08554 11.470468-4.171079 16.684318-4.171079h250.264766c29.197556 0 57.352342 2.08554 82.378819 6.256619 7.299389 1.04277 14.598778 2.08554 20.855397 4.17108 7.299389 1.04277 13.556008 3.12831 19.812627 5.213849l9.384929 3.128309c12.513238 4.171079 23.983707 9.384929 34.411405 14.598779 12.513238-79.250509 0-133.474542-42.753564-182.484726C691.808143 22.940937 606.301015 0 496.81018 0H178.765374c-21.898167 0-41.710794 16.684318-44.839104 38.582485L0.451728 879.05499c-3.12831 16.684318 10.427699 31.283096 27.112016 31.283096h196.040733l49.010184-312.830958L326.838693 260.692464z"
fill="#003087" p-id="22662"></path>
</svg>
</el-radio>
</el-radio-group>
<div v-if="payType == '2'&&wePayCodeUrl">
<div class="payImgbox flexCenter">
<div>
<img width="260" class="border" :src="wePayCodeUrl"/>
<img class="mt20" src="@/assets/img/sm.png"/>
</div>
<div class="ml20">
<img height="360" src="@/assets/img/rr.jpg"/>
</div>
</div>
<div class="tip text-center text-danger" v-if="language==0">
支付后不要关闭此窗口,等待确认支付成功.
若长时间未收到支付成功提醒,请刷新页面
</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/>
If you have not received a notification of successful payment for a long time,
please refresh the page
</div>
</div>
</div>
</div>
<el-row class="mt20 mb60" align="middle" justify="center">
<el-col :span="24" class="text-center">
<el-button v-if="!hideconfirmbtn&&form.viewStatus == '0'" type="primary" @click="goPay" round class="btn-lineG w200px">
{{ language == 0 ? '确定' : 'Submit' }}
</el-button>
<el-button round @click="unsubscribe" v-if="form.viewStatus == '5'">{{ language==0?'退订':'Unsubscribe' }}</el-button>
<el-button link class="underline" @click="cancel" v-if="form.viewStatus == '0'">
{{ language==0?'取消订单':'Cancel Order' }}
</el-button>
</el-col>
</el-row>
<div v-if="form.payDate&&form.viewStatus=='1'">
<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 ? '¥' : '€' }}{{ totalFee || 0 }}</h3>
</div>
</div>
</el-card>
</div>
<div class="box" v-if="errorBox">
<el-result
icon="error"
:title="language==0?'未找到对应订单':'No corresponding order found'"
: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>
</template>
</el-result>
</div>
</div>
</template>
<script setup>
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 * as booking from "@/apiPc/booking"
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
const {proxy} = getCurrentInstance()
const route = useRoute()
const router = useRouter()
const matchInfo = ref({})
const approved = ref(true)
const tableData = ref([])
const payType = ref('2')
const orderId = ref(route.query.orderId)
const matchId = ref()
const groupId = ref()
import useUserStore from "@/store/modules/user";
import FileUpload from "@/components/FileUpload";
import {useStorage} from "@vueuse/core/index";
import {ElMessage} from "element-plus";
import {
cancelOrder,
cancelOrder2,
getCarBilldetailbyId,
getFoodBilldetailbyId,
getMealOrderInfoByLogex, getPhotoOrderInfo, getPhotoOrderInfoByLogex
} from "@/apiPc/booking";
import dayjs from 'dayjs'
import {delPerson} from "@/api/exam/person";
const isLogin = ref(false)
const language = useStorage('language', 0)
const totalFee = ref('')
const wePayCodeUrl = ref('')
const form = ref({})
const formInfo=ref({})
const type = ref('')
const errorBox = ref(false)
const hideconfirmbtn = ref(false)
const user = useUserStore().user
if (useUserStore().user) {
isLogin.value = true
}
onMounted(() => {
if (language.value == 0) {
payType.value = '2'
} else {
payType.value = '3'
}
if(route.query.type){
type.value = route.query.type
}
if(route.query.orderType){
switch (route.query.orderType){
case '0':
type.value = 'hotel'
break
case '1':
type.value = 'car'
break
case '2':
type.value = 'food'
break
case '3':
type.value = 'makeUp'
break
case '4':
type.value = 'photography'
break
}
}
getData()
})
function getData() {
if(type.value=='car') {
return booking.getCarBilldetailbyId({orderId: orderId.value}).then(res => {
form.value = res.data
if(language.value==0){
totalFee.value = res.data.total
} else {
totalFee.value = res.data.totalEn
}
}).catch(err => {
console.log(err)
errorBox.value = true
})
}
if(type.value=='food') {
return booking.getFoodBilldetailbyId({orderId: orderId.value}).then(res => {
if(language.value==0){
totalFee.value = res.data.total
} else {
totalFee.value = res.data.totalEn
}
form.value = res.data
form.value.messageObj = JSON.parse(form.value.message)
form.value.extJsonObj = JSON.parse(form.value.extJson)
console.log(form.value)
})
}
if(type.value=='hotel') {
return booking.getRoomBilldetailbyId({orderId: orderId.value}).then(res => {
if(language.value==0){
totalFee.value = res.data.total
} else {
totalFee.value = res.data.totalEn
}
form.value = res.data
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
})
}
if(type.value=='makeUp') {
MakeUpOrder()
// MakeUpIno()
}
if(type.value=='photography') {
photographyOrder()
// photographyInfo()
}
console.log(payType.value)
}
function goHome() {
router.push('/')
}
function goPay() {
if (payType.value == '2') {
booking.createWePay({orderId: orderId.value}).then(res => {
wePayCodeUrl.value = res.data
hideconfirmbtn.value = true
startforGetData()
})
}
if (payType.value == '3') {
booking.createPalPay({orderId: orderId.value}).then(res => {
if (res.data) {
location.href = res.data
}
})
}
}
let handle;
function startforGetData() {
handle = setTimeout(() => {
if (type.value=='photography'){
photographyOrder().then(res=>{
if (form.value.payDate) {
if (handle) {
clearTimeout(handle)
handle = null
}
} else {
startforGetData()
}
})
}else if(type.value=='makeUp'){
MakeUpOrder().then(res=>{
if (form.value.payDate) {
if (handle) {
clearTimeout(handle)
handle = null
}
} else {
startforGetData()
}
})
}else{
getData().then( res => {
if (form.value.payDate) {
if (handle) {
clearTimeout(handle)
handle = null
}
} else {
startforGetData()
}
})
}
}, 2000)
}
function showLogin() {
useUserStore().setReLogin()
}
function MakeUpOrder(){
return booking.getMealOrderInfo({orderId: orderId.value}).then(res => {
form.value=res.data
totalFee.value=language.value==0?form.value.total:form.value.totalEn
MakeUpIno()
console.log(res)
}).catch(err => {
console.log(err)
errorBox.value = true
})
}
function MakeUpIno(){
booking.getMealOrderInfoByLogex({asmId: form.value.asmId}).then(res=>{
formInfo.value=res.data
console.log(res)
})
.catch((e) => {
console.log(e)
errorBox.value = true
})
}
function photographyOrder(){
return booking.getPhotoOrderInfo({orderId: orderId.value}).then(res => {
form.value=res.data
totalFee.value=language.value==0?form.value.total:form.value.totalEn
photographyInfo()
}).catch(err => {
console.log(err)
errorBox.value = true
})
}
function photographyInfo(){
booking.getPhotoOrderInfoByLogex({aspId: form.value.aspId}).then(res=>{
formInfo.value=res.data
})
// .catch((e) => {
// console.log(e)
// errorBox.value = true
// })
}
const cancel = () => {
//取消订单
proxy.$modal.confirm(language.value == 0 ? '确定取消订单吗 ?' :`Are you sure to cancel the order?`).then(() => {
return cancelOrder2(orderId.value).then(res=>{
getData()
ElMessage({
message: language.value == 0?'操作成功':'Successful operation!',
type: 'success'
})
})
})
}
const unsubscribe = () => {
proxy.$modal.confirm(language.value == 0 ?`确定退款吗 ?`:'Are you sure to refund?').then(() => {
return cancelOrder(orderId.value).then(res=>{
getData()
ElMessage({
message: language.value == 0?'已提交退款,请等待审核!':'Refund has been submitted, please wait for review!',
type: 'success'
})
})
})
}
</script>
<style scoped lang="scss">
.st-info{line-height: 2;font-size: 14px;}
.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;
}
.leftboderTT {
font-weight: 600;
font-size: 16px;
color: #453DEA;
}
.bg-lineg {
height: 40px;
line-height: 40px;
font-size: 18px;
text-align: center;
}
.table {
width: 100%;
max-width: 1000px;
margin: 20px auto;
.head {
background: #EFF2F7;
height: 50px;
font-size: 16px;
font-weight: 400;
}
th {
background: #FAFBFD;
font-size: 14px;
border-bottom: 1px solid #E5E5E5;
border-right: 1px solid #E5E5E5;
}
td {
border-bottom: 1px solid #E5E5E5;
border-right: 1px solid #E5E5E5;
padding: 10px;
}
&.table-border {
border-top: 1px solid #E5E5E5;
border-left: 1px solid #E5E5E5;
}
}
.text-gray {
font-weight: 400;
font-size: 12px;
color: #929AA0;
}
.size12 {
font-size: 12px;
}
.result {
font-size: 22px;
.flex {
display: flex;
align-items: center;
font-weight: 500;
img {
margin-right: 10px
}
}
.priceb {
color: #7B7F83;
font-size: 16px;
text-align: right;
line-height: 50px;
span {
font-weight: bold;
font-size: 22px;
font-family: DIN Alternate;
color: #EB6100;
}
}
}
.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;
}
}
}
.size26 {
font-size: 26px;
}
}
.rre {
color: #333;
font-size: 16px;
margin-top: 10px
}
.price{
color:orange;
}
</style>
<template>
<div>
<div class="box">
<el-card class="mb60 mt30" v-loading="loading">
<div class="text-center mt30">
<el-icon color="#32B16C" size="80">
<SuccessFilled/>
</el-icon>
<p class="text-success mb20">{{ language == 0 ? '支付成功' : 'successfully!' }}</p>
<el-button type="primary" class="btn-lineG mb60" @click="goBillDetail" round>
{{ language == 0 ? '返回订单详情' : 'Return order details' }}
</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import {ref} from "vue";
import {useRoute, useRouter} from "vue-router";
import {onMounted} from "@vue/runtime-core";
import {callbackPalPay} from "@/apiPc/booking";
import {useStorage} from "@vueuse/core/index";
const route = useRoute()
const router = useRouter()
const language= useStorage('language',0)
const orderId = ref(route.query.orderId)
const type = ref('')
const loading = ref(false)
onMounted(() => {
var code = decodeURIComponent(orderId.value)
console.log(code)
loading.value = true
callbackPalPay(code).then(res => {
loading.value = false
type.value = res.data.orderType
})
})
function goBillDetail() {
router.push({
name: 'bookingPay',
query: {
orderId: route.query.orderId,
orderType: type.value
}
})
}
</script>
<style scoped lang="scss">
</style>
......@@ -143,6 +143,13 @@ const menus3 = ref([
picUrl1: '/img/nav_29.png',
picUrl2: '/img/nav_29_dwn.png',
isActive: false
},
{
name: language.value==0?'票务预订':'Ticket Reservation',
routeName: 'seat_order',
picUrl1: '/img/c7.png',
picUrl2: '/img/c7.png',
isActive: false
}
])
const menusPersonal = ref([
......@@ -174,6 +181,13 @@ const menusPersonal = ref([
picUrl2: '/img/nav_29_dwn.png',
isActive: false
},
{
name: language.value==0?'票务预订':'Ticket Reservation',
routeName: 'seat_order',
picUrl1: '/img/c7.png',
picUrl2: '/img/c7.png',
isActive: false
},
{
name: language.value==0?'系统消息':'System messages',
routeName: 'mySms',
......
......@@ -5,81 +5,130 @@
destroy-on-close
>
<div class="boxInvitation pd20">
<el-steps :active="activeStep" align-center class="mb20">
<el-step :title="language==0?'报名须知':'Notice'" />
<el-step :title="language==0?'填写信息':'Information'" />
<el-step :title="language==0?'选择课程':'Courses'" />
</el-steps>
<div v-if="activeStep==0">
<div class="mb60 xzRich" style="max-height: 50vh;overflow: auto">
<div v-if="language==0" style="width: 300px;margin: auto"><br/>
培训地点:无锡君来世尊酒店<br/>
详细地址:江苏省 无锡市 滨湖区 和风路111号<br/>
报到时间:2024年7月14日13:30 -17:00<br/>
联系人:蒋璐<br/>
联系电话:15961580050<br/>
</div>
<div v-else style="width: 400px;margin: auto"><br/>
Training Camp venue:Worldhotel Grand Juna Wuxi<br/>
Address:No.111 Hefeng Road, Binhu District, Wuxi, Jiangsu<br/>
Check-in:From 13:30 to 17:00 on July 14, 2024.<br/>
Contact Person:Dean Ding<br/>
Tel: +86 19951486130<br/>
</div>
</div>
<div class="text-center">
<el-button type="primary" v-if="courseList.length>0" class="btn-lineG" round @click="setActive(1)">{{ language == 0 ? '下一步' : 'NEXT' }}</el-button>
<el-button type="primary" class="btn-lineG" round v-else @click="close">{{language==0?'暂无可报课程':'No courses available for reporting'}}</el-button>
</div>
</div>
<div v-if="activeStep==1">
<el-form :model="form" :rules="rules" ref="iformRef" label-position="right" :label-width="language==0?'80px':'150px'">
<el-form-item :label="language==0?'姓名':'Name'" required prop="name">
<el-input v-model="form.name"/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" required prop="gender">
<el-radio-group v-model="form.gender">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality">
<el-select filterable v-model="form.nationality" style="width: 100%;">
<el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth">
<el-date-picker
v-model="form.birth"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="email">
<el-input v-model="form.email" type="email"/>
</el-form-item>
<el-form-item :label="language==0?'证件号':'ID No.'" required prop="passportNo">
<el-input v-model="form.passportNo" @blur="checkCard"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy">
<image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
</el-form-item>
<!-- <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival">-->
<!-- <el-date-picker-->
<!-- v-model="form.arrival" placeholder="YYYY-MM-DD"-->
<!-- style="width: 100%;"-->
<!-- type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'出发日期':'Date of Departure'" required prop="departure">-->
<!-- <el-date-picker-->
<!-- v-model="form.departure"-->
<!-- style="width: 100%;" placeholder="YYYY-MM-DD"-->
<!-- type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'备注':'Remark '">
<el-input type="textarea" v-model="form.remark" rows="3"/>
</el-form-item>
<div class="text-center pd20" v-if="showR">
<img class="mauto" src="@/assets/dance/ok.png"/>
<!-- <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>-->
<h4 class="text-center" v-if="language == 0">
我们已收到您的邀请函申请,并将尽快处理。请耐心等待。
</h4>
<h4 v-else>
Your invitation letter application has been received,<br/>
and we will process it as soon as possible.
<br/>
Please be patient while waiting.
</h4>
<el-button size="large" type="primary" @click="conti" round class="btn-lineG">
{{ language == 0 ? '继续提交' : 'Continue To Submit' }}
</el-button>
<div class="text-center">
<el-button size="large" @click="setActive(0)" round plain type="primary">{{ language == 0 ? '上一步' : 'PREV' }}</el-button>
<el-button type="primary" size="large" @click="checkApplyCourse(2)" round class="btn-lineG">
{{ language == 0 ? '下一步' : 'NEXT' }}
</el-button>
</div>
</el-form>
</div>
<div v-if="activeStep==2">
<div class="text-center pd20" v-if="showR">
<img class="mauto" src="@/assets/dance/ok.png"/>
<h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>
<h4 class="text-center" v-if="language == 0">
我们已收到您的申请,并将尽快处理。请耐心等待。
</h4>
<h4 v-else>
Your application has been received,<br/>
and we will process it as soon as possible.
<br/>
Please be patient while waiting.
</h4>
</div>
<div v-else>
<div class="tip text-danger mb20" v-if="language==0">*选择参加的课程(最少一项,最多两项)</div>
<div class="tip text-danger mb20" v-else>*Select the courses to enroll in (at least one, no more than two)</div>
<el-checkbox-group size="large" v-model="form.courseId" @change="courseChange">
<div v-for="c in courseList" class="mb20">
<el-checkbox :value="c.id" border class="w100" :disabled="(form.courseId?.length>=2&&form.courseId.indexOf(c.id)==-1)||disChoose||(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)">
{{language == 0 ?c.name:c.nameEn}}
<el-tag class="ml20" v-if="(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)" type="danger" effect="dark">{{language == 0 ?'已报满':'Already full'}}</el-tag>
</el-checkbox>
</div>
</el-checkbox-group>
<el-form :model="form" :rules="rules" ref="iformRef" label-position="right" label-width="150px" v-else>
<el-form-item :label="language==0?'姓名':'Name'" required prop="name">
<el-input v-model="form.name"/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" required prop="gender">
<el-radio-group v-model="form.gender">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality">
<el-select filterable v-model="form.nationality" style="width: 100%;">
<el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth">
<el-date-picker
v-model="form.birth"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="email">
<el-input v-model="form.email" type="email"/>
</el-form-item>
<el-form-item :label="language==0?'护照号':'Passport No.'" required prop="passportNo">
<el-input v-model="form.passportNo"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy">
<image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
</el-form-item>
<el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival">
<el-date-picker
v-model="form.arrival" placeholder="YYYY-MM-DD"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'出发日期':'Date of Departure'" required prop="departure">
<el-date-picker
v-model="form.departure"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'备注':'Remark '">
<el-input type="textarea" v-model="form.remark" rows="3"/>
</el-form-item>
<div class="text-center">
<el-button type="primary" size="large" @click="submit" round class="btn-lineG">
<el-button size="large" @click="setActive(1)" round plain type="primary">{{ language == 0 ? '上一步' : 'PREV' }}</el-button>
<el-button type="primary" v-if="!disChoose" size="large" @click="submit" round class="btn-lineG w200px">
{{ language == 0 ? '提交' : 'SUBMIT' }}
</el-button>
</div>
</div>
</el-form>
</div>
</div>
</el-dialog>
......@@ -92,6 +141,7 @@ import {nextTick} from "@vue/runtime-core";
import {ElMessage, ElMessageBox} from "element-plus";
import {addInvitation, countryList} from "@/apiPc/match";
import ImageUpload from "@/components/ImageUpload";
import {masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard} from "@/apiPc/common";
const {proxy} = getCurrentInstance()
const language = useStorage('language', 0)
......@@ -100,8 +150,11 @@ const form = ref({
})
const show = ref(false)
const showR = ref(false)
const disChoose = ref(false)
const title = ref('')
const activeStep = ref(0)
const countrys = ref([])
const courseList = ref([])
const cptId = ref('')
const rules = ref(
{
......@@ -117,8 +170,9 @@ const rules = ref(
const open = (params) => {
console.log(params)
show.value = true
title.value = params.title
title.value = language.value==0?'亚洲青少年体育舞蹈公益课':'Asian Youth DanceSport Training Camp'
cptId.value = params.cptId
getCourse()
}
defineExpose({open})
watch(show, (value) => {
......@@ -134,15 +188,49 @@ watch(show, (value) => {
// proxy.$refs['dialogRef'].clearValidate()
})
})
getCountryList()
function getCountryList() {
countryList().then(res => {
countrys.value = res.data
function getCourse() {
// '1777256058082189313'
masterClassList({cptId:cptId.value}).then(res=>{
courseList.value = res.data
})
}
function setActive(n) {
activeStep.value = n
}
function courseChange(e){
console.log('已选',e)
}
function checkApplyCourse(n) {
getMasterApply({card:form.value.passportNo}).then(res=>{
if(res.data?.length>0){
form.value.courseId = []
for(var n of res.data){
form.value.courseId.push(n.itemId)
}
ElMessageBox.confirm(
language.value == 0 ? '您已提交过信息,是否更新?' : 'You have submitted the information, do you want to update?',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '是' : 'Confirm',
cancelButtonText: language.value == 0 ? '否' : 'Cancel',
type: 'warning'
}).then(()=>{
//删除原记录
delByCard(form.value.passportNo).then(res=>{
form.value.courseId = []
disChoose.value = false
to2()
})
}).catch(()=>{
disChoose.value = true
to2()
})
} else {
to2()
}
})
const submit = () => {
}
function to2() {
proxy.$refs.iformRef.validate(valid => {
if (form.value.email.indexOf('@') == -1) {
if (language.value == 0) {
......@@ -153,34 +241,73 @@ const submit = () => {
return
}
if (valid) {
ElMessageBox.confirm(
language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
type: 'warning'
}).then(() => {
form.value.cptId = cptId.value
if (Array.isArray(form.value.passportCopy)) {
form.value.passportCopy = form.value.passportCopy[0].url
}
addInvitation(form.value).then((res) => {
ElMessage.success(language.value == 0 ?'提交成功':'Successfully!')
showR.value = true
})
})
setActive(2)
}
})
}
function checkCard() {
getByCard({card:form.value.passportNo}).then(res=>{
if(res.data){
form.value = res.data
} else {
form.value.courseId = []
}
})
}
getCountryList()
function getCountryList() {
countryList().then(res => {
countrys.value = res.data
})
}
const submit = () => {
if (form.value.courseId.length == 0) {
if (language.value == 0) {
ElMessage.warning('请至少选择一门课程')
} else {
ElMessage.warning('Please select at least one course')
}
return
}
ElMessageBox.confirm(
language.value == 0 ? '确认提交吗?' : 'Are you sure to submit?',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
type: 'warning'
}).then(() => {
// form.value.cptId = cptId.value
if (Array.isArray(form.value.passportCopy)) {
form.value.passportCopy = form.value.passportCopy[0].url
}
// form.value.courseId = form.value.courseId.toString()
form.value.itemIds = form.value.courseId.toString()
delete form.value.courseId
submitMasterApply(form.value).then((res) => {
ElMessage.success(language.value == 0 ?'提交成功':'Successfully!')
showR.value = true
}).catch(()=>{
})
})
}
const conti = () => {
showR.value = false
form.value = {
gender: '0'
}
}
const close = () =>{
show.value = false
}
</script>
<style scoped>
.xzRich{line-height: 2;font-size: 14px;}
.boxInvitation {
width: 90%;
margin: auto
......
<template>
<div>
<index-Ch v-if="language ==0"/>
<index-En v-else/>
<index-Ch v-if="language ==0" @pop="openMaster"/>
<index-En v-else @pop="openMaster"/>
<div v-if="showgg" class="fixed_gg">
<!--天气-->
<el-icon class="cclose" @click.stop="showgg=false"><circle-close /></el-icon>
......@@ -59,6 +59,8 @@
</div>
</el-dialog>
</div>
<dialog-master-class ref="masterClassRef"/>
</div>
</template>
......@@ -67,10 +69,12 @@
import IndexCh from '/src/viewsPc/index'
import IndexEn from '/src/viewsPc/index_en'
import WeatherIcon from '@/viewsPc/components/weatherIcon'
import DialogMasterClass from '@/viewsPc/components/masterClass'
import {useStorage} from "@vueuse/core/index";
import {ref} from "vue";
import {getWeather} from "@/apiPc/webSite";
import {getCurrentInstance} from "@vue/runtime-core";
const {proxy} = getCurrentInstance()
const showgg = ref(true)
const language = useStorage('language', 0)
......@@ -91,7 +95,14 @@ function init(){
const popWeather = () => {
weatherdialog.value = true
}
const openMaster = (params) => {
console.log(params)
var obj = {
title:'大师课申请',
cptId:params.cptId
}
proxy.$refs['masterClassRef'].open(obj)
}
</script>
<style scoped lang="scss">
......
......@@ -93,6 +93,8 @@
<download/>
</el-icon>
</a>
<!-- <el-button type="primary" @click="popMaster">青少年公益课</el-button>-->
<a class="zn-btn ml20 btn-q" @click="popMaster">青少年公益课</a>
</div>
</el-col>
<el-col :sm="24" :lg="14">
......@@ -359,7 +361,7 @@ import HomeQuick from '@/viewsPc/components/homeQuick'
import HomeCalendar from '@/viewsPc/components/homeCalendar'
import {ref, nextTick, onMounted, watch} from 'vue'
import {getCurrentInstance} from '@vue/runtime-core'
import {getHomePage, getNewsListById, getNewsList, getWeather} from '@/apiPc/webSite'
import {getHomePage, getNewsListById, getNewsList} from '@/apiPc/webSite'
import {useRouter} from 'vue-router'
import {rankList} from '@/assets/js/data'
import _ from 'lodash'
......@@ -375,14 +377,7 @@ const navigationPic = ref({
})
const router = useRouter()
const {proxy} = getCurrentInstance()
const bannerVideo = ref(null)
const isPlay = ref(false)
const canPrev = ref(false)
const canNext = ref(false)
const activeRankName = ref(0)
const weatherObj = ref({
forecast:[]
})
const emit = defineEmits(['pop'])
const time = ref(0)
const personList = ref([
{ name: 'Wolfgang Eliasch', pp: '拉丁舞裁判长 奥地利', src: '/img/1.png' },
......@@ -400,12 +395,10 @@ const news = ref([])
const notice = ref([])
const display = ref([])
const scores = ref([])
const nowscores = ref([])
const livelist = ref([])
const matchData = ref({})
const maList = ref([])
const loading = ref(false)
const weatherdialog = ref(false)
const picList = ref([])
onMounted(() => {
......@@ -491,9 +484,6 @@ const goMatch = (n) => {
path: `/match/list/${n.id}`
})
}
const popWeather = () => {
weatherdialog.value = true
}
const goGuide = () => {
router.push({
......@@ -503,6 +493,13 @@ const goGuide = () => {
}
})
}
const popMaster = () => {
var params = {
cptId:matchData.value.id
}
emit('pop',params)
}
</script>
<style scoped lang="scss">
......@@ -945,4 +942,32 @@ const goGuide = () => {
}
}
}
:deep(.btn-q) {
//background: #FFFFFF;
//font-size: 18px;
//color: #453DEA;
//border-radius: 23px;
//padding: 10px 20px;
//display: inline-flex;
//align-items: center;
padding: 20px 40px;
font-size: 20px;
align-items: center;
overflow: hidden;
background: url(/src/assets/dance/time_bg.png) no-repeat center !important;
background-size: 100% 100%;
bottom: 40%;
display: flex;
flex-wrap: nowrap;
color: #fff !important;
box-sizing: inherit;
}
.btn-q:hover{
box-shadow: 0 0 20px #453DEA;
border-radius: 100px;
background: linear-gradient(-90deg, #8623FC, #453DEA) !important;
}
</style>
......
......@@ -85,10 +85,15 @@
<el-col :sm="24" :lg="10">
<div class="bgbg">
<h1 style="color: #fff">{{matchData?.name}}</h1>
<a class="zn-btn" @click="goGuide">
GUIDELINE
<el-icon><download /></el-icon>
</a>
<div>
<a class="zn-btn" @click="goGuide">
GUIDELINE
<el-icon><download /></el-icon>
</a>
<a class="zn-btn ml20" @click="popMaster">Junior &Youth Camp <el-icon><Edit /></el-icon>
</a>
</div>
</div>
</el-col>
<el-col :sm="24" :lg="14">
......@@ -385,6 +390,7 @@ const navigationPic = ref({
})
const router = useRouter()
const { proxy } = getCurrentInstance()
const emit = defineEmits(['pop'])
const time = ref(0)
const personList = ref([
......@@ -498,6 +504,12 @@ const goGuide = () => {
}
})
}
const popMaster = () => {
var params = {
cptId:matchData.value.id
}
emit('pop',params)
}
</script>
<style scoped lang="scss">
......@@ -516,7 +528,7 @@ const goGuide = () => {
p{margin: 0;height: 40px;line-height: 20px;display: flex;align-items: center;}
}
border-radius: 15px;
.zn-btn{background: #FFFFFF;
.zn-btn{background: #FFFFFF;text-transform: uppercase;
font-size: 18px; width: fit-content;
color: #453DEA;
border-radius: 23px;padding: 10px 20px;display: inline-flex;align-items: center;}
......
......@@ -83,7 +83,6 @@ export default defineConfig(({ mode, command }) => {
},
'/dev-api': {
// target: 'http://192.168.1.118:8081/',
// target: 'https://jijin.wtwuxicenter.com/stage-api',
target: 'https://jijin.wtwuxicenter.com/stage-api',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!