22d7edab by 杨炀

no message

1 parent 156f1654
......@@ -133,6 +133,13 @@ export function createPalPay(data) {
data: data
})
}
export function createOfflinePay(data) {
return request({
url: `/ota/norder/offlinePay`,
method: 'post',
data: data
})
}
export function callbackPalPay(tradeNo) {
return request({
......@@ -143,6 +150,14 @@ export function callbackPalPay(tradeNo) {
}
})
}
//对公 上传凭证
export function renewalProof(data) {
return request({
url: `/ota/norder/renewalProof`,
method: 'put',
data: data
})
}
export function getInvoiceByActiveId(query) {
return request({
......@@ -151,6 +166,13 @@ export function getInvoiceByActiveId(query) {
params: query
})
}
export function getRoomBillPayment(query) {
return request({
url: `/ota/orderRoom/getRoomBillPayment`,
method: 'get',
params: query
})
}
export function getCanInvoiceBills(query) {
return request({
......
......@@ -86,6 +86,12 @@ export function countryList() {
method: 'get'
})
}
export function associationList() {
return request({
url: `/system/association/getList`,
method: 'get'
})
}
export function getAssociation() {
return request({
......@@ -763,11 +769,19 @@ export function getProjectByCptId(cptId, query) {
export function addInvitation(data) {
return request({
url: `/league/person`,
// url: `/league/person`,
url: `/league/visa`,
method: 'post',
data: data
})
}
export function getVisaInfo(query) {
return request({
url: `/league/visa/getVisa`,
method: 'get',
params: query
})
}
// 酒店预约查询
export function hotelList(params) {
......
......@@ -41,7 +41,7 @@
:on-preview="handlePictureCardPreview"
:file-list="fileListInUpload"
:class="{ hide: fileList.length >= limit }"
name="image"
:name="paramName"
:disabled="disabled"
:accept="accept"
>
......@@ -94,6 +94,10 @@ const props = defineProps({
type: Number,
default: 5
},
paramName: {
type: String,
default: 'image'
},
// 文件类型, 例如['png', 'jpg', 'jpeg']
fileType: {
type: Array,
......@@ -127,7 +131,7 @@ const accept = computed(() => {
})
const { proxy } = getCurrentInstance()
const emit = defineEmits(['update:modelValue'])
const emit = defineEmits(['update:modelValue','response'])
const number = ref(0)
const uploadList = ref([])
const dialogImageUrl = ref('')
......@@ -211,15 +215,20 @@ function handleExceed() {
// 上传成功回调
function handleUploadSuccess(res, file) {
if (res.code === 200) {
uploadList.value.push({ name: file.name, url: res.data || res.msg })
uploadedSuccessfully()
if(!actionUrl.value){
if (res.code === 200) {
uploadList.value.push({ name: file.name, url: res.data || res.msg })
uploadedSuccessfully()
} else {
number.value--
proxy.$modal.closeLoading()
proxy.$modal.msgError(res.msg)
proxy.$refs.imageUpload.handleRemove(file)
uploadedSuccessfully()
}
} else {
number.value--
proxy.$modal.closeLoading()
proxy.$modal.msgError(res.msg)
proxy.$refs.imageUpload.handleRemove(file)
uploadedSuccessfully()
emit('response', res)
}
}
......
......@@ -5,9 +5,9 @@
<template #item="{ element }">
<div class="fileItem el-upload-list__item is-success animated">
<img
:src="element.url"
alt=""
class="el-upload-list__item-thumbnail"
:src="element.url"
alt=""
class="el-upload-list__item-thumbnail"
>
<div class="hover-actions">
<span @click="handlePictureCardPreview(element)">
......@@ -30,14 +30,14 @@
<!--预览-->
<el-dialog
v-model="dialogVisible"
title="预览"
width="800px"
append-to-body
v-model="dialogVisible"
title="预览"
width="800px"
append-to-body
>
<img
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
:src="dialogImageUrl"
style="display: block; max-width: 100%; margin: 0 auto"
>
</el-dialog>
......@@ -57,26 +57,27 @@
</div>
<!--裁剪-->
<el-dialog
v-model="open"
title="裁剪图片"
width="600px"
append-to-body
@opened="modalOpened"
@close="closeDialog"
v-model="open"
title="裁剪图片"
width="600px"
append-to-body
@opened="modalOpened"
@close="closeDialog"
>
<el-row>
<el-col :style="{ height: '350px' }">
<vue-cropper
v-if="visible"
ref="cropper"
:img="options.img"
:info="true"
:auto-crop="options.autoCrop"
:auto-crop-width="options.autoCropWidth"
:auto-crop-height="options.autoCropHeight"
:fixed-box="options.fixedBox"
output-type="png"
@realTime="realTime"
v-if="visible"
ref="cropper"
:img="options.img"
:info="true"
:auto-crop="options.autoCrop"
:auto-crop-width="options.autoCropWidth"
:auto-crop-height="options.autoCropHeight"
:fixed-box="options.fixedBox"
output-type="png"
:output-size="1"
@realTime="realTime"
/>
<!-- <img :src="options.img"> -->
</el-col>
......@@ -85,11 +86,11 @@
<el-row>
<el-col :lg="2" :md="2">
<el-upload
action="#"
:http-request="requestUpload"
:show-file-list="false"
:before-upload="beforeUpload"
:accept="accept"
action="#"
:http-request="requestUpload"
:show-file-list="false"
:before-upload="beforeUpload"
:accept="accept"
>
<el-button>
选择
......@@ -154,7 +155,7 @@ const props = defineProps({
type: Boolean,
default: false
}
})
const accept = computed(() => {
return _.map(props.fileType, (t) => {
......@@ -192,36 +193,36 @@ const options = reactive({
const fileList = ref([])
watch(
() => props.modelValue,
(val) => {
if (val) {
// 首先将值转为数组
const list = Array.isArray(val) ? val : props.modelValue.split(',')
// 然后将数组转为对象数组
fileList.value = list.map((item) => {
if (typeof item === 'string') {
if (item.indexOf('http') === -1) {
item = { url: baseUrl + item }
} else {
item = { url: item }
() => props.modelValue,
(val) => {
if (val) {
// 首先将值转为数组
const list = Array.isArray(val) ? val : props.modelValue.split(',')
// 然后将数组转为对象数组
fileList.value = list.map((item) => {
if (typeof item === 'string') {
if (item.indexOf('http') === -1) {
item = { url: baseUrl + item }
} else {
item = { url: item }
}
}
}
return item
})
} else {
fileList.value = []
return []
}
},
{ deep: true, immediate: true }
return item
})
} else {
fileList.value = []
return []
}
},
{ deep: true, immediate: true }
)
watch(
() => fileList.value.length,
(value) => {
showUpload.value = value !== props.limit
}, { deep: true, immediate: true }
() => fileList.value.length,
(value) => {
showUpload.value = value !== props.limit
}, { deep: true, immediate: true }
)
......@@ -259,7 +260,7 @@ function beforeUpload(file) {
}
if (file.type.indexOf('image/') == -1) {
proxy.$modal.msgError(
'文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。'
'文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。'
)
} else {
const reader = new FileReader()
......@@ -281,7 +282,7 @@ function uploadImg() {
open.value = false
visible.value = false
}
// request({
// url: '/upload/uploadImgToLocalServer',
......
......@@ -352,9 +352,11 @@
<el-row align="middle" justify="space-between">
<el-col :lg="12">
<div v-if="form.payDate">{{ language == 0 ? '支付时间' : 'Payment Time' }}{{ form.payDate }}</div>
<div v-if="form.payDate" class="mt10">{{ language == 0 ? '支付方式' : 'Payment Method' }}
<div class="mt10">{{ language == 0 ? '支付方式' : 'Payment Method' }}
<span v-if="form.paymentType=='1'">{{ language == 0 ? '微信支付' : 'WePay' }}</span>
<span v-if="form.paymentType=='3'">PayPal</span>
<span v-else-if="form.paymentType=='3'">PayPal</span>
<span v-else-if="form.paymentType=='4'|| form.paymentType=='5'">{{language == 0 ?'对公转账':'Bank Transfer'}}</span>
<span v-else>--</span>
</div>
</el-col>
<el-col :lg="12" class="result">
......@@ -410,7 +412,7 @@
</el-button>
</div>
<div v-if="form.viewStatus == '0'&&(form.surplus!='0,0'&&form.surplus!='0')" class="pd20">
<div v-if="form.viewStatus == '0'&&(form.surplus!='0,0'&&form.surplus!='0')&&form.paymentType!='4'&&form.paymentType!='5'" class="pd20">
<div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div>
<div class="mt20">
......@@ -457,6 +459,12 @@
fill="#003087" p-id="22662"></path>
</svg>
</el-radio>
<el-radio value="4" v-if="language==0&&type=='hotel'" border>
对公打款
</el-radio>
<el-radio value="5" v-if="language==1&&type=='hotel'" border>
Corporate payment
</el-radio>
</el-radio-group>
<div v-if="payType == '2'&&wePayCodeUrl">
<div class="payImgbox flexCenter">
......@@ -481,6 +489,29 @@
</div>
</div>
</div>
<!-- 线下支付且待支付状态-->
<el-row v-if="(form.paymentType=='4'|| form.paymentType=='5')&&form.viewStatus=='0'" class="proofBox">
<el-col :lg="12">
<div class="flex">
<label style="width: 10em">
{{ language==0?'上传缴费凭证:':'Upload proof:' }}
</label>
<file-upload :is-show-tip="false" v-model="form.pic" :limit="1"/>
</div>
</el-col>
<el-col :lg="12">
<el-button class="fr" text type="primary" @click="downOfflineInvoice" icon="download">
{{ language == 0 ? '下载缴费单' : 'Download Invoice' }}
</el-button>
</el-col>
<!-- 如果没审批通过-->
<el-col :lg="24" align="center" justify="center">
<el-button round type="primary" @click="submitProof">提交凭证</el-button>
</el-col>
</el-row>
<el-row align="middle" class="mt20 mb60" justify="center">
<el-col :span="24" class="text-center">
<el-button v-if="!hideconfirmbtn&&form.viewStatus == '0'" class="btn-lineG w200px" round type="primary"
......@@ -493,6 +524,7 @@
<el-button v-if="form.viewStatus == '0'" class="underline" link @click="cancel">
{{ language == 0 ? '取消订单' : 'Cancel Order' }}
</el-button>
</el-col>
</el-row>
......@@ -540,6 +572,19 @@
</div>
</div>
</el-dialog>
<el-dialog v-model="showOfflineSuccessDialog" :title="language==0?'提示':'Tip'" width="460px">
<el-result
:sub-title="language==0?'请在7日内上传凭证,否则订单取消':'Please upload the payment receipt within 7 days, otherwise the order will be cancelled'"
:title="language==0?'订单已提交':'Order submitted'"
icon="success"
>
<template #extra>
<el-button class="btn-lineG w200px" round type="primary" @click="downOfflineInvoice">
{{ language == 0 ? '下载缴费单' : 'Download Invoice' }}
</el-button>
</template>
</el-result>
</el-dialog>
</div>
</template>
......@@ -563,16 +608,24 @@ const payType = ref('2')
const orderId = ref(route.query.orderId)
const matchId = ref()
const groupId = ref()
const proofUrl = ref()
import useUserStore from "@/store/modules/user";
import FileUpload from "@/components/FileUpload";
import {useStorage} from "@vueuse/core/index";
import {ElMessage, ElMessageBox} from "element-plus";
import {
cancelOrder,
cancelOrder2, getBaseInfoByActiveId,
cancelOrder2,
createOfflinePay,
getBaseInfoByActiveId,
getCarBilldetailbyId,
getFoodBilldetailbyId,
getMealOrderInfoByLogex, getPhotoOrderInfo, getPhotoOrderInfoByLogex, getTicketInfoByActivityId, getTicketOrderInfo,
getMealOrderInfoByLogex,
getPhotoOrderInfo,
getPhotoOrderInfoByLogex,
getRoomBillPayment,
getTicketInfoByActivityId,
getTicketOrderInfo, renewalProof,
} from "@/apiPc/booking";
import dayjs from 'dayjs'
import {delPerson} from "@/api/exam/person";
......@@ -588,6 +641,7 @@ const errorBox = ref(false)
const hideconfirmbtn = ref(false)
const remark = ref('')
const showSJDialog = ref(false)
const showOfflineSuccessDialog = ref(false)
const loading = ref(false)
const lpName = ref('')
const matchForm = ref({})
......@@ -671,6 +725,10 @@ function getData() {
form.value.messageObj = JSON.parse(form.value.message) || {}
form.value.extJsonObj = JSON.parse(form.value.extJson) || {}
matchId.value = form.value.extJsonObj?.activeId
//如果对公打款-
if(form.value.paymentType=='4' || form.value.paymentType=='5'){
hideconfirmbtn.value = true
}
}).catch(err => {
console.log(err)
errorBox.value = true
......@@ -738,6 +796,17 @@ function goPay() {
}
})
}
if (payType.value == '4' || payType.value == '5') {
//对公打款
booking.createOfflinePay({orderId: orderId.value}).then(res => {
console.log(res)
// booking.getRoomBillPayment({orderId: orderId.value}).then(res => {
// 显示付款单信息-上传凭证
hideconfirmbtn.value = true
showOfflineSuccessDialog.value = true
// })
})
}
}
let handle;
......@@ -942,6 +1011,33 @@ const showSJ = () => {
showSJDialog.value = false
getData()
}
const downOfflineInvoice = () => {
//下载 对公转账缴费单
var obj = {
orderId: orderId.value
}
proxy.download(`/ota/orderRoom/exportRoomBillPayment`, {
...obj
}, `Invoice_${new Date().getTime()}.pdf`)
}
const submitProof = () => {
//提交凭证
if(!form.value.pic){
ElMessage.warning(language.value == 0 ? '请上传凭证' : 'Please upload a voucher')
return
}
booking.renewalProof({
id: orderId.value,
pic: form.value.pic[0]?.url
}).then(res => {
ElMessage.success({
message: language.value == 0 ? '凭证提交成功' : 'Voucher submission successful',
type: 'success'
})
getData()
})
}
</script>
<style lang="scss" scoped>
......@@ -1109,4 +1205,5 @@ const showSJ = () => {
.price {
color: orange;
}
.proofBox{padding: 20px;margin: 0 20px;border: 1px dashed #999;}
</style>
......
......@@ -114,7 +114,7 @@
</span>
</el-col>
<el-col :lg="6" :md="16" :sm="16" :xs="16">
<div class="text-right mb20 text-danger">
<div class="text-right mb20 text-danger" v-if="b.paymentType!='4'&&b.paymentType!='5'">
<el-countdown
v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')"
:value="b.countdown"
......@@ -134,7 +134,8 @@
</el-button>
<el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" class="mb10"
plain round size="small" type="primary" @click="goDetail(b)">
{{ language == 0 ? '支付' : 'Pay' }}
<span v-if="b.paymentType=='4'||b.paymentType=='5'">{{language == 0 ? '上传凭证' : 'Upload Receipt'}}</span>
<span v-else>{{ language == 0 ? '支付' : 'Pay' }}</span>
</el-button>
<el-button v-if="b.viewStatus==0" class="mb10" plain round size="small" type="warning"
@click="cancel(b)">
......
......@@ -154,7 +154,7 @@ function popRemark(type) {
if(type == '0'){
// 签证
if(language.value === 0){
ElMessage.warning('请切换英文页面办理,仅英文页面可以点击')
ElMessage.warning('请切换英文页面办理')
return
} else {
applyInvitation()
......@@ -235,7 +235,6 @@ function goBooking(n) {
margin: 0 5%;width: 75px;height: 75px;
}
}
.itemBox_en{}
.itemBox_en .item {
flex-direction: column;text-align: center;text-transform: uppercase;
height: 100%;
......@@ -258,8 +257,9 @@ height: 100%;
}
@media screen and (max-width: 768px) {
.itemBox,.itemBox_en{padding: 0 20px 20px}
.item{font-size: 16px;
.itemBox,.itemBox_en{padding: 0 20px 0}
.item{font-size: 16px;height: auto !important;
padding: 15px 0;
img{width: 50px;height: 50px}
}
}
......
......@@ -4,126 +4,172 @@
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
>
<div class="boxInvitation pd20">
<div class="boxInvitation">
<div class="text-center pd20" v-if="showR">
<img class="mauto" src="@/assets/dance/ok.png"/>
<!-- <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>-->
<h4 class="text-center" v-if="language == 0">
我们已收到您的邀请函申请,并将尽快处理。请耐心等待。
</h4>
<h4 v-else>
<!-- 提交成功等待审核-->
<h3 v-if="form.status">
<span v-if="form.status==0">In Approval</span>
<span v-if="form.status==1">Approved</span>
</h3>
<h4>
Your invitation letter application has been received,<br/>
and we will process it as soon as possible.
<br/>
Please be patient while waiting.
</h4>
<el-button size="large" type="primary" @click="conti" round class="btn-lineG">
{{ language == 0 ? '继续提交' : 'Continue To Submit' }}
</el-button>
</div>
<el-form :model="form" :rules="rules" ref="iformRef" label-position="top" v-else>
<el-form-item :label="language==0?'申请人类别':'Applicant Type'">
<el-select v-model="form.type">
<el-form-item :label="language==0?'申请人类别':'Applicant Type'" required prop="applicatType">
<el-select v-model="form.applicatType">
<el-option label="MNA" value="1"/>
<el-option label="Technical Officials" value="2"/>
<el-option label="WT Staff" value="3"/>
<el-option label="Supplier" value="4"/>
<el-option label="Other" value="5"/>
</el-select>
<el-input v-if="form.type==5"/>
<el-input v-if="form.applicatType==5" placeholder="Please specify" v-model="form.remarks"/>
</el-form-item>
<el-form-item :label="language==0?'邀请函类别':'Application Type'" required prop="type">
<el-select v-model="form.type">
<el-option label="一般邀请函" value="1"/>
<el-option label="TE/PU(外办)邀请函" value="2"/>
<el-form-item :label="language==0?'邀请函类别':'Application Type'" required prop="invitationType">
<el-select v-model="form.invitationType">
<el-option :label="language==0?'一般邀请函':'General Invitation'" value="1"/>
<el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU(Foreign) Invitation'" value="2"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'是否需要中文邀请函':'Chinese Invitation'">
<el-radio-group>
<el-radio :label="1">{{ language==0?'是':'Yes' }}</el-radio>
<el-radio :label="0">{{ language==0?'否':'No' }}</el-radio>
<el-form-item :label="language==0?'是否需要中文邀请函':'Chinese Invitation'" required prop="chinese">
<el-radio-group v-model="form.chinese">
<el-radio :value="1">{{ language==0?'是':'Yes' }}</el-radio>
<el-radio :value="0">{{ language==0?'否':'No' }}</el-radio>
</el-radio-group>
</el-form-item>
<!-- 一般信息-->
<el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" required prop="teamName">
<el-input v-model="form.teamName"/>
<el-form-item :label="language==0?'国家/地区协会名':'MNA/Team Name'" :required="form.applicatType!=2" prop="associationCode">
<el-select v-model="form.associationCode" filterable>
<el-option v-for="item in mnaList" :key="item.code" :label="language==0?item.nameCn:item.nameEn"
:value="item.code"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'国家/地区协会地址':'MNA/Team Address'" required prop="teamName">
<el-input v-model="form.teamName"/>
<el-form-item :label="language==0?'国家/地区协会地址':'MNA/Team Address'" :required="form.applicatType!=2" prop="associationAddress">
<el-input v-model="form.associationAddress"/>
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="email">
<el-input v-model="form.email" type="email"/>
<div class="tip"></div>
</el-form-item>
<el-form-item :label="language==0?'姓名':'Full Name'" required prop="name">
<el-input v-model="form.name"/>
<el-form-item :label="language==0?'姓名':'Full Name'" required prop="fullName">
<el-input v-model="form.fullName"/>
</el-form-item>
<el-form-item :label="language==0?'联系人职位':'Position'" required prop="position">
<el-select v-model="form.position">
<el-option label="经理" value="1"/>
<el-option label="领队" value="2"/>
<el-option label="教练" value="3"/>
<el-option label="其他" value="4"/>
<el-option label="Manager" value="0"/>
<el-option label="Team leader" value="1"/>
<el-option label="Coach" value="2"/>
<el-option label="Other" value="3"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Mobile'" required prop="mobile">
<el-input v-model="form.mobile"/>
<el-form-item :label="language==0?'联系电话':'Phone'" required prop="phone">
<el-input v-model="form.phone"/>
</el-form-item>
<el-form-item :label="language==0?'签证办理中国大使馆':'Chinese Embassy Visas Office'" required prop="embassy">
<el-input v-model="form.embassy"/>
</el-form-item>
<el-form-item :label="language==0?'中国大使馆邮箱':'Chinese Embassy Email'" required prop="embassyEmail">
<el-input v-model="form.embassyEmail"/>
</el-form-item>
<!-- 签证办理中国大使馆 -->
<!-- 中国大使馆邮箱 -->
<!--上传护照,多张-->
<el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy">
<image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false"
<div class="cptVisaInfoBosTable">
<el-form-item :label="language==0?'有效证件':'Passport Copy'" required>
<ImageUpload v-model="form.passportCopy" :is-show-tip="false"
:action="'/league/visa/getPersonInfoFromCert/3'"
:button-text="language==0?'上传':'Upload'"/>
paramName="pic"
:button-text="language==0?'上传':'Upload'" @response="getPassportInfo"
/>
</el-form-item>
<!--识别信息-->
<div>
<el-form-item :label="language==0?'性别':'Gender'" required prop="gender">
<el-radio-group v-model="form.gender">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality">
<el-select filterable v-model="form.nationality" style="width: 100%;">
<el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth">
<el-date-picker
v-model="form.birth"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'护照号':'Passport No.'" required prop="passportNo">
<el-input v-model="form.passportNo"/>
</el-form-item>
<el-form-item :label="language==0?'护照签发日':'Date of Arrival'" required prop="arrival">
<el-date-picker
v-model="form.arrival" placeholder="YYYY-MM-DD"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'护照过期日':'Date of Departure'" required prop="departure">
<el-date-picker
v-model="form.departure"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<div v-if="form.cptVisaInfoBos?.length>0" class="border">
<el-table :data="form.cptVisaInfoBos" border size="small">
<el-table-column prop="position" :label="'position'" min-width="100">
<template #default="scope">
<el-input v-model="scope.row.position" size="small"/>
</template>
</el-table-column>
<el-table-column prop="lastName" :label="'lastName'" min-width="100">
<template #default="scope">
<el-input v-model="scope.row.lastName" size="small"/>
</template>
</el-table-column>
<el-table-column prop="fristName" :label="'firstName'" min-width="100">
<template #default="scope">
<el-input v-model="scope.row.fristName" size="small"/>
</template>
</el-table-column>
<el-table-column prop="sex" :label="language==0?'性别':'Gender'" width="100">
<template #default="scope">
<el-select v-model="scope.row.sex" size="small">
<el-option label="male" value="0"/>
<el-option label="female" value="1"/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="nationality" :label="language==0?'国籍':'Nationality'" width="110px">
<template #default="scope">
<el-select v-model="scope.row.nationality" size="small" filterable>
<el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"/>
</el-select>
</template>
</el-table-column>
<el-table-column prop="birth" :label="language==0?'出生日期':'Birth'" width="130px">
<template #default="scope">
<el-date-picker size="small"
v-model="scope.row.birthday"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column prop="passportNo" :label="language==0?'护照号':'Passport No.'" width="110px">
<template #default="scope">
<el-input v-model="scope.row.passportNo" size="small"/>
</template>
</el-table-column>
<el-table-column prop="expiryDate" :label="language==0?'护照签发日':'Expiry Date'" width="130px">
<template #default="scope">
<el-date-picker
v-model="scope.row.issueDate" size="small"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column prop="arrival" :label="language==0?'护照过期日':'Expiration date'" width="130px">
<template #default="scope">
<el-date-picker
v-model="scope.row.expiryDate" size="small"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column label="Actions">
<template #default="scope">
<el-button type="danger" size="small" @click="delPassportInfo(scope.row)">
{{ language == 0 ? '删除' : 'Delete' }}
</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<!-- 补充材料-->
<el-form-item :label="language==0?'补充材料':'Additional Documents'" required prop="additionalDocuments">
<file-upload v-model="form.additionalDocuments" :limit="1" :is-show-tip="false"
<el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files">
<file-upload v-model="form.files" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
</el-form-item>
......@@ -145,18 +191,21 @@ import {useStorage} from "@vueuse/core/index";
import {getCurrentInstance, watch} from "vue";
import {nextTick} from "@vue/runtime-core";
import {ElMessage, ElMessageBox} from "element-plus";
import {addInvitation, countryList} from "@/apiPc/match";
import ImageUpload from "@/components/ImageUpload";
import {addInvitation, associationList, countryList, getVisaInfo} from "@/apiPc/match";
import ImageUpload from '@/components/ImageUpload/index.vue'
import useUserStore from "@/store/modules/user";
const user = useUserStore().user
const {proxy} = getCurrentInstance()
const language = useStorage('language', 0)
const form = ref({
gender:'0'
gender:'0',
cptVisaInfoBos:[]
})
const show = ref(false)
const showR = ref(false)
const title = ref('')
const countrys = ref([])
const mnaList = ref([])
const cptId = ref('')
const rules = ref(
{
......@@ -174,39 +223,55 @@ const open = (params) => {
show.value = true
title.value = params.title
cptId.value = params.cptId
form.value.userId = user.userId
form.value.cptId = params.cptId
getCountryList()
getMNAList()
getVisa()
}
defineExpose({open})
watch(show, (value) => {
if (!value) {
form.value = {
sex: '0'
}
if (language.value == 0) {
form.value.countryId = 240
function getVisa() {
getVisaInfo({
userId: user.userId,
cptId: cptId.value
}).then(res=>{
console.log(res)
if(res.data && res.data.status!=2){
showR.value = true
form.value = res.data
} else {
showR.value = false
}
}
nextTick(() => {
// proxy.$refs['dialogRef'].clearValidate()
})
})
getCountryList()
}
function getCountryList() {
countryList().then(res => {
countrys.value = res.data
})
}
function getMNAList() {
associationList().then(res=>{
mnaList.value = res.data
})
}
const submit = () => {
proxy.$refs.iformRef.validate(valid => {
if (form.value.email.indexOf('@') == -1) {
if (language.value == 0) {
ElMessage.warning('请填写正确的邮箱')
} else {
ElMessage.warning('Please fill in the correct email')
}
return
console.log(form.value)
if (form.value.email.indexOf('@') == -1) {
if (language.value == 0) {
ElMessage.warning('请填写正确的邮箱')
} else {
ElMessage.warning('Please fill in the correct email')
}
return
}
// if (Array.isArray(form.value.passportCopy)) {
// form.value.passportCopy = form.value.passportCopy[0].url
// }
if (form.value.files && Array.isArray(form.value.files)) {
form.value.files = form.value.files[0]?.url
}
proxy.$refs.iformRef.validate(valid => {
if (valid) {
ElMessageBox.confirm(
language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it',
......@@ -216,9 +281,6 @@ const submit = () => {
type: 'warning'
}).then(() => {
form.value.cptId = cptId.value
if (Array.isArray(form.value.passportCopy)) {
form.value.passportCopy = form.value.passportCopy[0].url
}
addInvitation(form.value).then((res) => {
ElMessage.success(language.value == 0 ?'提交成功':'Successfully!')
showR.value = true
......@@ -227,19 +289,41 @@ const submit = () => {
}
})
}
const conti = () => {
showR.value = false
form.value = {
gender: '0'
const getPassportInfo = (res) => {
console.log(res.data)
if(res.data){
var obj = {
position:'',
lastName:'',
fristName:res.data.name,
sex:res.data.sex,
birthday:res.data.birth?.slice(0,10),
nationality:'',
passportNo:res.data.code,
issueDate:'',
expiryDate:'',
}
form.value.cptVisaInfoBos.push(obj)
} else {
ElMessage.error(res.msg)
}
}
function delPassportInfo(row) {
}
</script>
<style scoped lang="scss">
.tip{font-size: 12px;}
.boxInvitation {
width: 90%;
margin: auto
width: 96%;
margin:20px auto 0;
}
h4{font-size: 15px;line-height: 1.6;}
.cptVisaInfoBosTable{padding: 15px;margin-bottom: 20px;
border: 1px dashed #ebeef5;
:deep(.el-table .el-table__header-wrapper th){font-size: 12px;}
}
</style>
......
......@@ -142,7 +142,7 @@ function popRemark(type) {
}
if (type === 0 && language.value === 0) { //签证服务
ElMessage.warning('请切换英文页面办理,仅英文页面可以点击')
ElMessage.warning('请切换英文页面办理')
return
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!