Преглед на файлове

团组流程修改逻辑

liuhj преди 1 месец
родител
ревизия
b823e0075f
променени са 1 файла, в които са добавени 308 реда и са изтрити 75 реда
  1. 308 75
      src/components/OP/GroupProgress.vue

+ 308 - 75
src/components/OP/GroupProgress.vue

@@ -1,11 +1,13 @@
 <template>
-    <div class="group-progress"  v-loading="progressloading">
+    <div class="group-progress" v-loading="progressloading">
         <div class="progress-hade">
-            <el-form style="display: flex;justify-content: space-between;align-items: center;" :inline="true" :model="formInline" class="demo-form-inline">
+            <el-form style="display: flex;justify-content: space-between;align-items: center;" :inline="true"
+                :model="formInline" class="demo-form-inline">
                 <el-form-item>
-                    <el-select filterable @change="GetGroupNameList" v-model="diid" placeholder="团组名称" style="width: 250px;">
-                        <el-option :style="item.hasProcess?'color: #409EFF;':''" v-for="(item, index) in AuditStatus" :key="index" :label="item.groupName"
-                            :value="item.id"></el-option>
+                    <el-select filterable @change="GetGroupNameList" v-model="diid" placeholder="团组名称"
+                        style="width: 250px;">
+                        <el-option :style="item.hasProcess?'color: #409EFF;':''" v-for="(item, index) in AuditStatus"
+                            :key="index" :label="item.groupName" :value="item.id"></el-option>
                     </el-select>
                 </el-form-item>
                 <div>
@@ -25,7 +27,7 @@
                         {{ formInline.Days }}天 / {{ formInline.Number }}人
                     </el-form-item>
                 </div>
-            </el-form>    
+            </el-form>
         </div>
         <el-collapse v-model="activeNames" @change="handleChange">
             <el-collapse-item name="1">
@@ -33,20 +35,44 @@
                     <span style="font-size: 18px; font-weight: bold;">商邀报批流程</span>
                 </template>
                 <div class="process-diagram">
-                    <div slot="reference" @click="confirmclick(item,'商邀')" @mouseenter="item.nodeName=='报批资料准备'?visible = true:''" @mouseleave="visible = false" :class="item.statusText=='已完成'?'process-diagram-lis':'process-diagram-li'" v-for="(item,index) in activities" :key="index">
-                        <el-popover
-                        v-if="item.nodeName=='报批资料准备'"
-                        placement="top"
-                        title="PS"
-                        width="200"
-                        trigger="manual"
-                        content="其中包含:机构筛选、邮件对接、报批行程及请示、完成公务对接等"
-                        v-model="visible">
+                    <div @click="confirmclick(item,'商邀')"
+                        :class="item.statusText=='已完成'?'process-diagram-lis':'process-diagram-li'"
+                        v-for="(item,index) in activities" :key="index">
+                        <el-popover v-if="item.nodeDescTips!=''" placement="top-start" title="PS" width="200"
+                            trigger="hover" :content="item.nodeDescTips">
+                            <div slot="reference">
+                                <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                                <div>{{item.statusText}}</div>
+                                <div>{{item.operator}}</div>
+                                <!-- <div>{{item.opeateTime}}</div> -->
+                                <div @click.stop="">
+                                    <el-date-picker 
+                                    @blur="GroupProcessSetActualDone(item,'商邀')"
+                                    style="width: 100%;" 
+                                    size="mini"
+                                    v-model="item.actualDone" 
+                                    type="datetime"
+                                    placeholder="选择实际完成时间">
+                                    </el-date-picker>
+                                </div>
+                            </div>
                         </el-popover>
-                        <div style="font-weight: 600;font-size: 15px;">{{item.nodeName}}</div>
-                        <div>{{item.statusText}}</div>
-                        <div>{{item.operator}}</div>
-                        <div>{{item.opeateTime}}</div>
+                        <div v-else>
+                            <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                            <div>{{item.statusText}}</div>
+                            <div>{{item.operator}}</div>
+                            <!-- <div>{{item.opeateTime}}</div> -->
+                            <div @click.stop="">
+                                <el-date-picker 
+                                @blur="GroupProcessSetActualDone(item,'商邀')"
+                                style="width: 100%;" 
+                                size="mini"
+                                v-model="item.actualDone" 
+                                type="datetime"
+                                placeholder="选择实际完成时间">
+                                </el-date-picker>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </el-collapse-item>
@@ -55,7 +81,8 @@
                     <div style="display: inline-block;width: 100%;">
                         <div style="display: flex;justify-content: space-between;align-items: center;">
                             <span style="font-size: 18px; font-weight: bold;">签证流程</span>
-                            <el-button @click.stop="Visaclick('签证')" style="margin-right: 20px;" size="mini" type="primary">签证流程保存</el-button>
+                            <el-button @click.stop="Visaclick('签证')" style="margin-right: 20px;" size="mini"
+                                type="primary">签证流程保存</el-button>
                         </div>
                     </div>
                 </template>
@@ -64,9 +91,10 @@
                         <el-table-column prop="a" label="国家" width="150">
                             <template slot-scope="scope">
                                 <el-checkbox style="visibility: hidden;"></el-checkbox>
-                                <el-input style="width:100%;margin-top: 10px;" size="mini" v-model="scope.row.countryName"
-                                    placeholder="请输入国家"></el-input>
-                                <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;" size="mini"></el-date-picker>
+                                <el-input style="width:100%;margin-top: 10px;" size="mini"
+                                    v-model="scope.row.countryName" placeholder="请输入国家"></el-input>
+                                <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;"
+                                    size="mini"></el-date-picker>
                             </template>
                         </el-table-column>
                         <el-table-column label="进度">
@@ -76,7 +104,8 @@
                                     <el-date-picker style="width:100%;margin-top: 10px;" size="mini"
                                         v-model="scope.row.handleTime1" type="date" placeholder="选择日期">
                                     </el-date-picker>
-                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;" size="mini"></el-date-picker>
+                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;"
+                                        size="mini"></el-date-picker>
                                 </div>
                             </template>
                         </el-table-column>
@@ -87,7 +116,8 @@
                                     <el-date-picker style="width:100%;margin-top: 10px;" size="mini"
                                         v-model="scope.row.handleTime2" type="date" placeholder="选择日期">
                                     </el-date-picker>
-                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;" size="mini"></el-date-picker>
+                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;"
+                                        size="mini"></el-date-picker>
                                 </div>
                             </template>
                         </el-table-column>
@@ -98,7 +128,8 @@
                                     <el-date-picker style="width:100%;margin-top: 10px;" size="mini"
                                         v-model="scope.row.handleTime3" type="date" placeholder="选择日期">
                                     </el-date-picker>
-                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;" size="mini"></el-date-picker>
+                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;"
+                                        size="mini"></el-date-picker>
                                 </div>
                             </template>
                         </el-table-column>
@@ -109,7 +140,8 @@
                                     <el-date-picker style="width:100%;margin-top: 10px;" size="mini"
                                         v-model="scope.row.handleTime4" type="date" placeholder="选择日期">
                                     </el-date-picker>
-                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;" size="mini"></el-date-picker>
+                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;"
+                                        size="mini"></el-date-picker>
                                 </div>
                             </template>
                         </el-table-column>
@@ -120,7 +152,8 @@
                                     <el-date-picker style="width:100%;margin-top: 10px;" size="mini"
                                         v-model="scope.row.handleTime5" type="date" placeholder="选择日期">
                                     </el-date-picker>
-                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;" size="mini"></el-date-picker>
+                                    <el-date-picker style="visibility: hidden;width:100%;margin-top: 10px;"
+                                        size="mini"></el-date-picker>
                                 </div>
                             </template>
                         </el-table-column>
@@ -131,14 +164,16 @@
                                     <el-date-picker style="width:100%;margin-top: 10px;" size="mini"
                                         v-model="scope.row.handleTime6" type="date" placeholder="选择日期">
                                     </el-date-picker>
-                                    <el-input style="width:100%;margin-top: 10px;" size="mini" v-model="scope.row.returner"
-                                        placeholder="请输入归还人"></el-input>
+                                    <el-input style="width:100%;margin-top: 10px;" size="mini"
+                                        v-model="scope.row.returner" placeholder="请输入归还人"></el-input>
                                 </div>
                             </template>
                         </el-table-column>
                         <el-table-column label="操作" width="100">
                             <template slot-scope="scope">
-                                <el-button style="margin-top: 10px;" size="mini" @click.native.prevent="deleteRow(scope.$index, tableData,'签证')" type="danger">删除</el-button>
+                                <el-button style="margin-top: 10px;" size="mini"
+                                    @click.native.prevent="deleteRow(scope.$index, tableData,'签证')"
+                                    type="danger">删除</el-button>
                             </template>
                         </el-table-column>
                     </el-table>
@@ -152,11 +187,44 @@
                     <span style="font-size: 18px; font-weight: bold;">机票流程</span>
                 </template>
                 <div class="process-diagram">
-                    <div @click="confirmclick(item,'机票')" :class="item.statusText=='已完成'?'process-diagram-twos':'process-diagram-two'" v-for="(item,index) in activitiesAir" :key="index">
-                        <div style="font-weight: 600;font-size: 15px;">{{item.nodeName}}</div>
-                        <div>{{item.statusText}}</div>
-                        <div>{{item.operator}}</div>
-                        <div>{{item.opeateTime}}</div>
+                    <div @click="confirmclick(item,'机票')"
+                        :class="item.statusText=='已完成'?'process-diagram-lis':'process-diagram-li'"
+                        v-for="(item,index) in activitiesAir" :key="index">
+                        <el-popover v-if="item.nodeDescTips!=''" placement="top-start" title="PS" width="200"
+                            trigger="hover" :content="item.nodeDescTips">
+                            <div slot="reference">
+                                <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                                <div>{{item.statusText}}</div>
+                                <div>{{item.operator}}</div>
+                                <!-- <div>{{item.opeateTime}}</div> -->
+                                <div @click.stop="">
+                                    <el-date-picker 
+                                    @blur="GroupProcessSetActualDone(item,'机票')"
+                                    style="width: 100%;" 
+                                    size="mini"
+                                    v-model="item.actualDone" 
+                                    type="datetime"
+                                    placeholder="选择实际完成时间">
+                                    </el-date-picker>
+                                </div>
+                            </div>
+                        </el-popover>
+                        <div v-else>
+                            <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                            <div>{{item.statusText}}</div>
+                            <div>{{item.operator}}</div>
+                            <!-- <div>{{item.opeateTime}}</div> -->
+                            <div @click.stop="">
+                                <el-date-picker
+                                @blur="GroupProcessSetActualDone(item,'机票')"
+                                style="width: 100%;" 
+                                size="mini"
+                                v-model="item.actualDone" 
+                                type="datetime"
+                                    placeholder="选择实际完成时间">
+                                </el-date-picker>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </el-collapse-item>
@@ -165,11 +233,44 @@
                     <span style="font-size: 18px; font-weight: bold;">酒店流程</span>
                 </template>
                 <div class="process-diagram">
-                    <div @click="confirmclick(item,'酒店')" :class="item.statusText=='已完成'?'process-diagram-twos':'process-diagram-two'" v-for="(item,index) in activitiesHotel" :key="index">
-                        <div style="font-weight: 600;font-size: 15px;">{{item.nodeName}}</div>
-                        <div>{{item.statusText}}</div>
-                        <div>{{item.operator}}</div>
-                        <div>{{item.opeateTime}}</div>
+                    <div @click="confirmclick(item,'酒店')"
+                        :class="item.statusText=='已完成'?'process-diagram-sans':'process-diagram-san'"
+                        v-for="(item,index) in activitiesHotel" :key="index">
+                        <el-popover v-if="item.nodeDescTips!=''" placement="top-start" title="PS" width="200"
+                            trigger="hover" :content="item.nodeDescTips">
+                            <div slot="reference">
+                                <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                                <div>{{item.statusText}}</div>
+                                <div>{{item.operator}}</div>
+                                <!-- <div>{{item.opeateTime}}</div> -->
+                                <div @click.stop="">
+                                    <el-date-picker 
+                                    @blur="GroupProcessSetActualDone(item,'酒店')"
+                                    style="width: 100%;" 
+                                    size="mini"
+                                    v-model="item.actualDone" 
+                                    type="datetime"
+                                    placeholder="选择实际完成时间">
+                                    </el-date-picker>
+                                </div>
+                            </div>
+                        </el-popover>
+                        <div v-else>
+                            <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                            <div>{{item.statusText}}</div>
+                            <div>{{item.operator}}</div>
+                            <!-- <div>{{item.opeateTime}}</div> -->
+                            <div @click.stop="">
+                                <el-date-picker 
+                                @blur="GroupProcessSetActualDone(item,'酒店')"
+                                style="width: 100%;" 
+                                size="mini"
+                                v-model="item.actualDone" 
+                                type="datetime"
+                                placeholder="选择实际完成时间">
+                                </el-date-picker>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </el-collapse-item>
@@ -178,11 +279,44 @@
                     <span style="font-size: 18px; font-weight: bold;">地接流程</span>
                 </template>
                 <div class="process-diagram">
-                    <div @click="confirmclick(item,'OP')" :class="item.statusText=='已完成'?'process-diagram-sans':'process-diagram-san'" v-for="(item,index) in activitiesGuide" :key="index">
-                        <div style="font-weight: 600;font-size: 15px;">{{item.nodeName}}</div>
-                        <div>{{item.statusText}}</div>
-                        <div>{{item.operator}}</div>
-                        <div>{{item.opeateTime}}</div>
+                    <div @click="confirmclick(item,'OP')"
+                        :class="item.statusText=='已完成'?'process-diagram-lis':'process-diagram-li'"
+                        v-for="(item,index) in activitiesGuide" :key="index">
+                        <el-popover v-if="item.nodeDescTips!=''" placement="top-start" title="PS" width="200"
+                            trigger="hover" :content="item.nodeDescTips">
+                            <div slot="reference">
+                                <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                                <div>{{item.statusText}}</div>
+                                <div>{{item.operator}}</div>
+                                <!-- <div>{{item.opeateTime}}</div> -->
+                                <div @click.stop="">
+                                    <el-date-picker 
+                                    @blur="GroupProcessSetActualDone(item,'OP')"
+                                    style="width: 100%;" 
+                                    size="mini"
+                                    v-model="item.actualDone" 
+                                    type="datetime"
+                                    placeholder="选择实际完成时间">
+                                    </el-date-picker>
+                                </div>
+                            </div>
+                        </el-popover>
+                        <div v-else>
+                            <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                            <div>{{item.statusText}}</div>
+                            <div>{{item.operator}}</div>
+                            <!-- <div>{{item.opeateTime}}</div> -->
+                            <div @click.stop="">
+                                <el-date-picker 
+                                @blur="GroupProcessSetActualDone(item,'OP')"
+                                style="width: 100%;" 
+                                size="mini"
+                                v-model="item.actualDone" 
+                                type="datetime"
+                                placeholder="选择实际完成时间">
+                                </el-date-picker>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </el-collapse-item>
@@ -191,16 +325,49 @@
                     <span style="font-size: 18px; font-weight: bold;">费用结算</span>
                 </template>
                 <div class="process-diagram">
-                    <div @click="financeclick(item)" :class="item.statusText=='已完成'?'process-diagram-twos':'process-diagram-two'" v-for="(item,index) in activitiesCost" :key="index">
-                        <div style="font-weight: 600;font-size: 15px;">{{item.nodeName}}</div>
-                        <div>{{item.statusText}}</div>
-                        <div>{{item.operator}}</div>
-                        <div>{{item.opeateTime}}</div>
+                    <div @click="financeclick(item)"
+                        :class="item.statusText=='已完成'?'process-diagram-twos':'process-diagram-two'"
+                        v-for="(item,index) in activitiesCost" :key="index">
+                        <el-popover v-if="item.nodeDescTips!=''" placement="top-start" title="PS" width="200"
+                            trigger="hover" :content="item.nodeDescTips">
+                            <div slot="reference">
+                                <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                                <div>{{item.statusText}}</div>
+                                <div>{{item.operator}}</div>
+                                <!-- <div>{{item.opeateTime}}</div> -->
+                                <div @click.stop="">
+                                    <el-date-picker 
+                                    @blur="GroupProcessSetActualDone(item)"
+                                    style="width: 100%;" 
+                                    size="mini"
+                                    v-model="item.actualDone" 
+                                    type="datetime"
+                                    placeholder="选择实际完成时间">
+                                    </el-date-picker>
+                                </div>
+                            </div>
+                        </el-popover>
+                        <div v-else>
+                            <div style="font-weight: 600;font-size: 12px;">{{item.nodeName}}</div>
+                            <div>{{item.statusText}}</div>
+                            <div>{{item.operator}}</div>
+                            <!-- <div>{{item.opeateTime}}</div> -->
+                            <div @click.stop="">
+                                <el-date-picker 
+                                @blur="GroupProcessSetActualDone(item)"
+                                style="width: 100%;" 
+                                size="mini"
+                                v-model="item.actualDone" 
+                                type="datetime"
+                                placeholder="选择实际完成时间">
+                                </el-date-picker>
+                            </div>
+                        </div>
                     </div>
                 </div>
             </el-collapse-item>
         </el-collapse>
-        
+
     </div>
 </template>
 <script>
@@ -333,7 +500,7 @@ export default {
                         if (res.data.data[i].processName == '机票') {
                             that.activitiesAir=res.data.data[i].nodes;
                         }
-                        if (res.data.data[i].processName == '商邀报批') {
+                        if (res.data.data[i].processName == '商邀') {
                             that.activities=res.data.data[i].nodes;
                         }
                         if (res.data.data[i].processName == '签证') {
@@ -445,6 +612,72 @@ export default {
                 }
             })
         },
+        //处理时间
+        disposeTime(val){
+            var date = new Date(val);
+            var y = date.getFullYear();
+            var m = date.getMonth() + 1;
+            m = m < 10 ? ('0' + m) : m;
+            var d = date.getDate();
+            d = d < 10 ? ('0' + d) : d;
+            var hh = date.getHours();
+            hh = hh < 10 ? ('0' + hh) : hh;
+            var mm = date.getMinutes();
+            mm = mm < 10 ? ('0' + mm) : mm;
+            var ss = date.getSeconds();
+            ss = ss < 10 ? ('0' + ss) : ss;
+            let time = y + '-' + m + '-' + d+' '+hh+':'+mm+':'+ss;
+            return time
+        },
+        //更改实际操作时间
+        GroupProcessSetActualDone(item,text){
+            if (text==undefined) {
+                var qxarr=[22,187]
+                if (!qxarr.includes(this.userId)) {
+                    item.actualDone='';
+                    this.$message({
+                        message: '该流程不在此账号的操作权限内!如有疑问联系该流程负责人!',
+                        type: 'warning'
+                    });
+                    return
+                }
+            }
+            else if (text!=this.jobName) {
+                item.actualDone='';
+                this.$message({
+                    message: '该流程不在此账号的操作权限内!如有疑问联系该流程负责人!',
+                    type: 'warning'
+                });
+                return
+            }
+            this.progressloading=true;
+            var url = "/api/Groups/GroupProcessSetActualDone"
+            var that = this
+            this.$axios({
+                method: 'post',
+                url: url,
+                headers: {
+                    Authorization: 'Bearer '
+                },
+                data:{
+                    nodeId:item.id,
+                    actualDone:that.disposeTime(item.actualDone),
+                    currUserId: that.userId
+                }
+            }).then(function (res) {
+                console.log(res)
+                if(res.data.code==200){
+                    that.$message({
+                        type: 'success',
+                        message: res.data.msg
+                    });
+                    that.progressloading=false;
+                }else{
+                    that.$message.error(res.data.msg);
+                    that.progressloading=false;
+                }
+            })
+        },
         //财务节点点击确认
         financeclick(item){
             var qxarr=[22,187]
@@ -559,7 +792,7 @@ export default {
         justify-content: space-around;
     }
     .process-diagram-li{
-        width: 10%;
+        width: 12%;
         text-align: center;
         position: relative;
         padding: 10px;
@@ -579,17 +812,17 @@ export default {
     }
     .process-diagram-li:not(:last-child)::before{
         position: absolute;
-        content:'';
+        content: '';
         display: block;
-        width:210%;
-        height:2px;
+        width: 117%;
+        height: 2px;
         background-color: #606266;
-        left:55%;
-        top:-26px;
-        border-radius: 50%
+        left: 53%;
+        top: -26px;
+        border-radius: 50%;
     }
     .process-diagram-lis{
-        width: 10%;
+        width: 12%;
         text-align: center;
         position: relative;
         padding: 10px;
@@ -611,10 +844,10 @@ export default {
         position: absolute;
         content:'';
         display: block;
-        width:210%;
+        width:117%;
         height:2px;
         background-color: #67C23A;
-        left:55%;
+        left:53%;
         top:-26px;
         border-radius: 50%
     }
@@ -628,7 +861,7 @@ export default {
 
     /*liangge*/
     .process-diagram-two{
-        width: 10%;
+        width: 12%;
         text-align: center;
         position: relative;
         padding: 10px;
@@ -650,15 +883,15 @@ export default {
         position: absolute;
         content:'';
         display: block;
-        width:431%;
+        width:367%;
         height:2px;
         background-color: #606266;
-        left:55%;
+        left:54%;
         top:-26px;
         border-radius: 50%
     }
     .process-diagram-twos{
-        width: 10%;
+        width: 12%;
         text-align: center;
         position: relative;
         padding: 10px;
@@ -680,16 +913,16 @@ export default {
         position: absolute;
         content:'';
         display: block;
-        width:431%;
+        width:367%;
         height:2px;
         background-color: #67C23A;
-        left:55%;
+        left:54%;
         top:-26px;
         border-radius: 50%
     }
     /*sange*/
     .process-diagram-san{
-        width: 10%;
+        width: 12%;
         text-align: center;
         position: relative;
         padding: 10px;
@@ -711,15 +944,15 @@ export default {
         position: absolute;
         content:'';
         display: block;
-        width:283%;
+        width:142%;
         height:2px;
         background-color: #606266;
-        left:55%;
+        left:52.5%;
         top:-26px;
         border-radius: 50%
     }
     .process-diagram-sans{
-        width: 10%;
+        width: 12%;
         text-align: center;
         position: relative;
         padding: 10px;
@@ -741,10 +974,10 @@ export default {
         position: absolute;
         content:'';
         display: block;
-        width:283%;
+        width:142%;
         height:2px;
         background-color: #67C23A;
-        left:55%;
+        left:52.5%;
         top:-26px;
         border-radius: 50%
     }