fcfc577a by zhangmeng

Merge remote-tracking branch 'origin/世锦赛' into 世锦赛

# Conflicts:
#	src/viewsPc/components/homeQuick.vue
#	src/viewsPc/index.vue
#	src/viewsPc/index_en.vue
2 parents f23375cd 11b19150
...@@ -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",
......
...@@ -790,6 +790,30 @@ export function getVisaInfo(query) { ...@@ -790,6 +790,30 @@ export function getVisaInfo(query) {
790 }) 790 })
791 } 791 }
792 792
793 export function downInvite(params) {
794 return request({
795 url: '/league/visa/downInvite',
796 method: 'get',
797 params
798 })
799 }
800
801 export function getUplaodFile(params) {
802 return request({
803 url: '/league/visa/getUplaodFile',
804 method: 'get',
805 params
806 })
807 }
808
809 export function listVisaInfo(query) {
810 return request({
811 url: '/league/visaInfo/list',
812 method: 'get',
813 params: query
814 })
815 }
816
793 // 酒店预约查询 817 // 酒店预约查询
794 export function hotelList(params) { 818 export function hotelList(params) {
795 return request({ 819 return request({
......
1 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24px" height="23px"><path fill-rule="evenodd" fill="rgb(146, 154, 160)" d="M1.242,17.158 C2.102,17.158 2.498,17.424 2.998,17.759 C3.558,18.134 4.257,18.601 5.551,18.601 C6.846,18.601 7.543,18.134 8.103,17.759 C8.603,17.424 8.998,17.158 9.857,17.158 C10.718,17.158 11.113,17.424 11.615,17.759 C12.175,18.134 12.873,18.601 14.168,18.601 C15.464,18.601 16.162,18.134 16.722,17.759 C17.224,17.424 17.620,17.158 18.481,17.158 C19.342,17.158 19.738,17.424 20.240,17.759 C20.801,18.134 21.498,18.601 22.794,18.601 C23.191,18.601 23.513,18.278 23.513,17.880 C23.513,17.481 23.191,17.158 22.794,17.158 C21.934,17.158 21.537,16.893 21.036,16.558 C20.474,16.183 19.777,15.715 18.481,15.715 C17.185,15.715 16.487,16.183 15.926,16.558 C15.425,16.893 15.028,17.158 14.168,17.158 C13.307,17.158 12.912,16.893 12.411,16.558 C11.850,16.183 11.152,15.715 9.857,15.715 C8.563,15.715 7.866,16.183 7.306,16.558 C6.806,16.893 6.411,17.158 5.551,17.158 C4.692,17.158 4.296,16.893 3.796,16.558 C3.235,16.183 2.537,15.715 1.242,15.715 C0.846,15.715 0.524,16.038 0.524,16.437 C0.524,16.835 0.846,17.158 1.242,17.158 L1.242,17.158 ZM22.794,21.038 C21.934,21.038 21.537,20.773 21.036,20.438 C20.474,20.063 19.777,19.595 18.481,19.595 C17.185,19.595 16.487,20.063 15.926,20.438 C15.425,20.773 15.028,21.038 14.168,21.038 C13.307,21.038 12.912,20.773 12.411,20.438 C11.850,20.063 11.152,19.595 9.857,19.595 C8.563,19.595 7.866,20.063 7.306,20.438 C6.806,20.773 6.411,21.038 5.551,21.038 C4.692,21.038 4.296,20.773 3.796,20.438 C3.235,20.063 2.537,19.595 1.242,19.595 C0.846,19.595 0.524,19.918 0.524,20.317 C0.524,20.715 0.846,21.038 1.242,21.038 C2.102,21.038 2.498,21.304 2.998,21.638 C3.558,22.014 4.257,22.481 5.551,22.481 C6.846,22.481 7.543,22.014 8.103,21.638 C8.603,21.304 8.998,21.038 9.857,21.038 C10.718,21.038 11.113,21.304 11.615,21.638 C12.175,22.014 12.873,22.481 14.168,22.481 C15.464,22.481 16.162,22.014 16.722,21.638 C17.224,21.304 17.620,21.038 18.481,21.038 C19.342,21.038 19.738,21.304 20.240,21.638 C20.801,22.014 21.498,22.481 22.794,22.481 C23.191,22.481 23.513,22.158 23.513,21.760 C23.513,21.361 23.191,21.038 22.794,21.038 L22.794,21.038 ZM3.527,14.664 C3.924,14.664 3.1000,14.399 3.1000,14.000 L3.1000,9.1000 L13.1000,9.1000 L13.1000,14.000 C13.1000,14.399 14.004,14.664 14.401,14.664 C14.797,14.664 15.000,14.399 15.000,14.000 L15.000,5.000 C15.000,3.286 16.508,2.338 18.215,2.338 C19.922,2.338 21.312,3.734 21.312,5.449 C21.312,5.848 21.633,6.171 22.030,6.171 C22.427,6.171 22.748,5.848 22.748,5.449 C22.748,2.939 20.714,0.896 18.215,0.896 C15.717,0.896 13.1000,2.489 13.1000,5.000 L13.1000,9.000 L3.1000,9.000 L3.1000,5.000 C3.1000,3.286 5.635,2.338 7.342,2.338 C9.049,2.338 10.439,3.734 10.439,5.449 C10.439,5.848 10.761,6.171 11.158,6.171 C11.554,6.171 11.876,5.848 11.876,5.449 C11.873,2.936 9.845,0.899 7.342,0.896 C4.839,0.899 3.002,2.487 3.000,5.000 L3.000,14.000 C3.000,14.399 3.130,14.664 3.527,14.664 L3.527,14.664 Z"/></svg>
...\ No newline at end of file ...\ No newline at end of file
1 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="26px" height="17px"><path fill-rule="evenodd" fill="rgb(146, 154, 160)" d="M23.1000,13.1000 L23.1000,15.000 C23.1000,16.263 22.595,17.002 21.297,17.002 C19.999,17.002 18.1000,16.263 18.1000,15.000 L18.1000,10.1000 L6.1000,10.1000 L6.1000,15.000 C6.1000,16.263 6.004,17.002 4.706,17.002 C3.408,17.002 2.356,15.978 2.356,14.715 L2.356,13.859 C1.979,13.989 1.483,14.002 1.000,13.1000 C0.571,13.998 0.006,13.947 0.006,13.000 L0.006,4.997 C0.006,4.050 0.795,3.282 1.768,3.282 C2.005,3.282 2.197,3.329 2.356,3.412 L2.356,3.282 C2.356,2.676 2.604,2.094 3.044,1.666 C3.485,1.237 4.083,0.996 4.706,0.996 C4.706,0.996 5.465,0.787 6.368,1.666 C6.809,2.094 6.1000,2.394 6.1000,3.000 L6.1000,6.1000 L18.1000,6.1000 L18.1000,3.1000 C18.1000,1.780 19.927,0.996 21.297,0.996 C22.472,0.926 23.952,1.658 23.1000,3.000 L23.1000,3.320 C24.075,3.301 24.152,3.286 24.235,3.282 C25.208,3.282 25.997,4.050 25.997,4.997 L25.997,13.000 C25.997,13.947 24.973,13.1000 23.1000,13.1000 ZM1.768,4.426 C1.768,4.426 1.000,4.382 1.000,5.000 L1.000,12.1000 C0.1000,13.571 1.988,13.387 1.1000,12.1000 L1.1000,5.000 C1.1000,4.684 2.093,4.426 1.768,4.426 ZM6.000,10.1000 L6.000,6.1000 L6.000,3.1000 C6.048,1.941 4.1000,2.000 4.1000,2.000 C4.098,1.853 2.905,2.276 3.000,3.1000 L3.000,5.000 L3.000,12.1000 L3.000,13.1000 C3.148,15.694 4.351,15.1000 4.1000,15.1000 C5.649,15.1000 6.000,14.631 6.000,13.1000 L6.000,10.1000 ZM6.1000,8.000 L6.1000,9.1000 L18.1000,9.1000 L18.1000,8.000 L6.1000,8.000 ZM21.297,2.139 C20.810,2.139 19.1000,2.412 19.1000,3.1000 L19.1000,6.1000 L19.1000,10.1000 L19.1000,15.000 C19.1000,15.631 20.648,15.858 21.297,15.858 C21.946,15.858 23.000,15.631 23.000,15.000 L23.000,12.1000 L23.000,5.000 L23.000,3.1000 C23.162,2.860 22.369,1.955 21.297,2.139 ZM25.000,5.000 C25.000,4.848 24.760,4.700 24.650,4.593 C24.540,4.486 24.391,4.426 24.235,4.426 C24.078,4.426 24.020,4.488 23.1000,4.586 L23.1000,5.000 L23.1000,12.1000 C23.1000,13.176 24.138,13.484 25.000,12.1000 L25.000,5.000 Z"/></svg>
...\ No newline at end of file ...\ No newline at end of file

36.2 KB | W: | H:

29.6 KB | W: | H:

src/assets/logo/banner-text.png
src/assets/logo/banner-text.png
src/assets/logo/banner-text.png
src/assets/logo/banner-text.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 <el-col :lg="10" :md="10" :xs="10"> 13 <el-col :lg="10" :md="10" :xs="10">
14 <ul style="text-align: right"> 14 <ul style="text-align: right">
15 <li>客服及报障电话:15606190026</li> 15 <li>客服及报障电话:15606190026</li>
16 <li>客服及报障邮箱: info@wdsfwuxicenter.com</li> 16 <li>客服及报障邮箱: office@2025wtcwuxi.com</li>
17 </ul> 17 </ul>
18 </el-col> 18 </el-col>
19 <el-col :lg="4" :md="4" :xs="4"> 19 <el-col :lg="4" :md="4" :xs="4">
...@@ -32,13 +32,15 @@ ...@@ -32,13 +32,15 @@
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">
39 <ul style="text-align: right"> 41 <ul style="text-align: right">
40 <li>Telephone:086-15606190026</li> 42 <li>Telephone:086-15606190026</li>
41 <li>E-mail:info@wdsfwuxicenter.com</li> 43 <li>E-mail:office@2025wtcwuxi.com</li>
42 </ul> 44 </ul>
43 </el-col> 45 </el-col>
44 <el-col :span="4"> 46 <el-col :span="4">
...@@ -54,55 +56,61 @@ ...@@ -54,55 +56,61 @@
54 </el-row> 56 </el-row>
55 </div> 57 </div>
56 </div> 58 </div>
57 <div class="fixed-right forPc"> 59 <!-- <div class="fixed-right forPc">-->
58 <div class="mlb" v-if="language===0"> 60 <!-- <div class="mlb" v-if="language===0">-->
59 <div @click="goAround" class="mb10 pb5"> 61 <!-- <div @click="goAround" class="mb10 pb5">-->
60 <a>
61 <img class="kf" src="@/assets/logo/btn02.png"/>
62 <div class="text-center mt10">周边活动</div>
63 </a>
64 </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="客服" >
66 <img class="kf" src="@/assets/logo/btn01.png"/>
67 <div class="text-center mt10">在线客服</div>
68 </div>
69 <!-- <div @click="goHelpZH">-->
70 <!-- <a>--> 62 <!-- <a>-->
71 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>--> 63 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>-->
72 <!-- <div class="text-center mt10">周边活动</div>--> 64 <!-- <div class="text-center mt10">周边活动</div>-->
73 <!-- </a>--> 65 <!-- </a>-->
74 <!-- </div>--> 66 <!-- </div>-->
75 </div> 67 <!-- <div-->
76 <div class="mlb" v-else> 68 <!-- style="display: none" title="客服"-->
77 <div @click="goAround" class="mb10 pb5"> 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')"-->
78 <a> 70 <!-- >-->
79 <img class="kf" src="@/assets/logo/btn02.png"/> 71 <!-- <img class="kf" src="@/assets/logo/btn01.png"/>-->
80 <div class="text-center mt10">ACTIVITIES</div> 72 <!-- <div class="text-center mt10">在线客服</div>-->
81 </a> 73 <!-- </div>-->
82 </div> 74 <!-- &lt;!&ndash; <div @click="goHelpZH">&ndash;&gt;-->
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"> 75 <!-- &lt;!&ndash; <a>&ndash;&gt;-->
84 <img class="kf" src="@/assets/logo/btn01.png"/> 76 <!-- &lt;!&ndash; <img class="kf" src="@/assets/logo/btn02.png"/>&ndash;&gt;-->
85 <div class="text-center ">LIVE CHAT</div> 77 <!-- &lt;!&ndash; <div class="text-center mt10">周边活动</div>&ndash;&gt;-->
86 </div> 78 <!-- &lt;!&ndash; </a>&ndash;&gt;-->
87 <!-- <div @click="goHelp">--> 79 <!-- &lt;!&ndash; </div>&ndash;&gt;-->
80 <!-- </div>-->
81 <!-- <div class="mlb" v-else>-->
82 <!-- <div @click="goAround" class="mb10 pb5">-->
83 <!-- <a>-->
88 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>--> 84 <!-- <img class="kf" src="@/assets/logo/btn02.png"/>-->
89 <!-- <div class="text-center uppercase">Video Guide</div>--> 85 <!-- <div class="text-center mt10">ACTIVITIES</div>-->
86 <!-- </a>-->
87 <!-- </div>-->
88 <!--&lt;!&ndash; <div&ndash;&gt;-->
89 <!--&lt;!&ndash; 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')"&ndash;&gt;-->
90 <!--&lt;!&ndash; title="Live Chat">&ndash;&gt;-->
91 <!--&lt;!&ndash; <img class="kf" src="@/assets/logo/btn01.png"/>&ndash;&gt;-->
92 <!--&lt;!&ndash; <div class="text-center ">LIVE CHAT</div>&ndash;&gt;-->
93 <!--&lt;!&ndash; </div>&ndash;&gt;-->
94 <!-- &lt;!&ndash; <div @click="goHelp">&ndash;&gt;-->
95 <!-- &lt;!&ndash; <img class="kf" src="@/assets/logo/btn02.png"/>&ndash;&gt;-->
96 <!-- &lt;!&ndash; <div class="text-center uppercase">Video Guide</div>&ndash;&gt;-->
97 <!-- &lt;!&ndash; </div>&ndash;&gt;-->
98 <!-- </div>-->
90 <!-- </div>--> 99 <!-- </div>-->
91 </div>
92 </div>
93 </template> 100 </template>
94 101
95 <script setup> 102 <script setup>
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 }
136 } 167 }
168 }
169 }
170
171 .copyright {
172 font-size: 14px;
173 opacity: 0.88;
174 color: #4C5359;
137 } 175 }
138 .copyright{font-size: 14px;opacity: 0.88;color: #4C5359;} 176
139 .footAll{background: #E0E3E5;;padding: 36px 0 5px; 177 .footAll {
140 p{font-size: 14px;opacity: 0.88;color: #4C5359;} 178 background: #E0E3E5;;
141 ul{list-style: none; 179 padding: 36px 0 5px;
142 li{line-height: 30px;font-size: 14px;opacity: 0.88;color: #4C5359; 180
143 a{margin-left: 15px; 181 p {
144 &:hover{text-decoration: underline;} 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;
231 }
232 }
233
234 img {
235 height: 60px;
163 } 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;
164 } 246 }
165 img{height: 60px;}
166 p{font-size: 10px;line-height: 1.4;}
167 .copyright{font-size: 10px;line-height: 1.4;}
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>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
13 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item> 13 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
14 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item> 14 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
15 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item> 15 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
16 <el-menu-item index="/match/list">{{ language==0?'赛事服务':'REGISTRATION' }}</el-menu-item> 16 <!-- <el-menu-item index="/match/list">{{ language==0?'赛事服务':'REGISTRATION' }}</el-menu-item>-->
17 <el-menu-item index="/saiC">{{ language==0?'竞赛日程':'COMPETITIONS' }}</el-menu-item> 17 <el-menu-item index="/saiC">{{ language==0?'竞赛日程':'COMPETITIONS' }}</el-menu-item>
18 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item> 18 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
19 <!-- <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>--> 19 <!-- <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>-->
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
32 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item> 32 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
33 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item> 33 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
34 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item> 34 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
35 <el-menu-item index="/match/list">{{ language==0?'赛事服务':'COMPETITION INFO' }}</el-menu-item> 35 <!-- <el-menu-item index="/match/list">{{ language==0?'赛事服务':'COMPETITION INFO' }}</el-menu-item>-->
36 <el-menu-item index="/saiC">{{ language==0?'竞赛日程':'COMPETITION SCHEDULE' }}</el-menu-item> 36 <el-menu-item index="/saiC">{{ language==0?'竞赛日程':'COMPETITION SCHEDULE' }}</el-menu-item>
37 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item> 37 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
38 <!-- <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>--> 38 <!-- <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>-->
......
...@@ -567,6 +567,12 @@ export const constantRoutes = [ ...@@ -567,6 +567,12 @@ export const constantRoutes = [
567 meta: {title: 'My reservation'} 567 meta: {title: 'My reservation'}
568 }, 568 },
569 { 569 {
570 path: 'myVisa',
571 component: () => import('@/viewsPc/center/myVisa'),
572 name: 'myVisa',
573 meta: {title: 'My visa'}
574 },
575 {
570 path: 'mySms', 576 path: 'mySms',
571 component: () => import('@/viewsPc/center/mySms'), 577 component: () => import('@/viewsPc/center/mySms'),
572 name: 'mySms', 578 name: 'mySms',
......
...@@ -76,7 +76,7 @@ const contact = ref([ ...@@ -76,7 +76,7 @@ const contact = ref([
76 {name:'电话',ename:'Phone',value:'武先生:15606190026',evalue:'Mr.WU:15606190026'}, 76 {name:'电话',ename:'Phone',value:'武先生:15606190026',evalue:'Mr.WU:15606190026'},
77 {name:'地址',ename:'Address',value:'江苏省 无锡市太湖新城和风路与清舒交叉口东北100米', 77 {name:'地址',ename:'Address',value:'江苏省 无锡市太湖新城和风路与清舒交叉口东北100米',
78 evalue:'No.88 Qingshu Road,Economic Development District, Wuxi City,Jiangsu Province,China'}, 78 evalue:'No.88 Qingshu Road,Economic Development District, Wuxi City,Jiangsu Province,China'},
79 {name:'邮箱',ename:'Email',value:'info@wdsfwuxicenter.com',evalue:'info@wdsfwuxicenter.com'}, 79 {name:'邮箱',ename:'Email',value:'office@2025wtcwuxi.com',evalue:'office@2025wtcwuxi.com'},
80 ]) 80 ])
81 81
82 onMounted(()=>{ 82 onMounted(()=>{
......
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,269 @@ ...@@ -25,146 +26,269 @@
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' : '继续预订',
114 dangerouslyUseHTMLString: true,
101 type: 'warning', 115 type: 'warning',
102 }).then((res) => { 116 }).then((res) => {
103 router.push({ 117 router.push({
104 name:'hotelDetail', 118 name: 'hotelDetail',
105 params:{ 119 params: {
106 hotelId:item.hotelId, 120 hotelId: item.hotelId,
107 }, 121 },
108 query:{ 122 query: {
109 id:item.id 123 id: item.id
110 } 124 }
111 }) 125 })
112 }) 126 })
113 } else { 127 } else {
114 router.push({ 128 router.push({
115 name:'hotelDetail', 129 name: 'hotelDetail',
116 params:{ 130 params: {
117 hotelId:item.hotelId, 131 hotelId: item.hotelId,
118 }, 132 },
119 query:{ 133 query: {
120 id:item.id 134 id: item.id
121 } 135 }
122 }) 136 })
123 } 137 }
124 } 138 }
125 </script> 139 </script>
126 140
127 <style scoped lang="scss"> 141 <style scoped lang="scss">
128 .hotel{ 142 .hotel {
129 h3{margin: 0 0 10px;} 143 h3 {
130 img.w100{object-fit: cover;aspect-ratio: 16/9} 144 margin: 0 0 10px;
131 .addr{font-size: 14px;color: #929AA0;font-weight: 400;margin: 0 0 10px;} 145 }
132 .price{margin: 0 0 8px; 146
133 color: #FF8124;font-size: 18px; 147 img.w100 {
134 span{font-size: 36px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;} 148 object-fit: cover;
135 i{font-style: normal;color: #929AA0;} 149 aspect-ratio: 16/9
136 } 150 }
137 .blackBtn{background: #000;border: #000;} 151
138 } 152 .addr {
139 .banner{height: 140px;background-size: cover;text-align: center; 153 font-size: 14px;
140 background: url("@/assets/booking/jd_bg.png") center;display: flex;align-items: center; 154 color: #929AA0;
155 font-weight: 400;
156 margin: 0 0 10px;
157 }
158
159 .price {
160 margin: 0 0 8px;
161 color: #FF8124;
162 font-size: 18px;
163
164 span {
165 font-size: 36px;
166 margin: 0 8px;
167 font-family: 'DINAlternate-Bold';
168 font-weight: 600;
169 }
170
171 i {
172 font-style: normal;
173 color: #929AA0;
174 }
175 }
176
177 .blackBtn {
178 background: #000;
179 border: #000;
180 }
181 }
182
183 .banner {
184 height: 140px;
185 background-size: cover;
186 text-align: center;
187 background: url("@/assets/booking/jd_bg.png") center;
188 display: flex;
189 align-items: center;
141 justify-content: center; 190 justify-content: center;
142 img{display: block;margin:-30px auto 0;width: auto;} 191
192 img {
193 display: block;
194 margin: -30px auto 0;
195 width: auto;
196 }
197 }
198
199 .searchBar {
200 position: relative;
201 top: -30px;
202 background: #FFFFFF;
203 display: flex;
204 padding: 20px;
205 border-radius: 10px;
206 }
207
208 .no-border {
209 border: none;
210 background: #F5F7F9;
211
212 :deep(.el-input__wrapper) {
213 border: none;
214 box-shadow: none;
215 background: #F5F7F9;
143 } 216 }
144 .searchBar{position: relative;top: -30px; 217 }
145 background: #FFFFFF;display: flex;padding: 20px; 218
146 border-radius: 10px;} 219 .imgbox {
147 .no-border{border: none;background: #F5F7F9; 220 width: 100%;
148 :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} 221 height: 100%;
222 position: relative;
223
224 img {
225 width: 100%;
226 height: 100%;
149 } 227 }
150 .imgbox {width: 100%;height: 100%;position: relative; 228
151 img{width: 100%;height: 100%;} 229 .starBox {
152 .starBox{position: absolute;bottom: 0;right: 0;background: rgba(0,0,0,0.4);padding: 10px 15px 3px;} 230 position: absolute;
231 bottom: 0;
232 right: 0;
233 background: rgba(0, 0, 0, 0.4);
234 padding: 10px 15px 3px;
153 } 235 }
154 .po-r-b{} 236 }
155 .starBox{ 237
238 .po-r-b {
239 }
240
241 .starBox {
156 border-radius: 14px 0 0 0; 242 border-radius: 14px 0 0 0;
157 img{display: inline-block;margin-right: 4px;width: 24px;} 243
244 img {
245 display: inline-block;
246 margin-right: 4px;
247 width: 24px;
248 }
249 }
250
251 .tagbox {
252 margin: 10px 0;
253
254 a {
255 color: #AFB5B9;
256 font-size: 12px;
257 }
258
259 span {
260 border-radius: 13px;
261 font-size: 12px;
262 padding: 3px 10px;
263 margin-right: 10px;
264 font-weight: 400;
265 }
266
267 span:nth-child(4n) {
268 background: rgba(50, 177, 108, 0.2);
269 color: rgba(50, 177, 108, 1);
158 } 270 }
159 .tagbox{margin: 10px 0; 271
160 a{color: #AFB5B9;font-size: 12px;} 272 span:nth-child(4n+1) {
161 span{border-radius: 13px;font-size: 12px;padding: 3px 10px;margin-right:10px;font-weight: 400;} 273 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);} 274 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);} 275 }
164 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} 276
165 span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} 277 span:nth-child(4n+2) {
278 background: rgba(0, 160, 233, 0.2);
279 color: rgba(0, 160, 233, 1);
166 } 280 }
167 @media screen and (max-width: 768px) { 281
168 .hotel h3{margin: 20px 0 10px; font-size: 18px;} 282 span:nth-child(4n+3) {
283 background: rgba(247, 64, 166, 0.2);
284 color: rgba(247, 64, 166, 1);
285 }
286 }
287
288 @media screen and (max-width: 768px) {
289 .hotel h3 {
290 margin: 20px 0 10px;
291 font-size: 18px;
169 } 292 }
293 }
170 </style> 294 </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
......
...@@ -47,7 +47,8 @@ import {onMounted} from '@vue/runtime-core' ...@@ -47,7 +47,8 @@ import {onMounted} from '@vue/runtime-core'
47 import useUserStore from '@/store/modules/user' 47 import useUserStore from '@/store/modules/user'
48 import _ from 'lodash' 48 import _ from 'lodash'
49 import {useStorage} from "@vueuse/core/index"; 49 import {useStorage} from "@vueuse/core/index";
50 const language= useStorage('language',0) 50
51 const language = useStorage('language', 0)
51 52
52 const route = useRoute() 53 const route = useRoute()
53 const router = useRouter() 54 const router = useRouter()
...@@ -63,14 +64,14 @@ const menus3 = ref([ ...@@ -63,14 +64,14 @@ const menus3 = ref([
63 // isActive: false 64 // isActive: false
64 // }, 65 // },
65 { 66 {
66 name: language.value==0?'修改密码':'Change Password', 67 name: language.value == 0 ? '修改密码' : 'Change Password',
67 routeName: 'myPassword', 68 routeName: 'myPassword',
68 picUrl1: '/img/nav_27.png', 69 picUrl1: '/img/nav_27.png',
69 picUrl2: '/img/nav_27_dwn.png', 70 picUrl2: '/img/nav_27_dwn.png',
70 isActive: false 71 isActive: false
71 }, 72 },
72 { 73 {
73 name: language.value==0?'我的预订':'My Reservation', 74 name: language.value == 0 ? '我的预订' : 'My Reservation',
74 routeName: 'myReservation', 75 routeName: 'myReservation',
75 picUrl1: '/img/nav_29.png', 76 picUrl1: '/img/nav_29.png',
76 picUrl2: '/img/nav_29_dwn.png', 77 picUrl2: '/img/nav_29_dwn.png',
...@@ -84,7 +85,7 @@ const menus3 = ref([ ...@@ -84,7 +85,7 @@ const menus3 = ref([
84 // isActive: false 85 // isActive: false
85 // }, 86 // },
86 { 87 {
87 name: language.value==0?'发票申请':'Electronic invoice', 88 name: language.value == 0 ? '发票申请' : 'Electronic invoice',
88 routeName: 'myKP', 89 routeName: 'myKP',
89 picUrl1: '/img/fp.svg', 90 picUrl1: '/img/fp.svg',
90 picUrl2: '/img/fp_dwn.svg', 91 picUrl2: '/img/fp_dwn.svg',
...@@ -100,19 +101,26 @@ const menus3En = ref([ ...@@ -100,19 +101,26 @@ const menus3En = ref([
100 // isActive: false 101 // isActive: false
101 // }, 102 // },
102 { 103 {
103 name: language.value==0?'修改密码':'Change Password', 104 name: language.value == 0 ? '修改密码' : 'Change Password',
104 routeName: 'myPassword', 105 routeName: 'myPassword',
105 picUrl1: '/img/nav_27.png', 106 picUrl1: '/img/nav_27.png',
106 picUrl2: '/img/nav_27_dwn.png', 107 picUrl2: '/img/nav_27_dwn.png',
107 isActive: false 108 isActive: false
108 }, 109 },
109 { 110 {
110 name: language.value==0?'我的预订':'My Reservation', 111 name: language.value == 0 ? '我的预订' : 'My Reservation',
111 routeName: 'myReservation', 112 routeName: 'myReservation',
112 picUrl1: '/img/nav_29.png', 113 picUrl1: '/img/nav_29.png',
113 picUrl2: '/img/nav_29_dwn.png', 114 picUrl2: '/img/nav_29_dwn.png',
114 isActive: false 115 isActive: false
115 }, 116 },
117 {
118 name: language.value == 0 ? '签证审核记录' : 'Visa Review record',
119 routeName: 'myVisa',
120 picUrl1: '/img/fp.svg',
121 picUrl2: '/img/fp_dwn.svg',
122 isActive: false
123 },
116 // { 124 // {
117 // name: language.value==0?'票务预订':'Ticket Reservation', 125 // name: language.value==0?'票务预订':'Ticket Reservation',
118 // routeName: 'seat_order', 126 // routeName: 'seat_order',
...@@ -125,18 +133,19 @@ const menus3En = ref([ ...@@ -125,18 +133,19 @@ const menus3En = ref([
125 let currMenu 133 let currMenu
126 onMounted(() => { 134 onMounted(() => {
127 console.log(route.query) 135 console.log(route.query)
128 if(!user.utype){ 136 if (!user.utype) {
129 router.push({name: 'home'}) 137 router.push({name: 'home'})
130 return 138 return
131 } 139 }
132 currMenu = _.find(menus3.value, (m) => { 140
141 currMenu = _.find((language.value == 0? menus3.value: menus3En.value), (m) => {
133 return m.routeName === route.name 142 return m.routeName === route.name
134 }) 143 })
135 currMenu.isActive = true 144 currMenu.isActive = true
136 145
137 }) 146 })
138 147
139 const toInfo = (item,list) => { 148 const toInfo = (item, list) => {
140 _.each(list, (m) => { 149 _.each(list, (m) => {
141 m.isActive = false 150 m.isActive = false
142 }) 151 })
...@@ -159,11 +168,23 @@ const toInfo = (item,list) => { ...@@ -159,11 +168,23 @@ const toInfo = (item,list) => {
159 li { 168 li {
160 margin-bottom: 15px; 169 margin-bottom: 15px;
161 } 170 }
162 &.en-menu{text-align: left; 171
163 li{padding: 6px 0 6px 14px; 172 &.en-menu {
164 a{display: flex;align-items: center;} 173 text-align: left;
174
175 li {
176 padding: 6px 0 6px 14px;
177
178 a {
179 display: flex;
180 align-items: center;
181 }
182 }
183
184 img {
185 padding: 0;
186 width: 26px;
165 } 187 }
166 img{padding: 0;width: 26px;}
167 } 188 }
168 } 189 }
169 190
...@@ -179,24 +200,61 @@ li img { ...@@ -179,24 +200,61 @@ li img {
179 background: #000; 200 background: #000;
180 border-radius: 20px; 201 border-radius: 20px;
181 } 202 }
203
182 @media (max-width: 500px) { 204 @media (max-width: 500px) {
183 .pd20{padding: 8px;} 205 .pd20 {
184 .el-card{box-shadow: none!important; 206 padding: 8px;
185 :deep(.el-card__body){padding: 0!important;} 207 }
186 } 208 .el-card {
187 .el-col{padding: 0!important;} 209 box-shadow: none !important;
188 .center-menu{height: 100vh;padding: 20px 0;position: fixed;left: 0;z-index: 1; 210
189 background: #F5F7F9;top: 80px;width: 100px;border-right: 1px solid #eee; 211 :deep(.el-card__body) {
190 li{font-size: 13px;padding:8px 10px;border-radius: 0; 212 padding: 0 !important;
191 img{display: none} 213 }
192 &.active{background: #fff; 214 }
215 .el-col {
216 padding: 0 !important;
217 }
218 .center-menu {
219 height: 100vh;
220 padding: 20px 0;
221 position: fixed;
222 left: 0;
223 z-index: 1;
224 background: #F5F7F9;
225 top: 80px;
226 width: 100px;
227 border-right: 1px solid #eee;
228
229 li {
230 font-size: 13px;
231 padding: 8px 10px;
232 border-radius: 0;
233
234 img {
235 display: none
236 }
237
238 &.active {
239 background: #fff;
193 border-left: 2px solid var(--el-color-primary); 240 border-left: 2px solid var(--el-color-primary);
194 color: var(--el-color-primary);} 241 color: var(--el-color-primary);
195 } 242 }
196 } 243 }
197 .rightPart{width: calc(100vw - 100px);left: 100px;position: fixed; z-index: 1;
198 height: calc(100vh - 80px);overflow: auto;top: 80px;background: #fff;
199 } 244 }
245 .rightPart {
246 width: calc(100vw - 100px);
247 left: 100px;
248 position: fixed;
249 z-index: 1;
250 height: calc(100vh - 80px);
251 overflow: auto;
252 top: 80px;
253 background: #fff;
254 }
255 }
256
257 .app-container {
258 min-height: 80vh;
200 } 259 }
201 .app-container{min-height: 80vh;}
202 </style> 260 </style>
......
1 <template>
2 <div>
3 <el-card :body-style="{'padding':'0'}">
4 <div class="indexTitle">
5 <h3 class="leftboderTT">{{ language == 0 ? '我的签证' : 'My visa' }}
6 </h3>
7
8 <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'发票开具':'Invoice' }}</el-button>-->
9 <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'我的发票':'My Invoice' }}</el-button>-->
10 </div>
11 <el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228"/>
12
13 <div class="pd20">
14 <div v-for="b in list" class="item">
15 <div class="title">
16 <label class="orangeTag"> {{ b.applicatTypeName }} </label>
17 <span>{{ language == 0 ? '订单编号:' : 'No.' }} {{ b.id }}</span>
18 </div>
19
20 <div class="status-po">
21 <span v-if="b.status == '0'" class="bg-gary">{{ 'Under Review' }}</span>
22 <span v-if="b.status == '1'" class="bg-blue">{{ 'Approved' }}</span>
23 <span v-if="b.status == '2'" class="bg-danger">{{ 'Rejected' }}</span>
24 </div>
25
26 <el-row align="middle" class="pd20 mt10" justify="space-between">
27 <el-col :lg="9" :md="12" :sm="12" :xs="24">
28 <div>
29 <h3 class="name">{{ b.fullName }}</h3>
30 <p>{{ b.email }}</p>
31 <p>{{ b.createTime }}</p>
32 </div>
33 </el-col>
34 <el-col :lg="3" :md="6" :sm="6" :xs="6" class="text-center">
35 <span class="text-warning"> {{ b.invitationTypeName }} </span>
36 </el-col>
37 <el-col :lg="6" :md="16" :sm="16" :xs="16">
38 <div class="text-right">
39 <el-button class="mb10" :disabled="b.emailFlag!='1'" plain round size="small" type="primary"
40 @click="handleDownload(b)">
41 {{ language == 0 ? '下载邀请函' : 'Download Invitation' }}
42 </el-button>
43 <el-button class="mb10" plain round size="small" type="primary" @click="goDetail(b)">
44 {{ language == 0 ? '详情' : 'Detail' }}
45 </el-button>
46 </div>
47 </el-col>
48 </el-row>
49 </div>
50 </div>
51 </el-card>
52 <affix-invitation-view ref="affixInvitationRef"></affix-invitation-view>
53 </div>
54 </template>
55
56 <script setup>
57 import {onMounted, getCurrentInstance} from "@vue/runtime-core";
58 import {useStorage} from "@vueuse/core/index";
59 // import {newbilllist} from "@/apiPc/common";
60 import useUserStore from "@/store/modules/user";
61 // import dayjs from 'dayjs'
62 import {cancelOrder2, cancelOrder} from "/@/apiPc/booking";
63
64 import {ElMessage} from "element-plus";
65 import {downInvite, getUplaodFile, getVisaInfo} from "/@/apiPc/match";
66 import AffixInvitationView from "/@/viewsPc/match/components/affix-invitation-view.vue";
67 import {ref} from "vue";
68 import {useRouter} from "vue-router";
69 import {fillImgUrl} from "/@/utils/ruoyi";
70
71 const router = useRouter()
72 const language = useStorage('language', 0)
73 const list = ref([])
74 const user = useUserStore().user
75 const {proxy} = getCurrentInstance()
76
77 const affixInvitationRef = ref(null)
78
79 onMounted(() => {
80 getList()
81 })
82
83 function finish(bill) {
84 bill.status = '2'
85 // getList()
86 }
87
88 function getList() {
89 getVisaInfo({userId: user.userId}).then(res => {
90 list.value = res.rows || []
91 })
92 }
93
94 function goDetail(b) {
95 affixInvitationRef.value.open(b)
96 // router.push({
97 // name: 'bookingPay',
98 // query: {
99 // orderId: b.id,
100 // orderType: b.orderType
101 // }
102 // })
103 }
104
105 function handleDownload(b) {
106 getUplaodFile({id: b.id}).then(res => {
107 window.open(fillImgUrl(res.msg), '_blank')
108 })
109 }
110
111 function Rebook(row) {
112 console.log(row)
113 if (row.orderType == 0) {
114 router.push({
115 name: 'hotelDetail',
116 params: {
117 cptId: row.activeId,
118 hotelId: row.hotelId
119 },
120 query: {
121 id: row.extId
122 }
123 })
124 } else {
125 router.push({
126 name: 'ticket',
127 params: {
128 activeId: row.activeId,
129 }
130 })
131 }
132 }
133
134 const cancel = (row) => {
135 //取消订单
136 proxy.$modal.confirm(language.value == 0 ? '确定取消订单吗 ?' : `Are you sure to cancel the order?`).then(() => {
137 return cancelOrder2(row.id).then(res => {
138 getList()
139 ElMessage({
140 message: language.value == 0 ? '操作成功' : 'Successful operation!',
141 type: 'success'
142 })
143 })
144 })
145 }
146
147 const unsubscribe = (row) => {
148 proxy.$modal.confirm(language.value == 0 ? `确定退款吗 ?` : 'Are you sure to refund?').then(() => {
149 return cancelOrder(row.id).then(res => {
150 getList()
151 ElMessage({
152 message: language.value == 0 ? '已提交退款,请等待审核!' : 'Refund has been submitted, please wait for review!',
153 type: 'success'
154 })
155 })
156 })
157 }
158
159
160 function toInvoice() {
161 router.push({
162 name: 'invoice'
163 })
164 }
165 </script>
166
167 <style lang="scss" scoped>
168 .bigMoney {
169 font-size: 24px;
170 font-family: "DIN Alternate";
171 }
172
173 .name {
174 font-size: 18px;
175 margin: 0;
176 }
177
178 .status-po {
179 position: absolute;
180 right: 0;
181 top: 0;
182 font-size: 12px;
183 color: #FFFFFF;
184
185 span {
186 border-radius: 0px 10px 0px 10px;
187 padding: 4px 10px;
188 }
189
190 .bg-danger {
191 background: #E60012;
192 }
193
194 .bg-warning {
195 background: #e89f39;
196 }
197
198 .bg-pink {
199 background: #F740A6;
200 }
201
202 .bg-primary {
203 background: var(--el-color-primary)
204 }
205
206 .bg-blue {
207 background: #00a0e9
208 }
209 }
210
211 .indexTitle {
212 margin: 20px 0 12px;
213 overflow: visible;
214 padding: 0 20px 15px;
215 border-bottom: 1px solid #e5e5e5;
216
217 .fr {
218 margin: -8px 0 0
219 }
220
221 h3 {
222 display: inline-block;
223 font-size: 16px;
224 color: var(--el-color-primary);
225 }
226 }
227
228 .item {
229 .name {
230 font-size: 18px;
231 color: #000000;
232 margin: 0 0 10px;
233 }
234
235 p {
236 margin: 8px 0 0;
237 color: #707070;
238 font-size: 14px;
239 }
240
241 margin: 0 0 20px;
242 border: 1px solid #E5E5E5;
243 border-radius: 10px;
244 position: relative;
245
246 .bbody {
247 padding: 0 15px 20px;
248 }
249
250 .title {
251 background: #F7F7F7;
252 border-bottom: 1px solid #E5E5E5;
253
254 span {
255 font-size: 14px;
256 color: #4C5359;
257 }
258 }
259
260 .title label {
261 border-radius: 5px 0 5px 0;
262 font-size: 12px;
263 color: #fff;
264 padding: 4px 10px;
265 margin-right: 10px;
266 }
267
268 .blueTag {
269 background-color: #1EC886;
270 }
271
272 .purpleTag {
273 background-color: #717bef;
274 }
275
276 .orangeTag {
277 background-color: #ff8124;
278 }
279 }
280
281 .billFoot {
282 .price {
283 width: 100%;
284 justify-content: space-between;
285 }
286 }
287
288 .billFoot .tip {
289 font-size: 24px;
290 color: #999;
291 font-weight: 500;
292 margin: 0 20px;
293 }
294
295 .status {
296 position: absolute;
297 right: 10px;
298 bottom: 60px;
299 white-space: nowrap;
300
301 .warning {
302 color: #ff8124;
303 }
304
305 .danger {
306 color: #da2a2a;
307 }
308
309 .gary {
310 color: #666;
311 }
312
313 .success {
314 color: #1EC886;
315 }
316 }
317
318 </style>
319
1 <template> 1 <template>
2 <div v-if="language === 0" class="itemBox"> 2 <div class="itemBox" v-if="language === 0">
3 <el-row :gutter="20"> 3 <el-row :gutter="20">
4 <el-col :lg="4" :sm="12" :xs="12"> 4 <el-col :sm="12" :lg="4" :xs="12">
5 <div class="item" @click="popRemark(0)"><img src="@/assets/dance/btn01.png">签证服务</div> 5 <div class="item" @click="popRemark(0)"><img src="@/assets/dance/btn01.png">签证服务</div>
6 </el-col> 6 </el-col>
7 <el-col :lg="4" :sm="12" :xs="12"> 7 <el-col :sm="12" :lg="4" :xs="12">
8 <div class="item" @click="popRemark(1)"><img src="@/assets/dance/btn02.png">酒店预订</div> 8 <div class="item" @click="popRemark(1)"><img src="@/assets/dance/btn02.png">酒店预订</div>
9 </el-col> 9 </el-col>
10 <el-col :lg="4" :sm="12" :xs="12"> 10 <el-col :sm="12" :lg="4" :xs="12">
11 <div class="item" @click="popRemark(2)"><img src="@/assets/dance/btn03.png">接送服务</div> 11 <div class="item" @click="popRemark(2)"><img src="@/assets/dance/btn03.png">接送服务</div>
12 </el-col> 12 </el-col>
13 <el-col :lg="4" :sm="12" :xs="12"> 13 <el-col :sm="12" :lg="4" :xs="12">
14 <div class="item" @click="popRemark(10)"><img src="@/assets/dance/btn04.png">票务服务</div> 14 <div class="item" @click="popRemark(10)"><img src="@/assets/dance/btn04.png">票务服务</div>
15 </el-col> 15 </el-col>
16 <el-col :lg="4" :sm="12" :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">-->
...@@ -24,21 +24,21 @@ ...@@ -24,21 +24,21 @@
24 <!-- </el-col>--> 24 <!-- </el-col>-->
25 </el-row> 25 </el-row>
26 </div> 26 </div>
27 <div v-else class="itemBox_en"> 27 <div class="itemBox_en" v-else>
28 <el-row :gutter="20" justify="space-around"> 28 <el-row :gutter="20" justify="space-around">
29 <el-col :lg="4" :sm="12" :xs="12"> 29 <el-col :sm="12" :lg="4" :xs="12">
30 <div class="item" @click="popRemark(0)"><img src="@/assets/dance/btn01.png">Visa Services</div> 30 <div class="item" @click="popRemark(0)"><img src="@/assets/dance/btn01.png">Visa Services</div>
31 </el-col> 31 </el-col>
32 <el-col :lg="4" :sm="12" :xs="12"> 32 <el-col :sm="12" :lg="4" :xs="12">
33 <div class="item" @click="popRemark(1)"><img src="@/assets/dance/btn02.png">HOTEL RESERVATION</div> 33 <div class="item" @click="popRemark(1)"><img src="@/assets/dance/btn02.png">HOTEL RESERVATION</div>
34 </el-col> 34 </el-col>
35 <el-col :lg="4" :sm="12" :xs="12"> 35 <el-col :sm="12" :lg="4" :xs="12">
36 <div class="item" @click="popRemark(2)"><img src="@/assets/dance/btn03.png">TRANSPORTATION RESERVATION</div> 36 <div class="item" @click="popRemark(2)"><img src="@/assets/dance/btn03.png">TRANSPORTATION RESERVATION</div>
37 </el-col> 37 </el-col>
38 <el-col :lg="4" :sm="12" :xs="12"> 38 <el-col :sm="12" :lg="4" :xs="12">
39 <div class="item" @click="popRemark(10)"><img src="@/assets/dance/btn04.png">TICKET SERVICES</div> 39 <div class="item" @click="popRemark(10)"><img src="@/assets/dance/btn04.png">TICKET SERVICES</div>
40 </el-col> 40 </el-col>
41 <el-col :lg="4" :sm="12" :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">-->
...@@ -73,6 +73,8 @@ import {getBaseInfoByActiveId} from "@/apiPc/booking"; ...@@ -73,6 +73,8 @@ import {getBaseInfoByActiveId} from "@/apiPc/booking";
73 import * as match from "@/apiPc/match"; 73 import * as match from "@/apiPc/match";
74 import useUserStore from "@/store/modules/user"; 74 import useUserStore from "@/store/modules/user";
75 75
76 const emit = defineEmits(['pickUp'])
77
76 const props = defineProps({ 78 const props = defineProps({
77 matchId: { 79 matchId: {
78 type: String, 80 type: String,
...@@ -94,7 +96,6 @@ watch(matchId, (val) => { ...@@ -94,7 +96,6 @@ watch(matchId, (val) => {
94 if (val && val != '0') { 96 if (val && val != '0') {
95 getBaseInfoByActiveId(props.matchId).then(res => { 97 getBaseInfoByActiveId(props.matchId).then(res => {
96 form.value = res.data || null 98 form.value = res.data || null
97 console.log(form.value)
98 }).catch(err => { 99 }).catch(err => {
99 console.log(err) 100 console.log(err)
100 form.value = null 101 form.value = null
...@@ -134,7 +135,7 @@ onMounted(() => { ...@@ -134,7 +135,7 @@ onMounted(() => {
134 135
135 function building() { 136 function building() {
136 ElMessage.warning(language.value == 0 ? '感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。' : 'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.') 137 ElMessage.warning(language.value == 0 ? '感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。' : 'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.')
137 138 return
138 } 139 }
139 140
140 function applyInvitation() { 141 function applyInvitation() {
...@@ -148,15 +149,14 @@ function applyInvitation() { ...@@ -148,15 +149,14 @@ function applyInvitation() {
148 const user = useUserStore().user 149 const user = useUserStore().user
149 150
150 function goMedia() { 151 function goMedia() {
152 proxy.$modal.msgWarning(language.value == 0 ? '暂未开放' : 'Not yet open')
153 return;
154
151 //如果没登录 155 //如果没登录
152 if (form.value.isMedia == 0) {
153 building()
154 return
155 }
156 if (!user) { 156 if (!user) {
157 ElMessage({ 157 ElMessage({
158 type: 'warning', 158 type: 'warning',
159 message: language.value == 0 ? '请先登录' : 'Please log in first', 159 message: language.value == 0 ? '请先登录' : 'Please login first',
160 }) 160 })
161 return 161 return
162 } 162 }
...@@ -171,25 +171,21 @@ function popRemark(type) { ...@@ -171,25 +171,21 @@ function popRemark(type) {
171 } 171 }
172 172
173 if (type == '0') { 173 if (type == '0') {
174 ElMessage.warning('The visa invitation letter application will be available soon. Thank you for your patience.')
175 return;
174 // 签证 176 // 签证
175 if (language.value === 0) { 177 if (language.value === 0) {
176 ElMessage.warning('请切换英文页面办理') 178 ElMessage.warning('请切换英文页面办理')
177 return 179 return
178 } else { 180 } else {
179 if (form.value.isVisa == 0) {
180 building()
181 return
182 }
183
184 if (!user) { 181 if (!user) {
185 ElMessage({ 182 ElMessage({
186 type: 'warning', 183 type: 'warning',
187 message: language.value == 0 ? '请先登录' : 'Please log in first', 184 message: language.value == 0 ? '请先登录' : 'Please login first',
188 }) 185 })
189 return 186 return
190 } 187 }
191 188
192
193 applyInvitation() 189 applyInvitation()
194 return 190 return
195 } 191 }
...@@ -205,6 +201,13 @@ function popRemark(type) { ...@@ -205,6 +201,13 @@ function popRemark(type) {
205 building() 201 building()
206 return 202 return
207 } 203 }
204
205 if (type == '2') {
206 emit("pickUp")
207 return;
208 }
209
210
208 const params = { 211 const params = {
209 matchId: props.matchId, 212 matchId: props.matchId,
210 title: language.value == 0 ? '预订说明' : 'Booking Instructions', 213 title: language.value == 0 ? '预订说明' : 'Booking Instructions',
...@@ -214,7 +217,7 @@ function popRemark(type) { ...@@ -214,7 +217,7 @@ function popRemark(type) {
214 proxy.$refs['orderRemarkRef'].open(params) 217 proxy.$refs['orderRemarkRef'].open(params)
215 } 218 }
216 219
217 function goBooking(n) { 220 function goBooking(n, f) {
218 switch (n) { 221 switch (n) {
219 case 10: 222 case 10:
220 // 票务 223 // 票务
...@@ -227,7 +230,7 @@ function goBooking(n) { ...@@ -227,7 +230,7 @@ function goBooking(n) {
227 break; 230 break;
228 case 1: 231 case 1:
229 //酒店 232 //酒店
230 router.push({path: `/booking/hotel/${props.matchId}`}) 233 router.push({path: `/booking/hotel/${props.matchId}`, query: {flag: f}})
231 break; 234 break;
232 case 2: 235 case 2:
233 //车辆 236 //车辆
...@@ -249,7 +252,7 @@ function goBooking(n) { ...@@ -249,7 +252,7 @@ function goBooking(n) {
249 } 252 }
250 </script> 253 </script>
251 254
252 <style lang="scss" scoped> 255 <style scoped lang="scss">
253 .itemBox, .itemBox_en { 256 .itemBox, .itemBox_en {
254 padding: 20px; 257 padding: 20px;
255 background: #fff; 258 background: #fff;
......
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>
......
...@@ -22,15 +22,20 @@ ...@@ -22,15 +22,20 @@
22 </div> 22 </div>
23 <div v-if="form.type?.some(v=>v==1)"> 23 <div v-if="form.type?.some(v=>v==1)">
24 <h3 class="leftboderTT">{{ language == 0 ? '接机信息' : 'Pick-up information' }}</h3> 24 <h3 class="leftboderTT">{{ language == 0 ? '接机信息' : 'Pick-up information' }}</h3>
25 <el-form-item :label="language==0?'抵达人员身份':'Role of Person-Arrival'" prop="pickUpBo.standing" 25 <!-- <el-form-item :label="language==0?'抵达人员身份':'Role of Person-Arrival'" prop="pickUpBo.standing"-->
26 required> 26 <!-- required>-->
27 <el-checkbox-group v-model="form.pickUpBo.standing"> 27 <!-- <el-checkbox-group v-model="form.pickUpBo.standing">-->
28 <el-checkbox :label="language==0?'运动员':'Athlete'" name="1"/> 28 <!-- <el-checkbox :label="language==0?'运动员':'Athlete'" name="1"/>-->
29 <el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2"/> 29 <!-- <el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2"/>-->
30 <el-checkbox :label="language==0?'官员':'Official'" name="3"/> 30 <!-- <el-checkbox :label="language==0?'官员':'Official'" name="3"/>-->
31 <el-checkbox :label="language==0?'其他':'Others'" name="4"/> 31 <!-- <el-checkbox :label="language==0?'其他':'Others'" name="4"/>-->
32 </el-checkbox-group> 32 <!-- </el-checkbox-group>-->
33 <!-- </el-form-item>-->
34
35 <el-form-item :label="language==0?'队伍俱乐部':'Team/Club Name'" prop="pickUpBo.standing" required>
36 <el-input v-model="form.pickUpBo.standing"/>
33 </el-form-item> 37 </el-form-item>
38
34 <el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="pickUpBo.nationalitys" required> 39 <el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="pickUpBo.nationalitys" required>
35 <el-select v-model="form.pickUpBo.nationalitys" filterable multiple style="width: 100%;"> 40 <el-select v-model="form.pickUpBo.nationalitys" filterable multiple style="width: 100%;">
36 <el-option v-for="item in countrys" 41 <el-option v-for="item in countrys"
...@@ -97,23 +102,35 @@ ...@@ -97,23 +102,35 @@
97 :is-show-tip="false" 102 :is-show-tip="false"
98 :limit="1"/> 103 :limit="1"/>
99 </el-form-item> 104 </el-form-item>
105
106 <el-form-item :label="language==0?'酒店预订单':'Hotel Reservation'" prop="pickUpBo.hotleFile" required>
107 <image-upload v-model="form.pickUpBo.hotleFile" :button-text="language==0?'上传':'Upload'"
108 :is-show-tip="false"
109 :limit="1"/>
110 </el-form-item>
111
100 </div> 112 </div>
101 113
102 <div v-if="form.type?.some(v=>v==2)"> 114 <div v-if="form.type?.some(v=>v==2)">
103 <!-- <el-form-item :label="language == 0 ? '送机信息' : 'Delivery information' ">--> 115 <!-- <el-form-item :label="language == 0 ? '送机信息' : 'Delivery information' ">-->
104 <!-- </el-form-item>--> 116 <!-- </el-form-item>-->
105 <h3 class="leftboderTT">{{ language == 0 ? '送机信息' : 'Delivery information' }}</h3> 117 <h3 class="leftboderTT">{{ language == 0 ? '送机信息' : 'Delivery information' }}</h3>
106 <el-form-item 118 <!-- <el-form-item-->
107 :label="language==0?'离会人员身份':'Role of Person-Departure'" 119 <!-- :label="language==0?'离会人员身份':'Role of Person-Departure'"-->
108 prop="downOffBo.standing" required> 120 <!-- prop="downOffBo.standing" required>-->
109 <!-- <el-input v-model="form.downOffBo.standing"/>--> 121 <!-- &lt;!&ndash; <el-input v-model="form.downOffBo.standing"/>&ndash;&gt;-->
110 <el-checkbox-group v-model="form.downOffBo.standing"> 122 <!-- <el-checkbox-group v-model="form.downOffBo.standing">-->
111 <el-checkbox :label="language==0?'运动员':'Athlete'" name="1"/> 123 <!-- <el-checkbox :label="language==0?'运动员':'Athlete'" name="1"/>-->
112 <el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2"/> 124 <!-- <el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2"/>-->
113 <el-checkbox :label="language==0?'官员':'Official'" name="3"/> 125 <!-- <el-checkbox :label="language==0?'官员':'Official'" name="3"/>-->
114 <el-checkbox :label="language==0?'其他':'Others'" name="4"/> 126 <!-- <el-checkbox :label="language==0?'其他':'Others'" name="4"/>-->
115 </el-checkbox-group> 127 <!-- </el-checkbox-group>-->
128 <!-- </el-form-item>-->
129
130 <el-form-item :label="language==0?'队伍俱乐部':'Team/Club Name'" prop="pickUpBo.standing" required>
131 <el-input v-model="form.pickUpBo.standing"/>
116 </el-form-item> 132 </el-form-item>
133
117 <el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="downOffBo.nationalitys" required> 134 <el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="downOffBo.nationalitys" required>
118 <el-select v-model="form.downOffBo.nationalitys" filterable multiple style="width: 100%;"> 135 <el-select v-model="form.downOffBo.nationalitys" filterable multiple style="width: 100%;">
119 <el-option v-for="item in countrys" 136 <el-option v-for="item in countrys"
...@@ -181,6 +198,13 @@ ...@@ -181,6 +198,13 @@
181 :is-show-tip="false" 198 :is-show-tip="false"
182 :limit="1"/> 199 :limit="1"/>
183 </el-form-item> 200 </el-form-item>
201
202 <el-form-item :label="language==0?'酒店预订单':'Hotel Reservation'" prop="pickUpBo.hotleFile" required>
203 <image-upload v-model="form.pickUpBo.hotleFile" :button-text="language==0?'上传':'Upload'"
204 :is-show-tip="false"
205 :limit="1"/>
206 </el-form-item>
207
184 </div> 208 </div>
185 209
186 <div class="text-center"> 210 <div class="text-center">
......
1 <template>
2 <el-dialog
3 v-model="show" title="Visa Invitation Letter" append-to-body close-icon="CircleClose" center
4 close-on-click-modal destroy-on-close width="1100"
5 >
6 <el-descriptions border>
7 <el-descriptions-item label="No.">{{ form.id }}</el-descriptions-item>
8 <el-descriptions-item label="Applicant Type">{{ form.remarks || form.applicatTypeName }}</el-descriptions-item>
9 <el-descriptions-item label="Invitation Type">{{ form.invitationTypeName }}</el-descriptions-item>
10 <el-descriptions-item label="Do you need a Chinese invitation?">{{
11 form.chinese == '1' ? 'YES' : 'No'
12 }}
13 </el-descriptions-item>
14 <el-descriptions-item label="MNA/Team Name">{{ form.nameEn }}</el-descriptions-item>
15 <el-descriptions-item label="MNA/Team Address">{{ form.associationAddress }}</el-descriptions-item>
16 <el-descriptions-item label="Contact Email">{{ form.email }}</el-descriptions-item>
17 <el-descriptions-item label="Full Name">{{ form.fullName }}</el-descriptions-item>
18 <el-descriptions-item label="Position">{{ form.remarks1 || form.positionName }}</el-descriptions-item>
19 <el-descriptions-item label="Phone">{{ form.phone }}</el-descriptions-item>
20 <el-descriptions-item label="Chinese Embassy Visas Office">{{ form.embassy }}</el-descriptions-item>
21 <el-descriptions-item label="Chinese Embassy Email">{{ form.embassyEmail }}</el-descriptions-item>
22 <el-descriptions-item label="Additional Documents">
23 <el-link v-if="form.files" :href="fillImgUrl(form.files)" target="_blank" type="primary">
24 additional documents
25 </el-link>
26 </el-descriptions-item>
27 <el-descriptions-item label="Proof of Employment">
28 <el-link v-if="form.invitationFile" target="_blank" :href="fillImgUrl(form.invitationFile)" type="primary">
29 proof of employment
30 </el-link>
31 </el-descriptions-item>
32 </el-descriptions>
33 <!-- <el-divider></el-divider>-->
34 <br/>
35 <el-table :data="visaList" border stripe>
36 <el-table-column prop="passportCopy" label="Passport Copy">
37 <template #default="{row}">
38 <el-image
39 :src="fillImgUrl(row.passportCopy)"
40 :preview-src-list="[fillImgUrl(row.passportCopy)]"
41 :preview-teleported="true"
42 style="width: 50px;height: 70px"
43 />
44 </template>
45 </el-table-column>
46 <el-table-column label="position" align="center" prop="position"/>
47 <el-table-column label="lastName" align="center" prop="lastName"/>
48 <el-table-column label="firstName" align="center" prop="fristName"/>
49 <el-table-column prop="sex" label="Gender" align="center">
50 <template #default="{row}">
51 {{ row.sex == '0' ? 'M' : 'F' }}
52 </template>
53 </el-table-column>
54 <el-table-column label="nationality" align="center" prop="nationality"/>
55 <el-table-column label="birthday" align="center" prop="birthday"/>
56 <el-table-column label="Passport No." align="center" prop="passportNo"/>
57 <el-table-column label="DATE OF ISSUE" align="center" prop="issueDate"/>
58 <el-table-column label="DATE OF EXPIRY" align="center" prop="expiryDate"/>
59 </el-table>
60 </el-dialog>
61
62 </template>
63
64 <script setup>
65 import {useStorage} from "@vueuse/core/index";
66 import {getCurrentInstance, ref} from "vue";
67 import {listVisaInfo} from "@/apiPc/match";
68 import useUserStore from "@/store/modules/user";
69 import {fillImgUrl} from "/@/utils/ruoyi";
70
71 const user = useUserStore().user
72 const {proxy} = getCurrentInstance()
73 const language = useStorage('language', 0)
74 const form = ref({
75 gender: '0',
76 cptVisaInfoBos: [],
77 email: user?.email,
78 })
79 const show = ref(false)
80 const visaList = ref([])
81
82 const open = (params) => {
83 show.value = true
84 form.value = params
85
86 listVisaInfo({visaId: params.id})
87 .then((res) => {
88 visaList.value = res.rows
89 })
90
91 }
92 defineExpose({open})
93
94 </script>
95
96 <style scoped lang="scss">
97
98 </style>
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!