Merge branch 'dev' into devdev
# Conflicts: # src/assets/booking/hz_bg.png # src/routerPc/en.js # src/viewsPc/booking/makeUp.vue
Showing
65 changed files
with
1971 additions
and
467 deletions
public/file/操作指引.zip
0 → 100644
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 | } | ... | ... |
src/assets/booking/cl_text_c.png
0 → 100644
3.32 KB
src/assets/booking/cl_text_e.png
0 → 100644
3.33 KB
src/assets/booking/cy_text_c.png
0 → 100644
3.76 KB
src/assets/booking/cy_text_e.png
0 → 100644
3.43 KB
src/assets/booking/hz_text_c.png
0 → 100644
3.55 KB
src/assets/booking/hz_text_e.png
0 → 100644
3.33 KB
src/assets/booking/jd_text_c.png
0 → 100644
3.16 KB
src/assets/booking/jd_text_e.png
0 → 100644
3.13 KB
src/assets/logo/btn01.png
0 → 100644
2.51 KB
src/assets/logo/btn02.png
0 → 100644
2.76 KB
src/assets/logo/kf.png
deleted
100644 → 0
31.5 KB
src/assets/logo/kf_c.png
deleted
100644 → 0
5.95 KB
src/assets/logo/kf_e.png
deleted
100644 → 0
5.11 KB
| ... | @@ -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 | } | ... | ... |
| ... | @@ -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 | <!-- | <span @click="goRegister">注册</span>--> | 59 | <!-- | <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 |     2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。 | 66 | <!--     2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。--> |
| 67 | <br/> | 67 | <!-- <br/>--> |
| 68 | 68 | ||
| 69 |     2024年7月17日至21日将继续举办第二届无锡2024年WDSF亚洲体育舞蹈节,包括2024年WDSF世界拉丁舞锦标赛、2024年WDSF世界青年标准舞锦标赛、2024年WDSF世界少年Ⅱ拉丁舞锦标赛、2024年WDSF大奖赛(标准舞、拉丁舞)、 | 69 | <!--     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 |     In July 2023, the WDSF Asian DanceSport Festival·Wuxi 2023 was held for the first | 83 | <!--     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 |     The 2nd WDSF Asian DanceSport Festival·Wuxi 2024 will be organized from 17th to | 92 | <!--     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> | ... | ... |
src/viewsPc/booking/addInvoice.vue
0 → 100644
| 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> | ... | ... |
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
| ... | @@ -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 | } | ... | ... |
src/viewsPc/booking/studioDetail.vue
0 → 100644
| 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> |
| ... | @@ -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 | } | ... | ... |
src/viewsPc/components/orderRemark.vue
0 → 100644
| 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 | <!--<!– {{ isNational }}–>--> | ||
| 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 | <!-- <!– <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>–>--> |
| 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; | ... | ... |
src/viewsPc/register/components/utype3.vue
0 → 100644
| 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 | } | ... | ... |
-
Please register or sign in to post a comment