Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
杨炀
/
dance-pc
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
22d7edab
authored
2025-03-27 19:08:26 +0800
by
杨炀
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
no message
1 parent
156f1654
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
225 additions
and
81 deletions
src/apiPc/booking.js
src/apiPc/match.js
src/components/ImageUpload/index.vue
src/components/ImageUpload/index3.vue
src/viewsPc/booking/pay.vue
src/viewsPc/center/myReservation.vue
src/viewsPc/components/homeQuick.vue
src/viewsPc/match/components/affix-invitation.vue
src/viewsPc/match/components/quick-row.vue
src/apiPc/booking.js
View file @
22d7eda
...
...
@@ -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
({
...
...
src/apiPc/match.js
View file @
22d7eda
...
...
@@ -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
)
{
...
...
src/components/ImageUpload/index.vue
View file @
22d7eda
...
...
@@ -41,7 +41,7 @@
:on-preview=
"handlePictureCardPreview"
:file-list=
"fileListInUpload"
:class=
"{ hide: fileList.length >= limit }"
name=
"imag
e"
:name=
"paramNam
e"
: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
)
}
}
...
...
src/components/ImageUpload/index3.vue
View file @
22d7eda
...
...
@@ -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',
...
...
src/viewsPc/booking/pay.vue
View file @
22d7eda
...
...
@@ -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>
...
...
src/viewsPc/center/myReservation.vue
View file @
22d7eda
...
...
@@ -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)"
>
...
...
src/viewsPc/components/homeQuick.vue
View file @
22d7eda
...
...
@@ -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
}
}
}
...
...
src/viewsPc/match/components/affix-invitation.vue
View file @
22d7eda
This diff is collapsed.
Click to expand it.
src/viewsPc/match/components/quick-row.vue
View file @
22d7eda
...
...
@@ -142,7 +142,7 @@ function popRemark(type) {
}
if
(
type
===
0
&&
language
.
value
===
0
)
{
//签证服务
ElMessage
.
warning
(
'请切换英文页面办理
,仅英文页面可以点击
'
)
ElMessage
.
warning
(
'请切换英文页面办理'
)
return
}
...
...
Write
Preview
Styling with
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment