Browse Source

新增预约赠票功能

gcz 1 year ago
parent
commit
8008ba5fcd
2 changed files with 198 additions and 0 deletions
  1. 10 0
      src/api/officesale/officesale.js
  2. 188 0
      src/views/officesale/preorder.vue

+ 10 - 0
src/api/officesale/officesale.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+// 赠票出票
+export const ticketout = (data) => {
+    return request({
+      url: '/system/ticketGiveCode/ticketout',
+      method: 'post',
+      data: data
+    })
+  }

+ 188 - 0
src/views/officesale/preorder.vue

@@ -0,0 +1,188 @@
+<!--
+ * @Description: 
+ * @Author: gcz
+ * @Date: 2024-01-12 17:12:35
+ * @LastEditors: gcz
+ * @LastEditTime: 2024-01-12 18:21:48
+ * @FilePath: \great_webui\src\views\officesale\preorder.vue
+ * @Copyright: Copyright (c) 2016~2024 by gcz, All Rights Reserved. 
+-->
+<template>
+    <!--  预约赠票  -->
+    <div class="app-container">
+        <div class="item u-flex">
+            <div class="title ticketType">票务类型</div>
+            <el-radio-group v-model="form.ticketType">
+                <el-radio :label="1">普通席</el-radio>
+                <el-radio :label="2">贵宾席</el-radio>
+                <el-radio :label="3">VIP席位</el-radio>
+            </el-radio-group>
+        </div>
+        <div class="item u-flex">
+            <div class="tile">打印数量</div>
+            <el-input v-model="form.ticketNum" size="small" type="number" placeholder="打印数量"></el-input>
+            <div>张</div>
+        </div>
+        <div class="item">
+            <el-button type="primary" @click="handleOpen">开始打印</el-button>
+        </div>
+
+        <el-dialog
+            title="选择打印机"
+            :visible.sync="dialogVisible"
+            width="30%"
+            :before-close="handleClose">
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+            <el-form-item label="打印机" prop="region">
+                <el-select v-model="ruleForm.region" placeholder="选择打印机">
+                <el-option :label="item.deviceName" :key="item.id" :value="item.id" v-for="(item,index) in printList"></el-option>
+                </el-select>
+            </el-form-item>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+            <el-button @click="dialogVisible = false">取 消</el-button>
+            <el-button type="primary" :loading="dialogVisibleLoading" @click="ticketout()">{{ dialogVisibleLoading?'打印中...':'打印' }}</el-button>
+            </span>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import { pageList as getPrintListApi } from "@/api/device/pda";
+import { ticketout } from "@/api/officesale/officesale";
+const https = require('https');
+const axios = require('axios');
+    export default {
+        name: "preorder",
+        data() {
+            return {
+                // 遮罩层
+                loading: true,
+                dialogVisible:false,
+                form:{
+                    ticketType:1,
+                    deviceId:'',
+                    ticketNum:null,
+                },
+                printList:[],
+                rules: {
+                    region: [
+                        { required: true, message: '请选择打印机', trigger: ['change','blur' ]}
+                    ],
+                },
+                ruleForm: {},
+                dialogVisibleLoading: false,
+                ticketoutData:{},
+            }     
+        },
+        created() {
+
+        },
+        methods: {
+            /** 查询打印机列表 */
+            getPrintListApi() {
+                getPrintListApi({deviceType:5,pageNum: 1,
+                pageSize: 999,})
+                .then(response => {
+                    this.printList = response.data.rows;
+                }).catch((error)=>{
+                    console.log("error===",error)
+                }
+                );
+            },
+            handleOpen(){
+                this.dialogVisible = true;
+                this.getPrintListApi()
+            },
+            handleClose(){
+                this.dialogVisible = false;
+                this.dialogVisibleLoading = false;
+            },
+            ticketout(){
+                console.log('111',this.form);
+                console.log('ruleForm',this.ruleForm);
+                if(this.ruleForm.region){
+                    this.form.deviceId = this.ruleForm.region;
+                    let messagelist = {
+                        ticketType: '票务类型不能为空',
+                        deviceId: '打印机不能为空',
+                        ticketNum: '打印数量不能为空',
+                    };
+                    for (let field in this.form) {
+                        if (!this.form[field]) {
+                            this.$message.error(messagelist[field]);
+                            // console.log('this.formData', this.formData);
+                            // break; // 如果发现一个字段为空就停止循环
+                            return
+                        }
+                    }
+                    this.dialogVisibleLoading = true
+                    ticketout(this.form).then(res => {
+                        if(res.code == 200){
+                            // this.$message({
+                            //     message: '打印成功',
+                            //     type: 'success'
+                            // });
+                            this.ticketoutData = res.data;
+                            this.print();
+                        }else{
+                            this.$message({
+                                message: res.msg,
+                                type: 'warning'
+                            });
+                        }
+                    }).catch(err => {
+                        this.$message({
+                            message: '赠票出票失败!',
+                            type: 'warning'
+                        });
+                    });
+                }else{
+                    this.$message.error('请选择打印机!');
+                }
+               
+            },
+            print(){
+                console.log('ticketoutData',this.ticketoutData);
+                let params = this.ticketoutData.printInfo;
+                axios.post(this.ticketoutData.linkIp, params)
+                .then(function (response) {
+                    this.handleClose();
+                    console.log(response);
+                })
+                .catch(function (error) {
+                    this.handleClose();
+                    console.log(error);
+                });
+                
+
+            }
+        }
+    };
+</script>
+<style scope="scoped" lang="scss">
+.u-flex {
+	display: flex;
+	flex-direction: row;
+	align-items: center;
+}
+.u-row-between {
+	justify-content: space-between;
+}
+
+.u-row-around {
+	justify-content: space-around;
+}
+.item{
+    margin-bottom: 20px;
+    margin-left: 30vw;
+    .title.ticketType{
+        position: relative;
+        top: -3px;
+        margin-right: 10px;
+    }
+}
+.el-input{
+    width:auto;
+    margin: 0 10px;
+}
+</style>