22d7edab by 杨炀

no message

1 parent 156f1654
...@@ -133,6 +133,13 @@ export function createPalPay(data) { ...@@ -133,6 +133,13 @@ export function createPalPay(data) {
133 data: data 133 data: data
134 }) 134 })
135 } 135 }
136 export function createOfflinePay(data) {
137 return request({
138 url: `/ota/norder/offlinePay`,
139 method: 'post',
140 data: data
141 })
142 }
136 143
137 export function callbackPalPay(tradeNo) { 144 export function callbackPalPay(tradeNo) {
138 return request({ 145 return request({
...@@ -143,6 +150,14 @@ export function callbackPalPay(tradeNo) { ...@@ -143,6 +150,14 @@ export function callbackPalPay(tradeNo) {
143 } 150 }
144 }) 151 })
145 } 152 }
153 //对公 上传凭证
154 export function renewalProof(data) {
155 return request({
156 url: `/ota/norder/renewalProof`,
157 method: 'put',
158 data: data
159 })
160 }
146 161
147 export function getInvoiceByActiveId(query) { 162 export function getInvoiceByActiveId(query) {
148 return request({ 163 return request({
...@@ -151,6 +166,13 @@ export function getInvoiceByActiveId(query) { ...@@ -151,6 +166,13 @@ export function getInvoiceByActiveId(query) {
151 params: query 166 params: query
152 }) 167 })
153 } 168 }
169 export function getRoomBillPayment(query) {
170 return request({
171 url: `/ota/orderRoom/getRoomBillPayment`,
172 method: 'get',
173 params: query
174 })
175 }
154 176
155 export function getCanInvoiceBills(query) { 177 export function getCanInvoiceBills(query) {
156 return request({ 178 return request({
......
...@@ -86,6 +86,12 @@ export function countryList() { ...@@ -86,6 +86,12 @@ export function countryList() {
86 method: 'get' 86 method: 'get'
87 }) 87 })
88 } 88 }
89 export function associationList() {
90 return request({
91 url: `/system/association/getList`,
92 method: 'get'
93 })
94 }
89 95
90 export function getAssociation() { 96 export function getAssociation() {
91 return request({ 97 return request({
...@@ -763,11 +769,19 @@ export function getProjectByCptId(cptId, query) { ...@@ -763,11 +769,19 @@ export function getProjectByCptId(cptId, query) {
763 769
764 export function addInvitation(data) { 770 export function addInvitation(data) {
765 return request({ 771 return request({
766 url: `/league/person`, 772 // url: `/league/person`,
773 url: `/league/visa`,
767 method: 'post', 774 method: 'post',
768 data: data 775 data: data
769 }) 776 })
770 } 777 }
778 export function getVisaInfo(query) {
779 return request({
780 url: `/league/visa/getVisa`,
781 method: 'get',
782 params: query
783 })
784 }
771 785
772 // 酒店预约查询 786 // 酒店预约查询
773 export function hotelList(params) { 787 export function hotelList(params) {
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
41 :on-preview="handlePictureCardPreview" 41 :on-preview="handlePictureCardPreview"
42 :file-list="fileListInUpload" 42 :file-list="fileListInUpload"
43 :class="{ hide: fileList.length >= limit }" 43 :class="{ hide: fileList.length >= limit }"
44 name="image" 44 :name="paramName"
45 :disabled="disabled" 45 :disabled="disabled"
46 :accept="accept" 46 :accept="accept"
47 > 47 >
...@@ -94,6 +94,10 @@ const props = defineProps({ ...@@ -94,6 +94,10 @@ const props = defineProps({
94 type: Number, 94 type: Number,
95 default: 5 95 default: 5
96 }, 96 },
97 paramName: {
98 type: String,
99 default: 'image'
100 },
97 // 文件类型, 例如['png', 'jpg', 'jpeg'] 101 // 文件类型, 例如['png', 'jpg', 'jpeg']
98 fileType: { 102 fileType: {
99 type: Array, 103 type: Array,
...@@ -127,7 +131,7 @@ const accept = computed(() => { ...@@ -127,7 +131,7 @@ const accept = computed(() => {
127 }) 131 })
128 132
129 const { proxy } = getCurrentInstance() 133 const { proxy } = getCurrentInstance()
130 const emit = defineEmits(['update:modelValue']) 134 const emit = defineEmits(['update:modelValue','response'])
131 const number = ref(0) 135 const number = ref(0)
132 const uploadList = ref([]) 136 const uploadList = ref([])
133 const dialogImageUrl = ref('') 137 const dialogImageUrl = ref('')
...@@ -211,6 +215,7 @@ function handleExceed() { ...@@ -211,6 +215,7 @@ function handleExceed() {
211 215
212 // 上传成功回调 216 // 上传成功回调
213 function handleUploadSuccess(res, file) { 217 function handleUploadSuccess(res, file) {
218 if(!actionUrl.value){
214 if (res.code === 200) { 219 if (res.code === 200) {
215 uploadList.value.push({ name: file.name, url: res.data || res.msg }) 220 uploadList.value.push({ name: file.name, url: res.data || res.msg })
216 uploadedSuccessfully() 221 uploadedSuccessfully()
...@@ -221,6 +226,10 @@ function handleUploadSuccess(res, file) { ...@@ -221,6 +226,10 @@ function handleUploadSuccess(res, file) {
221 proxy.$refs.imageUpload.handleRemove(file) 226 proxy.$refs.imageUpload.handleRemove(file)
222 uploadedSuccessfully() 227 uploadedSuccessfully()
223 } 228 }
229 } else {
230 proxy.$modal.closeLoading()
231 emit('response', res)
232 }
224 } 233 }
225 234
226 // 删除图片 235 // 删除图片
......
...@@ -76,6 +76,7 @@ ...@@ -76,6 +76,7 @@
76 :auto-crop-height="options.autoCropHeight" 76 :auto-crop-height="options.autoCropHeight"
77 :fixed-box="options.fixedBox" 77 :fixed-box="options.fixedBox"
78 output-type="png" 78 output-type="png"
79 :output-size="1"
79 @realTime="realTime" 80 @realTime="realTime"
80 /> 81 />
81 <!-- <img :src="options.img"> --> 82 <!-- <img :src="options.img"> -->
......
...@@ -352,9 +352,11 @@ ...@@ -352,9 +352,11 @@
352 <el-row align="middle" justify="space-between"> 352 <el-row align="middle" justify="space-between">
353 <el-col :lg="12"> 353 <el-col :lg="12">
354 <div v-if="form.payDate">{{ language == 0 ? '支付时间' : 'Payment Time' }}{{ form.payDate }}</div> 354 <div v-if="form.payDate">{{ language == 0 ? '支付时间' : 'Payment Time' }}{{ form.payDate }}</div>
355 <div v-if="form.payDate" class="mt10">{{ language == 0 ? '支付方式' : 'Payment Method' }} 355 <div class="mt10">{{ language == 0 ? '支付方式' : 'Payment Method' }}
356 <span v-if="form.paymentType=='1'">{{ language == 0 ? '微信支付' : 'WePay' }}</span> 356 <span v-if="form.paymentType=='1'">{{ language == 0 ? '微信支付' : 'WePay' }}</span>
357 <span v-if="form.paymentType=='3'">PayPal</span> 357 <span v-else-if="form.paymentType=='3'">PayPal</span>
358 <span v-else-if="form.paymentType=='4'|| form.paymentType=='5'">{{language == 0 ?'对公转账':'Bank Transfer'}}</span>
359 <span v-else>--</span>
358 </div> 360 </div>
359 </el-col> 361 </el-col>
360 <el-col :lg="12" class="result"> 362 <el-col :lg="12" class="result">
...@@ -410,7 +412,7 @@ ...@@ -410,7 +412,7 @@
410 </el-button> 412 </el-button>
411 </div> 413 </div>
412 414
413 <div v-if="form.viewStatus == '0'&&(form.surplus!='0,0'&&form.surplus!='0')" class="pd20"> 415 <div v-if="form.viewStatus == '0'&&(form.surplus!='0,0'&&form.surplus!='0')&&form.paymentType!='4'&&form.paymentType!='5'" class="pd20">
414 416
415 <div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div> 417 <div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div>
416 <div class="mt20"> 418 <div class="mt20">
...@@ -457,6 +459,12 @@ ...@@ -457,6 +459,12 @@
457 fill="#003087" p-id="22662"></path> 459 fill="#003087" p-id="22662"></path>
458 </svg> 460 </svg>
459 </el-radio> 461 </el-radio>
462 <el-radio value="4" v-if="language==0&&type=='hotel'" border>
463 对公打款
464 </el-radio>
465 <el-radio value="5" v-if="language==1&&type=='hotel'" border>
466 Corporate payment
467 </el-radio>
460 </el-radio-group> 468 </el-radio-group>
461 <div v-if="payType == '2'&&wePayCodeUrl"> 469 <div v-if="payType == '2'&&wePayCodeUrl">
462 <div class="payImgbox flexCenter"> 470 <div class="payImgbox flexCenter">
...@@ -481,6 +489,29 @@ ...@@ -481,6 +489,29 @@
481 </div> 489 </div>
482 </div> 490 </div>
483 </div> 491 </div>
492
493 <!-- 线下支付且待支付状态-->
494 <el-row v-if="(form.paymentType=='4'|| form.paymentType=='5')&&form.viewStatus=='0'" class="proofBox">
495 <el-col :lg="12">
496 <div class="flex">
497 <label style="width: 10em">
498 {{ language==0?'上传缴费凭证:':'Upload proof:' }}
499 </label>
500 <file-upload :is-show-tip="false" v-model="form.pic" :limit="1"/>
501 </div>
502 </el-col>
503 <el-col :lg="12">
504 <el-button class="fr" text type="primary" @click="downOfflineInvoice" icon="download">
505 {{ language == 0 ? '下载缴费单' : 'Download Invoice' }}
506 </el-button>
507 </el-col>
508 <!-- 如果没审批通过-->
509 <el-col :lg="24" align="center" justify="center">
510 <el-button round type="primary" @click="submitProof">提交凭证</el-button>
511 </el-col>
512 </el-row>
513
514
484 <el-row align="middle" class="mt20 mb60" justify="center"> 515 <el-row align="middle" class="mt20 mb60" justify="center">
485 <el-col :span="24" class="text-center"> 516 <el-col :span="24" class="text-center">
486 <el-button v-if="!hideconfirmbtn&&form.viewStatus == '0'" class="btn-lineG w200px" round type="primary" 517 <el-button v-if="!hideconfirmbtn&&form.viewStatus == '0'" class="btn-lineG w200px" round type="primary"
...@@ -493,6 +524,7 @@ ...@@ -493,6 +524,7 @@
493 <el-button v-if="form.viewStatus == '0'" class="underline" link @click="cancel"> 524 <el-button v-if="form.viewStatus == '0'" class="underline" link @click="cancel">
494 {{ language == 0 ? '取消订单' : 'Cancel Order' }} 525 {{ language == 0 ? '取消订单' : 'Cancel Order' }}
495 </el-button> 526 </el-button>
527
496 </el-col> 528 </el-col>
497 </el-row> 529 </el-row>
498 530
...@@ -540,6 +572,19 @@ ...@@ -540,6 +572,19 @@
540 </div> 572 </div>
541 </div> 573 </div>
542 </el-dialog> 574 </el-dialog>
575 <el-dialog v-model="showOfflineSuccessDialog" :title="language==0?'提示':'Tip'" width="460px">
576 <el-result
577 :sub-title="language==0?'请在7日内上传凭证,否则订单取消':'Please upload the payment receipt within 7 days, otherwise the order will be cancelled'"
578 :title="language==0?'订单已提交':'Order submitted'"
579 icon="success"
580 >
581 <template #extra>
582 <el-button class="btn-lineG w200px" round type="primary" @click="downOfflineInvoice">
583 {{ language == 0 ? '下载缴费单' : 'Download Invoice' }}
584 </el-button>
585 </template>
586 </el-result>
587 </el-dialog>
543 </div> 588 </div>
544 </template> 589 </template>
545 590
...@@ -563,16 +608,24 @@ const payType = ref('2') ...@@ -563,16 +608,24 @@ const payType = ref('2')
563 const orderId = ref(route.query.orderId) 608 const orderId = ref(route.query.orderId)
564 const matchId = ref() 609 const matchId = ref()
565 const groupId = ref() 610 const groupId = ref()
611 const proofUrl = ref()
566 import useUserStore from "@/store/modules/user"; 612 import useUserStore from "@/store/modules/user";
567 import FileUpload from "@/components/FileUpload"; 613 import FileUpload from "@/components/FileUpload";
568 import {useStorage} from "@vueuse/core/index"; 614 import {useStorage} from "@vueuse/core/index";
569 import {ElMessage, ElMessageBox} from "element-plus"; 615 import {ElMessage, ElMessageBox} from "element-plus";
570 import { 616 import {
571 cancelOrder, 617 cancelOrder,
572 cancelOrder2, getBaseInfoByActiveId, 618 cancelOrder2,
619 createOfflinePay,
620 getBaseInfoByActiveId,
573 getCarBilldetailbyId, 621 getCarBilldetailbyId,
574 getFoodBilldetailbyId, 622 getFoodBilldetailbyId,
575 getMealOrderInfoByLogex, getPhotoOrderInfo, getPhotoOrderInfoByLogex, getTicketInfoByActivityId, getTicketOrderInfo, 623 getMealOrderInfoByLogex,
624 getPhotoOrderInfo,
625 getPhotoOrderInfoByLogex,
626 getRoomBillPayment,
627 getTicketInfoByActivityId,
628 getTicketOrderInfo, renewalProof,
576 } from "@/apiPc/booking"; 629 } from "@/apiPc/booking";
577 import dayjs from 'dayjs' 630 import dayjs from 'dayjs'
578 import {delPerson} from "@/api/exam/person"; 631 import {delPerson} from "@/api/exam/person";
...@@ -588,6 +641,7 @@ const errorBox = ref(false) ...@@ -588,6 +641,7 @@ const errorBox = ref(false)
588 const hideconfirmbtn = ref(false) 641 const hideconfirmbtn = ref(false)
589 const remark = ref('') 642 const remark = ref('')
590 const showSJDialog = ref(false) 643 const showSJDialog = ref(false)
644 const showOfflineSuccessDialog = ref(false)
591 const loading = ref(false) 645 const loading = ref(false)
592 const lpName = ref('') 646 const lpName = ref('')
593 const matchForm = ref({}) 647 const matchForm = ref({})
...@@ -671,6 +725,10 @@ function getData() { ...@@ -671,6 +725,10 @@ function getData() {
671 form.value.messageObj = JSON.parse(form.value.message) || {} 725 form.value.messageObj = JSON.parse(form.value.message) || {}
672 form.value.extJsonObj = JSON.parse(form.value.extJson) || {} 726 form.value.extJsonObj = JSON.parse(form.value.extJson) || {}
673 matchId.value = form.value.extJsonObj?.activeId 727 matchId.value = form.value.extJsonObj?.activeId
728 //如果对公打款-
729 if(form.value.paymentType=='4' || form.value.paymentType=='5'){
730 hideconfirmbtn.value = true
731 }
674 }).catch(err => { 732 }).catch(err => {
675 console.log(err) 733 console.log(err)
676 errorBox.value = true 734 errorBox.value = true
...@@ -738,6 +796,17 @@ function goPay() { ...@@ -738,6 +796,17 @@ function goPay() {
738 } 796 }
739 }) 797 })
740 } 798 }
799 if (payType.value == '4' || payType.value == '5') {
800 //对公打款
801 booking.createOfflinePay({orderId: orderId.value}).then(res => {
802 console.log(res)
803 // booking.getRoomBillPayment({orderId: orderId.value}).then(res => {
804 // 显示付款单信息-上传凭证
805 hideconfirmbtn.value = true
806 showOfflineSuccessDialog.value = true
807 // })
808 })
809 }
741 } 810 }
742 811
743 let handle; 812 let handle;
...@@ -942,6 +1011,33 @@ const showSJ = () => { ...@@ -942,6 +1011,33 @@ const showSJ = () => {
942 showSJDialog.value = false 1011 showSJDialog.value = false
943 getData() 1012 getData()
944 } 1013 }
1014
1015 const downOfflineInvoice = () => {
1016 //下载 对公转账缴费单
1017 var obj = {
1018 orderId: orderId.value
1019 }
1020 proxy.download(`/ota/orderRoom/exportRoomBillPayment`, {
1021 ...obj
1022 }, `Invoice_${new Date().getTime()}.pdf`)
1023 }
1024 const submitProof = () => {
1025 //提交凭证
1026 if(!form.value.pic){
1027 ElMessage.warning(language.value == 0 ? '请上传凭证' : 'Please upload a voucher')
1028 return
1029 }
1030 booking.renewalProof({
1031 id: orderId.value,
1032 pic: form.value.pic[0]?.url
1033 }).then(res => {
1034 ElMessage.success({
1035 message: language.value == 0 ? '凭证提交成功' : 'Voucher submission successful',
1036 type: 'success'
1037 })
1038 getData()
1039 })
1040 }
945 </script> 1041 </script>
946 1042
947 <style lang="scss" scoped> 1043 <style lang="scss" scoped>
...@@ -1109,4 +1205,5 @@ const showSJ = () => { ...@@ -1109,4 +1205,5 @@ const showSJ = () => {
1109 .price { 1205 .price {
1110 color: orange; 1206 color: orange;
1111 } 1207 }
1208 .proofBox{padding: 20px;margin: 0 20px;border: 1px dashed #999;}
1112 </style> 1209 </style>
......
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
114 </span> 114 </span>
115 </el-col> 115 </el-col>
116 <el-col :lg="6" :md="16" :sm="16" :xs="16"> 116 <el-col :lg="6" :md="16" :sm="16" :xs="16">
117 <div class="text-right mb20 text-danger"> 117 <div class="text-right mb20 text-danger" v-if="b.paymentType!='4'&&b.paymentType!='5'">
118 <el-countdown 118 <el-countdown
119 v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" 119 v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')"
120 :value="b.countdown" 120 :value="b.countdown"
...@@ -134,7 +134,8 @@ ...@@ -134,7 +134,8 @@
134 </el-button> 134 </el-button>
135 <el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" class="mb10" 135 <el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" class="mb10"
136 plain round size="small" type="primary" @click="goDetail(b)"> 136 plain round size="small" type="primary" @click="goDetail(b)">
137 {{ language == 0 ? '支付' : 'Pay' }} 137 <span v-if="b.paymentType=='4'||b.paymentType=='5'">{{language == 0 ? '上传凭证' : 'Upload Receipt'}}</span>
138 <span v-else>{{ language == 0 ? '支付' : 'Pay' }}</span>
138 </el-button> 139 </el-button>
139 <el-button v-if="b.viewStatus==0" class="mb10" plain round size="small" type="warning" 140 <el-button v-if="b.viewStatus==0" class="mb10" plain round size="small" type="warning"
140 @click="cancel(b)"> 141 @click="cancel(b)">
......
...@@ -154,7 +154,7 @@ function popRemark(type) { ...@@ -154,7 +154,7 @@ function popRemark(type) {
154 if(type == '0'){ 154 if(type == '0'){
155 // 签证 155 // 签证
156 if(language.value === 0){ 156 if(language.value === 0){
157 ElMessage.warning('请切换英文页面办理,仅英文页面可以点击') 157 ElMessage.warning('请切换英文页面办理')
158 return 158 return
159 } else { 159 } else {
160 applyInvitation() 160 applyInvitation()
...@@ -235,7 +235,6 @@ function goBooking(n) { ...@@ -235,7 +235,6 @@ function goBooking(n) {
235 margin: 0 5%;width: 75px;height: 75px; 235 margin: 0 5%;width: 75px;height: 75px;
236 } 236 }
237 } 237 }
238 .itemBox_en{}
239 .itemBox_en .item { 238 .itemBox_en .item {
240 flex-direction: column;text-align: center;text-transform: uppercase; 239 flex-direction: column;text-align: center;text-transform: uppercase;
241 height: 100%; 240 height: 100%;
...@@ -258,8 +257,9 @@ height: 100%; ...@@ -258,8 +257,9 @@ height: 100%;
258 } 257 }
259 258
260 @media screen and (max-width: 768px) { 259 @media screen and (max-width: 768px) {
261 .itemBox,.itemBox_en{padding: 0 20px 20px} 260 .itemBox,.itemBox_en{padding: 0 20px 0}
262 .item{font-size: 16px; 261 .item{font-size: 16px;height: auto !important;
262 padding: 15px 0;
263 img{width: 50px;height: 50px} 263 img{width: 50px;height: 50px}
264 } 264 }
265 } 265 }
......
...@@ -4,126 +4,172 @@ ...@@ -4,126 +4,172 @@
4 :close-on-click-modal="false" class="pcloginpop" 4 :close-on-click-modal="false" class="pcloginpop"
5 destroy-on-close 5 destroy-on-close
6 > 6 >
7 <div class="boxInvitation pd20"> 7 <div class="boxInvitation">
8 8
9 <div class="text-center pd20" v-if="showR"> 9 <div class="text-center pd20" v-if="showR">
10 <img class="mauto" src="@/assets/dance/ok.png"/> 10 <img class="mauto" src="@/assets/dance/ok.png"/>
11 <!-- <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>--> 11 <!-- 提交成功等待审核-->
12 <h4 class="text-center" v-if="language == 0"> 12 <h3 v-if="form.status">
13 我们已收到您的邀请函申请,并将尽快处理。请耐心等待。 13 <span v-if="form.status==0">In Approval</span>
14 </h4> 14 <span v-if="form.status==1">Approved</span>
15 <h4 v-else> 15 </h3>
16 <h4>
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 {{ language == 0 ? '继续提交' : 'Continue To Submit' }}
23 </el-button>
24 </div> 22 </div>
25 23
26 <el-form :model="form" :rules="rules" ref="iformRef" label-position="top" v-else> 24 <el-form :model="form" :rules="rules" ref="iformRef" label-position="top" v-else>
27 <el-form-item :label="language==0?'申请人类别':'Applicant Type'"> 25 <el-form-item :label="language==0?'申请人类别':'Applicant Type'" required prop="applicatType">
28 <el-select v-model="form.type"> 26 <el-select v-model="form.applicatType">
29 <el-option label="MNA" value="1"/> 27 <el-option label="MNA" value="1"/>
30 <el-option label="Technical Officials" value="2"/> 28 <el-option label="Technical Officials" value="2"/>
31 <el-option label="WT Staff" value="3"/> 29 <el-option label="WT Staff" value="3"/>
32 <el-option label="Supplier" value="4"/> 30 <el-option label="Supplier" value="4"/>
33 <el-option label="Other" value="5"/> 31 <el-option label="Other" value="5"/>
34 </el-select> 32 </el-select>
35 <el-input v-if="form.type==5"/> 33 <el-input v-if="form.applicatType==5" placeholder="Please specify" v-model="form.remarks"/>
36 </el-form-item> 34 </el-form-item>
37 <el-form-item :label="language==0?'邀请函类别':'Application Type'" required prop="type"> 35 <el-form-item :label="language==0?'邀请函类别':'Application Type'" required prop="invitationType">
38 <el-select v-model="form.type"> 36 <el-select v-model="form.invitationType">
39 <el-option label="一般邀请函" value="1"/> 37 <el-option :label="language==0?'一般邀请函':'General Invitation'" value="1"/>
40 <el-option label="TE/PU(外办)邀请函" value="2"/> 38 <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU(Foreign) Invitation'" value="2"/>
41 </el-select> 39 </el-select>
42 </el-form-item> 40 </el-form-item>
43 <el-form-item :label="language==0?'是否需要中文邀请函':'Chinese Invitation'"> 41 <el-form-item :label="language==0?'是否需要中文邀请函':'Chinese Invitation'" required prop="chinese">
44 <el-radio-group> 42 <el-radio-group v-model="form.chinese">
45 <el-radio :label="1">{{ language==0?'是':'Yes' }}</el-radio> 43 <el-radio :value="1">{{ language==0?'是':'Yes' }}</el-radio>
46 <el-radio :label="0">{{ language==0?'否':'No' }}</el-radio> 44 <el-radio :value="0">{{ language==0?'否':'No' }}</el-radio>
47 </el-radio-group> 45 </el-radio-group>
48 </el-form-item> 46 </el-form-item>
49 47
50 <!-- 一般信息--> 48 <!-- 一般信息-->
51 <el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" required prop="teamName"> 49 <el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" :required="form.applicatType!=2" prop="associationCode">
52 <el-input v-model="form.teamName"/> 50 <el-select v-model="form.associationCode" filterable>
51 <el-option v-for="item in mnaList" :key="item.code" :label="language==0?item.nameCn:item.nameEn"
52 :value="item.code"/>
53 </el-select>
53 </el-form-item> 54 </el-form-item>
54 <el-form-item :label="language==0?'国家/地区协会地址':'MNA/Team Address'" required prop="teamName"> 55 <el-form-item :label="language==0?'国家/地区协会地址':'MNA/Team Address'" :required="form.applicatType!=2" prop="associationAddress">
55 <el-input v-model="form.teamName"/> 56 <el-input v-model="form.associationAddress"/>
56 </el-form-item> 57 </el-form-item>
57 <el-form-item :label="language==0?'邮箱':'Email'" required prop="email"> 58 <el-form-item :label="language==0?'邮箱':'Email'" required prop="email">
58 <el-input v-model="form.email" type="email"/> 59 <el-input v-model="form.email" type="email"/>
59 <div class="tip"></div> 60 <div class="tip"></div>
60 </el-form-item> 61 </el-form-item>
61 <el-form-item :label="language==0?'姓名':'Full Name'" required prop="name"> 62 <el-form-item :label="language==0?'姓名':'Full Name'" required prop="fullName">
62 <el-input v-model="form.name"/> 63 <el-input v-model="form.fullName"/>
63 </el-form-item> 64 </el-form-item>
64 <el-form-item :label="language==0?'联系人职位':'Position'" required prop="position"> 65 <el-form-item :label="language==0?'联系人职位':'Position'" required prop="position">
65 <el-select v-model="form.position"> 66 <el-select v-model="form.position">
66 <el-option label="经理" value="1"/> 67 <el-option label="Manager" value="0"/>
67 <el-option label="领队" value="2"/> 68 <el-option label="Team leader" value="1"/>
68 <el-option label="教练" value="3"/> 69 <el-option label="Coach" value="2"/>
69 <el-option label="其他" value="4"/> 70 <el-option label="Other" value="3"/>
70 </el-select> 71 </el-select>
71 </el-form-item> 72 </el-form-item>
72 <el-form-item :label="language==0?'联系电话':'Mobile'" required prop="mobile"> 73 <el-form-item :label="language==0?'联系电话':'Phone'" required prop="phone">
73 <el-input v-model="form.mobile"/> 74 <el-input v-model="form.phone"/>
75 </el-form-item>
76 <el-form-item :label="language==0?'签证办理中国大使馆':'Chinese Embassy Visas Office'" required prop="embassy">
77 <el-input v-model="form.embassy"/>
78 </el-form-item>
79 <el-form-item :label="language==0?'中国大使馆邮箱':'Chinese Embassy Email'" required prop="embassyEmail">
80 <el-input v-model="form.embassyEmail"/>
74 </el-form-item> 81 </el-form-item>
75 <!-- 签证办理中国大使馆 -->
76 <!-- 中国大使馆邮箱 -->
77 82
78 <!--上传护照,多张--> 83 <!--上传护照,多张-->
79 <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy"> 84 <div class="cptVisaInfoBosTable">
80 <image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false" 85 <el-form-item :label="language==0?'有效证件':'Passport Copy'" required>
86 <ImageUpload v-model="form.passportCopy" :is-show-tip="false"
81 :action="'/league/visa/getPersonInfoFromCert/3'" 87 :action="'/league/visa/getPersonInfoFromCert/3'"
82 :button-text="language==0?'上传':'Upload'"/> 88 paramName="pic"
89 :button-text="language==0?'上传':'Upload'" @response="getPassportInfo"
90 />
83 </el-form-item> 91 </el-form-item>
84 <!--识别信息--> 92 <!--识别信息-->
85 <div> 93 <div v-if="form.cptVisaInfoBos?.length>0" class="border">
86 <el-form-item :label="language==0?'性别':'Gender'" required prop="gender"> 94 <el-table :data="form.cptVisaInfoBos" border size="small">
87 <el-radio-group v-model="form.gender"> 95 <el-table-column prop="position" :label="'position'" min-width="100">
88 <el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio> 96 <template #default="scope">
89 <el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio> 97 <el-input v-model="scope.row.position" size="small"/>
90 </el-radio-group> 98 </template>
91 </el-form-item> 99 </el-table-column>
92 <el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality"> 100 <el-table-column prop="lastName" :label="'lastName'" min-width="100">
93 <el-select filterable v-model="form.nationality" style="width: 100%;"> 101 <template #default="scope">
102 <el-input v-model="scope.row.lastName" size="small"/>
103 </template>
104 </el-table-column>
105 <el-table-column prop="fristName" :label="'firstName'" min-width="100">
106 <template #default="scope">
107 <el-input v-model="scope.row.fristName" size="small"/>
108 </template>
109 </el-table-column>
110 <el-table-column prop="sex" :label="language==0?'性别':'Gender'" width="100">
111 <template #default="scope">
112 <el-select v-model="scope.row.sex" size="small">
113 <el-option label="male" value="0"/>
114 <el-option label="female" value="1"/>
115 </el-select>
116 </template>
117 </el-table-column>
118 <el-table-column prop="nationality" :label="language==0?'国籍':'Nationality'" width="110px">
119 <template #default="scope">
120 <el-select v-model="scope.row.nationality" size="small" filterable>
94 <el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName" 121 <el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
95 :value="item.id"/> 122 :value="item.id"/>
96 </el-select> 123 </el-select>
97 </el-form-item> 124 </template>
98 <el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth"> 125 </el-table-column>
99 <el-date-picker 126 <el-table-column prop="birth" :label="language==0?'出生日期':'Birth'" width="130px">
100 v-model="form.birth" 127 <template #default="scope">
128 <el-date-picker size="small"
129 v-model="scope.row.birthday"
101 style="width: 100%;" placeholder="YYYY-MM-DD" 130 style="width: 100%;" placeholder="YYYY-MM-DD"
102 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" 131 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
103 /> 132 />
104 </el-form-item> 133 </template>
105 134 </el-table-column>
106 <el-form-item :label="language==0?'护照号':'Passport No.'" required prop="passportNo"> 135 <el-table-column prop="passportNo" :label="language==0?'护照号':'Passport No.'" width="110px">
107 <el-input v-model="form.passportNo"/> 136 <template #default="scope">
108 </el-form-item> 137 <el-input v-model="scope.row.passportNo" size="small"/>
109 <el-form-item :label="language==0?'护照签发日':'Date of Arrival'" required prop="arrival"> 138 </template>
139 </el-table-column>
140 <el-table-column prop="expiryDate" :label="language==0?'护照签发日':'Expiry Date'" width="130px">
141 <template #default="scope">
110 <el-date-picker 142 <el-date-picker
111 v-model="form.arrival" placeholder="YYYY-MM-DD" 143 v-model="scope.row.issueDate" size="small"
112 style="width: 100%;" 144 style="width: 100%;" placeholder="YYYY-MM-DD"
113 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" 145 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
114 /> 146 />
115 </el-form-item> 147 </template>
116 <el-form-item :label="language==0?'护照过期日':'Date of Departure'" required prop="departure"> 148 </el-table-column>
149 <el-table-column prop="arrival" :label="language==0?'护照过期日':'Expiration date'" width="130px">
150 <template #default="scope">
117 <el-date-picker 151 <el-date-picker
118 v-model="form.departure" 152 v-model="scope.row.expiryDate" size="small"
119 style="width: 100%;" placeholder="YYYY-MM-DD" 153 style="width: 100%;" placeholder="YYYY-MM-DD"
120 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" 154 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
121 /> 155 />
122 </el-form-item> 156 </template>
157 </el-table-column>
158 <el-table-column label="Actions">
159 <template #default="scope">
160 <el-button type="danger" size="small" @click="delPassportInfo(scope.row)">
161 {{ language == 0 ? '删除' : 'Delete' }}
162 </el-button>
163 </template>
164 </el-table-column>
165 </el-table>
166
167 </div>
168
123 </div> 169 </div>
124 <!-- 补充材料--> 170 <!-- 补充材料-->
125 <el-form-item :label="language==0?'补充材料':'Additional Documents'" required prop="additionalDocuments"> 171 <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files">
126 <file-upload v-model="form.additionalDocuments" :limit="1" :is-show-tip="false" 172 <file-upload v-model="form.files" :limit="1" :is-show-tip="false"
127 :button-text="language==0?'上传':'Upload'"/> 173 :button-text="language==0?'上传':'Upload'"/>
128 </el-form-item> 174 </el-form-item>
129 175
...@@ -145,18 +191,21 @@ import {useStorage} from "@vueuse/core/index"; ...@@ -145,18 +191,21 @@ import {useStorage} from "@vueuse/core/index";
145 import {getCurrentInstance, watch} from "vue"; 191 import {getCurrentInstance, watch} from "vue";
146 import {nextTick} from "@vue/runtime-core"; 192 import {nextTick} from "@vue/runtime-core";
147 import {ElMessage, ElMessageBox} from "element-plus"; 193 import {ElMessage, ElMessageBox} from "element-plus";
148 import {addInvitation, countryList} from "@/apiPc/match"; 194 import {addInvitation, associationList, countryList, getVisaInfo} from "@/apiPc/match";
149 import ImageUpload from "@/components/ImageUpload"; 195 import ImageUpload from '@/components/ImageUpload/index.vue'
150 196 import useUserStore from "@/store/modules/user";
197 const user = useUserStore().user
151 const {proxy} = getCurrentInstance() 198 const {proxy} = getCurrentInstance()
152 const language = useStorage('language', 0) 199 const language = useStorage('language', 0)
153 const form = ref({ 200 const form = ref({
154 gender:'0' 201 gender:'0',
202 cptVisaInfoBos:[]
155 }) 203 })
156 const show = ref(false) 204 const show = ref(false)
157 const showR = ref(false) 205 const showR = ref(false)
158 const title = ref('') 206 const title = ref('')
159 const countrys = ref([]) 207 const countrys = ref([])
208 const mnaList = ref([])
160 const cptId = ref('') 209 const cptId = ref('')
161 const rules = ref( 210 const rules = ref(
162 { 211 {
...@@ -174,31 +223,40 @@ const open = (params) => { ...@@ -174,31 +223,40 @@ const open = (params) => {
174 show.value = true 223 show.value = true
175 title.value = params.title 224 title.value = params.title
176 cptId.value = params.cptId 225 cptId.value = params.cptId
226 form.value.userId = user.userId
227 form.value.cptId = params.cptId
228 getCountryList()
229 getMNAList()
230 getVisa()
177 } 231 }
178 defineExpose({open}) 232 defineExpose({open})
179 watch(show, (value) => { 233
180 if (!value) { 234 function getVisa() {
181 form.value = { 235 getVisaInfo({
182 sex: '0' 236 userId: user.userId,
183 } 237 cptId: cptId.value
184 if (language.value == 0) { 238 }).then(res=>{
185 form.value.countryId = 240 239 console.log(res)
186 } 240 if(res.data && res.data.status!=2){
241 showR.value = true
242 form.value = res.data
243 } else {
244 showR.value = false
187 } 245 }
188 nextTick(() => {
189 // proxy.$refs['dialogRef'].clearValidate()
190 }) 246 })
191 }) 247 }
192 getCountryList()
193
194 function getCountryList() { 248 function getCountryList() {
195 countryList().then(res => { 249 countryList().then(res => {
196 countrys.value = res.data 250 countrys.value = res.data
197 }) 251 })
198 } 252 }
199 253 function getMNAList() {
254 associationList().then(res=>{
255 mnaList.value = res.data
256 })
257 }
200 const submit = () => { 258 const submit = () => {
201 proxy.$refs.iformRef.validate(valid => { 259 console.log(form.value)
202 if (form.value.email.indexOf('@') == -1) { 260 if (form.value.email.indexOf('@') == -1) {
203 if (language.value == 0) { 261 if (language.value == 0) {
204 ElMessage.warning('请填写正确的邮箱') 262 ElMessage.warning('请填写正确的邮箱')
...@@ -207,6 +265,13 @@ const submit = () => { ...@@ -207,6 +265,13 @@ const submit = () => {
207 } 265 }
208 return 266 return
209 } 267 }
268 // if (Array.isArray(form.value.passportCopy)) {
269 // form.value.passportCopy = form.value.passportCopy[0].url
270 // }
271 if (form.value.files && Array.isArray(form.value.files)) {
272 form.value.files = form.value.files[0]?.url
273 }
274 proxy.$refs.iformRef.validate(valid => {
210 if (valid) { 275 if (valid) {
211 ElMessageBox.confirm( 276 ElMessageBox.confirm(
212 language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it', 277 language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it',
...@@ -216,9 +281,6 @@ const submit = () => { ...@@ -216,9 +281,6 @@ const submit = () => {
216 type: 'warning' 281 type: 'warning'
217 }).then(() => { 282 }).then(() => {
218 form.value.cptId = cptId.value 283 form.value.cptId = cptId.value
219 if (Array.isArray(form.value.passportCopy)) {
220 form.value.passportCopy = form.value.passportCopy[0].url
221 }
222 addInvitation(form.value).then((res) => { 284 addInvitation(form.value).then((res) => {
223 ElMessage.success(language.value == 0 ?'提交成功':'Successfully!') 285 ElMessage.success(language.value == 0 ?'提交成功':'Successfully!')
224 showR.value = true 286 showR.value = true
...@@ -227,19 +289,41 @@ const submit = () => { ...@@ -227,19 +289,41 @@ const submit = () => {
227 } 289 }
228 }) 290 })
229 } 291 }
230 const conti = () => { 292
231 showR.value = false 293 const getPassportInfo = (res) => {
232 form.value = { 294 console.log(res.data)
233 gender: '0' 295 if(res.data){
296 var obj = {
297 position:'',
298 lastName:'',
299 fristName:res.data.name,
300 sex:res.data.sex,
301 birthday:res.data.birth?.slice(0,10),
302 nationality:'',
303 passportNo:res.data.code,
304 issueDate:'',
305 expiryDate:'',
234 } 306 }
307 form.value.cptVisaInfoBos.push(obj)
308 } else {
309 ElMessage.error(res.msg)
310 }
311 }
312 function delPassportInfo(row) {
313
235 } 314 }
315
236 </script> 316 </script>
237 317
238 <style scoped lang="scss"> 318 <style scoped lang="scss">
239 .tip{font-size: 12px;} 319 .tip{font-size: 12px;}
240 .boxInvitation { 320 .boxInvitation {
241 width: 90%; 321 width: 96%;
242 margin: auto 322 margin:20px auto 0;
243 } 323 }
244 h4{font-size: 15px;line-height: 1.6;} 324 h4{font-size: 15px;line-height: 1.6;}
325 .cptVisaInfoBosTable{padding: 15px;margin-bottom: 20px;
326 border: 1px dashed #ebeef5;
327 :deep(.el-table .el-table__header-wrapper th){font-size: 12px;}
328 }
245 </style> 329 </style>
......
...@@ -142,7 +142,7 @@ function popRemark(type) { ...@@ -142,7 +142,7 @@ function popRemark(type) {
142 } 142 }
143 143
144 if (type === 0 && language.value === 0) { //签证服务 144 if (type === 0 && language.value === 0) { //签证服务
145 ElMessage.warning('请切换英文页面办理,仅英文页面可以点击') 145 ElMessage.warning('请切换英文页面办理')
146 return 146 return
147 } 147 }
148 148
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!