personal.vue 10.3 KB
<template>
  <div>
    <div class="mt30 mb60">
      <div class="box">
        <personal-step :active-step="activeStep"/>
        <div class="mt20"></div>
        <div>
          <el-card style="min-height: 50vh">
            <div class="pt30">
              <el-form class="d-form" size="large" :label-width="language==0?120:180"
                       style="max-width: 560px;margin: auto">
                <el-form-item :label="language==0?'WDSF卡号':'WDSF ID'" required>
                  <el-input type="text" v-model="form.card" @change="resetCode(0)" @blur="verifyCode">
                    <template #append>
                      <el-button type="primary" plain style="width: 110px" @click="checkCard">
                        <el-icon v-if="checkStatus" size="16" color="#67C23A"><CircleCheckFilled /></el-icon>
                        <span v-else>{{ language==0?'校验卡号':'Check Code' }}</span>
                      </el-button>
                    </template>
                  </el-input>
                </el-form-item>
                <div class="h30"></div>
                <div class="leftboderTT">{{ language == 0 ? '个人信息' : 'Personal information' }}
                  <span v-if="language==0">(登录时需要验证,保护账户信息)</span>
                  <span v-else>(Obtain automatically according to the WDSF number)</span>
                </div>
                <div class="h20"></div>
                <el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
                  <el-input v-model="form.xing" disabled/>
                </el-form-item>
                <el-form-item :label="language==0?'名':'name'" prop="ming" required>
                  <el-input v-model="form.ming" disabled/>
                </el-form-item>
                <el-form-item label="Representing" required>
                  <el-input v-model="form.Representing" disabled/>
                </el-form-item>
                <el-form-item label="Age group" required>
                  <el-input v-model="form.ageGroup" disabled/>
                </el-form-item>
                <el-form-item label="Division" required>
                  <el-input v-model="form.division" disabled/>
                </el-form-item>
                <el-form-item label="Status" required>
                  <el-input v-model="form.status" disabled/>
                </el-form-item>
                <div class="h30"></div>
                <div class="leftboderTT">
                  {{ language == 0 ? '补充信息' : 'Supplementary Information' }}
                 </div>
                <div class="h20"></div>
                <el-form-item :label="language==0?'性别':'Sex'" prop="sex" required>
                  <el-radio-group v-model="form.sex">
                    <el-radio label="0">{{ language==0?'女':'female' }}</el-radio>
                    <el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
                  </el-radio-group>
                </el-form-item>

                <el-form-item :label="language==0?'出生日期':'Birthday'" prop="birth" required>
                  <el-date-picker
                      v-model="form.birth"
                      style="width: 100%;"
                      type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
                  />
                </el-form-item>
                <el-form-item label="Passport number" required prop="idcCode">
                  <el-input  v-model="form.idcCode"/>
                </el-form-item>
                <el-form-item label="Passport File">
                  <file-upload :is-show-tip="false" :button-text="'Upload'"/>
                </el-form-item>


                <div class="h30"></div>
                <div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Login Information' }} <span
                    v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
                <div class="h20"></div>
                <el-form-item :label="language==0?'邮箱':'E-mail'" required>
                  <el-input type="text" v-model="form.account" @change="resetCode(1)"
                            @blur="verifyCode"/>
                  <div class="tip" v-if="language==0">
                    (请填写正确的邮箱信息,邮箱信息在注册完成后无法修改。
                    该邮箱后续会接收您报名审核、支付账单、比赛邀请函等。)
                  </div>
                  <div class="tip" v-else>
                    Please fill in a correct mailbox information, which cannot be modified after registration.
                    The mailbox will receive your registration review, payment of bills, competition invitation and so on.
                  </div>
                </el-form-item>
                <el-form-item :label="language==0?'验证码':'Code'" required>
                  <el-input v-model="form.code">
                    <template #append>
                      <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
                        <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
                          {{ totalSeconds }} {{ language==0?'秒':'s' }}
                        </count-down>
                        <span v-else>{{ language==0?'发送验证码':'Send code' }}</span>
                      </el-button>
                    </template>
                  </el-input>
                </el-form-item>

                <el-form-item :label="language==0?'密码':'Password'" required>
                  <el-input type="password" show-password v-model="form.password"
                            :placeholder="language==0?'6-16位密码。区分大小写':'Password'"/>
                </el-form-item>
                <el-form-item :label="language==0?'确认密码':'Confirm Password'" required>
                  <el-input type="password" show-password v-model="form.confirmPassword" @change="vconfirmPassword"
                            :placeholder="language==0?'再次输入密码':'Confirm Password'"/>
                  <div class="text-danger" v-if="showError">{{ language==0?'密码不一致':'Password inconsistency' }}</div>
                </el-form-item>
              </el-form>
            </div>
            <div class="text-center">
              <el-button class="primary-kx" round @click="goBack"> {{ language==0?'取消':'Cancel'}}</el-button>
              <el-button type="primary" class="btn-lineG w200px" round @click="next" v-if="matchId=='0'">
                {{ language==0?'立即注册':'Register Now' }}
              </el-button>
              <el-button type="primary" class="btn-lineG w200px" round @click="next" v-else>
                {{ language==0?'下一步':'Next' }}
              </el-button>
            </div>
          </el-card>
        </div>

        <Vcode :show="isShow" @success="codeSuccess()"></Vcode>
      </div>
    </div>
  </div>
</template>

<script setup>
import {ref,toRefs,reactive} from "vue"
import {onMounted} from "@vue/runtime-core";
import Step3 from "./team/step3"
import Vcode from "vue3-puzzle-vcode"
import { ElMessage } from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import cache from '@/plugins/cache'
import {checkWdsf, getCaptchaSms, registerSingle} from "@/apiPc/match";
import {setToken} from "@/utils/auth";
import PersonalStep from "@/viewsPc/register/components/personal-step";
import FileUpload from "@/components/FileUpload";
import {useRouter,useRoute} from "vue-router";
const language = ref(cache.local.get('language') || 0)
const router = useRouter()
const route = useRoute()
const data = reactive({
  isShow:false,
  isCodeTrue:0,
  counting:false,
  checkStatus:false,
  form:{
    sex:'0'
  },
  activeStep: 0,
  failVcode:'验证失败,请重试',
  successVcode:'验证通过!',
  sliderText: '拖动滑块完成拼图',
  showError: false
})
const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText,checkStatus,showError} = toRefs(data)
const matchId = ref('0')
onMounted(()=>{
  if(language.value==1){
    failVcode.value = 'Error!'
    successVcode.value = 'Success!'
    sliderText.value = 'Drag the slider to complete the puzzle'
  }
  matchId.value = route.query.matchId
})
function sendsmsMsg() {
  if(!form.value.account){
    if(language.value==0){
      ElMessage.error('请填写手机/邮箱')
    } else {
      ElMessage.error('Please fill in your phone/email address')
    }
    return
  }

  if(counting.value){
    return
  } else {
    isShow.value = true
  }
}
function checkCard() {
  if(!form.value.card){
    if(language.value==0){
      ElMessage.error('请填写WDSF卡号')
    } else {
      ElMessage.error('Please fill in your WDSF code')
    }
    return
  }
  isShow.value = true
}
function verifyCode() {
  if(!form.value.account){
    return
  }
  if(form.value.account.indexOf('@')>-1){
    //邮箱
  }
}
function codeSuccess(msg) {
  console.log('验证通过' + msg);
  isShow.value = false
  isCodeTrue.value += 1
  if(isCodeTrue.value==1){
    checkWdsf({card:form.value.card}).then(res=>{
      checkStatus.value = res.data
    })
  }
  if(isCodeTrue.value==2){
    counting.value = true
    getCaptchaSms({account:form.value.account}).then(res=>{

    })
  }

}
function resetCode(n) {
  isCodeTrue.value = n
}
function vconfirmPassword() {
  if(form.value.password != form.value.confirmPassword){
    showError.value = true
  } else {
    showError.value = false
  }
}
function goBack() {
  router.go(-1)
}
function next() {
  // registerSingle(form.value).then(res=>{
  //   setToken(res.data.token)
    if(matchId.value!='0'){
      router.push({
        name: 'chooseProject',
        params:{
          id: matchId.value
        },
        query: {
          matchId: matchId.value
        }
      })
    } else {
      router.push({
        name: 'matchDetail',
        params:{
          id: 0
        }
      })
    }
  // })
}
</script>

<style scoped lang="scss">
.tip{line-height: 1.6;font-size: 12px;margin-top: 6px;color: #666;}
.leftboderTT {
  color: var(--el-color-primary);
  font-size: 16px;
  font-weight: 600;

span {
  color: #929AA0;
  font-size: 14px;
}
}
.h20{height: 20px}
.h30{height: 30px}

.el-input-group__append{ flex: 1 1 auto;}
.el-input-group__append button.el-button, .el-input-group__append button.el-button:hover{
  color: var(--el-color-primary);
  background: #efefff;
  border: var(--el-color-primary) solid 1px;
  border-radius: 0;
}
</style>