liuhj 1 year ago
parent
commit
966c49ecdc

+ 104 - 72
src/components/OP/EntryDetails.vue

@@ -175,7 +175,7 @@
                             label="城 市"
                             width="180">
                                 <template slot-scope="scope">
-                                    <el-select size="mini" @change="changeSelect(scope.row,$event)" v-model="scope.row.nationalTravelFeeId" filterable placeholder="请选择">
+                                    <el-select size="mini" @change="changeSelect(scope.row,$event,scope.$index)" v-model="scope.row.nationalTravelFeeId" filterable placeholder="请选择">
                                         <el-option
                                             v-for="item in placeinif"
                                             :key="item.id"
@@ -829,8 +829,7 @@ export default {
             console.log(this.treeData)
         },
         //住宿地区选择
-        changeSelect(val,item){
-            console.log(val);
+        changeSelect(val,item,index){
             var rate=0
             var obj={}
             obj= this.placeinif.find(function(i){
@@ -853,10 +852,12 @@ export default {
             for(let a=0;a<this.quarterageData.length;a++){
                 this.TotalAccommodationFee+=this.quarterageData[a].subTotal
             }
+            this.mealschangeSelect(this.boardWagesData,item,index)
         },
         //伙食地区选择
-        mealschangeSelect(val,item){
+        mealschangeSelect(val,item,index){
             console.log(val);
+            console.log(index);
             var rate=0
             var obj={}
             obj= this.placeinif.find(function(i){
@@ -864,6 +865,22 @@ export default {
             });
             //在change中获取到整条对象数据
             console.log(obj);
+            if(index!=undefined){
+                val[index].currencyName=obj.currencyName;
+                val[index].currency=obj.currency;
+                val[index].cost=obj.foodCost;
+                val[index].nationalTravelFeeId=obj.id;
+                for(let j=0;j<this.currencys.length;j++){
+                    if(this.currencys[j].currencyCode==obj.currencyCode){
+                        rate=this.currencys[j].rate;
+                    }
+                }
+                val[index].subTotal=Number(val[index].cost)*Number(rate);
+                this.TotalMeals=0;
+                for(let a=0;a<this.boardWagesData.length;a++){
+                    this.TotalMeals+=this.boardWagesData[a].subTotal
+                }
+            }
             val.currencyName=obj.currencyName;
             val.currency=obj.currency;
             val.cost=obj.foodCost;
@@ -954,6 +971,17 @@ export default {
                     subTotal:0,
                     remark:'',
                 })
+                this.boardWagesData.push({
+                    id:0,
+                    diId:this.value,
+                    type:2,
+                    days:this.boardWagesData.length!=0?(this.boardWagesData[this.boardWagesData.length-1].days)+1:1,
+                    nationalTravelFeeId:'',
+                    cost:0,
+                    currency:0,
+                    subTotal:0,
+                    remark:'',
+                })
             }
             if(text=="伙食费"){
                 this.boardWagesData.push({
@@ -982,7 +1010,6 @@ export default {
                 })
             }
             if(text=="培训费"){
-                console.log(this.trainingExpenseData)
                 this.trainingExpenseData.push({
                     id:0,
                     diId:this.value,
@@ -1058,11 +1085,6 @@ export default {
                     remark:this.trainingExpenseData[p].remark,
                 })
             }
-            console.log(quarterageDatas)
-            console.log(boardWagesDatas)
-            console.log(miscellaneousFeeDatas)
-            console.log(trainingExpenseDatas)
-            console.log(this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense)
             this.storageAPI(quarterageDatas,boardWagesDatas,miscellaneousFeeDatas,trainingExpenseDatas)
         },
         //保存API
@@ -1232,88 +1254,98 @@ export default {
         },
         //删除
         deleteRow(index,row,rows,val){
-            console.log(row.id);
-            if(row.id==0){
-                this.$message({
-                    type: 'success',
-                    message: '删除成功'
-                });
-                rows.splice(index, 1);
-                if(val==1){
-                    this.TotalAccommodationFee=0;
-                    for(let a=0;a<rows.length;a++){
-                        this.TotalAccommodationFee+=rows[a].subTotal;
-                    }
-                }
-                if(val==2){
-                    this.TotalMeals=0;
-                    for(let a=0;a<rows.length;a++){
-                        this.TotalMeals+=rows[a].subTotal;
-                    }
-                }
-                if(val==3){
-                    this.TotalMiscellaneous=0;
-                    for(let a=0;a<rows.length;a++){
-                        this.TotalMiscellaneous+=rows[a].subTotal;
-                    }
-                }
-                if(val==4){
-                    this.trainingExpense=0;
-                    for(let a=0;a<rows.length;a++){
-                        this.trainingExpense+=rows[a].subTotal;
-                    }
-                }
-                return;
-            }
-            var url = "/api/Groups/PostEnterExitCostSubItemDel"
-            var that = this
-            this.$axios({
-                method: 'post',
-                url: url,
-                headers: {
-                    Authorization: 'Bearer ' + that.token
-                },
-                data:{
-                    portType: 1,
-                    id: row.id,
-                    deleteUserId: that.userId
-                }
-            }).then(function (res) {
-                console.log(res)
-                if(res.data.code==200){
-                    that.$message({
+            this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                if(row.id==0){
+                    this.$message({
                         type: 'success',
-                        message: res.data.msg
+                        message: '删除成功'
                     });
                     rows.splice(index, 1);
                     if(val==1){
-                        that.TotalAccommodationFee=0;
+                        this.TotalAccommodationFee=0;
                         for(let a=0;a<rows.length;a++){
-                            that.TotalAccommodationFee+=rows[a].subTotal;
+                            this.TotalAccommodationFee+=rows[a].subTotal;
                         }
                     }
                     if(val==2){
-                        that.TotalMeals=0;
+                        this.TotalMeals=0;
                         for(let a=0;a<rows.length;a++){
-                            that.TotalMeals+=rows[a].subTotal;
+                            this.TotalMeals+=rows[a].subTotal;
                         }
                     }
                     if(val==3){
-                        that.TotalMiscellaneous=0;
+                        this.TotalMiscellaneous=0;
                         for(let a=0;a<rows.length;a++){
-                            that.TotalMiscellaneous+=rows[a].subTotal;
+                            this.TotalMiscellaneous+=rows[a].subTotal;
                         }
                     }
                     if(val==4){
-                        that.trainingExpense=0;
+                        this.trainingExpense=0;
                         for(let a=0;a<rows.length;a++){
-                            that.trainingExpense+=rows[a].subTotal;
+                            this.trainingExpense+=rows[a].subTotal;
                         }
                     }
-                }else{
-                    that.$message.error(res.data.msg);
+                    return;
                 }
-            })
+                var url = "/api/Groups/PostEnterExitCostSubItemDel"
+                var that = this
+                this.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer ' + that.token
+                    },
+                    data:{
+                        portType: 1,
+                        id: row.id,
+                        deleteUserId: that.userId
+                    }
+                }).then(function (res) {
+                    console.log(res)
+                    if(res.data.code==200){
+                        that.$message({
+                            type: 'success',
+                            message: res.data.msg
+                        });
+                        rows.splice(index, 1);
+                        if(val==1){
+                            that.TotalAccommodationFee=0;
+                            for(let a=0;a<rows.length;a++){
+                                that.TotalAccommodationFee+=rows[a].subTotal;
+                            }
+                        }
+                        if(val==2){
+                            that.TotalMeals=0;
+                            for(let a=0;a<rows.length;a++){
+                                that.TotalMeals+=rows[a].subTotal;
+                            }
+                        }
+                        if(val==3){
+                            that.TotalMiscellaneous=0;
+                            for(let a=0;a<rows.length;a++){
+                                that.TotalMiscellaneous+=rows[a].subTotal;
+                            }
+                        }
+                        if(val==4){
+                            that.trainingExpense=0;
+                            for(let a=0;a<rows.length;a++){
+                                that.trainingExpense+=rows[a].subTotal;
+                            }
+                        }
+                    }else{
+                        that.$message.error(res.data.msg);
+                    }
+                })
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '已取消删除'
+                });
+            });
         },
     },
     filters: {

+ 12 - 5
src/components/OP/Groupedit.vue

@@ -24,9 +24,6 @@
                                 :value="item.id"></el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item label-width="120px" label="团组名称:" prop="groupname">
-                        <el-input el-input v-model="ruleForm.groupname"></el-input>
-                    </el-form-item>
                     <el-form-item label-width="120px" label="客户名称:" prop="customername">
                         <el-autocomplete
                         style="width: 100%;"
@@ -45,22 +42,26 @@
                         v-model="ruleForm.customerunits"
                         :fetch-suggestions="querySearchdw"
                         placeholder="请输入内容"
+                        @select="splicingname"
                         ></el-autocomplete>
                         <!-- <el-input el-input v-model="ruleForm.customerunits"></el-input> -->
                     </el-form-item>
                     <el-form-item label-width="120px" label="出访国家:" prop="countriesvisited">
-                        <el-input el-input v-model="ruleForm.countriesvisited"></el-input>
+                        <el-input @blur="splicingname" el-input v-model="ruleForm.countriesvisited"></el-input>
                     </el-form-item>
                     <el-form-item label-width="120px" label="出访时间:" prop="visitingtime">
                         <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.visitingtime"
                             style="width: 100%;"></el-date-picker>
                     </el-form-item>
                     <el-form-item label-width="120px" label="出访天数:" prop="numdays">
-                        <el-input el-input v-model="ruleForm.numdays"></el-input>
+                        <el-input @blur="splicingname" el-input v-model="ruleForm.numdays"></el-input>
                     </el-form-item>
                     <el-form-item label-width="120px" label="出访人数:" prop="numperson">
                         <el-input el-input v-model="ruleForm.numperson"></el-input>
                     </el-form-item>
+                    <el-form-item label-width="120px" label="团组名称:" prop="groupname">
+                        <el-input el-input v-model="ruleForm.groupname"></el-input>
+                    </el-form-item>
                     <el-form-item label-width="120px" label="合同时间:" prop="contracttime">
                         <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.contracttime"
                             style="width: 100%;"></el-date-picker>
@@ -313,6 +314,11 @@ export default {
                 }
             });
         },
+        //拼接团名
+        splicingname(){
+            console.log(111)
+            this.ruleForm.groupname=this.ruleForm.customerunits+'赴'+this.ruleForm.countriesvisited+this.ruleForm.numdays+'日'
+        },
         //清空
         resetForm(formName) {
             this.$refs[formName].resetFields();
@@ -545,6 +551,7 @@ export default {
             this.ruleForm.customerunits=item.value.split('   ')[1];
             this.ruleForm.phonenumber=item.value.split('   ')[2];
             this.ruleForm.Wechat=item.value.split('   ')[3];
+            this.splicingname();
         }
     },
     beforeRouteEnter(to, from, next) {

+ 6 - 6
src/components/OP/OpLtinerary.vue

@@ -15,13 +15,13 @@
                 </div>
                 <div class="opltinerary-head-li">
                     <el-button size="medium" type="primary">删除本团行程</el-button>
-                    <el-button size="medium" type="primary">导入数据</el-button>
+                    <!-- <el-button size="medium" type="primary">导入数据</el-button> -->
                     <el-button size="medium" type="primary">保存修改</el-button>
                     <el-button size="medium" type="primary">导出完整行程</el-button>
-                    <el-button size="medium" type="primary">导出下拉所选表格</el-button>
+                    <!-- <el-button size="medium" type="primary">导出下拉所选表格</el-button> -->
                 </div>
             </div>
-            <div class="opname-box">
+            <!-- <div class="opname-box">
                 <div class="opname-head-li">
                     <label>选择城市:</label>
                     <el-select style="width:210px" size="medium" v-model="value" filterable placeholder="请选择">
@@ -53,7 +53,7 @@
                     <el-button size="medium" type="primary">新增数据</el-button>
                     <el-button size="medium" type="primary">确定行程</el-button>
                 </div>
-            </div>
+            </div> -->
             <div class="itinerary-box">
                 <div class="itinerary-title">
                     【123】团 10 日行程
@@ -108,7 +108,7 @@
                         </div>
                     </div>
                 </div>
-                <div class="briefly-box">
+                <!-- <div class="briefly-box">
                     <div class="briefly-select">
                         <div class="briefly-select-li">
                             <label>下拉选择国家:</label>
@@ -151,7 +151,7 @@
                         v-model="textarea2">
                         </el-input>
                     </div>
-                </div>
+                </div> -->
             </div>
         </div>
     </div>

+ 592 - 0
src/components/OP/backwardtabke.vue

@@ -0,0 +1,592 @@
+<template>
+    <div>
+        <div class="backward-all">
+            <div class="backward-head">
+                <div class="backward-head-li">
+                    <label>团组名称:</label>
+                    <el-select @change="changegroup" style="width:250px" v-model="value" filterable
+                        placeholder="请选择">
+                        <el-option v-for="item in options" :key="item.id" :label="item.teamName" :value="item.id">
+                        </el-option>
+                    </el-select>
+                </div>
+                <div class="backward-head-li">
+                    <el-button @click="PostInvertedListCreate" type="primary">生成倒推表</el-button>
+                    <el-button @click="PostInvertedListUpdate" type="primary">保 存</el-button>
+                    <el-button @click="PostInvertedListFileDownload" type="primary">导出倒推表
+
+                    </el-button>
+                </div>
+            </div>
+            <div class="backward-title">
+                <div class="backward-title-yi">{{groupinfo.teamName}}团出行准备流程表</div>
+                <div class="backward-title-er">
+                    出访国家:{{groupinfo.visitCountry}}&nbsp;&nbsp;&nbsp;&nbsp;出访时间:{{groupinfo.visitStartDate|capitalize}}</div>
+            </div>
+            <div class="backward-table">
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.approvalDataDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">报批资料准备</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.approvalDataRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.approvalDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">
+                        <div style="line-height: 25px;">
+                            报批/提供送签资料
+                        </div>
+                        <div style="line-height: 25px;">
+                            <el-radio v-model="datainfo.approvalType" label="1">预批件</el-radio>
+                            <el-radio v-model="datainfo.approvalType" label="2">正常批件</el-radio>
+                        </div>
+                    </div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.approvalRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.issueApprovalDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">出批件</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.issueApprovalRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.applyPassportDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">护照办理</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.applyPassportRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.visaInformationDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">签证资料准备</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.visaInformationRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.sendVisaDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">送签签证</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.sendVisaRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        送签国家选择:
+                    </div>
+                    <div class="backward-li-span"></div>
+                    <div class="backward-li-span">
+                        <el-table :data="datainfo.visaCountryData" border style="width: 100%">
+                            <el-table-column prop="country" label="国家">
+                                <template slot-scope="scope">
+                                    <el-input v-model="scope.row.country" placeholder="请输入内容"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="officialTypeId" label="公务类型" width="180">
+                                <template slot-scope="scope">
+                                    <el-select style="width:100%" v-model="scope.row.officialTypeId" clearable placeholder="请选择"
+                                        @change="filterStatus(value)">
+                                        <el-option v-for="item in officialTypeData" :key="item.id" :label="item.name"
+                                            :value="item.id">
+                                        </el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="visaTypeId" label="签证类型" width="180">
+                                <template slot-scope="scope">
+                                    <el-select style="width:100%" v-model="scope.row.visaTypeId" clearable placeholder="请选择"
+                                        @change="filterStatus(value)">
+                                        <el-option v-for="item in visaTypeData" :key="item.id" :label="item.name"
+                                            :value="item.id">
+                                        </el-option>
+                                    </el-select>
+                                </template>
+                            </el-table-column>
+                            <el-table-column prop="visaDay" label="签证时间" width="180">
+                                <template slot-scope="scope">
+                                    <el-input-number style="width:100%" :min="1" :precision="0" placeholder="数量" v-model="scope.row.visaDay" :controls='false'>
+                                    </el-input-number>
+                                </template>
+                            </el-table-column>
+                        </el-table>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.issueVisaDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">出签</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.issueVisaRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.preTripMeetingDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">开行前会</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.preTripMeetingRemark">
+                        </el-input>
+                    </div>
+                </div>
+                <div class="backward-table-li">
+                    <div class="backward-li-span">
+                        <el-date-picker v-model="datainfo.airportdDropOffDt" type="date" placeholder="选择日期">
+                        </el-date-picker>
+                    </div>
+                    <div class="backward-li-span">送机</div>
+                    <div class="backward-li-span">
+                        <el-input type="textarea" :autosize="{ minRows: 2, maxRows: 2}" placeholder="请输入内容"
+                            v-model="datainfo.airportdDropOffRemark">
+                        </el-input>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data () {
+        return {
+            value:'',
+            options:[],
+            groupinfo:{},
+            value1:'',
+            radio:'1',
+            datainfo:{
+                airportdDropOffDt:'',//送机 - A
+                airportdDropOffRemark:'',//送机 备注
+                applyPassportDt:'',//办护照时间 - B
+                applyPassportRemark:'',//办护照 备注
+                approvalDataDt:'',//报批资料准备时间 - A
+                approvalDataRemark:'',//报批资料准备 备注
+                approvalDt:'',//报批时间 - A
+                approvalRemark:'',//报批 备注
+                approvalType:0,//报批时间 1 预批件 2 正常批件 默认值??-1
+                diId:0,
+                id:0,
+                isAirportdDropOff:0,//送机 是否完成
+                isApplyPassport:0,//办护照 是否完成
+                isApproval:0,//报批 是否完成
+                isApprovalData:0,//报批资料准备 是否完成
+                isIssueApproval:0,//出批件 是否完成
+                isIssueVisa:0,//出签 是否完成
+                isPreTripMeeting:0,//行前会 是否完成
+                isQuery:false,//查询标识 true 需提醒客户该团未创建倒推表
+                isSendVisa:0,//送签 是否完成
+                isVisaInformation:0,//签证资料准备 是否完成
+                issueApprovalDt:'',//出批件时间 - A
+                issueApprovalRemark:'',//出批件时间 备注
+                issueVisaDt:'',//出签时间 - B
+                issueVisaRemark:'',//出签 备注
+                preTripMeetingDt:'',//行前会 - A
+                preTripMeetingRemark:'',//行前会 备注
+                sendVisaDt:'',//送签时间 - B
+                sendVisaRemark:'',//送签 备注
+                visaCountryData:[],
+                visaInformationDt:'',//签证资料准备时间
+                visaInformationRemark:'',//签证资料准备 备注
+            },
+            officialTypeData:[],
+            visaTypeData:[],
+        }   
+    },
+    methods:{
+        //获取团组list
+        GetGroupNameList() {
+            var url = "/api/Groups/PostInvertedListInit"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    portType: 1
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.options=res.data.data.groupData;
+                    that.value=that.options[0].id;
+                    that.officialTypeData=res.data.data.officialTypeData;
+                    that.visaTypeData=res.data.data.visaTypeData;
+                    that.officialTypeData.push({id:-1,name:'未选择'});
+                    that.visaTypeData.push({id:-1,name:'未选择'});
+                    that.PostShareGroupInfo();
+                    that.PostInvertedListInfo();
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error(error);
+            });
+        },
+        //获取团组倒推表
+        PostInvertedListInfo() {
+            var url = "/api/Groups/PostInvertedListInfo"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + that.token
+                },
+                data: {
+                    portType: 1,
+                    diId: that.value
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.datainfo.airportdDropOffDt=res.data.data.airportdDropOffDt;
+                    that.datainfo.airportdDropOffRemark=res.data.data.airportdDropOffRemark;
+                    that.datainfo.applyPassportDt=res.data.data.applyPassportDt;
+                    that.datainfo.applyPassportRemark=res.data.data.applyPassportRemark;
+                    that.datainfo.approvalDataDt=res.data.data.approvalDataDt;
+                    that.datainfo.approvalDataRemark=res.data.data.approvalDataRemark;
+                    that.datainfo.approvalDt=res.data.data.approvalDt;
+                    that.datainfo.approvalRemark=res.data.data.approvalRemark;
+                    that.datainfo.approvalType=res.data.data.approvalType+'';
+                    that.datainfo.diId=res.data.data.diId;
+                    that.datainfo.id=res.data.data.id;
+                    that.datainfo.isAirportdDropOff=res.data.data.isAirportdDropOff;
+                    that.datainfo.isApplyPassport=res.data.data.isApplyPassport;
+                    that.datainfo.isApproval=res.data.data.isApproval;
+                    that.datainfo.isApprovalData=res.data.data.isApprovalData;
+                    that.datainfo.isIssueApproval=res.data.data.isIssueApproval;
+                    that.datainfo.isIssueVisa=res.data.data.isIssueVisa;
+                    that.datainfo.isPreTripMeeting=res.data.data.isPreTripMeeting;
+                    that.datainfo.isQuery=res.data.data.isQuery;
+                    that.datainfo.isSendVisa=res.data.data.isSendVisa;
+                    that.datainfo.isVisaInformation=res.data.data.isVisaInformation;
+                    that.datainfo.issueApprovalDt=res.data.data.issueApprovalDt;
+                    that.datainfo.issueApprovalRemark=res.data.data.issueApprovalRemark;
+                    that.datainfo.issueVisaDt=res.data.data.issueVisaDt;
+                    that.datainfo.issueVisaRemark=res.data.data.issueVisaRemark;
+                    that.datainfo.preTripMeetingDt=res.data.data.preTripMeetingDt;
+                    that.datainfo.preTripMeetingRemark=res.data.data.preTripMeetingRemark;
+                    that.datainfo.sendVisaDt=res.data.data.sendVisaDt;
+                    that.datainfo.sendVisaRemark=res.data.data.sendVisaRemark;
+                    that.datainfo.visaCountryData=res.data.data.visaCountryData;
+                    that.datainfo.visaInformationDt=res.data.data.visaInformationDt;
+                    that.datainfo.visaInformationRemark=res.data.data.visaInformationRemark;
+                    if(that.datainfo.isQuery==true){
+                        that.$notify({
+                        title: '提示',
+                        message: '暂无签证费用信息!',
+                        duration: 0
+                        });
+                    }
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error(error);
+            });
+        },
+        //数据初始化
+        datacsh(){
+            this.datainfo={
+                airportdDropOffDt:'',//送机 - A
+                airportdDropOffRemark:'',//送机 备注
+                applyPassportDt:'',//办护照时间 - B
+                applyPassportRemark:'',//办护照 备注
+                approvalDataDt:'',//报批资料准备时间 - A
+                approvalDataRemark:'',//报批资料准备 备注
+                approvalDt:'',//报批时间 - A
+                approvalRemark:'',//报批 备注
+                approvalType:0,//报批时间 1 预批件 2 正常批件 默认值??-1
+                diId:0,
+                id:0,
+                isAirportdDropOff:0,//送机 是否完成
+                isApplyPassport:0,//办护照 是否完成
+                isApproval:0,//报批 是否完成
+                isApprovalData:0,//报批资料准备 是否完成
+                isIssueApproval:0,//出批件 是否完成
+                isIssueVisa:0,//出签 是否完成
+                isPreTripMeeting:0,//行前会 是否完成
+                isQuery:false,//查询标识 true 需提醒客户该团未创建倒推表
+                isSendVisa:0,//送签 是否完成
+                isVisaInformation:0,//签证资料准备 是否完成
+                issueApprovalDt:'',//出批件时间 - A
+                issueApprovalRemark:'',//出批件时间 备注
+                issueVisaDt:'',//出签时间 - B
+                issueVisaRemark:'',//出签 备注
+                preTripMeetingDt:'',//行前会 - A
+                preTripMeetingRemark:'',//行前会 备注
+                sendVisaDt:'',//送签时间 - B
+                sendVisaRemark:'',//送签 备注
+                visaCountryData:[],
+                visaInformationDt:'',//签证资料准备时间
+                visaInformationRemark:'',//签证资料准备 备注
+            }
+        },
+        //获取团组info
+        PostShareGroupInfo() {
+            var url = "/api/Business/PostShareGroupInfo"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    portType: 1,
+                    id: that.value,
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.groupinfo=res.data.data;
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error(error);
+            });
+        },
+        //团组切换
+        changegroup(){
+            this.datacsh();
+            this.PostShareGroupInfo();
+            this.PostInvertedListInfo();
+        },
+        //生成倒推表
+        PostInvertedListCreate() {
+            var url = "/api/Groups/PostInvertedListCreate"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    portType: 1,
+                    diId: that.value
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.$message({
+                        message:res.data.msg ,
+                        type: 'success',
+                        offset:50
+                    });
+                    that.PostInvertedListInfo();
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error(error);
+            });
+        },
+        //保存
+        PostInvertedListUpdate() {
+            var url = "/api/Groups/PostInvertedListUpdate"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + this.token
+                },
+                data: {
+                    portType: 1,
+                    isQuery:that.datainfo.isQuery,
+                    id: that.datainfo.id,
+                    diId: that.datainfo.diId,
+                    approvalDataDt: that.datainfo.approvalDataDt,
+                    isApprovalData: that.datainfo.isApprovalData,
+                    approvalDataRemark: that.datainfo.approvalDataRemark,
+                    approvalDt: that.datainfo.approvalDt,
+                    approvalType: that.datainfo.approvalType,
+                    isApproval: that.datainfo.isApproval,
+                    approvalRemark: that.datainfo.approvalRemark,
+                    issueApprovalDt: that.datainfo.issueApprovalDt,
+                    isIssueApproval: that.datainfo.isIssueApproval,
+                    issueApprovalRemark: that.datainfo.issueApprovalRemark,
+                    applyPassportDt: that.datainfo.applyPassportDt,
+                    isApplyPassport: that.datainfo.isApplyPassport,
+                    applyPassportRemark: that.datainfo.applyPassportRemark,
+                    visaInformationDt: that.datainfo.visaInformationDt,
+                    isVisaInformation: that.datainfo.isVisaInformation,
+                    visaInformationRemark: that.datainfo.visaInformationRemark,
+                    visaCountryData: that.datainfo.visaCountryData,
+                    sendVisaDt: that.datainfo.sendVisaDt,
+                    isSendVisa: that.datainfo.isSendVisa,
+                    sendVisaRemark: that.datainfo.sendVisaRemark,
+                    issueVisaDt: that.datainfo.issueVisaDt,
+                    isIssueVisa: that.datainfo.isIssueVisa,
+                    issueVisaRemark: that.datainfo.issueVisaRemark,
+                    preTripMeetingDt: that.datainfo.preTripMeetingDt,
+                    isPreTripMeeting: that.datainfo.isPreTripMeeting,
+                    preTripMeetingRemark: that.datainfo.preTripMeetingRemark,
+                    airportdDropOffDt: that.datainfo.airportdDropOffDt,
+                    isAirportdDropOff: that.datainfo.isAirportdDropOff,
+                    airportdDropOffRemark: that.datainfo.airportdDropOffRemark,
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.$message({
+                        message:res.data.msg ,
+                        type: 'success',
+                        offset:50
+                    });
+                    that.PostInvertedListInfo();
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error(error);
+            });
+        },
+        //导出倒推表
+        PostInvertedListFileDownload() {
+            var url = "/api/Groups/PostInvertedListFileDownload"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer ' + that.token
+                },
+                data: {
+                    portType: 1,
+                    diId: that.value
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.$message({
+                        message:res.data.msg ,
+                        type: 'success',
+                        offset:50
+                    });
+                    window.open(res.data.data);
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error(error);
+            });
+        },
+    },
+    filters: {
+        capitalize: function (value) {
+            return value.split(" ")[0]
+        }
+    },
+    created(){
+        this.GetGroupNameList()
+    }
+}
+</script>
+<style>
+.backward-all{
+    background-color: #fff;
+    padding: 10px;
+    box-shadow: 0 0 5px #0005;
+    border-radius: 10px;
+    height: 100%;
+    min-height: 840px;
+}
+.backward-head-li label{
+    color: #606266;
+    font-size: 15px;
+    font-weight: 600;
+}
+.backward-head{
+    display: flex;
+    justify-content: space-between;
+}
+.backward-title{
+    margin: 30px 0 ;
+    text-align: center;
+}
+.backward-title-yi{
+    color: #606266;
+    font-size: 15px;
+    font-weight: 600;
+    margin-bottom: 20px;
+}
+.backward-title-er{
+    color: #606266;
+    font-size: 14px;
+    font-weight: 600;
+}
+.backward-table-li{
+    display: flex;
+    border-top: 1px solid #ebeef5;
+}
+.backward-table-li:last-child{ 
+    border-bottom: 1px solid #ebeef5;
+}
+.backward-li-span:nth-child(1){
+    width: 15%;
+}
+.backward-li-span:nth-child(2){
+    width: 20%;
+    color: #606266;
+    font-size: 14px;
+    font-weight: 600;
+}
+.backward-li-span:nth-child(3){
+    width: 65%;
+}
+.backward-li-span{
+    border-left: 1px solid #ebeef5;
+    padding: 10px;
+    text-align: center;
+    line-height: 54px;
+}
+.backward-li-span:last-child{
+    border-right: 1px solid #ebeef5;
+}
+.backward-li-span .el-radio{
+    font-size: 14px;
+    margin-right: 6px;
+}
+.backward-li-span .el-radio__label{
+    padding-left: 4px;
+}
+</style>

+ 26 - 98
src/components/home.vue

@@ -50,83 +50,14 @@
               <el-divider v-if="msglist.length>=count" style="">没有更多了!</el-divider>
             </div>
           </div>
-          <!-- <el-tab-pane name="first">
-            <span slot="label">
-              任务操作通知
-              <el-badge :hidden="tasknot==0?true:false" :value="tasknot" :max="9999"></el-badge>
-            </span>
-            <div class="read-btn">
-              <el-badge :hidden="tasknot==0?true:false" :value="tasknot" class="item">
-                <el-button type="primary" @click="taskclick('未读')"  size="mini" :plain="tasknobtn" >未读</el-button>
-              </el-badge>
-              <el-button type="primary" @click="taskclick('已读')" size="mini" :plain="taskbtn" >
-                已读
-              </el-button>
-            </div>
-            <div class="scroll-box">
-              <div class="news-box" v-for="(item,index) in newstasklist" :key="index">
-                <div class="news-box-list">
-                  <div class="news-list-hade">
-                    <div>{{item.title}}</div>
-                    <div>所属部门: {{item.issuerDep}}</div>
-                  </div>
-                  <div class="news-list-content" v-html="item.content">
-                  </div>
-                  <div class="news-list-posts">
-                    <div>发布人: {{item.issuerUser}}</div>
-                    <div>发布时间: {{item.releaseTime}}</div>
-                  </div>
-                  <div class="news-list-btn" >
-                    <el-button @click="DeleMsg(index,item)" v-if="item.isRead==0" type="primary">确认已读</el-button>
-                    <el-button v-if="item.isRead==1" type="info">已读</el-button>
-                  </div>
-                </div>
-              </div>
-              <div class="notyet" v-if="newstasklist.length==0">
-                暂无通知
-              </div>
-            </div>
-          </el-tab-pane>
-          <el-tab-pan name="second">
-            <span slot="label">
-              团组操作通知
-              <el-badge :hidden="groupnot==0?true:false" :value='groupnot' :max="9999"></el-badge>
-            </span>
-            <div class="read-btn">
-              <el-badge :hidden="groupnot==0?true:false" :value="groupnot" class="item">
-                <el-button type="primary" size="mini" @click="groupclick('未读')" :plain="groupnobtn" >未读</el-button>
-              </el-badge>
-              <el-button type="primary" size="mini" @click="groupclick('已读')" :plain="groupbtn" >
-                已读
-              </el-button>
-            </div>
-            <div class="scroll-box">
-              <div class="news-box" v-for="(item,index) in newsgrouplist" :key="index">
-                <div class="news-box-list">
-                  <div class="news-list-hade">
-                    <div>{{item.title}}</div>
-                    <div>所属部门: {{item.issuerDep}}</div>
-                  </div>
-                  <div class="news-list-content" v-html="item.content">
-                  </div>
-                  <div class="news-list-posts">
-                    <div>发布人: {{item.issuerUser}}</div>
-                    <div>发布时间: {{item.releaseTime}}</div>
-                  </div>
-                  <div class="news-list-btn">
-                    <el-button v-if="item.isRead==0" type="primary">确认已读</el-button>
-                    <el-button v-if="item.isRead==1" type="info">已读</el-button>
-                  </div>
-                </div>
-              </div>
-              <div class="notyet" v-if="newsgrouplist.length==0">
-                暂无通知
-              </div>
-            </div>
-          </el-tab-pan> e-->
         </el-tabs>
       </el-dialog>
     </div>
+    <div class="gpt-dialog">
+      <el-dialog top="3vh" width="1600px" title="请自行用手机号注册即可使用" :visible.sync="gptdialog">
+        <iframe src="https://kimi.moonshot.cn" width="100%" height="800px"></iframe>
+      </el-dialog>
+    </div>
     <el-container class="all">
       <el-aside class="delwh menubar">
         <div  ref="haeds" class="user">
@@ -153,7 +84,7 @@
             </div>
           </div>
         </div>
-        <el-menu :default-active="indexs" class="el-menu-vertical-demo meun-ul" @open="handleOpen" @close="handleClose"
+        <el-menu :style="gaodu" :default-active="indexs" class="el-menu-vertical-demo meun-ul" @open="handleOpen" @close="handleClose"
           :collapse="isCollapse">
           <el-menu-item v-for="(item, filindex) in filmenuList" :key="filindex + '/'"
             :index="item.modulid + '-' + item.pageList[0].pageid" @click="toURLs($event.index, item)">
@@ -171,22 +102,6 @@
                 :index="items.modulid + '-' + items.pageid">{{ items.pageName }}</el-menu-item>
             </el-menu-item-group>
           </el-submenu>
-          <!-- <el-menu-item index="1" @click="toURL($event.index)">
-            <i class="iconfont icon-shouye"></i>
-            <span slot="title">首页</span>
-          </el-menu-item>
-          <el-menu-item index="2" @click="toURL($event.index)">
-            <i class="el-icon-menu"></i>
-            <span slot="title">企业数据</span>
-          </el-menu-item>
-          <el-menu-item index="3" @click="toURL($event.index)">
-            <i class="el-icon-setting"></i>
-            <span slot="title">主业务加价设置</span>
-          </el-menu-item>
-          <el-menu-item index="4" @click="toURL($event.index)">
-            <i class="iconfont icon-tongjitu"></i>
-            <span slot="title">数据统计</span>
-          </el-menu-item> -->
         </el-menu>
       </el-aside>
       <el-container>
@@ -219,19 +134,19 @@
             <div class="instrument-box-title">实用工具</div>
             <div class="instrument-box-inif">
               <div class="box-inif-ul">
-                <div class="box-inif-li">
+                <div @click="gptdialog = true"  class="box-inif-li">
                   <div class="inif-li-img">
                     <img src="../assets/QuNaEr.jpg" alt="" />
                   </div>
-                  <div class="inif-li-text">去哪儿</div>
+                  <div class="inif-li-text">KIMI</div>
                 </div>
-                <div class="box-inif-li">
+                <div @click="opengpt" class="box-inif-li">
                   <div class="inif-li-img">
                     <img src="../assets/QuNaEr.jpg" alt="" />
                   </div>
-                  <div class="inif-li-text">去哪儿</div>
+                  <div class="inif-li-text">GPT</div>
                 </div>
-                <div class="box-inif-li">
+                <!-- <div class="box-inif-li">
                   <div class="inif-li-img">
                     <img src="../assets/QuNaEr.jpg" alt="" />
                   </div>
@@ -284,7 +199,7 @@
                     <img src="../assets/QuNaEr.jpg" alt="" />
                   </div>
                   <div class="inif-li-text">去哪儿</div>
-                </div>
+                </div> -->
               </div>
             </div>
           </div>
@@ -361,7 +276,9 @@ export default {
       msglist:[],//list
       count:0,//list数量
       panduans:false,
-      iconfont:'iconfont '
+      iconfont:'iconfont ',
+      gaodu:'',
+      gptdialog:false
     };
   },
   // components: {
@@ -400,7 +317,13 @@ export default {
       this.$router.push({ path: "/home" + item.webUrl });
       document.querySelector(".header-title").innerHTML = item.pageName;
     },
+    //打开gpt
+    opengpt(){
+      window.open('https://chat.openai.com')
+    },
+    
     radioChange(val) {
+      this.gaodu='height:'+ (window.innerHeight-(this.$refs.haeds.offsetHeight+this.$refs.avatarhaeds.offsetHeight))+'px'
       var radiobox = document.querySelectorAll(".radiobox");
       if (val == true) {
         this.panduan = false;
@@ -1290,5 +1213,10 @@ i.icon-tongzhi {
 .all-box .el-table--enable-row-transition .el-table__body td.el-table__cell{
   text-align: center;
 }
+
+.gpt-dialog .el-dialog__body{
+  padding: 0 20px;
+  padding-bottom:10px;
+}
 </style>
 

+ 3 - 3
src/components/statistics/Reportstbale.vue

@@ -555,12 +555,12 @@
                             <el-table-column
                             prop="flightsCode"
                             label="航班号"
-                            width="180">
+                            width="120">
                             </el-table-column>
                             <el-table-column
                             prop="flightsCity"
                             label="城市A-B"
-                            width="180">
+                            width="120">
                             </el-table-column>
                             <el-table-column
                             prop="flightsDate"
@@ -575,7 +575,7 @@
                             <el-table-column
                             prop="clientName"
                             label="客人姓名"
-                            width="120">
+                            width="200">
                             </el-table-column>
                             <el-table-column
                             prop="payMoneyCurrency"

+ 6 - 1
src/router/index.js

@@ -102,7 +102,7 @@ import Statistically from '@/components/statistics/Statistically';
 import RvsReport from '@/components/Finance/RvsReport';
 import Overspend from '@/components/Finance/Overspend';
 import Overspendedit from '@/components/Finance/Overspendedit';
-
+import backwardtabke from '@/components/OP/backwardtabke'
 
 
 
@@ -632,6 +632,11 @@ export default new Router({
           name: 'Overspendedit',
           component: Overspendedit
         },
+        {
+          path: '/home/backwardtabke',
+          name: 'backwardtabke',
+          component: backwardtabke
+        },
       ]
     },
     {