no message
Showing
20 changed files
with
364 additions
and
103 deletions
| ... | @@ -252,6 +252,13 @@ export function getMyGroupForCptFilter(groupId, cptId, query) { | ... | @@ -252,6 +252,13 @@ export function getMyGroupForCptFilter(groupId, cptId, query) { |
| 252 | data: query | 252 | data: query |
| 253 | }) | 253 | }) |
| 254 | } | 254 | } |
| 255 | //todo | ||
| 256 | export function bindWdsf(perId,card) { | ||
| 257 | return request({ | ||
| 258 | url: `/systemj/personInfo/bindWdsf/${perId}?card=${card}`, | ||
| 259 | method: 'post' | ||
| 260 | }) | ||
| 261 | } | ||
| 255 | export function getGroupPersonList(query,groupId) { | 262 | export function getGroupPersonList(query,groupId) { |
| 256 | return request({ | 263 | return request({ |
| 257 | url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`, | 264 | url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`, | ... | ... |
src/assets/img/r.png
0 → 100644
2.2 KB
src/assets/img/w.png
0 → 100644
2.52 KB
| ... | @@ -182,13 +182,14 @@ aside { | ... | @@ -182,13 +182,14 @@ aside { |
| 182 | margin-bottom: 10px; | 182 | margin-bottom: 10px; |
| 183 | } | 183 | } |
| 184 | } | 184 | } |
| 185 | .flexCenter{display: flex;align-items: center;justify-content: center;} | ||
| 185 | .primary-kx{border:1px solid var(--el-color-primary)!important;color: var(--el-color-primary)!important;} | 186 | .primary-kx{border:1px solid var(--el-color-primary)!important;color: var(--el-color-primary)!important;} |
| 186 | .primary-kx:hover{} | 187 | .primary-kx:hover{} |
| 187 | .border-info{background: rgba(69,61,234,0.04); | 188 | .border-info{background: rgba(69,61,234,0.04); |
| 188 | border: 1px solid #D3D1F6; | 189 | border: 1px solid #D3D1F6; |
| 189 | border-radius: 5px;padding: 10px;margin-bottom: 20px; | 190 | border-radius: 5px;padding: 10px;margin-bottom: 20px; |
| 190 | &.inline{display: inline-block;border-radius: 50px;padding: 10px 20px; | 191 | &.inline{display: inline-block;border-radius: 50px;padding: 10px 20px; |
| 191 | margin: 0 40% 20px;min-width: 200px;} | 192 | margin: 0 auto 20px;min-width: 280px;} |
| 192 | &.gray{background: #FAFBFD; | 193 | &.gray{background: #FAFBFD; |
| 193 | border: 1px solid #EEEFF0;} | 194 | border: 1px solid #EEEFF0;} |
| 194 | label{margin-right: 10px;} | 195 | label{margin-right: 10px;} | ... | ... |
| ... | @@ -241,7 +241,7 @@ img{display: block;} | ... | @@ -241,7 +241,7 @@ img{display: block;} |
| 241 | } | 241 | } |
| 242 | 242 | ||
| 243 | .text-success { | 243 | .text-success { |
| 244 | color: #13B5B1; | 244 | color: #32B16C; |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | .text-info { | 247 | .text-info { |
| ... | @@ -1356,7 +1356,7 @@ img{display: block;} | ... | @@ -1356,7 +1356,7 @@ img{display: block;} |
| 1356 | .liveImgbox{height: 100%;position: relative;width: 100%;aspect-ratio: 16/9;cursor: pointer; | 1356 | .liveImgbox{height: 100%;position: relative;width: 100%;aspect-ratio: 16/9;cursor: pointer; |
| 1357 | overflow: hidden; | 1357 | overflow: hidden; |
| 1358 | .ii{position: absolute;top: 0;left: 0;color: #fff;font-size: 14px;padding: 4px 6px 4px 30px; | 1358 | .ii{position: absolute;top: 0;left: 0;color: #fff;font-size: 14px;padding: 4px 6px 4px 30px; |
| 1359 | font-style: normal;z-index: 1; | 1359 | font-style: normal;z-index: 1;height: 28px; |
| 1360 | background: url("@/assets/dance/live.gif") no-repeat 10px #F04035; | 1360 | background: url("@/assets/dance/live.gif") no-repeat 10px #F04035; |
| 1361 | background-size: 14px; | 1361 | background-size: 14px; |
| 1362 | &::after{content: ''; width: 0; | 1362 | &::after{content: ''; width: 0; |
| ... | @@ -1381,7 +1381,7 @@ img{display: block;} | ... | @@ -1381,7 +1381,7 @@ img{display: block;} |
| 1381 | img{width: 100%;height: 100%;object-fit: cover;object-position: center; | 1381 | img{width: 100%;height: 100%;object-fit: cover;object-position: center; |
| 1382 | transform: scale(1);transition: all 0.2s;} | 1382 | transform: scale(1);transition: all 0.2s;} |
| 1383 | } | 1383 | } |
| 1384 | .languageBtn{ | 1384 | .languageBtn{white-space: nowrap; |
| 1385 | font-size: 16px; | 1385 | font-size: 16px; |
| 1386 | span{padding: 0 5px;cursor: pointer;} | 1386 | span{padding: 0 5px;cursor: pointer;} |
| 1387 | span:hover{font-weight: bold;} | 1387 | span:hover{font-weight: bold;} | ... | ... |
| ... | @@ -4,7 +4,7 @@ | ... | @@ -4,7 +4,7 @@ |
| 4 | <img class="logo" src="@/assets/v1/nav_logo.png"> | 4 | <img class="logo" src="@/assets/v1/nav_logo.png"> |
| 5 | </router-link> | 5 | </router-link> |
| 6 | 6 | ||
| 7 | <div class="home-menu forPc"> | 7 | <div class="home-menu forPc" style="margin: 0 20px"> |
| 8 | <el-menu | 8 | <el-menu |
| 9 | v-if="language==0" | 9 | v-if="language==0" |
| 10 | router :default-active="activeIndex" :mode="mode" :ellipsis="true" | 10 | router :default-active="activeIndex" :mode="mode" :ellipsis="true" |
| ... | @@ -66,8 +66,8 @@ | ... | @@ -66,8 +66,8 @@ |
| 66 | | <span @click="logout()">退出</span> | 66 | | <span @click="logout()">退出</span> |
| 67 | </el-button> | 67 | </el-button> |
| 68 | <el-button v-if="language==1&&isLogin" style="border-radius: 20px;" class="loginBtn"> | 68 | <el-button v-if="language==1&&isLogin" style="border-radius: 20px;" class="loginBtn"> |
| 69 | <span @click="router.push('/center/myInfo')">个人中心</span> | 69 | <span @click="router.push('/center/myInfo')">Personal</span> |
| 70 | | <span @click="logout()">退出</span> | 70 | | <span @click="logout()">Exit</span> |
| 71 | </el-button> | 71 | </el-button> |
| 72 | </div> | 72 | </div> |
| 73 | </div> | 73 | </div> |
| ... | @@ -318,7 +318,7 @@ function getCode() { | ... | @@ -318,7 +318,7 @@ function getCode() { |
| 318 | :deep(.el-menu-item.is-active){color: var(--el-color-primary);} | 318 | :deep(.el-menu-item.is-active){color: var(--el-color-primary);} |
| 319 | } | 319 | } |
| 320 | .weiHead{display: flex;justify-content: end;padding: 15px;align-items: center; | 320 | .weiHead{display: flex;justify-content: end;padding: 15px;align-items: center; |
| 321 | .languageBtn{font-size: 20px;margin-right: 20px;line-height: 30px;} | 321 | .languageBtn{font-size: 20px;margin-right: 20px;line-height: 30px;white-space: nowrap;} |
| 322 | } | 322 | } |
| 323 | .weiMenu{ | 323 | .weiMenu{ |
| 324 | .el-menu-item{font-size: 20px} | 324 | .el-menu-item{font-size: 20px} | ... | ... |
| ... | @@ -6,6 +6,11 @@ import { | ... | @@ -6,6 +6,11 @@ import { |
| 6 | /* Layout */ | 6 | /* Layout */ |
| 7 | import Layout from '@/layoutPc' | 7 | import Layout from '@/layoutPc' |
| 8 | import Empty from '@/layoutPc/empty' | 8 | import Empty from '@/layoutPc/empty' |
| 9 | import NProgress from "nprogress"; | ||
| 10 | import {getToken} from "@/utils/auth"; | ||
| 11 | import useUserStore from "@/store/modules/user"; | ||
| 12 | import {isRelogin} from "@/utils/request"; | ||
| 13 | import {ElMessage} from "element-plus"; | ||
| 9 | // import useUserStore from '@/store/modules/user' | 14 | // import useUserStore from '@/store/modules/user' |
| 10 | 15 | ||
| 11 | /** | 16 | /** |
| ... | @@ -348,6 +353,34 @@ export const constantRoutes = [ | ... | @@ -348,6 +353,34 @@ export const constantRoutes = [ |
| 348 | ] | 353 | ] |
| 349 | }, | 354 | }, |
| 350 | { | 355 | { |
| 356 | path: 'register', | ||
| 357 | component: Empty, | ||
| 358 | redirect: '/register', | ||
| 359 | children: [ | ||
| 360 | { | ||
| 361 | path: '0', | ||
| 362 | component: () => import('@/viewsPc/register/personal'), | ||
| 363 | name: 'personalRegister', | ||
| 364 | meta: { title: 'Register' } | ||
| 365 | },{ | ||
| 366 | path: '1', | ||
| 367 | component: () => import('@/viewsPc/register/team/team'), | ||
| 368 | name: 'teamRegister', | ||
| 369 | meta: { title: 'Register' } | ||
| 370 | },{ | ||
| 371 | path: 'userAgreement', | ||
| 372 | component: () => import('@/viewsPc/register/userAgreement'), | ||
| 373 | name: 'userAgreement', | ||
| 374 | meta: { title: 'Register' } | ||
| 375 | },{ | ||
| 376 | path: 'policy', | ||
| 377 | component: () => import('@/viewsPc/register/policy'), | ||
| 378 | name: 'policy', | ||
| 379 | meta: { title: 'Register' } | ||
| 380 | } | ||
| 381 | ] | ||
| 382 | }, | ||
| 383 | { | ||
| 351 | path: 'center', | 384 | path: 'center', |
| 352 | component: () => import('@/viewsPc/center/index'), | 385 | component: () => import('@/viewsPc/center/index'), |
| 353 | children: [ | 386 | children: [ |
| ... | @@ -393,5 +426,33 @@ const router = createRouter({ | ... | @@ -393,5 +426,33 @@ const router = createRouter({ |
| 393 | } | 426 | } |
| 394 | } | 427 | } |
| 395 | }) | 428 | }) |
| 429 | NProgress.configure({ showSpinner: false }) | ||
| 396 | 430 | ||
| 431 | router.beforeEach((to, from, next) => { | ||
| 432 | NProgress.start() | ||
| 433 | if (getToken()) { | ||
| 434 | // 判断当前用户是否已拉取完user_info信息 | ||
| 435 | if (!useUserStore().user) { | ||
| 436 | isRelogin.show = true | ||
| 437 | useUserStore().getInfo().then(() => { | ||
| 438 | isRelogin.show = false | ||
| 439 | next() // hack方法 确保addRoutes已完成 | ||
| 440 | }).catch(err => { | ||
| 441 | useUserStore().logOut().then(() => { | ||
| 442 | ElMessage.error(err) | ||
| 443 | next({ path: '/' }) | ||
| 444 | }) | ||
| 445 | }) | ||
| 446 | } else { | ||
| 447 | next() | ||
| 448 | } | ||
| 449 | } else { | ||
| 450 | // 没有token | ||
| 451 | next() | ||
| 452 | } | ||
| 453 | }) | ||
| 454 | |||
| 455 | router.afterEach((to) => { | ||
| 456 | NProgress.done() | ||
| 457 | }) | ||
| 397 | export default router | 458 | export default router | ... | ... |
| ... | @@ -4,14 +4,14 @@ | ... | @@ -4,14 +4,14 @@ |
| 4 | destroy-on-close :show-close="showClose" :close-on-click-modal="false" @close="close" | 4 | destroy-on-close :show-close="showClose" :close-on-click-modal="false" @close="close" |
| 5 | > | 5 | > |
| 6 | 6 | ||
| 7 | <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form" v-if="loginStatus==0"> | 7 | <el-form ref="loginRef" :model="loginForm" :rules="language==0?loginRules:loginRules_en" class="login-form" v-if="loginStatus==0"> |
| 8 | <el-form-item prop="username"> | 8 | <el-form-item prop="username"> |
| 9 | 9 | ||
| 10 | <el-input | 10 | <el-input |
| 11 | v-model.trim="loginForm.username" | 11 | v-model.trim="loginForm.username" |
| 12 | size="large" | 12 | size="large" |
| 13 | auto-complete="off" | 13 | auto-complete="off" |
| 14 | placeholder="账号(注册时使用的邮箱/手机号码)" | 14 | :placeholder="language==0?'账号(注册时使用的邮箱/手机号码)':'Account (e-mail/ cell-phone number)'" |
| 15 | > | 15 | > |
| 16 | 16 | ||
| 17 | </el-input> | 17 | </el-input> |
| ... | @@ -22,7 +22,7 @@ | ... | @@ -22,7 +22,7 @@ |
| 22 | type="password" | 22 | type="password" |
| 23 | size="large" show-password | 23 | size="large" show-password |
| 24 | auto-complete="off" | 24 | auto-complete="off" |
| 25 | placeholder="密码" | 25 | :placeholder="language==0?'密码':'Password'" |
| 26 | @keyup.enter="handleLogin" | 26 | @keyup.enter="handleLogin" |
| 27 | > | 27 | > |
| 28 | </el-input> | 28 | </el-input> |
| ... | @@ -32,7 +32,7 @@ | ... | @@ -32,7 +32,7 @@ |
| 32 | v-model.trim="loginForm.code" | 32 | v-model.trim="loginForm.code" |
| 33 | size="large" | 33 | size="large" |
| 34 | auto-complete="off" | 34 | auto-complete="off" |
| 35 | placeholder="验证码" | 35 | :placeholder="language==0?'验证码':'Code'" |
| 36 | @keyup.enter="handleLogin" | 36 | @keyup.enter="handleLogin" |
| 37 | > | 37 | > |
| 38 | <template #append> | 38 | <template #append> |
| ... | @@ -53,43 +53,48 @@ | ... | @@ -53,43 +53,48 @@ |
| 53 | style="width:100%;" | 53 | style="width:100%;" |
| 54 | @click.prevent="handleLogin" | 54 | @click.prevent="handleLogin" |
| 55 | > | 55 | > |
| 56 | <span v-if="!loading">登 录</span> | 56 | <span v-if="!loading">{{language==0?'登 录':'Login'}}</span> |
| 57 | <span v-else>登 录 中...</span> | 57 | <span v-else>{{language==0?'登 录 中...':'Logging in'}}</span> |
| 58 | </el-button> | 58 | </el-button> |
| 59 | </el-form-item> | 59 | </el-form-item> |
| 60 | <el-form-item> | 60 | <el-form-item> |
| 61 | <!-- <span style="color: #999;font-size: 12px;">*默认密码是会员号+证件号后四位+)*%</span>--> | 61 | <!-- <span style="color: #999;font-size: 12px;">*默认密码是会员号+证件号后四位+)*%</span>--> |
| 62 | <div style="display: flex;justify-content: space-between;width: 100%;"> | 62 | <div style="display: flex;justify-content: space-between;width: 100%;"> |
| 63 | <a class="text-primary" @click="showChangePassword">忘记密码?</a> | 63 | <a class="text-primary" @click="showChangePassword">{{language==0?'忘记密码':'Retrieve password'}}?</a> |
| 64 | <a @click="showRegister" class="text-primary">账号注册></a> | 64 | <a @click="showRegister" class="text-primary">{{language==0?'账号注册':'Register'}}></a> |
| 65 | </div> | 65 | </div> |
| 66 | </el-form-item> | 66 | </el-form-item> |
| 67 | <el-form-item> | 67 | <el-form-item> |
| 68 | <div class="agreeLine"> | 68 | <div class="agreeLine" v-if="language==0"> |
| 69 | 登录或注册即代表同意 | 69 | 登录或注册即代表同意 |
| 70 | <a>《用户协议》</a>和 | 70 | <a>《用户协议》</a>和 |
| 71 | <a>《隐私政策》</a> | 71 | <a>《隐私政策》</a> |
| 72 | </div> | 72 | </div> |
| 73 | <div class="agreeLine" v-else> | ||
| 74 | Registering and logging in means agreeing to the User | ||
| 75 | <a>Agreement</a> and | ||
| 76 | <a>Privacy Policy</a> | ||
| 77 | </div> | ||
| 73 | </el-form-item> | 78 | </el-form-item> |
| 74 | </el-form> | 79 | </el-form> |
| 75 | 80 | ||
| 76 | <div v-if="loginStatus==1"> | 81 | <div v-if="loginStatus==1"> |
| 77 | <div class="rItem r1" @click="goRegister(1)"> | 82 | <div class="rItem r1" @click="goRegister(1)"> |
| 78 | <h3>机构用户</h3> | 83 | <h3>{{language==0?'机构用户':'Organization'}}</h3> |
| 79 | </div> | 84 | </div> |
| 80 | <div class="rItem r2" @click="goRegister(0)"> | 85 | <div class="rItem r2" @click="goRegister(0)"> |
| 81 | <h3>个人用户</h3> | 86 | <h3>{{language==0?'个人用户':'Individual'}}</h3> |
| 82 | </div> | 87 | </div> |
| 83 | </div> | 88 | </div> |
| 84 | <div v-if="loginStatus==2"> | 89 | <div v-if="loginStatus==2"> |
| 85 | <el-form ref="changePasswordRef" :model="changePasswordForm" :rules="changePasswordRules" class="login-form"> | 90 | <el-form ref="changePasswordRef" :model="changePasswordForm" :rules="language==0?changePasswordRules:changePasswordRules_en" class="login-form"> |
| 86 | <el-form-item prop="username"> | 91 | <el-form-item prop="username"> |
| 87 | 92 | ||
| 88 | <el-input | 93 | <el-input |
| 89 | v-model.trim="changePasswordForm.username" | 94 | v-model.trim="changePasswordForm.username" |
| 90 | size="large" | 95 | size="large" |
| 91 | auto-complete="off" @change="changePasswordFormUsername" | 96 | auto-complete="off" @change="changePasswordFormUsername" |
| 92 | placeholder="注册时使用的邮箱/手机号码" | 97 | :placeholder="language==0?'注册时使用的邮箱/手机号码':'E-mail/ Phone number'" |
| 93 | > | 98 | > |
| 94 | 99 | ||
| 95 | </el-input> | 100 | </el-input> |
| ... | @@ -99,16 +104,17 @@ | ... | @@ -99,16 +104,17 @@ |
| 99 | v-model.trim="changePasswordForm.code" | 104 | v-model.trim="changePasswordForm.code" |
| 100 | size="large" | 105 | size="large" |
| 101 | auto-complete="off" | 106 | auto-complete="off" |
| 102 | placeholder="邮箱/手机验证码" | 107 | :placeholder="language==0?'邮箱/手机验证码':'Code'" |
| 103 | @keyup.enter="handleLogin" | 108 | @keyup.enter="handleLogin" |
| 104 | > | 109 | > |
| 105 | <template #append> | 110 | <template #append> |
| 106 | <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg"> | 111 | <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg"> |
| 107 | <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false"> | 112 | <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false"> |
| 108 | {{ totalSeconds }} 秒 | 113 | {{ totalSeconds }} {{ language==0?'秒':'s' }} |
| 109 | </count-down> | 114 | </count-down> |
| 110 | <span v-else> | 115 | <span v-else> |
| 111 | 发送验证码 | 116 | <!-- Send verification code--> |
| 117 | {{language==0?'发送验证码':'Send'}} | ||
| 112 | </span> | 118 | </span> |
| 113 | </el-button> | 119 | </el-button> |
| 114 | </template> | 120 | </template> |
| ... | @@ -124,7 +130,7 @@ | ... | @@ -124,7 +130,7 @@ |
| 124 | type="password" | 130 | type="password" |
| 125 | size="large" show-password | 131 | size="large" show-password |
| 126 | auto-complete="off" | 132 | auto-complete="off" |
| 127 | placeholder="新密码" | 133 | :placeholder="language==0?'新密码':'New password'" |
| 128 | @keyup.enter="handleLogin" | 134 | @keyup.enter="handleLogin" |
| 129 | > | 135 | > |
| 130 | </el-input> | 136 | </el-input> |
| ... | @@ -135,7 +141,7 @@ | ... | @@ -135,7 +141,7 @@ |
| 135 | type="password" | 141 | type="password" |
| 136 | size="large" show-password | 142 | size="large" show-password |
| 137 | auto-complete="off" | 143 | auto-complete="off" |
| 138 | placeholder="确认密码" | 144 | :placeholder="language==0?'确认密码':'Confirm password'" |
| 139 | > | 145 | > |
| 140 | </el-input> | 146 | </el-input> |
| 141 | </el-form-item> | 147 | </el-form-item> |
| ... | @@ -148,7 +154,8 @@ | ... | @@ -148,7 +154,8 @@ |
| 148 | style="width:100%;" | 154 | style="width:100%;" |
| 149 | @click.prevent="handleChangePassword" | 155 | @click.prevent="handleChangePassword" |
| 150 | > | 156 | > |
| 151 | <span>确定</span> | 157 | <span v-if="language==0">确定</span> |
| 158 | <span v-else>Submit</span> | ||
| 152 | </el-button> | 159 | </el-button> |
| 153 | </el-form-item> | 160 | </el-form-item> |
| 154 | </el-form> | 161 | </el-form> |
| ... | @@ -163,9 +170,11 @@ import {forgetPassword, getCodeImg} from '@/api/login' | ... | @@ -163,9 +170,11 @@ import {forgetPassword, getCodeImg} from '@/api/login' |
| 163 | import * as match from '@/apiPc/match' | 170 | import * as match from '@/apiPc/match' |
| 164 | import Cookies from 'js-cookie' | 171 | import Cookies from 'js-cookie' |
| 165 | import useUserStore from '@/store/modules/user' | 172 | import useUserStore from '@/store/modules/user' |
| 173 | const language = ref(cache.local.get('language') || 0) | ||
| 166 | import { useRouter } from 'vue-router' | 174 | import { useRouter } from 'vue-router' |
| 167 | import { getCurrentInstance, ref, watch } from 'vue' | 175 | import { getCurrentInstance, ref, watch } from 'vue' |
| 168 | import { ElMessage,ElMessageBox} from 'element-plus' | 176 | import { ElMessage,ElMessageBox} from 'element-plus' |
| 177 | import cache from "@/plugins/cache"; | ||
| 169 | const emit = defineEmits(['submitForm']) | 178 | const emit = defineEmits(['submitForm']) |
| 170 | const userStore = useUserStore() | 179 | const userStore = useUserStore() |
| 171 | const router = useRouter() | 180 | const router = useRouter() |
| ... | @@ -189,10 +198,21 @@ const changePasswordRules = { | ... | @@ -189,10 +198,21 @@ const changePasswordRules = { |
| 189 | confirmPassword: [{ required: true, trigger: 'change', message: '请再次输入您的密码' }], | 198 | confirmPassword: [{ required: true, trigger: 'change', message: '请再次输入您的密码' }], |
| 190 | code: [{ required: true, trigger: 'change', message: '请输入验证码' }] | 199 | code: [{ required: true, trigger: 'change', message: '请输入验证码' }] |
| 191 | } | 200 | } |
| 201 | const loginRules_en = { | ||
| 202 | username: [{ required: true, trigger: 'change', message: 'Please enter ' }], | ||
| 203 | password: [{ required: true, trigger: 'change', message: 'Please enter ' }], | ||
| 204 | code: [{ required: true, trigger: 'change', message: 'Please enter ' }] | ||
| 205 | } | ||
| 206 | const changePasswordRules_en = { | ||
| 207 | username: [{ required: true, trigger: 'change', message: 'Please enter ' }], | ||
| 208 | password: [{ required: true, trigger: 'change', message: 'Please enter ' }], | ||
| 209 | confirmPassword: [{ required: true, trigger: 'change', message: 'Please enter ' }], | ||
| 210 | code: [{ required: true, trigger: 'change', message: 'Please enter ' }] | ||
| 211 | } | ||
| 192 | 212 | ||
| 193 | const show = ref(false) | 213 | const show = ref(false) |
| 194 | const loginStatus = ref(0) | 214 | const loginStatus = ref(0) |
| 195 | const title = ref('用户登录') | 215 | const title = ref('') |
| 196 | const showClose = ref(true) | 216 | const showClose = ref(true) |
| 197 | const codeUrl = ref('') | 217 | const codeUrl = ref('') |
| 198 | const loading = ref(false) | 218 | const loading = ref(false) |
| ... | @@ -212,6 +232,11 @@ const changePasswordForm = ref({ | ... | @@ -212,6 +232,11 @@ const changePasswordForm = ref({ |
| 212 | const open = (params) => { | 232 | const open = (params) => { |
| 213 | show.value = true | 233 | show.value = true |
| 214 | showClose.value = !(params?.notShowClose || false) | 234 | showClose.value = !(params?.notShowClose || false) |
| 235 | if(language.value==0){ | ||
| 236 | title.value = '用户登录' | ||
| 237 | } else { | ||
| 238 | title.value = 'LOGIN' | ||
| 239 | } | ||
| 215 | getCode() | 240 | getCode() |
| 216 | getCookie() | 241 | getCookie() |
| 217 | } | 242 | } |
| ... | @@ -252,11 +277,19 @@ function close() { | ... | @@ -252,11 +277,19 @@ function close() { |
| 252 | } | 277 | } |
| 253 | function showChangePassword() { | 278 | function showChangePassword() { |
| 254 | loginStatus.value=2 | 279 | loginStatus.value=2 |
| 280 | if(language.value==0){ | ||
| 255 | title.value = '忘记密码/密码重置' | 281 | title.value = '忘记密码/密码重置' |
| 282 | } else { | ||
| 283 | title.value = 'FORGET PASSWORD' | ||
| 284 | } | ||
| 256 | } | 285 | } |
| 257 | function showRegister() { | 286 | function showRegister() { |
| 258 | loginStatus.value=1 | 287 | loginStatus.value=1 |
| 288 | if(language.value==0){ | ||
| 259 | title.value = '账号注册' | 289 | title.value = '账号注册' |
| 290 | } else { | ||
| 291 | title.value = 'REGISTER' | ||
| 292 | } | ||
| 260 | } | 293 | } |
| 261 | function goRegister(n) { | 294 | function goRegister(n) { |
| 262 | if(n==0){ | 295 | if(n==0){ |
| ... | @@ -291,7 +324,11 @@ function getCookie() { | ... | @@ -291,7 +324,11 @@ function getCookie() { |
| 291 | } | 324 | } |
| 292 | function sendsmsMsg() { | 325 | function sendsmsMsg() { |
| 293 | if(!changePasswordForm.value.username){ | 326 | if(!changePasswordForm.value.username){ |
| 327 | if(language.value==0){ | ||
| 294 | ElMessage.error('请填写手机/邮箱') | 328 | ElMessage.error('请填写手机/邮箱') |
| 329 | } else { | ||
| 330 | ElMessage.error('Please fill in your phone/email address') | ||
| 331 | } | ||
| 295 | return | 332 | return |
| 296 | } | 333 | } |
| 297 | if(counting.value){ | 334 | if(counting.value){ | ... | ... |
| ... | @@ -4,10 +4,10 @@ | ... | @@ -4,10 +4,10 @@ |
| 4 | <div class="box ph-30"> | 4 | <div class="box ph-30"> |
| 5 | <el-card> | 5 | <el-card> |
| 6 | <el-steps :active="activeStep" align-center> | 6 | <el-steps :active="activeStep" align-center> |
| 7 | <el-step title="团队信息"/> | 7 | <el-step :title="language==0?'团队信息':'Team Information'" /> |
| 8 | <el-step title="教练/领队/其他"/> | 8 | <el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" /> |
| 9 | <el-step title="选手报名"/> | 9 | <el-step :title="language==0?'选手报名':'Participant Registration'" /> |
| 10 | <el-step title="提交审核"/> | 10 | <el-step :title="language==0?'提交审核':'Submit for review'" /> |
| 11 | </el-steps> | 11 | </el-steps> |
| 12 | </el-card> | 12 | </el-card> |
| 13 | 13 | ||
| ... | @@ -171,12 +171,13 @@ import {ref, reactive} from 'vue' | ... | @@ -171,12 +171,13 @@ import {ref, reactive} from 'vue' |
| 171 | import {getCurrentInstance, onMounted} from '@vue/runtime-core' | 171 | import {getCurrentInstance, onMounted} from '@vue/runtime-core' |
| 172 | import * as match from '@/apiPc/match' | 172 | import * as match from '@/apiPc/match' |
| 173 | import dialogAddCoach from './components/addCoach' | 173 | import dialogAddCoach from './components/addCoach' |
| 174 | 174 | import cache from '@/utils/cache' | |
| 175 | const {proxy} = getCurrentInstance() | 175 | const {proxy} = getCurrentInstance() |
| 176 | const router = useRouter() | 176 | const router = useRouter() |
| 177 | const route = useRoute() | 177 | const route = useRoute() |
| 178 | import {ElMessage} from 'element-plus' | 178 | import {ElMessage} from 'element-plus' |
| 179 | import {useRoute, useRouter} from 'vue-router' | 179 | import {useRoute, useRouter} from 'vue-router' |
| 180 | const language = ref(cache.local.get('language') || 0) | ||
| 180 | 181 | ||
| 181 | const data = reactive({ | 182 | const data = reactive({ |
| 182 | form: { | 183 | form: { | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div style="padding: 0 20px 20px"> | 2 | <div style="padding: 0 20px 20px" v-if="language==0"> |
| 3 | <!--赛事详情--> | 3 | <!--赛事详情--> |
| 4 | <div class="indexTitle"><h3 class="leftboderTT">组织机构</h3></div> | 4 | <div class="indexTitle"> |
| 5 | <div class="xzbox"> | 5 | <h3 class="leftboderTT">组织机构</h3> |
| 6 | 1.各单位限报1支队伍,每队需报领队1名(运动员可兼任),运动员限报4名<br> | 6 | </div> |
| 7 | 2.参赛运动员必须是参赛企业的员工(包括劳务派遣和外籍员工)<br> | 7 | <div class="xzbox" v-html="form.ocOrganizer"> |
| 8 | 3.参赛运动员必须年满18至50周岁,50周岁以上者不建议参加此次比赛<br> | ||
| 9 | 4.参赛运动员必须身体健康 | ||
| 10 | </div> | 8 | </div> |
| 11 | <div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div> | 9 | <div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div> |
| 12 | <div class="xzbox" v-html="form.signKnow"> | 10 | <div class="xzbox" v-html="form.signKnow"> |
| ... | @@ -103,9 +101,115 @@ | ... | @@ -103,9 +101,115 @@ |
| 103 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/> | 101 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/> |
| 104 | </div> | 102 | </div> |
| 105 | </div> | 103 | </div> |
| 104 | <div style="padding: 0 20px 20px" v-else> | ||
| 105 | <!--赛事详情--> | ||
| 106 | <div class="indexTitle"> | ||
| 107 | <h3 class="leftboderTT">Organization</h3> | ||
| 108 | </div> | ||
| 109 | <div class="xzbox" v-html="form.ocOrganizer"> | ||
| 110 | </div> | ||
| 111 | <div class="indexTitle"><h3 class="leftboderTT">Notes</h3></div> | ||
| 112 | <div class="xzbox" v-html="form.signKnow"> | ||
| 113 | |||
| 114 | </div> | ||
| 115 | <div class="indexTitle" v-if="form.type==0"><h3 class="leftboderTT">Competition Regulations</h3></div> | ||
| 116 | <div class="xzbox" v-if="form.type==0" v-html="form.ruleUrl"></div> | ||
| 117 | <div class="indexTitle" v-if="form.type==1"><h3 class="leftboderTT">Event settings</h3></div> | ||
| 118 | <div class="collapsebox" v-if="form.type==1"> | ||
| 119 | <el-collapse v-if="form.cptProjectList?.length > 0"> | ||
| 120 | <el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in form.cptProjectList"> | ||
| 121 | <div class="pd20"> | ||
| 122 | <table class="table"> | ||
| 123 | <tr> | ||
| 124 | <td>日期</td> | ||
| 125 | <td>单元</td> | ||
| 126 | <td>组别</td> | ||
| 127 | <td>时间</td> | ||
| 128 | <td>阶段</td> | ||
| 129 | </tr> | ||
| 130 | <tr> | ||
| 131 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 132 | <td rowspan="4">BRK01</td> | ||
| 133 | <td>男子</td> | ||
| 134 | <td>14:30 - 15:30</td> | ||
| 135 | <td>资格赛</td> | ||
| 136 | </tr> | ||
| 137 | <tr> | ||
| 138 | <td>女子</td> | ||
| 139 | <td>14:30 - 15:30</td> | ||
| 140 | <td>资格赛</td> | ||
| 141 | </tr> | ||
| 142 | <tr> | ||
| 143 | <td>男子</td> | ||
| 144 | <td>14:30 - 15:30</td> | ||
| 145 | <td>循环赛</td> | ||
| 146 | </tr> | ||
| 147 | <tr> | ||
| 148 | <td>女子</td> | ||
| 149 | <td>14:30 - 15:30</td> | ||
| 150 | <td>循环赛</td> | ||
| 151 | </tr> | ||
| 152 | <tr> | ||
| 153 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 154 | <td rowspan="8">BRK02</td> | ||
| 155 | <td>男子</td> | ||
| 156 | <td>14:30 - 15:30</td> | ||
| 157 | <td>四分之一决赛</td> | ||
| 158 | </tr> | ||
| 159 | <tr> | ||
| 160 | <td>男子</td> | ||
| 161 | <td>14:30 - 15:30</td> | ||
| 162 | <td>四分之一决赛</td> | ||
| 163 | </tr> | ||
| 164 | <tr> | ||
| 165 | <td>女子</td> | ||
| 166 | <td>14:30 - 15:30</td> | ||
| 167 | <td>半决赛</td> | ||
| 168 | </tr> | ||
| 169 | <tr> | ||
| 170 | <td>女子</td> | ||
| 171 | <td>14:30 - 15:30</td> | ||
| 172 | <td>半决赛</td> | ||
| 173 | </tr> | ||
| 174 | <tr> | ||
| 175 | <td>男子</td> | ||
| 176 | <td>14:30 - 15:30</td> | ||
| 177 | <td>季军赛</td> | ||
| 178 | </tr> | ||
| 179 | <tr> | ||
| 180 | <td>女子</td> | ||
| 181 | <td>14:30 - 15:30</td> | ||
| 182 | <td>季军赛</td> | ||
| 183 | </tr> | ||
| 184 | <tr> | ||
| 185 | <td>男子</td> | ||
| 186 | <td>14:30 - 15:30</td> | ||
| 187 | <td>决赛</td> | ||
| 188 | </tr> | ||
| 189 | <tr> | ||
| 190 | <td>女子</td> | ||
| 191 | <td>14:30 - 15:30</td> | ||
| 192 | <td>决赛</td> | ||
| 193 | </tr> | ||
| 194 | <tr> | ||
| 195 | <td colspan="5" style="text-align: left"> | ||
| 196 | 注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整 | ||
| 197 | </td> | ||
| 198 | </tr> | ||
| 199 | </table> | ||
| 200 | </div> | ||
| 201 | </el-collapse-item> | ||
| 202 | </el-collapse> | ||
| 203 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/> | ||
| 204 | </div> | ||
| 205 | </div> | ||
| 106 | </template> | 206 | </template> |
| 107 | 207 | ||
| 108 | <script setup> | 208 | <script setup> |
| 209 | import {ref} from "vue"; | ||
| 210 | import cache from "@/plugins/cache"; | ||
| 211 | |||
| 212 | const language = ref(cache.local.get('language') || 0) | ||
| 109 | const props = defineProps({ | 213 | const props = defineProps({ |
| 110 | form:{ | 214 | form:{ |
| 111 | type:Object, | 215 | type:Object, | ... | ... |
| ... | @@ -2,13 +2,13 @@ | ... | @@ -2,13 +2,13 @@ |
| 2 | <el-card :body-style="{padding: '10px'}" class="mb20"> | 2 | <el-card :body-style="{padding: '10px'}" class="mb20"> |
| 3 | <div> | 3 | <div> |
| 4 | <div class="liveImgbox" @click="goDetail(newsList[0])"> | 4 | <div class="liveImgbox" @click="goDetail(newsList[0])"> |
| 5 | <i class="ii">直播中</i> | 5 | <i class="ii">{{ language==0?'直播中':'Live' }}</i> |
| 6 | <img :src="fillImgUrl_webSite(newsList[0]?.picUrl)"> | 6 | <img :src="fillImgUrl_webSite(newsList[0]?.picUrl)"> |
| 7 | </div> | 7 | </div> |
| 8 | </div> | 8 | </div> |
| 9 | 9 | ||
| 10 | <div class="indexTitle"> | 10 | <div class="indexTitle"> |
| 11 | <h3 class="leftboderTT">赛事报道</h3> | 11 | <h3 class="leftboderTT">{{ language==0?'赛事报道':'Special reports' }}</h3> |
| 12 | <a class="more" @click="goList(query2.sortId,'专题报道')">MORE</a> | 12 | <a class="more" @click="goList(query2.sortId,'专题报道')">MORE</a> |
| 13 | </div> | 13 | </div> |
| 14 | <div> | 14 | <div> |
| ... | @@ -17,7 +17,7 @@ | ... | @@ -17,7 +17,7 @@ |
| 17 | </div> | 17 | </div> |
| 18 | </div> | 18 | </div> |
| 19 | 19 | ||
| 20 | <div class="indexTitle"><h3 class="leftboderTT">赛事视频</h3> | 20 | <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'赛事视频':'Event Videos' }}</h3> |
| 21 | <a class="more" @click="goList(10000006,'赛事视频')">MORE</a> | 21 | <a class="more" @click="goList(10000006,'赛事视频')">MORE</a> |
| 22 | </div> | 22 | </div> |
| 23 | <div> | 23 | <div> |
| ... | @@ -25,7 +25,7 @@ | ... | @@ -25,7 +25,7 @@ |
| 25 | <img :src="fillImgUrl_webSite(newsList[1]?.picUrl)"> | 25 | <img :src="fillImgUrl_webSite(newsList[1]?.picUrl)"> |
| 26 | </div> | 26 | </div> |
| 27 | </div> | 27 | </div> |
| 28 | <div class="indexTitle"><h3 class="leftboderTT">赛事图片</h3> | 28 | <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'赛事图片':'Event Photos' }}</h3> |
| 29 | <a class="more" @click="goList(10000007,'赛事图片')">MORE</a> | 29 | <a class="more" @click="goList(10000007,'赛事图片')">MORE</a> |
| 30 | </div> | 30 | </div> |
| 31 | <div> | 31 | <div> |
| ... | @@ -37,6 +37,9 @@ | ... | @@ -37,6 +37,9 @@ |
| 37 | <script setup> | 37 | <script setup> |
| 38 | import {getNewsListById} from "@/apiPc/webSite"; | 38 | import {getNewsListById} from "@/apiPc/webSite"; |
| 39 | import {onMounted, ref} from "vue"; | 39 | import {onMounted, ref} from "vue"; |
| 40 | import cache from '@/plugins/cache' | ||
| 41 | const language = ref(cache.local.get('language') || 0) | ||
| 42 | |||
| 40 | const newsList = ref([]) | 43 | const newsList = ref([]) |
| 41 | const newsList2 = ref([]) | 44 | const newsList2 = ref([]) |
| 42 | const query1 = ref({ | 45 | const query1 = ref({ | ... | ... |
This diff is collapsed.
Click to expand it.
This diff is collapsed.
Click to expand it.
| ... | @@ -37,6 +37,7 @@ | ... | @@ -37,6 +37,7 @@ |
| 37 | <div class="border-info gray mt20"> | 37 | <div class="border-info gray mt20"> |
| 38 | <el-row> | 38 | <el-row> |
| 39 | <el-col :lg="8"> | 39 | <el-col :lg="8"> |
| 40 | <img/> | ||
| 40 | <div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div> | 41 | <div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div> |
| 41 | <div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div> | 42 | <div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div> |
| 42 | </el-col> | 43 | </el-col> |
| ... | @@ -117,21 +118,21 @@ | ... | @@ -117,21 +118,21 @@ |
| 117 | 118 | ||
| 118 | 119 | ||
| 119 | </el-card> | 120 | </el-card> |
| 120 | <el-card class="mt20"> | 121 | <el-card class="mt20" :body-style="{padding: '0px'}"> |
| 121 | <el-row> | 122 | <el-row class="priceBar"> |
| 122 | <el-col :lg="16"> | 123 | <el-col :lg="16" :xs="24" class="pd20"> |
| 123 | <div> | 124 | <div class="flex"> |
| 124 | <div class="item"><label>报名费:</label><span>¥{{ matchInfo.signFee }}</span></div> | 125 | <div class="item"><label>报名费:</label><span>¥3000</span></div> |
| 125 | <div class="item"><label>保险费:</label><span>¥{{ matchInfo.signFee }}</span></div> | 126 | <div class="item"><label>保险费:</label><span>¥3000</span></div> |
| 126 | <div class="item"><label>费用总计:</label><span>¥{{ matchInfo.signFee }}</span></div> | 127 | <div class="item"><label>费用总计:</label><span>¥6000</span></div> |
| 127 | </div> | 128 | </div> |
| 128 | </el-col> | 129 | </el-col> |
| 129 | <el-col :lg="8"> | 130 | <el-col :lg="8" :xs="24" class="text-right pd20"> |
| 130 | <el-link type="primary"><el-icon><Upload /></el-icon>导出参赛人员清单</el-link> | 131 | <el-link type="primary"><el-icon><Upload /></el-icon>导出参赛人员清单</el-link> |
| 131 | <el-link type="primary"><el-icon><Upload /></el-icon>导出设项报名清单</el-link> | 132 | <el-link type="primary"><el-icon><Upload /></el-icon>导出设项报名清单</el-link> |
| 132 | </el-col> | 133 | </el-col> |
| 133 | </el-row> | 134 | </el-row> |
| 134 | <div class="text-center"> | 135 | <div class="text-center pd20"> |
| 135 | <el-button type="primary" class="" plain round @click="goPrev()">上一步</el-button> | 136 | <el-button type="primary" class="" plain round @click="goPrev()">上一步</el-button> |
| 136 | <el-button type="primary" class="" plain round @click="submitForm()">保存暂不提交审核</el-button> | 137 | <el-button type="primary" class="" plain round @click="submitForm()">保存暂不提交审核</el-button> |
| 137 | <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">提交审核</el-button> | 138 | <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">提交审核</el-button> |
| ... | @@ -157,4 +158,15 @@ const matchInfo = ref({}) | ... | @@ -157,4 +158,15 @@ const matchInfo = ref({}) |
| 157 | font-size: 18px; | 158 | font-size: 18px; |
| 158 | text-align: center; | 159 | text-align: center; |
| 159 | } | 160 | } |
| 161 | .priceBar{ | ||
| 162 | background: #FAFBFD; | ||
| 163 | .flex{display: flex; | ||
| 164 | .item{font-size: 16px;margin-right: 15px; | ||
| 165 | label{color: #95A1A6;} | ||
| 166 | } | ||
| 167 | } | ||
| 168 | } | ||
| 169 | .text-right{text-align: right; | ||
| 170 | a{margin-left: 20px;} | ||
| 171 | } | ||
| 160 | </style> | 172 | </style> | ... | ... |
| ... | @@ -4,23 +4,29 @@ | ... | @@ -4,23 +4,29 @@ |
| 4 | <div class="box ph-30"> | 4 | <div class="box ph-30"> |
| 5 | <el-card> | 5 | <el-card> |
| 6 | <el-steps active="1" align-center> | 6 | <el-steps active="1" align-center> |
| 7 | <el-step title="团队信息" /> | 7 | <el-step :title="language==0?'团队信息':'Team Information'" /> |
| 8 | <el-step title="教练/领队/其他" /> | 8 | <el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" /> |
| 9 | <el-step title="选手报名" /> | 9 | <el-step :title="language==0?'选手报名':'Participant Registration'" /> |
| 10 | <el-step title="提交审核" /> | 10 | <el-step :title="language==0?'提交审核':'Submit for review'" /> |
| 11 | </el-steps> | 11 | </el-steps> |
| 12 | </el-card> | 12 | </el-card> |
| 13 | <div class="h20"></div> | 13 | <div class="h20"></div> |
| 14 | <div class="panel" style="box-shadow: var(--el-box-shadow)"> | 14 | <div class="panel" style="box-shadow: var(--el-box-shadow)"> |
| 15 | <div class="border-info" style="margin: 20px"> | 15 | <div class="border-info" style="margin: 20px"> |
| 16 | <el-row> | 16 | <el-row v-if="language==0"> |
| 17 | <el-col :lg="8"> | 17 | <el-col :lg="8"><div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col> |
| 18 | <div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col> | ||
| 19 | <el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col> | 18 | <el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col> |
| 20 | <el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}} 至 {{ matchInfo.endTime?.slice(0,10) }}</div></el-col> | 19 | <el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}} 至 {{ matchInfo.endTime?.slice(0,10) }}</div></el-col> |
| 21 | <el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }} 至{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col> | 20 | <el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }} 至{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col> |
| 22 | <el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col> | 21 | <el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col> |
| 23 | </el-row> | 22 | </el-row> |
| 23 | <el-row v-else> | ||
| 24 | <el-col :lg="8"><div class="item"><label>Event Name</label>{{matchInfo.name}}</div></el-col> | ||
| 25 | <el-col :lg="8"><div class="item"><label>Event Type</label>{{matchInfo.name}}</div></el-col> | ||
| 26 | <el-col :lg="8"><div class="item"><label>Event Date</label>{{matchInfo.beginTime?.slice(0,10)}} ~ {{ matchInfo.endTime?.slice(0,10) }}</div></el-col> | ||
| 27 | <el-col :lg="8"><div class="item"><label>Registration Period</label>{{ matchInfo.signBeginTime?.slice(0,10) }} ~{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col> | ||
| 28 | <el-col :lg="16"><div class="item"><label>Event Address</label>{{matchInfo.address}}</div></el-col> | ||
| 29 | </el-row> | ||
| 24 | 30 | ||
| 25 | </div> | 31 | </div> |
| 26 | <div class="h20"></div> | 32 | <div class="h20"></div> |
| ... | @@ -83,7 +89,9 @@ | ... | @@ -83,7 +89,9 @@ |
| 83 | 89 | ||
| 84 | 90 | ||
| 85 | <div class="panel-footer text-center"> | 91 | <div class="panel-footer text-center"> |
| 86 | <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">下一步</el-button> | 92 | <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()"> |
| 93 | {{ language==0?'下一步':'NEXT' }} | ||
| 94 | </el-button> | ||
| 87 | </div> | 95 | </div> |
| 88 | </div> | 96 | </div> |
| 89 | </div> | 97 | </div> |
| ... | @@ -96,6 +104,8 @@ import { reactive, ref } from 'vue' | ... | @@ -96,6 +104,8 @@ import { reactive, ref } from 'vue' |
| 96 | import { getCurrentInstance, onMounted } from '@vue/runtime-core' | 104 | import { getCurrentInstance, onMounted } from '@vue/runtime-core' |
| 97 | import { useRoute, useRouter } from 'vue-router' | 105 | import { useRoute, useRouter } from 'vue-router' |
| 98 | import { toRefs } from '@vueuse/shared' | 106 | import { toRefs } from '@vueuse/shared' |
| 107 | import cache from "@/plugins/cache" | ||
| 108 | const language = ref(cache.local.get('language') || 0) | ||
| 99 | 109 | ||
| 100 | const { proxy } = getCurrentInstance() | 110 | const { proxy } = getCurrentInstance() |
| 101 | const router = useRouter() | 111 | const router = useRouter() |
| ... | @@ -107,7 +117,9 @@ import {saveMyGroupForCpt} from "@/apiPc/match"; | ... | @@ -107,7 +117,9 @@ import {saveMyGroupForCpt} from "@/apiPc/match"; |
| 107 | 117 | ||
| 108 | const data = reactive({ | 118 | const data = reactive({ |
| 109 | isRanks: false, | 119 | isRanks: false, |
| 110 | matchData:{}, | 120 | matchData:{ |
| 121 | enBo:{} | ||
| 122 | }, | ||
| 111 | form: {}, | 123 | form: {}, |
| 112 | groupId: 0, | 124 | groupId: 0, |
| 113 | cptId: 0, | 125 | cptId: 0, | ... | ... |
| ... | @@ -3,13 +3,13 @@ | ... | @@ -3,13 +3,13 @@ |
| 3 | <div class="box"> | 3 | <div class="box"> |
| 4 | <div class="indexTitle"> | 4 | <div class="indexTitle"> |
| 5 | <h3 class="leftboderTT">Event Video</h3> | 5 | <h3 class="leftboderTT">Event Video</h3> |
| 6 | <a class="more" @click="goList(query1.sortId,'Event Video')">MORE</a> | 6 | <a class="more" @click="goList(query1.sortId,'Event Videos')">MORE</a> |
| 7 | </div> | 7 | </div> |
| 8 | 8 | ||
| 9 | <el-row :gutter="20"> | 9 | <el-row :gutter="20"> |
| 10 | <el-col :lg="12" :sm="24" :md="12"> | 10 | <el-col :lg="12" :sm="24" :md="12"> |
| 11 | <div class="liveImgbox" @click="goDetail(newsList[0])"> | 11 | <div class="liveImgbox" @click="goDetail(newsList[0])"> |
| 12 | <i class="ii">LIVE</i> | 12 | <i class="ii">Live Broadcast</i> |
| 13 | <img :src="fillImgUrl_webSite(newsList[0]?.picUrl)"> | 13 | <img :src="fillImgUrl_webSite(newsList[0]?.picUrl)"> |
| 14 | <h3 class="esp">{{ newsList[0]?.name }} | 14 | <h3 class="esp">{{ newsList[0]?.name }} |
| 15 | </h3> | 15 | </h3> |
| ... | @@ -44,8 +44,8 @@ | ... | @@ -44,8 +44,8 @@ |
| 44 | 44 | ||
| 45 | 45 | ||
| 46 | <div class="indexTitle"> | 46 | <div class="indexTitle"> |
| 47 | <h3 class="leftboderTT">Exciting Pictures</h3> | 47 | <h3 class="leftboderTT">Exciting Photos</h3> |
| 48 | <a class="more" @click="goList(query2.sortId,'Exciting Pictures')">MORE</a> | 48 | <a class="more" @click="goList(query2.sortId,'Exciting Photos')">MORE</a> |
| 49 | </div> | 49 | </div> |
| 50 | <el-row class="mb20" :gutter="20"> | 50 | <el-row class="mb20" :gutter="20"> |
| 51 | <el-col :lg="9"> | 51 | <el-col :lg="9"> | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <el-card style="min-height: 50vh"> | 2 | <el-card style="min-height: 50vh"> |
| 3 | <div class="pt30"> | 3 | <div class="pt30"> |
| 4 | <el-form class="d-form" size="large" label-width="120" style="max-width: 500px;margin: auto"> | 4 | <el-form class="d-form" size="large" :label-width="language==0?120:200" style="max-width: 500px;margin: auto"> |
| 5 | <el-form-item label="手机/邮箱" required> | 5 | <el-form-item :label="language==0?'手机/邮箱':'E-mail / Phone number'" required> |
| 6 | <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/> | 6 | <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/> |
| 7 | </el-form-item> | 7 | </el-form-item> |
| 8 | <el-form-item label="验证码" required> | 8 | <el-form-item :label="language==0?'验证码':'Code'" required> |
| 9 | <el-input v-model="form.code"> | 9 | <el-input v-model="form.code"> |
| 10 | <template #append> | 10 | <template #append> |
| 11 | <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg"> | 11 | <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg"> |
| ... | @@ -13,20 +13,21 @@ | ... | @@ -13,20 +13,21 @@ |
| 13 | {{ totalSeconds }} 秒 | 13 | {{ totalSeconds }} 秒 |
| 14 | </count-down> | 14 | </count-down> |
| 15 | <span v-else> | 15 | <span v-else> |
| 16 | 发送验证码 | 16 | {{ language==0?'发送验证码':'Send code' }} |
| 17 | </span> | 17 | </span> |
| 18 | </el-button> | 18 | </el-button> |
| 19 | </template> | 19 | </template> |
| 20 | </el-input> | 20 | </el-input> |
| 21 | <div class="vcodeBox" :style="isShow?'height:240px':'height:0'"> | 21 | <div class="vcodeBox" :style="isShow?'height:240px':'height:0'"> |
| 22 | <Vcode :show="isShow" type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode> | 22 | <Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText" |
| 23 | type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode> | ||
| 23 | </div> | 24 | </div> |
| 24 | </el-form-item> | 25 | </el-form-item> |
| 25 | </el-form> | 26 | </el-form> |
| 26 | </div> | 27 | </div> |
| 27 | <div class="text-center"> | 28 | <div class="text-center"> |
| 28 | <!-- <el-button class="primary-kx" round @click="goBack">取消</el-button>--> | 29 | <!-- <el-button class="primary-kx" round @click="goBack">取消</el-button>--> |
| 29 | <el-button type="primary" class="btn-lineG w200px" round @click="next">下一步</el-button> | 30 | <el-button type="primary" class="btn-lineG w200px" round @click="next">{{language==0?'下一步':'NEXT' }}</el-button> |
| 30 | </div> | 31 | </div> |
| 31 | </el-card> | 32 | </el-card> |
| 32 | </template> | 33 | </template> |
| ... | @@ -37,18 +38,36 @@ import Vcode from "vue3-puzzle-vcode" | ... | @@ -37,18 +38,36 @@ import Vcode from "vue3-puzzle-vcode" |
| 37 | import { ElMessage } from 'element-plus' | 38 | import { ElMessage } from 'element-plus' |
| 38 | import CountDown from '@chenfengyuan/vue-countdown' | 39 | import CountDown from '@chenfengyuan/vue-countdown' |
| 39 | import {getCaptchaSms,checkRegisterCode} from "@/apiPc/match"; | 40 | import {getCaptchaSms,checkRegisterCode} from "@/apiPc/match"; |
| 41 | import cache from '@/plugins/cache' | ||
| 42 | import {onMounted} from "@vue/runtime-core"; | ||
| 43 | const language = ref(cache.local.get('language') || 0) | ||
| 44 | |||
| 40 | const data = reactive({ | 45 | const data = reactive({ |
| 41 | isShow:false, | 46 | isShow:false, |
| 42 | isCodeTrue:false, | 47 | isCodeTrue:false, |
| 43 | counting:false, | 48 | counting:false, |
| 44 | form:{}, | 49 | form:{}, |
| 45 | activeStep: 0 | 50 | activeStep: 0, |
| 51 | failVcode:'验证失败,请重试', | ||
| 52 | successVcode:'验证通过!', | ||
| 53 | sliderText: '拖动滑块完成拼图', | ||
| 46 | }) | 54 | }) |
| 47 | const {isShow,isCodeTrue,counting,form,activeStep} = toRefs(data) | 55 | const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText} = toRefs(data) |
| 48 | const emit = defineEmits(['submit','userName']) | 56 | const emit = defineEmits(['submit','userName']) |
| 57 | onMounted(()=>{ | ||
| 58 | if(language.value==1){ | ||
| 59 | failVcode.value = 'Error!' | ||
| 60 | successVcode.value = 'Success!' | ||
| 61 | sliderText.value = 'Drag the slider to complete the puzzle' | ||
| 62 | } | ||
| 63 | }) | ||
| 49 | function sendsmsMsg() { | 64 | function sendsmsMsg() { |
| 50 | if(!form.value.account){ | 65 | if(!form.value.account){ |
| 66 | if(language.value==0){ | ||
| 51 | ElMessage.error('请填写手机/邮箱') | 67 | ElMessage.error('请填写手机/邮箱') |
| 68 | } else { | ||
| 69 | ElMessage.error('Please fill in your phone/email address') | ||
| 70 | } | ||
| 52 | return | 71 | return |
| 53 | } | 72 | } |
| 54 | if(counting.value){ | 73 | if(counting.value){ |
| ... | @@ -88,11 +107,19 @@ const goBack = () => { | ... | @@ -88,11 +107,19 @@ const goBack = () => { |
| 88 | } | 107 | } |
| 89 | const next = () => { | 108 | const next = () => { |
| 90 | if(!form.value.account){ | 109 | if(!form.value.account){ |
| 110 | if(language.value==0){ | ||
| 91 | ElMessage.error('请填写手机/邮箱') | 111 | ElMessage.error('请填写手机/邮箱') |
| 112 | } else { | ||
| 113 | ElMessage.error('Please fill in your phone/email address') | ||
| 114 | } | ||
| 92 | return | 115 | return |
| 93 | } | 116 | } |
| 94 | if(!form.value.code){ | 117 | if(!form.value.code){ |
| 118 | if(language.value==0){ | ||
| 95 | ElMessage.error('请填写验证码') | 119 | ElMessage.error('请填写验证码') |
| 120 | } else { | ||
| 121 | ElMessage.error('Please fill in Code') | ||
| 122 | } | ||
| 96 | return | 123 | return |
| 97 | } | 124 | } |
| 98 | if(!isCodeTrue.value){ | 125 | if(!isCodeTrue.value){ | ... | ... |
This diff is collapsed.
Click to expand it.
| 1 | <template> | 1 | <template> |
| 2 | <el-card style="min-height: 50vh"> | 2 | <el-card style="min-height: 50vh"> |
| 3 | <div> | 3 | <div class="text-center"> |
| 4 | <img src="@/assets/dance/ok.png"/> | 4 | <img class="mauto" src="@/assets/dance/ok.png"/> |
| 5 | <h3>注册成功</h3> | 5 | <h3 class="text-primary">{{ language == 0 ? '注册成功' : 'Stered Successfully !' }}</h3> |
| 6 | </div> | 6 | </div> |
| 7 | <div> | 7 | <div class="flexCenter"> |
| 8 | <div class="border-info text-center inline"> | 8 | <div class="border-info text-center inline"> |
| 9 | <label>登录账号</label> 321 | 9 | <label>{{ language == 0 ? '登录账号' : 'Account' }}:</label> {{accont}} |
| 10 | </div> | 10 | </div> |
| 11 | </div> | 11 | </div> |
| 12 | <div class="text-center"> | 12 | <div class="text-center mt30 mb20"> |
| 13 | <el-button class="primary-kx" @click="goHome">返回首页</el-button> | 13 | <el-button class="primary-kx w200px" round @click="goHome">{{ language == 0 ? '返回首页' : 'Homepage' }}</el-button> |
| 14 | <el-button type="primary" @click="goSign">去报名</el-button> | 14 | <el-button type="primary" class="btn-lineG w200px" round @click="goSign">{{ language == 0 ? '去报名' : 'Sign Up' }}</el-button> |
| 15 | </div> | 15 | </div> |
| 16 | </el-card> | 16 | </el-card> |
| 17 | </template> | 17 | </template> |
| ... | @@ -23,7 +23,12 @@ import Vcode from "vue3-puzzle-vcode" | ... | @@ -23,7 +23,12 @@ import Vcode from "vue3-puzzle-vcode" |
| 23 | import {ElMessage} from 'element-plus' | 23 | import {ElMessage} from 'element-plus' |
| 24 | import CountDown from '@chenfengyuan/vue-countdown' | 24 | import CountDown from '@chenfengyuan/vue-countdown' |
| 25 | import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match"; | 25 | import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match"; |
| 26 | 26 | const props = defineProps({ | |
| 27 | accont:{ | ||
| 28 | type:String, | ||
| 29 | required:true | ||
| 30 | } | ||
| 31 | }) | ||
| 27 | const data = reactive({ | 32 | const data = reactive({ |
| 28 | isShow: false, | 33 | isShow: false, |
| 29 | isCodeTrue: false, | 34 | isCodeTrue: false, |
| ... | @@ -34,19 +39,6 @@ const data = reactive({ | ... | @@ -34,19 +39,6 @@ const data = reactive({ |
| 34 | const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data) | 39 | const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data) |
| 35 | const emit = defineEmits(['submit', 'userName']) | 40 | const emit = defineEmits(['submit', 'userName']) |
| 36 | 41 | ||
| 37 | function sendsmsMsg() { | ||
| 38 | if (!form.value.account) { | ||
| 39 | ElMessage.error('请填写手机/邮箱') | ||
| 40 | return | ||
| 41 | } | ||
| 42 | if (counting.value) { | ||
| 43 | return | ||
| 44 | } else { | ||
| 45 | isShow.value = true | ||
| 46 | } | ||
| 47 | } | ||
| 48 | |||
| 49 | |||
| 50 | const goHome = () => { | 42 | const goHome = () => { |
| 51 | 43 | ||
| 52 | } | 44 | } |
| ... | @@ -57,6 +49,7 @@ const goSign = () => { | ... | @@ -57,6 +49,7 @@ const goSign = () => { |
| 57 | </script> | 49 | </script> |
| 58 | 50 | ||
| 59 | <style scoped lang="scss"> | 51 | <style scoped lang="scss"> |
| 52 | |||
| 60 | .el-input-group__append button.el-button, .el-input-group__append button.el-button:hover { | 53 | .el-input-group__append button.el-button, .el-input-group__append button.el-button:hover { |
| 61 | color: var(--el-color-primary); | 54 | color: var(--el-color-primary); |
| 62 | background: #efefff; | 55 | background: #efefff; | ... | ... |
| ... | @@ -2,18 +2,18 @@ | ... | @@ -2,18 +2,18 @@ |
| 2 | <div> | 2 | <div> |
| 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> |
| 7 | <el-steps :active="activeStep" align-center> | 7 | <el-steps :active="activeStep" align-center> |
| 8 | <el-step title="创建账号" /> | 8 | <el-step :title="language==0?'创建账号':'create an account'" /> |
| 9 | <el-step title="账号信息" /> | 9 | <el-step :title="language==0?'账号信息':'account information'" /> |
| 10 | <el-step title="注册完成" /> | 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"/> | 16 | <Step3 v-if="activeStep==2" :accont="form.userName"/> |
| 17 | </div> | 17 | </div> |
| 18 | </div> | 18 | </div> |
| 19 | </div> | 19 | </div> |
| ... | @@ -24,8 +24,11 @@ import {reactive} from "@vue/runtime-core"; | ... | @@ -24,8 +24,11 @@ import {reactive} from "@vue/runtime-core"; |
| 24 | import Step1 from "./step1"; | 24 | import Step1 from "./step1"; |
| 25 | import Step2 from "./step2"; | 25 | import Step2 from "./step2"; |
| 26 | import Step3 from "./step3"; | 26 | import Step3 from "./step3"; |
| 27 | import * as match from "@/apiPc/match"; | 27 | import * as match from "@/apiPc/match" |
| 28 | import {onMounted,toRefs} from "vue"; | 28 | import {onMounted,toRefs} from "vue" |
| 29 | import cache from '@/plugins/cache' | ||
| 30 | const language = ref(cache.local.get('language') || 0) | ||
| 31 | |||
| 29 | const data = reactive({ | 32 | const data = reactive({ |
| 30 | isShow:false, | 33 | isShow:false, |
| 31 | isCodeTrue:false, | 34 | isCodeTrue:false, | ... | ... |
-
Please register or sign in to post a comment