1418e350 by zhangmeng

世锦赛

1 parent c46d2134
......@@ -101,6 +101,12 @@ export const constantRoutes = [
meta: {title: '舞蹈节'}
},
{
path: 'operation',
component: () => import('@/viewsPc/about/operation'),
name: 'operation',
meta: {title: '操作手册'}
},
{
path: 'culture',
component: () => import('@/viewsPc/about/culture'),
name: 'culture',
......@@ -211,7 +217,7 @@ export const constantRoutes = [
name: 'personListHasKind',
meta: {title: '人员列表'}
}
]
},
{
......@@ -680,7 +686,7 @@ export const constantRoutes = [
name: 'payOk',
meta: {title: '支付成功'}
},
{
path: 'commitDone/:orderId',
component: () => import('@/viewsPc/match/commitDone'),
......
<template>
<div>
<div class="mt20"/>
<div class="box">
<el-card>
<el-row>
<el-col>
<div class="infoPart pd20">
<h3 class="leftboderTT">{{ language == 0 ? '操作手册' : 'The Manual' }}</h3>
<br>
<div style="padding-left: 30px">
<el-link v-for="v in fileList" :href="fillImgUrl(v.url)" :underline="false" class="link" target="_blank"
type="primary">
<span style="border-bottom: 1px solid var(--el-color-primary)">
{{ v.name }}
<el-icon style="margin-left: 10px;position: relative;bottom: -2px">
<Download/>
</el-icon>
</span>
</el-link>
</div>
<div class="content">
<div v-html="content"></div>
</div>
</div>
</el-col>
</el-row>
</el-card>
<div v-if="false" class="indexTitle">
<h3 class="leftboderTT">{{ language == 0 ? '联系我们' : 'CONTACT US' }}</h3>
</div>
<div v-if="false" class="mapBox mb20">
<div class="content">
<div v-for="(item,index) in contact" :class="index==0?'phone':index==1?'address':'email'">
<h4>{{ language == 1 ? item.ename : item.name }}</h4>
<p>{{ language == 0 ? item.value : item.evalue }}</p>
</div>
</div>
</div>
</div>
<div style="height: 50px"></div>
</div>
</template>
<script setup>
import {useStorage} from "@vueuse/core";
import {onMounted, ref} from "vue";
import {getppInfo} from "@/apiPc/match";
import {useRoute} from "vue-router";
import {fillImgUrl} from "/@/utils/ruoyi";
const route = useRoute()
const language = useStorage('language', 0)
const activeIndex = ref(0)
const content = ref('')
const fileList = ref([])
onMounted(() => {
if (route.query.activeIndex) {
activeIndex.value = route.query.activeIndex
}
getMenuList()
})
const getMenuList = () => {
getppInfo('10000005').then(res => {
if (language.value == 0) {
content.value = res.data.contextZh
fileList.value = JSON.parse(res.data.fileZh)
} else {
content.value = res.data.contextEh
fileList.value = JSON.parse(res.data.fileEn)
}
})
}
</script>
<style lang="scss" scoped>
.link {
font-size: 16px;
display: block;
margin-bottom: 10px;
}
.leftNav {
ul {
border-right: 2px solid #E5E5E5;
padding: 0 20px 0 0;
}
li {
margin: 30px 0;
padding: 10px;
text-align: right;
border-radius: 2px;
position: relative;
font-weight: 600;
text-transform: uppercase;
font-size: 18px;
cursor: pointer;
background: linear-gradient(90deg, rgba(134, 35, 252, 0.1), rgba(69, 61, 234, 0.1));
}
li::after {
content: '';
position: absolute;
background: #898989;
width: 8px;
height: 8px;
border-radius: 50%;
right: -29px;
border: 4px solid #fff;
outline: 2px solid #898989;
box-sizing: content-box;
top: 0;
bottom: 0;
margin: auto;
}
li.active {
color: #fff;
background: #000;
&::after {
outline: 2px solid #000;
background: #000;
}
}
}
.infoPart {
.leftboderTT {
font-size: 20px;
color: var(--el-color-primary);
}
}
.content {
margin: 20px 0 0;
text-indent: 2em;
line-height: 1.8;
font-weight: 400;
font-size: 16px;
color: #29343C;
img {
max-width: 100%;
margin: 20px auto;
display: block;
}
h4 {
text-indent: 0
}
}
.mapBox {
background: url("@/assets/zhinan/map.png") no-repeat right;
height: 375px;
background-size: cover;
padding: 1px;
position: relative;
display: flex;
.content {
background: #fff;
width: 60%;
left: 40px;
padding: 30px;
text-indent: 0;
line-height: 1;
position: absolute;
height: 90%;
top: 0;
bottom: 0;
margin: auto;
}
div {
padding-left: 60px;
}
.phone {
background: url("@/assets/dance/map01.png") no-repeat left;
background-size: 30px;
}
.address {
background: url("@/assets/dance/map02.png") no-repeat left;
background-size: 30px;
margin: 50px 0;
}
.email {
background: url("@/assets/dance/map03.png") no-repeat left;
background-size: 30px;
}
h4 {
margin: 0;
font-size: 16px;
color: #AAAAAA;
}
p {
margin: 13px 0 0;
}
}
</style>
......@@ -6,7 +6,7 @@
<div class="bg-lineg">{{ language == 0 ? '酒店预约下单' : 'Hotel booking order' }}</div>
</div>
<!-- {{room}}-->
<el-row class="pd20" :gutter="20">
<el-row :gutter="20" class="pd20">
<el-col :lg="14">
<div class="border-info">
<h3>{{ hotelName }}</h3>
......@@ -24,51 +24,60 @@
<span v-show="room.addBedFlag=='1'"> | {{ language == 0 ? '允许加床' : 'Extra bed' }}</span>
</div>
</div>
<div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
<div class="border-rr mt20 pd20">
<el-form :model="form" :label-width="language == 0 ?'100':'160'" :rules="rules" ref="formRef">
<el-form ref="formRef" :label-width="language == 0 ?'100':'160'" :model="form" :rules="rules">
<el-form-item :label="language==0?'入住日期':'Check-in&Check-out'" required>
<el-date-picker
@change="getDaysBetween"
v-model="rzRange"
type="daterange"
:disabled-date="disabledDateRZ"
:clearable="false"
:disabled-date="disabledDateRZ"
:placeholder="language==0?'选择日期':'Select date'"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"/>
<div class="tip" v-if="lform.hqStart">{{ language==0?'可订日期':'Available date' }}{{ lform.hqStart.slice(0, 10) }} ~ {{ lform.hqEnd.slice(0, 10) }}</div>
type="daterange"
value-format="YYYY-MM-DD"
@change="getDaysBetween"/>
<div v-if="lform.hqStart" class="tip">{{
language == 0 ? '可订日期' : 'Available date'
}}{{ lform.hqStart.slice(0, 10) }} ~ {{ lform.hqEnd.slice(0, 10) }}
</div>
<!-- :picker-options="pickerOptions"-->
</el-form-item>
<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]">
<el-form-item :label="language==0?'房间数':'Rooms'" prop="roomNum" required>
<el-input-number v-model="form.roomNum" :max="canOrderNum" :min="0" @change="changeRoomNum"/>
<div v-if="rzRange?.[1]" class="red ml20">
<span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span>
<span v-else>{{ canOrderNum }} Remaining rooms</span>
</div>
<div class="tip" v-if="language==1">If you need to make a hotel reservation, please fill in the full names of all required persons when booking the hotel. (For two or more people, please use ',')</div>
<div v-if="language==1" class="tip">If you need to make a hotel reservation, please fill in the full
names of all required persons when booking the hotel.
<!-- (For two or more people, please use ',')-->
(For two people, please separate the names with a comma ',)
</div>
</el-form-item>
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="language==1?`Room${index+1}`:`房间${index+1}`" required>
<el-input v-model="rzUserArr[index]" :placeholder="language==0?'请完整填写该房间所有的入住人姓名,以“,”符号分隔':'please fill in the name of the actual check-in person'"/>
<el-form-item v-for="(n,index) in form.roomNum" :key="index"
:label="language==1?`Room${index+1}`:`房间${index+1}`" required>
<el-input v-model="rzUserArr[index]"
:placeholder="language==0?'请完整填写该房间所有的入住人姓名,以“,”符号分隔':'please fill in the name of the actual check-in person'"/>
</el-form-item>
<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
v-for="item in ddDateArr"
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in ddDateArr"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone">
<el-form-item :label="language==0?'联系电话':'Contact phone'" prop="phone" required>
<el-input v-model="form.phone"/>
</el-form-item>
<div v-if="room.addBedFlag=='1'">
<el-form-item :label="language==0?'是否加床':'Extra bed'" required>
<el-radio-group v-model="form.isAddbed" @change="changeAddBed">
......@@ -77,12 +86,12 @@
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.isAddbed=='1'" :label="language==0?'加床张数':'Extra bed num'" required>
<el-input-number v-model="form.addNum" :min="0" :max="form.roomNum" @change="changeBed"/>
<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-input-number v-model="form.addNum" :max="form.roomNum" :min="0" @change="changeBed"/>
<div v-if="form.isAddbed=='1'" class="tip">*
<span v-if="language == 0">一个房间最多加一张床</span>
<span v-else>A room can only add one bed</span>
</div>
</el-form-item>
</div>
</el-form>
......@@ -92,55 +101,62 @@
<div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div>
<div class="border-rr mt20 pd20 ccitemBox">
<label> {{ language == 0 ? '房费' : 'Room fee' }}
<span class="fr" v-if="language==0">{{
<span v-if="language==0" class="fr">{{
language == 0 ? '¥' : '$'
}}{{ (room.roomPrice * form.roomNum * choseRooms.length).toFixed(2) }}</span>
<span class="fr" v-else>{{
<span v-else class="fr">{{
language == 0 ? '¥' : '$'
}}{{ (room.roomPriceEn * form.roomNum * choseRooms.length).toFixed(2) }}</span>
</label>
<div class="ccitem" v-for="(c, index) in choseRooms" :key="index" v-show="form.roomNum>0">
<div v-for="(c, index) in choseRooms" v-show="form.roomNum>0" :key="index" class="ccitem">
{{ c }}
<span v-if="language==0">{{ form.roomNum }}*{{ language == 0 ? '¥' : '$' }}{{ room.roomPrice }}</span>
<span v-else>{{ form.roomNum }}*{{ language == 0 ? '¥' : '$' }}{{ room.roomPriceEn }}</span>
</div>
<label v-if="form.isAddbed=='1'&&form.addNum>0">{{ language == 0 ? '加床费' : 'Extra bed fee' }}
<span class="fr" v-if="language==0">{{
<span v-if="language==0" class="fr">{{
language == 0 ? '¥' : '$'
}}{{ (room.bedPrice * form.addNum * choseRooms.length).toFixed(2) }}</span>
<span class="fr" v-else>{{
<span v-else class="fr">{{
language == 0 ? '¥' : '$'
}}{{ (room.bedPriceEn * form.addNum * choseRooms.length).toFixed(2) }}</span>
</label>
<div v-if="form.isAddbed=='1'&&form.addNum>0" class="ccitem" v-for="(c, index) in choseRooms" :key="index">
<div v-for="(c, index) in choseRooms" v-if="form.isAddbed=='1'&&form.addNum>0" :key="index"
class="ccitem">
{{ c }}
<span>{{ form.addNum }}*{{ language == 0 ? '¥' : '$' }}{{ language == 0 ?room.bedPrice:room.bedPriceEn}}</span>
<span>{{ form.addNum }}*{{
language == 0 ? '¥' : '$'
}}{{ language == 0 ? room.bedPrice : room.bedPriceEn }}</span>
</div>
<label>{{ language == 0 ? '共计' : 'Total' }}<span
class="fr bigMoney">{{ language == 0 ? '¥' : '$' }}{{ money }}</span></label>
class="fr bigMoney">{{ language == 0 ? '¥' : '$' }}{{ money }}</span></label>
</div>
</el-col>
</el-row>
</el-card>
<el-card class="mt30 mb30">
<el-row justify="space-between" align="middle">
<el-row align="middle" justify="space-between">
<el-col :span="12">
<label>{{ language == 0 ? '共计金额' : 'Total' }}
<span class=" text-warning"> {{ language == 0 ? '¥' : '$' }}<span class="bigMoney">{{ money }}</span></span>
<span class=" text-warning"> {{ language == 0 ? '¥' : '$' }}<span class="bigMoney">{{
money
}}</span></span>
</label>
</el-col>
<el-col :span="12" class="text-right">
<el-button type="primary" class="btn-lineG w200px" size="large" round @click="submit">{{ language == 0 ?'确认付款':'Book Now' }}</el-button>
<el-button class="btn-lineG w200px" round size="large" type="primary" @click="submit">
{{ language == 0 ? '确认付款' : 'Book Now' }}
</el-button>
</el-col>
</el-row>
</el-card>
<div style="height: 60px;"></div>
</div>
</div>
</template>
......@@ -151,8 +167,9 @@ import {ref, reactive, onMounted} from "vue";
import {useStorage} from "@vueuse/core/index";
import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel} from "@/apiPc/booking"
import dayjs from 'dayjs'
import {ElMessage,ElMessageBox} from "element-plus";
import {ElMessage, ElMessageBox} from "element-plus";
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const language = useStorage('language', 0)
const router = useRouter()
......@@ -165,8 +182,8 @@ const form = ref({
isAddbed: '0',
roomNum: 0,
addNum: 0,
ddDate:'14:00',
phone: user?.phonenumber||'',
ddDate: '14:00',
phone: user?.phonenumber || '',
})
const rzRange = ref([])
const rzUserArr = ref([])
......@@ -255,7 +272,11 @@ const ddDateArr = ref([
}
])
const rules = ref({
phone: { required: true, message: language.value==0? '请输入联系电话':"Please enter a contact number", trigger: 'blur' }
phone: {
required: true,
message: language.value == 0 ? '请输入联系电话' : "Please enter a contact number",
trigger: 'blur'
}
})
let usedays = 0
......@@ -265,15 +286,16 @@ onMounted(() => {
console.log(room.value)
hotelName.value = route.query.hotelName
money.value = 0
rzRange.value=[]
rzRange.value=[route.query.start,route.query.end]
rzRange.value = []
rzRange.value = [route.query.start, route.query.end]
initDays()
getDaysBetween()
// checkreRooms()
})
function initDays() {
getBaseInfoByActiveId(route.params.cptId).then(res=>{
lform.value = res.data
getBaseInfoByActiveId(route.params.cptId).then(res => {
lform.value = res.data
// if(lform.value.hqStart){
// const today = dayjs()
// if(lform.value.hqStart.slice(0,10)<today.format('YYYY-MM-DD')){
......@@ -283,22 +305,24 @@ function initDays() {
// getDaysBetween(rzRange.value)
// }
// console.log(rzRange.value,lform.value.hqStart)
}).catch(err=>{
}).catch(err => {
console.log(err)
})
}
function disabledDateRZ(date) {
//判读今天大与form.value.hqStart
if (lform.value.hqStart) {
const today = dayjs().format('YYYY-MM-DD')
if (lform.value.hqStart < today) {
return !((date.getTime() >= dayjs(today).valueOf())&&(date.getTime() <= dayjs(lform.value.hqEnd).valueOf()))
return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs(lform.value.hqEnd).valueOf()))
} else {
return !((date.getTime() >= dayjs(lform.value.hqStart).valueOf())&&(date.getTime() <= dayjs(lform.value.hqEnd).valueOf()))
return !((date.getTime() >= dayjs(lform.value.hqStart).valueOf()) && (date.getTime() <= dayjs(lform.value.hqEnd).valueOf()))
}
}
// return true
}
function changeRoomNum(e) {
if (form.value.addNum > e) {
form.value.addNum = e
......@@ -307,12 +331,14 @@ function changeRoomNum(e) {
rzUserArr.value.length = e
countMoney()
}
function changeAddBed(e) {
if(e=='0'){
if (e == '0') {
form.value.addNum = 0
}
changeBed()
}
function changeBed() {
countMoney()
}
......@@ -332,28 +358,28 @@ function getDaysBetween(e) {
// console.log('入住时间arr', e, rzRange.value)
// console.log(e)
// console.log(Date.parse(rzRange.value[0]))
form.value.roomNum=0
var d1 = Date.parse(rzRange.value?rzRange.value[0]:null)
var d2 = Date.parse(rzRange.value?rzRange.value[1]:null)
form.value.roomNum = 0
var d1 = Date.parse(rzRange.value ? rzRange.value[0] : null)
var d2 = Date.parse(rzRange.value ? rzRange.value[1] : null)
if (d1 == d2) {
usedays = 0
ElMessage.error(language.value == 0 ? '入住时间跨度需大于一天' :'The duration of the stay must be more than one day.')
ElMessage.error(language.value == 0 ? '入住时间跨度需大于一天' : 'The duration of the stay must be more than one day.')
// console.trace()
rzRange.value=[route.query.start,route.query.end]
rzRange.value = [route.query.start, route.query.end]
return
} else {
var days = (d2 - d1) / (1 * 24 * 60 * 60 * 1000);
usedays = days
}
countMoney()
var startTime = getDate(rzRange.value?rzRange.value[0]:null);
var endTime = getDate(rzRange.value?rzRange.value[1]:null);
var startTime = getDate(rzRange.value ? rzRange.value[0] : null);
var endTime = getDate(rzRange.value ? rzRange.value[1] : null);
var dateArr = [];
if (!startTime||!endTime)return;
if (!startTime || !endTime) return;
while ((endTime.getTime() - startTime.getTime()) > 0) {
var year = startTime.getFullYear();
var month = (startTime.getMonth() + 1).toString().length === 1 ? "0" + (parseInt(startTime.getMonth()
.toString(), 10) + 1) : (startTime.getMonth() + 1);
.toString(), 10) + 1) : (startTime.getMonth() + 1);
var day = startTime.getDate().toString().length === 1 ? "0" + startTime.getDate() : startTime.getDate();
dateArr.push(year + "-" + month + "-" + day);
startTime.setDate(startTime.getDate() + 1);
......@@ -379,45 +405,45 @@ function getDate(datestr) {
function countMoney() {
if (language.value == 0) {
money.value = ((room.value.roomPrice * form.value.roomNum * usedays) + (room.value.bedPrice * form.value
.addNum * usedays)).toFixed(2)
.addNum * usedays)).toFixed(2)
} else {
money.value = ((room.value.roomPriceEn * form.value.roomNum * usedays) + (room.value.bedPriceEn * form.value
.addNum * usedays)).toFixed(2)
.addNum * usedays)).toFixed(2)
}
if (money.value == 'NaN') money.value=0.00
if (money.value == 'NaN') money.value = 0.00
}
function submit() {
if(!user){
if (!user) {
useUserStore().setReLogin()
return
}
if(!rzRange.value)return ElMessage.warning(language.value == 0 ? '请选择入住时间' : 'Please select check-in time')
if (!rzRange.value) return ElMessage.warning(language.value == 0 ? '请选择入住时间' : 'Please select check-in time')
if (usedays == 0) {
ElMessage.warning(language.value == 0 ? '入住时间跨度需大于一天' : 'Check-in time must be greater than one day')
return
}
if(form.value.roomNum==0){
if (form.value.roomNum == 0) {
ElMessage.warning(language.value == 0 ? '请选择房间数量' : 'Please select the number of rooms')
return
}
if(!form.value.phone){
if (!form.value.phone) {
ElMessage.warning(language.value == 0 ? '请填写手机号' : 'Please fill in the phone number')
return
}
form.value.rzStart = rzRange.value[0]
form.value.rzEnd = rzRange.value[1]
let arr = []
for (var n of rzUserArr.value) {
if (n == '' || n == undefined) {
// '请填写入住人信息'
// '请填写入住人信息'
ElMessage.warning(language.value == 0 ? '请填写入住人信息' : 'Please fill in the check-in information')
return
} else {
arr.push(n)
......@@ -432,7 +458,7 @@ function submit() {
form.value.roomPhoto = room.value.photo
var str = ''
var str2 = ''
if(language.value==0){
if (language.value == 0) {
if (form.value.addNum && form.value.addNum > 0) {
str = `加床${form.value.addNum}张`
} else {
......@@ -446,7 +472,7 @@ function submit() {
form.value.room = `${form.value.roomNum} 间 · ${usedays}晚 · ${str} · ${str2}`
console.log(form.value.room)
}
if(language.value==1){
if (language.value == 1) {
if (form.value.addNum && form.value.addNum > 0) {
str = `have ${form.value.addNum} extra bed`
} else {
......@@ -460,8 +486,8 @@ function submit() {
form.value.room = `${form.value.roomNum} rooms · ${usedays} night·${str}·${str2}`
console.log(form.value.room)
}
// 提交确认
ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
......@@ -478,9 +504,9 @@ function submit() {
router.push({
name: 'bookingPay',
query: {
orderId:res.data.orderId,
money:res.data.total,
type:'hotel'
orderId: res.data.orderId,
money: res.data.total,
type: 'hotel'
}
})
}
......@@ -491,7 +517,7 @@ function submit() {
</script>
<style scoped lang="scss">
<style lang="scss" scoped>
.bigMoney {
font-size: 36px !important;
font-family: 'DIN Alternate';
......@@ -524,12 +550,12 @@ function submit() {
.ccitemBox {
overflow: auto;
label {
margin: 10px 0;
display: block;
min-height: 30px;
span {
color: #FF8124;
font-family: DIN Alternate;
......@@ -544,12 +570,12 @@ function submit() {
font-size: 15px;
color: #666;
margin: 5px 0 10px;
label {
font-size: 16px;
color: #000;
}
span {
font-size: 13px;
}
......@@ -558,9 +584,16 @@ function submit() {
.red {
color: #FF8124;
}
.tip{font-size: 14px;color: #666;padding: 0 10px;}
.tip {
font-size: 14px;
color: #666;
padding: 0 10px;
}
@media screen and (max-width: 768px) {
.leftboderTT{margin: 30px 0 15px;}
.leftboderTT {
margin: 30px 0 15px;
}
}
</style>
......
<template>
<div>
<index-Ch v-if="language ==0" @pop="openMaster" @pickup="openPickup" @backNumber="openBackNumber" @schSearch="openSchSearch"/>
<index-En v-else @pop="openMaster" @pickup="openPickup" @backNumber="openBackNumber" @schSearch="openSchSearch"/>
<index-Ch v-if="language ==0" @backNumber="openBackNumber" @pickup="openPickup" @pop="openMaster"
@schSearch="openSchSearch"/>
<index-En v-else @backNumber="openBackNumber" @pickup="openPickup" @pop="openMaster" @schSearch="openSchSearch"/>
<div v-if="showgg" class="fixed_gg">
<!--天气-->
<el-icon class="cclose" @click.stop="showgg=false"><circle-close /></el-icon>
<el-icon class="cclose" @click.stop="showgg=false">
<circle-close/>
</el-icon>
<div class="bg-lineg pd20">
<div class="smallToday" @click="popWeather">
<div>
......@@ -15,13 +18,14 @@
<div>
<h3 v-if="language == 0">无锡</h3>
<h3 v-else>WUXI</h3>
<div class="wd_p">{{weatherObj.forecast[0]?.low.slice(2)}}~{{weatherObj.forecast[0]?.high.slice(2)}}</div>
<div class="wd_p">{{ weatherObj.forecast[0]?.low.slice(2) }}~{{ weatherObj.forecast[0]?.high.slice(2) }}
</div>
</div>
</div>
</div>
<el-dialog v-model="weatherdialog" width="540" :close-on-click-modal="true"
style="--el-dialog-padding-primary:0;--el-dialog-border-radius:15px;
--el-dialog-bg-color:transparent;overflow: hidden;">
<el-dialog v-model="weatherdialog" :close-on-click-modal="true" style="--el-dialog-padding-primary:0;--el-dialog-border-radius:15px;
--el-dialog-bg-color:transparent;overflow: hidden;"
width="540">
<div class="bg-lineg pd20">
<div class="weatherbox">
<div class="today">
......@@ -30,9 +34,11 @@
<h1 v-else>WUXI</h1>
</div>
<div>
<div class="wd">{{weatherObj.wendu}}°c</div>
<div class="wd_p">{{weatherObj.forecast[0]?.low.slice(2)}}~{{weatherObj.forecast[0]?.high.slice(2)}}</div>
<div class="week">{{weatherObj.forecast[0]?.week}}</div>
<div class="wd">{{ weatherObj.wendu }}°c</div>
<div class="wd_p">
{{ weatherObj.forecast[0]?.low.slice(2) }}~{{ weatherObj.forecast[0]?.high.slice(2) }}
</div>
<div class="week">{{ weatherObj.forecast[0]?.week }}</div>
</div>
<div>
<div class="type">
......@@ -45,22 +51,30 @@
<div class="type">
<weather-icon :type="n.type||n.wea" :width="32"/>
</div>
<div class="wd" v-if="n.low">{{n.low.slice(2,-1)}}/{{n.high.slice(2)}}</div>
<div class="wd" v-if="n.tem_night">{{n.tem_night}}/{{n.tem_day}}</div>
<div class="week" v-if="language==1">
{{n.week=='星期一'?'Mon':n.week=='星期二'?'Tue':n.week=='星期三'?'Wed':n.week=='星期四'?'Thu':n.week=='星期五'?'Fri':n.week=='星期六'?'Sat':n.week=='星期日'?'Sun':''}}
<div v-if="n.low" class="wd">{{ n.low.slice(2, -1) }}/{{ n.high.slice(2) }}</div>
<div v-if="n.tem_night" class="wd">{{ n.tem_night }}/{{ n.tem_day }}</div>
<div v-if="language==1" class="week">
{{
n.week == '星期一' ? 'Mon' : n.week == '星期二' ? 'Tue' : n.week == '星期三' ? 'Wed' : n.week == '星期四' ? 'Thu' : n.week == '星期五' ? 'Fri' : n.week == '星期六' ? 'Sat' : n.week == '星期日' ? 'Sun' : ''
}}
</div>
<div class="week" v-else>
{{n.week}}
<div v-else class="week">
{{ n.week }}
</div>
<div class="date mt10" v-if="n.ymd">{{n.ymd.slice(5,10)}}</div>
<div class="date mt10" v-else>{{n.date.slice(5,10)}}</div>
<div v-if="n.ymd" class="date mt10">{{ n.ymd.slice(5, 10) }}</div>
<div v-else class="date mt10">{{ n.date.slice(5, 10) }}</div>
</li>
</ul>
</div>
</div>
</el-dialog>
</div>
<div class="operation" @click="handelOperation">{{ language == 0 ? '操作手册' : 'GUIDELINE' }}
<el-icon>
<Download/>
</el-icon>
</div>
<dialog-master-class ref="masterClassRef"/>
<pick-up ref="pickupRef"></pick-up>
<back-number ref="backNumberRef"></back-number>
......@@ -81,72 +95,110 @@ import {useStorage} from "@vueuse/core/index";
import {ref} from "vue";
import {getWeather} from "@/apiPc/webSite";
import {getCurrentInstance} from "@vue/runtime-core";
import {useRouter} from "vue-router";
const {proxy} = getCurrentInstance()
const showgg = ref(false)
const router = useRouter()
const language = useStorage('language', 0)
const weatherObj = ref({
forecast:[]
forecast: []
})
const weatherdialog = ref(false)
// init()
function init(){
getWeather().then(res=>{
function init() {
getWeather().then(res => {
weatherObj.value = JSON.parse(res.data).data
showgg.value = true
}).catch(err=>{
}).catch(err => {
showgg.value = false
})
}
const popWeather = () => {
weatherdialog.value = true
}
const openMaster = (params) => {
console.log(params)
var obj = {
title:'大师课申请',
cptId:params.cptId
title: '大师课申请',
cptId: params.cptId
}
proxy.$refs['masterClassRef'].open(obj)
}
const openPickup= (params) => {
const openPickup = (params) => {
console.log(params)
const obj = {
title:'接送机服务',
cptId:params.cptId
title: '接送机服务',
cptId: params.cptId
}
proxy.$refs['pickupRef'].open(obj)
}
const openBackNumber = (params) => {
console.log(params)
const obj = {
title:'背号查询',
cptId:params.cptId
title: '背号查询',
cptId: params.cptId
}
proxy.$refs['backNumberRef'].open(obj)
}
const openSchSearch = (params) => {
console.log(params)
const obj = {
title:'日程查询',
cptId:params.cptId
title: '日程查询',
cptId: params.cptId
}
proxy.$refs['schSearchRef'].open(obj)
}
function handelOperation() {
router.push('/about/operation')
}
</script>
<style scoped lang="scss">
.poCode{position: fixed;right: 0;top: 40%;background: #fff;padding: 10px 0 0;border-radius: 10px;overflow: hidden;
box-shadow: 0 2px 8px #aaa;z-index: 99;}
<style lang="scss" scoped>
.poCode {
position: fixed;
right: 0;
top: 40%;
background: #fff;
padding: 10px 0 0;
border-radius: 10px;
overflow: hidden;
box-shadow: 0 2px 8px #aaa;
z-index: 99;
}
@media screen and (max-width: 768px) {
:deep(.zn-Box .zn-btn){margin-top: 10px;font-size: 14px}
:deep(.bgbg){ padding: 3% 5% 0!important;
h1 {font-size: 22px;margin:20px 0 0;}
:deep(.zn-Box .zn-btn) {
margin-top: 10px;
font-size: 14px
}
.fixed_gg{
:deep(.bgbg) {
padding: 3% 5% 0 !important;
h1 {
font-size: 22px;
margin: 20px 0 0;
}
}
.fixed_gg {
transform: scale(0.7);
transform-origin: right;
}
}
.operation {
position: fixed;
right: 0;
top: 580px;
color: #fff;
background-color: rgba(0, 0, 0, 0.5);
backdrop-filter: blur(4px);
border-radius: 50px;
padding: 10px 20px;
cursor: pointer;
}
</style>
......
<template>
<el-dialog
v-model="show" title="Visa Invitation Letter" append-to-body close-icon="CircleClose" center
close-on-click-modal destroy-on-close width="1100"
v-model="show" append-to-body center close-icon="CircleClose" close-on-click-modal
destroy-on-close title="Visa Invitation Letter" width="1100"
>
<el-descriptions border>
<el-descriptions-item label="No.">{{ form.id }}</el-descriptions-item>
<el-descriptions-item label="Applicant Type">{{ form.remarks || form.applicatTypeName }}</el-descriptions-item>
<el-descriptions-item label="Invitation Type">{{ form.invitationTypeName }}</el-descriptions-item>
<!-- <el-descriptions-item label="Do you need a Chinese invitation?">{{-->
<!-- form.chinese == '1' ? 'YES' : 'No'-->
<!-- }}-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item label="Do you need a Chinese invitation?">{{-->
<!-- form.chinese == '1' ? 'YES' : 'No'-->
<!-- }}-->
<!-- </el-descriptions-item>-->
<el-descriptions-item label="MNA/Team Name">{{ form.nameEn }}</el-descriptions-item>
<el-descriptions-item label="MNA/Team Address">{{ form.associationAddress }}</el-descriptions-item>
<el-descriptions-item label="Contact Email">{{ form.email }}</el-descriptions-item>
......@@ -25,7 +25,7 @@
</el-link>
</el-descriptions-item>
<el-descriptions-item label="Proof of Employment">
<el-link v-if="form.invitationFile" target="_blank" :href="fillImgUrl(form.invitationFile)" type="primary">
<el-link v-if="form.invitationFile" :href="fillImgUrl(form.invitationFile)" target="_blank" type="primary">
proof of employment
</el-link>
</el-descriptions-item>
......@@ -34,29 +34,31 @@
<!-- <el-divider></el-divider>-->
<br/>
<el-table :data="visaList" border stripe>
<el-table-column prop="passportCopy" label="Passport Copy">
<el-table-column label="Passport Copy" prop="passportCopy">
<template #default="{row}">
<el-image
:src="fillImgUrl(row.passportCopy)"
:preview-src-list="[fillImgUrl(row.passportCopy)]"
:preview-teleported="true"
style="width: 50px;height: 70px"
:preview-src-list="[fillImgUrl(row.passportCopy)]"
:preview-teleported="true"
:src="fillImgUrl(row.passportCopy)"
style="width: 50px;height: 70px"
/>
</template>
</el-table-column>
<el-table-column label="position" align="center" prop="position"/>
<el-table-column label="lastName" align="center" prop="lastName"/>
<el-table-column label="firstName" align="center" prop="fristName"/>
<el-table-column prop="sex" label="Gender" align="center">
<el-table-column align="center" label="Date ofEntrye" prop="entryDate"/>
<el-table-column align="center" label="Date ofDeparture" prop="departureDate"/>
<el-table-column align="center" label="position" prop="position"/>
<el-table-column align="center" label="lastName" prop="lastName"/>
<el-table-column align="center" label="firstName" prop="fristName"/>
<el-table-column align="center" label="Gender" prop="sex">
<template #default="{row}">
{{ row.sex == '0' ? 'M' : 'F' }}
</template>
</el-table-column>
<el-table-column label="nationality" align="center" prop="nationality"/>
<el-table-column label="birthday" align="center" prop="birthday"/>
<el-table-column label="Passport No." align="center" prop="passportNo"/>
<el-table-column label="DATE OF ISSUE" align="center" prop="issueDate"/>
<el-table-column label="DATE OF EXPIRY" align="center" prop="expiryDate"/>
<el-table-column align="center" label="nationality" prop="nationality"/>
<el-table-column align="center" label="birthday" prop="birthday"/>
<el-table-column align="center" label="Passport No." prop="passportNo"/>
<el-table-column align="center" label="DATE OF ISSUE" prop="issueDate"/>
<el-table-column align="center" label="DATE OF EXPIRY" prop="expiryDate"/>
</el-table>
</el-dialog>
......@@ -83,17 +85,17 @@ const visaList = ref([])
const open = (params) => {
show.value = true
form.value = params
listVisaInfo({visaId: params.id})
.then((res) => {
visaList.value = res.rows
})
.then((res) => {
visaList.value = res.rows
})
}
defineExpose({open})
</script>
<style scoped lang="scss">
<style lang="scss" scoped>
</style>
......
......@@ -44,15 +44,17 @@
<el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU letter'" value="2"/>
</el-select>
</el-form-item>
<el-form-item v-if="form.invitationType==2" label="Proof of Employment" prop="invitationFileArr" required>
<div class="red">Proof of employment is required for TE/PU letter letters.</div>
<div class="red">
This document must be issued by the invitee's association and must bear an official stamp or signature.
</div>
<br/>
<file-upload v-model="form.invitationFileArr" :button-text="language==0?'上传':'Upload'" :is-show-tip="false"
:limit="1"></file-upload>
</el-form-item>
<!-- <el-form-item v-if="form.invitationType==2" label="Proof of Employment" prop="invitationFileArr" required>-->
<!-- <div class="red">Proof of employment is required for TE/PU letter letters.</div>-->
<!-- <div class="red">-->
<!-- This document must be issued by the invitee's association and must bear an official stamp or signature.-->
<!-- </div>-->
<!-- <br/>-->
<!-- <file-upload v-model="form.invitationFileArr" :button-text="language==0?'上传':'Upload'" :is-show-tip="false"-->
<!-- :limit="1"></file-upload>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" prop="chinese"-->
<!-- required>-->
<!-- <el-radio-group v-model="form.chinese">-->
......@@ -151,6 +153,40 @@
preview-teleported style="width: 60px;z-index: 999;"/>
</template>
</el-table-column>
<el-table-column :label="language==0?'入境日期':'Date ofEntrye'" prop="" width="130px">
<template #header>
<div class="esp">
<span class="red">*</span>Date ofEntrye
</div>
</template>
<template #default="scope">
<el-date-picker
v-model="scope.row.entryDate"
format="YYYY-MM-DD"
placeholder="YYYY-MM-DD"
size="small"
style="width: 100%;" type="date"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column :label="language==0?'离境日期':'Date ofDeparture'" prop="" width="130px">
<template #header>
<div class="esp">
<span class="red">*</span>Date ofDeparture
</div>
</template>
<template #default="scope">
<el-date-picker
v-model="scope.row.departureDate"
format="YYYY-MM-DD"
placeholder="YYYY-MM-DD"
size="small"
style="width: 100%;" type="date"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column :label="'position'" min-width="100" prop="position">
<template #header>
<div class="esp">
......@@ -244,10 +280,11 @@
</div>
</template>
<template #default="scope">
<el-date-picker v-model="scope.row.birthday"
format="YYYY-MM-DD"
placeholder="YYYY-MM-DD" size="small"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
<el-date-picker
v-model="scope.row.birthday"
format="YYYY-MM-DD"
placeholder="YYYY-MM-DD" size="small"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
......@@ -306,10 +343,15 @@
</el-form-item>
<!-- 补充材料-->
<el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files">
<file-upload v-model="form.files" :button-text="language==0?'上传':'Upload'" :is-show-tip="false"
:limit="1"/>
<file-upload v-model="form.files" :button-text="language==0?'上传':'Upload'" :is-show-tip="false" :limit="1"/>
</el-form-item>
<el-form-item>
<el-checkbox v-model="form.check" style="pointer-events: none"/>
<el-link style="margin-left: 5px" type="primary" @click="showCheck=!showCheck">{{
language == 0 ? '我确认所提供的资料是正确的' : 'I confirm that the information provided is correct'
}}
</el-link>
</el-form-item>
<div class="text-center">
<el-button :disabled="!cptId" class="btn-lineG" round size="large" type="primary" @click="submit">
......@@ -318,6 +360,25 @@
</div>
</el-form>
</div>
<el-dialog
v-model="showCheck"
append-to-body center
class="pcloginpop"
destroy-on-close
style="min-width: 300px;max-width: 600px"
>
<p style="font-size: 16px">
Passport information has been auto-recognized.Please double-check carefully, as errors may occur.Edit if
necessary
before submission.
</p>
<br>
<p style="text-align: center">
<el-button type="primary" @click="handelSubmit">Confrm</el-button>
</p>
<br>
</el-dialog>
</el-dialog>
</template>
......@@ -357,6 +418,7 @@ const title = ref('')
const countrys = ref([])
const mnaList = ref([])
const cptId = ref('')
const showCheck = ref(false)
const rules = ref(
{
nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
......@@ -367,6 +429,7 @@ const rules = ref(
passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},],
arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
check: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
})
const open = (params) => {
show.value = true
......@@ -442,8 +505,13 @@ function getMNAList() {
})
}
const submit = () => {
console.log(form.value)
function handelSubmit() {
showCheck.value = false
form.value.check = true
}
const submit = async () => {
console.log(form.value.check)
if (form.value.email?.indexOf('@') == -1) {
ElMessage.warning(language.value == 0 ? '请填写正确的邮箱' : 'Invalid Emaill Address!')
return
......@@ -465,6 +533,14 @@ const submit = () => {
ElMessage.warning(`Please specify ${row.fristName}'s position`)
return;
}
if (!row.entryDate) {
ElMessage.warning(`Please specify Date ofEntrye position`)
return;
}
if (!row.departureDate) {
ElMessage.warning(`Please specify Date ofDeparture position`)
return;
}
}
if (form.value.files && Array.isArray(form.value.files)) {
......@@ -473,27 +549,33 @@ const submit = () => {
if (form.value.invitationFileArr) {
form.value.invitationFile = JSON.stringify(form.value.invitationFileArr)
}
await proxy.$refs.iformRef.validate()
if (!form.value.check) {
showCheck.value = true
return
}
await 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
addInvitation(form.value).then((res) => {
if (res.data == -200) {
ElMessage.error(language.value == 0 ? '邮箱验证码不正确' : 'Invalid email verification code')
} else {
ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!')
showR.value = true
emit('refresh')
}
})
})
proxy.$refs.iformRef.validate(valid => {
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
addInvitation(form.value).then((res) => {
if (res.data == -200) {
ElMessage.error(language.value == 0 ? '邮箱验证码不正确' : 'Invalid email verification code')
} else {
ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!')
showR.value = true
emit('refresh')
}
})
})
}
})
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!