邀请函调整
Showing
1 changed file
with
124 additions
and
68 deletions
| 1 | <template> | 1 | <template> |
| 2 | <el-dialog | 2 | <el-dialog |
| 3 | v-model="show" :title="title" width="600px" 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" |
| 5 | destroy-on-close | 5 | close-icon="CircleClose" destroy-on-close |
| 6 | width="600px" | ||
| 6 | > | 7 | > |
| 7 | <div class="boxInvitation pd20"> | ||
| 8 | 8 | ||
| 9 | <div class="text-center pd20" v-if="showR"> | 9 | <div class="boxInvitation pd20"> |
| 10 | <img class="mauto" src="@/assets/dance/ok.png"/> | 10 | <div v-if="showR" class="text-center pd20"> |
| 11 | <!-- <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>--> | 11 | <img class="mauto" src="@/assets/dance/ok.png"> |
| 12 | <h4 class="text-center" v-if="language == 0"> | 12 | <!-- <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>--> |
| 13 | <h4 v-if="language == 0" class="text-center"> | ||
| 13 | 我们已收到您的邀请函申请,并将尽快处理。请耐心等待。 | 14 | 我们已收到您的邀请函申请,并将尽快处理。请耐心等待。 |
| 14 | </h4> | 15 | </h4> |
| 15 | <h4 v-else> | 16 | <h4 v-else> |
| 16 | Your invitation letter application has been received,<br/> | 17 | Your invitation letter application has been received,<br> |
| 17 | and we will process it as soon as possible. | 18 | and we will process it as soon as possible. |
| 18 | <br/> | 19 | <br> |
| 19 | Please be patient while waiting. | 20 | Please be patient while waiting. |
| 20 | </h4> | 21 | </h4> |
| 21 | <el-button size="large" type="primary" @click="conti" round class="btn-lineG"> | 22 | <el-button class="btn-lineG" round size="large" type="primary" @click="conti"> |
| 22 | {{ language == 0 ? '继续提交' : 'Continue To Submit' }} | 23 | {{ language == 0 ? '继续提交' : 'Continue To Submit' }} |
| 23 | </el-button> | 24 | </el-button> |
| 24 | </div> | 25 | </div> |
| 25 | 26 | ||
| 26 | <el-form :model="form" :rules="rules" ref="iformRef" label-position="right" label-width="150px" v-else> | 27 | <el-form |
| 27 | <el-form-item :label="language==0?'姓名':'Name'" required prop="name"> | 28 | v-else ref="iformRef" :model="form" :rules="rules" label-position="right" |
| 28 | <el-input v-model="form.name" @input="handleInput"/> | 29 | label-width="150px" |
| 30 | > | ||
| 31 | <!-- <el-form-item :label="language==0?'有效证件':'Passport Copy'" prop="passportCopy" required>--> | ||
| 32 | <!-- <image-upload--> | ||
| 33 | <!-- v-model="form.passportCopy" :button-text="language==0?'上传':'Upload'" :is-show-tip="false"--> | ||
| 34 | <!-- :limit="1"--> | ||
| 35 | <!-- />--> | ||
| 36 | <!-- </el-form-item>--> | ||
| 37 | |||
| 38 | <el-form-item :label="language==0?'有效证件':'Valid Passport'" prop="passportCopy" required> | ||
| 39 | <image-upload | ||
| 40 | ref="uploadPassportRef" | ||
| 41 | v-model="form.passportCopy" | ||
| 42 | :action="'/common/getPersonInfoFromCert/6'" | ||
| 43 | :button-text="language==0?'上传':'Upload'" | ||
| 44 | :is-show-tip="false" | ||
| 45 | :limit="1" | ||
| 46 | param-name="pic" | ||
| 47 | @response="ocrSuccess" | ||
| 48 | /> | ||
| 49 | <div class="tip"> | ||
| 50 | <span v-if="language==0">请上传有效身份证件扫描件,用于核实身份信息、申请签证邀请函及购买保险等 </span> | ||
| 51 | <span v-else> | ||
| 52 | Please upload a scanned copy of your valid passport for verification of identity information, | ||
| 53 | application of visa invitation letter and purchasing insurance etc.</span> | ||
| 54 | </div> | ||
| 55 | |||
| 29 | </el-form-item> | 56 | </el-form-item> |
| 30 | <el-form-item :label="language==0?'性别':'Gender'" required prop="gender"> | 57 | <el-form-item :label="language==0?'姓名':'Name'" prop="name" required> |
| 58 | <el-input v-model="form.name" @input="handleInput" /> | ||
| 59 | </el-form-item> | ||
| 60 | <el-form-item :label="language==0?'护照号':'Passport No.'" prop="passportNo" required> | ||
| 61 | <el-input v-model="form.passportNo" /> | ||
| 62 | </el-form-item> | ||
| 63 | <el-form-item :label="language==0?'性别':'Gender'" prop="gender" required> | ||
| 31 | <el-radio-group v-model="form.gender"> | 64 | <el-radio-group v-model="form.gender"> |
| 32 | <el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio> | 65 | <el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio> |
| 33 | <el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio> | 66 | <el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio> |
| 34 | </el-radio-group> | 67 | </el-radio-group> |
| 35 | </el-form-item> | 68 | </el-form-item> |
| 36 | <el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality"> | 69 | <el-form-item :label="language==0?'国籍':'Nationality'" prop="nationality" required> |
| 37 | <el-select filterable v-model="form.nationality" style="width: 100%;"> | 70 | <el-select v-model="form.nationality" filterable style="width: 100%;"> |
| 38 | <el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName" | 71 | <el-option |
| 39 | :value="item.id"/> | 72 | v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName" |
| 73 | :value="item.id" | ||
| 74 | /> | ||
| 40 | </el-select> | 75 | </el-select> |
| 41 | </el-form-item> | 76 | </el-form-item> |
| 42 | <el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth"> | 77 | <el-form-item :label="language==0?'出生日期':'Date of Birth'" prop="birth" required> |
| 43 | <el-date-picker | 78 | <el-date-picker |
| 44 | v-model="form.birth" | 79 | v-model="form.birth" |
| 45 | style="width: 100%;" placeholder="YYYY-MM-DD" | 80 | format="YYYY-MM-DD" placeholder="YYYY-MM-DD" |
| 46 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 81 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 47 | /> | 82 | /> |
| 48 | </el-form-item> | 83 | </el-form-item> |
| 49 | <el-form-item :label="language==0?'邮箱':'Email'" required prop="email"> | 84 | <el-form-item :label="language==0?'邮箱':'Email'" prop="email" required> |
| 50 | <el-input v-model="form.email" type="email"/> | 85 | <el-input v-model="form.email" type="email" /> |
| 51 | <div class="tip" v-if="language == 0">如以团队名义申请邀请函,建议统一填写领队邮箱。</div> | 86 | <div v-if="language == 0" class="tip">如以团队名义申请邀请函,建议统一填写领队邮箱。</div> |
| 52 | <div class="tip" v-else> | 87 | <div v-else class="tip"> |
| 53 | If a visa invitation letter is applied by the organization, it is recommended to fill in the email of the head of team. | 88 | If a visa invitation letter is applied by the organization, it is recommended to fill in the email of the |
| 89 | head of team. | ||
| 54 | </div> | 90 | </div> |
| 55 | </el-form-item> | 91 | </el-form-item> |
| 56 | <el-form-item :label="language==0?'护照号':'Passport No.'" required prop="passportNo"> | 92 | |
| 57 | <el-input v-model="form.passportNo"/> | 93 | <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" prop="arrival" required> |
| 58 | </el-form-item> | ||
| 59 | <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy"> | ||
| 60 | <image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false" | ||
| 61 | :button-text="language==0?'上传':'Upload'"/> | ||
| 62 | </el-form-item> | ||
| 63 | <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival"> | ||
| 64 | <el-date-picker | 94 | <el-date-picker |
| 65 | v-model="form.arrival" placeholder="YYYY-MM-DD" | 95 | v-model="form.arrival" format="YYYY-MM-DD" |
| 66 | style="width: 100%;" | 96 | placeholder="YYYY-MM-DD" |
| 67 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 97 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 68 | /> | 98 | /> |
| 69 | </el-form-item> | 99 | </el-form-item> |
| 70 | <el-form-item :label="language==0?'出发日期':'Date of Departure'" required prop="departure"> | 100 | <el-form-item :label="language==0?'出发日期':'Date of Departure'" prop="departure" required> |
| 71 | <el-date-picker | 101 | <el-date-picker |
| 72 | v-model="form.departure" | 102 | v-model="form.departure" |
| 73 | style="width: 100%;" placeholder="YYYY-MM-DD" | 103 | format="YYYY-MM-DD" placeholder="YYYY-MM-DD" |
| 74 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | 104 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 75 | /> | 105 | /> |
| 76 | </el-form-item> | 106 | </el-form-item> |
| 77 | <el-form-item :label="language==0?'备注':'Remark '"> | 107 | <el-form-item :label="language==0?'备注':'Remark '"> |
| 78 | <el-input type="textarea" v-model="form.remark" rows="3"/> | 108 | <el-input v-model="form.remark" rows="3" type="textarea" /> |
| 79 | </el-form-item> | 109 | </el-form-item> |
| 80 | 110 | ||
| 81 | <div class="text-center"> | 111 | <div class="text-center"> |
| 82 | <el-button type="primary" size="large" @click="submit" round class="btn-lineG"> | 112 | <el-button class="btn-lineG" round size="large" type="primary" @click="submit"> |
| 83 | {{ language == 0 ? '提交' : 'SUBMIT' }} | 113 | {{ language == 0 ? '提交' : 'SUBMIT' }} |
| 84 | </el-button> | 114 | </el-button> |
| 85 | </div> | 115 | </div> |
| ... | @@ -90,17 +120,17 @@ | ... | @@ -90,17 +120,17 @@ |
| 90 | </template> | 120 | </template> |
| 91 | 121 | ||
| 92 | <script setup> | 122 | <script setup> |
| 93 | import {useStorage} from "@vueuse/core/index"; | 123 | import { useStorage } from '@vueuse/core/index' |
| 94 | import {getCurrentInstance, watch} from "vue"; | 124 | import { getCurrentInstance, watch, ref } from 'vue' |
| 95 | import {nextTick} from "@vue/runtime-core"; | 125 | import { nextTick } from '@vue/runtime-core' |
| 96 | import {ElMessage, ElMessageBox} from "element-plus"; | 126 | import { ElMessage, ElMessageBox } from 'element-plus' |
| 97 | import {addInvitation, countryList} from "@/apiPc/match"; | 127 | import { addInvitation, countryList } from '@/apiPc/match' |
| 98 | import ImageUpload from "@/components/ImageUpload"; | 128 | import ImageUpload from '@/components/ImageUpload' |
| 99 | 129 | ||
| 100 | const {proxy} = getCurrentInstance() | 130 | const { proxy } = getCurrentInstance() |
| 101 | const language = useStorage('language', 0) | 131 | const language = useStorage('language', 0) |
| 102 | const form = ref({ | 132 | const form = ref({ |
| 103 | gender:'0' | 133 | gender: '0' |
| 104 | }) | 134 | }) |
| 105 | const show = ref(false) | 135 | const show = ref(false) |
| 106 | const showR = ref(false) | 136 | const showR = ref(false) |
| ... | @@ -109,14 +139,14 @@ const countrys = ref([]) | ... | @@ -109,14 +139,14 @@ const countrys = ref([]) |
| 109 | const cptId = ref('') | 139 | const cptId = ref('') |
| 110 | const rules = ref( | 140 | const rules = ref( |
| 111 | { | 141 | { |
| 112 | nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 142 | nationality: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }], |
| 113 | name: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | 143 | name: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }], |
| 114 | email: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | 144 | email: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }], |
| 115 | birth: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 145 | birth: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }], |
| 116 | passportNo: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | 146 | passportNo: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }], |
| 117 | passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},], | 147 | passportCopy: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload' }], |
| 118 | arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 148 | arrival: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }], |
| 119 | departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | 149 | departure: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }] |
| 120 | }) | 150 | }) |
| 121 | const open = (params) => { | 151 | const open = (params) => { |
| 122 | console.log(params) | 152 | console.log(params) |
| ... | @@ -124,7 +154,8 @@ const open = (params) => { | ... | @@ -124,7 +154,8 @@ const open = (params) => { |
| 124 | title.value = params.title | 154 | title.value = params.title |
| 125 | cptId.value = params.cptId | 155 | cptId.value = params.cptId |
| 126 | } | 156 | } |
| 127 | defineExpose({open}) | 157 | defineExpose({ open }) |
| 158 | |||
| 128 | watch(show, (value) => { | 159 | watch(show, (value) => { |
| 129 | if (!value) { | 160 | if (!value) { |
| 130 | form.value = { | 161 | form.value = { |
| ... | @@ -145,10 +176,11 @@ function getCountryList() { | ... | @@ -145,10 +176,11 @@ function getCountryList() { |
| 145 | countrys.value = res.data | 176 | countrys.value = res.data |
| 146 | }) | 177 | }) |
| 147 | } | 178 | } |
| 179 | |||
| 148 | const handleInput = (value) => { | 180 | const handleInput = (value) => { |
| 149 | const regex = /^[a-zA-Z]*$/; | 181 | const regex = /^[a-zA-Z]*$/ |
| 150 | const regexCh = /^[\u4e00-\u9fa5]+$/; | 182 | const regexCh = /^[\u4e00-\u9fa5]+$/ |
| 151 | if(language.value==0){ | 183 | if (language.value == 0) { |
| 152 | if (!regexCh.test(value)) { | 184 | if (!regexCh.test(value)) { |
| 153 | form.value.name = '' | 185 | form.value.name = '' |
| 154 | ElMessage.warning('请输入中文') | 186 | ElMessage.warning('请输入中文') |
| ... | @@ -182,14 +214,31 @@ const submit = () => { | ... | @@ -182,14 +214,31 @@ const submit = () => { |
| 182 | if (Array.isArray(form.value.passportCopy)) { | 214 | if (Array.isArray(form.value.passportCopy)) { |
| 183 | form.value.passportCopy = form.value.passportCopy[0].url | 215 | form.value.passportCopy = form.value.passportCopy[0].url |
| 184 | } | 216 | } |
| 217 | form.value.ocrFlag = '1' | ||
| 185 | addInvitation(form.value).then((res) => { | 218 | addInvitation(form.value).then((res) => { |
| 186 | ElMessage.success(language.value == 0 ?'提交成功':'Successfully!') | 219 | ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!') |
| 187 | showR.value = true | 220 | showR.value = true |
| 188 | }) | 221 | }) |
| 189 | }) | 222 | }) |
| 190 | } | 223 | } |
| 191 | }) | 224 | }) |
| 192 | } | 225 | } |
| 226 | |||
| 227 | const ocrSuccess = (res) => { | ||
| 228 | // form.value.passportUrl = res.data.url | ||
| 229 | console.log(form.value.passportUrl) | ||
| 230 | if (res.code == 200) { | ||
| 231 | form.value.passportCopy = res.data.url | ||
| 232 | form.value.passportNo = res.data.code | ||
| 233 | form.value.birth = res.data.birth?.slice(0, 10) | ||
| 234 | form.value.gender = res.data.sex | ||
| 235 | form.value.name = res.data.name | ||
| 236 | } else if (res.code == 500) { | ||
| 237 | ElMessage.warning(res.msg) | ||
| 238 | form.value.passportCopy = '' | ||
| 239 | } | ||
| 240 | } | ||
| 241 | |||
| 193 | const conti = () => { | 242 | const conti = () => { |
| 194 | showR.value = false | 243 | showR.value = false |
| 195 | form.value = { | 244 | form.value = { |
| ... | @@ -198,11 +247,18 @@ const conti = () => { | ... | @@ -198,11 +247,18 @@ const conti = () => { |
| 198 | } | 247 | } |
| 199 | </script> | 248 | </script> |
| 200 | 249 | ||
| 201 | <style scoped lang="scss"> | 250 | <style lang="scss" scoped> |
| 202 | .tip{font-size: 12px;} | 251 | .tip { |
| 252 | font-size: 12px; | ||
| 253 | } | ||
| 254 | |||
| 203 | .boxInvitation { | 255 | .boxInvitation { |
| 204 | width: 90%; | 256 | width: 90%; |
| 205 | margin: auto | 257 | margin: auto |
| 206 | } | 258 | } |
| 207 | h4{font-size: 15px;line-height: 1.6;} | 259 | |
| 260 | h4 { | ||
| 261 | font-size: 15px; | ||
| 262 | line-height: 1.6; | ||
| 263 | } | ||
| 208 | </style> | 264 | </style> | ... | ... |
-
Please register or sign in to post a comment