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}
}
}
......
......@@ -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!