Merge branch 'dev' of https://code.itechtop.cn/yangyang/dance-pc into dev
Showing
15 changed files
with
416 additions
and
226 deletions
| ... | @@ -18,12 +18,16 @@ | ... | @@ -18,12 +18,16 @@ |
| 18 | <a v-show="form?.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a> | 18 | <a v-show="form?.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a> |
| 19 | </div> | 19 | </div> |
| 20 | <div class="info"> | 20 | <div class="info"> |
| 21 | <el-icon><Clock /></el-icon> | 21 | <el-icon> |
| 22 | <Clock/> | ||
| 23 | </el-icon> | ||
| 22 | <span class="mr10">{{ language == 0 ? '入住时间' : 'Check-in' }}:{{ form?.checkInTime }}</span> | 24 | <span class="mr10">{{ language == 0 ? '入住时间' : 'Check-in' }}:{{ form?.checkInTime }}</span> |
| 23 | <span>{{ language == 0 ? '离店时间' : 'Check-out' }}:{{ form?.checkOutTime }}</span> | 25 | <span>{{ language == 0 ? '离店时间' : 'Check-out' }}:{{ form?.checkOutTime }}</span> |
| 24 | </div> | 26 | </div> |
| 25 | <div class="info esp"> | 27 | <div class="info esp"> |
| 26 | <el-icon><MapLocation /></el-icon> | 28 | <el-icon> |
| 29 | <MapLocation/> | ||
| 30 | </el-icon> | ||
| 27 | <span>{{ form?.addName }}</span> | 31 | <span>{{ form?.addName }}</span> |
| 28 | </div> | 32 | </div> |
| 29 | <div v-if="form?.introduction" class="info pointer"> | 33 | <div v-if="form?.introduction" class="info pointer"> |
| ... | @@ -43,13 +47,16 @@ | ... | @@ -43,13 +47,16 @@ |
| 43 | <el-row :gutter="20"> | 47 | <el-row :gutter="20"> |
| 44 | <el-col :span="10"> | 48 | <el-col :span="10"> |
| 45 | <div class="imgbox hotelImg"> | 49 | <div class="imgbox hotelImg"> |
| 46 | <el-image :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover" :preview-src-list="form?.photos?.split(',')"/> | 50 | <el-image :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover" |
| 51 | :preview-src-list="form?.photos?.split(',')"/> | ||
| 47 | </div> | 52 | </div> |
| 48 | </el-col> | 53 | </el-col> |
| 49 | <el-col :span="14"> | 54 | <el-col :span="14"> |
| 50 | <el-row class="h100" :gutter="20"> | 55 | <el-row class="h100" :gutter="20"> |
| 51 | <el-col :span="8" class="oddmb" v-for="(p,index) in form?.photos?.split(',').slice(1,7)"> | 56 | <el-col :span="8" class="oddmb" v-for="(p,index) in form?.photos?.split(',').slice(1,7)"> |
| 52 | <div class="imgbox hotelImg"><el-image :src="fillImgUrl(p)" fit="cover"/></div> | 57 | <div class="imgbox hotelImg"> |
| 58 | <el-image :src="fillImgUrl(p)" fit="cover"/> | ||
| 59 | </div> | ||
| 53 | </el-col> | 60 | </el-col> |
| 54 | </el-row> | 61 | </el-row> |
| 55 | </el-col> | 62 | </el-col> |
| ... | @@ -61,7 +68,7 @@ | ... | @@ -61,7 +68,7 @@ |
| 61 | <ul> | 68 | <ul> |
| 62 | <li> | 69 | <li> |
| 63 | {{ language == 0 ? '房型选择' : 'Available Rooms' }} | 70 | {{ language == 0 ? '房型选择' : 'Available Rooms' }} |
| 64 | <span style="margin-left: 100px"> | 71 | <span style="margin-left: 100px" @click="initTime"> |
| 65 | <el-date-picker | 72 | <el-date-picker |
| 66 | @change="getDaysBetween" | 73 | @change="getDaysBetween" |
| 67 | v-model="hotTime" | 74 | v-model="hotTime" |
| ... | @@ -70,13 +77,15 @@ | ... | @@ -70,13 +77,15 @@ |
| 70 | :placeholder="language==0?'选择日期':'Select date'" | 77 | :placeholder="language==0?'选择日期':'Select date'" |
| 71 | format="YYYY-MM-DD" | 78 | format="YYYY-MM-DD" |
| 72 | :clearable="false" | 79 | :clearable="false" |
| 73 | value-format="YYYY-MM-DD"/> | 80 | value-format="YYYY-MM-DD" |
| 81 | /> | ||
| 74 | </span> | 82 | </span> |
| 75 | </li> | 83 | </li> |
| 76 | </ul> | 84 | </ul> |
| 77 | </div> | 85 | </div> |
| 78 | <div> | 86 | <div> |
| 79 | <div v-for="(r,index) in roomList" :key="index" class="room" v-show="language==0?r.roomPrice>0:r.roomPriceEn>0"> | 87 | <div v-for="(r,index) in roomList" :key="index" class="room" |
| 88 | v-show="language==0?r.roomPrice>0:r.roomPriceEn>0"> | ||
| 80 | <el-row :gutter="30" align="middle"> | 89 | <el-row :gutter="30" align="middle"> |
| 81 | <el-col :span="4"> | 90 | <el-col :span="4"> |
| 82 | <div class="roomImg"> | 91 | <div class="roomImg"> |
| ... | @@ -87,15 +96,15 @@ | ... | @@ -87,15 +96,15 @@ |
| 87 | <h3 class="name">{{ r.roomType }}</h3> | 96 | <h3 class="name">{{ r.roomType }}</h3> |
| 88 | <el-row :gutter="10"> | 97 | <el-row :gutter="10"> |
| 89 | <el-col :span="8">{{ r.area }}m²</el-col> | 98 | <el-col :span="8">{{ r.area }}m²</el-col> |
| 90 | <el-col :span="8" v-show="r.windowFlag==1"> {{ language==0?'有窗':'With windows' }}</el-col> | 99 | <el-col :span="8" v-show="r.windowFlag==1"> {{ language == 0 ? '有窗' : 'With windows' }}</el-col> |
| 91 | <el-col :span="8" v-show="r.windowFlag==0"> {{ language==0?'无窗':'Windowless' }}</el-col> | 100 | <el-col :span="8" v-show="r.windowFlag==0"> {{ language == 0 ? '无窗' : 'Windowless' }}</el-col> |
| 92 | <el-col :span="8" v-show="r.bathroomFlag==1"> {{ language==0?'热水洗浴':'Shower' }}</el-col> | 101 | <el-col :span="8" v-show="r.bathroomFlag==1"> {{ language == 0 ? '热水洗浴' : 'Shower' }}</el-col> |
| 93 | <!-- <text v-show="r.bathroomFlag==0"> </text> --> | 102 | <!-- <text v-show="r.bathroomFlag==0"> </text> --> |
| 94 | <el-col :span="8" v-show="r.addBedFlag==1"> {{ language==0?'允许加床':'Extra bed' }} </el-col> | 103 | <el-col :span="8" v-show="r.addBedFlag==1"> {{ language == 0 ? '允许加床' : 'Extra bed' }}</el-col> |
| 95 | <el-col :span="8" v-if="r.breakfastNum&&r.breakfastNum > '0'"> | 104 | <el-col :span="8" v-if="r.breakfastNum&&r.breakfastNum > '0'"> |
| 96 | {{ r.breakfastNum }}{{ language==0?'份早餐':' breakfasts' }} | 105 | {{ r.breakfastNum }}{{ language == 0 ? '份早餐' : ' breakfasts' }} |
| 97 | </el-col> | 106 | </el-col> |
| 98 | <el-col :span="8" v-else>{{ language==0?'无早餐':'No breakfast' }}</el-col> | 107 | <el-col :span="8" v-else>{{ language == 0 ? '无早餐' : 'No breakfast' }}</el-col> |
| 99 | </el-row> | 108 | </el-row> |
| 100 | <div class="tagbox esp"> | 109 | <div class="tagbox esp"> |
| 101 | <span v-for="(t,index) in r.label?.split(',')" v-show="index<4">{{t}}</span> | 110 | <span v-for="(t,index) in r.label?.split(',')" v-show="index<4">{{t}}</span> |
| ... | @@ -103,22 +112,25 @@ | ... | @@ -103,22 +112,25 @@ |
| 103 | </div> | 112 | </div> |
| 104 | </el-col> | 113 | </el-col> |
| 105 | <el-col :span="3"> | 114 | <el-col :span="3"> |
| 106 | <div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.roomPrice:r.roomPriceEn}}</span></div> | 115 | <div class="price">{{ |
| 116 | language == 0 ? '¥' : '€' | ||
| 117 | }}<span>{{ language == 0 ? r.roomPrice : r.roomPriceEn }}</span></div> | ||
| 107 | </el-col> | 118 | </el-col> |
| 108 | <el-col :span="3"> | 119 | <el-col :span="3"> |
| 109 | <el-button v-if="language==0" :disabled="r.useCount<=0" :class="{'forbid':r.useCount<=0}" @click="goOrder(r)" class="bg-lineg button"> | 120 | <el-button v-if="language==0" :disabled="!r.useCount && !hotTime" :class="{'forbid':(!r.useCount && !hotTime)}" |
| 121 | @click="goOrder(r)" class="bg-lineg button"> | ||
| 110 | 订 | 122 | 订 |
| 111 | <div>{{ language==0?'在线付':'Online' }}</div> | 123 | <div>{{ language == 0 ? '在线付' : 'Online' }}</div> |
| 112 | </el-button> | 124 | </el-button> |
| 113 | 125 | <el-button v-else style="color: #fff" :disabled="!r.useCount && !hotTime" class="btn-lineG w100" | |
| 114 | 126 | :class="{'forbid':(!r.useCount && !hotTime)}" round type="pri mary" @click="goOrder(r)">Select | |
| 115 | <el-button v-else style="color: #fff" :disabled="!r.useCount" class="btn-lineG w100" :class="{'forbid':!r.useCount}" round type="pri mary" @click="goOrder(r)">Select</el-button> | 127 | </el-button> |
| 116 | <!-- <div class="text-center text-primary mt10 fontsize14 pointer" v-if="language == 0">--> | 128 | <!-- <div class="text-center text-primary mt10 fontsize14 pointer" v-if="language == 0">--> |
| 117 | <!-- 剩余 {{(r.roomCount - (r.useCount||0)).toFixed()}} 间--> | 129 | <!-- 剩余 {{(r.roomCount - (r.useCount||0)).toFixed()}} 间--> |
| 118 | <!-- </div>--> | 130 | <!-- </div>--> |
| 119 | <!-- <div class="text-center text-primary mt10 fontsize14" v-else>--> | 131 | <!-- <div class="text-center text-primary mt10 fontsize14" v-else>--> |
| 120 | <!-- {{(r.roomCount - (r.useCount||0)).toFixed()}} Remaining rooms--> | 132 | <!-- {{(r.roomCount - (r.useCount||0)).toFixed()}} Remaining rooms--> |
| 121 | <!-- </div>--> | 133 | <!-- </div>--> |
| 122 | </el-col> | 134 | </el-col> |
| 123 | </el-row> | 135 | </el-row> |
| 124 | </div> | 136 | </div> |
| ... | @@ -130,18 +142,20 @@ | ... | @@ -130,18 +142,20 @@ |
| 130 | </div> | 142 | </div> |
| 131 | </template> | 143 | </template> |
| 132 | 144 | ||
| 133 | <script setup > | 145 | <script setup> |
| 134 | import {useRouter} from "vue-router"; | 146 | import {useRouter} from "vue-router"; |
| 135 | import {ref, reactive, onMounted,getCurrentInstance} from "vue"; | 147 | import {ref, reactive, onMounted, getCurrentInstance} from "vue"; |
| 136 | import {useRoute} from "vue-router"; | 148 | import {useRoute} from "vue-router"; |
| 137 | import {dayjs} from 'element-plus' | 149 | import {dayjs} from 'element-plus' |
| 138 | import {getHotelById, getHotelRooms,checkRoomPayByUserId} from "@/apiPc/booking" | 150 | import {getHotelById, getHotelRooms, checkRoomPayByUserId} from "@/apiPc/booking" |
| 139 | import {getBaseInfoByActiveId} from "@/apiPc/booking"; | 151 | import {getBaseInfoByActiveId} from "@/apiPc/booking"; |
| 140 | const { proxy } = getCurrentInstance() | 152 | |
| 153 | const {proxy} = getCurrentInstance() | ||
| 141 | 154 | ||
| 142 | import {useStorage} from "@vueuse/core/index"; | 155 | import {useStorage} from "@vueuse/core/index"; |
| 143 | import useUserStore from "@/store/modules/user"; | 156 | import useUserStore from "@/store/modules/user"; |
| 144 | import {ElMessageBox} from "element-plus"; | 157 | import {ElMessageBox} from "element-plus"; |
| 158 | |||
| 145 | const user = useUserStore().user | 159 | const user = useUserStore().user |
| 146 | const useStore = useUserStore | 160 | const useStore = useUserStore |
| 147 | const language = useStorage('language', 0) | 161 | const language = useStorage('language', 0) |
| ... | @@ -151,20 +165,23 @@ const form = ref({}) | ... | @@ -151,20 +165,23 @@ const form = ref({}) |
| 151 | const query = ref({ | 165 | const query = ref({ |
| 152 | hotelId: route.query.id | 166 | hotelId: route.query.id |
| 153 | }) | 167 | }) |
| 154 | const hotTime=ref([]) | 168 | const hotTime = ref([]) |
| 155 | const showAll = ref(false) | 169 | const showAll = ref(false) |
| 156 | const loading = ref(false) | 170 | const loading = ref(false) |
| 157 | const roomList = ref([]) | 171 | const roomList = ref([]) |
| 158 | const map = ref(null) | 172 | const map = ref(null) |
| 159 | const formTime=ref({}) | 173 | const formTime = ref({}) |
| 174 | |||
| 175 | let baseHotTime; | ||
| 176 | |||
| 160 | onMounted(() => { | 177 | onMounted(() => { |
| 161 | console.log(route.params) | 178 | console.log(route.params) |
| 162 | getBaseInfoByActiveId(route.params.cptId).then(res=>{ | 179 | getBaseInfoByActiveId(route.params.cptId).then(res => { |
| 163 | formTime.value = res.data || null | 180 | formTime.value = res.data || null |
| 164 | }).catch(err=>{ | 181 | }).catch(err => { |
| 165 | console.log(err) | 182 | console.log(err) |
| 166 | formTime.value = null | 183 | formTime.value = null |
| 167 | }).finally(()=>{ | 184 | }).finally(() => { |
| 168 | console.log(formTime.value) | 185 | console.log(formTime.value) |
| 169 | getDateTime() | 186 | getDateTime() |
| 170 | 187 | ||
| ... | @@ -173,14 +190,22 @@ onMounted(() => { | ... | @@ -173,14 +190,22 @@ onMounted(() => { |
| 173 | 190 | ||
| 174 | }) | 191 | }) |
| 175 | 192 | ||
| 176 | function getDateTime(){ | 193 | function initTime() { |
| 177 | if (formTime.value){ | 194 | if (!hotTime.value[0]) { |
| 178 | if (dayjs().isBefore(dayjs(formTime.value.hqStart))){ | 195 | hotTime.value = baseHotTime |
| 179 | hotTime.value[0]=dayjs(formTime.value.hqStart).format('YYYY-MM-DD') | 196 | } |
| 180 | hotTime.value[1]=dayjs(formTime.value.hqStart).add(1,'day').format('YYYY-MM-DD') | 197 | } |
| 181 | } else{ | 198 | |
| 182 | hotTime.value[0]=dayjs().format('YYYY-MM-DD') | 199 | function getDateTime() { |
| 183 | hotTime.value[1]=dayjs().add(1,'day').format('YYYY-MM-DD') | 200 | if (formTime.value) { |
| 201 | if (dayjs().isBefore(dayjs(formTime.value.hqStart))) { | ||
| 202 | // hotTime.value[0]=dayjs(formTime.value.hqStart).format('YYYY-MM-DD') | ||
| 203 | // hotTime.value[1]=dayjs(formTime.value.hqStart).add(1,'day').format('YYYY-MM-DD') | ||
| 204 | baseHotTime = [dayjs(formTime.value.hqStart).format('YYYY-MM-DD'), dayjs(formTime.value.hqStart).add(1, 'day').format('YYYY-MM-DD')] | ||
| 205 | } else { | ||
| 206 | // hotTime.value[0]=dayjs().format('YYYY-MM-DD') | ||
| 207 | // hotTime.value[1]=dayjs().add(1,'day').format('YYYY-MM-DD') | ||
| 208 | baseHotTime = [dayjs().format('YYYY-MM-DD'), dayjs().add(1, 'day').format('YYYY-MM-DD')] | ||
| 184 | } | 209 | } |
| 185 | } | 210 | } |
| 186 | } | 211 | } |
| ... | @@ -195,8 +220,8 @@ function getData() { | ... | @@ -195,8 +220,8 @@ function getData() { |
| 195 | console.log(err) | 220 | console.log(err) |
| 196 | }) | 221 | }) |
| 197 | query.value.hotelId = route.query.id | 222 | query.value.hotelId = route.query.id |
| 198 | query.value.rzStart=hotTime.value?hotTime.value[0]:null | 223 | query.value.rzStart = hotTime.value ? hotTime.value[0] : null |
| 199 | query.value.rzEnd=hotTime.value?hotTime.value[1]:null | 224 | query.value.rzEnd = hotTime.value ? hotTime.value[1] : null |
| 200 | getHotelRooms(query.value).then(res => { | 225 | getHotelRooms(query.value).then(res => { |
| 201 | roomList.value = res.rows | 226 | roomList.value = res.rows |
| 202 | console.log(roomList.value) | 227 | console.log(roomList.value) |
| ... | @@ -246,23 +271,26 @@ function initMap() { | ... | @@ -246,23 +271,26 @@ function initMap() { |
| 246 | } | 271 | } |
| 247 | 272 | ||
| 248 | function goOrder(room) { | 273 | function goOrder(room) { |
| 249 | ElMessageBox.confirm(language.value == 0 ? '你当前选择的入住时间为'+hotTime.value[0]+'至'+hotTime.value[1]+',是否确定?':'Your current check-in time is'+hotTime.value[0]+'~'+hotTime.value[1]+'Are you sure?',{type:'warning'}).then({ | 274 | if(!hotTime.value[0]){ |
| 275 | proxy.$modal.msgError(language.value == 0 ?'请先选择入住日期':'Please choose the date of check-in first') | ||
| 276 | return | ||
| 277 | } | ||
| 250 | 278 | ||
| 251 | }).then(()=>{ | 279 | ElMessageBox.confirm(language.value == 0 ? '你当前选择的入住时间为' + hotTime.value[0] + '至' + hotTime.value[1] + ',是否确定?' : 'Your current check-in time is' + hotTime.value[0] + '~' + hotTime.value[1] + 'Are you sure?', {type: 'warning'}).then({}).then(() => { |
| 252 | checkRoomPayByUserId(room.hotelId).then(res=>{ | 280 | checkRoomPayByUserId(room.hotelId).then(res => { |
| 253 | if(res.data == -100){ | 281 | if (res.data == -100) { |
| 254 | ElMessageBox.confirm( | 282 | ElMessageBox.confirm( |
| 255 | language.value == 0 ?'你有未支付的酒店订单,是否前往个人中心查看':'You already have an unpaid hotel order, do you want to go to the personal center to check it?', | 283 | language.value == 0 ? '你有未支付的酒店订单,是否前往个人中心查看' : 'You already have an unpaid hotel order, do you want to go to the personal center to check it?', |
| 256 | language.value==0?'提示':'Warning', | 284 | language.value == 0 ? '提示' : 'Warning', |
| 257 | { | 285 | { |
| 258 | confirmButtonText: language.value==1?'Go My Reservation ':'前往我的预订', | 286 | confirmButtonText: language.value == 1 ? 'Go My Reservation ' : '前往我的预订', |
| 259 | // cancelButtonText: language.value==1?'Continue to book':'继续预订', | 287 | // cancelButtonText: language.value==1?'Continue to book':'继续预订', |
| 260 | type: 'warning', | 288 | type: 'warning', |
| 261 | } | 289 | } |
| 262 | ).then((res) => { | 290 | ).then((res) => { |
| 263 | console.log(res) | 291 | console.log(res) |
| 264 | router.push({ | 292 | router.push({ |
| 265 | name:'myReservation', | 293 | name: 'myReservation', |
| 266 | }) | 294 | }) |
| 267 | }) | 295 | }) |
| 268 | // .catch((res) => { | 296 | // .catch((res) => { |
| ... | @@ -276,32 +304,32 @@ function goOrder(room) { | ... | @@ -276,32 +304,32 @@ function goOrder(room) { |
| 276 | }) | 304 | }) |
| 277 | 305 | ||
| 278 | 306 | ||
| 279 | |||
| 280 | } | 307 | } |
| 308 | |||
| 281 | function goNext(room) { | 309 | function goNext(room) { |
| 282 | router.push({ | 310 | router.push({ |
| 283 | name:'hotelOrder', | 311 | name: 'hotelOrder', |
| 284 | params:{ | 312 | params: { |
| 285 | roomId:room.id | 313 | roomId: room.id |
| 286 | }, | 314 | }, |
| 287 | query:{ | 315 | query: { |
| 288 | room:encodeURIComponent(JSON.stringify(room)), | 316 | room: encodeURIComponent(JSON.stringify(room)), |
| 289 | hotelName:form.value.name, | 317 | hotelName: form.value.name, |
| 290 | checkInTime:form.value.checkInTime, | 318 | checkInTime: form.value.checkInTime, |
| 291 | start:hotTime.value[0], | 319 | start: hotTime.value[0], |
| 292 | end:hotTime.value[1], | 320 | end: hotTime.value[1], |
| 293 | } | 321 | } |
| 294 | }) | 322 | }) |
| 295 | } | 323 | } |
| 296 | 324 | ||
| 297 | function getDaysBetween(){ | 325 | function getDaysBetween() { |
| 298 | if (hotTime.value && hotTime.value.length==2){ | 326 | if (hotTime.value && hotTime.value.length == 2) { |
| 299 | const d1=dayjs(hotTime.value[0]).format('YYYY-MM-DD') | 327 | const d1 = dayjs(hotTime.value[0]).format('YYYY-MM-DD') |
| 300 | const d2=dayjs(hotTime.value[1]).format('YYYY-MM-DD') | 328 | const d2 = dayjs(hotTime.value[1]).format('YYYY-MM-DD') |
| 301 | if (d1==d2){ | 329 | if (d1 == d2) { |
| 302 | getDateTime() | 330 | getDateTime() |
| 303 | return proxy.$modal.msgError(language.value==0?'入住时间跨度需要大于一天':'The duration of the stay must be more than one day.') | 331 | return proxy.$modal.msgError(language.value == 0 ? '入住时间跨度需要大于一天' : 'The duration of the stay must be more than one day.') |
| 304 | }else{ | 332 | } else { |
| 305 | getData() | 333 | getData() |
| 306 | } | 334 | } |
| 307 | } | 335 | } |
| ... | @@ -312,9 +340,9 @@ function disabledDateRZ(date) { | ... | @@ -312,9 +340,9 @@ function disabledDateRZ(date) { |
| 312 | if (formTime.value.hqStart) { | 340 | if (formTime.value.hqStart) { |
| 313 | const today = dayjs().format('YYYY-MM-DD') | 341 | const today = dayjs().format('YYYY-MM-DD') |
| 314 | if (formTime.value.hqStart < today) { | 342 | if (formTime.value.hqStart < today) { |
| 315 | return !((date.getTime() >= dayjs(today).valueOf())&&(date.getTime() <= dayjs(formTime.value.hqEnd).valueOf())) | 343 | return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs(formTime.value.hqEnd).valueOf())) |
| 316 | } else { | 344 | } else { |
| 317 | return !((date.getTime() >= dayjs(formTime.value.hqStart).valueOf())&&(date.getTime() <= dayjs(formTime.value.hqEnd).valueOf())) | 345 | return !((date.getTime() >= dayjs(formTime.value.hqStart).valueOf()) && (date.getTime() <= dayjs(formTime.value.hqEnd).valueOf())) |
| 318 | } | 346 | } |
| 319 | } | 347 | } |
| 320 | // return true | 348 | // return true |
| ... | @@ -325,7 +353,7 @@ function goMap() { | ... | @@ -325,7 +353,7 @@ function goMap() { |
| 325 | // var tencentMapUrl = "https://map.qq.com/"; | 353 | // var tencentMapUrl = "https://map.qq.com/"; |
| 326 | // window.location.href = tencentMapUrl; | 354 | // window.location.href = tencentMapUrl; |
| 327 | var url = `https://map.qq.com/?type=gcj02&lat=${form.value.latitude}&lng=${form.value.longitude}` | 355 | var url = `https://map.qq.com/?type=gcj02&lat=${form.value.latitude}&lng=${form.value.longitude}` |
| 328 | var mapUrl_tx = "http://apis.map.qq.com/uri/v1/marker?marker=coord:"+form.value.latitude+","+form.value.longitude+"&referer=yellowpage"; | 356 | var mapUrl_tx = "http://apis.map.qq.com/uri/v1/marker?marker=coord:" + form.value.latitude + "," + form.value.longitude + "&referer=yellowpage"; |
| 329 | window.open(url, "_blank") | 357 | window.open(url, "_blank") |
| 330 | } | 358 | } |
| 331 | 359 | ||
| ... | @@ -333,19 +361,56 @@ function goMap() { | ... | @@ -333,19 +361,56 @@ function goMap() { |
| 333 | 361 | ||
| 334 | <style scoped lang="scss"> | 362 | <style scoped lang="scss"> |
| 335 | .room { | 363 | .room { |
| 336 | background: #FAFBFD;margin: 20px 0 0;padding: 20px; | 364 | background: #FAFBFD; |
| 365 | margin: 20px 0 0; | ||
| 366 | padding: 20px; | ||
| 337 | border: 1px solid #E5E5E5; | 367 | border: 1px solid #E5E5E5; |
| 338 | .name{font-size: 20px;margin: 0 0 10px;} | 368 | |
| 339 | .roomImg{aspect-ratio: 16/9;border-radius: 10px;overflow: hidden; | 369 | .name { |
| 340 | img{width: 100%;object-fit: cover;object-position: center;height: 100%;} | 370 | font-size: 20px; |
| 371 | margin: 0 0 10px; | ||
| 372 | } | ||
| 373 | |||
| 374 | .roomImg { | ||
| 375 | aspect-ratio: 16/9; | ||
| 376 | border-radius: 10px; | ||
| 377 | overflow: hidden; | ||
| 378 | |||
| 379 | img { | ||
| 380 | width: 100%; | ||
| 381 | object-fit: cover; | ||
| 382 | object-position: center; | ||
| 383 | height: 100%; | ||
| 384 | } | ||
| 385 | } | ||
| 386 | |||
| 387 | .price { | ||
| 388 | color: #FF8124; | ||
| 389 | font-size: 24px; | ||
| 390 | |||
| 391 | span { | ||
| 392 | font-size: 36px; | ||
| 393 | font-family: "DIN Alternate" | ||
| 394 | } | ||
| 341 | } | 395 | } |
| 342 | .price{color: #FF8124;font-size: 24px; | 396 | |
| 343 | span{font-size: 36px;font-family: "DIN Alternate"} | 397 | .bg-lineg { |
| 398 | margin: auto; | ||
| 399 | border-radius: 10px; | ||
| 400 | text-align: center; | ||
| 401 | padding: 7px 2px 2px; | ||
| 402 | font-size: 24px; | ||
| 403 | width: 66px; | ||
| 404 | cursor: pointer; | ||
| 405 | |||
| 406 | div { | ||
| 407 | background: #fff; | ||
| 408 | font-size: 13px; | ||
| 409 | border-radius: 20px; | ||
| 410 | padding: 0 10px; | ||
| 411 | color: #453DEA; | ||
| 412 | font-weight: 500; | ||
| 344 | } | 413 | } |
| 345 | .bg-lineg{margin: auto;border-radius: 10px;text-align: center;padding: 7px 2px 2px; | ||
| 346 | font-size: 24px;width:66px;cursor: pointer; | ||
| 347 | div{background: #fff;font-size: 13px;border-radius: 20px;padding: 0 10px; | ||
| 348 | color: #453DEA;font-weight: 500;} | ||
| 349 | } | 414 | } |
| 350 | } | 415 | } |
| 351 | 416 | ||
| ... | @@ -383,14 +448,17 @@ function goMap() { | ... | @@ -383,14 +448,17 @@ function goMap() { |
| 383 | } | 448 | } |
| 384 | } | 449 | } |
| 385 | } | 450 | } |
| 451 | |||
| 386 | :deep(.button) { | 452 | :deep(.button) { |
| 387 | display: block; | 453 | display: block; |
| 388 | height: 55px; | 454 | height: 55px; |
| 389 | width: auto; | 455 | width: auto; |
| 390 | color: #fff; | 456 | color: #fff; |
| 391 | span{ | 457 | |
| 458 | span { | ||
| 392 | display: block !important; | 459 | display: block !important; |
| 393 | div{ | 460 | |
| 461 | div { | ||
| 394 | margin-top: 3px; | 462 | margin-top: 3px; |
| 395 | } | 463 | } |
| 396 | } | 464 | } |
| ... | @@ -453,26 +521,45 @@ function goMap() { | ... | @@ -453,26 +521,45 @@ function goMap() { |
| 453 | } | 521 | } |
| 454 | } | 522 | } |
| 455 | 523 | ||
| 456 | .hotelImg{border-radius: 10px;overflow: hidden;aspect-ratio: 16/9; | 524 | .hotelImg { |
| 457 | img{object-fit: cover;object-position: center;width: 100%;height: 100%; | 525 | border-radius: 10px; |
| 526 | overflow: hidden; | ||
| 527 | aspect-ratio: 16/9; | ||
| 528 | |||
| 529 | img { | ||
| 530 | object-fit: cover; | ||
| 531 | object-position: center; | ||
| 532 | width: 100%; | ||
| 533 | height: 100%; | ||
| 458 | } | 534 | } |
| 459 | } | 535 | } |
| 460 | .info{font-weight: 400; | 536 | |
| 537 | .info { | ||
| 538 | font-weight: 400; | ||
| 461 | font-size: 14px; | 539 | font-size: 14px; |
| 462 | color: #929AA0; | 540 | color: #929AA0; |
| 463 | .el-icon{margin-right: 5px;} | 541 | |
| 542 | .el-icon { | ||
| 543 | margin-right: 5px; | ||
| 544 | } | ||
| 545 | } | ||
| 546 | |||
| 547 | .oddmb:nth-child(2) { | ||
| 548 | margin-bottom: 20px; | ||
| 464 | } | 549 | } |
| 465 | .oddmb:nth-child(2){margin-bottom: 20px;} | 550 | |
| 466 | .forbid{ | 551 | .forbid { |
| 467 | cursor:not-allowed !important; | 552 | cursor: not-allowed !important; |
| 468 | color: #a8abb2 !important; | 553 | color: #a8abb2 !important; |
| 469 | //filter:grayscale(1); | 554 | //filter:grayscale(1); |
| 470 | background: #fff; | 555 | background: #fff; |
| 471 | div{ | 556 | |
| 557 | div { | ||
| 472 | color: #a8abb2 !important; | 558 | color: #a8abb2 !important; |
| 473 | } | 559 | } |
| 474 | } | 560 | } |
| 475 | .forbid:hover{ | 561 | |
| 476 | box-shadow:none; | 562 | .forbid:hover { |
| 563 | box-shadow: none; | ||
| 477 | } | 564 | } |
| 478 | </style> | 565 | </style> | ... | ... |
| ... | @@ -48,9 +48,11 @@ | ... | @@ -48,9 +48,11 @@ |
| 48 | <span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span> | 48 | <span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span> |
| 49 | <span v-else>{{ canOrderNum }} Remaining rooms</span> | 49 | <span v-else>{{ canOrderNum }} Remaining rooms</span> |
| 50 | </div> | 50 | </div> |
| 51 | <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> | ||
| 52 | |||
| 51 | </el-form-item> | 53 | </el-form-item> |
| 52 | <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="language==1?`Name${index+1}`:`入住人${index+1}`" required> | 54 | <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="language==1?`Room${index+1}`:`入住人${index+1}`" required> |
| 53 | <el-input v-model="rzUserArr[index]" :placeholder="language==0?'每间填一位住客姓名':'Each room fill in one name of the guest'"/> | 55 | <el-input v-model="rzUserArr[index]" :placeholder="language==0?'请完整填写该房间所有的入住人姓名,以“,”符号分隔':'please fill in the name of the actual check-in person'"/> |
| 54 | </el-form-item> | 56 | </el-form-item> |
| 55 | <el-form-item :label="language==0?'预计到店':'Expected check-in'" required> | 57 | <el-form-item :label="language==0?'预计到店':'Expected check-in'" required> |
| 56 | <el-select v-model="form.ddDate" | 58 | <el-select v-model="form.ddDate" |
| ... | @@ -482,11 +484,7 @@ function submit() { | ... | @@ -482,11 +484,7 @@ function submit() { |
| 482 | } | 484 | } |
| 483 | }) | 485 | }) |
| 484 | } | 486 | } |
| 485 | } else { | ||
| 486 | ElMessage.warning(language.value == 0 ? '无可预订的房间' : 'No rooms available to book') | ||
| 487 | } | 487 | } |
| 488 | }).catch(err => { | ||
| 489 | ElMessage.warning(language.value == 0 ? '无可预订的房间' : 'No rooms available to book') | ||
| 490 | }) | 488 | }) |
| 491 | }) | 489 | }) |
| 492 | } | 490 | } | ... | ... |
| ... | @@ -242,6 +242,11 @@ | ... | @@ -242,6 +242,11 @@ |
| 242 | <span class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span> | 242 | <span class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span> |
| 243 | </div> | 243 | </div> |
| 244 | </el-col> | 244 | </el-col> |
| 245 | <el-col :lg="24"> | ||
| 246 | <el-link v-if="form.viewStatus=='1'||form.viewStatus=='5'" type="primary" @click="exportPdf"><el-icon><Upload /></el-icon> | ||
| 247 | {{ language==0?'导出酒店预订单':'Export PDF' }} | ||
| 248 | </el-link> | ||
| 249 | </el-col> | ||
| 245 | </el-row> | 250 | </el-row> |
| 246 | </div> | 251 | </div> |
| 247 | </div> | 252 | </div> |
| ... | @@ -633,6 +638,21 @@ const unsubscribe = () => { | ... | @@ -633,6 +638,21 @@ const unsubscribe = () => { |
| 633 | }) | 638 | }) |
| 634 | } | 639 | } |
| 635 | 640 | ||
| 641 | function exportPdf() { | ||
| 642 | var obj = { | ||
| 643 | orderId: orderId.value | ||
| 644 | } | ||
| 645 | if(language.value==0){ | ||
| 646 | proxy.download('/ota/orderRoom/downRoomConfirmation', { | ||
| 647 | ...obj | ||
| 648 | }, `订房确认书.pdf`) | ||
| 649 | } else { | ||
| 650 | proxy.download('/ota/orderRoom/downRoomConfirmation', { | ||
| 651 | ...obj | ||
| 652 | }, `Hotel Reservation.pdf`) | ||
| 653 | } | ||
| 654 | |||
| 655 | } | ||
| 636 | 656 | ||
| 637 | </script> | 657 | </script> |
| 638 | 658 | ... | ... |
| ... | @@ -26,11 +26,13 @@ | ... | @@ -26,11 +26,13 @@ |
| 26 | <el-col :sm="12" :lg="8"> | 26 | <el-col :sm="12" :lg="8"> |
| 27 | <div class="item_en" @click="popRemark(1)"><img src="@/assets/dance/btn01.png"> | 27 | <div class="item_en" @click="popRemark(1)"><img src="@/assets/dance/btn01.png"> |
| 28 | <p>HOTEL RESERVATION</p> | 28 | <p>HOTEL RESERVATION</p> |
| 29 | </div></el-col> | 29 | </div> |
| 30 | </el-col> | ||
| 30 | <el-col :sm="12" :lg="8"> | 31 | <el-col :sm="12" :lg="8"> |
| 31 | <div class="item_en" @click="popRemark(2)"><img src="@/assets/dance/btn02.png"> | 32 | <div class="item_en" @click="popRemark(2)"><img src="@/assets/dance/btn02.png"> |
| 32 | <p>TRANSPORTATION RESERVATION</p> | 33 | <p>TRANSPORTATION RESERVATION</p> |
| 33 | </div></el-col> | 34 | </div> |
| 35 | </el-col> | ||
| 34 | <el-col :sm="12" :lg="8"> | 36 | <el-col :sm="12" :lg="8"> |
| 35 | <div class="item_en" @click="popRemark(3)"><img src="@/assets/dance/btn03.png"> | 37 | <div class="item_en" @click="popRemark(3)"><img src="@/assets/dance/btn03.png"> |
| 36 | <p>DINING RESERVATION</p> | 38 | <p>DINING RESERVATION</p> |
| ... | @@ -45,11 +47,13 @@ | ... | @@ -45,11 +47,13 @@ |
| 45 | <el-col :sm="12" :lg="8"> | 47 | <el-col :sm="12" :lg="8"> |
| 46 | <div class="item_en" @click="popRemark(4)"><img src="@/assets/dance/btn05.png"> | 48 | <div class="item_en" @click="popRemark(4)"><img src="@/assets/dance/btn05.png"> |
| 47 | <p>MAKEUP APPOINTMENT</p> | 49 | <p>MAKEUP APPOINTMENT</p> |
| 48 | </div></el-col> | 50 | </div> |
| 51 | </el-col> | ||
| 49 | <el-col :sm="12" :lg="8"> | 52 | <el-col :sm="12" :lg="8"> |
| 50 | <div class="item_en" @click="popRemark(5)"><img src="@/assets/dance/btn06.png"> | 53 | <div class="item_en" @click="popRemark(5)"><img src="@/assets/dance/btn06.png"> |
| 51 | <p>PHOTOGRAPHY APPOINTMENT</p> | 54 | <p>PHOTOGRAPHY APPOINTMENT</p> |
| 52 | </div></el-col> | 55 | </div> |
| 56 | </el-col> | ||
| 53 | </el-row> | 57 | </el-row> |
| 54 | </div> | 58 | </div> |
| 55 | <order-remark ref="orderRemarkRef" @submit="goBooking"/> | 59 | <order-remark ref="orderRemarkRef" @submit="goBooking"/> |
| ... | @@ -61,12 +65,14 @@ import {useRouter} from "vue-router"; | ... | @@ -61,12 +65,14 @@ import {useRouter} from "vue-router"; |
| 61 | 65 | ||
| 62 | const router = useRouter() | 66 | const router = useRouter() |
| 63 | import OrderRemark from '@/viewsPc/components/orderRemark' | 67 | import OrderRemark from '@/viewsPc/components/orderRemark' |
| 68 | |||
| 64 | const {proxy} = getCurrentInstance() | 69 | const {proxy} = getCurrentInstance() |
| 65 | import {useStorage} from "@vueuse/core/index"; | 70 | import {useStorage} from "@vueuse/core/index"; |
| 66 | import {ElMessage} from "element-plus"; | 71 | import {ElMessage} from "element-plus"; |
| 67 | import {getCurrentInstance} from "@vue/runtime-core"; | 72 | import {getCurrentInstance} from "@vue/runtime-core"; |
| 68 | import {computed, onMounted, watch} from "vue"; | 73 | import {computed, onMounted, watch} from "vue"; |
| 69 | import {getBaseInfoByActiveId} from "@/apiPc/booking"; | 74 | import {getBaseInfoByActiveId} from "@/apiPc/booking"; |
| 75 | |||
| 70 | const props = defineProps({ | 76 | const props = defineProps({ |
| 71 | matchId: { | 77 | matchId: { |
| 72 | type: String, | 78 | type: String, |
| ... | @@ -74,45 +80,52 @@ const props = defineProps({ | ... | @@ -74,45 +80,52 @@ const props = defineProps({ |
| 74 | default: '0' | 80 | default: '0' |
| 75 | } | 81 | } |
| 76 | }) | 82 | }) |
| 77 | const language= useStorage('language',0) | 83 | const language = useStorage('language', 0) |
| 78 | const form = ref({}) | 84 | const form = ref({}) |
| 79 | const matchId = computed(()=>props.matchId); | 85 | const matchId = computed(() => props.matchId); |
| 80 | 86 | ||
| 81 | watch(matchId,(val)=>{ | 87 | watch(matchId, (val) => { |
| 82 | if(val && val!='0'){ | 88 | if (val && val != '0') { |
| 83 | getBaseInfoByActiveId(props.matchId).then(res=>{ | 89 | getBaseInfoByActiveId(props.matchId).then(res => { |
| 84 | form.value = res.data || null | 90 | form.value = res.data || null |
| 85 | }).catch(err=>{ | 91 | }).catch(err => { |
| 86 | console.log(err) | 92 | console.log(err) |
| 87 | form.value = null | 93 | form.value = null |
| 88 | }) | 94 | }) |
| 89 | } | 95 | } |
| 90 | }) | 96 | }) |
| 91 | 97 | ||
| 92 | onMounted(()=>{ | 98 | onMounted(() => { |
| 93 | 99 | ||
| 94 | }) | 100 | }) |
| 101 | |||
| 95 | function building() { | 102 | function building() { |
| 96 | ElMessage.warning(language.value==0?'感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。':'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.') | 103 | ElMessage.warning(language.value == 0 ? '感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。' : 'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.') |
| 97 | return | 104 | return |
| 98 | } | 105 | } |
| 99 | function popRemark(type){ | 106 | |
| 100 | // debugger | 107 | function popRemark(type) { |
| 101 | if(!form.value){ | 108 | if (!form.value) { |
| 102 | building() | 109 | building() |
| 103 | return | 110 | return |
| 104 | } | 111 | } |
| 105 | if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || (form.value.isMealView == 0&&type=='4') || (type=='5'&&form.value.isPhotoView == 0)){ | 112 | if ((form.value.isJdView == 0 && type == '1') |
| 113 | || (form.value.isCarView == 0 && type == '2') | ||
| 114 | || (form.value.isFoodView == 0 && type == '3') | ||
| 115 | || (form.value.isMealView == 0 && type == '4') | ||
| 116 | || (form.value.isPhotoView == 0 && type == '5') | ||
| 117 | ) { | ||
| 106 | building() | 118 | building() |
| 107 | return | 119 | return |
| 108 | } | 120 | } |
| 109 | const params = { | 121 | const params = { |
| 110 | matchId: props.matchId, | 122 | matchId: props.matchId, |
| 111 | title: language.value == 0 ?'预订说明':'Booking Instructions', | 123 | title: language.value == 0 ? '预订说明' : 'Booking Instructions', |
| 112 | type: type | 124 | type: type |
| 113 | } | 125 | } |
| 114 | proxy.$refs['orderRemarkRef'].open(params) | 126 | proxy.$refs['orderRemarkRef'].open(params) |
| 115 | } | 127 | } |
| 128 | |||
| 116 | function goBooking(n) { | 129 | function goBooking(n) { |
| 117 | switch (n) { | 130 | switch (n) { |
| 118 | case 0: | 131 | case 0: |
| ... | @@ -151,10 +164,19 @@ function goBooking(n) { | ... | @@ -151,10 +164,19 @@ function goBooking(n) { |
| 151 | .itemBox { | 164 | .itemBox { |
| 152 | padding: 20px 40px; | 165 | padding: 20px 40px; |
| 153 | } | 166 | } |
| 154 | .itemBox_en{ | 167 | |
| 168 | .itemBox_en { | ||
| 155 | padding: 20px 40px; | 169 | padding: 20px 40px; |
| 156 | p{margin: 0;height: 40px;line-height: 20px;display: flex;align-items: center;} | 170 | |
| 171 | p { | ||
| 172 | margin: 0; | ||
| 173 | height: 40px; | ||
| 174 | line-height: 20px; | ||
| 175 | display: flex; | ||
| 176 | align-items: center; | ||
| 177 | } | ||
| 157 | } | 178 | } |
| 179 | |||
| 158 | .item { | 180 | .item { |
| 159 | box-shadow: 0px 0px 21px 0px rgba(41, 23, 101, 0.14); | 181 | box-shadow: 0px 0px 21px 0px rgba(41, 23, 101, 0.14); |
| 160 | margin: 10px 0; | 182 | margin: 10px 0; |
| ... | @@ -169,17 +191,39 @@ function goBooking(n) { | ... | @@ -169,17 +191,39 @@ function goBooking(n) { |
| 169 | margin: 0 5%; | 191 | margin: 0 5%; |
| 170 | } | 192 | } |
| 171 | } | 193 | } |
| 172 | .item_en{box-shadow: 0px 0px 21px 0px rgba(41,23,101,0.14);margin: 40px 0 0;cursor: pointer; | 194 | |
| 173 | display: flex;align-items: center;text-align: center;color: #333; | 195 | .item_en { |
| 174 | font-size: 18px; flex-direction: column;padding: 35px 10px 20px; | 196 | box-shadow: 0px 0px 21px 0px rgba(41, 23, 101, 0.14); |
| 175 | background:url("@/assets/dance/znbb.png") no-repeat left #FFFFFF; | 197 | margin: 40px 0 0; |
| 198 | cursor: pointer; | ||
| 199 | display: flex; | ||
| 200 | align-items: center; | ||
| 201 | text-align: center; | ||
| 202 | color: #333; | ||
| 203 | font-size: 18px; | ||
| 204 | flex-direction: column; | ||
| 205 | padding: 35px 10px 20px; | ||
| 206 | background: url("@/assets/dance/znbb.png") no-repeat left #FFFFFF; | ||
| 176 | background-size: cover; | 207 | background-size: cover; |
| 177 | position: relative; | 208 | position: relative; |
| 178 | border-radius: 15px; | 209 | border-radius: 15px; |
| 179 | img{position: absolute;top: -30px;transition: all 0.2s;} | 210 | |
| 180 | &:hover{box-shadow: 0 0 10px #333; | 211 | img { |
| 181 | img{transform: rotateY(180deg);} | 212 | position: absolute; |
| 182 | p{color: #000;} | 213 | top: -30px; |
| 214 | transition: all 0.2s; | ||
| 215 | } | ||
| 216 | |||
| 217 | &:hover { | ||
| 218 | box-shadow: 0 0 10px #333; | ||
| 219 | |||
| 220 | img { | ||
| 221 | transform: rotateY(180deg); | ||
| 222 | } | ||
| 223 | |||
| 224 | p { | ||
| 225 | color: #000; | ||
| 226 | } | ||
| 183 | } | 227 | } |
| 184 | } | 228 | } |
| 185 | </style> | 229 | </style> | ... | ... |
| ... | @@ -6,9 +6,9 @@ | ... | @@ -6,9 +6,9 @@ |
| 6 | > | 6 | > |
| 7 | <div class="boxInvitation pd20"> | 7 | <div class="boxInvitation pd20"> |
| 8 | <el-steps :active="activeStep" align-center class="mb20"> | 8 | <el-steps :active="activeStep" align-center class="mb20"> |
| 9 | <el-step :title="language==0?'报名须知':'Notice'" /> | 9 | <el-step :title="language==0?'报名须知':'Notice'"/> |
| 10 | <el-step :title="language==0?'填写信息':'Information'" /> | 10 | <el-step :title="language==0?'填写信息':'Information'"/> |
| 11 | <el-step :title="language==0?'选择课程':'Courses'" /> | 11 | <el-step :title="language==0?'选择课程':'Courses'"/> |
| 12 | </el-steps> | 12 | </el-steps> |
| 13 | <div v-if="activeStep==0"> | 13 | <div v-if="activeStep==0"> |
| 14 | <div class="mb60 xzRich" style="max-height: 50vh;overflow: auto"> | 14 | <div class="mb60 xzRich" style="max-height: 50vh;overflow: auto"> |
| ... | @@ -20,8 +20,8 @@ | ... | @@ -20,8 +20,8 @@ |
| 20 | 联系电话:15961580050<br/> | 20 | 联系电话:15961580050<br/> |
| 21 | </div> | 21 | </div> |
| 22 | <div v-else style="width: 400px;margin: auto"><br/> | 22 | <div v-else style="width: 400px;margin: auto"><br/> |
| 23 | <!-- The age limit for Youth Session: Born between 1st Jan, 2006 and 31st Dec., 2009.<br/>--> | 23 | <!-- The age limit for Youth Session: Born between 1st Jan, 2006 and 31st Dec., 2009.<br/>--> |
| 24 | <!-- The age limit for Juvenile Session: Born after 1 Jan., 2010.<br/>--> | 24 | <!-- The age limit for Juvenile Session: Born after 1 Jan., 2010.<br/>--> |
| 25 | Training Camp venue:Worldhotel Grand Juna Wuxi<br/> | 25 | Training Camp venue:Worldhotel Grand Juna Wuxi<br/> |
| 26 | Address:No.111 Hefeng Road, Binhu District, Wuxi, Jiangsu<br/> | 26 | Address:No.111 Hefeng Road, Binhu District, Wuxi, Jiangsu<br/> |
| 27 | Check-in:From 13:30 to 17:00 on July 14, 2024.<br/> | 27 | Check-in:From 13:30 to 17:00 on July 14, 2024.<br/> |
| ... | @@ -30,12 +30,17 @@ | ... | @@ -30,12 +30,17 @@ |
| 30 | </div> | 30 | </div> |
| 31 | </div> | 31 | </div> |
| 32 | <div class="text-center"> | 32 | <div class="text-center"> |
| 33 | <el-button type="primary" v-if="courseList.length>0" class="btn-lineG" round @click="setActive(1)">{{ language == 0 ? '下一步' : 'NEXT' }}</el-button> | 33 | <el-button type="primary" v-if="courseList.length>0" class="btn-lineG" round @click="setActive(1)"> |
| 34 | <el-button type="primary" class="btn-lineG" round v-else @click="close">{{language==0?'暂无可报课程':'No courses available for reporting'}}</el-button> | 34 | {{ language == 0 ? '下一步' : 'NEXT' }} |
| 35 | </el-button> | ||
| 36 | <el-button type="primary" class="btn-lineG" round v-else @click="close"> | ||
| 37 | {{ language == 0 ? '暂无可报课程' : 'No courses available for reporting' }} | ||
| 38 | </el-button> | ||
| 35 | </div> | 39 | </div> |
| 36 | </div> | 40 | </div> |
| 37 | <div v-if="activeStep==1"> | 41 | <div v-if="activeStep==1"> |
| 38 | <el-form :model="form" :rules="rules" ref="iformRef" label-position="right" :label-width="language==0?'80px':'150px'"> | 42 | <el-form :model="form" :rules="rules" ref="iformRef" label-position="right" |
| 43 | :label-width="language==0?'80px':'160px'"> | ||
| 39 | <el-form-item :label="language==0?'姓名':'Name'" required prop="name"> | 44 | <el-form-item :label="language==0?'姓名':'Name'" required prop="name"> |
| 40 | <el-input v-model="form.name"/> | 45 | <el-input v-model="form.name"/> |
| 41 | </el-form-item> | 46 | </el-form-item> |
| ... | @@ -58,36 +63,41 @@ | ... | @@ -58,36 +63,41 @@ |
| 58 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 63 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" |
| 59 | /> | 64 | /> |
| 60 | </el-form-item> | 65 | </el-form-item> |
| 66 | <el-form-item :label="language==0?'手机号':'Phone number'" required prop="phone"> | ||
| 67 | <el-input v-model="form.phone"/> | ||
| 68 | </el-form-item> | ||
| 61 | <el-form-item :label="language==0?'邮箱':'Email'" required prop="email"> | 69 | <el-form-item :label="language==0?'邮箱':'Email'" required prop="email"> |
| 62 | <el-input v-model="form.email" type="email"/> | 70 | <el-input v-model="form.email" type="email"/> |
| 63 | </el-form-item> | 71 | </el-form-item> |
| 64 | <el-form-item :label="language==0?'证件号':'ID No.'" required prop="passportNo"> | 72 | <el-form-item :label="language==0?'证件号':'National license No.'" required prop="passportNo"> |
| 65 | <el-input v-model="form.passportNo" @blur="checkCard"/> | 73 | <el-input v-model="form.passportNo" @blur="checkCard"/> |
| 66 | </el-form-item> | 74 | </el-form-item> |
| 67 | <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy"> | 75 | <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy"> |
| 68 | <image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false" | 76 | <image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false" |
| 69 | :button-text="language==0?'上传':'Upload'"/> | 77 | :button-text="language==0?'上传':'Upload'"/> |
| 70 | </el-form-item> | 78 | </el-form-item> |
| 71 | <!-- <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival">--> | 79 | <!-- <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival">--> |
| 72 | <!-- <el-date-picker--> | 80 | <!-- <el-date-picker--> |
| 73 | <!-- v-model="form.arrival" placeholder="YYYY-MM-DD"--> | 81 | <!-- v-model="form.arrival" placeholder="YYYY-MM-DD"--> |
| 74 | <!-- style="width: 100%;"--> | 82 | <!-- style="width: 100%;"--> |
| 75 | <!-- type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"--> | 83 | <!-- type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"--> |
| 76 | <!-- />--> | 84 | <!-- />--> |
| 77 | <!-- </el-form-item>--> | 85 | <!-- </el-form-item>--> |
| 78 | <!-- <el-form-item :label="language==0?'出发日期':'Date of Departure'" required prop="departure">--> | 86 | <!-- <el-form-item :label="language==0?'出发日期':'Date of Departure'" required prop="departure">--> |
| 79 | <!-- <el-date-picker--> | 87 | <!-- <el-date-picker--> |
| 80 | <!-- v-model="form.departure"--> | 88 | <!-- v-model="form.departure"--> |
| 81 | <!-- style="width: 100%;" placeholder="YYYY-MM-DD"--> | 89 | <!-- style="width: 100%;" placeholder="YYYY-MM-DD"--> |
| 82 | <!-- type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"--> | 90 | <!-- type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"--> |
| 83 | <!-- />--> | 91 | <!-- />--> |
| 84 | <!-- </el-form-item>--> | 92 | <!-- </el-form-item>--> |
| 85 | <el-form-item :label="language==0?'备注':'Remark '"> | 93 | <el-form-item :label="language==0?'备注':'Remark '"> |
| 86 | <el-input type="textarea" v-model="form.remark" rows="3"/> | 94 | <el-input type="textarea" v-model="form.remark" rows="3"/> |
| 87 | </el-form-item> | 95 | </el-form-item> |
| 88 | 96 | ||
| 89 | <div class="text-center"> | 97 | <div class="text-center"> |
| 90 | <el-button size="large" @click="setActive(0)" round plain type="primary">{{ language == 0 ? '上一步' : 'PREV' }}</el-button> | 98 | <el-button size="large" @click="setActive(0)" round plain type="primary"> |
| 99 | {{ language == 0 ? '上一步' : 'PREV' }} | ||
| 100 | </el-button> | ||
| 91 | <el-button type="primary" size="large" @click="checkApplyCourse(2)" round class="btn-lineG"> | 101 | <el-button type="primary" size="large" @click="checkApplyCourse(2)" round class="btn-lineG"> |
| 92 | {{ language == 0 ? '下一步' : 'NEXT' }} | 102 | {{ language == 0 ? '下一步' : 'NEXT' }} |
| 93 | </el-button> | 103 | </el-button> |
| ... | @@ -99,36 +109,44 @@ | ... | @@ -99,36 +109,44 @@ |
| 99 | <img class="mauto" src="@/assets/dance/ok.png"/> | 109 | <img class="mauto" src="@/assets/dance/ok.png"/> |
| 100 | <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2> | 110 | <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2> |
| 101 | <h4 class="text-center" v-if="language == 0"> | 111 | <h4 class="text-center" v-if="language == 0"> |
| 102 | 我们已收到您的申请,并将尽快处理。请耐心等待。 | 112 | 我们已收到您的申请,请在7月14日到无锡报到。 |
| 103 | </h4> | 113 | </h4> |
| 104 | <h4 v-else> | 114 | <h4 v-else> |
| 105 | Your application has been received,<br/> | 115 | Your application has been received, |
| 106 | and we will process it as soon as possible. | ||
| 107 | <br/> | 116 | <br/> |
| 108 | Please be patient while waiting. | 117 | Please register in Wuxi on July 14. |
| 109 | </h4> | 118 | </h4> |
| 110 | </div> | 119 | </div> |
| 111 | <div v-else> | 120 | <div v-else> |
| 112 | <div class="tip text-danger mb20" v-if="language==0">*选择参加的课程(最少一项,最多两项)</div> | 121 | <div class="tip text-danger mb20" v-if="language==0">*选择参加的课程(最少一项,最多两项)</div> |
| 113 | <div class="tip text-danger mb20" v-else>*Select the courses to enroll in (at least one, no more than two)</div> | 122 | <div class="tip text-danger mb20" v-else>*Select the courses to enroll in (at least one, no more than two) |
| 123 | </div> | ||
| 114 | <el-checkbox-group size="large" v-model="form.courseId" @change="courseChange"> | 124 | <el-checkbox-group size="large" v-model="form.courseId" @change="courseChange"> |
| 115 | <div v-for="c in courseList" class="mb20"> | 125 | <div v-for="c in courseList" class="mb20"> |
| 116 | <el-checkbox :value="c.id" border class="w100" :disabled="(form.courseId?.length>=2&&form.courseId.indexOf(c.id)==-1)||disChoose||(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)"> | 126 | <el-checkbox :value="c.id" border class="w100" |
| 127 | :disabled="(form.courseId?.length>=2&&form.courseId.indexOf(c.id)==-1)||disChoose||(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)"> | ||
| 117 | <div v-if="language==0" style="display: flex"> | 128 | <div v-if="language==0" style="display: flex"> |
| 118 | <div> {{c.name}}{{c.name.indexOf('青年')>-1?'(年龄在15岁~18岁)':'(年龄在14岁以下)'}}</div> | 129 | <div> {{ c.name }}{{ c.name.indexOf('青年') > -1 ? '(年龄在15岁~18岁)' : '(年龄在14岁以下)' }}</div> |
| 119 | </div> | 130 | </div> |
| 120 | <div v-else> | 131 | <div v-else> |
| 121 | <div> {{c.nameEn}}{{c.nameEn.indexOf('Youth')>-1?'(Between the age 15 and 18)':'(Under the age of 14)'}} </div> | 132 | <div> |
| 133 | {{ c.nameEn }}{{ c.nameEn.indexOf('Youth') > -1 ? '(Between the age 15 and 18)' : '(Under the age of 14)' }} | ||
| 134 | </div> | ||
| 122 | </div> | 135 | </div> |
| 123 | 136 | ||
| 124 | <el-tag class="ml20" v-if="(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)" type="danger" effect="dark">{{language == 0 ?'已报满':'Already full'}}</el-tag> | 137 | <el-tag class="ml20" |
| 138 | v-if="(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)" | ||
| 139 | type="danger" effect="dark">{{ language == 0 ? '已报满' : 'Already full' }} | ||
| 140 | </el-tag> | ||
| 125 | </el-checkbox> | 141 | </el-checkbox> |
| 126 | </div> | 142 | </div> |
| 127 | </el-checkbox-group> | 143 | </el-checkbox-group> |
| 128 | 144 | ||
| 129 | 145 | ||
| 130 | <div class="text-center"> | 146 | <div class="text-center"> |
| 131 | <el-button size="large" @click="setActive(1)" round plain type="primary">{{ language == 0 ? '上一步' : 'PREV' }}</el-button> | 147 | <el-button size="large" @click="setActive(1)" round plain type="primary"> |
| 148 | {{ language == 0 ? '上一步' : 'PREV' }} | ||
| 149 | </el-button> | ||
| 132 | <el-button type="primary" v-if="!disChoose" size="large" @click="submit" round class="btn-lineG w200px"> | 150 | <el-button type="primary" v-if="!disChoose" size="large" @click="submit" round class="btn-lineG w200px"> |
| 133 | {{ language == 0 ? '提交' : 'SUBMIT' }} | 151 | {{ language == 0 ? '提交' : 'SUBMIT' }} |
| 134 | </el-button> | 152 | </el-button> |
| ... | @@ -153,9 +171,7 @@ import {masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard | ... | @@ -153,9 +171,7 @@ import {masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard |
| 153 | 171 | ||
| 154 | const {proxy} = getCurrentInstance() | 172 | const {proxy} = getCurrentInstance() |
| 155 | const language = useStorage('language', 0) | 173 | const language = useStorage('language', 0) |
| 156 | const form = ref({ | 174 | const form = ref({}) |
| 157 | gender:'0' | ||
| 158 | }) | ||
| 159 | const show = ref(false) | 175 | const show = ref(false) |
| 160 | const showR = ref(false) | 176 | const showR = ref(false) |
| 161 | const disChoose = ref(false) | 177 | const disChoose = ref(false) |
| ... | @@ -178,7 +194,7 @@ const rules = ref( | ... | @@ -178,7 +194,7 @@ const rules = ref( |
| 178 | const open = (params) => { | 194 | const open = (params) => { |
| 179 | console.log(params) | 195 | console.log(params) |
| 180 | show.value = true | 196 | show.value = true |
| 181 | title.value = language.value==0?'亚洲青少年体育舞蹈公益课':'Asian Youth DanceSport Training Camp' | 197 | title.value = language.value == 0 ? '亚洲青少年体育舞蹈公益课' : 'Asian Youth DanceSport Training Camp' |
| 182 | cptId.value = params.cptId | 198 | cptId.value = params.cptId |
| 183 | getCourse() | 199 | getCourse() |
| 184 | } | 200 | } |
| ... | @@ -196,23 +212,27 @@ watch(show, (value) => { | ... | @@ -196,23 +212,27 @@ watch(show, (value) => { |
| 196 | // proxy.$refs['dialogRef'].clearValidate() | 212 | // proxy.$refs['dialogRef'].clearValidate() |
| 197 | }) | 213 | }) |
| 198 | }) | 214 | }) |
| 215 | |||
| 199 | function getCourse() { | 216 | function getCourse() { |
| 200 | // '1777256058082189313' | 217 | // '1777256058082189313' |
| 201 | masterClassList({cptId:cptId.value}).then(res=>{ | 218 | masterClassList({cptId: cptId.value}).then(res => { |
| 202 | courseList.value = res.data | 219 | courseList.value = res.data |
| 203 | }) | 220 | }) |
| 204 | } | 221 | } |
| 222 | |||
| 205 | function setActive(n) { | 223 | function setActive(n) { |
| 206 | activeStep.value = n | 224 | activeStep.value = n |
| 207 | } | 225 | } |
| 208 | function courseChange(e){ | 226 | |
| 209 | console.log('已选',e) | 227 | function courseChange(e) { |
| 228 | console.log('已选', e) | ||
| 210 | } | 229 | } |
| 230 | |||
| 211 | function checkApplyCourse(n) { | 231 | function checkApplyCourse(n) { |
| 212 | getMasterApply({card:form.value.passportNo}).then(res=>{ | 232 | getMasterApply({card: form.value.passportNo}).then(res => { |
| 213 | if(res.data?.length>0){ | 233 | if (res.data?.length > 0) { |
| 214 | form.value.courseId = [] | 234 | form.value.courseId = [] |
| 215 | for(var n of res.data){ | 235 | for (var n of res.data) { |
| 216 | form.value.courseId.push(n.itemId) | 236 | form.value.courseId.push(n.itemId) |
| 217 | } | 237 | } |
| 218 | ElMessageBox.confirm( | 238 | ElMessageBox.confirm( |
| ... | @@ -221,14 +241,14 @@ function checkApplyCourse(n) { | ... | @@ -221,14 +241,14 @@ function checkApplyCourse(n) { |
| 221 | confirmButtonText: language.value == 0 ? '是' : 'Confirm', | 241 | confirmButtonText: language.value == 0 ? '是' : 'Confirm', |
| 222 | cancelButtonText: language.value == 0 ? '否' : 'Cancel', | 242 | cancelButtonText: language.value == 0 ? '否' : 'Cancel', |
| 223 | type: 'warning' | 243 | type: 'warning' |
| 224 | }).then(()=>{ | 244 | }).then(() => { |
| 225 | //删除原记录 | 245 | //删除原记录 |
| 226 | delByCard(form.value.passportNo).then(res=>{ | 246 | delByCard(form.value.passportNo).then(res => { |
| 227 | form.value.courseId = [] | 247 | form.value.courseId = [] |
| 228 | disChoose.value = false | 248 | disChoose.value = false |
| 229 | to2() | 249 | to2() |
| 230 | }) | 250 | }) |
| 231 | }).catch(()=>{ | 251 | }).catch(() => { |
| 232 | disChoose.value = true | 252 | disChoose.value = true |
| 233 | to2() | 253 | to2() |
| 234 | }) | 254 | }) |
| ... | @@ -238,6 +258,7 @@ function checkApplyCourse(n) { | ... | @@ -238,6 +258,7 @@ function checkApplyCourse(n) { |
| 238 | }) | 258 | }) |
| 239 | 259 | ||
| 240 | } | 260 | } |
| 261 | |||
| 241 | function to2() { | 262 | function to2() { |
| 242 | proxy.$refs.iformRef.validate(valid => { | 263 | proxy.$refs.iformRef.validate(valid => { |
| 243 | if (form.value.email.indexOf('@') == -1) { | 264 | if (form.value.email.indexOf('@') == -1) { |
| ... | @@ -256,14 +277,15 @@ function to2() { | ... | @@ -256,14 +277,15 @@ function to2() { |
| 256 | 277 | ||
| 257 | 278 | ||
| 258 | function checkCard() { | 279 | function checkCard() { |
| 259 | getByCard({card:form.value.passportNo}).then(res=>{ | 280 | getByCard({card: form.value.passportNo}).then(res => { |
| 260 | if(res.data){ | 281 | if (res.data) { |
| 261 | form.value = res.data | 282 | form.value = res.data |
| 262 | } else { | 283 | } else { |
| 263 | form.value.courseId = [] | 284 | form.value.courseId = [] |
| 264 | } | 285 | } |
| 265 | }) | 286 | }) |
| 266 | } | 287 | } |
| 288 | |||
| 267 | getCountryList() | 289 | getCountryList() |
| 268 | 290 | ||
| 269 | function getCountryList() { | 291 | function getCountryList() { |
| ... | @@ -296,29 +318,35 @@ const submit = () => { | ... | @@ -296,29 +318,35 @@ const submit = () => { |
| 296 | form.value.itemIds = form.value.courseId.toString() | 318 | form.value.itemIds = form.value.courseId.toString() |
| 297 | delete form.value.courseId | 319 | delete form.value.courseId |
| 298 | submitMasterApply(form.value).then((res) => { | 320 | submitMasterApply(form.value).then((res) => { |
| 299 | ElMessage.success(language.value == 0 ?'提交成功':'Successfully!') | 321 | ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!') |
| 300 | showR.value = true | 322 | showR.value = true |
| 301 | }).catch(()=>{ | 323 | }).catch(() => { |
| 302 | 324 | ||
| 303 | }) | 325 | }) |
| 304 | }) | 326 | }) |
| 305 | } | 327 | } |
| 306 | const conti = () => { | 328 | const conti = () => { |
| 307 | showR.value = false | 329 | showR.value = false |
| 308 | form.value = { | 330 | form.value = {} |
| 309 | gender: '0' | ||
| 310 | } | ||
| 311 | } | 331 | } |
| 312 | const close = () =>{ | 332 | const close = () => { |
| 313 | show.value = false | 333 | show.value = false |
| 314 | } | 334 | } |
| 315 | </script> | 335 | </script> |
| 316 | 336 | ||
| 317 | <style scoped> | 337 | <style scoped> |
| 318 | .xzRich{line-height: 2;font-size: 14px;} | 338 | .xzRich { |
| 339 | line-height: 2; | ||
| 340 | font-size: 14px; | ||
| 341 | } | ||
| 342 | |||
| 319 | .boxInvitation { | 343 | .boxInvitation { |
| 320 | width: 90%; | 344 | width: 90%; |
| 321 | margin: auto | 345 | margin: auto |
| 322 | } | 346 | } |
| 323 | h4{font-size: 15px;line-height: 1.6;} | 347 | |
| 348 | h4 { | ||
| 349 | font-size: 15px; | ||
| 350 | line-height: 1.6; | ||
| 351 | } | ||
| 324 | </style> | 352 | </style> | ... | ... |
| ... | @@ -94,7 +94,7 @@ | ... | @@ -94,7 +94,7 @@ |
| 94 | </el-icon> | 94 | </el-icon> |
| 95 | </a> | 95 | </a> |
| 96 | <!-- <el-button type="primary" @click="popMaster">青少年公益课</el-button>--> | 96 | <!-- <el-button type="primary" @click="popMaster">青少年公益课</el-button>--> |
| 97 | <a class="zn-btn ml20 btn-q" @click="popMaster">青少年公益课</a> | 97 | <a class="zn-btn ml20 btn-q" @click="popMaster">青少年公益课报名</a> |
| 98 | </div> | 98 | </div> |
| 99 | </el-col> | 99 | </el-col> |
| 100 | <el-col :sm="24" :lg="14"> | 100 | <el-col :sm="24" :lg="14"> | ... | ... |
| ... | @@ -85,12 +85,10 @@ | ... | @@ -85,12 +85,10 @@ |
| 85 | <el-col :sm="24" :lg="10"> | 85 | <el-col :sm="24" :lg="10"> |
| 86 | <div class="bgbg"> | 86 | <div class="bgbg"> |
| 87 | <h1 style="color: #fff">{{matchData?.name}}</h1> | 87 | <h1 style="color: #fff">{{matchData?.name}}</h1> |
| 88 | <div> | 88 | <div style="margin-bottom: 30px"> |
| 89 | <a class="zn-btn" @click="goGuide"> | 89 | <a class="zn-btn" style="font-size: 15px" @click="goGuide">GUIDELINE<el-icon><download /></el-icon> |
| 90 | GUIDELINE | ||
| 91 | <el-icon><download /></el-icon> | ||
| 92 | </a> | 90 | </a> |
| 93 | <a class="zn-btn ml20 btn-q " @click="popMaster">Junior &Youth Camp <el-icon><Edit /></el-icon> | 91 | <a class="zn-btn ml20 btn-q" style="font-size: 15px" @click="popMaster">Junior &Youth Camp REGISTER<el-icon><Edit /></el-icon> |
| 94 | </a> | 92 | </a> |
| 95 | </div> | 93 | </div> |
| 96 | 94 | ... | ... |
| ... | @@ -7,7 +7,7 @@ | ... | @@ -7,7 +7,7 @@ |
| 7 | <team-sign-step v-if="user.utype=='2'" :activeStep="1" :language="language"/> | 7 | <team-sign-step v-if="user.utype=='2'" :activeStep="1" :language="language"/> |
| 8 | </el-card> | 8 | </el-card> |
| 9 | 9 | ||
| 10 | <el-card class="mt20"> | 10 | <el-card class="mt20" v-if="isNational"> |
| 11 | <h3 class="text-center text-danger" v-if="language==0">是否添加随行人员,如果没有,请点击下一步,跳过此步骤</h3> | 11 | <h3 class="text-center text-danger" v-if="language==0">是否添加随行人员,如果没有,请点击下一步,跳过此步骤</h3> |
| 12 | <h3 class="text-center text-danger" v-else> | 12 | <h3 class="text-center text-danger" v-else> |
| 13 | Do you need to add accompanying persons? If not, please proceed to the next step. | 13 | Do you need to add accompanying persons? If not, please proceed to the next step. |
| ... | @@ -49,8 +49,8 @@ | ... | @@ -49,8 +49,8 @@ |
| 49 | <div class="card-header"> | 49 | <div class="card-header"> |
| 50 | <img src="@/assets/sign/tag02.png"/> | 50 | <img src="@/assets/sign/tag02.png"/> |
| 51 | {{ language==0?'领队':'HEAD OF TEAM' }} | 51 | {{ language==0?'领队':'HEAD OF TEAM' }} |
| 52 | <!-- <span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>--> | 52 | <span class="tip" v-if="language==0&&!isNational">(必选一位领队)</span> |
| 53 | <!-- <span class="tip" v-else>(Coach/Team Leader, select at least one)</span>--> | 53 | <span class="tip" v-if="language==1&&!isNational">(Team Leader select at least one)</span> |
| 54 | </div> | 54 | </div> |
| 55 | </template> | 55 | </template> |
| 56 | <div class="chooseForm"> | 56 | <div class="chooseForm"> |
| ... | @@ -313,10 +313,10 @@ function geren() { | ... | @@ -313,10 +313,10 @@ function geren() { |
| 313 | } | 313 | } |
| 314 | 314 | ||
| 315 | function goNext() { | 315 | function goNext() { |
| 316 | // if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) { | 316 | if (!isNational.value && (form.value.leader.length == 0)) { |
| 317 | // ElMessage.warning(language.value==0?'至少选一个教练或领队':'Coach/Team Leader, select at least one') | 317 | ElMessage.warning(language.value==0?'必选一位领队':'Team Leaders select at least one') |
| 318 | // return | 318 | return |
| 319 | // } | 319 | } |
| 320 | // (personAllList.value.coaches.length>=0 && form.value.coachs?.toString().length == 0)&& | 320 | // (personAllList.value.coaches.length>=0 && form.value.coachs?.toString().length == 0)&& |
| 321 | // (personAllList.value.teamDoctors.length>=0 && form.value.doctor?.toString().length == 0)&& | 321 | // (personAllList.value.teamDoctors.length>=0 && form.value.doctor?.toString().length == 0)&& |
| 322 | // (personAllList.value.translators.length>=0 && form.value.translator?.toString().length == 0)&& | 322 | // (personAllList.value.translators.length>=0 && form.value.translator?.toString().length == 0)&& | ... | ... |
| ... | @@ -620,7 +620,14 @@ function checkTwo(a,b) { | ... | @@ -620,7 +620,14 @@ function checkTwo(a,b) { |
| 620 | if(isNational.value){ | 620 | if(isNational.value){ |
| 621 | ElMessage.warning(language.value == 0 ? '他们不是固定组合':'They\'re not a couple') | 621 | ElMessage.warning(language.value == 0 ? '他们不是固定组合':'They\'re not a couple') |
| 622 | } else { | 622 | } else { |
| 623 | ElMessage.warning(language.value == 0 ? `${a.realName}/${b.realName} 已经和其他人组成舞伴,无法报名,请重新选择`:`${a.realName}/${b.realName} has already formed a dancer with another person, cannot sign up: please select again`) | 623 | ElMessageBox.confirm(language.value == 0 ? `${a.realName}/${b.realName} 已经和其他人组成舞伴,无法报名,请重新选择`:`${a.realName}/${b.realName} has already formed a dancer with another person, cannot sign up: please select again`, |
| 624 | language.value == 0 ? '提示' : 'Tips', { | ||
| 625 | confirmButtonText: language.value == 0 ? '确定' : 'Confirm', | ||
| 626 | showCancelButton: false, | ||
| 627 | type: 'warning' | ||
| 628 | }).then(() => { | ||
| 629 | console.log('Confirm') | ||
| 630 | }) | ||
| 624 | } | 631 | } |
| 625 | } | 632 | } |
| 626 | }) | 633 | }) | ... | ... |
| ... | @@ -8,7 +8,7 @@ | ... | @@ -8,7 +8,7 @@ |
| 8 | <el-row :gutter="30" class="mt30"> | 8 | <el-row :gutter="30" class="mt30"> |
| 9 | <el-col :lg="12" class="touxiang"> | 9 | <el-col :lg="12" class="touxiang"> |
| 10 | 10 | ||
| 11 | <el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'" required> | 11 | <el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'" :required="form.labelArr.indexOf('0')>-1"> |
| 12 | <ImageUpload2 | 12 | <ImageUpload2 |
| 13 | v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1" | 13 | v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1" |
| 14 | :is-show-tip="false" | 14 | :is-show-tip="false" |
| ... | @@ -140,7 +140,7 @@ const data = reactive({ | ... | @@ -140,7 +140,7 @@ const data = reactive({ |
| 140 | // regionId: [{ required: true, message: '必填', trigger: 'change' }], | 140 | // regionId: [{ required: true, message: '必填', trigger: 'change' }], |
| 141 | birth: [{required: true, message: '必填', trigger: 'change'}], | 141 | birth: [{required: true, message: '必填', trigger: 'change'}], |
| 142 | // address: [{ required: true, message: '必填', trigger: 'blur' }], | 142 | // address: [{ required: true, message: '必填', trigger: 'blur' }], |
| 143 | picUrl: [{required: true, message: '必填', trigger: 'blur'}], | 143 | // picUrl: [{required: true, message: '必填', trigger: 'blur'}], |
| 144 | sex: [{required: true, message: '必填', trigger: 'change'}], | 144 | sex: [{required: true, message: '必填', trigger: 'change'}], |
| 145 | labelArr: [{required: true, message: '必填', trigger: 'change'}] | 145 | labelArr: [{required: true, message: '必填', trigger: 'change'}] |
| 146 | }, | 146 | }, |
| ... | @@ -153,7 +153,7 @@ const data = reactive({ | ... | @@ -153,7 +153,7 @@ const data = reactive({ |
| 153 | // regionId: [{ required: true, message: 'required', trigger: 'change' }], | 153 | // regionId: [{ required: true, message: 'required', trigger: 'change' }], |
| 154 | birth: [{required: true, message: 'required', trigger: 'change'}], | 154 | birth: [{required: true, message: 'required', trigger: 'change'}], |
| 155 | // address: [{ required: true, message: 'required', trigger: 'blur' }], | 155 | // address: [{ required: true, message: 'required', trigger: 'blur' }], |
| 156 | picUrl: [{required: true, message: 'required', trigger: 'blur'}], | 156 | // picUrl: [{required: true, message: 'required', trigger: 'blur'}], |
| 157 | sex: [{required: true, message: 'required', trigger: 'change'}], | 157 | sex: [{required: true, message: 'required', trigger: 'change'}], |
| 158 | labelArr: [{required: true, message: 'required', trigger: 'change'}] | 158 | labelArr: [{required: true, message: 'required', trigger: 'change'}] |
| 159 | }, | 159 | }, |
| ... | @@ -304,6 +304,10 @@ function giveBirthDay() { | ... | @@ -304,6 +304,10 @@ function giveBirthDay() { |
| 304 | function submitForm() { | 304 | function submitForm() { |
| 305 | proxy.$refs['dialogRef'].validate((valid) => { | 305 | proxy.$refs['dialogRef'].validate((valid) => { |
| 306 | if (valid) { | 306 | if (valid) { |
| 307 | if(!form.value.picUrl&&form.value.labelArr.indexOf('0')>-1){ | ||
| 308 | ElMessage.warning(language.value == 0 ? '请上传个人照片' :'Please upload your photo') | ||
| 309 | return | ||
| 310 | } | ||
| 307 | // 验证身份证号 | 311 | // 验证身份证号 |
| 308 | if (form.value.idcType == 0 && !(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) { | 312 | if (form.value.idcType == 0 && !(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) { |
| 309 | ElMessage.warning('请输入正确的身份证号码') | 313 | ElMessage.warning('请输入正确的身份证号码') | ... | ... |
| ... | @@ -88,10 +88,11 @@ import OrderRemark from '@/viewsPc/components/orderRemark' | ... | @@ -88,10 +88,11 @@ import OrderRemark from '@/viewsPc/components/orderRemark' |
| 88 | import {getBaseInfoByActiveId} from "@/apiPc/booking"; | 88 | import {getBaseInfoByActiveId} from "@/apiPc/booking"; |
| 89 | import {getCurrentInstance} from "@vue/runtime-core"; | 89 | import {getCurrentInstance} from "@vue/runtime-core"; |
| 90 | import {onMounted} from "vue"; | 90 | import {onMounted} from "vue"; |
| 91 | |||
| 91 | const {proxy} = getCurrentInstance() | 92 | const {proxy} = getCurrentInstance() |
| 92 | 93 | ||
| 93 | const router = useRouter() | 94 | const router = useRouter() |
| 94 | const language= useStorage('language',0) | 95 | const language = useStorage('language', 0) |
| 95 | const props = defineProps({ | 96 | const props = defineProps({ |
| 96 | matchId: { | 97 | matchId: { |
| 97 | type: String, | 98 | type: String, |
| ... | @@ -100,38 +101,45 @@ const props = defineProps({ | ... | @@ -100,38 +101,45 @@ const props = defineProps({ |
| 100 | } | 101 | } |
| 101 | }) | 102 | }) |
| 102 | const form = ref({}) | 103 | const form = ref({}) |
| 103 | onMounted(()=>{ | 104 | onMounted(() => { |
| 104 | getBaseInfoByActiveId(props.matchId).then(res=>{ | 105 | getBaseInfoByActiveId(props.matchId).then(res => { |
| 105 | form.value = res.data || null | 106 | form.value = res.data || null |
| 106 | }).catch(err=>{ | 107 | }).catch(err => { |
| 107 | form.value = null | 108 | form.value = null |
| 108 | console.log(err) | 109 | console.log(err) |
| 109 | }) | 110 | }) |
| 110 | }) | 111 | }) |
| 111 | 112 | ||
| 112 | function building() { | 113 | function building() { |
| 113 | ElMessage.warning(language.value==0?'感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。':'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.') | 114 | ElMessage.warning(language.value == 0 ? '感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。' : 'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.') |
| 114 | return | 115 | return |
| 115 | } | 116 | } |
| 116 | function popRemark(type){ | 117 | |
| 117 | if(!form.value){ | 118 | function popRemark(type) { |
| 119 | if (!form.value) { | ||
| 118 | building() | 120 | building() |
| 119 | return | 121 | return |
| 120 | } | 122 | } |
| 121 | 123 | ||
| 122 | if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3')|| (form.value.isMealView == 0&&type=='4') || (type=='5'&&form.value.isPhotoView == 0)|| type=='0' ){ | 124 | if ((form.value.isJdView == 0 && type == '1') |
| 125 | || (form.value.isCarView == 0 && type == '2') | ||
| 126 | || (form.value.isFoodView == 0 && type == '3') | ||
| 127 | || (form.value.isMealView == 0 && type == '4') | ||
| 128 | || (type == '5' && form.value.isPhotoView == 0) | ||
| 129 | || (type == '0')) { | ||
| 123 | building() | 130 | building() |
| 124 | return | 131 | return |
| 125 | } | 132 | } |
| 126 | 133 | ||
| 127 | const params = { | 134 | const params = { |
| 128 | matchId: props.matchId, | 135 | matchId: props.matchId, |
| 129 | title: language.value == 0 ?'预订说明':'Booking Instructions', | 136 | title: language.value == 0 ? '预订说明' : 'Booking Instructions', |
| 130 | type: type | 137 | type: type |
| 131 | } | 138 | } |
| 132 | proxy.$refs['orderRemarkRef'].open(params) | 139 | proxy.$refs['orderRemarkRef'].open(params) |
| 133 | 140 | ||
| 134 | } | 141 | } |
| 142 | |||
| 135 | function goBooking(n) { | 143 | function goBooking(n) { |
| 136 | switch (n) { | 144 | switch (n) { |
| 137 | case 0: | 145 | case 0: |
| ... | @@ -164,5 +172,7 @@ function goBooking(n) { | ... | @@ -164,5 +172,7 @@ function goBooking(n) { |
| 164 | </script> | 172 | </script> |
| 165 | 173 | ||
| 166 | <style scoped lang="scss"> | 174 | <style scoped lang="scss"> |
| 167 | h4{padding: 0 10px;} | 175 | h4 { |
| 176 | padding: 0 10px; | ||
| 177 | } | ||
| 168 | </style> | 178 | </style> | ... | ... |
| ... | @@ -25,12 +25,6 @@ const people = reactive({ | ... | @@ -25,12 +25,6 @@ const people = reactive({ |
| 25 | message: languageFormat(language.value, "请输入证件号", "ID Numbe"), | 25 | message: languageFormat(language.value, "请输入证件号", "ID Numbe"), |
| 26 | }); | 26 | }); |
| 27 | 27 | ||
| 28 | // 使用正则验证身份证号码格式 | ||
| 29 | const idCardRegex = | ||
| 30 | /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[\dXx]$/; | ||
| 31 | if (!idCardRegex.test(people.form.idCard) && language.value == 0) | ||
| 32 | return ElMessage({ type: "warning", message: "身份证号格式不正确" }); | ||
| 33 | |||
| 34 | addViewPeople(people.form).then((res) => { | 28 | addViewPeople(people.form).then((res) => { |
| 35 | ElMessage({ | 29 | ElMessage({ |
| 36 | type: "success", | 30 | type: "success", |
| ... | @@ -59,7 +53,7 @@ const people = reactive({ | ... | @@ -59,7 +53,7 @@ const people = reactive({ |
| 59 | :placeholder="language == 0 ? '请输入姓名' : 'Name'" | 53 | :placeholder="language == 0 ? '请输入姓名' : 'Name'" |
| 60 | /> | 54 | /> |
| 61 | </div> | 55 | </div> |
| 62 | <div> | 56 | <!-- <div> |
| 63 | <div class="label"> | 57 | <div class="label"> |
| 64 | {{ languageFormat(language, "证件类型", "Type of Document") }} | 58 | {{ languageFormat(language, "证件类型", "Type of Document") }} |
| 65 | </div> | 59 | </div> |
| ... | @@ -69,17 +63,17 @@ const people = reactive({ | ... | @@ -69,17 +63,17 @@ const people = reactive({ |
| 69 | placeholder="Please input" | 63 | placeholder="Please input" |
| 70 | readonly | 64 | readonly |
| 71 | /> | 65 | /> |
| 72 | </div> | 66 | </div> --> |
| 73 | </div> | 67 | </div> |
| 74 | <div class="form-item"> | 68 | <div class="form-item"> |
| 75 | <div> | 69 | <div> |
| 76 | <div class="label"> | 70 | <div class="label"> |
| 77 | {{ languageFormat(language, "身份证号", "Identity Card") }} | 71 | {{ languageFormat(language, "有效证件号", "Identity Card") }} |
| 78 | </div> | 72 | </div> |
| 79 | <el-input | 73 | <el-input |
| 80 | v-model="people.form.idCard" | 74 | v-model="people.form.idCard" |
| 81 | style="width: 570px" | 75 | style="width: 570px" |
| 82 | :placeholder="language == 0 ? '请输入身份证号' : 'ID Number'" | 76 | :placeholder="language == 0 ? '请输入有效证件号' : 'ID Number'" |
| 83 | /> | 77 | /> |
| 84 | </div> | 78 | </div> |
| 85 | </div> | 79 | </div> | ... | ... |
| ... | @@ -80,7 +80,7 @@ const startCheckSuccessListener = (orderSn, actId) => { | ... | @@ -80,7 +80,7 @@ const startCheckSuccessListener = (orderSn, actId) => { |
| 80 | clearInterval(timer); | 80 | clearInterval(timer); |
| 81 | timer = null; | 81 | timer = null; |
| 82 | }); | 82 | }); |
| 83 | }, 3000); | 83 | }, 1500); |
| 84 | }; | 84 | }; |
| 85 | 85 | ||
| 86 | const detail = reactive({ | 86 | const detail = reactive({ |
| ... | @@ -352,7 +352,7 @@ detail.fetchData(); | ... | @@ -352,7 +352,7 @@ detail.fetchData(); |
| 352 | > | 352 | > |
| 353 | <div>{{ it.name }}</div> | 353 | <div>{{ it.name }}</div> |
| 354 | <div class="idcard"> | 354 | <div class="idcard"> |
| 355 | {{ languageFormat(language, "身份证", "ID number") }}:{{ | 355 | {{ languageFormat(language, "证件号", "ID number") }}:{{ |
| 356 | it.idCard | 356 | it.idCard |
| 357 | }} | 357 | }} |
| 358 | </div> | 358 | </div> | ... | ... |
| ... | @@ -68,7 +68,7 @@ audience.fetchData(); | ... | @@ -68,7 +68,7 @@ audience.fetchData(); |
| 68 | > | 68 | > |
| 69 | <div class="name">{{ it.name }}</div> | 69 | <div class="name">{{ it.name }}</div> |
| 70 | <div class="idcard"> | 70 | <div class="idcard"> |
| 71 | {{ languageFormat(language, "身份证", "Identity Card") }}:{{ | 71 | {{ languageFormat(language, "证件号", "Identity Card") }}:{{ |
| 72 | it.idCard | 72 | it.idCard |
| 73 | }} | 73 | }} |
| 74 | </div> | 74 | </div> | ... | ... |
| ... | @@ -82,8 +82,8 @@ export default defineConfig(({ mode, command }) => { | ... | @@ -82,8 +82,8 @@ export default defineConfig(({ mode, command }) => { |
| 82 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') | 82 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') |
| 83 | }, | 83 | }, |
| 84 | '/dev-api': { | 84 | '/dev-api': { |
| 85 | // target: 'http://192.168.1.118:8081/', | 85 | target: 'http://192.168.1.118:8081/', |
| 86 | target: 'https://jijin.wtwuxicenter.com/stage-api', | 86 | // target: 'https://jijin.wtwuxicenter.com/stage-api', |
| 87 | changeOrigin: true, | 87 | changeOrigin: true, |
| 88 | rewrite: (p) => p.replace(/^\/dev-api/, '') | 88 | rewrite: (p) => p.replace(/^\/dev-api/, '') |
| 89 | } | 89 | } | ... | ... |
-
Please register or sign in to post a comment