1dafe2e5 by zhangmeng

Merge remote-tracking branch 'origin/dev' into dev

2 parents 07827fbc 4d13c8e8
......@@ -511,6 +511,22 @@ export function getTicketInfoByActivityId(params) {
})
}
export function getActivityTypeVoById(params) {
return request({
url: `/ota/activityType/getActivityTypeVoById`,
method: 'get',
params
})
}
export function getListByAtstId(params) {
return request({
url: `/ota/activitySeat/getListByAtstId`,
method: 'get',
params
})
}
// 根据赛事ID获取票档
export function getTicketListApi(params) {
return request({
......@@ -538,6 +554,22 @@ export function listApi(params) {
})
}
export function getStadiumList(params) {
return request({
url: `/ota/activityStadium/getStadiumList`,
method: 'get',
params
})
}
export function getActivityTypeVoListByLatsId(params) {
return request({
url: `/ota/activityType/getActivityTypeVoListByLatsId`,
method: 'get',
params
})
}
// 获取当前用户的观影人列表
export function customerListApi(params) {
return request({
......
......@@ -362,7 +362,7 @@ export const constantRoutes = [
meta: { title: 'Ticket Booking' }
},
{
path: 'ticket/:activeId/:latId/:attId',
path: 'ticket/:activeId/:latstId',
component: () => import('@/viewsPc/booking/ticket/confirmOrder.vue'),
name: 'confirmOrder',
meta: { title: 'confirmOrder' }
......
......@@ -124,42 +124,12 @@
{{ matchForm.address }}
</el-col>
<el-col>
{{
form?.extJson?.ticketType?.name
}}:{{ form?.extJson?.num }}{{ language == 0 ? '张' : 'Tickets' }}
{{ form?.extJson?.atName }}
{{ form?.extJson?.atsName }}
{{ form?.extJson?.sessionType=='1000'?'日间场':'夜间场' }}
{{ form?.extJson?.ticketName }}
{{ form?.num }}{{ language == 0 ? '张' : 'Tickets' }}
</el-col>
<el-col>
{{
language == 0 ? '时间' : 'Time'
}}{{
dayjs(form?.extJson?.ticketDate?.ticketStart).format('YYYY-MM-DD')
}}{{
form.extJson?.ticketDate?.ticketType == 1 ? '~' + dayjs(form?.extJson?.ticketDate?.ticketEnd).format('YYYY-MM-DD') : ''
}}
</el-col>
<el-col v-if="form?.extJson?.ticketDate?.isCountSale==1">
{{
language == 0 ? `满${form?.extJson?.ticketDate.counts}人优惠` : `Discount for up to ${form?.extJson?.ticketDate.counts} people`
}}<span v-if="language == 0">{{ form?.extJson?.ticketDate.discount }}</span>
<span v-else>{{ (10 - form?.extJson?.ticketDate.discount) * 10 + '%' }}off</span>
</el-col>
<!-- <el-col>-->
<!-- {{-->
<!-- language == 0 ? '原价票' : 'Cost Ticket'-->
<!-- }}{{-->
<!-- language == 0 ? form?.extJson?.ticketDate?.price : form?.extJson?.ticketDate?.priceEn-->
<!-- }}{{ language == 0 ? '元' : 'Euro' }} x 1-->
<!-- {{ language == 0 ? '张' : 'Tickets' }}-->
<!-- </el-col>-->
<!-- <el-col>-->
<!-- {{-->
<!-- language == 0 ? '优惠票' : 'Concession Ticket'-->
<!-- }}{{-->
<!-- language == 0 ? form?.extJson?.ticketDate?.rebatePrice : form?.extJson?.ticketDate?.rebatePriceEn-->
<!-- }}{{ language == 0 ? '元' : 'Euro' }} x 1-->
<!-- {{ language == 0 ? '张' : 'Tickets' }}-->
<!-- </el-col>-->
</el-row>
</div>
</div>
......@@ -295,50 +265,36 @@
<el-col :span="24">{{ language == 0 ? '备注' : 'Remarks' }}{{ form.remarks }}</el-col>
</el-row>
<el-row v-if="type == 'ticket'" style="width: 100%">
<el-row v-for="v in form.extJson?.message" style="width: 100%">
<el-row v-for="(v,i) in form.extJson?.orderCustomerList" :key="i" style="width: 100%">
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div>{{ v.name }}
</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<!-- <div>{{-->
<!-- !v.discount ? language == 0 ? '原价票' : 'Cost Ticket' : language == 0 ? '优惠票' : 'Concession Ticket'-->
<!-- }}-->
<!-- </div>-->
<div>{{ v.idCard }}
</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div v-if="language == 0 ">
{{ language == 0 ? '¥' : '€' }}
{{
!v.discount ? form.extJson?.ticketDate?.price : form.extJson?.ticketDate?.rebatePrice
}}
/{{ language == 0 ? '张' : 'Tickets' }}
{{ form.price }} /张
</div>
<div v-else>
{{ language == 0 ? '¥' : '€' }}
{{
!v.discount ? form.extJson?.ticketDate?.priceEn : form.extJson?.ticketDate?.rebatePriceEn
}}
/{{ language == 0 ? '张' : 'Tickets' }}
{{ form.priceEn }} /Tickets
</div>
</el-col>
</el-row>
<el-row style="width: 100%">
<el-col :lg="8" :md="12" :sm="12" :xs="24">
<div>{{
language == 0 ? '购票数量' : 'Number of tickets purchased'
}}{{ form.num }}{{ language == 0 ? '张' : 'Tickets' }}
<div>
{{ language == 0 ? '购票数量' : 'Number of tickets purchased' }}{{ form.num }}{{ language == 0 ? '张' : 'Tickets' }}
</div>
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">{{
language == 0 ? '联系方式' : 'Contact Information'
}}{{ form.phone }}
<el-col :lg="8" :md="12" :sm="12" :xs="24">
{{ language == 0 ? '联系方式' : 'Contact Information' }}{{ form.phone }}
</el-col>
<el-col :lg="8" :md="12" :sm="12" :xs="24">
{{ language == 0 ? '共计' : 'total' }}:{{
language == 0 ? '¥' : '€'
{{ form.paymentType == '1' ? '共计' : 'total' }}:{{
form.paymentType == '1' ? '¥' : '€'
}}{{ Number(totalFee).toFixed(2) }}
</el-col>
</el-row>
......@@ -407,31 +363,7 @@
</div>
</el-col>
<el-col :lg="24">
<div class="text-center">
<!-- <el-button-->
<!-- v-if="(form.viewStatus=='1'||form.viewStatus=='5')&&type == 'hotel'" class="mt20 btn-lineG"-->
<!-- round-->
<!-- size="large" type="primary"-->
<!-- @click="exportPdf"-->
<!-- >-->
<!-- <el-icon>-->
<!-- <Upload />-->
<!-- </el-icon>-->
<!-- {{ language == 0 ? '导出酒店预订单' : 'Export PDF' }}-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- v-if="(form.viewStatus=='1'||form.viewStatus=='5')&&(type=='makeUp'||type=='hotel'||type=='ticket')"-->
<!-- class="mt20 btn-lineG" round-->
<!-- size="large"-->
<!-- type="primary"-->
<!-- @click="downInvoice"-->
<!-- >-->
<!-- <el-icon>-->
<!-- <Download />-->
<!-- </el-icon>-->
<!-- {{ language == 0 ? '下载收据' : 'DownLoad Invoice' }}-->
<!-- </el-button>-->
</div>
<div class="text-center" />
</el-col>
</el-row>
</div>
......@@ -764,11 +696,8 @@ async function getTicketOrderInfoFN() {
form.value = res.data
form.value.extJson = JSON.parse(form.value.extJson)
try {
form.value.extJson.ticketDate = JSON.parse(form.value.extJson.ticketDate)
form.value.extJson.ticketType = JSON.parse(form.value.extJson.ticketType)
form.value.extJson.message = JSON.parse(form.value.extJson.message)
await getDetail(form.value.extJson.ticketDate.activityId)
matchId.value = form.value.extJson.ticketDate.activityId
await getDetail(form.value.activeId)
matchId.value = form.value.activeId
totalFee.value = language.value == 0 ? form.value.total : form.value.totalEn
} catch (e) {
......@@ -776,7 +705,6 @@ async function getTicketOrderInfoFN() {
} finally {
}
console.log(form.value)
}
async function getDetail(activeId) {
......
......@@ -66,10 +66,34 @@
<div class="label">
{{ triggerLanguage(language, "票档", "Tickets") }} :
</div>
<div v-if="matchForm.ticketLayout">
</div>
<div class="select_item_box">
<div class="select_item">
<div
v-for="(it, index) in tickClass"
:key="index"
:class="[
it.id == selectForm.latId ? 'tagActive' : 'tag',
]"
@click="select(it)"
>
{{ 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">
{{ triggerLanguage(language, "场馆", "Venues") }} :
</div>
<div>
<span
v-if="currVenue?.images"
style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px"
@click="show=true"
@click="showUrl=currVenue.images; show=true"
> <span style="color: red;font-size: 18px">*</span>
{{
language == 0 ? '点击查看场馆布局' : 'View Venue Layout'
......@@ -80,19 +104,20 @@
<div class="select_item_box">
<div class="select_item">
<div
v-for="(it, index) in tickClass"
v-for="(it, index) in venueList"
:key="index"
:class="[
it.id == selectForm.latId ? 'tagActive' : 'tag',
it.id == selectForm.latsId ? 'tagActive' : 'tag',
it.isView==0?'forbid':''
]"
@click="select(it)"
@click="selectVenue(it)"
>
{{ it.name }}
</div>
</div>
</div>
<!-- 时间 -->
<!-- 场次 -->
<div class="select_item_box">
<div class="label">
{{ triggerLanguage(language, "场次", "Session") }} :
......@@ -101,21 +126,53 @@
<div class="select_item_box">
<div class="select_item">
<div
v-for="(it, index) in tickList"
:key="index"
v-for="(it, key) in tickList"
:key="key"
:class="[
it.id == selectForm.id ? 'tagActive' : 'tag',
key == selectForm.sessionType ? 'tagActive' : 'tag',
it.isView==0?'forbid':''
]"
@click="selectSessionType(key)"
>
{{ key=='1000'?'日间场':'夜间场' }}
</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">
<div
v-for="it in tickList[selectForm.sessionType]"
:key="it.id"
:class="[
it.id == selectForm.latstId ? 'tagActive' : 'tag',
it.isView==0?'forbid':''
]"
@click="selectTick(it)"
>
{{ it.name }} <span v-if="it.ticketType==1" class="tao">{{
language == 0 ? '套票' : 'Package ticket'
}}</span>
{{ it.name }}
</div>
</div>
</div>
<!-- 价格 -->
<div class="select_item_box">
<div class="label">
......@@ -172,7 +229,7 @@
<el-dialog v-model="show" title="" width="1000px">
<div>
<img :src="fillImgUrl(matchForm.ticketLayout)" alt="" style="width: 100%">
<img :src="fillImgUrl(showUrl)" alt="" style="width: 100%">
</div>
</el-dialog>
</div>
......@@ -181,16 +238,23 @@
<script setup>
import { ref, computed } from 'vue'
import { listApi, getTicketInfoByActivityId, getTicketListApi, checkNonPayment } from '@/apiPc/booking'
import { ref, computed, watch } from 'vue'
import {
getTicketInfoByActivityId,
getTicketListApi,
checkNonPayment,
getStadiumList,
getActivityTypeVoListByLatsId
} from '@/apiPc/booking'
import { dayjs } from 'element-plus'
import { ElMessageBox, ElMessage } from 'element-plus'
import { languageFormat, getDayName } from '@/viewsPc/seat/utils/language'
import { getDayName } from '@/viewsPc/seat/utils/language'
import { fillImgUrl } from '/@/utils/ruoyi'
import useUserStore from '/@/store/modules/user'
import { triggerLanguage } from '@/utils/ruoyi'
import { useStorage } from '@vueuse/core/index'
import { useRoute, useRouter } from 'vue-router'
const language = useStorage('language', 0)
const useStore = useUserStore()
......@@ -198,10 +262,9 @@ const user = computed(() => useUserStore().user)
const route = useRoute()
const router = useRouter()
const show = ref(false)
const showUrl = ref('')
const activeId = ref(route.params.activeId)
const flag = ref(false)
const active = ref(1)
const countDown = ref(false)
const props = defineProps({
activityId: [String, Number]
})
......@@ -211,11 +274,22 @@ const matchForm = ref({})
const tickClass = ref([])
const selectForm = ref({
latId: null,
id: null,
latsId: null,
sessionType: null,
latstId: null,
price: '--',
priceEn: '--'
})
const venueList = ref([])
const tickList = ref([])
const currVenue = ref(null)
const currTick = ref(null)
watch(show, (val) => {
if (!val) {
showUrl.value = ''
}
})
// 获取票务信息
getDetail()
......@@ -241,48 +315,74 @@ async function getTicketList() {
tickClass.value = res.rows
if (tickClass.value.length > 0) {
selectForm.value.latId = tickClass.value?.[0]?.id
await getTicketListType()
await getVenueList()
}
}
// 根据票档获取场次
async function getVenueList() {
const res = await getStadiumList({ latId: selectForm.value.latId })
venueList.value = res.rows
currVenue.value = res.rows[0]
selectForm.value.latsId = res.rows[0]?.id
await getTicketListType()
}
// 根据票档获取场次
async function getTicketListType() {
const arr = []
const res = await listApi({ latId: selectForm.value.latId })
tickList.value = res.rows
for (const v of res.rows) {
if (v.isView == 0) arr.push(v)
}
for (const v of res.rows) {
if (arr.length > 0 && v.ticketType == 1) {
for (const c of arr) {
if ((c.ticketStart >= v.ticketStart) && (c.ticketStart <= v.ticketEnd)) {
v.isView = 0
}
}
}
}
const res = await getActivityTypeVoListByLatsId({ latsId: selectForm.value.latsId })
tickList.value = res.data
selectForm.value.sessionType = Object.keys(res.data)[0]
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) {
selectForm.value.latId = v.id
selectForm.value.latsId = null
selectForm.value.sessionType = null
selectForm.value.latstId = null
selectForm.value.id = null
selectForm.value.price = '--'
selectForm.value.priceEn = '--'
getVenueList()
}
function selectVenue(v) {
currVenue.value = v
selectForm.value.latsId = v.id
selectForm.value.sessionType = null
selectForm.value.latstId = null
selectForm.value.id = null
selectForm.value.price = '--'
selectForm.value.priceEn = '--'
getTicketListType()
}
function selectSessionType(key) {
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
}
function selectTick(v) {
if (v.isView != 0) {
selectForm.value.id = v.id
currTick.value = v
selectForm.value.latstId = v.id
selectForm.value.price = v.price
selectForm.value.priceEn = v.priceEn
}
}
function toSelectSeat() {
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')
// 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')
if (!user.value) {
useStore.setVisitor()
return
......@@ -293,8 +393,7 @@ function toSelectSeat() {
name: 'confirmOrder',
params: {
activeId: activeId.value,
latId: selectForm.value.latId,
attId: selectForm.value.id
latstId: selectForm.value.latstId
}
})
} else {
......
......@@ -8,14 +8,13 @@
{{ languageFormat(language, "观影人管理", "Viewers") }}
</span>
<span class="fr" style="cursor: pointer" @click="$router.go(-1)">{{
language == 0 ? '返回' : 'Back'
}}</span>
<span class="fr" style="cursor: pointer" @click="$router.go(-1)">
{{ language == 0 ? '返回' : 'Back' }}
</span>
</div>
<div class="content">
<div class="people_box">
<div v-for="(it, index) in personnelList" :key="index" class="people_item"
>
<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 }}
......@@ -33,33 +32,31 @@
center
width="700"
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px" size="large" style="margin: 80px">
<el-form
ref="formRef" :model="form" :rules="rules" label-width="100px" 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-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?'其他':'Other'" value="2"/>
<el-option :label="language==0?'身份证':'Identity card'" value="0" />
<el-option :label="language==0?'护照':'Passport'" value="1" />
<el-option :label="language==0?'其他':'Other'" 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-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">
<span class="dialog-footer">
<div style="text-align: center">
<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>
......@@ -67,13 +64,14 @@
<script setup>
import {ref, computed} from "vue";
import {aadCustomer, customerListApi, delCustomer} from '@/apiPc/booking'
import {ElMessage, ElMessageBox} from "element-plus";
import {languageFormat} from "@/viewsPc/seat/utils/language.js";
import useUserStore from "/@/store/modules/user";
import {useStorage} from "@vueuse/core/index";
import {triggerLanguage} from '@/utils/ruoyi'
import { ref, computed } from 'vue'
import { aadCustomer, delCustomer, getMyFriends } from '@/apiPc/booking'
import { ElMessage, ElMessageBox } from 'element-plus'
import { languageFormat } from '@/viewsPc/seat/utils/language.js'
import useUserStore from '/@/store/modules/user'
import { useStorage } from '@vueuse/core/index'
import { triggerLanguage } from '@/utils/ruoyi'
import { useRoute } from 'vue-router'
const user = computed(() => useUserStore().user)
const useStore = useUserStore()
......@@ -85,29 +83,25 @@ const form = ref({})
const formRef = ref(null)
const rules = ref({
name: [
{required: true, message: triggerLanguage(language.value, '请输入姓名', 'Please input'), trigger: "blur"},
{ required: true, message: triggerLanguage(language.value, '请输入姓名', 'Please input'), trigger: 'blur' }
],
idCard: [
{
required: true,
message: triggerLanguage(language.value, '请输入证件号', 'Please enter the ID after ah'),
trigger: "blur"
},
trigger: 'blur'
}
],
idcType: [
{required: true, message: triggerLanguage(language.value, '请选择证件类型', 'Please choose'), trigger: "blur"},
],
{ required: true, message: triggerLanguage(language.value, '请选择证件类型', 'Please choose'), trigger: 'blur' }
]
})
customerList()
async function customerList() {
const res = await customerListApi({
activeId: route.query.activeId,
attId: route.query.attId,
atId: route.query.atId
})
personnelList.value = res.rows
const res = await getMyFriends()
personnelList.value = res.data
}
function addPeople() {
......@@ -125,19 +119,18 @@ function submit() {
if (valid) {
aadCustomer(form.value).then(res => {
if (res.data == -100) {
ElMessageBox.confirm(language.value == 0 ? '该观影人已存在' : "The viewer already exists", language.value == 0 ? '提示' : 'Reminder', {
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,
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",
confirmButtonText: language.value == 0 ? '确认' : 'confirm',
cancelButtonText: language.value == 0 ? '取消' : 'cancel',
type: "warning",
draggable: true,
type: 'warning',
draggable: true
})
} else {
show.value = false
......@@ -153,23 +146,22 @@ function submit() {
async function deletePeople(v) {
await ElMessageBox.confirm(
languageFormat(language.value, "确认删除该观影人吗?", "Are you sure to delete this viewer?"),
languageFormat(language.value, "提示", "Reminder"),
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,
confirmButtonText: languageFormat(language.value, '确认', 'confirm'),
cancelButtonText: languageFormat(language.value, '取消', 'cancel'),
type: 'warning',
draggable: true
}
)
.then(async () => {
.then(async() => {
const res = await delCustomer(v)
if (res.code === 200) {
ElMessage.success('删除成功')
await customerList()
}
})
}
</script>
......
......@@ -81,8 +81,8 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
// target: 'http://192.168.1.118:8081/',
target: 'http://192.168.1.243:8081',
target: 'http://192.168.1.118:8081/',
// target: 'http://192.168.1.243:8081',
// target: 'https://jijin.wtwuxicenter.com/stage-api',
// target: 'https://wdsfwuxicenter.com/stage-api/',
changeOrigin: true,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!