16aad7ee by zhangmeng

Merge branch 'dev' into devdev

# Conflicts:
#	src/assets/booking/hz_bg.png
#	src/routerPc/en.js
#	src/viewsPc/booking/makeUp.vue
2 parents 13a27606 c8bd032f
Showing 65 changed files with 1971 additions and 467 deletions
This file is too large to display.
...@@ -6,12 +6,25 @@ export function getHotelList(params) { ...@@ -6,12 +6,25 @@ export function getHotelList(params) {
6 params: params 6 params: params
7 }) 7 })
8 } 8 }
9 export function getStudioList(params) {
10 return request({
11 url: `/ota/studio/list`,
12 method: 'get',
13 params: params
14 })
15 }
9 export function getHotelById(id) { 16 export function getHotelById(id) {
10 return request({ 17 return request({
11 url: `/ota/hotel/${id}`, 18 url: `/ota/hotel/${id}`,
12 method: 'get' 19 method: 'get'
13 }) 20 })
14 } 21 }
22 export function getStudioById(id) {
23 return request({
24 url: `/ota/studio/${id}`,
25 method: 'get'
26 })
27 }
15 export function getHotelRooms(params) { 28 export function getHotelRooms(params) {
16 return request({ 29 return request({
17 url: `/ota/activityRoom/list`, 30 url: `/ota/activityRoom/list`,
...@@ -104,6 +117,15 @@ export function createPalPay(data) { ...@@ -104,6 +117,15 @@ export function createPalPay(data) {
104 data:data 117 data:data
105 }) 118 })
106 } 119 }
120 export function callbackPalPay(tradeNo) {
121 return request({
122 url: `/ota/norder/palPay/callback`,
123 method: 'post',
124 data:{
125 tradeNo:tradeNo
126 }
127 })
128 }
107 export function getInvoiceByActiveId(query) { 129 export function getInvoiceByActiveId(query) {
108 return request({ 130 return request({
109 url: `/ota/invoice/list`, 131 url: `/ota/invoice/list`,
...@@ -134,5 +156,54 @@ export function cancelOrder2(orderId) { ...@@ -134,5 +156,54 @@ export function cancelOrder2(orderId) {
134 params: orderId 156 params: orderId
135 }) 157 })
136 } 158 }
137 159 export function addressList(userId) {
138 160 return request({
161 url: `/ota/invoiceInfo/list`,
162 method: 'get',
163 params: {
164 createById: userId
165 }
166 })
167 }
168 export function getBaseInfoByActiveId(id) {
169 return request({
170 url: `/ota/activity/${id}`,
171 method: 'get'
172 })
173 }
174 export function checkRoomPayByUserId(id) {
175 return request({
176 url: `/ota/norder/checkRoomPayByUserId`,
177 method: 'get',
178 params: {
179 extId: id
180 }
181 })
182 }
183 export function submitInvoice(form) {
184 return request({
185 url: `/ota/invoice`,
186 method: 'post',
187 data: form
188 })
189 }
190 export function editInvoice(form) {
191 return request({
192 url: `/ota/invoice`,
193 method: 'put',
194 data: form
195 })
196 }
197 export function addAddress(form) {
198 return request({
199 url: `/ota/invoiceInfo`,
200 method: 'post',
201 data: form
202 })
203 }
204 export function delAddress(ids) {
205 return request({
206 url: `/ota/invoiceInfo/${ids}`,
207 method: 'delete'
208 })
209 }
......
...@@ -47,3 +47,24 @@ export function newbilllist(query) { ...@@ -47,3 +47,24 @@ export function newbilllist(query) {
47 params: query 47 params: query
48 }) 48 })
49 } 49 }
50 export function vistorRegister(data) {
51 return request({
52 url: `/pcSimpleRegister`,
53 method: 'post',
54 data: data
55 })
56 }
57 export function upgradePersonal(data) {
58 return request({
59 url: `/upgradeAccountToSingle`,
60 method: 'post',
61 data: data
62 })
63 }
64 export function upgradeTeam(data) {
65 return request({
66 url: `/upgradeAccountToTeam`,
67 method: 'post',
68 data: data
69 })
70 }
......
...@@ -9,7 +9,11 @@ ...@@ -9,7 +9,11 @@
9 .blur20 { filter: blur(20px) } 9 .blur20 { filter: blur(20px) }
10 .m0{margin: 0;} 10 .m0{margin: 0;}
11 .flex{display: flex;} 11 .flex{display: flex;}
12 12 .fs16{font-size: 16px;}
13 .fs18{font-size: 18px;}
14 .borderRadius10{border-radius: 10px;}
15 .w80{width: 80%;}
16 .w50{width: 50%;}
13 .text-gray{color: #999} 17 .text-gray{color: #999}
14 .uppercase{ 18 .uppercase{
15 text-transform: uppercase; 19 text-transform: uppercase;
...@@ -248,7 +252,8 @@ img{display: block;} ...@@ -248,7 +252,8 @@ img{display: block;}
248 .text-navy { 252 .text-navy {
249 color: #1ab394; 253 color: #1ab394;
250 } 254 }
251 255 .underline{ text-decoration: underline;}
256 .pointer{cursor: pointer}
252 .text-primary { 257 .text-primary {
253 color: var(--el-color-primary); 258 color: var(--el-color-primary);
254 } 259 }
......

1.27 KB | W: | H:

846 Bytes | W: | H:

src/assets/v1/name_bg@2x.png
src/assets/v1/name_bg@2x.png
src/assets/v1/name_bg@2x.png
src/assets/v1/name_bg@2x.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -74,30 +74,62 @@ ...@@ -74,30 +74,62 @@
74 </div> 74 </div>
75 </div> 75 </div>
76 <div class="fixed-right"> 76 <div class="fixed-right">
77 <a v-if="language==0" href="#" target="_blank" 77 <div class="mlb" v-if="language==0">
78 <div href="#" target="_blank"
78 onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=6c500b60-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=ZHCN','_blank','height=700px,width=700px,top=50,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="客服" > 79 onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=6c500b60-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=ZHCN','_blank','height=700px,width=700px,top=50,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="客服" >
79 <img src="@/assets/logo/kf_c.png"/> 80 <img class="kf" src="@/assets/logo/btn01.png"/>
81 <div class="text-center mt10 gradient-text">在线客服</div>
82 </div>
83 <div @click="goHelpZH">
84 <a target="_blank" href="/file/操作指引.zip">
85 <img class="kf" src="@/assets/logo/btn02.png"/>
86 <div class="text-center mt10 gradient-text">操作指引</div>
80 </a> 87 </a>
81 88 </div>
82 <a v-else target="_blank" href="#" 89 </div>
90 <div class="mlb" v-else>
91 <div target="_blank" href="#"
83 onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=707daf80-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=EN','_blank','height=700px,width=700px,top=100,left=150,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="Live Chat"> 92 onclick="javascript:window.open('https://ykf-weixin01.7moor.com/wapchat.html?accessId=707daf80-02c6-11ef-9a4d-85cd5dacc5bf&fromUrl=&urlTitle=&language=EN','_blank','height=700px,width=700px,top=100,left=150,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')" title="Live Chat">
84 <img class="kf" src="@/assets/logo/kf_e.png"/> 93 <img class="kf" src="@/assets/logo/btn01.png"/>
85 </a> 94 <div class="text-center gradient-text">LIVE CHAT</div>
95 </div>
96 <div @click="goHelp">
97 <img class="kf" src="@/assets/logo/btn02.png"/>
98 <div class="text-center gradient-text">GUIDELINE</div>
99 </div>
100 </div>
86 </div> 101 </div>
87 </template> 102 </template>
88 103
89 <script setup> 104 <script setup>
90 import {useStorage} from "@vueuse/core/index"; 105 import {useStorage} from "@vueuse/core/index";
91 106 import {useRouter} from "vue-router";
107 const router = useRouter()
92 const language = useStorage('language', 0) 108 const language = useStorage('language', 0)
109 const goHelp = () => {
110 router.push({
111 path: `/news/list/20000100`,
112 query:{
113 kindName: language.value==0?'操作指引':'GUIDELINE'
114 }
115 })
116 }
117 const goHelpZH = () => {
93 118
119 }
94 </script> 120 </script>
95 121
96 <style lang="scss" scoped> 122 <style lang="scss" scoped>
97 .kf{width: 100px;cursor: pointer; 123 .kf{width: 45px;margin: auto;height: auto;
98 //animation: pop 2s infinite; 124 //animation: pop 2s infinite;
99 } 125 }
100 .fixed-right{position: fixed;right: 0;bottom: 200px;} 126 .fixed-right{position: fixed;right: 0;bottom: 200px;
127 .mlb{background: #fff;border-radius: 10px 0 0 10px;box-shadow: 0 2px 8px #aaa;
128 padding: 10px 8px;text-align: center;cursor: pointer;
129 div:first-child{border-bottom: 0.5px solid #eee;padding: 0 0 10px;margin-bottom: 10px}
130 div:hover{.gradient-text{font-weight: bold;}}
131 }
132 }
101 .copyright{ font-size: 14px; 133 .copyright{ font-size: 14px;
102 opacity: 0.88; 134 opacity: 0.88;
103 color: #4C5359;} 135 color: #4C5359;}
...@@ -117,6 +149,13 @@ const language = useStorage('language', 0) ...@@ -117,6 +149,13 @@ const language = useStorage('language', 0)
117 } 149 }
118 img{height: 80px;} 150 img{height: 80px;}
119 } 151 }
152 .gradient-text {font-family: FZJunHeiS-B-GB;
153 font-weight: 600;
154 font-size: 17px;
155 background: linear-gradient(0deg, #8226FC 0%, #483BEB 100%);
156 -webkit-background-clip: text;
157 -webkit-text-fill-color: transparent;
158 }
120 @media (max-width: 500px) { 159 @media (max-width: 500px) {
121 .forWei{display: none;} 160 .forWei{display: none;}
122 } 161 }
......
...@@ -54,8 +54,8 @@ ...@@ -54,8 +54,8 @@
54 <span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span> 54 <span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span>
55 </div> 55 </div>
56 <div class="ml20 forPc" > 56 <div class="ml20 forPc" >
57 <el-button v-if="!isLogin" style="border-radius: 20px;" class="loginBtn"> 57 <el-button v-if="!isLogin" @click="goLogin" style="border-radius: 20px;" class="loginBtn">
58 <span @click="goLogin">{{ language==0?'登录':'LOGIN' }}</span> 58 <span>{{ language==0?'登录':'LOGIN' }}</span>
59 <!-- | &nbsp;<span @click="goRegister">注册</span>--> 59 <!-- | &nbsp;<span @click="goRegister">注册</span>-->
60 </el-button> 60 </el-button>
61 61
...@@ -135,6 +135,7 @@ ...@@ -135,6 +135,7 @@
135 </el-menu> 135 </el-menu>
136 </el-drawer> 136 </el-drawer>
137 <LoginDialog ref="pcloginDialog" @submitForm="reFlash" /> 137 <LoginDialog ref="pcloginDialog" @submitForm="reFlash" />
138 <VisitorLogin ref="visitorDialog" @submitForm="reFlash" />
138 <SearchPop v-if="language==0" ref="searchDialog" /> 139 <SearchPop v-if="language==0" ref="searchDialog" />
139 <SearchPop_en v-if="language==1" ref="searchDialog" /> 140 <SearchPop_en v-if="language==1" ref="searchDialog" />
140 </template> 141 </template>
...@@ -147,6 +148,7 @@ import { Search,UserFilled } from '@element-plus/icons-vue' ...@@ -147,6 +148,7 @@ import { Search,UserFilled } from '@element-plus/icons-vue'
147 import { getCurrentInstance, onMounted } from '@vue/runtime-core' 148 import { getCurrentInstance, onMounted } from '@vue/runtime-core'
148 import _ from 'lodash' 149 import _ from 'lodash'
149 import LoginDialog from '@/viewsPc/login' 150 import LoginDialog from '@/viewsPc/login'
151 import VisitorLogin from '@/viewsPc/register/components/utype3'
150 import SearchPop from './indexSearch' 152 import SearchPop from './indexSearch'
151 import SearchPop_en from './indexSearch_en' 153 import SearchPop_en from './indexSearch_en'
152 import Captcha from './captcha' 154 import Captcha from './captcha'
...@@ -236,7 +238,12 @@ watch(() => useUserStore().reLogin, (val) => { ...@@ -236,7 +238,12 @@ watch(() => useUserStore().reLogin, (val) => {
236 goLogin(val.query) 238 goLogin(val.query)
237 } 239 }
238 }) 240 })
239 241 watch(() => useUserStore().visitor, (val) => {
242 if (val) {
243 console.log(val)
244 proxy.$refs['visitorDialog'].open()
245 }
246 })
240 function searchNews() { 247 function searchNews() {
241 proxy.$refs['searchDialog'].open() 248 proxy.$refs['searchDialog'].open()
242 } 249 }
......
...@@ -31,6 +31,7 @@ const useUserStore = defineStore( ...@@ -31,6 +31,7 @@ const useUserStore = defineStore(
31 genFlag: '', // 是否是自动的协会 31 genFlag: '', // 是否是自动的协会
32 badge: {}, 32 badge: {},
33 reLogin: {show:false,query:{}}, 33 reLogin: {show:false,query:{}},
34 visitor: false,
34 language: 0 35 language: 0
35 }), 36 }),
36 actions: { 37 actions: {
...@@ -138,6 +139,12 @@ const useUserStore = defineStore( ...@@ -138,6 +139,12 @@ const useUserStore = defineStore(
138 this.badge = res.data 139 this.badge = res.data
139 }) 140 })
140 }, 141 },
142 setVisitor() {
143 this.visitor = true
144 setTimeout(() => {
145 this.visitor = false
146 }, 1000)
147 },
141 setReLogin(query) { 148 setReLogin(query) {
142 console.log(query) 149 console.log(query)
143 this.reLogin = {show:true,query:query} 150 this.reLogin = {show:true,query:query}
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
8 <div class="leftNav"> 8 <div class="leftNav">
9 <ul> 9 <ul>
10 <li :class="activeIndex==0?'active':''" @click="activeIndex=0">{{ language==0?'组织机构':'Organizer' }}</li> 10 <li :class="activeIndex==0?'active':''" @click="activeIndex=0">{{ language==0?'组织机构':'Organizer' }}</li>
11 <li :class="activeIndex==1?'active':''" @click="activeIndex=1">{{ language==0?'WDSF亚洲体育舞蹈节':'WDSF Asian Dancesport Festival' }}</li> 11 <li :class="activeIndex==1?'active':''" @click="activeIndex=1">{{ language==0?'无锡WDSF亚洲体育舞蹈节':'WUXI WDSF ASIAN DANCESPORT FESTIVAL' }}</li>
12 <!-- <li :class="activeIndex==2?'active':''" @click="activeIndex=2">{{ language==0?'体育舞蹈项目':'About Sports Dance' }}</li>--> 12 <!-- <li :class="activeIndex==2?'active':''" @click="activeIndex=2">{{ language==0?'体育舞蹈项目':'About Sports Dance' }}</li>-->
13 </ul> 13 </ul>
14 </div> 14 </div>
...@@ -59,45 +59,45 @@ ...@@ -59,45 +59,45 @@
59 59
60 <div class="infoPart pd20" v-if="activeIndex==1"> 60 <div class="infoPart pd20" v-if="activeIndex==1">
61 <h3 class="leftboderTT">{{ language==0?'无锡WDSF亚洲体育舞蹈节':'WUXI WDSF ASIAN DANCESPORT FESTIVAL' }}</h3> 61 <h3 class="leftboderTT">{{ language==0?'无锡WDSF亚洲体育舞蹈节':'WUXI WDSF ASIAN DANCESPORT FESTIVAL' }}</h3>
62 <div class="content" v-if="language==0"> 62 <!-- <div class="content" v-if="language==0">-->
63 无锡WDSF亚洲体育舞蹈节是由世界体育舞蹈(无锡)中心(世界体育舞蹈联合、亚洲体育舞蹈联合、中国体育舞蹈联合会和无锡市人民政府共建)打造面向全球的、长期落户的、城市自主的品牌赛事。 63 <!-- 无锡WDSF亚洲体育舞蹈节是由世界体育舞蹈(无锡)中心(世界体育舞蹈联合、亚洲体育舞蹈联合、中国体育舞蹈联合会和无锡市人民政府共建)打造面向全球的、长期落户的、城市自主的品牌赛事。-->
64 <br/> 64 <!-- <br/>-->
65 65
66 &ensp;&ensp;&ensp;&ensp;2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。 66 <!-- &ensp;&ensp;&ensp;&ensp;2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。-->
67 <br/> 67 <!-- <br/>-->
68 68
69 &ensp;&ensp;&ensp;&ensp;2024年7月17日至21日将继续举办第二届无锡2024年WDSF亚洲体育舞蹈节,包括2024年WDSF世界拉丁舞锦标赛、2024年WDSF世界青年标准舞锦标赛、2024年WDSF世界少年Ⅱ拉丁舞锦标赛、2024年WDSF大奖赛(标准舞、拉丁舞)、 69 <!-- &ensp;&ensp;&ensp;&ensp;2024年7月17日至21日将继续举办第二届无锡2024年WDSF亚洲体育舞蹈节,包括2024年WDSF世界拉丁舞锦标赛、2024年WDSF世界青年标准舞锦标赛、2024年WDSF世界少年Ⅱ拉丁舞锦标赛、2024年WDSF大奖赛(标准舞、拉丁舞)、-->
70 2024年WDSF职业标准舞/拉丁舞世界杯、2024年WDSF公开赛(标准舞/拉丁舞)以及2024年全国青少年体育舞蹈锦标赛等一系列重点赛事。 70 <!-- 2024年WDSF职业标准舞/拉丁舞世界杯、2024年WDSF公开赛(标准舞/拉丁舞)以及2024年全国青少年体育舞蹈锦标赛等一系列重点赛事。-->
71 预计届时会吸引约40个国家和地区的3000名优秀体育舞蹈选手参赛,将为全球体育舞蹈爱好者呈现一场精彩绝伦的视觉盛宴。 71 <!-- 预计届时会吸引约40个国家和地区的3000名优秀体育舞蹈选手参赛,将为全球体育舞蹈爱好者呈现一场精彩绝伦的视觉盛宴。-->
72 72
73 <div class="imgbox"> 73 <!-- <div class="imgbox">-->
74 <img src="/img/123.png"/> 74 <!-- <img src="/img/123.png"/>-->
75 </div> 75 <!-- </div>-->
76 </div> 76 <!-- </div>-->
77 <div class="content" v-else> 77 <!-- <div class="content" v-else>-->
78 Wuxi WDSF Asian DanceSport Festival is a globally oriented, permanently settled, 78 <!-- Wuxi WDSF Asian DanceSport Festival is a globally oriented, permanently settled,-->
79 city-owned brand event created by the World DanceSport (Wuxi) Center (jointly 79 <!-- city-owned brand event created by the World DanceSport (Wuxi) Center (jointly-->
80 established by the World DanceSport Federation, DanceSport Asia, Chinese 80 <!-- established by the World DanceSport Federation, DanceSport Asia, Chinese-->
81 DanceSport Federation, and Wuxi Municipal People’s Government). 81 <!-- DanceSport Federation, and Wuxi Municipal People’s Government).-->
82 <br/><br/> 82 <!-- <br/><br/>-->
83 &ensp;&ensp;&ensp;&ensp;In July 2023, the WDSF Asian DanceSport Festival·Wuxi 2023 was held for the first 83 <!-- &ensp;&ensp;&ensp;&ensp;In July 2023, the WDSF Asian DanceSport Festival·Wuxi 2023 was held for the first-->
84 time, including the 2023 WDSF World Championship Standard, 2023 WDSF 84 <!-- time, including the 2023 WDSF World Championship Standard, 2023 WDSF-->
85 DanceSport Grand Slam (Wuxi), 2023 China DanceSport Open Series (Wuxi), which 85 <!-- DanceSport Grand Slam (Wuxi), 2023 China DanceSport Open Series (Wuxi), which-->
86 attracted a total of 1,716 top-level dancers from 39 countries and regions around the 86 <!-- attracted a total of 1,716 top-level dancers from 39 countries and regions around the-->
87 globe. Meanwhile, the WDSF World DanceSport (Wuxi) Center was successfully 87 <!-- globe. Meanwhile, the WDSF World DanceSport (Wuxi) Center was successfully-->
88 established in Wuxi, China, with the guiding principle of "festivals with competitions 88 <!-- established in Wuxi, China, with the guiding principle of "festivals with competitions-->
89 and competitions becoming festivals", and the "four parties" working together to serve 89 <!-- and competitions becoming festivals", and the "four parties" working together to serve-->
90 dancers from all over the world. 90 <!-- dancers from all over the world.-->
91 <br/><br/> 91 <!-- <br/><br/>-->
92 &ensp;&ensp;&ensp;&ensp;The 2nd WDSF Asian DanceSport Festival·Wuxi 2024 will be organized from 17th to 92 <!-- &ensp;&ensp;&ensp;&ensp;The 2nd WDSF Asian DanceSport Festival·Wuxi 2024 will be organized from 17th to-->
93 21st July 2024, including a series of key events such as the WDSF World 93 <!-- 21st July 2024, including a series of key events such as the WDSF World-->
94 Championship Latin 2024, WDSF World Championship Youth Standard 2024, WDSF 94 <!-- Championship Latin 2024, WDSF World Championship Youth Standard 2024, WDSF-->
95 World Championship Junior II Latin 2024, WDSF Grand Slam Latin & Standard 2024, 95 <!-- World Championship Junior II Latin 2024, WDSF Grand Slam Latin & Standard 2024,-->
96 WDSF PD World Cup Latin & Standard 2024, WDSF Open Latin & Standard 2024 96 <!-- WDSF PD World Cup Latin & Standard 2024, WDSF Open Latin & Standard 2024-->
97 and 2024 National Youth DanceSport Championships etc. It is expected to attract 97 <!-- and 2024 National Youth DanceSport Championships etc. It is expected to attract-->
98 3,000 outstanding dancers from about 40 countries and regions to participate in the 98 <!-- 3,000 outstanding dancers from about 40 countries and regions to participate in the-->
99 event, which will present a wonderful visual feast for global DanceSport fans. 99 <!-- event, which will present a wonderful visual feast for global DanceSport fans.-->
100 </div> 100 <!-- </div>-->
101 101
102 <!-- </div>--> 102 <!-- </div>-->
103 103
......
...@@ -2,8 +2,10 @@ ...@@ -2,8 +2,10 @@
2 <div> 2 <div>
3 <div class="box"> 3 <div class="box">
4 <div class="indexTitle"> 4 <div class="indexTitle">
5 <h3 class="leftboderTT">{{ language==0?'我的发票':'My invoice' }} 5 <h3 class="leftboderTT">{{ language == 0 ? '我的发票' : 'My invoice' }}
6 <el-button @click="goAdd" type="primary" class="btn-lineG fr">{{ language==0?'开发票':'Invoicing' }}</el-button> 6 <el-button @click="goAdd" type="primary" class="btn-lineG fr">
7 {{language == 0 ? '开发票' : 'Invoicing' }}
8 </el-button>
7 </h3> 9 </h3>
8 </div> 10 </div>
9 <el-card class="mt30 mb60"> 11 <el-card class="mt30 mb60">
...@@ -19,7 +21,7 @@ ...@@ -19,7 +21,7 @@
19 <span v-if="b.invoiceForm=='2'">纸质普票</span> 21 <span v-if="b.invoiceForm=='2'">纸质普票</span>
20 <span v-if="b.invoiceForm=='3'">纸质专票</span> 22 <span v-if="b.invoiceForm=='3'">纸质专票</span>
21 </div> 23 </div>
22 <div>¥ <span>{{b.total}}</span></div> 24 <div>¥ <span>{{ b.total }}</span></div>
23 </div> 25 </div>
24 <div style="margin: 20px 0 0;display: flex;justify-content: space-between;"> 26 <div style="margin: 20px 0 0;display: flex;justify-content: space-between;">
25 <div class="status"> 27 <div class="status">
...@@ -30,10 +32,11 @@ ...@@ -30,10 +32,11 @@
30 </div> 32 </div>
31 <div> 33 <div>
32 <button class="billbtn" v-if="b.isInvoice == '0'" @click.stop="editDetail(b)"> 34 <button class="billbtn" v-if="b.isInvoice == '0'" @click.stop="editDetail(b)">
33 {{ language == 0 ? '修改发票':'Edit' }} 35 {{ language == 0 ? '修改发票' : 'Edit' }}
34 </button> 36 </button>
35 <button class="billbtn rbtn-m-kx" 37 <button class="billbtn rbtn-m-kx"
36 @click.stop="showDetail(b)">{{ language==0?'详情':'Detail' }}</button> 38 @click.stop="showDetail(b)">{{ language == 0 ? '详情' : 'Detail' }}
39 </button>
37 40
38 </div> 41 </div>
39 </div> 42 </div>
...@@ -51,12 +54,13 @@ ...@@ -51,12 +54,13 @@
51 54
52 <script setup> 55 <script setup>
53 import ChoseBills from './component/choseBills' 56 import ChoseBills from './component/choseBills'
54 import { ref } from 'vue' 57 import {ref} from 'vue'
55 import {getInvoiceByActiveId} from "@/apiPc/booking" 58 import {getInvoiceByActiveId} from "@/apiPc/booking"
56 import {getCurrentInstance} from "@vue/runtime-core" 59 import {getCurrentInstance} from "@vue/runtime-core"
57 import {useStorage} from "@vueuse/core/index"; 60 import {useStorage} from "@vueuse/core/index";
58 import useUserStore from "@/store/modules/user"; 61 import useUserStore from "@/store/modules/user";
59 const language= useStorage('language',0) 62
63 const language = useStorage('language', 0)
60 const {proxy} = getCurrentInstance() 64 const {proxy} = getCurrentInstance()
61 const list = ref([]) 65 const list = ref([])
62 const user = useUserStore().user 66 const user = useUserStore().user
...@@ -64,34 +68,50 @@ const query = ref({ ...@@ -64,34 +68,50 @@ const query = ref({
64 createById: user.userId 68 createById: user.userId
65 }) 69 })
66 getList() 70 getList()
71
67 function getList() { 72 function getList() {
68 if(!user){ 73 if (!user) {
69 useUserStore().setReLogin() 74 useUserStore().setReLogin()
70 return 75 return
71 } 76 }
72 getInvoiceByActiveId(query.value).then(res=>{ 77 getInvoiceByActiveId(query.value).then(res => {
73 list.value = res.rows 78 list.value = res.rows
74 }) 79 })
75 } 80 }
81
76 function goAdd() { 82 function goAdd() {
77 //选择开票订单 83 //选择开票订单
78 var obj = { 84 var obj = {
79 title: language.value==0?'选择开票订单':'Select the invoicing order', 85 title: language.value == 0 ? '选择开票订单' : 'Select the invoicing order',
80 show: true, 86 show: true,
81 choosedList:[] 87 choosedList: []
82 } 88 }
83 proxy.$refs['dialogChoseBillsRef'].open(obj) 89 proxy.$refs['dialogChoseBillsRef'].open(obj)
84 } 90 }
91
92 function editDetail(item) {
93
94 }
95
85 function getChoosed(list) { 96 function getChoosed(list) {
86 console.log(list) 97 console.log(list)
98 if (list.length > 0) {
99 // 去开票
100 }
87 } 101 }
102
88 </script> 103 </script>
89 104
90 <style scoped lang="scss"> 105 <style scoped lang="scss">
91 .leftboderTT{ 106 .leftboderTT {
92 font-size: 20px; 107 font-size: 20px;
93 .btn-lineG{text-transform: uppercase; 108
94 span{color: #fff;} 109 .btn-lineG {
110 text-transform: uppercase;
111
112 span {
113 color: #fff;
114 }
95 } 115 }
96 } 116 }
97 </style> 117 </style>
......
1 <template>
2 <div>
3 <div class="box">
4 <el-card :body-style="{ padding: '0px' }" class="mt20">
5 <div slot="header">
6 <div class="bg-lineg">{{ language == 0 ? '发票开具' : 'Invoice application' }}</div>
7 </div>
8 <el-row class="pd20" :gutter="20">
9 <el-col :span="24">
10 <!--已选订单-->
11 <div class="border-info" v-for="b in list" :key="b.id">
12 <h3>{{ b.name }}</h3>
13 <!-- 酒店订单-->
14 <div v-if="b.orderType == 0">
15 <p>{{b.messageObj.roomInfo}}</p>
16 <p>{{b.messageObj.roomStayDate}}</p>
17 <p class="poPrice">¥{{b.total}}</p>
18 </div>
19 <!-- 接送订单-->
20 <div v-if="b.orderType == 1">
21 <p v-for="(car,index) in b.messageObj.carsList" :key="index" v-show="car.num>0">
22 <span>{{car.name}}{{car.num}}</span>
23 </p>
24 <p class="poPrice">¥{{b.total}}</p>
25 </div>
26 <!-- 餐饮订单-->
27 <div v-if="b.orderType == 2">
28 <p v-for="(n,index) in b.messageObj.foodsList" :key="index">
29 <span v-if="n.num > 0">
30 {{n.name}}({{n.categoryName}}) <span>{{n.num}}</span>
31 </span>
32 </p>
33 <p class="poPrice">¥{{b.total}}</p>
34 </div>
35 </div>
36
37 <div class="leftboderTT">{{ language == 0 ? '开票信息' : 'Invoice information' }}</div>
38 <div class="border-rr mt20 pd20">
39 <el-form class="mw500" :model="form" :label-width="language == 0 ?'100':'150'" :rules="rules" ref="formRef">
40 <el-form-item :label="'开票金额'">
41 <span class="bigprice">¥{{totalMoney}}</span>
42 </el-form-item>
43
44 <el-form-item :label="`发票形式`" required>
45 <el-radio-group v-model="form.invoiceForm">
46 <el-radio value="1">{{ language == 0 ? '电子发票' : 'E-invoice' }}</el-radio>
47 <el-radio value="2">{{ language == 0 ? '纸质普票' : 'Paper-invoice' }}</el-radio>
48 <el-radio value="3">{{ language == 0 ? '纸质专票' : 'Paper-special-invoice' }}</el-radio>
49 </el-radio-group>
50 </el-form-item>
51 <el-form-item :label="`邮箱`" required>
52 <el-input v-model="form.contacts"/>
53 </el-form-item>
54 <el-form-item :label="`邮寄地址`" required>
55 <el-button plain type="primary" size="small" v-if="addrList.length==0" @click="goEditAddress">
56 +{{ language==0?'添加地址':'Add' }}
57 </el-button>
58 <div v-else class="flexCenter">
59 <div>
60 <div class="bigSize">{{nowAddress.contact}} {{nowAddress.phone}}</div>
61 <div class="smallSize">{{nowAddress.addName}}</div>
62 </div>
63 <a @click="goEditAddress" class="text-primary">
64 <el-icon><Switch /></el-icon>切换
65 </a>
66 </div>
67 </el-form-item>
68 <el-form-item :label="`发票类型`" required>
69 <el-radio-group v-model="form.invoiceType">
70 <el-radio value="0">{{ language == 0 ? '企业' : 'Company' }}</el-radio>
71 <el-radio value="1">{{ language == 0 ? '个人非企业' : 'Individual' }}</el-radio>
72 </el-radio-group>
73 </el-form-item>
74 <el-form-item :label="`发票抬头`" required>
75 <el-input v-model="form.invoiceTitle"/>
76 </el-form-item>
77 <el-form-item :label="`税号`" required v-if="form.invoiceType=='0'">
78 <el-input v-model="form.invoiceTfn"/>
79 </el-form-item>
80 <div v-if="form.invoiceForm=='3'&&form.invoiceType=='0'">
81 <el-form-item :label="`地址`" required>
82 <el-input v-model="form.invoiceAddress"/>
83 </el-form-item>
84 <el-form-item :label="`电话`" required>
85 <el-input v-model="form.invoicePhone"/>
86 </el-form-item>
87 <el-form-item :label="`开户行`" required>
88 <el-input v-model="form.invoiceBank"/>
89 </el-form-item>
90 <el-form-item :label="`账户`" required>
91 <el-input v-model="form.invoiceAccount"/>
92 </el-form-item>
93 </div>
94 </el-form>
95 </div>
96 </el-col>
97 </el-row>
98
99 <el-row justify="center" align="middle" class="pd20">
100 <el-col :span="12" class="text-center">
101 <el-button type="primary" class="btn-lineG w200px" size="large" round @click="submit">
102 {{ language==0?'提交':'Submit' }}
103 </el-button>
104 </el-col>
105 </el-row>
106 </el-card>
107 <div style="height: 60px;"></div>
108
109 </div>
110 </div>
111 <address-list-dialog ref="dialogAddressListRef" @submit="getAddress"/>
112 </template>
113
114 <script setup>
115 import {useRouter, useRoute} from "vue-router";
116 import {ref, reactive, onMounted} from "vue";
117 import {useStorage} from "@vueuse/core/index";
118 import AddressListDialog from "./component/addressList"
119 import dayjs from 'dayjs'
120 import {ElMessage,ElMessageBox} from "element-plus";
121 import useUserStore from "@/store/modules/user";
122 import {getCurrentInstance} from "@vue/runtime-core";
123 import {addressList, editInvoice, submitInvoice} from "@/apiPc/booking";
124 const {proxy} = getCurrentInstance()
125
126 const user = useUserStore().user
127 const language = useStorage('language', 0)
128 const router = useRouter()
129 const route = useRoute()
130 const form = ref({
131 invoiceForm: '1',
132 invoiceType: '0'
133 })
134 const list = ref([])
135 const addrList = ref([])
136 const nowAddress = ref({})
137 const totalMoney = ref(0)
138 const choseDays = ref([])
139 const rules = ref({})
140 const isEdit = ref(false)
141
142 onMounted(() => {
143 if(route.query.orders){
144 list.value = JSON.parse(decodeURIComponent(route.query.orders)) || []
145 }
146 if (route.query.totalMoney) {
147 totalMoney.value = route.query.totalMoney
148 }
149 getAddrList()
150 })
151 function goEditAddress(id) {
152 var obj = {
153 title: language.value==0?'地址列表':'Address list',
154 show: true,
155 id: id
156 }
157 proxy.$refs['dialogAddressListRef'].open(obj)
158 }
159 function getAddrList() {
160 addressList(user.userId).then(res=>{
161 addrList.value = res.rows
162 if(addrList.value.length>0){
163 nowAddress.value = addrList.value[0]
164 }
165 })
166 }
167 function getAddress(obj) {
168 console.log(obj)
169 nowAddress.value = obj
170 console.log(nowAddress.value)
171 }
172 function submit() {
173 if(!user){
174 useUserStore().setReLogin()
175 return
176 }
177
178 // 提交确认
179 ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
180 confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
181 cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
182 type: 'warning'
183 }).then(() => {
184 form.value.total = totalMoney.value
185 form.value.version = 2
186 if (isEdit.value) {
187 update()
188 } else {
189 add()
190 }
191 })
192 }
193
194 function update() {
195 editInvoice(form.value).then(res=>{
196 //返回列表
197 backList()
198 })
199 }
200 function add() {
201 submitInvoice(form.value).then(res=>{
202 //返回列表
203 backList()
204 })
205 }
206 function backList() {
207 router.push({
208 name: 'invoice'
209 })
210 }
211 </script>
212
213 <style scoped lang="scss">
214 .bigMoney {
215 font-size: 36px !important;
216 font-family: 'DIN Alternate';
217 font-weight: bold;
218 }
219 .btn-lineG{font-size: 16px}
220 .bg-lineg {
221 height: 40px;
222 line-height: 40px;
223 font-size: 18px;
224 text-align: center;
225 }
226
227 .leftboderTT {
228 font-weight: 600;
229 font-size: 16px;
230 color: #453DEA;
231 }
232
233 .border-rr {
234 border-radius: 5px;
235 border: 1px solid #DCDFE6;
236 }
237
238 .room {
239 font-weight: 400;
240 font-size: 14px;
241 color: #929AA0;
242 }
243
244 .ccitemBox {
245 overflow: auto;
246
247 label {
248 margin: 10px 0;
249 display: block;
250 min-height: 30px;
251
252 span {
253 color: #FF8124;
254 font-family: DIN Alternate;
255 font-size: 24px;
256 }
257 }
258 }
259
260 .ccitem {
261 display: flex;
262 justify-content: space-between;
263 font-size: 15px;
264 color: #666;
265 margin: 5px 0 10px;
266
267 label {
268 font-size: 16px;
269 color: #000;
270 }
271
272 span {
273 font-size: 13px;
274 }
275 }
276
277 .red {
278 color: #FF8124;
279 }
280 .tip{font-size: 14px;color: #666;padding: 0 10px;}
281 .mw500{max-width: 500px;margin: auto}
282 .bigSize {
283 font-size: 16px;
284 margin-bottom: 5px;
285 }
286
287 .smallSize {
288 font-size: 14px;
289 color: #999;
290 }
291
292 .flexCenter {
293 display: flex;
294 width: 100%;
295 align-items: center;
296 justify-content: space-between;
297 background: #f4f4f4;
298 padding: 10px;
299 box-sizing: border-box;
300 }
301 .bigprice {
302 font-size: 20px;
303 line-height: 2;
304 }
305 </style>
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <img src="@/assets/booking/cl_text.png"> 4 <img v-if="language==0" src="@/assets/booking/cl_text_c.png">
5 <img v-else src="@/assets/booking/cl_text_e.png">
5 </div> 6 </div>
6 <div class="box"> 7 <div class="box">
7 <div class="searchBar"> 8 <div class="searchBar">
...@@ -18,7 +19,7 @@ ...@@ -18,7 +19,7 @@
18 <template #title> 19 <template #title>
19 <el-row align="middle" :gutter="20" class="w100"> 20 <el-row align="middle" :gutter="20" class="w100">
20 <el-col :span="4"> 21 <el-col :span="4">
21 <div class="index">路线{{index+1}} 22 <div class="index">{{ language==0?'路线':'Route' }}{{index+1}}
22 <img src="@/assets/booking/arrow.png"/> 23 <img src="@/assets/booking/arrow.png"/>
23 </div> 24 </div>
24 </el-col> 25 </el-col>
...@@ -43,17 +44,18 @@ ...@@ -43,17 +44,18 @@
43 </div> 44 </div>
44 </el-col> 45 </el-col>
45 <el-col :span="14"> 46 <el-col :span="14">
46 <h3 class="name">{{ r.carType }} 47 <h3 class="name flex">{{ r.carType }}
47 <div class="tagbox"> 48 <div class="tagbox">
48 <span class="tag">{{r.carColor}}</span> 49 <span class="tag">{{r.carColor}}</span>
49 <span class="tag" v-show="r.checkOut==1">可送车</span> 50 <span class="tag" v-show="r.checkOut==1">可送车</span>
50 <span class="tag" v-show="r.checkIn==1">可接车</span> 51 <span class="tag" v-show="r.checkIn==1">可接车</span>
51 </div> 52 </div>
52 </h3> 53 </h3>
53 <el-row :gutter="10"> 54 <div class="text-gray mt20">
54 <el-col :span="8">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</el-col> 55 <span class="mr20">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</span>
55 <el-col :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</el-col> 56 <span class="mr20">|</span>
56 </el-row> 57 <span :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</span>
58 </div>
57 </el-col> 59 </el-col>
58 <el-col :span="3"> 60 <el-col :span="3">
59 <div class="price" v-if="language==0">¥ 61 <div class="price" v-if="language==0">¥
...@@ -71,7 +73,7 @@ ...@@ -71,7 +73,7 @@
71 73
72 </el-col> 74 </el-col>
73 <el-col :span="3"> 75 <el-col :span="3">
74 <el-button class="btn-lineG w100" round type="primary" @click="goOrder(h,r)">{{ language==0?'我要预':'Select' }}</el-button> 76 <el-button class="btn-lineG w100" round type="primary" @click="goOrder(h,r)">{{ language==0?'我要预':'Select' }}</el-button>
75 </el-col> 77 </el-col>
76 </el-row> 78 </el-row>
77 </div> 79 </div>
...@@ -181,6 +183,8 @@ function goOrder(item,car) { ...@@ -181,6 +183,8 @@ function goOrder(item,car) {
181 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} 183 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
182 span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} 184 span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);}
183 } 185 }
186 .name.flex{align-items: center;}
187 .name .tagbox{margin: 0 0 0 15px;}
184 .room { 188 .room {
185 background: #FAFBFD;margin: 20px 0 0;padding: 20px; 189 background: #FAFBFD;margin: 20px 0 0;padding: 20px;
186 border: 1px solid #E5E5E5; 190 border: 1px solid #E5E5E5;
......
...@@ -17,13 +17,13 @@ ...@@ -17,13 +17,13 @@
17 <h3 class="esp">{{ item.checkOut }}</h3> 17 <h3 class="esp">{{ item.checkOut }}</h3>
18 </div> 18 </div>
19 <div class="flex"> 19 <div class="flex">
20 <img class="w150px br10 as16_9" :src="fillImgUrl(car.photos?.split(',')[0])"/> 20 <el-image class="w150px br10 as16_9" fit="cover" :src="fillImgUrl(car.photos?.split(',')[0])"/>
21 <div class="ml20"> 21 <div class="ml20">
22 <div class="roomType">{{ car.carType }}</div> 22 <div class="roomType">{{ car.carType }}</div>
23 <div class="tagbox"> 23 <div class="tagbox">
24 <span class="tag">{{ car.carColor }}</span> 24 <span class="tag">{{ car.carColor }}</span>
25 <span class="tag" v-show="car.checkOut==1">可送车</span> 25 <span class="tag" v-show="car.checkOut==1">{{ language == 0 ?'可送车':'Can send car' }}</span>
26 <span class="tag" v-show="car.checkIn==1">可接车</span> 26 <span class="tag" v-show="car.checkIn==1">{{ language == 0 ?'可接车':'Can pick up' }}</span>
27 </div> 27 </div>
28 <div class="room"> 28 <div class="room">
29 <span>{{ language == 0 ? '座位数' : 'Seats' }}: {{ car.carSeat }}</span> 29 <span>{{ language == 0 ? '座位数' : 'Seats' }}: {{ car.carSeat }}</span>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
38 38
39 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div> 39 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
40 <div class="border-rr mt20 pd20"> 40 <div class="border-rr mt20 pd20">
41 <el-form :model="form" :label-width="language == 0 ?'120':'150'" :rules="rules" ref="formRef"> 41 <el-form :model="form" :label-width="language == 0 ?'120':'200'" :rules="rules" ref="formRef">
42 <el-form-item :label="language==0?'车辆数量':'cars'" required prop="num"> 42 <el-form-item :label="language==0?'车辆数量':'cars'" required prop="num">
43 <el-input-number v-model="form.num" :min="1" @change="changecarNum"/> 43 <el-input-number v-model="form.num" :min="1" @change="changecarNum"/>
44 </el-form-item> 44 </el-form-item>
...@@ -53,9 +53,9 @@ ...@@ -53,9 +53,9 @@
53 </el-form-item> 53 </el-form-item>
54 54
55 <div v-show="form.useType?.indexOf('0')> -1"> 55 <div v-show="form.useType?.indexOf('0')> -1">
56 <h3 class="afterLine">接站信息</h3> 56 <h3 class="afterLine">{{ language==0?'接站信息':'Pick up information' }}</h3>
57 <el-form-item :label="language==0?'用车日期':'Date'" required> 57 <el-form-item :label="language==0?'用车日期':'Date'" required>
58 <el-date-picker v-model="date1" 58 <el-date-picker v-model="date1" :disabled-date="disabledDate"
59 type="date" 59 type="date"
60 :placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD" 60 :placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD"
61 value-format="YYYY-MM-DD"/> 61 value-format="YYYY-MM-DD"/>
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
64 <el-form-item :label="language==0?'用车时间':'Time'" required> 64 <el-form-item :label="language==0?'用车时间':'Time'" required>
65 <el-time-picker 65 <el-time-picker
66 v-model="revTime1" :start="car.operStart" :end="car.operEnd" 66 v-model="revTime1" :start="car.operStart" :end="car.operEnd"
67 placeholder="Arbitrary time" format="HH:mm" value-format="HH:mm" @change="bindTimeChange" 67 format="HH:mm" value-format="HH:mm" @change="bindTimeChange"
68 /> 68 />
69 </el-form-item> 69 </el-form-item>
70 <el-form-item :label="language==0?'联系人':'Contacts'" required> 70 <el-form-item :label="language==0?'联系人':'Contacts'" required>
...@@ -73,16 +73,16 @@ ...@@ -73,16 +73,16 @@
73 <el-form-item :label="language==0?'联系电话':'Phone'" required> 73 <el-form-item :label="language==0?'联系电话':'Phone'" required>
74 <el-input type="text" v-model="form.pickUpBo.phone"/> 74 <el-input type="text" v-model="form.pickUpBo.phone"/>
75 </el-form-item> 75 </el-form-item>
76 <el-form-item label="人数" required> 76 <el-form-item :label="language==0?'人数':'Person Count'" required>
77 <el-input type="text" v-model="form.pickUpBo.count"/> 77 <el-input type="text" v-model="form.pickUpBo.count"/>
78 </el-form-item> 78 </el-form-item>
79 <el-form-item label="航班/火车班次" required> 79 <el-form-item :label="language==0?'航班/火车班次:':'Flight/Train No'" required>
80 <el-input type="text" v-model="form.pickUpBo.no"/> 80 <el-input type="text" v-model="form.pickUpBo.no"/>
81 </el-form-item> 81 </el-form-item>
82 <el-form-item label="接机/接站地点" required> 82 <el-form-item :label="language==0?'接机/接站地点':'Pick up/Drop off Address'" required>
83 <el-input type="text" v-model="form.pickUpBo.noAddress"/> 83 <el-input type="text" v-model="form.pickUpBo.noAddress"/>
84 </el-form-item> 84 </el-form-item>
85 <el-form-item label="送达地点" required> 85 <el-form-item :label="language==0?'送达地点':'Delivery Address'" required>
86 <el-input type="text" v-model="form.pickUpBo.deliveryAddress"/> 86 <el-input type="text" v-model="form.pickUpBo.deliveryAddress"/>
87 </el-form-item> 87 </el-form-item>
88 <el-form-item :label="language==0?'备注':'Remarks'"> 88 <el-form-item :label="language==0?'备注':'Remarks'">
...@@ -90,9 +90,9 @@ ...@@ -90,9 +90,9 @@
90 </el-form-item> 90 </el-form-item>
91 </div> 91 </div>
92 <div v-show="form.useType?.indexOf('1')> -1"> 92 <div v-show="form.useType?.indexOf('1')> -1">
93 <h3 class="afterLine">送站信息</h3> 93 <h3 class="afterLine">{{ language==0?'送站信息':'Drop off information' }}</h3>
94 <el-form-item :label="language==0?'用车日期':'Date'" required> 94 <el-form-item :label="language==0?'用车日期':'Date'" required>
95 <el-date-picker v-model="date2" 95 <el-date-picker v-model="date2" :disabled-date="disabledDate"
96 type="date" 96 type="date"
97 :placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD" 97 :placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD"
98 value-format="YYYY-MM-DD"/> 98 value-format="YYYY-MM-DD"/>
...@@ -101,7 +101,7 @@ ...@@ -101,7 +101,7 @@
101 <el-form-item :label="language==0?'用车时间':'Time'" required> 101 <el-form-item :label="language==0?'用车时间':'Time'" required>
102 <el-time-picker 102 <el-time-picker
103 v-model="revTime2" :start="car.operStart" :end="car.operEnd" 103 v-model="revTime2" :start="car.operStart" :end="car.operEnd"
104 placeholder="Arbitrary time" format="HH:mm" value-format="HH:mm" @change="bindTimeChange2" 104 format="HH:mm" value-format="HH:mm" @change="bindTimeChange2"
105 /> 105 />
106 </el-form-item> 106 </el-form-item>
107 <el-form-item :label="language==0?'联系人':'Contacts'" required> 107 <el-form-item :label="language==0?'联系人':'Contacts'" required>
...@@ -158,12 +158,11 @@ ...@@ -158,12 +158,11 @@
158 </label> 158 </label>
159 </el-col> 159 </el-col>
160 <el-col :span="12" class="text-right"> 160 <el-col :span="12" class="text-right">
161 <el-button type="primary" class="btn-lineG" @click="submit" round :loading="payLoading">确认付款</el-button> 161 <el-button type="primary" class="btn-lineG w200px" @click="submit" round :loading="payLoading">{{ language == 0 ?'确认付款':'Pay' }}</el-button>
162 </el-col> 162 </el-col>
163 </el-row> 163 </el-row>
164 </el-card> 164 </el-card>
165 <div style="height: 60px;"></div> 165 <div style="height: 60px;"></div>
166
167 </div> 166 </div>
168 </div> 167 </div>
169 </template> 168 </template>
...@@ -172,7 +171,7 @@ ...@@ -172,7 +171,7 @@
172 import {useRouter, useRoute} from "vue-router"; 171 import {useRouter, useRoute} from "vue-router";
173 import {ref, reactive, onMounted} from "vue"; 172 import {ref, reactive, onMounted} from "vue";
174 import {useStorage} from "@vueuse/core/index"; 173 import {useStorage} from "@vueuse/core/index";
175 import {checkResidueRoom, newsSubmitOrderHotel, submitOrderCar} from "@/apiPc/booking" 174 import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel, submitOrderCar} from "@/apiPc/booking"
176 import dayjs from 'dayjs' 175 import dayjs from 'dayjs'
177 import {ElMessage, ElMessageBox} from "element-plus"; 176 import {ElMessage, ElMessageBox} from "element-plus";
178 import useUserStore from "@/store/modules/user"; 177 import useUserStore from "@/store/modules/user";
...@@ -204,6 +203,7 @@ const rzUserArr = ref([]) ...@@ -204,6 +203,7 @@ const rzUserArr = ref([])
204 const money = ref(0) 203 const money = ref(0)
205 const choseRooms = ref([]) 204 const choseRooms = ref([])
206 const rules = ref({}) 205 const rules = ref({})
206 const lform = ref({})
207 207
208 208
209 onMounted(() => { 209 onMounted(() => {
...@@ -211,6 +211,7 @@ onMounted(() => { ...@@ -211,6 +211,7 @@ onMounted(() => {
211 car.value = JSON.parse(decodeURIComponent(route.query.car)) 211 car.value = JSON.parse(decodeURIComponent(route.query.car))
212 money.value = 0 212 money.value = 0
213 console.log(item.value, car.value) 213 console.log(item.value, car.value)
214 initDays()
214 }) 215 })
215 216
216 function changeUseType(e) { 217 function changeUseType(e) {
...@@ -241,6 +242,20 @@ function bindTimeChange(e) { ...@@ -241,6 +242,20 @@ function bindTimeChange(e) {
241 function bindTimeChange2(e) { 242 function bindTimeChange2(e) {
242 revTime2.value = e 243 revTime2.value = e
243 } 244 }
245 function initDays() {
246 getBaseInfoByActiveId(route.params.cptId).then(res=>{
247 lform.value = res.data
248 }).catch(err=>{
249 console.log(err)
250 })
251 }
252 function disabledDate(date) {
253 // const today = dayjs().format('YYYY-MM-DD')
254 if (form.value.carStart) {
255 return date.getTime() > dayjs(form.value.carStart).valueOf()
256 }
257 return true
258 }
244 function submit() { 259 function submit() {
245 if (!user) { 260 if (!user) {
246 useUserStore().setReLogin() 261 useUserStore().setReLogin()
......
1 <template>
2 <el-dialog v-model="show" :title="title" width="1000px" append-to-body>
3 <el-button @click="add" type="primary" plain class="mb20">
4 {{language==0?'新建':'Add'}}
5 </el-button>
6 <el-table height="50vh" ref="allBills" :data="tableData" v-loading="loading">
7 <el-table-column prop="contact" :label="language==0?'联系人':'Contact'" min-width="100px">
8 <template #default="scope">
9 <div v-if="scope.row.id">{{scope.row.contact}}</div>
10 <el-input v-else v-model="scope.row.contact"/>
11 </template>
12 </el-table-column>
13 <el-table-column prop="phone" :label="language==0?'联系电话':'Phone'" min-width="120px">
14 <template #default="scope">
15 <div v-if="scope.row.id">{{scope.row.phone}}</div>
16 <el-input v-else v-model="scope.row.phone"/>
17 </template>
18 </el-table-column>
19 <el-table-column prop="id" :label="language==0?'地区':'Detail'" min-width="150px">
20 <template #default="scope">
21 <div v-if="scope.row.id">{{scope.row.provinceName}}{{scope.row.cityName}}{{scope.row.areaName}}</div>
22 <el-cascader v-else v-model="scope.row.regionArr" style="width: 100%;" :options="regionsList"
23 :props="{ label:'text' }" @change="changeRegion"
24 />
25 </template>
26 </el-table-column>
27 <el-table-column prop="address" :label="language==0?'详细地址':'Address'" min-width="150px">
28 <template #default="scope">
29 <div v-if="scope.row.id">{{scope.row.address}}</div>
30 <el-input v-else type="textarea" rows="1" v-model="scope.row.address"/>
31 </template>
32 </el-table-column>
33 <el-table-column prop="total" :label="language==0?'操作':'Operation'" fixed="right" align="center" width="100">
34 <template #default="scope">
35 <div v-if="scope.row.id">
36 <a class="text-primary mr10" @click="del(scope.row.id)">{{language==0?'删除':'Delete'}}</a>
37 <!-- <el-button text type="primary" @click="edit(scope.row.id)">{{language==0?'编辑':'Edit'}}</el-button>-->
38 <a class="text-primary" @click="choose(scope.row)">{{language==0?'选择':'Choose'}}</a>
39 </div>
40 <div v-else>
41 <a class="text-primary mr10" @click="save(scope.row)">{{language==0?'保存':'Save'}}</a>
42 <a class="text-primary" @click="saveCancel(scope.row.id)">{{language==0?'取消':'Cancel'}}</a>
43 </div>
44 </template>
45 </el-table-column>
46 </el-table>
47 <paginationPc
48 v-show="total>0"
49 v-model:page="query.pageNum"
50 v-model:limit="query.pageSize"
51 :total="total"
52 @pagination="getList"
53 />
54 </el-dialog>
55 </template>
56
57 <script setup>
58 import {reactive, ref, toRefs, watch} from 'vue'
59 import {getCurrentInstance} from "@vue/runtime-core";
60 import {useStorage} from "@vueuse/core/index";
61 import {addAddress, addressList, delAddress, getCanInvoiceBills} from "@/apiPc/booking";
62 import {ElMessage, ElMessageBox} from "element-plus";
63 import useUserStore from "@/store/modules/user";
64 import * as match from "@/apiPc/match";
65 const {proxy} = getCurrentInstance()
66 const emit = defineEmits([ 'submit'])
67 const language= useStorage('language',0)
68 const user = useUserStore().user
69 const data = reactive({
70 tableData: [],
71 regionsList:[],
72 show: false,
73 loading: false,
74 title: '',
75 query:{
76 status:1
77 },
78 total:0
79 })
80 const { tableData,regionsList,show,loading,title,query,total} = toRefs(data)
81
82 const open = (params) => {
83 title.value = params.title
84 show.value = true
85 if(params.id == '0'){
86 // 新建
87
88 } else {
89 getList()
90 }
91 getRegionsList()
92 }
93 defineExpose({
94 open
95 })
96 const getList = () => {
97 loading.value = true
98 addressList(user.userId).then(res=>{
99 loading.value = false
100 tableData.value = res.rows
101 })
102 }
103 function getRegionsList() {
104 match.regionsList().then(res => {
105 regionsList.value = res.data
106 })
107 }
108 const changeRegion = (val) => {
109 console.log(val)
110 }
111 const save = (row) => {
112 console.log(row)
113 row.province = row.regionArr[0]
114 row.city = row.regionArr[1]||''
115 row.area = row.regionArr[2]||''
116 addAddress(row).then(res=>{
117 ElMessage.success('保存成功')
118 getList()
119 })
120 }
121 const choose = (row) => {
122 emit('submit',row)
123 show.value = false
124 }
125 const add = () => {
126 tableData.value.push({})
127 }
128 const edit = (row) => {
129
130 }
131 const del = (row) => {
132 ElMessageBox.confirm('确认删除?').then(() => {
133 delAddress(row.id).then(res=>{
134 ElMessage.success('删除成功')
135 getList()
136 })
137 })
138 }
139 const saveCancel = (row) => {
140 //删除最后一条
141 getList()
142 }
143 </script>
144
145 <style scoped lang="scss">
146
147 </style>
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <img src="@/assets/booking/cy_text.png"> 4 <img v-if="language==0" src="@/assets/booking/cy_text_c.png">
5 <img v-else src="@/assets/booking/cy_text_e.png">
5 </div> 6 </div>
6 <div class="box"> 7 <div class="box">
7 <div class="searchBar"> 8 <div class="searchBar">
8 <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">
9 </el-input> 10 </el-input>
10 <el-button size="large" type="primary" class="btn-lineG" icon="search">{{ language==0?'搜索':'Search' }}</el-button> 11 <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList">{{ language==0?'搜索':'Search' }}</el-button>
11 </div> 12 </div>
12 </div> 13 </div>
13 14
...@@ -17,16 +18,16 @@ ...@@ -17,16 +18,16 @@
17 <el-card> 18 <el-card>
18 <el-row class="hotel" align="middle" :gutter="20"> 19 <el-row class="hotel" align="middle" :gutter="20">
19 <el-col :span="12"> 20 <el-col :span="12">
20 <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/> 21 <el-image class="w100 as16_9" fit="cover" :src="fillImgUrl(h.photos?.split(',')[0])"/>
21 </el-col> 22 </el-col>
22 <el-col :span="12"> 23 <el-col :span="12">
23 <h3 class="esp m0">{{h.name}}</h3> 24 <h3 class="esp m0">{{h.name}}</h3>
24 <p class="esp_2 addr"> 25 <p class="esp addr">
25 <el-icon color="#929AA0"><LocationFilled /></el-icon> 26 <el-icon color="#929AA0"><LocationFilled /></el-icon>
26 {{h.addName}} 27 {{h.addName}}
27 </p> 28 </p>
28 <div class="price mb20" v-if="language==0"><i class="text-warning">¥</i><span class="text-warning">{{ h.price }}</span></div> 29 <div class="price mb10" v-if="language==0"><i class="text-warning">¥</i><span class="text-warning">{{ h.price || 0 }}</span></div>
29 <div class="price mb20" v-else><i class="text-warning"></i><span class="text-warning">{{ h.price }}</span>start</div> 30 <div class="price mb10" v-else><i class="text-warning"></i><span class="text-warning">{{ h.price || 0 }}</span>start</div>
30 <el-button class="btn-lineG" round type="primary" size="large" @click="goDetail(h)">{{ language==0?'立即预约':'Select' }}</el-button> 31 <el-button class="btn-lineG" round type="primary" size="large" @click="goDetail(h)">{{ language==0?'立即预约':'Select' }}</el-button>
31 32
32 </el-col> 33 </el-col>
...@@ -43,10 +44,11 @@ ...@@ -43,10 +44,11 @@
43 <script setup> 44 <script setup>
44 import {onMounted} from "@vue/runtime-core" 45 import {onMounted} from "@vue/runtime-core"
45 import * as booking from "@/apiPc/booking" 46 import * as booking from "@/apiPc/booking"
47 import {useRoute, useRouter} from "vue-router"
48 const route = useRoute()
46 const router = useRouter() 49 const router = useRouter()
47 const language = useStorage('language', 0) 50 const language = useStorage('language', 0)
48 import {getActivityRestaurantList} from "@/apiPc/booking"; 51 import {getActivityRestaurantList} from "@/apiPc/booking";
49 import {useRouter} from "vue-router";
50 import {useStorage} from "@vueuse/core/index"; 52 import {useStorage} from "@vueuse/core/index";
51 const query = ref({ 53 const query = ref({
52 name:'' 54 name:''
...@@ -57,7 +59,8 @@ onMounted(()=>{ ...@@ -57,7 +59,8 @@ onMounted(()=>{
57 }) 59 })
58 60
59 function getList() { 61 function getList() {
60 booking.getActivityRestaurantList(query.value).then(res=>{ 62 query.value.activityId = route.params.cptId
63 getActivityRestaurantList(query.value).then(res=>{
61 list.value = res.rows 64 list.value = res.rows
62 }) 65 })
63 } 66 }
......
...@@ -24,11 +24,18 @@ ...@@ -24,11 +24,18 @@
24 24
25 <div class="mt30"> 25 <div class="mt30">
26 <el-row :gutter="20"> 26 <el-row :gutter="20">
27 <el-col v-for="(p,index) in form?.photos?.split(',')" :span="index==0?12:6"> 27 <el-col :span="10">
28 <div class="imgbox hotelImg"> 28 <div class="imgbox hotelImg">
29 <img :src="fillImgUrl(p)"> 29 <el-image :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover" :preview-src-list="form?.photos?.split(',')"/>
30 </div> 30 </div>
31 </el-col> 31 </el-col>
32 <el-col :span="14">
33 <el-row class="h100" :gutter="20">
34 <el-col :span="8" v-for="(p,index) in form?.photos?.split(',').slice(1,7)" style="height: calc(50% - 10px)">
35 <div class="imgbox hotelImg"><el-image :src="fillImgUrl(p)" fit="cover" :preview-src-list="form?.photos?.split(',')"/></div>
36 </el-col>
37 </el-row>
38 </el-col>
32 </el-row> 39 </el-row>
33 </div> 40 </div>
34 41
......
...@@ -25,28 +25,32 @@ ...@@ -25,28 +25,32 @@
25 <el-form-item :label="language==0?'订餐周期':'Check-in date'" required> 25 <el-form-item :label="language==0?'订餐周期':'Check-in date'" required>
26 <el-date-picker @change="getDaysBetween" 26 <el-date-picker @change="getDaysBetween"
27 v-model="rzRange" 27 v-model="rzRange"
28 type="daterange" 28 type="daterange" :disabled-date="disabledDate"
29 :placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD" 29 :placeholder="language==0?'选择日期':'Select date'" format="YYYY-MM-DD"
30 value-format="YYYY-MM-DD"/> 30 value-format="YYYY-MM-DD"/>
31 <!-- :picker-options="pickerOptions"--> 31 <!-- :picker-options="pickerOptions"-->
32 </el-form-item> 32 </el-form-item>
33 33
34 <el-form-item :label="`联系人`" required> 34 <el-form-item :label="language==0?'联系人':'Contacts'" required>
35 <el-input v-model="form.contacts"/> 35 <el-input v-model="form.contacts"/>
36 </el-form-item> 36 </el-form-item>
37 <el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone"> 37 <el-form-item :label="language==0?'联系电话':'Contact phone'" required>
38 <el-input v-model="form.phone"/> 38 <el-input v-model="form.phone"/>
39 </el-form-item> 39 </el-form-item>
40 <el-form-item :label="language==0?'送餐时间':'Contact phone'" required prop="phone"> 40 <el-form-item :label="language==0?'送餐时间':'Delivery time'">
41 <div style="line-height: 36px;">{{food.psStart}} - {{food.psEnd}}</div> 41 <div style="line-height: 36px;">{{food.psStart}} - {{food.psEnd}}</div>
42 </el-form-item> 42 </el-form-item>
43 <el-form-item label="配送地址"> 43 <el-form-item :label="language==0?'配送地址':'Delivery address'">
44 <div style="line-height: 36px;">{{food.address}}</div> 44 <div style="line-height: 36px;">{{food.address}}</div>
45 </el-form-item> 45 </el-form-item>
46 <el-form-item> 46 <el-form-item :label="language==0?'说明':'Instructions'">
47 <div class="tip"> 47 <div class="tip" v-if="language==0">
48 *如预定多天的餐饮,将分多天进行配送。<br/> 48 *如预订多天的餐饮,将分多天进行配送。<br/>
49 *每日送餐时间只配送当日预定的餐饮。 49 *每日送餐时间只配送当日预订的餐饮。
50 </div>
51 <div class="tip" v-else>1.If you have ordered food for multiple days, it will be delivered in multiple days.
52 <br/>
53 2.Only the meals ordered on the day of delivery will be delivered during the daily delivery time.
50 </div> 54 </div>
51 </el-form-item> 55 </el-form-item>
52 <el-form-item :label="language==0?'备注':'Remarks'"> 56 <el-form-item :label="language==0?'备注':'Remarks'">
...@@ -80,7 +84,7 @@ ...@@ -80,7 +84,7 @@
80 </label> 84 </label>
81 </el-col> 85 </el-col>
82 <el-col :span="12" class="text-right"> 86 <el-col :span="12" class="text-right">
83 <el-button type="primary" class="btn-lineG" @click="submit">确认付款</el-button> 87 <el-button type="primary" size="large" class="btn-lineG w200px" @click="submit" round>{{ language == 0 ?'确认付款':'Pay' }}</el-button>
84 </el-col> 88 </el-col>
85 </el-row> 89 </el-row>
86 </el-card> 90 </el-card>
...@@ -94,7 +98,7 @@ ...@@ -94,7 +98,7 @@
94 import {useRouter, useRoute} from "vue-router"; 98 import {useRouter, useRoute} from "vue-router";
95 import {ref, reactive, onMounted} from "vue"; 99 import {ref, reactive, onMounted} from "vue";
96 import {useStorage} from "@vueuse/core/index"; 100 import {useStorage} from "@vueuse/core/index";
97 import {checkResidueRoom, newsSubmitOrderHotel, submitOrderFood} from "@/apiPc/booking" 101 import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel, submitOrderFood} from "@/apiPc/booking"
98 import dayjs from 'dayjs' 102 import dayjs from 'dayjs'
99 import {ElMessage,ElMessageBox} from "element-plus"; 103 import {ElMessage,ElMessageBox} from "element-plus";
100 import useUserStore from "@/store/modules/user"; 104 import useUserStore from "@/store/modules/user";
...@@ -115,6 +119,7 @@ const rzUserArr = ref([]) ...@@ -115,6 +119,7 @@ const rzUserArr = ref([])
115 const money = ref(0) 119 const money = ref(0)
116 const choseDays = ref([]) 120 const choseDays = ref([])
117 const rules = ref({}) 121 const rules = ref({})
122 const lform = ref({})
118 123
119 let usedays = 0 124 let usedays = 0
120 onMounted(() => { 125 onMounted(() => {
...@@ -127,13 +132,29 @@ onMounted(() => { ...@@ -127,13 +132,29 @@ onMounted(() => {
127 form.value.total = food.value.foodPriceEn 132 form.value.total = food.value.foodPriceEn
128 } 133 }
129 console.log(food.value,restaurant.value) 134 console.log(food.value,restaurant.value)
135 initDays()
130 const today = dayjs() 136 const today = dayjs()
131 canOrderStart.value = today
132 if (food.value.hqNewStart < canOrderStart.value) {
133 food.value.hqNewStart = canOrderStart.value
134 }
135 }) 137 })
138 function initDays() {
139 getBaseInfoByActiveId(route.params.cptId).then(res=>{
140 lform.value = res.data
141 }).catch(err=>{
142 console.log(err)
143 })
144 }
136 145
146 function disabledDate(date) {
147 //判读今天大与form.value.hqStart
148 if (lform.value.foodStart) {
149 const today = dayjs().format('YYYY-MM-DD')
150 if (lform.value.foodStart < today) {
151 return !((date.getTime() >= dayjs(today).valueOf())&&(date.getTime() <= dayjs(lform.value.foodEnd).valueOf()))
152 } else {
153 return !((date.getTime() >= dayjs(lform.value.foodStart).valueOf())&&(date.getTime() <= dayjs(lform.value.foodEnd).valueOf()))
154 }
155 }
156 return true
157 }
137 function changeNum() { 158 function changeNum() {
138 let moneyAll = 0 159 let moneyAll = 0
139 if(language.value == 0){ 160 if(language.value == 0){
...@@ -192,6 +213,18 @@ function submit() { ...@@ -192,6 +213,18 @@ function submit() {
192 useUserStore().setReLogin() 213 useUserStore().setReLogin()
193 return 214 return
194 } 215 }
216 if(rzRange.value.length==0){
217 ElMessage.warning(language.value == 0 ? '请选择订餐时间' : 'Please select the meal time')
218 return
219 }
220 if(!form.value.contacts){
221 ElMessage.warning(language.value == 0 ? '请输入联系人' : 'Please enter the contact')
222 return
223 }
224 if(!form.value.phone){
225 ElMessage.warning(language.value == 0 ? '请输入手机号' : 'Please enter the phone number')
226 return
227 }
195 if(rzRange.value.length>0){ 228 if(rzRange.value.length>0){
196 form.value.dcStart = rzRange.value[0] 229 form.value.dcStart = rzRange.value[0]
197 form.value.dcEnd = rzRange.value[1] 230 form.value.dcEnd = rzRange.value[1]
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <img src="@/assets/booking/jd_text.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 </div> 6 </div>
6 <div class="box"> 7 <div class="box">
7 <div class="searchBar"> 8 <div class="searchBar">
...@@ -13,32 +14,40 @@ ...@@ -13,32 +14,40 @@
13 </div> 14 </div>
14 15
15 <div class="box" v-loading="loading"> 16 <div class="box" v-loading="loading">
16 <el-card v-for="(h,index) in list" class="mb20" @click="goDetail(h)"> 17 <el-row :gutter="20">
17 <!-- 酒店列表--> 18 <el-col :lg="24" :md="24" :sm="24" :xs="24" :xl="24" v-for="(h,index) in list" class="mb20">
19 <el-card @click="goDetail(h)">
20 <!-- 酒店列表-->
18 <el-row class="hotel" align="middle" :gutter="20"> 21 <el-row class="hotel" align="middle" :gutter="20">
19 <el-col :span="6"> 22 <el-col :span="6">
23 <div class="imgbox">
20 <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/> 24 <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/>
25 </div>
21 </el-col> 26 </el-col>
22 <el-col :span="10"> 27 <el-col :span="12">
23 <h3 class="esp">{{h.name}}</h3> 28 <h3 class="esp">{{h.name}}</h3>
24 <div class="starBox"> 29 <div class="starBox">
25 <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png"> 30 <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png">
26 </div> 31 </div>
27 <div class="tagbox"> 32 <div class="tagbox esp">
28 <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> 33 <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span>
29 <a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a> 34 <a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a>
30 </div> 35 </div>
31 <p class="esp addr"> 36 <p class="esp addr mt20">
32 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> 37 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>
33 {{h.address}} 38 {{h.address}}
34 </p> 39 </p>
35 </el-col> 40 </el-col>
36 <el-col :span="8" class="text-right"> 41 <el-col :span="4" class="text-right">
37 <div class="price">¥<span>{{ h.price }}</span><i v-if="language==0"></i></div> 42 <div class="price">{{ language==0?'¥':'€' }}<span>{{ h.price }}</span>
38 <el-button class="btn-lineG w200px" round type="primary" size="large">{{ language==0?'立即预约':'Select' }}</el-button> 43 <i v-if="language==0"></i>
44 </div>
45 <el-button class="btn-lineG w200px" round type="primary" >{{ language==0?'立即预订':'Select' }}</el-button>
39 </el-col> 46 </el-col>
40 </el-row> 47 </el-row>
41 </el-card> 48 </el-card>
49 </el-col>
50 </el-row>
42 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> 51 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" />
43 <div style="height: 50px"></div> 52 <div style="height: 50px"></div>
44 </div> 53 </div>
...@@ -51,8 +60,11 @@ ...@@ -51,8 +60,11 @@
51 import * as booking from "@/apiPc/booking" 60 import * as booking from "@/apiPc/booking"
52 import {useRouter,useRoute} from "vue-router"; 61 import {useRouter,useRoute} from "vue-router";
53 import {useStorage} from "@vueuse/core/index"; 62 import {useStorage} from "@vueuse/core/index";
63 import useUserStore from "@/store/modules/user";
54 const router = useRouter() 64 const router = useRouter()
55 const route = useRoute() 65 const route = useRoute()
66 const user = useUserStore().user
67 const useStore = useUserStore
56 const language= useStorage('language',0) 68 const language= useStorage('language',0)
57 const query = ref({ 69 const query = ref({
58 name:'' 70 name:''
...@@ -75,6 +87,10 @@ ...@@ -75,6 +87,10 @@
75 }) 87 })
76 } 88 }
77 function goDetail(item) { 89 function goDetail(item) {
90 if(!user){
91 useStore().setVisitor()
92 return
93 }
78 router.push({ 94 router.push({
79 name:'hotelDetail', 95 name:'hotelDetail',
80 params:{ 96 params:{
...@@ -90,12 +106,12 @@ ...@@ -90,12 +106,12 @@
90 106
91 <style scoped lang="scss"> 107 <style scoped lang="scss">
92 .hotel{ 108 .hotel{
93 h3{margin: 0 0 20px;} 109 h3{margin: 0 0 10px;}
94 img.w100{object-fit: cover;aspect-ratio: 16/9} 110 img.w100{object-fit: cover;aspect-ratio: 16/9}
95 .addr{font-size: 16px;color: #929AA0;font-weight: 400;} 111 .addr{font-size: 14px;color: #929AA0;font-weight: 400;margin: 0 0 10px;}
96 .price{margin: 0 0 25px; 112 .price{margin: 0 0 8px;
97 color: #FF8124;font-size: 18px; 113 color: #FF8124;font-size: 18px;
98 span{font-size: 24px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;} 114 span{font-size: 36px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;}
99 i{font-style: normal;color: #929AA0;} 115 i{font-style: normal;color: #929AA0;}
100 } 116 }
101 } 117 }
...@@ -110,12 +126,18 @@ ...@@ -110,12 +126,18 @@
110 .no-border{border: none;background: #F5F7F9; 126 .no-border{border: none;background: #F5F7F9;
111 :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} 127 :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;}
112 } 128 }
129 .imgbox {width: 100%;height: 100%;position: relative;
130 img{width: 100%;height: 100%;}
131 .starBox{position: absolute;bottom: 0;right: 0;background: rgba(0,0,0,0.4);padding: 10px 15px 3px;}
132 }
133 .po-r-b{}
113 .starBox{ 134 .starBox{
114 img{display: inline-block;margin-right: 4px} 135 border-radius: 14px 0 0 0;
136 img{display: inline-block;margin-right: 4px;width: 24px;}
115 } 137 }
116 .tagbox{margin: 15px 0; 138 .tagbox{margin: 10px 0;
117 a{color: #AFB5B9;font-size: 12px;} 139 a{color: #AFB5B9;font-size: 12px;}
118 span{border-radius: 13px;font-size: 12px;padding: 4px 10px;margin-right:10px;font-weight: 400;} 140 span{border-radius: 13px;font-size: 12px;padding: 3px 10px;margin-right:10px;font-weight: 400;}
119 span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);} 141 span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);}
120 span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);} 142 span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);}
121 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} 143 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
......
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
6 <!-- <el-col :span="6">--> 6 <!-- <el-col :span="6">-->
7 <!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>--> 7 <!-- <img class="w100" :src="fillImgUrl(form.photos?.split(',')[0])"/>-->
8 <!-- </el-col>--> 8 <!-- </el-col>-->
9 <el-col :span="16"> 9 <el-col :span="language == 0?16:24">
10 <h3 class="esp flex">{{ form?.name }} 10 <h3 class="esp flex">{{ form?.name }}
11 <div class="starBox"> 11 <div class="starBox ml20">
12 <img v-for="i in Number(form?.starLevel||0)" src="@/assets/booking/star.png"> 12 <img v-for="i in Number(form?.starLevel||0)" src="@/assets/booking/star.png">
13 </div> 13 </div>
14 </h3> 14 </h3>
...@@ -17,22 +17,21 @@ ...@@ -17,22 +17,21 @@
17 <span v-for="(t,index) in form?.label?.split(',')" v-show="index<4">{{ t }}</span> 17 <span v-for="(t,index) in form?.label?.split(',')" v-show="index<4">{{ t }}</span>
18 <a v-show="form?.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a> 18 <a v-show="form?.label?.split(',').length>4">{{ language == 0 ? '更多' : 'MORE' }} ></a>
19 </div> 19 </div>
20 <div> 20 <div class="info">
21 <el-icon></el-icon> 21 <el-icon><Clock /></el-icon>
22 <span class="mr10">{{ language == 0 ? '入住时间' : 'Check-in' }}{{ form?.checkInTime }}</span> 22 <span class="mr10">{{ language == 0 ? '入住时间' : 'Check-in' }}{{ form?.checkInTime }}</span>
23 <span>{{ language == 0 ? '离店时间' : 'Check-out' }}{{ form?.checkOutTime }}</span> 23 <span>{{ language == 0 ? '离店时间' : 'Check-out' }}{{ form?.checkOutTime }}</span>
24 </div> 24 </div>
25 <div v-if="form?.introduction" class="flex esp"> 25 <div class="info esp">
26 <el-icon></el-icon> 26 <el-icon><MapLocation /></el-icon>
27 {{ language == 0 ? '酒店简介' : 'Introduction' }}<span v-html="form.introduction.toString()"></span> 27 <span>{{ form?.addName }}</span>
28 </div>
29 <div v-if="form?.introduction" class="info pointer">
30 <div :class="showAll?'':'esp_2'" @click="showAll=!showAll" v-html="form.introduction.toString()"></div>
28 </div> 31 </div>
29 <!-- <p class="esp addr">-->
30 <!-- <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon>-->
31 <!-- {{form?.address}}-->
32 <!-- </p>-->
33 </el-col> 32 </el-col>
34 <el-col :span="8" class="text-right"> 33 <el-col :span="8" class="text-right" v-if="language == 0">
35 <div class="mapBox"> 34 <div class="mapBox" @click="goMap">
36 <div id="map"></div> 35 <div id="map"></div>
37 </div> 36 </div>
38 </el-col> 37 </el-col>
...@@ -42,11 +41,18 @@ ...@@ -42,11 +41,18 @@
42 41
43 <div class="mt30"> 42 <div class="mt30">
44 <el-row :gutter="20"> 43 <el-row :gutter="20">
45 <el-col v-for="(p,index) in form?.photos?.split(',')" :span="index==0?12:6"> 44 <el-col :span="10">
46 <div class="imgbox hotelImg"> 45 <div class="imgbox hotelImg">
47 <img :src="fillImgUrl(p)"> 46 <el-image :src="fillImgUrl(form?.photos?.split(',')[0])" fit="cover" :preview-src-list="form?.photos?.split(',')"/>
48 </div> 47 </div>
49 </el-col> 48 </el-col>
49 <el-col :span="14">
50 <el-row class="h100" :gutter="20">
51 <el-col :span="8" class="oddmb" v-for="(p,index) in form?.photos?.split(',').slice(1,7)">
52 <div class="imgbox hotelImg"><el-image :src="fillImgUrl(p)" fit="cover"/></div>
53 </el-col>
54 </el-row>
55 </el-col>
50 </el-row> 56 </el-row>
51 </div> 57 </div>
52 58
...@@ -57,7 +63,7 @@ ...@@ -57,7 +63,7 @@
57 </ul> 63 </ul>
58 </div> 64 </div>
59 <div> 65 <div>
60 <div v-for="(r,index) in roomList" :key="index" class="room"> 66 <div v-for="(r,index) in roomList" :key="index" class="room" v-show="language==0?r.roomPrice>0:r.roomPriceEn>0">
61 <el-row :gutter="30" align="middle"> 67 <el-row :gutter="30" align="middle">
62 <el-col :span="4"> 68 <el-col :span="4">
63 <div class="roomImg"> 69 <div class="roomImg">
...@@ -109,11 +115,13 @@ ...@@ -109,11 +115,13 @@
109 import {useRouter} from "vue-router"; 115 import {useRouter} from "vue-router";
110 import {ref, reactive, onMounted} from "vue"; 116 import {ref, reactive, onMounted} from "vue";
111 import {useRoute} from "vue-router"; 117 import {useRoute} from "vue-router";
112 import {getHotelById, getHotelRooms} from "@/apiPc/booking" 118 import {getHotelById, getHotelRooms,checkRoomPayByUserId} from "@/apiPc/booking"
113 119
114 import {useStorage} from "@vueuse/core/index"; 120 import {useStorage} from "@vueuse/core/index";
115 import useUserStore from "@/store/modules/user"; 121 import useUserStore from "@/store/modules/user";
122 import {ElMessageBox} from "element-plus";
116 const user = useUserStore().user 123 const user = useUserStore().user
124 const useStore = useUserStore
117 const language = useStorage('language', 0) 125 const language = useStorage('language', 0)
118 const router = useRouter() 126 const router = useRouter()
119 const route = useRoute() 127 const route = useRoute()
...@@ -121,6 +129,7 @@ const form = ref({}) ...@@ -121,6 +129,7 @@ const form = ref({})
121 const query = ref({ 129 const query = ref({
122 hotelId: route.query.id 130 hotelId: route.query.id
123 }) 131 })
132 const showAll = ref(false)
124 const loading = ref(false) 133 const loading = ref(false)
125 const roomList = ref([]) 134 const roomList = ref([])
126 const map = ref(null) 135 const map = ref(null)
...@@ -186,10 +195,33 @@ function initMap() { ...@@ -186,10 +195,33 @@ function initMap() {
186 } 195 }
187 196
188 function goOrder(room) { 197 function goOrder(room) {
189 if(!user){ 198 checkRoomPayByUserId(room.hotelId).then(res=>{
190 useUserStore().setReLogin() 199 if(res.data == -100){
200 ElMessageBox.confirm(
201 language.value == 0 ?'你有未支付的酒店订单,是否前往个人中心查看':'You already have an unpaid hotel order, do you want to go to the personal center to check it?',
202 language.value==0?'提示':'Warning',
203 {
204 confirmButtonText: language.value==1?'Go My Reservation ':'前往我的预订',
205 // cancelButtonText: language.value==1?'Continue to book':'继续预订',
206 type: 'warning',
207 }
208 ).then((res) => {
209 console.log(res)
210 router.push({
211 name:'myReservation'
212 })
213 })
214 // .catch((res) => {
215 // console.log(res)
216 // goNext(room)
217 // })
191 return 218 return
192 } 219 }
220 goNext(room)
221 })
222
223 }
224 function goNext(room) {
193 router.push({ 225 router.push({
194 name:'hotelOrder', 226 name:'hotelOrder',
195 params:{ 227 params:{
...@@ -202,6 +234,14 @@ function goOrder(room) { ...@@ -202,6 +234,14 @@ function goOrder(room) {
202 } 234 }
203 }) 235 })
204 } 236 }
237 function goMap() {
238 return
239 // var tencentMapUrl = "https://map.qq.com/";
240 // window.location.href = tencentMapUrl;
241 var url = `https://map.qq.com/?type=gcj02&lat=${form.value.latitude}&lng=${form.value.longitude}`
242 var mapUrl_tx = "http://apis.map.qq.com/uri/v1/marker?marker=coord:"+form.value.latitude+","+form.value.longitude+"&referer=yellowpage";
243 window.open(url, "_blank")
244 }
205 </script> 245 </script>
206 246
207 <style scoped lang="scss"> 247 <style scoped lang="scss">
...@@ -317,4 +357,10 @@ function goOrder(room) { ...@@ -317,4 +357,10 @@ function goOrder(room) {
317 img{object-fit: cover;object-position: center;width: 100%;height: 100%; 357 img{object-fit: cover;object-position: center;width: 100%;height: 100%;
318 } 358 }
319 } 359 }
360 .info{font-weight: 400;
361 font-size: 14px;
362 color: #929AA0;
363 .el-icon{margin-right: 5px;}
364 }
365 .oddmb:nth-child(2){margin-bottom: 20px;}
320 </style> 366 </style>
......
...@@ -21,13 +21,14 @@ ...@@ -21,13 +21,14 @@
21 import {ref} from "vue"; 21 import {ref} from "vue";
22 import {useRoute, useRouter} from "vue-router"; 22 import {useRoute, useRouter} from "vue-router";
23 import {onMounted} from "@vue/runtime-core"; 23 import {onMounted} from "@vue/runtime-core";
24 import {callbackPalPay} from "@/apiPc/match"; 24 import {callbackPalPay} from "@/apiPc/booking";
25 import {useStorage} from "@vueuse/core/index"; 25 import {useStorage} from "@vueuse/core/index";
26 26
27 const route = useRoute() 27 const route = useRoute()
28 const router = useRouter() 28 const router = useRouter()
29 const language= useStorage('language',0) 29 const language= useStorage('language',0)
30 const orderId = ref(route.query.orderId) 30 const orderId = ref(route.query.orderId)
31 const type = ref('')
31 const loading = ref(false) 32 const loading = ref(false)
32 33
33 onMounted(() => { 34 onMounted(() => {
...@@ -36,6 +37,7 @@ onMounted(() => { ...@@ -36,6 +37,7 @@ onMounted(() => {
36 loading.value = true 37 loading.value = true
37 callbackPalPay(code).then(res => { 38 callbackPalPay(code).then(res => {
38 loading.value = false 39 loading.value = false
40 type.value = res.data.orderType
39 }) 41 })
40 }) 42 })
41 43
...@@ -43,7 +45,8 @@ function goBillDetail() { ...@@ -43,7 +45,8 @@ function goBillDetail() {
43 router.push({ 45 router.push({
44 name: 'bookingPay', 46 name: 'bookingPay',
45 query: { 47 query: {
46 orderId: route.query.orderId 48 orderId: route.query.orderId,
49 orderType: type.value
47 } 50 }
48 }) 51 })
49 } 52 }
......
1 <template>
2 <div>
3 <div>
4 <div class="box">
5 <el-card class="mt30 borderRadius10">
6 <h3>{{ form.name }}
7 <div class="tagbox">
8 <span>专业团队</span>
9 <span>大牌化妆品</span>
10 <span>金牌化妆师</span>
11 <span>连锁</span>
12 </div>
13 </h3>
14 <p class="infoLine">
15 <span>
16 <el-icon><OfficeBuilding/></el-icon>
17 成立<i class="text-primary">6</i>
18 </span>
19 <span>
20 <el-icon><User/></el-icon>
21 <i class="text-primary">12</i>名化妆师
22 </span>
23 <span><el-icon><Iphone/></el-icon>
24 800-820-8820</span>
25 <span><el-icon><Location/></el-icon>
26 江苏无锡梁溪区南长街5D-601</span>
27 </p>
28 </el-card>
29 <el-row :gutter="20" class="photoWall mt20">
30 <el-col :span="9">
31 <el-image class="as16_9"/>
32 </el-col>
33 <el-col :span="5">
34 <el-row :gutter="20">
35 <el-col :span="12" class="h50-10px"><el-image/></el-col>
36 <el-col :span="12" class="h50-10px"><el-image/></el-col>
37 <el-col :span="24" class="h50-10px mt20"><el-image/></el-col>
38 </el-row>
39 </el-col>
40 <el-col :span="5">
41 <el-image/>
42 </el-col>
43 <el-col :span="5">
44 <el-row :gutter="20">
45 <el-col :span="12" class="h50-10px"><el-image/></el-col>
46 <el-col :span="12" class="h50-10px"><el-image/></el-col>
47 <el-col :span="24" class="h50-10px mt20"><el-image/></el-col>
48 </el-row>
49 </el-col>
50 </el-row>
51 <el-card class="mt20 mb60">
52
53
54 </el-card>
55 </div>
56 </div>
57 </div>
58 </template>
59
60 <script setup>
61 import {ref} from "vue"
62 const form = ref({
63 name: '美妆小店'
64 })
65 </script>
66
67 <style scoped lang="scss">
68 .tagbox {
69 margin: 15px 0;
70
71 a {
72 color: #AFB5B9;
73 font-size: 12px;
74 }
75
76 span {
77 border-radius: 13px;
78 font-size: 12px;
79 padding: 4px 10px;
80 margin-right: 10px;
81 font-weight: 400;
82 }
83
84 span:nth-child(4n) {
85 background: rgba(50, 177, 108, 0.2);
86 color: rgba(50, 177, 108, 1);
87 }
88
89 span:nth-child(4n+1) {
90 background: rgba(243, 152, 0, 0.2);
91 color: rgba(243, 152, 0, 1);
92 }
93
94 span:nth-child(4n+2) {
95 background: rgba(0, 160, 233, 0.2);
96 color: rgba(0, 160, 233, 1);
97 }
98
99 span:nth-child(4n+3) {
100 background: rgba(247, 64, 166, 0.2);
101 color: rgba(247, 64, 166, 1);
102 }
103 }
104 .infoLine{font-weight: 400;margin: 7px 0;
105 font-size: 14px;
106 color: #929AA0;
107 i{font-style: normal;}
108 span{margin-right: 10px;
109 i.text-primary{padding: 0 4px;}
110 }
111 .el-icon{position: relative;top:2px;margin-right: 4px;}
112 }
113 .photoWall{
114 .el-row{height: 100%;}
115 .el-image{
116 width: 100%;border-radius: 10px;height: 100%;
117 }
118 }
119 .h50-10px{height: calc(50% - 10px)}
120 </style>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 <div> 2 <div>
3 <div class="box"> 3 <div class="box">
4 <el-card class="mt30"> 4 <el-card class="mt30">
5 票务预 5 票务预
6 </el-card> 6 </el-card>
7 </div> 7 </div>
8 8
......
...@@ -28,6 +28,18 @@ ...@@ -28,6 +28,18 @@
28 </a> 28 </a>
29 </li> 29 </li>
30 </ul> 30 </ul>
31 <ul v-if="user.utype=='3'">
32 <li
33 v-for="(m, i) in menus3"
34 :key="i"
35 :class="{ active: m.isActive }"
36 >
37 <a href="javascript:void(0)" @click="toInfo(m,menus3)">
38 <img :src="m.isActive ? m.picUrl2 : m.picUrl1">
39 {{ m.name }}
40 </a>
41 </li>
42 </ul>
31 </div> 43 </div>
32 </el-card> 44 </el-card>
33 </el-col> 45 </el-col>
...@@ -89,7 +101,7 @@ const menus = ref([ ...@@ -89,7 +101,7 @@ const menus = ref([
89 isActive: false 101 isActive: false
90 }, 102 },
91 { 103 {
92 name: language.value==0?'我的预':'My Reservation', 104 name: language.value==0?'我的预':'My Reservation',
93 routeName: 'myReservation', 105 routeName: 'myReservation',
94 picUrl1: '/img/nav_29.png', 106 picUrl1: '/img/nav_29.png',
95 picUrl2: '/img/nav_29_dwn.png', 107 picUrl2: '/img/nav_29_dwn.png',
...@@ -103,6 +115,29 @@ const menus = ref([ ...@@ -103,6 +115,29 @@ const menus = ref([
103 isActive: false 115 isActive: false
104 } 116 }
105 ]) 117 ])
118 const menus3 = ref([
119 {
120 name: language.value==0?'基础信息':'Basic Information',
121 routeName: 'myInfo',
122 picUrl1: '/img/nav_26.png',
123 picUrl2: '/img/nav_26_dwn.png',
124 isActive: false
125 },
126 {
127 name: language.value==0?'修改密码':'Change Password',
128 routeName: 'myPassword',
129 picUrl1: '/img/nav_27.png',
130 picUrl2: '/img/nav_27_dwn.png',
131 isActive: false
132 },
133 {
134 name: language.value==0?'我的预订':'My Reservation',
135 routeName: 'myReservation',
136 picUrl1: '/img/nav_29.png',
137 picUrl2: '/img/nav_29_dwn.png',
138 isActive: false
139 }
140 ])
106 const menusPersonal = ref([ 141 const menusPersonal = ref([
107 { 142 {
108 name: language.value==0?'基础信息':'Basic Information', 143 name: language.value==0?'基础信息':'Basic Information',
...@@ -126,7 +161,7 @@ const menusPersonal = ref([ ...@@ -126,7 +161,7 @@ const menusPersonal = ref([
126 isActive: false 161 isActive: false
127 }, 162 },
128 { 163 {
129 name: language.value==0?'我的预':'My Reservation', 164 name: language.value==0?'我的预':'My Reservation',
130 routeName: 'myReservation', 165 routeName: 'myReservation',
131 picUrl1: '/img/nav_29.png', 166 picUrl1: '/img/nav_29.png',
132 picUrl2: '/img/nav_29_dwn.png', 167 picUrl2: '/img/nav_29_dwn.png',
...@@ -160,6 +195,12 @@ onMounted(() => { ...@@ -160,6 +195,12 @@ onMounted(() => {
160 }) 195 })
161 currMenu.isActive = true 196 currMenu.isActive = true
162 } 197 }
198 if(user.utype=='3'){
199 currMenu = _.find(menus3.value, (m) => {
200 return m.routeName === route.name
201 })
202 currMenu.isActive = true
203 }
163 204
164 }) 205 })
165 206
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
18 <el-form-item :label="language==0?'用户名':'Account'"> 18 <el-form-item :label="language==0?'用户名':'Account'">
19 {{ user.userName }} 19 {{ user.userName }}
20 </el-form-item> 20 </el-form-item>
21 <el-form-item :label="language==0?'姓名':'Real Name'" required prop="realName"> 21 <el-form-item :label="language==0?'姓名':'Real Name'" required prop="realName" v-if="user.utype=='1'">
22 <el-input v-model="myform.realName" disabled/> 22 <el-input v-model="myform.realName" disabled/>
23 </el-form-item> 23 </el-form-item>
24 <el-form-item :label="language==0?'性别':'Gender'" required > 24 <el-form-item :label="language==0?'性别':'Gender'" required >
...@@ -34,25 +34,25 @@ ...@@ -34,25 +34,25 @@
34 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" 34 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
35 /> 35 />
36 </el-form-item> 36 </el-form-item>
37 <el-form-item :label="language==0?'代表':'Representing'" required> 37 <el-form-item :label="language==0?'代表':'Representing'" required v-if="user.utype=='1'">
38 <el-input v-model="myform.representing" disabled/> 38 <el-input v-model="myform.representing" disabled/>
39 </el-form-item> 39 </el-form-item>
40 <el-form-item :label="language==1?'Age group':'年龄组'" required> 40 <el-form-item :label="language==1?'Age group':'年龄组'" required v-if="user.utype=='1'">
41 <el-input v-model="myform.ageGroup" disabled/> 41 <el-input v-model="myform.ageGroup" disabled/>
42 </el-form-item> 42 </el-form-item>
43 <el-form-item :label="language==0?'舞种':'Division'" required> 43 <el-form-item :label="language==0?'舞种':'Division'" required v-if="user.utype=='1'">
44 <el-input v-model="myform.division" disabled/> 44 <el-input v-model="myform.division" disabled/>
45 </el-form-item> 45 </el-form-item>
46 <el-form-item :label="language==0?'状态':'Status'" required> 46 <el-form-item :label="language==0?'状态':'Status'" required v-if="user.utype=='1'">
47 <el-input v-model="myform.wdsfStatus" disabled/> 47 <el-input v-model="myform.wdsfStatus" disabled/>
48 </el-form-item> 48 </el-form-item>
49 <el-form-item :label="language==0?'证件号':'Passport number'"> 49 <el-form-item :label="language==0?'证件号':'Passport number'" v-if="user.utype=='1'">
50 <el-input v-model="myform.passportNumber"/> 50 <el-input v-model="myform.passportNumber"/>
51 </el-form-item> 51 </el-form-item>
52 <el-form-item :label="language==0?'有效证件':'Valid Passport'" required> 52 <el-form-item :label="language==0?'有效证件':'Valid Passport'" required v-if="user.utype=='1'">
53 <file-upload v-model="myform.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/> 53 <file-upload v-model="myform.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
54 </el-form-item> 54 </el-form-item>
55 <el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" prop="wdsfMin"> 55 <el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" prop="wdsfMin" v-if="user.utype=='1'">
56 {{myform.wdsfMin}} 56 {{myform.wdsfMin}}
57 </el-form-item> 57 </el-form-item>
58 <!-- <el-form-item :label="language==0?'证件类型':'ID type'" required prop="idcType">--> 58 <!-- <el-form-item :label="language==0?'证件类型':'ID type'" required prop="idcType">-->
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 </el-form> 22 </el-form>
23 </div> 23 </div>
24 <el-row justify="center"> 24 <el-row justify="center">
25 <el-button type="primary" class="btn-lineG" @click="submit">{{ language==0?'保存':'Save' }}</el-button> 25 <el-button type="primary" class="btn-lineG" round @click="submit">{{ language==0?'保存':'Save' }}</el-button>
26 </el-row> 26 </el-row>
27 </div> 27 </div>
28 </el-card> 28 </el-card>
......
...@@ -5,55 +5,81 @@ ...@@ -5,55 +5,81 @@
5 <h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }} 5 <h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}
6 </h3> 6 </h3>
7 7
8 <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'发票开具':'Invoice' }}</el-button> 8 <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'发票开具':'Invoice' }}</el-button>-->
9 </div> 9 </div>
10 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0"/> 10 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0"/>
11
11 <div class="pd20"> 12 <div class="pd20">
12 <div v-for="b in list" class="item"> 13 <div v-for="b in list" class="item">
13 <div class="title"> 14 <div class="title">
14 <label class="blueTag" v-if="b.orderType == 0"> {{ language==0?'酒店':'HOTEL' }} </label> 15 <label class="blueTag" v-if="b.orderType == 0"> {{ language==0?'酒店':'HOTEL' }} </label>
15 <label class="purpleTag" v-if="b.orderType == 1"> {{ language==0?'车辆':'TRANSPORTATION' }} </label> 16 <label class="purpleTag" v-if="b.orderType == 1"> {{ language==0?'车辆':'TRANSPORTATION' }} </label>
16 <label class="orangeTag" v-if="b.orderType == 2"> {{ language==0?'餐饮':'DINING' }} </label> 17 <label class="orangeTag" v-if="b.orderType == 2"> {{ language==0?'餐饮':'DINING' }} </label>
17 {{ language==0?'订单编号:':'No.' }} {{ b.id }} 18 <span>{{ language==0?'订单编号:':'No.' }} {{ b.id }}</span>
18 </div> 19 </div>
20
19 <div class="status-po"> 21 <div class="status-po">
20 <span class="bg-warning" v-if="b.status == '0'&&b.surplus!='0,0'&&b.surplus!='0'"> 待支付 22 <span class="bg-warning" v-if="b.status == '0'&&b.surplus!='0,0'&&b.surplus!='0'">
23 {{ language == 0 ?'待支付':'Unpaid' }}
21 </span> 24 </span>
22 <span class="bg-warning" v-if="b.status == '0'&&(b.surplus=='0,0'||b.surplus=='0')">已取消</span> 25 <span class="bg-warning" v-if="b.status == '0'&&(b.surplus=='0,0'||b.surplus=='0')">{{ language == 0 ? '已取消' : 'Canceled' }}</span>
23 <span class="bg-blue" v-if="b.status == '1'">支付成功</span> 26 <span class="bg-blue" v-if="b.status == '1'">{{ language == 0 ?'支付成功':'successful' }}</span>
24 <span class="bg-warning" v-if="b.status == '2'">已取消</span> 27 <span class="bg-warning" v-if="b.status == '2'">{{ language == 0 ? '已取消' : 'Canceled' }}</span>
25 <span class="bg-danger" v-if="b.status == '3'||b.status == '4'">已退订</span> 28 <span class="bg-danger" v-if="b.status == '3'||b.status == '4'">{{ language == 0 ? '已退订' : 'Refunded' }}</span>
29 <span class="bg-danger" v-if="b.status == '7'">{{ language == 0 ? '退款审核中' : 'Refund in review' }}</span>
26 </div> 30 </div>
27 <div class="plr20" v-if="b.orderType == 0"> 31
32 <el-row class="pd20 mt10" justify="space-between" align="middle">
33 <el-col :lg="10">
34 <div v-if="b.orderType == 0">
28 <h3 class="name">{{b.name}}</h3> 35 <h3 class="name">{{b.name}}</h3>
29 <p>{{b.messageObj?.roomStayDate}}</p> 36 <p v-if="language==0">{{b.messageObj?.roomStayDate}}</p>
30 <p>{{b.messageObj?.roomName}}</p> 37 <p v-else>{{b.messageObj?.roomStayDate.replace('共',' total ').replace('晚',' days')}}</p>
38
31 <p>{{b.messageObj?.roomInfo}}</p> 39 <p>{{b.messageObj?.roomInfo}}</p>
32 40
33 </div> 41 </div>
34 <div class="plr20" v-if="b.orderType == 1"> 42 <div v-if="b.orderType == 1">
35 <h3 class="name">{{b.name}}</h3> 43 <h3 class="name">{{b.name}}</h3>
36 <div v-for="(car,index) in b.messageObj.carsList" :key="index"> 44 <div v-for="(car,index) in b.messageObj.carsList" :key="index">
37 <div v-if="car.num>0">{{car.name}}{{car.num}}</div> 45 <p v-if="car.num>0">{{car.typeName}}{{car.name}}{{car.num}} {{ language==0?'辆':'Cars' }}</p>
38 </div> 46 </div>
39 <div>{{b.handleDate}}</div> 47 <!-- <p>{{b.messageObj}}</p>-->
48 <!-- <p>{{b.extJsonObj}}</p>-->
40 </div> 49 </div>
41 <div class="plr20" v-if="b.orderType == 2"> 50 <div v-if="b.orderType == 2">
42 <h3 class="name">{{b.name}}</h3> 51 <h3 class="name">{{b.name}}</h3>
43 <div v-for="(n,index) in b.messageObj.foodsList" :key="index"> 52 <div v-for="(n,index) in b.messageObj.foodsList" :key="index">
44 <div v-if="n.num > 0"> 53 <p v-if="n.num > 0">
45 {{n.name}}({{n.categoryName}}) * <span>{{n.num}}</span> 54 {{n.name}}({{n.categoryName}}) * <span>{{n.num}} {{language==0?'份':'pcs'}}</span>
55 </p>
56 </div>
57 <p>{{language==0?'配送日期':'Delivery Date'}}{{b.extJsonObj.dcEnd }} ~ {{b.extJsonObj.dcEnd}}</p>
58
59 </div>
60 </el-col>
61 <el-col :lg="6">
62 <div v-if="b.orderType == 0">
63 <p>{{b.messageObj?.roomName}}</p>
64 <p>{{b.messageObj?.roomInfo}}</p>
46 </div> 65 </div>
66 <div v-if="b.orderType == 1">
47 </div> 67 </div>
68 <div v-if="b.orderType == 2">
48 </div> 69 </div>
49 <el-row class="plr20 mt10" justify="space-between"> 70 </el-col>
50 <el-col :lg="8"> 71 <el-col :lg="4" class="text-center">
51 <span class="text-warning"> {{ language==0?'¥':'€' }} 72 <span class="text-warning"> {{ language==0?'¥':'€' }}
52 <span class="bigMoney">{{b.total}}</span> 73 <span class="bigMoney">{{language==0?b.total:b.totalEn}}</span>
53 </span> 74 </span>
54 </el-col> 75 </el-col>
55 76
56 <el-col :lg="8"> 77 <el-col :lg="4" >
78 <div class="text-right mb20 text-danger">
79 <el-countdown value-style="color:#E60012;font-size:16px;" v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" format="mm:ss"
80 :value="b.countdown" @finish="finish(b)"/>
81 </div>
82
57 <div class="text-right"> 83 <div class="text-right">
58 <el-button class="mb10" plain round type="primary" @click="goDetail(b)"> 84 <el-button class="mb10" plain round type="primary" @click="goDetail(b)">
59 {{ language==0?'详情':'Detail' }}</el-button> 85 {{ language==0?'详情':'Detail' }}</el-button>
...@@ -64,7 +90,6 @@ ...@@ -64,7 +90,6 @@
64 </el-col> 90 </el-col>
65 </el-row> 91 </el-row>
66 </div> 92 </div>
67
68 </div> 93 </div>
69 </el-card> 94 </el-card>
70 <div class="pd20"></div> 95 <div class="pd20"></div>
...@@ -76,18 +101,29 @@ ...@@ -76,18 +101,29 @@
76 import {onMounted} from "@vue/runtime-core"; 101 import {onMounted} from "@vue/runtime-core";
77 import {useStorage} from "@vueuse/core/index"; 102 import {useStorage} from "@vueuse/core/index";
78 import {newbilllist} from "@/apiPc/common"; 103 import {newbilllist} from "@/apiPc/common";
104 import useUserStore from "@/store/modules/user";
79 const router = useRouter() 105 const router = useRouter()
80 const language= useStorage('language',0) 106 const language= useStorage('language',0)
81 const list = ref([]) 107 const list = ref([])
108 const user = useUserStore().user
82 109
83 onMounted(()=>{ 110 onMounted(()=>{
84 getList() 111 getList()
85 }) 112 })
113 function finish(bill){
114 bill.status = '2'
115 // getList()
116 }
86 function getList() { 117 function getList() {
87 newbilllist().then(res=>{ 118 newbilllist({createById:user.userId}).then(res=>{
88 list.value = res.rows 119 list.value = res.rows
89 for (var b of list.value) { 120 for (var b of list.value) {
90 b.messageObj = JSON.parse(b.message) 121 b.messageObj = JSON.parse(b.message)
122 b.extJsonObj = JSON.parse(b.extJson) || {}
123 if(b.surplus&&b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')){
124 b.countdown = Date.now() + Number((b.surplus.split(',')[0]*60 + b.surplus.split(',')[1])*10)
125 console.log(b.countdown)
126 }
91 } 127 }
92 }) 128 })
93 } 129 }
...@@ -105,12 +141,11 @@ function toInvoice(){ ...@@ -105,12 +141,11 @@ function toInvoice(){
105 name: 'invoice' 141 name: 'invoice'
106 }) 142 })
107 } 143 }
108
109 </script> 144 </script>
110 145
111 <style scoped lang="scss"> 146 <style scoped lang="scss">
112 .bigMoney{font-size: 24px;font-family: "DIN Alternate";} 147 .bigMoney{font-size: 24px;font-family: "DIN Alternate";}
113 .name{font-size: 18px;margin: 15px 0 0;} 148 .name{font-size: 18px;margin: 0;}
114 .status-po{position: absolute;right: 0;top: 0;font-size: 12px; 149 .status-po{position: absolute;right: 0;top: 0;font-size: 12px;
115 color: #FFFFFF; 150 color: #FFFFFF;
116 span{border-radius: 0px 10px 0px 10px;padding: 4px 10px;} 151 span{border-radius: 0px 10px 0px 10px;padding: 4px 10px;}
...@@ -131,13 +166,19 @@ function toInvoice(){ ...@@ -131,13 +166,19 @@ function toInvoice(){
131 } 166 }
132 } 167 }
133 .item{ 168 .item{
134 margin: 0 0 20px; 169 .name{font-size: 18px;
135 background: #FBFCFD; 170 color: #000000;margin: 0 0 10px;}
136 border-radius: 2px; 171 p{margin: 8px 0 0;color: #707070;font-size: 14px;}
172
173 margin: 0 0 20px;border: 1px solid #E5E5E5;
174 border-radius: 10px;
137 position: relative; 175 position: relative;
138 .bbody{padding: 0 15px 20px;} 176 .bbody{padding: 0 15px 20px;}
139 .title label{border-radius: 5px 0 5px 0; color: #fff; padding:4px 10px;margin-right: 10px;} 177 .title{background: #F7F7F7;border-bottom: 1px solid #E5E5E5;
140 p{margin: 5px 0;} 178 span{font-size: 14px;
179 color: #4C5359;}
180 }
181 .title label{border-radius: 5px 0 5px 0; font-size: 12px; color: #fff; padding:4px 10px;margin-right: 10px;}
141 .blueTag{ 182 .blueTag{
142 background-color: #1EC886;} 183 background-color: #1EC886;}
143 .purpleTag { 184 .purpleTag {
......
...@@ -2,63 +2,71 @@ ...@@ -2,63 +2,71 @@
2 <div class="itemBox" v-if="language == 0"> 2 <div class="itemBox" v-if="language == 0">
3 <el-row :gutter="20"> 3 <el-row :gutter="20">
4 <el-col :sm="12" :lg="8"> 4 <el-col :sm="12" :lg="8">
5 <div class="item" @click="goBooking(1)"><img src="@/assets/dance/btn01.png">酒店预订</div> 5 <div class="item" @click="popRemark(1)"><img src="@/assets/dance/btn01.png">酒店预订</div>
6 </el-col> 6 </el-col>
7 <el-col :sm="12" :lg="8"> 7 <el-col :sm="12" :lg="8">
8 <div class="item" @click="goBooking(2)"><img src="@/assets/dance/btn02.png">车辆预约</div> 8 <div class="item" @click="popRemark(2)"><img src="@/assets/dance/btn02.png">车辆预订</div>
9 </el-col> 9 </el-col>
10 <el-col :sm="12" :lg="8"> 10 <el-col :sm="12" :lg="8">
11 <div class="item" @click="goBooking(3)"><img src="@/assets/dance/btn03.png">餐饮预约</div> 11 <div class="item" @click="popRemark(3)"><img src="@/assets/dance/btn03.png">餐饮预订</div>
12 </el-col> 12 </el-col>
13 <el-col :sm="12" :lg="8"> 13 <el-col :sm="12" :lg="8">
14 <div class="item" @click="goBooking(0)"><img src="@/assets/dance/btn04.png">票务预订</div> 14 <div class="item" @click="popRemark(0)"><img src="@/assets/dance/btn04.png">票务预订</div>
15 </el-col> 15 </el-col>
16 <el-col :sm="12" :lg="8"> 16 <el-col :sm="12" :lg="8">
17 <div class="item" @click="goBooking(4)"><img src="@/assets/dance/btn05.png">化妆预约</div> 17 <div class="item" @click="popRemark(4)"><img src="@/assets/dance/btn05.png">化妆预约</div>
18 </el-col> 18 </el-col>
19 <el-col :sm="12" :lg="8"> 19 <el-col :sm="12" :lg="8">
20 <div class="item" @click="goBooking(5)"><img src="@/assets/dance/btn06.png">拍照预约</div> 20 <div class="item" @click="popRemark(5)"><img src="@/assets/dance/btn06.png">拍照预约</div>
21 </el-col> 21 </el-col>
22 </el-row> 22 </el-row>
23 </div> 23 </div>
24 <div class="itemBox_en" v-else> 24 <div class="itemBox_en" v-else>
25 <el-row :gutter="20"> 25 <el-row :gutter="20">
26 <el-col :sm="12" :lg="8"> 26 <el-col :sm="12" :lg="8">
27 <div class="item_en" @click="goBooking(1)"><img src="@/assets/dance/btn01.png"> 27 <div class="item_en" @click="popRemark(1)"><img src="@/assets/dance/btn01.png">
28 <p>HOTEL RESERVATION</p> 28 <p>HOTEL RESERVATION</p>
29 </div></el-col> 29 </div></el-col>
30 <el-col :sm="12" :lg="8"> 30 <el-col :sm="12" :lg="8">
31 <div class="item_en" @click="goBooking(2)"><img src="@/assets/dance/btn02.png"> 31 <div class="item_en" @click="popRemark(2)"><img src="@/assets/dance/btn02.png">
32 <p>TRANSPORTATION RESERVATION</p> 32 <p>TRANSPORTATION RESERVATION</p>
33 </div></el-col> 33 </div></el-col>
34 <el-col :sm="12" :lg="8"> 34 <el-col :sm="12" :lg="8">
35 <div class="item_en" @click="goBooking(3)"><img src="@/assets/dance/btn03.png"> 35 <div class="item_en" @click="popRemark(3)"><img src="@/assets/dance/btn03.png">
36 <p>DINING RESERVATION</p> 36 <p>DINING RESERVATION</p>
37 </div> 37 </div>
38 </el-col> 38 </el-col>
39 <el-col :sm="12" :lg="8"> 39 <el-col :sm="12" :lg="8">
40 <div class="item_en" @click="goBooking(0)"><img src="@/assets/dance/btn04.png"> 40 <div class="item_en" @click="popRemark(0)">
41 <img src="@/assets/dance/btn04.png">
41 <p>TICKET BOOKING</p> 42 <p>TICKET BOOKING</p>
42 </div> 43 </div>
43 </el-col> 44 </el-col>
44 <el-col :sm="12" :lg="8"> 45 <el-col :sm="12" :lg="8">
45 <div class="item_en" @click="goBooking(4)"><img src="@/assets/dance/btn05.png"> 46 <div class="item_en" @click="popRemark(4)"><img src="@/assets/dance/btn05.png">
46 <p>MAKEUP APPOINTMENT</p> 47 <p>MAKEUP APPOINTMENT</p>
47 </div></el-col> 48 </div></el-col>
48 <el-col :sm="12" :lg="8"> 49 <el-col :sm="12" :lg="8">
49 <div class="item_en" @click="goBooking(5)"><img src="@/assets/dance/btn06.png"> 50 <div class="item_en" @click="popRemark(5)"><img src="@/assets/dance/btn06.png">
50 <p>PHOTOGRAPHY APPOINTMENT</p> 51 <p>PHOTOGRAPHY APPOINTMENT</p>
51 </div></el-col> 52 </div></el-col>
52 </el-row> 53 </el-row>
53 </div> 54 </div>
55 <order-remark ref="orderRemarkRef" @submit="goBooking"/>
56
54 </template> 57 </template>
55 58
56 <script setup> 59 <script setup>
57 import {useRouter} from "vue-router"; 60 import {useRouter} from "vue-router";
58 61
59 const router = useRouter() 62 const router = useRouter()
63 import OrderRemark from '@/viewsPc/components/orderRemark'
64 const {proxy} = getCurrentInstance()
60 import {useStorage} from "@vueuse/core/index"; 65 import {useStorage} from "@vueuse/core/index";
61 import {ElMessage} from "element-plus"; 66 import {ElMessage} from "element-plus";
67 import {getCurrentInstance} from "@vue/runtime-core";
68 import {computed, onMounted, watch} from "vue";
69 import {getBaseInfoByActiveId} from "@/apiPc/booking";
62 const props = defineProps({ 70 const props = defineProps({
63 matchId: { 71 matchId: {
64 type: String, 72 type: String,
...@@ -67,12 +75,48 @@ const props = defineProps({ ...@@ -67,12 +75,48 @@ const props = defineProps({
67 } 75 }
68 }) 76 })
69 const language= useStorage('language',0) 77 const language= useStorage('language',0)
78 const form = ref({})
79 const matchId = computed(()=>props.matchId);
80
81 watch(matchId,(val)=>{
82 if(val && val!='0'){
83 getBaseInfoByActiveId(props.matchId).then(res=>{
84 form.value = res.data || null
85 }).catch(err=>{
86 console.log(err)
87 form.value = null
88 })
89 }
90 })
91
92 onMounted(()=>{
93
94 })
95 function building() {
96 ElMessage.warning(language.value==0?'感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。':'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.')
97 return
98 }
99 function popRemark(type){
100 if(!form.value){
101 building()
102 return
103 }
104 if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || type=='4' || type=='5'){
105 building()
106 return
107 }
108 const params = {
109 matchId: props.matchId,
110 title: language.value == 0 ?'预订说明':'Booking Instructions',
111 type: type
112 }
113 proxy.$refs['orderRemarkRef'].open(params)
114 }
70 function goBooking(n) { 115 function goBooking(n) {
71 // ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!')
72 // return
73 switch (n) { 116 switch (n) {
74 case 0: 117 case 0:
75 // 票务 118 // 票务
119 building()
76 router.push({path: `/booking/ticket/${props.matchId}`}) 120 router.push({path: `/booking/ticket/${props.matchId}`})
77 break; 121 break;
78 case 1: 122 case 1:
...@@ -89,10 +133,14 @@ function goBooking(n) { ...@@ -89,10 +133,14 @@ function goBooking(n) {
89 break; 133 break;
90 case 4: 134 case 4:
91 //化妆 135 //化妆
136 building()
137
92 router.push({path: `/booking/makeup/${props.matchId}`}) 138 router.push({path: `/booking/makeup/${props.matchId}`})
93 break; 139 break;
94 case 5: 140 case 5:
95 //拍照 141 //拍照
142 building()
143
96 router.push({path: `/booking/photography/${props.matchId}`}) 144 router.push({path: `/booking/photography/${props.matchId}`})
97 break; 145 break;
98 } 146 }
......
1 <template>
2 <el-dialog :title="title" v-model="show" width="30%" @close="close">
3 <div>
4 <div class="pd20" v-html="form.reserveDes"></div>
5 </div>
6 <template #footer>
7 <div class="dialog-footer text-center">
8 <el-button type="primary" class="btn-lineG w200px" round @click="ok">{{language==0?'确定':'Confirm'}}</el-button>
9 </div>
10 </template>
11 </el-dialog>
12 </template>
13
14 <script setup>
15 import {getBaseInfoByActiveId} from "@/apiPc/booking";
16 import {getCurrentInstance} from "@vue/runtime-core";
17 import {useStorage} from "@vueuse/core/index";
18 const emit = defineEmits([ 'submit'])
19 const {proxy} = getCurrentInstance()
20 const language= useStorage('language',0)
21 import useUserStore from "@/store/modules/user";
22 const user = useUserStore().user
23 const title = ref('')
24 const show = ref(false)
25 const form = ref({})
26 let matchId = ''
27 let type = ''
28 const open = (params) => {
29 title.value = params.title
30 matchId = params.matchId
31 type = params.type
32 show.value = true
33 getData()
34 }
35 defineExpose({
36 open
37 })
38
39 function getData() {
40 console.log(matchId)
41 getBaseInfoByActiveId(matchId).then(res=>{
42 form.value = res.data || {}
43 }).catch(err=>{
44 console.log(err)
45 })
46 }
47 function close() {
48 show.value = false
49 }
50 function ok() {
51 // type
52 show.value = false
53
54 // if(!user){
55 // useUserStore().setVisitor()
56 // } else {
57 emit('submit', type)
58 // }
59 }
60 </script>
61
62 <style scoped lang="scss">
63
64 </style>
...@@ -83,6 +83,9 @@ function init(){ ...@@ -83,6 +83,9 @@ function init(){
83 getWeather().then(res=>{ 83 getWeather().then(res=>{
84 weatherObj.value = JSON.parse(res.data).data 84 weatherObj.value = JSON.parse(res.data).data
85 console.log(weatherObj.value) 85 console.log(weatherObj.value)
86 }).catch(err=>{
87 console.log(err)
88 showgg.value = false
86 }) 89 })
87 } 90 }
88 const popWeather = () => { 91 const popWeather = () => {
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
48 <el-row style="align-items: center"> 48 <el-row style="align-items: center">
49 <el-col :sm="24" :lg="10"> 49 <el-col :sm="24" :lg="10">
50 <div class="bgbg"> 50 <div class="bgbg">
51 <img src="@/assets/dance/text.png"> 51 <h1 style="color: #fff">{{matchData?.name}}</h1>
52 <a class="zn-btn" @click="goGuide" target="_blank">参赛指南 52 <a class="zn-btn" @click="goGuide" target="_blank">参赛指南
53 <el-icon> 53 <el-icon>
54 <download/> 54 <download/>
...@@ -418,7 +418,7 @@ const init = () => { ...@@ -418,7 +418,7 @@ const init = () => {
418 }) 418 })
419 } 419 }
420 const carouselChange = (e) => { 420 const carouselChange = (e) => {
421 console.log(e) 421 console.log(e.name)
422 matchData.value = maList.value[e] 422 matchData.value = maList.value[e]
423 } 423 }
424 const goDetail = (n) => { 424 const goDetail = (n) => {
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <el-carousel height="450px" :autoplay="false" arrow="hover"> 4 <el-carousel height="450px" :autoplay="false" arrow="hover" @change="carouselChange">
5 <el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id"> 5 <el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id">
6 <div class="bannerItem"> 6 <div class="bannerItem">
7 <div class="h100"> 7 <div class="h100">
...@@ -45,7 +45,7 @@ ...@@ -45,7 +45,7 @@
45 <el-row> 45 <el-row>
46 <el-col :sm="24" :lg="10"> 46 <el-col :sm="24" :lg="10">
47 <div class="bgbg"> 47 <div class="bgbg">
48 <h1 style="color: #fff">WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024</h1> 48 <h1 style="color: #fff">{{matchData?.name}}</h1>
49 <a class="zn-btn" @click="goGuide"> 49 <a class="zn-btn" @click="goGuide">
50 GUIDELINE 50 GUIDELINE
51 <el-icon><download /></el-icon> 51 <el-icon><download /></el-icon>
...@@ -412,7 +412,10 @@ const init = () => { ...@@ -412,7 +412,10 @@ const init = () => {
412 }) 412 })
413 } 413 }
414 414
415 415 const carouselChange = (e) => {
416 console.log(e.name)
417 matchData.value = maList.value[e]
418 }
416 const gosaiC = () => { 419 const gosaiC = () => {
417 router.push({ 420 router.push({
418 path: `/saiC/index` 421 path: `/saiC/index`
......
...@@ -215,14 +215,15 @@ const data = reactive({ ...@@ -215,14 +215,15 @@ const data = reactive({
215 groupId: '0', 215 groupId: '0',
216 signType: '', 216 signType: '',
217 activeStep: 1, 217 activeStep: 1,
218 isNational:false 218 isNational:false,
219 languageSource:''
219 }) 220 })
220 const {loading, 221 const {loading,
221 form,personAllList, 222 form,personAllList,
222 rules, 223 rules,
223 signType, 224 signType,
224 groupId, 225 groupId,
225 hasChooseObj,activeStep,isNational 226 hasChooseObj,activeStep,isNational,languageSource
226 } = toRefs(data) 227 } = toRefs(data)
227 let matchId = '' 228 let matchId = ''
228 const user = useUserStore().user 229 const user = useUserStore().user
...@@ -232,6 +233,7 @@ onMounted(() => { ...@@ -232,6 +233,7 @@ onMounted(() => {
232 groupId.value = group.id 233 groupId.value = group.id
233 signType.value = route.query.signType || '' 234 signType.value = route.query.signType || ''
234 isNational.value = route.query.isNational 235 isNational.value = route.query.isNational
236 languageSource.value = route.query.languageSource
235 if(!user){ 237 if(!user){
236 router.push({name: 'home'}) 238 router.push({name: 'home'})
237 return 239 return
...@@ -359,22 +361,22 @@ function goNext() { ...@@ -359,22 +361,22 @@ function goNext() {
359 } 361 }
360 362
361 function goPrev() { 363 function goPrev() {
362 if(isNational.value){ 364 if(languageSource.value=='100'){
363 router.push({ 365 router.push({
364 name: `teamSign`, 366 name: `teamSignCn`,
365 query: { 367 query: {
366 matchId: matchId, 368 matchId: matchId,
367 groupId: groupId.value, 369 groupId: groupId.value,
368 isNational:isNational.value 370 isNational: false
369 } 371 }
370 }) 372 })
371 } else { 373 } else {
372 router.push({ 374 router.push({
373 name: `teamSignCn`, 375 name: `teamSign`,
374 query: { 376 query: {
375 matchId: matchId, 377 matchId: matchId,
376 groupId: groupId.value, 378 groupId: groupId.value,
377 isNational: false 379 isNational:isNational.value
378 } 380 }
379 }) 381 })
380 } 382 }
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
19 </div> 19 </div>
20 <div class="panel-body" style="padding: 10px"> 20 <div class="panel-body" style="padding: 10px">
21 <div style="margin: 0 4px 10px;display: flex"> 21 <div style="margin: 0 4px 10px;display: flex">
22 <!-- 可通过选手管理,增加和编辑运动员-->
23
22 <el-select multiple v-model="choosedchoosed" collapse-tags-tooltip filterable 24 <el-select multiple v-model="choosedchoosed" collapse-tags-tooltip filterable
23 @change="changechoosed"> 25 @change="changechoosed">
24 <el-option v-for="c in athletesList" :key="c.id" :label="c.xing + c.ming" :value="c.id"> 26 <el-option v-for="c in athletesList" :key="c.id" :label="c.xing + c.ming" :value="c.id">
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
5 destroy-on-close 5 destroy-on-close
6 > 6 >
7 <!-- 国际赛事随行人员--> 7 <!-- 国际赛事随行人员-->
8 <el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="140px" 8 <el-form ref="dialogRef" :model="form" :rules="language==0?rules_cn:rules" label-width="140px"
9 > 9 >
10 <el-row :gutter="30" class="mt30"> 10 <el-row :gutter="30" class="mt30">
11 <el-col :lg="12" class="touxiang"> 11 <el-col :lg="12" class="touxiang">
...@@ -165,10 +165,10 @@ const data = reactive({ ...@@ -165,10 +165,10 @@ const data = reactive({
165 // countryId: 240, 165 // countryId: 240,
166 // sex: '0' 166 // sex: '0'
167 }, 167 },
168 rules: { 168 rules_cn: {
169 // xing: [{required: true, message: '必填', trigger: 'blur'}], 169 xing: [{required: true, message: '必填', trigger: 'blur'}],
170 ming: [{required: true, message: '必填', trigger: 'blur'}], 170 ming: [{required: true, message: '必填', trigger: 'blur'}],
171 // countryId: [{required: true, message: '必填', trigger: 'change'}], 171 countryId: [{required: true, message: '必填', trigger: 'change'}],
172 // idcType: [{required: true, message: '必填', trigger: 'change'}], 172 // idcType: [{required: true, message: '必填', trigger: 'change'}],
173 // idcCode: [{required: true, message: '必填', trigger: 'blur'}], 173 // idcCode: [{required: true, message: '必填', trigger: 'blur'}],
174 // phone: [{required: true, message: '必填', trigger: 'blur'}], 174 // phone: [{required: true, message: '必填', trigger: 'blur'}],
...@@ -179,8 +179,8 @@ const data = reactive({ ...@@ -179,8 +179,8 @@ const data = reactive({
179 sex: [{required: true, message: '必填', trigger: 'change'}], 179 sex: [{required: true, message: '必填', trigger: 'change'}],
180 labelArr: [{required: true, message: '必填', trigger: 'change'}] 180 labelArr: [{required: true, message: '必填', trigger: 'change'}]
181 }, 181 },
182 rules_cn: { 182 rules: {
183 // xing: [{required: true, message: 'required', trigger: 'blur'}], 183 xing: [{required: true, message: 'required', trigger: 'blur'}],
184 ming: [{required: true, message: 'required', trigger: 'blur'}], 184 ming: [{required: true, message: 'required', trigger: 'blur'}],
185 countryId: [{required: true, message: 'required', trigger: 'change'}], 185 countryId: [{required: true, message: 'required', trigger: 'change'}],
186 // idcType: [{required: true, message: 'required', trigger: 'change'}], 186 // idcType: [{required: true, message: 'required', trigger: 'change'}],
...@@ -368,7 +368,7 @@ function giveBirthDay() { ...@@ -368,7 +368,7 @@ function giveBirthDay() {
368 // 判断身份证正确性/赋值生日 368 // 判断身份证正确性/赋值生日
369 if (form.value.idcType == '0') { 369 if (form.value.idcType == '0') {
370 if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) { 370 if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) {
371 ElMessage.warning('请输入正确的身份证号码') 371 ElMessage.warning(language.value == 0 ? '请输入正确的身份证号码' :'Please enter the correct Resident ID card')
372 } else { 372 } else {
373 let tmpStr = '' 373 let tmpStr = ''
374 if (form.value.idcCode.length == 15) { 374 if (form.value.idcCode.length == 15) {
......
...@@ -326,7 +326,7 @@ function codeSuccess(msg) { ...@@ -326,7 +326,7 @@ function codeSuccess(msg) {
326 isCodeTrue.value = true 326 isCodeTrue.value = true
327 checkWdsfAthletes({card: card.value,groupId:groupId}).then(res => { 327 checkWdsfAthletes({card: card.value,groupId:groupId}).then(res => {
328 if (res.data.wdsfFlag==-1) { 328 if (res.data.wdsfFlag==-1) {
329 ElMessage.warning('运动员国籍不符,无法绑定该团体') 329 ElMessage.warning(language.value == 0 ?'您添加的运动员代表国家/地区,与团体账号注册的国家/地区不符,无法添加':'The athlete \'s representing, does not match the group account‘s country/region and cannot be added.')
330 isCodeTrue.value = false 330 isCodeTrue.value = false
331 return 331 return
332 } 332 }
......
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
53 <el-input v-model="form.passportNo"/> 53 <el-input v-model="form.passportNo"/>
54 </el-form-item> 54 </el-form-item>
55 <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy"> 55 <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy">
56 <file-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false" 56 <image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false"
57 :button-text="language==0?'上传':'Upload'"/> 57 :button-text="language==0?'上传':'Upload'"/>
58 </el-form-item> 58 </el-form-item>
59 <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival"> 59 <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival">
...@@ -91,6 +91,7 @@ import {getCurrentInstance, watch} from "vue"; ...@@ -91,6 +91,7 @@ import {getCurrentInstance, watch} from "vue";
91 import {nextTick} from "@vue/runtime-core"; 91 import {nextTick} from "@vue/runtime-core";
92 import {ElMessage, ElMessageBox} from "element-plus"; 92 import {ElMessage, ElMessageBox} from "element-plus";
93 import {addInvitation, countryList} from "@/apiPc/match"; 93 import {addInvitation, countryList} from "@/apiPc/match";
94 import ImageUpload from "@/components/ImageUpload";
94 95
95 const {proxy} = getCurrentInstance() 96 const {proxy} = getCurrentInstance()
96 const language = useStorage('language', 0) 97 const language = useStorage('language', 0)
......
1 <template> 1 <template>
2 <div class="collapsebox"> 2 <div class="collapsebox">
3 <div class="pd20"> 3 <div class="pd20">
4 <table class="table" cellspacing="0" cellpadding="0" v-if="list.length > 0"> 4 <el-table :data="list" border>
5 <tr v-if="language==0"> 5 <el-table-column :label="language==0?'组别编号':'Event Code'" prop="code" align="center"></el-table-column>
6 <th>组别编号</th> 6 <el-table-column :label="language==0?'组别名称':'Event'" min-width="150" prop="name" align="center"></el-table-column>
7 <th>组别名称</th> 7 <el-table-column :label="language==0?'舞种':'DISCIPLINE'" width="110" prop="danceType" align="center">
8 <th>舞种</th> 8 </el-table-column>
9 <th>舞种明细</th> 9 <el-table-column :label="language==0?'舞种明细':'Dance Detail'" width="120" prop="danceTypeDetailStr" align="center"></el-table-column>
10 <th>参赛性别</th> 10
11 <th>参赛年龄</th> 11 <el-table-column :label="language==0?'参赛性别':'Sex'" align="center">
12 <th>服务费(元)</th> 12 <template #default="scope">
13 </tr> 13 <span v-if="scope.row.playTypeStr">{{ scope.row.playTypeStr }}</span>
14 <tr v-else> 14 <span v-else>{{ scope.row.playType }}</span>
15 <th>EVENT code</th> 15 </template>
16 <th>Group</th> 16 </el-table-column>
17 <th>DISCIPLINE</th> 17 <el-table-column :label="language==0?'参赛年龄':'Age'" align="center" min-width="100">
18 <th>Dance Detail</th> 18 <template #default="scope">
19 <th>Sex</th>
20 <th>Age</th>
21 <th>Registration Fee</th>
22 </tr>
23 <tr v-for="(p,index) in list" :key="index">
24 <td>{{ p.code }}</td>
25 <td>{{ p.name }}</td>
26 <td>{{ p.danceType }}</td>
27 <td>{{ p.danceTypeDetailStr }}</td>
28 <td>{{ p.playTypeStr }}</td>
29 <td>
30 <!-- {{ isNational }}-->
31 <div v-if="isNational"> 19 <div v-if="isNational">
32 <span v-if="p.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span> 20 <span v-if="scope.row.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>
33 <span v-if="p.ageGroup == '1'" >Juvenile I</span> 21 <span v-if="scope.row.ageGroup == '1'" >Juvenile I</span>
34 <span v-if="p.ageGroup == '2'" >Juvenile II</span> 22 <span v-if="scope.row.ageGroup == '2'" >Juvenile II</span>
35 <span v-if="p.ageGroup == '3'" >Juv1& II (comb.)</span> 23 <span v-if="scope.row.ageGroup == '3'" >Juv1& II (comb.)</span>
36 <span v-if="p.ageGroup == '4'" >Junior I</span> 24 <span v-if="scope.row.ageGroup == '4'" >Junior I</span>
37 <span v-if="p.ageGroup == '5'" >Junior II</span> 25 <span v-if="scope.row.ageGroup == '5'" >Junior II</span>
38 <span v-if="p.ageGroup == '6'" >Juv I & II (comb.)</span> 26 <span v-if="scope.row.ageGroup == '6'" >Juv I & II (comb.)</span>
39 <span v-if="p.ageGroup == '7'" >Youth</span> 27 <span v-if="scope.row.ageGroup == '7'" >Youth</span>
40 <span v-if="p.ageGroup == '8'" >Under 21</span> 28 <span v-if="scope.row.ageGroup == '8'" >Under 21</span>
41 <span v-if="p.ageGroup == '9'" >Adult</span> 29 <span v-if="scope.row.ageGroup == '9'" >Adult</span>
42 <span v-if="p.ageGroup == '10'" >Senior I</span> 30 <span v-if="scope.row.ageGroup == '10'" >Senior I</span>
43 <span v-if="p.ageGroup == '11'" >Senior II</span> 31 <span v-if="scope.row.ageGroup == '11'" >Senior II</span>
44 <span v-if="p.ageGroup == '12'" >Senior III</span> 32 <span v-if="scope.row.ageGroup == '12'" >Senior III</span>
45 <span v-if="p.ageGroup == '13'" >Senior IV</span> 33 <span v-if="scope.row.ageGroup == '13'" >Senior IV</span>
46 <span v-if="p.ageGroup == '14'" >Senior V</span> 34 <span v-if="scope.row.ageGroup == '14'" >Senior V</span>
47 </div> 35 </div>
48 <div v-else> 36 <div v-else>
49 <div>{{ p.birthPeriod }}</div> 37 <div>{{ scope.row.birthPeriod }}</div>
50 <div>{{p.birthPeriodSecond}}</div> 38 <div>{{scope.row.birthPeriodSecond}}</div>
51 </div> 39 </div>
40 </template>
41 </el-table-column>
42 <el-table-column :label="language==0?'服务费':'Registration Fee'" width="160" align="center">
43 <template #default="scope">
44 <div class="text-primary">{{ language==0?'¥':'€' }}{{ scope.row.serviceFee }}</div>
45 </template>
46 </el-table-column>
47 </el-table>
48
49 <!-- <table class="table" cellspacing="0" cellpadding="0" v-if="list.length > 0">-->
50 <!-- <tr v-if="language==0">-->
51 <!-- <th>组别编号</th>-->
52 <!-- <th>组别名称</th>-->
53 <!-- <th>舞种</th>-->
54 <!-- <th>舞种明细</th>-->
55 <!-- <th>参赛性别</th>-->
56 <!-- <th>参赛年龄</th>-->
57 <!-- <th>服务费(元)</th>-->
58 <!-- </tr>-->
59 <!-- <tr v-else>-->
60 <!-- <th>EVENT code</th>-->
61 <!-- <th>EVENT</th>-->
62 <!-- <th>DISCIPLINE</th>-->
63 <!-- <th>Dance Detail</th>-->
64 <!-- <th>Sex</th>-->
65 <!-- <th>Age</th>-->
66 <!-- <th>Registration Fee</th>-->
67 <!-- </tr>-->
68 <!-- <tr v-for="(p,index) in list" :key="index">-->
69 <!-- <td>{{ p.code }}</td>-->
70 <!-- <td>{{ p.name }}</td>-->
71 <!-- <td>{{ p.danceType }}</td>-->
72 <!-- <td>{{ p.danceTypeDetailStr }}</td>-->
73 <!-- <td>{{ p.playTypeStr }}</td>-->
74 <!-- <td>-->
75 <!--&lt;!&ndash; {{ isNational }}&ndash;&gt;-->
76 <!-- <div v-if="isNational">-->
77 <!-- <span v-if="p.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>-->
78 <!-- <span v-if="p.ageGroup == '1'" >Juvenile I</span>-->
79 <!-- <span v-if="p.ageGroup == '2'" >Juvenile II</span>-->
80 <!-- <span v-if="p.ageGroup == '3'" >Juv1& II (comb.)</span>-->
81 <!-- <span v-if="p.ageGroup == '4'" >Junior I</span>-->
82 <!-- <span v-if="p.ageGroup == '5'" >Junior II</span>-->
83 <!-- <span v-if="p.ageGroup == '6'" >Juv I & II (comb.)</span>-->
84 <!-- <span v-if="p.ageGroup == '7'" >Youth</span>-->
85 <!-- <span v-if="p.ageGroup == '8'" >Under 21</span>-->
86 <!-- <span v-if="p.ageGroup == '9'" >Adult</span>-->
87 <!-- <span v-if="p.ageGroup == '10'" >Senior I</span>-->
88 <!-- <span v-if="p.ageGroup == '11'" >Senior II</span>-->
89 <!-- <span v-if="p.ageGroup == '12'" >Senior III</span>-->
90 <!-- <span v-if="p.ageGroup == '13'" >Senior IV</span>-->
91 <!-- <span v-if="p.ageGroup == '14'" >Senior V</span>-->
92 <!-- </div>-->
93 <!-- <div v-else>-->
94 <!-- <div>{{ p.birthPeriod }}</div>-->
95 <!-- <div>{{p.birthPeriodSecond}}</div>-->
96 <!-- </div>-->
52 97
53 <!-- <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>--> 98 <!-- &lt;!&ndash; <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>&ndash;&gt;-->
54 </td> 99 <!-- </td>-->
55 <td>{{ language==0?'¥':'€' }}{{ p.serviceFee }}</td> 100 <!-- <td>{{ language==0?'¥':'€' }}{{ p.serviceFee }}</td>-->
56 </tr> 101 <!-- </tr>-->
57 </table> 102 <!-- </table>-->
58 103
59 </div> 104 </div>
60 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list.length == 0" description=""/> 105 <!-- <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list.length == 0" description=""/>-->
61 </div> 106 </div>
62 </template> 107 </template>
63 108
...@@ -81,7 +126,7 @@ const props = defineProps({ ...@@ -81,7 +126,7 @@ const props = defineProps({
81 126
82 <style scoped lang="scss"> 127 <style scoped lang="scss">
83 .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1; 128 .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1;
84 th{background: #eee;padding: 6px 10px; 129 th{background: #eee;padding: 6px 10px;text-transform: uppercase;
85 border-right: 1px solid #e1e1e1; 130 border-right: 1px solid #e1e1e1;
86 border-bottom:1px solid #e1e1e1; 131 border-bottom:1px solid #e1e1e1;
87 font-size: 15px; 132 font-size: 15px;
......
...@@ -6,8 +6,8 @@ ...@@ -6,8 +6,8 @@
6 </div> 6 </div>
7 <div class="xzbox" v-html="form.ocOrganizer"> 7 <div class="xzbox" v-html="form.ocOrganizer">
8 </div> 8 </div>
9 <div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div> 9 <div class="indexTitle" v-if="form.languageSource!='100'"><h3 class="leftboderTT">报名须知</h3></div>
10 <div class="xzbox"> 10 <div class="xzbox" v-if="form.languageSource!='100'">
11 <div v-html="form.signKnow"></div> 11 <div v-html="form.signKnow"></div>
12 <el-link v-if="form.signKnowUrl" type="primary" :href="fillImgUrl(JSON.parse(form.signKnowUrl)[0]?.url)" target="_blank"> 12 <el-link v-if="form.signKnowUrl" type="primary" :href="fillImgUrl(JSON.parse(form.signKnowUrl)[0]?.url)" target="_blank">
13 <el-icon :size="20"> 13 <el-icon :size="20">
...@@ -25,20 +25,20 @@ ...@@ -25,20 +25,20 @@
25 <!-- {{ JSON.parse(form.disclaimerUrl)[0]?.name }}--> 25 <!-- {{ JSON.parse(form.disclaimerUrl)[0]?.name }}-->
26 <!-- </el-link>--> 26 <!-- </el-link>-->
27 <!-- </div>--> 27 <!-- </div>-->
28 <!-- <div class="indexTitle"><h3 class="leftboderTT">赛事规程</h3></div>--> 28 <div class="indexTitle" v-if="form.languageSource=='100'"><h3 class="leftboderTT">赛事规程</h3></div>
29 <!-- <div class="xzbox">--> 29 <div class="xzbox" v-if="form.languageSource=='100'">
30 <div v-html="form.ruleContent"></div>
31 <el-link v-if="form.ruleUrl" type="primary" :href="fillImgUrl(JSON.parse(form.ruleUrl)[0]?.url)" target="_blank">
32 <el-icon :size="20">
33 <Download />
34 </el-icon>
35 {{ JSON.parse(form.ruleUrl)[0]?.name }}
36 </el-link>
37 </div>
38 <!-- <div class="indexTitle" v-if="form.type==1&&form.cptProjectList?.length > 0"><h3 class="leftboderTT">竞赛项目</h3></div>-->
39 <!-- <div v-if="form.type==1&&form.cptProjectList?.length > 0">-->
30 40
31 <!-- <el-link v-if="form.ruleUrl" type="primary" :href="fillImgUrl(JSON.parse(form.ruleUrl)[0]?.url)" target="_blank">-->
32 <!-- <el-icon :size="20">-->
33 <!-- <Download />-->
34 <!-- </el-icon>-->
35 <!-- {{ JSON.parse(form.ruleUrl)[0]?.name }}-->
36 <!-- </el-link>-->
37 <!-- </div>--> 41 <!-- </div>-->
38 <div class="indexTitle" v-if="form.type==1&&form.cptProjectList?.length > 0"><h3 class="leftboderTT">竞赛项目</h3></div>
39 <div v-if="form.type==1&&form.cptProjectList?.length > 0">
40
41 </div>
42 42
43 </div> 43 </div>
44 <div style="padding: 0 20px 20px" v-else> 44 <div style="padding: 0 20px 20px" v-else>
......
...@@ -2,37 +2,37 @@ ...@@ -2,37 +2,37 @@
2 <div style="filter: opacity(1)"> 2 <div style="filter: opacity(1)">
3 <el-row :gutter="14" v-if="language==0"> 3 <el-row :gutter="14" v-if="language==0">
4 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 4 <el-col :lg="4" :md="8" :sm="12" :xs="12">
5 <div class="funcBtn" @click="goBooking(0)"> 5 <div class="funcBtn" @click="popRemark(0)">
6 <img src="@/assets/dance/btn04.png"/> 6 <img src="@/assets/dance/btn04.png"/>
7 <h4>票务预订</h4> 7 <h4>票务预订</h4>
8 </div> 8 </div>
9 </el-col> 9 </el-col>
10 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 10 <el-col :lg="4" :md="8" :sm="12" :xs="12">
11 <div class="funcBtn" @click="goBooking(1)"> 11 <div class="funcBtn" @click="popRemark(1)">
12 <img src="@/assets/dance/btn01.png"/> 12 <img src="@/assets/dance/btn01.png"/>
13 <h4>酒店预</h4> 13 <h4>酒店预</h4>
14 </div> 14 </div>
15 </el-col> 15 </el-col>
16 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 16 <el-col :lg="4" :md="8" :sm="12" :xs="12">
17 <div class="funcBtn" @click="goBooking(2)"> 17 <div class="funcBtn" @click="popRemark(2)">
18 <img src="@/assets/dance/btn02.png"/> 18 <img src="@/assets/dance/btn02.png"/>
19 <h4>车辆预</h4> 19 <h4>车辆预</h4>
20 </div> 20 </div>
21 </el-col> 21 </el-col>
22 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 22 <el-col :lg="4" :md="8" :sm="12" :xs="12">
23 <div class="funcBtn" @click="goBooking(3)"> 23 <div class="funcBtn" @click="popRemark(3)">
24 <img src="@/assets/dance/btn03.png"/> 24 <img src="@/assets/dance/btn03.png"/>
25 <h4>餐饮预订</h4> 25 <h4>餐饮预订</h4>
26 </div> 26 </div>
27 </el-col> 27 </el-col>
28 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 28 <el-col :lg="4" :md="8" :sm="12" :xs="12">
29 <div class="funcBtn" @click="goBooking(4)"> 29 <div class="funcBtn" @click="popRemark(4)">
30 <img src="@/assets/dance/btn05.png"/> 30 <img src="@/assets/dance/btn05.png"/>
31 <h4>化妆预约</h4> 31 <h4>化妆预约</h4>
32 </div> 32 </div>
33 </el-col> 33 </el-col>
34 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 34 <el-col :lg="4" :md="8" :sm="12" :xs="12">
35 <div class="funcBtn" @click="goBooking(5)"> 35 <div class="funcBtn" @click="popRemark(5)">
36 <img src="@/assets/dance/btn06.png"/> 36 <img src="@/assets/dance/btn06.png"/>
37 <h4>拍照预约</h4> 37 <h4>拍照预约</h4>
38 </div> 38 </div>
...@@ -40,49 +40,57 @@ ...@@ -40,49 +40,57 @@
40 </el-row> 40 </el-row>
41 <el-row :gutter="14" v-else> 41 <el-row :gutter="14" v-else>
42 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 42 <el-col :lg="4" :md="8" :sm="12" :xs="12">
43 <div class="funcBtn" @click="building"> 43 <div class="funcBtn" @click="popRemark(0)">
44 <img src="@/assets/dance/btn04.png"/> 44 <img src="@/assets/dance/btn04.png"/>
45 <h4>TICKET BOOKING</h4> 45 <h4>TICKET BOOKING</h4>
46 </div> 46 </div>
47 </el-col> 47 </el-col>
48 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 48 <el-col :lg="4" :md="8" :sm="12" :xs="12">
49 <div class="funcBtn" @click="goBooking(1)"> 49 <div class="funcBtn" @click="popRemark(1)">
50 <img src="@/assets/dance/btn01.png"/> 50 <img src="@/assets/dance/btn01.png"/>
51 <h4>HOTEL RESERVATION</h4> 51 <h4>HOTEL RESERVATION</h4>
52 </div> 52 </div>
53 </el-col> 53 </el-col>
54 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 54 <el-col :lg="4" :md="8" :sm="12" :xs="12">
55 <div class="funcBtn" @click="building"> 55 <div class="funcBtn" @click="popRemark(2)">
56 <img src="@/assets/dance/btn02.png"/> 56 <img src="@/assets/dance/btn02.png"/>
57 <h4>TRANSPORTATION RESERVATION</h4> 57 <h4>TRANSPORTATION RESERVATION</h4>
58 </div> 58 </div>
59 </el-col> 59 </el-col>
60 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 60 <el-col :lg="4" :md="8" :sm="12" :xs="12">
61 <div class="funcBtn" @click="building"> 61 <div class="funcBtn" @click="popRemark(3)">
62 <img src="@/assets/dance/btn03.png"/> 62 <img src="@/assets/dance/btn03.png"/>
63 <h4>DINING RESERVATION</h4> 63 <h4>DINING RESERVATION</h4>
64 </div> 64 </div>
65 </el-col> 65 </el-col>
66 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 66 <el-col :lg="4" :md="8" :sm="12" :xs="12">
67 <div class="funcBtn" @click="building"> 67 <div class="funcBtn" @click="popRemark(4)">
68 <img src="@/assets/dance/btn05.png"/> 68 <img src="@/assets/dance/btn05.png"/>
69 <h4>MAKEUP APPOINTMENT</h4> 69 <h4>MAKEUP APPOINTMENT</h4>
70 </div> 70 </div>
71 </el-col> 71 </el-col>
72 <el-col :lg="4" :md="8" :sm="12" :xs="12"> 72 <el-col :lg="4" :md="8" :sm="12" :xs="12">
73 <div class="funcBtn" @click="building"> 73 <div class="funcBtn" @click="popRemark(5)">
74 <img src="@/assets/dance/btn06.png"/> 74 <img src="@/assets/dance/btn06.png"/>
75 <h4>PHOTOGRAPHY APPOINTMENT</h4> 75 <h4>PHOTOGRAPHY APPOINTMENT</h4>
76 </div> 76 </div>
77 </el-col> 77 </el-col>
78 </el-row> 78 </el-row>
79 </div> 79 </div>
80
81 <order-remark ref="orderRemarkRef" @submit="goBooking"/>
80 </template> 82 </template>
81 83
82 <script setup> 84 <script setup>
83 import {ElMessage} from "element-plus"; 85 import {ElMessage} from "element-plus";
84 import {useRouter} from "vue-router"; 86 import {useRouter} from "vue-router";
85 import {useStorage} from "@vueuse/core/index"; 87 import {useStorage} from "@vueuse/core/index";
88 import OrderRemark from '@/viewsPc/components/orderRemark'
89 import {getBaseInfoByActiveId} from "@/apiPc/booking";
90 import {getCurrentInstance} from "@vue/runtime-core";
91 import {onMounted} from "vue";
92 const {proxy} = getCurrentInstance()
93
86 const router = useRouter() 94 const router = useRouter()
87 const language= useStorage('language',0) 95 const language= useStorage('language',0)
88 const props = defineProps({ 96 const props = defineProps({
...@@ -92,16 +100,41 @@ const props = defineProps({ ...@@ -92,16 +100,41 @@ const props = defineProps({
92 default: '0' 100 default: '0'
93 } 101 }
94 }) 102 })
103 const form = ref({})
104 onMounted(()=>{
105 getBaseInfoByActiveId(props.matchId).then(res=>{
106 form.value = res.data || null
107 }).catch(err=>{
108 form.value = null
109 console.log(err)
110 })
111 })
112
95 function building() { 113 function building() {
96 ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!') 114 ElMessage.warning(language.value==0?'感谢您对本次比赛的关注,该服务暂无可预订信息,敬请期待。':'Thank you for your attention to this competition. The service is currently unavailable for booking. Please stay tuned.')
115 return
97 } 116 }
98 function goBooking(n) { 117 function popRemark(type){
99 ElMessage.warning(language.value==0?'建设中,敬请期待':'Building!') 118 if(!form.value){
119 building()
100 return 120 return
101 121 }
122 if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || type=='4' || type=='5'){
123 building()
124 return
125 }
126 const params = {
127 matchId: props.matchId,
128 title: language.value == 0 ?'预订说明':'Booking Instructions',
129 type: type
130 }
131 proxy.$refs['orderRemarkRef'].open(params)
132 }
133 function goBooking(n) {
102 switch (n) { 134 switch (n) {
103 case 0: 135 case 0:
104 // 票务 136 // 票务
137 building()
105 router.push({path: `/booking/ticket/${props.matchId}`}) 138 router.push({path: `/booking/ticket/${props.matchId}`})
106 break; 139 break;
107 case 1: 140 case 1:
...@@ -118,10 +151,12 @@ function goBooking(n) { ...@@ -118,10 +151,12 @@ function goBooking(n) {
118 break; 151 break;
119 case 4: 152 case 4:
120 //化妆 153 //化妆
154 building()
121 router.push({path: `/booking/makeup/${props.matchId}`}) 155 router.push({path: `/booking/makeup/${props.matchId}`})
122 break; 156 break;
123 case 5: 157 case 5:
124 //拍照 158 //拍照
159 building()
125 router.push({path: `/booking/photography/${props.matchId}`}) 160 router.push({path: `/booking/photography/${props.matchId}`})
126 break; 161 break;
127 } 162 }
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
3 <el-table :data="list" border style="width: 100%"> 3 <el-table :data="list" border style="width: 100%">
4 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/> 4 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/>
5 <el-table-column :label="language==0?'组别代码':'EVENT code'" width="120px" prop="project.code"/> 5 <el-table-column :label="language==0?'组别代码':'EVENT code'" width="120px" prop="project.code"/>
6 <el-table-column :label="language==0?'组别':'Group'" prop="project.name"/> 6 <el-table-column :label="language==0?'组别':'EVENT'" prop="project.name"/>
7 <el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/> 7 <el-table-column :label="language==0?'舞种':'DISCIPLINE'" width="120px" prop="project.danceType"/>
8 <el-table-column :label="language==0?'参赛说明':'Participation Instructions'" min-width="160px"> 8 <el-table-column :label="language==0?'参赛说明':'Participation Instructions'" min-width="160px">
9 <template #default="scope"> 9 <template #default="scope">
10 <div v-html="scope.row.project.remarks"></div> 10 <div v-html="scope.row.project.remarks"></div>
......
...@@ -170,7 +170,8 @@ ...@@ -170,7 +170,8 @@
170 </el-row> 170 </el-row>
171 </el-card> 171 </el-card>
172 172
173 <quick-row :match-id="matchId"/> 173 <!-- 只联赛有-->
174 <quick-row :match-id="matchId" v-if="matchData.leagueId==0"/>
174 175
175 <el-row :gutter="20" v-if="matchData.type=='0'"> 176 <el-row :gutter="20" v-if="matchData.type=='0'">
176 <el-col :lg="18"> 177 <el-col :lg="18">
...@@ -200,7 +201,7 @@ ...@@ -200,7 +201,7 @@
200 <el-col :span="24"> 201 <el-col :span="24">
201 <el-table :data="signDoneGroupList"> 202 <el-table :data="signDoneGroupList">
202 <el-table-column prop="groupCode" :label="language == 0 ? '组别代码' :'EVENT CODE'" min-width="120"/> 203 <el-table-column prop="groupCode" :label="language == 0 ? '组别代码' :'EVENT CODE'" min-width="120"/>
203 <el-table-column prop="group" :label="language == 0 ?'组别':'Group'" min-width="120"/> 204 <el-table-column prop="EVENT" :label="language == 0 ?'组别':'Group'" min-width="120"/>
204 <el-table-column prop="maleAthName" :label="language == 0 ?'男运动员':'man name'" min-width="150"/> 205 <el-table-column prop="maleAthName" :label="language == 0 ?'男运动员':'man name'" min-width="150"/>
205 <el-table-column prop="femaleAthName" :label="language == 0 ?'女运动员':'woman name'" min-width="150"/> 206 <el-table-column prop="femaleAthName" :label="language == 0 ?'女运动员':'woman name'" min-width="150"/>
206 <el-table-column prop="danceType" :label="language == 0 ?'舞种':'Division'" min-width="120"/> 207 <el-table-column prop="danceType" :label="language == 0 ?'舞种':'Division'" min-width="120"/>
...@@ -273,6 +274,17 @@ ...@@ -273,6 +274,17 @@
273 </div> 274 </div>
274 </div> 275 </div>
275 </el-dialog> 276 </el-dialog>
277 <el-dialog v-model="upgradePop" class="pcloginpop" close-icon="CircleClose"
278 center width="450px" title="Upgrade">
279 <div>
280 <div class="rItem r1" @click="goUpdateTeam">
281 <h3>{{ language == 0 ? '升级机构用户' : 'Organization' }}</h3>
282 </div>
283 <div class="rItem r2" @click="goUpdatePersonal">
284 <h3>{{ language == 0 ? '升级个人用户' : 'Individual' }}</h3>
285 </div>
286 </div>
287 </el-dialog>
276 288
277 289
278 </div> 290 </div>
...@@ -338,6 +350,7 @@ const { ...@@ -338,6 +350,7 @@ const {
338 time, startSign,isNational 350 time, startSign,isNational
339 } = toRefs(data) 351 } = toRefs(data)
340 const signTypePop = ref(false) 352 const signTypePop = ref(false)
353 const upgradePop = ref(false)
341 onMounted(() => { 354 onMounted(() => {
342 if (group) { 355 if (group) {
343 groupId.value = group.id 356 groupId.value = group.id
...@@ -415,49 +428,29 @@ function choseSignType() { ...@@ -415,49 +428,29 @@ function choseSignType() {
415 } 428 }
416 } else { 429 } else {
417 checkIsSign().then(() => { 430 checkIsSign().then(() => {
418 switch (matchData.value.signType) { 431 switchSignType()
419 case '0': 432 })
420 if (user.utype == '1') {
421 goPersonalSign()
422 } else {
423 ElMessageBox.confirm(
424 language.value == 0 ?'当前活动是个人活动,无法报名':'The current event is a personal event, cannot register',
425 language.value == 0 ?'提示':'Warning',
426 {
427 confirmButtonText: language.value == 0 ?'好的':'OK',
428 cancelButtonText: language.value == 0 ?'取消':'Cancel',
429 type: 'warning',
430 }
431 )
432 }
433 break
434 case '1':
435 if (user.utype == '1') {
436 ElMessageBox.confirm(
437 language.value == 0 ?'当前活动是团队活动,无法报名':'The current event is a team event, cannot register',
438 language.value == 0 ?'提示':'Warning',
439 {
440 confirmButtonText: language.value == 0 ?'好的':'OK',
441 cancelButtonText: language.value == 0 ?'取消':'Cancel',
442 type: 'warning',
443 }
444 )
445 } else {
446 goTeamSign()
447 }
448 break
449 case '2':
450 if (user.utype == '1') {
451 goPersonalSign()
452 } else {
453 goTeamSign()
454 } 433 }
455 break 434 }
435 function goUpdateTeam() {
436 //升级团队
437 router.push({
438 name:'teamRegister',
439 query:{
440 step:'1',
441 matchId:matchId.value
456 } 442 }
457 }) 443 })
444 }
445 function goUpdatePersonal() {
446 //升级团队
447 router.push({
448 name:'personalRegister',
449 query:{
450 matchId:matchId.value
458 } 451 }
452 })
459 } 453 }
460
461 function goTeamSign() { 454 function goTeamSign() {
462 if (matchData.value.languageSource == '100') { 455 if (matchData.value.languageSource == '100') {
463 // 国内 456 // 国内
...@@ -479,12 +472,13 @@ function goTeamSign() { ...@@ -479,12 +472,13 @@ function goTeamSign() {
479 matchId: matchId.value, 472 matchId: matchId.value,
480 groupId: groupId.value, 473 groupId: groupId.value,
481 signType: matchData.value.signType, 474 signType: matchData.value.signType,
475 languageSource: matchData.value.languageSource,
482 isNational: false 476 isNational: false
483 } 477 }
484 }) 478 })
485 } else { 479 } else {
486 // 国际赛 480 // 国际赛
487 if(group.type!='4'&& matchData.value.countryLimit=='1'){ 481 if(group?.type!='4'&& matchData.value.countryLimit=='1'){
488 ElMessageBox.confirm( 482 ElMessageBox.confirm(
489 language.value==0?'您的团体类型不符合报名条件':'Your Team type does not meet the registration requirements', 483 language.value==0?'您的团体类型不符合报名条件':'Your Team type does not meet the registration requirements',
490 language.value==0?'提示':'Warning', 484 language.value==0?'提示':'Warning',
...@@ -502,7 +496,8 @@ function goTeamSign() { ...@@ -502,7 +496,8 @@ function goTeamSign() {
502 matchId: matchId.value, 496 matchId: matchId.value,
503 groupId: groupId.value, 497 groupId: groupId.value,
504 signType: matchData.value.signType, 498 signType: matchData.value.signType,
505 isNational: true 499 isNational: true,
500 languageSource: matchData.value.languageSource
506 } 501 }
507 }) 502 })
508 } 503 }
...@@ -540,21 +535,26 @@ function checkIsSign() { ...@@ -540,21 +535,26 @@ function checkIsSign() {
540 groupId: groupId.value || 0 535 groupId: groupId.value || 0
541 } 536 }
542 return match.getMySignInfo(obj).then(res => { 537 return match.getMySignInfo(obj).then(res => {
543 if (res.data.type == '1') { 538 switch (res.data.type){
539 case '0':
540 // 未报名
541 break
542 case '1':
543 // 提交报名,未审核
544 ElMessageBox.confirm( 544 ElMessageBox.confirm(
545 language.value == 0 ?'已报名,不能重复报名,是否前往个人中心查看':'Registered, cannot be duplicated. Go to the personal center to check?', 545 language.value == 0 ?'您的报名信息已提交,是否撤回,重新填写报名信息?':'Your registration information has been submitted. Do you want to withdraw it and fill in the registration information again?',
546 language.value==0?'提示':'Warning', 546 language.value==0?'提示':'Warning',
547 { 547 {
548 confirmButtonText: language.value==1?'OK':'确定', 548 confirmButtonText: language.value==1?'Withdraw the registration':'撤回报名信息',
549 cancelButtonText: language.value==1?'Cancel':'取消', 549 cancelButtonText: language.value==1?'Cancel':'取消',
550 type: 'warning', 550 type: 'warning',
551 } 551 }
552 ).then(() => { 552 ).then(() => {
553 router.push({name: 'myMatch'}) 553 withDraw(res.data.orderId)
554 }) 554 })
555 return Promise.reject('rejected message') 555 // return Promise.reject('rejected message')
556 } 556 break
557 if (res.data.type == '2') { 557 case '2':
558 ElMessageBox.confirm( 558 ElMessageBox.confirm(
559 language.value == 0 ?'报名审批拒绝,是否重新报名':'Registration approval rejected. Do you want to register again', 559 language.value == 0 ?'报名审批拒绝,是否重新报名':'Registration approval rejected. Do you want to register again',
560 language.value==0?'提示':'Warning', 560 language.value==0?'提示':'Warning',
...@@ -567,8 +567,8 @@ function checkIsSign() { ...@@ -567,8 +567,8 @@ function checkIsSign() {
567 reSign() 567 reSign()
568 }) 568 })
569 return Promise.reject('rejected message') 569 return Promise.reject('rejected message')
570 } 570 break
571 if (res.data.type == '3') { 571 case '3':
572 ElMessageBox.confirm( 572 ElMessageBox.confirm(
573 language.value == 0 ?'报名已取消,是否重新报名':'Registration cancelled. Do you want to register again', 573 language.value == 0 ?'报名已取消,是否重新报名':'Registration cancelled. Do you want to register again',
574 language.value==0?'提示':'Warning', 574 language.value==0?'提示':'Warning',
...@@ -581,52 +581,102 @@ function checkIsSign() { ...@@ -581,52 +581,102 @@ function checkIsSign() {
581 reSign() 581 reSign()
582 }) 582 })
583 return Promise.reject('rejected message') 583 return Promise.reject('rejected message')
584 break
585 case '4':
586 // 审核通过未缴费
587 ElMessageBox.confirm(
588 language.value == 0 ?'您的报名信息已审核通过,如需修改,请联系组委会':'Your registration information has been approved. If you need to make any changes, please contact the organizing committee',
589 language.value==0?'提示':'Warning',
590 {
591 confirmButtonText: language.value==1?'OK':'确定',
592 cancelButtonText: language.value==1?'Cancel':'取消',
593 type: 'warning',
594 }
595 ).then(() => {
596 // router.push({name: 'myMatch'})
597 })
598 return Promise.reject('rejected message')
599 break
600 case '5':
601 // 审核通过已缴费
602 ElMessageBox.confirm(
603 language.value == 0 ?'您的报名信息已完成缴费,如需修改,请联系组委会':'Your registration information has been paid. If you need to make any changes, please contact the organizing committee',
604 language.value==0?'提示':'Warning',
605 {
606 confirmButtonText: language.value==1?'OK':'确定',
607 cancelButtonText: language.value==1?'Cancel':'取消',
608 type: 'warning',
609 }
610 )
611 return Promise.reject('rejected message')
612 break
584 } 613 }
585 }) 614 })
586 } 615 }
587 616 function withDraw(orderId) {
617 match.withDrawByOrderId(orderId).then(res=>{
618 choseSignType()
619 })
620 }
588 function reSign(){ 621 function reSign(){
589 match.recoverMySignFromCancel(matchId.value).then((res) => { 622 match.recoverMySignFromCancel(matchId.value).then((res) => {
623 switchSignType()
624 })
625 }
626 function switchSignType() {
590 switch (matchData.value.signType) { 627 switch (matchData.value.signType) {
591 case '0': 628 case '0':
592 if (user.utype == '1') { 629 if (user.utype == '1' ) {
593 goPersonalSign() 630 goPersonalSign()
594 } else { 631 }
632 if(user.utype == '2'){
595 ElMessageBox.confirm( 633 ElMessageBox.confirm(
596 language.value == 0 ?'当前活动是个人活动,无法报名':'The current event is a personal event, cannot register', 634 language.value == 0 ?'当前活动是个人活动,无法报名':'The current event is a personal event, cannot register',
597 language.value==0?'提示':'Warning', 635 language.value == 0 ?'提示':'Warning',
598 { 636 {
599 confirmButtonText: language.value==1?'OK':'确定', 637 confirmButtonText: language.value == 0 ?'好的':'OK',
600 cancelButtonText: language.value==1?'Cancel':'取消', 638 cancelButtonText: language.value == 0 ?'取消':'Cancel',
601 type: 'warning', 639 type: 'warning',
602 } 640 }
603 ) 641 )
604 } 642 }
643 if(user.utype == '3'){
644 goGeren()
645 }
605 break 646 break
606 case '1': 647 case '1':
607 if (user.utype == '1') { 648 if (user.utype == '1') {
608 ElMessageBox.confirm( 649 ElMessageBox.confirm(
609 language.value == 0 ?'当前活动是团队活动,无法报名':'The current event is a team event, cannot register', 650 language.value == 0 ?'当前活动是团队活动,无法报名':'The current event is a team event, cannot register',
610 language.value==0?'提示':'Warning', 651 language.value == 0 ?'提示':'Warning',
611 { 652 {
612 confirmButtonText: language.value==1?'OK':'确定', 653 confirmButtonText: language.value == 0 ?'好的':'OK',
613 cancelButtonText: language.value==1?'Cancel':'取消', 654 cancelButtonText: language.value == 0 ?'取消':'Cancel',
614 type: 'warning', 655 type: 'warning',
615 } 656 }
616 ) 657 )
617 } else { 658 }
659 if (user.utype == '2') {
618 goTeamSign() 660 goTeamSign()
619 } 661 }
662 if (user.utype == '3') {
663 // 团队活动 且 游客
664 upgradePop.value = true
665 }
620 break 666 break
621 case '2': 667 case '2':
622 if (user.utype == '1') { 668 if (user.utype == '1') {
623 goPersonalSign() 669 goPersonalSign()
624 } else { 670 }
671 if (user.utype == '2') {
625 goTeamSign() 672 goTeamSign()
626 } 673 }
674 if (user.utype == '3') {
675 //游客
676 upgradePop.value = true
677 }
627 break 678 break
628 } 679 }
629 })
630 } 680 }
631 function applyInvitation() { 681 function applyInvitation() {
632 var obj = { 682 var obj = {
......
...@@ -224,8 +224,8 @@ const submitForm = (n) => { ...@@ -224,8 +224,8 @@ const submitForm = (n) => {
224 }) 224 })
225 return 225 return
226 } 226 }
227 ElMessageBox.confirm(language.value == 0 ? '确定提交吗?' : 'Are you sure to submit?', 227 ElMessageBox.confirm(language.value == 0 ? '请谨慎提交!请务必确保所有成员全部报名后,一次性提交。提交后不可修改!' : 'Please be cautious! Please make sure that all members have signed up ,it cannot be modified after submission!',
228 language.value == 0 ? '提示' : 'Tip', 228 language.value == 0 ? '注意' : 'Note',
229 { 229 {
230 confirmButtonText: language.value == 0 ? '确定' : 'Yes', 230 confirmButtonText: language.value == 0 ? '确定' : 'Yes',
231 cancelButtonText: language.value == 0 ? '取消' : 'Cancel', 231 cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 <img :src="fillImgUrl_webSite(n.picUrl)"> 16 <img :src="fillImgUrl_webSite(n.picUrl)">
17 </div> 17 </div>
18 <div class="item-body"> 18 <div class="item-body">
19 <h3 v-html="n.name" /> 19 <h3 class="esp_2" v-html="n.name" />
20 <p v-html="n.subName"/> 20 <p v-html="n.subName"/>
21 <a class="go">{{ language==0?'查看详情':'Detail' }} 21 <a class="go">{{ language==0?'查看详情':'Detail' }}
22 <el-icon class="rotate90_180"><sort-down/></el-icon> 22 <el-icon class="rotate90_180"><sort-down/></el-icon>
......
...@@ -11,20 +11,20 @@ ...@@ -11,20 +11,20 @@
11 <!-- <el-tab-pane v-for="(tab,index) in list" :key="index" :label="tab.name" :name="index" />--> 11 <!-- <el-tab-pane v-for="(tab,index) in list" :key="index" :label="tab.name" :name="index" />-->
12 <!-- </el-tabs>--> 12 <!-- </el-tabs>-->
13 <div class="pd20"> 13 <div class="pd20">
14 <el-row class="mb20"> 14 <!-- <el-row class="mb20">-->
15 <el-col :lg="24" :xs="24"> 15 <!-- <el-col :lg="24" :xs="24">-->
16 <div v-for="(n,index) in newsList?.slice(0,1)" v-show="index<1" :key="index" class="firstItem" @click="goDetail(n)"> 16 <!-- <div v-for="(n,index) in newsList?.slice(0,1)" v-show="index<1" :key="index" class="firstItem" @click="goDetail(n)">-->
17 <div class="date"> 17 <!-- <div class="date">-->
18 <p>{{ n.belongTime }}</p> 18 <!-- <p>{{ n.belongTime }}</p>-->
19 </div> 19 <!-- </div>-->
20 <div class="item-body"> 20 <!-- <div class="item-body">-->
21 <h3 class="esp_2"> 21 <!-- <h3 class="esp_2">-->
22 <span class="istop" v-if="n.isTop == '1'">{{ language==0?'置顶':'TOP' }}</span> 22 <!-- <span class="istop" v-if="n.isTop == '1'">{{ language==0?'置顶':'TOP' }}</span>-->
23 {{n.name}}</h3> 23 <!-- {{n.name}}</h3>-->
24 </div> 24 <!-- </div>-->
25 <a class="go">{{ language==0?'查看详情':'DETAIL' }}</a> 25 <!-- <a class="go">{{ language==0?'查看详情':'DETAIL' }}</a>-->
26 </div> 26 <!-- </div>-->
27 </el-col> 27 <!-- </el-col>-->
28 <!-- <el-col :lg="8" :xs="24" class="forPc">--> 28 <!-- <el-col :lg="8" :xs="24" class="forPc">-->
29 <!-- <div class="searchPark">--> 29 <!-- <div class="searchPark">-->
30 <!-- <h3>通知搜索</h3>--> 30 <!-- <h3>通知搜索</h3>-->
...@@ -56,12 +56,22 @@ ...@@ -56,12 +56,22 @@
56 <!-- </el-form>--> 56 <!-- </el-form>-->
57 <!-- </div>--> 57 <!-- </div>-->
58 <!-- </el-col>--> 58 <!-- </el-col>-->
59 </el-row> 59 <!-- </el-row>-->
60
61 <div class="newsLine">
62 60
61 <div class="newsLine" v-for="(n,index) in newsList" :key="index">
62 <div v-if="n.isTop == '1'" class="firstItem" @click="goDetail(n)">
63 <div class="date">
64 <p>{{ n.belongTime }}</p>
65 </div>
66 <div class="item-body">
67 <h3 class="esp_2">
68 <span class="istop" v-if="n.isTop == '1'">{{ language==0?'置顶':'TOP' }}</span>
69 {{n.name}}</h3>
70 </div>
71 <a class="go">{{ language==0?'查看详情':'DETAIL' }}</a>
72 </div>
63 73
64 <div v-for="(n,index) in newsList" v-show="index>0" :key="index" class="item" @click=" goDetail(n)"> 74 <div v-else class="item" @click=" goDetail(n)">
65 <div class="date"> 75 <div class="date">
66 <div class="day">{{ n.belongTime?.substring(8, 10) }}</div> 76 <div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
67 <p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p> 77 <p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
...@@ -145,15 +155,17 @@ const goDetail = (n) => { ...@@ -145,15 +155,17 @@ const goDetail = (n) => {
145 background: #F8F4FF;height: 100%;padding: 10px 20px; 155 background: #F8F4FF;height: 100%;padding: 10px 20px;
146 .date{font-weight: bold;transform: scaleX(0.7);transform-origin: left; 156 .date{font-weight: bold;transform: scaleX(0.7);transform-origin: left;
147 font-size: 18px; 157 font-size: 18px;
148 color: var(--el-color-primary);} 158 color: var(--el-color-primary);
159 p{margin: 5px 0;}
160 }
149 h3{margin: 10px 0; 161 h3{margin: 10px 0;
150 font-size: 22px;} 162 font-size: 22px;}
151 .go{color: var(--el-color-primary); 163 .go{color: var(--el-color-primary);
152 font-size: 14px;padding: 0 0 5px;} 164 font-size: 14px;padding: 0 0 5px;}
165 &:hover{background: linear-gradient(90deg, #8623fc3d, #453dea36);}
153 } 166 }
154
155
156 .newsLine{ 167 .newsLine{
168 .firstItem{margin-bottom: 10px;}
157 .item{display: flex;position: relative;width: 100%;height: 90px; 169 .item{display: flex;position: relative;width: 100%;height: 90px;
158 align-items: center;cursor: pointer;border-bottom: 1px dashed #EEEEEE; 170 align-items: center;cursor: pointer;border-bottom: 1px dashed #EEEEEE;
159 .date{width: 60px;height: 60px;text-align: center;background: #FAFAFA;margin: 0 10px; 171 .date{width: 60px;height: 60px;text-align: center;background: #FAFAFA;margin: 0 10px;
......
1 <template>
2 <el-dialog v-model="show" :title="language==0?'快捷注册':'Quick Login'" close-icon="CircleClose"
3 width="600" :append-to-body="true" destroy-on-close @close="close">
4 <div class="pt30">
5 <el-form class="d-form" size="large" :label-width="language==0?120:150" style="max-width: 500px;margin: auto">
6 <el-form-item :label="language==0?'邮箱':'E-mail'" required>
7 <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"
8 />
9 <div class="tip" v-if="language==0">
10 (请填写正确的邮箱信息,邮箱信息在注册完成后无法修改。
11 该邮箱后续会作为您登录的账户,
12 并接收报名审核结果、支付账单、签证邀请函等相关信息。)
13 </div>
14 <div v-else class="tip">
15 Please fill in the correct email, which cannot be changed after the registration is completed. The email will be used as your login account and to receive relevant information including results of registration review, payment bills, visa invitation letters, etc.
16 </div>
17 </el-form-item>
18 <el-form-item :label="language==0?'验证码':'Code'" required>
19 <el-input v-model="form.code">
20 <template #append>
21 <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
22 <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
23 {{ totalSeconds }} {{ language == 0 ? '秒' : 's' }}
24 </count-down>
25 <span v-else>
26 {{ language == 0 ? '发送验证码' : 'Send' }}
27 </span>
28 </el-button>
29 </template>
30 </el-input>
31 <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
32 <Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText"
33 type="inside" @success="codeSuccess"></Vcode>
34 </div>
35 </el-form-item>
36 <el-form-item :label="language==0?'密码':'Password'" required>
37 <el-input type="password" show-password v-model="form.password"
38 :placeholder="language==0?'6-16位密码。区分大小写':''"/>
39 </el-form-item>
40 <el-form-item :label="language==0?'确认密码':'Confirm Password'" required>
41 <el-input type="password" show-password v-model="form.password2" @blur="vconfirmPassword"
42 :placeholder="language==0?'再次输入密码':''"/>
43 </el-form-item>
44 </el-form>
45
46 </div>
47 <template #footer>
48 <div class="dialog-footer text-center">
49 <el-button type="primary" class="btn-lineG w200px" round @click="register">{{language==0?'登录':'Confirm'}}</el-button>
50 <div class="text-primary underline mt20 pointer" @click="goLogin">{{language==0?'已有账号去登录':'Already have an account? Login'}}</div>
51
52 </div>
53 </template>
54 </el-dialog>
55 </template>
56
57 <script setup>
58 import {reactive, toRefs} from 'vue'
59 import Vcode from "vue3-puzzle-vcode"
60 import {ElMessage} from 'element-plus'
61 import CountDown from '@chenfengyuan/vue-countdown'
62 import {getCaptchaSms} from "@/apiPc/match";
63 import {onMounted} from "@vue/runtime-core";
64 import {useStorage} from "@vueuse/core/index";
65 import {vistorRegister} from "@/apiPc/common";
66 import {setToken} from "@/utils/auth";
67 import useUserStore from "@/store/modules/user";
68
69 const language = useStorage('language', 0)
70
71 const data = reactive({
72 isShow: false,
73 isCodeTrue: false,
74 counting: false,
75 form: {},
76 activeStep: 0,
77 failVcode: '验证失败,请重试',
78 successVcode: '验证通过!',
79 sliderText: '拖动滑块完成拼图',
80 show:false
81 })
82 const {isShow, isCodeTrue, counting, form, activeStep, failVcode, successVcode, sliderText,show} = toRefs(data)
83 const emit = defineEmits(['submit'])
84 onMounted(() => {
85 if (language.value == 1) {
86 failVcode.value = 'Error!'
87 successVcode.value = 'Success!'
88 sliderText.value = 'Drag the slider to complete the puzzle'
89 }
90 })
91 const open = (params) => {
92 show.value = true
93 }
94 defineExpose({
95 open
96 })
97
98 function sendsmsMsg() {
99 if (!form.value.account) {
100 if (language.value == 0) {
101 ElMessage.warning('请填写邮箱')
102 } else {
103 ElMessage.warning('Please fill in your email address')
104 }
105 return
106 }
107 if (form.value.account.indexOf('@') == -1) {
108 if (language.value == 0) {
109 ElMessage.warning('请填写正确的邮箱')
110 } else {
111 ElMessage.warning('Please fill in the correct email')
112 }
113 return
114 }
115 if (counting.value) {
116 return
117 } else {
118 isShow.value = true
119 }
120 }
121
122 function verifyCode() {
123 if (!form.value.account) {
124 return
125 }
126 if (form.value.account.indexOf('@') > -1) {
127 //邮箱
128 }
129 }
130
131 function codeSuccess(msg) {
132 console.log('验证通过' + msg);
133 isShow.value = false
134 getCaptchaSms({account: form.value.account}).then(res => {
135 counting.value = true
136 isCodeTrue.value = true
137 ElMessage.success(language.value == 0 ? '发送成功,请关注邮箱邮件' :'Send success, please check your email')
138 })
139 }
140
141 function resetCode() {
142 isCodeTrue.value = false
143 }
144 function goLogin() {
145 show.value = false
146 useUserStore().setReLogin()
147 }
148 function register() {
149 //游客注册
150 if (!form.value.account) {
151 if (language.value == 0) {
152 ElMessage.warning('请填写邮箱')
153 } else {
154 ElMessage.warning('Please fill in your email address')
155 }
156 return
157 }
158 if (!form.value.code) {
159 if (language.value == 0) {
160 ElMessage.warning('请填写验证码')
161 } else {
162 ElMessage.warning('Please fill in Code')
163 }
164 return
165 }
166 if (!form.value.password) {
167 ElMessage.warning(language.value == 0?'请输入密码':'Please enter password')
168 return
169 }
170 if (!form.value.password2) {
171 ElMessage.warning(language.value == 0?'请再次输入密码':'Please enter password')
172 return
173 }
174 delete form.value.password2
175 vistorRegister(form.value).then(res=>{
176 setToken(res.data.token)
177 emit('submitForm')
178 })
179 }
180 const vconfirmPassword = () => {
181 if (form.value.password !== form.value.password2) {
182 ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' :'The two passwords entered are inconsistent')
183 }
184 }
185 function close() {
186 show.value = false
187 }
188 </script>
189
190 <style scoped lang="scss">
191 .tip{line-height: 1.6}
192 </style>
...@@ -20,9 +20,12 @@ ...@@ -20,9 +20,12 @@
20 </el-button> 20 </el-button>
21 </template> 21 </template>
22 </el-input> 22 </el-input>
23 <a class="text-primary text-sm mt10" href="https://www.worlddancesport.org/Athlete/List" target="_blank"> 23 <a class="text-primary text-sm mt10" href="https://www.worlddancesport.org/Athlete/List"
24 <el-icon><Link /></el-icon> 24 target="_blank">
25 {{language==0?'去WDSF官网查询我的会员号':'Search my WSDF MIN on the WDSF official website'}} 25 <el-icon>
26 <Link/>
27 </el-icon>
28 {{ language == 0 ? '去WDSF官网查询我的会员号' : 'Search my WSDF MIN on the WDSF official website' }}
26 </a> 29 </a>
27 30
28 </el-form-item> 31 </el-form-item>
...@@ -89,9 +92,9 @@ ...@@ -89,9 +92,9 @@
89 /> 92 />
90 </el-form-item> 93 </el-form-item>
91 94
92
93
94 <div class="h30"></div> 95 <div class="h30"></div>
96
97 <div v-if="!user">
95 <div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Login Information' }} <span 98 <div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Login Information' }} <span
96 v-if="language==0">(登录时需要验证,保护账户信息)</span></div> 99 v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
97 <div class="h20"></div> 100 <div class="h20"></div>
...@@ -100,7 +103,8 @@ ...@@ -100,7 +103,8 @@
100 <el-input type="text" v-model="wdsfData.email" @change="resetCode(1)" autocomplete="false" 103 <el-input type="text" v-model="wdsfData.email" @change="resetCode(1)" autocomplete="false"
101 @blur="verifyCode" :disabled="wdsfData.personFlag=='1'"/> 104 @blur="verifyCode" :disabled="wdsfData.personFlag=='1'"/>
102 105
103 <span class="text-primary" v-if="wdsfData.personFlag=='1'" @click="forgetPassword(wdsfData.email)">忘记密码</span> 106 <span class="text-primary" v-if="wdsfData.personFlag=='1'"
107 @click="forgetPassword(wdsfData.email)">忘记密码</span>
104 </div> 108 </div>
105 109
106 110
...@@ -111,7 +115,8 @@ ...@@ -111,7 +115,8 @@
111 </div> 115 </div>
112 <div v-else> 116 <div v-else>
113 Please fill in the correct email, which cannot be changed after the registration is completed. 117 Please fill in the correct email, which cannot be changed after the registration is completed.
114 The email will be used as your login account and to receive relevant information including results of registration review, payment bills, visa invitation letters, etc. 118 The email will be used as your login account and to receive relevant information including
119 results of registration review, payment bills, visa invitation letters, etc.
115 </div> 120 </div>
116 </div> 121 </div>
117 122
...@@ -136,17 +141,20 @@ ...@@ -136,17 +141,20 @@
136 </el-form-item> 141 </el-form-item>
137 <el-form-item :label="language==0?'确认密码':'Confirm Password'" required 142 <el-form-item :label="language==0?'确认密码':'Confirm Password'" required
138 v-if="wdsfData.personFlag=='0'"> 143 v-if="wdsfData.personFlag=='0'">
139 <el-input type="password" show-password v-model="form.confirmPassword" autocomplete="false" @change="vconfirmPassword" 144 <el-input type="password" show-password v-model="form.confirmPassword" autocomplete="false"
145 @change="vconfirmPassword"
140 :placeholder="language==0?'再次输入密码':'Confirm Password'"/> 146 :placeholder="language==0?'再次输入密码':'Confirm Password'"/>
141 <div class="text-danger" v-if="showError"> 147 <div class="text-danger" v-if="showError">
142 {{language == 0 ? '密码不一致' : 'Password inconsistency'}} 148 {{ language == 0 ? '密码不一致' : 'Password inconsistency' }}
143 </div> 149 </div>
144 </el-form-item> 150 </el-form-item>
151
152 </div>
145 </el-form> 153 </el-form>
146 </div> 154 </div>
147 <div class="text-center"> 155 <div class="text-center">
148 <el-button class="primary-kx" round @click="goBack"> {{ language == 0 ? '取消' : 'Cancel' }}</el-button> 156 <el-button class="primary-kx" round @click="goBack"> {{ language == 0 ? '取消' : 'Cancel' }}</el-button>
149 <el-button type="primary" class="btn-lineG w200px" round @click="next" v-if="wdsfData.wdsfFlag=='1'"> 157 <el-button type="primary" class="btn-lineG w200px" round @click="bigNext" v-if="wdsfData.wdsfFlag=='1'">
150 <span v-if="matchId=='0'">{{ language == 0 ? '立即注册' : 'Register Now' }}</span> 158 <span v-if="matchId=='0'">{{ language == 0 ? '立即注册' : 'Register Now' }}</span>
151 <span v-else>{{ language == 0 ? '下一步' : 'Next' }}</span> 159 <span v-else>{{ language == 0 ? '下一步' : 'Next' }}</span>
152 </el-button> 160 </el-button>
...@@ -176,12 +184,14 @@ import FileUpload from "@/components/FileUpload"; ...@@ -176,12 +184,14 @@ import FileUpload from "@/components/FileUpload";
176 import {useRouter, useRoute} from "vue-router"; 184 import {useRouter, useRoute} from "vue-router";
177 import {useStorage} from "@vueuse/core/index"; 185 import {useStorage} from "@vueuse/core/index";
178 import useUserStore from "@/store/modules/user"; 186 import useUserStore from "@/store/modules/user";
187 import {upgradePersonal} from "@/apiPc/common";
179 188
180 const language= useStorage('language',0) 189 const language = useStorage('language', 0)
181 const router = useRouter() 190 const router = useRouter()
182 const route = useRoute() 191 const route = useRoute()
183 const {proxy} = getCurrentInstance() 192 const {proxy} = getCurrentInstance()
184 193 const userStore = useUserStore()
194 const user = useUserStore().user
185 const data = reactive({ 195 const data = reactive({
186 isShow: false, 196 isShow: false,
187 isCodeTrue: 0, 197 isCodeTrue: 0,
...@@ -260,17 +270,13 @@ function verifyCode() { ...@@ -260,17 +270,13 @@ function verifyCode() {
260 270
261 function codeSuccess(msg) { 271 function codeSuccess(msg) {
262 isShow.value = false 272 isShow.value = false
263 console.log('old',isCodeTrue.value) 273 console.log('old', isCodeTrue.value)
264 isCodeTrue.value += 1 274 isCodeTrue.value += 1
265 console.log('new',isCodeTrue.value) 275 console.log('new', isCodeTrue.value)
266 if (isCodeTrue.value == 1) { 276 if (isCodeTrue.value == 1) {
267 checkWdsf({card: form.value.card}).then(res => { 277 checkWdsf({card: form.value.card}).then(res => {
268 wdsfData.value = res.data 278 wdsfData.value = res.data
269 if(wdsfData.value.passportUrl){ 279 if (wdsfData.value.passportUrl) {
270
271 }
272 if (!wdsfData.value.sex) {
273 wdsfData.value.sex = '0'
274 } 280 }
275 if (wdsfData.value.wdsfFlag == '0') { 281 if (wdsfData.value.wdsfFlag == '0') {
276 isCodeTrue.value = 0 282 isCodeTrue.value = 0
...@@ -288,7 +294,7 @@ function codeSuccess(msg) { ...@@ -288,7 +294,7 @@ function codeSuccess(msg) {
288 counting.value = true 294 counting.value = true
289 getCaptchaSms({account: wdsfData.value.email}).then(res => { 295 getCaptchaSms({account: wdsfData.value.email}).then(res => {
290 isCodeTrue.value = 1 296 isCodeTrue.value = 1
291 ElMessage.success(language.value == 0 ? '发送成功,请关注邮箱邮件' :'Send success, please check your email') 297 ElMessage.success(language.value == 0 ? '发送成功,请关注邮箱邮件' : 'Send success, please check your email')
292 }).catch(err => { 298 }).catch(err => {
293 isCodeTrue.value = 1 299 isCodeTrue.value = 1
294 }) 300 })
...@@ -310,21 +316,43 @@ function vconfirmPassword() { ...@@ -310,21 +316,43 @@ function vconfirmPassword() {
310 function goBack() { 316 function goBack() {
311 router.go(-1) 317 router.go(-1)
312 } 318 }
313 319 function bigNext(){
314 function next() {
315 // if (!wdsfData.value.passportNumber) { 320 // if (!wdsfData.value.passportNumber) {
316 // ElMessage.warning(language.value == 0 ?'请填写护照号':'Please fill in your passport number') 321 // ElMessage.warning(language.value == 0 ?'请填写护照号':'Please fill in your passport number')
317 // return 322 // return
318 // } 323 // }
324
319 if (!wdsfData.value.passportUrl) { 325 if (!wdsfData.value.passportUrl) {
320 ElMessage.warning(language.value == 0 ? '请上传护照文件' :'Please upload your passport file') 326 ElMessage.warning(language.value == 0 ? '请上传护照文件' : 'Please upload your passport file')
321 return 327 return
322 } 328 }
323 if (!wdsfData.value.sex) { 329 if (!wdsfData.value.sex) {
324 ElMessage.warning(language.value == 0 ? '请选择性别' :'Please select your gender') 330 ElMessage.warning(language.value == 0 ? '请选择性别' : 'Please select your gender')
325 return 331 return
326 } 332 }
327 console.log(wdsfData.value.personFlag) 333 if(user.utype=='3'){
334 let obj = {
335 card: form.value.card,
336 userId: user.userId,
337 picUrl: wdsfData.value.picUrl,
338 code: form.value.code,
339 sex: wdsfData.value.sex,
340 birth: wdsfData.value.birthday,
341 passportNumber: wdsfData.value.passportNumber,
342 }
343 upgradePersonal(obj).then(res=>{
344 if(res.data){
345 userStore.getInfo().then(res=>{
346 afterR()
347 })
348 }
349 })
350 } else {
351 next()
352 }
353 }
354
355 function next() {
328 if (wdsfData.value.personFlag == '0') { 356 if (wdsfData.value.personFlag == '0') {
329 let obj = { 357 let obj = {
330 card: form.value.card, 358 card: form.value.card,
...@@ -336,7 +364,7 @@ function next() { ...@@ -336,7 +364,7 @@ function next() {
336 birth: wdsfData.value.birthday, 364 birth: wdsfData.value.birthday,
337 passportNumber: wdsfData.value.passportNumber, 365 passportNumber: wdsfData.value.passportNumber,
338 } 366 }
339 if(Array.isArray(wdsfData.value.passportUrl)){ 367 if (Array.isArray(wdsfData.value.passportUrl)) {
340 obj.passportUrl = wdsfData.value.passportUrl[0].url 368 obj.passportUrl = wdsfData.value.passportUrl[0].url
341 } else { 369 } else {
342 obj.passportUrl = wdsfData.value.passportUrl || '' 370 obj.passportUrl = wdsfData.value.passportUrl || ''
...@@ -349,7 +377,7 @@ function next() { ...@@ -349,7 +377,7 @@ function next() {
349 }) 377 })
350 } 378 }
351 if (wdsfData.value.personFlag == '1') { 379 if (wdsfData.value.personFlag == '1') {
352 if(!form.value.password){ 380 if (!form.value.password) {
353 ElMessage.warning('Please fill in your password') 381 ElMessage.warning('Please fill in your password')
354 return 382 return
355 } 383 }
...@@ -362,7 +390,7 @@ function next() { ...@@ -362,7 +390,7 @@ function next() {
362 username: wdsfData.value.email, 390 username: wdsfData.value.email,
363 password: form.value.password, 391 password: form.value.password,
364 } 392 }
365 if(Array.isArray(wdsfData.value.passportUrl)){ 393 if (Array.isArray(wdsfData.value.passportUrl)) {
366 obj.passportUrl = wdsfData.value.passportUrl[0].url 394 obj.passportUrl = wdsfData.value.passportUrl[0].url
367 } else { 395 } else {
368 obj.passportUrl = wdsfData.value.passportUrl 396 obj.passportUrl = wdsfData.value.passportUrl
...@@ -375,7 +403,6 @@ function next() { ...@@ -375,7 +403,6 @@ function next() {
375 403
376 }) 404 })
377 } 405 }
378
379 } 406 }
380 407
381 function afterR() { 408 function afterR() {
...@@ -388,7 +415,7 @@ function afterR() { ...@@ -388,7 +415,7 @@ function afterR() {
388 query: { 415 query: {
389 matchId: matchId.value 416 matchId: matchId.value
390 } 417 }
391 }).then(()=>{ 418 }).then(() => {
392 // location.reload() 419 // location.reload()
393 }) 420 })
394 } else { 421 } else {
...@@ -397,20 +424,30 @@ function afterR() { ...@@ -397,20 +424,30 @@ function afterR() {
397 params: { 424 params: {
398 id: 0 425 id: 0
399 } 426 }
400 }).then(()=>{ 427 }).then(() => {
401 location.reload() 428 location.reload()
402 }) 429 })
403 } 430 }
404 } 431 }
432
405 function forgetPassword(account) { 433 function forgetPassword(account) {
406 useUserStore().setReLogin({account: account,active:2}) 434 useUserStore().setReLogin({account: account, active: 2})
407 } 435 }
408 </script> 436 </script>
409 437
410 <style scoped lang="scss"> 438 <style scoped lang="scss">
411 .pvbox{position: relative;width: 100%; 439 .pvbox {
412 .text-primary{position: absolute;right: -5em;cursor: pointer;text-decoration: underline;} 440 position: relative;
441 width: 100%;
442
443 .text-primary {
444 position: absolute;
445 right: -5em;
446 cursor: pointer;
447 text-decoration: underline;
448 }
413 } 449 }
450
414 .tip { 451 .tip {
415 line-height: 1.6; 452 line-height: 1.6;
416 font-size: 12px; 453 font-size: 12px;
......
...@@ -78,9 +78,9 @@ onMounted(() => { ...@@ -78,9 +78,9 @@ onMounted(() => {
78 function sendsmsMsg() { 78 function sendsmsMsg() {
79 if (!form.value.account) { 79 if (!form.value.account) {
80 if (language.value == 0) { 80 if (language.value == 0) {
81 ElMessage.warning('请填写手机/邮箱') 81 ElMessage.warning('请填写邮箱')
82 } else { 82 } else {
83 ElMessage.warning('Please fill in your phone/email address') 83 ElMessage.warning('Please fill in your email address')
84 } 84 }
85 return 85 return
86 } 86 }
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
5 <label>{{ language == 0 ? '登录账号' : 'Account' }}</label> {{ accont }} 5 <label>{{ language == 0 ? '登录账号' : 'Account' }}</label> {{ accont }}
6 </div> 6 </div>
7 </div> 7 </div>
8 <div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Password' }} <span 8 <div class="leftboderTT" v-if="!user">{{ language == 0 ? '登录密码' : 'Password' }} <span
9 v-if="language==0">(登录时需要验证,保护账户信息)</span></div> 9 v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
10 <div class="d-form-border"> 10 <div class="d-form-border" v-if="!user">
11 <el-form class="d-form" size="large" label-width="120" 11 <el-form class="d-form" size="large" label-width="120"
12 :label-position="language==0?'left':'top'" style="max-width: 500px;margin: auto"> 12 :label-position="language==0?'left':'top'" style="max-width: 500px;margin: auto">
13 <el-form-item :label="language==0?'密码':'Password'" required> 13 <el-form-item :label="language==0?'密码':'Password'" required>
...@@ -109,7 +109,10 @@ ...@@ -109,7 +109,10 @@
109 109
110 <div class="text-center"> 110 <div class="text-center">
111 <!-- <el-button class="primary-kx" @click="goStep1">上一步</el-button>--> 111 <!-- <el-button class="primary-kx" @click="goStep1">上一步</el-button>-->
112 <el-button type="primary" round class="btn-lineG w200px" @click.prevent="goStep3" :loading="loading"> 112 <el-button v-if="user&&user.utype=='3'" type="primary" round class="btn-lineG w200px" @click.prevent="upgrade" :loading="loading">
113 {{ language == 0 ? '升级账号' : 'Submit' }}
114 </el-button>
115 <el-button v-else type="primary" round class="btn-lineG w200px" @click.prevent="goStep3" :loading="loading">
113 {{ language == 0 ? '立即注册' : 'Register Now!' }} 116 {{ language == 0 ? '立即注册' : 'Register Now!' }}
114 </el-button> 117 </el-button>
115 </div> 118 </div>
...@@ -123,11 +126,17 @@ import * as match from "@/apiPc/match"; ...@@ -123,11 +126,17 @@ import * as match from "@/apiPc/match";
123 import {ElMessage} from "element-plus"; 126 import {ElMessage} from "element-plus";
124 import {setToken} from "@/utils/auth"; 127 import {setToken} from "@/utils/auth";
125 import {useStorage} from "@vueuse/core/index"; 128 import {useStorage} from "@vueuse/core/index";
126 import {useRouter} from "vue-router"; 129 import {useRoute, useRouter} from "vue-router";
130 import useUserStore from "@/store/modules/user";
131 import {upgradeTeam} from "@/apiPc/common";
132
127 const router = useRouter() 133 const router = useRouter()
134 const route = useRoute()
128 const {proxy} = getCurrentInstance() 135 const {proxy} = getCurrentInstance()
129 const emit = defineEmits(['submit', 'prev']) 136 const emit = defineEmits(['submit', 'prev'])
130 const language= useStorage('language',0) 137 const language= useStorage('language',0)
138 const userStore = useUserStore()
139 const user = useUserStore().user
131 const props = defineProps({ 140 const props = defineProps({
132 accont: { 141 accont: {
133 type: String, 142 type: String,
...@@ -182,7 +191,11 @@ const vconfirmPassword = () => { ...@@ -182,7 +191,11 @@ const vconfirmPassword = () => {
182 ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' :'The two passwords entered are inconsistent') 191 ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' :'The two passwords entered are inconsistent')
183 } 192 }
184 } 193 }
194 const matchId = ref('')
185 onMounted(() => { 195 onMounted(() => {
196 if(route.query.matchId){
197 matchId.value = route.query.matchId
198 }
186 getCountryList() 199 getCountryList()
187 getRegionsList() 200 getRegionsList()
188 }) 201 })
...@@ -202,10 +215,49 @@ function getRegionsList() { ...@@ -202,10 +215,49 @@ function getRegionsList() {
202 const goStep1 = () => { 215 const goStep1 = () => {
203 emit('prev') 216 emit('prev')
204 } 217 }
218 const upgrade = () => {
219 proxy.$refs.registerRef.validate(valid => {
220 if (valid) {
221 if(language.value==0){
222 var pattern = /^1[3456789]\d{9}$/
223 if (!pattern.test(form.value.contactTel)) {
224 ElMessage.warning(language.value == 0 ?'请输入正确的手机号':'Please enter the correct mobile phone number')
225 return
226 }
227 }
228 if (!isAgree.value) {
229 ElMessage.warning(language.value == 0?'请勾选接受':'Please check the acceptance')
230 return
231 }
232 loading.value = true
233 form.value.regionId = regionArr.value.pop()
234 form.value.userId = user.userId
235 console.log('upgrade')
236 upgradeTeam(form.value).then(res => {
237 loading.value = false
238 console.log(matchId.value,res.data)
239 if(res.data){
240 userStore.getInfo().then(()=>{
241 router.push({
242 name: 'matchDetail',
243 params: {
244 id: matchId.value
245 }
246 })
247 })
248 } else {
249 ElMessage.success(language.value == 0?'升级成功':'Upgrade successful')
250 router.push({name: 'home'})
251 }
252 }).catch(()=>{
253 loading.value = false
254 })
255 }
256 })
257 }
205 const goStep3 = () => { 258 const goStep3 = () => {
206 proxy.$refs.registerRef.validate(valid => { 259 proxy.$refs.registerRef.validate(valid => {
207 if (valid) { 260 if (valid) {
208
209 if(language.value==0){ 261 if(language.value==0){
210 var pattern = /^1[3456789]\d{9}$/ 262 var pattern = /^1[3456789]\d{9}$/
211 if (!pattern.test(form.value.contactTel)) { 263 if (!pattern.test(form.value.contactTel)) {
...@@ -213,8 +265,6 @@ const goStep3 = () => { ...@@ -213,8 +265,6 @@ const goStep3 = () => {
213 return 265 return
214 } 266 }
215 } 267 }
216
217
218 if (!isAgree.value) { 268 if (!isAgree.value) {
219 ElMessage.warning(language.value == 0?'请勾选接受':'Please check the acceptance') 269 ElMessage.warning(language.value == 0?'请勾选接受':'Please check the acceptance')
220 return 270 return
...@@ -241,8 +291,6 @@ const goStep3 = () => { ...@@ -241,8 +291,6 @@ const goStep3 = () => {
241 }) 291 })
242 } 292 }
243 }) 293 })
244
245
246 } 294 }
247 const showAgreeMent = () => { 295 const showAgreeMent = () => {
248 const routeLocation = router.resolve({ 296 const routeLocation = router.resolve({
......
...@@ -3,15 +3,15 @@ ...@@ -3,15 +3,15 @@
3 <div class="mt30 mb60"> 3 <div class="mt30 mb60">
4 <div class="box"> 4 <div class="box">
5 <!--机构注册--> 5 <!--机构注册-->
6 <el-card> 6 <el-card v-if="!user">
7 <el-steps :active="activeStep" align-center> 7 <el-steps :active="activeStep" align-center>
8 <el-step :title="language==0?'创建账号':'create an account'" /> 8 <el-step :title="language==0?'创建账号':'create an account'"/>
9 <el-step :title="language==0?'账号信息':'account information'" /> 9 <el-step :title="language==0?'账号信息':'account information'"/>
10 <el-step :title="language==0?'注册完成':'stered successfully'" /> 10 <el-step :title="language==0?'注册完成':'stered successfully'"/>
11 </el-steps> 11 </el-steps>
12 </el-card> 12 </el-card>
13 <div class="mt20"></div> 13 <div class="mt20"></div>
14 <Step1 v-if="activeStep==0" @submit="toStep2" @userName="getUserName" /> 14 <Step1 v-if="activeStep==0" @submit="toStep2" @userName="getUserName"/>
15 <Step2 v-if="activeStep==1" @submit="toStep3" @prev="toStep1" :accont="form.userName"/> 15 <Step2 v-if="activeStep==1" @submit="toStep3" @prev="toStep1" :accont="form.userName"/>
16 <Step3 v-if="activeStep==2" :accont="form.userName"/> 16 <Step3 v-if="activeStep==2" :accont="form.userName"/>
17 </div> 17 </div>
...@@ -23,26 +23,31 @@ ...@@ -23,26 +23,31 @@
23 import Step1 from "./step1"; 23 import Step1 from "./step1";
24 import Step2 from "./step2"; 24 import Step2 from "./step2";
25 import Step3 from "./step3"; 25 import Step3 from "./step3";
26 import {onMounted,toRefs,reactive} from "vue" 26 import {onMounted, toRefs, reactive} from "vue"
27 import {useStorage} from "@vueuse/core/index"; 27 import {useStorage} from "@vueuse/core/index";
28 import {useRoute} from "vue-router"; 28 import {useRoute} from "vue-router";
29 const language= useStorage('language',0) 29 import useUserStore from "@/store/modules/user";
30
31 const language = useStorage('language', 0)
30 const route = useRoute() 32 const route = useRoute()
31 const data = reactive({ 33 const data = reactive({
32 isShow:false, 34 isShow: false,
33 isCodeTrue:false, 35 isCodeTrue: false,
34 counting:false, 36 counting: false,
35 form:{ 37 form: {
36 userName:'' 38 userName: ''
37 }, 39 },
38 activeStep: 0 40 activeStep: 0
39 }) 41 })
40 const {isShow,isCodeTrue,counting,form,activeStep} = toRefs(data) 42 const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data)
41 43 const user = useUserStore().user
42 onMounted(() => { 44 onMounted(() => {
43 if(route.query.step){ 45 if (route.query.step) {
44 activeStep.value = Number(route.query.step) 46 activeStep.value = Number(route.query.step)
45 } 47 }
48 if (user) {
49 form.value.userName = user.userName
50 }
46 }) 51 })
47 const toStep1 = () => { 52 const toStep1 = () => {
48 activeStep.value = 0 53 activeStep.value = 0
......
...@@ -70,21 +70,21 @@ export default defineConfig(({ mode, command }) => { ...@@ -70,21 +70,21 @@ export default defineConfig(({ mode, command }) => {
70 rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '') 70 rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '')
71 }, 71 },
72 '/dev-api/ztx-match': { 72 '/dev-api/ztx-match': {
73 target: 'http://192.168.1.131:8083', 73 target: 'http://192.168.1.118:8083',
74 // target: 'http://192.168.1.132:8081', 74 // target: 'http://192.168.1.132:8081',
75 changeOrigin: true, 75 changeOrigin: true,
76 rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '') 76 rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '')
77 }, 77 },
78 '/dev-api/ztx-webSite': { 78 '/dev-api/ztx-webSite': {
79 target: 'https://dance.itechtop.cn/stage-api', 79 // target: 'https://dance.itechtop.cn/stage-api',
80 // target: 'http://192.168.1.96:9083/', 80 target: 'http://192.168.1.118:8081/',
81 changeOrigin: true, 81 changeOrigin: true,
82 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') 82 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
83 }, 83 },
84 '/dev-api': { 84 '/dev-api': {
85 target: 'http://192.168.1.131:8081/', 85 // target: 'http://192.168.1.118:8081/',
86 // target: 'https://dance.itechtop.cn/stage-api', 86 // target: 'https://dance.itechtop.cn/stage-api',
87 // target: 'https://wdsfwuxicenter.com/stage-api', 87 target: 'https://wdsfwuxicenter.com/stage-api',
88 changeOrigin: true, 88 changeOrigin: true,
89 rewrite: (p) => p.replace(/^\/dev-api/, '') 89 rewrite: (p) => p.replace(/^\/dev-api/, '')
90 } 90 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!