e3f46817 by 华明祺

no message

1 parent 45b4252e
...@@ -15,7 +15,8 @@ ...@@ -15,7 +15,8 @@
15 "@element-plus/icons-vue": "2.0.10", 15 "@element-plus/icons-vue": "2.0.10",
16 "@videojs-player/vue": "^1.0.0", 16 "@videojs-player/vue": "^1.0.0",
17 "@vueup/vue-quill": "1.1.1", 17 "@vueup/vue-quill": "1.1.1",
18 "@vueuse/core": "^10.1.2", 18 "@vueuse/core": "^13.4.0",
19 "@vueuse/router": "^13.4.0",
19 "axios": "0.27.2", 20 "axios": "0.27.2",
20 "crypto-js": "^4.1.1", 21 "crypto-js": "^4.1.1",
21 "echarts": "5.4.0", 22 "echarts": "5.4.0",
......
...@@ -32,7 +32,9 @@ ...@@ -32,7 +32,9 @@
32 <el-col :span="14"> 32 <el-col :span="14">
33 <ul> 33 <ul>
34 <li>Postal code:214000</li> 34 <li>Postal code:214000</li>
35 <li>Address:100 meters northeast of the intersection of Hefeng Road and Qingshu, the Taihu Lake New Town, Wuxi, Jiangsu</li> 35 <li>Address:100 meters northeast of the intersection of Hefeng Road and Qingshu, the Taihu Lake New Town,
36 Wuxi, Jiangsu
37 </li>
36 </ul> 38 </ul>
37 </el-col> 39 </el-col>
38 <el-col :span="6"> 40 <el-col :span="6">
...@@ -62,16 +64,19 @@ ...@@ -62,16 +64,19 @@
62 <div class="text-center mt10">周边活动</div> 64 <div class="text-center mt10">周边活动</div>
63 </a> 65 </a>
64 </div> 66 </div>
65 <div onclick="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="客服" > 67 <div
68 style="display: none" title="客服"
69 onclick="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')"
70 >
66 <img class="kf" src="@/assets/logo/btn01.png"/> 71 <img class="kf" src="@/assets/logo/btn01.png"/>
67 <div class="text-center mt10">在线客服</div> 72 <div class="text-center mt10">在线客服</div>
68 </div> 73 </div>
69 <!-- <div @click="goHelpZH">--> 74 <!-- <div @click="goHelpZH">-->
70 <!-- <a>--> 75 <!-- <a>-->
71 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>--> 76 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>-->
72 <!-- <div class="text-center mt10">周边活动</div>--> 77 <!-- <div class="text-center mt10">周边活动</div>-->
73 <!-- </a>--> 78 <!-- </a>-->
74 <!-- </div>--> 79 <!-- </div>-->
75 </div> 80 </div>
76 <div class="mlb" v-else> 81 <div class="mlb" v-else>
77 <div @click="goAround" class="mb10 pb5"> 82 <div @click="goAround" class="mb10 pb5">
...@@ -80,14 +85,16 @@ ...@@ -80,14 +85,16 @@
80 <div class="text-center mt10">ACTIVITIES</div> 85 <div class="text-center mt10">ACTIVITIES</div>
81 </a> 86 </a>
82 </div> 87 </div>
83 <div onclick="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"> 88 <div
89 onclick="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')"
90 title="Live Chat">
84 <img class="kf" src="@/assets/logo/btn01.png"/> 91 <img class="kf" src="@/assets/logo/btn01.png"/>
85 <div class="text-center ">LIVE CHAT</div> 92 <div class="text-center ">LIVE CHAT</div>
86 </div> 93 </div>
87 <!-- <div @click="goHelp">--> 94 <!-- <div @click="goHelp">-->
88 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>--> 95 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>-->
89 <!-- <div class="text-center uppercase">Video Guide</div>--> 96 <!-- <div class="text-center uppercase">Video Guide</div>-->
90 <!-- </div>--> 97 <!-- </div>-->
91 </div> 98 </div>
92 </div> 99 </div>
93 </template> 100 </template>
...@@ -96,13 +103,14 @@ ...@@ -96,13 +103,14 @@
96 import {useStorage} from "@vueuse/core/index"; 103 import {useStorage} from "@vueuse/core/index";
97 import {useRouter} from "vue-router"; 104 import {useRouter} from "vue-router";
98 import {ElMessage} from "element-plus"; 105 import {ElMessage} from "element-plus";
106
99 const router = useRouter() 107 const router = useRouter()
100 const language = useStorage('language', 0) 108 const language = useStorage('language', 0)
101 const goHelp = () => { 109 const goHelp = () => {
102 router.push({ 110 router.push({
103 path: `/news/list/20000100`, 111 path: `/news/list/20000100`,
104 query:{ 112 query: {
105 kindName: language.value===0?'操作指引':'Video Guide' 113 kindName: language.value === 0 ? '操作指引' : 'Video Guide'
106 } 114 }
107 }) 115 })
108 } 116 }
...@@ -111,63 +119,144 @@ const goHelpZH = () => { ...@@ -111,63 +119,144 @@ const goHelpZH = () => {
111 router.push({ 119 router.push({
112 name: 'guide', 120 name: 'guide',
113 query: { 121 query: {
114 index:8 122 index: 8
115 } 123 }
116 }) 124 })
117 } 125 }
118 const goAround = () => { 126 const goAround = () => {
119 //周边活动 127 //周边活动
120 router.push({path: `/about/wuDao`,query: {activeIndex: '2'}}) 128 router.push({path: `/about/wuDao`, query: {activeIndex: '2'}})
121 } 129 }
122 </script> 130 </script>
123 131
124 <style lang="scss" scoped> 132 <style lang="scss" scoped>
125 .kf{width: 45px;margin: auto;height: auto; 133 .kf {
134 width: 45px;
135 margin: auto;
136 height: auto;
126 //animation: pop 2s infinite; 137 //animation: pop 2s infinite;
127 } 138 }
128 .fixed-right{position: fixed;right: 0;top: 65%;z-index: 9; 139
129 .mlb{background: #fff;border-radius: 10px 0 0 10px;box-shadow: 0 2px 8px #aaa; 140 .fixed-right {
130 padding: 10px 8px;text-align: center;cursor: pointer; 141 position: fixed;
131 div{text-transform: uppercase;} 142 right: 0;
132 div:first-child{border-bottom: 0.5px solid #eee; 143 top: 65%;
144 z-index: 9;
145
146 .mlb {
147 background: #fff;
148 border-radius: 10px 0 0 10px;
149 box-shadow: 0 2px 8px #aaa;
150 padding: 10px 8px;
151 text-align: center;
152 cursor: pointer;
153
154 div {
155 text-transform: uppercase;
156 }
157
158 div:first-child {
159 border-bottom: 0.5px solid #eee;
133 //padding: 0 0 10px;margin-bottom: 10px; 160 //padding: 0 0 10px;margin-bottom: 10px;
134 } 161 }
135 div:hover{.gradient-text{font-weight: bold;}} 162
163 div:hover {
164 .gradient-text {
165 font-weight: bold;
166 }
167 }
136 } 168 }
137 } 169 }
138 .copyright{font-size: 14px;opacity: 0.88;color: #4C5359;} 170
139 .footAll{background: #E0E3E5;;padding: 36px 0 5px; 171 .copyright {
140 p{font-size: 14px;opacity: 0.88;color: #4C5359;} 172 font-size: 14px;
141 ul{list-style: none; 173 opacity: 0.88;
142 li{line-height: 30px;font-size: 14px;opacity: 0.88;color: #4C5359; 174 color: #4C5359;
143 a{margin-left: 15px; 175 }
144 &:hover{text-decoration: underline;} 176
177 .footAll {
178 background: #E0E3E5;;
179 padding: 36px 0 5px;
180
181 p {
182 font-size: 14px;
183 opacity: 0.88;
184 color: #4C5359;
185 }
186
187 ul {
188 list-style: none;
189
190 li {
191 line-height: 30px;
192 font-size: 14px;
193 opacity: 0.88;
194 color: #4C5359;
195
196 a {
197 margin-left: 15px;
198
199 &:hover {
200 text-decoration: underline;
201 }
145 } 202 }
146 } 203 }
147 } 204 }
148 img{height: 80px;} 205
206 img {
207 height: 80px;
208 }
149 } 209 }
210
150 .gradient-text { 211 .gradient-text {
151 font-family: FZJunHeiS-B-GB; 212 font-family: FZJunHeiS-B-GB;
152 font-weight: 600;font-size: 17px; 213 font-weight: 600;
214 font-size: 17px;
153 background: linear-gradient(0deg, #8226FC 0%, #483BEB 100%); 215 background: linear-gradient(0deg, #8226FC 0%, #483BEB 100%);
154 -webkit-background-clip: text; 216 -webkit-background-clip: text;
155 -webkit-text-fill-color: transparent; 217 -webkit-text-fill-color: transparent;
156 } 218 }
219
157 @media (max-width: 500px) { 220 @media (max-width: 500px) {
158 .forWei{display: none;} 221 .forWei {
159 .footAll{padding:10px 0; 222 display: none;
223 }
224 .footAll {
225 padding: 10px 0;
226
160 ul { 227 ul {
161 li { 228 li {
162 font-size: 10px;line-height: 1.4; 229 font-size: 10px;
230 line-height: 1.4;
163 } 231 }
164 } 232 }
165 img{height: 60px;} 233
166 p{font-size: 10px;line-height: 1.4;} 234 img {
167 .copyright{font-size: 10px;line-height: 1.4;} 235 height: 60px;
236 }
237
238 p {
239 font-size: 10px;
240 line-height: 1.4;
241 }
242
243 .copyright {
244 font-size: 10px;
245 line-height: 1.4;
246 }
168 } 247 }
169 } 248 }
170 .ffoot{display: inline-flex; 249
171 img{width: 20px;height: 20px;display: inline-block;position: relative;top: 4px;margin-right: 4px;} 250 .ffoot {
251 display: inline-flex;
252
253 img {
254 width: 20px;
255 height: 20px;
256 display: inline-block;
257 position: relative;
258 top: 4px;
259 margin-right: 4px;
260 }
172 } 261 }
173 </style> 262 </style>
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <img v-if="language==0" src="@/assets/booking/jd_text_c.png"> 4 <img v-if="language==0" src="@/assets/booking/jd_text_c.png">
5 <img v-else src="@/assets/booking/jd_text_e.png"> 5 <img v-else src="@/assets/booking/jd_text_e.png">
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
9 <el-input :placeholder="language==0?'请输入关键字搜索':'Search'" v-model="query.name" class="no-border"> 9 <el-input :placeholder="language==0?'请输入关键字搜索':'Search'" v-model="query.name" class="no-border">
10 </el-input> 10 </el-input>
11 <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList"> 11 <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList">
12 {{ language==0?'搜索':'Search' }}</el-button> 12 {{ language == 0 ? '搜索' : 'Search' }}
13 </el-button>
13 </div> 14 </div>
14 </div> 15 </div>
15 16
...@@ -25,146 +26,268 @@ ...@@ -25,146 +26,268 @@
25 </div> 26 </div>
26 </el-col> 27 </el-col>
27 <el-col :lg="12" :md="12"> 28 <el-col :lg="12" :md="12">
28 <h3 class="esp">{{h.name}}</h3> 29 <h3 class="esp">{{ h.name }}</h3>
29 <div class="starBox"> 30 <div class="starBox">
30 <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png"> 31 <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png">
31 </div> 32 </div>
32 <div class="tagbox esp"> 33 <div class="tagbox esp">
33 <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> 34 <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{ t }}</span>
34 <a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a> 35 <a v-show="h.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a>
35 </div> 36 </div>
36 <p class="esp addr mt20"> 37 <p class="esp addr mt20">
37 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> 38 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0">
38 {{h.address}} 39 <LocationFilled/>
40 </el-icon>
41 {{ h.address }}
39 </p> 42 </p>
40 </el-col> 43 </el-col>
41 <el-col :lg="4" :md="4" class="text-right"> 44 <el-col :lg="4" :md="4" class="text-right">
42 <div class="price">{{ language==0?'¥':'$' }}<span>{{ h.price }}</span> 45 <div class="price">{{ language == 0 ? '¥' : '$' }}<span>{{ h.price }}</span>
43 <i v-if="language==0"></i> 46 <i v-if="language==0"></i>
44 </div> 47 </div>
45 <el-button class="w200px blackBtn" round type="primary" >{{ language==0?'立即预订':'Select' }}</el-button> 48 <el-button class="w200px blackBtn" round type="primary">{{ language == 0 ? '立即预订' : 'Select' }}
49 </el-button>
46 </el-col> 50 </el-col>
47 </el-row> 51 </el-row>
48 </el-card> 52 </el-card>
49 </el-col> 53 </el-col>
50 </el-row> 54 </el-row>
51 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> 55 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description=""/>
52 <div style="height: 50px"></div> 56 <div style="height: 50px"></div>
53 </div> 57 </div>
54 58
55 </div> 59 </div>
56 </template> 60 </template>
57 61
58 <script setup> 62 <script setup>
59 import {onMounted} from "@vue/runtime-core" 63 import * as booking from "@/apiPc/booking"
60 import * as booking from "@/apiPc/booking" 64 import {useRouter, useRoute} from "vue-router";
61 import {useRouter,useRoute} from "vue-router"; 65 import {useStorage} from "@vueuse/core";
62 import {useStorage} from "@vueuse/core/index"; 66 import useUserStore from "@/store/modules/user";
63 import useUserStore from "@/store/modules/user"; 67 import {ElMessageBox} from "element-plus";
64 import {ElMessageBox} from "element-plus"; 68 import {useRouteQuery} from '@vueuse/router'
65 const router = useRouter() 69 import {onMounted} from "vue";
66 const route = useRoute() 70
67 const user = useUserStore().user 71 const router = useRouter()
68 const useStore = useUserStore 72 const route = useRoute()
69 const language= useStorage('language',0) 73
70 const query = ref({ 74 const useStore = useUserStore()
71 name:'' 75 const user = useStore.user
72 }) 76
73 const cptId = ref('') 77 const flag = useRouteQuery('flag')
74 const list = ref([]) 78
75 const loading = ref(false) 79 const language = useStorage('language', 0)
76 onMounted(()=>{ 80 const query = ref({
81 name: ''
82 })
83 const cptId = ref('')
84 const list = ref([])
85 const loading = ref(false)
86 onMounted(() => {
77 query.value.activityId = route.params.cptId 87 query.value.activityId = route.params.cptId
78 getList() 88 getList()
79 }) 89 })
80 90
81 function getList() { 91 function getList() {
82 loading.value = true 92 loading.value = true
83 booking.getHotelList(query.value).then(res=>{ 93 booking.getHotelList(Object.assign({
94 meeting: flag.value,
95 },query.value)).then(res => {
84 list.value = res.rows 96 list.value = res.rows
85 loading.value = false 97 loading.value = false
86 console.log(list.value) 98 console.log(list.value)
87 99
88 }).catch(e=>{ 100 }).catch(e => {
89 loading.value = false 101 loading.value = false
90 }) 102 })
91 } 103 }
92 function goDetail(item) { 104
93 if(!user){ 105 function goDetail(item) {
94 useStore().setVisitor() 106 if (!user) {
107 useStore.setVisitor()
95 return 108 return
96 } 109 }
97 if(item.meeting=='1'){ 110 if (item.meeting == '1') {
98 ElMessageBox.confirm( item.meetText,'',{ 111 ElMessageBox.confirm(item.meetText, '', {
99 cancelButtonText: language.value==1?'Close ':'关闭', 112 cancelButtonText: language.value == 1 ? 'Close ' : '关闭',
100 confirmButtonText: language.value==1?'Continue to book':'继续预订', 113 confirmButtonText: language.value == 1 ? 'Continue to book' : '继续预订',
101 type: 'warning', 114 type: 'warning',
102 }).then((res) => { 115 }).then((res) => {
103 router.push({ 116 router.push({
104 name:'hotelDetail', 117 name: 'hotelDetail',
105 params:{ 118 params: {
106 hotelId:item.hotelId, 119 hotelId: item.hotelId,
107 }, 120 },
108 query:{ 121 query: {
109 id:item.id 122 id: item.id
110 } 123 }
111 }) 124 })
112 }) 125 })
113 } else { 126 } else {
114 router.push({ 127 router.push({
115 name:'hotelDetail', 128 name: 'hotelDetail',
116 params:{ 129 params: {
117 hotelId:item.hotelId, 130 hotelId: item.hotelId,
118 }, 131 },
119 query:{ 132 query: {
120 id:item.id 133 id: item.id
121 } 134 }
122 }) 135 })
123 } 136 }
124 } 137 }
125 </script> 138 </script>
126 139
127 <style scoped lang="scss"> 140 <style scoped lang="scss">
128 .hotel{ 141 .hotel {
129 h3{margin: 0 0 10px;} 142 h3 {
130 img.w100{object-fit: cover;aspect-ratio: 16/9} 143 margin: 0 0 10px;
131 .addr{font-size: 14px;color: #929AA0;font-weight: 400;margin: 0 0 10px;} 144 }
132 .price{margin: 0 0 8px; 145
133 color: #FF8124;font-size: 18px; 146 img.w100 {
134 span{font-size: 36px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;} 147 object-fit: cover;
135 i{font-style: normal;color: #929AA0;} 148 aspect-ratio: 16/9
136 } 149 }
137 .blackBtn{background: #000;border: #000;} 150
138 } 151 .addr {
139 .banner{height: 140px;background-size: cover;text-align: center; 152 font-size: 14px;
140 background: url("@/assets/booking/jd_bg.png") center;display: flex;align-items: center; 153 color: #929AA0;
154 font-weight: 400;
155 margin: 0 0 10px;
156 }
157
158 .price {
159 margin: 0 0 8px;
160 color: #FF8124;
161 font-size: 18px;
162
163 span {
164 font-size: 36px;
165 margin: 0 8px;
166 font-family: 'DINAlternate-Bold';
167 font-weight: 600;
168 }
169
170 i {
171 font-style: normal;
172 color: #929AA0;
173 }
174 }
175
176 .blackBtn {
177 background: #000;
178 border: #000;
179 }
180 }
181
182 .banner {
183 height: 140px;
184 background-size: cover;
185 text-align: center;
186 background: url("@/assets/booking/jd_bg.png") center;
187 display: flex;
188 align-items: center;
141 justify-content: center; 189 justify-content: center;
142 img{display: block;margin:-30px auto 0;width: auto;} 190
191 img {
192 display: block;
193 margin: -30px auto 0;
194 width: auto;
195 }
196 }
197
198 .searchBar {
199 position: relative;
200 top: -30px;
201 background: #FFFFFF;
202 display: flex;
203 padding: 20px;
204 border-radius: 10px;
205 }
206
207 .no-border {
208 border: none;
209 background: #F5F7F9;
210
211 :deep(.el-input__wrapper) {
212 border: none;
213 box-shadow: none;
214 background: #F5F7F9;
143 } 215 }
144 .searchBar{position: relative;top: -30px; 216 }
145 background: #FFFFFF;display: flex;padding: 20px; 217
146 border-radius: 10px;} 218 .imgbox {
147 .no-border{border: none;background: #F5F7F9; 219 width: 100%;
148 :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} 220 height: 100%;
221 position: relative;
222
223 img {
224 width: 100%;
225 height: 100%;
149 } 226 }
150 .imgbox {width: 100%;height: 100%;position: relative; 227
151 img{width: 100%;height: 100%;} 228 .starBox {
152 .starBox{position: absolute;bottom: 0;right: 0;background: rgba(0,0,0,0.4);padding: 10px 15px 3px;} 229 position: absolute;
230 bottom: 0;
231 right: 0;
232 background: rgba(0, 0, 0, 0.4);
233 padding: 10px 15px 3px;
153 } 234 }
154 .po-r-b{} 235 }
155 .starBox{ 236
237 .po-r-b {
238 }
239
240 .starBox {
156 border-radius: 14px 0 0 0; 241 border-radius: 14px 0 0 0;
157 img{display: inline-block;margin-right: 4px;width: 24px;} 242
243 img {
244 display: inline-block;
245 margin-right: 4px;
246 width: 24px;
247 }
248 }
249
250 .tagbox {
251 margin: 10px 0;
252
253 a {
254 color: #AFB5B9;
255 font-size: 12px;
256 }
257
258 span {
259 border-radius: 13px;
260 font-size: 12px;
261 padding: 3px 10px;
262 margin-right: 10px;
263 font-weight: 400;
264 }
265
266 span:nth-child(4n) {
267 background: rgba(50, 177, 108, 0.2);
268 color: rgba(50, 177, 108, 1);
158 } 269 }
159 .tagbox{margin: 10px 0; 270
160 a{color: #AFB5B9;font-size: 12px;} 271 span:nth-child(4n+1) {
161 span{border-radius: 13px;font-size: 12px;padding: 3px 10px;margin-right:10px;font-weight: 400;} 272 background: rgba(243, 152, 0, 0.2);
162 span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);} 273 color: rgba(243, 152, 0, 1);
163 span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);} 274 }
164 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} 275
165 span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} 276 span:nth-child(4n+2) {
277 background: rgba(0, 160, 233, 0.2);
278 color: rgba(0, 160, 233, 1);
166 } 279 }
167 @media screen and (max-width: 768px) { 280
168 .hotel h3{margin: 20px 0 10px; font-size: 18px;} 281 span:nth-child(4n+3) {
282 background: rgba(247, 64, 166, 0.2);
283 color: rgba(247, 64, 166, 1);
284 }
285 }
286
287 @media screen and (max-width: 768px) {
288 .hotel h3 {
289 margin: 20px 0 10px;
290 font-size: 18px;
169 } 291 }
292 }
170 </style> 293 </style>
......
...@@ -92,6 +92,8 @@ ...@@ -92,6 +92,8 @@
92 <div v-if="labelObj.tv==1"><img src="@/assets/img/svg/tag18@2x.png"/>{{ language==0 ?'电视': 'tv' }}</div> 92 <div v-if="labelObj.tv==1"><img src="@/assets/img/svg/tag18@2x.png"/>{{ language==0 ?'电视': 'tv' }}</div>
93 <div v-if="labelObj.hours==1"><img src="@/assets/img/svg/tag19@2x.png"/>{{ language==0 ?'24小时前台': '24Hours Available' }}</div> 93 <div v-if="labelObj.hours==1"><img src="@/assets/img/svg/tag19@2x.png"/>{{ language==0 ?'24小时前台': '24Hours Available' }}</div>
94 <div v-if="labelObj.breakfast==1"><img src="@/assets/img/svg/tag20@2x.png"/>{{ language==0 ?'早餐': 'breakfast' }}</div> 94 <div v-if="labelObj.breakfast==1"><img src="@/assets/img/svg/tag20@2x.png"/>{{ language==0 ?'早餐': 'breakfast' }}</div>
95 <div v-if="labelObj.ntatorium==1"><img src="@/assets/img/svg/tag21@2x.png"/>{{ language==0 ?'泳池': 'ntatorium' }}</div>
96 <div v-if="labelObj.gymnasium==1"><img src="@/assets/img/svg/tag22@2x.png"/>{{ language==0 ?'健身房': 'gymnasium' }}</div>
95 </div> 97 </div>
96 </el-card> 98 </el-card>
97 99
......
...@@ -16,12 +16,12 @@ ...@@ -16,12 +16,12 @@
16 <el-col :sm="12" :lg="4" :xs="12"> 16 <el-col :sm="12" :lg="4" :xs="12">
17 <div class="item" @click="goMedia"><img src="@/assets/dance/btn07.png">媒体注册</div> 17 <div class="item" @click="goMedia"><img src="@/assets/dance/btn07.png">媒体注册</div>
18 </el-col> 18 </el-col>
19 <!-- <el-col :sm="12" :lg="4" :xs="12">--> 19 <!-- <el-col :sm="12" :lg="4" :xs="12">-->
20 <!-- <div class="item" @click="goAround"><img src="@/assets/dance/btn06.png">周边活动</div>--> 20 <!-- <div class="item" @click="goAround"><img src="@/assets/dance/btn06.png">周边活动</div>-->
21 <!-- </el-col>--> 21 <!-- </el-col>-->
22 <!-- <el-col :sm="12" :lg="4" :xs="12">--> 22 <!-- <el-col :sm="12" :lg="4" :xs="12">-->
23 <!-- <div class="item" @click="liveClick"><img src="@/assets/dance/btn05.png">赛事直播</div>--> 23 <!-- <div class="item" @click="liveClick"><img src="@/assets/dance/btn05.png">赛事直播</div>-->
24 <!-- </el-col>--> 24 <!-- </el-col>-->
25 </el-row> 25 </el-row>
26 </div> 26 </div>
27 <div class="itemBox_en" v-else> 27 <div class="itemBox_en" v-else>
...@@ -41,18 +41,18 @@ ...@@ -41,18 +41,18 @@
41 <el-col :sm="12" :lg="4" :xs="12"> 41 <el-col :sm="12" :lg="4" :xs="12">
42 <div class="item" @click="goMedia"><img src="@/assets/dance/btn07.png">Media Registration</div> 42 <div class="item" @click="goMedia"><img src="@/assets/dance/btn07.png">Media Registration</div>
43 </el-col> 43 </el-col>
44 <!-- <el-col :sm="12" :lg="4" :xs="12">--> 44 <!-- <el-col :sm="12" :lg="4" :xs="12">-->
45 <!-- <div class="item" @click="goAround"><img src="@/assets/dance/btn06.png">Around Activity</div>--> 45 <!-- <div class="item" @click="goAround"><img src="@/assets/dance/btn06.png">Around Activity</div>-->
46 <!-- </el-col>--> 46 <!-- </el-col>-->
47 47
48 <!-- <el-col :sm="12" :lg="4" :xs="12">--> 48 <!-- <el-col :sm="12" :lg="4" :xs="12">-->
49 <!-- <div class="item" @click="liveClick"><img src="@/assets/dance/btn05.png">live streaming</div>--> 49 <!-- <div class="item" @click="liveClick"><img src="@/assets/dance/btn05.png">live streaming</div>-->
50 <!-- </el-col>--> 50 <!-- </el-col>-->
51 </el-row> 51 </el-row>
52 </div> 52 </div>
53 <order-remark ref="orderRemarkRef" @submit="goBooking"/> 53 <order-remark ref="orderRemarkRef" @submit="goBooking"/>
54 <affix-invitation ref="dialogInvitationRef"/> 54 <affix-invitation ref="dialogInvitationRef"/>
55 <!-- 媒体注册--> 55 <!-- 媒体注册-->
56 <media-register ref="mediaRegisterRef"/> 56 <media-register ref="mediaRegisterRef"/>
57 </template> 57 </template>
58 58
...@@ -99,16 +99,16 @@ watch(matchId, (val) => { ...@@ -99,16 +99,16 @@ watch(matchId, (val) => {
99 form.value = null 99 form.value = null
100 }) 100 })
101 101
102 match.getInfoByCptId({ cptId:props.matchId }).then((res) => { 102 match.getInfoByCptId({cptId: props.matchId}).then((res) => {
103 liveData.value = res.data || {} 103 liveData.value = res.data || {}
104 }) 104 })
105 } 105 }
106 }) 106 })
107 107
108 const liveClick = () => { 108 const liveClick = () => {
109 if (liveData.value.videoStatus=="1") { 109 if (liveData.value.videoStatus == "1") {
110 110
111 if(language.value==0){ 111 if (language.value == 0) {
112 112
113 window.open(liveData.value.videoUrlCn) 113 window.open(liveData.value.videoUrlCn)
114 } else { 114 } else {
...@@ -124,7 +124,7 @@ const goAbout = () => { ...@@ -124,7 +124,7 @@ const goAbout = () => {
124 } 124 }
125 const goAround = () => { 125 const goAround = () => {
126 //周边活动 126 //周边活动
127 router.push({path: `/about/wuDao`,query: {activeIndex: '2'}}) 127 router.push({path: `/about/wuDao`, query: {activeIndex: '2'}})
128 } 128 }
129 129
130 onMounted(() => { 130 onMounted(() => {
...@@ -135,6 +135,7 @@ function building() { ...@@ -135,6 +135,7 @@ function building() {
135 ElMessage.warning(language.value == 0 ? '感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。' : 'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.') 135 ElMessage.warning(language.value == 0 ? '感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。' : 'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.')
136 return 136 return
137 } 137 }
138
138 function applyInvitation() { 139 function applyInvitation() {
139 var obj = { 140 var obj = {
140 title: language.value == 0 ? '邀请函申请' : 'Visa Invitation Letter ', 141 title: language.value == 0 ? '邀请函申请' : 'Visa Invitation Letter ',
...@@ -142,13 +143,18 @@ function applyInvitation() { ...@@ -142,13 +143,18 @@ function applyInvitation() {
142 } 143 }
143 proxy.$refs['dialogInvitationRef'].open(obj) 144 proxy.$refs['dialogInvitationRef'].open(obj)
144 } 145 }
146
145 const user = useUserStore().user 147 const user = useUserStore().user
148
146 function goMedia() { 149 function goMedia() {
150 proxy.$modal.msgWarning(language.value == 0 ? '暂未开放' :'Not yet open')
151 return;
152
147 //如果没登录 153 //如果没登录
148 if (!user) { 154 if (!user) {
149 ElMessage({ 155 ElMessage({
150 type: 'warning', 156 type: 'warning',
151 message: language.value == 0 ? '请先登录' : 'Please log in first', 157 message: language.value == 0 ? '请先登录' : 'Please login first',
152 }) 158 })
153 return 159 return
154 } 160 }
...@@ -162,16 +168,16 @@ function popRemark(type) { ...@@ -162,16 +168,16 @@ function popRemark(type) {
162 return 168 return
163 } 169 }
164 170
165 if(type == '0'){ 171 if (type == '0') {
166 // 签证 172 // 签证
167 if(language.value === 0){ 173 if (language.value === 0) {
168 ElMessage.warning('请切换英文页面办理') 174 ElMessage.warning('请切换英文页面办理')
169 return 175 return
170 } else { 176 } else {
171 if (!user) { 177 if (!user) {
172 ElMessage({ 178 ElMessage({
173 type: 'warning', 179 type: 'warning',
174 message: language.value == 0 ? '请先登录' : 'Please log in first', 180 message: language.value == 0 ? '请先登录' : 'Please login first',
175 }) 181 })
176 return 182 return
177 } 183 }
...@@ -200,7 +206,7 @@ function popRemark(type) { ...@@ -200,7 +206,7 @@ function popRemark(type) {
200 proxy.$refs['orderRemarkRef'].open(params) 206 proxy.$refs['orderRemarkRef'].open(params)
201 } 207 }
202 208
203 function goBooking(n) { 209 function goBooking(n, f) {
204 switch (n) { 210 switch (n) {
205 case 10: 211 case 10:
206 // 票务 212 // 票务
...@@ -213,7 +219,7 @@ function goBooking(n) { ...@@ -213,7 +219,7 @@ function goBooking(n) {
213 break; 219 break;
214 case 1: 220 case 1:
215 //酒店 221 //酒店
216 router.push({path: `/booking/hotel/${props.matchId}`}) 222 router.push({path: `/booking/hotel/${props.matchId}`, query: {flag: f}})
217 break; 223 break;
218 case 2: 224 case 2:
219 //车辆 225 //车辆
...@@ -236,29 +242,43 @@ function goBooking(n) { ...@@ -236,29 +242,43 @@ function goBooking(n) {
236 </script> 242 </script>
237 243
238 <style scoped lang="scss"> 244 <style scoped lang="scss">
239 .itemBox,.itemBox_en { 245 .itemBox, .itemBox_en {
240 padding: 20px;background: #fff;box-shadow: 0 0 46px 0 rgba(1,16,64,0.08); 246 padding: 20px;
247 background: #fff;
248 box-shadow: 0 0 46px 0 rgba(1, 16, 64, 0.08);
241 border-radius: 20px; 249 border-radius: 20px;
242 } 250 }
243 251
244 :deep(.el-col){ max-width: 20%;flex: 0 0 20%;} 252 :deep(.el-col) {
253 max-width: 20%;
254 flex: 0 0 20%;
255 }
256
245 .item { 257 .item {
246 //box-shadow: 0px 0px 21px 0px rgba(41, 23, 101, 0.14); 258 //box-shadow: 0px 0px 21px 0px rgba(41, 23, 101, 0.14);
247 padding: 10px 0; 259 padding: 10px 0;
248 display: flex; 260 display: flex;
249 align-items: center;justify-content: center; 261 align-items: center;
262 justify-content: center;
250 font-size: 20px; 263 font-size: 20px;
251 background: url("@/assets/dance/btn_bg.png") no-repeat left #FFFFFF; 264 background: url("@/assets/dance/btn_bg.png") no-repeat left #FFFFFF;
252 background-size: 100% 100%; 265 background-size: 100% 100%;
253 border-radius: 15px;gap: 10px; 266 border-radius: 15px;
267 gap: 10px;
254 268
255 img {object-fit: contain; 269 img {
256 width: 75px;height: 75px; 270 object-fit: contain;
271 width: 75px;
272 height: 75px;
257 } 273 }
258 } 274 }
275
259 .itemBox_en .item { 276 .itemBox_en .item {
260 flex-direction: column;text-align: center;text-transform: uppercase; 277 flex-direction: column;
261 height: 100%; 278 text-align: center;
279 text-transform: uppercase;
280 height: 100%;
281
262 img { 282 img {
263 position: relative; 283 position: relative;
264 transition: all 0.2s; 284 transition: all 0.2s;
...@@ -278,11 +298,23 @@ height: 100%; ...@@ -278,11 +298,23 @@ height: 100%;
278 } 298 }
279 299
280 @media screen and (max-width: 768px) { 300 @media screen and (max-width: 768px) {
281 .itemBox,.itemBox_en{padding: 0 20px 0} 301 .itemBox, .itemBox_en {
282 .item{font-size: 16px;height: auto !important; 302 padding: 0 20px 0
283 padding: 15px 0;margin: 10px 0; 303 }
284 img{width: 50px;height: 50px} 304 .item {
305 font-size: 16px;
306 height: auto !important;
307 padding: 15px 0;
308 margin: 10px 0;
309
310 img {
311 width: 50px;
312 height: 50px
313 }
314 }
315 :deep(.el-col) {
316 max-width: 50%;
317 flex: 0 0 50%;
285 } 318 }
286 :deep(.el-col){ max-width: 50%;flex: 0 0 50%;}
287 } 319 }
288 </style> 320 </style>
......
1 <template> 1 <template>
2 <el-dialog :title="title" v-model="show" width="400px" @close="close"> 2 <el-dialog :title="title" v-model="show" @close="close">
3 <div> 3 <div>
4 <h2 class="text-warning text-center" v-if="cptName">{{cptName}}</h2> 4 <h2 class="text-warning text-center" v-if="cptName">{{cptName}}</h2>
5 5
...@@ -9,6 +9,15 @@ ...@@ -9,6 +9,15 @@
9 <div v-if="type==4" class="plr20" v-html="form.reserveDesMeal"></div> 9 <div v-if="type==4" class="plr20" v-html="form.reserveDesMeal"></div>
10 <div v-if="type==5" class="plr20" v-html="form.reserveDesPhoto"></div> 10 <div v-if="type==5" class="plr20" v-html="form.reserveDesPhoto"></div>
11 <div v-if="type==10" class="plr20" v-html="form.reserveDesTitck"></div> 11 <div v-if="type==10" class="plr20" v-html="form.reserveDesTitck"></div>
12
13
14 <el-row v-if="type==1" justify="center">
15 <el-radio-group v-model="hotelType">
16 <el-radio label="0">{{language==0?'运动队酒店':'Team Hotel Reservation'}}</el-radio>
17 <el-radio label="1">{{language==0?'执委大会酒店':'Conference Hotel Reservation'}}</el-radio>
18 </el-radio-group>
19 </el-row>
20
12 </div> 21 </div>
13 <template #footer> 22 <template #footer>
14 <div class="dialog-footer text-center"> 23 <div class="dialog-footer text-center">
...@@ -31,6 +40,8 @@ const title = ref('') ...@@ -31,6 +40,8 @@ const title = ref('')
31 const cptName = ref('') 40 const cptName = ref('')
32 const show = ref(false) 41 const show = ref(false)
33 const form = ref({}) 42 const form = ref({})
43 const hotelType= ref('1')
44
34 let matchId = '' 45 let matchId = ''
35 let type = '' 46 let type = ''
36 const open = (params) => { 47 const open = (params) => {
...@@ -64,7 +75,7 @@ function ok() { ...@@ -64,7 +75,7 @@ function ok() {
64 // if(!user){ 75 // if(!user){
65 // useUserStore().setVisitor() 76 // useUserStore().setVisitor()
66 // } else { 77 // } else {
67 emit('submit', type) 78 emit('submit', type, hotelType.value)
68 // } 79 // }
69 } 80 }
70 </script> 81 </script>
......
1 <template> 1 <template>
2 <el-dialog 2 <el-dialog
3 v-model="show" :title="title" width="600px" append-to-body close-icon="CircleClose" center 3 v-model="show" :title="title" append-to-body close-icon="CircleClose" center
4 :close-on-click-modal="false" class="pcloginpop" 4 :close-on-click-modal="false" class="pcloginpop"
5 destroy-on-close 5 destroy-on-close
6 > 6 >
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
24 <el-form :model="form" :rules="rules" ref="iformRef" label-position="top" v-else> 24 <el-form :model="form" :rules="rules" ref="iformRef" label-position="top" v-else>
25 <el-form-item :label="language==0?'申请人类别':'Applicant Type'" required prop="applicatType"> 25 <el-form-item :label="language==0?'申请人类别':'Applicant Type'" required prop="applicatType">
26 <el-select v-model="form.applicatType"> 26 <el-select v-model="form.applicatType">
27 <el-option label="MNA" value="1"/> 27 <el-option label="MNA/Team" value="1"/>
28 <el-option label="Technical Officials" value="2"/> 28 <el-option label="Technical Officials" value="2"/>
29 <el-option label="WT Staff" value="3"/> 29 <el-option label="WT Staff" value="3"/>
30 <el-option label="Supplier" value="4"/> 30 <el-option label="Supplier" value="4"/>
...@@ -38,6 +38,11 @@ ...@@ -38,6 +38,11 @@
38 <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU Invitation'" value="2"/> 38 <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU Invitation'" value="2"/>
39 </el-select> 39 </el-select>
40 </el-form-item> 40 </el-form-item>
41 <el-form-item v-if="form.invitationType=='2'" label="Proof of Employment" required prop="invitationFile">
42 <el-text type="danger">Proof of Employment(Note: This document must be issued by the invitee’s association and must bear an official stamp or signature.)</el-text>
43 <br/>
44 <file-upload v-model="form.invitationFile" :is-show-tip="false" :limit="1"></file-upload>
45 </el-form-item>
41 <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" required prop="chinese"> 46 <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" required prop="chinese">
42 <el-radio-group v-model="form.chinese"> 47 <el-radio-group v-model="form.chinese">
43 <el-radio :value="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio> 48 <el-radio :value="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio>
...@@ -46,18 +51,19 @@ ...@@ -46,18 +51,19 @@
46 </el-form-item> 51 </el-form-item>
47 52
48 <!-- 一般信息--> 53 <!-- 一般信息-->
49 <el-form-item :label="language==0?'国家/地区协会名':'MNA Name'" :required="form.applicatType!=2" 54 <el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" :required="form.applicatType==1"
50 prop="associationCode"> 55 prop="associationCode">
51 <el-select v-model="form.associationCode" filterable> 56 <el-select v-model="form.associationCode" filterable>
52 <el-option v-for="item in mnaList" :key="item.code" :label="language==0?item.nameCn:item.nameEn" 57 <el-option v-for="item in mnaList" :key="item.code" :label="language==0?item.nameCn:item.nameEn"
53 :value="item.code"/> 58 :value="item.code"/>
54 </el-select> 59 </el-select>
55 </el-form-item> 60 </el-form-item>
56 <el-form-item :label="language==0?'国家/地区协会地址':'MNA Address'" :required="form.applicatType!=2" 61 <el-form-item :label="language==0?'国家/地区协会地址':'MNA/Team Address'" :required="form.applicatType==1"
57 prop="associationAddress"> 62 prop="associationAddress">
58 <el-input v-model="form.associationAddress"/> 63 <el-input v-model="form.associationAddress"/>
59 </el-form-item> 64 </el-form-item>
60 <el-form-item :label="language==0?'邮箱':'Contact Email'" required prop="email"> 65 <el-form-item :label="language==0?'邮箱':'Contact Email'" required prop="email">
66 <el-text type="danger">Note: Notifications from the organizing committee will be sent to this email address.</el-text>
61 <el-input v-model="form.email" type="email"> 67 <el-input v-model="form.email" type="email">
62 <template #append> 68 <template #append>
63 <el-button @click="sendEmail" v-loading="codeloading"> 69 <el-button @click="sendEmail" v-loading="codeloading">
...@@ -95,7 +101,8 @@ ...@@ -95,7 +101,8 @@
95 <!--上传护照,多张--> 101 <!--上传护照,多张-->
96 <div class="cptVisaInfoBosTable"> 102 <div class="cptVisaInfoBosTable">
97 <el-form-item :label="language==0?'有效证件':'Passport Copy'" required> 103 <el-form-item :label="language==0?'有效证件':'Passport Copy'" required>
98 <ImageUpload v-model="form.passportCopy" :is-show-tip="false" :limit="100" 104 <el-text type="danger">Please ensure that the uploaded passport image is clear, complete, and free from glare or reflections.</el-text>
105 <ImageUpload v-model="form.passportCopy" :is-show-tip="false" :limit="20"
99 :action="'/league/visa/getPersonInfoFromCert/3'" 106 :action="'/league/visa/getPersonInfoFromCert/3'"
100 paramName="pic" list-type="text" :show-file-list="false" 107 paramName="pic" list-type="text" :show-file-list="false"
101 :button-text="language==0?'上传':'Upload'" @response="getPassportInfo" 108 :button-text="language==0?'上传':'Upload'" @response="getPassportInfo"
...@@ -230,7 +237,6 @@ ...@@ -230,7 +237,6 @@
230 </el-table-column> 237 </el-table-column>
231 </el-table> 238 </el-table>
232 </div> 239 </div>
233
234 </div> 240 </div>
235 <!-- 补充材料--> 241 <!-- 补充材料-->
236 <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files"> 242 <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files">
...@@ -266,7 +272,8 @@ const {proxy} = getCurrentInstance() ...@@ -266,7 +272,8 @@ const {proxy} = getCurrentInstance()
266 const language = useStorage('language', 0) 272 const language = useStorage('language', 0)
267 const form = ref({ 273 const form = ref({
268 gender: '0', 274 gender: '0',
269 cptVisaInfoBos: [] 275 cptVisaInfoBos: [],
276 email: user?.email,
270 }) 277 })
271 const show = ref(false) 278 const show = ref(false)
272 const codeloading = ref(false) 279 const codeloading = ref(false)
...@@ -294,7 +301,7 @@ const open = (params) => { ...@@ -294,7 +301,7 @@ const open = (params) => {
294 form.value.cptId = params.cptId 301 form.value.cptId = params.cptId
295 getCountryList() 302 getCountryList()
296 getMNAList() 303 getMNAList()
297 getVisa() 304 // getVisa()
298 } 305 }
299 defineExpose({open}) 306 defineExpose({open})
300 307
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!