b40d8e59 by zhangmeng

票务

1 parent b2619165
<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>
......
......@@ -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,
id: selectForm.value.id
attId: selectForm.value.id
}
})
}
......
<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()
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!