Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
jijin
/
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
b40d8e59
authored
2024-08-07 13:46:20 +0800
by
zhangmeng
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
票务
1 parent
b2619165
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
168 additions
and
178 deletions
src/apiPc/booking.js
src/routerPc/en.js
src/viewsPc/booking/ticket/confirmOrder.vue
src/viewsPc/booking/ticket/index.vue
src/viewsPc/booking/ticket/peopleManage.vue
src/apiPc/booking.js
View file @
b40d8e5
This diff is collapsed.
Click to expand it.
src/routerPc/en.js
View file @
b40d8e5
This diff is collapsed.
Click to expand it.
src/viewsPc/booking/ticket/confirmOrder.vue
View file @
b40d8e5
<
template
>
<el-card
class=
"container"
>
<div
v-loading=
"loading"
>
<el-card
class=
"container"
>
<div
v-loading=
"loading"
>
<div
class=
"title"
>
{{
languageFormat
(
language
,
"订单确认"
,
"Order confirmation"
)
}}
</div>
...
...
@@ -23,38 +23,38 @@
<div
class=
"form"
>
<el-form
label-width=
"100px"
>
<el-form-item
:label=
"language == 0 ? '联系人' : 'contact'"
>
<el-input
v-model=
"orderForm.contacts"
:placeholder=
" language == 0 ? '请输入联系人' : 'Please enter the contact'"
style=
"width: 320px"
/>
</el-form-item>
<el-form-item
:label=
"language == 0 ? '联系人电话' : 'contact phone'"
>
<el-input
v-model=
"form.phone"
:placeholder=
" language == 0 ? '请输入联系电话' : 'Please enter the contact phone number'"
style=
"width: 320px"
v-model=
"orderForm.phone"
:placeholder=
" language == 0 ? '请输入联系电话' : 'Please enter the contact phone number'"
style=
"width: 320px"
/>
</el-form-item>
<el-form-item
:label=
"language == 0 ? '观看人' : 'Viewer'"
>
<div
class=
"p_box"
>
<div
class=
"people"
>
<el-checkbox-group
v-model=
"form.viewers"
:max=
"order.length"
>
<el-checkbox-group
v-model=
"orderForm.customerList"
@
change=
"changeGroup"
>
<div
v-for=
"(it, index) in cousList"
:key=
"index"
class=
"prople_item"
>
v-for=
"(it, index) in personnelList"
:key=
"index"
class=
"prople_item"
>
<div>
<div
class=
"name"
>
{{
it
.
name
}}
</div>
<div
class=
"idcard"
>
{{
it
.
idCard
}}
</div>
</div>
<el-checkbox
:value=
"it.id"
/>
<el-checkbox
:value=
"it.id"
/>
</div>
</el-checkbox-group>
</div>
<!-- button -->
<div
class=
"btn"
@
click=
"$router.push(
{ path: '/booking/ticket/peopleManage' })"
>
<div
class=
"btn"
@
click=
"$router.push(
{ path: '/booking/ticket/peopleManage' })">
{{
languageFormat
(
language
,
"新增"
,
"Add"
)
}}
</div>
</div>
...
...
@@ -96,11 +96,12 @@
<span
v-if=
"it.venueId == 1"
>
{{
it
.
area
}}{{
languageFormat
(
language
,
"区"
,
"Zones"
)
}}
</span>
{{
it
.
pai
}}{{
languageFormat
(
language
,
"排"
,
"Row"
)
}}
{{
it
.
no
}}{{
languageFormat
(
language
,
"座"
,
"Seat"
)
}}
(
{{
it
.
venueId
==
1
?
"B6"
:
"B4"
}}{{
languageFormat
(
language
,
"馆"
,
"Venue"
)
}}
)
{{
it
.
pai
}}
{{
languageFormat
(
language
,
"排"
,
"Row"
)
}}
{{
it
.
no
}}
{{
languageFormat
(
language
,
"座"
,
"Seat"
)
}}
(
{{
it
.
venueId
==
1
?
"B6"
:
"B4"
}}
{{
languageFormat
(
language
,
"馆"
,
"Venue"
)
}}
)
</div>
</div>
<div
class=
"detail_b"
>
...
...
@@ -109,7 +110,9 @@
</div>
<div
class=
"price_num"
>
<span>
{{
language
==
0
?
"¥"
:
"€"
}}
</span>
{{
order
?.
paymentAmount
}}
{{
language
==
0
?
price
.
total_cn
:
price
.
total_en
}}
</div>
</div>
</div>
...
...
@@ -138,7 +141,7 @@
@
closed=
"payment.handleCloce()"
>
<div>
<img
alt
:src=
"payment.qrCodeData"
class=
"qrcode"
/>
<img
:src=
"payment.qrCodeData"
alt
class=
"qrcode"
/>
</div>
</el-dialog>
</div>
...
...
@@ -148,12 +151,8 @@
<
script
setup
>
import
{
ref
}
from
'vue'
import
{
customerListApi
}
from
'@/apiPc/booking'
import
{
confirmOrder
}
from
"@/viewsPc/seat/api/index.js"
;
import
{
customerListApi
,
getTicketTotalApi
,
TicketOrderBoApi
,
listApi
}
from
'@/apiPc/booking'
import
{
ElMessage
}
from
"element-plus"
;
import
{
payOrder
,
viewPeopleList
,
checkPaySuccess
}
from
"@/viewsPc/seat/api/index.js"
;
// import qrCodeDialog from "./components/qrCodeDialog.vue";
import
qrcode
from
"qrcode"
;
import
{
languageFormat
}
from
"@/viewsPc/seat/utils/language.js"
;
import
{
useStorage
}
from
"@vueuse/core/index"
;
...
...
@@ -162,43 +161,30 @@ const loading = ref(false);
const
route
=
useRoute
();
const
router
=
useRouter
();
const
order
=
ref
({
data
:{}
data
:
{}
})
const
audience
=
ref
({})
const
payment
=
ref
({})
const
props
=
defineProps
({
activityId
:
[
String
,
Number
],
});
const
form
=
ref
({})
const
cousList
=
ref
([])
const
personnelList
=
ref
([])
const
orderForm
=
ref
({
activeId
:
route
.
params
.
activeId
,
atId
:
route
.
params
.
latId
,
attId
:
route
.
params
.
attId
,
orderId
:
null
,
contacts
:
null
,
phone
:
null
,
remarks
:
null
,
customerList
:
[],
num
:
0
,
total
:
null
})
const
price
=
ref
({})
const
tickType
=
ref
({})
let
timer
=
null
;
const
startCheckSuccessListener
=
(
orderSn
,
actId
)
=>
{
timer
=
setInterval
(()
=>
{
checkPaySuccess
({
orderSn
}).
then
((
res
)
=>
{
if
(
res
.
data
)
{
clearInterval
(
timer
);
timer
=
null
;
// 支付成功
payment
.
showCodeDialog
=
false
;
ElMessage
({
type
:
"success"
,
message
:
languageFormat
(
language
.
value
,
"支付成功"
,
"Payment succeeded"
),
});
router
.
replace
({
path
:
"/seat/order"
,
});
}
else
{
return
false
;
}
});
},
3000
);
};
// const payment = reactive({
// showCodeDialog: false,
...
...
@@ -299,15 +285,45 @@ const startCheckSuccessListener = (orderSn, actId) => {
// },
// });
// audience.fetchData();
// order.fetchData();
customerList
()
async
function
customerList
(){
const
res
=
await
customerListApi
()
cousList
.
value
=
res
.
rows
function
changeGroup
()
{
orderForm
.
value
.
num
=
orderForm
.
value
.
customerList
.
length
getTicketTotal
()
}
// 获取人员列表
async
function
customerList
()
{
const
res
=
await
customerListApi
()
personnelList
.
value
=
res
.
rows
console
.
log
(
res
)
}
// 获取价格
async
function
getTicketTotal
()
{
const
res
=
await
getTicketTotalApi
(
orderForm
.
value
)
price
.
value
=
res
.
data
}
getTicketTotal
()
// 获取票档信息
async
function
getTicketListType
()
{
const
res
=
await
listApi
({
latId
:
orderForm
.
value
.
latId
})
tickType
.
value
=
res
.
rows
.
find
(
item
=>
item
.
id
==
orderForm
.
value
.
attId
)
}
getTicketListType
()
// 下单
async
function
confirmOrder
()
{
const
res
=
await
TicketOrderBoApi
(
orderForm
.
value
)
}
</
script
>
...
...
src/viewsPc/booking/ticket/index.vue
View file @
b40d8e5
...
...
@@ -95,14 +95,14 @@ import {ref, reactive, onMounted, watch} from "vue";
import
{
listApi
,
getTicketInfoByActivityId
,
getTicketListApi
}
from
'@/apiPc/booking'
import
{
dayjs
}
from
"element-plus"
;
import
useUserStore
from
"@/store/modules/user"
;
import
{
ElMessageBox
,
ElMessage
}
from
"element-plus"
;
import
{
languageFormat
,
getDayName
}
from
"@/viewsPc/seat/utils/language"
;
import
{
fillImgUrl
}
from
"/@/utils/ruoyi"
;
import
{
useStorage
}
from
"@vueuse/core/index"
;
const
language
=
useStorage
(
"language"
,
0
);
const
route
=
useRoute
();
const
router
=
useRouter
();
const
userStore
=
useUserStore
();
const
activeId
=
ref
(
route
.
params
.
activeId
)
const
props
=
defineProps
({
activityId
:
[
String
,
Number
],
...
...
@@ -150,14 +150,14 @@ function selectTick(v) {
}
function
toSelectSeat
()
{
if
(
!
selectForm
.
value
.
latId
)
return
ElMessage
.
error
(
"请选择票档"
)
if
(
!
selectForm
.
value
.
id
)
return
ElMessage
.
error
(
"请选择时间"
)
if
(
!
selectForm
.
value
.
latId
)
return
ElMessage
.
error
(
language
.
value
==
0
?
"请选择票档"
:
'Please select a ticket file'
)
if
(
!
selectForm
.
value
.
id
)
return
ElMessage
.
error
(
language
.
value
==
0
?
"请选择时间"
:
'Please select time'
)
router
.
push
({
name
:
'confirmOrder'
,
name
:
'confirmOrder'
,
params
:
{
activeId
:
activeId
.
value
,
latId
:
selectForm
.
value
.
latId
,
i
d
:
selectForm
.
value
.
id
attI
d
:
selectForm
.
value
.
id
}
})
}
...
...
src/viewsPc/booking/ticket/peopleManage.vue
View file @
b40d8e5
<
template
>
<el-card
class=
"container"
>
<div
class=
"title"
>
<div
class=
"add_btn"
@
click=
"addPeople"
>
{{
languageFormat
(
language
,
"新增"
,
"Add"
)
}}
</div>
{{
languageFormat
(
language
,
"观影人管理"
,
"Viewers"
)
}}
<el-card
class=
"container"
>
<div
class=
"title"
>
<div
class=
"add_btn"
@
click=
"addPeople"
>
{{
languageFormat
(
language
,
"新增"
,
"Add"
)
}}
</div>
<div
class=
"content"
>
<div
class=
"people_box"
>
<div
v-for=
"(it, index) in cousList"
:key=
"index"
class=
"people_item"
>
<div
class=
"name"
>
{{
it
.
name
}}
</div>
<div
class=
"idcard"
>
{{
languageFormat
(
language
,
"证件号"
,
"Identity Card"
)
}}
:
{{
it
.
idCard
}}
</div>
<div
class=
"btn"
@
click=
"deletePeople(it.id)"
>
{{
languageFormat
(
language
,
"删除"
,
"delete"
)
}}
</div>
{{
languageFormat
(
language
,
"观影人管理"
,
"Viewers"
)
}}
</div>
<div
class=
"content"
>
<div
class=
"people_box"
>
<div
v-for=
"(it, index) in personnelList"
:key=
"index"
class=
"people_item"
>
<div
class=
"name"
>
{{
it
.
name
}}
</div>
<div
class=
"idcard"
>
{{
languageFormat
(
language
,
"证件号"
,
"ID number"
)
}}
:
{{
it
.
idCard
}}
</div>
<div
class=
"btn"
@
click=
"deletePeople(it.id)"
>
{{
languageFormat
(
language
,
"删除"
,
"delete"
)
}}
</div>
</div>
</div>
</div>
<el-dialog
v-model=
"show"
center
title=
"新增观影人"
width=
"700"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
size=
"large"
style=
"margin: 80px"
>
<el-form-item
label=
"姓名"
required
prop=
"name"
>
<el-input
v-model=
"form.name"
size=
""
></el-input>
</el-form-item>
<el-form-item
label=
"证件号"
required
prop=
"idCard"
>
<el-input
v-model=
"form.idCard"
></el-input>
</el-form-item>
</el-form>
<el-dialog
v-model=
"show"
:title=
"language==0?'新增观影人':'New moviegoers'"
center
width=
"700"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
size=
"large"
style=
"margin: 80px"
>
<el-form-item
:label=
"language==0?'姓名':'name'"
prop=
"name"
required
>
<el-input
v-model=
"form.name"
:placeholder=
"language==0?'请输入':'Please input'"
/>
</el-form-item>
<el-form-item
:label=
"language==0?'证件类型':'ID Type'"
prop=
"idcType"
required
>
<el-select
v-model=
"form.idcType"
:placeholder=
"language==0?'请选择':'Please choose'"
>
<el-option
:label=
"language==0?'身份证':'Identity card'"
value=
"0"
/>
<el-option
:label=
"language==0?'护照':'Passport'"
value=
"1"
/>
<el-option
:label=
"language==0?'其他':'Else'"
value=
"2"
/>
</el-select>
</el-form-item>
<el-form-item
:label=
"language==0?'证件号':'ID number'"
prop=
"idCard"
required
>
<el-input
v-model=
"form.idCard"
:placeholder=
"language==0?'请输入证件号':'Please enter the ID after ah'"
/>
</el-form-item>
</el-form>
<br>
<br>
<span
slot=
"footer"
class=
"dialog-footer"
>
<br>
<br>
<span
slot=
"footer"
class=
"dialog-footer"
>
<div
style=
"text-align: center"
>
<el-button
class=
"can_pay"
@
click=
"show = false"
>
取 消
</el-button>
<el-button
class=
"pay"
type=
"primary"
@
click=
"submit"
>
确 定
</el-button>
<el-button
class=
"can_pay"
@
click=
"show = false"
>
{{
language
==
0
?
'取 消'
:
'cancel'
}}
</el-button>
<el-button
class=
"pay"
type=
"primary"
@
click=
"submit"
>
{{
language
==
0
?
'确 定'
:
'confirm'
}}
</el-button>
</div>
</span>
<br>
<br>
<br>
</el-dialog>
</el-card>
<br>
<br>
<br>
</el-dialog>
</el-card>
</
template
>
<
script
setup
>
import
{
reactive
,
ref
}
from
"vue"
;
import
{
customerListApi
,
aadCustomer
,
delCustomer
}
from
'@/apiPc/booking'
import
{
deleteViewPeople
,
viewPeopleList
}
from
"@/viewsPc/seat/api/index.js"
;
import
{
ElMessageBox
,
ElMessage
}
from
"element-plus"
;
import
{
ref
}
from
"vue"
;
import
{
aadCustomer
,
customerListApi
,
delCustomer
}
from
'@/apiPc/booking'
import
{
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
languageFormat
}
from
"@/viewsPc/seat/utils/language.js"
;
import
{
useStorage
}
from
"@vueuse/core/index"
;
const
language
=
useStorage
(
"language"
,
0
);
// const audience = reactive({
// data: [],
// fetchData() {
// viewPeopleList().then((res) => {
// audience.data = res.data;
// });
// },
//
// deletePeople(id) {
// ElMessageBox.confirm(
// languageFormat(
// language.value,
// "确认删除该观看人吗?",
// "Are you sure to delete this viewer?"
// ),
// languageFormat(language.value, "提示", "Reminder"),
// {
// confirmButtonText: languageFormat(language.value, "确认", "confirm"),
// cancelButtonText: languageFormat(language.value, "取消", "cancel"),
// type: "warning",
// draggable: true,
// }
// )
// .then(() => {
// deleteViewPeople({id}).then(() => {
// audience.fetchData();
// ElMessage({
// type: "success",
// message: languageFormat(
// language.value,
// "操作成功",
// "Operate successfully"
// ),
// });
// });
// })
// .catch(() => {
// });
// },
// });
const
cousList
=
ref
([])
const
personnelList
=
ref
([])
const
show
=
ref
(
false
)
const
form
=
ref
({})
const
formRef
=
ref
(
null
)
...
...
@@ -124,13 +80,16 @@ const rules = ref({
idCard
:
[
{
required
:
true
,
message
:
"请输入证件号"
,
trigger
:
"blur"
},
],
idcType
:
[
{
required
:
true
,
message
:
"请选择证件类型"
,
trigger
:
"blur"
},
],
})
customerList
()
async
function
customerList
()
{
const
res
=
await
customerListApi
()
cousList
.
value
=
res
.
rows
// cousList.value = [{},{}]
personnelList
.
value
=
res
.
rows
}
function
addPeople
()
{
...
...
@@ -141,20 +100,35 @@ function addPeople() {
function
submit
()
{
formRef
.
value
.
validate
((
valid
)
=>
{
if
(
valid
)
{
console
.
log
(
form
.
value
);
aadCustomer
(
form
.
value
).
then
(
res
=>
{
show
.
value
=
false
customerList
()
ElMessage
.
success
(
'添加成功'
)
aadCustomer
(
form
.
value
).
then
(
res
=>
{
if
(
res
.
data
==
-
100
)
{
return
ElMessageBox
.
confirm
(
language
.
value
==
0
?
'该观影人已存在'
:
"The viewer already exists"
,
language
.
value
==
0
?
'提示'
:
'Reminder'
,
{
confirmButtonText
:
language
.
value
==
0
?
'确认'
:
'confirm'
,
cancelButtonText
:
language
.
value
==
0
?
'取消'
:
'cancel'
,
type
:
"warning"
,
draggable
:
true
,
})
}
else
if
(
res
.
data
==
-
101
)
{
return
ElMessageBox
.
confirm
(
language
.
value
==
0
?
'该观影人实名认证未通过'
:
'The real name authentication of the moviegoer failed'
,
language
.
value
==
0
?
'提示'
:
'Reminder'
,
{
confirmButtonText
:
language
.
value
==
0
?
'确认'
:
"confirm"
,
cancelButtonText
:
language
.
value
==
0
?
'取消'
:
'cancel'
,
type
:
"warning"
,
draggable
:
true
,
})
}
else
{
show
.
value
=
false
customerList
()
ElMessage
.
success
(
language
.
value
==
0
?
'添加成功'
:
'successfully added'
)
}
})
}
else
{
return
ElMessage
.
waiting
(
'请完善信息
'
)
return
ElMessage
.
waiting
(
language
.
value
==
0
?
'请完善信息'
:
'Please complete the information
'
)
}
})
}
async
function
deletePeople
(
v
){
await
ElMessageBox
.
confirm
(
async
function
deletePeople
(
v
)
{
await
ElMessageBox
.
confirm
(
languageFormat
(
language
.
value
,
"确认删除该观影人吗?"
,
"Are you sure to delete this viewer?"
),
languageFormat
(
language
.
value
,
"提示"
,
"Reminder"
),
{
...
...
@@ -164,9 +138,9 @@ async function deletePeople(v){
draggable
:
true
,
}
)
.
then
(
async
()
=>
{
const
res
=
await
delCustomer
(
v
)
if
(
res
.
code
===
200
)
{
.
then
(
async
()
=>
{
const
res
=
await
delCustomer
(
v
)
if
(
res
.
code
===
200
)
{
ElMessage
.
success
(
'删除成功'
)
await
customerList
()
}
...
...
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