400b300a by zhangmeng

邀请函调整

1 parent d9f45fde
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>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!