Bläddra i källkod

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

yuanrf 3 månader sedan
förälder
incheckning
85c316aafd

BIN
src/assets/shoujitianjia.png


+ 13 - 1
src/components/MCR/MarketCustomerResourcesHome.vue

@@ -324,7 +324,19 @@ export default {
         },
         loghandleCurrentChange(val) {
             this.logcurrentPage = val;
-            this.logchange();
+            let opTypeLabels = '';
+            let opUserLabels = '';
+            for (let i = 0; i < this.form.opTypeLabel.length; i++) {
+                opTypeLabels += this.form.opTypeLabel[i] + ','
+            }
+            opTypeLabels = opTypeLabels.substring(0, opTypeLabels.length - 1)
+
+            for (let j = 0; j < this.form.opUserLabel.length; j++) {
+                opUserLabels += this.form.opUserLabel[j] + ','
+            }
+            opUserLabels = opUserLabels.substring(0, opUserLabels.length - 1)
+            this.NewClientDataRecord(opTypeLabels, opUserLabels, this.datetime(this.form.time[0]), this.datetime(this.form.time[1]))
+            // this.logchange();
         },
         //每页条数改变时触发 选择一页显示多少行
         handleSizeChange(val) {

+ 220 - 55
src/components/MarketplacePick.vue

@@ -1,13 +1,25 @@
 <template>
     <div class="marketplacepick-all">
-        <div class="marketplacepick-form">
+        <div class="marketplacepick-form" v-loading.fullscreen.lock="fullscreenLoading">
+            <div class="addbox">
+                <div class="addbox-title">需求收集</div>
+                <div style="display: flex;align-items: center;">
+                    <el-button @click="GroupOrderPreInfoDel" v-if="formid!=0" style="margin-right: 5px;" size="mini" type="danger">作废</el-button>
+                    <div @click="additionsj" class="addbox-img"><img src="../assets/shoujitianjia.png" /></div>
+                </div>
+            </div>
             <div class="marketplacepick-form-head">
-                <el-select @change="GroupOrderPreInfochange" style="width: 357px;margin-bottom: 10px;" v-model="tempId" clearable placeholder="请选择">
+                <el-select @change="GroupOrderPreInfochange" style="width: 357px;margin-bottom: 10px;" v-model="tempId"
+                    clearable placeholder="请选择">
                     <el-option v-for="item in tempDatas" :key="item.id" :label="item.name" :value="item.id">
                     </el-option>
                 </el-select>
-                <el-select @change="GroupOrderPreInfochange" style="width: 357px;margin-bottom: 10px;" v-model="formid" clearable placeholder="请选择">
-                    <el-option v-for="item in names" :key="item.id" :label="item.name" :value="item.id">
+                <el-autocomplete placeholder="请输入标题" style="width: 357px;margin-bottom: 10px;" popper-class="el-autocomplete-suggestion" :popper-append-to-body="false" class="inline-input"
+                    size="medium" v-model.trim="formname" :fetch-suggestions="querySearch"
+                    @select="formnameselect">
+                </el-autocomplete>
+                <el-select filterable style="width: 357px;margin-bottom: 10px;" v-model="groupId" clearable placeholder="请选择">
+                    <el-option v-for="item in groupNames" :key="item.id" :label="item.groupName" :value="item.id">
                     </el-option>
                 </el-select>
             </div>
@@ -16,20 +28,20 @@
                     <div class="marketplacepick-form-li" v-for="(item,index) in controlarr" :key="index">
                         <el-form-item :label="item.fieldName">
                             <el-input v-if="item.fieldTypeName == '文本'" v-model="item.newValue"></el-input>
-                            <el-input-number id="marketplacepicknumber" v-if="item.fieldTypeName == '数字'"
-                                :controls="false" v-model="item.newValue"></el-input-number>
+                            <el-input id="marketplacepicknumber" v-if="item.fieldTypeName == '数字'"
+                                :controls="false" v-model="item.newValue"></el-input>
                             <el-radio-group v-if="item.fieldTypeName == '单选按钮'" v-model="item.newValue">
                                 <el-radio label="有"></el-radio>
                                 <el-radio label="无"></el-radio>
                             </el-radio-group>
-                            <el-select @change="PromptChecked(item.newValue)" filterable
+                            <el-select ref="multiSelect" @change="PromptChecked(item.newValue)" filterable
                                 v-if="item.fieldTypeName == '搜索框' && item.fieldName == '出访国家(地、区)'"
                                 v-model="item.newValue" multiple placeholder="请选择">
                                 <el-option v-for="item in countryarr" :key="item.value" :label="item.value"
                                     :value="item.value">
                                 </el-option>
                             </el-select>
-                            <el-select filterable v-if="item.fieldTypeName == '搜索框' && item.fieldName == '涉及城市'"
+                            <el-select ref="csmultiSelect" @change="CSPromptChecked" filterable v-if="item.fieldTypeName == '搜索框' && item.fieldName == '涉及城市'"
                                 v-model="item.newValue" multiple placeholder="请选择">
                                 <el-option v-for="item in cityarr" :key="item.value" :label="item.value"
                                     :value="item.value">
@@ -42,14 +54,14 @@
                             </el-autocomplete> -->
                         </el-form-item>
                         <el-form-item v-if="item.isRemark">
-                            <el-input type="textarea" v-model="item.remark"></el-input>
+                            <el-input v-if="item.fieldTypeName == '单选按钮'" placeholder="如果有,请输入具体需求" type="textarea" v-model="item.remark"></el-input>
+                            <el-input v-else type="textarea" placeholder="备注" v-model="item.remark"></el-input>
                         </el-form-item>
                     </div>
                 </div>
-                <!-- <el-form-item>
-                    <el-button type="primary" @click="submitForm('ruleForm')">立即创建</el-button>
-                    <el-button @click="resetForm('ruleForm')">重置</el-button>
-                </el-form-item> -->
+                <div style="text-align: right;margin-bottom: 25px;">
+                    <el-button @click="GroupOrderPreInfoSave" type="primary">保 存</el-button>
+                </div>
             </el-form>
         </div>
     </div>
@@ -92,46 +104,51 @@ export default {
                     { required: true, message: '请填写活动形式', trigger: 'blur' }
                 ]
             },
-            formid:1,
+            formid:'',
+            formname:'',
             tempId:1404,
             controlarr:[],
             tempDatas:[],
             countryarr:[],
             cityarr:[],
-            names:[]
+            names:[],
+            groupId:'',
+            groupNames:[],
+            userid:'',
+            fullscreenLoading:false,
         }
     },
     methods:{
-        submitForm(formName) {
-            this.$refs[formName].validate((valid) => {
-                if (valid) {
-                    alert('submit!');
-                } else {
-                    console.log('error submit!!');
-                    return false;
-                }
-            });
-        },
-        resetForm(formName) {
-            this.$refs[formName].resetFields();
-        },
         //或取基础数据
-        GroupOrderPreInfos() {
-            var url = "/api/Groups/GroupOrderPreInfo/"
+        GroupOrderPreInfos(val) {
+            this.fullscreenLoading=true;
+            var url = "/api/Groups/GroupOrderPreInfo/"+this.userid
             var that = this
             this.$axios({
                 method: 'get',
                 url: url,
             }).then(function (res) {
+                var basicsdata=res.data.data
                 if (res.data.code==200) {
-                    var basicsdata=res.data.data
                     that.tempDatas=basicsdata.tempDatas;
-                    that.tempId=that.tempDatas[0].id;
-                    that.names=basicsdata.names;
-                    that.formid=that.names[0].id;
+                    
+                    that.names = basicsdata.names.map((terminal) => {
+                        return {
+                            id:terminal.id,
+                            value: terminal.name,
+                        };
+                    });
+                    if (!val) {
+                        that.tempId=that.tempDatas[0].id;
+                        that.formid=0;
+                        that.formname='';
+                    }
+                    // that.names=basicsdata.names;
+                    that.groupNames=basicsdata.groupNames.data;
 
                     that.GroupOrderPreInfo();
                 }else{
+                    that.fullscreenLoading=false;
                     that.$message.error(res.data.msg);
                 }
             })
@@ -144,8 +161,8 @@ export default {
                 method: 'get',
                 url: url,
             }).then(function (res) {
+                var countryarr=res.data.data;
                 if (res.data.code==200) {
-                    var countryarr=res.data.data;
                     that.countryarr = countryarr.map((terminal) => {
                         return {
                             value: terminal,
@@ -177,12 +194,17 @@ export default {
                 }
             })
         },
+        //xj
+        additionsj(){
+            this.formname='',
+            this.formid=0;
+            this.groupId='';
+            this.GroupOrderPreInfo();
+        },
         querySearch(queryString, cb) {
-            var restaurants = this.countryarr;
+            var restaurants = this.names;
             var results = queryString ? restaurants.filter(this.createFilter(queryString)) : restaurants;
             // 调用 callback 返回建议列表的数据
-            console.log(cb);
-            
             cb(results);
         },
         createFilter(queryString) {
@@ -191,25 +213,26 @@ export default {
                 return restaurant.value.replace("  ", "").toLowerCase().match(queryStrings[queryStrings.length-1].toLowerCase());
             };
         },
+        formnameselect(val){
+            this.formid=val.id;
+            this.GroupOrderPreInfo();
+        },
         PromptChecked(val){
-            console.log(val);
+            setTimeout(()=>{
+                this.$refs.multiSelect[0].blur();
+            },50)
             var gjval='';
             val.map((value)=>{
                 gjval+=value+','
             })
             gjval=gjval.substring(0,gjval.length-1)
             this.CityByCountry(gjval)
-            // this.$store.state.countrystring.push(val.newValue)
-            // var res=new Map();
-            // var countrystringqrr=this.$store.state.countrystring.filter((a)=>!res.has(a)&&res.set(a,1));
-            // console.log(countrystringqrr);
-            
-            // // val.newValue=this.$store.state.countrystring
-            // var newValue=''
-            // countrystringqrr.map((value)=>{
-            //     newValue+=value+'、'
-            // })
-            // val.newValue=newValue.substring(0,newValue.length-1)
+
+        },
+        CSPromptChecked(){
+            setTimeout(()=>{
+                this.$refs.csmultiSelect[0].blur();
+            },50)
         },
         InputValue(val){
             // console.log(val);
@@ -232,32 +255,135 @@ export default {
             }).then(function (res) {
                 if (res.data.code==200) {
                     that.controlarr=res.data.data.items;
+                    that.groupId=res.data.data.groupId==0?'':res.data.data.groupId;
+                    for(let i=0;i<that.controlarr.length;i++){
+                        if(that.controlarr[i].fieldName=='出访国家(地、区)'){
+                            if (that.controlarr[i].newValue.length>0) {
+                                console.log(that.controlarr[i]);
+                                var gjvals = '';
+                                that.controlarr[i].newValue.map((value) => {
+                                    gjvals += value + ','
+                                })
+                                gjvals = gjvals.substring(0, gjvals.length - 1)
+                                that.CityByCountry(gjvals)
+                            }
+                        }
+                    }
+                    that.fullscreenLoading=false;
+                }else{
+                    that.$message.error(res.data.msg);
+                    that.fullscreenLoading=false;
+                }
+            })
+        },
+        //baocun
+        GroupOrderPreInfoSave() {
+            if(this.formname==''){
+                return this.$message.error('表单名称没填!');
+            }
+            var url = "/api/Groups/GroupOrderPreInfoSave"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                },
+                data: {
+                    id: that.formid,
+                    name: that.formname,
+                    groupId: that.groupId==''?0:that.groupId,
+                    items: that.controlarr,
+                    currUserId: that.userid,
+                }
+            }).then(function (res) {
+                if (res.data.code==200) {
+                    that.$message({
+                        type: 'success',
+                        message: res.data.msg
+                    });
+                    that.formid=res.data.data;
+                    that.GroupOrderPreInfos(true)
                 }else{
                     that.$message.error(res.data.msg);
                 }
             })
         },
 
+        //删除
+        GroupOrderPreInfoDel() {
+            this.$confirm('此操作将作废该数据, 是否继续?', '提示', {
+                customClass:'marketplacepick-confirm',
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                var url = "/api/Groups/GroupOrderPreInfoDel"
+                var that = this
+                this.$axios({
+                    method: 'post',
+                    url: url,
+                    headers: {
+                        Authorization: 'Bearer '
+                    },
+                    data: {
+                        id: that.formid,
+                        currUserId: that.userid,
+                    }
+                }).then(function (res) {
+                    if (res.data.code==200) {
+                        that.$message({
+                            type: 'success',
+                            message: res.data.msg
+                        });
+                        that.formid=0;
+                        that.formname='';
+                        that.GroupOrderPreInfos(true)
+                    }else{
+                        that.$message.error(res.data.msg);
+                    }
+                })
+            }).catch(() => {
+                this.$message({
+                    type: 'info',
+                    message: '操作已取消!'
+                });
+            });
+            
+        },
         GroupOrderPreInfochange(){
+            this.controlarr=[],
+            this.cityarr=[],
             this.GroupOrderPreInfo();
         }
     },
     mounted(){
+        if (this.$route.query.userid!=undefined) {
+            this.userid=this.$route.query.userid;
+        }else{
+            that.$message.error('没有用户id');
+        }
         this.GroupOrderPreInfos();
         this.CountryInit();
+        
         // this.GroupOrderPreInfo();
     }
 }
 </script>
 <style>
-.marketplacepick-form{
-    max-width: 1200px;
+.marketplacepick-all{
     min-width: 375px;
+    display: flex;
+    justify-content: center;
+}
+.marketplacepick-form{
+    max-width: 1101px;
+    min-width: 360px;
 }
 .marketplacepick-form-head,.marketplacepick-form .el-select{
     width: 100%;
 }
-.marketplacepick-form-head,.marketplacepick-form-li .el-input-number{
+.marketplacepick-form-head,.marketplacepick-form-li .el-input-number{ 
     width: 100%;
 }
 .marketplacepick-form-li .el-input-number .el-input__inner{
@@ -272,10 +398,18 @@ export default {
     margin-bottom: 10px;
     padding: 0px 5px;
     border: 1px dashed #b0b1b3;
+    border-radius: 5px;
 }
 .marketplacepick-form-li .el-autocomplete{
     width: 100%;
 }
+.addbox{
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-bottom: 15px;
+    margin-top: 15px;
+}
 .marketplacepick-form-li .el-input--medium .el-input__inner{
     height: 40px;
     line-height: 40px;
@@ -287,12 +421,43 @@ export default {
 .marketplacepick-form-li .el-form-item__label{
     float: none;
 }
-@media screen and (min-width: 376px) {
+.marketplacepick-form-head{
+    display: flex;
+    flex-wrap: wrap;
+}
+.marketplacepick-form-head .el-input--medium .el-input__inner{
+    height: 40px;
+    line-height: 40px;
+}
+.addbox-img{
+    width: 25px;
+    height: 25px;
+    margin-right: 5px;
+}
+.addbox-title{
+    font-size: 17px;
+    font-weight: 600;
+}
+.addbox-img img{
+    width: 100%;
+}
+.el-popup-parent--hidden .el-message-box__wrapper .marketplacepick-confirm{
+    width: 280px;
+}
+@media screen and (max-width: 749px){
+    .marketplacepick-form{
+        width: 360px;
+    }
+}
+@media screen and (min-width: 750px) {
     .marketplacepick-form-li{
         margin-right: 10px;
     }
     .marketplacepick-form-head .el-select{
         margin-right: 10px;
     }
+    .marketplacepick-form-head .el-autocomplete{
+        margin-right: 10px;
+    }
 }
-</style>
+</style>

+ 78 - 52
src/components/OP/EntryDetails.vue

@@ -13,7 +13,7 @@
             <div class="Entry-head">
                 <div class="Entry-head-li">
                     <label>团组名称:</label>
-                    <el-select style="width:250px" @change="chengvalue()" v-model="value" filterable placeholder="请选择">
+                    <el-select style="width:250px" @change="chengvalue" v-model="value" filterable placeholder="请选择">
                         <el-option v-for="item in options" :key="item.id" :label="item.groupName" :value="item.id">
                             <span v-if="item.isNull=='false'" style="color:#409EFF">{{ item.groupName }}</span>
                             <span v-else style="color:gray">{{ item.groupName }}</span>
@@ -432,7 +432,7 @@
                                     <el-input size="mini" v-model="scope.row.city"></el-input>
                                 </template> -->
                                 <template slot-scope="scope">
-                                    <el-select @change="TrainingExpenseDataSelect(scope.row, $event)" size="mini"
+                                    <el-select @change="TrainingExpenseDataSelect(scope.row, $event, scope.$index)" size="mini"
                                         v-model="scope.row.nationalTravelFeeId" filterable placeholder="请选择">
                                         <el-option v-for="item in placeinif" :key="item.id" :label="item.cityname"
                                             :value="item.id">
@@ -582,6 +582,7 @@
 
 import { Decimal } from 'decimal.js'
 import { debounce } from '../../store/statice'
+import { number } from 'echarts';
 export default {
     data() {
         return {
@@ -611,6 +612,8 @@ export default {
             
             isAssignPerm:false,
 
+            provinceId:'',
+
             userId: '',
             token: '',
             value: '',
@@ -708,14 +711,15 @@ export default {
                     that.options = res.data.data.groupNameData;
                     that.currencys = res.data.data.currencyInit;
                     that.viewUsersarr= res.data.data.viewPermissionData;
-                    // console.log(that.value)
                     if (that.value == null) {
                         that.value = res.data.data.groupNameData[0].id;
+                        that.provinceId = res.data.data.groupNameData[0].provinceId;
                     }
-                    that.listvalueoptions = res.data.data.wordTypeData;
-                    that.tablevalueoptions = res.data.data.excelTypeData;
+                    
                     that.GetEnterExitCostInfobyDiId();
                     that.PostGroupTeamRateByDiIdAndCTableId();
+                    that.GetNationalTravelFeeData();
+                    that.EnterExitCostFileOwner();
                 }
             })
         },
@@ -749,9 +753,6 @@ export default {
                         }
 
                     }
-                    console.log(that.othercurrencys);
-                    console.log(that.currencys);
-
                 } else {
                     that.$message.error(res.data.msg);
                 }
@@ -824,7 +825,6 @@ export default {
                 }).then(function (res) {
                     if (res.data.code == 200) {
                         that.TicketJudgment = res.data.data.airData;
-                        console.log(that.TotalExpenses.EconomyClass);
                         if (that.TotalExpenses.EconomyClass==0) {
                             that.TotalExpenses.EconomyClass = that.TicketJudgment.jjcCurrentRate;
                         }
@@ -856,6 +856,24 @@ export default {
             this.TotalExpenses.EconomyClass = this.TicketJudgment.jjcCurrentRate;
             this.TotalExpenses.BusinessClass = this.TicketJudgment.gwcCurrentRate;
         },
+        //获取文件
+        EnterExitCostFileOwner() {
+            this.listvalueoptions=[];
+            this.tablevalueoptions=[];
+            var url = "/api/Groups/EnterExitCostFileOwner/"+this.provinceId
+            var that = this
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.listvalueoptions = res.data.data.wordTypeData;
+                    that.tablevalueoptions = res.data.data.excelTypeData;
+                }else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
         //获取费用标注
         GetNationalTravelFeeData() {
             this.fullscreenLoading = true;
@@ -868,10 +886,10 @@ export default {
                     Authorization: 'Bearer ' + this.token
                 },
                 data: {
-                    portType: 1
+                    portType: 1,
+                    provinceId:that.provinceId,
                 }
             }).then(function (res) {
-                console.log(res)
                 let placeinifarr = [];
                 if (res.data.code == 200) {
                     for (let i = 0; i < res.data.data.length; i++) {
@@ -1439,7 +1457,8 @@ export default {
                     //住宿费
                     that.quarterageData = res.data.data.quarterageData;
                     for (let a = 0; a < res.data.data.quarterageData.length; a++) {
-                        that.TotalAccommodationFee += res.data.data.quarterageData[a].subTotal
+                        
+                        that.TotalAccommodationFee += Number(res.data.data.quarterageData[a].subTotal)
                     }
                     //伙食费
                     that.boardWagesData = res.data.data.boardWagesData;
@@ -1521,12 +1540,8 @@ export default {
         },
         //下拉
         handNodeClick(data, node, e) {
-            // console.log(data)
-            // console.log(node)
-            // console.log(e)
             this.treeDataValue = data.name
             this.treeData = data.name
-            // console.log(this.treeData)
         },
         //sr需求
         SRrequirement(obj) {
@@ -1542,11 +1557,6 @@ export default {
                 this.otherData[l].subTotal = Number(this.otherData[l].cost) * Number(rate);
                 this.otherExpense += this.otherData[l].subTotal;
             }
-            console.log(this.otherData);
-            console.log(rate);
-            console.log(obj.currency);
-
-
         },
         //住宿地区选择
         changeSelect(val, item, index) {
@@ -1566,9 +1576,10 @@ export default {
                 }
             }
             val.subTotal = Number(val.cost) * Number(rate);
+
             this.TotalAccommodationFee = 0;
             for (let a = 0; a < this.quarterageData.length; a++) {
-                this.TotalAccommodationFee += this.quarterageData[a].subTotal
+                this.TotalAccommodationFee += Number(this.quarterageData[a].subTotal.toFixed(2));
             }
             // this.mealschangeSelect(this.boardWagesData,item,index)
         },
@@ -1583,7 +1594,7 @@ export default {
             val.subTotal = Number(val.cost) * Number(rate);
             this.TotalAccommodationFee = 0;
             for (let a = 0; a < this.quarterageData.length; a++) {
-                this.TotalAccommodationFee += this.quarterageData[a].subTotal
+                this.TotalAccommodationFee += Number(Number(this.quarterageData[a].subTotal).toFixed(2));
             }
         },
         //伙食费费用标准值改变
@@ -1597,7 +1608,8 @@ export default {
             val.subTotal = Number(val.cost) * Number(rate);
             this.TotalMeals = 0;
             for (let a = 0; a < this.boardWagesData.length; a++) {
-                this.TotalMeals += this.boardWagesData[a].subTotal
+                // this.TotalMeals += this.boardWagesData[a].subTotal
+                this.TotalMeals += Number(Number(this.boardWagesData[a].subTotal).toFixed(2));
             }
         },
         //伙食地区选择
@@ -1650,7 +1662,8 @@ export default {
             val.subTotal = Number(val.cost) * Number(rate);
             this.TotalMiscellaneous = 0;
             for (let a = 0; a < this.miscellaneousFeeData.length; a++) {
-                this.TotalMiscellaneous += this.miscellaneousFeeData[a].subTotal
+                // this.TotalMiscellaneous += this.miscellaneousFeeData[a].subTotal
+                this.TotalMiscellaneous += Number(Number(this.miscellaneousFeeData[a].subTotal).toFixed(2));
             }
         },
         //公杂费地区选择
@@ -1689,12 +1702,11 @@ export default {
             this.TotalMiscellaneous = 0;
             for (let a = 0; a < this.miscellaneousFeeData.length; a++) {
                 this.TotalMiscellaneous += this.miscellaneousFeeData[a].subTotal
+                
             }
         },
         //培训费费用标准值改变
         Traininginput(val) {
-            console.log(val);
-
             var rate = 0
             for (let j = 0; j < this.currencys.length; j++) {
                 if (this.currencys[j].currencyName == val.currencyName) {
@@ -1704,29 +1716,46 @@ export default {
             val.subTotal = Number(val.cost) * Number(rate);
             this.trainingExpense = 0;
             for (let a = 0; a < this.trainingExpenseData.length; a++) {
-                this.trainingExpense += this.trainingExpenseData[a].subTotal
+                // this.trainingExpense += this.trainingExpenseData[a].subTotal
+                this.trainingExpense += Number(Number(this.trainingExpenseData[a].subTotal).toFixed(2));
             }
         },
         //培训费地区选择
-        TrainingExpenseDataSelect(val, item) {
-            console.log(val);
-            console.log(this.trainingExpenseData);
+        TrainingExpenseDataSelect(val, item,index) {
             var rate = 0//汇率
             var obj = {}
             obj = this.placeinif.find(function (i) {
                 return i.id === item
             });
             //在change中获取到整条对象数据
-            console.log(obj);
+            // if (index != undefined) {
+            //     val[index].currencyName = obj.currencyName;
+            //     val[index].currency = obj.currency;
+            //     val[index].cost = obj.trainCost;
+            //     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.trainingExpense=0;
+            //     for (let a = 0; a < this.trainingExpenseData.length; a++) {
+            //         this.trainingExpense += this.trainingExpenseData[a].subTotal
+            //     }
+            // }
             val.currencyName = obj.currencyName;
             val.currency = obj.currency;
+            val.cost=obj.trainCost;
+            
             for (let j = 0; j < this.currencys.length; j++) {
                 if (this.currencys[j].currencyCode == obj.currencyCode) {
                     rate = this.currencys[j].rate;
                 }
             }
-            val.subTotal = Number(val.cost) * Number(rate);
 
+            val.subTotal = Number(val.cost) * Number(rate);
+            this.trainingExpense=0;
             for (let a = 0; a < this.trainingExpenseData.length; a++) {
                 this.trainingExpense += this.trainingExpenseData[a].subTotal
             }
@@ -1759,7 +1788,8 @@ export default {
             val.subTotal = Number(val.cost) * Number(rate);
             this.otherExpense = 0;
             for (let a = 0; a < this.otherData.length; a++) {
-                this.otherExpense += this.otherData[a].subTotal
+                // this.otherExpense += this.otherData[a].subTotal
+                this.otherExpense += Number(Number(this.otherData[a].subTotal).toFixed(2));
             }
         },
         //新增list
@@ -1855,7 +1885,6 @@ export default {
         },
         //保存
         storage: debounce(function () {
-            console.log(this.currencys);
             return new Promise((resolve, reject) => {
                 //住宿费
                 this.fullscreenLoading = true
@@ -1928,8 +1957,6 @@ export default {
                 }
                 //其他费
                 var otherDatas = [];
-                console.log();
-
                 for (let c = 0; c < this.otherData.length; c++) {
                     if (this.otherData[c].setDataId != '') {
                         otherDatas.push({
@@ -2020,9 +2047,18 @@ export default {
 
         },
         //选择团组名称调用
-        chengvalue() {
+        chengvalue(val) {
             window.localStorage.setItem('sgvalue', this.value);
+            for(let i=0;i<this.options.length;i++){
+                if (val==this.options[i].id) {
+                    console.log(this.options[i]);
+                    this.provinceId=this.options[i].provinceId
+                }
+            }
+            
             this.fullscreenLoading = true;
+            this.EnterExitCostFileOwner();
+            this.GetNationalTravelFeeData();
             this.GetEnterExitCostInfobyDiId();
             this.PostGroupTeamRateByDiIdAndCTableId();
         },
@@ -2099,8 +2135,6 @@ export default {
                 }
                 //其他费
                 var otherDatas = [];
-                console.log();
-
                 for (let c = 0; c < this.otherData.length; c++) {
                     if (this.otherData[c].setDataId != '') {
                         otherDatas.push({
@@ -2293,7 +2327,6 @@ export default {
         },
         //其他删除
         DeleteOtherExpenses(index, row, rows) {
-            console.log(index, row, rows);
             this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
                 confirmButtonText: '确定',
                 cancelButtonText: '取消',
@@ -2401,7 +2434,6 @@ export default {
                         deleteUserId: that.userId
                     }
                 }).then(function (res) {
-                    console.log(res)
                     if (res.data.code == 200) {
                         that.$message({
                             type: 'success',
@@ -2488,8 +2520,7 @@ export default {
             this.setpermissions=true;
         },
         handleCheckAllChange(val) {
-            console.log(val);
-            console.log(this.viewUsers);
+           
             
         },
         //分配查看权限
@@ -2616,7 +2647,6 @@ export default {
                 this.calculation();
                 // this.jjctotal=this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense+this.TotalExpenses.EconomyClasstotal;
                 // this.gwctotal=this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense+this.TotalExpenses.BusinessClasstotal;
-                // console.log(this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense+this.TotalExpenses.BusinessClasstotal)
             },
         },
         'TotalExpenses.Firstclasstotal': {
@@ -2624,7 +2654,6 @@ export default {
                 this.calculation();
                 // this.jjctotal=this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense+this.TotalExpenses.EconomyClasstotal;
                 // this.gwctotal=this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense+this.TotalExpenses.BusinessClasstotal;
-                // console.log(this.DomesticFees.total+this.TotalAccommodationFee+this.TotalMeals+this.TotalMiscellaneous+this.trainingExpense+this.TotalExpenses.BusinessClasstotal)
             },
         },
 
@@ -2673,16 +2702,13 @@ export default {
         currencys: {
             handler(val) {
                 this.TotalAccommodationFee = 0
-                console.log(val,this.quarterageData);
-                console.log(this.currencys);
-                
                 for (let q = 0; q < this.quarterageData.length; q++) {
                     for (let qc = 0; qc < this.currencys.length; qc++) {
                         if (this.currencys[qc].currencyCode == this.quarterageData[q].curremcyCode||this.currencys[qc].currencyName == this.quarterageData[q].currencyName) {
-                            this.quarterageData[q].subTotal = this.currencys[qc].rate * this.quarterageData[q].cost
+                            this.quarterageData[q].subTotal = (this.currencys[qc].rate * this.quarterageData[q].cost).toFixed(2)
                         }
                     }
-                    this.TotalAccommodationFee += this.quarterageData[q].subTotal
+                    this.TotalAccommodationFee += Number(this.quarterageData[q].subTotal);
                 }
                 //伙食费
                 this.TotalMeals = 0
@@ -2747,7 +2773,7 @@ export default {
         this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
         this.value = JSON.parse(localStorage.getItem('sgvalue'))
         this.GetEnterExitCostDataSource();
-        this.GetNationalTravelFeeData();
+        // this.GetNationalTravelFeeData();
     },
     destroyed() {
         window.localStorage.removeItem('sgvalue');

+ 61 - 7
src/components/OP/EntryDetailsdraft.vue

@@ -27,6 +27,13 @@
                         </el-option>
                     </el-select> -->
                 </div>
+                <div v-if="isSave" class="Entrydraft-head-li" style="width:220px">
+                    <label>城市归属:</label>
+                    <el-select style="width:150px" @change="provinceIdchange" v-model="provinceId" filterable placeholder="请选择">
+                        <el-option v-for="item in provinceIdarr" :key="item.id" :label="item.name" :value="item.id">
+                        </el-option>
+                    </el-select>
+                </div>
                 <div v-if="isSave" class="Entrydraft-head-li" style="width:361px">
                     <label>团组:</label>
                     <el-select style="width:250px" v-model="diid" filterable placeholder="请选择">
@@ -715,7 +722,10 @@ export default {
             isView:false,
             viewUsers:[],
             viewUsersby:[],
-            viewUsersarr:[]
+            viewUsersarr:[],
+
+            provinceIdarr:[],
+            provinceId:'',
         }
     },
     methods: {
@@ -763,13 +773,49 @@ export default {
                         that.valuename = that.draftNameDatas[0].value;
                         that.value = that.draftNameDatas[0].id;
                     }
-                    that.listvalueoptions = res.data.data.wordTypeData;
                     that.tablevalueoptions = res.data.data.excelTypeData;
                     that.GetEnterExitCostInfobyDiId();
                     that.PostGroupTeamRateByDiIdAndCTableId();
                 }
             })
         },
+        provinceIdchange(){
+            this.EnterExitCostDraftFileOwner();
+            this.GetNationalTravelFeeData();
+        },
+         //获取归属
+         EnterExitDraftProvBelongCostDataSource() {
+            this.provinceIdarr=[]
+            var url = "/api/Groups/EnterExitDraftProvBelongCostDataSource"
+            var that = this
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.provinceIdarr=res.data.data;
+                    
+                }else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+        //获取文件
+        EnterExitCostDraftFileOwner() {
+            this.listvalueoptions=[];
+            var url = "/api/Groups/EnterExitCostDraftFileOwner/"+this.provinceId
+            var that = this
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.listvalueoptions = res.data.data.wordTypeData;
+                }else {
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
         //获取币种
         PostGroupTeamRateByDiIdAndCTableId() {
             this.othercurrencys = [];
@@ -977,7 +1023,6 @@ export default {
         },
         //获取费用标注
         GetNationalTravelFeeData() {
-            this.fullscreenLoading = true;
             var url = "/api/Groups/GetNationalTravelFeeData"
             var that = this
             this.$axios({
@@ -987,7 +1032,8 @@ export default {
                     Authorization: 'Bearer ' + this.token
                 },
                 data: {
-                    portType: 1
+                    portType: 1,
+                    provinceId:that.provinceId,
                 }
             }).then(function (res) {
                 let placeinifarr = [];
@@ -1578,7 +1624,10 @@ export default {
                         that.otherExpense += res.data.data.dayOtherPriceData[e].subTotal
                     }
                     that.storageid = res.data.data.id;
-                    // that.GetNationalTravelFeeData();
+                    that.provinceId=res.data.data.provinceId;
+                    that.GetNationalTravelFeeData();
+                    that.EnterExitCostDraftFileOwner();
+
                     that.fullscreenLoading = false;
                     that.GetEnterExitCostCorrelationTips(2);
                     that.EnterExitCostDraftVisaTips();
@@ -2109,7 +2158,9 @@ export default {
 
             this.getvisafeebtn=false;
             // this.EnterExitCostDraftVisaTips();
-            
+            this.provinceId=this.provinceIdarr[0].id;
+            this.GetNationalTravelFeeData();
+            // this.EnterExitCostDraftFileOwner();
         },
         //下拉
         handNodeClick(data, node, e) {
@@ -2299,6 +2350,7 @@ export default {
             //在change中获取到整条对象数据
             val.currencyName = obj.currencyName;
             val.currency = obj.currency;
+            val.cost=obj.trainCost;
             for (let j = 0; j < this.currencys.length; j++) {
                 if (this.currencys[j].currencyCode == obj.currencyCode) {
                     rate = this.currencys[j].rate;
@@ -2553,6 +2605,7 @@ export default {
                     draftName: that.valuename,
                     choiceOne: that.choiceOne ? 1 : 0,
                     insidePay: that.DomesticFees.total,
+                    provinceId: that.provinceId,
                     visa: that.DomesticFees.visafees,
                     visaRemark: that.DomesticFees.visafeesDescription,
                     yiMiao: that.DomesticFees.vaccinefees,
@@ -3347,7 +3400,8 @@ export default {
         this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
         this.value = JSON.parse(localStorage.getItem('sgvalue'))
         this.GetEnterExitCostDataSource();
-        this.GetNationalTravelFeeData();
+        this.EnterExitDraftProvBelongCostDataSource();
+        // this.GetNationalTravelFeeData();
     },
     destroyed() {
         window.localStorage.removeItem('sgvalue');

+ 60 - 11
src/components/OP/EntryQuotation.vue

@@ -2,17 +2,18 @@
     <div class="entryquotation-all">
         <div class="entryquotation-title">出入境报价表</div>
         <div class="entryquotation-form">
-            <div class="entryquotation-form-li">
+            <div class="entryquotation-form-li" v-for="(item,index) in tabledata" :key="index">
                 <div class="entryquotation-form-title">
-                    国际旅费(公务舱和经济舱分别罗列)
+                    {{item.itemName}}
                 </div>
                 <div class="entryquotation-form-content">
-                    6人全程机票:112864元
-                    公务舱:27509元/人*1人        
-                    经济舱:17071元/人*5人       
-                    城市间交通费用:
-                    8000元/人*6人
-                    以上小计:160864元
+                    <div class="entryquotation-content" v-for="(items,index) in item.infos" :key="index">
+                        <el-input type="textarea" v-model="items.feeName"></el-input>
+                        <el-input-number :precision="2" :controls="false" v-model="items.unitPrice"></el-input-number>
+                        <el-input-number :precision="2" :controls="false" v-model="items.quantity"></el-input-number>
+                        <el-input-number :precision="2" :controls="false" v-model="items.totalAmt"></el-input-number>
+                        <!-- {{ items.feeName }} -->
+                    </div>
                 </div>
             </div>
         </div>
@@ -20,7 +21,40 @@
 </template>
 <script>
 export default {
-    
+    data() {
+        return {
+            tabledata:[],
+        }
+    },
+    methods:{
+        //
+        EnterExitCostQuoteEntryExitCosts(){
+            this.tabledata=[];
+            var url = "/api/Groups/EnterExitCostQuoteEntryExitCosts"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer' 
+                },
+                data:{
+                    portType: 1,
+                    diId:2477,
+                    currUserId: 330,
+                }
+            }).then(function (res) {
+                if(res.data.code==200){
+                    that.tabledata=res.data.data.feeItems;
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+    },
+    mounted(){
+        this.EnterExitCostQuoteEntryExitCosts();
+    }
 }
 </script>
 <style>
@@ -29,7 +63,6 @@ export default {
     padding: 10px;
     box-shadow: 0 0 5px #0005;
     border-radius: 10px;
-    height: 100%;
     min-height: 840px;
 }
 .entryquotation-title{
@@ -39,6 +72,7 @@ export default {
 }
 .entryquotation-form{
     border: 1px solid #ebeef5;
+    margin-top: 10px;
 }
 .entryquotation-form-li{
     display: flex;
@@ -47,4 +81,19 @@ export default {
     padding: 10px;
     
 }
-</style>
+.entryquotation-form-title{
+    width: 20%;
+    border-bottom: 1px solid #ebeef5;
+    border-right: 1px solid #ebeef5;
+}
+.entryquotation-form-content{
+    width: 60%;
+    border-bottom: 1px solid #ebeef5;
+}
+.entryquotation-form-content{
+    padding: 10px;
+}
+.entryquotation-content{
+    margin: 5px 0;
+}
+</style> 

+ 217 - 0
src/components/OP/FormCollection.vue

@@ -0,0 +1,217 @@
+<template>
+    <div class="formcollection-all">
+        <el-dialog width="500px" title="表单收集详情" :visible.sync="formcollectionVisible">
+            <div v-for="(item,index) in controlarr" :key="index" class="formcollection-info">
+                <el-popover
+                    placement="top-start"
+                    title="备注"
+                    width="200"
+                    trigger="hover"
+                    :content='item.remark'>
+                    <div :style="item.remark==''?'':'color: #409eff;cursor:pointer'" slot="reference" class="formcollection-info-title">{{ item.fieldName }}:</div>
+                </el-popover>
+                <div v-if="item.fieldName=='出访国家(地、区)'||item.fieldName=='涉及城市'" class="formcollection-info-text">
+                    {{ item.newValue }}
+                    <!-- <span v-for="(items,index) in item.newValue" :key="index">{{items+'、'}}</span> -->
+                </div>
+                <div v-else class="formcollection-info-text">{{ item.newValue }}</div>
+            </div>
+            <div slot="footer" class="dialog-footer">
+                <el-button @click="formcollectionVisible = false">取 消</el-button>
+                <el-button type="primary" @click="formcollectionVisible = false">确 定</el-button>
+            </div>
+        </el-dialog>
+        <div style="padding: 10px;">
+            <div class="formcollection-title">表单收集列表</div>
+            <div class="formcollection-search">
+                <el-input style="width: 250px;" placeholder="请输入内容" v-model="input" clearable>
+                </el-input>
+            </div>
+            <div class="formcollection-table">
+                <el-table :data="tableData" border style="width: 100%">
+                    <el-table-column prop="name" label="表单名称" width="180">
+                    </el-table-column>
+                    <el-table-column prop="unitName" label="团队名称">
+                    </el-table-column>
+                    <el-table-column prop="visitDays" label="出访天数" width="180">
+                    </el-table-column>
+                    <el-table-column prop="visiPpNum" label="出访人数" width="180">
+                    </el-table-column>
+                    <el-table-column prop="visitCountrys" label="出访国家" width="180">
+                    </el-table-column>
+                    <el-table-column prop="operator" label="创建人" width="80">
+                    </el-table-column>
+                    <el-table-column prop="operationTime" label="创建时间" width="180">
+                    </el-table-column>
+                    <el-table-column label="操作" width="400">
+                        <template slot-scope="scope">
+                            <el-button v-for="(item,index) in scope.row.versionDetails"
+                                @click="GroupOrderPreInfo(scope.row.id,item.id)" :key="index" :disabled="item.isNull"
+                                size="mini" type="primary">{{item.name}}</el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+                <div class="block">
+                    <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
+                        :current-page="currentPage" :page-sizes="[10,15, 20]" :page-size="pagesize"
+                        layout="total, sizes, prev, pager, next, jumper" :total="fctotal">
+                    </el-pagination>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    data () {
+        return {
+            input: '',
+            tableData: [{
+                id: 4,
+                name: '安卓测试',
+                unitName: '',
+                visitDays: 0,
+                visiPpNum: 0,
+                operator: '舒庆',
+                operationTime: '2025-02-21 17:34:42'
+            }, {
+                id: 3,
+                name: '安卓测试',
+                unitName: '',
+                visitDays: 0,
+                visiPpNum: 0,
+                operator: '舒庆',
+                operationTime: '2025-02-21 17:34:42'
+            }, {
+                id: 2,
+                name: '安卓测试',
+                unitName: '',
+                visitDays: 0,
+                visiPpNum: 0,
+                operator: '舒庆',
+                operationTime: '2025-02-21 17:34:42'
+            }, {
+                id: 1,
+                name: '安卓测试',
+                unitName: '',
+                visitDays: 0,
+                visiPpNum: 0,
+                operator: '舒庆',
+                operationTime: '2025-02-21 17:34:42'
+            }],
+            currentPage:1,
+            pagesize:10,
+            fctotal:0,
+            formcollectionVisible:false,
+            controlarr:[],
+        }
+    },
+    methods:{
+        handleSizeChange(val) {
+            this.pagesize=val;
+            this.GroupOrderPreInfoList()
+            console.log(`每页 ${val} 条`);
+        },
+        handleCurrentChange(val) {
+            this.currentPage=val;
+            this.GroupOrderPreInfoList()
+            console.log(`当前页: ${val}`);
+        },
+        //获取团组
+        GroupOrderPreInfoList() {
+            this.tableData=[];
+            var url = "/api/Groups/GroupOrderPreInfoList"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                },
+                data: {
+                    portType: 1,
+                    pageIndex: that.currentPage,
+                    pageSize: that.pagesize,
+                    search:that.input,
+                }
+            }).then(function (res) {
+                if (res.data.code == 200) {
+                    that.tableData=res.data.data;
+                    that.fctotal=res.data.count;
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            }).catch(function (error) {
+                that.$message.error("获取团组失败");
+            });
+        },
+        //获取表单
+        GroupOrderPreInfo(formid,tempId) {
+            this.formcollectionVisible=true;
+            this.controlarr=[];
+            var url = "/api/Groups/GroupOrderPreInfo/"+formid+"/"+tempId
+            var that = this
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if (res.data.code==200) {
+                    that.controlarr=res.data.data.items;
+                    for(let i =0;i<that.controlarr.length;i++){
+                        if(that.controlarr[i].fieldName=='出访国家(地、区)'||that.controlarr[i].fieldName=='涉及城市'){
+                            var newValue=''
+                            for(let y=0;y<that.controlarr[i].newValue.length;y++){
+                                newValue+=that.controlarr[i].newValue[y]+'、'
+                            }
+                            that.controlarr[i].newValue=newValue.substring(0,newValue.length-1)
+                        }
+                    }
+                }else{
+                    that.$message.error(res.data.msg);
+                }
+            })
+        },
+    },
+    mounted(){
+        this.GroupOrderPreInfoList();
+    },
+    filters: {
+        filter_dd(value) {
+            if (value) {
+                return value.substring(0,value.length-1)
+            }
+        },
+    }
+}
+</script>
+<style>
+.formcollection-all{
+    background-color: #fff;
+    box-shadow: 0 0 5px #0005;
+    border-radius: 10px;
+    height: 100%;
+    min-height: 830px;
+}
+.formcollection-title{
+    font-size: 17px;
+    font-weight: 600;
+}
+.formcollection-search{
+    margin-top:10px ;
+}
+.formcollection-table{
+    margin-top:10px ;
+}
+.formcollection-table .block{
+    margin-top: 10px;
+    text-align: center;
+}
+.formcollection-info{
+    display: flex;
+    justify-content: space-between;
+    margin-top: 10px;
+}
+.formcollection-info-title{
+    font-weight: 600;
+}
+</style>

+ 26 - 2
src/components/OP/Groupedit.vue

@@ -46,6 +46,12 @@
                         ></el-autocomplete>
                         <!-- <el-input el-input v-model="ruleForm.customerunits"></el-input> -->
                     </el-form-item>
+                    <el-form-item label-width="120px" label="城市:" prop="cityId">
+                        <el-select filterable @change="optypechange" class="op-type" v-model="ruleForm.cityId" placeholder="请选择城市">
+                            <el-option v-for="(item, index) in cityData" :key="index" :label="item.name"
+                                :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
                     <el-form-item label-width="120px" label="出访国家:" prop="countriesvisited">
                         <el-input @blur="splicingname" el-input v-model="ruleForm.countriesvisited" placeholder="按照“国家1、国家2、国家3”录入"></el-input>
                     </el-form-item>
@@ -96,10 +102,14 @@
                     <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="bidbr?'contracttime':''">
+                    <el-form-item label-width="120px" label="合同时间:">
                         <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.contracttime"
                             style="width: 100%;"></el-date-picker>
                     </el-form-item>
+                    <!-- <el-form-item label-width="120px" label="合同时间:" :prop="bidbr?'contracttime':''">
+                        <el-date-picker type="date" placeholder="选择日期" v-model="ruleForm.contracttime"
+                            style="width: 100%;"></el-date-picker>
+                    </el-form-item> -->
                     
                 </div>
                 <div style="display: flex;">
@@ -112,11 +122,17 @@
                         <el-radio v-model="ruleForm.radioval" label='1'>是</el-radio> -->
                     </el-form-item>
                     <div  class="advance-box">
-                        <el-form-item label-width="120px" label="于出访时间前" :prop="bidbr?'occasion':''">
+                        <!-- <el-form-item label-width="120px" label="于出访时间前" :prop="bidbr?'occasion':''">
                             <el-input style="width: 100px;" el-input v-model="ruleForm.occasion"></el-input>
                         </el-form-item>
                         <el-form-item label-width="98px" label="日支付款项:" :prop="bidbr?'payments':''">
                             <el-input el-input v-model="ruleForm.payments"></el-input>
+                        </el-form-item> -->
+                        <el-form-item label-width="120px" label="于出访时间前">
+                            <el-input style="width: 100px;" el-input v-model="ruleForm.occasion"></el-input>
+                        </el-form-item>
+                        <el-form-item label-width="98px" label="日支付款项:">
+                            <el-input el-input v-model="ruleForm.payments"></el-input>
                         </el-form-item>
                         <span style="margin-bottom: 22px;display: inline-block;color: #606266;font-size: 14px;">(预付款,请输入RMB)</span>
                     </div>
@@ -246,6 +262,7 @@ export default {
                 visitingtime: '',
                 contracttime: '',
                 numdays: '',
+                cityId:'',
                 numperson: '',
                 occasion: '',
                 payments: '',
@@ -271,6 +288,7 @@ export default {
                '无'
             ],
             personarr: [],
+            cityData:[],
             gradearr: [],
             OPtype: [],
             rules: {
@@ -289,6 +307,9 @@ export default {
                 person: [
                     { required: true, message: '请选择成团人', trigger: 'change' }
                 ],
+                cityId: [
+                    { required: true, message: 'asd', trigger: 'change' }
+                ],
                 grades: [
                     { required: true, message: '请选择级别', trigger: 'change' }
                 ],
@@ -419,6 +440,7 @@ export default {
                     that.personarr = res.data.data.userData;
                     that.gradearr = res.data.data.teamLevData;
                     that.OPtype = res.data.data.teamTypeData;
+                    that.cityData = res.data.data.cityData;
                 }
             })
             var url = "/api/System/QuerySetData"
@@ -530,6 +552,7 @@ export default {
                     if (res.data.code == 200) {
                         datagroup = res.data.data;
                         that.ruleForm.quotenum = datagroup.salesQuoteNo;
+                        that.ruleForm.cityId = datagroup.cityId;
                         that.ruleForm.groupname = datagroup.teamName;
                         that.ruleForm.customername = datagroup.clientName;
                         that.ruleForm.customerunits = datagroup.clientUnit;
@@ -586,6 +609,7 @@ export default {
                     status: status,//添加1//修改2//删除3
                     id: that.editid,
                     userId: that.userid,
+                    cityId:that.ruleForm.cityId,
                     salesQuoteNo: that.ruleForm.quotenum,
                     jietuanOperator: parseInt(that.ruleForm.person),//
                     teamLevSId: parseInt(that.ruleForm.grades),//

+ 2 - 2
src/components/OP/PickupList.vue

@@ -2,7 +2,7 @@
     <div v-loading.fullscreen.lock="fullscreenLoading">
         <el-dialog width="1150px" class="pickupList-ai" title="Ai识别客户名单" :visible.sync="AiVisible">
             <div class="pickupList-ai-title">第一步:{{textToCopy}}<span @click="btn1">点击复制左侧文字</span></div>
-            <div class="pickupList-ai-title">第二步:打开<span @click="openkimi">KIML</span>,将上述文字和截图粘贴到KIMI文本框里</div>
+            <div class="pickupList-ai-title">第二步:打开<span @click="openkimi">KIMI</span>,将上述文字和截图粘贴到KIMI文本框里</div>
             <div class="pickupList-ai-title">第三步:将KIMI生成的内容复制到以下文本框</div>
             <div class="pickupList-ai-textarea">
                 <el-input
@@ -15,7 +15,7 @@
             </div>
             <div class="pickupList-ai-btn">
                 <el-button @click="recognizeclick" size="small"  type="primary">识别</el-button>
-            </div>
+            </div> 
         </el-dialog>
         <div class="pickuplist-all">
             <div class="pickuplist-head">

+ 67 - 3
src/components/OP/ThreeStandards.vue

@@ -27,6 +27,17 @@
                         </el-select>
                         <!-- <el-input style="width:200px" v-model="input2" placeholder="请输入内容"></el-input> -->
                     </div>
+                    <div>
+                        <label>归属城市:</label>
+                        <el-select style="width: 220px;margin-left: 10px;" v-model="provinceId" @change="provinceIdchange" filterable placeholder="请选择归属城市">
+                            <el-option
+                                v-for="item in provinceIdarr"
+                                :key="item.id"
+                                :label="item.name"
+                                :value="item.id">
+                            </el-option>
+                        </el-select>
+                    </div>
                 </div>
                 <div class="standards-head-li">
                     <!-- <el-button type="primary">查 询</el-button> -->
@@ -79,6 +90,11 @@
                     width="120">
                     </el-table-column>
                     <el-table-column
+                    prop="trainCost"
+                    label="培训费"
+                    width="120">
+                    </el-table-column>
+                    <el-table-column
                     prop="lastUpdateUserName"
                     label="最后操作人"
                     width="100">
@@ -91,11 +107,12 @@
                     <el-table-column
                     prop="remark"
                     label="备注"
-                    width="200">
+                    >
                     </el-table-column>
                     <el-table-column
                     prop="address"
-                    label="操作">
+                    label="操作"
+                    width="125">
                         <template slot-scope="scope">
                             <el-button
                             @click.native.prevent="addclick('修改', scope.row)"
@@ -103,6 +120,7 @@
                             修 改
                             </el-button>
                             <el-button
+                            style="margin-left: 0px;margin-top: 4px;"
                             @click.native.prevent="deleteRow(scope.$index, tableData,scope.row)"
                             type="danger"
                             size="mini">
@@ -135,6 +153,16 @@
                         <el-form-item label="城市" prop="city" :label-width="formLabelWidth">
                             <el-input size="medium" :controls="false" v-model="addfees.city"></el-input>
                         </el-form-item>
+                        <el-form-item label="归属城市" prop="provinceId" :label-width="formLabelWidth">
+                            <el-select size="medium"  v-model="addfees.provinceId" filterable placeholder="请选择归属城市">
+                                <el-option
+                                    v-for="item in provinceIdarr"
+                                    :key="item.id"
+                                    :label="item.name"
+                                    :value="item.id">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
                         <el-form-item label="币种" prop="currency" :label-width="formLabelWidth">
                             <el-select size="medium" @change="currencychange" style="height:36px" v-model="addfees.currency" filterable placeholder="请选择">
                                 <el-option
@@ -154,6 +182,9 @@
                         <el-form-item label="公杂费" prop="publicCost" :label-width="formLabelWidth">
                             <el-input-number :precision="2" size="medium" :controls="false" v-model="addfees.publicCost"></el-input-number>
                         </el-form-item>
+                        <el-form-item label="培训费" prop="trainCost" :label-width="formLabelWidth">
+                            <el-input-number :precision="2" size="medium" :controls="false" v-model="addfees.trainCost"></el-input-number>
+                        </el-form-item>
                     </div>
                     <div class="remark-box">
                         <el-form-item label="备注" :label-width="formLabelWidth">
@@ -184,6 +215,8 @@ export default {
             AdditionalFees:false,
             countrylist:[],
             citylist:[],
+            provinceId:'',
+            provinceIdarr:[],
             //新增
             addfees:{
                 id:0,
@@ -194,6 +227,8 @@ export default {
                 roomCost:0,//住宿费
                 foodCost:0,//伙食费
                 publicCost:0,//公杂费
+                trainCost:0,//培训费
+                provinceId:'',
                 remark:'',//备注
             },
             options:[],
@@ -211,6 +246,9 @@ export default {
                 currency: [
                     { required: true,  trigger: 'blur',message:'请选择币种' }
                 ],
+                provinceId: [
+                    { required: true, trigger: 'change' ,message:'请选择归属城市'},
+                ],
                 roomCost: [
                     { required: true, trigger: 'change' ,message:'请填写住宿费'},
                 ],
@@ -220,6 +258,9 @@ export default {
                 publicCost: [
                     { required: true, trigger: 'change',message:'请填写公杂费' },
                 ],
+                trainCost: [
+                    { required: true, trigger: 'change',message:'请填写培训费' },
+                ],
             },
         }
     },
@@ -244,6 +285,22 @@ export default {
                 }
             })
         },
+        //获取省份归属基础数据
+        GetEnterExitProvBelongCostDataSource(){
+            var url = "/api/Groups/GetEnterExitProvBelongCostDataSource"
+            var that = this
+            this.$axios({
+                method: 'get',
+                url: url,
+            }).then(function (res) {
+                if(res.data.code==200){
+                    that.provinceIdarr=res.data.data;
+                }
+            })
+        },
+        provinceIdchange(){
+            this.GatPostNationalTravel();
+        },
         //获取标准列表
         GatPostNationalTravel(){
             var url = "/api/Groups/PostNationalTravelFeePage"
@@ -266,7 +323,7 @@ export default {
                     portType: 1,
                     pageIndex:that.pageIndex,
                     pageSize:that.pageSize,
-                    continent:'',
+                    provinceId:that.provinceId==''?0:that.provinceId,
                     country:inputs,
                     city:input2s,
                 }
@@ -295,6 +352,8 @@ export default {
                 roomCost:0,//住宿费
                 foodCost:0,//伙食费
                 publicCost:0,//公杂费
+                trainCost:0,//培训费
+                provinceId:'',
                 remark:'',//备注
             },
             this.AdditionalFees=true;
@@ -306,8 +365,10 @@ export default {
                 this.addfees.city=val.city;
                 this.addfees.currency=val.currency;
                 this.addfees.roomCost=val.roomCost;
+                this.addfees.provinceId=val.provinceId;
                 this.addfees.foodCost=val.foodCost;
                 this.addfees.publicCost=val.publicCost;
+                this.addfees.trainCost=val.trainCost;
                 this.addfees.remark=val.remark;
                 this.pageIndex=1
             }else if(text=='新增'){
@@ -343,6 +404,7 @@ export default {
                     portType: 1,
                     id:that.addfees.id,
                     userId:that.loginuserid,
+                    provinceId:that.addfees.provinceId,
                     continent:that.addfees.continent,
                     country:that.addfees.country,
                     city:that.addfees.city,
@@ -350,6 +412,7 @@ export default {
                     roomCost:that.addfees.roomCost,
                     foodCost:that.addfees.foodCost,
                     publicCost:that.addfees.publicCost,
+                    trainCost:that.addfees.trainCost,
                     remark:that.addfees.remark,
                 }
             }).then(function (res) {
@@ -461,6 +524,7 @@ export default {
     mounted(){
         this.loginuserid=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
         this.GatPostNationalTravel();
+        this.GetEnterExitProvBelongCostDataSource();
         this.GetEnterExitCostDataSource();
         this.GetNationalTravelFeePageDataSource();
     }

+ 6 - 0
src/router/index.js

@@ -134,6 +134,7 @@ import EntryDetailsdraft from '@/components/OP/EntryDetailsdraft';
 import mealrecord from '@/components/OP/mealrecord';
 import enterpriseprofit from '@/components/statistics/enterpriseprofit';
 import EntryQuotation from '@/components/OP/EntryQuotation';
+import FormCollection from '@/components/OP/FormCollection';
 
 Vue.use(Router)
 
@@ -800,6 +801,11 @@ export default new Router({
           name: 'EntryQuotation',
           component: EntryQuotation
         },
+        {
+          path: '/home/FormCollection',
+          name: 'FormCollection',
+          component: FormCollection
+        },
       ]
     },
     {