5a7ee012 by 杨炀

no message

1 parent da86e13e
Showing 45 changed files with 973 additions and 347 deletions
......@@ -117,6 +117,15 @@ export function createPalPay(data) {
data:data
})
}
export function callbackPalPay(tradeNo) {
return request({
url: `/ota/norder/palPay/callback`,
method: 'post',
data:{
tradeNo:tradeNo
}
})
}
export function getInvoiceByActiveId(query) {
return request({
url: `/ota/invoice/list`,
......@@ -156,6 +165,12 @@ export function addressList(userId) {
}
})
}
export function getBaseInfoByActiveId(id) {
return request({
url: `/ota/activity/${id}`,
method: 'get'
})
}
export function submitInvoice(form) {
return request({
......
......@@ -47,3 +47,24 @@ export function newbilllist(query) {
params: query
})
}
export function vistorRegister(data) {
return request({
url: `/pcSimpleRegister`,
method: 'post',
data: data
})
}
export function upgradePersonal(data) {
return request({
url: `/upgradeAccountToSingle`,
method: 'post',
data: data
})
}
export function upgradeTeam(data) {
return request({
url: `/upgradeAccountToTeam`,
method: 'post',
data: data
})
}
......
......@@ -252,7 +252,8 @@ img{display: block;}
.text-navy {
color: #1ab394;
}
.underline{ text-decoration: underline;}
.pointer{cursor: pointer}
.text-primary {
color: var(--el-color-primary);
}
......
......@@ -74,30 +74,57 @@
</div>
</div>
<div class="fixed-right">
<a v-if="language==0" href="#" target="_blank"
onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=6c500b60-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=ZHCN','_blank','height=700px,width=700px,top=50,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="客服" >
<img class="kf" src="@/assets/logo/kf_c.png"/>
</a>
<a v-else target="_blank" href="#"
onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=707daf80-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=EN','_blank','height=700px,width=700px,top=100,left=150,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="Live Chat">
<img class="kf" src="@/assets/logo/kf_e.png"/>
</a>
<div class="mlb" v-if="language==0">
<div href="#" target="_blank"
onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=6c500b60-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=ZHCN','_blank','height=700px,width=700px,top=50,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="客服" >
<img class="kf" src="@/assets/logo/btn01.png"/>
<div class="text-center mt10 gradient-text">在线客服</div>
</div>
<div @click="goHelp">
<img class="kf" src="@/assets/logo/btn02.png"/>
<div class="text-center mt10 gradient-text">帮助中心</div>
</div>
</div>
<div class="mlb" v-else>
<div target="_blank" href="#"
onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=707daf80-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=EN','_blank','height=700px,width=700px,top=100,left=150,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="Live Chat">
<img class="kf" src="@/assets/logo/btn01.png"/>
<div class="text-center gradient-text">Live Chat</div>
</div>
<div @click="goHelp">
<img class="kf" src="@/assets/logo/btn02.png"/>
<div class="text-center gradient-text">Demo Video</div>
</div>
</div>
</div>
</template>
<script setup>
import {useStorage} from "@vueuse/core/index";
import {useRouter} from "vue-router";
const router = useRouter()
const language = useStorage('language', 0)
const goHelp = () => {
router.push({
path: `/news/list/20000100`,
query:{
kindName: language.value==0?'帮助中心':'Demo Video'
}
})
}
</script>
<style lang="scss" scoped>
.kf{width: 90px;cursor: pointer;
.kf{width: 45px;margin: auto;height: auto;
//animation: pop 2s infinite;
}
.fixed-right{position: fixed;right: 0;bottom: 200px;}
.fixed-right{position: fixed;right: 0;bottom: 200px;
.mlb{background: #fff;border-radius: 10px 0 0 10px;box-shadow: 0 2px 8px #aaa;
padding: 10px 8px;text-align: center;cursor: pointer;
div:first-child{border-bottom: 0.5px solid #eee;padding: 0 0 10px;margin-bottom: 10px}
div:hover{.gradient-text{font-weight: bold;}}
}
}
.copyright{ font-size: 14px;
opacity: 0.88;
color: #4C5359;}
......@@ -117,6 +144,13 @@ const language = useStorage('language', 0)
}
img{height: 80px;}
}
.gradient-text {font-family: FZJunHeiS-B-GB;
font-weight: 600;
font-size: 17px;
background: linear-gradient(0deg, #8226FC 0%, #483BEB 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
@media (max-width: 500px) {
.forWei{display: none;}
}
......
......@@ -135,6 +135,7 @@
</el-menu>
</el-drawer>
<LoginDialog ref="pcloginDialog" @submitForm="reFlash" />
<VisitorLogin ref="visitorDialog" @submitForm="reFlash" />
<SearchPop v-if="language==0" ref="searchDialog" />
<SearchPop_en v-if="language==1" ref="searchDialog" />
</template>
......@@ -147,6 +148,7 @@ import { Search,UserFilled } from '@element-plus/icons-vue'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import _ from 'lodash'
import LoginDialog from '@/viewsPc/login'
import VisitorLogin from '@/viewsPc/register/components/utype3'
import SearchPop from './indexSearch'
import SearchPop_en from './indexSearch_en'
import Captcha from './captcha'
......@@ -236,7 +238,12 @@ watch(() => useUserStore().reLogin, (val) => {
goLogin(val.query)
}
})
watch(() => useUserStore().visitor, (val) => {
if (val) {
console.log(val)
proxy.$refs['visitorDialog'].open()
}
})
function searchNews() {
proxy.$refs['searchDialog'].open()
}
......
......@@ -31,6 +31,7 @@ const useUserStore = defineStore(
genFlag: '', // 是否是自动的协会
badge: {},
reLogin: {show:false,query:{}},
visitor: false,
language: 0
}),
actions: {
......@@ -138,6 +139,12 @@ const useUserStore = defineStore(
this.badge = res.data
})
},
setVisitor() {
this.visitor = true
setTimeout(() => {
this.visitor = false
}, 1000)
},
setReLogin(query) {
console.log(query)
this.reLogin = {show:true,query:query}
......
......@@ -8,7 +8,7 @@
<div class="leftNav">
<ul>
<li :class="activeIndex==0?'active':''" @click="activeIndex=0">{{ language==0?'组织机构':'Organizer' }}</li>
<li :class="activeIndex==1?'active':''" @click="activeIndex=1">{{ language==0?'WDSF亚洲体育舞蹈节':'WDSF Asian Dancesport Festival' }}</li>
<li :class="activeIndex==1?'active':''" @click="activeIndex=1">{{ language==0?'无锡WDSF亚洲体育舞蹈节':'WUXI WDSF ASIAN DANCESPORT FESTIVAL' }}</li>
<!-- <li :class="activeIndex==2?'active':''" @click="activeIndex=2">{{ language==0?'体育舞蹈项目':'About Sports Dance' }}</li>-->
</ul>
</div>
......@@ -59,45 +59,45 @@
<div class="infoPart pd20" v-if="activeIndex==1">
<h3 class="leftboderTT">{{ language==0?'无锡WDSF亚洲体育舞蹈节':'WUXI WDSF ASIAN DANCESPORT FESTIVAL' }}</h3>
<div class="content" v-if="language==0">
无锡WDSF亚洲体育舞蹈节是由世界体育舞蹈(无锡)中心(世界体育舞蹈联合、亚洲体育舞蹈联合、中国体育舞蹈联合会和无锡市人民政府共建)打造面向全球的、长期落户的、城市自主的品牌赛事。
<br/>
&ensp;&ensp;&ensp;&ensp;2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。
<br/>
&ensp;&ensp;&ensp;&ensp;2024年7月17日至21日将继续举办第二届无锡2024年WDSF亚洲体育舞蹈节,包括2024年WDSF世界拉丁舞锦标赛、2024年WDSF世界青年标准舞锦标赛、2024年WDSF世界少年Ⅱ拉丁舞锦标赛、2024年WDSF大奖赛(标准舞、拉丁舞)、
2024年WDSF职业标准舞/拉丁舞世界杯、2024年WDSF公开赛(标准舞/拉丁舞)以及2024年全国青少年体育舞蹈锦标赛等一系列重点赛事。
预计届时会吸引约40个国家和地区的3000名优秀体育舞蹈选手参赛,将为全球体育舞蹈爱好者呈现一场精彩绝伦的视觉盛宴。
<div class="imgbox">
<img src="/img/123.png"/>
</div>
</div>
<div class="content" v-else>
Wuxi WDSF Asian DanceSport Festival is a globally oriented, permanently settled,
city-owned brand event created by the World DanceSport (Wuxi) Center (jointly
established by the World DanceSport Federation, DanceSport Asia, Chinese
DanceSport Federation, and Wuxi Municipal People’s Government).
<br/><br/>
&ensp;&ensp;&ensp;&ensp;In July 2023, the WDSF Asian DanceSport Festival·Wuxi 2023 was held for the first
time, including the 2023 WDSF World Championship Standard, 2023 WDSF
DanceSport Grand Slam (Wuxi), 2023 China DanceSport Open Series (Wuxi), which
attracted a total of 1,716 top-level dancers from 39 countries and regions around the
globe. Meanwhile, the WDSF World DanceSport (Wuxi) Center was successfully
established in Wuxi, China, with the guiding principle of "festivals with competitions
and competitions becoming festivals", and the "four parties" working together to serve
dancers from all over the world.
<br/><br/>
&ensp;&ensp;&ensp;&ensp;The 2nd WDSF Asian DanceSport Festival·Wuxi 2024 will be organized from 17th to
21st July 2024, including a series of key events such as the WDSF World
Championship Latin 2024, WDSF World Championship Youth Standard 2024, WDSF
World Championship Junior II Latin 2024, WDSF Grand Slam Latin & Standard 2024,
WDSF PD World Cup Latin & Standard 2024, WDSF Open Latin & Standard 2024
and 2024 National Youth DanceSport Championships etc. It is expected to attract
3,000 outstanding dancers from about 40 countries and regions to participate in the
event, which will present a wonderful visual feast for global DanceSport fans.
</div>
<!-- <div class="content" v-if="language==0">-->
<!-- 无锡WDSF亚洲体育舞蹈节是由世界体育舞蹈(无锡)中心(世界体育舞蹈联合、亚洲体育舞蹈联合、中国体育舞蹈联合会和无锡市人民政府共建)打造面向全球的、长期落户的、城市自主的品牌赛事。-->
<!-- <br/>-->
<!-- &ensp;&ensp;&ensp;&ensp;2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。-->
<!-- <br/>-->
<!-- &ensp;&ensp;&ensp;&ensp;2024年7月17日至21日将继续举办第二届无锡2024年WDSF亚洲体育舞蹈节,包括2024年WDSF世界拉丁舞锦标赛、2024年WDSF世界青年标准舞锦标赛、2024年WDSF世界少年Ⅱ拉丁舞锦标赛、2024年WDSF大奖赛(标准舞、拉丁舞)、-->
<!-- 2024年WDSF职业标准舞/拉丁舞世界杯、2024年WDSF公开赛(标准舞/拉丁舞)以及2024年全国青少年体育舞蹈锦标赛等一系列重点赛事。-->
<!-- 预计届时会吸引约40个国家和地区的3000名优秀体育舞蹈选手参赛,将为全球体育舞蹈爱好者呈现一场精彩绝伦的视觉盛宴。-->
<!-- <div class="imgbox">-->
<!-- <img src="/img/123.png"/>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="content" v-else>-->
<!-- Wuxi WDSF Asian DanceSport Festival is a globally oriented, permanently settled,-->
<!-- city-owned brand event created by the World DanceSport (Wuxi) Center (jointly-->
<!-- established by the World DanceSport Federation, DanceSport Asia, Chinese-->
<!-- DanceSport Federation, and Wuxi Municipal People’s Government).-->
<!-- <br/><br/>-->
<!-- &ensp;&ensp;&ensp;&ensp;In July 2023, the WDSF Asian DanceSport Festival·Wuxi 2023 was held for the first-->
<!-- time, including the 2023 WDSF World Championship Standard, 2023 WDSF-->
<!-- DanceSport Grand Slam (Wuxi), 2023 China DanceSport Open Series (Wuxi), which-->
<!-- attracted a total of 1,716 top-level dancers from 39 countries and regions around the-->
<!-- globe. Meanwhile, the WDSF World DanceSport (Wuxi) Center was successfully-->
<!-- established in Wuxi, China, with the guiding principle of "festivals with competitions-->
<!-- and competitions becoming festivals", and the "four parties" working together to serve-->
<!-- dancers from all over the world.-->
<!-- <br/><br/>-->
<!-- &ensp;&ensp;&ensp;&ensp;The 2nd WDSF Asian DanceSport Festival·Wuxi 2024 will be organized from 17th to-->
<!-- 21st July 2024, including a series of key events such as the WDSF World-->
<!-- Championship Latin 2024, WDSF World Championship Youth Standard 2024, WDSF-->
<!-- World Championship Junior II Latin 2024, WDSF Grand Slam Latin & Standard 2024,-->
<!-- WDSF PD World Cup Latin & Standard 2024, WDSF Open Latin & Standard 2024-->
<!-- and 2024 National Youth DanceSport Championships etc. It is expected to attract-->
<!-- 3,000 outstanding dancers from about 40 countries and regions to participate in the-->
<!-- event, which will present a wonderful visual feast for global DanceSport fans.-->
<!-- </div>-->
<!-- </div>-->
......
......@@ -18,7 +18,7 @@
<template #title>
<el-row align="middle" :gutter="20" class="w100">
<el-col :span="4">
<div class="index">路线{{index+1}}
<div class="index">{{ language==0?'路线':'Route' }}{{index+1}}
<img src="@/assets/booking/arrow.png"/>
</div>
</el-col>
......@@ -43,17 +43,18 @@
</div>
</el-col>
<el-col :span="14">
<h3 class="name">{{ r.carType }}
<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>
</div>
</h3>
<el-row :gutter="10">
<el-col :span="8">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</el-col>
<el-col :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</el-col>
</el-row>
<div class="text-gray mt20">
<span class="mr20">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</span>
<span class="mr20">|</span>
<span :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</span>
</div>
</el-col>
<el-col :span="3">
<div class="price" v-if="language==0">¥
......@@ -181,6 +182,8 @@ function goOrder(item,car) {
span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);}
}
.name.flex{align-items: center;}
.name .tagbox{margin: 0 0 0 15px;}
.room {
background: #FAFBFD;margin: 20px 0 0;padding: 20px;
border: 1px solid #E5E5E5;
......
......@@ -17,7 +17,7 @@
<h3 class="esp">{{ item.checkOut }}</h3>
</div>
<div class="flex">
<img class="w150px br10 as16_9" :src="fillImgUrl(car.photos?.split(',')[0])"/>
<el-image class="w150px br10 as16_9" fit="cover" :src="fillImgUrl(car.photos?.split(',')[0])"/>
<div class="ml20">
<div class="roomType">{{ car.carType }}</div>
<div class="tagbox">
......@@ -64,7 +64,7 @@
<el-form-item :label="language==0?'用车时间':'Time'" required>
<el-time-picker
v-model="revTime1" :start="car.operStart" :end="car.operEnd"
placeholder="Arbitrary time" format="HH:mm" value-format="HH:mm" @change="bindTimeChange"
format="HH:mm" value-format="HH:mm" @change="bindTimeChange"
/>
</el-form-item>
<el-form-item :label="language==0?'联系人':'Contacts'" required>
......@@ -101,7 +101,7 @@
<el-form-item :label="language==0?'用车时间':'Time'" required>
<el-time-picker
v-model="revTime2" :start="car.operStart" :end="car.operEnd"
placeholder="Arbitrary time" format="HH:mm" value-format="HH:mm" @change="bindTimeChange2"
format="HH:mm" value-format="HH:mm" @change="bindTimeChange2"
/>
</el-form-item>
<el-form-item :label="language==0?'联系人':'Contacts'" required>
......@@ -158,12 +158,11 @@
</label>
</el-col>
<el-col :span="12" class="text-right">
<el-button type="primary" class="btn-lineG" @click="submit" round :loading="payLoading">确认付款</el-button>
<el-button type="primary" class="btn-lineG w200px" @click="submit" round :loading="payLoading">{{ language == 0 ?'确认付款':'Pay' }}</el-button>
</el-col>
</el-row>
</el-card>
<div style="height: 60px;"></div>
</div>
</div>
</template>
......
......@@ -7,7 +7,7 @@
<div class="searchBar">
<el-input :placeholder="language==0?'请输入关键字搜索':'Search'" v-model="query.name" class="no-border">
</el-input>
<el-button size="large" type="primary" class="btn-lineG" icon="search">{{ language==0?'搜索':'Search' }}</el-button>
<el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList">{{ language==0?'搜索':'Search' }}</el-button>
</div>
</div>
......@@ -17,16 +17,16 @@
<el-card>
<el-row class="hotel" align="middle" :gutter="20">
<el-col :span="12">
<img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/>
<el-image class="w100 as16_9" fit="cover" :src="fillImgUrl(h.photos?.split(',')[0])"/>
</el-col>
<el-col :span="12">
<h3 class="esp m0">{{h.name}}</h3>
<p class="esp_2 addr">
<p class="esp addr">
<el-icon color="#929AA0"><LocationFilled /></el-icon>
{{h.addName}}
</p>
<div class="price mb20" v-if="language==0"><i class="text-warning">¥</i><span class="text-warning">{{ h.price }}</span></div>
<div class="price mb20" v-else><i class="text-warning"></i><span class="text-warning">{{ h.price }}</span>start</div>
<div class="price mb10" v-if="language==0"><i class="text-warning">¥</i><span class="text-warning">{{ h.price || 0 }}</span></div>
<div class="price mb10" v-else><i class="text-warning"></i><span class="text-warning">{{ h.price || 0 }}</span>start</div>
<el-button class="btn-lineG" round type="primary" size="large" @click="goDetail(h)">{{ language==0?'立即预约':'Select' }}</el-button>
</el-col>
......@@ -43,10 +43,11 @@
<script setup>
import {onMounted} from "@vue/runtime-core"
import * as booking from "@/apiPc/booking"
import {useRoute, useRouter} from "vue-router"
const route = useRoute()
const router = useRouter()
const language = useStorage('language', 0)
import {getActivityRestaurantList} from "@/apiPc/booking";
import {useRouter} from "vue-router";
import {useStorage} from "@vueuse/core/index";
const query = ref({
name:''
......@@ -57,7 +58,8 @@ onMounted(()=>{
})
function getList() {
booking.getActivityRestaurantList(query.value).then(res=>{
query.value.activityId = route.params.cptId
getActivityRestaurantList(query.value).then(res=>{
list.value = res.rows
})
}
......
......@@ -24,11 +24,18 @@
<div class="mt30">
<el-row :gutter="20">
<el-col v-for="(p,index) in form?.photos?.split(',')" :span="index==0?12:6">
<el-col :span="10">
<div class="imgbox hotelImg">
<img :src="fillImgUrl(p)">
<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>
......
......@@ -31,23 +31,27 @@
<!-- :picker-options="pickerOptions"-->
</el-form-item>
<el-form-item :label="`联系人`" required>
<el-form-item :label="language==0?'联系人':'Contacts'" required>
<el-input v-model="form.contacts"/>
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone">
<el-input v-model="form.phone"/>
</el-form-item>
<el-form-item :label="language==0?'送餐时间':'Contact phone'" required prop="phone">
<el-form-item :label="language==0?'送餐时间':'Delivery time'" required prop="phone">
<div style="line-height: 36px;">{{food.psStart}} - {{food.psEnd}}</div>
</el-form-item>
<el-form-item label="配送地址">
<el-form-item :label="language==0?'配送地址':'Delivery address'">
<div style="line-height: 36px;">{{food.address}}</div>
</el-form-item>
<el-form-item>
<div class="tip">
<el-form-item :label="language==0?'说明':'Instructions'">
<div class="tip" v-if="language==0">
*如预定多天的餐饮,将分多天进行配送。<br/>
*每日送餐时间只配送当日预定的餐饮。
</div>
<div class="tip" v-else>1.If you have ordered food for multiple days, it will be delivered in multiple days.
<br/>
2.Only the meals ordered on the day of delivery will be delivered during the daily delivery time.
</div>
</el-form-item>
<el-form-item :label="language==0?'备注':'Remarks'">
<el-input type="textarea" rows="3" v-model="form.remarks"/>
......@@ -80,7 +84,7 @@
</label>
</el-col>
<el-col :span="12" class="text-right">
<el-button type="primary" class="btn-lineG" @click="submit">确认付款</el-button>
<el-button type="primary" size="large" class="btn-lineG w200px" @click="submit" round>{{ language == 0 ?'确认付款':'Pay' }}</el-button>
</el-col>
</el-row>
</el-card>
......
......@@ -13,32 +13,35 @@
</div>
<div class="box" v-loading="loading">
<el-card v-for="(h,index) in list" class="mb20" @click="goDetail(h)">
<!-- 酒店列表-->
<el-row class="hotel" align="middle" :gutter="20">
<el-col :span="6">
<img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/>
</el-col>
<el-col :span="10">
<h3 class="esp">{{h.name}}</h3>
<div class="starBox">
<img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png">
</div>
<div class="tagbox">
<span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span>
<a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a>
</div>
<p class="esp addr">
<el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>
{{h.address}}
</p>
</el-col>
<el-col :span="8" class="text-right">
<div class="price">¥<span>{{ h.price }}</span><i v-if="language==0"></i></div>
<el-button class="btn-lineG w200px" round type="primary" size="large">{{ language==0?'立即预约':'Select' }}</el-button>
</el-col>
</el-row>
</el-card>
<el-row :gutter="20">
<el-col :lg="12" :md="24" :sm="24" xs="24" :xl="12" v-for="(h,index) in list" class="mb20">
<el-card @click="goDetail(h)">
<!-- 酒店列表-->
<el-row class="hotel" align="middle" :gutter="20">
<el-col :span="12">
<img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/>
</el-col>
<el-col :span="12">
<h3 class="esp flex">{{h.name}}
<div class="starBox ml10">
<img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png">
</div>
</h3>
<div class="tagbox">
<span v-for="(t,index) in h.label?.split(',')" v-show="index<3">{{t}}</span>
<a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a>
</div>
<p class="esp addr">
<el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>
{{h.address}}
</p>
<div class="price">¥<span>{{ h.price }}</span><i v-if="language==0"></i></div>
<el-button class="btn-lineG w200px" round type="primary" >{{ language==0?'立即预约':'Select' }}</el-button>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
<el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" />
<div style="height: 50px"></div>
</div>
......@@ -90,10 +93,10 @@
<style scoped lang="scss">
.hotel{
h3{margin: 0 0 20px;}
h3{margin: 0 0 10px;}
img.w100{object-fit: cover;aspect-ratio: 16/9}
.addr{font-size: 16px;color: #929AA0;font-weight: 400;}
.price{margin: 0 0 25px;
.addr{font-size: 14px;color: #929AA0;font-weight: 400;margin: 0 0 10px;}
.price{margin: 0 0 8px;
color: #FF8124;font-size: 18px;
span{font-size: 24px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;}
i{font-style: normal;color: #929AA0;}
......@@ -113,9 +116,9 @@
.starBox{
img{display: inline-block;margin-right: 4px}
}
.tagbox{margin: 15px 0;
.tagbox{margin: 10px 0;
a{color: #AFB5B9;font-size: 12px;}
span{border-radius: 13px;font-size: 12px;padding: 4px 10px;margin-right:10px;font-weight: 400;}
span{border-radius: 13px;font-size: 12px;padding: 3px 10px;margin-right:10px;font-weight: 400;}
span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);}
span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);}
span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
......
......@@ -6,7 +6,7 @@
<!-- <el-col :span="6">-->
<!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>-->
<!-- </el-col>-->
<el-col :span="16">
<el-col :span="language == 0?16:24">
<h3 class="esp flex">{{ form?.name }}
<div class="starBox ml20">
<img v-for="i in Number(form?.starLevel||0)" src="@/assets/booking/star.png">
......@@ -30,7 +30,7 @@
<div :class="showAll?'':'esp_2'" @click="showAll=!showAll" v-html="form.introduction.toString()"></div>
</div>
</el-col>
<el-col :span="8" class="text-right">
<el-col :span="8" class="text-right" v-if="language == 0">
<div class="mapBox" @click="goMap">
<div id="map"></div>
</div>
......@@ -41,11 +41,18 @@
<div class="mt30">
<el-row :gutter="20">
<el-col v-for="(p,index) in form?.photos?.split(',')" :span="index==0?9:5" v-show="index<7">
<el-col :span="10">
<div class="imgbox hotelImg">
<el-image :src="fillImgUrl(p)" fit="cover" :preview-src-list="form?.photos?.split(',')"/>
<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" class="oddmb" v-for="(p,index) in form?.photos?.split(',').slice(1,7)">
<div class="imgbox hotelImg"><el-image :src="fillImgUrl(p)" fit="cover"/></div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
......@@ -186,10 +193,6 @@ function initMap() {
}
function goOrder(room) {
if(!user){
useUserStore().setReLogin()
return
}
router.push({
name:'hotelOrder',
params:{
......@@ -330,4 +333,5 @@ function goMap() {
color: #929AA0;
.el-icon{margin-right: 5px;}
}
.oddmb:nth-child(2){margin-bottom: 20px;}
</style>
......
......@@ -31,7 +31,7 @@
<el-form-item :label="language==0?'入住日期':'Check-in date'" required>
<el-date-picker @change="getDaysBetween"
v-model="rzRange"
type="daterange"
type="daterange" :disabled-date="disabledDateRZ"
:placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD"
value-format="YYYY-MM-DD"/>
<!-- :picker-options="pickerOptions"-->
......@@ -43,7 +43,7 @@
<span v-else>{{ canOrderNum }} Remaining rooms</span>
</div>
</el-form-item>
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`" required>
<el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="language==0?'Name':'入住人'`${index+1}`" required>
<el-input v-model="rzUserArr[index]" :placeholder="language==0?'每间填一位住客姓名':'Each room fill in one name of the guest'"/>
</el-form-item>
<el-form-item :label="language==0?'预计到店':'Expected check-in'" required>
......@@ -64,11 +64,11 @@
<div v-if="room.addBedFlag=='1'">
<el-form-item :label="language==0?'是否加床':'Extra bed'" required>
<el-radio-group v-model="form.isAddbed">
<el-radio label="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio>
<el-radio label="0">{{ language == 0 ? '否' : 'No' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio>
<el-radio value="0">{{ language == 0 ? '否' : 'No' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'加床张数':'Extra bed num'" required>
<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="1" @change="changeBed"/>
<div class="tip" v-if="form.isAddbed=='1'">*
......@@ -128,7 +128,7 @@
</label>
</el-col>
<el-col :span="12" class="text-right">
<el-button type="primary" class="btn-lineG" @click="submit">确认付款</el-button>
<el-button type="primary" class="btn-lineG w200px" size="large" round @click="submit">确认付款</el-button>
</el-col>
</el-row>
</el-card>
......@@ -142,7 +142,7 @@
import {useRouter, useRoute} from "vue-router";
import {ref, reactive, onMounted} from "vue";
import {useStorage} from "@vueuse/core/index";
import {checkResidueRoom, newsSubmitOrderHotel} from "@/apiPc/booking"
import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel} from "@/apiPc/booking"
import dayjs from 'dayjs'
import {ElMessage,ElMessageBox} from "element-plus";
import useUserStore from "@/store/modules/user";
......@@ -152,8 +152,8 @@ const router = useRouter()
const route = useRoute()
const room = ref({})
const hotelName = ref('')
const canOrderStart = ref('')
const canOrderNum = ref(0)
const lform = ref({})
const form = ref({
isAddbed: '0',
roomNum: 0,
......@@ -167,6 +167,10 @@ const money = ref(0)
const choseRooms = ref([])
const ddDateArr = ref([
{
value: '07:00',
label: '07:00'
},
{
value: '08:00',
label: '08:00'
},
......@@ -233,6 +237,14 @@ const ddDateArr = ref([
{
value: '00:00',
label: '00:00'
},
{
value: '01:00',
label: '01:00'
},
{
value: '02:00',
label: '02:00'
}
])
const rules = ref({})
......@@ -241,15 +253,31 @@ let usedays = 0
onMounted(() => {
console.log(route.query)
room.value = JSON.parse(decodeURIComponent(route.query.room))
console.log(room.value)
hotelName.value = route.query.hotelName
money.value = 0
const today = dayjs()
canOrderStart.value = today
if (room.value.hqNewStart < canOrderStart.value) {
room.value.hqNewStart = canOrderStart.value
}
initDays()
})
function initDays() {
getBaseInfoByActiveId(route.params.cptId).then(res=>{
lform.value = res.data
}).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()))
} else {
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
......@@ -360,20 +388,38 @@ function submit() {
form.value.ahrId = room.value.id
form.value.orderName = hotelName.value
form.value.roomName = room.value.roomType
form.value.roomPhoto = room.value.photo
var str = ''
var str2 = ''
if (form.value.addNum && form.value.addNum > 0) {
str = `加床${form.value.addNum}张`
} else {
str = `未加床`
if(language.value==0){
if (form.value.addNum && form.value.addNum > 0) {
str = `加床${form.value.addNum}张`
} else {
str = `未加床`
}
if (room.value.breakfastNum && room.value.breakfastNum > 0) {
str2 = `${room.value.breakfastNum}份早餐`
} else {
str2 = `无早餐`
}
form.value.room = `${form.value.roomNum} 间 · ${usedays}晚 · ${str} · ${str2}`
console.log(form.value.room)
}
if (room.value.breakfastNum && room.value.breakfastNum > 0) {
str2 = `${room.value.breakfastNum}份早餐`
} else {
str2 = `无早餐`
if(language.value==1){
if (form.value.addNum && form.value.addNum > 0) {
str = `have ${form.value.addNum} extra bed`
} else {
str = `No extra bed`
}
if (room.value.breakfastNum && room.value.breakfastNum > 0) {
str2 = `${room.value.breakfastNum} breakfast`
} else {
str2 = `No breakfast`
}
form.value.room = `${form.value.roomNum} rooms · ${usedays} night·${str}·${str2}`
console.log(form.value.room)
}
form.value.room = `${form.value.roomNum} 间·${usedays}晚·${str}·${str2}`
console.log(form.value.room)
// 提交确认
ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
......
......@@ -21,7 +21,7 @@
import {ref} from "vue";
import {useRoute, useRouter} from "vue-router";
import {onMounted} from "@vue/runtime-core";
import {callbackPalPay} from "@/apiPc/match";
import {callbackPalPay} from "@/apiPc/booking";
import {useStorage} from "@vueuse/core/index";
const route = useRoute()
......
......@@ -28,6 +28,18 @@
</a>
</li>
</ul>
<ul v-if="user.utype=='3'">
<li
v-for="(m, i) in menus3"
:key="i"
:class="{ active: m.isActive }"
>
<a href="javascript:void(0)" @click="toInfo(m,menus3)">
<img :src="m.isActive ? m.picUrl2 : m.picUrl1">
{{ m.name }}
</a>
</li>
</ul>
</div>
</el-card>
</el-col>
......@@ -103,6 +115,29 @@ const menus = ref([
isActive: false
}
])
const menus3 = ref([
{
name: language.value==0?'基础信息':'Basic Information',
routeName: 'myInfo',
picUrl1: '/img/nav_26.png',
picUrl2: '/img/nav_26_dwn.png',
isActive: false
},
{
name: language.value==0?'修改密码':'Change Password',
routeName: 'myPassword',
picUrl1: '/img/nav_27.png',
picUrl2: '/img/nav_27_dwn.png',
isActive: false
},
{
name: language.value==0?'我的预定':'My Reservation',
routeName: 'myReservation',
picUrl1: '/img/nav_29.png',
picUrl2: '/img/nav_29_dwn.png',
isActive: false
}
])
const menusPersonal = ref([
{
name: language.value==0?'基础信息':'Basic Information',
......@@ -160,6 +195,12 @@ onMounted(() => {
})
currMenu.isActive = true
}
if(user.utype=='3'){
currMenu = _.find(menus3.value, (m) => {
return m.routeName === route.name
})
currMenu.isActive = true
}
})
......
......@@ -18,7 +18,7 @@
<el-form-item :label="language==0?'用户名':'Account'">
{{ user.userName }}
</el-form-item>
<el-form-item :label="language==0?'姓名':'Real Name'" required prop="realName">
<el-form-item :label="language==0?'姓名':'Real Name'" required prop="realName" v-if="user.utype=='1'">
<el-input v-model="myform.realName" disabled/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" required >
......@@ -34,25 +34,25 @@
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'代表':'Representing'" required>
<el-form-item :label="language==0?'代表':'Representing'" required v-if="user.utype=='1'">
<el-input v-model="myform.representing" disabled/>
</el-form-item>
<el-form-item :label="language==1?'Age group':'年龄组'" required>
<el-form-item :label="language==1?'Age group':'年龄组'" required v-if="user.utype=='1'">
<el-input v-model="myform.ageGroup" disabled/>
</el-form-item>
<el-form-item :label="language==0?'舞种':'Division'" required>
<el-form-item :label="language==0?'舞种':'Division'" required v-if="user.utype=='1'">
<el-input v-model="myform.division" disabled/>
</el-form-item>
<el-form-item :label="language==0?'状态':'Status'" required>
<el-form-item :label="language==0?'状态':'Status'" required v-if="user.utype=='1'">
<el-input v-model="myform.wdsfStatus" disabled/>
</el-form-item>
<el-form-item :label="language==0?'证件号':'Passport number'">
<el-form-item :label="language==0?'证件号':'Passport number'" v-if="user.utype=='1'">
<el-input v-model="myform.passportNumber"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Valid Passport'" required>
<el-form-item :label="language==0?'有效证件':'Valid Passport'" required v-if="user.utype=='1'">
<file-upload v-model="myform.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
</el-form-item>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" prop="wdsfMin">
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" prop="wdsfMin" v-if="user.utype=='1'">
{{myform.wdsfMin}}
</el-form-item>
<!-- <el-form-item :label="language==0?'证件类型':'ID type'" required prop="idcType">-->
......
......@@ -22,7 +22,7 @@
</el-form>
</div>
<el-row justify="center">
<el-button type="primary" class="btn-lineG" @click="submit">{{ language==0?'保存':'Save' }}</el-button>
<el-button type="primary" class="btn-lineG" round @click="submit">{{ language==0?'保存':'Save' }}</el-button>
</el-row>
</div>
</el-card>
......
......@@ -14,46 +14,67 @@
<label class="blueTag" v-if="b.orderType == 0"> {{ language==0?'酒店':'HOTEL' }} </label>
<label class="purpleTag" v-if="b.orderType == 1"> {{ language==0?'车辆':'TRANSPORTATION' }} </label>
<label class="orangeTag" v-if="b.orderType == 2"> {{ language==0?'餐饮':'DINING' }} </label>
{{ language==0?'订单编号:':'No.' }} {{ b.id }}
<span>{{ language==0?'订单编号:':'No.' }} {{ b.id }}</span>
</div>
<div class="status-po">
<span class="bg-warning" v-if="b.status == '0'&&b.surplus!='0,0'&&b.surplus!='0'"> 待支付
<span class="bg-warning" v-if="b.status == '0'&&b.surplus!='0,0'&&b.surplus!='0'">
{{ language == 0 ?'待支付':'Unpaid' }}
</span>
<span class="bg-warning" v-if="b.status == '0'&&(b.surplus=='0,0'||b.surplus=='0')">已取消</span>
<span class="bg-blue" v-if="b.status == '1'">支付成功</span>
<span class="bg-warning" v-if="b.status == '2'">已取消</span>
<span class="bg-danger" v-if="b.status == '3'||b.status == '4'">已退订</span>
<span class="bg-warning" v-if="b.status == '0'&&(b.surplus=='0,0'||b.surplus=='0')">{{ language == 0 ? '已取消' : 'Canceled' }}</span>
<span class="bg-blue" v-if="b.status == '1'">{{ language == 0 ?'支付成功':'successful' }}</span>
<span class="bg-warning" v-if="b.status == '2'">{{ language == 0 ? '已取消' : 'Canceled' }}</span>
<span class="bg-danger" v-if="b.status == '3'||b.status == '4'">{{ language == 0 ? '已退订' : 'Refunded' }}</span>
</div>
<div class="plr20" v-if="b.orderType == 0">
<h3 class="name">{{b.name}}</h3>
<p>{{b.messageObj?.roomStayDate}}</p>
<p>{{b.messageObj?.roomName}}</p>
<p>{{b.messageObj?.roomInfo}}</p>
</div>
<div class="plr20" v-if="b.orderType == 1">
<h3 class="name">{{b.name}}</h3>
<div v-for="(car,index) in b.messageObj.carsList" :key="index">
<div v-if="car.num>0">{{car.name}}{{car.num}}</div>
</div>
<div>{{b.handleDate}}</div>
</div>
<div class="plr20" v-if="b.orderType == 2">
<h3 class="name">{{b.name}}</h3>
<div v-for="(n,index) in b.messageObj.foodsList" :key="index">
<div v-if="n.num > 0">
{{n.name}}({{n.categoryName}}) * <span>{{n.num}}</span>
<el-row class="pd20 mt10" justify="space-between" align="middle">
<el-col :lg="10">
<div v-if="b.orderType == 0">
<h3 class="name">{{b.name}}</h3>
<p>{{b.messageObj?.roomStayDate}}</p>
<p>{{b.messageObj?.roomInfo}}</p>
</div>
</div>
</div>
<el-row class="plr20 mt10" justify="space-between">
<el-col :lg="8">
<div v-if="b.orderType == 1">
<h3 class="name">{{b.name}}</h3>
<div v-for="(car,index) in b.messageObj.carsList" :key="index">
<p v-if="car.num>0">{{car.name}}{{car.num}}</p>
</div>
<p>{{b.handleDate}}</p>
</div>
<div v-if="b.orderType == 2">
<h3 class="name">{{b.name}}</h3>
<div v-for="(n,index) in b.messageObj.foodsList" :key="index">
<p v-if="n.num > 0">
{{n.name}}({{n.categoryName}}) * <span>{{n.num}} {{language==0?'份':'pcs'}}</span>
</p>
</div>
</div>
</el-col>
<el-col :lg="6">
<div v-if="b.orderType == 0">
<p>{{b.messageObj?.roomName}}</p>
<p>{{b.messageObj?.roomInfo}}</p>
</div>
<div v-if="b.orderType == 1">
</div>
<div v-if="b.orderType == 2">
<div v-for="(n,index) in b.messageObj.foodsList" :key="index">
<p v-if="n.num > 0">
{{n.name}}({{n.categoryName}}) * <span>{{n.num}} {{language==0?'份':'pcs'}}</span>
</p>
</div>
</div>
</el-col>
<el-col :lg="4">
<span class="text-warning"> {{ language==0?'¥':'€' }}
<span class="bigMoney">{{b.total}}</span>
<span class="bigMoney">{{language==0?b.total:b.totalEn}}</span>
</span>
</el-col>
<el-col :lg="8">
<el-col :lg="4">
<div class="text-right">
<el-button class="mb10" plain round type="primary" @click="goDetail(b)">
{{ language==0?'详情':'Detail' }}</el-button>
......@@ -64,7 +85,6 @@
</el-col>
</el-row>
</div>
</div>
</el-card>
<div class="pd20"></div>
......@@ -89,6 +109,7 @@ function getList() {
for (var b of list.value) {
b.messageObj = JSON.parse(b.message)
}
list.value = [...list.value]
})
}
function goDetail(b) {
......@@ -110,7 +131,7 @@ function toInvoice(){
<style scoped lang="scss">
.bigMoney{font-size: 24px;font-family: "DIN Alternate";}
.name{font-size: 18px;margin: 15px 0 0;}
.name{font-size: 18px;margin: 0;}
.status-po{position: absolute;right: 0;top: 0;font-size: 12px;
color: #FFFFFF;
span{border-radius: 0px 10px 0px 10px;padding: 4px 10px;}
......@@ -131,13 +152,17 @@ function toInvoice(){
}
}
.item{
margin: 0 0 20px;
background: #FBFCFD;
border-radius: 2px;
p{margin: 10px 0;}
margin: 0 0 20px;border: 1px solid #E5E5E5;
border-radius: 10px;
position: relative;
.bbody{padding: 0 15px 20px;}
.title label{border-radius: 5px 0 5px 0; color: #fff; padding:4px 10px;margin-right: 10px;}
p{margin: 5px 0;}
.title{background: #F7F7F7;border-bottom: 1px solid #E5E5E5;
span{font-size: 14px;
color: #4C5359;}
}
.title label{border-radius: 5px 0 5px 0; font-size: 12px; color: #fff; padding:4px 10px;margin-right: 10px;}
.blueTag{
background-color: #1EC886;}
.purpleTag {
......
......@@ -2,64 +2,70 @@
<div class="itemBox" v-if="language == 0">
<el-row :gutter="20">
<el-col :sm="12" :lg="8">
<div class="item" @click="goBooking(1)"><img src="@/assets/dance/btn01.png">酒店预订</div>
<div class="item" @click="popRemark(1)"><img src="@/assets/dance/btn01.png">酒店预订</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item" @click="goBooking(2)"><img src="@/assets/dance/btn02.png">车辆预约</div>
<div class="item" @click="popRemark(2)"><img src="@/assets/dance/btn02.png">车辆预订</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item" @click="goBooking(3)"><img src="@/assets/dance/btn03.png">餐饮预约</div>
<div class="item" @click="popRemark(3)"><img src="@/assets/dance/btn03.png">餐饮预订</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item" @click="goBooking(0)"><img src="@/assets/dance/btn04.png">票务预订</div>
<div class="item" @click="popRemark(0)"><img src="@/assets/dance/btn04.png">票务预订</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item" @click="goBooking(4)"><img src="@/assets/dance/btn05.png">化妆预约</div>
<div class="item" @click="popRemark(4)"><img src="@/assets/dance/btn05.png">化妆预约</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item" @click="goBooking(5)"><img src="@/assets/dance/btn06.png">拍照预约</div>
<div class="item" @click="popRemark(5)"><img src="@/assets/dance/btn06.png">拍照预约</div>
</el-col>
</el-row>
</div>
<div class="itemBox_en" v-else>
<el-row :gutter="20">
<el-col :sm="12" :lg="8">
<div class="item_en" @click="goBooking(1)"><img src="@/assets/dance/btn01.png">
<div class="item_en" @click="popRemark(1)"><img src="@/assets/dance/btn01.png">
<p>HOTEL RESERVATION</p>
</div></el-col>
<el-col :sm="12" :lg="8">
<div class="item_en" @click="goBooking(2)"><img src="@/assets/dance/btn02.png">
<div class="item_en" @click="popRemark(2)"><img src="@/assets/dance/btn02.png">
<p>TRANSPORTATION RESERVATION</p>
</div></el-col>
<el-col :sm="12" :lg="8">
<div class="item_en" @click="goBooking(3)"><img src="@/assets/dance/btn03.png">
<div class="item_en" @click="popRemark(3)"><img src="@/assets/dance/btn03.png">
<p>DINING RESERVATION</p>
</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item_en" @click="goBooking(0)">
<div class="item_en" @click="popRemark(0)">
<img src="@/assets/dance/btn04.png">
<p>TICKET BOOKING</p>
</div>
</el-col>
<el-col :sm="12" :lg="8">
<div class="item_en" @click="goBooking(4)"><img src="@/assets/dance/btn05.png">
<div class="item_en" @click="popRemark(4)"><img src="@/assets/dance/btn05.png">
<p>MAKEUP APPOINTMENT</p>
</div></el-col>
<el-col :sm="12" :lg="8">
<div class="item_en" @click="goBooking(5)"><img src="@/assets/dance/btn06.png">
<div class="item_en" @click="popRemark(5)"><img src="@/assets/dance/btn06.png">
<p>PHOTOGRAPHY APPOINTMENT</p>
</div></el-col>
</el-row>
</div>
<order-remark ref="orderRemarkRef" @submit="goBooking"/>
</template>
<script setup>
import {useRouter} from "vue-router";
const router = useRouter()
import OrderRemark from '@/viewsPc/components/orderRemark'
const {proxy} = getCurrentInstance()
import {useStorage} from "@vueuse/core/index";
import {ElMessage} from "element-plus";
import {getCurrentInstance} from "@vue/runtime-core";
import {onMounted} from "vue";
const props = defineProps({
matchId: {
type: String,
......@@ -68,13 +74,23 @@ const props = defineProps({
}
})
const language= useStorage('language',0)
onMounted(()=>{
})
function popRemark(type){
const params = {
matchId: props.matchId,
title: language.value == 0 ?'预定说明':'Booking Instructions',
type: type
}
proxy.$refs['orderRemarkRef'].open(params)
}
function goBooking(n) {
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
return
switch (n) {
case 0:
// 票务
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'There is no information available for booking')
return
router.push({path: `/booking/ticket/${props.matchId}`})
break;
......@@ -92,14 +108,14 @@ function goBooking(n) {
break;
case 4:
//化妆
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'Building!')
return
router.push({path: `/booking/makeup/${props.matchId}`})
break;
case 5:
//拍照
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'Building!')
return
router.push({path: `/booking/photography/${props.matchId}`})
......
<template>
<el-dialog :title="title" v-model="show" width="30%" @close="close">
<div>
<div class="pd20" v-html="form.reserveDes"></div>
</div>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="ok">{{language==0?'确定':'Confirm'}}</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import {getBaseInfoByActiveId} from "@/apiPc/booking";
import {getCurrentInstance} from "@vue/runtime-core";
import {useStorage} from "@vueuse/core/index";
const emit = defineEmits([ 'submit'])
const {proxy} = getCurrentInstance()
const language= useStorage('language',0)
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const title = ref('')
const show = ref(false)
const form = ref({})
let matchId = ''
let type = ''
const open = (params) => {
title.value = params.title
matchId = params.matchId
type = params.type
show.value = true
getData()
}
defineExpose({
open
})
function getData() {
console.log(matchId)
getBaseInfoByActiveId(matchId).then(res=>{
form.value = res.data || {}
}).catch(err=>{
console.log(err)
})
}
function close() {
show.value = false
}
function ok() {
// type
show.value = false
if(!user){
useUserStore().setVisitor()
} else {
emit('submit', type)
}
}
</script>
<style scoped lang="scss">
</style>
......@@ -48,7 +48,7 @@
<el-row style="align-items: center">
<el-col :sm="24" :lg="10">
<div class="bgbg">
<img src="@/assets/dance/text.png">
<h1 style="color: #fff">{{matchData?.name}}</h1>
<a class="zn-btn" @click="goGuide" target="_blank">参赛指南
<el-icon>
<download/>
......@@ -418,7 +418,7 @@ const init = () => {
})
}
const carouselChange = (e) => {
console.log(e)
console.log(e.name)
matchData.value = maList.value[e]
}
const goDetail = (n) => {
......
<template>
<div>
<div class="banner">
<el-carousel height="450px" :autoplay="false" arrow="hover">
<el-carousel height="450px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id">
<div class="bannerItem">
<div class="h100">
......@@ -45,7 +45,7 @@
<el-row>
<el-col :sm="24" :lg="10">
<div class="bgbg">
<h1 style="color: #fff">WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024</h1>
<h1 style="color: #fff">{{matchData?.name}}</h1>
<a class="zn-btn" @click="goGuide">
GUIDELINE
<el-icon><download /></el-icon>
......@@ -412,7 +412,10 @@ const init = () => {
})
}
const carouselChange = (e) => {
console.log(e.name)
matchData.value = maList.value[e]
}
const gosaiC = () => {
router.push({
path: `/saiC/index`
......
......@@ -215,14 +215,15 @@ const data = reactive({
groupId: '0',
signType: '',
activeStep: 1,
isNational:false
isNational:false,
languageSource:''
})
const {loading,
form,personAllList,
rules,
signType,
groupId,
hasChooseObj,activeStep,isNational
hasChooseObj,activeStep,isNational,languageSource
} = toRefs(data)
let matchId = ''
const user = useUserStore().user
......@@ -232,6 +233,7 @@ onMounted(() => {
groupId.value = group.id
signType.value = route.query.signType || ''
isNational.value = route.query.isNational
languageSource.value = route.query.languageSource
if(!user){
router.push({name: 'home'})
return
......@@ -359,22 +361,22 @@ function goNext() {
}
function goPrev() {
if(isNational.value){
if(languageSource.value=='100'){
router.push({
name: `teamSign`,
name: `teamSignCn`,
query: {
matchId: matchId,
groupId: groupId.value,
isNational:isNational.value
isNational: false
}
})
} else {
router.push({
name: `teamSignCn`,
name: `teamSign`,
query: {
matchId: matchId,
groupId: groupId.value,
isNational: false
isNational:isNational.value
}
})
}
......
......@@ -19,6 +19,8 @@
</div>
<div class="panel-body" style="padding: 10px">
<div style="margin: 0 4px 10px;display: flex">
<!-- 可通过选手管理,增加和编辑运动员-->
<el-select multiple v-model="choosedchoosed" collapse-tags-tooltip filterable
@change="changechoosed">
<el-option v-for="c in athletesList" :key="c.id" :label="c.xing + c.ming" :value="c.id">
......
......@@ -326,7 +326,7 @@ function codeSuccess(msg) {
isCodeTrue.value = true
checkWdsfAthletes({card: card.value,groupId:groupId}).then(res => {
if (res.data.wdsfFlag==-1) {
ElMessage.warning(language.value == 0 ?'您添加的运动员代表国家/地区,与团体账号注册的国家/地区不符,无法添加':'The athlete you added represents a country/region that does not match the country/region registered for the group account, and cannot be added')
ElMessage.warning(language.value == 0 ?'您添加的运动员代表国家/地区,与团体账号注册的国家/地区不符,无法添加':'The athlete \'s representing, does not match the group account‘s country/region and cannot be added.')
isCodeTrue.value = false
return
}
......
......@@ -53,7 +53,7 @@
<el-input v-model="form.passportNo"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy">
<file-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false"
<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">
......@@ -91,6 +91,7 @@ import {getCurrentInstance, watch} from "vue";
import {nextTick} from "@vue/runtime-core";
import {ElMessage, ElMessageBox} from "element-plus";
import {addInvitation, countryList} from "@/apiPc/match";
import ImageUpload from "@/components/ImageUpload";
const {proxy} = getCurrentInstance()
const language = useStorage('language', 0)
......
<template>
<div class="collapsebox">
<div class="pd20">
<table class="table" cellspacing="0" cellpadding="0" v-if="list.length > 0">
<tr v-if="language==0">
<th>组别编号</th>
<th>组别名称</th>
<th>舞种</th>
<th>舞种明细</th>
<th>参赛性别</th>
<th>参赛年龄</th>
<th>服务费(元)</th>
</tr>
<tr v-else>
<th>EVENT code</th>
<th>Group</th>
<th>DISCIPLINE</th>
<th>Dance Detail</th>
<th>Sex</th>
<th>Age</th>
<th>Registration Fee</th>
</tr>
<tr v-for="(p,index) in list" :key="index">
<td>{{ p.code }}</td>
<td>{{ p.name }}</td>
<td>{{ p.danceType }}</td>
<td>{{ p.danceTypeDetailStr }}</td>
<td>{{ p.playTypeStr }}</td>
<td>
<!-- {{ isNational }}-->
<el-table :data="list" border>
<el-table-column :label="language==0?'组别编号':'Event Code'" prop="code" align="center"></el-table-column>
<el-table-column :label="language==0?'组别名称':'Event'" prop="name" align="center"></el-table-column>
<el-table-column :label="language==0?'舞种':'Dance Type'" align="center">
<template #default="scope">
<span v-if="scope.row.danceTypeDetailStr">{{ scope.row.danceTypeDetailStr }}</span>
<span v-else>{{ scope.row.danceType }}</span>
</template>
</el-table-column>
<el-table-column :label="language==0?'参赛性别':'Sex'" align="center">
<template #default="scope">
<span v-if="scope.row.playTypeStr">{{ scope.row.playTypeStr }}</span>
<span v-else>{{ scope.row.playType }}</span>
</template>
</el-table-column>
<el-table-column :label="language==0?'参赛年龄':'Age'" align="center" min-width="100">
<template #default="scope">
<div v-if="isNational">
<span v-if="p.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>
<span v-if="p.ageGroup == '1'" >Juvenile I</span>
<span v-if="p.ageGroup == '2'" >Juvenile II</span>
<span v-if="p.ageGroup == '3'" >Juv1& II (comb.)</span>
<span v-if="p.ageGroup == '4'" >Junior I</span>
<span v-if="p.ageGroup == '5'" >Junior II</span>
<span v-if="p.ageGroup == '6'" >Juv I & II (comb.)</span>
<span v-if="p.ageGroup == '7'" >Youth</span>
<span v-if="p.ageGroup == '8'" >Under 21</span>
<span v-if="p.ageGroup == '9'" >Adult</span>
<span v-if="p.ageGroup == '10'" >Senior I</span>
<span v-if="p.ageGroup == '11'" >Senior II</span>
<span v-if="p.ageGroup == '12'" >Senior III</span>
<span v-if="p.ageGroup == '13'" >Senior IV</span>
<span v-if="p.ageGroup == '14'" >Senior V</span>
<span v-if="scope.row.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>
<span v-if="scope.row.ageGroup == '1'" >Juvenile I</span>
<span v-if="scope.row.ageGroup == '2'" >Juvenile II</span>
<span v-if="scope.row.ageGroup == '3'" >Juv1& II (comb.)</span>
<span v-if="scope.row.ageGroup == '4'" >Junior I</span>
<span v-if="scope.row.ageGroup == '5'" >Junior II</span>
<span v-if="scope.row.ageGroup == '6'" >Juv I & II (comb.)</span>
<span v-if="scope.row.ageGroup == '7'" >Youth</span>
<span v-if="scope.row.ageGroup == '8'" >Under 21</span>
<span v-if="scope.row.ageGroup == '9'" >Adult</span>
<span v-if="scope.row.ageGroup == '10'" >Senior I</span>
<span v-if="scope.row.ageGroup == '11'" >Senior II</span>
<span v-if="scope.row.ageGroup == '12'" >Senior III</span>
<span v-if="scope.row.ageGroup == '13'" >Senior IV</span>
<span v-if="scope.row.ageGroup == '14'" >Senior V</span>
</div>
<div v-else>
<div>{{ p.birthPeriod }}</div>
<div>{{p.birthPeriodSecond}}</div>
<div>{{ scope.row.birthPeriod }}</div>
<div>{{scope.row.birthPeriodSecond}}</div>
</div>
</template>
</el-table-column>
<el-table-column :label="language==0?'服务费':'Registration Fee'" width="160" align="center">
<template #default="scope">
<div class="text-primary">{{ language==0?'¥':'€' }}{{ scope.row.serviceFee }}</div>
</template>
</el-table-column>
</el-table>
<!-- <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>-->
</td>
<td>{{ language==0?'¥':'€' }}{{ p.serviceFee }}</td>
</tr>
</table>
<!-- <table class="table" cellspacing="0" cellpadding="0" v-if="list.length > 0">-->
<!-- <tr v-if="language==0">-->
<!-- <th>组别编号</th>-->
<!-- <th>组别名称</th>-->
<!-- <th>舞种</th>-->
<!-- <th>舞种明细</th>-->
<!-- <th>参赛性别</th>-->
<!-- <th>参赛年龄</th>-->
<!-- <th>服务费(元)</th>-->
<!-- </tr>-->
<!-- <tr v-else>-->
<!-- <th>EVENT code</th>-->
<!-- <th>EVENT</th>-->
<!-- <th>DISCIPLINE</th>-->
<!-- <th>Dance Detail</th>-->
<!-- <th>Sex</th>-->
<!-- <th>Age</th>-->
<!-- <th>Registration Fee</th>-->
<!-- </tr>-->
<!-- <tr v-for="(p,index) in list" :key="index">-->
<!-- <td>{{ p.code }}</td>-->
<!-- <td>{{ p.name }}</td>-->
<!-- <td>{{ p.danceType }}</td>-->
<!-- <td>{{ p.danceTypeDetailStr }}</td>-->
<!-- <td>{{ p.playTypeStr }}</td>-->
<!-- <td>-->
<!--&lt;!&ndash; {{ isNational }}&ndash;&gt;-->
<!-- <div v-if="isNational">-->
<!-- <span v-if="p.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>-->
<!-- <span v-if="p.ageGroup == '1'" >Juvenile I</span>-->
<!-- <span v-if="p.ageGroup == '2'" >Juvenile II</span>-->
<!-- <span v-if="p.ageGroup == '3'" >Juv1& II (comb.)</span>-->
<!-- <span v-if="p.ageGroup == '4'" >Junior I</span>-->
<!-- <span v-if="p.ageGroup == '5'" >Junior II</span>-->
<!-- <span v-if="p.ageGroup == '6'" >Juv I & II (comb.)</span>-->
<!-- <span v-if="p.ageGroup == '7'" >Youth</span>-->
<!-- <span v-if="p.ageGroup == '8'" >Under 21</span>-->
<!-- <span v-if="p.ageGroup == '9'" >Adult</span>-->
<!-- <span v-if="p.ageGroup == '10'" >Senior I</span>-->
<!-- <span v-if="p.ageGroup == '11'" >Senior II</span>-->
<!-- <span v-if="p.ageGroup == '12'" >Senior III</span>-->
<!-- <span v-if="p.ageGroup == '13'" >Senior IV</span>-->
<!-- <span v-if="p.ageGroup == '14'" >Senior V</span>-->
<!-- </div>-->
<!-- <div v-else>-->
<!-- <div>{{ p.birthPeriod }}</div>-->
<!-- <div>{{p.birthPeriodSecond}}</div>-->
<!-- </div>-->
<!-- &lt;!&ndash; <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>&ndash;&gt;-->
<!-- </td>-->
<!-- <td>{{ language==0?'¥':'€' }}{{ p.serviceFee }}</td>-->
<!-- </tr>-->
<!-- </table>-->
</div>
<el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list.length == 0" description=""/>
<!-- <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list.length == 0" description=""/>-->
</div>
</template>
......@@ -81,7 +128,7 @@ const props = defineProps({
<style scoped lang="scss">
.table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1;
th{background: #eee;padding: 6px 10px;
th{background: #eee;padding: 6px 10px;text-transform: uppercase;
border-right: 1px solid #e1e1e1;
border-bottom:1px solid #e1e1e1;
font-size: 15px;
......
......@@ -6,8 +6,8 @@
</div>
<div class="xzbox" v-html="form.ocOrganizer">
</div>
<div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div>
<div class="xzbox">
<div class="indexTitle" v-if="form.languageSource!='100'"><h3 class="leftboderTT">报名须知</h3></div>
<div class="xzbox" v-if="form.languageSource!='100'">
<div v-html="form.signKnow"></div>
<el-link v-if="form.signKnowUrl" type="primary" :href="fillImgUrl(JSON.parse(form.signKnowUrl)[0]?.url)" target="_blank">
<el-icon :size="20">
......@@ -25,20 +25,20 @@
<!-- {{ JSON.parse(form.disclaimerUrl)[0]?.name }}-->
<!-- </el-link>-->
<!-- </div>-->
<!-- <div class="indexTitle"><h3 class="leftboderTT">赛事规程</h3></div>-->
<!-- <div class="xzbox">-->
<div class="indexTitle" v-if="form.languageSource=='100'"><h3 class="leftboderTT">赛事规程</h3></div>
<div class="xzbox" v-if="form.languageSource=='100'">
<div v-html="form.ruleContent"></div>
<el-link v-if="form.ruleUrl" type="primary" :href="fillImgUrl(JSON.parse(form.ruleUrl)[0]?.url)" target="_blank">
<el-icon :size="20">
<Download />
</el-icon>
{{ JSON.parse(form.ruleUrl)[0]?.name }}
</el-link>
</div>
<!-- <div class="indexTitle" v-if="form.type==1&&form.cptProjectList?.length > 0"><h3 class="leftboderTT">竞赛项目</h3></div>-->
<!-- <div v-if="form.type==1&&form.cptProjectList?.length > 0">-->
<!-- <el-link v-if="form.ruleUrl" type="primary" :href="fillImgUrl(JSON.parse(form.ruleUrl)[0]?.url)" target="_blank">-->
<!-- <el-icon :size="20">-->
<!-- <Download />-->
<!-- </el-icon>-->
<!-- {{ JSON.parse(form.ruleUrl)[0]?.name }}-->
<!-- </el-link>-->
<!-- </div>-->
<div class="indexTitle" v-if="form.type==1&&form.cptProjectList?.length > 0"><h3 class="leftboderTT">竞赛项目</h3></div>
<div v-if="form.type==1&&form.cptProjectList?.length > 0">
</div>
</div>
<div style="padding: 0 20px 20px" v-else>
......
......@@ -2,37 +2,37 @@
<div style="filter: opacity(1)">
<el-row :gutter="14" v-if="language==0">
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(0)">
<div class="funcBtn" @click="popRemark(0)">
<img src="@/assets/dance/btn04.png"/>
<h4>票务预订</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(1)">
<div class="funcBtn" @click="popRemark(1)">
<img src="@/assets/dance/btn01.png"/>
<h4>酒店预</h4>
<h4>酒店预</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(2)">
<div class="funcBtn" @click="popRemark(2)">
<img src="@/assets/dance/btn02.png"/>
<h4>车辆预</h4>
<h4>车辆预</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(3)">
<div class="funcBtn" @click="popRemark(3)">
<img src="@/assets/dance/btn03.png"/>
<h4>餐饮预订</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(4)">
<div class="funcBtn" @click="popRemark(4)">
<img src="@/assets/dance/btn05.png"/>
<h4>化妆预约</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(5)">
<div class="funcBtn" @click="popRemark(5)">
<img src="@/assets/dance/btn06.png"/>
<h4>拍照预约</h4>
</div>
......@@ -40,49 +40,57 @@
</el-row>
<el-row :gutter="14" v-else>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(0)">
<div class="funcBtn" @click="popRemark(0)">
<img src="@/assets/dance/btn04.png"/>
<h4>TICKET BOOKING</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(1)">
<div class="funcBtn" @click="popRemark(1)">
<img src="@/assets/dance/btn01.png"/>
<h4>HOTEL RESERVATION</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(2)">
<div class="funcBtn" @click="popRemark(2)">
<img src="@/assets/dance/btn02.png"/>
<h4>TRANSPORTATION RESERVATION</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(3)">
<div class="funcBtn" @click="popRemark(3)">
<img src="@/assets/dance/btn03.png"/>
<h4>DINING RESERVATION</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(4)">
<div class="funcBtn" @click="popRemark(4)">
<img src="@/assets/dance/btn05.png"/>
<h4>MAKEUP APPOINTMENT</h4>
</div>
</el-col>
<el-col :lg="4" :md="8" :sm="12" :xs="12">
<div class="funcBtn" @click="goBooking(5)">
<div class="funcBtn" @click="popRemark(5)">
<img src="@/assets/dance/btn06.png"/>
<h4>PHOTOGRAPHY APPOINTMENT</h4>
</div>
</el-col>
</el-row>
</div>
<order-remark ref="orderRemarkRef" @submit="goBooking"/>
</template>
<script setup>
import {ElMessage} from "element-plus";
import {useRouter} from "vue-router";
import {useStorage} from "@vueuse/core/index";
import OrderRemark from '@/viewsPc/components/orderRemark'
import {getBaseInfoByActiveId} from "@/apiPc/booking";
import {getCurrentInstance} from "@vue/runtime-core";
import {onMounted} from "vue";
const {proxy} = getCurrentInstance()
const router = useRouter()
const language= useStorage('language',0)
const props = defineProps({
......@@ -92,16 +100,35 @@ const props = defineProps({
default: '0'
}
})
const form = ref({})
onMounted(()=>{
getBaseInfoByActiveId(props.matchId).then(res=>{
form.value = res.data || {}
}).catch(err=>{
console.log(err)
})
})
function building() {
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'There is no information available for booking')
}
function popRemark(type){
// if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || type=='4' || type=='5'){
// building()
// return
// }
const params = {
matchId: props.matchId,
title: language.value == 0 ?'预定说明':'Booking Instructions',
type: type
}
proxy.$refs['orderRemarkRef'].open(params)
}
function goBooking(n) {
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
return
switch (n) {
case 0:
// 票务
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'There is no information available for booking')
return
router.push({path: `/booking/ticket/${props.matchId}`})
break;
......@@ -119,14 +146,14 @@ function goBooking(n) {
break;
case 4:
//化妆
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'There is no information available for booking')
return
router.push({path: `/booking/makeup/${props.matchId}`})
break;
case 5:
//拍照
ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
ElMessage.warning(language.value==0?'暂无可预订的信息':'There is no information available for booking')
return
router.push({path: `/booking/photography/${props.matchId}`})
......
......@@ -3,8 +3,8 @@
<el-table :data="list" border style="width: 100%">
<el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/>
<el-table-column :label="language==0?'组别代码':'EVENT code'" width="120px" prop="project.code"/>
<el-table-column :label="language==0?'组别':'Group'" prop="project.name"/>
<el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/>
<el-table-column :label="language==0?'组别':'EVENT'" prop="project.name"/>
<el-table-column :label="language==0?'舞种':'DISCIPLINE'" width="120px" prop="project.danceType"/>
<el-table-column :label="language==0?'参赛说明':'Participation Instructions'" min-width="160px">
<template #default="scope">
<div v-html="scope.row.project.remarks"></div>
......
......@@ -16,7 +16,7 @@
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
<div class="item-body">
<h3 v-html="n.name" />
<h3 class="esp_2" v-html="n.name" />
<p v-html="n.subName"/>
<a class="go">{{ language==0?'查看详情':'Detail' }}
<el-icon class="rotate90_180"><sort-down/></el-icon>
......
<template>
<el-dialog v-model="show" :title="language==0?'游客登录':'Visitor Login'" close-icon="CircleClose"
width="600" :append-to-body="true" destroy-on-close @close="close">
<div class="pt30">
<el-form class="d-form" size="large" :label-width="language==0?120:150" style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'邮箱':'E-mail'" required>
<el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"
/>
<div class="tip" v-if="language==0">
(请填写正确的邮箱信息,邮箱信息在注册完成后无法修改。
该邮箱后续会作为您登录的账户,
并接收报名审核结果、支付账单、签证邀请函等相关信息。)
</div>
<div v-else class="tip">
Please fill in the correct email, which cannot be changed after the registration is completed. The email will be used as your login account and to receive relevant information including results of registration review, payment bills, visa invitation letters, etc.
</div>
</el-form-item>
<el-form-item :label="language==0?'验证码':'Code'" required>
<el-input v-model="form.code">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
<count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
{{ totalSeconds }} {{ language == 0 ? '秒' : 's' }}
</count-down>
<span v-else>
{{ language == 0 ? '发送验证码' : 'Send' }}
</span>
</el-button>
</template>
</el-input>
<div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
<Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText"
type="inside" @success="codeSuccess"></Vcode>
</div>
</el-form-item>
<el-form-item :label="language==0?'密码':'Password'" required>
<el-input type="password" show-password v-model="form.password"
:placeholder="language==0?'6-16位密码。区分大小写':''"/>
</el-form-item>
<el-form-item :label="language==0?'确认密码':'Confirm Password'" required>
<el-input type="password" show-password v-model="form.password2" @blur="vconfirmPassword"
:placeholder="language==0?'再次输入密码':''"/>
</el-form-item>
</el-form>
</div>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="register">{{language==0?'登录':'Confirm'}}</el-button>
<div class="text-primary underline mt20 pointer" @click="goLogin">{{language==0?'已有账号去登录':'Already have an account? Login'}}</div>
</div>
</template>
</el-dialog>
</template>
<script setup>
import {reactive, toRefs} from 'vue'
import Vcode from "vue3-puzzle-vcode"
import {ElMessage} from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import {getCaptchaSms} from "@/apiPc/match";
import {onMounted} from "@vue/runtime-core";
import {useStorage} from "@vueuse/core/index";
import {vistorRegister} from "@/apiPc/common";
import {setToken} from "@/utils/auth";
import useUserStore from "@/store/modules/user";
const language = useStorage('language', 0)
const data = reactive({
isShow: false,
isCodeTrue: false,
counting: false,
form: {},
activeStep: 0,
failVcode: '验证失败,请重试',
successVcode: '验证通过!',
sliderText: '拖动滑块完成拼图',
show:false
})
const {isShow, isCodeTrue, counting, form, activeStep, failVcode, successVcode, sliderText,show} = toRefs(data)
const emit = defineEmits(['submit'])
onMounted(() => {
if (language.value == 1) {
failVcode.value = 'Error!'
successVcode.value = 'Success!'
sliderText.value = 'Drag the slider to complete the puzzle'
}
})
const open = (params) => {
show.value = true
}
defineExpose({
open
})
function sendsmsMsg() {
if (!form.value.account) {
if (language.value == 0) {
ElMessage.warning('请填写邮箱')
} else {
ElMessage.warning('Please fill in your email address')
}
return
}
if (form.value.account.indexOf('@') == -1) {
if (language.value == 0) {
ElMessage.warning('请填写正确的邮箱')
} else {
ElMessage.warning('Please fill in the correct email')
}
return
}
if (counting.value) {
return
} else {
isShow.value = true
}
}
function verifyCode() {
if (!form.value.account) {
return
}
if (form.value.account.indexOf('@') > -1) {
//邮箱
}
}
function codeSuccess(msg) {
console.log('验证通过' + msg);
isShow.value = false
getCaptchaSms({account: form.value.account}).then(res => {
counting.value = true
isCodeTrue.value = true
ElMessage.success(language.value == 0 ? '发送成功,请关注邮箱邮件' :'Send success, please check your email')
})
}
function resetCode() {
isCodeTrue.value = false
}
function goLogin() {
show.value = false
useUserStore().setReLogin()
}
function register() {
//游客注册
if (!form.value.account) {
if (language.value == 0) {
ElMessage.warning('请填写邮箱')
} else {
ElMessage.warning('Please fill in your email address')
}
return
}
if (!form.value.code) {
if (language.value == 0) {
ElMessage.warning('请填写验证码')
} else {
ElMessage.warning('Please fill in Code')
}
return
}
if (!form.value.password) {
ElMessage.warning(language.value == 0?'请输入密码':'Please enter password')
return
}
if (!form.value.password2) {
ElMessage.warning(language.value == 0?'请再次输入密码':'Please enter password')
return
}
delete form.value.password2
vistorRegister(form.value).then(res=>{
setToken(res.data.token)
emit('submitForm')
})
}
const vconfirmPassword = () => {
if (form.value.password !== form.value.password2) {
ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' :'The two passwords entered are inconsistent')
}
}
function close() {
show.value = false
}
</script>
<style scoped lang="scss">
.tip{line-height: 1.6}
</style>
......@@ -78,9 +78,9 @@ onMounted(() => {
function sendsmsMsg() {
if (!form.value.account) {
if (language.value == 0) {
ElMessage.warning('请填写手机/邮箱')
ElMessage.warning('请填写邮箱')
} else {
ElMessage.warning('Please fill in your phone/email address')
ElMessage.warning('Please fill in your email address')
}
return
}
......
......@@ -5,9 +5,9 @@
<label>{{ language == 0 ? '登录账号' : 'Account' }}</label> {{ accont }}
</div>
</div>
<div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Password' }} <span
<div class="leftboderTT" v-if="!user">{{ language == 0 ? '登录密码' : 'Password' }} <span
v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
<div class="d-form-border">
<div class="d-form-border" v-if="!user">
<el-form class="d-form" size="large" label-width="120"
:label-position="language==0?'left':'top'" style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'密码':'Password'" required>
......@@ -109,7 +109,10 @@
<div class="text-center">
<!-- <el-button class="primary-kx" @click="goStep1">上一步</el-button>-->
<el-button type="primary" round class="btn-lineG w200px" @click.prevent="goStep3" :loading="loading">
<el-button v-if="user.utype=='3'" type="primary" round class="btn-lineG w200px" @click.prevent="upgrade" :loading="loading">
{{ language == 0 ? '升级账号' : 'Submit' }}
</el-button>
<el-button v-else type="primary" round class="btn-lineG w200px" @click.prevent="goStep3" :loading="loading">
{{ language == 0 ? '立即注册' : 'Register Now!' }}
</el-button>
</div>
......@@ -123,11 +126,17 @@ import * as match from "@/apiPc/match";
import {ElMessage} from "element-plus";
import {setToken} from "@/utils/auth";
import {useStorage} from "@vueuse/core/index";
import {useRouter} from "vue-router";
import {useRoute, useRouter} from "vue-router";
import useUserStore from "@/store/modules/user";
import {upgradeTeam} from "@/apiPc/common";
const router = useRouter()
const route = useRoute()
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submit', 'prev'])
const language= useStorage('language',0)
const userStore = useUserStore()
const user = useUserStore().user
const props = defineProps({
accont: {
type: String,
......@@ -182,7 +191,11 @@ const vconfirmPassword = () => {
ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' :'The two passwords entered are inconsistent')
}
}
const matchId = ref('')
onMounted(() => {
if(route.query.matchId){
matchId.value = route.query.matchId
}
getCountryList()
getRegionsList()
})
......@@ -202,10 +215,49 @@ function getRegionsList() {
const goStep1 = () => {
emit('prev')
}
const upgrade = () => {
proxy.$refs.registerRef.validate(valid => {
if (valid) {
if(language.value==0){
var pattern = /^1[3456789]\d{9}$/
if (!pattern.test(form.value.contactTel)) {
ElMessage.warning(language.value == 0 ?'请输入正确的手机号':'Please enter the correct mobile phone number')
return
}
}
if (!isAgree.value) {
ElMessage.warning(language.value == 0?'请勾选接受':'Please check the acceptance')
return
}
loading.value = true
form.value.regionId = regionArr.value.pop()
form.value.userId = user.userId
console.log('upgrade')
upgradeTeam(form.value).then(res => {
loading.value = false
console.log(matchId.value,res.data)
if(res.data){
userStore.getInfo().then(()=>{
router.push({
name: 'matchDetail',
params: {
id: matchId.value
}
})
})
} else {
ElMessage.success(language.value == 0?'升级成功':'Upgrade successful')
router.push({name: 'home'})
}
}).catch(()=>{
loading.value = false
})
}
})
}
const goStep3 = () => {
proxy.$refs.registerRef.validate(valid => {
if (valid) {
if(language.value==0){
var pattern = /^1[3456789]\d{9}$/
if (!pattern.test(form.value.contactTel)) {
......@@ -213,9 +265,7 @@ const goStep3 = () => {
return
}
}
if (!isAgree.value) {
if (!isAgree.value) {
ElMessage.warning(language.value == 0?'请勾选接受':'Please check the acceptance')
return
}
......@@ -241,8 +291,6 @@ const goStep3 = () => {
})
}
})
}
const showAgreeMent = () => {
const routeLocation = router.resolve({
......
<template>
<div>
<div class="mt30 mb60">
<div class="box">
<!--机构注册-->
<el-card>
<el-steps :active="activeStep" align-center>
<el-step :title="language==0?'创建账号':'create an account'" />
<el-step :title="language==0?'账号信息':'account information'" />
<el-step :title="language==0?'注册完成':'stered successfully'" />
</el-steps>
</el-card>
<div class="mt20"></div>
<Step1 v-if="activeStep==0" @submit="toStep2" @userName="getUserName" />
<Step2 v-if="activeStep==1" @submit="toStep3" @prev="toStep1" :accont="form.userName"/>
<Step3 v-if="activeStep==2" :accont="form.userName"/>
</div>
</div>
<div class="mt30 mb60">
<div class="box">
<!--机构注册-->
<el-card v-if="!user">
<el-steps :active="activeStep" align-center>
<el-step :title="language==0?'创建账号':'create an account'"/>
<el-step :title="language==0?'账号信息':'account information'"/>
<el-step :title="language==0?'注册完成':'stered successfully'"/>
</el-steps>
</el-card>
<div class="mt20"></div>
<Step1 v-if="activeStep==0" @submit="toStep2" @userName="getUserName"/>
<Step2 v-if="activeStep==1" @submit="toStep3" @prev="toStep1" :accont="form.userName"/>
<Step3 v-if="activeStep==2" :accont="form.userName"/>
</div>
</div>
</div>
</template>
......@@ -23,26 +23,31 @@
import Step1 from "./step1";
import Step2 from "./step2";
import Step3 from "./step3";
import {onMounted,toRefs,reactive} from "vue"
import {onMounted, toRefs, reactive} from "vue"
import {useStorage} from "@vueuse/core/index";
import {useRoute} from "vue-router";
const language= useStorage('language',0)
import useUserStore from "@/store/modules/user";
const language = useStorage('language', 0)
const route = useRoute()
const data = reactive({
isShow:false,
isCodeTrue:false,
counting:false,
form:{
userName:''
isShow: false,
isCodeTrue: false,
counting: false,
form: {
userName: ''
},
activeStep: 0
})
const {isShow,isCodeTrue,counting,form,activeStep} = toRefs(data)
const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data)
const user = useUserStore().user
onMounted(() => {
if(route.query.step){
if (route.query.step) {
activeStep.value = Number(route.query.step)
}
if (user) {
form.value.userName = user.userName
}
})
const toStep1 = () => {
activeStep.value = 0
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!