14224f92 by 华明祺

购票状态的相关调整

1 parent ec06da2a
......@@ -12,8 +12,8 @@
<div class="name">{{ TickForm.name }}</div>
<div class="address">{{ TickForm.address }}</div>
</div>
<div class="ticket_info mb20">
<div class="tit_box">
<div class="line" />
......@@ -21,12 +21,12 @@
{{ languageFormat(language, "订票信息", "Ticket Info") }}
</div>
</div>
<div class="form">
<el-form ref="formRef" :model="orderForm" :rules="rules" label-width="140px">
<div v-if="TickForm2.ticketType == '1'">
<el-form-item :label="language == 0 ? '桌号' : 'Table'">
<!-- <el-popover :width="400" placement="right" trigger="hover">-->
<!-- <template #reference>-->
<!-- <div class="text-primary underline pointer" @click="showImg">-->
......@@ -39,7 +39,7 @@
<!-- />-->
<!-- </el-popover>-->
<!-- -->
<el-radio-group v-model="currDesk">
<el-radio-button
v-for="(it, index) in deskList" :key="index" :disabled="it.status!=0" :label="it.deskNo"
......@@ -105,7 +105,7 @@
</div>
</div>
</el-col>
<el-col :lg="8" class="right">
<div class="tit_box">
<div class="line" />
......@@ -113,7 +113,7 @@
{{ languageFormat(language, "订单明细", "Order summary") }}
</div>
</div>
<div class="detail">
<div class="detail_top">
<div class="time">
......@@ -148,14 +148,14 @@
<span v-else>{{ language == 0 ? '夜间场' : 'Night' }}</span>
| {{ TickForm2.ticketName }}
</div>
<div v-if="TickForm2.ticketType=='0'" class="address">{{
language == 0 ? '剩余数量' : 'Remaining Quantity'
}}: {{ leftCount }}
</div>
</div>
</div>
<!-- 场馆布局图-->
<div style="margin-top: 30px">
<el-image
......@@ -256,7 +256,7 @@ onMounted(() => {
tickImg.value = route.query.tickImg
customerList()
getDetail()
getActivityTypeVoById({
id: route.params.latstId
}).then((res) => {
......@@ -292,12 +292,12 @@ function changeGroup(e) {
}).then(res => {
if (res.data.length > 0) {
const names = _.map(res.data, (d) => d.name).join(',')
ElMessage({
message: language.value == 0 ? `${names} 已购买该票` : 'The user has purchased the ticket',
type: 'error'
})
_.each(res.data, (d) => {
_.remove(orderForm.value.customerIds, (c) => c == d.id)
_.find(personnelList.value, (p) => p.id == d.id).disabled = true
......@@ -319,7 +319,7 @@ async function paymentHandle() {
useStore().setVisitor()
return
}
if (TickForm2.value.ticketType == '1') {
if (currSeat.value.length == 0) {
ElMessage({
......@@ -336,9 +336,9 @@ async function paymentHandle() {
return
}
}
await formRef.value.validate()
await ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
......@@ -359,7 +359,7 @@ async function paymentHandle() {
seatNo: tempSeat.seatNo
})
})
const res = await submitOrderTicket({
activeId: orderForm.value.activeId,
orderName: TickForm2.value.ticketTypeName,
......@@ -406,7 +406,7 @@ async function paymentHandle() {
} catch (e) {
ElMessage.error(language.value == 0 ? '下单失败,' : 'Order failure')
} finally {
}
})
}
......@@ -450,7 +450,7 @@ div {
//padding: 20px 0;
width: 1200px;
margin: 20px auto;
.tag_t {
padding: 1px 10px;
font-weight: 400;
......@@ -460,7 +460,7 @@ div {
border: 1px solid #453dea;
margin-left: 5px;
}
.title {
padding: 11px;
text-align: center;
......@@ -468,18 +468,18 @@ div {
font-size: 18px;
color: #ffffff;
}
.content {
background-color: #fff;
}
.line {
width: 4px;
height: 18px;
background: linear-gradient(180deg, #493ceb 0%, #8623fc 100%);
border-radius: 4px;
}
.left {
.info {
background: rgba(69, 61, 234, 0.04);
......@@ -487,54 +487,54 @@ div {
border: 1px solid #d3d1f6;
padding: 20px 0 28px 33px;
margin-bottom: 20px;
.name {
font-weight: 500;
font-size: 18px;
color: #000000;
margin-bottom: 20px;
}
.address {
font-weight: 400;
font-size: 14px;
color: #929aa0;
}
}
.ticket_info {
.tit_box {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 14px;
.txt {
font-weight: bold;
font-size: 16px;
color: #493ceb;
}
}
.form {
min-height: 464px;
padding: 20px 60px;
border-radius: 5px;
border: 1px solid #dcdfe6;
.p_box {
display: flex;
width: 100%;
gap: 10px;
max-width: 400px;
.people {
width: 100%;
background: #fbfcfd;
border-radius: 2px;
border: 1px solid #dcdfe6;
padding: 0 14px;
.prople_item {
display: flex;
justify-content: space-between;
......@@ -543,30 +543,30 @@ div {
border-bottom: 1px solid #dcdfe6;
width: 100%;
position: relative;
&:last-child {
border: none;
}
.name {
font-size: 16px;
//color: #929aa0;
margin-bottom: 20px;
.tag_t {
position: absolute;
right: 30px;
padding: 8px;
}
}
.idcard {
font-size: 10px;
color: #929aa0;
}
}
}
.btn {
width: 90px;
height: 40px;
......@@ -585,30 +585,30 @@ div {
}
}
}
.right {
.tit_box {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 20px;
.txt {
font-weight: bold;
font-size: 16px;
color: #493ceb;
}
}
.detail {
padding: 15px 26px;
border-radius: 5px;
border: 1px solid #dcdfe6;
.detail_top {
padding-bottom: 13px;
border-bottom: 1px solid #dcdfe6;
.time {
font-weight: 500;
font-size: 20px;
......@@ -616,13 +616,13 @@ div {
line-height: 25px;
margin-bottom: 8px;
}
.ticket {
font-size: 16px;
color: #2d373f;
}
}
.detail_center {
margin-top: 14px;
display: flex;
......@@ -630,26 +630,26 @@ div {
padding-bottom: 13px;
border-bottom: 1px solid #dcdfe6;
gap: 8px;
.ticket {
font-size: 16px;
color: #2d373f;
}
}
.detail_b {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 16px;
.sum_txt {
font-weight: 600;
font-size: 18px;
color: #2d373f;
line-height: 25px;
}
.price_num {
font-weight: 600;
font-size: 36px;
......@@ -659,7 +659,7 @@ div {
}
}
}
.footer {
display: flex;
justify-content: space-between;
......@@ -669,20 +669,20 @@ div {
box-shadow: 0px 0px 46px 0px rgba(1, 16, 64, 0.08);
margin-top: 9px;
padding: 0 30px;
.label {
font-size: 16px;
color: #7b7f83;
line-height: 22px;
}
.value {
font-size: 22px;
color: #ff8124;
line-height: 30px;
font-weight: 600;
}
.pay {
width: 200px;
height: 40px;
......@@ -696,7 +696,7 @@ div {
cursor: pointer;
user-select: none;
}
.goBack {
width: 200px;
height: 40px;
......
......@@ -37,11 +37,11 @@
<div class="address">
{{ triggerLanguage(language, "地址", "Location") }}{{ matchForm.address }}
</div>
<div v-if="timeData>0">
<!-- 倒计时-->
<p class="countDownTitle">
<span v-if="language==0">售票倒计时</span>
<span v-else>TICKET COUNTDOWN</span>
......@@ -60,7 +60,7 @@
</van-count-down>
</div>
<div v-else>
<!-- 票档 -->
<div class="select_item_box">
<div class="label">
......@@ -74,18 +74,18 @@
:key="index"
:class="[
it.id == selectForm.latId ? 'tagActive' : 'tag',
it.disabled ? 'forbid' : '',
it.ticketPackage==1&& tickArr?.length<=0?'forbid':''
it.overdueView=='0' ? 'forbid' : '',
(it.ticketPackage==1 && overdueView=='0') ?'forbid':''
]"
@click="select(it)"
>
{{ it.ticketTypeName }}{{ it.disabled }}<span v-if="it.ticketPackage==1" class="tao">{{
{{ it.ticketTypeName }}<span v-if="it.ticketPackage==1" class="tao">{{
language == 0 ? '套票' : 'Package ticket'
}}</span>
</div>
</div>
</div>
<!-- 场馆 -->
<div class="select_item_box">
<div class="label">
......@@ -119,7 +119,7 @@
<div v-if="remarks" class="remarks">{{ remarks }}</div>
</div>
</div>
<!-- 场次 -->
<div class="select_item_box">
<div class="label">
......@@ -147,23 +147,12 @@
</div>
</div>
</div>
<!-- 票型 -->
<div class="select_item_box">
<div class="label">
{{ triggerLanguage(language, "票型", "Ticket Type") }} :
</div>
<div>
<!-- <span-->
<!-- v-if="currTick?.images"-->
<!-- style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px"-->
<!-- @click="showUrl=currTick.images;show=true"-->
<!-- > <span style="color: red;font-size: 18px">*</span>-->
<!-- {{-->
<!-- language == 0 ? '点击查看区域布局' : 'View Area Layout'-->
<!-- }}-->
<!-- </span>-->
</div>
</div>
<div class="select_item_box">
<div class="select_item">
......@@ -189,10 +178,10 @@
/>
</div>
</div>
</div>
<!-- 价格 -->
<div class="select_item_box">
<div class="label">
......@@ -219,27 +208,31 @@
{{ matchForm.ticketRemark }}
</div>
</div>
<div
v-if="endTime<=0||tickArr?.length<=0" class="btn"
v-if="isOver" class="btn"
style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;margin-top: 10px"
@click="toSelectClosed"
>
{{
triggerLanguage(language, "售票结束", "Sale closed")
}}
</div>
<div v-else class="btn" style="margin-left: 40px;margin-top: 10px" @click="toSelectSeat()">
{{
triggerLanguage(language, "立即购票", "Buy tickets now")
}}
</div>
<template v-else>
<div v-if="leftCount<=0 && leftCount!=-999" class="btn" style="margin-left: 40px;margin-top: 10px">
{{
triggerLanguage(language, "票已售罄", "Sale out")
}}
</div>
<div v-else class="btn" style="margin-left: 40px;margin-top: 10px" @click="toSelectSeat()">
{{
triggerLanguage(language, "立即购票", "Buy tickets now")
}}
</div>
</template>
</div>
</div>
</div>
<div class="container bottom">
<div style="display: flex">
<div :class="{'bg':active==1}" class="buBg" @click="active=1">{{ language == 0 ? '购票说明' : 'Notice' }}</div>
......@@ -250,7 +243,7 @@
</div>
<div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes" />
<div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice" />
<el-dialog v-model="show" align-center title="" width="1000px">
<div style="padding: 20px">
<img :src="fillImgUrl(showUrl)" alt="" style="width: 100%">
......@@ -273,8 +266,9 @@ import {
checkNonPayment,
getStadiumList,
getActivityTypeVoListByLatsId,
getBaseInfoByActiveId
getBaseInfoByActiveId, getListByAtstId
} from '@/apiPc/booking'
import _ from 'lodash'
import { dayjs } from 'element-plus'
......@@ -314,7 +308,9 @@ const tickList = ref([])
const currVenue = ref(null)
const currTick = ref(null)
const matchData = ref({})
const tickArr = ref([])
const overdueView = ref('1')
const isOver = ref(false)
const leftCount = ref(-999)
watch(show, (val) => {
if (!val) {
......@@ -328,7 +324,7 @@ getDetail()
async function getDetail() {
const res = await getTicketInfoByActivityId({ activityId: activeId.value })
matchForm.value = res.data
console.log(res)
// console.log(res)
const today = dayjs().format('YYYY-MM-DD HH:mm:ss')
timeData.value = dayjs(res.data.ticketStart).diff(today, 'millisecond')
endTime.value = dayjs(res.data.ticketEnd).diff(today, 'millisecond')
......@@ -344,24 +340,18 @@ async function getTicketList() {
activityId: activeId.value, status: 1
})
tickClass.value = res.rows
if (tickClass.value.length > 0) {
const nowDay = dayjs().format('YYYY-MM-DD')
tickArr.value = []
for (const val of tickClass.value) {
const tickDay = dayjs(val.name).format('YYYY-MM-DD')
if (tickDay < nowDay) {
val.disabled = true
} else {
val.disabled = false
if (val.ticketPackage != 1) {
tickArr.value.push(val)
}
}
}
if (tickArr.value.length > 0) {
selectForm.value.latId = tickArr.value?.[0]?.id
await getVenueList()
}
if (_.some(tickClass.value, (item) => item.overdueView == '0')
) {
overdueView.value = '0'
}
const item = _.find(tickClass.value, (item) => item.overdueView == '1')
if (item) {
selectForm.value.latId = item.id
await getVenueList()
} else {
isOver.value = true
}
}
......@@ -380,14 +370,13 @@ async function getTicketListType() {
const res = await getActivityTypeVoListByLatsId({ latsId: selectForm.value.latsId })
tickList.value = res.data
selectForm.value.sessionType = Object.keys(res.data)[0]
console.log(tickList.value)
// currTick.value = tickList.value[selectForm.value.sessionType][0]
// selectForm.value.latstId = currTick.value?.id
// selectForm.value.price = currTick.value?.price
// selectForm.value.priceEn = currTick.value?.priceEn
}
function select(v) {
if (v.id == selectForm.value.latId) {
return
}
selectForm.value.latId = v.id
selectForm.value.latsId = null
selectForm.value.sessionType = null
......@@ -395,11 +384,16 @@ function select(v) {
selectForm.value.id = null
selectForm.value.price = '--'
selectForm.value.priceEn = '--'
currTick.value = null
getVenueList()
}
function selectVenue(v) {
if (v.id == selectForm.value.latsId) {
return
}
currVenue.value = v
selectForm.value.latsId = v.id
selectForm.value.sessionType = null
......@@ -408,27 +402,51 @@ function selectVenue(v) {
selectForm.value.price = '--'
selectForm.value.priceEn = '--'
remarks.value = v.remarks
currTick.value = null
getTicketListType()
}
function selectSessionType(key) {
if (key == selectForm.value.sessionType) {
return
}
selectForm.value.sessionType = key
// currTick.value = tickList.value[selectForm.value.sessionType][0]
selectForm.value.latstId = currTick.value?.id
selectForm.value.price = currTick.value?.price
selectForm.value.priceEn = currTick.value?.priceEn
currTick.value = null
}
// 选择票型
function selectTick(v) {
if (v.id == selectForm.value.latstId) {
return
}
currTick.value = v
selectForm.value.latstId = v.id
selectForm.value.price = v.price
selectForm.value.priceEn = v.priceEn
// console.log(v)
showUrl.value = v.images
show.value = true
checkNonPayment().then(res => {
if (res.data) {
getListByAtstId({
atstId: selectForm.value.latstId
}).then(res => {
leftCount.value = res.data
if (leftCount.value > 0) {
showUrl.value = v.images
show.value = true
}
})
} else {
leftCount.value = -999
}
})
}
function toSelectSeat() {
......@@ -470,7 +488,7 @@ function toSelectClosed() {
async function getmatchData() {
const res = await getBaseInfoByActiveId(route.params.activeId)
matchData.value = res.data
console.log(res)
// console.log(res)
}
function handleImage() {
......@@ -515,18 +533,18 @@ getmatchData()
display: flex;
padding: 19px;
margin-top: 26px;
.cover_img {
width: 500px;
height: 667px;
object-fit: fill;
margin-right: 36px;
}
.info {
padding-top: 12px;
width: 100%;
.title {
font-weight: bold;
font-size: 28px;
......@@ -534,7 +552,7 @@ getmatchData()
line-height: 1.6;
margin-bottom: 15px;
}
.time {
font-weight: 600;
font-size: 16px;
......@@ -542,7 +560,7 @@ getmatchData()
line-height: 24px;
margin-bottom: 16px;
}
.address {
font-weight: 600;
font-size: 16px;
......@@ -550,15 +568,15 @@ getmatchData()
line-height: 24px;
margin-bottom: 15px;
}
.select_item_box {
display: flex;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
.label {
font-weight: 600;
font-size: 16px;
......@@ -567,19 +585,19 @@ getmatchData()
margin-right: 12px;
flex-shrink: 0;
}
.forbid {
pointer-events: none;
opacity: 0.5 !important;
cursor: not-allowed !important;
}
.select_item {
display: flex;
flex-wrap: wrap;
gap: 10px;
user-select: none;
.tag_t {
padding: 1px 15px;
font-weight: 400;
......@@ -589,7 +607,7 @@ getmatchData()
border: 1px solid #453dea;
margin-left: 5px;
}
.tag {
display: flex;
padding: 12px 18px;
......@@ -600,7 +618,7 @@ getmatchData()
color: #4a4a4a;
cursor: pointer;
}
.tagActive {
display: flex;
padding: 12px 18px;
......@@ -611,14 +629,14 @@ getmatchData()
color: #493ceb;
cursor: pointer;
}
.tao {
border: 1px solid #493ceb;
font-size: 14px;
color: #493ceb;
margin-left: 10px;
}
.tagDisabled {
padding: 12px 18px;
background: #878787;
......@@ -630,7 +648,7 @@ getmatchData()
}
}
}
.btn {
width: 175px;
height: 40px;
......@@ -650,7 +668,7 @@ getmatchData()
padding: 50px;
margin-top: 30px;
margin-bottom: 30px;
.title {
padding: 20px 30px;
background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
......@@ -660,15 +678,15 @@ getmatchData()
line-height: 30px;
margin-bottom: 30px;
}
.rich_content {
margin-top: 30px;
:deep(img) {
width: 100% !important;
height: auto !important;
}
}
}
......@@ -686,44 +704,44 @@ getmatchData()
height: 160px;
margin-right: 15px;
}
.info {
padding: 0;
.title {
font-size: 14px;
margin: 0;
}
.time, .address, .label, .tip {
font-size: 12px;
}
.title, .time, .address, .tip, .select_item_box {
margin-bottom: 3px;
}
.select_item_box {
.label {
font-size: 12px;
}
.select_item .tag {
padding: 2px 10px;
font-size: 12px;
}
.select_item .tagActive {
padding: 2px 10px;
font-size: 12px;
}
.select_item .tagDisabled {
padding: 2px 10px;
font-size: 12px;
}
}
.btn {
display: inline-block;
margin: 10px 0 0;
......@@ -741,8 +759,8 @@ getmatchData()
.bottom {
padding: 0
}
}
.countDownTitle {
......
......@@ -64,8 +64,8 @@ export default defineConfig(({ mode, command }) => {
proxy: {
// https://cn.vitejs.dev/config/#server-proxy
'/dev-api/ztx-train': {
// target: 'http://192.168.1.118:1896/stage-api',
target: 'https://jijin.wtwuxicenter.com/stage-api',
target: 'http://192.168.1.118:1896/stage-api',
// target: 'https://jijin.wtwuxicenter.com/stage-api',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '')
},
......@@ -77,15 +77,15 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '')
},
'/dev-api/ztx-webSite': {
// target: 'http://192.168.1.118:8081',
target: 'https://jijin.wtwuxicenter.com/stage-api',
target: 'http://192.168.1.118:8081',
// target: 'https://jijin.wtwuxicenter.com/stage-api',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
// target: 'http://192.168.1.213:8081/',
// target: 'http://192.168.1.118:8081',
target: 'https://jijin.wtwuxicenter.com/stage-api',
target: 'http://192.168.1.118:8081',
// target: 'https://jijin.wtwuxicenter.com/stage-api',
// target: 'https://wdsfwuxicenter.com/stage-api/',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!