b40d8e59 by zhangmeng

票务

1 parent b2619165
1 <template> 1 <template>
2 <el-card class="container" > 2 <el-card class="container">
3 <div v-loading="loading" > 3 <div v-loading="loading">
4 <div class="title"> 4 <div class="title">
5 {{ languageFormat(language, "订单确认", "Order confirmation") }} 5 {{ languageFormat(language, "订单确认", "Order confirmation") }}
6 </div> 6 </div>
...@@ -23,38 +23,38 @@ ...@@ -23,38 +23,38 @@
23 <div class="form"> 23 <div class="form">
24 <el-form label-width="100px"> 24 <el-form label-width="100px">
25 <el-form-item 25 <el-form-item
26 :label="language == 0 ? '联系人' : 'contact'"
27 >
28 <el-input
29 v-model="orderForm.contacts"
30 :placeholder=" language == 0 ? '请输入联系人' : 'Please enter the contact'"
31 style="width: 320px"
32 />
33 </el-form-item>
34 <el-form-item
26 :label="language == 0 ? '联系人电话' : 'contact phone'" 35 :label="language == 0 ? '联系人电话' : 'contact phone'"
27 > 36 >
28 <el-input 37 <el-input
29 v-model="form.phone" 38 v-model="orderForm.phone"
30 :placeholder=" language == 0 ? '请输入联系电话' : 'Please enter the contact phone number'" style="width: 320px" 39 :placeholder=" language == 0 ? '请输入联系电话' : 'Please enter the contact phone number'"
40 style="width: 320px"
31 /> 41 />
32 </el-form-item> 42 </el-form-item>
33 <el-form-item :label="language == 0 ? '观看人' : 'Viewer'"> 43 <el-form-item :label="language == 0 ? '观看人' : 'Viewer'">
34 <div class="p_box"> 44 <div class="p_box">
35 <div class="people"> 45 <div class="people">
36 <el-checkbox-group 46 <el-checkbox-group v-model="orderForm.customerList" @change="changeGroup">
37 v-model="form.viewers"
38 :max="order.length"
39 >
40 <div 47 <div
41 v-for="(it, index) in cousList" 48 v-for="(it, index) in personnelList" :key="index" class="prople_item">
42 :key="index"
43 class="prople_item"
44 >
45 <div> 49 <div>
46 <div class="name">{{ it.name }}</div> 50 <div class="name">{{ it.name }}</div>
47 <div class="idcard">{{ it.idCard }}</div> 51 <div class="idcard">{{ it.idCard }}</div>
48 </div> 52 </div>
49 <el-checkbox :value="it.id" /> 53 <el-checkbox :value="it.id"/>
50 </div> 54 </div>
51 </el-checkbox-group> 55 </el-checkbox-group>
52 </div> 56 </div>
53 <!-- button --> 57 <div class="btn" @click="$router.push({ path: '/booking/ticket/peopleManage' })">
54 <div
55 class="btn"
56 @click="$router.push({ path: '/booking/ticket/peopleManage' })"
57 >
58 {{ languageFormat(language, "新增", "Add") }} 58 {{ languageFormat(language, "新增", "Add") }}
59 </div> 59 </div>
60 </div> 60 </div>
...@@ -96,11 +96,12 @@ ...@@ -96,11 +96,12 @@
96 <span v-if="it.venueId == 1" 96 <span v-if="it.venueId == 1"
97 >{{ it.area }}{{ languageFormat(language, "区", "Zones") }} 97 >{{ it.area }}{{ languageFormat(language, "区", "Zones") }}
98 </span> 98 </span>
99 {{ it.pai }}{{ languageFormat(language, "排", "Row") }} {{ 99 {{ it.pai }}
100 it.no 100 {{ languageFormat(language, "排", "Row") }}
101 }}{{ languageFormat(language, "座", "Seat") }} ({{ 101 {{ it.no }}
102 it.venueId == 1 ? "B6" : "B4" 102 {{ languageFormat(language, "座", "Seat") }}
103 }}{{ languageFormat(language, "馆", "Venue") }}) 103 ({{ it.venueId == 1 ? "B6" : "B4" }}
104 {{ languageFormat(language, "馆", "Venue") }})
104 </div> 105 </div>
105 </div> 106 </div>
106 <div class="detail_b"> 107 <div class="detail_b">
...@@ -109,7 +110,9 @@ ...@@ -109,7 +110,9 @@
109 </div> 110 </div>
110 <div class="price_num"> 111 <div class="price_num">
111 <span>{{ language == 0 ? "¥" : "€" }}</span> 112 <span>{{ language == 0 ? "¥" : "€" }}</span>
112 {{ order?.paymentAmount }} 113 {{
114 language == 0 ? price.total_cn : price.total_en
115 }}
113 </div> 116 </div>
114 </div> 117 </div>
115 </div> 118 </div>
...@@ -138,7 +141,7 @@ ...@@ -138,7 +141,7 @@
138 @closed="payment.handleCloce()" 141 @closed="payment.handleCloce()"
139 > 142 >
140 <div> 143 <div>
141 <img alt :src="payment.qrCodeData" class="qrcode"/> 144 <img :src="payment.qrCodeData" alt class="qrcode"/>
142 </div> 145 </div>
143 </el-dialog> 146 </el-dialog>
144 </div> 147 </div>
...@@ -148,12 +151,8 @@ ...@@ -148,12 +151,8 @@
148 151
149 <script setup> 152 <script setup>
150 import {ref} from 'vue' 153 import {ref} from 'vue'
151 import {customerListApi} from'@/apiPc/booking' 154 import {customerListApi, getTicketTotalApi, TicketOrderBoApi, listApi} from '@/apiPc/booking'
152 import {confirmOrder} from "@/viewsPc/seat/api/index.js";
153 import {ElMessage} from "element-plus"; 155 import {ElMessage} from "element-plus";
154 import {payOrder, viewPeopleList, checkPaySuccess} from "@/viewsPc/seat/api/index.js";
155 // import qrCodeDialog from "./components/qrCodeDialog.vue";
156 import qrcode from "qrcode";
157 import {languageFormat} from "@/viewsPc/seat/utils/language.js"; 156 import {languageFormat} from "@/viewsPc/seat/utils/language.js";
158 import {useStorage} from "@vueuse/core/index"; 157 import {useStorage} from "@vueuse/core/index";
159 158
...@@ -162,43 +161,30 @@ const loading = ref(false); ...@@ -162,43 +161,30 @@ const loading = ref(false);
162 const route = useRoute(); 161 const route = useRoute();
163 const router = useRouter(); 162 const router = useRouter();
164 const order = ref({ 163 const order = ref({
165 data:{} 164 data: {}
166 }) 165 })
167 const audience = ref({})
168 const payment = ref({}) 166 const payment = ref({})
169 const props = defineProps({ 167 const props = defineProps({
170 activityId: [String, Number], 168 activityId: [String, Number],
171 }); 169 });
172 const form = ref({}) 170 const form = ref({})
173 const cousList = ref([]) 171 const personnelList = ref([])
174 172 const orderForm = ref({
173 activeId: route.params.activeId,
174 atId: route.params.latId,
175 attId: route.params.attId,
176 orderId: null,
177 contacts: null,
178 phone: null,
179 remarks: null,
180 customerList: [],
181 num: 0,
182 total: null
183 })
184 const price = ref({})
185 const tickType = ref({})
175 let timer = null; 186 let timer = null;
176 187
177 const startCheckSuccessListener = (orderSn, actId) => {
178 timer = setInterval(() => {
179 checkPaySuccess({orderSn}).then((res) => {
180 if (res.data) {
181 clearInterval(timer);
182 timer = null;
183 // 支付成功
184 payment.showCodeDialog = false;
185 ElMessage({
186 type: "success",
187 message: languageFormat(
188 language.value,
189 "支付成功",
190 "Payment succeeded"
191 ),
192 });
193 router.replace({
194 path: "/seat/order",
195 });
196 } else {
197 return false;
198 }
199 });
200 }, 3000);
201 };
202 188
203 // const payment = reactive({ 189 // const payment = reactive({
204 // showCodeDialog: false, 190 // showCodeDialog: false,
...@@ -299,15 +285,45 @@ const startCheckSuccessListener = (orderSn, actId) => { ...@@ -299,15 +285,45 @@ const startCheckSuccessListener = (orderSn, actId) => {
299 // }, 285 // },
300 // }); 286 // });
301 287
302
303 // audience.fetchData(); 288 // audience.fetchData();
304 // order.fetchData(); 289 // order.fetchData();
305 290
306 291
307 customerList() 292 customerList()
308 async function customerList(){ 293
309 const res =await customerListApi() 294 function changeGroup() {
310 cousList.value=res.rows 295 orderForm.value.num = orderForm.value.customerList.length
296 getTicketTotal()
297 }
298
299 // 获取人员列表
300 async function customerList() {
301 const res = await customerListApi()
302 personnelList.value = res.rows
303 console.log(res)
304 }
305
306
307 // 获取价格
308 async function getTicketTotal() {
309 const res = await getTicketTotalApi(orderForm.value)
310 price.value = res.data
311 }
312
313 getTicketTotal()
314
315 // 获取票档信息
316 async function getTicketListType() {
317 const res = await listApi({latId: orderForm.value.latId})
318 tickType.value = res.rows.find(item => item.id == orderForm.value.attId)
319 }
320
321 getTicketListType()
322
323
324 // 下单
325 async function confirmOrder() {
326 const res = await TicketOrderBoApi(orderForm.value)
311 } 327 }
312 </script> 328 </script>
313 329
......
...@@ -95,14 +95,14 @@ import {ref, reactive, onMounted, watch} from "vue"; ...@@ -95,14 +95,14 @@ import {ref, reactive, onMounted, watch} from "vue";
95 import {listApi, getTicketInfoByActivityId, getTicketListApi} from '@/apiPc/booking' 95 import {listApi, getTicketInfoByActivityId, getTicketListApi} from '@/apiPc/booking'
96 96
97 import {dayjs} from "element-plus"; 97 import {dayjs} from "element-plus";
98 import useUserStore from "@/store/modules/user";
99 import {ElMessageBox, ElMessage} from "element-plus"; 98 import {ElMessageBox, ElMessage} from "element-plus";
100 import {languageFormat, getDayName} from "@/viewsPc/seat/utils/language"; 99 import {languageFormat, getDayName} from "@/viewsPc/seat/utils/language";
101 import {fillImgUrl} from "/@/utils/ruoyi"; 100 import {fillImgUrl} from "/@/utils/ruoyi";
101 import {useStorage} from "@vueuse/core/index";
102 102
103 const language = useStorage("language", 0);
103 const route = useRoute(); 104 const route = useRoute();
104 const router = useRouter(); 105 const router = useRouter();
105 const userStore = useUserStore();
106 const activeId = ref(route.params.activeId) 106 const activeId = ref(route.params.activeId)
107 const props = defineProps({ 107 const props = defineProps({
108 activityId: [String, Number], 108 activityId: [String, Number],
...@@ -150,14 +150,14 @@ function selectTick(v) { ...@@ -150,14 +150,14 @@ function selectTick(v) {
150 } 150 }
151 151
152 function toSelectSeat() { 152 function toSelectSeat() {
153 if (!selectForm.value.latId) return ElMessage.error("请选择票档") 153 if (!selectForm.value.latId) return ElMessage.error(language.value == 0 ? "请选择票档" : 'Please select a ticket file')
154 if (!selectForm.value.id) return ElMessage.error("请选择时间") 154 if (!selectForm.value.id) return ElMessage.error(language.value == 0 ? "请选择时间" : 'Please select time')
155 router.push({ 155 router.push({
156 name:'confirmOrder', 156 name: 'confirmOrder',
157 params: { 157 params: {
158 activeId: activeId.value, 158 activeId: activeId.value,
159 latId: selectForm.value.latId, 159 latId: selectForm.value.latId,
160 id: selectForm.value.id 160 attId: selectForm.value.id
161 } 161 }
162 }) 162 })
163 } 163 }
......
1 <template> 1 <template>
2 <el-card class="container"> 2 <el-card class="container">
3 <div class="title"> 3 <div class="title">
4 <div 4 <div class="add_btn" @click="addPeople">
5 class="add_btn" 5 {{ languageFormat(language, "新增", "Add") }}
6 @click="addPeople"
7 >
8 {{ languageFormat(language, "新增", "Add") }}
9 </div>
10 {{ languageFormat(language, "观影人管理", "Viewers") }}
11 </div> 6 </div>
12 <div class="content"> 7 {{ languageFormat(language, "观影人管理", "Viewers") }}
13 <div class="people_box"> 8 </div>
14 <div 9 <div class="content">
15 v-for="(it, index) in cousList" 10 <div class="people_box">
16 :key="index" 11 <div v-for="(it, index) in personnelList" :key="index" class="people_item"
17 class="people_item" 12 >
18 > 13 <div class="name">{{ it.name }}</div>
19 <div class="name">{{ it.name }}</div> 14 <div class="idcard">
20 <div class="idcard"> 15 {{ languageFormat(language, "证件号", "ID number") }}{{ it.idCard }}
21 {{ languageFormat(language, "证件号", "Identity Card") }}{{ 16 </div>
22 it.idCard 17 <div class="btn" @click="deletePeople(it.id)">
23 }} 18 {{ languageFormat(language, "删除", "delete") }}
24 </div>
25 <div class="btn" @click="deletePeople(it.id)">
26 {{ languageFormat(language, "删除", "delete") }}
27 </div>
28 </div> 19 </div>
29 </div> 20 </div>
30 </div> 21 </div>
22 </div>
31 23
32 <el-dialog 24 <el-dialog
33 v-model="show" 25 v-model="show"
34 center 26 :title="language==0?'新增观影人':'New moviegoers'"
35 title="新增观影人" 27 center
36 width="700" 28 width="700"
37 > 29 >
38 <el-form ref="formRef" :model="form" :rules="rules" label-width="80px" size="large" style="margin: 80px"> 30 <el-form ref="formRef" :model="form" :rules="rules" label-width="80px" size="large" style="margin: 80px">
39 <el-form-item label="姓名" required prop="name"> 31 <el-form-item :label="language==0?'姓名':'name'" prop="name" required>
40 <el-input v-model="form.name" size=""></el-input> 32 <el-input v-model="form.name" :placeholder="language==0?'请输入':'Please input'"/>
41 </el-form-item> 33 </el-form-item>
42 <el-form-item label="证件号" required prop="idCard"> 34 <el-form-item :label="language==0?'证件类型':'ID Type'" prop="idcType" required>
43 <el-input v-model="form.idCard"></el-input> 35 <el-select v-model="form.idcType" :placeholder="language==0?'请选择':'Please choose'">
44 </el-form-item> 36 <el-option :label="language==0?'身份证':'Identity card'" value="0"/>
45 </el-form> 37 <el-option :label="language==0?'护照':'Passport'" value="1"/>
38 <el-option :label="language==0?'其他':'Else'" value="2"/>
39 </el-select>
40 </el-form-item>
41 <el-form-item :label="language==0?'证件号':'ID number'" prop="idCard" required>
42 <el-input v-model="form.idCard" :placeholder="language==0?'请输入证件号':'Please enter the ID after ah'"/>
43 </el-form-item>
44 </el-form>
46 45
47 <br> 46 <br>
48 <br> 47 <br>
49 <span slot="footer" class="dialog-footer"> 48 <span slot="footer" class="dialog-footer">
50 <div style="text-align: center"> 49 <div style="text-align: center">
51 <el-button class="can_pay" @click="show = false">取 消</el-button> 50 <el-button class="can_pay" @click="show = false">{{ language == 0 ? '取 消' : 'cancel' }}</el-button>
52 <el-button class="pay" type="primary" @click="submit">确 定</el-button> 51 <el-button class="pay" type="primary" @click="submit">{{ language == 0 ? '确 定' : 'confirm' }}</el-button>
53 </div> 52 </div>
54 </span> 53 </span>
55 <br> 54 <br>
56 <br> 55 <br>
57 <br> 56 <br>
58 </el-dialog> 57 </el-dialog>
59 </el-card> 58 </el-card>
60 59
61 </template> 60 </template>
62 61
63 62
64 <script setup> 63 <script setup>
65 import {reactive, ref} from "vue"; 64 import {ref} from "vue";
66 import {customerListApi,aadCustomer,delCustomer} from '@/apiPc/booking' 65 import {aadCustomer, customerListApi, delCustomer} from '@/apiPc/booking'
67 66 import {ElMessage, ElMessageBox} from "element-plus";
68 import {deleteViewPeople, viewPeopleList} from "@/viewsPc/seat/api/index.js";
69 import {ElMessageBox, ElMessage} from "element-plus";
70 import {languageFormat} from "@/viewsPc/seat/utils/language.js"; 67 import {languageFormat} from "@/viewsPc/seat/utils/language.js";
71 import {useStorage} from "@vueuse/core/index"; 68 import {useStorage} from "@vueuse/core/index";
72 69
73 const language = useStorage("language", 0); 70 const language = useStorage("language", 0);
74 71
75 // const audience = reactive({ 72 const personnelList = ref([])
76 // data: [],
77 // fetchData() {
78 // viewPeopleList().then((res) => {
79 // audience.data = res.data;
80 // });
81 // },
82 //
83 // deletePeople(id) {
84 // ElMessageBox.confirm(
85 // languageFormat(
86 // language.value,
87 // "确认删除该观看人吗?",
88 // "Are you sure to delete this viewer?"
89 // ),
90 // languageFormat(language.value, "提示", "Reminder"),
91 // {
92 // confirmButtonText: languageFormat(language.value, "确认", "confirm"),
93 // cancelButtonText: languageFormat(language.value, "取消", "cancel"),
94 // type: "warning",
95 // draggable: true,
96 // }
97 // )
98 // .then(() => {
99 // deleteViewPeople({id}).then(() => {
100 // audience.fetchData();
101 // ElMessage({
102 // type: "success",
103 // message: languageFormat(
104 // language.value,
105 // "操作成功",
106 // "Operate successfully"
107 // ),
108 // });
109 // });
110 // })
111 // .catch(() => {
112 // });
113 // },
114 // });
115
116 const cousList = ref([])
117 const show = ref(false) 73 const show = ref(false)
118 const form = ref({}) 74 const form = ref({})
119 const formRef = ref(null) 75 const formRef = ref(null)
...@@ -124,13 +80,16 @@ const rules = ref({ ...@@ -124,13 +80,16 @@ const rules = ref({
124 idCard: [ 80 idCard: [
125 {required: true, message: "请输入证件号", trigger: "blur"}, 81 {required: true, message: "请输入证件号", trigger: "blur"},
126 ], 82 ],
83 idcType: [
84 {required: true, message: "请选择证件类型", trigger: "blur"},
85 ],
127 }) 86 })
128 87
129 customerList() 88 customerList()
89
130 async function customerList() { 90 async function customerList() {
131 const res = await customerListApi() 91 const res = await customerListApi()
132 cousList.value = res.rows 92 personnelList.value = res.rows
133 // cousList.value = [{},{}]
134 } 93 }
135 94
136 function addPeople() { 95 function addPeople() {
...@@ -141,20 +100,35 @@ function addPeople() { ...@@ -141,20 +100,35 @@ function addPeople() {
141 function submit() { 100 function submit() {
142 formRef.value.validate((valid) => { 101 formRef.value.validate((valid) => {
143 if (valid) { 102 if (valid) {
144 console.log(form.value); 103 aadCustomer(form.value).then(res => {
145 aadCustomer(form.value).then(res=>{ 104 if (res.data == -100) {
146 show.value = false 105 return ElMessageBox.confirm(language.value == 0 ? '该观影人已存在' : "The viewer already exists", language.value == 0 ? '提示' : 'Reminder', {
147 customerList() 106 confirmButtonText: language.value == 0 ? '确认' : 'confirm',
148 ElMessage.success('添加成功') 107 cancelButtonText: language.value == 0 ? '取消' : 'cancel',
108 type: "warning",
109 draggable: true,
110 })
111 } else if (res.data == -101) {
112 return ElMessageBox.confirm(language.value == 0 ? '该观影人实名认证未通过' : 'The real name authentication of the moviegoer failed', language.value == 0 ? '提示' : 'Reminder', {
113 confirmButtonText: language.value == 0 ? '确认' : "confirm",
114 cancelButtonText: language.value == 0 ? '取消' : 'cancel',
115 type: "warning",
116 draggable: true,
117 })
118 } else {
119 show.value = false
120 customerList()
121 ElMessage.success(language.value == 0 ? '添加成功' : 'successfully added')
122 }
149 }) 123 })
150 } else { 124 } else {
151 return ElMessage.waiting('请完善信息') 125 return ElMessage.waiting(language.value == 0 ? '请完善信息' : 'Please complete the information')
152 } 126 }
153 }) 127 })
154 } 128 }
155 129
156 async function deletePeople(v){ 130 async function deletePeople(v) {
157 await ElMessageBox .confirm( 131 await ElMessageBox.confirm(
158 languageFormat(language.value, "确认删除该观影人吗?", "Are you sure to delete this viewer?"), 132 languageFormat(language.value, "确认删除该观影人吗?", "Are you sure to delete this viewer?"),
159 languageFormat(language.value, "提示", "Reminder"), 133 languageFormat(language.value, "提示", "Reminder"),
160 { 134 {
...@@ -164,9 +138,9 @@ async function deletePeople(v){ ...@@ -164,9 +138,9 @@ async function deletePeople(v){
164 draggable: true, 138 draggable: true,
165 } 139 }
166 ) 140 )
167 .then(async () =>{ 141 .then(async () => {
168 const res =await delCustomer(v) 142 const res = await delCustomer(v)
169 if(res.code===200){ 143 if (res.code === 200) {
170 ElMessage.success('删除成功') 144 ElMessage.success('删除成功')
171 await customerList() 145 await customerList()
172 } 146 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!