倒计时修改
Showing
2 changed files
with
163 additions
and
125 deletions
| 1 | <template> | 1 | <template> |
| 2 | <el-dialog | 2 | <el-dialog |
| 3 | v-model="show" :title="title" append-to-body close-icon="CircleClose" center | 3 | v-model="show" :close-on-click-modal="false" :title="title" append-to-body center |
| 4 | :close-on-click-modal="false" class="pcloginpop" | 4 | class="pcloginpop" close-icon="CircleClose" |
| 5 | destroy-on-close | 5 | destroy-on-close |
| 6 | > | 6 | > |
| 7 | <div class="boxInvitation"> | 7 | <div class="boxInvitation"> |
| 8 | 8 | ||
| 9 | <div class="text-center pd20" v-if="showR"> | 9 | <div v-if="showR" class="text-center pd20"> |
| 10 | <img class="mauto" src="@/assets/dance/ok.png"/> | 10 | <img class="mauto" src="@/assets/dance/ok.png"/> |
| 11 | <!-- 提交成功等待审核--> | 11 | <!-- 提交成功等待审核--> |
| 12 | <h3 v-if="form.status"> | 12 | <h3 v-if="form.status"> |
| ... | @@ -19,15 +19,15 @@ | ... | @@ -19,15 +19,15 @@ |
| 19 | <br/> | 19 | <br/> |
| 20 | Thank you so much for your kind patience. | 20 | Thank you so much for your kind patience. |
| 21 | </h4> | 21 | </h4> |
| 22 | 22 | ||
| 23 | <div class="red">To check your application status, please go to Account > Personal > Visa Review Record, or | 23 | <div class="red">To check your application status, please go to Account > Personal > Visa Review Record, or |
| 24 | refer to your email for any updates. | 24 | refer to your email for any updates. |
| 25 | </div> | 25 | </div> |
| 26 | 26 | ||
| 27 | </div> | 27 | </div> |
| 28 | 28 | ||
| 29 | <el-form :model="form" :rules="rules" ref="iformRef" label-position="top" v-else> | 29 | <el-form v-else ref="iformRef" :model="form" :rules="rules" label-position="top"> |
| 30 | <el-form-item :label="language==0?'申请人类别':'Applicant Type'" required prop="applicatType"> | 30 | <el-form-item :label="language==0?'申请人类别':'Applicant Type'" prop="applicatType" required> |
| 31 | <el-select v-model="form.applicatType" @change="changeApplicatType"> | 31 | <el-select v-model="form.applicatType" @change="changeApplicatType"> |
| 32 | <el-option label="MNA/Team" value="1"/> | 32 | <el-option label="MNA/Team" value="1"/> |
| 33 | <el-option label="Technical Official" value="2"/> | 33 | <el-option label="Technical Official" value="2"/> |
| ... | @@ -35,35 +35,35 @@ | ... | @@ -35,35 +35,35 @@ |
| 35 | <!-- <el-option label="Supplier" value="4"/>--> | 35 | <!-- <el-option label="Supplier" value="4"/>--> |
| 36 | <el-option label="Other(not listed above)" value="5"/> | 36 | <el-option label="Other(not listed above)" value="5"/> |
| 37 | </el-select> | 37 | </el-select> |
| 38 | <el-input class="mt10" v-if="form.applicatType==5" placeholder="Please specify" v-model="form.remarks"/> | 38 | <el-input v-if="form.applicatType==5" v-model="form.remarks" class="mt10" placeholder="Please specify"/> |
| 39 | </el-form-item> | 39 | </el-form-item> |
| 40 | <el-form-item :label="language==0?'邀请函类别':'Invitation Type'" required prop="invitationType"> | 40 | <el-form-item :label="language==0?'邀请函类别':'Invitation Type'" prop="invitationType" required> |
| 41 | <el-select v-model="form.invitationType"> | 41 | <el-select v-model="form.invitationType"> |
| 42 | <el-option :label="language==0?'一般邀请函':'General Invitation'" value="1"/> | 42 | <el-option :label="language==0?'一般邀请函':'General Invitation'" value="1"/> |
| 43 | <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU Invitation'" value="2"/> | 43 | <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU Invitation'" value="2"/> |
| 44 | </el-select> | 44 | </el-select> |
| 45 | </el-form-item> | 45 | </el-form-item> |
| 46 | <el-form-item v-if="form.invitationType=='2'" label="Proof of Employment" required prop="invitationFileArr"> | 46 | <el-form-item v-if="form.invitationType=='2'" label="Proof of Employment" prop="invitationFileArr" required> |
| 47 | <div class="red">Proof of employment is required for TE/PU invitation letters.</div> | 47 | <div class="red">Proof of employment is required for TE/PU invitation letters.</div> |
| 48 | <div class="red"> | 48 | <div class="red"> |
| 49 | This document must be issued by the invitee's association and must bear an official stamp or signature. | 49 | This document must be issued by the invitee's association and must bear an official stamp or signature. |
| 50 | </div> | 50 | </div> |
| 51 | <br/> | 51 | <br/> |
| 52 | <file-upload v-model="form.invitationFileArr" :is-show-tip="false" :limit="1" | 52 | <file-upload v-model="form.invitationFileArr" :button-text="language==0?'上传':'Upload'" :is-show-tip="false" |
| 53 | :button-text="language==0?'上传':'Upload'"></file-upload> | 53 | :limit="1"></file-upload> |
| 54 | </el-form-item> | 54 | </el-form-item> |
| 55 | <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" required | 55 | <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" prop="chinese" |
| 56 | prop="chinese"> | 56 | required> |
| 57 | <el-radio-group v-model="form.chinese"> | 57 | <el-radio-group v-model="form.chinese"> |
| 58 | <el-radio :value="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio> | 58 | <el-radio :value="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio> |
| 59 | <el-radio :value="0">{{ language == 0 ? '否' : 'No' }}</el-radio> | 59 | <el-radio :value="0">{{ language == 0 ? '否' : 'No' }}</el-radio> |
| 60 | </el-radio-group> | 60 | </el-radio-group> |
| 61 | </el-form-item> | 61 | </el-form-item> |
| 62 | 62 | ||
| 63 | <!-- 一般信息--> | 63 | <!-- 一般信息--> |
| 64 | <el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" :required="form.applicatType==1" | 64 | <el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" :required="form.applicatType==1" |
| 65 | prop="associationCode"> | 65 | prop="associationCode"> |
| 66 | <el-select v-model="form.associationCode" filterable clearable> | 66 | <el-select v-model="form.associationCode" clearable filterable> |
| 67 | <el-option v-for="item in mnaList" :key="item.code" :label="language==0?item.nameCn:item.nameEn" | 67 | <el-option v-for="item in mnaList" :key="item.code" :label="language==0?item.nameCn:item.nameEn" |
| 68 | :value="item.code"/> | 68 | :value="item.code"/> |
| 69 | </el-select> | 69 | </el-select> |
| ... | @@ -72,12 +72,12 @@ | ... | @@ -72,12 +72,12 @@ |
| 72 | prop="associationAddress"> | 72 | prop="associationAddress"> |
| 73 | <el-input v-model="form.associationAddress"/> | 73 | <el-input v-model="form.associationAddress"/> |
| 74 | </el-form-item> | 74 | </el-form-item> |
| 75 | <el-form-item :label="language==0?'邮箱':'Contact Email'" required prop="email"> | 75 | <el-form-item :label="language==0?'邮箱':'Contact Email'" prop="email" required> |
| 76 | <div class="red">Note: Notifications from the organizing committee will be sent to this email address. | 76 | <div class="red">Note: Notifications from the organizing committee will be sent to this email address. |
| 77 | </div> | 77 | </div> |
| 78 | <el-input v-model="form.email" type="email"> | 78 | <el-input v-model="form.email" type="email"> |
| 79 | <template #append> | 79 | <template #append> |
| 80 | <el-button @click="sendEmail" v-loading="codeloading"> | 80 | <el-button v-loading="codeloading" class="codeBtn" @click="sendEmail"> |
| 81 | {{ language == 0 ? '发送验证码' : 'Send Code' }} | 81 | {{ language == 0 ? '发送验证码' : 'Send Code' }} |
| 82 | </el-button> | 82 | </el-button> |
| 83 | </template> | 83 | </template> |
| ... | @@ -85,32 +85,32 @@ | ... | @@ -85,32 +85,32 @@ |
| 85 | <!-- <div class="tip"></div>--> | 85 | <!-- <div class="tip"></div>--> |
| 86 | </el-form-item> | 86 | </el-form-item> |
| 87 | <el-form-item prop="code" required> | 87 | <el-form-item prop="code" required> |
| 88 | <el-input placeholder="Email verification code" v-model="form.code"/> | 88 | <el-input v-model="form.code" placeholder="Email verification code"/> |
| 89 | </el-form-item> | 89 | </el-form-item> |
| 90 | <el-form-item :label="language==0?'姓名':'Full Name'" required prop="fullName"> | 90 | <el-form-item :label="language==0?'姓名':'Full Name'" prop="fullName" required> |
| 91 | <el-input v-model="form.fullName"/> | 91 | <el-input v-model="form.fullName"/> |
| 92 | </el-form-item> | 92 | </el-form-item> |
| 93 | <el-form-item :label="language==0?'联系人职位':'Position'" required prop="position"> | 93 | <el-form-item :label="language==0?'联系人职位':'Position'" prop="position" required> |
| 94 | <el-select v-model="form.position"> | 94 | <el-select v-model="form.position"> |
| 95 | <el-option label="Manager" value="0"/> | 95 | <el-option label="Manager" value="0"/> |
| 96 | <el-option label="Team leader" value="1"/> | 96 | <el-option label="Team leader" value="1"/> |
| 97 | <el-option label="Coach" value="2"/> | 97 | <el-option label="Coach" value="2"/> |
| 98 | <el-option label="Other" value="3"/> | 98 | <el-option label="Other" value="3"/> |
| 99 | </el-select> | 99 | </el-select> |
| 100 | <el-input v-if="form.position==3" class="mt10" placeholder="Please specify" v-model="form.remarks1"/> | 100 | <el-input v-if="form.position==3" v-model="form.remarks1" class="mt10" placeholder="Please specify"/> |
| 101 | </el-form-item> | 101 | </el-form-item> |
| 102 | <el-form-item :label="language==0?'联系电话':'Phone'" required prop="phone"> | 102 | <el-form-item :label="language==0?'联系电话':'Phone'" prop="phone" required> |
| 103 | <el-input v-model="form.phone"/> | 103 | <el-input v-model="form.phone"/> |
| 104 | </el-form-item> | 104 | </el-form-item> |
| 105 | <el-form-item :label="language==0?'签证办理中国大使馆':'Chinese Embassy Visas Office'" required prop="embassy"> | 105 | <el-form-item :label="language==0?'签证办理中国大使馆':'Chinese Embassy Visas Office'" prop="embassy" required> |
| 106 | <div class="red">Ex:EMBASSY OF THE PEOPLE'S REPUBLIC OFCHINA IN THE ISLAMIC REPUBLIC OF PAKISTAN | 106 | <div class="red">Ex:EMBASSY OF THE PEOPLE'S REPUBLIC OFCHINA IN THE ISLAMIC REPUBLIC OF PAKISTAN |
| 107 | </div> | 107 | </div> |
| 108 | <el-input v-model="form.embassy"/> | 108 | <el-input v-model="form.embassy"/> |
| 109 | </el-form-item> | 109 | </el-form-item> |
| 110 | <el-form-item :label="language==0?'中国大使馆邮箱':'Chinese Embassy Email'" required prop="embassyEmail"> | 110 | <el-form-item :label="language==0?'中国大使馆邮箱':'Chinese Embassy Email'" prop="embassyEmail" required> |
| 111 | <el-input v-model="form.embassyEmail"/> | 111 | <el-input v-model="form.embassyEmail"/> |
| 112 | </el-form-item> | 112 | </el-form-item> |
| 113 | 113 | ||
| 114 | <!--上传护照,多张--> | 114 | <!--上传护照,多张--> |
| 115 | <div class="cptVisaInfoBosTable"> | 115 | <div class="cptVisaInfoBosTable"> |
| 116 | <el-form-item :label="language==0?'有效证件':'Passport Copy'" required> | 116 | <el-form-item :label="language==0?'有效证件':'Passport Copy'" required> |
| ... | @@ -123,28 +123,30 @@ | ... | @@ -123,28 +123,30 @@ |
| 123 | </div> | 123 | </div> |
| 124 | <div class="red">You may upload multiple passports at once to appy for multiple applicants. | 124 | <div class="red">You may upload multiple passports at once to appy for multiple applicants. |
| 125 | </div> | 125 | </div> |
| 126 | <ImageUpload v-model="form.passportCopy" :is-show-tip="false" :limit="20" | 126 | <ImageUpload v-model="form.passportCopy" :action="'/league/visa/getPersonInfoFromCert/3' " |
| 127 | :action="'/league/visa/getPersonInfoFromCert/3' " | 127 | :button-text="language==0?'上传':'Upload'" |
| 128 | paramName="pic" list-type="text" :show-file-list="false" | 128 | :is-show-tip="false" |
| 129 | :button-text="language==0?'上传':'Upload'" @response="getPassportInfo" | 129 | :limit="20" :show-file-list="false" list-type="text" |
| 130 | paramName="pic" @response="getPassportInfo" | ||
| 130 | /> | 131 | /> |
| 131 | </div> | 132 | </div> |
| 132 | </el-form-item> | 133 | </el-form-item> |
| 133 | <!--识别信息--> | 134 | <!--识别信息--> |
| 134 | <div v-if="form.cptVisaInfoBos?.length>0" class="border"> | 135 | <div v-if="form.cptVisaInfoBos?.length>0" class="border"> |
| 135 | <el-table :data="form.cptVisaInfoBos" border size="small"> | 136 | <el-table :data="form.cptVisaInfoBos" border size="small"> |
| 136 | <el-table-column prop="passportCopy" :label="language==0?'护照':'Passport Copy'" min-width="100"> | 137 | <el-table-column :label="language==0?'护照':'Passport Copy'" min-width="100" prop="passportCopy"> |
| 137 | <template #header> | 138 | <template #header> |
| 138 | <div class="esp"> | 139 | <div class="esp"> |
| 139 | <span class="red">*</span>Passport Copy | 140 | <span class="red">*</span>Passport Copy |
| 140 | </div> | 141 | </div> |
| 141 | </template> | 142 | </template> |
| 142 | <template #default="scope"> | 143 | <template #default="scope"> |
| 143 | <el-image style="width: 60px;z-index: 999;" :src="fillImgUrl(scope.row.passportCopy)" | 144 | <el-image :preview-src-list="[fillImgUrl(scope.row.passportCopy)]" |
| 144 | :preview-src-list="[fillImgUrl(scope.row.passportCopy)]" preview-teleported/> | 145 | :src="fillImgUrl(scope.row.passportCopy)" |
| 146 | preview-teleported style="width: 60px;z-index: 999;"/> | ||
| 145 | </template> | 147 | </template> |
| 146 | </el-table-column> | 148 | </el-table-column> |
| 147 | <el-table-column prop="position" :label="'position'" min-width="100"> | 149 | <el-table-column :label="'position'" min-width="100" prop="position"> |
| 148 | <template #header> | 150 | <template #header> |
| 149 | <div class="esp"> | 151 | <div class="esp"> |
| 150 | <span class="red">*</span>Position | 152 | <span class="red">*</span>Position |
| ... | @@ -180,11 +182,11 @@ | ... | @@ -180,11 +182,11 @@ |
| 180 | </template> | 182 | </template> |
| 181 | <el-option label="Other (please specify)" value="other"/> | 183 | <el-option label="Other (please specify)" value="other"/> |
| 182 | </el-select> | 184 | </el-select> |
| 183 | <el-input v-if="scope.row.position=='other'" placeholder="Please specify" v-model="scope.row.remarks" | 185 | <el-input v-if="scope.row.position=='other'" v-model="scope.row.remarks" placeholder="Please specify" |
| 184 | size="small"></el-input> | 186 | size="small"></el-input> |
| 185 | </template> | 187 | </template> |
| 186 | </el-table-column> | 188 | </el-table-column> |
| 187 | <el-table-column prop="lastName" :label="'lastName'" min-width="100"> | 189 | <el-table-column :label="'lastName'" min-width="100" prop="lastName"> |
| 188 | <template #header> | 190 | <template #header> |
| 189 | <div class="esp"> | 191 | <div class="esp"> |
| 190 | <span class="red">*</span>LastName | 192 | <span class="red">*</span>LastName |
| ... | @@ -194,7 +196,7 @@ | ... | @@ -194,7 +196,7 @@ |
| 194 | <el-input v-model="scope.row.lastName" size="small"/> | 196 | <el-input v-model="scope.row.lastName" size="small"/> |
| 195 | </template> | 197 | </template> |
| 196 | </el-table-column> | 198 | </el-table-column> |
| 197 | <el-table-column prop="fristName" :label="'firstName'" min-width="100"> | 199 | <el-table-column :label="'firstName'" min-width="100" prop="fristName"> |
| 198 | <template #header> | 200 | <template #header> |
| 199 | <div class="esp"> | 201 | <div class="esp"> |
| 200 | <span class="red">*</span>firstName | 202 | <span class="red">*</span>firstName |
| ... | @@ -204,7 +206,7 @@ | ... | @@ -204,7 +206,7 @@ |
| 204 | <el-input v-model="scope.row.fristName" size="small"/> | 206 | <el-input v-model="scope.row.fristName" size="small"/> |
| 205 | </template> | 207 | </template> |
| 206 | </el-table-column> | 208 | </el-table-column> |
| 207 | <el-table-column prop="sex" :label="language==0?'性别':'Gender'" width="70"> | 209 | <el-table-column :label="language==0?'性别':'Gender'" prop="sex" width="70"> |
| 208 | <template #header> | 210 | <template #header> |
| 209 | <div class="esp"> | 211 | <div class="esp"> |
| 210 | <span class="red">*</span>Gender | 212 | <span class="red">*</span>Gender |
| ... | @@ -217,34 +219,34 @@ | ... | @@ -217,34 +219,34 @@ |
| 217 | </el-select> | 219 | </el-select> |
| 218 | </template> | 220 | </template> |
| 219 | </el-table-column> | 221 | </el-table-column> |
| 220 | <el-table-column prop="nationality" :label="language==0?'国籍':'Nationality'" width="110px"> | 222 | <el-table-column :label="language==0?'国籍':'Nationality'" prop="nationality" width="110px"> |
| 221 | <template #header> | 223 | <template #header> |
| 222 | <div class="esp"> | 224 | <div class="esp"> |
| 223 | <span class="red">*</span>Nationality | 225 | <span class="red">*</span>Nationality |
| 224 | </div> | 226 | </div> |
| 225 | </template> | 227 | </template> |
| 226 | <template #default="scope"> | 228 | <template #default="scope"> |
| 227 | <el-select v-model="scope.row.nationality" size="small" filterable> | 229 | <el-select v-model="scope.row.nationality" filterable size="small"> |
| 228 | <el-option v-for="item in countrys" :key="item.id" :label="item.noc" | 230 | <el-option v-for="item in countrys" :key="item.id" :label="item.noc" |
| 229 | :value="item.id"/> | 231 | :value="item.id"/> |
| 230 | </el-select> | 232 | </el-select> |
| 231 | </template> | 233 | </template> |
| 232 | </el-table-column> | 234 | </el-table-column> |
| 233 | <el-table-column prop="birth" :label="language==0?'出生日期':'Birth'" width="130px"> | 235 | <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="130px"> |
| 234 | <template #header> | 236 | <template #header> |
| 235 | <div class="esp"> | 237 | <div class="esp"> |
| 236 | <span class="red">*</span>Birth | 238 | <span class="red">*</span>Birth |
| 237 | </div> | 239 | </div> |
| 238 | </template> | 240 | </template> |
| 239 | <template #default="scope"> | 241 | <template #default="scope"> |
| 240 | <el-date-picker size="small" | 242 | <el-date-picker v-model="scope.row.birthday" |
| 241 | v-model="scope.row.birthday" | 243 | format="YYYY-MM-DD" |
| 242 | style="width: 100%;" placeholder="YYYY-MM-DD" | 244 | placeholder="YYYY-MM-DD" size="small" |
| 243 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 245 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 244 | /> | 246 | /> |
| 245 | </template> | 247 | </template> |
| 246 | </el-table-column> | 248 | </el-table-column> |
| 247 | <el-table-column prop="passportNo" :label="language==0?'护照号':'Passport No.'" width="110px"> | 249 | <el-table-column :label="language==0?'护照号':'Passport No.'" prop="passportNo" width="110px"> |
| 248 | <template #header> | 250 | <template #header> |
| 249 | <div class="esp"> | 251 | <div class="esp"> |
| 250 | <span class="red">*</span>Passport No. | 252 | <span class="red">*</span>Passport No. |
| ... | @@ -254,7 +256,7 @@ | ... | @@ -254,7 +256,7 @@ |
| 254 | <el-input v-model="scope.row.passportNo" size="small"/> | 256 | <el-input v-model="scope.row.passportNo" size="small"/> |
| 255 | </template> | 257 | </template> |
| 256 | </el-table-column> | 258 | </el-table-column> |
| 257 | <el-table-column prop="expiryDate" :label="language==0?'护照签发日':'DATE OF ISSUE'" width="130px"> | 259 | <el-table-column :label="language==0?'护照签发日':'DATE OF ISSUE'" prop="expiryDate" width="130px"> |
| 258 | <template #header> | 260 | <template #header> |
| 259 | <div class="esp"> | 261 | <div class="esp"> |
| 260 | <span class="red">*</span>DATE OF ISSUE | 262 | <span class="red">*</span>DATE OF ISSUE |
| ... | @@ -262,13 +264,13 @@ | ... | @@ -262,13 +264,13 @@ |
| 262 | </template> | 264 | </template> |
| 263 | <template #default="scope"> | 265 | <template #default="scope"> |
| 264 | <el-date-picker | 266 | <el-date-picker |
| 265 | v-model="scope.row.issueDate" size="small" | 267 | v-model="scope.row.issueDate" format="YYYY-MM-DD" |
| 266 | style="width: 100%;" placeholder="YYYY-MM-DD" | 268 | placeholder="YYYY-MM-DD" size="small" |
| 267 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 269 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 268 | /> | 270 | /> |
| 269 | </template> | 271 | </template> |
| 270 | </el-table-column> | 272 | </el-table-column> |
| 271 | <el-table-column prop="arrival" :label="language==0?'护照过期日':'DATE OF EXPIRY'" width="130px"> | 273 | <el-table-column :label="language==0?'护照过期日':'DATE OF EXPIRY'" prop="arrival" width="130px"> |
| 272 | <template #header> | 274 | <template #header> |
| 273 | <div class="esp"> | 275 | <div class="esp"> |
| 274 | <span class="red">*</span>DATE OF EXPIRY | 276 | <span class="red">*</span>DATE OF EXPIRY |
| ... | @@ -276,15 +278,15 @@ | ... | @@ -276,15 +278,15 @@ |
| 276 | </template> | 278 | </template> |
| 277 | <template #default="scope"> | 279 | <template #default="scope"> |
| 278 | <el-date-picker | 280 | <el-date-picker |
| 279 | v-model="scope.row.expiryDate" size="small" | 281 | v-model="scope.row.expiryDate" format="YYYY-MM-DD" |
| 280 | style="width: 100%;" placeholder="YYYY-MM-DD" | 282 | placeholder="YYYY-MM-DD" size="small" |
| 281 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 283 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 282 | /> | 284 | /> |
| 283 | </template> | 285 | </template> |
| 284 | </el-table-column> | 286 | </el-table-column> |
| 285 | <el-table-column label="Actions" fixed="right"> | 287 | <el-table-column fixed="right" label="Actions"> |
| 286 | <template #default="scope"> | 288 | <template #default="scope"> |
| 287 | <el-button type="danger" size="small" @click="delPassportInfo(scope.$index)" icon="delete"/> | 289 | <el-button icon="delete" size="small" type="danger" @click="delPassportInfo(scope.$index)"/> |
| 288 | </template> | 290 | </template> |
| 289 | </el-table-column> | 291 | </el-table-column> |
| 290 | </el-table> | 292 | </el-table> |
| ... | @@ -292,13 +294,13 @@ | ... | @@ -292,13 +294,13 @@ |
| 292 | </div> | 294 | </div> |
| 293 | <!-- 补充材料--> | 295 | <!-- 补充材料--> |
| 294 | <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files"> | 296 | <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files"> |
| 295 | <file-upload v-model="form.files" :limit="1" :is-show-tip="false" | 297 | <file-upload v-model="form.files" :button-text="language==0?'上传':'Upload'" :is-show-tip="false" |
| 296 | :button-text="language==0?'上传':'Upload'"/> | 298 | :limit="1"/> |
| 297 | </el-form-item> | 299 | </el-form-item> |
| 298 | 300 | ||
| 299 | 301 | ||
| 300 | <div class="text-center"> | 302 | <div class="text-center"> |
| 301 | <el-button type="primary" size="large" :disabled="!cptId" @click="submit" round class="btn-lineG"> | 303 | <el-button :disabled="!cptId" class="btn-lineG" round size="large" type="primary" @click="submit"> |
| 302 | {{ language == 0 ? '提交' : 'SUBMIT' }} | 304 | {{ language == 0 ? '提交' : 'SUBMIT' }} |
| 303 | </el-button> | 305 | </el-button> |
| 304 | </div> | 306 | </div> |
| ... | @@ -334,16 +336,16 @@ const countrys = ref([]) | ... | @@ -334,16 +336,16 @@ const countrys = ref([]) |
| 334 | const mnaList = ref([]) | 336 | const mnaList = ref([]) |
| 335 | const cptId = ref('') | 337 | const cptId = ref('') |
| 336 | const rules = ref( | 338 | const rules = ref( |
| 337 | { | 339 | { |
| 338 | nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 340 | nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], |
| 339 | name: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | 341 | name: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], |
| 340 | email: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | 342 | email: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], |
| 341 | birth: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 343 | birth: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], |
| 342 | passportNo: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | 344 | passportNo: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], |
| 343 | passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},], | 345 | passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},], |
| 344 | arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 346 | arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], |
| 345 | departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 347 | departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], |
| 346 | }) | 348 | }) |
| 347 | const open = (params) => { | 349 | const open = (params) => { |
| 348 | show.value = true | 350 | show.value = true |
| 349 | title.value = params.title | 351 | title.value = params.title |
| ... | @@ -351,7 +353,7 @@ const open = (params) => { | ... | @@ -351,7 +353,7 @@ const open = (params) => { |
| 351 | if (!cptId.value) { | 353 | if (!cptId.value) { |
| 352 | proxy.$modal.msgError('参数有误'); | 354 | proxy.$modal.msgError('参数有误'); |
| 353 | } | 355 | } |
| 354 | 356 | ||
| 355 | form.value.userId = user.userId | 357 | form.value.userId = user.userId |
| 356 | form.value.cptId = params.cptId | 358 | form.value.cptId = params.cptId |
| 357 | getCountryList() | 359 | getCountryList() |
| ... | @@ -410,23 +412,23 @@ const submit = () => { | ... | @@ -410,23 +412,23 @@ const submit = () => { |
| 410 | return; | 412 | return; |
| 411 | } | 413 | } |
| 412 | } | 414 | } |
| 413 | 415 | ||
| 414 | if (form.value.files && Array.isArray(form.value.files)) { | 416 | if (form.value.files && Array.isArray(form.value.files)) { |
| 415 | form.value.files = form.value.files[0]?.url | 417 | form.value.files = form.value.files[0]?.url |
| 416 | } | 418 | } |
| 417 | if (form.value.invitationFileArr) { | 419 | if (form.value.invitationFileArr) { |
| 418 | form.value.invitationFile = JSON.stringify(form.value.invitationFileArr) | 420 | form.value.invitationFile = JSON.stringify(form.value.invitationFileArr) |
| 419 | } | 421 | } |
| 420 | 422 | ||
| 421 | proxy.$refs.iformRef.validate(valid => { | 423 | proxy.$refs.iformRef.validate(valid => { |
| 422 | if (valid) { | 424 | if (valid) { |
| 423 | ElMessageBox.confirm( | 425 | ElMessageBox.confirm( |
| 424 | language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it', | 426 | language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it', |
| 425 | language.value == 0 ? '提示' : 'Tips', { | 427 | language.value == 0 ? '提示' : 'Tips', { |
| 426 | confirmButtonText: language.value == 0 ? '确定' : 'Confirm', | 428 | confirmButtonText: language.value == 0 ? '确定' : 'Confirm', |
| 427 | cancelButtonText: language.value == 0 ? '取消' : 'Cancel', | 429 | cancelButtonText: language.value == 0 ? '取消' : 'Cancel', |
| 428 | type: 'warning' | 430 | type: 'warning' |
| 429 | }).then(() => { | 431 | }).then(() => { |
| 430 | form.value.cptId = cptId.value | 432 | form.value.cptId = cptId.value |
| 431 | addInvitation(form.value).then((res) => { | 433 | addInvitation(form.value).then((res) => { |
| 432 | if (res.data == -200) { | 434 | if (res.data == -200) { |
| ... | @@ -457,9 +459,9 @@ const getPassportInfo = (res) => { | ... | @@ -457,9 +459,9 @@ const getPassportInfo = (res) => { |
| 457 | } | 459 | } |
| 458 | form.value.cptVisaInfoBos.push(obj) | 460 | form.value.cptVisaInfoBos.push(obj) |
| 459 | } else { | 461 | } else { |
| 460 | if(res.data) { | 462 | if (res.data) { |
| 461 | ElMessage.error(res.data.code) | 463 | ElMessage.error(res.data.code) |
| 462 | 464 | ||
| 463 | let obj = { | 465 | let obj = { |
| 464 | position: '', | 466 | position: '', |
| 465 | lastName: '', | 467 | lastName: '', |
| ... | @@ -473,7 +475,7 @@ const getPassportInfo = (res) => { | ... | @@ -473,7 +475,7 @@ const getPassportInfo = (res) => { |
| 473 | passportCopy: res.data.pic | 475 | passportCopy: res.data.pic |
| 474 | } | 476 | } |
| 475 | form.value.cptVisaInfoBos.push(obj) | 477 | form.value.cptVisaInfoBos.push(obj) |
| 476 | }else{ | 478 | } else { |
| 477 | ElMessage.error(res.msg) | 479 | ElMessage.error(res.msg) |
| 478 | } | 480 | } |
| 479 | } | 481 | } |
| ... | @@ -511,7 +513,7 @@ function changeApplicatType() { | ... | @@ -511,7 +513,7 @@ function changeApplicatType() { |
| 511 | 513 | ||
| 512 | </script> | 514 | </script> |
| 513 | 515 | ||
| 514 | <style scoped lang="scss"> | 516 | <style lang="scss" scoped> |
| 515 | .red { | 517 | .red { |
| 516 | color: red !important; | 518 | color: red !important; |
| 517 | } | 519 | } |
| ... | @@ -538,7 +540,7 @@ h4 { | ... | @@ -538,7 +540,7 @@ h4 { |
| 538 | padding: 10px; | 540 | padding: 10px; |
| 539 | margin-bottom: 20px; | 541 | margin-bottom: 20px; |
| 540 | border: 1px dashed #ebeef5; | 542 | border: 1px dashed #ebeef5; |
| 541 | 543 | ||
| 542 | :deep(.el-table .el-table__header-wrapper th) { | 544 | :deep(.el-table .el-table__header-wrapper th) { |
| 543 | font-size: 12px; | 545 | font-size: 12px; |
| 544 | } | 546 | } |
| ... | @@ -548,4 +550,10 @@ h4 { | ... | @@ -548,4 +550,10 @@ h4 { |
| 548 | flex-wrap: wrap; | 550 | flex-wrap: wrap; |
| 549 | display: block; | 551 | display: block; |
| 550 | } | 552 | } |
| 553 | |||
| 554 | .codeBtn { | ||
| 555 | background-color: #0540EC !important; | ||
| 556 | color: #fff !important; | ||
| 557 | |||
| 558 | } | ||
| 551 | </style> | 559 | </style> | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <el-dialog v-model="show" :title="language==0?'注册':'Login'" close-icon="CircleClose" | 2 | <el-dialog v-model="show" :append-to-body="true" :title="language==0?'注册':'Login'" |
| 3 | width="480" :append-to-body="true" destroy-on-close @close="close" center> | 3 | center close-icon="CircleClose" destroy-on-close width="480" @close="close"> |
| 4 | <div> | 4 | <div> |
| 5 | <el-form class="d-form" size="large" :label-width="language==0?80:150" :label-position="language==0?'right':'top'" style="max-width: 500px;margin: auto"> | 5 | <el-form :label-position="language==0?'right':'top'" :label-width="language==0?80:150" class="d-form" size="large" |
| 6 | <!-- <div style="display: flex;gap: 20px;">--> | 6 | style="max-width: 500px;margin: auto"> |
| 7 | <el-form-item :label="language==0?'姓':'Last Name'" required style="width: 100%;"> | 7 | <!-- <div style="display: flex;gap: 20px;">--> |
| 8 | <el-input type="text" v-model="form.lastName" :placeholder="language==0?'请输入您的姓':'Please enter your last name'"/> | 8 | <el-form-item :label="language==0?'姓':'Last Name'" required style="width: 100%;"> |
| 9 | </el-form-item> | 9 | <el-input v-model="form.lastName" :placeholder="language==0?'请输入您的姓':'Please enter your last name'" |
| 10 | <el-form-item :label="language==0?'名':'First Name'" required style="width: 100%;"> | 10 | type="text"/> |
| 11 | <el-input type="text" v-model="form.firstName" :placeholder="language==0?'请输入您的名':'Please enter your first name'"/> | 11 | </el-form-item> |
| 12 | </el-form-item> | 12 | <el-form-item :label="language==0?'名':'First Name'" required style="width: 100%;"> |
| 13 | <!-- </div>--> | 13 | <el-input v-model="form.firstName" :placeholder="language==0?'请输入您的名':'Please enter your first name'" |
| 14 | type="text"/> | ||
| 15 | </el-form-item> | ||
| 16 | <!-- </div>--> | ||
| 14 | <el-form-item :label="language==0?'邮箱':'E-mail'" required> | 17 | <el-form-item :label="language==0?'邮箱':'E-mail'" required> |
| 15 | <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode" | 18 | <el-input v-model="form.account" type="text" @blur="verifyCode" @change="resetCode" |
| 16 | /> | 19 | /> |
| 17 | <div class="tip" v-if="language==0"> | 20 | <div v-if="language==0" class="tip"> |
| 18 | (请填写正确的邮箱信息,邮箱信息在注册完成后无法修改。 | 21 | (请填写正确的邮箱信息,邮箱信息在注册完成后无法修改。 |
| 19 | 该邮箱后续会作为您登录的账户, | 22 | 该邮箱后续会作为您登录的账户, |
| 20 | 并接收报名审核结果、支付账单、签证邀请函等相关信息。) | 23 | 并接收报名审核结果、支付账单、签证邀请函等相关信息。) |
| 21 | </div> | 24 | </div> |
| 22 | <div v-else class="tip"> | 25 | <div v-else class="tip"> |
| 23 | 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. | 26 | Please fill in the correct email, which cannot be changed after the registration is completed. The email |
| 27 | will be used as your login account and to receive relevant information including results of registration | ||
| 28 | review, payment bills, visa invitation letters, etc. | ||
| 24 | </div> | 29 | </div> |
| 25 | </el-form-item> | 30 | </el-form-item> |
| 26 | <el-form-item :label="language==0?'验证码':'Code'" required> | 31 | <el-form-item :label="language==0?'验证码':'Code'" required> |
| 27 | <el-input v-model="form.code"> | 32 | <el-input v-model="form.code"> |
| 28 | <template #append> | 33 | <template #append> |
| 29 | <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg"> | 34 | <el-button class="codeBtn" plain style="width: 110px" type="primary" @click="sendsmsMsg"> |
| 30 | <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false"> | 35 | <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false"> |
| 31 | {{ totalSeconds }} {{ language == 0 ? '秒' : 's' }} | 36 | {{ totalSeconds }} {{ language == 0 ? '秒' : 's' }} |
| 32 | </count-down> | 37 | </count-down> |
| ... | @@ -36,8 +41,8 @@ | ... | @@ -36,8 +41,8 @@ |
| 36 | </el-button> | 41 | </el-button> |
| 37 | </template> | 42 | </template> |
| 38 | </el-input> | 43 | </el-input> |
| 39 | <div class="vcodeBox" :style="isShow?'height:240px':'height:0'"> | 44 | <div :style="isShow?'height:240px':'height:0'" class="vcodeBox"> |
| 40 | <Vcode :show="isShow" :successText="successVcode" :failText="failVcode" :slider-text="sliderText" | 45 | <Vcode :failText="failVcode" :show="isShow" :slider-text="sliderText" :successText="successVcode" |
| 41 | type="inside" @success="codeSuccess"></Vcode> | 46 | type="inside" @success="codeSuccess"></Vcode> |
| 42 | </div> | 47 | </div> |
| 43 | </el-form-item> | 48 | </el-form-item> |
| ... | @@ -48,22 +53,24 @@ | ... | @@ -48,22 +53,24 @@ |
| 48 | </el-option> | 53 | </el-option> |
| 49 | </el-select> | 54 | </el-select> |
| 50 | </el-form-item> | 55 | </el-form-item> |
| 51 | 56 | ||
| 52 | <el-form-item :label="language==0?'密码':'Password'" required> | 57 | <el-form-item :label="language==0?'密码':'Password'" required> |
| 53 | <el-input type="password" show-password v-model="form.password" | 58 | <el-input v-model="form.password" :placeholder="language==0?'6-16位密码。区分大小写':''" show-password |
| 54 | :placeholder="language==0?'6-16位密码。区分大小写':''"/> | 59 | type="password"/> |
| 55 | </el-form-item> | 60 | </el-form-item> |
| 56 | <el-form-item :label="language==0?'确认密码':'Confirm Password'" required> | 61 | <el-form-item :label="language==0?'确认密码':'Confirm Password'" required> |
| 57 | <el-input type="password" show-password v-model="form.password2" @blur="vconfirmPassword" | 62 | <el-input v-model="form.password2" :placeholder="language==0?'再次输入密码':''" show-password type="password" |
| 58 | :placeholder="language==0?'再次输入密码':''"/> | 63 | @blur="vconfirmPassword"/> |
| 59 | </el-form-item> | 64 | </el-form-item> |
| 60 | </el-form> | 65 | </el-form> |
| 61 | 66 | ||
| 62 | </div> | 67 | </div> |
| 63 | <template #footer> | 68 | <template #footer> |
| 64 | <div class="dialog-footer text-center"> | 69 | <div class="dialog-footer text-center"> |
| 65 | <a class="btn-black w200px" @click="register">{{language==0?'登录':'Confirm'}}</a> | 70 | <a class="btn-black w200px" @click="register">{{ language == 0 ? '登录' : 'Confirm' }}</a> |
| 66 | <div class="text-primary underline mt20 pointer" @click="goLogin">{{language==0?'已有账号去登录':'Already have an account? Login'}}</div> | 71 | <div class="text-primary underline mt20 pointer" @click="goLogin"> |
| 72 | {{ language == 0 ? '已有账号去登录' : 'Already have an account? Login' }} | ||
| 73 | </div> | ||
| 67 | </div> | 74 | </div> |
| 68 | </template> | 75 | </template> |
| 69 | </el-dialog> | 76 | </el-dialog> |
| ... | @@ -92,10 +99,21 @@ const data = reactive({ | ... | @@ -92,10 +99,21 @@ const data = reactive({ |
| 92 | failVcode: '验证失败,请重试', | 99 | failVcode: '验证失败,请重试', |
| 93 | successVcode: '验证通过!', | 100 | successVcode: '验证通过!', |
| 94 | sliderText: '拖动滑块完成拼图', | 101 | sliderText: '拖动滑块完成拼图', |
| 95 | show:false, | 102 | show: false, |
| 96 | associationList:[] | 103 | associationList: [] |
| 97 | }) | 104 | }) |
| 98 | const {isShow, isCodeTrue, counting, form, activeStep, failVcode, successVcode, sliderText,show,associationList} = toRefs(data) | 105 | const { |
| 106 | isShow, | ||
| 107 | isCodeTrue, | ||
| 108 | counting, | ||
| 109 | form, | ||
| 110 | activeStep, | ||
| 111 | failVcode, | ||
| 112 | successVcode, | ||
| 113 | sliderText, | ||
| 114 | show, | ||
| 115 | associationList | ||
| 116 | } = toRefs(data) | ||
| 99 | const emit = defineEmits(['submit']) | 117 | const emit = defineEmits(['submit']) |
| 100 | onMounted(() => { | 118 | onMounted(() => { |
| 101 | if (language.value == 1) { | 119 | if (language.value == 1) { |
| ... | @@ -106,7 +124,7 @@ onMounted(() => { | ... | @@ -106,7 +124,7 @@ onMounted(() => { |
| 106 | getAssociationList() | 124 | getAssociationList() |
| 107 | }) | 125 | }) |
| 108 | const getAssociationList = () => { | 126 | const getAssociationList = () => { |
| 109 | getAssociation().then(res=>{ | 127 | getAssociation().then(res => { |
| 110 | associationList.value = res.data | 128 | associationList.value = res.data |
| 111 | }) | 129 | }) |
| 112 | } | 130 | } |
| ... | @@ -136,7 +154,7 @@ function sendsmsMsg() { | ... | @@ -136,7 +154,7 @@ function sendsmsMsg() { |
| 136 | return | 154 | return |
| 137 | } | 155 | } |
| 138 | if (counting.value) { | 156 | if (counting.value) { |
| 139 | return | 157 | |
| 140 | } else { | 158 | } else { |
| 141 | isShow.value = true | 159 | isShow.value = true |
| 142 | } | 160 | } |
| ... | @@ -157,17 +175,19 @@ function codeSuccess(msg) { | ... | @@ -157,17 +175,19 @@ function codeSuccess(msg) { |
| 157 | getCaptchaSms({account: form.value.account}).then(res => { | 175 | getCaptchaSms({account: form.value.account}).then(res => { |
| 158 | counting.value = true | 176 | counting.value = true |
| 159 | isCodeTrue.value = true | 177 | isCodeTrue.value = true |
| 160 | ElMessage.success(language.value == 0 ? '发送成功,请关注邮箱邮件' :'Send success, please check your email') | 178 | ElMessage.success(language.value == 0 ? '发送成功,请关注邮箱邮件' : 'Send success, please check your email') |
| 161 | }) | 179 | }) |
| 162 | } | 180 | } |
| 163 | 181 | ||
| 164 | function resetCode() { | 182 | function resetCode() { |
| 165 | isCodeTrue.value = false | 183 | isCodeTrue.value = false |
| 166 | } | 184 | } |
| 185 | |||
| 167 | function goLogin() { | 186 | function goLogin() { |
| 168 | show.value = false | 187 | show.value = false |
| 169 | useUserStore().setReLogin() | 188 | useUserStore().setReLogin() |
| 170 | } | 189 | } |
| 190 | |||
| 171 | function register() { | 191 | function register() { |
| 172 | //游客注册 | 192 | //游客注册 |
| 173 | if (!form.value.account) { | 193 | if (!form.value.account) { |
| ... | @@ -187,29 +207,39 @@ function register() { | ... | @@ -187,29 +207,39 @@ function register() { |
| 187 | return | 207 | return |
| 188 | } | 208 | } |
| 189 | if (!form.value.password) { | 209 | if (!form.value.password) { |
| 190 | ElMessage.warning(language.value == 0?'请输入密码':'Please enter password') | 210 | ElMessage.warning(language.value == 0 ? '请输入密码' : 'Please enter password') |
| 191 | return | 211 | return |
| 192 | } | 212 | } |
| 193 | if (!form.value.password2) { | 213 | if (!form.value.password2) { |
| 194 | ElMessage.warning(language.value == 0?'请再次输入密码':'Please enter password') | 214 | ElMessage.warning(language.value == 0 ? '请再次输入密码' : 'Please enter password') |
| 195 | return | 215 | return |
| 196 | } | 216 | } |
| 197 | delete form.value.password2 | 217 | delete form.value.password2 |
| 198 | vistorRegister(form.value).then(res=>{ | 218 | vistorRegister(form.value).then(res => { |
| 199 | setToken(res.data.token) | 219 | setToken(res.data.token) |
| 200 | emit('submitForm') | 220 | emit('submitForm') |
| 201 | }) | 221 | }) |
| 202 | } | 222 | } |
| 223 | |||
| 203 | const vconfirmPassword = () => { | 224 | const vconfirmPassword = () => { |
| 204 | if (form.value.password !== form.value.password2) { | 225 | if (form.value.password !== form.value.password2) { |
| 205 | ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' :'The two passwords entered are inconsistent') | 226 | ElMessage.warning(language.value == 0 ? '两次输入的密码不一致' : 'The two passwords entered are inconsistent') |
| 206 | } | 227 | } |
| 207 | } | 228 | } |
| 229 | |||
| 208 | function close() { | 230 | function close() { |
| 209 | show.value = false | 231 | show.value = false |
| 210 | } | 232 | } |
| 211 | </script> | 233 | </script> |
| 212 | 234 | ||
| 213 | <style scoped lang="scss"> | 235 | <style lang="scss" scoped> |
| 214 | .tip{line-height: 1.6} | 236 | .tip { |
| 237 | line-height: 1.6 | ||
| 238 | } | ||
| 239 | |||
| 240 | .codeBtn { | ||
| 241 | background-color: #0540EC !important; | ||
| 242 | color: #fff !important; | ||
| 243 | |||
| 244 | } | ||
| 215 | </style> | 245 | </style> | ... | ... |
-
Please register or sign in to post a comment