Kaynağa Gözat

Merge branch 'master' of http://132.232.92.186:3000/XinXiBu/oa-system

yuanrf 2 yıl önce
ebeveyn
işleme
9eb14d9da9

+ 24 - 0
src/assets/js/common.js

@@ -0,0 +1,24 @@
+export default{
+    install(Vue){
+        //这里是示例方法 getTime是方法名 function()可以携带参数
+        Vue.prototype.getTime = function(val,fun,title){
+            this.$confirm(val, '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                fun
+                this.$message({
+                type: 'success',
+                message: title+'成功!'
+                });
+            }).catch(() => {
+                this.$message({
+                type: 'info',
+                message: '已取消'+title
+                });          
+            });
+        }
+    }
+    
+}

+ 3 - 0
src/components/Finance/Cost.vue

@@ -1008,6 +1008,9 @@ export default {
         box-shadow: 0 0 5px #0005;
         border-radius: 10px;
     }
+    .cost-box .el-button+.el-button{
+        margin-left: 0;
+    }
     .fade-enter-active,
     .fade-leave-active {
         transition: opacity 1;

+ 349 - 0
src/components/Finance/ExpenseReview.vue

@@ -0,0 +1,349 @@
+<template>
+    <div v-loading="fullscreenLoading">
+        <div class="group-list">
+            <div class="group-title">
+                <div>团组列表</div>
+                <div class="group-box">
+                    <el-select v-model="value" clearable placeholder="请选择" @change="filterStatus(value)">
+                        <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                        </el-option>
+                    </el-select>
+                    <el-input
+                    style="width:200px;"
+                    @input="Inquireclick()"
+                    placeholder="请输入查询内容"
+                    v-model="input"
+                    clearable>
+                    </el-input>
+                </div>
+            </div>
+            <template>
+                <el-table
+                :data="groupDatas.slice((currentPage-1)*pageSize,currentPage*pageSize)"
+                border
+                style="width: 100%">
+                    <el-table-column
+                        prop="num"
+                        label="序 号"
+                        width="55">
+                        <template slot-scope="scope">
+                            {{(currentPage - 1) * pageSize + scope.$index + 1}}
+                        </template>
+                    </el-table-column>
+                    <el-table-column
+                        prop="tourCode"
+                        width="100"
+                        label="团 号">
+                    </el-table-column>
+                    <el-table-column
+                        width="100" 
+                        prop="salesQuoteNo"
+                        label="销售报价号">
+                    </el-table-column>
+                    <el-table-column
+                        prop="teamType"
+                        label="团组类型"
+                        width="150">
+                    </el-table-column>
+                    <!-- <el-table-column
+                        prop="teamLev"
+                        label="级 别"
+                        width="80">
+                    </el-table-column> -->
+                    <el-table-column
+                        prop="teamName"
+                        label="团队名称"
+                        >
+                    </el-table-column>
+                    <el-table-column
+                        prop="clientName"
+                        label="客户名称"
+                        width="100">
+                    </el-table-column>
+                    <el-table-column
+                        prop="clientUnit"
+                        label="客户单位">
+                    </el-table-column>
+                    <el-table-column
+                        prop="visitDate"
+                        :formatter="filteryear"
+                        label="出访时间"
+                        width="100">
+                    </el-table-column>
+                    <el-table-column
+                        prop="visitDays"
+                        label="出访天数"
+                        width="80">
+                    </el-table-column>
+                    <el-table-column
+                        prop="visitPNumber"
+                        label="出访人数"
+                        width="80">
+                    </el-table-column>
+                    <el-table-column
+                        prop="jietuanOperator"
+                        label="接团操作人"
+                        width="110">
+                    </el-table-column>
+                    <el-table-column label="操作">
+                        <template slot-scope="scope">
+                          <el-button
+                            type="primary"
+                            size="mini"
+                            title="查看费用清单"
+                            @click="handleView(scope.$index, scope.row)">查看费用清单</el-button>
+                        </template>
+                      </el-table-column>
+                </el-table>
+            </template>
+            <div class="block">
+                <el-pagination align='center' 
+                    @size-change="handleSizeChange" 
+                    @current-change="handleCurrentChange"
+                    :current-page="currentPage" 
+                    :page-sizes="[10,12,15,20]" 
+                    :page-size="pageSize" 
+                    layout="total, sizes, prev, pager, next" 
+                    :total="groupDatas.length">
+                </el-pagination>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            options: [
+                {
+                    value: '0',
+                    label: '全部'
+                }, {
+                    value: '1',
+                    label: '已完成'
+                }, {
+                    value: '2',
+                    label: '未完成'
+                }
+            ],
+            value: '0',
+            groupDatas:[],
+            groupData: [],
+            groupDatass:[],
+            currentPage: 1, // 当前页码
+            pageSize: 12 ,// 每页的数据条数
+            input:'',
+            token:'',
+            fullscreenLoading:false,
+            userid:''
+        }
+    },
+    methods:{
+         //每页条数改变时触发 选择一页显示多少行
+         handleSizeChange(val) {
+            this.currentPage = 1;
+            this.pageSize = val;
+        },
+        //当前页改变时触发 跳转其他页
+        handleCurrentChange(val) {
+            this.currentPage = val;
+        },
+        //查看费用申请
+        handleView(index, row) {
+            this.$router.push({path: '/home/FeesPage?id=' + row.id +''});
+        },
+        //模糊查询
+        Inquireclick(){
+            var newarr=[];
+            if(this.input==""){
+                if(this.value=="0"){
+                    newarr=this.groupData;
+                }else{
+                    newarr=this.groupDatass;
+                }
+            }else{
+                for(var i=0;i<this.groupDatas.length;i++){
+                    if(this.groupDatas[i].clientName.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].clientUnit.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].jietuanOperator.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].salesQuoteNo.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].teamLev.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].teamName.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].teamType.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                    else if(this.groupDatas[i].tourCode.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }else if(this.groupDatas[i].visitDate.indexOf(this.input)!=-1){
+                        newarr.push(this.groupDatas[i]);
+                    }
+                }
+            }
+            this.currentPage=1;
+            this.groupDatas=newarr;
+        },
+        //获取列表
+        Grouplist(){
+            var url="/api/Groups/GetGroupList"
+            var that=this
+            that.fullscreenLoading = true;
+            this.$axios({
+                method: 'post',
+                url:url,
+                headers:{
+                    Authorization:'Bearer '+this.token
+                },
+                data:{
+                    portType: 1,
+                }
+            }).then(function(res){
+                if(res.data.code==200){
+                    that.groupData=res.data.data
+                    that.groupData.forEach(item=>{
+                        if(item.clientName==null){
+                            item.clientName = ''
+                        } 
+                        if(item.clientUnit==null){
+                            item.clientUnit = ''
+                        } 
+                        if(item.id==null){
+                            item.id = ''
+                        } 
+                        if(item.isSure==null){
+                            item.isSure = ''
+                        } 
+                        if(item.jietuanOperator==null){
+                            item.jietuanOperator = ''
+                        } 
+                        if(item.salesQuoteNo==null){
+                            item.salesQuoteNo = ''
+                        } 
+                        if(item.teamName==null){
+                            item.teamName = ''
+                        } 
+                        if(item.teamType==null){
+                            item.teamType = ''
+                        } 
+                        if(item.tourCode==null){
+                            item.tourCode = ''
+                        } 
+                        if(item.visitDate==null){
+                            item.visitDate = ''
+                        } 
+                        if(item.visitDays==null){
+                            item.visitDays = ''
+                        } 
+                        if(item.visitPNumber==null){
+                            item.visitPNumber = ''
+                        } 
+                    })
+                    that.groupDatas=that.groupData;
+                    console.log(that.groupData)
+                    that.fullscreenLoading = false;
+                }
+            })
+        },
+        //处理时间
+        filteryear(val){
+            let gstime=val.visitDate.split(' ')[0]
+            return gstime;
+        },
+        //筛选状态
+        filterStatus(val){
+            var newgroup=[];
+            if(this.input==""){
+                if(val=="0"||val==""){
+                    newgroup=this.groupData;
+                }else if(val=="1"){
+                    for(var j=0;j<this.groupData.length;j++){
+                        if(this.groupData[j].isSure==1){
+                            newgroup.push(this.groupData[j])
+                        }
+                    }
+                }else if(val=="2"){
+                    for(var j=0;j<this.groupData.length;j++){
+                        if(this.groupData[j].isSure==0){
+                            newgroup.push(this.groupData[j])
+                        }
+                    }
+                }
+                this.currentPage=1;
+                this.groupDatas=newgroup
+                this.groupDatass=newgroup 
+            }else{
+                if(val=="0"||val==""){
+                    newgroup=this.groupData
+                }else if(val=="1"){
+                    for(var j=0;j<this.groupData.length;j++){
+                        if(this.groupData[j].isSure==1){
+                            newgroup.push(this.groupData[j])
+                        }
+                    }
+                }else if(val=="2"){
+                    for(var j=0;j<this.groupData.length;j++){
+                        if(this.groupData[j].isSure==0){
+                            newgroup.push(this.groupData[j])
+                        }
+                    }
+                }
+                this.currentPage=1;
+                this.groupDatas=newgroup
+                this.groupDatass=newgroup 
+                this.Inquireclick()
+            }
+        },
+    },
+    mounted(){
+        this.token=JSON.parse(localStorage.getItem('userinif')).token;
+        this.userid=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
+        this.Grouplist();
+    }
+}
+</script>
+<style>
+    .group-list{
+        background-color: #fff;
+        padding: 10px;
+        box-shadow: 0 0 5px #0005;
+        border-radius: 10px;
+    }
+    .group-title{
+        display: flex;
+        font-size: 17px;
+        font-weight:600 ;
+        color: #555;
+        margin-top: 8px;
+        margin-bottom: 2px;
+        justify-content: space-between;
+        align-items: center;
+    }
+    .group-box{
+        display: flex;
+    }
+    .group-box>button{
+        margin-left: 10px;
+        padding: 8px 20px;
+    }
+    .group-list .el-table td.el-table__cell, .el-table th.el-table__cell.is-leaf{
+        text-align: center;
+    }
+    .group-box>.el-input{
+        margin-left: 10px;
+    }
+</style>

+ 331 - 0
src/components/Finance/FeesPage.vue

@@ -0,0 +1,331 @@
+<template>
+    <div class="fesspage-box">
+        <div class="fesspage-head">
+            <el-form :inline="true" :model="formInline" class="demo-form-inline">
+                <el-form-item>
+                    <el-select v-model="formInline.Status" @change="shStatus()" placeholder="审核状态">
+                        <el-option v-for="(item, index) in AuditStatus" :key="index" :label="item.title"
+                            :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="团队名称:">
+                    {{ formInline.name }}
+                </el-form-item>
+                <el-form-item label="客户:">
+                    {{ formInline.clientName }}
+                </el-form-item>
+                <el-form-item label="出访国家:">
+                    {{ formInline.CountriesVisited }}
+                </el-form-item>
+                <el-form-item label="起止日期:">
+                    {{ formInline.StartTime }}
+                </el-form-item>
+                <el-form-item label="天数/人数:">
+                    {{ formInline.Days }}天 / {{ formInline.Number }}人
+                </el-form-item>
+            </el-form>
+            <el-form v-if="formInline.Status == 0" :inline="true" :model="formInline" class="demo-form-inline">
+                <el-form-item>
+                    <el-button type="primary" @click="PostAuditGrpCreditCardPayment(1)">通 过(多选)</el-button>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="PostAuditGrpCreditCardPayment(2)">拒 绝(多选)</el-button>
+                </el-form-item>
+                <el-form-item label="审核未通过原因:">
+                    <el-radio-group @change="onSubmit" v-model="formInline.resource">
+                        <el-radio label="1、成本太高"></el-radio>
+                        <el-radio label="2、金额填写错误 "></el-radio>
+                        <el-radio label="3、其他"></el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item v-show="causetrue">
+                    <el-input v-model="formInline.cause"></el-input>
+                </el-form-item>
+            </el-form>
+        </div>
+        <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
+            <el-tab-pane label="所有" name="-1"></el-tab-pane>
+            <el-tab-pane label="酒店预订" name="76"></el-tab-pane>
+            <el-tab-pane label="车导地接" name="79"></el-tab-pane>
+            <el-tab-pane label="签证" name="80"></el-tab-pane>
+            <el-tab-pane label="邀请公务" name="81"></el-tab-pane>
+            <el-tab-pane label="机票预订" name="85"></el-tab-pane>
+            <el-tab-pane label="团组增减款项" name="98"></el-tab-pane>
+        </el-tabs>
+        <div>
+            <el-table ref="multipleTable" border :data="tableData" tooltip-effect="dark" style="width: 100%"
+                @selection-change="handleSelectionChange">
+                <el-table-column type="selection" width="40" v-if="formInline.Status == 0">
+                </el-table-column>
+                <el-table-column prop="priceNameContent" label="费用所属" width="200">
+                    <template slot-scope="scope">
+                        <el-popover style="white-space: pre-wrap;" placement="top-start" width="100" trigger="click"
+                            :content="scope.row.priceMsgContent">
+                            <span slot="reference">{{ scope.row.priceNameContent }}</span>
+                        </el-popover>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="priceName" label="费用模块" width="120">
+                </el-table-column>
+                <el-table-column prop="busName" label="Bus名称" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column prop="waitPay" label="应付款金额" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column prop="currPay" label="此次付款金额" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column prop="balance" label="剩余尾款" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column prop="operatorName" label="申请人" width="100" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column prop="auditOperatorName" label="审核人" width="100" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column prop="overBudget" label="超预算比例" show-overflow-tooltip>
+                </el-table-column>
+                <el-table-column label="审核操作">
+                    <template slot-scope="scope">
+                        <el-button size="mini" v-if='scope.row.isAuditGM == 0 || scope.row.isAuditGM == 2'
+                            @click="handleEdit(scope.$index, scope.row)">通 过</el-button>
+                        <el-button size="mini" type="danger" v-if='scope.row.isAuditGM == 0 || scope.row.isAuditGM == 1'
+                            @click="handleDelete(scope.$index, scope.row)">不通过</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </div>
+        <div class="payments">
+            <div class="statistics">该申请团组款项费用统计如下:</div>
+            <div class="payable"></div>
+            <div class="payment"></div>
+            <div class="remainder"></div>
+            <div class="reviewed"></div>
+        </div>
+    </div>
+</template>
+
+<script>
+import { co } from '@fullcalendar/core/internal-common';
+export default {
+    data() {
+        return {
+            activeName: '-1',
+            diid: '',
+            token: '',
+            causetrue: false,
+            formInline: {
+                Status: -1,
+                name: '甘孜州州长团赴瑞士、希腊、奥地利10日团',
+                clientName: '兰卡彬真',
+                // clientPhone:'15884061115',
+                CountriesVisited: '瑞士 希腊 奥地利',
+                StartTime: ' 2023-08-20',
+                // EndTime:'2023-08-29',
+                Number: 5,
+                Days: 10,
+                resource: '',
+                cause: "",
+            },
+            AuditStatus: [
+                {
+                    id: -1,
+                    title: '全部'
+                },
+                {
+                    id: 0,
+                    title: '未审核'
+                },
+                {
+                    id: 1,
+                    title: '审核通过'
+                },
+                {
+                    id: 2,
+                    title: '审核不通过'
+                },
+            ],
+            tableData: [],
+            multipleSelection: [],
+            auditarr: '',
+            userid: '',
+            payable: '',
+        }
+    },
+    methods: {
+        //控制其他原因
+        onSubmit() {
+            console.log(this.formInline.resource);
+            if (this.formInline.resource == '3、其他') {
+                this.causetrue = true;
+            } else {
+                this.causetrue = false;
+            }
+        },
+        //获取详情
+        getPostSearchGrpCreditCardPayment() {
+            var url = "/api/Groups/PostSearchGrpCreditCardPayment"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + that.token
+                },
+                data: {
+                    diId: 2270,
+                    label: that.activeName,
+                    auditStatus: that.formInline.Status
+                }
+            }).then(function (res) {
+                console.log(res);
+                if (res.data.code == 200) {
+                    that.formInline.name = res.data.data.teamName;
+                    that.formInline.clientName = res.data.data.clientName;
+                    that.formInline.CountriesVisited = res.data.data.visitCountry;
+                    that.formInline.StartTime = res.data.data.visitDate;
+                    that.formInline.Days = res.data.data.visitDays;
+                    that.formInline.Number = res.data.data.visitPNumber;
+                    that.tableData = res.data.data.detailList;
+                    document.querySelector('.payable').innerHTML = res.data.data.totalStr1;
+                    document.querySelector('.payment').innerHTML = res.data.data.totalStr2;
+                    document.querySelector('.remainder').innerHTML = res.data.data.totalStr3;
+                    document.querySelector('.reviewed').innerHTML = res.data.data.totalStr4;
+                }
+            })
+        },
+        handleSelectionChange(val) {
+            this.auditarr = "";
+            this.multipleSelection = val;
+            for (var i = 0; i < this.multipleSelection.length; i++) {
+                this.auditarr += this.multipleSelection[i].id + ','
+            }
+            console.log(this.auditarr.substring(0, this.auditarr.length - 1))
+            this.auditarr = this.auditarr.substring(0, this.auditarr.length - 1)
+        },
+        handleClick(tab, event) {
+            this.activeName = tab.name;
+            this.getPostSearchGrpCreditCardPayment();
+        },
+        shStatus() {
+            this.getPostSearchGrpCreditCardPayment();
+        },
+        handleEdit(index, row) {
+            this.noPostAuditGrpCreditCardPayment(row.id, 1)
+        },
+        handleDelete(index, row) {
+            this.noPostAuditGrpCreditCardPayment(row.id, 2)
+        },
+        //多选审批
+        PostAuditGrpCreditCardPayment(val) {
+            var url = "/api/Groups/PostAuditGrpCreditCardPayment"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + that.token
+                },
+                data: {
+                    CreditIdStr: that.auditarr,
+                    auditCode: val,//1审核通过,2审核未通过
+                    user: that.userid//userid
+                }
+            }).then(function (res) {
+                console.log(res);
+                if (res.data.code == 200) {
+                    that.$message({
+                        message: res.data.msg,
+                        type: 'warning',
+                        offset: 50
+                    });
+                    that.getPostSearchGrpCreditCardPayment();
+                }
+            })
+        },
+        //单独审批
+        noPostAuditGrpCreditCardPayment(val, num) {
+            console.log(val, num)
+            var url = "/api/Groups/PostAuditGrpCreditCardPayment"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + that.token
+                },
+                data: {
+                    CreditIdStr: val + '',
+                    auditCode: num,//1审核通过,2审核未通过
+                    user: that.userid//userid
+                }
+            }).then(function (res) {
+                console.log(res);
+                if (res.data.code == 200) {
+                    that.$message({
+                        message: res.data.msg,
+                        type: 'warning',
+                        offset: 50
+                    });
+                    that.getPostSearchGrpCreditCardPayment();
+                }
+            })
+        },
+        childMethod() {
+            this.$parent.fatherMethod();
+        },
+        ceshi() {
+            console.log("tg")
+        }
+    },
+    mounted() {
+        this.diid = this.$route.query.id;
+        this.token = JSON.parse(localStorage.getItem('userinif')).token;
+        this.userid = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
+        this.getPostSearchGrpCreditCardPayment();
+        // this.getTime('是否通过该条费用?',this.ceshi(),'通过') 
+    }
+}
+</script>
+<style>
+.fesspage-box {
+    background-color: #fff;
+    padding: 10px;
+    box-shadow: 0 0 5px #0005;
+    border-radius: 10px;
+}
+
+.fesspage-head .el-form-item__label {
+    font-weight: 600;
+}
+
+.fesspage-head .el-form--inline .el-form-item__content {
+    color: #606266;
+}
+
+.fesspage-head .el-form-item {
+    margin-bottom: 10px;
+}
+
+.payments {
+    margin-top: 10px;
+}
+
+.payments>div {
+    margin: 2px 0;
+    font-size: 14px;
+}
+
+.payments .statistics {
+    font-size: 17px;
+    font-weight: 600;
+}
+
+.payment {
+    color: #008000;
+}
+
+.remainder {
+    color: #ff0000;
+}
+
+.reviewed {
+    color: #1D5DA4;
+}
+</style>

+ 24 - 3
src/components/GPT/GPTindex.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="gpt-box">
-        <div class="dialogue-all">
+        <div class="dialogue-all dialogueone" style="overflow-y: auto;">
             <div v-for="(item,index) in dialogueArr" :key="index" class="dialogue-box">
                 <div class="user-dialogue">{{ item.userdialogue }}</div>
                 <!-- <div class="gpt-dialogue">{{ item.GPTdialogue }}</div> -->
@@ -10,13 +10,13 @@
                 :showCursor="true"
                 :cursorChar="'_'"
                 :startDelay="300"
-                :typeSpeed="100"
+                :typeSpeed="50"
                 >
                     <span class="typing"></span>
                 </vue-typed-js>
             </div>
         </div>
-        <div class="dialogue-all">
+        <div class="dialogue-all" >
             <el-input
             type="textarea"
             placeholder="请输入内容"
@@ -111,6 +111,27 @@ export default {
     .dialogue-all .el-button{
         height: 54px;
     }
+
+    /*滚动条样式*/
+    .dialogueone::-webkit-scrollbar {
+        width: 4px;    
+        /*height: 4px;*/
+    }
+    .dialogueone::-webkit-scrollbar-thumb {
+        border-radius: 10px;
+        -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
+        background: rgba(0,0,0,0.2);
+    }
+    .dialogueone::-webkit-scrollbar-track {
+        -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
+        border-radius: 0;
+        background: rgba(0,0,0,0.1);
+
+    }
+    .dialogueone .typed-element{
+        display: inline-block;
+        text-align: justify;
+    }
 </style>
 
 

+ 84 - 7
src/components/OP/AirTicketRes.vue

@@ -7,7 +7,7 @@
                     <div>机票费用录入</div>
                 </div>
                 <div style="display: flex;">
-                    <div style="width: 90%;">
+                    <div style="width: 60%;">
                         <el-select v-model="DiId" placeholder="团组选择" @change="AirTicketResSelectChange">
                             <el-option v-for="item in AirTicketResSelectData" :key="item.id" :label="item.groupName"
                                 :value="item.id">
@@ -15,6 +15,9 @@
                         </el-select>
                     </div>
                     <div>
+                        <el-button type="primary" @click="download" style="margin-left: 10px;">导出报表</el-button>
+                        <el-button type="primary" @click="downloadCN" style="margin-left: 10px;">中文行程单</el-button>
+                        <el-button type="primary" @click="downloadEN" style="margin-left: 10px;">英文行程单</el-button>
                         <router-link :to="{ path: '/home/OpAirTicketRes', query: { DiId } }">
                             <el-button type="primary" style="margin-left: 10px;">新增</el-button>
                         </router-link>
@@ -130,9 +133,7 @@ export default {
                     that.DiId = that.AirTicketResSelectData[0].id;
                     that.AirTicketResList()
                 }
-
             }).catch(function (error) {
-
                 that.$message.error("网络错误,请稍后重试");
             });
         },
@@ -170,8 +171,19 @@ export default {
             });
         },
         upDate(index, row) {
-            localStorage.setItem('CarDataEdit', JSON.stringify(row));
-            this.$router.push('/home/carDataEdit')
+            if (row.isAuditGM == 3 || row.isAuditGM == 0 || row.isAuditGM == 2) {
+                this.$router.push({
+                    path: "/home/OpAirTicketRes",
+                    query: {
+                        DiId: this.DiId,
+                        id: row.id
+                    }
+                })
+            } else if (row.isAuditGM == 1) {
+                this.$message('审核已通过,不可编辑!');
+            }
+
+
         },
         del(index, row) {
             this.$confirm('此操作将删除该数据, 是否继续?', '提示', {
@@ -179,7 +191,7 @@ export default {
                 cancelButtonText: '取消',
                 type: 'warning'
             }).then(() => {
-                var url = "/api/Resource/DelCarData"
+                var url = "/api/Groups/DelAirTicketRes"
                 var that = this
                 this.$axios({
                     method: 'post',
@@ -200,7 +212,7 @@ export default {
                             message: '删除成功',
                             type: 'success'
                         });
-                        that.carData();
+                        that.AirTicketResList();
                     } else {
                         that.$message.error('删除失败!');
                     }
@@ -215,6 +227,71 @@ export default {
                     message: '操作已取消!'
                 });
             });
+        },
+        download() {
+            var url = "/api/Groups/DeriveAirTicketRes"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    DiId: that.DiId,
+                    UserId: that.userId
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    window.location.href = res.data.data
+                } else {
+                    that.$message.error("网络错误,请稍后重试");
+                }
+            })
+        },
+        downloadCN() {
+            var url = "/api/Groups/ItineraryAirTicketRes"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    DiId: that.DiId,
+                    UserId: that.userId,
+                    Language: "CN"
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    window.location.href = res.data.data
+                } else {
+                    that.$message.error("网络错误,请稍后重试");
+                }
+            })
+        },
+        downloadEN() {
+            var url = "/api/Groups/ItineraryAirTicketRes"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    DiId: that.DiId,
+                    UserId: that.userId,
+                    Language: "EN"
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    window.location.href = res.data.data
+                } else {
+                    that.$message.error("网络错误,请稍后重试");
+                }
+            })
         }
     },
     mounted() {

+ 12 - 3
src/components/OP/OCRIdentify.vue

@@ -64,6 +64,7 @@
             <el-button type="primary">房产证(英文)</el-button>
             <el-button type="primary">结婚证(英文)</el-button>
             <el-button type="primary">大陆护照(英文)</el-button>
+            <el-button type="primary">通用印刷体(英文)</el-button>
         </el-row>
     </div>
 </template>
@@ -485,7 +486,7 @@ export default {
             }else{
                 this.$message.error('请检查图片是否为此类型!');
             }
-        }
+        },
     },
     mounted(){
         this.token=JSON.parse(localStorage.getItem('userinif')).token;
@@ -510,13 +511,21 @@ export default {
     }
     .ocr-all .el-button--primary{
         width: 160px;
-        margin: 0px 5px;
-        margin-bottom: 10px;
+        margin: 10px 0px;
+    }
+    .ocr-all .el-button+.el-button{
+        margin-left: 0px;
     }
     .ocr-all .el-row{
         width: 44%;
         margin: 0 auto;
         margin-top: 30px;
         margin-bottom: 180px;
+        display: flex;
+        flex-wrap: wrap;
+        justify-content: space-between;
+    }
+    .ocr-all .el-row::after, .ocr-all .el-row::before{
+        content: none;
     }
 </style>

+ 436 - 41
src/components/OP/OpAirTicketRes.vue

@@ -24,7 +24,7 @@
             </div>
         </div>
         <div>
-            <el-form :model="delegationInfo" ref="delegationInfo" label-width="100px" class="demo-ruleForm">
+            <el-form :model="delegationInfo" label-width="100px" class="demo-ruleForm">
                 <div style="display: flex;">
                     <div style="width: 33%;">
                         <el-form-item label="团组名称:" label-width="160px">
@@ -59,33 +59,39 @@
                     </div>
                 </div>
             </el-form>
-            <el-form :model="opData" ref="opData" label-width="100px" class="demo-ruleForm">
+            <el-form :model="airTicketResOpData" :rules="airTicketResRules" ref="airTicketResOpData" label-width="100px"
+                class="demo-ruleForm">
                 <div style="display: flex;">
                     <div style="width: 33%;">
-                        <el-form-item label="舱类型:" label-width="160px">
-                            <el-select v-model="DiIdSelect" placeholder="舱类型" style="width: 100%;">
+                        <el-form-item label="舱类型:" label-width="160px" prop="cType">
+                            <el-select v-model="airTicketResOpData.cType" placeholder="舱类型" style="width: 100%;">
                                 <el-option v-for="item in ticketClass" :key="item.id" :label="item.name" :value="item.id">
                                 </el-option>
                             </el-select>
                         </el-form-item>
                     </div>
                     <div style="width: 33%;">
-                        <el-form-item label="机票单价:" prop="tourCode" label-width="160px">
-                            <el-input placeholder="机票单价" v-model="delegationInfo.tourCode" style="width: 58%;">
+                        <el-form-item label="机票单价:" prop="prePrice" label-width="160px">
+                            <el-input placeholder="机票单价" v-model="airTicketResOpData.prePrice" style="width: 58%;"
+                                @input="peiceinput">
                             </el-input>
-                            <el-select v-model="DiIdSelect" style="width: 35%;">
-                                <el-option v-for="item in currency" :key="item.id" :label="item.name"
-                                    :value="item.id"></el-option>
+                            <el-select v-model="airTicketResOpData.preCurrency" style="width: 35%;"
+                                @change="currencyChange">
+                                <el-option key="48" label="CNY" :value="48"></el-option>
+                                <el-option key="49" label="USD" :value="49"></el-option>
+                                <el-option key="51" label="EUR" :value="51"></el-option>
                             </el-select>
                         </el-form-item>
                     </div>
                     <div style="width: 33%;">
-                        <el-form-item label="机票总价:" prop="clientName" label-width="160px">
-                            <el-input placeholder="机票总价:" v-model="delegationInfo.tourCode" style="width: 58%;">
+                        <el-form-item label="机票总价:" prop="price" label-width="160px">
+                            <el-input placeholder="机票总价" v-model="airTicketResOpData.price" style="width: 58%;"
+                                :disabled="true">
                             </el-input>
-                            <el-select v-model="DiIdSelect" style="width: 35%;">
-                                <el-option v-for="item in currency" :key="item.id" :label="item.name"
-                                    :value="item.id"></el-option>
+                            <el-select v-model="airTicketResOpData.currency" style="width: 35%;" :disabled="true">
+                                <el-option key="48" label="CNY" :value="48"></el-option>
+                                <el-option key="49" label="USD" :value="49"></el-option>
+                                <el-option key="51" label="EUR" :value="51"></el-option>
                             </el-select>
                         </el-form-item>
                     </div>
@@ -94,14 +100,14 @@
                 </div>
                 <div style="display: flex;">
                     <div style="width: 33%;">
-                        <el-form-item label="此舱位人数:" prop="visitCountry" label-width="160px">
-                            <el-input placeholder="此舱位人数:" v-model="delegationInfo.visitCountry">
+                        <el-form-item label="此舱位人数:" prop="clientNum" label-width="160px">
+                            <el-input placeholder="此舱位人数" v-model="airTicketResOpData.clientNum" @input="peiceinput">
                             </el-input>
                         </el-form-item>
                     </div>
                     <div style="width: 33%;">
                         <el-form-item label="是否值机: " label-width="160px">
-                            <el-radio-group v-model="delegationInfo.isEu">
+                            <el-radio-group v-model="airTicketResOpData.isCheckIn">
                                 <el-radio :label=1>是</el-radio>
                                 <el-radio :label=0>否</el-radio>
                             </el-radio-group>
@@ -109,7 +115,7 @@
                     </div>
                     <div style="width: 33%;">
                         <el-form-item label="是否选座:" label-width="160px">
-                            <el-radio-group v-model="delegationInfo.isEu">
+                            <el-radio-group v-model="airTicketResOpData.isSetSeat">
                                 <el-radio :label=1>是</el-radio>
                                 <el-radio :label=0>否</el-radio>
                             </el-radio-group>
@@ -120,7 +126,7 @@
                 <div style="display: flex;">
                     <div style="width: 33%;">
                         <el-form-item label="是否购买行李:" label-width="160px">
-                            <el-radio-group v-model="delegationInfo.isEu">
+                            <el-radio-group v-model="airTicketResOpData.isPackage">
                                 <el-radio :label=1>是</el-radio>
                                 <el-radio :label=0>否</el-radio>
                             </el-radio-group>
@@ -128,7 +134,7 @@
                     </div>
                     <div style="width: 33%;">
                         <el-form-item label="是否行李直挂:" label-width="160px">
-                            <el-radio-group v-model="delegationInfo.isEu">
+                            <el-radio-group v-model="airTicketResOpData.isBagHandle">
                                 <el-radio :label=1>是</el-radio>
                                 <el-radio :label=0>否</el-radio>
                             </el-radio-group>
@@ -136,31 +142,31 @@
                     </div>
                     <div style="width: 33%;">
                         <el-form-item label="是否火车票出票选座:" label-width="160px">
-                            <el-radio-group v-model="delegationInfo.isEu">
-                                <el-radio label=1>是</el-radio>
-                                <el-radio label=0>否</el-radio>
+                            <el-radio-group v-model="airTicketResOpData.isTrain">
+                                <el-radio :label=1>是</el-radio>
+                                <el-radio :label=0>否</el-radio>
                             </el-radio-group>
                         </el-form-item>
                     </div>
                 </div>
                 <div style="display: flex;">
                     <div style="width: 50%;">
-                        <el-form-item label="航班简述:" label-width="160px">
-                            <el-input placeholder="此舱位客人名称:" v-model="delegationInfo.visitCountry">
+                        <el-form-item label="航班简述:" label-width="160px" prop="flightsCode">
+                            <el-input placeholder="航班简述" v-model="airTicketResOpData.flightsCode">
                             </el-input>
                         </el-form-item>
                     </div>
                     <div style="width: 50%;">
-                        <el-form-item label="城市:" prop="tourCode" label-width="160px">
-                            <el-input placeholder="此舱位客人名称:" v-model="delegationInfo.visitCountry">
+                        <el-form-item label="城 市:" prop="flightsCity" label-width="160px">
+                            <el-input placeholder="城市" v-model="airTicketResOpData.flightsCity">
                             </el-input>
                         </el-form-item>
                     </div>
                 </div>
                 <div style="display: flex;">
                     <div style="width: 90%;">
-                        <el-form-item label="此舱位客人名称:" prop="Remark" label-width="160px">
-                            <el-input placeholder="此舱位客人名称:" v-model="delegationInfo.visitCountry">
+                        <el-form-item label="此舱位客人名称:" prop="clientName" label-width="160px">
+                            <el-input placeholder="此舱位客人名称" v-model="airTicketResOpData.clientName">
                             </el-input>
                         </el-form-item>
                     </div>
@@ -171,29 +177,196 @@
                     </span>
                 </div>
                 <div style="display: flex;">
-                    <div style="width: 90%;">
-                        <el-form-item label="航班描述:" prop="Remark" label-width="160px">
-                            <el-input type="textarea" :rows="3" placeholder="航班描述"
-                                v-model="delegationInfo.Remark"></el-input>
+                    <div style="width: 60%;">
+                        <el-form-item label="航班描述:" prop="flightsDescription" label-width="160px">
+                            <el-input type="textarea" :rows="5" placeholder="航班描述"
+                                v-model="airTicketResOpData.flightsDescription"></el-input>
                         </el-form-item>
                     </div>
                 </div>
                 <div style="display: flex;">
                     <div style="width: 90%;">
-                        <el-form-item label="费用描述:" prop="Remark" label-width="160px">
+                        <el-form-item label="费用描述:" prop="priceDescription" label-width="160px">
                             <el-input type="textarea" :rows="3" placeholder="费用描述"
-                                v-model="delegationInfo.Remark"></el-input>
+                                v-model="airTicketResOpData.priceDescription"></el-input>
                         </el-form-item>
                     </div>
-                </div>``
+                </div>
                 <div style="display: flex;">
                     <div style="width: 90%;">
                         <el-form-item label="备 注:" prop="Remark" label-width="160px">
-                            <el-input type="textarea" :rows="3" placeholder="备注" v-model="delegationInfo.Remark"></el-input>
+                            <el-input type="textarea" :rows="3" placeholder="备注"
+                                v-model="airTicketResOpData.remark"></el-input>
                         </el-form-item>
                     </div>
                 </div>
             </el-form>
+            <div style="margin-top: 20px;">
+                <span style="color: red;">付款申请</span>
+                <hr style='background-color:#5555; height:1px; border:none;margin-top: 10px;' />
+            </div>
+            <el-form :model="cardPaymentOpData" ref="cardPaymentOpData" :rules="cardPaymentRules" label-width="130px"
+                class="demo-ruleForm">
+                <div style="display: flex;">
+                    <div style="width: 25%;">
+                        <el-form-item label="支付方式:" prop="payDId">
+                            <el-select v-model="cardPaymentOpData.payDId" placeholder="支付方式" style="width: 100%;"
+                                @change="payChange">
+                                <el-option v-for="item in payment" :key="item.id" :label="item.name" :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div style="width: 25%;">
+                        <el-form-item label="消费方式:" prop="consumptionPatterns">
+                            <el-input placeholder="消费方式" v-model="cardPaymentOpData.consumptionPatterns">
+                            </el-input>
+                        </el-form-item>
+                    </div>
+                    <div style="width: 25%;">
+                        <el-form-item label="消费日期:" prop="visitCountry">
+                            <el-date-picker v-model="cardPaymentOpData.consumptionDate" placeholder="消费日期" type="date">
+                            </el-date-picker>
+
+                        </el-form-item>
+                    </div>
+                    <div style="width: 25%;">
+                        <el-form-item label="付款金额:" prop="payMoney">
+                            <el-input placeholder="付款金额" v-model="cardPaymentOpData.payMoney" style="width: 52%;"
+                                :disabled="true">
+                            </el-input>
+                            <el-select v-model="cardPaymentOpData.paymentCurrency" style="width: 45%;" :disabled="true">
+                                <el-option key="48" label="CNY" :value="48"></el-option>
+                                <el-option key="49" label="USD" :value="49"></el-option>
+                                <el-option key="51" label="EUR" :value="51"></el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                </div>
+                <div v-if="cardPaymentOpData.payDId == 72">
+                    <div style="display: flex;">
+                        <div style="width: 25%;">
+                            <el-form-item label="卡类型:" prop="ctdId">
+                                <el-select v-model="cardPaymentOpData.ctdId" placeholder="卡类型" style="width: 100%;"
+                                    @change="ctdChange">
+                                    <el-option v-for="item in cardType" :key="item.id" :label="item.name" :value="item.id">
+                                    </el-option>
+                                </el-select>
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="银行卡号:" prop="bankNo">
+                                <el-input placeholder="银行卡号" v-model="cardPaymentOpData.bankNo" :disabled="true">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="持卡人姓名:" prop="cardholderName">
+                                <el-input placeholder="持卡人姓名" v-model="cardPaymentOpData.cardholderName" :disabled="true">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                    </div>
+                </div>
+                <div v-else-if="cardPaymentOpData.payDId == 73">
+                    <div style="display: flex;">
+                        <div style="width: 25%;">
+                            <el-form-item label="公司银行账号:">
+                                <el-input placeholder="公司银行账号" v-model="cardPaymentOpData.companyBankNo">
+                                </el-input>
+
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="对方开户行:" prop="otherBankName">
+                                <el-input placeholder="对方开户行:" v-model="cardPaymentOpData.otherBankName">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="对方银行卡号:" prop="otherSideNo">
+                                <el-input placeholder="对方银行卡号" v-model="cardPaymentOpData.otherSideNo">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="对方姓名:" prop="otherSideName">
+                                <el-input placeholder="对方姓名" v-model="cardPaymentOpData.otherSideName">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                    </div>
+                </div>
+                <div v-else-if="cardPaymentOpData.payDId == 83">
+                    <div style="display: flex;">
+                        <div style="width: 25%;">
+                            <el-form-item label="对方开户行:" prop="otherBankName">
+                                <el-input placeholder="对方开户行" v-model="cardPaymentOpData.otherBankName">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="对方银行卡号:" prop="otherSideNo">
+                                <el-input placeholder="对方银行卡号" v-model="cardPaymentOpData.otherSideNo">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                        <div style="width: 25%;">
+                            <el-form-item label="对方姓名:" prop="otherSideName">
+                                <el-input placeholder="对方姓名" v-model="cardPaymentOpData.otherSideName">
+                                </el-input>
+                            </el-form-item>
+                        </div>
+                    </div>
+                </div>
+                <div v-else></div>
+                <div style="display:flex;">
+                    <div style="width: 25%;">
+                        <el-form-item label="收款方:" prop="payee">
+                            <el-input placeholder="对方姓名:" v-model="cardPaymentOpData.payee">
+                            </el-input>
+                        </el-form-item>
+                    </div>
+                    <div style="width: 25%;">
+                        <el-form-item label="费用标识:" prop="orbitalPrivateTransfer">
+                            <el-select v-model="cardPaymentOpData.orbitalPrivateTransfer" placeholder="费用标识"
+                                style="width: 100%;">
+                                <el-option key="0" label="公转" :value=0>
+                                </el-option>
+                                <el-option key="1" label="私转" :value=1>
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                    <div style="width: 25%;">
+                        <el-form-item label="出票方合作方资料:" prop="visitCountry">
+                            <el-select v-model="airTicketAgentsId" placeholder="出票方合作方资料" style="width: 100%;"
+                                @change="Agents">
+                                <el-option v-for="item in airTicketAgents" :key="item.id" :label="item.name"
+                                    :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </div>
+                </div>
+                <div style="display: flex;">
+                    <div style="width: 90%;">
+                        <el-form-item label="备 注:" prop="Remark">
+                            <el-input type="textarea" :rows="5" placeholder="备注"
+                                v-model="cardPaymentOpData.remark"></el-input>
+                        </el-form-item>
+                    </div>
+                </div>
+                <el-form-item>
+                    <div style="margin-left: 60%;">
+                        <el-button type="primary" @click="addBtn">保存</el-button>
+                        <router-link to='/home/AirTicketRes'>
+                            <el-button>取消</el-button>
+                        </router-link>
+                    </div>
+                </el-form-item>
+            </el-form>
+
         </div>
     </div>
 </template>
@@ -201,17 +374,60 @@
 export default {
     data() {
         return {
+            airTicketResRules: {
+                cType: [
+                    { required: true, message: '请选择舱位类型', trigger: 'change' }
+                ],
+                prePrice: [
+                    { required: true, message: '请输入机票单价', trigger: 'change' },
+                    { pattern: /^(([1-9]?\d{0,8}(\.\d{1,2})?)|999999999|999999999\.(0){1,2})$/, message: '请输入正确的金额(最多2位小数)' }
+                ],
+                clientNum: [
+                    { required: true, message: '请输入舱位人数', trigger: 'change' },
+                ],
+                flightsCode: [
+                    { required: true, message: '请输入航班描述', trigger: 'change' },
+                ],
+                flightsCity: [
+                    { required: true, message: '请输入城市', trigger: 'change' },
+                ],
+                clientName: [
+                    { required: true, message: '请输入客人姓名', trigger: 'change' },
+                ],
+                flightsDescription: [
+                    { required: true, message: '请严格遵守格式,正确填写', trigger: 'change' },
+                ],
+            },
+            cardPaymentRules: {
+                payDId: [
+                    { required: true, message: '请选择支付方式', trigger: 'blur' },
+                ],
+                consumptionPatterns: [
+                    { required: true, message: '请输入消费方式', trigger: 'blur' },
+                ],
+                payee: [
+                    { required: true, message: '请输入收款方', trigger: 'blur' },
+                ],
+                orbitalPrivateTransfer: [
+                    { required: true, message: '请选择费用表示', trigger: 'blur' },
+                ],
+                // ctdId: [
+                //     { required: true, message: '请选择卡类型', trigger: 'blur' },
+                // ]
+            },
             title: "新增机票费用录入",
             token: '',
             userId: 0,
+            id: '',
             DiId: '',
             DiIdSelect: '',
             delegationInfo: {},
             AirTicketResSelectData: [],//团组下拉框
             ticketClass: [],//舱位下拉框
-            currency: [],//币种下拉框
             payment: [],//支付方式下拉框
             cardType: [],//卡类型下拉框
+            airTicketAgents: [],//合作的代理资料
+            airTicketAgentsId: '',
             airGroupCostParameter: {},//机票成本预算
             jjccb: 0,
             jjcrs: 0,
@@ -219,7 +435,53 @@ export default {
             gwccb: 0,
             gwcrs: 0,
             gwczj: 0,
-            opData: {},
+            status: 0,
+            airTicketResOpData: {
+                id: 0,
+                diId: 0,
+                cType: '',
+                prePrice: 0,
+                preCurrency: 48,
+                price: 0,
+                currency: 48,
+                clientNum: 0,
+                clientName: '',
+                isCheckIn: 0,
+                isSetSeat: 0,
+                isPackage: 0,
+                isBagHandle: 0,
+                isTrain: 0,
+                flightsCode: '',
+                flightsCity: '',
+                flightsDescription: '',
+                priceDescription: '',
+                createUserId: 0,
+                remark: ''
+            },
+            cardPaymentOpData: {
+                id: 0,
+                payDId: 72,
+                consumptionPatterns: '',
+                consumptionDate: this.dateFormat(new Date()),
+                ctdId: '',
+                bankNo: '',
+                cardholderName: 'Zhang Hailin',
+                payMoney: 0,
+                paymentCurrency: 48,
+                companyBankNo: '',
+                otherBankName: '',
+                otherSideNo: '',
+                otherSideName: '',
+                mfOperator: '',
+                mfOperatorDate: this.dateFormat(new Date()),
+                diId: this.DiId,
+                payThenMoney: 0,
+                payee: '',
+                createUserId: 0,
+                orbitalPrivateTransfer: '',
+                remark: ''
+            }
+
         }
     },
     methods: {
@@ -240,9 +502,9 @@ export default {
                 if (res.data.code == 200) {
                     that.AirTicketResSelectData = res.data.data.groupName;
                     that.ticketClass = res.data.data.ticketClass;//舱位下拉框
-                    that.currency = res.data.data.currency;//币种下拉框
                     that.payment = res.data.data.payment;//支付方式下拉框
                     that.cardType = res.data.data.cardType;//卡类型下拉框
+                    that.airTicketAgents = res.data.data.airTicketAgents//合作方资料下拉框
                     that.DiIdSelect = parseInt(that.DiId)
                     that.AirTicketResList()
                 }
@@ -272,7 +534,140 @@ export default {
                     that.airGroupCostParameter = res.data.data.airGroupCostParameter
                 }
             })
+            if (that.DiId != undefined && that.id != undefined) {
+                that.status = 2;
+                that.AirTicketResById();
+            } else {
+                that.status = 1;
+            }
+        },
+        //点击保存事件
+        addBtn() {
+            const that = this;
+            let formArr = ['airTicketResOpData', 'cardPaymentOpData']//三个form表单的ref
+            var resultArr = [] //用来接受返回结果的数组
+            function checkForm(formName) { //封装验证表单的函数
+                var result = new Promise(function (resolve, reject) {
+                    that.$refs[formName].validate((valid) => {
+                        if (valid) {
+                            resolve();
+                        } else { reject() }
+                    })
+                })
+                resultArr.push(result) //push 得到promise的结果
+            }
+            formArr.forEach(item => { //根据表单的ref校验
+                checkForm(item)
+            })
+            Promise.all(resultArr).then(values => {
+                that.airTicketResOpData.diId = that.DiId;
+                that.airTicketResOpData.createUserId = that.userId;
+
+                that.cardPaymentOpData.createUserId = that.userId;
+                that.cardPaymentOpData.diId = that.DiId;
+                if (that.cardPaymentOpData.ctdId == '') {
+                    that.cardPaymentOpData.ctdId = 0;
+                }
+                var url = "/api/Groups/OpAirTicketRes"
+                that.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer ' + that.token
+                    },
+                    data: {
+                        status: that.status,
+                        airTicketResOpData: that.airTicketResOpData,
+                        cardPaymentOpData: that.cardPaymentOpData
+                    }
+                }).then(function (res) {
+                    if (res.data.code == 200) {
+                        that.$message({
+                            message: res.data.msg,
+                            type: 'success'
+                        });
+                        that.loading = true;
+                        setTimeout(() => {
+                            that.$router.push('/home/AirTicketRes')
+                        }, 3000);
+                    } else {
+                        that.$message.error(res.data.msg);
+                    }
+                })// 此时必填完成,做保存后的业务操作
+            }).catch(_ => {
+                this.$message.error('请完善信息在保存!');
+                return false;
+            })
         },
+        //根据机票费用录入Id查询c表和机票费用信息
+        AirTicketResById() {
+            var url = "/api/Groups/AirTicketResById"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    id: this.id
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.airTicketResOpData = res.data.data.airTicket;
+                    that.prePrice = res.data.data.airTicket.prePrice
+                    that.currencyId = res.data.data.airTicket.preCurrency
+                    that.clientNum = res.data.data.airTicket.clientNum
+                    that.cardPaymentOpData = res.data.data.creditCard;
+                    that.cardPaymentOpData.orbitalPrivateTransfer = parseInt(that.cardPaymentOpData.orbitalPrivateTransfer)
+                }
+            })
+        },
+        //支付方式change事件
+        payChange() {
+            this.cardPaymentOpData.ctdId = '';
+            this.cardPaymentOpData.bankNo = '';
+            this.cardPaymentOpData.cardholderName = 'Zhang Hailin';
+            this.cardPaymentOpData.companyBankNo = '';
+            this.cardPaymentOpData.otherBankName = '';
+            this.cardPaymentOpData.otherSideNo = '';
+            this.cardPaymentOpData.otherSideName = '';
+            this.cardPaymentOpData.mfOperator = '';
+            this.cardPaymentOpData.payee = '';
+            this.cardPaymentOpData.orbitalPrivateTransfer = '';
+            this.cardPaymentOpData.remark = ''
+        },
+        //合作方下拉选择事件
+        Agents(Id) {
+            for (var i = 0; i < this.airTicketAgents.length; i++) {
+                if (this.airTicketAgents[i].id == parseInt(Id)) {
+                    this.cardPaymentOpData.payee = this.airTicketAgents[i].name
+                    this.cardPaymentOpData.otherBankName = this.airTicketAgents[i].bank
+                    this.cardPaymentOpData.otherSideNo = this.airTicketAgents[i].account
+                }
+            }
+        },
+        //卡类型选择事件
+        ctdChange(id) {
+            this.airTicketAgentsId = '';
+            for (var i = 0; i < this.cardType.length; i++) {
+                if (this.cardType[i].id == parseInt(id)) {
+                    console.log(this.cardType[i].remark)
+                    this.cardPaymentOpData.bankNo = this.cardType[i].remark
+                }
+            }
+        },
+        //单价值改变事件
+        peiceinput() {
+            this.cardPaymentOpData.payMoney = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2)
+            this.cardPaymentOpData.payThenMoney = this.cardPaymentOpData.payMoney
+            this.airTicketResOpData.price = parseFloat(parseFloat(this.airTicketResOpData.prePrice) * parseFloat(this.airTicketResOpData.clientNum)).toFixed(2)
+        },
+        currencyChange(Id) {
+            this.cardPaymentOpData.paymentCurrency = Id;
+            this.airTicketResOpData.preCurrency = Id;
+            this.airTicketResOpData.currency = Id;
+        }
     },
 
     mounted() {
@@ -280,8 +675,8 @@ export default {
         this.token = JSON.parse(localStorage.getItem('userinif')).token;
         this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId
         this.AirTicketResSelect();
+        this.id = this.$route.query.id
         this.DiId = this.$route.query.DiId
-
     }
 }
 </script>

+ 7 - 0
src/components/home.vue

@@ -194,6 +194,7 @@
   </div>
 </template>
   <script>
+    // import child from '~/components/Finance/FeesPage';
     export default {
       data() {
         return {
@@ -206,6 +207,9 @@
           userinif:'',
         };
       },
+      // components: {
+      //   child
+      // },
       methods: {
         handleOpen(key, keyPath) {
           console.log(key, keyPath);
@@ -303,6 +307,9 @@
           });
           // this.$router.push({name:'Login'})
           // localStorage.clear();
+        },
+        fatherMethod() {
+          console.log('测试');
         }
       },
       mounted() {

+ 4 - 2
src/main.js

@@ -10,9 +10,11 @@ import store from './store/index.js';
 import VueTypedJs from 'vue-typed-js'
 Vue.use(VueTypedJs)
 import axios from 'axios';
-//axios.defaults.baseURL = 'http://132.232.92.186:8888';
- axios.defaults.baseURL = 'http://localhost:5256/';
+axios.defaults.baseURL = 'http://132.232.92.186:8888';
+//  axios.defaults.baseURL = 'http://localhost:5256/';
 import { Message } from "element-ui";
+import common from './assets/js/common'
+Vue.use(common);
 Vue.prototype.$message = Message
 Vue.prototype.$axios = axios;
 

+ 12 - 0
src/router/index.js

@@ -49,6 +49,8 @@ import GroupsTaskAssignment from '@/components/OP/GroupsTaskAssignment';
 import DailyFeePayment from '@/components/Finance/DailyFeePayment';
 import DailyFeeedit from '@/components/Finance/DailyFeeedit';
 import GPTindex from '@/components/GPT/GPTindex';
+import ExpenseReview from '@/components/Finance/ExpenseReview';
+import FeesPage from '@/components/Finance/FeesPage';
 import AirTicketAgent from '@/components/Resource/AirTicketAgent';
 import AirTicketRes from '@/components/OP/AirTicketRes';
 import OpAirTicketRes from '@/components/OP/OpAirTicketRes';
@@ -285,6 +287,16 @@ export default new Router({
           name: 'GPTindex',
           component: GPTindex
         },
+        {
+          path: '/home/ExpenseReview',
+          name: 'ExpenseReview',
+          component: ExpenseReview
+        },
+        {
+          path: '/home/FeesPage',
+          name: 'FeesPage',
+          component: FeesPage
+        },
         {
           path: '/home/AirTicketAgent',
           name: 'AirTicketAgent',